@interop/wallet-core 0.38.1 → 0.40.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.
Files changed (99) hide show
  1. package/README.md +8 -6
  2. package/dist/clients/revocation.d.ts.map +1 -1
  3. package/dist/clients/revocation.js +5 -10
  4. package/dist/clients/revocation.js.map +1 -1
  5. package/dist/keyring/fetch.d.ts +2 -1
  6. package/dist/keyring/fetch.d.ts.map +1 -1
  7. package/dist/keyring/fetch.js +7 -2
  8. package/dist/keyring/fetch.js.map +1 -1
  9. package/dist/keyring/index.d.ts +15 -9
  10. package/dist/keyring/index.d.ts.map +1 -1
  11. package/dist/keyring/index.js +14 -8
  12. package/dist/keyring/index.js.map +1 -1
  13. package/dist/keyring/kdf.d.ts +3 -1
  14. package/dist/keyring/kdf.d.ts.map +1 -1
  15. package/dist/keyring/kdf.js +16 -2
  16. package/dist/keyring/kdf.js.map +1 -1
  17. package/dist/keyring/record.d.ts +207 -41
  18. package/dist/keyring/record.d.ts.map +1 -1
  19. package/dist/keyring/record.js +318 -32
  20. package/dist/keyring/record.js.map +1 -1
  21. package/dist/keyring/unlockSpace.d.ts +25 -0
  22. package/dist/keyring/unlockSpace.d.ts.map +1 -1
  23. package/dist/keyring/unlockSpace.js +31 -2
  24. package/dist/keyring/unlockSpace.js.map +1 -1
  25. package/dist/keys/rosterLogStore.d.ts.map +1 -1
  26. package/dist/keys/rosterLogStore.js +6 -1
  27. package/dist/keys/rosterLogStore.js.map +1 -1
  28. package/dist/keys/userKeyRoster.d.ts +22 -3
  29. package/dist/keys/userKeyRoster.d.ts.map +1 -1
  30. package/dist/keys/userKeyRoster.js +11 -59
  31. package/dist/keys/userKeyRoster.js.map +1 -1
  32. package/dist/recovery/index.d.ts +8 -3
  33. package/dist/recovery/index.d.ts.map +1 -1
  34. package/dist/recovery/index.js +7 -2
  35. package/dist/recovery/index.js.map +1 -1
  36. package/dist/recovery/recoveryCode.d.ts +7 -0
  37. package/dist/recovery/recoveryCode.d.ts.map +1 -1
  38. package/dist/recovery/recoveryCode.js +10 -0
  39. package/dist/recovery/recoveryCode.js.map +1 -1
  40. package/dist/recovery/recoveryRecord.d.ts +134 -43
  41. package/dist/recovery/recoveryRecord.d.ts.map +1 -1
  42. package/dist/recovery/recoveryRecord.js +226 -23
  43. package/dist/recovery/recoveryRecord.js.map +1 -1
  44. package/dist/request/index.d.ts +1 -1
  45. package/dist/request/index.js +1 -1
  46. package/dist/request/matching.d.ts +24 -5
  47. package/dist/request/matching.d.ts.map +1 -1
  48. package/dist/request/matching.js +36 -39
  49. package/dist/request/matching.js.map +1 -1
  50. package/dist/request/walletInput.d.ts.map +1 -1
  51. package/dist/request/walletInput.js +3 -6
  52. package/dist/request/walletInput.js.map +1 -1
  53. package/dist/resourceLog/controller.d.ts +7 -4
  54. package/dist/resourceLog/controller.d.ts.map +1 -1
  55. package/dist/resourceLog/controller.js +17 -35
  56. package/dist/resourceLog/controller.js.map +1 -1
  57. package/dist/resourceLog/index.d.ts +1 -0
  58. package/dist/resourceLog/index.d.ts.map +1 -1
  59. package/dist/resourceLog/index.js +1 -0
  60. package/dist/resourceLog/index.js.map +1 -1
  61. package/dist/resourceLog/seal.d.ts +9 -1
  62. package/dist/resourceLog/seal.d.ts.map +1 -1
  63. package/dist/resourceLog/seal.js +21 -11
  64. package/dist/resourceLog/seal.js.map +1 -1
  65. package/dist/resourceLog/verify.d.ts.map +1 -1
  66. package/dist/resourceLog/verify.js +26 -9
  67. package/dist/resourceLog/verify.js.map +1 -1
  68. package/dist/resourceLog/vmFragment.d.ts +33 -0
  69. package/dist/resourceLog/vmFragment.d.ts.map +1 -0
  70. package/dist/resourceLog/vmFragment.js +39 -0
  71. package/dist/resourceLog/vmFragment.js.map +1 -0
  72. package/dist/space/collections.d.ts +22 -1
  73. package/dist/space/collections.d.ts.map +1 -1
  74. package/dist/space/collections.js +40 -10
  75. package/dist/space/collections.js.map +1 -1
  76. package/dist/space/index.d.ts +3 -2
  77. package/dist/space/index.d.ts.map +1 -1
  78. package/dist/space/index.js +3 -2
  79. package/dist/space/index.js.map +1 -1
  80. package/dist/space/publicLink.d.ts +2 -0
  81. package/dist/space/publicLink.d.ts.map +1 -1
  82. package/dist/space/publicLink.js +13 -1
  83. package/dist/space/publicLink.js.map +1 -1
  84. package/dist/space/wasLink.d.ts +5 -0
  85. package/dist/space/wasLink.d.ts.map +1 -1
  86. package/dist/space/wasLink.js +7 -2
  87. package/dist/space/wasLink.js.map +1 -1
  88. package/dist/webvh/didWeb.d.ts +3 -11
  89. package/dist/webvh/didWeb.d.ts.map +1 -1
  90. package/dist/webvh/didWeb.js +5 -1
  91. package/dist/webvh/didWeb.js.map +1 -1
  92. package/dist/webvh/listClients.d.ts +3 -1
  93. package/dist/webvh/listClients.d.ts.map +1 -1
  94. package/dist/webvh/listClients.js +46 -29
  95. package/dist/webvh/listClients.js.map +1 -1
  96. package/dist/webvh/verifyLog.d.ts.map +1 -1
  97. package/dist/webvh/verifyLog.js +5 -1
  98. package/dist/webvh/verifyLog.js.map +1 -1
  99. package/package.json +3 -3
