@did-btcr2/method 0.25.3 → 0.26.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 (233) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/browser.js +125307 -122227
  3. package/dist/browser.mjs +125266 -122186
  4. package/dist/cjs/index.js +5043 -43
  5. package/dist/esm/core/beacon/aggregation/cohort/index.js.map +1 -1
  6. package/dist/esm/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.js.map +1 -1
  7. package/dist/esm/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.js.map +1 -1
  8. package/dist/esm/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.js.map +1 -1
  9. package/dist/esm/core/beacon/aggregation/cohort/messages/keygen/opt-in.js.map +1 -1
  10. package/dist/esm/core/beacon/aggregation/cohort/messages/keygen/subscribe.js.map +1 -1
  11. package/dist/esm/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.js.map +1 -1
  12. package/dist/esm/core/beacon/aggregation/cohort/messages/sign/authorization-request.js.map +1 -1
  13. package/dist/esm/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.js.map +1 -1
  14. package/dist/esm/core/beacon/aggregation/cohort/messages/sign/request-signature.js.map +1 -1
  15. package/dist/esm/core/beacon/aggregation/cohort/messages/sign/signature-authorization.js.map +1 -1
  16. package/dist/esm/core/beacon/aggregation/communication/adapter/did-comm.js.map +1 -1
  17. package/dist/esm/core/beacon/aggregation/communication/adapter/nostr.js +1 -2
  18. package/dist/esm/core/beacon/aggregation/communication/adapter/nostr.js.map +1 -1
  19. package/dist/esm/core/beacon/aggregation/coordinator.js.map +1 -1
  20. package/dist/esm/core/beacon/aggregation/participant.js.map +1 -1
  21. package/dist/esm/core/beacon/aggregation/session/index.js.map +1 -1
  22. package/dist/esm/core/beacon/cas-beacon.js +6 -4
  23. package/dist/esm/core/beacon/cas-beacon.js.map +1 -1
  24. package/dist/esm/core/beacon/signal-discovery.js +1 -1
  25. package/dist/esm/core/beacon/signal-discovery.js.map +1 -1
  26. package/dist/esm/core/beacon/singleton-beacon.js +3 -3
  27. package/dist/esm/core/beacon/singleton-beacon.js.map +1 -1
  28. package/dist/esm/core/beacon/utils.js.map +1 -1
  29. package/dist/esm/core/identifier.js.map +1 -1
  30. package/dist/esm/core/resolver.js +41 -35
  31. package/dist/esm/core/resolver.js.map +1 -1
  32. package/dist/esm/core/update.js.map +1 -1
  33. package/dist/esm/did-btcr2.js +1 -1
  34. package/dist/esm/did-btcr2.js.map +1 -1
  35. package/dist/esm/utils/appendix.js +7 -6
  36. package/dist/esm/utils/appendix.js.map +1 -1
  37. package/dist/esm/utils/did-document-builder.js.map +1 -1
  38. package/dist/esm/utils/did-document.js +2 -2
  39. package/dist/esm/utils/did-document.js.map +1 -1
  40. package/dist/types/core/beacon/aggregation/cohort/index.d.ts +2 -2
  41. package/dist/types/core/beacon/aggregation/cohort/index.d.ts.map +1 -1
  42. package/dist/types/core/beacon/aggregation/cohort/messages/index.d.ts +10 -10
  43. package/dist/types/core/beacon/aggregation/cohort/messages/index.d.ts.map +1 -1
  44. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.d.ts +1 -1
  45. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.d.ts.map +1 -1
  46. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.d.ts +1 -1
  47. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.d.ts.map +1 -1
  48. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.d.ts +1 -1
  49. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.d.ts.map +1 -1
  50. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/opt-in.d.ts +1 -1
  51. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/opt-in.d.ts.map +1 -1
  52. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/subscribe.d.ts +1 -1
  53. package/dist/types/core/beacon/aggregation/cohort/messages/keygen/subscribe.d.ts.map +1 -1
  54. package/dist/types/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.d.ts +1 -1
  55. package/dist/types/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.d.ts.map +1 -1
  56. package/dist/types/core/beacon/aggregation/cohort/messages/sign/authorization-request.d.ts +1 -1
  57. package/dist/types/core/beacon/aggregation/cohort/messages/sign/authorization-request.d.ts.map +1 -1
  58. package/dist/types/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.d.ts +1 -1
  59. package/dist/types/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.d.ts.map +1 -1
  60. package/dist/types/core/beacon/aggregation/cohort/messages/sign/request-signature.d.ts +1 -1
  61. package/dist/types/core/beacon/aggregation/cohort/messages/sign/request-signature.d.ts.map +1 -1
  62. package/dist/types/core/beacon/aggregation/cohort/messages/sign/signature-authorization.d.ts +1 -1
  63. package/dist/types/core/beacon/aggregation/cohort/messages/sign/signature-authorization.d.ts.map +1 -1
  64. package/dist/types/core/beacon/aggregation/communication/adapter/did-comm.d.ts +4 -4
  65. package/dist/types/core/beacon/aggregation/communication/adapter/did-comm.d.ts.map +1 -1
  66. package/dist/types/core/beacon/aggregation/communication/adapter/nostr.d.ts +6 -6
  67. package/dist/types/core/beacon/aggregation/communication/adapter/nostr.d.ts.map +1 -1
  68. package/dist/types/core/beacon/aggregation/communication/factory.d.ts +1 -1
  69. package/dist/types/core/beacon/aggregation/communication/factory.d.ts.map +1 -1
  70. package/dist/types/core/beacon/aggregation/communication/service.d.ts +3 -3
  71. package/dist/types/core/beacon/aggregation/communication/service.d.ts.map +1 -1
  72. package/dist/types/core/beacon/aggregation/coordinator.d.ts +3 -3
  73. package/dist/types/core/beacon/aggregation/coordinator.d.ts.map +1 -1
  74. package/dist/types/core/beacon/aggregation/participant.d.ts +6 -6
  75. package/dist/types/core/beacon/aggregation/participant.d.ts.map +1 -1
  76. package/dist/types/core/beacon/aggregation/session/index.d.ts +2 -2
  77. package/dist/types/core/beacon/aggregation/session/index.d.ts.map +1 -1
  78. package/dist/types/core/beacon/beacon.d.ts +5 -5
  79. package/dist/types/core/beacon/beacon.d.ts.map +1 -1
  80. package/dist/types/core/beacon/cas-beacon.d.ts +5 -5
  81. package/dist/types/core/beacon/cas-beacon.d.ts.map +1 -1
  82. package/dist/types/core/beacon/factory.d.ts +2 -2
  83. package/dist/types/core/beacon/factory.d.ts.map +1 -1
  84. package/dist/types/core/beacon/interfaces.d.ts +3 -3
  85. package/dist/types/core/beacon/interfaces.d.ts.map +1 -1
  86. package/dist/types/core/beacon/signal-discovery.d.ts +3 -3
  87. package/dist/types/core/beacon/signal-discovery.d.ts.map +1 -1
  88. package/dist/types/core/beacon/singleton-beacon.d.ts +5 -5
  89. package/dist/types/core/beacon/singleton-beacon.d.ts.map +1 -1
  90. package/dist/types/core/beacon/smt-beacon.d.ts +5 -5
  91. package/dist/types/core/beacon/smt-beacon.d.ts.map +1 -1
  92. package/dist/types/core/beacon/utils.d.ts +4 -4
  93. package/dist/types/core/beacon/utils.d.ts.map +1 -1
  94. package/dist/types/core/identifier.d.ts +2 -2
  95. package/dist/types/core/identifier.d.ts.map +1 -1
  96. package/dist/types/core/interfaces.d.ts +2 -2
  97. package/dist/types/core/interfaces.d.ts.map +1 -1
  98. package/dist/types/core/resolver.d.ts +8 -8
  99. package/dist/types/core/resolver.d.ts.map +1 -1
  100. package/dist/types/core/types.d.ts +6 -5
  101. package/dist/types/core/types.d.ts.map +1 -1
  102. package/dist/types/core/update.d.ts +5 -5
  103. package/dist/types/core/update.d.ts.map +1 -1
  104. package/dist/types/did-btcr2.d.ts +6 -6
  105. package/dist/types/did-btcr2.d.ts.map +1 -1
  106. package/dist/types/utils/appendix.d.ts +7 -7
  107. package/dist/types/utils/appendix.d.ts.map +1 -1
  108. package/dist/types/utils/did-document-builder.d.ts +3 -2
  109. package/dist/types/utils/did-document-builder.d.ts.map +1 -1
  110. package/dist/types/utils/did-document.d.ts +3 -3
  111. package/dist/types/utils/did-document.d.ts.map +1 -1
  112. package/package.json +7 -6
  113. package/src/core/beacon/aggregation/cohort/index.ts +3 -2
  114. package/src/core/beacon/aggregation/cohort/messages/index.ts +10 -10
  115. package/src/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.ts +2 -1
  116. package/src/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.ts +2 -1
  117. package/src/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.ts +2 -1
  118. package/src/core/beacon/aggregation/cohort/messages/keygen/opt-in.ts +2 -1
  119. package/src/core/beacon/aggregation/cohort/messages/keygen/subscribe.ts +2 -1
  120. package/src/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.ts +2 -1
  121. package/src/core/beacon/aggregation/cohort/messages/sign/authorization-request.ts +2 -1
  122. package/src/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.ts +2 -1
  123. package/src/core/beacon/aggregation/cohort/messages/sign/request-signature.ts +2 -1
  124. package/src/core/beacon/aggregation/cohort/messages/sign/signature-authorization.ts +2 -1
  125. package/src/core/beacon/aggregation/communication/adapter/did-comm.ts +5 -4
  126. package/src/core/beacon/aggregation/communication/adapter/nostr.ts +9 -7
  127. package/src/core/beacon/aggregation/communication/factory.ts +1 -1
  128. package/src/core/beacon/aggregation/communication/service.ts +3 -3
  129. package/src/core/beacon/aggregation/coordinator.ts +12 -8
  130. package/src/core/beacon/aggregation/participant.ts +12 -7
  131. package/src/core/beacon/aggregation/session/index.ts +3 -2
  132. package/src/core/beacon/beacon.ts +5 -5
  133. package/src/core/beacon/cas-beacon.ts +13 -9
  134. package/src/core/beacon/factory.ts +2 -2
  135. package/src/core/beacon/interfaces.ts +3 -3
  136. package/src/core/beacon/signal-discovery.ts +5 -4
  137. package/src/core/beacon/singleton-beacon.ts +8 -7
  138. package/src/core/beacon/smt-beacon.ts +5 -5
  139. package/src/core/beacon/utils.ts +6 -4
  140. package/src/core/identifier.ts +3 -2
  141. package/src/core/interfaces.ts +2 -2
  142. package/src/core/resolver.ts +59 -51
  143. package/src/core/types.ts +6 -5
  144. package/src/core/update.ts +11 -7
  145. package/src/did-btcr2.ts +12 -10
  146. package/src/utils/appendix.ts +14 -16
  147. package/src/utils/did-document-builder.ts +3 -2
  148. package/src/utils/did-document.ts +10 -8
  149. package/dist/cjs/core/beacon/aggregation/cohort/index.js +0 -237
  150. package/dist/cjs/core/beacon/aggregation/cohort/index.js.map +0 -1
  151. package/dist/cjs/core/beacon/aggregation/cohort/messages/base.js +0 -26
  152. package/dist/cjs/core/beacon/aggregation/cohort/messages/base.js.map +0 -1
  153. package/dist/cjs/core/beacon/aggregation/cohort/messages/constants.js +0 -11
  154. package/dist/cjs/core/beacon/aggregation/cohort/messages/constants.js.map +0 -1
  155. package/dist/cjs/core/beacon/aggregation/cohort/messages/index.js +0 -98
  156. package/dist/cjs/core/beacon/aggregation/cohort/messages/index.js.map +0 -1
  157. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.js +0 -31
  158. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/cohort-advert.js.map +0 -1
  159. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.js +0 -29
  160. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/cohort-ready.js.map +0 -1
  161. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.js +0 -27
  162. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/opt-in-accept.js.map +0 -1
  163. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/opt-in.js +0 -23
  164. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/opt-in.js.map +0 -1
  165. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/subscribe.js +0 -28
  166. package/dist/cjs/core/beacon/aggregation/cohort/messages/keygen/subscribe.js.map +0 -1
  167. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.js +0 -29
  168. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/aggregated-nonce.js.map +0 -1
  169. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/authorization-request.js +0 -30
  170. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/authorization-request.js.map +0 -1
  171. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.js +0 -30
  172. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/nonce-contribution.js.map +0 -1
  173. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/request-signature.js +0 -30
  174. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/request-signature.js.map +0 -1
  175. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/signature-authorization.js +0 -31
  176. package/dist/cjs/core/beacon/aggregation/cohort/messages/sign/signature-authorization.js.map +0 -1
  177. package/dist/cjs/core/beacon/aggregation/cohort/status.js +0 -8
  178. package/dist/cjs/core/beacon/aggregation/cohort/status.js.map +0 -1
  179. package/dist/cjs/core/beacon/aggregation/communication/adapter/did-comm.js +0 -121
  180. package/dist/cjs/core/beacon/aggregation/communication/adapter/did-comm.js.map +0 -1
  181. package/dist/cjs/core/beacon/aggregation/communication/adapter/nostr.js +0 -246
  182. package/dist/cjs/core/beacon/aggregation/communication/adapter/nostr.js.map +0 -1
  183. package/dist/cjs/core/beacon/aggregation/communication/error.js +0 -12
  184. package/dist/cjs/core/beacon/aggregation/communication/error.js.map +0 -1
  185. package/dist/cjs/core/beacon/aggregation/communication/factory.js +0 -21
  186. package/dist/cjs/core/beacon/aggregation/communication/factory.js.map +0 -1
  187. package/dist/cjs/core/beacon/aggregation/communication/service.js +0 -2
  188. package/dist/cjs/core/beacon/aggregation/communication/service.js.map +0 -1
  189. package/dist/cjs/core/beacon/aggregation/coordinator.js +0 -343
  190. package/dist/cjs/core/beacon/aggregation/coordinator.js.map +0 -1
  191. package/dist/cjs/core/beacon/aggregation/participant.js +0 -435
  192. package/dist/cjs/core/beacon/aggregation/participant.js.map +0 -1
  193. package/dist/cjs/core/beacon/aggregation/session/index.js +0 -244
  194. package/dist/cjs/core/beacon/aggregation/session/index.js.map +0 -1
  195. package/dist/cjs/core/beacon/aggregation/session/status.js +0 -11
  196. package/dist/cjs/core/beacon/aggregation/session/status.js.map +0 -1
  197. package/dist/cjs/core/beacon/beacon.js +0 -25
  198. package/dist/cjs/core/beacon/beacon.js.map +0 -1
  199. package/dist/cjs/core/beacon/cas-beacon.js +0 -152
  200. package/dist/cjs/core/beacon/cas-beacon.js.map +0 -1
  201. package/dist/cjs/core/beacon/error.js +0 -37
  202. package/dist/cjs/core/beacon/error.js.map +0 -1
  203. package/dist/cjs/core/beacon/factory.js +0 -29
  204. package/dist/cjs/core/beacon/factory.js.map +0 -1
  205. package/dist/cjs/core/beacon/interfaces.js +0 -2
  206. package/dist/cjs/core/beacon/interfaces.js.map +0 -1
  207. package/dist/cjs/core/beacon/signal-discovery.js +0 -183
  208. package/dist/cjs/core/beacon/signal-discovery.js.map +0 -1
  209. package/dist/cjs/core/beacon/singleton-beacon.js +0 -107
  210. package/dist/cjs/core/beacon/singleton-beacon.js.map +0 -1
  211. package/dist/cjs/core/beacon/smt-beacon.js +0 -39
  212. package/dist/cjs/core/beacon/smt-beacon.js.map +0 -1
  213. package/dist/cjs/core/beacon/utils.js +0 -163
  214. package/dist/cjs/core/beacon/utils.js.map +0 -1
  215. package/dist/cjs/core/identifier.js +0 -248
  216. package/dist/cjs/core/identifier.js.map +0 -1
  217. package/dist/cjs/core/interfaces.js +0 -2
  218. package/dist/cjs/core/interfaces.js.map +0 -1
  219. package/dist/cjs/core/resolver.js +0 -476
  220. package/dist/cjs/core/resolver.js.map +0 -1
  221. package/dist/cjs/core/types.js +0 -2
  222. package/dist/cjs/core/types.js.map +0 -1
  223. package/dist/cjs/core/update.js +0 -112
  224. package/dist/cjs/core/update.js.map +0 -1
  225. package/dist/cjs/did-btcr2.js +0 -193
  226. package/dist/cjs/did-btcr2.js.map +0 -1
  227. package/dist/cjs/index.js.map +0 -1
  228. package/dist/cjs/utils/appendix.js +0 -203
  229. package/dist/cjs/utils/appendix.js.map +0 -1
  230. package/dist/cjs/utils/did-document-builder.js +0 -60
  231. package/dist/cjs/utils/did-document-builder.js.map +0 -1
  232. package/dist/cjs/utils/did-document.js +0 -424
  233. package/dist/cjs/utils/did-document.js.map +0 -1
