- commit
- 9729b29b212565c217da6ea98ee470816a7ae1f4
- parent
- 7ca5a98fbaf92827fd1000638fbb06580a80ed89
- author
- Dami <dami.etoile@gmail.com>
| M | docs/ | 4 | ++++ |
| M | docs/ | 2 | ++ |
| M | src/ | 1 | + |
@@ -53,6 +53,10 @@ That is all. The relay speaks the standard protocol, so Damus, Amethyst, noStrud
5353 5454 A relay only helps once your clients know about it. On the Identity tab, **Tell your clients** has one row per list: your relay list (NIP-65), your DM inbox (NIP-17), your search relays and your Blossom servers. Each row fetches the newest copy of that list from this relay and a few well-known indexers, puts this relay first, and asks you to sign the result once. The merged list is sent here, to the relays it names, and to the indexers, so nothing you had listed is lost. **Remove me** publishes the list without this relay.5555 56+## Share your relay57+58+Every relay has a card: `https://<name>.bind.ws/card.svg` is a picture with the name, who may read and write, the fuel state and a QR of the group address, and `/card.json` has the same facts as data. The **Share** block on the Identity tab shows the card, the group naddr with a copy button, and an embed snippet for a profile or a page.59+5660 ## Invite people5761 5862 A new relay accepts writes from its members only. To add someone:@@ -67,6 +67,8 @@ On claim, the object generates a keypair, advertised as `self` in NIP-11. Everyt
6767 6868 NIP-43's own join and leave requests (28934 with a `claim` tag, 28936) are handled next to their NIP-29 counterparts; they are ephemeral, so the answer is the OK message and nothing is stored.6969 70+The card (`card.ts`) is the public face of a name: `/card.json` with name, owner, member count when the directory is public, rules, fuel state and the group naddr, `/card.nostr` as the same facts in a kind 30078 signed by the relay key, `/card.svg` as an open graph sized picture, and `/qr.svg` for the console. The naddr comes from nostr-tools' nip19; the QR encoder is `qr.ts`, byte mode at level M up to version 20, with a test that reads symbols back and checks the Reed-Solomon syndromes.71+7072 ## Groups and roles7173 7274 Every relay is one NIP-29 group (`src/groups.ts`). The group id is the relay's name. An event with an `h` tag for any other id is refused; events without one are ordinary relay events. The group's flags are derived from the rules: `private` is reads set to members, `restricted` and `closed` are writes not open. The identity signs the group's state as addressable events, kind 39000 metadata, 39001 admins, 39002 members (only while the directory is public), 39003 roles, on the same strictly increasing clock as the roster, and republishes them on every membership, role or rule change. Membership changes also produce relay-signed 9000 put-user and 9001 remove-user records next to the NIP-43 deltas. All of these are protected kinds.@@ -119,6 +119,7 @@ export function landing(req: Request, env: Env): Response {
119119 ["POST /nip96, GET /.well-known/nostr/nip96.json", "NIP-96", "NIP-98", "Same bucket and file list as Blossom. NIP-94 tags in every answer."],120120 ["GET /.well-known/nostr.json", "NIP-05", "none", "Members that have a name."],121121 ["GET /e/<id>, /a/<d>, /feed.xml", "pages, Atom", "none", "Notes and articles as pages with Open Graph tags, and a feed. Only when anyone may read."],122+ ["GET /card.json, /card.svg, /card.nostr", "card", "none", "A status card for links and profiles: members, rules, fuel, the group naddr as a QR. The .nostr form is signed by the relay key."],122123 ["GET /fuel, POST /fuel/invoice", "NIP-57", "none", "Gauges are public. The invoice comes from a signed zap request."],123124 ]);124125 const limits = table(["Parameter", "Default", "Range"], [