diff --git a/86.md b/86.md index 6f64eee7..dea9dcaf 100644 --- a/86.md +++ b/86.md @@ -17,7 +17,7 @@ When a relay receives an HTTP(s) request with a `Content-Type` header of `applic } ``` -Then it should return a response in the format +Then it should return a response in the below format: ```json { @@ -26,65 +26,383 @@ Then it should return a response in the format } ``` -This is the list of **methods** that may be supported: +## Standard Methods -* `supportedmethods`: - - params: `[]` - - result: `["", "", ...]` (an array with the names of all the other supported methods) -* `banpubkey`: - - params: `["<32-byte-hex-public-key>", ""]` - - result: `true` (a boolean always set to `true`) -* `listbannedpubkeys`: - - params: `[]` - - result: `[{"pubkey": "<32-byte-hex>", "reason": ""}, ...]`, an array of objects -* `allowpubkey`: - - params: `["<32-byte-hex-public-key>", ""]` - - result: `true` (a boolean always set to `true`) -* `listallowedpubkeys`: - - params: `[]` - - result: `[{"pubkey": "<32-byte-hex>", "reason": ""}, ...]`, an array of objects -* `listeventsneedingmoderation`: - - params: `[]` - - result: `[{"id": "<32-byte-hex>", "reason": ""}]`, an array of objects -* `allowevent`: - - params: `["<32-byte-hex-event-id>", ""]` - - result: `true` (a boolean always set to `true`) -* `banevent`: - - params: `["<32-byte-hex-event-id>", ""]` - - result: `true` (a boolean always set to `true`) -* `listbannedevents`: - - params: `[]` - - result: `[{"id": "<32-byte hex>", "reason": ""}, ...]`, an array of objects -* `changerelayname`: - - params: `[""]` - - result: `true` (a boolean always set to `true`) -* `changerelaydescription`: - - params: `[""]` - - result: `true` (a boolean always set to `true`) -* `changerelayicon`: - - params: `[""]` - - result: `true` (a boolean always set to `true`) -* `allowkind`: - - params: `[]` - - result: `true` (a boolean always set to `true`) -* `disallowkind`: - - params: `[]` - - result: `true` (a boolean always set to `true`) -* `listallowedkinds`: - - params: `[]` - - result: `[, ...]`, an array of numbers -* `blockip`: - - params: `["", ""]` - - result: `true` (a boolean always set to `true`) -* `unblockip`: - - params: `[""]` - - result: `true` (a boolean always set to `true`) -* `listblockedips`: - - params: `[]` - - result: `[{"ip": "", "reason": ""}, ...]`, an array of objects +Here is a list of **methods** that MAY be supported: + +### System + +* Supported methods + +**name:** `supported_methods` + +**params:** `[]` + +**result:** + +```json +["", "", /* rest of method names... */ ] +``` + +--- + +* Stats + +**name:** `stats` + +**params:** `[]` + +**result:** + +```jsonc +[ + { + "num_connections": , + "uptime": , + "bytes_received": , + "bytes_sent": , + "num_events": , + "event_bytes": , + "num_files": , + "file_bytes": + // and more... + } +] +``` + +Extra fields MAY be sent from relay depending on implementation. + +--- + +* Set NIP11 + +**name:** `set_nip11` + +**params:** + +```jsonc +[ + { + "name": "new name", + "description": "new description", + "icon": null // removes icon. + // and more... + } +] +``` + +**result:** + +```jsonc +true +``` + +The provided input is a potentially incomplete json object of [NIP-11](./11.md) document. +Relay SHOULD replace provides fields with new ones, add non existing fields and remove fields set to null. + +--- + +* List Events Needing Moderation + +**name:** `list_events_needing_moderation` + +**params:** `[]` + +**result:** + +```json +[{"id": "<32-byte-hex>", "reason": ""}] +``` + +Relay MAY return reported, muted profiles and similar events as result. + +* Write Policy + +* Ban pubkey + +**name:** `ban_pubkey` + +**params:** + +```json +["<32-byte-hex-public-key>", ""] +``` + +**result:** + +```json +true +``` + +Relay MAY remove events sent by `pubkey` and prevent new events from them to be written. + +--- + +* List Banned Pubkeys + +**name:** `list_banned_pubkeys` + +**params:** `[]` + +**result:** + +```json +[{"pubkey": "<32-byte-hex>", "reason": ""}, /* and more... */] +``` + +--- + +* Allow Pubkey + +**name:** `allow_pubkey` + +**params:** + +```json +["<32-byte-hex-public-key>", ""] +``` + +**result:** + +```json +true +``` + +--- + +* List Allowed Pubkeys + +**name:** `list_allowed_pubkeys` + +**params:** `[]` + +**result:** + +```json +[{"pubkey": "<32-byte-hex>", "reason": ""}, /* and more... */] +``` + +--- + +* Allow Event + +**name:** `allow_event` + +**params:** + +```json +["<32-byte-hex-event-id>", ""] +``` + +**result:** + +```json +true +``` + +--- + +* Ban Event + +**name:** `ban_event` + +**params:** + +```json +["<32-byte-hex-event-id>", ""] +``` + +**result:** + +```json +true +``` + +Relay SHOULD delete and prevent re-broadcasting of event. + +--- + +* List Banned Events + +**name:** `list_banned_events` + +**params:** `[]` + +**result:** + +```json +[{"id": "<32-byte hex>", "reason": ""}, ...] +``` + +--- + +* Allow Kinds + +**name:** `allow_kinds` + +**params:** + +```json +[, , /* and more... */] +``` + +**result:** + +```json +true +``` + +--- + +* Disallow Kinds + +**name:** `disallow_kinds` + +**params:** + +```json +[, , /* and more... */] +``` + +**result:** + +```json +true +``` + +--- + +* List Disallowed Kinds + +**name:** `list_disallow_kinds` + +**params:** `[]` + +**result:** + +```json +[, , /* and more... */] +``` + +--- + +* List Allowed Kinds + +**name:** `list_allowed_kinds` + +**params:** `[]` + +**result:** + +```json +[, , /* and more... */] +``` + +--- + +* Block IP + +**name:** `block_ip` + +**params:** + +```json +["", ""] +``` + +**result:** + +```json +true +``` + +--- + +* Unblock IP + +**name:** `unblock_ip` + +**params:** + +```json +[""] +``` + +**result:** + +```json +true +``` + +--- + +* List Blocked IPs + +**name:** `list_blocked_ips` + +**params:** `[]` + +**result:** + +```json +[{"ip": "", "reason": ""}, /* and more... */] +``` + +### Access control + +--- + +* Grant Admin + +**name:** `grant_admin` + +**params:** + +```jsonc +["<32-byte-hex-public-key>", { + "allowed_methods": [ + "method-name", + // an array of method names. + ] +}] +``` + +**result:** + +```json +true +``` + +If admin right is already granted, allowed methods list must be rewritten. + +--- + +* Revoke Admin + +**name:** `revoke_admin` + + +**params:** + +```jsonc +["<32-byte-hex-public-key>", { + "disallowed_methods": [ + "method-name", + // an array of method names. + ] +}] +``` + +**result:** + +```json +true +``` + +If resulting `allowed_methods` list for admin was empty, admin can be removed. ### Authorization -The request must contain an `Authorization` header with a valid [NIP-98](./98.md) event, except the `payload` tag is required. The `u` tag is the relay URL. +The request MUST contain an `Authorization` header with a valid [NIP-98](./98.md) event, except the `payload` tag is required. The `u` tag is the relay URL. -If `Authorization` is not provided or is invalid, the endpoint should return a 401 response. +If `Authorization` is not provided or is invalid, the endpoint should return a response with 401 status code.