@@ -1,21 +1,156 @@
1
- import { KEYRING_RECORD_VERSION, mintRecordEncryption, parseRecordFrame, parseRecordPointer, recordCipher } from '../keyring/record.js';
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ /**
5
+ * The recovery keyring record codec: the `{ version, encryption, wrapped,
6
+ * binding, proof }` envelope stored as the one resource of a recovery code's
7
+ * unlock Space. Its plaintext is the ordinary keyring record's (controller,
8
+ * account pointer) PLUS the pre-minted PUT-on-`did.jsonl` delegation -- the
9
+ * narrow zcap bridge that lets the code-derived client write its
10
+ * self-enrolling log continuation. It carries **no key material of any
11
+ * kind**: never a seed, never a user key wrap (wraps live doc-and-roster
12
+ * only), so the record stays a pure pointer.
13
+ *
14
+ * The wrap reuses the keyring record construction (cipher context,
15
+ * record-own epoch, and signed frame alike), so a recovery record IS a
16
+ * keyring record to every generic consumer -- only the recovery flow demands
17
+ * the delegation and the binding.
18
+ *
19
+ * The record splits into a code-authenticated core and a re-mintable shell.
20
+ * The core is the account binding `{ controller, pointer }`, authenticated by
21
+ * the `binding` frame member: an HMAC tag under a key derived from the code
22
+ * bytes, computed at issuance and verified at recovery BEFORE the pointer is
23
+ * trusted. Only the issuer and the code holder ever hold that key -- the
24
+ * storage host never does -- so a host-forged record pointing recovery at
25
+ * another account fails the tag however it is encrypted or signed. The tag
26
+ * rides the frame in the clear (it reveals nothing) so the re-mint path,
27
+ * which cannot decrypt the record or recompute the tag, preserves it
28
+ * verbatim; the binding values themselves stay inside the plaintext. The
29
+ * consequence: a re-mint can never change the pointer, and an account that
30
+ * moves hosts must re-issue its codes.
31
+ *
32
+ * The shell is the delegation and the frame proof, and its signer is mixed.
33
+ * At issuance the record is signed by the code-derived unlock key, the one a
34
+ * typed code re-derives, so recovery verifies the proof before decrypting.
35
+ * The revocation cascade's re-mint path holds only the code's KAK public
36
+ * half plus an enrolled client's account key, so it re-PUTs the record
37
+ * signed by that client's account verification method instead. This codec is
38
+ * agnostic -- it signs with what it is given -- and the reader carries the
39
+ * policy: a proof by the expected unlock key verifies up front, and anything
40
+ * else comes back marked unverified, for the caller to check against the
41
+ * verified did:webvh document of the account the code-authenticated pointer
42
+ * names.
43
+ */
44
+ import { base64urlnopad } from '@scure/base';
45
+ import { equalBytes } from '@noble/ciphers/utils.js';
46
+ import { hmac } from '@noble/hashes/hmac.js';
47
+ import { sha256 } from '@noble/hashes/sha2.js';
48
+ import { KEYRING_RECORD_VERSION, mintRecordEncryption, parseRecordCreatedAt, parseRecordFrame, parseRecordPointer, recordCipher, recordCreatedAtStamp, recordProofKeyMultibase, signRecordFrame, verifyRecordProof } from '../keyring/record.js';
49
+ /**
50
+ * The context label mixed into the binding MAC input, versioning the tag
51
+ * construction. Permanent -- changing it orphans every issued code.
52
+ */
53
+ const RECOVERY_BINDING_CONTEXT = 'freewallet/recovery/binding/v1';
54
+ /**
55
+ * A recovery record's account binding is absent, malformed, or does not
56
+ * verify under the typed code's binding MAC key. Its own class, distinct from
57
+ * a proof or decrypt failure: this is the refusal that says the record's
58
+ * `{ controller, pointer }` core was not written by a holder of this code --
59
+ * a forged record redirecting recovery at another account, or a record from
60
+ * before the account moved hosts (either way the code cannot recover here
61
+ * and must be re-issued).
62
+ */
63
+ export class RecoveryBindingError extends Error {
64
+ constructor(message) {
65
+ super(message);
66
+ this.name = 'RecoveryBindingError';
67
+ }
68
+ }
69
+ /**
70
+ * The deterministic MAC input over a record's account binding: a JSON array
71
+ * of the context label and the binding values, so no delimiter ambiguity can
72
+ * make two bindings collide.
73
+ */
74
+ function bindingMacInput({ controller, pointer }) {
75
+ return new TextEncoder().encode(JSON.stringify([
76
+ RECOVERY_BINDING_CONTEXT,
77
+ controller,
78
+ pointer.did ?? '',
79
+ pointer.spaceId,
80
+ pointer.host
81
+ ]));
82
+ }
83
+ /**
84
+ * Computes the account-binding tag: HMAC-SHA-256 over the binding values
85
+ * under the code-derived binding MAC key, base64url (no pad). Issuance calls
86
+ * it to stamp the record; recovery recomputes it to verify.
87
+ *
88
+ * @param options {object}
89
+ * @param options.bindingMacKey {Uint8Array} the code-derived MAC key
90
+ * @param options.controller {string} the account did:key
91
+ * @param options.pointer {AccountPointer} the account pointer
92
+ * @returns {string}
93
+ */
94
+ export function computeRecoveryBinding({ bindingMacKey, controller, pointer }) {
95
+ return base64urlnopad.encode(hmac(sha256, bindingMacKey, bindingMacInput({ controller, pointer })));
96
+ }
2
97
  /**
3
- * Wraps the recovery record: controller, email, pointer, and the pre-minted
98
+ * Reads the `binding` frame member off a stored recovery record without
99
+ * decrypting anything. The re-mint path uses it to carry the tag forward
100
+ * verbatim -- it cannot recompute the tag (no code bytes) and does not need
101
+ * to. Refuses a record with no binding: such a record predates the
102
+ * code-authenticated core and cannot be re-minted -- its code must be
103
+ * re-issued.
104
+ *
105
+ * @param options {object}
106
+ * @param options.record {unknown} the stored record envelope
107
+ * @returns {string}
108
+ */
109
+ export function recoveryRecordBinding({ record }) {
110
+ const { binding } = (record ?? {});
111
+ if (typeof binding !== 'string' || !binding) {
112
+ throw new RecoveryBindingError('The recovery record carries no code-authenticated account binding; ' +
113
+ 'the recovery code must be re-issued.');
114
+ }
115
+ return binding;
116
+ }
117
+ /**
118
+ * Wraps the recovery record: controller, pointer, and the pre-minted
4
119
  * `did.jsonl` PUT delegation, encrypted under the code's unlock KAK via the
5
- * keyring EDV cipher context.
120
+ * keyring EDV cipher context, then signed into the same frame the keyring
121
+ * record uses -- with the account-binding tag as one more frame member the
122
+ * proof covers. Issuance passes the code-derived `bindingMacKey` (the tag is
123
+ * computed here) and the code-derived unlock signer; the revocation cascade's
124
+ * re-mint path passes the standing record's `binding` verbatim and an
125
+ * enrolled client's account signer (see this module's header for the policy
126
+ * the reader applies to the two). Exactly one of the two binding inputs must
127
+ * be given.
6
128
  *
7
129
  * @param options {object}
8
130
  * @param options.controller {string} the account did:key
9
- * @param [options.email] {string} the account email, when known
10
131
  * @param options.pointer {AccountPointer} the account pointer
11
132
  * @param options.delegation {IZcap} the PUT-on-`did.jsonl` delegation to the
12
133
  * code-derived signing DID
13
134
  * @param options.keyAgreementKey {IKeyAgreementKey} the code's unlock KAK
14
135
  * @param options.keyResolver {IKeyResolver}
15
- * @returns {Promise<{ version: number, encryption: CollectionEncryption,
16
- * wrapped: unknown }>}
136
+ * @param options.signer {RecordSigner} the signing key: the code's unlock
137
+ * key at issuance, an enrolled client's account key on a re-mint
138
+ * @param [options.bindingMacKey] {Uint8Array} the code-derived binding MAC
139
+ * key -- the issuance path, which computes the tag
140
+ * @param [options.binding] {string} the standing record's tag, carried
141
+ * forward verbatim -- the re-mint path, which cannot recompute it
142
+ * @param [options.createdAt] {string} the bind timestamp to stamp, as an ISO
143
+ * string; defaults to now. Supplied by a caller that pins record freshness.
144
+ * @returns {Promise<SignedRecoveryRecord>}
17
145
  */