@@ -1,193 +0,0 @@
1
- import { IdentifierHrp, INVALID_DID_DOCUMENT, INVALID_DID_UPDATE, METHOD_NOT_SUPPORTED, MethodError, UpdateError } from '@did-btcr2/common';
2
- import { Did, DidError, DidErrorCode, } from '@web5/dids';
3
- import * as ecc from '@bitcoinerlab/secp256k1';
4
- import { hexToBytes } from '@noble/hashes/utils';
5
- import { initEccLib } from 'bitcoinjs-lib';
6
- import { Identifier } from './core/identifier.js';
7
- import { Resolver } from './core/resolver.js';
8
- import { Update } from './core/update.js';
9
- import { Appendix } from './utils/appendix.js';
10
- /** Initialize secp256k1 ECC library */
11
- initEccLib(ecc);
12
- /**
13
- * Implements {@link https://dcdpr.github.io/did-btcr2 | did:btcr2 DID Method Specification}.
14
- * did:btcr2 is a censorship-resistant Decentralized Identifier (DID) method using
15
- * the Bitcoin blockchain as a Verifiable Data Registry to announce changes to the
16
- * DID document. It supports zero-cost off-chain DID creation; aggregated updates
17
- * for scalable on-chain update costs; long-term identifiers that can support
18
- * frequent updates; private communication of the DID document; private DID resolution;
19
- * and non-repudiation.
20
- *
21
- * @class DidBtcr2
22
- * @type {DidBtcr2}
23
- * @implements {DidMethod}
24
- */
25
- export class DidBtcr2 {
26
- /**
27
- * Name of the DID method, as defined in the DID BTCR2 specification
28
- */
29
- static methodName = 'btcr2';
30
- /**
31
- * Implements section {@link https://dcdpr.github.io/did-btcr2/operations/create.html | 7.1 Create}.
32
- * @param {KeyBytes | DocumentBytes} genesisBytes The bytes used to create the genesis document for a did:btcr2 identifier.
33
- * This can be either the bytes of the genesis document itself or the bytes of a key that will be used to create the genesis document.
34
- * @param {DidCreateOptions} options Options for creating the identifier, including the idType (key or external), version, and network.
35
- * @param {string} options.idType The type of identifier to create, either 'KEY' or 'EXTERNAL'. Defaults to 'KEY'.
36
- * @param {number} options.version The version number of the did:btcr2 specification to use for creating the identifier. Defaults to 1.
37
- * @param {string} options.network The Bitcoin network to use for the identifier, e.g. 'bitcoin', 'testnet', etc. Defaults to 'bitcoin'.
38
- * @returns {Promise<string>} Promise resolving to an identifier string.
39
- * @throws {MethodError} if any of the checks fail
40
- * @example
41
- * ```ts
42
- * const genesisBytes = SchnorrKeyPair.generate().publicKey.compressed;
43
- * const did = DidBtcr2.create(genesisBytes, { idType: 'KEY', network: 'regtest' });
44
- * ```
45
- */
46
- static create(genesisBytes, options) {
47
- // Deconstruct the idType, version and network from the options, setting defaults if not given
48
- const { idType, version = 1, network = 'bitcoin' } = options || {};
49
- if (!idType) {
50
- throw new MethodError('idType is required for creating a did:btcr2 identifier', INVALID_DID_DOCUMENT, options);
51
- }
52
- // Call identifier encoding algorithm
53
- return Identifier.encode(genesisBytes, { idType, version, network });
54
- }
55
- /**
56
- * Entry point for section {@link https://dcdpr.github.io/did-btcr2/operations/resolve.html | 7.2 Resolve}.
57
- *
58
- * Factory method that performs pure setup and returns a {@link Resolver} state machine.
59
- * The caller drives resolution by calling `resolver.resolve()` and `resolver.provide()`.
60
- * Analogous to Rust's `Document::read()`.
61
- *
62
- * @param {string} did The did:btcr2 identifier to be resolved.
63
- * @param {ResolutionOptions} resolutionOptions Options used during the resolution process.
64
- * @returns {Resolver} A sans-I/O state machine the caller drives to completion.
65
- * @example
66
- * ```ts
67
- * const resolver = DidBtcr2.resolve(did, { sidecar });
68
- * let state = resolver.resolve();
69
- * while (state.status === 'action-required') {
70
- * for (const need of state.needs) { ... provide data ... }
71
- * state = resolver.resolve();
72
- * }
73
- * const { didDocument, metadata } = state.result;
74
- * ```
75
- */
76
- static resolve(did, resolutionOptions = {}) {
77
- // Decode the did to be resolved
78
- const didComponents = Identifier.decode(did);
79
- // Process sidecar if provided
80
- const sidecarData = Resolver.sidecarData(resolutionOptions.sidecar);
81
- // Establish the current document for KEY identifiers (pure, synchronous).
82
- // For EXTERNAL identifiers, defer to the Resolver's GenesisDocument phase
83
- // since validation (Resolve.external) is async.
84
- const currentDocument = didComponents.hrp === IdentifierHrp.k
85
- ? Resolver.deterministic(didComponents)
86
- : null;
87
- // Return the sans-I/O state machine
88
- return new Resolver(didComponents, sidecarData, currentDocument, {
89
- versionId: resolutionOptions.versionId,
90
- versionTime: resolutionOptions.versionTime,
91
- genesisDocument: resolutionOptions.sidecar?.genesisDocument
92
- });
93
- }
94
- /**
95
- * Entry point for section {@link https://dcdpr.github.io/did-btcr2/#read | 7.3 Update}.
96
- * See specification for the {@link https://dcdpr.github.io/did-btcr2/operations/resolve.html#process | Resolve Process}.
97
- * See {@link Update | Update (class)} for class implementation.
98
- *
99
- * BTCR2 DID documents can be updated by anchoring BTCR2 Updates to Bitcoin transactions. These transactions MAY be
100
- * published to the Bitcoin network. Any property in the DID document may be updated except the id. Doing so would
101
- * invalidate the DID document.
102
- * @param params An object containing the parameters for the update operation.
103
- * @param {Btcr2DidDocument} params.sourceDocument The DID document being updated.
104
- * @param {PatchOperation[]} params.patches The array of JSON Patch operations to apply to the sourceDocument.
105
- * @param {string} params.sourceVersionId The version ID before applying the update.
106
- * @param {string} params.verificationMethodId The verificationMethod ID to sign the update with.
107
- * @param {string} params.beaconId The beacon ID associated with the update.
108
- * @param {KeyBytes | HexString} [params.signingMaterial] Optional signing material (key bytes or hex string).
109
- * @param {BitcoinConnection} [params.bitcoin] Optional Bitcoin network connection for announcing the update. If not provided, a default connection will be initialized.
110
- * @return {Promise<SignedBTCR2Update>} Promise resolving to the signed BTCR2 update.
111
- * @throws {UpdateError} if no verificationMethod, verificationMethod type is not `Multikey` or the publicKeyMultibase
112
- * header is not `zQ3s`
113
- */
114
- static async update({ sourceDocument, patches, sourceVersionId, verificationMethodId, beaconId, signingMaterial, bitcoin, }) {
115
- // If no signingMaterial provided, throw an UpdateError with INVALID_DID_UPDATE.
116
- if (!signingMaterial) {
117
- throw new UpdateError('Missing signing material for update', INVALID_DID_UPDATE, { signingMaterial });
118
- }
119
- // Convert signingMaterial to bytes if it's a hex string
120
- const secretKey = typeof signingMaterial === 'string'
121
- ? hexToBytes(signingMaterial)
122
- : signingMaterial;
123
- // Validate that the verificationMethodId is authorized for capabilityInvocation
124
- if (!sourceDocument.capabilityInvocation?.some(vr => vr === verificationMethodId)) {
125
- throw new UpdateError('Invalid verificationMethodId: not authorized for capabilityInvocation', INVALID_DID_DOCUMENT, sourceDocument);
126
- }
127
- // Get the verification method to be used for signing the update
128
- const verificationMethod = this.getSigningMethod(sourceDocument, verificationMethodId);
129
- // Validate the verificationMethod exists in the sourceDocument
130
- if (!verificationMethod) {
131
- throw new UpdateError('Invalid verificationMethod: not found in source document', INVALID_DID_DOCUMENT, { sourceDocument, verificationMethodId });
132
- }
133
- // Validate the verificationMethod is of type 'Multikey'
134
- if (verificationMethod.type !== 'Multikey') {
135
- throw new UpdateError('Invalid verificationMethod: verificationMethod.type must be "Multikey"', INVALID_DID_DOCUMENT, verificationMethod);
136
- }
137
- // Validate the publicKeyMultibase prefix is 'zQ3s'
138
- if (verificationMethod.publicKeyMultibase?.slice(0, 4) !== 'zQ3s') {
139
- throw new UpdateError('Invalid verificationMethodId: publicKeyMultibase prefix must start with "zQ3s"', INVALID_DID_DOCUMENT, verificationMethod);
140
- }
141
- // Construct an unsigned update following the BTCR2 Update construction algorithm
142
- const update = Update.construct(sourceDocument, patches, sourceVersionId);
143
- // Sign the unsigned update using the specified verification method
144
- const signed = Update.sign(sourceDocument.id, update, verificationMethod, secretKey);
145
- // Filter sourceDocument services to get beaconServices matching beaconIds
146
- const beaconService = sourceDocument.service
147
- .filter((service) => service.id === beaconId)
148
- .filter((service) => !!service)
149
- .shift();
150
- // If no matching beacon service found, throw an UpdateError with INVALID_DID_UPDATE.
151
- if (!beaconService) {
152
- throw new UpdateError('No beacon service found for provided beaconId', INVALID_DID_UPDATE, { sourceDocument, beaconId });
153
- }
154
- // Require an explicit bitcoin connection — no silent env-var fallback
155
- if (!bitcoin) {
156
- throw new UpdateError('Bitcoin connection required for update. Pass a configured `bitcoin` parameter '
157
- + 'or use DidBtcr2Api which injects it automatically.', INVALID_DID_UPDATE, { beaconId });
158
- }
159
- // Announce the signed update to the blockchain using the specified beacon(s)
160
- await Update.announce(beaconService, signed, secretKey, bitcoin);
161
- // Return signed update if announced successfully
162
- return signed;
163
- }
164
- /**
165
- * Given the W3C DID Document of a `did:btcr2` identifier, return the signing verification method that will be used
166
- * for signing messages and credentials. If given, the `methodId` parameter is used to select the
167
- * verification method. If not given, the Identity Key's verification method with an ID fragment
168
- * of '#initialKey' is used.
169
- * @param {Btcr2DidDocument} didDocument The DID Document of the `did:btcr2` identifier.
170
- * @param {string} [methodId] Optional verification method ID to be used for signing.
171
- * @returns {DidVerificationMethod} Promise resolving to the {@link DidVerificationMethod} object used for signing.
172
- * @throws {DidError} if the parsed did method does not match `btcr2` or signing method could not be determined.
173
- */
174
- static getSigningMethod(didDocument, methodId) {
175
- // Set the default methodId to the first assertionMethod if not given
176
- methodId ??= '#initialKey';
177
- // Verify the DID method is supported.
178
- const parsedDid = Did.parse(didDocument.id);
179
- if (parsedDid && parsedDid.method !== this.methodName) {
180
- throw new MethodError(`Method not supported: ${parsedDid.method}`, METHOD_NOT_SUPPORTED, { identifier: didDocument.id });
181
- }
182
- // Attempt to find a verification method that matches the given method ID, or if not given,
183
- // find the first verification method intended for signing claims.
184
- const verificationMethod = didDocument.verificationMethod?.find((vm) => Appendix.extractDidFragment(vm.id) === (Appendix.extractDidFragment(methodId)
185
- ?? Appendix.extractDidFragment(didDocument.assertionMethod?.[0])));
186
- // If no verification method is found, throw an error
187
- if (!(verificationMethod && verificationMethod.publicKeyMultibase)) {
188
- throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');
189
- }
190
- return verificationMethod;
191
- }
192
- }
193
- //# sourceMappingURL=did-btcr2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"did-btcr2.js","sourceRoot":"","sources":["../../src/did-btcr2.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAE3D,cAAc,mDAAmD,CAAC;AAClE,cAAc,wDAAwD,CAAC;AACvE,cAAc,oDAAoD,CAAC;AACnE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,mEAAmE,CAAC;AAClF,cAAc,kEAAkE,CAAC;AACjF,cAAc,mEAAmE,CAAC;AAClF,cAAc,4DAA4D,CAAC;AAC3E,cAAc,oEAAoE,CAAC;AACnF,cAAc,yEAAyE,CAAC;AACxF,cAAc,sEAAsE,CAAC;AACrF,cAAc,qEAAqE,CAAC;AACpF,cAAc,2EAA2E,CAAC;AAE1F,cAAc,6DAA6D,CAAC;AAC5E,cAAc,0DAA0D,CAAC;AAEzE,cAAc,kDAAkD,CAAC;AACjE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AAEnE,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6CAA6C,CAAC;AAE5D,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AAExC,cAAc,gBAAgB,CAAC"}
@@ -1,203 +0,0 @@
1
- import { strings } from '@helia/strings';
2
- import { DidError, DidErrorCode, DidVerificationRelationship } from '@web5/dids';
3
- import { createHelia } from 'helia';
4
- import { CID } from 'multiformats';
5
- import { create as createDigest } from 'multiformats/hashes/digest';
6
- /**
7
- * Implements {@link https://dcdpr.github.io/did-btcr2/#appendix | 9. Appendix} methods.
8
- *
9
- * @class Appendix
10
- * @type {Appendix}
11
- */
12
- export class Appendix {
13
- /**
14
- * Extracts a DID fragment from a given input
15
- * @param {unknown} input The input to extract the DID fragment from
16
- * @returns {string | undefined} The extracted DID fragment or undefined if not found
17
- */
18
- static extractDidFragment(input) {
19
- if (typeof input !== 'string')
20
- return undefined;
21
- if (input.length === 0)
22
- return undefined;
23
- return input;
24
- }
25
- /**
26
- * Validates that the given object is a DidVerificationMethod
27
- * @param {unknown} obj The object to validate
28
- * @returns {boolean} A boolean indicating whether the object is a DidVerificationMethod
29
- */
30
- static isDidVerificationMethod(obj) {
31
- // Validate that the given value is an object.
32
- if (!obj || typeof obj !== 'object' || obj === null)
33
- return false;
34
- // Validate that the object has the necessary properties of a DidVerificationMethod.
35
- if (!('id' in obj && 'type' in obj && 'controller' in obj))
36
- return false;
37
- if (typeof obj.id !== 'string')
38
- return false;
39
- if (typeof obj.type !== 'string')
40
- return false;
41
- if (typeof obj.controller !== 'string')
42
- return false;
43
- return true;
44
- }
45
- /**
46
- * Validates that the given object is a DidService
47
- * @param {unknown} obj The object to validate
48
- * @returns {boolean} A boolean indicating whether the object is a DidService
49
- */
50
- static isDidService(obj) {
51
- // Validate that the given value is an object.
52
- if (!obj || typeof obj !== 'object' || obj === null)
53
- return false;
54
- // Validate that the object has the necessary properties of a DidService.
55
- if (!('id' in obj && 'type' in obj && 'serviceEndpoint' in obj))
56
- return false;
57
- if (typeof obj.id !== 'string')
58
- return false;
59
- if (typeof obj.type !== 'string')
60
- return false;
61
- if (typeof obj.serviceEndpoint !== 'string')
62
- return false;
63
- return true;
64
- }
65
- /**
66
- * Extracts the verification methods from a given DID Document
67
- * @param {DidDocument} params.didDocument The DID Document to extract the verification methods from
68
- * @returns {DidVerificationMethod[]} An array of DidVerificationMethod objects
69
- * @throws {TypeError} if the didDocument is not provided
70
- */
71
- static getVerificationMethods(didDocument) {
72
- if (!didDocument)
73
- throw new TypeError(`Required parameter missing: 'didDocument'`);
74
- const verificationMethods = [];
75
- // Check the 'verificationMethod' array.
76
- verificationMethods.push(...didDocument.verificationMethod?.filter(Appendix.isDidVerificationMethod) ?? []);
77
- // Check verification relationship properties for embedded verification methods.
78
- Object.keys(DidVerificationRelationship).forEach((relationship) => {
79
- verificationMethods.push(...didDocument[relationship]
80
- ?.filter(Appendix.isDidVerificationMethod) ?? []);
81
- });
82
- return verificationMethods;
83
- }
84
- /**
85
- * Implements {@link https://dcdpr.github.io/did-btcr2/#derive-root-capability-from-didbtcr2-identifier | 9.4.1 Derive Root Capability from did:btcr2 Identifier }.
86
- *
87
- * The Derive Root Capability algorithm deterministically generates a ZCAP-LD root capability from a given did:btcr2
88
- * identifier. Each root capability is unique to the identifier. This root capability is defined and understood by the
89
- * did:btcr2 specification as the root capability to authorize updates to the specific did:btcr2 identifiers DID
90
- * document. It takes in a did:btcr2 identifier and returns a rootCapability object. It returns the root capability.
91
- *
92
- * @param {string} identifier The did-btcr2 identifier to derive the root capability from
93
- * @returns {RootCapability} The root capability object
94
- * @example Root capability for updating the DID document for
95
- * did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u
96
- * ```
97
- * {
98
- * "@context": "https://w3id.org/zcap/v1",
99
- * "id": "urn:zcap:root:did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u",
100
- * "controller": "did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u",
101
- * "invocationTarget": "did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u"
102
- * }
103
- * ```
104
- */
105
- static deriveRootCapability(identifier) {
106
- return {
107
- '@context': 'https://w3id.org/zcap/v1',
108
- id: `urn:zcap:root:${encodeURIComponent(identifier)}`,
109
- controller: identifier,
110
- invocationTarget: identifier,
111
- };
112
- }
113
- /**
114
- * Implements {@link https://dcdpr.github.io/did-btcr2/#dereference-root-capability-identifier | 9.4.2 Dereference Root Capability Identifier}.
115
- *
116
- * This algorithm takes in capabilityId, a root capability identifier, and dereferences it to rootCapability, the root
117
- * capability object.
118
- *
119
- * @param {string} capabilityId The root capability identifier to dereference.
120
- * @returns {RootCapability} The root capability object.
121
- * @example a didUpdatePayload with an invoked ZCAP-LD capability containing a patch defining how the DID document
122
- * for did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u SHOULD be mutated.
123
- * ```
124
- * {
125
- * "@context": [
126
- * "https://w3id.org/zcap/v1",
127
- * "https://w3id.org/security/data-integrity/v2",
128
- * "https://w3id.org/json-ld-patch/v1"
129
- * ],
130
- * "patch": [
131
- * {
132
- * "op": "add",
133
- * "path": "/service/4",
134
- * "value": {
135
- * "id": "#linked-domain",
136
- * "type": "LinkedDomains",
137
- * "serviceEndpoint": "https://contact-me.com"
138
- * }
139
- * }
140
- * ],
141
- * "proof": {
142
- * "type": "DataIntegrityProof",
143
- * "cryptosuite": "schnorr-secp256k1-jcs-2025",
144
- * "verificationMethod": "did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u#initialKey",
145
- * "invocationTarget": "did:btcr2:k1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u",
146
- * "capability": "urn:zcap:root:did%3Abtcr2%3Ak1q0rnnwf657vuu8trztlczvlmphjgc6q598h79cm6sp7c4fgqh0fkc0vzd9u",
147
- * "capabilityAction": "Write",
148
- * "proofPurpose": "assertionMethod",
149
- * "proofValue": "z381yXYmxU8NudZ4HXY56DfMN6zfD8syvWcRXzT9xD9uYoQToo8QsXD7ahM3gXTzuay5WJbqTswt2BKaGWYn2hHhVFKJLXaDz"
150
- * }
151
- * }
152
- */
153
- static dereferenceZcapId(capabilityId) {
154
- // 1. Set rootCapability to an empty object.
155
- const rootCapability = {};
156
- // 2. Set components to the result of capabilityId.split(":").
157
- const [urn, zcap, root, did] = capabilityId.split(':') ?? [];
158
- // 3. Validate components:
159
- // 1. Assert length of components is 4.
160
- if ([urn, zcap, root, did].length !== 4) {
161
- throw new DidError(DidErrorCode.InvalidDid, `Invalid capabilityId: ${capabilityId}`);
162
- }
163
- // 2. components[0] == urn.
164
- if (!urn || urn !== 'urn') {
165
- throw new DidError(DidErrorCode.InvalidDid, `Invalid capabilityId: ${capabilityId}`);
166
- }
167
- // 3. components[1] == zcap.
168
- if (!zcap || zcap !== 'zcap') {
169
- throw new DidError(DidErrorCode.InvalidDid, `Invalid capabilityId: ${capabilityId}`);
170
- }
171
- // 4. components[2] == root.
172
- if (!root || root !== 'root') {
173
- throw new DidError(DidErrorCode.InvalidDid, `Invalid capabilityId: ${capabilityId}`);
174
- }
175
- // 4. Set uriEncodedId to components[3].
176
- const uriEncodedId = did;
177
- // 5. Set Identifier the result of decodeURIComponent(uriEncodedId).
178
- const Identifier = decodeURIComponent(uriEncodedId);
179
- // 6. Set rootCapability.id to capabilityId.
180
- rootCapability.id = capabilityId;
181
- // 7. Set rootCapability.controller to Identifier.
182
- rootCapability.controller = Identifier;
183
- // 8. Set rootCapability.invocationTarget to Identifier.
184
- rootCapability.invocationTarget = Identifier;
185
- // 9. Return rootCapability.
186
- return rootCapability;
187
- }
188
- /**
189
- * Implements CAS Lookup Step from {@link https://dcdpr.github.io/did-btcr2/operations/resolve.html#process-beacon-signals | 7.2.e Process Beacon Signals }.
190
- * @param {HashBytes} hashBytes The hash bytes to look up in the CAS system.
191
- * @returns {Promise<string | undefined>} The content fetched from the CAS system, or undefined if not found.
192
- */
193
- static async fetchFromCas(hashBytes) {
194
- // Construct CID from hash bytes
195
- const cid = CID.create(1, 1, createDigest(1, hashBytes));
196
- // Connect to IPFS/Helia node
197
- const helia = await createHelia();
198
- const node = strings(helia);
199
- // Return the IPFS get result
200
- return await node.get(cid, {});
201
- }
202
- }
203
- //# sourceMappingURL=appendix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appendix.js","sourceRoot":"","sources":["../../../src/utils/appendix.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAEL,QAAQ,EACR,YAAY,EAGZ,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGpE;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IACnB;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAc;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,uBAAuB,CAAC,GAAY;QAChD,8CAA8C;QAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAElE,oFAAoF;QACpF,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzE,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAErD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAAC,GAAY;QACrC,8CAA8C;QAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAClE,yEAAyE;QACzE,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,iBAAiB,IAAI,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9E,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,sBAAsB,CAAC,WAAwB;QAC3D,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACnF,MAAM,mBAAmB,GAA4B,EAAE,CAAC;QACxD,wCAAwC;QACxC,mBAAmB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5G,gFAAgF;QAChF,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;YAChE,mBAAmB,CAAC,IAAI,CACtB,GAAI,WAAW,CAAC,YAAiC,CAA+B;gBAC9E,EAAE,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,EAAE,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,mBAA8C,CAAC;IACxD,CAAC;IAGD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,oBAAoB,CAAC,UAAkB;QAC5C,OAAO;YACL,UAAU,EAAS,0BAA0B;YAC7C,EAAE,EAAiB,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE;YACpE,UAAU,EAAS,UAAU;YAC7B,gBAAgB,EAAG,UAAU;SAC9B,CAAC;IACJ,CAAC;IAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACI,MAAM,CAAC,iBAAiB,CAAC,YAAoB;QAClD,4CAA4C;QAC5C,MAAM,cAAc,GAAG,EAAoB,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAE7D,0BAA0B;QAC1B,0CAA0C;QAC1C,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,wCAAwC;QACxC,MAAM,YAAY,GAAG,GAAG,CAAC;QAEzB,oEAAoE;QACpE,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAEpD,4CAA4C;QAC5C,cAAc,CAAC,EAAE,GAAG,YAAY,CAAC;QAEjC,kDAAkD;QAClD,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC;QAEvC,wDAAwD;QACxD,cAAc,CAAC,gBAAgB,GAAG,UAAU,CAAC;QAE7C,4BAA4B;QAC5B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAoB;QAC5C,gCAAgC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAEzD,6BAA6B;QAC7B,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5B,6BAA6B;QAC7B,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -1,60 +0,0 @@
1
- import { DidDocumentError, INVALID_DID_DOCUMENT } from '@did-btcr2/common';
2
- import { DidDocument } from './did-document.js';
3
- /**
4
- * A builder class for constructing DID Documents.
5
- * @type {DidDocumentBuilder}
6
- * @class DidDocumentBuilder
7
- */
8
- export class DidDocumentBuilder {
9
- document = {};
10
- constructor(initialDocument) {
11
- if (!initialDocument.id) {
12
- throw new DidDocumentError('Missing required "id" property', INVALID_DID_DOCUMENT, initialDocument);
13
- }
14
- this.document.id = initialDocument.id;
15
- this.document.verificationMethod = initialDocument.verificationMethod ?? [];
16
- if (initialDocument['@context']) {
17
- this.document['@context'] = initialDocument['@context'];
18
- }
19
- }
20
- withAuthentication(authentication) {
21
- if (authentication) {
22
- this.document.authentication = authentication;
23
- }
24
- return this;
25
- }
26
- withAssertionMethod(assertionMethod) {
27
- if (assertionMethod) {
28
- this.document.assertionMethod = assertionMethod;
29
- }
30
- return this;
31
- }
32
- withCapabilityInvocation(capabilityInvocation) {
33
- if (capabilityInvocation) {
34
- this.document.capabilityInvocation = capabilityInvocation;
35
- }
36
- return this;
37
- }
38
- withCapabilityDelegation(capabilityDelegation) {
39
- if (capabilityDelegation) {
40
- this.document.capabilityDelegation = capabilityDelegation;
41
- }
42
- return this;
43
- }
44
- withService(service) {
45
- if (service) {
46
- this.document.service = service;
47
- }
48
- return this;
49
- }
50
- build() {
51
- const didDocument = new DidDocument(this.document);
52
- for (const key of Object.keys(didDocument)) {
53
- if (didDocument[key] === undefined) {
54
- delete didDocument[key];
55
- }
56
- }
57
- return didDocument;
58
- }
59
- }
60
- //# sourceMappingURL=did-document-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"did-document-builder.js","sourceRoot":"","sources":["../../../src/utils/did-document-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AAEvE;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAAyB,EAAE,CAAC;IAE5C,YAAY,eAAqC;QAC/C,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,gBAAgB,CAAC,gCAAgC,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAE5E,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,cAAqD;QACtE,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,eAAsD;QACxE,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB,CAAC,oBAA2D;QAClF,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB,CAAC,oBAA2D;QAClF,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,OAA6B;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAuB,CAAC,CAAC;QAElE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,IAAI,WAAW,CAAC,GAAwB,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,OAAO,WAAW,CAAC,GAAwB,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}