@did-btcr2/method 0.19.0 → 0.20.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 (119) hide show
  1. package/dist/browser.js +715 -1445
  2. package/dist/browser.mjs +715 -1445
  3. package/dist/cjs/core/beacon/beacon.js +25 -0
  4. package/dist/cjs/core/beacon/beacon.js.map +1 -0
  5. package/dist/cjs/core/beacon/cas-beacon.js +20 -36
  6. package/dist/cjs/core/beacon/cas-beacon.js.map +1 -1
  7. package/dist/cjs/core/beacon/error.js +4 -4
  8. package/dist/cjs/core/beacon/error.js.map +1 -1
  9. package/dist/cjs/core/beacon/factory.js +5 -7
  10. package/dist/cjs/core/beacon/factory.js.map +1 -1
  11. package/dist/cjs/core/beacon/interfaces.js +1 -31
  12. package/dist/cjs/core/beacon/interfaces.js.map +1 -1
  13. package/dist/cjs/core/beacon/signal-discovery.js +183 -0
  14. package/dist/cjs/core/beacon/signal-discovery.js.map +1 -0
  15. package/dist/cjs/core/beacon/singleton.js +54 -81
  16. package/dist/cjs/core/beacon/singleton.js.map +1 -1
  17. package/dist/cjs/core/beacon/smt-beacon.js +22 -39
  18. package/dist/cjs/core/beacon/smt-beacon.js.map +1 -1
  19. package/dist/cjs/core/beacon/utils.js +4 -9
  20. package/dist/cjs/core/beacon/utils.js.map +1 -1
  21. package/dist/cjs/core/resolve.js +87 -277
  22. package/dist/cjs/core/resolve.js.map +1 -1
  23. package/dist/cjs/core/update.js +62 -153
  24. package/dist/cjs/core/update.js.map +1 -1
  25. package/dist/cjs/did-btcr2.js +80 -75
  26. package/dist/cjs/did-btcr2.js.map +1 -1
  27. package/dist/cjs/index.js +3 -1
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/cjs/utils/appendix.js +6 -15
  30. package/dist/cjs/utils/appendix.js.map +1 -1
  31. package/dist/cjs/utils/did-document-builder.js +5 -0
  32. package/dist/cjs/utils/did-document-builder.js.map +1 -1
  33. package/dist/cjs/utils/did-document.js +11 -14
  34. package/dist/cjs/utils/did-document.js.map +1 -1
  35. package/dist/esm/core/beacon/beacon.js +25 -0
  36. package/dist/esm/core/beacon/beacon.js.map +1 -0
  37. package/dist/esm/core/beacon/cas-beacon.js +20 -36
  38. package/dist/esm/core/beacon/cas-beacon.js.map +1 -1
  39. package/dist/esm/core/beacon/error.js +4 -4
  40. package/dist/esm/core/beacon/error.js.map +1 -1
  41. package/dist/esm/core/beacon/factory.js +5 -7
  42. package/dist/esm/core/beacon/factory.js.map +1 -1
  43. package/dist/esm/core/beacon/interfaces.js +1 -31
  44. package/dist/esm/core/beacon/interfaces.js.map +1 -1
  45. package/dist/esm/core/beacon/signal-discovery.js +183 -0
  46. package/dist/esm/core/beacon/signal-discovery.js.map +1 -0
  47. package/dist/esm/core/beacon/singleton.js +54 -81
  48. package/dist/esm/core/beacon/singleton.js.map +1 -1
  49. package/dist/esm/core/beacon/smt-beacon.js +22 -39
  50. package/dist/esm/core/beacon/smt-beacon.js.map +1 -1
  51. package/dist/esm/core/beacon/utils.js +4 -9
  52. package/dist/esm/core/beacon/utils.js.map +1 -1
  53. package/dist/esm/core/resolve.js +87 -277
  54. package/dist/esm/core/resolve.js.map +1 -1
  55. package/dist/esm/core/update.js +62 -153
  56. package/dist/esm/core/update.js.map +1 -1
  57. package/dist/esm/did-btcr2.js +80 -75
  58. package/dist/esm/did-btcr2.js.map +1 -1
  59. package/dist/esm/index.js +3 -1
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/utils/appendix.js +6 -15
  62. package/dist/esm/utils/appendix.js.map +1 -1
  63. package/dist/esm/utils/did-document-builder.js +5 -0
  64. package/dist/esm/utils/did-document-builder.js.map +1 -1
  65. package/dist/esm/utils/did-document.js +11 -14
  66. package/dist/esm/utils/did-document.js.map +1 -1
  67. package/dist/types/core/beacon/beacon.d.ts +44 -0
  68. package/dist/types/core/beacon/beacon.d.ts.map +1 -0
  69. package/dist/types/core/beacon/cas-beacon.d.ts +19 -30
  70. package/dist/types/core/beacon/cas-beacon.d.ts.map +1 -1
  71. package/dist/types/core/beacon/error.d.ts +2 -2
  72. package/dist/types/core/beacon/error.d.ts.map +1 -1
  73. package/dist/types/core/beacon/factory.d.ts +4 -6
  74. package/dist/types/core/beacon/factory.d.ts.map +1 -1
  75. package/dist/types/core/beacon/interfaces.d.ts +7 -46
  76. package/dist/types/core/beacon/interfaces.d.ts.map +1 -1
  77. package/dist/types/core/beacon/signal-discovery.d.ts +25 -0
  78. package/dist/types/core/beacon/signal-discovery.d.ts.map +1 -0
  79. package/dist/types/core/beacon/singleton.d.ts +16 -29
  80. package/dist/types/core/beacon/singleton.d.ts.map +1 -1
  81. package/dist/types/core/beacon/smt-beacon.d.ts +21 -33
  82. package/dist/types/core/beacon/smt-beacon.d.ts.map +1 -1
  83. package/dist/types/core/beacon/utils.d.ts.map +1 -1
  84. package/dist/types/core/interfaces.d.ts +1 -8
  85. package/dist/types/core/interfaces.d.ts.map +1 -1
  86. package/dist/types/core/resolve.d.ts +27 -43
  87. package/dist/types/core/resolve.d.ts.map +1 -1
  88. package/dist/types/core/types.d.ts +21 -8
  89. package/dist/types/core/types.d.ts.map +1 -1
  90. package/dist/types/core/update.d.ts +30 -73
  91. package/dist/types/core/update.d.ts.map +1 -1
  92. package/dist/types/did-btcr2.d.ts +37 -44
  93. package/dist/types/did-btcr2.d.ts.map +1 -1
  94. package/dist/types/index.d.ts +3 -1
  95. package/dist/types/index.d.ts.map +1 -1
  96. package/dist/types/utils/appendix.d.ts.map +1 -1
  97. package/dist/types/utils/did-document-builder.d.ts +5 -0
  98. package/dist/types/utils/did-document-builder.d.ts.map +1 -1
  99. package/dist/types/utils/did-document.d.ts +16 -14
  100. package/dist/types/utils/did-document.d.ts.map +1 -1
  101. package/package.json +4 -4
  102. package/src/core/beacon/beacon.ts +58 -0
  103. package/src/core/beacon/cas-beacon.ts +30 -44
  104. package/src/core/beacon/error.ts +5 -6
  105. package/src/core/beacon/factory.ts +7 -9
  106. package/src/core/beacon/interfaces.ts +7 -64
  107. package/src/core/beacon/signal-discovery.ts +237 -0
  108. package/src/core/beacon/singleton.ts +74 -94
  109. package/src/core/beacon/smt-beacon.ts +32 -49
  110. package/src/core/beacon/utils.ts +16 -13
  111. package/src/core/interfaces.ts +1 -9
  112. package/src/core/resolve.ts +116 -360
  113. package/src/core/types.ts +25 -8
  114. package/src/core/update.ts +90 -235
  115. package/src/did-btcr2.ts +131 -95
  116. package/src/index.ts +8 -1
  117. package/src/utils/appendix.ts +8 -22
  118. package/src/utils/did-document-builder.ts +5 -0
  119. package/src/utils/did-document.ts +41 -45
