@interop/wallet-core 0.50.0 → 0.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/README.md +7 -11
  2. package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +17 -8
  3. package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
  4. package/dist/clientAnnex/credentialAnchoredGenesis.js +33 -12
  5. package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -1
  6. package/dist/clientAnnex/forget.d.ts +18 -6
  7. package/dist/clientAnnex/forget.d.ts.map +1 -1
  8. package/dist/clientAnnex/forget.js +19 -6
  9. package/dist/clientAnnex/forget.js.map +1 -1
  10. package/dist/clientAnnex/forgetLast.d.ts +65 -28
  11. package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
  12. package/dist/clientAnnex/forgetLast.js +78 -18
  13. package/dist/clientAnnex/forgetLast.js.map +1 -1
  14. package/dist/clientAnnex/gc.d.ts +3 -3
  15. package/dist/clientAnnex/gc.d.ts.map +1 -1
  16. package/dist/clientAnnex/gc.js +2 -2
  17. package/dist/clientAnnex/gc.js.map +1 -1
  18. package/dist/clientAnnex/index.d.ts +6 -6
  19. package/dist/clientAnnex/index.d.ts.map +1 -1
  20. package/dist/clientAnnex/index.js +5 -5
  21. package/dist/clientAnnex/index.js.map +1 -1
  22. package/dist/clientAnnex/ladder.d.ts +19 -11
  23. package/dist/clientAnnex/ladder.d.ts.map +1 -1
  24. package/dist/clientAnnex/ladder.js +77 -14
  25. package/dist/clientAnnex/ladder.js.map +1 -1
  26. package/dist/clientAnnex/ladderAnchored.d.ts +36 -7
  27. package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
  28. package/dist/clientAnnex/ladderAnchored.js +80 -18
  29. package/dist/clientAnnex/ladderAnchored.js.map +1 -1
  30. package/dist/clientAnnex/log.d.ts +6 -6
  31. package/dist/clientAnnex/log.d.ts.map +1 -1
  32. package/dist/clientAnnex/log.js +8 -8
  33. package/dist/clientAnnex/log.js.map +1 -1
  34. package/dist/clientAnnex/recoveryLadderAnchored.d.ts +7 -7
  35. package/dist/clientAnnex/recoveryLadderAnchored.js +9 -9
  36. package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
  37. package/dist/clientAnnex/selfEnroll.d.ts +6 -4
  38. package/dist/clientAnnex/selfEnroll.d.ts.map +1 -1
  39. package/dist/clientAnnex/selfEnroll.js +19 -7
  40. package/dist/clientAnnex/selfEnroll.js.map +1 -1
  41. package/dist/clients/listing.d.ts +1 -1
  42. package/dist/clients/listing.d.ts.map +1 -1
  43. package/dist/clients/listing.js +1 -1
  44. package/dist/clients/listing.js.map +1 -1
  45. package/dist/clients/revocation.d.ts +1 -1
  46. package/dist/clients/rosterPolicy.d.ts +1 -1
  47. package/dist/clients/rosterPolicy.d.ts.map +1 -1
  48. package/dist/descriptors/acquire.js +1 -1
  49. package/dist/descriptors/logSource.d.ts +1 -2
  50. package/dist/descriptors/logSource.d.ts.map +1 -1
  51. package/dist/descriptors/logSource.js +2 -2
  52. package/dist/descriptors/logSource.js.map +1 -1
  53. package/dist/enrollment/enrollment.d.ts +1 -1
  54. package/dist/enrollment/enrollment.d.ts.map +1 -1
  55. package/dist/enrollment/enrollment.js +2 -1
  56. package/dist/enrollment/enrollment.js.map +1 -1
  57. package/dist/genesis/accountGenesis.d.ts +13 -1
  58. package/dist/genesis/accountGenesis.d.ts.map +1 -1
  59. package/dist/genesis/accountGenesis.js +1 -1
  60. package/dist/genesis/accountGenesis.js.map +1 -1
  61. package/dist/index.d.ts +1 -3
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/keyring/kdf.d.ts +6 -20
  66. package/dist/keyring/kdf.d.ts.map +1 -1
  67. package/dist/keyring/kdf.js +8 -5
  68. package/dist/keyring/kdf.js.map +1 -1
  69. package/dist/keyring/unlockSpace.js +1 -1
  70. package/dist/keys/rosterLogStore.d.ts +16 -14
  71. package/dist/keys/rosterLogStore.d.ts.map +1 -1
  72. package/dist/keys/rosterLogStore.js +149 -32
  73. package/dist/keys/rosterLogStore.js.map +1 -1
  74. package/dist/keys/rosterStore.d.ts +8 -7
  75. package/dist/keys/rosterStore.d.ts.map +1 -1
  76. package/dist/keys/rosterStore.js +6 -6
  77. package/dist/keys/rosterStore.js.map +1 -1
  78. package/dist/keys/spaceEpochs.d.ts +1 -1
  79. package/dist/keys/spaceEpochs.js +1 -1
  80. package/dist/keys/userKeyRoster.d.ts +3 -3
  81. package/dist/keys/userKeyRoster.d.ts.map +1 -1
  82. package/dist/keys/userKeyRoster.js +3 -3
  83. package/dist/keys/userKeyRoster.js.map +1 -1
  84. package/dist/recovery/index.d.ts +2 -2
  85. package/dist/recovery/index.js +2 -2
  86. package/dist/recovery/recoveryDelegation.js +1 -1
  87. package/dist/recovery/recoveryDelegation.js.map +1 -1
  88. package/dist/recovery/recoveryWebvh.d.ts +4 -4
  89. package/dist/recovery/recoveryWebvh.js +5 -5
  90. package/dist/request/appKey.d.ts +9 -3
  91. package/dist/request/appKey.d.ts.map +1 -1
  92. package/dist/request/appKey.js +13 -8
  93. package/dist/request/appKey.js.map +1 -1
  94. package/dist/request/classify.d.ts.map +1 -1
  95. package/dist/request/classify.js +13 -1
  96. package/dist/request/classify.js.map +1 -1
  97. package/dist/request/ephemeralExchange.d.ts +6 -1
  98. package/dist/request/ephemeralExchange.d.ts.map +1 -1
  99. package/dist/request/ephemeralExchange.js +6 -1
  100. package/dist/request/ephemeralExchange.js.map +1 -1
  101. package/dist/request/exchangeClient.d.ts +0 -23
  102. package/dist/request/exchangeClient.d.ts.map +1 -1
  103. package/dist/request/exchangeClient.js +30 -1
  104. package/dist/request/exchangeClient.js.map +1 -1
  105. package/dist/request/index.d.ts +4 -1
  106. package/dist/request/index.d.ts.map +1 -1
  107. package/dist/request/index.js +4 -1
  108. package/dist/request/index.js.map +1 -1
  109. package/dist/request/interactionRequest.d.ts +23 -0
  110. package/dist/request/interactionRequest.d.ts.map +1 -0
  111. package/dist/request/interactionRequest.js +46 -0
  112. package/dist/request/interactionRequest.js.map +1 -0
  113. package/dist/request/interactionUrl.d.ts +3 -14
  114. package/dist/request/interactionUrl.d.ts.map +1 -1
  115. package/dist/request/interactionUrl.js +20 -1
  116. package/dist/request/interactionUrl.js.map +1 -1
  117. package/dist/resourceLog/controller.d.ts +48 -49
  118. package/dist/resourceLog/controller.d.ts.map +1 -1
  119. package/dist/resourceLog/controller.js +40 -20
  120. package/dist/resourceLog/controller.js.map +1 -1
  121. package/dist/resourceLog/errors.d.ts +12 -78
  122. package/dist/resourceLog/errors.d.ts.map +1 -1
  123. package/dist/resourceLog/errors.js +12 -79
  124. package/dist/resourceLog/errors.js.map +1 -1
  125. package/dist/resourceLog/index.d.ts +17 -22
  126. package/dist/resourceLog/index.d.ts.map +1 -1
  127. package/dist/resourceLog/index.js +16 -21
  128. package/dist/resourceLog/index.js.map +1 -1
  129. package/dist/resourceLog/license.d.ts +27 -26
  130. package/dist/resourceLog/license.d.ts.map +1 -1
  131. package/dist/resourceLog/license.js +31 -30
  132. package/dist/resourceLog/license.js.map +1 -1
  133. package/dist/unlock/index.d.ts +6 -6
  134. package/dist/unlock/index.d.ts.map +1 -1
  135. package/dist/unlock/index.js +5 -5
  136. package/dist/unlock/retire.d.ts +29 -28
  137. package/dist/unlock/retire.d.ts.map +1 -1
  138. package/dist/unlock/retire.js +25 -16
  139. package/dist/unlock/retire.js.map +1 -1
  140. package/dist/unlock/standingClient.d.ts +1 -1
  141. package/dist/unlock/standingClient.js +3 -3
  142. package/dist/unlock/standingWebvh.d.ts +28 -10
  143. package/dist/unlock/standingWebvh.d.ts.map +1 -1
  144. package/dist/unlock/standingWebvh.js +75 -37
  145. package/dist/unlock/standingWebvh.js.map +1 -1
  146. package/dist/unlock/unlockRecord.js +1 -1
  147. package/dist/webvh/delegatedLogStore.d.ts +2 -2
  148. package/dist/webvh/delegatedLogStore.js +2 -2
  149. package/dist/webvh/didWeb.js +1 -1
  150. package/dist/webvh/didWeb.js.map +1 -1
  151. package/dist/webvh/didWebvh.d.ts +3 -3
  152. package/dist/webvh/didWebvh.d.ts.map +1 -1
  153. package/dist/webvh/didWebvh.js +5 -5
  154. package/dist/webvh/didWebvh.js.map +1 -1
  155. package/dist/webvh/listClients.js +1 -1
  156. package/dist/webvh/listClients.js.map +1 -1
  157. package/dist/webvh/verifyLog.d.ts +1 -1
  158. package/dist/webvh/verifyLog.d.ts.map +1 -1
  159. package/dist/webvh/verifyLog.js +1 -2
  160. package/dist/webvh/verifyLog.js.map +1 -1
  161. package/package.json +6 -10
  162. package/dist/display/alignment.d.ts +0 -55
  163. package/dist/display/alignment.d.ts.map +0 -1
  164. package/dist/display/alignment.js +0 -117
  165. package/dist/display/alignment.js.map +0 -1
  166. package/dist/display/credentialName.d.ts +0 -42
  167. package/dist/display/credentialName.d.ts.map +0 -1
  168. package/dist/display/credentialName.js +0 -106
  169. package/dist/display/credentialName.js.map +0 -1
  170. package/dist/display/displayFields.d.ts +0 -59
  171. package/dist/display/displayFields.d.ts.map +0 -1
  172. package/dist/display/displayFields.js +0 -136
  173. package/dist/display/displayFields.js.map +0 -1
  174. package/dist/display/evidence.d.ts +0 -50
  175. package/dist/display/evidence.d.ts.map +0 -1
  176. package/dist/display/evidence.js +0 -67
  177. package/dist/display/evidence.js.map +0 -1
  178. package/dist/display/image.d.ts +0 -18
  179. package/dist/display/image.d.ts.map +0 -1
  180. package/dist/display/image.js +0 -23
  181. package/dist/display/image.js.map +0 -1
  182. package/dist/display/index.d.ts +0 -38
  183. package/dist/display/index.d.ts.map +0 -1
  184. package/dist/display/index.js +0 -32
  185. package/dist/display/index.js.map +0 -1
  186. package/dist/display/issuer.d.ts +0 -105
  187. package/dist/display/issuer.d.ts.map +0 -1
  188. package/dist/display/issuer.js +0 -126
  189. package/dist/display/issuer.js.map +0 -1
  190. package/dist/display/obv3.d.ts +0 -82
  191. package/dist/display/obv3.d.ts.map +0 -1
  192. package/dist/display/obv3.js +0 -117
  193. package/dist/display/obv3.js.map +0 -1
  194. package/dist/display/parse.d.ts +0 -66
  195. package/dist/display/parse.d.ts.map +0 -1
  196. package/dist/display/parse.js +0 -104
  197. package/dist/display/parse.js.map +0 -1
  198. package/dist/display/subject.d.ts +0 -79
  199. package/dist/display/subject.d.ts.map +0 -1
  200. package/dist/display/subject.js +0 -124
  201. package/dist/display/subject.js.map +0 -1
  202. package/dist/display/text.d.ts +0 -53
  203. package/dist/display/text.d.ts.map +0 -1
  204. package/dist/display/text.js +0 -78
  205. package/dist/display/text.js.map +0 -1
  206. package/dist/display/types.d.ts +0 -55
  207. package/dist/display/types.d.ts.map +0 -1
  208. package/dist/display/types.js +0 -41
  209. package/dist/display/types.js.map +0 -1
  210. package/dist/display/validity.d.ts +0 -51
  211. package/dist/display/validity.d.ts.map +0 -1
  212. package/dist/display/validity.js +0 -51
  213. package/dist/display/validity.js.map +0 -1
  214. package/dist/display/verificationView.d.ts +0 -115
  215. package/dist/display/verificationView.d.ts.map +0 -1
  216. package/dist/display/verificationView.js +0 -199
  217. package/dist/display/verificationView.js.map +0 -1
  218. package/dist/resourceLog/append.d.ts +0 -112
  219. package/dist/resourceLog/append.d.ts.map +0 -1
  220. package/dist/resourceLog/append.js +0 -197
  221. package/dist/resourceLog/append.js.map +0 -1
  222. package/dist/resourceLog/entry.d.ts +0 -68
  223. package/dist/resourceLog/entry.d.ts.map +0 -1
  224. package/dist/resourceLog/entry.js +0 -167
  225. package/dist/resourceLog/entry.js.map +0 -1
  226. package/dist/resourceLog/pin.d.ts +0 -82
  227. package/dist/resourceLog/pin.d.ts.map +0 -1
  228. package/dist/resourceLog/pin.js +0 -57
  229. package/dist/resourceLog/pin.js.map +0 -1
  230. package/dist/resourceLog/seal.d.ts +0 -97
  231. package/dist/resourceLog/seal.d.ts.map +0 -1
  232. package/dist/resourceLog/seal.js +0 -113
  233. package/dist/resourceLog/seal.js.map +0 -1
  234. package/dist/resourceLog/verify.d.ts +0 -96
  235. package/dist/resourceLog/verify.d.ts.map +0 -1
  236. package/dist/resourceLog/verify.js +0 -474
  237. package/dist/resourceLog/verify.js.map +0 -1
  238. package/dist/resourceLog/vmFragment.d.ts +0 -33
  239. package/dist/resourceLog/vmFragment.d.ts.map +0 -1
  240. package/dist/resourceLog/vmFragment.js +0 -39
  241. package/dist/resourceLog/vmFragment.js.map +0 -1
