@ckb-ccc/did-ckb 0.1.0 → 0.2.0
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 +14 -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/dist.commonjs/barrel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./barrel-2Xya5Y02.js"),t=require("./plc.js");Object.defineProperty(exports,"DidCkbData",{enumerable:!0,get:function(){return e.g}}),Object.defineProperty(exports,"DidCkbDataV1",{enumerable:!0,get:function(){return e._}}),Object.defineProperty(exports,"DidCkbWitness",{enumerable:!0,get:function(){return e.v}}),Object.defineProperty(exports,"PlcAuthorization",{enumerable:!0,get:function(){return e.y}}),exports.argsToDid=e.c,exports.base32Decode=e.l,exports.base32Encode=e.u,exports.buildMigrationWitness=e.n,exports.createDidCkb=e.p,exports.destroyDidCkb=e.m,exports.didToArgs=e.d,exports.findDidCkbCell=e.a,exports.getDidCkbHistory=e.i,exports.isDidCkb=e.f,exports.listDidCkbsByLock=e.o,exports.migrateDidCkb=e.r,Object.defineProperty(exports,"plc",{enumerable:!0,get:function(){return t.t}}),exports.resolveDidCkb=e.s,exports.transferDidCkb=e.h;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/core";
|
|
2
2
|
|
|
3
|
-
//#region
|
|
3
|
+
//#region \0rolldown/runtime.js
|
|
4
4
|
declare namespace index_d_exports {
|
|
5
5
|
export { Curve, PlcOperation, PlcRotationKey, fetchPlcLog, getGenesisOperation, getRotationKeys, parseDidKey, signRotationHash, verifyPrivateKeyMatch };
|
|
6
6
|
}
|
|
@@ -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, __exportAll as d, 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-GgT2hCAk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-GgT2hCAk.d.ts","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;;AA9CtE;;;;AAAiB;AAEjB;iBA0DgB,eAAA,CAAgB,EAAA,EAAI,YAAA,GAAe,cAAc;AAAA,iBAsBjD,WAAA,CAAY,MAAA;EAC1B,KAAA,EAAO,KAAA;EACP,gBAAA,EAAkB,GAAA,CAAI,KAAK;AAAA;;;;;;AA/EA;AAG7B;;;;iBAgHgB,gBAAA,CACd,UAAA,EAAY,GAAA,CAAI,SAAA,EAChB,MAAA,EAAQ,GAAA,CAAI,SAAA,EACZ,KAAA,EAAO,KAAA,GACN,GAAA,CAAI,KAAA;;;;;;iBA4BS,qBAAA,CACd,UAAA,EAAY,GAAA,CAAI,SAAA,EAChB,cAAA,EAAgB,GAAA,CAAI,SAAA,EACpB,KAAA,EAAO,KAAA"}
|
package/dist.commonjs/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { s as index_d_exports } from "./index-
|
|
1
|
+
import { s as index_d_exports } from "./index-GgT2hCAk.js";
|
|
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.js";
|
|
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.commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./barrel-2Xya5Y02.js"),t=require("./plc.js");Object.defineProperty(exports,"DidCkbData",{enumerable:!0,get:function(){return e.g}}),Object.defineProperty(exports,"DidCkbDataV1",{enumerable:!0,get:function(){return e._}}),Object.defineProperty(exports,"DidCkbWitness",{enumerable:!0,get:function(){return e.v}}),Object.defineProperty(exports,"PlcAuthorization",{enumerable:!0,get:function(){return e.y}}),exports.argsToDid=e.c,exports.base32Decode=e.l,exports.base32Encode=e.u,exports.buildMigrationWitness=e.n,exports.createDidCkb=e.p,exports.destroyDidCkb=e.m,Object.defineProperty(exports,"didCkb",{enumerable:!0,get:function(){return e.t}}),exports.didToArgs=e.d,exports.findDidCkbCell=e.a,exports.getDidCkbHistory=e.i,exports.isDidCkb=e.f,exports.listDidCkbsByLock=e.o,exports.migrateDidCkb=e.r,Object.defineProperty(exports,"plc",{enumerable:!0,get:function(){return t.t}}),exports.resolveDidCkb=e.s,exports.transferDidCkb=e.h;
|
package/dist.commonjs/plc.d.ts
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-GgT2hCAk.js";
|
|
2
2
|
export { Curve, PlcOperation, PlcRotationKey, fetchPlcLog, getGenesisOperation, getRotationKeys, parseDidKey, signRotationHash, verifyPrivateKeyMatch };
|
package/dist.commonjs/plc.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
const e=require(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.js");let t=require("@ckb-ccc/core"),n=require("@noble/curves/nist.js"),r=require("@noble/curves/secp256k1.js");var i=e.t({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.ccc.bytesFrom(i);if(o.length!==32)throw Error(`Expected 32-byte tx hash, got ${o.length}`);let s=t.ccc.bytesFrom(e);if(s.length!==32)throw Error(`Expected 32-byte private key, got ${s.length}`);return a===`secp256k1`?r.secp256k1.sign(o,s,{prehash:!0,lowS:!0,format:`compact`}):n.p256.sign(o,s,{prehash:!0,lowS:!0,format:`compact`})}function u(e,i,a){let o=t.ccc.bytesFrom(e);if(o.length!==32)return!1;let s=t.ccc.bytesFrom(i),c=a===`secp256k1`?r.secp256k1.getPublicKey(o,!0):n.p256.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])}exports.fetchPlcLog=a,exports.getGenesisOperation=o,exports.getRotationKeys=s,exports.parseDidKey=c,exports.signRotationHash=l,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.verifyPrivateKeyMatch=u;
|
|
2
|
+
//# sourceMappingURL=plc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plc.js","names":["ccc","secp256k1","p256"],"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};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckb-ccc/did-ckb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CCC - CKBer's Codebase. CCC's support for DID on CKB",
|
|
5
5
|
"author": "Hanssen0 <hanssen0@hanssen0.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -14,42 +14,47 @@
|
|
|
14
14
|
"module": "./dist/index.mjs",
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
|
-
"
|
|
18
|
-
"
|
|
17
|
+
"import": "./dist/index.mjs",
|
|
18
|
+
"require": "./dist.commonjs/index.js"
|
|
19
19
|
},
|
|
20
20
|
"./barrel": {
|
|
21
|
-
"
|
|
22
|
-
"
|
|
21
|
+
"import": "./dist/barrel.mjs",
|
|
22
|
+
"require": "./dist.commonjs/barrel.js"
|
|
23
23
|
},
|
|
24
24
|
"./plc": {
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"import": "./dist/plc.mjs",
|
|
26
|
+
"require": "./dist.commonjs/plc.js"
|
|
27
27
|
},
|
|
28
28
|
"./package.json": "./package.json"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@eslint/js": "^
|
|
32
|
-
"@types/node": "^
|
|
33
|
-
"eslint": "^
|
|
31
|
+
"@eslint/js": "^10.0.1",
|
|
32
|
+
"@types/node": "^26.0.0",
|
|
33
|
+
"eslint": "^10.5.0",
|
|
34
34
|
"eslint-config-prettier": "^10.1.8",
|
|
35
|
-
"eslint-plugin-prettier": "^5.5.
|
|
36
|
-
"prettier": "^3.
|
|
37
|
-
"prettier-plugin-organize-imports": "^4.
|
|
38
|
-
"tsdown": "0.
|
|
39
|
-
"typescript": "^
|
|
40
|
-
"typescript-eslint": "^8.
|
|
41
|
-
"vitest": "^
|
|
35
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
36
|
+
"prettier": "^3.8.4",
|
|
37
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
38
|
+
"tsdown": "^0.22.3",
|
|
39
|
+
"typescript": "^6.0.3",
|
|
40
|
+
"typescript-eslint": "^8.61.1",
|
|
41
|
+
"vitest": "^4.1.9"
|
|
42
42
|
},
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@ipld/dag-cbor": "^
|
|
47
|
+
"@ipld/dag-cbor": "^10.0.1",
|
|
48
48
|
"@noble/curves": "^2.2.0",
|
|
49
|
-
"@ckb-ccc/core": "1.
|
|
50
|
-
"@ckb-ccc/type-id": "0.0
|
|
49
|
+
"@ckb-ccc/core": "1.14.0",
|
|
50
|
+
"@ckb-ccc/type-id": "0.1.0"
|
|
51
51
|
},
|
|
52
52
|
"types": "./dist.commonjs/index.d.ts",
|
|
53
|
+
"inlinedDependencies": {
|
|
54
|
+
"@ipld/dag-cbor": "10.0.1",
|
|
55
|
+
"cborg": "5.1.1",
|
|
56
|
+
"multiformats": "14.0.0"
|
|
57
|
+
},
|
|
53
58
|
"scripts": {
|
|
54
59
|
"test": "vitest",
|
|
55
60
|
"test:ci": "vitest run",
|
package/src/migrate.ts
CHANGED
|
@@ -44,7 +44,7 @@ export function buildMigrationWitness(props: {
|
|
|
44
44
|
);
|
|
45
45
|
return DidCkbWitness.from({
|
|
46
46
|
localIdAuthorization: {
|
|
47
|
-
history: [props.genesisOperation
|
|
47
|
+
history: [props.genesisOperation],
|
|
48
48
|
sig: ccc.hexFrom(sig),
|
|
49
49
|
rotationKeyIndices: [props.selfSigIndex ?? 0, props.rotationKeyIndex],
|
|
50
50
|
},
|
package/tsdown.config.mts
CHANGED
|
@@ -4,28 +4,39 @@ const common = {
|
|
|
4
4
|
minify: true,
|
|
5
5
|
dts: true,
|
|
6
6
|
platform: "neutral" as const,
|
|
7
|
+
sourcemap: true,
|
|
7
8
|
exports: true,
|
|
8
9
|
};
|
|
9
10
|
|
|
11
|
+
const entry = {
|
|
12
|
+
index: "src/index.ts",
|
|
13
|
+
barrel: "src/barrel.ts",
|
|
14
|
+
plc: "src/plc/index.ts",
|
|
15
|
+
} as const;
|
|
16
|
+
|
|
17
|
+
const bundleDeps = [
|
|
18
|
+
"@ipld/dag-cbor",
|
|
19
|
+
"cborg", // By @ipld/dag-cbor
|
|
20
|
+
"multiformats", // By @ipld/dag-cbor
|
|
21
|
+
] as string[];
|
|
22
|
+
|
|
10
23
|
export default defineConfig(
|
|
11
24
|
(
|
|
12
25
|
[
|
|
13
26
|
{
|
|
14
|
-
entry
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
plc: "src/plc/index.ts",
|
|
27
|
+
entry,
|
|
28
|
+
deps: {
|
|
29
|
+
onlyBundle: [] as string[],
|
|
18
30
|
},
|
|
19
31
|
format: "esm",
|
|
20
32
|
copy: "./misc/basedirs/dist/*",
|
|
21
33
|
},
|
|
22
34
|
{
|
|
23
|
-
entry
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
35
|
+
entry,
|
|
36
|
+
deps: {
|
|
37
|
+
alwaysBundle: bundleDeps,
|
|
38
|
+
onlyBundle: bundleDeps,
|
|
27
39
|
},
|
|
28
|
-
noExternal: ["@ipld/dag-cbor"] as string[],
|
|
29
40
|
format: "cjs",
|
|
30
41
|
outDir: "dist.commonjs",
|
|
31
42
|
copy: "./misc/basedirs/dist.commonjs/*",
|
package/dist/barrel-YjafMaiQ.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-km9CeSFt.mjs";import{a as t,o as n,r}from"./plc-CmmGqgSN.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 t=r(e.genesisOperation);if(!t[e.rotationKeyIndex])throw Error(`rotationKeyIndex ${e.rotationKeyIndex} out of range (genesis has ${t.length} keys)`);let a=e.curve??t[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:()=>t,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-YjafMaiQ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"barrel-YjafMaiQ.mjs","names":["DidCkbDataV1","cborEncode","cborDecode","DidCkbData","PlcAuthorization","DidCkbWitness"],"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 as unknown as object],\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/chunk-km9CeSFt.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-CYtA0Eoh.d.mts","names":[],"sources":["../src/plc/index.ts"],"sourcesContent":[],"mappings":";;;;;;KAgBY,KAAA;KAEA,cAAA;;SAEH;oBACW,GAAA,CAAI;;KAGZ,YAAA;;;wBAGY;;aAEX;;;EAbD,CAAA,CAAA;EAEA,IAAA,EAAA,MAAA,GAAA,IAAc;EAMd,GAAA,EAAA,MAAA;EAoBU,UAAA,CAAA,EAAA,MAAW;EAkBjB,WAAA,CAAA,EAAA,MAAA;EAcA,MAAA,CAAA,EAAA,MAAA;EAsBA,OAAA,CAAA,EAAA,MAAW;EAsCX,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAgB;CAClB;;;;;AA+BE,iBA5HM,WAAA,CA4He,GAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAzHlC,OAyHkC,CAzH1B,YAyH0B,EAAA,CAAA;AACnB,iBA3GF,mBAAA,CA2GE,GAAA,EA3GuB,YA2GvB,EAAA,CAAA,EA3GwC,YA2GxC;;;;;;;;iBA7FF,eAAA,KAAoB,eAAe;iBAsBnC,WAAA;SACP;oBACW,GAAA,CAAI;;;;;;;;;;;;iBAoCR,gBAAA,aACF,GAAA,CAAI,mBACR,GAAA,CAAI,kBACL,QACN,GAAA,CAAI;;;;;;iBA4BS,qBAAA,aACF,GAAA,CAAI,2BACA,GAAA,CAAI,kBACb"}
|
package/dist/plc-CmmGqgSN.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-km9CeSFt.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{i as a,c as i,o as n,l as o,s as r,u as s,a as t};
|
|
2
|
-
//# sourceMappingURL=plc-CmmGqgSN.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plc-CmmGqgSN.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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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require(`./plc-Do-Enk0q.js`);let t=require(`@ckb-ccc/core`),n=require(`@ckb-ccc/type-id/advanced`);const r=[`string`,`number`,`bigint`,`symbol`],i=`Function.Generator.AsyncGenerator.GeneratorFunction.AsyncGeneratorFunction.AsyncFunction.Observable.Array.Buffer.Object.RegExp.Date.Error.Map.Set.WeakMap.WeakSet.ArrayBuffer.SharedArrayBuffer.DataView.Promise.URL.HTMLElement.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Uint16Array.Int32Array.Uint32Array.Float32Array.Float64Array.BigInt64Array.BigUint64Array`.split(`.`);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 r.includes(t)?t:t===`function`?`Function`:Array.isArray(e)?`Array`:o(e)?`Buffer`:s(e)||`Object`}function o(e){return e&&e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer.call(null,e)}function s(e){let t=Object.prototype.toString.call(e).slice(8,-1);if(i.includes(t))return t}var c=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?1:0}};c.uint=new c(0,`uint`,!0),c.negint=new c(1,`negint`,!0),c.bytes=new c(2,`bytes`,!0),c.string=new c(3,`string`,!0),c.array=new c(4,`array`,!1),c.map=new c(5,`map`,!1),c.tag=new c(6,`tag`,!1),c.float=new c(7,`float`,!0),c.false=new c(7,`false`,!0),c.true=new c(7,`true`,!0),c.null=new c(7,`null`,!0),c.undefined=new c(7,`undefined`,!0),c.break=new c(7,`break`,!0);var l=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 u=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer==`function`,d=new TextDecoder,f=new TextEncoder;function p(e){return u&&globalThis.Buffer.isBuffer(e)}function m(e){return e instanceof Uint8Array?p(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e:Uint8Array.from(e)}const h=u?(e,t,n)=>n-t>64?globalThis.Buffer.from(e.subarray(t,n)).toString(`utf8`):oe(e,t,n):(e,t,n)=>n-t>64?d.decode(e.subarray(t,n)):oe(e,t,n),ee=u?e=>e.length>64?globalThis.Buffer.from(e):ae(e):e=>e.length>64?f.encode(e):ae(e),g=e=>Uint8Array.from(e),te=u?(e,t,n)=>p(e)?new Uint8Array(e.subarray(t,n)):e.slice(t,n):(e,t,n)=>e.slice(t,n),ne=u?(e,t)=>(e=e.map(e=>e instanceof Uint8Array?e:globalThis.Buffer.from(e)),m(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},re=u?e=>globalThis.Buffer.allocUnsafe(e):e=>new Uint8Array(e);function ie(e,t){if(p(e)&&p(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 ae(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):(t[n++]=i>>12|224,t[n++]=i>>6&63|128,t[n++]=i&63|128)}return t}function oe(e,t,n){let r=[];for(;t<n;){let i=e[t],a=null,o=i>239?4:i>223?3:i>191?2:1;if(t+o<=n){let n,r,s,c;switch(o){case 1:i<128&&(a=i);break;case 2:n=e[t+1],(n&192)==128&&(c=(i&31)<<6|n&63,c>127&&(a=c));break;case 3:n=e[t+1],r=e[t+2],(n&192)==128&&(r&192)==128&&(c=(i&15)<<12|(n&63)<<6|r&63,c>2047&&(c<55296||c>57343)&&(a=c));break;case 4:n=e[t+1],r=e[t+2],s=e[t+3],(n&192)==128&&(r&192)==128&&(s&192)==128&&(c=(i&15)<<18|(n&63)<<12|(r&63)<<6|s&63,c>65535&&c<1114112&&(a=c))}}a===null?(a=65533,o=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|a&1023),r.push(a),t+=o}return ce(r)}const se=4096;function ce(e){let t=e.length;if(t<=se)return String.fromCharCode.apply(String,e);let n=``,r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=se));return n}const le=256;var ue=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=re(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=te(n,0,this.cursor)}else t=ne(this.chunks,this.cursor);return e&&this.reset(),t}};const _=`CBOR decode error:`,de=`CBOR encode error:`,v=[];v[23]=1,v[24]=2,v[25]=3,v[26]=5,v[27]=9;function y(e,t,n){if(e.length-t<n)throw Error(`${_} not enough data for type`)}const b=[24,256,65536,4294967296,BigInt(`18446744073709551616`)];function x(e,t,n){y(e,t,1);let r=e[t];if(n.strict===!0&&r<b[0])throw Error(`${_} integer encoded in more bytes than necessary (strict decode)`);return r}function S(e,t,n){y(e,t,2);let r=e[t]<<8|e[t+1];if(n.strict===!0&&r<b[1])throw Error(`${_} integer encoded in more bytes than necessary (strict decode)`);return r}function C(e,t,n){y(e,t,4);let r=e[t]*16777216+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3];if(n.strict===!0&&r<b[2])throw Error(`${_} integer encoded in more bytes than necessary (strict decode)`);return r}function w(e,t,n){y(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<b[3])throw Error(`${_} 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(`${_} integers outside of the safe integer range are not supported`)}function fe(e,t,n,r){return new l(c.uint,x(e,t+1,r),2)}function pe(e,t,n,r){return new l(c.uint,S(e,t+1,r),3)}function me(e,t,n,r){return new l(c.uint,C(e,t+1,r),5)}function he(e,t,n,r){return new l(c.uint,w(e,t+1,r),9)}function T(e,t){return E(e,0,t.value)}function E(e,t,n){if(n<b[0]){let r=Number(n);e.push([t|r])}else if(n<b[1]){let r=Number(n);e.push([t|24,r])}else if(n<b[2]){let r=Number(n);e.push([t|25,r>>>8,r&255])}else if(n<b[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<b[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(`${_} encountered BigInt larger than allowable range`)}}T.encodedSize=function(e){return E.encodedSize(e.value)},E.encodedSize=function(e){return e<b[0]?1:e<b[1]?2:e<b[2]?3:e<b[3]?5:9},T.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function ge(e,t,n,r){return new l(c.negint,-1-x(e,t+1,r),2)}function _e(e,t,n,r){return new l(c.negint,-1-S(e,t+1,r),3)}function ve(e,t,n,r){return new l(c.negint,-1-C(e,t+1,r),5)}const ye=BigInt(-1),be=BigInt(1);function xe(e,t,n,r){let i=w(e,t+1,r);if(typeof i!=`bigint`){let e=-1-i;if(e>=-(2**53-1))return new l(c.negint,e,9)}if(r.allowBigInt!==!0)throw Error(`${_} integers outside of the safe integer range are not supported`);return new l(c.negint,ye-BigInt(i),9)}function Se(e,t){let n=t.value,r=typeof n==`bigint`?n*ye-be:n*-1-1;E(e,t.type.majorEncoded,r)}Se.encodedSize=function(e){let t=e.value,n=typeof t==`bigint`?t*ye-be:t*-1-1;return n<b[0]?1:n<b[1]?2:n<b[2]?3:n<b[3]?5:9},Se.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function D(e,t,n,r){y(e,t,n+r);let i=te(e,t+n,t+n+r);return new l(c.bytes,i,n+r)}function Ce(e,t,n,r){return D(e,t,1,n)}function we(e,t,n,r){return D(e,t,2,x(e,t+1,r))}function Te(e,t,n,r){return D(e,t,3,S(e,t+1,r))}function Ee(e,t,n,r){return D(e,t,5,C(e,t+1,r))}function De(e,t,n,r){let i=w(e,t+1,r);if(typeof i==`bigint`)throw Error(`${_} 64-bit integer bytes lengths not supported`);return D(e,t,9,i)}function Oe(e){return e.encodedBytes===void 0&&(e.encodedBytes=e.type===c.string?ee(e.value):e.value),e.encodedBytes}function ke(e,t){let n=Oe(t);E(e,t.type.majorEncoded,n.length),e.push(n)}ke.encodedSize=function(e){let t=Oe(e);return E.encodedSize(t.length)+t.length},ke.compareTokens=function(e,t){return Ae(Oe(e),Oe(t))};function Ae(e,t){return e.length<t.length?-1:e.length>t.length?1:ie(e,t)}function O(e,t,n,r,i){let a=n+r;y(e,t,a);let o=new l(c.string,h(e,t+n,t+a),a);return i.retainStringBytes===!0&&(o.byteValue=te(e,t+n,t+a)),o}function je(e,t,n,r){return O(e,t,1,n,r)}function Me(e,t,n,r){return O(e,t,2,x(e,t+1,r),r)}function Ne(e,t,n,r){return O(e,t,3,S(e,t+1,r),r)}function Pe(e,t,n,r){return O(e,t,5,C(e,t+1,r),r)}function Fe(e,t,n,r){let i=w(e,t+1,r);if(typeof i==`bigint`)throw Error(`${_} 64-bit integer string lengths not supported`);return O(e,t,9,i,r)}const Ie=ke;function k(e,t,n,r){return new l(c.array,r,n)}function Le(e,t,n,r){return k(e,t,1,n)}function Re(e,t,n,r){return k(e,t,2,x(e,t+1,r))}function ze(e,t,n,r){return k(e,t,3,S(e,t+1,r))}function Be(e,t,n,r){return k(e,t,5,C(e,t+1,r))}function Ve(e,t,n,r){let i=w(e,t+1,r);if(typeof i==`bigint`)throw Error(`${_} 64-bit integer array lengths not supported`);return k(e,t,9,i)}function He(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${_} indefinite length items not allowed`);return k(e,t,1,1/0)}function Ue(e,t){E(e,c.array.majorEncoded,t.value)}Ue.compareTokens=T.compareTokens,Ue.encodedSize=function(e){return E.encodedSize(e.value)};function A(e,t,n,r){return new l(c.map,r,n)}function We(e,t,n,r){return A(e,t,1,n)}function Ge(e,t,n,r){return A(e,t,2,x(e,t+1,r))}function Ke(e,t,n,r){return A(e,t,3,S(e,t+1,r))}function qe(e,t,n,r){return A(e,t,5,C(e,t+1,r))}function Je(e,t,n,r){let i=w(e,t+1,r);if(typeof i==`bigint`)throw Error(`${_} 64-bit integer map lengths not supported`);return A(e,t,9,i)}function Ye(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${_} indefinite length items not allowed`);return A(e,t,1,1/0)}function Xe(e,t){E(e,c.map.majorEncoded,t.value)}Xe.compareTokens=T.compareTokens,Xe.encodedSize=function(e){return E.encodedSize(e.value)};function Ze(e,t,n,r){return new l(c.tag,n,1)}function Qe(e,t,n,r){return new l(c.tag,x(e,t+1,r),2)}function $e(e,t,n,r){return new l(c.tag,S(e,t+1,r),3)}function et(e,t,n,r){return new l(c.tag,C(e,t+1,r),5)}function tt(e,t,n,r){return new l(c.tag,w(e,t+1,r),9)}function nt(e,t){E(e,c.tag.majorEncoded,t.value)}nt.compareTokens=T.compareTokens,nt.encodedSize=function(e){return E.encodedSize(e.value)};const rt=20,it=21,at=22,ot=23;function st(e,t,n,r){if(r.allowUndefined===!1)throw Error(`${_} undefined values are not supported`);return r.coerceUndefinedToNull===!0?new l(c.null,null,1):new l(c.undefined,void 0,1)}function ct(e,t,n,r){if(r.allowIndefinite===!1)throw Error(`${_} indefinite length items not allowed`);return new l(c.break,void 0,1)}function lt(e,t,n){if(n){if(n.allowNaN===!1&&Number.isNaN(e))throw Error(`${_} NaN values are not supported`);if(n.allowInfinity===!1&&(e===1/0||e===-1/0))throw Error(`${_} Infinity values are not supported`)}return new l(c.float,e,t)}function ut(e,t,n,r){return lt(gt(e,t+1),3,r)}function dt(e,t,n,r){return lt(vt(e,t+1),5,r)}function ft(e,t,n,r){return lt(bt(e,t+1),9,r)}function pt(e,t,n){let r=t.value;if(r===!1)e.push([c.float.majorEncoded|20]);else if(r===!0)e.push([c.float.majorEncoded|21]);else if(r===null)e.push([c.float.majorEncoded|22]);else if(r===void 0)e.push([c.float.majorEncoded|23]);else{let t,i=!1;(!n||n.float64!==!0)&&(ht(r),t=gt(M,1),r===t||Number.isNaN(r)?(M[0]=249,e.push(M.slice(0,3)),i=!0):(_t(r),t=vt(M,1),r===t&&(M[0]=250,e.push(M.slice(0,5)),i=!0))),i||(yt(r),t=bt(M,1),M[0]=251,e.push(M.slice(0,9)))}}pt.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n==null)return 1;if(!t||t.float64!==!0){ht(n);let e=gt(M,1);if(n===e||Number.isNaN(n))return 3;if(_t(n),e=vt(M,1),n===e)return 5}return 9};const mt=new ArrayBuffer(9),j=new DataView(mt,1),M=new Uint8Array(mt,0);function ht(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,(e&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 gt(e,t){if(e.length-t<2)throw Error(`${_} 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 _t(e){j.setFloat32(0,e,!1)}function vt(e,t){if(e.length-t<4)throw Error(`${_} not enough data for float32`);let n=(e.byteOffset||0)+t;return new DataView(e.buffer,n,4).getFloat32(0,!1)}function yt(e){j.setFloat64(0,e,!1)}function bt(e,t){if(e.length-t<8)throw Error(`${_} not enough data for float64`);let n=(e.byteOffset||0)+t;return new DataView(e.buffer,n,8).getFloat64(0,!1)}pt.compareTokens=T.compareTokens;function N(e,t,n){throw Error(`${_} encountered invalid minor (${n}) for major ${e[t]>>>5}`)}function P(e){return()=>{throw Error(`${_} ${e}`)}}const F=[];for(let e=0;e<=23;e++)F[e]=N;F[24]=fe,F[25]=pe,F[26]=me,F[27]=he,F[28]=N,F[29]=N,F[30]=N,F[31]=N;for(let e=32;e<=55;e++)F[e]=N;F[56]=ge,F[57]=_e,F[58]=ve,F[59]=xe,F[60]=N,F[61]=N,F[62]=N,F[63]=N;for(let e=64;e<=87;e++)F[e]=Ce;F[88]=we,F[89]=Te,F[90]=Ee,F[91]=De,F[92]=N,F[93]=N,F[94]=N,F[95]=P(`indefinite length bytes/strings are not supported`);for(let e=96;e<=119;e++)F[e]=je;F[120]=Me,F[121]=Ne,F[122]=Pe,F[123]=Fe,F[124]=N,F[125]=N,F[126]=N,F[127]=P(`indefinite length bytes/strings are not supported`);for(let e=128;e<=151;e++)F[e]=Le;F[152]=Re,F[153]=ze,F[154]=Be,F[155]=Ve,F[156]=N,F[157]=N,F[158]=N,F[159]=He;for(let e=160;e<=183;e++)F[e]=We;F[184]=Ge,F[185]=Ke,F[186]=qe,F[187]=Je,F[188]=N,F[189]=N,F[190]=N,F[191]=Ye;for(let e=192;e<=215;e++)F[e]=Ze;F[216]=Qe,F[217]=$e,F[218]=et,F[219]=tt,F[220]=N,F[221]=N,F[222]=N,F[223]=N;for(let e=224;e<=243;e++)F[e]=P(`simple values are not supported`);F[244]=N,F[245]=N,F[246]=N,F[247]=st,F[248]=P(`simple values are not supported`),F[249]=ut,F[250]=dt,F[251]=ft,F[252]=N,F[253]=N,F[254]=N,F[255]=ct;const I=[];for(let e=0;e<24;e++)I[e]=new l(c.uint,e,1);for(let e=-1;e>=-24;e--)I[31-e]=new l(c.negint,e,1);I[64]=new l(c.bytes,new Uint8Array,1),I[96]=new l(c.string,``,1),I[128]=new l(c.array,0,1),I[160]=new l(c.map,0,1),I[244]=new l(c.false,!1,1),I[245]=new l(c.true,!0,1),I[246]=new l(c.null,null,1);function xt(e){switch(e.type){case c.false:return g([244]);case c.true:return g([245]);case c.null:return g([246]);case c.bytes:return e.value.length?void 0:g([64]);case c.string:return e.value===``?g([96]):void 0;case c.array:return e.value===0?g([128]):void 0;case c.map:return e.value===0?g([160]):void 0;case c.uint:return e.value<24?g([Number(e.value)]):void 0;case c.negint:if(e.value>=-24)return g([31-Number(e.value)])}}const St={float64:!1,mapSorter:kt,quickEncodeToken:xt},Ct=Object.freeze({float64:!0,mapSorter:At,quickEncodeToken:xt});function wt(){let e=[];return e[c.uint.major]=T,e[c.negint.major]=Se,e[c.bytes.major]=ke,e[c.string.major]=Ie,e[c.array.major]=Ue,e[c.map.major]=Xe,e[c.tag.major]=nt,e[c.float.major]=pt,e}const Tt=wt(),Et=new ue;var Dt=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(`${de} object contains circular references`);return new e(n,t)}};const L={null:new l(c.null,null),undefined:new l(c.undefined,void 0),true:new l(c.true,!0),false:new l(c.false,!1),emptyArray:new l(c.array,0),emptyMap:new l(c.map,0)},R={number(e,t,n,r){return!Number.isInteger(e)||!Number.isSafeInteger(e)?new l(c.float,e):e>=0?new l(c.uint,e):new l(c.negint,e)},bigint(e,t,n,r){return e>=BigInt(0)?new l(c.uint,e):new l(c.negint,e)},Uint8Array(e,t,n,r){return new l(c.bytes,e)},string(e,t,n,r){return new l(c.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 l(c.bytes,new Uint8Array(e))},DataView(e,t,n,r){return new l(c.bytes,new Uint8Array(e.buffer,e.byteOffset,e.byteLength))},Array(e,t,n,r){if(!e.length)return n.addBreakTokens===!0?[L.emptyArray,new l(c.break)]:L.emptyArray;r=Dt.createCheck(r,e);let i=[],a=0;for(let t of e)i[a++]=z(t,n,r);return n.addBreakTokens?[new l(c.array,e.length),i,new l(c.break)]:[new l(c.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;if(!o)return n.addBreakTokens===!0?[L.emptyMap,new l(c.break)]:L.emptyMap;r=Dt.createCheck(r,e);let s=[],u=0;for(let t of a)s[u++]=[z(t,n,r),z(i?e.get(t):e[t],n,r)];return Ot(s,n),n.addBreakTokens?[new l(c.map,o),s,new l(c.break)]:[new l(c.map,o),s]}};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(`${de} unsupported type: ${r}`);return o(e,r,t,n)}function Ot(e,t){t.mapSorter&&e.sort(t.mapSorter)}function kt(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=Tt[n.type.major].compareTokens(n,r);return i===0&&console.warn(`WARNING: complex key types used, CBOR key sorting guarantees are gone`),i}function At(e,t){if(e[0]instanceof l&&t[0]instanceof l){let n=e[0],r=t[0];return n._keyBytes||=jt(n.value),r._keyBytes||=jt(r.value),ie(n._keyBytes,r._keyBytes)}throw Error(`rfc8949MapSorter: complex key types are not supported yet`)}function jt(e){return Nt(e,Tt,Ct)}function Mt(e,t,n,r){if(Array.isArray(t))for(let i of t)Mt(e,i,n,r);else n[t.type.major](e,t,r)}function Nt(e,t,n){let r=z(e,n);if(!Array.isArray(r)&&n.quickEncodeToken){let e=n.quickEncodeToken(r);if(e)return e;let i=t[r.type.major];if(i.encodedSize){let e=new ue(i.encodedSize(r,n));if(i(e,r,n),e.chunks.length!==1)throw Error(`Unexpected error: pre-calculated length for ${r} was wrong`);return m(e.chunks[0])}}return Et.reset(),Mt(Et,r,t,n),Et.toBytes(!0)}function Pt(e,t){return t=Object.assign({},St,t),Nt(e,Tt,t)}const Ft={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0};var It=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=I[e];if(t===void 0){let n=F[e];if(!n)throw Error(`${_} 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 B=Symbol.for(`DONE`),V=Symbol.for(`BREAK`);function Lt(e,t,n){let r=[];for(let i=0;i<e.value;i++){let a=H(t,n);if(a===V){if(e.value===1/0)break;throw Error(`${_} got unexpected break to lengthed array`)}if(a===B)throw Error(`${_} found array but not enough entries (got ${i}, expected ${e.value})`);r[i]=a}return r}function Rt(e,t,n){let r=n.useMaps===!0,i=r?void 0:{},a=r?new Map:void 0;for(let o=0;o<e.value;o++){let s=H(t,n);if(s===V){if(e.value===1/0)break;throw Error(`${_} got unexpected break to lengthed map`)}if(s===B)throw Error(`${_} found map but not enough entries (got ${o} [no key], expected ${e.value})`);if(r!==!0&&typeof s!=`string`)throw Error(`${_} non-string keys not supported (got ${typeof s})`);if(n.rejectDuplicateMapKeys===!0&&(r&&a.has(s)||!r&&s in i))throw Error(`${_} found repeat map key "${s}"`);let c=H(t,n);if(c===B)throw Error(`${_} found map but not enough entries (got ${o} [no value], expected ${e.value})`);r?a.set(s,c):i[s]=c}return r?a:i}function H(e,t){if(e.done())return B;let n=e.next();if(n.type===c.break)return V;if(n.type.terminal)return n.value;if(n.type===c.array)return Lt(n,e,t);if(n.type===c.map)return Rt(n,e,t);if(n.type===c.tag){if(t.tags&&typeof t.tags[n.value]==`function`){let r=H(e,t);return t.tags[n.value](r)}throw Error(`${_} tag not supported (${n.value})`)}throw Error(`unsupported`)}function zt(e,t){if(!(e instanceof Uint8Array))throw Error(`${_} data to decode must be a Uint8Array`);t=Object.assign({},Ft,t);let n=t.tokenizer||new It(e,t),r=H(n,t);if(r===B)throw Error(`${_} did not find any content to decode`);if(r===V)throw Error(`${_} got unexpected break`);return[r,e.subarray(n.pos())]}function Bt(e,t){let[n,r]=zt(e,t);if(r.length>0)throw Error(`${_} too many terminals, data makes no sense`);return n}const Vt=new Uint8Array;function Ht(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 Ut(e){if(e instanceof Uint8Array&&e.constructor.name===`Uint8Array`)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error(`Unknown type, must be binary type`)}function Wt(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 h=c.repeat(n);m<o;++m)h+=e.charAt(l[m]);return h}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)),h=r;p!==a;)m[h++]=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 Gt=Wt,Kt=Gt,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`)}},Jt=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 Xt(this,e)}},Yt=class{decoders;constructor(e){this.decoders=e}or(e){return Xt(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 Xt(e,t){return new Yt({...e.decoders??{[e.prefix]:e},...t.decoders??{[t.prefix]:t}})}var Zt=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 Jt(e,t,r)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Qt({name:e,prefix:t,encode:n,decode:r}){return new Zt(e,t,n,r)}function U({name:e,prefix:t,alphabet:n}){let{encode:r,decode:i}=Kt(n,e);return Qt({prefix:t,name:e,encode:r,decode:e=>Ut(i(e))})}function $t(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 en(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 tn(e){let t={};for(let n=0;n<e.length;++n)t[e[n]]=n;return t}function W({name:e,prefix:t,bitsPerChar:n,alphabet:r}){let i=tn(r);return Qt({prefix:t,name:e,encode(e){return en(e,r,n)},decode(t){return $t(t,i,n,e)}})}const G=W({prefix:`b`,name:`base32`,alphabet:`abcdefghijklmnopqrstuvwxyz234567`,bitsPerChar:5}),nn=W({prefix:`B`,name:`base32upper`,alphabet:`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567`,bitsPerChar:5}),rn=W({prefix:`c`,name:`base32pad`,alphabet:`abcdefghijklmnopqrstuvwxyz234567=`,bitsPerChar:5}),an=W({prefix:`C`,name:`base32padupper`,alphabet:`ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=`,bitsPerChar:5}),on=W({prefix:`v`,name:`base32hex`,alphabet:`0123456789abcdefghijklmnopqrstuv`,bitsPerChar:5}),sn=W({prefix:`V`,name:`base32hexupper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUV`,bitsPerChar:5}),cn=W({prefix:`t`,name:`base32hexpad`,alphabet:`0123456789abcdefghijklmnopqrstuv=`,bitsPerChar:5}),ln=W({prefix:`T`,name:`base32hexpadupper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUV=`,bitsPerChar:5}),un=W({prefix:`h`,name:`base32z`,alphabet:`ybndrfg8ejkmcpqxot1uwisza345h769`,bitsPerChar:5}),dn=U({prefix:`k`,name:`base36`,alphabet:`0123456789abcdefghijklmnopqrstuvwxyz`}),fn=U({prefix:`K`,name:`base36upper`,alphabet:`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ`}),K=U({name:`base58btc`,prefix:`z`,alphabet:`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`}),pn=U({name:`base58flickr`,prefix:`Z`,alphabet:`123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ`});var mn=vn,hn=128,gn=-128,_n=2**31;function vn(e,t,n){t||=[],n||=0;for(var r=n;e>=_n;)t[n++]=e&255|hn,e/=128;for(;e&gn;)t[n++]=e&255|hn,e>>>=7;return t[n]=e|0,vn.bytes=n-r+1,t}var yn=Sn,bn=128,xn=127;function Sn(e,t){var n=0,t=t||0,r=0,i=t,a,o=e.length;do{if(i>=o)throw Sn.bytes=0,RangeError(`Could not decode varint`);a=e[i++],n+=r<28?(a&xn)<<r:(a&xn)*2**r,r+=7}while(a>=bn);return Sn.bytes=i-t,n}var Cn=2**7,wn=2**14,Tn=2**21,En=2**28,Dn=2**35,On=2**42,kn=2**49,An=2**56,jn=2**63,Mn=function(e){return e<Cn?1:e<wn?2:e<Tn?3:e<En?4:e<Dn?5:e<On?6:e<kn?7:e<An?8:e<jn?9:10},Nn={encode:mn,decode:yn,encodingLength:Mn},Pn=Nn;function Fn(e,t=0){return[Pn.decode(e,t),Pn.decode.bytes]}function In(e,t,n=0){return Pn.encode(e,t,n),t}function Ln(e){return Pn.encodingLength(e)}function Rn(e,t){let n=t.byteLength,r=Ln(e),i=r+Ln(n),a=new Uint8Array(i+n);return In(e,a,0),In(n,a,r),a.set(t,i),new Vn(e,n,t,a)}function zn(e){let t=Ut(e),[n,r]=Fn(t),[i,a]=Fn(t.subarray(r)),o=t.subarray(r+a);if(o.byteLength!==i)throw Error(`Incorrect length`);return new Vn(n,i,o,t)}function Bn(e,t){if(e===t)return!0;{let n=t;return e.code===n.code&&e.size===n.size&&n.bytes instanceof Uint8Array&&Ht(e.bytes,n.bytes)}}var Vn=class{code;size;digest;bytes;constructor(e,t,n,r){this.code=e,this.size=t,this.digest=n,this.bytes=r}};function Hn(e,t){let{bytes:n,version:r}=e;switch(r){case 0:return qn(n,Wn(e),t??K.encoder);default:return Jn(n,Wn(e),t??G.encoder)}}const Un=new WeakMap;function Wn(e){let t=Un.get(e);if(t==null){let t=new Map;return Un.set(e,t),t}return t}var Gn=class e{code;version;multihash;bytes;"/";constructor(e,t,n,r){this.code=t,this.version=e,this.multihash=n,this.bytes=r,this[`/`]=r}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!==Yn)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=Rn(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&&Bn(e.multihash,n.multihash)}toString(e){return Hn(this,e)}toJSON(){return{"/":Hn(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??Xn(t,r,i.bytes))}else if(n[Zn]===!0){let{version:t,multihash:r,code:i}=n,a=zn(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,Xn(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=Ut(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 Vn(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]=Fn(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]=Kn(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 Wn(a).set(r,t),a}};function Kn(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 G.prefix:{let n=t??G;return[G.prefix,n.decode(e)]}case dn.prefix:{let n=t??dn;return[dn.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 qn(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 Jn(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,Yn=18;function Xn(e,t,n){let r=Ln(e),i=r+Ln(t),a=new Uint8Array(i+n.byteLength);return In(e,a,0),In(t,a,r),a.set(n,i),a}const Zn=Symbol.for(`@ipld/js-cid/CID`),Qn=42;function $n(e){return e instanceof ArrayBuffer?new Uint8Array(e,0,e.byteLength):e}function er(e){if(e.asCID!==e&&e[`/`]!==e.bytes)return null;let t=Gn.asCID(e);if(!t)return null;let n=new Uint8Array(t.bytes.byteLength+1);return n.set(t.bytes,1),[new l(c.tag,42),new l(c.bytes,n)]}function tr(){throw Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function nr(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 rr(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 ir={float64:!0,typeEncoders:{Map:rr,Object:er,undefined:tr,number:nr}},ar={...ir,typeEncoders:{...ir.typeEncoders}};function or(e){if(e[0]!==0)throw Error(`Invalid CID for CBOR tag 42; expected leading 0x00`);return Gn.decode(e.subarray(1))}const sr={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};sr.tags[42]=or;const cr={...sr,tags:sr.tags.slice()},lr=e=>Pt(e,ir),ur=e=>Bt($n(e),sr);function dr(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 fr,J,pr,mr;let Y=fr=class extends t.ccc.Entity.Base(){constructor(e,t){super(),this.document=e,this.localId=t}static from(e){return e instanceof fr?e:new fr(e.document,e.localId??void 0)}};Y=fr=dr([t.ccc.codec(t.ccc.mol.table({document:t.ccc.mol.Bytes,localId:t.ccc.mol.StringOpt}).map({inMap:e=>({...e,document:t.ccc.hexFrom(lr(e.document))}),outMap:e=>({...e,document:ur(t.ccc.bytesFrom(e.document))})}))],Y);let X=J=class extends t.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=dr([t.ccc.codec(t.ccc.mol.union({v1:Y}))],X);let Z=pr=class extends t.ccc.Entity.Base(){constructor(e,t,n){super(),this.history=e,this.sig=t,this.rotationKeyIndices=n}static from(e){return e instanceof pr?e:new pr(e.history,t.ccc.hexFrom(e.sig),e.rotationKeyIndices.map(t.ccc.numFrom))}};Z=pr=dr([t.ccc.codec(t.ccc.mol.table({history:t.ccc.mol.BytesVec,sig:t.ccc.mol.Bytes,rotationKeyIndices:t.ccc.mol.Uint8Vec}).map({inMap:e=>({...e,history:e.history.map(e=>t.ccc.hexFrom(lr(e)))}),outMap:e=>({...e,history:e.history.map(e=>ur(t.ccc.bytesFrom(e)))})}))],Z);let Q=mr=class extends t.ccc.Entity.Base(){constructor(e){super(),this.localIdAuthorization=e}static from(e){return e instanceof mr?e:new mr(Z.from(e.localIdAuthorization))}};Q=mr=dr([t.ccc.codec(t.ccc.mol.table({localIdAuthorization:Z}))],Q);const hr=n.typeIdA.buildTypeIdOperations({async getScriptInfo(e){return e.getKnownScript(t.ccc.KnownScript.DidCkb)},codec:X,async calculateTypeId(e,n){return t.ccc.bytesFrom(t.ccc.hashTypeId(n.inputs[0],n.outputs.length)).slice(0,20)}});function gr(e){return hr.create(e)}async function _r(e){return hr.transfer(e)}async function vr(e){return hr.destroy(e)}const yr=`did:ckb:`,br=20,xr=32,Sr=`abcdefghijklmnopqrstuvwxyz234567`,Cr=(()=>{let e={};for(let t=0;t<32;t++)e[Sr[t]]=t;return e})();function wr(e){let n=t.ccc.bytesFrom(e),r=0,i=0,a=``;for(let e=0;e<n.length;e++)for(i=i<<8|n[e],r+=8;r>=5;)a+=Sr[i>>>r-5&31],r-=5;return r>0&&(a+=Sr[i<<5-r&31]),a}function Tr(e){let t=e.toLowerCase().replace(/=+$/g,``),n=0,r=0,i=[];for(let e of t){let t=Cr[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 Er(e){let n=t.ccc.bytesFrom(e);if(n.length!==20)throw Error(`did:ckb args must be 20 bytes, got ${n.length}`);return yr+wr(n)}function $(e){if(!e.startsWith(yr))throw Error(`Expected did:ckb:..., got "${e}"`);let n=e.slice(8);if(n.length!==32)throw Error(`did:ckb identifier must be 32 base32 chars, got ${n.length}`);let r=Tr(n);if(r.length!==20)throw Error(`did:ckb identifier must decode to 20 bytes, got ${r.length}`);return t.ccc.hexFrom(r)}function Dr(e){if(!e.startsWith(yr))return!1;try{return $(e),!0}catch{return!1}}async function Or(e,n){let r=await e.getKnownScript(t.ccc.KnownScript.DidCkb);return t.ccc.Script.from({codeHash:r.codeHash,hashType:r.hashType,args:n})}function kr(e,t){return{did:Er(t),id:t,data:X.decode(e.outputData),cell:e}}async function Ar(e){let n=t.ccc.hexFrom(e.id),r=await Or(e.client,n),i=await e.client.findSingletonCellByType(r,!0);if(i)return kr(i,n)}async function jr(e){if(!Dr(e.did))throw Error(`Not a did:ckb identifier: ${e.did}`);return Ar({client:e.client,id:$(e.did)})}async function Mr(e){let n=await e.client.getKnownScript(t.ccc.KnownScript.DidCkb),r=[];for await(let i of e.client.findCells({script:t.ccc.Script.from(e.lock),scriptType:`lock`,scriptSearchMode:`exact`,filter:{script:t.ccc.Script.from({codeHash:n.codeHash,hashType:n.hashType,args:`0x`})},withData:!0},e.order,e.limit)){let e=i.cellOutput.type;if(e&&t.ccc.bytesFrom(e.args).length===20)try{r.push(kr(i,t.ccc.hexFrom(e.args)))}catch{}}return r}const Nr=50;async function Pr(e){let n=typeof e.id==`string`&&Dr(e.id)?$(e.id):t.ccc.hexFrom(e.id),r=(await e.client.getKnownScript(t.ccc.KnownScript.DidCkb)).codeHash.toLowerCase(),i=n.toLowerCase(),a=e.liveCell??(await Ar({client:e.client,id:n}))?.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=Ir(a,t.blockNumber);if(!n)break;let s=await Fr(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 Fr(e,n,r,i){let{inputs:a}=t.ccc.Transaction.from(n);for(let n of a){let a;try{a=await n.getCell(e)}catch{continue}let o=a.cellOutput.type;if(o&&o.codeHash.toLowerCase()===r&&t.ccc.hexFrom(o.args).toLowerCase()===i)return a}}function Ir(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 Lr(n){let r=e.r(n.genesisOperation);if(!r[n.rotationKeyIndex])throw Error(`rotationKeyIndex ${n.rotationKeyIndex} out of range (genesis has ${r.length} keys)`);let i=n.curve??r[n.rotationKeyIndex].curve,a=e.o(n.rotationPrivateKey,t.ccc.bytesFrom(n.txHash),i);return Q.from({localIdAuthorization:{history:[n.genesisOperation],sig:t.ccc.hexFrom(a),rotationKeyIndices:[n.selfSigIndex??0,n.rotationKeyIndex]}})}async function Rr(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 gr({signer:e.signer,data:n,receiver:e.receiver,tx:e.tx})}var zr=e.c({DidCkbData:()=>X,DidCkbDataV1:()=>Y,DidCkbWitness:()=>Q,PlcAuthorization:()=>Z,argsToDid:()=>Er,base32Decode:()=>Tr,base32Encode:()=>wr,buildMigrationWitness:()=>Lr,createDidCkb:()=>gr,destroyDidCkb:()=>vr,didToArgs:()=>$,findDidCkbCell:()=>Ar,getDidCkbHistory:()=>Pr,isDidCkb:()=>Dr,listDidCkbsByLock:()=>Mr,migrateDidCkb:()=>Rr,plc:()=>e.a,resolveDidCkb:()=>jr,transferDidCkb:()=>_r});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Ar}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Er}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Dr}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return _r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Pr}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Tr}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return vr}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Lr}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Mr}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return gr}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Rr}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return jr}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return zr}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return wr}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Z}});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-CO-1f0jl.d.ts","names":[],"sources":["../src/plc/index.ts"],"sourcesContent":[],"mappings":";;;;;;KAgBY,KAAA;KAEA,cAAA;;SAEH;oBACW,GAAA,CAAI;;KAGZ,YAAA;;;wBAGY;;aAEX;;;;;;;;;;;;;;;;iBAeS,WAAA,mCAGnB,QAAQ;iBAeK,mBAAA,MAAyB,iBAAiB;;AA9C1D;AAEA;AAMA;AAoBA;AAkBA;AAcA;AAsBgB,iBAtBA,eAAA,CAwBQ,EAAA,EAxBY,YAwBP,CAAA,EAxBsB,cAwBtB,EAAA;AAoCb,iBAtCA,WAAA,CAsCgB,MAAA,EAAA,MAAA,CAAA,EAAA;EAClB,KAAI,EAtCT,KAsCS;EACR,gBAAI,EAtCM,GAAA,CAAI,KAsCV;CACL;;;AA6BT;;;;;;;;iBAhCgB,gBAAA,aACF,GAAA,CAAI,mBACR,GAAA,CAAI,kBACL,QACN,GAAA,CAAI;;;;;;iBA4BS,qBAAA,aACF,GAAA,CAAI,2BACA,GAAA,CAAI,kBACb"}
|
|
@@ -1 +0,0 @@
|
|
|
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};let n=require(`@ckb-ccc/core`),r=require(`@noble/curves/nist.js`),i=require(`@noble/curves/secp256k1.js`);var a=t({fetchPlcLog:()=>s,getGenesisOperation:()=>c,getRotationKeys:()=>l,parseDidKey:()=>u,signRotationHash:()=>d,verifyPrivateKeyMatch:()=>f});const o=`https://plc.directory`;async function s(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 c(e){if(e.length===0)throw Error(`Empty PLC log`);return e[0]}function l(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=u(e);return{didKey:e,curve:t.curve,compressedPubkey:t.compressedPubkey}})}function u(e){if(!e.startsWith(`did:key:z`))throw Error(`Expected did:key:z..., got "${e}"`);let t=h(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 d(e,t,a){let o=n.ccc.bytesFrom(t);if(o.length!==32)throw Error(`Expected 32-byte tx hash, got ${o.length}`);let s=n.ccc.bytesFrom(e);if(s.length!==32)throw Error(`Expected 32-byte private key, got ${s.length}`);return a===`secp256k1`?i.secp256k1.sign(o,s,{prehash:!0,lowS:!0,format:`compact`}):r.p256.sign(o,s,{prehash:!0,lowS:!0,format:`compact`})}function f(e,t,a){let o=n.ccc.bytesFrom(e);if(o.length!==32)return!1;let s=n.ccc.bytesFrom(t),c=a===`secp256k1`?i.secp256k1.getPublicKey(o,!0):r.p256.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 p=`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`,m=(()=>{let e={};for(let t=0;t<58;t++)e[`123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`[t]]=t;return e})();function h(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=m[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])}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|