@@ -9,7 +9,7 @@ import {
9
9
  KeyBytes
10
10
  } from '@did-btcr2/common';
11
11
  import { CompressedSecp256k1PublicKey } from '@did-btcr2/keypair';
12
- import { DidService, DidDocument as IIDidDocument, DidVerificationMethod as IIDidVerificationMethod } from '@web5/dids';
12
+ import { DidDocument as W3CDidDocument, DidVerificationMethod as W3CDidVerificationMethod } from '@web5/dids';
13
13
  import { BeaconService } from '../core/beacon/interfaces.js';
14
14
  import { BeaconUtils } from '../core/beacon/utils.js';
15
15
  import { Identifier } from '../core/identifier.js';
@@ -36,7 +36,10 @@ export type VerificationRelationships = {
36
36
  capabilityDelegation?: Array<string | DidVerificationMethod>;
37
37
  }
38
38
 
39
- export interface IDidVerificationMethod extends IIDidVerificationMethod {
39
+ /** Loose type for unvalidated DID document-like input objects. */
40
+ export type DidDocumentLike = Partial<Btcr2DidDocument>;
41
+
42
+ export interface Btcr2VerificationMethod extends W3CDidVerificationMethod {
40
43
  id: string;
41
44
  type: string;
42
45
  controller: string;
@@ -50,14 +53,14 @@ export interface IDidVerificationMethod extends IIDidVerificationMethod {
50
53
  * @type {DidVerificationMethod}
51
54
  *
52
55
  */
53
- export class DidVerificationMethod implements IDidVerificationMethod {
56
+ export class DidVerificationMethod implements Btcr2VerificationMethod {
54
57
  id: string;
55
58
  type: string;
56
59
  controller: string;
57
60
  publicKeyMultibase: string;
58
61
  secretKeyMultibase?: string | undefined;
59
62
 
60
- constructor({ id, type, controller, publicKeyMultibase, secretKeyMultibase }: IDidVerificationMethod) {
63
+ constructor({ id, type, controller, publicKeyMultibase, secretKeyMultibase }: Btcr2VerificationMethod) {
61
64
  this.id = id;
62
65
  this.type = type;
63
66
  this.controller = controller;
@@ -72,9 +75,9 @@ export class DidVerificationMethod implements IDidVerificationMethod {
72
75
 
73
76
  /**
74
77
  * BTCR2 DID Document Interface
75
- * @interface IDidDocument
76
- * @type {IDidDocument}
77
- * @extends {IIDidDocument}
78
+ * @interface Btcr2DidDocument
79
+ * @type {Btcr2DidDocument}
80
+ * @extends {W3CDidDocument}
78
81
  * @property {string} id - The identifier of the DID Document.
79
82
  * @property {Array<string>} [controller] - The controller of the DID Document.
80
83
  * @property {Array<string | JSONObject>} ['@context'] - The context of the DID Document.
@@ -85,7 +88,7 @@ export class DidVerificationMethod implements IDidVerificationMethod {
85
88
  * @property {Array<string | DidVerificationMethod>} [capabilityDelegation] - The capability delegation methods of the DID Document.
86
89
  * @property {Array<BeaconService>} service - The services of the DID Document.
87
90
  */
88
- export interface IDidDocument extends IIDidDocument {
91
+ export interface Btcr2DidDocument extends W3CDidDocument {
89
92
  id: string;
90
93
  controller?: Array<string>;
91
94
  '@context'?: Array<string | JSONObject>;
@@ -101,7 +104,7 @@ export interface IDidDocument extends IIDidDocument {
101
104
  * BTCR2 DID Document extends the DidDocument class adding helper methods and properties
102
105
  * @class DidDocument
103
106
  * @type {DidDocument}
104
- * @implements {IDidDocument}
107
+ * @implements {Btcr2DidDocument}
105
108
  * @property {string} id - The identifier of the DID Document.
106
109
  * @property {Array<string>} [controller] - The controller of the DID Document.
107
110
  * @property {Array<string | JSONObject>} ['@context'] - The context of the DID Document.
@@ -112,7 +115,7 @@ export interface IDidDocument extends IIDidDocument {
112
115
  * @property {Array<string | DidVerificationMethod>} [capabilityDelegation] - The capability delegation methods of the DID Document.
113
116
  * @property {Array<BeaconService>} service - The services of the DID Document.
114
117
  */
115
- export class DidDocument implements IDidDocument {
118
+ export class DidDocument implements Btcr2DidDocument {
116
119
  id: string;
117
120
  controller?: Array<string>;
118
121
  '@context'?: Array<string | JSONObject> = BTCR2_DID_DOCUMENT_CONTEXT;
@@ -124,7 +127,7 @@ export class DidDocument implements IDidDocument {
124
127
  service: Array<BeaconService>;
125
128
  deactivated?: boolean;
126
129
 
127
- constructor(document: IDidDocument) {
130
+ constructor(document: Btcr2DidDocument) {
128
131
  // Set the ID and ID type
129
132
  const idType = document.id.includes('k')
130
133
  ? IdentifierTypes.KEY
@@ -218,7 +221,7 @@ export class DidDocument implements IDidDocument {
218
221
  })
219
222
  ],
220
223
  service
221
- } as IDidDocument;
224
+ } as Btcr2DidDocument;
222
225
  return new DidDocument(document);
223
226
  }
224
227
 
@@ -228,7 +231,7 @@ export class DidDocument implements IDidDocument {
228
231
  * @returns {DidDocument} A new DidDocument.
229
232
  */
230
233
  public static fromExternalIdentifier(data: ExternalData): DidDocument {
231
- return new DidDocument(data as IDidDocument);
234
+ return new DidDocument(data as Btcr2DidDocument);
232
235
  }
233
236
 
234
237
 
@@ -251,7 +254,7 @@ export class DidDocument implements IDidDocument {
251
254
  * @returns {boolean} True if the DID document is valid.
252
255
  * @throws {DidDocumentError} If any validation check fails.
253
256
  */
254
- public static isValid(didDocument: DidDocument): boolean {
257
+ public static isValid(didDocument: DidDocumentLike): boolean {
255
258
  if (!this.isValidContext(didDocument?.['@context'])) {
256
259
  throw new DidDocumentError('Invalid "@context"', INVALID_DID_DOCUMENT, didDocument);
257
260
  }
@@ -276,7 +279,7 @@ export class DidDocument implements IDidDocument {
276
279
  * @param {DidDocument['@context']} context The context to validate.
277
280
  * @returns {boolean} True if the context is valid.
278
281
  */
279
- private static isValidContext(context: DidDocument['@context']): boolean {
282
+ private static isValidContext(context: unknown): boolean {
280
283
  if(!context) return false;
281
284
  if(!Array.isArray(context)) return false;
282
285
  if(!context.every(ctx => typeof ctx === 'string' && BTCR2_DID_DOCUMENT_CONTEXT.includes(ctx))) return false;
@@ -289,7 +292,8 @@ export class DidDocument implements IDidDocument {
289
292
  * @param {string} id The id to validate.
290
293
  * @returns {boolean} True if the id is valid.
291
294
  */
292
- private static isValidId(id: string): boolean {
295
+ private static isValidId(id: unknown): boolean {
296
+ if (typeof id !== 'string') return false;
293
297
  try {
294
298
  Identifier.decode(id);
295
299
  return true;
@@ -316,7 +320,7 @@ export class DidDocument implements IDidDocument {
316
320
  * @param {DidVerificationMethod[]} verificationMethod The verification methods to validate.
317
321
  * @returns {boolean} True if the verification methods are valid.
318
322
  */
319
- private static isValidVerificationMethods(verificationMethod: IIDidVerificationMethod[]): boolean {
323
+ private static isValidVerificationMethods(verificationMethod: unknown): boolean {
320
324
  return Array.isArray(verificationMethod) && verificationMethod.every(Appendix.isDidVerificationMethod);
321
325
  }
322
326
 
@@ -326,7 +330,7 @@ export class DidDocument implements IDidDocument {
326
330
  * @param {DidService[]} service The services to validate.
327
331
  * @returns {boolean} True if the services are valid.
328
332
  */
329
- private static isValidServices(service: DidService[]): boolean {
333
+ private static isValidServices(service: unknown): boolean {
330
334
  return Array.isArray(service) && service.every(BeaconUtils.isBeaconService);
331
335
  }
332
336
 
@@ -336,33 +340,25 @@ export class DidDocument implements IDidDocument {
336
340
  * @param {DidDocument} didDocument The DID Document to validate.
337
341
  * @returns {boolean} True if the verification relationships are valid.
338
342
  */
339
- public static isValidVerificationRelationships(didDocument: DidDocument): boolean {
340
- // Define the available verification relationships
341
- const possibleVerificationRelationships: (keyof DidDocument)[] = [
343
+ public static isValidVerificationRelationships(didDocument: DidDocumentLike): boolean {
344
+ const possibleVerificationRelationships = [
342
345
  'authentication',
343
346
  'assertionMethod',
344
347
  'capabilityInvocation',
345
348
  'capabilityDelegation'
346
- ];
347
-
348
- // Get the DID Document keys
349
- const verificationRelationships = Object.keys(didDocument) as Array<keyof DidDocument>;
350
-
351
- // Filter the DID Document keys to only those that are in the available verification relationships
352
- const availableVerificationRelationships = possibleVerificationRelationships.filter(
353
- key => verificationRelationships.includes(key as keyof DidDocument)
354
- ) as (keyof DidDocument)[];
355
-
356
- // Check if all available verification relationships are valid
357
- return availableVerificationRelationships.every((key) =>
358
- // Check if the key exists in the DID Document
359
- didDocument[key] &&
360
- // Check if the key is an array
361
- Array.isArray(didDocument[key]) &&
362
- // Check that every value in the array is a string or DidVerificationMethod
363
- didDocument[key].every(
364
- entry => typeof entry === 'string' || Appendix.isDidVerificationMethod(entry)
365
- ));
349
+ ] as const;
350
+
351
+ const keys = Object.keys(didDocument);
352
+ const availableKeys = possibleVerificationRelationships.filter(key => keys.includes(key));
353
+
354
+ return availableKeys.every((key) => {
355
+ const value = didDocument[key];
356
+ return value &&
357
+ Array.isArray(value) &&
358
+ value.every(
359
+ (entry) => typeof entry === 'string' || Appendix.isDidVerificationMethod(entry)
360
+ );
361
+ });
366
362
  }
367
363
 
368
364
  /**
@@ -370,7 +366,7 @@ export class DidDocument implements IDidDocument {
370
366
  * @returns {DidDocument} Validated DID Document.
371
367
  * @throws {DidDocumentError} If the DID Document is invalid.
372
368
  */
373
- public static validate(didDocument: DidDocument | GenesisDocument): DidDocument {
369
+ public static validate(didDocument: any): DidDocument {
374
370
  // Validate the DID Document
375
371
  if (didDocument.id === ID_PLACEHOLDER_VALUE) {
376
372
  (didDocument as GenesisDocument).validateGenesis();
@@ -448,7 +444,7 @@ export class GenesisDocument extends DidDocument {
448
444
  */
449
445
  public toDidDocument(did: string): DidDocument {
450
446
  const stringThis = JSON.stringify(this).replaceAll(ID_PLACEHOLDER_VALUE, did);
451
- const parseThis = JSON.parse(stringThis) as IDidDocument;
447
+ const parseThis = JSON.parse(stringThis) as Btcr2DidDocument;
452
448
  return new DidDocument(parseThis);
453
449
  }
454
450
 
@@ -459,7 +455,7 @@ export class GenesisDocument extends DidDocument {
459
455
  * @returns {GenesisDocument} The GenesisDocument representation of the DidDocument.
460
456
  */
461
457
  public static fromDidDocument(didDocument: DidDocument): GenesisDocument {
462
- const intermediateDocument = JSONUtils.cloneReplace(didDocument, DID_REGEX, ID_PLACEHOLDER_VALUE) as IDidDocument;
458
+ const intermediateDocument = JSONUtils.cloneReplace(didDocument, DID_REGEX, ID_PLACEHOLDER_VALUE) as Btcr2DidDocument;
463
459
  return new GenesisDocument(intermediateDocument);
464
460
  }
465
461
 
@@ -518,6 +514,6 @@ export class GenesisDocument extends DidDocument {
518
514
  * @returns {DidDocument} The created DidDocument.
519
515
  */
520
516
  public static fromJSON(object: object | DidDocument): GenesisDocument {
521
- return new GenesisDocument(object as IDidDocument);
517
+ return new GenesisDocument(object as Btcr2DidDocument);
522
518
  }
523
519
  }