0.0.4 • Published 7 months ago

@blockcore/nostr-did-resolver v0.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Nostr DID Resolver (JS)

Library that helps resolve DID Documents (decentralized identities) from the "did:nostr" DID Method.

Specification: https://nostrcg.github.io/did-nostr/

Description

This library is a JavaScript implementation of the Nostr DID Resolver. It allows you to resolve DIDs (Decentralized Identifiers) using the Nostr protocol. The resolver constructs the DID document from the events retrieived specified relays (and user's relay list) and returns it in a standard format.

The relays provided (or default) will only be used to retrieve the relay list (kind:10002), upon retrieving the relay list, the resolver will use the relays from the list to retrieve the profile metadata (kind:0).

If the profile metadata is not found on the user's relays, it will fall back to the provided (or default) relays for another attempt at finding the user profile.

This ensures that Nostr can scale better and the initial bootstrapping is only to discover the relay list (kind:10002).

Usage

npm install did-resolver @blockcore/nostr-did-resolver
import is from '@blockcore/nostr-did-resolver';
import { Resolver } from 'did-resolver';

// These are the default relays if none is provided.
const relays = ['wss://relay.damus.io', 'wss://relay.primal.net', 'wss://nos.lol'];

const resolver = new Resolver(is.getResolver(relays));
const didResolution = await resolver.resolve('did:nostr:124c0fa99407182ece5a24fad9b7f6674902fc422843d3128d38a0afbee0fdd2');

Example

Here is example of the output from the resolve function:

{
{
  "didDocument": {
    "@context": [
      "https://www.w3.org/ns/did/v1"
    ],
    "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515",
    "verificationMethod": [
      {
        "@context": "https://www.w3.org/ns/cid/v1",
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#0",
        "type": "Multikey",
        "controller": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515",
        "publicKeyMultibase": "z6DtPPzVD8nXDKTHG3x8cx8UpoVP6VSBsXaDhSWcoysUnkEY"
      }
    ],
    "authentication": [
      "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#0"
    ],
    "assertionMethod": [
      "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#0"
    ],
    "capabilityDelegation": [
      "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#0"
    ],
    "capabilityInvocation": [
      "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#0"
    ],
    "service": [
      {
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#linked-domain",
        "type": "LinkedDomains",
        "serviceEndpoint": "https://sondreb.com"
      },
      {
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#1",
        "type": "Relay",
        "serviceEndpoint": "wss://relay.damus.io"
      },
      {
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#2",
        "type": "Relay",
        "serviceEndpoint": "wss://relay.primal.net"
      },
      {
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#3",
        "type": "Relay",
        "serviceEndpoint": "wss://purplepag.es"
      },
      {
        "id": "did:nostr:17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515#4",
        "type": "Relay",
        "serviceEndpoint": "wss://nos.lol"
      }
    ]
  },
  "didResolutionMetadata": {
    "contentType": "application/did+ld+json",
    "retrieved": "2025-04-06T12:14:21.770Z"
  },
  "didDocumentMetadata": {
    "created": 1732224363,
    "updated": 1732224363,
    "deactivated": false,
    "profile": {
      "about": "Developer of Blockcore Notes and Blockcore Wallet (Nostr browser extension).\nVoluntaryism. Decentralize everything.",
      "banner": "https://nostr.build/i/nostr.build_74ee63e85287e5b3351d757724e57d53d17b9f029bfad7d77dcb913b325727bb.png",
      "display_name": "SondreB",
      "lud16": "sondreb@npub.cash",
      "name": "sondreb",
      "nip05": "_@sondreb.com",
      "picture": "https://m.primal.net/OJWl.jpg",
      "website": "https://sondreb.com",
      "displayName": "SondreB",
      "pubkey": "17e2889fba01021d048a13fd0ba108ad31c38326295460c21e69c43fa8fbe515",
      "npub": "npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh",
      "created_at": 1732224363
    }
  }
}
0.0.4

7 months ago

0.0.3

7 months ago

0.0.2

7 months ago

0.0.1

7 months ago