UNPKG

ipns-did

Version:

Library for resolving, creating, and publishing DID documents over IPNS

1 lines 13.8 kB
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { DIDResolutionResult, Resolver } from \"did-resolver\";\nimport { IPFS } from \"ipfs-core-types\";\nimport * as IPNSMethod from \"ipns-did-resolver\";\n\nimport { BlockMulticodec } from \"multiformat-multicodec\";\nimport { BlockCodec } from \"multiformats/codecs/interface\";\nimport { Hasher } from \"multiformats/hashes/hasher\";\n\nimport { sha256 } from \"multiformats/hashes/sha2\";\nimport * as json from \"@ipld/dag-json\";\nimport * as cbor from \"@ipld/dag-cbor\";\nimport * as pb from \"@ipld/dag-pb\";\n\nexport { DIDResolutionResult } from \"did-resolver\";\n\nimport { DIDDocument } from \"did-doc\";\n\nimport * as ipns from \"ipns\";\nimport { PeerId } from \"@libp2p/interface-peer-id\";\nimport { CID } from \"multiformats\";\n\ntype MultidecoderParam = {\n codecs?: [BlockCodec<any, any>];\n hashers?: [Hasher<any, any>];\n};\n\nexport default function (opts: {\n ipfs: IPFS;\n multicodecs?: MultidecoderParam;\n}) {\n const { ipfs, multicodecs } = opts;\n\n const multicodec = new BlockMulticodec<DIDDocument>({\n codecs: [json, pb, cbor as any].concat(multicodecs?.codecs || ([] as any)),\n hashers: multicodecs?.hashers || [],\n });\n\n const ipnsResolver = IPNSMethod.getResolver(\n ipfs.block,\n ipfs.name,\n multicodec as any\n );\n const resolver = new Resolver(ipnsResolver);\n\n return {\n /**\n * Resolve an IPNS method DID into a document.\n * @throws Will throw if DID method isn't `ipns`\n * @throws Will throw if IPNS cannot resolve into an IPFS CID\n * @throws Will throw if the document can't be found, or if the given path can't be followed\n */\n async resolve(did: string): Promise<DIDResolutionResult> {\n return await resolver.resolve(did);\n },\n\n async _publishValue(\n value: any,\n codec: number = cbor.code,\n hasher: number = sha256.code\n ): Promise<CID> {\n const serialized = await multicodec.encode({\n codec,\n value,\n hasher,\n });\n\n // Discard the returned CID, as we already got it during serialization;\n // and the ipfs-core API isn't as dynamic in what codecs it supports as we\n // are.\n await ipfs.block.put(serialized.bytes);\n return serialized.cid.toV1();\n },\n\n /**\n * Publish a DID document to IPNS using a given peer ID.\n * @param {DIDDocument} doc The DID document to publish\n * @param {Object} opts Document serialization options\n * @param {number} opts.codec Code of the codec used to serialize\n * @param {number} opts.hasher Code of the hasher used to serialize\n * @param {PeerId} peerId The peer ID (keypair) used to create the IPNS block\n * @param {number} lifetime The lifetime (TTL) of the published document, in milliseconds\n * @throws {TypeError} Will throw if the passed document isn't valid\n * @returns Returns the CIDs of the document and IPNS blocks\n */\n async publishDid(\n doc: DIDDocument,\n opts: { codec?: number; hasher?: number },\n peerId: PeerId,\n lifetime: number\n ): Promise<{ ipnsCid: CID; docCid: CID }> {\n if (!DIDDocument.isDoc(doc))\n throw new TypeError(\"Passed doc isn't valid DID document\");\n\n const ipfsCid: CID = await this._publishValue(\n doc,\n opts.codec || cbor.code,\n opts.hasher || sha256.code\n );\n const ipfsPath = \"/ipfs/\" + ipfsCid.toString();\n const pathBytes = Buffer.from(ipfsPath);\n\n const ipnsCid = peerId.toCID();\n const strkey = \"/ipns/\" + ipnsCid.toString();\n\n let rev: bigint = BigInt(0);\n try {\n for await (const e of ipfs.dht.get(strkey)) {\n if (e.name === \"VALUE\") {\n rev = ipns.unmarshal(e.value).sequence + BigInt(1);\n }\n }\n } catch {}\n\n const ipnsEntry = await ipns.create(peerId, pathBytes, rev, lifetime);\n const ipnsBlock = ipns.marshal(ipnsEntry);\n\n for await (const m of ipfs.dht.put(strkey, ipnsBlock));\n\n return {\n docCid: ipfsCid,\n ipnsCid,\n };\n },\n\n peerIdToDid(peerId: PeerId) {\n return `did:ipns:${peerId.toCID()}`;\n },\n\n domainToDid(domain: string) {\n return `did:ipns:${domain}`;\n },\n };\n}\n"],"names":["pact","state","value","then","bind","s","observer","o","prototype","result","callback","onRejected","v","e","onFulfilled","thenable","opts","ipfs","multicodecs","multicodec","BlockMulticodec","codecs","json","pb","cbor","concat","hashers","ipnsResolver","IPNSMethod","getResolver","block","name","resolver","Resolver","resolve","did","_publishValue","codec","hasher","code","sha256","encode","serialized","put","bytes","cid","toV1","publishDid","doc","peerId","lifetime","DIDDocument","isDoc","TypeError","ipfsCid","ipns","create","pathBytes","rev","ipnsEntry","docCid","ipnsCid","ipnsBlock","marshal","dht","strkey","m","ipfsPath","toString","Buffer","from","toCID","BigInt","get","unmarshal","sequence","peerIdToDid","domainToDid","domain"],"mappings":"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"}