@ckb-ccc/did-ckb 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/barrel-CuyKQywc.mjs +2 -0
- package/dist/barrel-CuyKQywc.mjs.map +1 -0
- package/dist/barrel.d.mts +6 -12
- package/dist/barrel.d.mts.map +1 -1
- package/dist/barrel.mjs +1 -1
- package/dist/{index-CYtA0Eoh.d.mts → index-BXXtPNiw.d.mts} +1 -1
- package/dist/index-BXXtPNiw.d.mts.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/plc.d.mts +1 -1
- package/dist/plc.mjs +2 -1
- package/dist/plc.mjs.map +1 -0
- package/dist/rolldown-runtime-DK3Fl9T5.mjs +1 -0
- package/dist.commonjs/barrel-2Xya5Y02.js +2 -0
- package/dist.commonjs/barrel-2Xya5Y02.js.map +1 -0
- package/dist.commonjs/barrel.d.ts +6 -12
- package/dist.commonjs/barrel.d.ts.map +1 -1
- package/dist.commonjs/barrel.js +1 -1
- package/dist.commonjs/{index-CO-1f0jl.d.ts → index-GgT2hCAk.d.ts} +2 -2
- package/dist.commonjs/index-GgT2hCAk.d.ts.map +1 -0
- package/dist.commonjs/index.d.ts +1 -1
- package/dist.commonjs/index.js +1 -1
- package/dist.commonjs/plc.d.ts +1 -1
- package/dist.commonjs/plc.js +2 -1
- package/dist.commonjs/plc.js.map +1 -0
- package/dist.commonjs/rolldown-runtime-BIInC43l.js +1 -0
- package/package.json +25 -20
- package/src/migrate.ts +1 -1
- package/tsdown.config.mts +20 -9
- package/dist/barrel-YjafMaiQ.mjs +0 -2
- package/dist/barrel-YjafMaiQ.mjs.map +0 -1
- package/dist/chunk-km9CeSFt.mjs +0 -1
- package/dist/index-CYtA0Eoh.d.mts.map +0 -1
- package/dist/plc-CmmGqgSN.mjs +0 -2
- package/dist/plc-CmmGqgSN.mjs.map +0 -1
- package/dist.commonjs/barrel-BRZqGP1p.js +0 -1
- package/dist.commonjs/index-CO-1f0jl.d.ts.map +0 -1
- package/dist.commonjs/plc-Do-Enk0q.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @ckb-ccc/did-ckb
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [[`98597b5`](https://github.com/ckb-devrel/ccc/commit/98597b56eb6eeb029b72ea963649155dfe1f4215), [`bef9d0a`](https://github.com/ckb-devrel/ccc/commit/bef9d0a037fba045eab24d7ad55400fa26fbbffd), [`8067a08`](https://github.com/ckb-devrel/ccc/commit/8067a08de041ffd7a624adea0b594eb283e2634e), [`7019a1a`](https://github.com/ckb-devrel/ccc/commit/7019a1a7f765dfa7940cdfe51474bcd347f18ec6), [`9beee4d`](https://github.com/ckb-devrel/ccc/commit/9beee4d7f39e4b4b19919c5feb86e1c8be0e089d), [`2d4e701`](https://github.com/ckb-devrel/ccc/commit/2d4e701e54e9bf5247c2363490009acc5606c0ea), [`0eb8435`](https://github.com/ckb-devrel/ccc/commit/0eb8435d9694602fce3b7e6a95f04f793452a88d)]:
|
|
7
|
+
- @ckb-ccc/core@1.15.0
|
|
8
|
+
- @ckb-ccc/type-id@0.1.1
|
|
9
|
+
|
|
10
|
+
## 0.2.0
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]:
|
|
21
|
+
- @ckb-ccc/type-id@0.1.0
|
|
22
|
+
- @ckb-ccc/core@1.14.0
|
|
23
|
+
|
|
3
24
|
## 0.1.0
|
|
4
25
|
### Minor Changes
|
|
5
26
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{getRotationKeys as t,signRotationHash as n,t as r}from"./plc.mjs";import{ccc as i}from"@ckb-ccc/core";import{decode as a,encode as o}from"@ipld/dag-cbor";import{typeIdA as s}from"@ckb-ccc/type-id/advanced";function c(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var l,u,d,f;let p=l=class extends i.Entity.Base(){constructor(e,t){super(),this.document=e,this.localId=t}static from(e){return e instanceof l?e:new l(e.document,e.localId??void 0)}};p=l=c([i.codec(i.mol.table({document:i.mol.Bytes,localId:i.mol.StringOpt}).map({inMap:e=>({...e,document:i.hexFrom(o(e.document))}),outMap:e=>({...e,document:a(i.bytesFrom(e.document))})}))],p);let m=u=class extends i.Entity.Base(){constructor(e,t){super(),this.type=e,this.value=t}static from(e){return e instanceof u?e:new u(e.type??`v1`,p.from(e.value))}static fromV1(e){return new u(`v1`,p.from(e))}};m=u=c([i.codec(i.mol.union({v1:p}))],m);let h=d=class extends i.Entity.Base(){constructor(e,t,n){super(),this.history=e,this.sig=t,this.rotationKeyIndices=n}static from(e){return e instanceof d?e:new d(e.history,i.hexFrom(e.sig),e.rotationKeyIndices.map(i.numFrom))}};h=d=c([i.codec(i.mol.table({history:i.mol.BytesVec,sig:i.mol.Bytes,rotationKeyIndices:i.mol.Uint8Vec}).map({inMap:e=>({...e,history:e.history.map(e=>i.hexFrom(o(e)))}),outMap:e=>({...e,history:e.history.map(e=>a(i.bytesFrom(e)))})}))],h);let g=f=class extends i.Entity.Base(){constructor(e){super(),this.localIdAuthorization=e}static from(e){return e instanceof f?e:new f(h.from(e.localIdAuthorization))}};g=f=c([i.codec(i.mol.table({localIdAuthorization:h}))],g);const _=s.buildTypeIdOperations({async getScriptInfo(e){return e.getKnownScript(i.KnownScript.DidCkb)},codec:m,async calculateTypeId(e,t){return i.bytesFrom(i.hashTypeId(t.inputs[0],t.outputs.length)).slice(0,20)}});function v(e){return _.create(e)}async function y(e){return _.transfer(e)}async function b(e){return _.destroy(e)}const x=`did:ckb:`,S=`abcdefghijklmnopqrstuvwxyz234567`,C=(()=>{let e={};for(let t=0;t<32;t++)e[S[t]]=t;return e})();function w(e){let t=i.bytesFrom(e),n=0,r=0,a=``;for(let e=0;e<t.length;e++)for(r=r<<8|t[e],n+=8;n>=5;)a+=S[r>>>n-5&31],n-=5;return n>0&&(a+=S[r<<5-n&31]),a}function T(e){let t=e.toLowerCase().replace(/=+$/g,``),n=0,r=0,i=[];for(let e of t){let t=C[e];if(t===void 0)throw Error(`Invalid base32 character "${e}" in input`);r=r<<5|t,n+=5,n>=8&&(i.push(r>>>n-8&255),n-=8)}return Uint8Array.from(i)}function E(e){let t=i.bytesFrom(e);if(t.length!==20)throw Error(`did:ckb args must be 20 bytes, got ${t.length}`);return x+w(t)}function D(e){if(!e.startsWith(x))throw Error(`Expected did:ckb:..., got "${e}"`);let t=e.slice(8);if(t.length!==32)throw Error(`did:ckb identifier must be 32 base32 chars, got ${t.length}`);let n=T(t);if(n.length!==20)throw Error(`did:ckb identifier must decode to 20 bytes, got ${n.length}`);return i.hexFrom(n)}function O(e){if(!e.startsWith(x))return!1;try{return D(e),!0}catch{return!1}}async function k(e,t){let n=await e.getKnownScript(i.KnownScript.DidCkb);return i.Script.from({codeHash:n.codeHash,hashType:n.hashType,args:t})}function A(e,t){return{did:E(t),id:t,data:m.decode(e.outputData),cell:e}}async function j(e){let t=i.hexFrom(e.id),n=await k(e.client,t),r=await e.client.findSingletonCellByType(n,!0);if(r)return A(r,t)}async function M(e){if(!O(e.did))throw Error(`Not a did:ckb identifier: ${e.did}`);return j({client:e.client,id:D(e.did)})}async function N(e){let t=await e.client.getKnownScript(i.KnownScript.DidCkb),n=[];for await(let r of e.client.findCells({script:i.Script.from(e.lock),scriptType:`lock`,scriptSearchMode:`exact`,filter:{script:i.Script.from({codeHash:t.codeHash,hashType:t.hashType,args:`0x`})},withData:!0},e.order,e.limit)){let e=r.cellOutput.type;if(e&&i.bytesFrom(e.args).length===20)try{n.push(A(r,i.hexFrom(e.args)))}catch{}}return n}async function P(e){let t=typeof e.id==`string`&&O(e.id)?D(e.id):i.hexFrom(e.id),n=(await e.client.getKnownScript(i.KnownScript.DidCkb)).codeHash.toLowerCase(),r=t.toLowerCase(),a=e.liveCell??(await j({client:e.client,id:t}))?.cell;if(!a)return[];let o=[],s=e.maxSteps??50,c=0;for(;a&&c<s;){c++;let t=await e.client.getTransaction(a.outPoint.txHash);if(!t)break;let i=I(a,t.blockNumber);if(!i)break;let s=await F(e.client,t.transaction,n,r);if(!s){i.action=i.data.value.localId?`MIGRATE`:`CREATE`,o.push(i);break}i.action=`UPDATE`,o.push(i),a=s}return o}async function F(e,t,n,r){let{inputs:a}=i.Transaction.from(t);for(let t of a){let a;try{a=await t.getCell(e)}catch{continue}let o=a.cellOutput.type;if(o&&o.codeHash.toLowerCase()===n&&i.hexFrom(o.args).toLowerCase()===r)return a}}function I(e,t){try{let n=m.decode(e.outputData);return{action:`UPDATE`,txHash:e.outPoint.txHash,outputIndex:e.outPoint.index,blockNumber:t,capacity:e.cellOutput.capacity,data:n}}catch{return}}function L(e){let r=t(e.genesisOperation);if(!r[e.rotationKeyIndex])throw Error(`rotationKeyIndex ${e.rotationKeyIndex} out of range (genesis has ${r.length} keys)`);let a=e.curve??r[e.rotationKeyIndex].curve,o=n(e.rotationPrivateKey,i.bytesFrom(e.txHash),a);return g.from({localIdAuthorization:{history:[e.genesisOperation],sig:i.hexFrom(o),rotationKeyIndices:[e.selfSigIndex??0,e.rotationKeyIndex]}})}async function R(e){if(!e.sourceDid.startsWith(`did:plc:`))throw Error(`sourceDid must be did:plc:..., got "${e.sourceDid}"`);let t=e.data?.value?.document??{},n={type:e.data?.type??`v1`,value:{document:t,localId:e.sourceDid}};return v({signer:e.signer,data:n,receiver:e.receiver,tx:e.tx})}var z=e({DidCkbData:()=>m,DidCkbDataV1:()=>p,DidCkbWitness:()=>g,PlcAuthorization:()=>h,argsToDid:()=>E,base32Decode:()=>T,base32Encode:()=>w,buildMigrationWitness:()=>L,createDidCkb:()=>v,destroyDidCkb:()=>b,didToArgs:()=>D,findDidCkbCell:()=>j,getDidCkbHistory:()=>P,isDidCkb:()=>O,listDidCkbsByLock:()=>N,migrateDidCkb:()=>R,plc:()=>r,resolveDidCkb:()=>M,transferDidCkb:()=>y});export{p as _,j as a,E as c,D as d,O as f,m as g,y as h,P as i,T as l,b as m,L as n,N as o,v as p,R as r,M as s,z as t,w as u,g as v,h as y};
|
|
2
|
+
//# sourceMappingURL=barrel-CuyKQywc.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barrel-CuyKQywc.mjs","names":["cborEncode","cborDecode"],"sources":["../src/codec.ts","../src/didCkb.ts","../src/identifier.ts","../src/resolver.ts","../src/history.ts","../src/migrate.ts","../src/barrel.ts"],"sourcesContent":["import { ccc } from \"@ckb-ccc/core\";\nimport { decode as cborDecode, encode as cborEncode } from \"@ipld/dag-cbor\";\n\nexport type DidCkbDataV1Like = {\n document: unknown;\n localId?: string | null;\n};\n@ccc.codec(\n ccc.mol\n .table({\n document: ccc.mol.Bytes,\n localId: ccc.mol.StringOpt,\n })\n .map({\n inMap: (data: DidCkbDataV1Like) => ({\n ...data,\n document: ccc.hexFrom(cborEncode(data.document)),\n }),\n outMap: (data) => ({\n ...data,\n document: cborDecode(ccc.bytesFrom(data.document)),\n }),\n }),\n)\nexport class DidCkbDataV1 extends ccc.Entity.Base<\n DidCkbDataV1Like,\n DidCkbDataV1\n>() {\n constructor(\n public document: unknown,\n public localId?: string,\n ) {\n super();\n }\n\n static from(data: DidCkbDataV1Like): DidCkbDataV1 {\n if (data instanceof DidCkbDataV1) {\n return data;\n }\n\n return new DidCkbDataV1(data.document, data.localId ?? undefined);\n }\n}\n\nexport type DidCkbDataLike = {\n type?: \"v1\" | null;\n value: DidCkbDataV1Like;\n};\n@ccc.codec(\n ccc.mol.union({\n v1: DidCkbDataV1,\n }),\n)\nexport class DidCkbData extends ccc.Entity.Base<DidCkbDataLike, DidCkbData>() {\n constructor(\n public type: \"v1\",\n public value: DidCkbDataV1,\n ) {\n super();\n }\n\n static from(data: DidCkbDataLike): DidCkbData {\n if (data instanceof DidCkbData) {\n return data;\n }\n return new DidCkbData(data.type ?? \"v1\", DidCkbDataV1.from(data.value));\n }\n\n static fromV1(\n data: DidCkbDataV1Like,\n ): DidCkbData & { type: \"v1\"; value: DidCkbDataV1 } {\n return new DidCkbData(\"v1\", DidCkbDataV1.from(data));\n }\n}\n\nexport type PlcAuthorizationLike = {\n history: object[];\n sig: ccc.HexLike;\n rotationKeyIndices: ccc.NumLike[];\n};\n@ccc.codec(\n ccc.mol\n .table({\n history: ccc.mol.BytesVec,\n sig: ccc.mol.Bytes,\n rotationKeyIndices: ccc.mol.Uint8Vec,\n })\n\n .map({\n inMap: (data: PlcAuthorizationLike) => ({\n ...data,\n history: data.history.map((h) => ccc.hexFrom(cborEncode(h))),\n }),\n outMap: (data) => ({\n ...data,\n history: data.history.map((h) => cborDecode<object>(ccc.bytesFrom(h))),\n }),\n }),\n)\nexport class PlcAuthorization extends ccc.Entity.Base<\n PlcAuthorizationLike,\n PlcAuthorization\n>() {\n constructor(\n public history: object[],\n public sig: ccc.Hex,\n public rotationKeyIndices: ccc.Num[],\n ) {\n super();\n }\n\n static from(data: PlcAuthorizationLike): PlcAuthorization {\n if (data instanceof PlcAuthorization) {\n return data;\n }\n return new PlcAuthorization(\n data.history,\n ccc.hexFrom(data.sig),\n data.rotationKeyIndices.map(ccc.numFrom),\n );\n }\n}\n\nexport type DidCkbWitnessLike = {\n localIdAuthorization: PlcAuthorizationLike;\n};\n@ccc.codec(\n ccc.mol.table({\n localIdAuthorization: PlcAuthorization,\n }),\n)\nexport class DidCkbWitness extends ccc.Entity.Base<\n DidCkbWitnessLike,\n DidCkbWitness\n>() {\n constructor(public localIdAuthorization: PlcAuthorization) {\n super();\n }\n\n static from(data: DidCkbWitnessLike): DidCkbWitness {\n if (data instanceof DidCkbWitness) {\n return data;\n }\n return new DidCkbWitness(PlcAuthorization.from(data.localIdAuthorization));\n }\n}\n","import { ccc } from \"@ckb-ccc/core\";\nimport { typeIdA } from \"@ckb-ccc/type-id/advanced\";\nimport { DidCkbData, DidCkbDataLike } from \"./codec\";\n\nconst OPERATIONS = typeIdA.buildTypeIdOperations({\n async getScriptInfo(client: ccc.Client): Promise<ccc.ScriptInfo> {\n return client.getKnownScript(ccc.KnownScript.DidCkb);\n },\n codec: DidCkbData,\n async calculateTypeId(\n _: ccc.Client,\n tx: ccc.Transaction,\n ): Promise<ccc.HexLike> {\n return ccc\n .bytesFrom(ccc.hashTypeId(tx.inputs[0], tx.outputs.length))\n .slice(0, 20);\n },\n});\n\n/**\n * Create a DID CKB cell.\n *\n * @param props The arguments for creating the cell.\n * @param props.signer The signer to sign the transaction.\n * @param props.receiver The receiver script (optional).\n * @param props.data The output data.\n * @param props.tx The transaction skeleton (optional).\n */\nexport function createDidCkb(props: {\n signer: ccc.Signer;\n data: DidCkbDataLike;\n receiver?: ccc.ScriptLike | null;\n tx?: ccc.TransactionLike | null;\n}): Promise<{\n tx: ccc.Transaction;\n id: ccc.Hex;\n index: number;\n}> {\n return OPERATIONS.create(props);\n}\n\n/**\n * Transfer a DID CKB cell.\n *\n * @param props The arguments for transferring the cell.\n * @param props.client The client to communicate with CKB.\n * @param props.id The Type ID to transfer.\n * @param props.receiver The new receiver script.\n * @param props.tx The transaction skeleton (optional).\n * @param props.data The new output data or a transformer to update the data (optional).\n */\nexport async function transferDidCkb(props: {\n client: ccc.Client;\n id: ccc.HexLike;\n receiver: ccc.ScriptLike;\n tx?: ccc.TransactionLike | null;\n data?:\n | DidCkbDataLike\n | ((\n cell: ccc.Cell,\n data?: DidCkbData,\n ) => DidCkbDataLike | Promise<DidCkbDataLike>)\n | null;\n}): Promise<{\n tx: ccc.Transaction;\n inIndex: number;\n outIndex: number;\n}> {\n return OPERATIONS.transfer(props);\n}\n\n/**\n * Destroy a DID CKB cell.\n *\n * @param props The arguments for destroying the cell.\n * @param props.client The client to communicate with CKB.\n * @param props.id The Type ID to destroy.\n * @param props.tx The transaction skeleton (optional).\n */\nexport async function destroyDidCkb(props: {\n client: ccc.Client;\n id: ccc.HexLike;\n tx?: ccc.TransactionLike | null;\n}): Promise<{\n tx: ccc.Transaction;\n index: number;\n}> {\n return OPERATIONS.destroy(props);\n}\n","import { ccc } from \"@ckb-ccc/core\";\n\nconst DID_PREFIX = \"did:ckb:\";\nconst ARGS_LEN_BYTES = 20;\nconst DID_BODY_LEN = 32;\n\n// RFC 4648 base32, lowercase, no padding (WIP-01 §2.2.3).\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\nconst REVERSE = (() => {\n const map: Record<string, number> = {};\n for (let i = 0; i < ALPHABET.length; i++) {\n map[ALPHABET[i]] = i;\n }\n return map;\n})();\n\nexport function base32Encode(bytes: ccc.BytesLike): string {\n const buf = ccc.bytesFrom(bytes);\n let bits = 0;\n let value = 0;\n let output = \"\";\n for (let i = 0; i < buf.length; i++) {\n value = (value << 8) | buf[i];\n bits += 8;\n while (bits >= 5) {\n output += ALPHABET[(value >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) {\n output += ALPHABET[(value << (5 - bits)) & 31];\n }\n return output;\n}\n\nexport function base32Decode(input: string): ccc.Bytes {\n const cleaned = input.toLowerCase().replace(/=+$/g, \"\");\n let bits = 0;\n let value = 0;\n const output: number[] = [];\n for (const char of cleaned) {\n const v = REVERSE[char];\n if (v === undefined) {\n throw new Error(`Invalid base32 character \"${char}\" in input`);\n }\n value = (value << 5) | v;\n bits += 5;\n if (bits >= 8) {\n output.push((value >>> (bits - 8)) & 0xff);\n bits -= 8;\n }\n }\n return Uint8Array.from(output);\n}\n\n/**\n * Convert 20-byte Type ID args (the `id` returned from `createDidCkb`) to a\n * `did:ckb:` identifier string per WIP-01 §2.2.\n */\nexport function argsToDid(args: ccc.HexLike): string {\n const bytes = ccc.bytesFrom(args);\n if (bytes.length !== ARGS_LEN_BYTES) {\n throw new Error(\n `did:ckb args must be ${ARGS_LEN_BYTES} bytes, got ${bytes.length}`,\n );\n }\n return DID_PREFIX + base32Encode(bytes);\n}\n\n/**\n * Reverse of `argsToDid`. Validates the prefix, base32 length, and decoded\n * byte count.\n */\nexport function didToArgs(did: string): ccc.Hex {\n if (!did.startsWith(DID_PREFIX)) {\n throw new Error(`Expected did:ckb:..., got \"${did}\"`);\n }\n const body = did.slice(DID_PREFIX.length);\n // 20 bytes encode to exactly 32 base32 chars without padding. Any other\n // length silently truncates leftover bits, so reject it up front.\n if (body.length !== DID_BODY_LEN) {\n throw new Error(\n `did:ckb identifier must be ${DID_BODY_LEN} base32 chars, got ${body.length}`,\n );\n }\n const bytes = base32Decode(body);\n if (bytes.length !== ARGS_LEN_BYTES) {\n throw new Error(\n `did:ckb identifier must decode to ${ARGS_LEN_BYTES} bytes, got ${bytes.length}`,\n );\n }\n return ccc.hexFrom(bytes);\n}\n\nexport function isDidCkb(value: string): boolean {\n if (!value.startsWith(DID_PREFIX)) {\n return false;\n }\n try {\n didToArgs(value);\n return true;\n } catch {\n return false;\n }\n}\n","import { ccc } from \"@ckb-ccc/core\";\nimport { DidCkbData } from \"./codec\";\nimport { argsToDid, didToArgs, isDidCkb } from \"./identifier\";\n\nexport type DidCkbRecord = {\n /** The `did:ckb:` string identifying this cell. */\n did: string;\n /** 20-byte Type ID args (same value `createDidCkb` returned as `id`). */\n id: ccc.Hex;\n /** Decoded DidCkbData; `.value.document` is the CBOR-decoded document. */\n data: DidCkbData;\n /** The live DID Metadata Cell itself. */\n cell: ccc.Cell;\n};\n\nasync function didCkbTypeScript(\n client: ccc.Client,\n id: ccc.HexLike,\n): Promise<ccc.Script> {\n const scriptInfo = await client.getKnownScript(ccc.KnownScript.DidCkb);\n return ccc.Script.from({\n codeHash: scriptInfo.codeHash,\n hashType: scriptInfo.hashType,\n args: id,\n });\n}\n\nfunction decodeRecord(cell: ccc.Cell, id: ccc.Hex): DidCkbRecord {\n return {\n did: argsToDid(id),\n id,\n data: DidCkbData.decode(cell.outputData),\n cell,\n };\n}\n\n/**\n * Find the live DID Metadata Cell for a given Type ID and decode its data.\n *\n * Returns `undefined` when no live cell exists (the DID was never created or\n * has been destroyed).\n */\nexport async function findDidCkbCell(props: {\n client: ccc.Client;\n id: ccc.HexLike;\n}): Promise<DidCkbRecord | undefined> {\n const id = ccc.hexFrom(props.id);\n const type = await didCkbTypeScript(props.client, id);\n const cell = await props.client.findSingletonCellByType(type, true);\n if (!cell) {\n return undefined;\n }\n return decodeRecord(cell, id);\n}\n\n/**\n * Resolve a `did:ckb:` string to its live cell + decoded document.\n *\n * Throws if `did` is not a syntactically valid did:ckb identifier. Returns\n * `undefined` if the DID was created and then destroyed, or never existed.\n */\nexport async function resolveDidCkb(props: {\n client: ccc.Client;\n did: string;\n}): Promise<DidCkbRecord | undefined> {\n if (!isDidCkb(props.did)) {\n throw new Error(`Not a did:ckb identifier: ${props.did}`);\n }\n return findDidCkbCell({ client: props.client, id: didToArgs(props.did) });\n}\n\n/**\n * List every live DID Metadata Cell owned by the given lock. Useful for\n * dashboards that want to enumerate the DIDs an address controls.\n *\n * Cells whose data fails to decode (e.g. a future on-chain schema version) are\n * skipped, not thrown, so a single bad cell can't break the whole listing.\n */\nexport async function listDidCkbsByLock(props: {\n client: ccc.Client;\n lock: ccc.ScriptLike;\n limit?: number;\n order?: \"asc\" | \"desc\";\n}): Promise<DidCkbRecord[]> {\n const scriptInfo = await props.client.getKnownScript(ccc.KnownScript.DidCkb);\n const records: DidCkbRecord[] = [];\n\n // Filter by type.codeHash + hashType (args is prefix-matched against \"0x\",\n // which matches any args). This is the standard indexer pattern for\n // \"any cell of this type, regardless of identifier\".\n for await (const cell of props.client.findCells(\n {\n script: ccc.Script.from(props.lock),\n scriptType: \"lock\",\n scriptSearchMode: \"exact\",\n filter: {\n script: ccc.Script.from({\n codeHash: scriptInfo.codeHash,\n hashType: scriptInfo.hashType,\n args: \"0x\",\n }),\n },\n withData: true,\n },\n props.order,\n props.limit,\n )) {\n const type = cell.cellOutput.type;\n if (!type) {\n continue;\n }\n const argsBytes = ccc.bytesFrom(type.args);\n if (argsBytes.length !== 20) {\n continue;\n }\n try {\n records.push(decodeRecord(cell, ccc.hexFrom(type.args)));\n } catch {\n // Skip unparseable cells rather than fail the whole listing.\n }\n }\n return records;\n}\n","import { ccc } from \"@ckb-ccc/core\";\nimport { DidCkbData } from \"./codec\";\nimport { didToArgs, isDidCkb } from \"./identifier\";\nimport { findDidCkbCell } from \"./resolver\";\n\nexport type HistoryAction = \"CREATE\" | \"UPDATE\" | \"MIGRATE\";\n\nexport type HistoryEntry = {\n /**\n * `CREATE` for a fresh mint, `MIGRATE` for a did:plc import (genesis cell\n * with a `localId` set), `UPDATE` for every subsequent transfer.\n */\n action: HistoryAction;\n txHash: ccc.Hex;\n outputIndex: ccc.Num;\n blockNumber?: ccc.Num;\n capacity: ccc.Num;\n data: DidCkbData;\n};\n\nconst DEFAULT_MAX_STEPS = 50;\n\n/**\n * Walk the DID cell chain backwards to produce the ordered list of operations\n * applied to a DID.\n *\n * Each `transferDidCkb` consumes the previous DID cell as an input and creates\n * a new one with the same Type ID args; the genesis (`createDidCkb` /\n * `createDidCkb` with localId) has no DID input. We start from the live cell,\n * read its tx, look for the prior DID cell among the inputs, and repeat. The\n * first entry returned is the newest (most recent transfer); the last is the\n * genesis.\n *\n * Cost: roughly one `getTransaction` call per step plus one `input.getCell`\n * lookup per non-DID input on each step. `input.getCell` goes through the\n * client's cell cache, so repeated walks over the same chain are cheap.\n */\nexport async function getDidCkbHistory(props: {\n client: ccc.Client;\n /**\n * Either the 20-byte Type ID args hex returned by `createDidCkb`, or a\n * `did:ckb:` URI. URIs are converted via `didToArgs`.\n */\n id: ccc.HexLike | string;\n /** Pre-resolved live cell; if omitted, we fetch it. */\n liveCell?: ccc.Cell;\n /** Safety bound to prevent runaway walks. Default 50. */\n maxSteps?: number;\n}): Promise<HistoryEntry[]> {\n const id =\n typeof props.id === \"string\" && isDidCkb(props.id)\n ? didToArgs(props.id)\n : ccc.hexFrom(props.id);\n const scriptInfo = await props.client.getKnownScript(ccc.KnownScript.DidCkb);\n const codeHash = scriptInfo.codeHash.toLowerCase();\n const normalizedId = id.toLowerCase();\n\n let cell: ccc.Cell | undefined =\n props.liveCell ??\n (await findDidCkbCell({ client: props.client, id }))?.cell;\n if (!cell) {\n return [];\n }\n\n const history: HistoryEntry[] = [];\n const maxSteps = props.maxSteps ?? DEFAULT_MAX_STEPS;\n let steps = 0;\n\n while (cell && steps < maxSteps) {\n steps++;\n const tx = await props.client.getTransaction(cell.outPoint.txHash);\n if (!tx) {\n break;\n }\n\n const entry = decodeEntry(cell, tx.blockNumber);\n if (!entry) {\n break;\n }\n\n const prior = await findPriorDidCell(\n props.client,\n tx.transaction,\n codeHash,\n normalizedId,\n );\n\n if (!prior) {\n // No DID input means this tx is the genesis. If the genesis carries a\n // `localId` it's a did:plc migration; otherwise a plain CREATE.\n entry.action = entry.data.value.localId ? \"MIGRATE\" : \"CREATE\";\n history.push(entry);\n break;\n }\n\n entry.action = \"UPDATE\";\n history.push(entry);\n cell = prior;\n }\n\n return history;\n}\n\nasync function findPriorDidCell(\n client: ccc.Client,\n tx: ccc.TransactionLike,\n codeHash: string,\n id: string,\n): Promise<ccc.Cell | undefined> {\n const { inputs } = ccc.Transaction.from(tx);\n for (const input of inputs) {\n let cell: ccc.Cell;\n try {\n cell = await input.getCell(client);\n } catch {\n // Skip inputs whose previous output we can't fetch; they can't be the\n // prior DID cell anyway, so the walk should keep looking at siblings.\n continue;\n }\n const type = cell.cellOutput.type;\n if (!type) {\n continue;\n }\n if (type.codeHash.toLowerCase() !== codeHash) {\n continue;\n }\n if (ccc.hexFrom(type.args).toLowerCase() !== id) {\n continue;\n }\n return cell;\n }\n return undefined;\n}\n\nfunction decodeEntry(\n cell: ccc.Cell,\n blockNumber?: ccc.Num,\n): HistoryEntry | undefined {\n try {\n const data = DidCkbData.decode(cell.outputData);\n return {\n action: \"UPDATE\",\n txHash: cell.outPoint.txHash,\n outputIndex: cell.outPoint.index,\n blockNumber,\n capacity: cell.cellOutput.capacity,\n data,\n };\n } catch {\n return undefined;\n }\n}\n","import { ccc } from \"@ckb-ccc/core\";\nimport { DidCkbDataLike, DidCkbWitness } from \"./codec\";\nimport { createDidCkb } from \"./didCkb\";\nimport {\n getRotationKeys,\n signRotationHash,\n type Curve,\n type PlcOperation,\n} from \"./plc\";\n\n/**\n * Build the migration witness payload that authorizes a did:plc -> did:ckb\n * import. Pure: takes a tx hash + signing material, returns a typed\n * `DidCkbWitness` that the caller wraps in a `WitnessArgs.outputType` field.\n *\n * Per WIP-02 §3.1.1 we send only the genesis operation in `history`. The\n * contract recomputes the genesis CID over the CBOR-encoded op, verifies the\n * self-signature inside it, then verifies `sig` against\n * `history[0].rotationKeys[rotationKeyIndex]`.\n *\n * `selfSigIndex` defaults to 0 because PLC genesis ops are conventionally\n * self-signed by the first rotation key; override if the genesis you're\n * migrating used a different one.\n */\nexport function buildMigrationWitness(props: {\n txHash: ccc.HexLike;\n genesisOperation: PlcOperation;\n rotationKeyIndex: number;\n rotationPrivateKey: ccc.BytesLike;\n curve?: Curve;\n selfSigIndex?: number;\n}): DidCkbWitness {\n const rotationKeys = getRotationKeys(props.genesisOperation);\n if (!rotationKeys[props.rotationKeyIndex]) {\n throw new Error(\n `rotationKeyIndex ${props.rotationKeyIndex} out of range (genesis has ${rotationKeys.length} keys)`,\n );\n }\n const curve = props.curve ?? rotationKeys[props.rotationKeyIndex].curve;\n const sig = signRotationHash(\n props.rotationPrivateKey,\n ccc.bytesFrom(props.txHash),\n curve,\n );\n return DidCkbWitness.from({\n localIdAuthorization: {\n history: [props.genesisOperation],\n sig: ccc.hexFrom(sig),\n rotationKeyIndices: [props.selfSigIndex ?? 0, props.rotationKeyIndex],\n },\n });\n}\n\n/**\n * Build a create tx whose output declares an imported did:plc identifier in\n * its `localId` field. Equivalent to calling `createDidCkb` with\n * `data.value.localId = sourceDid`; provided as a named helper for symmetry\n * with the other DID operations and so `did:plc:` migrations have an\n * obvious entry point.\n *\n * The caller is responsible for: completing inputs + fee, building the\n * migration witness with `buildMigrationWitness`, and setting it at the\n * witness slot of input 0. See `packages/examples/src/migrateDid.ts` for the\n * full flow.\n */\nexport async function migrateDidCkb(props: {\n signer: ccc.Signer;\n sourceDid: string;\n data?: DidCkbDataLike | null;\n receiver?: ccc.ScriptLike | null;\n tx?: ccc.TransactionLike | null;\n}): Promise<{\n tx: ccc.Transaction;\n id: ccc.Hex;\n index: number;\n}> {\n if (!props.sourceDid.startsWith(\"did:plc:\")) {\n throw new Error(`sourceDid must be did:plc:..., got \"${props.sourceDid}\"`);\n }\n const document = props.data?.value?.document ?? {};\n const data: DidCkbDataLike = {\n type: props.data?.type ?? \"v1\",\n value: {\n document,\n localId: props.sourceDid,\n },\n };\n return createDidCkb({\n signer: props.signer,\n data,\n receiver: props.receiver,\n tx: props.tx,\n });\n}\n","export * from \"./codec.js\";\nexport * from \"./didCkb.js\";\nexport * from \"./history.js\";\nexport * from \"./identifier.js\";\nexport * from \"./migrate.js\";\nexport * as plc from \"./plc/index.js\";\nexport * from \"./resolver.js\";\n"],"mappings":"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"}
|
package/dist/barrel.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PlcOperation, s as index_d_exports, t as Curve } from "./index-
|
|
1
|
+
import { n as PlcOperation, s as index_d_exports, t as Curve } from "./index-BXXtPNiw.mjs";
|
|
2
2
|
import { ccc } from "@ckb-ccc/core";
|
|
3
3
|
|
|
4
4
|
//#region src/codec.d.ts
|
|
@@ -192,10 +192,8 @@ declare function getDidCkbHistory(props: {
|
|
|
192
192
|
* Either the 20-byte Type ID args hex returned by `createDidCkb`, or a
|
|
193
193
|
* `did:ckb:` URI. URIs are converted via `didToArgs`.
|
|
194
194
|
*/
|
|
195
|
-
id: ccc.HexLike | string;
|
|
196
|
-
/**
|
|
197
|
-
liveCell?: ccc.Cell;
|
|
198
|
-
/** Safety bound to prevent runaway walks. Default 50. */
|
|
195
|
+
id: ccc.HexLike | string; /** Pre-resolved live cell; if omitted, we fetch it. */
|
|
196
|
+
liveCell?: ccc.Cell; /** Safety bound to prevent runaway walks. Default 50. */
|
|
199
197
|
maxSteps?: number;
|
|
200
198
|
}): Promise<HistoryEntry[]>;
|
|
201
199
|
//#endregion
|
|
@@ -263,13 +261,9 @@ declare function migrateDidCkb(props: {
|
|
|
263
261
|
//#endregion
|
|
264
262
|
//#region src/resolver.d.ts
|
|
265
263
|
type DidCkbRecord = {
|
|
266
|
-
/** The `did:ckb:` string identifying this cell. */
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
id: ccc.Hex;
|
|
270
|
-
/** Decoded DidCkbData; `.value.document` is the CBOR-decoded document. */
|
|
271
|
-
data: DidCkbData;
|
|
272
|
-
/** The live DID Metadata Cell itself. */
|
|
264
|
+
/** The `did:ckb:` string identifying this cell. */did: string; /** 20-byte Type ID args (same value `createDidCkb` returned as `id`). */
|
|
265
|
+
id: ccc.Hex; /** Decoded DidCkbData; `.value.document` is the CBOR-decoded document. */
|
|
266
|
+
data: DidCkbData; /** The live DID Metadata Cell itself. */
|
|
273
267
|
cell: ccc.Cell;
|
|
274
268
|
};
|
|
275
269
|
/**
|
package/dist/barrel.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barrel.d.mts","names":[],"sources":["../src/codec.ts","../src/didCkb.ts","../src/history.ts","../src/identifier.ts","../src/migrate.ts","../src/resolver.ts","../src/barrel.ts"],"
|
|
1
|
+
{"version":3,"file":"barrel.d.mts","names":[],"sources":["../src/codec.ts","../src/didCkb.ts","../src/history.ts","../src/identifier.ts","../src/migrate.ts","../src/resolver.ts","../src/barrel.ts"],"mappings":"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"}
|
package/dist/barrel.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,u as h,v as g,y as _}from"./barrel-
|
|
1
|
+
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,u as h,v as g,y as _}from"./barrel-CuyKQywc.mjs";import{t as v}from"./plc.mjs";export{a as DidCkbData,e as DidCkbDataV1,g as DidCkbWitness,_ as PlcAuthorization,n as argsToDid,c as base32Decode,h as base32Encode,u as buildMigrationWitness,f as createDidCkb,l as destroyDidCkb,r as didToArgs,t as findDidCkbCell,s as getDidCkbHistory,i as isDidCkb,d as listDidCkbsByLock,p as migrateDidCkb,v as plc,m as resolveDidCkb,o as transferDidCkb};
|
|
@@ -64,4 +64,4 @@ declare function signRotationHash(privateKey: ccc.BytesLike, txHash: ccc.BytesLi
|
|
|
64
64
|
declare function verifyPrivateKeyMatch(privateKey: ccc.BytesLike, expectedPubkey: ccc.BytesLike, curve: Curve): boolean;
|
|
65
65
|
//#endregion
|
|
66
66
|
export { getGenesisOperation as a, parseDidKey as c, fetchPlcLog as i, signRotationHash as l, PlcOperation as n, getRotationKeys as o, PlcRotationKey as r, index_d_exports as s, Curve as t, verifyPrivateKeyMatch as u };
|
|
67
|
-
//# sourceMappingURL=index-
|
|
67
|
+
//# sourceMappingURL=index-BXXtPNiw.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BXXtPNiw.d.mts","names":[],"sources":["../src/plc/index.ts"],"mappings":";;;;;;KAgBY,KAAA;AAAA,KAEA,cAAA;EACV,MAAA;EACA,KAAA,EAAO,KAAA;EACP,gBAAA,EAAkB,GAAA,CAAI,KAAK;AAAA;AAAA,KAGjB,YAAA;EACV,IAAA;EACA,YAAA;EACA,mBAAA,GAAsB,MAAA;EACtB,WAAA;EACA,QAAA,GAAW,MAAM;IAAW,IAAA;IAAc,QAAA;EAAA;EAC1C,IAAA;EACA,GAAA;EAEA,UAAA;EACA,WAAA;EACA,MAAA;EACA,OAAA;EAAA,CACC,GAAA;AAAA;;;;;iBAOmB,WAAA,CACpB,GAAA,UACA,SAAA,YACC,OAAO,CAAC,YAAA;AAAA,iBAeK,mBAAA,CAAoB,GAAA,EAAK,YAAA,KAAiB,YAAY;;AAzCzC;AAG7B;;;;;iBAoDgB,eAAA,CAAgB,EAAA,EAAI,YAAA,GAAe,cAAc;AAAA,iBAsBjD,WAAA,CAAY,MAAA;EAC1B,KAAA,EAAO,KAAA;EACP,gBAAA,EAAkB,GAAA,CAAI,KAAK;AAAA;;;;;;;;;;;iBAoCb,gBAAA,CACd,UAAA,EAAY,GAAA,CAAI,SAAA,EAChB,MAAA,EAAQ,GAAA,CAAI,SAAA,EACZ,KAAA,EAAO,KAAA,GACN,GAAA,CAAI,KAAA;AAvGO;AAOd;;;;AAPc,iBAmIE,qBAAA,CACd,UAAA,EAAY,GAAA,CAAI,SAAA,EAChB,cAAA,EAAgB,GAAA,CAAI,SAAA,EACpB,KAAA,EAAO,KAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { s as index_d_exports } from "./index-
|
|
1
|
+
import { s as index_d_exports } from "./index-BXXtPNiw.mjs";
|
|
2
2
|
import { DidCkbData, DidCkbDataLike, DidCkbDataV1, DidCkbDataV1Like, DidCkbRecord, DidCkbWitness, DidCkbWitnessLike, HistoryAction, HistoryEntry, PlcAuthorization, PlcAuthorizationLike, argsToDid, base32Decode, base32Encode, buildMigrationWitness, createDidCkb, destroyDidCkb, didToArgs, findDidCkbCell, getDidCkbHistory, isDidCkb, listDidCkbsByLock, migrateDidCkb, resolveDidCkb, t as barrel_d_exports, transferDidCkb } from "./barrel.mjs";
|
|
3
3
|
export { DidCkbData, DidCkbDataLike, DidCkbDataV1, DidCkbDataV1Like, DidCkbRecord, DidCkbWitness, DidCkbWitnessLike, HistoryAction, HistoryEntry, PlcAuthorization, PlcAuthorizationLike, argsToDid, base32Decode, base32Encode, buildMigrationWitness, createDidCkb, destroyDidCkb, barrel_d_exports as didCkb, didToArgs, findDidCkbCell, getDidCkbHistory, isDidCkb, listDidCkbsByLock, migrateDidCkb, index_d_exports as plc, resolveDidCkb, transferDidCkb };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _,y as v}from"./barrel-
|
|
1
|
+
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _,y as v}from"./barrel-CuyKQywc.mjs";import{t as y}from"./plc.mjs";export{a as DidCkbData,e as DidCkbDataV1,_ as DidCkbWitness,v as PlcAuthorization,n as argsToDid,c as base32Decode,g as base32Encode,u as buildMigrationWitness,f as createDidCkb,l as destroyDidCkb,h as didCkb,r as didToArgs,t as findDidCkbCell,s as getDidCkbHistory,i as isDidCkb,d as listDidCkbsByLock,p as migrateDidCkb,y as plc,m as resolveDidCkb,o as transferDidCkb};
|
package/dist/plc.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as getGenesisOperation, c as parseDidKey, i as fetchPlcLog, l as signRotationHash, n as PlcOperation, o as getRotationKeys, r as PlcRotationKey, t as Curve, u as verifyPrivateKeyMatch } from "./index-
|
|
1
|
+
import { a as getGenesisOperation, c as parseDidKey, i as fetchPlcLog, l as signRotationHash, n as PlcOperation, o as getRotationKeys, r as PlcRotationKey, t as Curve, u as verifyPrivateKeyMatch } from "./index-BXXtPNiw.mjs";
|
|
2
2
|
export { Curve, PlcOperation, PlcRotationKey, fetchPlcLog, getGenesisOperation, getRotationKeys, parseDidKey, signRotationHash, verifyPrivateKeyMatch };
|
package/dist/plc.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{ccc as t}from"@ckb-ccc/core";import{p256 as n}from"@noble/curves/nist.js";import{secp256k1 as r}from"@noble/curves/secp256k1.js";var i=e({fetchPlcLog:()=>a,getGenesisOperation:()=>o,getRotationKeys:()=>s,parseDidKey:()=>c,signRotationHash:()=>l,verifyPrivateKeyMatch:()=>u});async function a(e,t=`https://plc.directory`){if(!e.startsWith(`did:plc:`))throw Error(`Expected did:plc identifier, got "${e}"`);let n=await fetch(`${t}/${e}/log`);if(!n.ok)throw Error(`PLC log fetch failed (${n.status} ${n.statusText})`);let r=await n.json();if(!Array.isArray(r)||r.length===0)throw Error(`PLC log empty or malformed`);return r}function o(e){if(e.length===0)throw Error(`Empty PLC log`);return e[0]}function s(e){let t=[];return e.rotationKeys?.length?t.push(...e.rotationKeys):(e.signingKey||e.recoveryKey)&&(e.signingKey&&t.push(e.signingKey),e.recoveryKey&&t.push(e.recoveryKey)),t.map(e=>{let t=c(e);return{didKey:e,curve:t.curve,compressedPubkey:t.compressedPubkey}})}function c(e){if(!e.startsWith(`did:key:z`))throw Error(`Expected did:key:z..., got "${e}"`);let t=f(e.slice(9));if(t.length!==35)throw Error(`did:key payload must be 35 bytes (2-byte multicodec tag + 33-byte compressed pubkey), got ${t.length}`);let n=t[0],r=t[1],i;if(n===231&&r===1)i=`secp256k1`;else if(n===128&&r===36)i=`p256`;else throw Error(`Unrecognised did:key multicodec tag: 0x${n.toString(16).padStart(2,`0`)} 0x${r.toString(16).padStart(2,`0`)}`);return{curve:i,compressedPubkey:t.slice(2)}}function l(e,i,a){let o=t.bytesFrom(i);if(o.length!==32)throw Error(`Expected 32-byte tx hash, got ${o.length}`);let s=t.bytesFrom(e);if(s.length!==32)throw Error(`Expected 32-byte private key, got ${s.length}`);return a===`secp256k1`?r.sign(o,s,{prehash:!0,lowS:!0,format:`compact`}):n.sign(o,s,{prehash:!0,lowS:!0,format:`compact`})}function u(e,i,a){let o=t.bytesFrom(e);if(o.length!==32)return!1;let s=t.bytesFrom(i),c=a===`secp256k1`?r.getPublicKey(o,!0):n.getPublicKey(o,!0);if(c.length!==s.length)return!1;for(let e=0;e<c.length;e++)if(c[e]!==s[e])return!1;return!0}const d=(()=>{let e={};for(let t=0;t<58;t++)e[`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`[t]]=t;return e})();function f(e){if(e.length===0)return new Uint8Array;let t=0;for(;t<e.length&&e[t]===`1`;)t++;let n=0n;for(let r=t;r<e.length;r++){let t=e[r],i=d[t];if(i===void 0)throw Error(`Invalid base58 character "${t}"`);n=n*58n+BigInt(i)}let r=[];for(;n>0n;)r.unshift(Number(n&255n)),n>>=8n;return Uint8Array.from([...Array(t).fill(0),...r])}export{a as fetchPlcLog,o as getGenesisOperation,s as getRotationKeys,c as parseDidKey,l as signRotationHash,i as t,u as verifyPrivateKeyMatch};
|
|
2
|
+
//# sourceMappingURL=plc.mjs.map
|
package/dist/plc.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plc.mjs","names":[],"sources":["../src/plc/index.ts"],"sourcesContent":["import { ccc } from \"@ckb-ccc/core\";\nimport { p256 } from \"@noble/curves/nist.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\n\n/**\n * Minimal did:plc helpers, scoped to what a did:ckb migration needs:\n * fetch the op log from the public PLC directory, parse rotation keys, and\n * sign a 32-byte CKB transaction hash with a rotation private key.\n *\n * The on-chain contract is happy with a history of length 1 (WIP-02 §3.1.1\n * RECOMMENDs the genesis-only form), so we don't walk the full op chain\n * client-side.\n */\n\nconst PLC_DIRECTORY = \"https://plc.directory\";\n\nexport type Curve = \"secp256k1\" | \"p256\";\n\nexport type PlcRotationKey = {\n didKey: string;\n curve: Curve;\n compressedPubkey: ccc.Bytes;\n};\n\nexport type PlcOperation = {\n type: string;\n rotationKeys?: string[];\n verificationMethods?: Record<string, string>;\n alsoKnownAs?: string[];\n services?: Record<string, { type: string; endpoint: string }>;\n prev: string | null;\n sig: string;\n // Legacy `create` op fields:\n signingKey?: string;\n recoveryKey?: string;\n handle?: string;\n service?: string;\n [key: string]: unknown;\n};\n\n/**\n * Fetch the operation log for a did:plc identifier from the public directory.\n * Pass a custom directory URL when targeting a staging environment.\n */\nexport async function fetchPlcLog(\n did: string,\n directory: string = PLC_DIRECTORY,\n): Promise<PlcOperation[]> {\n if (!did.startsWith(\"did:plc:\")) {\n throw new Error(`Expected did:plc identifier, got \"${did}\"`);\n }\n const res = await fetch(`${directory}/${did}/log`);\n if (!res.ok) {\n throw new Error(`PLC log fetch failed (${res.status} ${res.statusText})`);\n }\n const data: unknown = await res.json();\n if (!Array.isArray(data) || data.length === 0) {\n throw new Error(\"PLC log empty or malformed\");\n }\n return data as PlcOperation[];\n}\n\nexport function getGenesisOperation(log: PlcOperation[]): PlcOperation {\n if (log.length === 0) {\n throw new Error(\"Empty PLC log\");\n }\n return log[0];\n}\n\n/**\n * Surface the rotation keys declared in a genesis op as a uniform list. PLC\n * genesis comes in two shapes: the modern `plc_operation` (with\n * `rotationKeys`) and the deprecated `create` (with `signingKey` +\n * `recoveryKey`). The on-chain contract treats the legacy form as\n * `[signingKey, recoveryKey]`, so we expose the same order.\n */\nexport function getRotationKeys(op: PlcOperation): PlcRotationKey[] {\n const keys: string[] = [];\n if (op.rotationKeys?.length) {\n keys.push(...op.rotationKeys);\n } else if (op.signingKey || op.recoveryKey) {\n if (op.signingKey) {\n keys.push(op.signingKey);\n }\n if (op.recoveryKey) {\n keys.push(op.recoveryKey);\n }\n }\n return keys.map((didKey) => {\n const parsed = parseDidKey(didKey);\n return {\n didKey,\n curve: parsed.curve,\n compressedPubkey: parsed.compressedPubkey,\n };\n });\n}\n\nexport function parseDidKey(didKey: string): {\n curve: Curve;\n compressedPubkey: ccc.Bytes;\n} {\n if (!didKey.startsWith(\"did:key:z\")) {\n throw new Error(`Expected did:key:z..., got \"${didKey}\"`);\n }\n const raw = base58btcDecode(didKey.slice(\"did:key:z\".length));\n if (raw.length !== 35) {\n throw new Error(\n `did:key payload must be 35 bytes (2-byte multicodec tag + 33-byte compressed pubkey), got ${raw.length}`,\n );\n }\n const tag1 = raw[0];\n const tag2 = raw[1];\n let curve: Curve;\n if (tag1 === 0xe7 && tag2 === 0x01) {\n curve = \"secp256k1\";\n } else if (tag1 === 0x80 && tag2 === 0x24) {\n curve = \"p256\";\n } else {\n throw new Error(\n `Unrecognised did:key multicodec tag: 0x${tag1.toString(16).padStart(2, \"0\")} 0x${tag2.toString(16).padStart(2, \"0\")}`,\n );\n }\n return { curve, compressedPubkey: raw.slice(2) };\n}\n\n/**\n * Sign a 32-byte CKB tx hash with a PLC rotation private key.\n *\n * The on-chain validator runs k256/p256's `Verifier::verify` which internally\n * SHA-256 hashes the message before checking the ECDSA signature. Noble's\n * default is the opposite (treat input as already-hashed), so we pass\n * `prehash: true` to make noble apply SHA-256 internally and match the\n * contract. Output is canonical low-s 64-byte compact form, identical to\n * what @atproto/crypto's Keypair.sign produces.\n */\nexport function signRotationHash(\n privateKey: ccc.BytesLike,\n txHash: ccc.BytesLike,\n curve: Curve,\n): ccc.Bytes {\n const hash = ccc.bytesFrom(txHash);\n if (hash.length !== 32) {\n throw new Error(`Expected 32-byte tx hash, got ${hash.length}`);\n }\n const priv = ccc.bytesFrom(privateKey);\n if (priv.length !== 32) {\n throw new Error(`Expected 32-byte private key, got ${priv.length}`);\n }\n if (curve === \"secp256k1\") {\n return secp256k1.sign(hash, priv, {\n prehash: true,\n lowS: true,\n format: \"compact\",\n });\n }\n return p256.sign(hash, priv, {\n prehash: true,\n lowS: true,\n format: \"compact\",\n });\n}\n\n/**\n * Quick sanity check: derive the public key from `privateKey` and compare\n * against `expectedPubkey`. Lets a UI tell the user \"wrong key for this\n * rotation slot\" without waiting for an on-chain rejection.\n */\nexport function verifyPrivateKeyMatch(\n privateKey: ccc.BytesLike,\n expectedPubkey: ccc.BytesLike,\n curve: Curve,\n): boolean {\n const priv = ccc.bytesFrom(privateKey);\n if (priv.length !== 32) {\n return false;\n }\n const expected = ccc.bytesFrom(expectedPubkey);\n const pub =\n curve === \"secp256k1\"\n ? secp256k1.getPublicKey(priv, true)\n : p256.getPublicKey(priv, true);\n if (pub.length !== expected.length) {\n return false;\n }\n for (let i = 0; i < pub.length; i++) {\n if (pub[i] !== expected[i]) {\n return false;\n }\n }\n return true;\n}\n\n// Inline base58btc decode (Bitcoin alphabet) so we don't pull in multiformats\n// as a direct dependency. Audited by the multicodec tag round-trip tests.\nconst BASE58_ALPHABET =\n \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nconst BASE58_REVERSE: Record<string, number> = (() => {\n const m: Record<string, number> = {};\n for (let i = 0; i < BASE58_ALPHABET.length; i++) {\n m[BASE58_ALPHABET[i]] = i;\n }\n return m;\n})();\n\nfunction base58btcDecode(input: string): ccc.Bytes {\n if (input.length === 0) {\n return new Uint8Array(0);\n }\n let leadingOnes = 0;\n while (leadingOnes < input.length && input[leadingOnes] === \"1\") {\n leadingOnes++;\n }\n let value = 0n;\n for (let i = leadingOnes; i < input.length; i++) {\n const c = input[i];\n const v = BASE58_REVERSE[c];\n if (v === undefined) {\n throw new Error(`Invalid base58 character \"${c}\"`);\n }\n value = value * 58n + BigInt(v);\n }\n const tail: number[] = [];\n while (value > 0n) {\n tail.unshift(Number(value & 0xffn));\n value >>= 8n;\n }\n return Uint8Array.from([...Array<number>(leadingOnes).fill(0), ...tail]);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./rolldown-runtime-BIInC43l.js"),t=require("./plc.js");let n=require("@ckb-ccc/core"),r=require("@ckb-ccc/type-id/advanced");const i=[`Object`,`RegExp`,`Date`,`Error`,`Map`,`Set`,`WeakMap`,`WeakSet`,`ArrayBuffer`,`SharedArrayBuffer`,`DataView`,`Promise`,`URL`,`HTMLElement`,`Int8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`,`Tagged`];function a(e){if(e===null)return`null`;if(e===void 0)return`undefined`;if(e===!0||e===!1)return`boolean`;let t=typeof e;return t===`string`||t===`number`||t===`bigint`||t===`symbol`?t:t===`function`?`Function`:Array.isArray(e)?`Array`:e instanceof Uint8Array?`Uint8Array`:e.constructor===Object?`Object`:o(e)||`Object`}function o(e){let t=Object.prototype.toString.call(e).slice(8,-1);if(i.includes(t))return t}var s=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:+(this.major>e.major)}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};s.uint=new s(0,`uint`,!0),s.negint=new s(1,`negint`,!0),s.bytes=new s(2,`bytes`,!0),s.string=new s(3,`string`,!0),s.array=new s(4,`array`,!1),s.map=new s(5,`map`,!1),s.tag=new s(6,`tag`,!1),s.float=new s(7,`float`,!0),s.false=new s(7,`false`,!0),s.true=new s(7,`true`,!0),s.null=new s(7,`null`,!0),s.undefined=new s(7,`undefined`,!0),s.break=new s(7,`break`,!0);var c=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};const l=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer==`function`,u=new TextEncoder;function d(e){return l&&globalThis.Buffer.isBuffer(e)}function f(e){return e instanceof Uint8Array?d(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e:Uint8Array.from(e)}const p=l?e=>e.length>=24?globalThis.Buffer.from(e):ie(e):e=>e.length>=200?u.encode(e):ie(e),m=e=>Uint8Array.from(e),ee=l?(e,t,n)=>d(e)?new Uint8Array(e.subarray(t,n)):e.slice(t,n):(e,t,n)=>e.slice(t,n),te=l?(e,t)=>(e=e.map(e=>e instanceof Uint8Array?e:globalThis.Buffer.from(e)),f(globalThis.Buffer.concat(e,t))):(e,t)=>{let n=new Uint8Array(t),r=0;for(let t of e)r+t.length>n.length&&(t=t.subarray(0,n.length-r)),n.set(t,r),r+=t.length;return n},ne=l?e=>globalThis.Buffer.allocUnsafe(e):e=>new Uint8Array(e);function re(e,t){if(d(e)&&d(t))return e.compare(t);for(let n=0;n<e.length;n++)if(e[n]!==t[n])return e[n]<t[n]?-1:1;return 0}function ie(e){let t=[],n=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);i<128?t[n++]=i:i<2048?(t[n++]=i>>6|192,t[n++]=i&63|128):(i&64512)==55296&&r+1<e.length&&(e.charCodeAt(r+1)&64512)==56320?(i=65536+((i&1023)<<10)+(e.charCodeAt(++r)&1023),t[n++]=i>>18|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=i&63|128):(i>=55296&&i<=57343&&(i=65533),t[n++]=i>>12|224,t[n++]=i>>6&63|128,t[n++]=i&63|128)}return t}var ae=class{constructor(e=256){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let n=t.length-(this.maxCursor-this.cursor)-1;t.set(e,n)}else{if(t){let e=t.length-(this.maxCursor-this.cursor)-1;e<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,e),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=ne(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=ee(n,0,this.cursor)}else t=te(this.chunks,this.cursor);return e&&this.reset(),t}},oe=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw Error(`write out of bounds, destination buffer is too small`);this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};const h=`CBOR decode error:`,se=`CBOR encode error:`,g=[];g[23]=1,g[24]=2,g[25]=3,g[26]=5,g[27]=9;function _(e,t,n){if(e.length-t<n)throw Error(`${h} not enough data for type`)}const v=[24,256,65536,4294967296,BigInt(`18446744073709551616`)];function y(e,t,n){_(e,t,1);let r=e[t];if(n.strict===!0&&r<v[0])throw Error(`${h} integer encoded in more bytes than necessary (strict decode)`);return r}function b(e,t,n){_(e,t,2);let r=e[t]<<8|e[t+1];if(n.strict===!0&&r<v[1])throw Error(`${h} integer encoded in more bytes than necessary (strict decode)`);return r}function x(e,t,n){_(e,t,4);let r=e[t]*16777216+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3];if(n.strict===!0&&r<v[2])throw Error(`${h} integer encoded in more bytes than necessary (strict decode)`);return r}function S(e,t,n){_(e,t,8);let r=e[t]*16777216+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3],i=e[t+4]*16777216+(e[t+5]<<16)+(e[t+6]<<8)+e[t+7],a=(BigInt(r)<<BigInt(32))+BigInt(i);if(n.strict===!0&&a<v[3])throw Error(`${h} integer encoded in more bytes than necessary (strict decode)`);if(a<=2**53-1)return Number(a);if(n.allowBigInt===!0)return a;throw Error(`${h} integers outside of the safe integer range are not supported`)}function ce(e,t,n,r){return new c(s.uint,y(e,t+1,r),2)}function le(e,t,n,r){return new c(s.uint,b(e,t+1,r),3)}function ue(e,t,n,r){return new c(s.uint,x(e,t+1,r),5)}function de(e,t,n,r){return new c(s.uint,S(e,t+1,r),9)}function C(e,t){return w(e,0,t.value)}function w(e,t,n){if(n<v[0]){let r=Number(n);e.push([t|r])}else if(n<v[1]){let r=Number(n);e.push([t|24,r])}else if(n<v[2]){let r=Number(n);e.push([t|25,r>>>8,r&255])}else if(n<v[3]){let r=Number(n);e.push([t|26,r>>>24&255,r>>>16&255,r>>>8&255,r&255])}else{let r=BigInt(n);if(r<v[4]){let n=[t|27,0,0,0,0,0,0,0],i=Number(r&BigInt(4294967295)),a=Number(r>>BigInt(32)&BigInt(4294967295));n[8]=i&255,i>>=8,n[7]=i&255,i>>=8,n[6]=i&255,i>>=8,n[5]=i&255,n[4]=a&255,a>>=8,n[3]=a&255,a>>=8,n[2]=a&255,a>>=8,n[1]=a&255,e.push(n)}else throw Error(`${h} encountered BigInt larger than allowable range`)}}C.encodedSize=function(e){return w.encodedSize(e.value)},w.encodedSize=function(e){return e<v[0]?1:e<v[1]?2:e<v[2]?3:e<v[3]?5:9},C.compareTokens=function(e,t){return e.value<t.value?-1:+(e.value>t.value)};function fe(e,t,n,r){return new c(s.negint,-1-y(e,t+1,r),2)}function pe(e,t,n,r){return new c(s.negint,-1-b(e,t+1,r),3)}function me(e,t,n,r){return new c(s.negint,-1-x(e,t+1,r),5)}const he=BigInt(-1),ge=BigInt(1);function _e(e,t,n,r){let i=S(e,t+1,r);if(typeof i!=`bigint`){let e=-1-i;if(e>=-(2**53-1))return new c(s.negint,e,9)}if(r.allowBigInt!==!0)throw Error(`${h} integers outside of the safe integer range are not supported`);return new c(s.negint,he-BigInt(i),9)}function ve(e,t){let n=t.value,r=typeof n==`bigint`?n*he-ge:n*-1-1;w(e,t.type.majorEncoded,r)}ve.encodedSize=function(e){let t=e.value,n=typeof t==`bigint`?t*he-ge:t*-1-1;return n<v[0]?1:n<v[1]?2:n<v[2]?3:n<v[3]?5:9},ve.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function T(e,t,n,r){_(e,t,n+r);let i=e.slice(t+n,t+n+r);return new c(s.bytes,i,n+r)}function ye(e,t,n,r){return T(e,t,1,n)}function be(e,t,n,r){return T(e,t,2,y(e,t+1,r))}function xe(e,t,n,r){return T(e,t,3,b(e,t+1,r))}function Se(e,t,n,r){return T(e,t,5,x(e,t+1,r))}function Ce(e,t,n,r){let i=S(e,t+1,r);if(typeof i==`bigint`)throw Error(`${h} 64-bit integer bytes lengths not supported`);return T(e,t,9,i)}function E(e){return e.encodedBytes===void 0&&(e.encodedBytes=s.equals(e.type,s.string)?p(e.value):e.value),e.encodedBytes}function we(e,t){let n=E(t);w(e,t.type.majorEncoded,n.length),e.push(n)}we.encodedSize=function(e){let t=E(e);return w.encodedSize(t.length)+t.length},we.compareTokens=function(e,t){return Te(E(e),E(t))};function Te(e,t){return e.length<t.length?-1:e.length>t.length?1:re(e,t)}const Ee=new TextDecoder;function De(e,t,n){if(n-t<32){let r=``;for(let i=t;i<n;i++){let a=e[i];if(a&128)return Ee.decode(e.subarray(t,n));r+=String.fromCharCode(a)}return r}return Ee.decode(e.subarray(t,n))}function D(e,t,n,r,i){let a=n+r;_(e,t,a);let o=new c(s.string,De(e,t+n,t+a),a);return i.retainStringBytes===!0&&(o.byteValue=e.slice(t+n,t+a)),o}function Oe(e,t,n,r){return D(e,t,1,n,r)}function ke(e,t,n,r){return D(e,t,2,y(e,t+1,r),r)}function Ae(e,t,n,r){return D(e,t,3,b(e,t+1,r),r)}function je(e,t,n,r){return D(e,t,5,x(e,t+1,r),r)}function Me(e,t,n,r){let i=S(e,t+1,r);if(typeof i==`bigint`)throw Error(`${h} 64-bit integer string lengths not supported`);return D(e,t,9,i,r)}const Ne=we;function O(e,t,n,r){return new c(s.array,r,n)}function Pe(e,t,n,r){return O(e,t,1,n)}function Fe(e,t,n,r){return O(e,t,2,y(e,t+1,r))}function Ie(e,t,n,r){return O(e,t,3,b(e,t+1,r))}function Le(e,t,n,r){return O(e,t,5,x(e,t+1,r))}function Re(e,t,n,r){let i=S(e,t+1,r);if(typeof i==`bigint`)throw Error(`${h} 64-bit integer array lengths not supported`);return O(e,t,9,i)}function ze(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${h} indefinite length items not allowed`);return O(e,t,1,1/0)}function Be(e,t){w(e,s.array.majorEncoded,t.value)}Be.compareTokens=C.compareTokens,Be.encodedSize=function(e){return w.encodedSize(e.value)};function k(e,t,n,r){return new c(s.map,r,n)}function Ve(e,t,n,r){return k(e,t,1,n)}function He(e,t,n,r){return k(e,t,2,y(e,t+1,r))}function Ue(e,t,n,r){return k(e,t,3,b(e,t+1,r))}function We(e,t,n,r){return k(e,t,5,x(e,t+1,r))}function Ge(e,t,n,r){let i=S(e,t+1,r);if(typeof i==`bigint`)throw Error(`${h} 64-bit integer map lengths not supported`);return k(e,t,9,i)}function Ke(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${h} indefinite length items not allowed`);return k(e,t,1,1/0)}function qe(e,t){w(e,s.map.majorEncoded,t.value)}qe.compareTokens=C.compareTokens,qe.encodedSize=function(e){return w.encodedSize(e.value)};function Je(e,t,n,r){return new c(s.tag,n,1)}function Ye(e,t,n,r){return new c(s.tag,y(e,t+1,r),2)}function Xe(e,t,n,r){return new c(s.tag,b(e,t+1,r),3)}function Ze(e,t,n,r){return new c(s.tag,x(e,t+1,r),5)}function Qe(e,t,n,r){return new c(s.tag,S(e,t+1,r),9)}function $e(e,t){w(e,s.tag.majorEncoded,t.value)}$e.compareTokens=C.compareTokens,$e.encodedSize=function(e){return w.encodedSize(e.value)};function et(e,t,n,r){if(r.allowUndefined===!1)throw Error(`${h} undefined values are not supported`);return r.coerceUndefinedToNull===!0?new c(s.null,null,1):new c(s.undefined,void 0,1)}function tt(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${h} indefinite length items not allowed`);return new c(s.break,void 0,1)}function nt(e,t,n){if(n){if(n.allowNaN===!1&&Number.isNaN(e))throw Error(`${h} NaN values are not supported`);if(n.allowInfinity===!1&&(e===1/0||e===-1/0))throw Error(`${h} Infinity values are not supported`)}return new c(s.float,e,t)}function rt(e,t,n,r){return nt(ct(e,t+1),3,r)}function it(e,t,n,r){return nt(ut(e,t+1),5,r)}function at(e,t,n,r){return nt(ft(e,t+1),9,r)}function A(e,t,n){let r=t.value;if(r===!1)e.push([s.float.majorEncoded|20]);else if(r===!0)e.push([s.float.majorEncoded|21]);else if(r===null)e.push([s.float.majorEncoded|22]);else if(r===void 0)e.push([s.float.majorEncoded|23]);else{let t,i=!1;(!n||n.float64!==!0)&&(st(r),t=ct(M,1),r===t||Number.isNaN(r)?(M[0]=249,e.push(M.slice(0,3)),i=!0):(lt(r),t=ut(M,1),r===t&&(M[0]=250,e.push(M.slice(0,5)),i=!0))),i||(dt(r),t=ft(M,1),M[0]=251,e.push(M.slice(0,9)))}}A.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n==null)return 1;if(!t||t.float64!==!0){st(n);let e=ct(M,1);if(n===e||Number.isNaN(n))return 3;if(lt(n),e=ut(M,1),n===e)return 5}return 9};const ot=new ArrayBuffer(9),j=new DataView(ot,1),M=new Uint8Array(ot,0);function st(e){if(e===1/0)j.setUint16(0,31744,!1);else if(e===-1/0)j.setUint16(0,64512,!1);else if(Number.isNaN(e))j.setUint16(0,32256,!1);else{j.setFloat32(0,e);let t=j.getUint32(0),n=(t&2139095040)>>23,r=t&8388607;if(n===255)j.setUint16(0,31744,!1);else if(n===0)j.setUint16(0,(t&2147483648)>>16|r>>13,!1);else{let e=n-127;e<-24?j.setUint16(0,0):e<-14?j.setUint16(0,(t&2147483648)>>16|1<<24+e,!1):j.setUint16(0,(t&2147483648)>>16|e+15<<10|r>>13,!1)}}}function ct(e,t){if(e.length-t<2)throw Error(`${h} not enough data for float16`);let n=(e[t]<<8)+e[t+1];if(n===31744)return 1/0;if(n===64512)return-1/0;if(n===32256)return NaN;let r=n>>10&31,i=n&1023,a;return a=r===0?i*2**-24:r===31?i===0?1/0:NaN:(i+1024)*2**(r-25),n&32768?-a:a}function lt(e){j.setFloat32(0,e,!1)}function ut(e,t){if(e.length-t<4)throw Error(`${h} not enough data for float32`);let n=(e.byteOffset||0)+t;return new DataView(e.buffer,n,4).getFloat32(0,!1)}function dt(e){j.setFloat64(0,e,!1)}function ft(e,t){if(e.length-t<8)throw Error(`${h} not enough data for float64`);let n=(e.byteOffset||0)+t;return new DataView(e.buffer,n,8).getFloat64(0,!1)}A.compareTokens=C.compareTokens;function N(e,t,n){throw Error(`${h} encountered invalid minor (${n}) for major ${e[t]>>>5}`)}function pt(e){return()=>{throw Error(`${h} ${e}`)}}const P=[];for(let e=0;e<=23;e++)P[e]=N;P[24]=ce,P[25]=le,P[26]=ue,P[27]=de,P[28]=N,P[29]=N,P[30]=N,P[31]=N;for(let e=32;e<=55;e++)P[e]=N;P[56]=fe,P[57]=pe,P[58]=me,P[59]=_e,P[60]=N,P[61]=N,P[62]=N,P[63]=N;for(let e=64;e<=87;e++)P[e]=ye;P[88]=be,P[89]=xe,P[90]=Se,P[91]=Ce,P[92]=N,P[93]=N,P[94]=N,P[95]=pt(`indefinite length bytes/strings are not supported`);for(let e=96;e<=119;e++)P[e]=Oe;P[120]=ke,P[121]=Ae,P[122]=je,P[123]=Me,P[124]=N,P[125]=N,P[126]=N,P[127]=pt(`indefinite length bytes/strings are not supported`);for(let e=128;e<=151;e++)P[e]=Pe;P[152]=Fe,P[153]=Ie,P[154]=Le,P[155]=Re,P[156]=N,P[157]=N,P[158]=N,P[159]=ze;for(let e=160;e<=183;e++)P[e]=Ve;P[184]=He,P[185]=Ue,P[186]=We,P[187]=Ge,P[188]=N,P[189]=N,P[190]=N,P[191]=Ke;for(let e=192;e<=215;e++)P[e]=Je;P[216]=Ye,P[217]=Xe,P[218]=Ze,P[219]=Qe,P[220]=N,P[221]=N,P[222]=N,P[223]=N;for(let e=224;e<=243;e++)P[e]=pt(`simple values are not supported`);P[244]=N,P[245]=N,P[246]=N,P[247]=et,P[248]=pt(`simple values are not supported`),P[249]=rt,P[250]=it,P[251]=at,P[252]=N,P[253]=N,P[254]=N,P[255]=tt;const F=[];for(let e=0;e<24;e++)F[e]=new c(s.uint,e,1);for(let e=-1;e>=-24;e--)F[31-e]=new c(s.negint,e,1);F[64]=new c(s.bytes,new Uint8Array,1),F[96]=new c(s.string,``,1),F[128]=new c(s.array,0,1),F[160]=new c(s.map,0,1),F[244]=new c(s.false,!1,1),F[245]=new c(s.true,!0,1),F[246]=new c(s.null,null,1);function mt(e){switch(e.type){case s.false:return m([244]);case s.true:return m([245]);case s.null:return m([246]);case s.bytes:return e.value.length?void 0:m([64]);case s.string:return e.value===``?m([96]):void 0;case s.array:return e.value===0?m([128]):void 0;case s.map:return e.value===0?m([160]):void 0;case s.uint:return e.value<24?m([Number(e.value)]):void 0;case s.negint:if(e.value>=-24)return m([31-Number(e.value)])}}const ht={float64:!1,mapSorter:xt,quickEncodeToken:mt},gt=Object.freeze({float64:!0,mapSorter:St,quickEncodeToken:mt});function _t(){let e=[];return e[s.uint.major]=C,e[s.negint.major]=ve,e[s.bytes.major]=we,e[s.string.major]=Ne,e[s.array.major]=Be,e[s.map.major]=qe,e[s.tag.major]=$e,e[s.float.major]=A,e}const I=_t(),vt=new ae;var yt=class e{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(t,n){if(t&&t.includes(n))throw Error(`${se} object contains circular references`);return new e(n,t)}};const L={null:new c(s.null,null),undefined:new c(s.undefined,void 0),true:new c(s.true,!0),false:new c(s.false,!1),emptyArray:new c(s.array,0),emptyMap:new c(s.map,0)},R={number(e,t,n,r){return!Number.isInteger(e)||!Number.isSafeInteger(e)?new c(s.float,e):e>=0?new c(s.uint,e):new c(s.negint,e)},bigint(e,t,n,r){return e>=BigInt(0)?new c(s.uint,e):new c(s.negint,e)},Uint8Array(e,t,n,r){return new c(s.bytes,e)},string(e,t,n,r){return new c(s.string,e)},boolean(e,t,n,r){return e?L.true:L.false},null(e,t,n,r){return L.null},undefined(e,t,n,r){return L.undefined},ArrayBuffer(e,t,n,r){return new c(s.bytes,new Uint8Array(e))},DataView(e,t,n,r){return new c(s.bytes,new Uint8Array(e.buffer,e.byteOffset,e.byteLength))},Array(e,t,n,r){if(!e.length)return n.addBreakTokens===!0?[L.emptyArray,new c(s.break)]:L.emptyArray;r=yt.createCheck(r,e);let i=[],a=0;for(let t of e)i[a++]=z(t,n,r);return n.addBreakTokens?[new c(s.array,e.length),i,new c(s.break)]:[new c(s.array,e.length),i]},Object(e,t,n,r){let i=t!==`Object`,a=i?e.keys():Object.keys(e),o=i?e.size:a.length,l;if(o){l=Array(o),r=yt.createCheck(r,e);let t=!i&&n.ignoreUndefinedProperties,s=0;for(let o of a){let a=i?e.get(o):e[o];t&&a===void 0||(l[s++]=[z(o,n,r),z(a,n,r)])}s<o&&(l.length=s)}return l?.length?(bt(l,n),n.addBreakTokens?[new c(s.map,l.length),l,new c(s.break)]:[new c(s.map,l.length),l]):n.addBreakTokens===!0?[L.emptyMap,new c(s.break)]:L.emptyMap},Tagged(e,t,n,r){return[new c(s.tag,e.tag),z(e.value,n,r)]}};R.Map=R.Object,R.Buffer=R.Uint8Array;for(let e of`Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64`.split(` `))R[`${e}Array`]=R.DataView;function z(e,t={},n){let r=a(e),i=t&&t.typeEncoders&&t.typeEncoders[r]||R[r];if(typeof i==`function`){let a=i(e,r,t,n);if(a!=null)return a}let o=R[r];if(!o)throw Error(`${se} unsupported type: ${r}`);return o(e,r,t,n)}function bt(e,t){t.mapSorter&&e.sort(t.mapSorter)}function xt(e,t){let n=Array.isArray(e[0])?e[0][0]:e[0],r=Array.isArray(t[0])?t[0][0]:t[0];if(n.type!==r.type)return n.type.compare(r.type);let i=I[n.type.major].compareTokens(n,r);return i===0&&console.warn(`WARNING: complex key types used, CBOR key sorting guarantees are gone`),i}function St(e,t){if(e[0]instanceof c&&t[0]instanceof c){let n=e[0],r=t[0];return n._keyBytes||=Ct(n.value),r._keyBytes||=Ct(r.value),re(n._keyBytes,r._keyBytes)}throw Error(`rfc8949MapSorter: complex key types are not supported yet`)}function Ct(e){return Lt(e,I,gt)}function B(e,t,n,r){if(Array.isArray(t))for(let i of t)B(e,i,n,r);else n[t.type.major](e,t,r)}const wt=s.uint.majorEncoded,Tt=s.negint.majorEncoded,Et=s.bytes.majorEncoded,Dt=s.string.majorEncoded,Ot=s.array.majorEncoded,kt=s.float.majorEncoded|20,At=s.float.majorEncoded|21,jt=s.float.majorEncoded|22,Mt=s.float.majorEncoded|23,Nt=BigInt(-1),Pt=BigInt(1);function Ft(e){return e.addBreakTokens!==!0}function It(e,t,n,r){let i=a(t),o=n.typeEncoders&&n.typeEncoders[i];if(o){let a=o(t,i,n,r);if(a!=null){B(e,a,I,n);return}}switch(i){case`null`:e.push([jt]);return;case`undefined`:e.push([Mt]);return;case`boolean`:e.push([t?At:kt]);return;case`number`:!Number.isInteger(t)||!Number.isSafeInteger(t)?A(e,new c(s.float,t),n):t>=0?w(e,wt,t):w(e,Tt,t*-1-1);return;case`bigint`:t>=BigInt(0)?w(e,wt,t):w(e,Tt,t*Nt-Pt);return;case`string`:{let n=p(t);w(e,Dt,n.length),e.push(n);return}case`Uint8Array`:w(e,Et,t.length),e.push(t);return;case`Array`:if(!t.length){e.push([Ot]);return}r=yt.createCheck(r,t),w(e,Ot,t.length);for(let i of t)It(e,i,n,r);return;case`Object`:case`Map`:B(e,R.Object(t,i,n,r),I,n);return;default:{let a=R[i];if(!a)throw Error(`${se} unsupported type: ${i}`);B(e,a(t,i,n,r),I,n)}}}function Lt(e,t,n,r){let i=r instanceof Uint8Array,a=i?new oe(r):vt,o=z(e,n);if(!Array.isArray(o)&&n.quickEncodeToken){let e=n.quickEncodeToken(o);if(e)return i?(a.push(e),a.toBytes()):e;let r=t[o.type.major];if(r.encodedSize){let e=r.encodedSize(o,n);if(i||(a=new ae(e)),r(a,o,n),a.chunks.length!==1)throw Error(`Unexpected error: pre-calculated length for ${o} was wrong`);return i?a.toBytes():f(a.chunks[0])}}return a.reset(),B(a,o,t,n),a.toBytes(!0)}function Rt(e,t){return t=Object.assign({},ht,t),Ft(t)?(vt.reset(),It(vt,e,t,void 0),vt.toBytes(!0)):Lt(e,I,t)}const zt={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0};var Bt=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=F[e];if(t===void 0){let n=P[e];if(!n)throw Error(`${h} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,`0`)})`);let r=e&31;t=n(this.data,this._pos,r,this.options)}return this._pos+=t.encodedLength,t}};const V=Symbol.for(`DONE`),H=Symbol.for(`BREAK`);function Vt(e,t,n){let r=[];for(let i=0;i<e.value;i++){let a=U(t,n);if(a===H){if(e.value===1/0)break;throw Error(`${h} got unexpected break to lengthed array`)}if(a===V)throw Error(`${h} found array but not enough entries (got ${i}, expected ${e.value})`);r[i]=a}return r}function Ht(e,t,n){let r=n.useMaps===!0,i=n.rejectDuplicateMapKeys===!0,a=r?void 0:{},o=r?new Map:void 0;for(let s=0;s<e.value;s++){let c=U(t,n);if(c===H){if(e.value===1/0)break;throw Error(`${h} got unexpected break to lengthed map`)}if(c===V)throw Error(`${h} found map but not enough entries (got ${s} [no key], expected ${e.value})`);if(!r&&typeof c!=`string`)throw Error(`${h} non-string keys not supported (got ${typeof c})`);if(i&&(r&&o.has(c)||!r&&Object.hasOwn(a,c)))throw Error(`${h} found repeat map key "${c}"`);let l=U(t,n);if(l===V)throw Error(`${h} found map but not enough entries (got ${s} [no value], expected ${e.value})`);r?o.set(c,l):a[c]=l}return r?o:a}function*Ut(e,t,n){for(let r=0;r<e.value;r++){let i=U(t,n);if(i===H){if(e.value===1/0)break;throw Error(`${h} got unexpected break to lengthed map`)}if(i===V)throw Error(`${h} found map but not enough entries (got ${r} [no key], expected ${e.value})`);let a=U(t,n);if(a===V)throw Error(`${h} found map but not enough entries (got ${r} [no value], expected ${e.value})`);yield[i,a]}}function Wt(e,t){let n=!1,r=function(){if(n)throw Error(`${h} tag decode() may only be called once`);n=!0;let r=U(e,t);if(r===V)throw Error(`${h} tag content missing`);if(r===H)throw Error(`${h} got unexpected break in tag content`);return r};return r.entries=function(){if(n)throw Error(`${h} tag decode() may only be called once`);n=!0;let r=e.next();if(!s.equals(r.type,s.map))throw Error(`${h} entries() requires map content, got ${r.type.name}`);let i=[];for(let n of Ut(r,e,t))i.push(n);return i},Object.defineProperty(r,"_called",{get(){return n},enumerable:!1}),r}function U(e,t){if(e.done())return V;let n=e.next();if(s.equals(n.type,s.break))return H;if(n.type.terminal)return n.value;if(s.equals(n.type,s.array))return Vt(n,e,t);if(s.equals(n.type,s.map))return Ht(n,e,t);if(s.equals(n.type,s.tag)){if(t.tags&&typeof t.tags[n.value]==`function`){let r=Wt(e,t),i=t.tags[n.value](r);if(!r._called)throw Error(`${h} tag decoder must call decode() or entries()`);return i}throw Error(`${h} tag not supported (${n.value})`)}throw Error(`unsupported`)}function Gt(e,t){if(!(e instanceof Uint8Array))throw Error(`${h} data to decode must be a Uint8Array`);t=Object.assign({},zt,t);let n=f(e),r=t.tokenizer||new Bt(n,t),i=U(r,t);if(i===V)throw Error(`${h} did not find any content to decode`);if(i===H)throw Error(`${h} got unexpected break`);return[i,e.subarray(r.pos())]}function Kt(e,t){let[n,r]=Gt(e,t);if(r.length>0)throw Error(`${h} too many terminals, data makes no sense`);return n}Object.defineProperty(class e{constructor(e,t){if(typeof e!=`number`||!Number.isInteger(e)||e<0)throw TypeError(`Tagged: tag must be a non-negative integer`);this.tag=e,this.value=t}static decoder(t){return n=>new e(t,n())}static preserve(...t){let n={};for(let r of t)n[r]=e.decoder(r);return n}}.prototype,Symbol.toStringTag,{value:`Tagged`});function qt(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}function Jt(e){if(e instanceof Uint8Array&&e.constructor.name===`Uint8Array`)return W(e);if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return W(new Uint8Array(e.buffer,e.byteOffset,e.byteLength));throw Error(`Unknown type, must be binary type`)}function Yt(e){return e?.buffer instanceof ArrayBuffer}function W(e){return Yt(e)?e:e.slice()}function Xt(e,t){if(e.length>=255)throw TypeError(`Alphabet too long`);for(var n=new Uint8Array(256),r=0;r<n.length;r++)n[r]=255;for(var i=0;i<e.length;i++){var a=e.charAt(i),o=a.charCodeAt(0);if(n[o]!==255)throw TypeError(a+` is ambiguous`);n[o]=i}var s=e.length,c=e.charAt(0),l=Math.log(s)/Math.log(256),u=Math.log(256)/Math.log(s);function d(t){if(t instanceof Uint8Array||(ArrayBuffer.isView(t)?t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength):Array.isArray(t)&&(t=Uint8Array.from(t))),!(t instanceof Uint8Array))throw TypeError(`Expected Uint8Array`);if(t.length===0)return``;for(var n=0,r=0,i=0,a=t.length;i!==a&&t[i]===0;)i++,n++;for(var o=(a-i)*u+1>>>0,l=new Uint8Array(o);i!==a;){for(var d=t[i],f=0,p=o-1;(d!==0||f<r)&&p!==-1;p--,f++)d+=256*l[p]>>>0,l[p]=d%s>>>0,d=d/s>>>0;if(d!==0)throw Error(`Non-zero carry`);r=f,i++}for(var m=o-r;m!==o&&l[m]===0;)m++;for(var ee=c.repeat(n);m<o;++m)ee+=e.charAt(l[m]);return ee}function f(e){if(typeof e!=`string`)throw TypeError(`Expected String`);if(e.length===0)return new Uint8Array;var t=0;if(e[t]!==` `){for(var r=0,i=0;e[t]===c;)r++,t++;for(var a=(e.length-t)*l+1>>>0,o=new Uint8Array(a);e[t];){var u=n[e.charCodeAt(t)];if(u===255)return;for(var d=0,f=a-1;(u!==0||d<i)&&f!==-1;f--,d++)u+=s*o[f]>>>0,o[f]=u%256>>>0,u=u/256>>>0;if(u!==0)throw Error(`Non-zero carry`);i=d,t++}if(e[t]!==` `){for(var p=a-i;p!==a&&o[p]===0;)p++;for(var m=new Uint8Array(r+(a-p)),ee=r;p!==a;)m[ee++]=o[p++];return m}}}function p(e){var n=f(e);if(n)return n;throw Error(`Non-${t} character`)}return{encode:d,decodeUnsafe:f,decode:p}}var Zt=Xt,Qt=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error(`Unknown type, must be binary type`)}},$t=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let r=t.codePointAt(0);if(r===void 0)throw Error(`Invalid prefix character`);this.prefixCodePoint=r,this.baseDecode=n}decode(e){if(typeof e==`string`){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error(`Can only multibase decode strings`)}or(e){return tn(this,e)}},en=class{decoders;constructor(e){this.decoders=e}or(e){return tn(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function tn(e,t){return new en({...e.decoders??{[e.prefix]:e},...t.decoders??{[t.prefix]:t}})}var nn=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,r){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=r,this.encoder=new Qt(e,t,n),this.decoder=new $t(e,t,r)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function rn({name:e,prefix:t,encode:n,decode:r}){return new nn(e,t,n,r)}function an({name:e,prefix:t,alphabet:n}){let{encode:r,decode:i}=Zt(n,e);return rn({prefix:t,name:e,encode:r,decode:e=>Jt(i(e))})}function on(e,t,n,r){let i=e.length;for(;e[i-1]===`=`;)--i;let a=new Uint8Array(i*n/8|0),o=0,s=0,c=0;for(let l=0;l<i;++l){let i=t[e[l]];if(i===void 0)throw SyntaxError(`Non-${r} character`);s=s<<n|i,o+=n,o>=8&&(o-=8,a[c++]=255&s>>o)}if(o>=n||255&s<<8-o)throw SyntaxError(`Unexpected end of data`);return a}function sn(e,t,n){let r=t[t.length-1]===`=`,i=(1<<n)-1,a=``,o=0,s=0;for(let r=0;r<e.length;++r)for(s=s<<8|e[r],o+=8;o>n;)o-=n,a+=t[i&s>>o];if(o!==0&&(a+=t[i&s<<n-o]),r)for(;a.length*n&7;)a+=`=`;return a}function cn(e){let t={};for(let n=0;n<e.length;++n)t[e[n]]=n;return t}function G({name:e,prefix:t,bitsPerChar:n,alphabet:r}){let i=cn(r);return rn({prefix:t,name:e,encode(e){return sn(e,r,n)},decode(t){return on(t,i,n,e)}})}const ln=G({prefix:`b`,name:`base32`,alphabet:`abcdefghijklmnopqrstuvwxyz234567`,bitsPerChar:5});G({prefix:`B`,name:`base32upper`,alphabet:`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`,bitsPerChar:5}),G({prefix:`c`,name:`base32pad`,alphabet:`abcdefghijklmnopqrstuvwxyz234567=`,bitsPerChar:5}),G({prefix:`C`,name:`base32padupper`,alphabet:`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=`,bitsPerChar:5}),G({prefix:`v`,name:`base32hex`,alphabet:`0123456789abcdefghijklmnopqrstuv`,bitsPerChar:5}),G({prefix:`V`,name:`base32hexupper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUV`,bitsPerChar:5}),G({prefix:`t`,name:`base32hexpad`,alphabet:`0123456789abcdefghijklmnopqrstuv=`,bitsPerChar:5}),G({prefix:`T`,name:`base32hexpadupper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUV=`,bitsPerChar:5}),G({prefix:`h`,name:`base32z`,alphabet:`ybndrfg8ejkmcpqxot1uwisza345h769`,bitsPerChar:5});const un=an({prefix:`k`,name:`base36`,alphabet:`0123456789abcdefghijklmnopqrstuvwxyz`});an({prefix:`K`,name:`base36upper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ`});const K=an({name:`base58btc`,prefix:`z`,alphabet:`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`});an({name:`base58flickr`,prefix:`Z`,alphabet:`123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ`});var dn=hn,fn=128,pn=-128,mn=2**31;function hn(e,t,n){t||=[],n||=0;for(var r=n;e>=mn;)t[n++]=e&255|fn,e/=128;for(;e&pn;)t[n++]=e&255|fn,e>>>=7;return t[n]=e|0,hn.bytes=n-r+1,t}var gn=yn,_n=128,vn=127;function yn(e,t){var n=0,t=t||0,r=0,i=t,a,o=e.length;do{if(i>=o)throw yn.bytes=0,RangeError(`Could not decode varint`);a=e[i++],n+=r<28?(a&vn)<<r:(a&vn)*2**r,r+=7}while(a>=_n);return yn.bytes=i-t,n}var bn=2**7,xn=2**14,Sn=2**21,Cn=2**28,wn=2**35,Tn=2**42,En=2**49,Dn=2**56,On=2**63,kn={encode:dn,decode:gn,encodingLength:function(e){return e<bn?1:e<xn?2:e<Sn?3:e<Cn?4:e<wn?5:e<Tn?6:e<En?7:e<Dn?8:e<On?9:10}};function An(e,t=0){return[kn.decode(e,t),kn.decode.bytes]}function jn(e,t,n=0){return kn.encode(e,t,n),t}function Mn(e){return kn.encodingLength(e)}function Nn(e,t){let n=t.byteLength,r=Mn(e),i=r+Mn(n),a=new Uint8Array(i+n);return jn(e,a,0),jn(n,a,r),a.set(t,i),new In(e,n,t,a)}function Pn(e){let t=Jt(e),[n,r]=An(t),[i,a]=An(t.subarray(r)),o=t.subarray(r+a);if(o.byteLength!==i)throw Error(`Incorrect length`);return new In(n,i,o,t)}function Fn(e,t){if(e===t)return!0;{let n=t;return e.code===n.code&&e.size===n.size&&n.bytes instanceof Uint8Array&&qt(e.bytes,n.bytes)}}var In=class{code;size;digest;bytes;constructor(e,t,n,r){this.code=e,this.size=t,this.digest=W(n),this.bytes=W(r)}};function Ln(e,t){let{bytes:n,version:r}=e;switch(r){case 0:return Hn(n,zn(e),t??K.encoder);default:return Un(n,zn(e),t??ln.encoder)}}const Rn=new WeakMap;function zn(e){let t=Rn.get(e);if(t==null){let t=new Map;return Rn.set(e,t),t}return t}var Bn=class e{code;version;multihash;bytes;"/";constructor(e,t,n,r){this.code=t,this.version=e,this.multihash=n,this.bytes=W(r),this[`/`]=this.bytes}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:t,multihash:n}=this;if(t!==q)throw Error(`Cannot convert a non dag-pb CID to CIDv0`);if(n.code!==Wn)throw Error(`Cannot convert non sha2-256 multihash CID to CIDv0`);return e.createV0(n)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:t,digest:n}=this.multihash,r=Nn(t,n);return e.createV1(this.code,r)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(t){return e.equals(this,t)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Fn(e.multihash,n.multihash)}toString(e){return Ln(this,e)}toJSON(){return{"/":Ln(this)}}link(){return this}[Symbol.toStringTag]=`CID`;[Symbol.for(`nodejs.util.inspect.custom`)](){return`CID(${this.toString()})`}static asCID(t){if(t==null)return null;let n=t;if(n instanceof e)return n;if(n[`/`]!=null&&n[`/`]===n.bytes||n.asCID===n){let{version:t,code:r,multihash:i,bytes:a}=n;return new e(t,r,i,a??Gn(t,r,i.bytes))}else if(n[Kn]===!0){let{version:t,multihash:r,code:i}=n,a=Pn(r);return e.create(t,i,a)}else return null}static create(t,n,r){if(typeof n!=`number`)throw Error(`String codecs are no longer supported`);if(!(r.bytes instanceof Uint8Array))throw Error(`Invalid digest`);switch(t){case 0:if(n!==q)throw Error(`Version 0 CID must use dag-pb (code: ${q}) block encoding`);return new e(t,n,r,r.bytes);case 1:return new e(t,n,r,Gn(t,n,r.bytes));default:throw Error(`Invalid version`)}}static createV0(t){return e.create(0,q,t)}static createV1(t,n){return e.create(1,t,n)}static decode(t){let[n,r]=e.decodeFirst(t);if(r.length!==0)throw Error(`Incorrect length`);return n}static decodeFirst(t){let n=e.inspectBytes(t),r=n.size-n.multihashSize,i=Jt(t.subarray(r,r+n.multihashSize));if(i.byteLength!==n.multihashSize)throw Error(`Incorrect length`);let a=i.subarray(n.multihashSize-n.digestSize),o=new In(n.multihashCode,n.digestSize,a,i);return[n.version===0?e.createV0(o):e.createV1(n.codec,o),t.subarray(n.size)]}static inspectBytes(e){let t=0,n=()=>{let[n,r]=An(e.subarray(t));return t+=r,n},r=n(),i=q;if(r===18?(r=0,t=0):i=n(),r!==0&&r!==1)throw RangeError(`Invalid CID version ${r}`);let a=t,o=n(),s=n(),c=t+s,l=c-a;return{version:r,codec:i,multihashCode:o,digestSize:s,multihashSize:l,size:c}}static parse(t,n){let[r,i]=Vn(t,n),a=e.decode(i);if(a.version===0&&t[0]!==`Q`)throw Error(`Version 0 CID string must not include multibase prefix`);return zn(a).set(r,t),a}};function Vn(e,t){switch(e[0]){case`Q`:{let n=t??K;return[K.prefix,n.decode(`${K.prefix}${e}`)]}case K.prefix:{let n=t??K;return[K.prefix,n.decode(e)]}case ln.prefix:{let n=t??ln;return[ln.prefix,n.decode(e)]}case un.prefix:{let n=t??un;return[un.prefix,n.decode(e)]}default:if(t==null)throw Error(`To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided`);return[e[0],t.decode(e)]}}function Hn(e,t,n){let{prefix:r}=n;if(r!==K.prefix)throw Error(`Cannot string encode V0 in ${n.name} encoding`);let i=t.get(r);if(i==null){let i=n.encode(e).slice(1);return t.set(r,i),i}else return i}function Un(e,t,n){let{prefix:r}=n,i=t.get(r);if(i==null){let i=n.encode(e);return t.set(r,i),i}else return i}const q=112,Wn=18;function Gn(e,t,n){let r=Mn(e),i=r+Mn(t),a=new Uint8Array(i+n.byteLength);return jn(e,a,0),jn(t,a,r),a.set(n,i),a}const Kn=Symbol.for(`@ipld/js-cid/CID`);function qn(e){return e instanceof ArrayBuffer?new Uint8Array(e,0,e.byteLength):e}function Jn(e){if(e.asCID!==e&&e[`/`]!==e.bytes)return null;let t=Bn.asCID(e);if(!t)return null;let n=new Uint8Array(t.bytes.byteLength+1);return n.set(t.bytes,1),[new c(s.tag,42),new c(s.bytes,n)]}function Yn(){throw Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function Xn(e){if(Number.isNaN(e))throw Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(e===1/0||e===-1/0)throw Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}function Zn(e){for(let t of e.keys())if(typeof t!=`string`||t.length===0)throw Error(`Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded`);return null}const Qn={float64:!0,typeEncoders:{Map:Zn,Object:Jn,undefined:Yn,number:Xn}};({...Qn}),{...Qn.typeEncoders};function $n(e){let t=e();if(t[0]!==0)throw Error(`Invalid CID for CBOR tag 42; expected leading 0x00`);return Bn.decode(t.subarray(1))}const er={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:{42:$n}};({...er}),{...er.tags};const tr=e=>Rt(e,Qn),nr=e=>Kt(qn(e),er);function rr(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var ir,J,ar,or;let Y=ir=class extends n.ccc.Entity.Base(){constructor(e,t){super(),this.document=e,this.localId=t}static from(e){return e instanceof ir?e:new ir(e.document,e.localId??void 0)}};Y=ir=rr([n.ccc.codec(n.ccc.mol.table({document:n.ccc.mol.Bytes,localId:n.ccc.mol.StringOpt}).map({inMap:e=>({...e,document:n.ccc.hexFrom(tr(e.document))}),outMap:e=>({...e,document:nr(n.ccc.bytesFrom(e.document))})}))],Y);let X=J=class extends n.ccc.Entity.Base(){constructor(e,t){super(),this.type=e,this.value=t}static from(e){return e instanceof J?e:new J(e.type??`v1`,Y.from(e.value))}static fromV1(e){return new J(`v1`,Y.from(e))}};X=J=rr([n.ccc.codec(n.ccc.mol.union({v1:Y}))],X);let Z=ar=class extends n.ccc.Entity.Base(){constructor(e,t,n){super(),this.history=e,this.sig=t,this.rotationKeyIndices=n}static from(e){return e instanceof ar?e:new ar(e.history,n.ccc.hexFrom(e.sig),e.rotationKeyIndices.map(n.ccc.numFrom))}};Z=ar=rr([n.ccc.codec(n.ccc.mol.table({history:n.ccc.mol.BytesVec,sig:n.ccc.mol.Bytes,rotationKeyIndices:n.ccc.mol.Uint8Vec}).map({inMap:e=>({...e,history:e.history.map(e=>n.ccc.hexFrom(tr(e)))}),outMap:e=>({...e,history:e.history.map(e=>nr(n.ccc.bytesFrom(e)))})}))],Z);let Q=or=class extends n.ccc.Entity.Base(){constructor(e){super(),this.localIdAuthorization=e}static from(e){return e instanceof or?e:new or(Z.from(e.localIdAuthorization))}};Q=or=rr([n.ccc.codec(n.ccc.mol.table({localIdAuthorization:Z}))],Q);const sr=r.typeIdA.buildTypeIdOperations({async getScriptInfo(e){return e.getKnownScript(n.ccc.KnownScript.DidCkb)},codec:X,async calculateTypeId(e,t){return n.ccc.bytesFrom(n.ccc.hashTypeId(t.inputs[0],t.outputs.length)).slice(0,20)}});function cr(e){return sr.create(e)}async function lr(e){return sr.transfer(e)}async function ur(e){return sr.destroy(e)}const dr=`did:ckb:`,fr=`abcdefghijklmnopqrstuvwxyz234567`,pr=(()=>{let e={};for(let t=0;t<32;t++)e[fr[t]]=t;return e})();function mr(e){let t=n.ccc.bytesFrom(e),r=0,i=0,a=``;for(let e=0;e<t.length;e++)for(i=i<<8|t[e],r+=8;r>=5;)a+=fr[i>>>r-5&31],r-=5;return r>0&&(a+=fr[i<<5-r&31]),a}function hr(e){let t=e.toLowerCase().replace(/=+$/g,``),n=0,r=0,i=[];for(let e of t){let t=pr[e];if(t===void 0)throw Error(`Invalid base32 character "${e}" in input`);r=r<<5|t,n+=5,n>=8&&(i.push(r>>>n-8&255),n-=8)}return Uint8Array.from(i)}function gr(e){let t=n.ccc.bytesFrom(e);if(t.length!==20)throw Error(`did:ckb args must be 20 bytes, got ${t.length}`);return dr+mr(t)}function $(e){if(!e.startsWith(dr))throw Error(`Expected did:ckb:..., got "${e}"`);let t=e.slice(8);if(t.length!==32)throw Error(`did:ckb identifier must be 32 base32 chars, got ${t.length}`);let r=hr(t);if(r.length!==20)throw Error(`did:ckb identifier must decode to 20 bytes, got ${r.length}`);return n.ccc.hexFrom(r)}function _r(e){if(!e.startsWith(dr))return!1;try{return $(e),!0}catch{return!1}}async function vr(e,t){let r=await e.getKnownScript(n.ccc.KnownScript.DidCkb);return n.ccc.Script.from({codeHash:r.codeHash,hashType:r.hashType,args:t})}function yr(e,t){return{did:gr(t),id:t,data:X.decode(e.outputData),cell:e}}async function br(e){let t=n.ccc.hexFrom(e.id),r=await vr(e.client,t),i=await e.client.findSingletonCellByType(r,!0);if(i)return yr(i,t)}async function xr(e){if(!_r(e.did))throw Error(`Not a did:ckb identifier: ${e.did}`);return br({client:e.client,id:$(e.did)})}async function Sr(e){let t=await e.client.getKnownScript(n.ccc.KnownScript.DidCkb),r=[];for await(let i of e.client.findCells({script:n.ccc.Script.from(e.lock),scriptType:`lock`,scriptSearchMode:`exact`,filter:{script:n.ccc.Script.from({codeHash:t.codeHash,hashType:t.hashType,args:`0x`})},withData:!0},e.order,e.limit)){let e=i.cellOutput.type;if(e&&n.ccc.bytesFrom(e.args).length===20)try{r.push(yr(i,n.ccc.hexFrom(e.args)))}catch{}}return r}async function Cr(e){let t=typeof e.id==`string`&&_r(e.id)?$(e.id):n.ccc.hexFrom(e.id),r=(await e.client.getKnownScript(n.ccc.KnownScript.DidCkb)).codeHash.toLowerCase(),i=t.toLowerCase(),a=e.liveCell??(await br({client:e.client,id:t}))?.cell;if(!a)return[];let o=[],s=e.maxSteps??50,c=0;for(;a&&c<s;){c++;let t=await e.client.getTransaction(a.outPoint.txHash);if(!t)break;let n=Tr(a,t.blockNumber);if(!n)break;let s=await wr(e.client,t.transaction,r,i);if(!s){n.action=n.data.value.localId?`MIGRATE`:`CREATE`,o.push(n);break}n.action=`UPDATE`,o.push(n),a=s}return o}async function wr(e,t,r,i){let{inputs:a}=n.ccc.Transaction.from(t);for(let t of a){let a;try{a=await t.getCell(e)}catch{continue}let o=a.cellOutput.type;if(o&&o.codeHash.toLowerCase()===r&&n.ccc.hexFrom(o.args).toLowerCase()===i)return a}}function Tr(e,t){try{let n=X.decode(e.outputData);return{action:`UPDATE`,txHash:e.outPoint.txHash,outputIndex:e.outPoint.index,blockNumber:t,capacity:e.cellOutput.capacity,data:n}}catch{return}}function Er(e){let r=t.getRotationKeys(e.genesisOperation);if(!r[e.rotationKeyIndex])throw Error(`rotationKeyIndex ${e.rotationKeyIndex} out of range (genesis has ${r.length} keys)`);let i=e.curve??r[e.rotationKeyIndex].curve,a=t.signRotationHash(e.rotationPrivateKey,n.ccc.bytesFrom(e.txHash),i);return Q.from({localIdAuthorization:{history:[e.genesisOperation],sig:n.ccc.hexFrom(a),rotationKeyIndices:[e.selfSigIndex??0,e.rotationKeyIndex]}})}async function Dr(e){if(!e.sourceDid.startsWith(`did:plc:`))throw Error(`sourceDid must be did:plc:..., got "${e.sourceDid}"`);let t=e.data?.value?.document??{},n={type:e.data?.type??`v1`,value:{document:t,localId:e.sourceDid}};return cr({signer:e.signer,data:n,receiver:e.receiver,tx:e.tx})}var Or=e.t({DidCkbData:()=>X,DidCkbDataV1:()=>Y,DidCkbWitness:()=>Q,PlcAuthorization:()=>Z,argsToDid:()=>gr,base32Decode:()=>hr,base32Encode:()=>mr,buildMigrationWitness:()=>Er,createDidCkb:()=>cr,destroyDidCkb:()=>ur,didToArgs:()=>$,findDidCkbCell:()=>br,getDidCkbHistory:()=>Cr,isDidCkb:()=>_r,listDidCkbsByLock:()=>Sr,migrateDidCkb:()=>Dr,plc:()=>t.t,resolveDidCkb:()=>xr,transferDidCkb:()=>lr});Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return br}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return gr}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return _r}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return lr}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Cr}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return hr}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return ur}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Er}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Sr}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return cr}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Dr}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return xr}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Or}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return mr}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return Z}});
|
|
2
|
+
//# sourceMappingURL=barrel-2Xya5Y02.js.map
|