@@ -1,474 +0,0 @@
1
- /*!
2
- * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
- */
4
- /**
5
- * The Resource Log Profile's verification algorithm (App Connect spec,
6
- * `#log-verification`), end-to-end and fail-closed: entry-shape parse checks,
7
- * SCID recomputation, chain-hash recomputation (never a stated head), proof
8
- * verification through the did:webvh log kernel, the external-authorization
9
- * rule (anchor resolution against the independently verified controller
10
- * document, `assertionMethod` membership at the anchored version, anchor
11
- * monotonicity), the ceremony-tail license on ladder-signed appends,
12
- * terminal-entry recognition, and continuity against the chain-head pin. Any
13
- * failure rejects the LOG, not just the failing entry, and nothing served --
14
- * a stated head, a digest, a count -- is ever accepted in place of
15
- * recomputation; a license refusal keeps its own class
16
- * (`ResourceLogLicenseError`) so callers can tell an unlicensed append from
17
- * a corrupt log.
18
- */
19
- import { buildVersionId, canonicalizeStrict, defaultWebvhLogVerifier, deriveHash, parseAndValidateVersionId, SCID_PLACEHOLDER, verifyEntryProofs } from '@interop/did-method-webvh';
20
- import { ResourceLogContinuityError, ResourceLogIntegrityError, ResourceLogLicenseError } from './errors.js';
21
- import { assertLadderAppendLicensed } from './license.js';
22
- import { vmFragmentOf } from './vmFragment.js';
23
- /**
24
- * The five members a log entry carries, exactly.
25
- */
26
- const ENTRY_MEMBERS = [
27
- 'versionId',
28
- 'versionTime',
29
- 'parameters',
30
- 'state',
31
- 'proof'
32
- ];
33
- /**
34
- * Whether an entry is a terminal handover entry: its `parameters` carry a
35
- * `nextLog` member. Position, exact member set, and state equality are the
36
- * verifier's checks; this is only the discriminant.
37
- *
38
- * @param entry {ResourceLogEntry}
39
- * @returns {boolean}
40
- */
41
- export function isTerminalResourceLogEntry(entry) {
42
- return (typeof entry.parameters === 'object' &&
43
- entry.parameters !== null &&
44
- 'nextLog' in entry.parameters);
45
- }
46
- /**
47
- * Structural check of one member of an entry's `proof` array against the
48
- * profile's fixed shape, before any cryptography runs.
49
- *
50
- * @param proof {unknown}
51
- * @param ordinal {number} the owning entry's 1-based position
52
- * @returns {ResourceLogEntryProof}
53
- */
54
- function checkProofShape(proof, ordinal) {
55
- const candidate = proof;
56
- if (candidate === null ||
57
- typeof candidate !== 'object' ||
58
- candidate.type !== 'DataIntegrityProof' ||
59
- candidate.cryptosuite !== 'eddsa-jcs-2022' ||
60
- candidate.proofPurpose !== 'assertionMethod' ||
61
- typeof candidate.verificationMethod !== 'string' ||
62
- typeof candidate.proofValue !== 'string') {
63
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} carries a proof outside the profile's ` +
64
- `fixed shape (DataIntegrityProof / eddsa-jcs-2022 / assertionMethod).`);
65
- }
66
- return candidate;
67
- }
68
- /**
69
- * Shape-checks one entry (the profile's parse step): exactly the five
70
- * members, `versionId` ordinal at its 1-based position, an RFC3339 UTC
71
- * `versionTime` (format only -- temporal refusals are forbidden), the
72
- * per-position `parameters` rules fail-closed, a `state` carrying `type` and
73
- * no `history`, and a non-empty fixed-shape `proof` array.
74
- *
75
- * @param entry {ResourceLogEntry}
76
- * @param index {number} the entry's 0-based position
77
- */
78
- function checkEntryShape(entry, index) {
79
- const ordinal = index + 1;
80
- const members = Object.keys(entry);
81
- if (members.length !== ENTRY_MEMBERS.length ||
82
- ENTRY_MEMBERS.some(member => !(member in entry))) {
83
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} does not carry exactly the profile's ` +
84
- `five members (versionId, versionTime, parameters, state, proof).`);
85
- }
86
- try {
87
- parseAndValidateVersionId(entry.versionId, ordinal);
88
- }
89
- catch (err) {
90
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} has a malformed or misplaced versionId.`, { cause: err });
91
- }
92
- if (typeof entry.versionTime !== 'string' ||
93
- !entry.versionTime.endsWith('Z') ||
94
- Number.isNaN(Date.parse(entry.versionTime))) {
95
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} has a malformed versionTime (RFC3339 ` +
96
- `UTC required; the value itself is advisory).`);
97
- }
98
- const parameters = entry.parameters;
99
- if (parameters === null || typeof parameters !== 'object') {
100
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} has a non-object parameters member.`);
101
- }
102
- const parameterMembers = Object.keys(parameters);
103
- if (index === 0) {
104
- const genesis = parameters;
105
- const allowed = parameterMembers.every(member => ['method', 'scid', 'previousLog'].includes(member));
106
- if (!allowed ||
107
- typeof genesis.method !== 'string' ||
108
- typeof genesis.scid !== 'string' ||
109
- (genesis.previousLog !== undefined &&
110
- (genesis.previousLog === null ||
111
- typeof genesis.previousLog !== 'object' ||
112
- typeof genesis.previousLog.scid !== 'string' ||
113
- typeof genesis.previousLog.head !== 'string' ||
114
- Object.keys(genesis.previousLog).length !== 2))) {
115
- throw new ResourceLogIntegrityError('The resource log genesis parameters must carry method and scid ' +
116
- '(plus, on a handover successor only, previousLog) and nothing else.');
117
- }
118
- }
119
- else if (parameterMembers.length !== 0) {
120
- // The only non-genesis entry with parameters is a terminal handover
121
- // entry, exactly { nextLog: { method, scid } }. Anything else -- the
122
- // deleted did:webvh key-management parameters in particular -- is refused
123
- // fail-closed.
124
- const terminal = parameters;
125
- if (parameterMembers.length !== 1 ||
126
- terminal.nextLog === undefined ||
127
- terminal.nextLog === null ||
128
- typeof terminal.nextLog !== 'object' ||
129
- typeof terminal.nextLog.method !== 'string' ||
130
- typeof terminal.nextLog.scid !== 'string' ||
131
- Object.keys(terminal.nextLog).length !== 2) {
132
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} carries parameters this profile does ` +
133
- `not define for its position (only a terminal entry's nextLog is ` +
134
- `permitted past genesis).`);
135
- }
136
- }
137
- const state = entry.state;
138
- if (state === null ||
139
- typeof state !== 'object' ||
140
- typeof state.type !== 'string') {
141
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} has no state.type schema identifier.`);
142
- }
143
- if ('history' in state) {
144
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} carries a history member inside its ` +
145
- `state (the profile reserves that member name).`);
146
- }
147
- if (!Array.isArray(entry.proof) || entry.proof.length === 0) {
148
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} carries no proof array.`);
149
- }
150
- for (const proof of entry.proof) {
151
- checkProofShape(proof, ordinal);
152
- }
153
- }
154
- /**
155
- * Deep-clones a JSON value, replacing every string equal to the SCID with the
156
- * `{SCID}` placeholder -- the inverse of genesis construction, used to
157
- * recompute the SCID from a served genesis entry.
158
- *
159
- * @param value {unknown}
160
- * @param scid {string}
161
- * @returns {unknown}
162
- */
163
- function substituteScid(value, scid) {
164
- if (typeof value === 'string') {
165
- return value === scid ? SCID_PLACEHOLDER : value;
166
- }
167
- if (Array.isArray(value)) {
168
- return value.map(item => substituteScid(item, scid));
169
- }
170
- if (value !== null && typeof value === 'object') {
171
- const result = {};
172
- for (const [key, member] of Object.entries(value)) {
173
- result[key] = substituteScid(member, scid);
174
- }
175
- return result;
176
- }
177
- return value;
178
- }
179
- /**
180
- * The hash input of entry `n`: the entry with `proof` removed and `versionId`
181
- * replaced by the predecessor's `versionId` (the SCID for the genesis entry).
182
- *
183
- * @param entry {ResourceLogEntry}
184
- * @param predecessorVersionId {string}
185
- * @returns {object}
186
- */
187
- function hashInputOf(entry, predecessorVersionId) {
188
- return {
189
- versionId: predecessorVersionId,
190
- versionTime: entry.versionTime,
191
- parameters: entry.parameters,
192
- state: entry.state
193
- };
194
- }
195
- /**
196
- * Splits a proof's `verificationMethod` DID URL into its base DID, its
197
- * `versionId` DID parameter (the entry anchor), and its fragment (the signing
198
- * key's multibase).
199
- *
200
- * @param verificationMethod {string}
201
- * @param ordinal {number} the owning entry's 1-based position
202
- * @returns {object}
203
- */
204
- function parseAnchoredVm(verificationMethod, ordinal) {
205
- const keyMultibase = vmFragmentOf(verificationMethod);
206
- if (keyMultibase === undefined) {
207
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} has a proof verificationMethod without ` +
208
- `a key fragment.`);
209
- }
210
- const didUrl = verificationMethod.slice(0, verificationMethod.length - keyMultibase.length - 1);
211
- const queryIndex = didUrl.indexOf('?');
212
- if (queryIndex === -1) {
213
- return { did: didUrl, keyMultibase };
214
- }
215
- const did = didUrl.slice(0, queryIndex);
216
- const params = new URLSearchParams(didUrl.slice(queryIndex + 1));
217
- const anchor = params.get('versionId') ?? undefined;
218
- return { did, anchor, keyMultibase };
219
- }
220
- /**
221
- * Runs the profile's full verification over a parsed log, in order: parse
222
- * shape, genesis (SCID recomputation, format identifier), chain-hash
223
- * recomputation, per-entry proofs, the external-authorization rule with
224
- * anchor monotonicity, termination, and continuity against the chain-head
225
- * pin. Throws {@link ResourceLogIntegrityError} on fabrication-class
226
- * failures, {@link ResourceLogContinuityError} on pin conflicts, and
227
- * `ResourceLogLicenseError` on a ladder-signed append outside the
228
- * ceremony-tail license; any failure rejects the whole log.
229
- *
230
- * The controller view is the independently verified controller document --
231
- * never material served beside the log. An unversioned controller (empty
232
- * `versionIds`) degrades every anchor rule to current-document verification
233
- * and requires anchorless proofs.
234
- *
235
- * @param options {object}
236
- * @param options.entries {ResourceLogEntry[]} the parsed served log
237
- * @param options.controller {ResourceLogController} the verified controller
238
- * view ({@link webvhResourceLogController})
239
- * @param options.expectedMethod {string} the format identifier this caller
240
- * expects (`RESOURCE_LOG_METHOD`; also confirmed against any `history`
241
- * dispatch hint the caller followed)
242
- * @param [options.pin] {ResourceLogHeadPin} the held chain-head pin, when
243
- * this client has verified the log before
244
- * @returns {Promise<VerifiedResourceLog>}
245
- */
246
- export async function verifyResourceLog({ entries, controller, expectedMethod, pin }) {
247
- if (entries.length === 0) {
248
- throw new ResourceLogIntegrityError('The resource log is empty (a log carries at least its genesis entry).');
249
- }
250
- // 1. Parse: per-entry shape, parameters rules, ordinal positions.
251
- entries.forEach((entry, index) => {
252
- checkEntryShape(entry, index);
253
- });
254
- // 2. Genesis: format identifier, then SCID recomputation.
255
- const genesisParameters = entries[0].parameters;
256
- const { method, scid } = genesisParameters;
257
- if (method !== expectedMethod) {
258
- throw new ResourceLogIntegrityError(`The resource log declares format "${method}", not the expected ` +
259
- `"${expectedMethod}".`);
260
- }
261
- const preliminary = substituteScid(hashInputOf(entries[0], SCID_PLACEHOLDER), scid);
262
- if ((await deriveHash(preliminary)) !== scid) {
263
- throw new ResourceLogIntegrityError('The resource log SCID does not verify against its genesis content.');
264
- }
265
- // 3. Chain: recompute every entry hash from the predecessor-substituted
266
- // input; never accept a stated head.
267
- let predecessorVersionId = scid;
268
- for (const [index, entry] of entries.entries()) {
269
- const entryHash = await deriveHash(hashInputOf(entry, predecessorVersionId));
270
- if (entry.versionId !== buildVersionId(index + 1, entryHash)) {
271
- throw new ResourceLogIntegrityError(`Resource log entry ${index + 1} does not hash-chain to its ` +
272
- `predecessor.`);
273
- }
274
- predecessorVersionId = entry.versionId;
275
- }
276
- // 4 + 5. Proofs and authorization, entry by entry, with anchor
277
- // monotonicity carried along the log.
278
- const versioned = controller.versionIds.length > 0;
279
- const anchorIndexes = new Map();
280
- for (const [index, versionId] of controller.versionIds.entries()) {
281
- if (!anchorIndexes.has(versionId)) {
282
- anchorIndexes.set(versionId, index);
283
- }
284
- }
285
- let anchorFloor = 0;
286
- for (const [index, entry] of entries.entries()) {
287
- const ordinal = index + 1;
288
- let entryAnchorIndex = anchorFloor;
289
- // The kernel calls `authorize` before `resolveVM` for the same proof, so
290
- // the parse throws from `authorize` exactly as it did when both parsed.
291
- const parsed = new Map();
292
- const parseOnce = (verificationMethod) => {
293
- let result = parsed.get(verificationMethod);
294
- if (result === undefined) {
295
- result = parseAnchoredVm(verificationMethod, ordinal);
296
- parsed.set(verificationMethod, result);
297
- }
298
- return result;
299
- };
300
- const authorize = async (proof) => {
301
- const { did, anchor, keyMultibase } = parseOnce(proof.verificationMethod ?? '');
302
- if (did !== controller.did) {
303
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} is signed under a different ` +
304
- `controller than this log's account.`);
305
- }
306
- if (versioned && anchor === undefined) {
307
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} carries no entry anchor against a ` +
308
- `version-resolvable controller.`);
309
- }
310
- if (!versioned && anchor !== undefined) {
311
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} anchors a version on an unversioned ` +
312
- `controller.`);
313
- }
314
- let anchorIndex = 0;
315
- if (anchor !== undefined) {
316
- const known = anchorIndexes.get(anchor);
317
- if (known === undefined) {
318
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} anchors an unknown controller ` +
319
- `document version.`);
320
- }
321
- anchorIndex = known;
322
- if (anchorIndex < anchorFloor) {
323
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} anchors behind its predecessor ` +
324
- `(anchors must be monotone along the log).`);
325
- }
326
- }
327
- const assertionKeys = await controller.assertionKeysAt(anchor);
328
- if (!assertionKeys.has(keyMultibase)) {
329
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} is signed by a key the controller ` +
330
- `document does not list under assertionMethod at the anchored ` +
331
- `version.`);
332
- }
333
- // The ceremony-tail license: a ladder-signed proof (the anchored
334
- // version's relation-asymmetry ladder VM) is admitted only on the
335
- // genesis entry, or anchored at a posture-changing version no prior
336
- // entry anchors at or past. The floor at this point is still the
337
- // previous entries' effective anchor -- the verified head this append
338
- // extended.
339
- if (index > 0) {
340
- const posture = await controller.postureAt(anchor);
341
- if (posture.ladderKeys.has(keyMultibase)) {
342
- await assertLadderAppendLicensed({
343
- controller,
344
- anchorIndex: versioned ? anchorIndex : null,
345
- headAnchorIndex: anchorFloor
346
- });
347
- }
348
- }
349
- entryAnchorIndex = Math.max(entryAnchorIndex, anchorIndex);
350
- };
351
- try {
352
- // The wire proof type narrows the kernel's (fixed purpose, optional
353
- // created); the shape check above already enforced the profile form.
354
- await verifyEntryProofs(entry, {
355
- verifier: defaultWebvhLogVerifier,
356
- authorize,
357
- resolveVM: async (verificationMethod) => ({
358
- publicKeyMultibase: parseOnce(verificationMethod).keyMultibase
359
- })
360
- });
361
- }
362
- catch (err) {
363
- if (err instanceof ResourceLogIntegrityError ||
364
- err instanceof ResourceLogLicenseError) {
365
- throw err;
366
- }
367
- throw new ResourceLogIntegrityError(`Resource log entry ${ordinal} failed proof verification.`, { cause: err });
368
- }
369
- anchorFloor = entryAnchorIndex;
370
- }
371
- // 6. Termination: a terminal entry closes the log -- it must be last, must
372
- // not be the genesis, and must change no state.
373
- let terminal = null;
374
- for (const [index, entry] of entries.entries()) {
375
- if (!isTerminalResourceLogEntry(entry) || index === 0) {
376
- continue;
377
- }
378
- if (index !== entries.length - 1) {
379
- throw new ResourceLogIntegrityError('The resource log continues past a terminal handover entry.');
380
- }
381
- const predecessorState = entries[index - 1].state;
382
- if (canonicalizeStrict(entry.state) !== canonicalizeStrict(predecessorState)) {
383
- throw new ResourceLogIntegrityError("The terminal handover entry's state differs from its " +
384
- "predecessor's (a handover changes no resource state).");
385
- }
386
- terminal = entry.parameters.nextLog;
387
- }
388
- // 7. Continuity against the chain-head pin, where one is held.
389
- const head = entries[entries.length - 1];
390
- if (pin) {
391
- if (pin.method !== method) {
392
- throw new ResourceLogContinuityError({
393
- reason: 'method-switch',
394
- pinnedHead: pin.head
395
- });
396
- }
397
- if (pin.scid !== scid) {
398
- throw new ResourceLogContinuityError({
399
- reason: 'scid-switch',
400
- pinnedHead: pin.head
401
- });
402
- }
403
- const pinnedOrdinal = Number.parseInt(pin.head, 10);
404
- if (!Number.isInteger(pinnedOrdinal) || pinnedOrdinal < 1) {
405
- throw new ResourceLogContinuityError({
406
- reason: 'fork',
407
- pinnedHead: pin.head,
408
- servedEntries: entries
409
- });
410
- }
411
- if (entries.length < pinnedOrdinal) {
412
- throw new ResourceLogContinuityError({
413
- reason: 'rollback',
414
- pinnedHead: pin.head
415
- });
416
- }
417
- if (entries[pinnedOrdinal - 1].versionId !== pin.head) {
418
- throw new ResourceLogContinuityError({
419
- reason: 'fork',
420
- pinnedHead: pin.head,
421
- servedEntries: entries
422
- });
423
- }
424
- }
425
- return {
426
- entries,
427
- method,
428
- scid,
429
- head,
430
- state: head.state,
431
- pin: { method, scid, head: head.versionId },
432
- headAnchorIndex: versioned ? anchorFloor : null,
433
- terminal,
434
- previousLog: genesisParameters.previousLog ?? null
435
- };
436
- }
437
- /**
438
- * Verifies a handover link from both sides: the prior log's terminal entry
439
- * and the successor log's genesis back-reference. Both logs must already have
440
- * passed {@link verifyResourceLog}. Checks: the terminal `nextLog` names the
441
- * successor's SCID and method; the successor's `previousLog` names the prior
442
- * log's SCID; and the successor's `previousLog.head` is the `versionId` of
443
- * the terminal entry's immediate predecessor -- the terminal entry chains
444
- * directly off the head the successor references. A verified handover is the
445
- * one transition that replaces a chain-head pin wholesale (the caller stores
446
- * `successor.pin`).
447
- *
448
- * @param options {object}
449
- * @param options.prior {VerifiedResourceLog} the closed log
450
- * @param options.successor {VerifiedResourceLog} the log its terminal entry
451
- * names
452
- * @returns {void}
453
- */
454
- export function verifyResourceLogHandover({ prior, successor }) {
455
- if (!prior.terminal) {
456
- throw new ResourceLogContinuityError({
457
- reason: 'scid-switch',
458
- pinnedHead: prior.pin.head
459
- });
460
- }
461
- const predecessor = prior.entries[prior.entries.length - 2];
462
- if (prior.terminal.scid !== successor.scid ||
463
- prior.terminal.method !== successor.method ||
464
- successor.previousLog?.scid !== prior.scid ||
465
- predecessor === undefined ||
466
- successor.previousLog.head !== predecessor.versionId) {
467
- throw new ResourceLogContinuityError({
468
- reason: 'scid-switch',
469
- pinnedHead: prior.pin.head,
470
- servedEntries: successor.entries
471
- });
472
- }
473
- }
474
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/resourceLog/verify.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- /*!
2
- * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
- */
4
- /**
5
- * The one fragment reader for verification-method ids. Every id this stack
6
- * handles is minted as `${did}#${multibase}`, so the fragment IS the key's
7
- * public multibase -- which is what lets a did:key kid and a
8
- * `did:webvh`-spelled verification method be compared as key material rather
9
- * than as strings. The extraction used to exist in four spellings that
10
- * disagreed on the degenerate inputs; it lives here instead, dependency-free,
11
- * because `resourceLog` is the lowest layer the webvh, keys, and descriptors
12
- * modules all import.
13
- */
14
- /**
15
- * The fragment after the LAST `#` of a DID URL or verification-method id, or
16
- * `undefined` when the id carries no `#` at all or its fragment is empty (a
17
- * trailing `#`).
18
- *
19
- * The last `#` wins on a degenerate double-`#` id: ids are minted as
20
- * `${did}#${multibase}`, so the final segment is the key material either way,
21
- * and reading it from the end also survives a DID whose method-specific id
22
- * ever grows a `#`.
23
- *
24
- * `undefined` is the only absent-fragment posture here. A caller that needs a
25
- * different one -- throwing on a fragmentless id, or falling back to the whole
26
- * string -- wraps this helper explicitly at its own call site, so the choice
27
- * stays visible where it is made.
28
- *
29
- * @param id {string}
30
- * @returns {string | undefined}
31
- */
32
- export declare function vmFragmentOf(id: string): string | undefined;
33
- //# sourceMappingURL=vmFragment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vmFragment.d.ts","sourceRoot":"","sources":["../../src/resourceLog/vmFragment.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM3D"}
@@ -1,39 +0,0 @@
1
- /*!
2
- * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
- */
4
- /**
5
- * The one fragment reader for verification-method ids. Every id this stack
6
- * handles is minted as `${did}#${multibase}`, so the fragment IS the key's
7
- * public multibase -- which is what lets a did:key kid and a
8
- * `did:webvh`-spelled verification method be compared as key material rather
9
- * than as strings. The extraction used to exist in four spellings that
10
- * disagreed on the degenerate inputs; it lives here instead, dependency-free,
11
- * because `resourceLog` is the lowest layer the webvh, keys, and descriptors
12
- * modules all import.
13
- */
14
- /**
15
- * The fragment after the LAST `#` of a DID URL or verification-method id, or
16
- * `undefined` when the id carries no `#` at all or its fragment is empty (a
17
- * trailing `#`).
18
- *
19
- * The last `#` wins on a degenerate double-`#` id: ids are minted as
20
- * `${did}#${multibase}`, so the final segment is the key material either way,
21
- * and reading it from the end also survives a DID whose method-specific id
22
- * ever grows a `#`.
23
- *
24
- * `undefined` is the only absent-fragment posture here. A caller that needs a
25
- * different one -- throwing on a fragmentless id, or falling back to the whole
26
- * string -- wraps this helper explicitly at its own call site, so the choice
27
- * stays visible where it is made.
28
- *
29
- * @param id {string}
30
- * @returns {string | undefined}
31
- */
32
- export function vmFragmentOf(id) {
33
- const hashIndex = id.lastIndexOf('#');
34
- if (hashIndex === -1 || hashIndex === id.length - 1) {
35
- return undefined;
36
- }
37
- return id.slice(hashIndex + 1);
38
- }
39
- //# sourceMappingURL=vmFragment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vmFragment.js","sourceRoot":"","sources":["../../src/resourceLog/vmFragment.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;AAChC,CAAC"}