18
- export async function wrapRecoveryRecord({ controller, email, pointer, delegation, keyAgreementKey, keyResolver }) {
146
+ export async function wrapRecoveryRecord({ controller, pointer, delegation, keyAgreementKey, keyResolver, signer, bindingMacKey, binding, createdAt }) {
147
+ if ((bindingMacKey === undefined) === (binding === undefined)) {
148
+ throw new Error('Exactly one of bindingMacKey (issuance) or binding (re-mint) is ' +
149
+ 'required.');
150
+ }
151
+ const tag = bindingMacKey !== undefined
152
+ ? computeRecoveryBinding({ bindingMacKey, controller, pointer })
153
+ : binding;
19
154
  const encryption = await mintRecordEncryption({ keyAgreementKey });
20
155
  const cipher = await recordCipher({
21
156
  keyAgreementKey,
@@ -24,38 +159,87 @@ export async function wrapRecoveryRecord({ controller, email, pointer, delegatio
24
159
  });
25
160
  const data = {
26
161
  controller,
27
- ...(email ? { email } : {}),
28
162
  pointer: {
29
163
  ...(pointer.did ? { did: pointer.did } : {}),
30
164
  spaceId: pointer.spaceId,
31
165
  host: pointer.host
32
166
  },
33
167
  delegation,
34
- createdAt: new Date().toISOString()
168
+ createdAt: recordCreatedAtStamp({ createdAt })
35
169
  };
36
170
  const { envelope } = await cipher.encrypt({
37
171
  data: data
38
172
  });
39
- return { version: KEYRING_RECORD_VERSION, encryption, wrapped: envelope };
173
+ return (await signRecordFrame({
174
+ version: KEYRING_RECORD_VERSION,
175
+ encryption,
176
+ wrapped: envelope,
177
+ signer,
178
+ members: { binding: tag }
179
+ }));
40
180
  }
41
181
  /**
42
182
  * Unwraps and validates a recovery record: the ordinary keyring-record checks
43
- * plus the required pointer and delegation. A record without a delegation is
44
- * not a recovery record (an ordinary keyring record found under a code's
45
- * unlock Space would mean a corrupted issuance) and is refused.
183
+ * plus the required pointer, delegation, and account binding. A record
184
+ * without a delegation is not a recovery record (an ordinary keyring record
185
+ * found under a code's unlock Space would mean a corrupted issuance) and is
186
+ * refused.
187
+ *
188
+ * The account binding is verified before the contents are returned: the
189
+ * decrypted `{ controller, pointer }` must carry the tag the code-derived
190
+ * MAC key computes over them, or the record is refused as forged
191
+ * ({@link RecoveryBindingError}) -- the check that closes the host-forgery
192
+ * redirect, since the host never holds the MAC key. Nothing downstream may
193
+ * trust the pointer before this returns.
194
+ *
195
+ * Proof verification is mixed-signer and ordered deliberately. A proof by the
196
+ * code's own unlock key is verified BEFORE decryption -- the strong path,
197
+ * where the typed code alone establishes what may have signed the record. A
198
+ * proof by any other key can only be checked after decryption, because the
199
+ * re-minting client is knowable only once the code-authenticated pointer says
200
+ * which account this is and that account's log has been verified; the
201
+ * contents come back with a pending proof state naming the signer, and the
202
+ * caller completes the check with {@link verifyRecordProof} against the
203
+ * document's keys. That second phase is what makes an unexpected signer
204
+ * refuse: a record whose proof belongs to neither class ends in a
205
+ * `RecordProofError` there.
46
206
  *
47
207
  * @param options {object}
48
208
  * @param options.record {unknown} the stored `{ version, encryption,
49
- * wrapped }` envelope
209
+ * wrapped, binding, proof }` envelope
50
210
  * @param options.keyAgreementKey {IKeyAgreementKey} the code's unlock KAK
51
211
  * @param options.keyResolver {IKeyResolver}
52
- * @returns {Promise<RecoveryRecordContents>}
212
+ * @param options.expectedKeyMultibase {string} the code-derived unlock
213
+ * signing key's multibase
214
+ * @param options.bindingMacKey {Uint8Array} the code-derived binding MAC
215
+ * key the record's account binding must verify under
216
+ * @returns {Promise<{ contents: RecoveryRecordContents,
217
+ * proofState: RecoveryRecordProofState }>}
53
218
  */
54
- export async function unwrapRecoveryRecord({ record, keyAgreementKey, keyResolver }) {
55
- const { encryption, wrapped } = parseRecordFrame({
219
+ export async function unwrapRecoveryRecord({ record, keyAgreementKey, keyResolver, expectedKeyMultibase, bindingMacKey }) {
220
+ const { encryption, wrapped, proof } = parseRecordFrame({
56
221
  record,
57
222
  label: 'recovery'
58
223
  });
224
+ const binding = recoveryRecordBinding({ record });
225
+ // `parseRecordFrame` shape-checks the proof of a current-version frame, so
226
+ // it is present here.
227
+ const verificationMethod = proof.verificationMethod;
228
+ const keyMultibase = recordProofKeyMultibase({
229
+ verificationMethod,
230
+ label: 'recovery'
231
+ });
232
+ let proofState = {
233
+ pending: { verificationMethod, keyMultibase }
234
+ };
235
+ if (keyMultibase === expectedKeyMultibase) {
236
+ await verifyRecordProof({
237
+ record,
238
+ allowedKeyMultibases: expectedKeyMultibase,
239
+ label: 'recovery'
240
+ });
241
+ proofState = 'verified';
242
+ }
59
243
  const cipher = await recordCipher({
60
244
  keyAgreementKey,
61
245
  keyResolver,
@@ -75,13 +259,32 @@ export async function unwrapRecoveryRecord({ record, keyAgreementKey, keyResolve
75
259
  typeof plaintext.delegation !== 'object') {
76
260
  throw new Error('Recovery record is missing its did.jsonl delegation.');
77
261
  }
262
+ const createdAt = parseRecordCreatedAt({
263
+ value: plaintext.createdAt,
264
+ label: 'Recovery'
265
+ });
266
+ const expectedTag = hmac(sha256, bindingMacKey, bindingMacInput({ controller: plaintext.controller, pointer }));
267
+ let servedTag;
268
+ try {
269
+ servedTag = base64urlnopad.decode(binding);
270
+ }
271
+ catch {
272
+ servedTag = null;
273
+ }
274
+ // `equalBytes` is @noble/ciphers' authentication-tag comparison (no early
275
+ // exit), so the check leaks nothing through timing.
276
+ if (servedTag === null || !equalBytes(servedTag, expectedTag)) {
277
+ throw new RecoveryBindingError("The recovery record's account binding does not verify under this " +
278
+ 'code; the record is refused as forged.');
279
+ }
78
280
  return {
79
- controller: plaintext.controller,
80
- ...(typeof plaintext.email === 'string' && plaintext.email
81
- ? { email: plaintext.email }
82
- : {}),
83
- pointer,
84
- delegation: plaintext.delegation
281
+ contents: {
282
+ controller: plaintext.controller,
283
+ pointer,
284
+ delegation: plaintext.delegation,
285
+ createdAt
286
+ },
287
+ proofState
85
288
  };
86
289
  }
87
290
  //# sourceMappingURL=recoveryRecord.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recoveryRecord.js","sourceRoot":"","sources":["../../src/recovery/recoveryRecord.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACb,MAAM,sBAAsB,CAAA;AAgB7B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,UAAU,EACV,KAAK,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,WAAW,EAQZ;IAKC,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,EAAE,eAAe,EAAE,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,eAAe;QACf,WAAW;QACX,UAAU;KACX,CAAC,CAAA;IACF,MAAM,IAAI,GAAG;QACX,UAAU;QACV,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB;QACD,UAAU;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAA;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QACxC,IAAI,EAAE,IAA+D;KACtE,CAAC,CAAA;IACF,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EACzC,MAAM,EACN,eAAe,EACf,WAAW,EAKZ;IACC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC;QAC/C,MAAM;QACN,KAAK,EAAE,UAAU;KAClB,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,eAAe;QACf,WAAW;QACX,UAAU;KACX,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;QACtC,QAAQ,EAAE,OAAgB;KAC3B,CAAC,CAKD,CAAA;IAED,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,IACE,SAAS,CAAC,UAAU,KAAK,IAAI;QAC7B,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IAED,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,GAAG,CAAC,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK;YACxD,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;QACP,UAAU,EAAE,SAAS,CAAC,UAAmB;KAC1C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"recoveryRecord.js","sourceRoot":"","sources":["../../src/recovery/recoveryRecord.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * - `parse` / `classify` turn a raw URL, JSON string, or CHAPI event into a
13
13
  * typed message and dispatch on what it asks for.
14
14
  * - `matching` filters stored credentials against a QueryByExample (both the
15
- * jsonpath deep matcher and the type/issuer matcher).
15
+ * deep matcher and the type/issuer matcher).
16
16
  * - `onboarding` is the `WalletOnboardingQuery` transport vocabulary: the
17
17
  * inviter's compose helper and the enrollee's classification, over a query
18
18
  * carrying the account pointer (did:webvh id, `spaceId`, `host`) and the
@@ -12,7 +12,7 @@
12
12
  * - `parse` / `classify` turn a raw URL, JSON string, or CHAPI event into a
13
13
  * typed message and dispatch on what it asks for.
14
14
  * - `matching` filters stored credentials against a QueryByExample (both the
15
- * jsonpath deep matcher and the type/issuer matcher).
15
+ * deep matcher and the type/issuer matcher).
16
16
  * - `onboarding` is the `WalletOnboardingQuery` transport vocabulary: the
17
17
  * inviter's compose helper and the enrollee's classification, over a query
18
18
  * carrying the account pointer (did:webvh id, `spaceId`, `host`) and the
@@ -1,11 +1,32 @@
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ /**
5
+ * QueryByExample matching: which stored credentials satisfy a verifier's
6
+ * `QueryByExample` request. Two independent algorithms ship here because the two
7
+ * apps genuinely differ, and each wallet matches only its own local store (no
8
+ * cross-replica agreement is required):
9
+ *
10
+ * - `credentialMatchesVprExampleQuery` / `filterCredentialsByExample` -- DCW's
11
+ * deep matcher, which walks the example object and matches any nested field
12
+ * (arrays, nested objects, literals) against the credential.
13
+ * - `vcMatchesFor` / `hasTypedExample` / `requestsCredentialType` --
14
+ * Freewallet's type-and-issuer matcher, which constrains only on the
15
+ * example's `type` (and, when pinned, `issuer`).
16
+ *
17
+ * Both operate on plain `IVerifiableCredential`s; each app maps its own record
18
+ * type down to the credential before calling. Ported from DCW's
19
+ * `app/lib/credentialMatching.ts` and Freewallet's
20
+ * `src/lib/walletRequest/vcMatches.ts`.
21
+ */
1
22
  import type { IVerifiableCredential } from './types.js';
2
23
  import type { IQueryByExample } from './types.js';
3
24
  export { issuerId, typeArray } from '@interop/data-integrity-core/guards';
4
25
  export type { ICredentialQuery, IQueryByExample, IVerifiableCredential } from './types.js';
5
26
  /**
6
27
  * Whether a credential matches a QueryByExample `example` object, by the DCW
7
- * deep-matching algorithm: every key of the example is resolved as a JSONPath
8
- * against the credential and compared. Array example values require the
28
+ * deep-matching algorithm: every key of the example is resolved as a literal
29
+ * property of the credential and compared. Array example values require the
9
30
  * credential to contain (at least) every listed value; object example values
10
31
  * recurse; literal example values compare by strict equality. An empty example
11
32
  * matches any credential.
@@ -18,11 +39,9 @@ export type { ICredentialQuery, IQueryByExample, IVerifiableCredential } from '.
18
39
  *
19
40
  * @param vprExample {Record<string, unknown>} - The QueryByExample `example`.
20
41
  * @param credential {IVerifiableCredential} - The stored credential to test.
21
- * @param [credentialPath] {string} - JSONPath root into the credential
22
- * (defaults to `$`); used internally when recursing into nested objects.
23
42
  * @returns {boolean}
24
43
  */
25
- export declare function credentialMatchesVprExampleQuery(vprExample: Record<string, unknown>, credential: IVerifiableCredential, credentialPath?: string): boolean;
44
+ export declare function credentialMatchesVprExampleQuery(vprExample: Record<string, unknown>, credential: IVerifiableCredential): boolean;
26
45
  /**
27
46
  * Filters credentials to those matching a `QueryByExample`, using the deep
28
47
  * matcher. Each of the query's `credentialQuery` details contributes its
@@ -1 +1 @@
1
- {"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/request/matching.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAA;AAMnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAKzE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,UAAU,EAAE,qBAAqB,EACjC,cAAc,SAAM,GACnB,OAAO,CA0CT;AAiCD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,qBAAqB,EAAE,EACpC,KAAK,EAAE,eAAe,GACrB,qBAAqB,EAAE,CAgBzB;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,OAAO,EACR,EAAE;IACD,WAAW,EAAE,qBAAqB,EAAE,CAAA;IACpC,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,GAAG,qBAAqB,EAAE,CAQ1B;AAqBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EACL,EAAE;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAIV"}
1
+ {"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/request/matching.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAA;AAMnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAKzE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAET;AAiGD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,qBAAqB,EAAE,EACpC,KAAK,EAAE,eAAe,GACrB,qBAAqB,EAAE,CAgBzB;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,OAAO,EACR,EAAE;IACD,WAAW,EAAE,qBAAqB,EAAE,CAAA;IACpC,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,GAAG,qBAAqB,EAAE,CAQ1B;AAqBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EACL,EAAE;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAIV"}
@@ -1,25 +1,3 @@
1
- /*!
2
- * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
- */
4
- /**
5
- * QueryByExample matching: which stored credentials satisfy a verifier's
6
- * `QueryByExample` request. Two independent algorithms ship here because the two
7
- * apps genuinely differ, and each wallet matches only its own local store (no
8
- * cross-replica agreement is required):
9
- *
10
- * - `credentialMatchesVprExampleQuery` / `filterCredentialsByExample` -- DCW's
11
- * jsonpath-plus deep matcher, which walks the example object and matches any
12
- * nested field (arrays, nested objects, literals) against the credential.
13
- * - `vcMatchesFor` / `hasTypedExample` / `requestsCredentialType` --
14
- * Freewallet's type-and-issuer matcher, which constrains only on the
15
- * example's `type` (and, when pinned, `issuer`).
16
- *
17
- * Both operate on plain `IVerifiableCredential`s; each app maps its own record
18
- * type down to the credential before calling. Ported from DCW's
19
- * `app/lib/credentialMatching.ts` and Freewallet's
20
- * `src/lib/walletRequest/vcMatches.ts`.
21
- */
22
- import { JSONPath } from 'jsonpath-plus';
23
1
  import { credentialQueriesOf } from './classify.js';
24
2
  import { issuerId, typeArray } from '@interop/data-integrity-core/guards';
25
3
  // The loose-field normalizers are owned by data-integrity-core; re-export them
@@ -27,8 +5,8 @@ import { issuerId, typeArray } from '@interop/data-integrity-core/guards';
27
5
  export { issuerId, typeArray } from '@interop/data-integrity-core/guards';
28
6
  /**
29
7
  * Whether a credential matches a QueryByExample `example` object, by the DCW
30
- * deep-matching algorithm: every key of the example is resolved as a JSONPath
31
- * against the credential and compared. Array example values require the
8
+ * deep-matching algorithm: every key of the example is resolved as a literal
9
+ * property of the credential and compared. Array example values require the
32
10
  * credential to contain (at least) every listed value; object example values
33
11
  * recurse; literal example values compare by strict equality. An empty example
34
12
  * matches any credential.
@@ -41,16 +19,26 @@ export { issuerId, typeArray } from '@interop/data-integrity-core/guards';
41
19
  *
42
20
  * @param vprExample {Record<string, unknown>} - The QueryByExample `example`.
43
21
  * @param credential {IVerifiableCredential} - The stored credential to test.
44
- * @param [credentialPath] {string} - JSONPath root into the credential
45
- * (defaults to `$`); used internally when recursing into nested objects.
46
22
  * @returns {boolean}
47
23
  */
48
- export function credentialMatchesVprExampleQuery(vprExample, credential, credentialPath = '$') {
24
+ export function credentialMatchesVprExampleQuery(vprExample, credential) {
25
+ return matchesExampleScope(vprExample, credential);
26
+ }
27
+ /**
28
+ * The recursive half of the deep matcher: whether an example object matches the
29
+ * given scope of a credential. Each example key is resolved as a literal
30
+ * property of the scope, and an object example value recurses into the value it
31
+ * resolved to.
32
+ *
33
+ * @param vprExample {Record<string, unknown>} - The example (or sub-example).
34
+ * @param scope {unknown} - The credential value the example is matched against
35
+ * (the credential itself at the top level).
36
+ * @returns {boolean}
37
+ */
38
+ function matchesExampleScope(vprExample, scope) {
49
39
  const matches = [];
50
40
  for (const [vprExampleKey, vprExampleValue] of Object.entries(vprExample)) {
51
- const nextPath = extendPath(credentialPath, vprExampleKey);
52
- // The result is always dumped into a single-element array.
53
- const [credentialScope] = JSONPath({ path: nextPath, json: credential });
41
+ const credentialScope = propertyOf(scope, vprExampleKey);
54
42
  if (Array.isArray(vprExampleValue)) {
55
43
  // Array query values require that the matching credential contains at
56
44
  // least every value specified. This assumes each element is a literal.
@@ -64,7 +52,7 @@ export function credentialMatchesVprExampleQuery(vprExample, credential, credent
64
52
  else if (typeof vprExampleValue === 'object' &&
65
53
  vprExampleValue !== null) {
66
54
  // Object query values recurse, to handle nested queries.
67
- matches.push(credentialMatchesVprExampleQuery(vprExampleValue, credential, nextPath));
55
+ matches.push(matchesExampleScope(vprExampleValue, credentialScope));
68
56
  }
69
57
  else {
70
58
  // Literal query values compare directly, or by membership when the
@@ -94,16 +82,25 @@ function valueList(value) {
94
82
  return [value];
95
83
  }
96
84
  /**
97
- * Extends a JSONPath by a literal key, escaping any JSONPath-reserved
98
- * characters in the key (jsonpath-plus escapes a reserved char by prefixing it
99
- * with a backtick).
85
+ * The value of an own property of a credential scope, or `undefined` when the
86
+ * scope carries no such property. Example keys are arbitrary strings, so only
87
+ * own properties resolve: an inherited name (`toString`, `constructor`,
88
+ * `__proto__`) reads as absent rather than reaching the prototype chain. An
89
+ * array scope is an ordinary object here -- a key is not mapped over its
90
+ * elements.
91
+ *
92
+ * @param scope {unknown} - The credential value to read from.
93
+ * @param key {string} - The literal property name.
94
+ * @returns {unknown}
100
95
  */
101
- function extendPath(path, extension) {
102
- const reserved = /[$@*()[\].:?]/g;
103
- if (reserved.test(extension)) {
104
- extension = extension.replace(reserved, match => '`' + match);
96
+ function propertyOf(scope, key) {
97
+ if (scope === null || scope === undefined) {
98
+ return undefined;
99
+ }
100
+ if (!Object.hasOwn(scope, key)) {
101
+ return undefined;
105
102
  }
106
- return `${path}.${extension}`;
103
+ return scope[key];
107
104
  }
108
105
  /**
109
106
  * Filters credentials to those matching a `QueryByExample`, using the deep
@@ -1 +1 @@
1
- {"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/request/matching.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAEzE,+EAA+E;AAC/E,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAWzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gCAAgC,CAC9C,UAAmC,EACnC,UAAiC,EACjC,cAAc,GAAG,GAAG;IAEpB,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;QAC1D,2DAA2D;QAC3D,MAAM,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACxE,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,sEAAsE;YACtE,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,CAAA;YAC9C,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,CAAC,IAAI,CACV,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CACnC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CACnC,CACF,CAAA;QACH,CAAC;aAAM,IACL,OAAO,eAAe,KAAK,QAAQ;YACnC,eAAe,KAAK,IAAI,EACxB,CAAC;YACD,yDAAyD;YACzD,OAAO,CAAC,IAAI,CACV,gCAAgC,CAC9B,eAA0C,EAC1C,UAAU,EACV,QAAQ,CACT,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,gDAAgD;YAChD,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC5B,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC3C,CAAC,CAAC,eAAe,KAAK,eAAe,CACxC,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,SAAiB;IACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAA;IACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,SAAS,EAAE,CAAA;AAC/B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAAoC,EACpC,KAAsB;IAEtB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC;SACxC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;SAC7B,MAAM,CAAC,CAAC,OAAO,EAA0C,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACzE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,kDAAkD;QAClD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACrC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACtB,gCAAgC,CAC9B,OAAkC,EAClC,UAAU,CACX,CACF,CACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,EACtB,UAAU,EACV,OAAO,EAIR;IACC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,YAAY,CAAA;IACrD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,WAAW,EACX,OAAO,EAIR;IACC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACrC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAClE,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CACtB,OAA0B;IAE1B,OAAO,OAAO;SACX,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;SAC7B,MAAM,CACL,CAAC,OAAO,EAA0C,EAAE,CAClD,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAClD,CAAA;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EAIL;IACC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/request/matching.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"walletInput.d.ts","sourceRoot":"","sources":["../../src/request/walletInput.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAsCzC;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,eAAoB,EAAE,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5D,WAAW,CA2Cb;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACrD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC/B,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,gBAAgB,CAAA;KAC1B,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC1D;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,EACzC,IAAI,EACJ,eAAe,EACf,QAAQ,EACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAA;CACjC,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBb"}
1
+ {"version":3,"file":"walletInput.d.ts","sourceRoot":"","sources":["../../src/request/walletInput.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAwCzC;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,eAAoB,EAAE,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5D,WAAW,CA2Cb;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACrD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC/B,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,gBAAgB,CAAA;KAC1B,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC1D;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,EACzC,IAAI,EACJ,eAAe,EACf,QAAQ,EACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAA;CACjC,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBb"}
@@ -42,14 +42,9 @@
42
42
  * produces the honest error message.
43
43
  */
44
44
  import { isConnectCode } from '../enrollment/connectCode.js';
45
+ import { WAS_LINK_TYPE } from '../space/wasLink.js';
45
46
  import { isInteractionUrl } from './interactionUrl.js';
46
47
  import { isWalletApiMessage, parseWalletApiMessage, parseWalletApiUrl } from './parse.js';
47
- /**
48
- * The `t` member every `was-link` connection payload carries. Matched
49
- * structurally here rather than by calling the parser, so an unrelated JSON
50
- * blob is not refused with a connection-code error message.
51
- */
52
- const WAS_LINK_TYPE = 'was-link';
53
48
  /**
54
49
  * The query parameters of a link, whatever its scheme. Uses the substring
55
50
  * after the first `?` rather than `new URL`, so a custom-protocol link parses
@@ -64,6 +59,8 @@ function queryParamsOf(text) {
64
59
  }
65
60
  /**
66
61
  * Whether the text parses as a `was-link` connection payload's JSON shape.
62
+ * Matched structurally on the `t` member rather than by calling the parser, so
63
+ * an unrelated JSON blob is not refused with a connection-code error message.
67
64
  *
68
65
  * @param text {string}
69
66
  * @returns {boolean}
@@ -1 +1 @@
1
- {"version":3,"file":"walletInput.js","sourceRoot":"","sources":["../../src/request/walletInput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walletInput.js","sourceRoot":"","sources":["../../src/request/walletInput.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * controller-document material never comes from the channel the log came
15
15
  * from.
16
16
  */
17
- import { type DIDLog } from '@interop/did-method-webvh';
17
+ import type { DIDLog } from '@interop/did-method-webvh';
18
18
  /**
19
19
  * What log verification consumes of the independently verified controller
20
20
  * document: the DID the entry proofs must sign under, the verified controller
@@ -41,9 +41,12 @@ export interface ResourceLogController {
41
41
  /**
42
42
  * Builds the controller view over an already-verified did:webvh account log
43
43
  * (the `verifyAccountLog` output -- callers never hand this a log they have
44
- * not verified against the account pointer). Anchored-version lookups
45
- * re-resolve the held log at that version and are memoized: controller logs
46
- * are tens of entries and anchors cluster on few versions.
44
+ * not verified against the account pointer). Because every verified entry
45
+ * carries its resolved document in `state`, the per-version `assertionMethod`
46
+ * sets are read straight off those entries in one linear pass over the log
47
+ * rather than replaying resolution once per version. An anchored lookup at a
48
+ * version the log does not carry refuses instead of guessing, and `undefined`
49
+ * answers from the last entry (the current document).
47
50
  *
48
51
  * @param options {object}
49
52
  * @param options.did {string} the account's did:webvh, as verified
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/resourceLog/controller.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;GAYG;AACH,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAG1E;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,qBAAqB,CAkCxB"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/resourceLog/controller.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAGvD;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D;AAmCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,qBAAqB,CA6BxB"}