@smartledger/envelope 2.0.1 → 2.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAkCpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA6C5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAkE7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAEhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EACnC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAW5B"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAuCpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAuE5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA6G7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAEhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EACnC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAW5B"}
@@ -1,5 +1,9 @@
1
1
  import { canonicalize } from './jcs.js';
2
2
  const ENVELOPE_VERSION = '2.0.0';
3
+ /** Suites whose security does not rest on factoring or discrete logarithms. */
4
+ function isPostQuantumSuite(suiteId) {
5
+ return /^(ml-dsa|slh-dsa|fn-dsa)-/.test(suiteId);
6
+ }
3
7
  /**
4
8
  * How the bytes a signature covers are built, per envelope version.
5
9
  *
@@ -60,6 +64,27 @@ export async function createSignedEnvelope(sdk, keyId, payload, options) {
60
64
  parentId: options.parentId,
61
65
  ...options.metadata,
62
66
  };
67
+ // Dual signing. The co-signer is declared inside `meta`, which the primary
68
+ // signature covers, so the co-signature cannot be stripped: an envelope that
69
+ // declares one and does not carry a valid one fails verification.
70
+ let pqKey = null;
71
+ if (options.dualSign) {
72
+ if (!options.pqKeyId) {
73
+ throw new Error('dualSign requires options.pqKeyId (the post-quantum co-signing key)');
74
+ }
75
+ pqKey = await sdk.getKey(options.pqKeyId);
76
+ if (!pqKey) {
77
+ throw new Error(`Key ${options.pqKeyId} not found`);
78
+ }
79
+ if (!isPostQuantumSuite(pqKey.meta.suiteId)) {
80
+ throw new Error(`dualSign needs a post-quantum co-signing key; ${options.pqKeyId} is ${pqKey.meta.suiteId}`);
81
+ }
82
+ meta.coSigner = { algorithm: pqKey.meta.suiteId, keyId: options.pqKeyId };
83
+ }
84
+ else if (meta.coSigner !== undefined) {
85
+ // Reserved: only this function may declare a co-signer.
86
+ throw new Error('metadata.coSigner is reserved; use dualSign with pqKeyId');
87
+ }
63
88
  const message = signingBytes(payload, meta);
64
89
  // Sign with primary key
65
90
  const signature = await sdk.signWithKey(keyId, message);
@@ -74,11 +99,14 @@ export async function createSignedEnvelope(sdk, keyId, payload, options) {
74
99
  signature: Buffer.from(signature).toString('base64'),
75
100
  timestamp: now,
76
101
  };
77
- // Optional: dual-sign with PQ if requested and available
78
- if (options.dualSign) {
79
- // Check if suite has PQ capability or if there's a secondary suite
80
- // For now, just document the pattern - implementation would check
81
- // if key has a secondary PQ suite and sign with that too
102
+ if (pqKey && options.pqKeyId) {
103
+ const pqSignature = await sdk.signWithKey(options.pqKeyId, message);
104
+ signatureMetadata.pqSignature = {
105
+ algorithm: pqKey.meta.suiteId,
106
+ keyId: options.pqKeyId,
107
+ publicKey: Buffer.from(pqKey.publicKey).toString('base64'),
108
+ signature: Buffer.from(pqSignature).toString('base64'),
109
+ };
82
110
  }
83
111
  return {
84
112
  payload,
@@ -137,13 +165,53 @@ export async function verifySignedEnvelope(sdk, envelope, options = {}) {
137
165
  error: 'Signature verification failed',
138
166
  };
139
167
  }
140
- // Verify PQ signature if present and requested
168
+ // The post-quantum co-signature. `verified` reports 'both' only when the
169
+ // co-signature was actually checked and is valid; this used to be set
170
+ // whenever a pqSignature field was merely present.
141
171
  let verified = 'primary';
142
- if (options.verifyPQ && envelope._signature.pqSignature) {
143
- // Would verify PQ signature here
144
- // For now, just document the pattern
172
+ const declared = envelope.meta.coSigner;
173
+ const pq = envelope._signature.pqSignature;
174
+ if (declared !== undefined && !pq) {
175
+ return {
176
+ valid: false,
177
+ error: 'Envelope declares a co-signer but carries no co-signature',
178
+ };
179
+ }
180
+ let pqVerified = false;
181
+ if (pq && (declared !== undefined || options.verifyPQ || options.requirePQ)) {
182
+ if (declared !== undefined && (declared.keyId !== pq.keyId || declared.algorithm !== pq.algorithm)) {
183
+ return {
184
+ valid: false,
185
+ error: 'Co-signature does not match the co-signer declared in the signed metadata',
186
+ };
187
+ }
188
+ const pqKey = pq.keyId ? await sdk.getKey(pq.keyId) : null;
189
+ if (!pqKey) {
190
+ return { valid: false, error: `Co-signing key not found: ${String(pq.keyId)}` };
191
+ }
192
+ // The algorithm comes from the verifier's key record, not the envelope.
193
+ if (pqKey.meta.suiteId !== pq.algorithm || !isPostQuantumSuite(pqKey.meta.suiteId)) {
194
+ return {
195
+ valid: false,
196
+ error: `Co-signing key ${pq.keyId} is ${pqKey.meta.suiteId}, not the post-quantum ${String(pq.algorithm)} claimed`,
197
+ };
198
+ }
199
+ const pqValid = (await sdk.verifySignature(pq.keyId, message, Buffer.from(pq.signature, 'base64'))) === true;
200
+ if (!pqValid) {
201
+ return { valid: false, error: 'Post-quantum co-signature verification failed' };
202
+ }
203
+ pqVerified = true;
145
204
  verified = 'both';
146
205
  }
206
+ if (options.requirePQ && !pqVerified) {
207
+ const primaryKey = await sdk.getKey(keyId);
208
+ if (!primaryKey || !isPostQuantumSuite(primaryKey.meta.suiteId)) {
209
+ return {
210
+ valid: false,
211
+ error: 'A post-quantum signature is required and none was verified',
212
+ };
213
+ }
214
+ }
147
215
  return {
148
216
  valid: true,
149
217
  verified,
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeySDK } from '@smartledger/keys';\nimport type {\n SignedEnvelope,\n CreateEnvelopeOptions,\n VerifyEnvelopeOptions,\n VerificationResult,\n EnvelopeMetadata,\n SignatureMetadata,\n} from './types.js';\nimport { canonicalize } from './jcs.js';\n\nconst ENVELOPE_VERSION = '2.0.0';\n\n/** Suites whose security does not rest on factoring or discrete logarithms. */\nfunction isPostQuantumSuite(suiteId: string): boolean {\n return /^(ml-dsa|slh-dsa|fn-dsa)-/.test(suiteId);\n}\n\n/**\n * How the bytes a signature covers are built, per envelope version.\n *\n * v1 used `JSON.stringify({ payload, meta })` with no canonicalization, so the\n * signed bytes depended on the insertion order of ordinary string keys. Two\n * semantically identical payloads built in different orders signed differently:\n *\n * { name: 'x', total: 1 } -> {\"payload\":{\"name\":\"x\",\"total\":1},…}\n * { total: 1, name: 'x' } -> {\"payload\":{\"total\":1,\"name\":\"x\"},…}\n *\n * Signing and verifying the same object graph in one process agreed, and a\n * JSON round-trip through V8 happened to be stable, which is why this held up in\n * practice. It fails as soon as the value is rebuilt by a different code path —\n * read back from a database, mapped through a different shape, or produced by a\n * non-JavaScript implementation. `meta` was worse: it is assembled with\n * `...options.metadata`, so a caller's own key order leaked into the signature.\n *\n * v2 canonicalizes with RFC 8785 first. v1 envelopes keep verifying byte for\n * byte: `meta.version` selects the construction, so nothing already signed\n * changes meaning, and no envelope has to be re-signed.\n */\nfunction signingBytes(payload: unknown, meta: EnvelopeMetadata): Uint8Array {\n const isV1 = String(meta.version ?? '').startsWith('1.');\n const serialized = isV1\n ? JSON.stringify({ payload, meta })\n : canonicalize({ payload, meta });\n return new TextEncoder().encode(serialized);\n}\n\n/**\n * Create a signed envelope from payload\n * \n * @example\n * ```typescript\n * import { createKeySDK } from '@smartledger/keys';\n * import { createSignedEnvelope } from '@smartledger/envelope';\n * \n * const sdk = createKeySDK();\n * const key = await sdk.createKey('my-agent', { primarySignatureSuite: 'ml-dsa-87' });\n * \n * const envelope = await createSignedEnvelope(\n * sdk,\n * key.meta.keyId,\n * { message: \"Hello, world!\" },\n * { creator: 'my-agent', contentType: 'greeting' }\n * );\n * ```\n */\nexport async function createSignedEnvelope<T>(\n sdk: KeySDK,\n keyId: string,\n payload: T,\n options: CreateEnvelopeOptions\n): Promise<SignedEnvelope<T>> {\n const now = new Date().toISOString();\n \n // Build metadata\n const meta: EnvelopeMetadata = {\n version: ENVELOPE_VERSION,\n creator: options.creator,\n creatorType: options.creatorType,\n createdAt: now,\n contentType: options.contentType,\n anchor: options.anchor,\n parentId: options.parentId,\n ...options.metadata,\n };\n\n // Dual signing. The co-signer is declared inside `meta`, which the primary\n // signature covers, so the co-signature cannot be stripped: an envelope that\n // declares one and does not carry a valid one fails verification.\n let pqKey: Awaited<ReturnType<KeySDK['getKey']>> = null;\n if (options.dualSign) {\n if (!options.pqKeyId) {\n throw new Error('dualSign requires options.pqKeyId (the post-quantum co-signing key)');\n }\n pqKey = await sdk.getKey(options.pqKeyId);\n if (!pqKey) {\n throw new Error(`Key ${options.pqKeyId} not found`);\n }\n if (!isPostQuantumSuite(pqKey.meta.suiteId)) {\n throw new Error(\n `dualSign needs a post-quantum co-signing key; ${options.pqKeyId} is ${pqKey.meta.suiteId}`\n );\n }\n meta.coSigner = { algorithm: pqKey.meta.suiteId, keyId: options.pqKeyId };\n } else if (meta.coSigner !== undefined) {\n // Reserved: only this function may declare a co-signer.\n throw new Error('metadata.coSigner is reserved; use dualSign with pqKeyId');\n }\n\n const message = signingBytes(payload, meta);\n \n // Sign with primary key\n const signature = await sdk.signWithKey(keyId, message);\n const key = await sdk.getKey(keyId);\n \n if (!key) {\n throw new Error(`Key ${keyId} not found`);\n }\n \n const signatureMetadata: SignatureMetadata = {\n algorithm: key.meta.suiteId,\n keyId,\n publicKey: Buffer.from(key.publicKey).toString('base64'),\n signature: Buffer.from(signature).toString('base64'),\n timestamp: now,\n };\n \n if (pqKey && options.pqKeyId) {\n const pqSignature = await sdk.signWithKey(options.pqKeyId, message);\n signatureMetadata.pqSignature = {\n algorithm: pqKey.meta.suiteId,\n keyId: options.pqKeyId,\n publicKey: Buffer.from(pqKey.publicKey).toString('base64'),\n signature: Buffer.from(pqSignature).toString('base64'),\n };\n }\n \n return {\n payload,\n meta,\n _signature: signatureMetadata,\n };\n}\n\n/**\n * Verify a signed envelope\n * \n * @example\n * ```typescript\n * const result = await verifySignedEnvelope(sdk, envelope);\n * if (result.valid) {\n * console.log('Verified! Created by:', result.creator);\n * console.log('Payload:', envelope.payload);\n * }\n * ```\n */\nexport async function verifySignedEnvelope<T>(\n sdk: KeySDK,\n envelope: SignedEnvelope<T>,\n options: VerifyEnvelopeOptions = {}\n): Promise<VerificationResult> {\n try {\n // Check age if maxAge specified\n if (options.maxAge) {\n const signatureTime = new Date(envelope._signature.timestamp).getTime();\n const age = Date.now() - signatureTime;\n if (age > options.maxAge) {\n return {\n valid: false,\n error: `Signature too old: ${age}ms > ${options.maxAge}ms`,\n };\n }\n }\n \n // Check expected creator if specified\n if (options.expectedCreator && envelope.meta.creator !== options.expectedCreator) {\n return {\n valid: false,\n error: `Unexpected creator: ${envelope.meta.creator} !== ${options.expectedCreator}`,\n };\n }\n \n // Rebuild the signed bytes the way the envelope's own version says they\n // were built, so v1 envelopes keep verifying unchanged.\n const message = signingBytes(envelope.payload, envelope.meta);\n const signature = Buffer.from(envelope._signature.signature, 'base64');\n \n // Verify signature\n const keyId = envelope._signature.keyId;\n if (!keyId) {\n return {\n valid: false,\n error: 'No keyId in signature metadata',\n };\n }\n \n const valid = await sdk.verifySignature(keyId, message, signature);\n \n if (!valid) {\n return {\n valid: false,\n error: 'Signature verification failed',\n };\n }\n \n // The post-quantum co-signature. `verified` reports 'both' only when the\n // co-signature was actually checked and is valid; this used to be set\n // whenever a pqSignature field was merely present.\n let verified: 'primary' | 'pq' | 'both' = 'primary';\n const declared = envelope.meta.coSigner as { algorithm?: unknown; keyId?: unknown } | undefined;\n const pq = envelope._signature.pqSignature;\n\n if (declared !== undefined && !pq) {\n return {\n valid: false,\n error: 'Envelope declares a co-signer but carries no co-signature',\n };\n }\n let pqVerified = false;\n if (pq && (declared !== undefined || options.verifyPQ || options.requirePQ)) {\n if (declared !== undefined && (declared.keyId !== pq.keyId || declared.algorithm !== pq.algorithm)) {\n return {\n valid: false,\n error: 'Co-signature does not match the co-signer declared in the signed metadata',\n };\n }\n const pqKey = pq.keyId ? await sdk.getKey(pq.keyId) : null;\n if (!pqKey) {\n return { valid: false, error: `Co-signing key not found: ${String(pq.keyId)}` };\n }\n // The algorithm comes from the verifier's key record, not the envelope.\n if (pqKey.meta.suiteId !== pq.algorithm || !isPostQuantumSuite(pqKey.meta.suiteId)) {\n return {\n valid: false,\n error: `Co-signing key ${pq.keyId} is ${pqKey.meta.suiteId}, not the post-quantum ${String(pq.algorithm)} claimed`,\n };\n }\n const pqValid =\n (await sdk.verifySignature(pq.keyId!, message, Buffer.from(pq.signature, 'base64'))) === true;\n if (!pqValid) {\n return { valid: false, error: 'Post-quantum co-signature verification failed' };\n }\n pqVerified = true;\n verified = 'both';\n }\n\n if (options.requirePQ && !pqVerified) {\n const primaryKey = await sdk.getKey(keyId);\n if (!primaryKey || !isPostQuantumSuite(primaryKey.meta.suiteId)) {\n return {\n valid: false,\n error: 'A post-quantum signature is required and none was verified',\n };\n }\n }\n \n return {\n valid: true,\n verified,\n creator: envelope.meta.creator,\n timestamp: envelope._signature.timestamp,\n contentMatch: true,\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Extract payload from envelope without verification\n * Use only when verification was done previously\n */\nexport function extractPayload<T>(envelope: SignedEnvelope<T>): T {\n return envelope.payload;\n}\n\n/**\n * Get envelope metadata\n */\nexport function getEnvelopeMeta<T>(envelope: SignedEnvelope<T>): EnvelopeMetadata {\n return envelope.meta;\n}\n\n/**\n * Check if envelope has PQ signature\n */\nexport function hasPQSignature<T>(envelope: SignedEnvelope<T>): boolean {\n return !!envelope._signature.pqSignature;\n}\n\n/**\n * Check if envelope has on-chain anchor\n */\nexport function hasAnchor<T>(envelope: SignedEnvelope<T>): boolean {\n return !!envelope.meta.anchor;\n}\n\n/**\n * Create a chain of custody by linking envelopes\n * \n * @example\n * ```typescript\n * const original = await createSignedEnvelope(sdk, keyId, data, { creator: 'alice' });\n * const updated = await createEnvelopeChain(\n * sdk,\n * keyId,\n * updatedData,\n * original,\n * { creator: 'bob', contentType: 'revision' }\n * );\n * // updated.meta.parentId === hash(original)\n * ```\n */\nexport async function createEnvelopeChain<T>(\n sdk: KeySDK,\n keyId: string,\n payload: T,\n parentEnvelope: SignedEnvelope<any>,\n options: Omit<CreateEnvelopeOptions, 'parentId'>\n): Promise<SignedEnvelope<T>> {\n // Create a hash of parent envelope as parentId\n const parentJson = JSON.stringify(parentEnvelope);\n const parentHash = Buffer.from(\n await crypto.subtle.digest('SHA-256', new TextEncoder().encode(parentJson))\n ).toString('hex');\n \n return createSignedEnvelope(sdk, keyId, payload, {\n ...options,\n parentId: parentHash,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE3E,0CAA0C;AAC1C,+DAA+D;AAC/D,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,YAAY,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAYvC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IAEnD,6BAA6B;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,qBAAqB,EAAE,SAAS;SACjC,CAAC,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;QAEL,KAAK,CAAC,QAAQ,CACZ,IAAO,EACP,IAA+B;YAE/B,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC5C,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,WAAW,EAAE,SAAS;gBACtB,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAI,QAA2B;YAC7C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,YAAY;YAChB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,GAAG,CAAC,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,IAAO,EACP,OAGC;IAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAA2B;IAE3B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE3E,0CAA0C;AAC1C,+DAA+D;AAC/D,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,YAAY,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAYvC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IAEnD,6BAA6B;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,qBAAqB,EAAE,SAAS;SACjC,CAAC,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;QAEL,KAAK,CAAC,QAAQ,CACZ,IAAO,EACP,IAA+B;YAE/B,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC5C,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,WAAW,EAAE,SAAS;gBACtB,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAI,QAA2B;YAC7C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,YAAY;YAChB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,GAAG,CAAC,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,IAAO,EACP,OAGC;IAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAA2B;IAE3B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { createKeySDK, type KeySDK } from '@smartledger/keys';\nimport type { SignedEnvelope, VerificationResult } from './types.js';\nimport { createSignedEnvelope, verifySignedEnvelope } from './envelope.js';\n\n// Singleton SDK for convenience functions\n// This allows signJson() and verifyJson() to work across calls\nlet _globalSDK: KeySDK | null = null;\n\nfunction getGlobalSDK(): KeySDK {\n if (!_globalSDK) {\n _globalSDK = createKeySDK();\n }\n return _globalSDK;\n}\n\n/**\n * High-level app identity interface\n * This is the \"1-2 line setup\" API that makes adoption trivial\n */\nexport interface AppIdentity {\n /** App/agent name */\n name: string;\n \n /** Key ID being used */\n keyId: string;\n \n /** Sign any JSON-serializable data */\n signJson<T>(data: T, options?: { contentType?: string }): Promise<SignedEnvelope<T>>;\n \n /** Verify any signed envelope */\n verifyJson<T>(envelope: SignedEnvelope<T>): Promise<VerificationResult>;\n \n /** Get the underlying SDK (for advanced usage) */\n getSDK(): KeySDK;\n \n /** Get public key for sharing */\n getPublicKey(): Promise<Uint8Array>;\n}\n\n/**\n * Create an app identity in 1-2 lines\n * \n * This is the \"killer API\" that makes people go: \"Oh, I get it.\"\n * \n * Creates an in-memory identity for signing/verification. Keys are ephemeral by default.\n * For persistence, see examples/file-storage or provide your own KeySDK with custom storage.\n * \n * @example Dead simple setup\n * ```typescript\n * import { createAppIdentity } from '@smartledger/envelope';\n * \n * // That's it. You're ready to sign things (in-memory).\n * const identity = await createAppIdentity({ name: 'MyCoolApp' });\n * \n * // Sign anything\n * const signed = await identity.signJson({ message: \"Hello, world!\" });\n * \n * // Verify anything\n * const result = await identity.verifyJson(signed);\n * console.log('Valid:', result.valid);\n * ```\n * \n * @example Use existing SDK with custom storage\n * ```typescript\n * import { createKeySDK } from '@smartledger/keys';\n * import { FileKeyStorage } from './storage'; // See examples/\n * \n * const sdk = createKeySDK({ storage: new FileKeyStorage('./keys') });\n * const key = await sdk.createKey('MyCoolApp', { primarySignatureSuite: 'ml-dsa-87' });\n * \n * const identity = await createAppIdentity({\n * name: 'MyCoolApp',\n * sdk, // Use your SDK with persistence\n * existingKeyId: key.meta.keyId\n * });\n * ```\n * \n * @example Sign AI responses\n * ```typescript\n * const identity = await createAppIdentity({ name: 'MyAI' });\n * \n * const response = await openai.chat.completions.create({\n * messages: [{ role: 'user', content: 'Hello!' }]\n * });\n * \n * const signed = await identity.signJson(response, {\n * contentType: 'ai-response'\n * });\n * \n * // Now you have cryptographic proof of what your AI said and when\n * ```\n * \n * @example Verify third-party content\n * ```typescript\n * const theirIdentity = await createAppIdentity({\n * name: 'TheirApp',\n * existingKeyId: 'their-public-key-id'\n * });\n * \n * const result = await theirIdentity.verifyJson(receivedEnvelope);\n * if (result.valid) {\n * console.log('Verified from:', result.creator);\n * }\n * ```\n */\nexport async function createAppIdentity(options: {\n /** App/agent name */\n name: string;\n \n /** Signature algorithm (default: 'ml-dsa-87') */\n algorithm?: 'ml-dsa-87' | 'bsv-ecdsa-secp256k1';\n \n /** Provide your own SDK (e.g., with custom storage) */\n sdk?: KeySDK;\n \n /** Use existing key ID instead of creating new */\n existingKeyId?: string;\n}): Promise<AppIdentity> {\n const sdk = options.sdk || createKeySDK();\n const algorithm = options.algorithm || 'ml-dsa-87';\n \n // Create or use existing key\n let keyId: string;\n if (options.existingKeyId) {\n keyId = options.existingKeyId;\n } else {\n const key = await sdk.createKey(options.name, {\n primarySignatureSuite: algorithm,\n });\n keyId = key.meta.keyId;\n }\n \n return {\n name: options.name,\n keyId,\n \n async signJson<T>(\n data: T,\n opts?: { contentType?: string }\n ): Promise<SignedEnvelope<T>> {\n return createSignedEnvelope(sdk, keyId, data, {\n creator: options.name,\n creatorType: 'service',\n contentType: opts?.contentType,\n });\n },\n \n async verifyJson<T>(envelope: SignedEnvelope<T>): Promise<VerificationResult> {\n return verifySignedEnvelope(sdk, envelope);\n },\n \n getSDK(): KeySDK {\n return sdk;\n },\n \n async getPublicKey(): Promise<Uint8Array> {\n const key = await sdk.getKey(keyId);\n if (!key) {\n throw new Error(`Key ${keyId} not found`);\n }\n return key.publicKey;\n },\n };\n}\n\n/**\n * Convenience: Sign JSON and return envelope in one call\n * For when you don't need to keep the identity around\n * \n * Uses a singleton SDK instance so keys persist across calls.\n * This allows verifyJson() to verify envelopes from signJson().\n * \n * @example\n * ```typescript\n * import { signJson } from '@smartledger/envelope';\n * \n * const signed = await signJson('MyApp', { message: \"Hello!\" });\n * ```\n */\nexport async function signJson<T>(\n appName: string,\n data: T,\n options?: {\n algorithm?: 'ml-dsa-87' | 'bsv-ecdsa-secp256k1';\n contentType?: string;\n }\n): Promise<SignedEnvelope<T>> {\n const sdk = getGlobalSDK();\n const identity = await createAppIdentity({\n name: appName,\n algorithm: options?.algorithm,\n sdk,\n });\n return identity.signJson(data, { contentType: options?.contentType });\n}\n\n/**\n * Convenience: Verify JSON envelope in one call\n * \n * Uses a singleton SDK instance to verify envelopes created with signJson().\n * \n * @example\n * ```typescript\n * import { verifyJson } from '@smartledger/envelope';\n * \n * const result = await verifyJson(receivedEnvelope);\n * if (result.valid) {\n * console.log('Payload:', receivedEnvelope.payload);\n * }\n * ```\n */\nexport async function verifyJson<T>(\n envelope: SignedEnvelope<T>\n): Promise<VerificationResult> {\n const sdk = getGlobalSDK();\n return verifySignedEnvelope(sdk, envelope);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAElB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAElB,MAAM,cAAc,CAAC","sourcesContent":["/**\n * @smartledger/envelope - Canonical SignedEnvelope for verifiable content\n * \n * The standard way to wrap any content with cryptographic verification.\n */\n\nexport * from './types.js';\nexport * from './envelope.js';\nexport * from './helpers.js';\nexport { canonicalize } from './jcs.js';\n\n// Re-export commonly used types for convenience\nexport type {\n SignedEnvelope,\n SignatureMetadata,\n EnvelopeMetadata,\n CreateEnvelopeOptions,\n VerifyEnvelopeOptions,\n VerificationResult,\n} from './types.js';\n\nexport {\n createSignedEnvelope,\n verifySignedEnvelope,\n extractPayload,\n getEnvelopeMeta,\n hasPQSignature,\n hasAnchor,\n createEnvelopeChain,\n} from './envelope.js';\n\nexport {\n createAppIdentity,\n type AppIdentity,\n} from './helpers.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jcs.js","sourceRoot":"","sources":["../../src/jcs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jcs.js","sourceRoot":"","sources":["../../src/jcs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RFC 8785 (JSON Canonicalization Scheme).\n *\n * TEMPORARY. `@smartledger/bsv` already contains a conformant implementation at\n * `lib/util/jcs.js` — it scores 11/11 against the conformance vectors — but it is\n * private: not in the package's `exports` map and not in `bsv.d.ts`. Build-order\n * item 1 is to promote it to `@smartledger/bsv/jcs`, at which point this file is\n * deleted and replaced by that import.\n *\n * It is vendored rather than reimplemented on purpose: the two must agree byte for\n * byte, and both are held to @smartledger/attest-vectors `canonical`, so the swap\n * is provably a no-op.\n *\n * Do NOT reach for a different canonicalizer in the meantime. Several of those in\n * the estate are non-conformant, including this package's own v1 signing input,\n * which used JSON.stringify directly and therefore depended on the insertion order\n * of ordinary string keys.\n *\n * This is the single copy for the workspace: @smartledger/attest imports\n * `canonicalize` from here rather than vendoring its own.\n */\n\n/** RFC 8785 requires UTF-16 code unit order, which is what a default sort gives. */\nfunction compareCodeUnits(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction isDroppable(v: unknown): boolean {\n return v === undefined || typeof v === 'function' || typeof v === 'symbol';\n}\n\n/**\n * Serialize DIRECTLY in sorted order. Never sort keys and rebuild an object: V8\n * orders integer-like own properties numerically ahead of string keys whatever\n * order they were inserted in, so the rebuild silently discards the sort.\n *\n * sort-then-rebuild {\"2\":\"two\",\"10\":\"ten\"}\n * RFC 8785 {\"10\":\"ten\",\"2\":\"two\"}\n */\nexport function canonicalize(value: unknown): string {\n return serialize(value, new Set());\n}\n\nfunction serialize(value: unknown, seen: Set<object>): string {\n if (value === null) return 'null';\n\n const t = typeof value;\n\n // JSON.stringify handles these correctly and is hard to beat by hand: for\n // finite numbers it emits ECMAScript Number::toString, exactly what JCS\n // mandates, and since ES2019 it emits well-formed output for lone surrogates.\n if (t === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError(`canonicalize: non-finite number ${String(value)} has no JSON representation`);\n }\n return JSON.stringify(value);\n }\n if (t === 'boolean' || t === 'string') return JSON.stringify(value);\n\n if (t === 'bigint') {\n throw new TypeError('canonicalize: bigint has no JSON representation; carry it as a string');\n }\n if (t === 'undefined' || t === 'function' || t === 'symbol') {\n throw new TypeError(`canonicalize: ${t} is not serializable at the top level`);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) throw new TypeError('canonicalize: circular reference');\n seen.add(value);\n const out =\n '[' + value.map((v) => (isDroppable(v) ? 'null' : serialize(v, seen))).join(',') + ']';\n seen.delete(value);\n return out;\n }\n\n if (t === 'object') {\n const obj = value as Record<string, unknown>;\n if (seen.has(obj)) throw new TypeError('canonicalize: circular reference');\n seen.add(obj);\n const keys = Object.keys(obj)\n .filter((k) => !isDroppable(obj[k]))\n .sort(compareCodeUnits);\n const out =\n '{' + keys.map((k) => JSON.stringify(k) + ':' + serialize(obj[k], seen)).join(',') + '}';\n seen.delete(obj);\n return out;\n }\n\n throw new TypeError(`canonicalize: unsupported type ${t}`);\n}\n"]}
@@ -107,8 +107,19 @@ export interface CreateEnvelopeOptions {
107
107
  contentType?: string;
108
108
  /** Optional parent envelope ID for chains of custody */
109
109
  parentId?: string;
110
- /** Whether to include post-quantum signature */
110
+ /**
111
+ * Add a second, post-quantum signature over the same bytes.
112
+ * Requires `pqKeyId`; without it creation throws rather than silently
113
+ * producing a single-signature envelope.
114
+ */
111
115
  dualSign?: boolean;
116
+ /**
117
+ * Key that makes the post-quantum co-signature when `dualSign` is set. It
118
+ * must be a post-quantum key (ml-dsa-*, slh-dsa-*). Its key ID and algorithm
119
+ * are written to `meta.coSigner`, which the primary signature covers, so the
120
+ * co-signature cannot be removed without invalidating the envelope.
121
+ */
122
+ pqKeyId?: string;
112
123
  /** Optional on-chain anchor info */
113
124
  anchor?: {
114
125
  chain: string;
@@ -139,8 +150,20 @@ export interface VerificationResult {
139
150
  * Options for verifying an envelope
140
151
  */
141
152
  export interface VerifyEnvelopeOptions {
142
- /** Whether to verify PQ signature if present */
153
+ /**
154
+ * Verify the post-quantum co-signature if one is present. An envelope whose
155
+ * signed metadata declares a co-signer is always checked, with or without
156
+ * this flag; the flag additionally checks a co-signature that the metadata
157
+ * does not declare. A present co-signature that fails makes the envelope
158
+ * invalid.
159
+ */
143
160
  verifyPQ?: boolean;
161
+ /**
162
+ * Require a valid post-quantum signature: either the primary signature is
163
+ * itself post-quantum, or a valid post-quantum co-signature is present.
164
+ * Use this to refuse envelopes that are only classically signed.
165
+ */
166
+ requirePQ?: boolean;
144
167
  /** Maximum age in milliseconds (rejects if older) */
145
168
  maxAge?: number;
146
169
  /** Expected creator (rejects if different) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG","sourcesContent":["/**\n * SignedEnvelope - Canonical schema for verifiable AI outputs and content provenance\n * \n * This is the standard envelope format for any content that needs cryptographic verification:\n * - AI-generated responses\n * - User submissions\n * - Agent communications\n * - Contract artifacts\n * - Audit logs\n * \n * Philosophy: Every piece of digital content should be able to answer:\n * - WHO created it (cryptographically proven identity)\n * - WHAT they created (content hash)\n * - WHEN they created it (timestamp)\n * - HOW to verify it (algorithm + public key)\n * \n * This envelope can be verified in 2025, 2045, or 2075.\n */\n\n/**\n * Core signature metadata\n */\nexport interface SignatureMetadata {\n /** Signature suite ID (e.g., 'bsv-ecdsa-secp256k1', 'ml-dsa-87') */\n algorithm: string;\n \n /** Public key or keyId for verification */\n publicKey?: string;\n keyId?: string;\n \n /** Base64-encoded signature */\n signature: string;\n \n /** ISO 8601 timestamp when signature was created */\n timestamp: string;\n \n /** Optional post-quantum signature for dual-signing */\n pqSignature?: {\n algorithm: string;\n publicKey?: string;\n keyId?: string;\n signature: string;\n };\n}\n\n/**\n * Metadata about the envelope and its context\n */\nexport interface EnvelopeMetadata {\n /** Version of the envelope schema (semver) */\n version: string;\n \n /** Who/what created this (agentId, userId, appName, etc.) */\n creator: string;\n \n /** Optional creator type for context */\n creatorType?: 'human' | 'agent' | 'service' | 'dao';\n \n /** ISO 8601 creation timestamp */\n createdAt: string;\n \n /** Content type hint (e.g., 'ai-response', 'blog-post', 'contract') */\n contentType?: string;\n \n /** Optional on-chain anchor reference */\n anchor?: {\n /** Blockchain/ledger identifier */\n chain: string;\n /** Transaction ID or block reference */\n txId: string;\n /** Timestamp of on-chain commitment */\n timestamp: string;\n };\n \n /** Optional parent envelope reference (for chains of custody) */\n parentId?: string;\n \n /** Application-specific metadata */\n [key: string]: any;\n}\n\n/**\n * The canonical SignedEnvelope structure\n * \n * @example Basic usage\n * ```typescript\n * const envelope: SignedEnvelope<MyData> = {\n * payload: { message: \"Hello, verifiable world!\" },\n * meta: {\n * version: \"1.0.0\",\n * creator: \"my-agent\",\n * createdAt: new Date().toISOString(),\n * contentType: \"ai-response\"\n * },\n * _signature: {\n * algorithm: \"ml-dsa-87\",\n * keyId: \"agent-key-001\",\n * signature: \"base64...\",\n * timestamp: new Date().toISOString()\n * }\n * };\n * ```\n */\nexport interface SignedEnvelope<T = any> {\n /** The actual content being signed */\n payload: T;\n \n /** Metadata about the envelope */\n meta: EnvelopeMetadata;\n \n /** Cryptographic signature and verification data */\n _signature: SignatureMetadata;\n}\n\n/**\n * Options for creating a signed envelope\n */\nexport interface CreateEnvelopeOptions {\n /** Creator identifier (agentId, userId, etc.) */\n creator: string;\n \n /** Optional creator type */\n creatorType?: 'human' | 'agent' | 'service' | 'dao';\n \n /** Optional content type hint */\n contentType?: string;\n \n /** Optional parent envelope ID for chains of custody */\n parentId?: string;\n \n /**\n * Add a second, post-quantum signature over the same bytes.\n * Requires `pqKeyId`; without it creation throws rather than silently\n * producing a single-signature envelope.\n */\n dualSign?: boolean;\n\n /**\n * Key that makes the post-quantum co-signature when `dualSign` is set. It\n * must be a post-quantum key (ml-dsa-*, slh-dsa-*). Its key ID and algorithm\n * are written to `meta.coSigner`, which the primary signature covers, so the\n * co-signature cannot be removed without invalidating the envelope.\n */\n pqKeyId?: string;\n \n /** Optional on-chain anchor info */\n anchor?: {\n chain: string;\n txId: string;\n timestamp: string;\n };\n \n /** Additional metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * Verification result\n */\nexport interface VerificationResult {\n /** Whether the signature is valid */\n valid: boolean;\n \n /** Which signature was verified ('primary' | 'pq' | 'both') */\n verified?: 'primary' | 'pq' | 'both';\n \n /** Error message if verification failed */\n error?: string;\n \n /** The creator from the envelope metadata */\n creator?: string;\n \n /** Timestamp from the signature */\n timestamp?: string;\n \n /** Whether content hash matches */\n contentMatch?: boolean;\n}\n\n/**\n * Options for verifying an envelope\n */\nexport interface VerifyEnvelopeOptions {\n /**\n * Verify the post-quantum co-signature if one is present. An envelope whose\n * signed metadata declares a co-signer is always checked, with or without\n * this flag; the flag additionally checks a co-signature that the metadata\n * does not declare. A present co-signature that fails makes the envelope\n * invalid.\n */\n verifyPQ?: boolean;\n\n /**\n * Require a valid post-quantum signature: either the primary signature is\n * itself post-quantum, or a valid post-quantum co-signature is present.\n * Use this to refuse envelopes that are only classically signed.\n */\n requirePQ?: boolean;\n \n /** Maximum age in milliseconds (rejects if older) */\n maxAge?: number;\n \n /** Expected creator (rejects if different) */\n expectedCreator?: string;\n \n /** Whether to verify on-chain anchor if present */\n verifyAnchor?: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAkCpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA6C5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAkE7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAEhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EACnC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAW5B"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAuCpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAuE5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA6G7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAEhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EACnC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAC/C,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAW5B"}
@@ -1,5 +1,9 @@
1
1
  import { canonicalize } from './jcs.js';
2
2
  const ENVELOPE_VERSION = '2.0.0';
3
+ /** Suites whose security does not rest on factoring or discrete logarithms. */
4
+ function isPostQuantumSuite(suiteId) {
5
+ return /^(ml-dsa|slh-dsa|fn-dsa)-/.test(suiteId);
6
+ }
3
7
  /**
4
8
  * How the bytes a signature covers are built, per envelope version.
5
9
  *
@@ -60,6 +64,27 @@ export async function createSignedEnvelope(sdk, keyId, payload, options) {
60
64
  parentId: options.parentId,
61
65
  ...options.metadata,
62
66
  };
67
+ // Dual signing. The co-signer is declared inside `meta`, which the primary
68
+ // signature covers, so the co-signature cannot be stripped: an envelope that
69
+ // declares one and does not carry a valid one fails verification.
70
+ let pqKey = null;
71
+ if (options.dualSign) {
72
+ if (!options.pqKeyId) {
73
+ throw new Error('dualSign requires options.pqKeyId (the post-quantum co-signing key)');
74
+ }
75
+ pqKey = await sdk.getKey(options.pqKeyId);
76
+ if (!pqKey) {
77
+ throw new Error(`Key ${options.pqKeyId} not found`);
78
+ }
79
+ if (!isPostQuantumSuite(pqKey.meta.suiteId)) {
80
+ throw new Error(`dualSign needs a post-quantum co-signing key; ${options.pqKeyId} is ${pqKey.meta.suiteId}`);
81
+ }
82
+ meta.coSigner = { algorithm: pqKey.meta.suiteId, keyId: options.pqKeyId };
83
+ }
84
+ else if (meta.coSigner !== undefined) {
85
+ // Reserved: only this function may declare a co-signer.
86
+ throw new Error('metadata.coSigner is reserved; use dualSign with pqKeyId');
87
+ }
63
88
  const message = signingBytes(payload, meta);
64
89
  // Sign with primary key
65
90
  const signature = await sdk.signWithKey(keyId, message);
@@ -74,11 +99,14 @@ export async function createSignedEnvelope(sdk, keyId, payload, options) {
74
99
  signature: Buffer.from(signature).toString('base64'),
75
100
  timestamp: now,
76
101
  };
77
- // Optional: dual-sign with PQ if requested and available
78
- if (options.dualSign) {
79
- // Check if suite has PQ capability or if there's a secondary suite
80
- // For now, just document the pattern - implementation would check
81
- // if key has a secondary PQ suite and sign with that too
102
+ if (pqKey && options.pqKeyId) {
103
+ const pqSignature = await sdk.signWithKey(options.pqKeyId, message);
104
+ signatureMetadata.pqSignature = {
105
+ algorithm: pqKey.meta.suiteId,
106
+ keyId: options.pqKeyId,
107
+ publicKey: Buffer.from(pqKey.publicKey).toString('base64'),
108
+ signature: Buffer.from(pqSignature).toString('base64'),
109
+ };
82
110
  }
83
111
  return {
84
112
  payload,
@@ -137,13 +165,53 @@ export async function verifySignedEnvelope(sdk, envelope, options = {}) {
137
165
  error: 'Signature verification failed',
138
166
  };
139
167
  }
140
- // Verify PQ signature if present and requested
168
+ // The post-quantum co-signature. `verified` reports 'both' only when the
169
+ // co-signature was actually checked and is valid; this used to be set
170
+ // whenever a pqSignature field was merely present.
141
171
  let verified = 'primary';
142
- if (options.verifyPQ && envelope._signature.pqSignature) {
143
- // Would verify PQ signature here
144
- // For now, just document the pattern
172
+ const declared = envelope.meta.coSigner;
173
+ const pq = envelope._signature.pqSignature;
174
+ if (declared !== undefined && !pq) {
175
+ return {
176
+ valid: false,
177
+ error: 'Envelope declares a co-signer but carries no co-signature',
178
+ };
179
+ }
180
+ let pqVerified = false;
181
+ if (pq && (declared !== undefined || options.verifyPQ || options.requirePQ)) {
182
+ if (declared !== undefined && (declared.keyId !== pq.keyId || declared.algorithm !== pq.algorithm)) {
183
+ return {
184
+ valid: false,
185
+ error: 'Co-signature does not match the co-signer declared in the signed metadata',
186
+ };
187
+ }
188
+ const pqKey = pq.keyId ? await sdk.getKey(pq.keyId) : null;
189
+ if (!pqKey) {
190
+ return { valid: false, error: `Co-signing key not found: ${String(pq.keyId)}` };
191
+ }
192
+ // The algorithm comes from the verifier's key record, not the envelope.
193
+ if (pqKey.meta.suiteId !== pq.algorithm || !isPostQuantumSuite(pqKey.meta.suiteId)) {
194
+ return {
195
+ valid: false,
196
+ error: `Co-signing key ${pq.keyId} is ${pqKey.meta.suiteId}, not the post-quantum ${String(pq.algorithm)} claimed`,
197
+ };
198
+ }
199
+ const pqValid = (await sdk.verifySignature(pq.keyId, message, Buffer.from(pq.signature, 'base64'))) === true;
200
+ if (!pqValid) {
201
+ return { valid: false, error: 'Post-quantum co-signature verification failed' };
202
+ }
203
+ pqVerified = true;
145
204
  verified = 'both';
146
205
  }
206
+ if (options.requirePQ && !pqVerified) {
207
+ const primaryKey = await sdk.getKey(keyId);
208
+ if (!primaryKey || !isPostQuantumSuite(primaryKey.meta.suiteId)) {
209
+ return {
210
+ valid: false,
211
+ error: 'A post-quantum signature is required and none was verified',
212
+ };
213
+ }
214
+ }
147
215
  return {
148
216
  valid: true,
149
217
  verified,
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/envelope.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeySDK } from '@smartledger/keys';\nimport type {\n SignedEnvelope,\n CreateEnvelopeOptions,\n VerifyEnvelopeOptions,\n VerificationResult,\n EnvelopeMetadata,\n SignatureMetadata,\n} from './types.js';\nimport { canonicalize } from './jcs.js';\n\nconst ENVELOPE_VERSION = '2.0.0';\n\n/** Suites whose security does not rest on factoring or discrete logarithms. */\nfunction isPostQuantumSuite(suiteId: string): boolean {\n return /^(ml-dsa|slh-dsa|fn-dsa)-/.test(suiteId);\n}\n\n/**\n * How the bytes a signature covers are built, per envelope version.\n *\n * v1 used `JSON.stringify({ payload, meta })` with no canonicalization, so the\n * signed bytes depended on the insertion order of ordinary string keys. Two\n * semantically identical payloads built in different orders signed differently:\n *\n * { name: 'x', total: 1 } -> {\"payload\":{\"name\":\"x\",\"total\":1},…}\n * { total: 1, name: 'x' } -> {\"payload\":{\"total\":1,\"name\":\"x\"},…}\n *\n * Signing and verifying the same object graph in one process agreed, and a\n * JSON round-trip through V8 happened to be stable, which is why this held up in\n * practice. It fails as soon as the value is rebuilt by a different code path —\n * read back from a database, mapped through a different shape, or produced by a\n * non-JavaScript implementation. `meta` was worse: it is assembled with\n * `...options.metadata`, so a caller's own key order leaked into the signature.\n *\n * v2 canonicalizes with RFC 8785 first. v1 envelopes keep verifying byte for\n * byte: `meta.version` selects the construction, so nothing already signed\n * changes meaning, and no envelope has to be re-signed.\n */\nfunction signingBytes(payload: unknown, meta: EnvelopeMetadata): Uint8Array {\n const isV1 = String(meta.version ?? '').startsWith('1.');\n const serialized = isV1\n ? JSON.stringify({ payload, meta })\n : canonicalize({ payload, meta });\n return new TextEncoder().encode(serialized);\n}\n\n/**\n * Create a signed envelope from payload\n * \n * @example\n * ```typescript\n * import { createKeySDK } from '@smartledger/keys';\n * import { createSignedEnvelope } from '@smartledger/envelope';\n * \n * const sdk = createKeySDK();\n * const key = await sdk.createKey('my-agent', { primarySignatureSuite: 'ml-dsa-87' });\n * \n * const envelope = await createSignedEnvelope(\n * sdk,\n * key.meta.keyId,\n * { message: \"Hello, world!\" },\n * { creator: 'my-agent', contentType: 'greeting' }\n * );\n * ```\n */\nexport async function createSignedEnvelope<T>(\n sdk: KeySDK,\n keyId: string,\n payload: T,\n options: CreateEnvelopeOptions\n): Promise<SignedEnvelope<T>> {\n const now = new Date().toISOString();\n \n // Build metadata\n const meta: EnvelopeMetadata = {\n version: ENVELOPE_VERSION,\n creator: options.creator,\n creatorType: options.creatorType,\n createdAt: now,\n contentType: options.contentType,\n anchor: options.anchor,\n parentId: options.parentId,\n ...options.metadata,\n };\n\n // Dual signing. The co-signer is declared inside `meta`, which the primary\n // signature covers, so the co-signature cannot be stripped: an envelope that\n // declares one and does not carry a valid one fails verification.\n let pqKey: Awaited<ReturnType<KeySDK['getKey']>> = null;\n if (options.dualSign) {\n if (!options.pqKeyId) {\n throw new Error('dualSign requires options.pqKeyId (the post-quantum co-signing key)');\n }\n pqKey = await sdk.getKey(options.pqKeyId);\n if (!pqKey) {\n throw new Error(`Key ${options.pqKeyId} not found`);\n }\n if (!isPostQuantumSuite(pqKey.meta.suiteId)) {\n throw new Error(\n `dualSign needs a post-quantum co-signing key; ${options.pqKeyId} is ${pqKey.meta.suiteId}`\n );\n }\n meta.coSigner = { algorithm: pqKey.meta.suiteId, keyId: options.pqKeyId };\n } else if (meta.coSigner !== undefined) {\n // Reserved: only this function may declare a co-signer.\n throw new Error('metadata.coSigner is reserved; use dualSign with pqKeyId');\n }\n\n const message = signingBytes(payload, meta);\n \n // Sign with primary key\n const signature = await sdk.signWithKey(keyId, message);\n const key = await sdk.getKey(keyId);\n \n if (!key) {\n throw new Error(`Key ${keyId} not found`);\n }\n \n const signatureMetadata: SignatureMetadata = {\n algorithm: key.meta.suiteId,\n keyId,\n publicKey: Buffer.from(key.publicKey).toString('base64'),\n signature: Buffer.from(signature).toString('base64'),\n timestamp: now,\n };\n \n if (pqKey && options.pqKeyId) {\n const pqSignature = await sdk.signWithKey(options.pqKeyId, message);\n signatureMetadata.pqSignature = {\n algorithm: pqKey.meta.suiteId,\n keyId: options.pqKeyId,\n publicKey: Buffer.from(pqKey.publicKey).toString('base64'),\n signature: Buffer.from(pqSignature).toString('base64'),\n };\n }\n \n return {\n payload,\n meta,\n _signature: signatureMetadata,\n };\n}\n\n/**\n * Verify a signed envelope\n * \n * @example\n * ```typescript\n * const result = await verifySignedEnvelope(sdk, envelope);\n * if (result.valid) {\n * console.log('Verified! Created by:', result.creator);\n * console.log('Payload:', envelope.payload);\n * }\n * ```\n */\nexport async function verifySignedEnvelope<T>(\n sdk: KeySDK,\n envelope: SignedEnvelope<T>,\n options: VerifyEnvelopeOptions = {}\n): Promise<VerificationResult> {\n try {\n // Check age if maxAge specified\n if (options.maxAge) {\n const signatureTime = new Date(envelope._signature.timestamp).getTime();\n const age = Date.now() - signatureTime;\n if (age > options.maxAge) {\n return {\n valid: false,\n error: `Signature too old: ${age}ms > ${options.maxAge}ms`,\n };\n }\n }\n \n // Check expected creator if specified\n if (options.expectedCreator && envelope.meta.creator !== options.expectedCreator) {\n return {\n valid: false,\n error: `Unexpected creator: ${envelope.meta.creator} !== ${options.expectedCreator}`,\n };\n }\n \n // Rebuild the signed bytes the way the envelope's own version says they\n // were built, so v1 envelopes keep verifying unchanged.\n const message = signingBytes(envelope.payload, envelope.meta);\n const signature = Buffer.from(envelope._signature.signature, 'base64');\n \n // Verify signature\n const keyId = envelope._signature.keyId;\n if (!keyId) {\n return {\n valid: false,\n error: 'No keyId in signature metadata',\n };\n }\n \n const valid = await sdk.verifySignature(keyId, message, signature);\n \n if (!valid) {\n return {\n valid: false,\n error: 'Signature verification failed',\n };\n }\n \n // The post-quantum co-signature. `verified` reports 'both' only when the\n // co-signature was actually checked and is valid; this used to be set\n // whenever a pqSignature field was merely present.\n let verified: 'primary' | 'pq' | 'both' = 'primary';\n const declared = envelope.meta.coSigner as { algorithm?: unknown; keyId?: unknown } | undefined;\n const pq = envelope._signature.pqSignature;\n\n if (declared !== undefined && !pq) {\n return {\n valid: false,\n error: 'Envelope declares a co-signer but carries no co-signature',\n };\n }\n let pqVerified = false;\n if (pq && (declared !== undefined || options.verifyPQ || options.requirePQ)) {\n if (declared !== undefined && (declared.keyId !== pq.keyId || declared.algorithm !== pq.algorithm)) {\n return {\n valid: false,\n error: 'Co-signature does not match the co-signer declared in the signed metadata',\n };\n }\n const pqKey = pq.keyId ? await sdk.getKey(pq.keyId) : null;\n if (!pqKey) {\n return { valid: false, error: `Co-signing key not found: ${String(pq.keyId)}` };\n }\n // The algorithm comes from the verifier's key record, not the envelope.\n if (pqKey.meta.suiteId !== pq.algorithm || !isPostQuantumSuite(pqKey.meta.suiteId)) {\n return {\n valid: false,\n error: `Co-signing key ${pq.keyId} is ${pqKey.meta.suiteId}, not the post-quantum ${String(pq.algorithm)} claimed`,\n };\n }\n const pqValid =\n (await sdk.verifySignature(pq.keyId!, message, Buffer.from(pq.signature, 'base64'))) === true;\n if (!pqValid) {\n return { valid: false, error: 'Post-quantum co-signature verification failed' };\n }\n pqVerified = true;\n verified = 'both';\n }\n\n if (options.requirePQ && !pqVerified) {\n const primaryKey = await sdk.getKey(keyId);\n if (!primaryKey || !isPostQuantumSuite(primaryKey.meta.suiteId)) {\n return {\n valid: false,\n error: 'A post-quantum signature is required and none was verified',\n };\n }\n }\n \n return {\n valid: true,\n verified,\n creator: envelope.meta.creator,\n timestamp: envelope._signature.timestamp,\n contentMatch: true,\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Extract payload from envelope without verification\n * Use only when verification was done previously\n */\nexport function extractPayload<T>(envelope: SignedEnvelope<T>): T {\n return envelope.payload;\n}\n\n/**\n * Get envelope metadata\n */\nexport function getEnvelopeMeta<T>(envelope: SignedEnvelope<T>): EnvelopeMetadata {\n return envelope.meta;\n}\n\n/**\n * Check if envelope has PQ signature\n */\nexport function hasPQSignature<T>(envelope: SignedEnvelope<T>): boolean {\n return !!envelope._signature.pqSignature;\n}\n\n/**\n * Check if envelope has on-chain anchor\n */\nexport function hasAnchor<T>(envelope: SignedEnvelope<T>): boolean {\n return !!envelope.meta.anchor;\n}\n\n/**\n * Create a chain of custody by linking envelopes\n * \n * @example\n * ```typescript\n * const original = await createSignedEnvelope(sdk, keyId, data, { creator: 'alice' });\n * const updated = await createEnvelopeChain(\n * sdk,\n * keyId,\n * updatedData,\n * original,\n * { creator: 'bob', contentType: 'revision' }\n * );\n * // updated.meta.parentId === hash(original)\n * ```\n */\nexport async function createEnvelopeChain<T>(\n sdk: KeySDK,\n keyId: string,\n payload: T,\n parentEnvelope: SignedEnvelope<any>,\n options: Omit<CreateEnvelopeOptions, 'parentId'>\n): Promise<SignedEnvelope<T>> {\n // Create a hash of parent envelope as parentId\n const parentJson = JSON.stringify(parentEnvelope);\n const parentHash = Buffer.from(\n await crypto.subtle.digest('SHA-256', new TextEncoder().encode(parentJson))\n ).toString('hex');\n \n return createSignedEnvelope(sdk, keyId, payload, {\n ...options,\n parentId: parentHash,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE3E,0CAA0C;AAC1C,+DAA+D;AAC/D,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,YAAY,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAYvC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IAEnD,6BAA6B;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,qBAAqB,EAAE,SAAS;SACjC,CAAC,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;QAEL,KAAK,CAAC,QAAQ,CACZ,IAAO,EACP,IAA+B;YAE/B,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC5C,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,WAAW,EAAE,SAAS;gBACtB,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAI,QAA2B;YAC7C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,YAAY;YAChB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,GAAG,CAAC,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,IAAO,EACP,OAGC;IAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAA2B;IAE3B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE3E,0CAA0C;AAC1C,+DAA+D;AAC/D,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,YAAY,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAYvC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IAEnD,6BAA6B;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,qBAAqB,EAAE,SAAS;SACjC,CAAC,CAAC;QACH,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;QAEL,KAAK,CAAC,QAAQ,CACZ,IAAO,EACP,IAA+B;YAE/B,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC5C,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,WAAW,EAAE,SAAS;gBACtB,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAI,QAA2B;YAC7C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM;YACJ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,YAAY;YAChB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,GAAG,CAAC,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,IAAO,EACP,OAGC;IAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAA2B;IAE3B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import { createKeySDK, type KeySDK } from '@smartledger/keys';\nimport type { SignedEnvelope, VerificationResult } from './types.js';\nimport { createSignedEnvelope, verifySignedEnvelope } from './envelope.js';\n\n// Singleton SDK for convenience functions\n// This allows signJson() and verifyJson() to work across calls\nlet _globalSDK: KeySDK | null = null;\n\nfunction getGlobalSDK(): KeySDK {\n if (!_globalSDK) {\n _globalSDK = createKeySDK();\n }\n return _globalSDK;\n}\n\n/**\n * High-level app identity interface\n * This is the \"1-2 line setup\" API that makes adoption trivial\n */\nexport interface AppIdentity {\n /** App/agent name */\n name: string;\n \n /** Key ID being used */\n keyId: string;\n \n /** Sign any JSON-serializable data */\n signJson<T>(data: T, options?: { contentType?: string }): Promise<SignedEnvelope<T>>;\n \n /** Verify any signed envelope */\n verifyJson<T>(envelope: SignedEnvelope<T>): Promise<VerificationResult>;\n \n /** Get the underlying SDK (for advanced usage) */\n getSDK(): KeySDK;\n \n /** Get public key for sharing */\n getPublicKey(): Promise<Uint8Array>;\n}\n\n/**\n * Create an app identity in 1-2 lines\n * \n * This is the \"killer API\" that makes people go: \"Oh, I get it.\"\n * \n * Creates an in-memory identity for signing/verification. Keys are ephemeral by default.\n * For persistence, see examples/file-storage or provide your own KeySDK with custom storage.\n * \n * @example Dead simple setup\n * ```typescript\n * import { createAppIdentity } from '@smartledger/envelope';\n * \n * // That's it. You're ready to sign things (in-memory).\n * const identity = await createAppIdentity({ name: 'MyCoolApp' });\n * \n * // Sign anything\n * const signed = await identity.signJson({ message: \"Hello, world!\" });\n * \n * // Verify anything\n * const result = await identity.verifyJson(signed);\n * console.log('Valid:', result.valid);\n * ```\n * \n * @example Use existing SDK with custom storage\n * ```typescript\n * import { createKeySDK } from '@smartledger/keys';\n * import { FileKeyStorage } from './storage'; // See examples/\n * \n * const sdk = createKeySDK({ storage: new FileKeyStorage('./keys') });\n * const key = await sdk.createKey('MyCoolApp', { primarySignatureSuite: 'ml-dsa-87' });\n * \n * const identity = await createAppIdentity({\n * name: 'MyCoolApp',\n * sdk, // Use your SDK with persistence\n * existingKeyId: key.meta.keyId\n * });\n * ```\n * \n * @example Sign AI responses\n * ```typescript\n * const identity = await createAppIdentity({ name: 'MyAI' });\n * \n * const response = await openai.chat.completions.create({\n * messages: [{ role: 'user', content: 'Hello!' }]\n * });\n * \n * const signed = await identity.signJson(response, {\n * contentType: 'ai-response'\n * });\n * \n * // Now you have cryptographic proof of what your AI said and when\n * ```\n * \n * @example Verify third-party content\n * ```typescript\n * const theirIdentity = await createAppIdentity({\n * name: 'TheirApp',\n * existingKeyId: 'their-public-key-id'\n * });\n * \n * const result = await theirIdentity.verifyJson(receivedEnvelope);\n * if (result.valid) {\n * console.log('Verified from:', result.creator);\n * }\n * ```\n */\nexport async function createAppIdentity(options: {\n /** App/agent name */\n name: string;\n \n /** Signature algorithm (default: 'ml-dsa-87') */\n algorithm?: 'ml-dsa-87' | 'bsv-ecdsa-secp256k1';\n \n /** Provide your own SDK (e.g., with custom storage) */\n sdk?: KeySDK;\n \n /** Use existing key ID instead of creating new */\n existingKeyId?: string;\n}): Promise<AppIdentity> {\n const sdk = options.sdk || createKeySDK();\n const algorithm = options.algorithm || 'ml-dsa-87';\n \n // Create or use existing key\n let keyId: string;\n if (options.existingKeyId) {\n keyId = options.existingKeyId;\n } else {\n const key = await sdk.createKey(options.name, {\n primarySignatureSuite: algorithm,\n });\n keyId = key.meta.keyId;\n }\n \n return {\n name: options.name,\n keyId,\n \n async signJson<T>(\n data: T,\n opts?: { contentType?: string }\n ): Promise<SignedEnvelope<T>> {\n return createSignedEnvelope(sdk, keyId, data, {\n creator: options.name,\n creatorType: 'service',\n contentType: opts?.contentType,\n });\n },\n \n async verifyJson<T>(envelope: SignedEnvelope<T>): Promise<VerificationResult> {\n return verifySignedEnvelope(sdk, envelope);\n },\n \n getSDK(): KeySDK {\n return sdk;\n },\n \n async getPublicKey(): Promise<Uint8Array> {\n const key = await sdk.getKey(keyId);\n if (!key) {\n throw new Error(`Key ${keyId} not found`);\n }\n return key.publicKey;\n },\n };\n}\n\n/**\n * Convenience: Sign JSON and return envelope in one call\n * For when you don't need to keep the identity around\n * \n * Uses a singleton SDK instance so keys persist across calls.\n * This allows verifyJson() to verify envelopes from signJson().\n * \n * @example\n * ```typescript\n * import { signJson } from '@smartledger/envelope';\n * \n * const signed = await signJson('MyApp', { message: \"Hello!\" });\n * ```\n */\nexport async function signJson<T>(\n appName: string,\n data: T,\n options?: {\n algorithm?: 'ml-dsa-87' | 'bsv-ecdsa-secp256k1';\n contentType?: string;\n }\n): Promise<SignedEnvelope<T>> {\n const sdk = getGlobalSDK();\n const identity = await createAppIdentity({\n name: appName,\n algorithm: options?.algorithm,\n sdk,\n });\n return identity.signJson(data, { contentType: options?.contentType });\n}\n\n/**\n * Convenience: Verify JSON envelope in one call\n * \n * Uses a singleton SDK instance to verify envelopes created with signJson().\n * \n * @example\n * ```typescript\n * import { verifyJson } from '@smartledger/envelope';\n * \n * const result = await verifyJson(receivedEnvelope);\n * if (result.valid) {\n * console.log('Payload:', receivedEnvelope.payload);\n * }\n * ```\n */\nexport async function verifyJson<T>(\n envelope: SignedEnvelope<T>\n): Promise<VerificationResult> {\n const sdk = getGlobalSDK();\n return verifySignedEnvelope(sdk, envelope);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAElB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAElB,MAAM,cAAc,CAAC","sourcesContent":["/**\n * @smartledger/envelope - Canonical SignedEnvelope for verifiable content\n * \n * The standard way to wrap any content with cryptographic verification.\n */\n\nexport * from './types.js';\nexport * from './envelope.js';\nexport * from './helpers.js';\nexport { canonicalize } from './jcs.js';\n\n// Re-export commonly used types for convenience\nexport type {\n SignedEnvelope,\n SignatureMetadata,\n EnvelopeMetadata,\n CreateEnvelopeOptions,\n VerifyEnvelopeOptions,\n VerificationResult,\n} from './types.js';\n\nexport {\n createSignedEnvelope,\n verifySignedEnvelope,\n extractPayload,\n getEnvelopeMeta,\n hasPQSignature,\n hasAnchor,\n createEnvelopeChain,\n} from './envelope.js';\n\nexport {\n createAppIdentity,\n type AppIdentity,\n} from './helpers.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jcs.js","sourceRoot":"","sources":["../../src/jcs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,oFAAoF;AACpF,SAAS,gBAAgB,CAAC,CAAS,EAAE,CAAS;IAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,IAAiB;IAClD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAElC,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;IAEvB,0EAA0E;IAC1E,wEAAwE;IACxE,8EAA8E;IAC9E,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEpE,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,GAAG,GACP,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACnC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1B,MAAM,GAAG,GACP,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC3F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"jcs.js","sourceRoot":"","sources":["../../src/jcs.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RFC 8785 (JSON Canonicalization Scheme).\n *\n * TEMPORARY. `@smartledger/bsv` already contains a conformant implementation at\n * `lib/util/jcs.js` — it scores 11/11 against the conformance vectors — but it is\n * private: not in the package's `exports` map and not in `bsv.d.ts`. Build-order\n * item 1 is to promote it to `@smartledger/bsv/jcs`, at which point this file is\n * deleted and replaced by that import.\n *\n * It is vendored rather than reimplemented on purpose: the two must agree byte for\n * byte, and both are held to @smartledger/attest-vectors `canonical`, so the swap\n * is provably a no-op.\n *\n * Do NOT reach for a different canonicalizer in the meantime. Several of those in\n * the estate are non-conformant, including this package's own v1 signing input,\n * which used JSON.stringify directly and therefore depended on the insertion order\n * of ordinary string keys.\n *\n * This is the single copy for the workspace: @smartledger/attest imports\n * `canonicalize` from here rather than vendoring its own.\n */\n\n/** RFC 8785 requires UTF-16 code unit order, which is what a default sort gives. */\nfunction compareCodeUnits(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction isDroppable(v: unknown): boolean {\n return v === undefined || typeof v === 'function' || typeof v === 'symbol';\n}\n\n/**\n * Serialize DIRECTLY in sorted order. Never sort keys and rebuild an object: V8\n * orders integer-like own properties numerically ahead of string keys whatever\n * order they were inserted in, so the rebuild silently discards the sort.\n *\n * sort-then-rebuild {\"2\":\"two\",\"10\":\"ten\"}\n * RFC 8785 {\"10\":\"ten\",\"2\":\"two\"}\n */\nexport function canonicalize(value: unknown): string {\n return serialize(value, new Set());\n}\n\nfunction serialize(value: unknown, seen: Set<object>): string {\n if (value === null) return 'null';\n\n const t = typeof value;\n\n // JSON.stringify handles these correctly and is hard to beat by hand: for\n // finite numbers it emits ECMAScript Number::toString, exactly what JCS\n // mandates, and since ES2019 it emits well-formed output for lone surrogates.\n if (t === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError(`canonicalize: non-finite number ${String(value)} has no JSON representation`);\n }\n return JSON.stringify(value);\n }\n if (t === 'boolean' || t === 'string') return JSON.stringify(value);\n\n if (t === 'bigint') {\n throw new TypeError('canonicalize: bigint has no JSON representation; carry it as a string');\n }\n if (t === 'undefined' || t === 'function' || t === 'symbol') {\n throw new TypeError(`canonicalize: ${t} is not serializable at the top level`);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) throw new TypeError('canonicalize: circular reference');\n seen.add(value);\n const out =\n '[' + value.map((v) => (isDroppable(v) ? 'null' : serialize(v, seen))).join(',') + ']';\n seen.delete(value);\n return out;\n }\n\n if (t === 'object') {\n const obj = value as Record<string, unknown>;\n if (seen.has(obj)) throw new TypeError('canonicalize: circular reference');\n seen.add(obj);\n const keys = Object.keys(obj)\n .filter((k) => !isDroppable(obj[k]))\n .sort(compareCodeUnits);\n const out =\n '{' + keys.map((k) => JSON.stringify(k) + ':' + serialize(obj[k], seen)).join(',') + '}';\n seen.delete(obj);\n return out;\n }\n\n throw new TypeError(`canonicalize: unsupported type ${t}`);\n}\n"]}
@@ -107,8 +107,19 @@ export interface CreateEnvelopeOptions {
107
107
  contentType?: string;
108
108
  /** Optional parent envelope ID for chains of custody */
109
109
  parentId?: string;
110
- /** Whether to include post-quantum signature */
110
+ /**
111
+ * Add a second, post-quantum signature over the same bytes.
112
+ * Requires `pqKeyId`; without it creation throws rather than silently
113
+ * producing a single-signature envelope.
114
+ */
111
115
  dualSign?: boolean;
116
+ /**
117
+ * Key that makes the post-quantum co-signature when `dualSign` is set. It
118
+ * must be a post-quantum key (ml-dsa-*, slh-dsa-*). Its key ID and algorithm
119
+ * are written to `meta.coSigner`, which the primary signature covers, so the
120
+ * co-signature cannot be removed without invalidating the envelope.
121
+ */
122
+ pqKeyId?: string;
112
123
  /** Optional on-chain anchor info */
113
124
  anchor?: {
114
125
  chain: string;
@@ -139,8 +150,20 @@ export interface VerificationResult {
139
150
  * Options for verifying an envelope
140
151
  */
141
152
  export interface VerifyEnvelopeOptions {
142
- /** Whether to verify PQ signature if present */
153
+ /**
154
+ * Verify the post-quantum co-signature if one is present. An envelope whose
155
+ * signed metadata declares a co-signer is always checked, with or without
156
+ * this flag; the flag additionally checks a co-signature that the metadata
157
+ * does not declare. A present co-signature that fails makes the envelope
158
+ * invalid.
159
+ */
143
160
  verifyPQ?: boolean;
161
+ /**
162
+ * Require a valid post-quantum signature: either the primary signature is
163
+ * itself post-quantum, or a valid post-quantum co-signature is present.
164
+ * Use this to refuse envelopes that are only classically signed.
165
+ */
166
+ requirePQ?: boolean;
144
167
  /** Maximum age in milliseconds (rejects if older) */
145
168
  maxAge?: number;
146
169
  /** Expected creator (rejects if different) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG","sourcesContent":["/**\n * SignedEnvelope - Canonical schema for verifiable AI outputs and content provenance\n * \n * This is the standard envelope format for any content that needs cryptographic verification:\n * - AI-generated responses\n * - User submissions\n * - Agent communications\n * - Contract artifacts\n * - Audit logs\n * \n * Philosophy: Every piece of digital content should be able to answer:\n * - WHO created it (cryptographically proven identity)\n * - WHAT they created (content hash)\n * - WHEN they created it (timestamp)\n * - HOW to verify it (algorithm + public key)\n * \n * This envelope can be verified in 2025, 2045, or 2075.\n */\n\n/**\n * Core signature metadata\n */\nexport interface SignatureMetadata {\n /** Signature suite ID (e.g., 'bsv-ecdsa-secp256k1', 'ml-dsa-87') */\n algorithm: string;\n \n /** Public key or keyId for verification */\n publicKey?: string;\n keyId?: string;\n \n /** Base64-encoded signature */\n signature: string;\n \n /** ISO 8601 timestamp when signature was created */\n timestamp: string;\n \n /** Optional post-quantum signature for dual-signing */\n pqSignature?: {\n algorithm: string;\n publicKey?: string;\n keyId?: string;\n signature: string;\n };\n}\n\n/**\n * Metadata about the envelope and its context\n */\nexport interface EnvelopeMetadata {\n /** Version of the envelope schema (semver) */\n version: string;\n \n /** Who/what created this (agentId, userId, appName, etc.) */\n creator: string;\n \n /** Optional creator type for context */\n creatorType?: 'human' | 'agent' | 'service' | 'dao';\n \n /** ISO 8601 creation timestamp */\n createdAt: string;\n \n /** Content type hint (e.g., 'ai-response', 'blog-post', 'contract') */\n contentType?: string;\n \n /** Optional on-chain anchor reference */\n anchor?: {\n /** Blockchain/ledger identifier */\n chain: string;\n /** Transaction ID or block reference */\n txId: string;\n /** Timestamp of on-chain commitment */\n timestamp: string;\n };\n \n /** Optional parent envelope reference (for chains of custody) */\n parentId?: string;\n \n /** Application-specific metadata */\n [key: string]: any;\n}\n\n/**\n * The canonical SignedEnvelope structure\n * \n * @example Basic usage\n * ```typescript\n * const envelope: SignedEnvelope<MyData> = {\n * payload: { message: \"Hello, verifiable world!\" },\n * meta: {\n * version: \"1.0.0\",\n * creator: \"my-agent\",\n * createdAt: new Date().toISOString(),\n * contentType: \"ai-response\"\n * },\n * _signature: {\n * algorithm: \"ml-dsa-87\",\n * keyId: \"agent-key-001\",\n * signature: \"base64...\",\n * timestamp: new Date().toISOString()\n * }\n * };\n * ```\n */\nexport interface SignedEnvelope<T = any> {\n /** The actual content being signed */\n payload: T;\n \n /** Metadata about the envelope */\n meta: EnvelopeMetadata;\n \n /** Cryptographic signature and verification data */\n _signature: SignatureMetadata;\n}\n\n/**\n * Options for creating a signed envelope\n */\nexport interface CreateEnvelopeOptions {\n /** Creator identifier (agentId, userId, etc.) */\n creator: string;\n \n /** Optional creator type */\n creatorType?: 'human' | 'agent' | 'service' | 'dao';\n \n /** Optional content type hint */\n contentType?: string;\n \n /** Optional parent envelope ID for chains of custody */\n parentId?: string;\n \n /**\n * Add a second, post-quantum signature over the same bytes.\n * Requires `pqKeyId`; without it creation throws rather than silently\n * producing a single-signature envelope.\n */\n dualSign?: boolean;\n\n /**\n * Key that makes the post-quantum co-signature when `dualSign` is set. It\n * must be a post-quantum key (ml-dsa-*, slh-dsa-*). Its key ID and algorithm\n * are written to `meta.coSigner`, which the primary signature covers, so the\n * co-signature cannot be removed without invalidating the envelope.\n */\n pqKeyId?: string;\n \n /** Optional on-chain anchor info */\n anchor?: {\n chain: string;\n txId: string;\n timestamp: string;\n };\n \n /** Additional metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * Verification result\n */\nexport interface VerificationResult {\n /** Whether the signature is valid */\n valid: boolean;\n \n /** Which signature was verified ('primary' | 'pq' | 'both') */\n verified?: 'primary' | 'pq' | 'both';\n \n /** Error message if verification failed */\n error?: string;\n \n /** The creator from the envelope metadata */\n creator?: string;\n \n /** Timestamp from the signature */\n timestamp?: string;\n \n /** Whether content hash matches */\n contentMatch?: boolean;\n}\n\n/**\n * Options for verifying an envelope\n */\nexport interface VerifyEnvelopeOptions {\n /**\n * Verify the post-quantum co-signature if one is present. An envelope whose\n * signed metadata declares a co-signer is always checked, with or without\n * this flag; the flag additionally checks a co-signature that the metadata\n * does not declare. A present co-signature that fails makes the envelope\n * invalid.\n */\n verifyPQ?: boolean;\n\n /**\n * Require a valid post-quantum signature: either the primary signature is\n * itself post-quantum, or a valid post-quantum co-signature is present.\n * Use this to refuse envelopes that are only classically signed.\n */\n requirePQ?: boolean;\n \n /** Maximum age in milliseconds (rejects if older) */\n maxAge?: number;\n \n /** Expected creator (rejects if different) */\n expectedCreator?: string;\n \n /** Whether to verify on-chain anchor if present */\n verifyAnchor?: boolean;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartledger/envelope",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Canonical SignedResponse/SignedEnvelope schema for verifiable AI outputs and content provenance",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -25,12 +25,12 @@
25
25
  "CHANGELOG.md"
26
26
  ],
27
27
  "scripts": {
28
- "build": "npm run build:cjs && npm run build:esm",
28
+ "build": "npm run clean && npm run build:cjs && npm run build:esm",
29
29
  "build:cjs": "tsc",
30
30
  "build:esm": "tsc -p tsconfig.esm.json && echo '{\"type\": \"module\"}' > dist/esm/package.json",
31
31
  "test": "vitest run",
32
32
  "test:watch": "vitest",
33
- "clean": "rm -rf dist",
33
+ "clean": "rm -rf dist ../../.tsbuildinfo/envelope-cjs.tsbuildinfo ../../.tsbuildinfo/envelope-esm.tsbuildinfo",
34
34
  "prepublishOnly": "npm run build && npm test"
35
35
  },
36
36
  "repository": {
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2020.full.d.ts","../node_modules/@smartledger/crypto/dist/cjs/types.d.ts","../node_modules/@smartledger/crypto/dist/cjs/registry.d.ts","../node_modules/@smartledger/crypto/dist/cjs/utils.d.ts","../node_modules/@smartledger/crypto/dist/cjs/signing.d.ts","../node_modules/@smartledger/crypto/dist/cjs/key-registry.d.ts","../node_modules/@smartledger/crypto/dist/cjs/errors.d.ts","../node_modules/@smartledger/crypto/dist/cjs/stateless.d.ts","../node_modules/@smartledger/crypto/dist/cjs/derivation/bip32.d.ts","../node_modules/@smartledger/crypto/dist/cjs/suites/bsv-ecdsa.d.ts","../node_modules/@smartledger/crypto/dist/cjs/suites/ml-dsa.d.ts","../node_modules/@smartledger/crypto/dist/cjs/derivation/wif.d.ts","../node_modules/@smartledger/crypto/dist/cjs/index.d.ts","../node_modules/@smartledger/keys/dist/cjs/types.d.ts","../node_modules/@smartledger/keys/dist/cjs/sdk.d.ts","../node_modules/@smartledger/keys/dist/cjs/index.d.ts","../src/types.ts","../src/jcs.ts","../src/envelope.ts","../src/helpers.ts","../src/index.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[78,124],[78,121,124],[78,123,124],[124],[78,124,129,157],[78,124,125,130,135,143,154,165],[78,124,125,126,135,143],[73,74,75,78,124],[78,124,127,166],[78,124,128,129,136,144],[78,124,129,154,162],[78,124,130,132,135,143],[78,123,124,131],[78,124,132,133],[78,124,134,135],[78,123,124,135],[78,124,135,136,137,154,165],[78,124,135,136,137,150,154,157],[78,124,132,135,138,143,154,165],[78,124,135,136,138,139,143,154,162,165],[78,124,138,140,154,162,165],[76,77,78,79,80,81,82,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[78,124,135,141],[78,124,142,165,170],[78,124,132,135,143,154],[78,124,144],[78,124,145],[78,123,124,146],[78,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[78,124,148],[78,124,149],[78,124,135,150,151],[78,124,150,152,166,168],[78,124,135,154,155,157],[78,124,156,157],[78,124,154,155],[78,124,157],[78,124,158],[78,121,124,154,159],[78,124,135,160,161],[78,124,160,161],[78,124,129,143,154,162],[78,124,163],[78,124,143,164],[78,124,138,149,165],[78,124,129,166],[78,124,154,167],[78,124,142,168],[78,124,169],[78,119,124],[78,119,124,135,137,146,154,157,165,168,170],[78,124,154,171],[78,91,95,124,165],[78,91,124,154,165],[78,86,124],[78,88,91,124,162,165],[78,124,143,162],[78,124,172],[78,86,124,172],[78,88,91,124,143,165],[78,83,84,87,90,124,135,154,165],[78,91,98,124],[78,83,89,124],[78,91,112,113,124],[78,87,91,124,157,165,172],[78,112,124,172],[78,85,86,124,172],[78,91,124],[78,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,124],[78,91,106,124],[78,91,98,99,124],[78,89,91,99,100,124],[78,90,124],[78,83,86,91,124],[78,91,95,99,100,124],[78,95,124],[78,89,91,94,124,165],[78,83,88,91,98,124],[78,124,154],[78,86,91,112,124,170,172],[52,78,124],[52,53,54,55,56,57,58,59,60,61,62,78,124],[52,53,78,124],[53,78,124],[52,59,78,124],[63,64,65,78,124],[63,64,78,124],[63,78,124],[66,67,68,78,124],[66,67,69,78,124],[67,68,69,70,78,124]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"9c0b4ac21abb70be0021cf3e1e6f52ca1e97c88e220a2e71a7bd35ac31206635","impliedFormat":1},{"version":"7467d4c7cb4d7dca06f5838f45ab87751974473f1d62076859b24ddbb87596e8","impliedFormat":1},{"version":"babfc5dd3e34fa522f55b1e7bba7eaceeddbeb725a5df4df224e348a185a2bed","impliedFormat":1},{"version":"83fa9c45559325f76f5d045cea177eaa2610662c26e5cbc16e2997acb6967c86","impliedFormat":1},{"version":"462488dc696446f0a2641fa1018fb0fffe362a327ce7409b1c22544bd71149af","impliedFormat":1},{"version":"53762058f30eca13f1dcbeb378f8c717a207e37d95f1ee572c171e70c6d339ec","impliedFormat":1},{"version":"e9ac24d763891a9b110dcaeb9ee2c12a0349a7b38f0639f0f6ad2716bec4b067","impliedFormat":1},{"version":"2333f82f302eb3d7454bf720735d6f851b61b601007cb25af21aca10e4dcd9b7","impliedFormat":1},{"version":"bbb037ed42d4986d66019915946562f29bdacdb7a808f544325c799b2a1c7627","impliedFormat":1},{"version":"b8363e85986efbf0d67c658b8ceaefcd796fef02aeca50e1d334f91b7f8e38ea","impliedFormat":1},{"version":"e2bd02ca4a18534f840e1b247bff476cdd876b2291ecfccd934dfbee2e4d76f7","impliedFormat":1},{"version":"7aa4c70726c2d214b9770064e768774cf4a193188db4e30ebbd4eff762ff0767","impliedFormat":1},{"version":"c444458a1fd50499801b1b423a71052391e21cc3ab959bf1cb122090ccfe5f48","impliedFormat":1},{"version":"414c69872ee6ae7cba4b8661493d3e59aa89589a8b6f33f44c43a705941c6074","impliedFormat":1},{"version":"7104fe28c0b5155f365baeafb00e0683713df3d5d9f48ce69dc647101bd7f8a6","impliedFormat":1},{"version":"d2e2b91937e77ee42affea1da02f5a54c5b79b5659361ffb6cfb05ef9cdddb82","signature":"9b00d0d42b631adeb922db72b5a66d43ea35e12eae2baac14d25422c01f32a14"},{"version":"73f885afd353867564961dc955182681fe1d1ef1c5482e6cdc3120497efb3bca","signature":"638ee72c9f2bd2f6d6244f669a13878729f5e2b1c78d924cda51f5b030089ab9"},{"version":"81a58784b32b60c92e8259dba77eb5016e41dc759d320fc86c33dc82df4d5957","signature":"2df359af96554eae474720e845513a64ad31a9941117ede76842193c467fc4da"},{"version":"c104bef056ce5264ab16a9761cbb54b320eba2f02e637257a48531ba3c919fbe","signature":"994a0df9d4896d529dbe3e3a969a756425ff34a6cf329354214152a8366ec016"},{"version":"e12fdf738676a058584f9f90bd5ff81563a65543f84813f7c95c9592fc9bc35e","signature":"4903a0b77acb5359690043e5d0a6fe199f362ffdac3c7cd2a6e2427264e79e24"},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"00877fef624f3171c2e44944fb63a55e2a9f9120d7c8b5eb4181c263c9a077cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[67,71]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./esm","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":7},"referencedMap":[[72,1],[121,2],[122,2],[123,3],[78,4],[124,5],[125,6],[126,7],[73,1],[76,8],[74,1],[75,1],[127,9],[128,10],[129,11],[130,12],[131,13],[132,14],[133,14],[134,15],[135,16],[136,17],[137,18],[79,1],[77,1],[138,19],[139,20],[140,21],[172,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[164,44],[165,45],[166,46],[167,47],[168,48],[169,49],[80,1],[81,1],[82,1],[120,50],[170,51],[171,52],[49,1],[50,1],[10,1],[8,1],[9,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[51,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[1,1],[12,1],[11,1],[98,53],[108,54],[97,53],[118,55],[89,56],[88,57],[117,58],[111,59],[116,60],[91,61],[105,62],[90,63],[114,64],[86,65],[85,58],[115,66],[87,67],[92,68],[93,1],[96,68],[83,1],[119,69],[109,70],[100,71],[101,72],[103,73],[99,74],[102,75],[112,58],[94,76],[95,77],[104,78],[84,79],[107,70],[106,68],[110,1],[113,80],[59,81],[62,1],[57,1],[63,82],[56,81],[53,81],[55,83],[58,84],[60,85],[61,81],[52,1],[54,1],[66,86],[65,87],[64,88],[69,89],[70,90],[71,91],[68,1],[67,1]],"latestChangedDtsFile":"./esm/index.d.ts","version":"5.9.3"}
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2020.full.d.ts","../node_modules/@smartledger/crypto/dist/cjs/types.d.ts","../node_modules/@smartledger/crypto/dist/cjs/registry.d.ts","../node_modules/@smartledger/crypto/dist/cjs/utils.d.ts","../node_modules/@smartledger/crypto/dist/cjs/signing.d.ts","../node_modules/@smartledger/crypto/dist/cjs/key-registry.d.ts","../node_modules/@smartledger/crypto/dist/cjs/errors.d.ts","../node_modules/@smartledger/crypto/dist/cjs/stateless.d.ts","../node_modules/@smartledger/crypto/dist/cjs/derivation/bip32.d.ts","../node_modules/@smartledger/crypto/dist/cjs/suites/bsv-ecdsa.d.ts","../node_modules/@smartledger/crypto/dist/cjs/suites/ml-dsa.d.ts","../node_modules/@smartledger/crypto/dist/cjs/derivation/wif.d.ts","../node_modules/@smartledger/crypto/dist/cjs/index.d.ts","../node_modules/@smartledger/keys/dist/cjs/types.d.ts","../node_modules/@smartledger/keys/dist/cjs/sdk.d.ts","../node_modules/@smartledger/keys/dist/cjs/index.d.ts","../src/types.ts","../src/jcs.ts","../src/envelope.ts","../src/helpers.ts","../src/index.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[78,124],[78,121,124],[78,123,124],[124],[78,124,129,157],[78,124,125,130,135,143,154,165],[78,124,125,126,135,143],[73,74,75,78,124],[78,124,127,166],[78,124,128,129,136,144],[78,124,129,154,162],[78,124,130,132,135,143],[78,123,124,131],[78,124,132,133],[78,124,134,135],[78,123,124,135],[78,124,135,136,137,154,165],[78,124,135,136,137,150,154,157],[78,124,132,135,138,143,154,165],[78,124,135,136,138,139,143,154,162,165],[78,124,138,140,154,162,165],[76,77,78,79,80,81,82,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[78,124,135,141],[78,124,142,165,170],[78,124,132,135,143,154],[78,124,144],[78,124,145],[78,123,124,146],[78,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[78,124,148],[78,124,149],[78,124,135,150,151],[78,124,150,152,166,168],[78,124,135,154,155,157],[78,124,156,157],[78,124,154,155],[78,124,157],[78,124,158],[78,121,124,154,159],[78,124,135,160,161],[78,124,160,161],[78,124,129,143,154,162],[78,124,163],[78,124,143,164],[78,124,138,149,165],[78,124,129,166],[78,124,154,167],[78,124,142,168],[78,124,169],[78,119,124],[78,119,124,135,137,146,154,157,165,168,170],[78,124,154,171],[78,91,95,124,165],[78,91,124,154,165],[78,86,124],[78,88,91,124,162,165],[78,124,143,162],[78,124,172],[78,86,124,172],[78,88,91,124,143,165],[78,83,84,87,90,124,135,154,165],[78,91,98,124],[78,83,89,124],[78,91,112,113,124],[78,87,91,124,157,165,172],[78,112,124,172],[78,85,86,124,172],[78,91,124],[78,85,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,124],[78,91,106,124],[78,91,98,99,124],[78,89,91,99,100,124],[78,90,124],[78,83,86,91,124],[78,91,95,99,100,124],[78,95,124],[78,89,91,94,124,165],[78,83,88,91,98,124],[78,124,154],[78,86,91,112,124,170,172],[52,78,124],[52,53,54,55,56,57,58,59,60,61,62,78,124],[52,53,78,124],[53,78,124],[52,59,78,124],[63,64,65,78,124],[63,64,78,124],[63,78,124],[66,67,68,78,124],[66,67,69,78,124],[67,68,69,70,78,124]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"9c0b4ac21abb70be0021cf3e1e6f52ca1e97c88e220a2e71a7bd35ac31206635","impliedFormat":1},{"version":"7467d4c7cb4d7dca06f5838f45ab87751974473f1d62076859b24ddbb87596e8","impliedFormat":1},{"version":"babfc5dd3e34fa522f55b1e7bba7eaceeddbeb725a5df4df224e348a185a2bed","impliedFormat":1},{"version":"83fa9c45559325f76f5d045cea177eaa2610662c26e5cbc16e2997acb6967c86","impliedFormat":1},{"version":"462488dc696446f0a2641fa1018fb0fffe362a327ce7409b1c22544bd71149af","impliedFormat":1},{"version":"53762058f30eca13f1dcbeb378f8c717a207e37d95f1ee572c171e70c6d339ec","impliedFormat":1},{"version":"e9ac24d763891a9b110dcaeb9ee2c12a0349a7b38f0639f0f6ad2716bec4b067","impliedFormat":1},{"version":"2333f82f302eb3d7454bf720735d6f851b61b601007cb25af21aca10e4dcd9b7","impliedFormat":1},{"version":"bbb037ed42d4986d66019915946562f29bdacdb7a808f544325c799b2a1c7627","impliedFormat":1},{"version":"b8363e85986efbf0d67c658b8ceaefcd796fef02aeca50e1d334f91b7f8e38ea","impliedFormat":1},{"version":"e2bd02ca4a18534f840e1b247bff476cdd876b2291ecfccd934dfbee2e4d76f7","impliedFormat":1},{"version":"7aa4c70726c2d214b9770064e768774cf4a193188db4e30ebbd4eff762ff0767","impliedFormat":1},{"version":"c444458a1fd50499801b1b423a71052391e21cc3ab959bf1cb122090ccfe5f48","impliedFormat":1},{"version":"414c69872ee6ae7cba4b8661493d3e59aa89589a8b6f33f44c43a705941c6074","impliedFormat":1},{"version":"7104fe28c0b5155f365baeafb00e0683713df3d5d9f48ce69dc647101bd7f8a6","impliedFormat":1},{"version":"d2e2b91937e77ee42affea1da02f5a54c5b79b5659361ffb6cfb05ef9cdddb82","signature":"9b00d0d42b631adeb922db72b5a66d43ea35e12eae2baac14d25422c01f32a14"},{"version":"73f885afd353867564961dc955182681fe1d1ef1c5482e6cdc3120497efb3bca","signature":"638ee72c9f2bd2f6d6244f669a13878729f5e2b1c78d924cda51f5b030089ab9"},{"version":"81a58784b32b60c92e8259dba77eb5016e41dc759d320fc86c33dc82df4d5957","signature":"2df359af96554eae474720e845513a64ad31a9941117ede76842193c467fc4da"},{"version":"c104bef056ce5264ab16a9761cbb54b320eba2f02e637257a48531ba3c919fbe","signature":"994a0df9d4896d529dbe3e3a969a756425ff34a6cf329354214152a8366ec016"},{"version":"e12fdf738676a058584f9f90bd5ff81563a65543f84813f7c95c9592fc9bc35e","signature":"4903a0b77acb5359690043e5d0a6fe199f362ffdac3c7cd2a6e2427264e79e24"},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"00877fef624f3171c2e44944fb63a55e2a9f9120d7c8b5eb4181c263c9a077cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[67,71]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"outDir":"./cjs","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":7},"referencedMap":[[72,1],[121,2],[122,2],[123,3],[78,4],[124,5],[125,6],[126,7],[73,1],[76,8],[74,1],[75,1],[127,9],[128,10],[129,11],[130,12],[131,13],[132,14],[133,14],[134,15],[135,16],[136,17],[137,18],[79,1],[77,1],[138,19],[139,20],[140,21],[172,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[164,44],[165,45],[166,46],[167,47],[168,48],[169,49],[80,1],[81,1],[82,1],[120,50],[170,51],[171,52],[49,1],[50,1],[10,1],[8,1],[9,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[51,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[1,1],[12,1],[11,1],[98,53],[108,54],[97,53],[118,55],[89,56],[88,57],[117,58],[111,59],[116,60],[91,61],[105,62],[90,63],[114,64],[86,65],[85,58],[115,66],[87,67],[92,68],[93,1],[96,68],[83,1],[119,69],[109,70],[100,71],[101,72],[103,73],[99,74],[102,75],[112,58],[94,76],[95,77],[104,78],[84,79],[107,70],[106,68],[110,1],[113,80],[59,81],[62,1],[57,1],[63,82],[56,81],[53,81],[55,83],[58,84],[60,85],[61,81],[52,1],[54,1],[66,86],[65,87],[64,88],[69,89],[70,90],[71,91],[68,1],[67,1]],"latestChangedDtsFile":"./cjs/index.d.ts","version":"5.9.3"}