@cheqd/sdk 2.0.2-develop.1 → 2.1.0-develop.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 (47) hide show
  1. package/.github/workflows/test.yml +2 -2
  2. package/CHANGELOG.md +7 -0
  3. package/README.md +1 -1
  4. package/build/index.d.ts +7 -3
  5. package/build/index.d.ts.map +1 -1
  6. package/build/index.js +19 -7
  7. package/build/index.js.map +1 -1
  8. package/build/modules/_.d.ts +7 -11
  9. package/build/modules/_.d.ts.map +1 -1
  10. package/build/modules/_.js +15 -17
  11. package/build/modules/_.js.map +1 -1
  12. package/build/modules/did.d.ts +39 -15
  13. package/build/modules/did.d.ts.map +1 -1
  14. package/build/modules/did.js +187 -54
  15. package/build/modules/did.js.map +1 -1
  16. package/build/modules/resource.d.ts +23 -7
  17. package/build/modules/resource.d.ts.map +1 -1
  18. package/build/modules/resource.js +61 -18
  19. package/build/modules/resource.js.map +1 -1
  20. package/build/querier.d.ts +11 -0
  21. package/build/querier.d.ts.map +1 -0
  22. package/build/querier.js +31 -0
  23. package/build/querier.js.map +1 -0
  24. package/build/signer.d.ts +3 -5
  25. package/build/signer.d.ts.map +1 -1
  26. package/build/signer.js +13 -13
  27. package/build/signer.js.map +1 -1
  28. package/build/types.d.ts +12 -0
  29. package/build/types.d.ts.map +1 -1
  30. package/build/types.js.map +1 -1
  31. package/build/utils.js +13 -15
  32. package/build/utils.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/index.ts +22 -10
  35. package/src/modules/_.ts +13 -21
  36. package/src/modules/did.ts +207 -51
  37. package/src/modules/resource.ts +74 -12
  38. package/src/querier.ts +33 -0
  39. package/src/signer.ts +3 -6
  40. package/src/types.ts +17 -1
  41. package/src/utils.ts +1 -1
  42. package/tests/index.test.ts +43 -3
  43. package/tests/modules/did.test.ts +483 -50
  44. package/tests/modules/resource.test.ts +576 -30
  45. package/tests/signer.test.ts +2 -2
  46. package/tests/testutils.test.ts +8 -2
  47. package/tsconfig.json +1 -1
@@ -6,7 +6,10 @@ import { createDefaultCheqdRegistry } from "../../src/registry"
6
6
  import { CheqdSigningStargateClient } from "../../src/signer"
7
7
  import { DIDDocument, ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from "../../src/types"
8
8
  import { createDidPayload, createDidVerificationMethod, createKeyPairBase64, createVerificationKeys } from "../../src/utils"
9
- import { localnet, faucet } from "../testutils.test"
9
+ import { localnet, faucet, containsAll } from "../testutils.test"
10
+ import { CheqdQuerier } from '../../src/querier';
11
+ import { setupDidExtension, DidExtension } from '../../src/modules/did';
12
+ import { v4 } from "uuid"
10
13
 
11
14
  const defaultAsyncTxTimeout = 30000
12
15
 
@@ -15,17 +18,19 @@ describe('DIDModule', () => {
15
18
  it('should instantiate standalone module', async () => {
16
19
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic)
17
20
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet)
18
- const didModule = new DIDModule(signer)
21
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
22
+ const didModule = new DIDModule(signer, querier)
19
23
  expect(didModule).toBeInstanceOf(DIDModule)
20
24
  })
21
25
  })
22
26
 
23
- describe('createDidTx', () => {
27
+ describe('createDidDocTx', () => {
24
28
  it('should create a new multibase DID - case: Ed25519VerificationKey2020', async () => {
25
29
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
26
30
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
27
31
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
28
- const didModule = new DIDModule(signer)
32
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
33
+ const didModule = new DIDModule(signer, querier)
29
34
  const keyPair = createKeyPairBase64()
30
35
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
31
36
  const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
@@ -40,7 +45,7 @@ describe('DIDModule', () => {
40
45
 
41
46
  const feePayer = (await wallet.getAccounts())[0].address
42
47
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
43
- const didTx: DeliverTxResponse = await didModule.createDidTx(
48
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
44
49
  signInputs,
45
50
  didPayload,
46
51
  feePayer,
@@ -57,7 +62,8 @@ describe('DIDModule', () => {
57
62
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
58
63
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
59
64
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
60
- const didModule = new DIDModule(signer)
65
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
66
+ const didModule = new DIDModule(signer, querier)
61
67
  const keyPair = createKeyPairBase64()
62
68
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
63
69
  const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192018], [verificationKeys])
@@ -71,7 +77,7 @@ describe('DIDModule', () => {
71
77
  ]
72
78
  const feePayer = (await wallet.getAccounts())[0].address
73
79
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
74
- const didTx: DeliverTxResponse = await didModule.createDidTx(
80
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
75
81
  signInputs,
76
82
  didPayload,
77
83
  feePayer,
@@ -88,7 +94,8 @@ describe('DIDModule', () => {
88
94
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
89
95
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
90
96
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
91
- const didModule = new DIDModule(signer)
97
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
98
+ const didModule = new DIDModule(signer, querier)
92
99
  const keyPair = createKeyPairBase64()
93
100
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
94
101
  const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
@@ -102,7 +109,7 @@ describe('DIDModule', () => {
102
109
  ]
103
110
  const feePayer = (await wallet.getAccounts())[0].address
104
111
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
105
- const didTx: DeliverTxResponse = await didModule.createDidTx(
112
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
106
113
  signInputs,
107
114
  didPayload,
108
115
  feePayer,
@@ -119,7 +126,8 @@ describe('DIDModule', () => {
119
126
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
120
127
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
121
128
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
122
- const didModule = new DIDModule(signer)
129
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
130
+ const didModule = new DIDModule(signer, querier)
123
131
  const keyPair = createKeyPairBase64()
124
132
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Uuid, 'key-1')
125
133
  const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
@@ -132,7 +140,7 @@ describe('DIDModule', () => {
132
140
  ]
133
141
  const feePayer = (await wallet.getAccounts())[0].address
134
142
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
135
- const didTx: DeliverTxResponse = await didModule.createDidTx(
143
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
136
144
  signInputs,
137
145
  didPayload,
138
146
  feePayer,
@@ -149,7 +157,8 @@ describe('DIDModule', () => {
149
157
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
150
158
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
151
159
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
152
- const didModule = new DIDModule(signer)
160
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
161
+ const didModule = new DIDModule(signer, querier)
153
162
  const keyPair = createKeyPairBase64()
154
163
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Uuid, 'key-1')
155
164
  const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192018], [verificationKeys])
@@ -162,7 +171,7 @@ describe('DIDModule', () => {
162
171
  ]
163
172
  const feePayer = (await wallet.getAccounts())[0].address
164
173
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
165
- const didTx: DeliverTxResponse = await didModule.createDidTx(
174
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
166
175
  signInputs,
167
176
  didPayload,
168
177
  feePayer,
@@ -179,7 +188,8 @@ describe('DIDModule', () => {
179
188
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
180
189
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
181
190
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
182
- const didModule = new DIDModule(signer)
191
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
192
+ const didModule = new DIDModule(signer, querier)
183
193
  const keyPair = createKeyPairBase64()
184
194
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Uuid, 'key-1')
185
195
  const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
@@ -192,7 +202,7 @@ describe('DIDModule', () => {
192
202
  ]
193
203
  const feePayer = (await wallet.getAccounts())[0].address
194
204
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
195
- const didTx: DeliverTxResponse = await didModule.createDidTx(
205
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
196
206
  signInputs,
197
207
  didPayload,
198
208
  feePayer,
@@ -206,12 +216,13 @@ describe('DIDModule', () => {
206
216
  }, defaultAsyncTxTimeout)
207
217
  })
208
218
 
209
- describe('updateDidTx', () => {
219
+ describe('updateDidDocTx', () => {
210
220
  it('should update a DID - case: Ed25519VerificationKey2020', async () => {
211
221
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
212
222
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
213
223
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
214
- const didModule = new DIDModule(signer)
224
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
225
+ const didModule = new DIDModule(signer, querier)
215
226
 
216
227
  const keyPair = createKeyPairBase64()
217
228
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -225,7 +236,7 @@ describe('DIDModule', () => {
225
236
  ]
226
237
  const feePayer = (await wallet.getAccounts())[0].address
227
238
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
228
- const didTx: DeliverTxResponse = await didModule.createDidTx(
239
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
229
240
  signInputs,
230
241
  didPayload,
231
242
  feePayer,
@@ -245,11 +256,10 @@ describe('DIDModule', () => {
245
256
  verificationMethod: didPayload.verificationMethod,
246
257
  authentication: didPayload.authentication,
247
258
  assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
248
- versionId: didTx.transactionHash
249
259
  } as DIDDocument
250
260
 
251
261
  const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
252
- const updateDidTx: DeliverTxResponse = await didModule.updateDidTx(
262
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
253
263
  signInputs,
254
264
  updateDidPayload,
255
265
  feePayer,
@@ -257,16 +267,17 @@ describe('DIDModule', () => {
257
267
  )
258
268
 
259
269
  console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
260
- console.warn(`DID Tx: ${JSON.stringify(updateDidTx)}`)
270
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
261
271
 
262
- expect(updateDidTx.code).toBe(0)
272
+ expect(updateDidDocTx.code).toBe(0)
263
273
  }, defaultAsyncTxTimeout)
264
274
 
265
275
  it('should update a DID - case: Ed25519VerificationKey2018', async () => {
266
276
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
267
277
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
268
278
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
269
- const didModule = new DIDModule(signer)
279
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
280
+ const didModule = new DIDModule(signer, querier)
270
281
 
271
282
  const keyPair = createKeyPairBase64()
272
283
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -280,7 +291,7 @@ describe('DIDModule', () => {
280
291
  ]
281
292
  const feePayer = (await wallet.getAccounts())[0].address
282
293
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
283
- const didTx: DeliverTxResponse = await didModule.createDidTx(
294
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
284
295
  signInputs,
285
296
  didPayload,
286
297
  feePayer,
@@ -300,12 +311,11 @@ describe('DIDModule', () => {
300
311
  verificationMethod: didPayload.verificationMethod,
301
312
  authentication: didPayload.authentication,
302
313
  assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
303
- versionId: didTx.transactionHash
304
314
  } as DIDDocument
305
315
 
306
316
  const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
307
317
 
308
- const updateDidTx: DeliverTxResponse = await didModule.updateDidTx(
318
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
309
319
  signInputs,
310
320
  updateDidPayload,
311
321
  feePayer,
@@ -313,16 +323,17 @@ describe('DIDModule', () => {
313
323
  )
314
324
 
315
325
  console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
316
- console.warn(`DID Tx: ${JSON.stringify(updateDidTx)}`)
326
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
317
327
 
318
- expect(updateDidTx.code).toBe(0)
328
+ expect(updateDidDocTx.code).toBe(0)
319
329
  }, defaultAsyncTxTimeout)
320
330
 
321
331
  it('should update a DID - case: JsonWebKey2020', async () => {
322
332
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
323
333
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
324
334
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
325
- const didModule = new DIDModule(signer)
335
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
336
+ const didModule = new DIDModule(signer, querier)
326
337
 
327
338
  const keyPair = createKeyPairBase64()
328
339
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -336,7 +347,7 @@ describe('DIDModule', () => {
336
347
  ]
337
348
  const feePayer = (await wallet.getAccounts())[0].address
338
349
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
339
- const didTx: DeliverTxResponse = await didModule.createDidTx(
350
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
340
351
  signInputs,
341
352
  didPayload,
342
353
  feePayer,
@@ -356,12 +367,11 @@ describe('DIDModule', () => {
356
367
  verificationMethod: didPayload.verificationMethod,
357
368
  authentication: didPayload.authentication,
358
369
  assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
359
- versionId: didTx.transactionHash
360
370
  } as DIDDocument
361
371
 
362
372
  const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
363
373
 
364
- const updateDidTx: DeliverTxResponse = await didModule.updateDidTx(
374
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
365
375
  signInputs,
366
376
  updateDidPayload,
367
377
  feePayer,
@@ -369,18 +379,19 @@ describe('DIDModule', () => {
369
379
  )
370
380
 
371
381
  console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
372
- console.warn(`DID Tx: ${JSON.stringify(updateDidTx)}`)
382
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
373
383
 
374
- expect(updateDidTx.code).toBe(0)
384
+ expect(updateDidDocTx.code).toBe(0)
375
385
  }, defaultAsyncTxTimeout)
376
386
  })
377
387
 
378
- describe('deactivateDidTx', () => {
388
+ describe('deactivateDidDocTx', () => {
379
389
  it('should deactivate a DID - case: Ed25519VerificationKey2020', async () => {
380
390
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
381
391
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
382
392
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
383
- const didModule = new DIDModule(signer)
393
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
394
+ const didModule = new DIDModule(signer, querier)
384
395
 
385
396
  const keyPair = createKeyPairBase64()
386
397
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -394,7 +405,7 @@ describe('DIDModule', () => {
394
405
  ]
395
406
  const feePayer = (await wallet.getAccounts())[0].address
396
407
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
397
- const didTx: DeliverTxResponse = await didModule.createDidTx(
408
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
398
409
  signInputs,
399
410
  didPayload,
400
411
  feePayer,
@@ -414,7 +425,7 @@ describe('DIDModule', () => {
414
425
 
415
426
  const feeDeactivate = await DIDModule.generateDeactivateDidDocFees(feePayer)
416
427
 
417
- const deactivateDidTx: DeliverTxResponse = await didModule.deactivateDidTx(
428
+ const deactivateDidDocTx: DeliverTxResponse = await didModule.deactivateDidDocTx(
418
429
  signInputs,
419
430
  deactivateDidPayload,
420
431
  feePayer,
@@ -422,16 +433,17 @@ describe('DIDModule', () => {
422
433
  )
423
434
 
424
435
  console.warn(`Using payload: ${JSON.stringify(deactivateDidPayload)}`)
425
- console.warn(`DID Tx: ${JSON.stringify(deactivateDidTx)}`)
436
+ console.warn(`DID Tx: ${JSON.stringify(deactivateDidDocTx)}`)
426
437
 
427
- expect(deactivateDidTx.code).toBe(0)
438
+ expect(deactivateDidDocTx.code).toBe(0)
428
439
  }, defaultAsyncTxTimeout)
429
440
 
430
441
  it('should deactivate a DID - case: Ed25519VerificationKey2018', async () => {
431
442
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
432
443
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
433
444
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
434
- const didModule = new DIDModule(signer)
445
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
446
+ const didModule = new DIDModule(signer, querier)
435
447
 
436
448
  const keyPair = createKeyPairBase64()
437
449
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -445,7 +457,7 @@ describe('DIDModule', () => {
445
457
  ]
446
458
  const feePayer = (await wallet.getAccounts())[0].address
447
459
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
448
- const didTx: DeliverTxResponse = await didModule.createDidTx(
460
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
449
461
  signInputs,
450
462
  didPayload,
451
463
  feePayer,
@@ -465,7 +477,7 @@ describe('DIDModule', () => {
465
477
 
466
478
  const feeDeactivate = await DIDModule.generateDeactivateDidDocFees(feePayer)
467
479
 
468
- const deactivateDidTx: DeliverTxResponse = await didModule.deactivateDidTx(
480
+ const deactivateDidDocTx: DeliverTxResponse = await didModule.deactivateDidDocTx(
469
481
  signInputs,
470
482
  deactivateDidPayload,
471
483
  feePayer,
@@ -473,16 +485,17 @@ describe('DIDModule', () => {
473
485
  )
474
486
 
475
487
  console.warn(`Using payload: ${JSON.stringify(deactivateDidPayload)}`)
476
- console.warn(`DID Tx: ${JSON.stringify(deactivateDidTx)}`)
488
+ console.warn(`DID Tx: ${JSON.stringify(deactivateDidDocTx)}`)
477
489
 
478
- expect(deactivateDidTx.code).toBe(0)
490
+ expect(deactivateDidDocTx.code).toBe(0)
479
491
  }, defaultAsyncTxTimeout)
480
492
 
481
493
  it('should deactivate a DID - case: JsonWebKey2020', async () => {
482
494
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
483
495
  const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
484
496
  const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
485
- const didModule = new DIDModule(signer)
497
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
498
+ const didModule = new DIDModule(signer, querier)
486
499
 
487
500
  const keyPair = createKeyPairBase64()
488
501
  const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
@@ -496,7 +509,7 @@ describe('DIDModule', () => {
496
509
  ]
497
510
  const feePayer = (await wallet.getAccounts())[0].address
498
511
  const fee = await DIDModule.generateCreateDidDocFees(feePayer)
499
- const didTx: DeliverTxResponse = await didModule.createDidTx(
512
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
500
513
  signInputs,
501
514
  didPayload,
502
515
  feePayer,
@@ -516,7 +529,7 @@ describe('DIDModule', () => {
516
529
 
517
530
  const feeDeactivate = await DIDModule.generateDeactivateDidDocFees(feePayer)
518
531
 
519
- const deactivateDidTx: DeliverTxResponse = await didModule.deactivateDidTx(
532
+ const deactivateDidDocTx: DeliverTxResponse = await didModule.deactivateDidDocTx(
520
533
  signInputs,
521
534
  deactivateDidPayload,
522
535
  feePayer,
@@ -524,9 +537,429 @@ describe('DIDModule', () => {
524
537
  )
525
538
 
526
539
  console.warn(`Using payload: ${JSON.stringify(deactivateDidPayload)}`)
527
- console.warn(`DID Tx: ${JSON.stringify(deactivateDidTx)}`)
540
+ console.warn(`DID Tx: ${JSON.stringify(deactivateDidDocTx)}`)
528
541
 
529
- expect(deactivateDidTx.code).toBe(0)
542
+ expect(deactivateDidDocTx.code).toBe(0)
543
+ }, defaultAsyncTxTimeout)
544
+ })
545
+
546
+ describe('queryDidDoc', () => {
547
+ it('should query a DID document - case: Ed25519VerificationKey2020', async () => {
548
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
549
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
550
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
551
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
552
+ const didModule = new DIDModule(signer, querier)
553
+
554
+ const keyPair = createKeyPairBase64()
555
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
556
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
557
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
558
+ const signInputs: ISignInputs[] = [
559
+ {
560
+ verificationMethodId: didPayload.verificationMethod![0].id,
561
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
562
+ }
563
+ ]
564
+ const feePayer = (await wallet.getAccounts())[0].address
565
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
566
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
567
+ signInputs,
568
+ didPayload,
569
+ feePayer,
570
+ fee
571
+ )
572
+
573
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
574
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
575
+
576
+ expect(didTx.code).toBe(0)
577
+
578
+ const didDoc = await didModule.queryDidDoc(didPayload.id)
579
+
580
+ expect(didDoc.didDocument!.id).toEqual(didPayload.id)
581
+ expect(didDoc.didDocument!.controller).toEqual(didPayload.controller)
582
+ expect(didDoc.didDocument!.verificationMethod).toEqual(didPayload.verificationMethod)
583
+
584
+ // we keep 1-1 relationship of omitempty fields in proto and spec compliant json
585
+ // while converting from proto to spec compliant json, we remove omitempty fields
586
+ // as in a resolved did document
587
+ expect(didDoc.didDocument?.authentication).toEqual(didPayload?.authentication)
588
+ expect(didDoc.didDocument?.assertionMethod).toEqual(didPayload?.assertionMethod)
589
+ expect(didDoc.didDocument?.capabilityInvocation).toEqual(didPayload?.capabilityInvocation)
590
+ expect(didDoc.didDocument?.capabilityDelegation).toEqual(didPayload?.capabilityDelegation)
591
+ expect(didDoc.didDocument?.keyAgreement).toEqual(didPayload?.keyAgreement)
592
+ expect(didDoc.didDocument?.service).toEqual(didPayload?.service)
593
+ expect(didDoc.didDocument?.alsoKnownAs).toEqual(didPayload?.alsoKnownAs)
594
+ }, defaultAsyncTxTimeout)
595
+
596
+ it('should query a DID document - case: Ed25519VerificationKey2018', async () => {
597
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
598
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
599
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
600
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
601
+ const didModule = new DIDModule(signer, querier)
602
+
603
+ const keyPair = createKeyPairBase64()
604
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
605
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192018], [verificationKeys])
606
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
607
+ const signInputs: ISignInputs[] = [
608
+ {
609
+ verificationMethodId: didPayload.verificationMethod![0].id,
610
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
611
+ }
612
+ ]
613
+ const feePayer = (await wallet.getAccounts())[0].address
614
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
615
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
616
+ signInputs,
617
+ didPayload,
618
+ feePayer,
619
+ fee
620
+ )
621
+
622
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
623
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
624
+
625
+ expect(didTx.code).toBe(0)
626
+
627
+ const didDoc = await didModule.queryDidDoc(didPayload.id)
628
+
629
+ expect(didDoc.didDocument!.id).toEqual(didPayload.id)
630
+ expect(didDoc.didDocument!.controller).toEqual(didPayload.controller)
631
+ expect(didDoc.didDocument!.verificationMethod).toEqual(didPayload.verificationMethod)
632
+
633
+ // we keep 1-1 relationship of omitempty fields in proto and spec compliant json
634
+ // while converting from proto to spec compliant json, we remove omitempty fields
635
+ // as in a resolved did document
636
+ expect(didDoc.didDocument?.authentication).toEqual(didPayload?.authentication)
637
+ expect(didDoc.didDocument?.assertionMethod).toEqual(didPayload?.assertionMethod)
638
+ expect(didDoc.didDocument?.capabilityInvocation).toEqual(didPayload?.capabilityInvocation)
639
+ expect(didDoc.didDocument?.capabilityDelegation).toEqual(didPayload?.capabilityDelegation)
640
+ expect(didDoc.didDocument?.keyAgreement).toEqual(didPayload?.keyAgreement)
641
+ expect(didDoc.didDocument?.service).toEqual(didPayload?.service)
642
+ expect(didDoc.didDocument?.alsoKnownAs).toEqual(didPayload?.alsoKnownAs)
643
+ }, defaultAsyncTxTimeout)
644
+
645
+ it('should query a DID document - case: JsonWebKey2020', async () => {
646
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
647
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
648
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
649
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
650
+ const didModule = new DIDModule(signer, querier)
651
+
652
+ const keyPair = createKeyPairBase64()
653
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
654
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
655
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
656
+ const signInputs: ISignInputs[] = [
657
+ {
658
+ verificationMethodId: didPayload.verificationMethod![0].id,
659
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
660
+ }
661
+ ]
662
+ const feePayer = (await wallet.getAccounts())[0].address
663
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
664
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
665
+ signInputs,
666
+ didPayload,
667
+ feePayer,
668
+ fee
669
+ )
670
+
671
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
672
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
673
+
674
+ expect(didTx.code).toBe(0)
675
+
676
+ const didDoc = await didModule.queryDidDoc(didPayload.id)
677
+
678
+ expect(didDoc.didDocument!.id).toEqual(didPayload.id)
679
+ expect(didDoc.didDocument!.controller).toEqual(didPayload.controller)
680
+ expect(didDoc.didDocument!.verificationMethod).toEqual(didPayload.verificationMethod)
681
+
682
+ // we keep 1-1 relationship of omitempty fields in proto and spec compliant json
683
+ // while converting from proto to spec compliant json, we remove omitempty fields
684
+ // as in a resolved did document
685
+ expect(didDoc.didDocument?.authentication).toEqual(didPayload?.authentication)
686
+ expect(didDoc.didDocument?.assertionMethod).toEqual(didPayload?.assertionMethod)
687
+ expect(didDoc.didDocument?.capabilityInvocation).toEqual(didPayload?.capabilityInvocation)
688
+ expect(didDoc.didDocument?.capabilityDelegation).toEqual(didPayload?.capabilityDelegation)
689
+ expect(didDoc.didDocument?.keyAgreement).toEqual(didPayload?.keyAgreement)
690
+ expect(didDoc.didDocument?.service).toEqual(didPayload?.service)
691
+ expect(didDoc.didDocument?.alsoKnownAs).toEqual(didPayload?.alsoKnownAs)
692
+ }, defaultAsyncTxTimeout)
693
+ })
694
+
695
+ describe('queryDidDocVersion', () => {
696
+ it('should query a DID document version - case: Ed25519VerificationKey2020', async () => {
697
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
698
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
699
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
700
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
701
+ const didModule = new DIDModule(signer, querier)
702
+
703
+ const keyPair = createKeyPairBase64()
704
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
705
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
706
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
707
+ const signInputs: ISignInputs[] = [
708
+ {
709
+ verificationMethodId: didPayload.verificationMethod![0].id,
710
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
711
+ }
712
+ ]
713
+ const feePayer = (await wallet.getAccounts())[0].address
714
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
715
+ const versionId = v4()
716
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
717
+ signInputs,
718
+ didPayload,
719
+ feePayer,
720
+ fee,
721
+ undefined,
722
+ versionId
723
+ )
724
+
725
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
726
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
727
+
728
+ expect(didTx.code).toBe(0)
729
+
730
+ const didDocVersion = await didModule.queryDidDocVersion(didPayload.id, versionId)
731
+
732
+ expect(didDocVersion.didDocument!.id).toEqual(didPayload.id)
733
+ expect(didDocVersion.didDocument!.controller).toEqual(didPayload.controller)
734
+ expect(didDocVersion.didDocument!.verificationMethod).toEqual(didPayload.verificationMethod)
735
+
736
+ // we keep 1-1 relationship of omitempty fields in proto and spec compliant json
737
+ // while converting from proto to spec compliant json, we remove omitempty fields
738
+ // as in a resolved did document
739
+ expect(didDocVersion.didDocument?.authentication).toEqual(didPayload?.authentication)
740
+ expect(didDocVersion.didDocument?.assertionMethod).toEqual(didPayload?.assertionMethod)
741
+ expect(didDocVersion.didDocument?.capabilityInvocation).toEqual(didPayload?.capabilityInvocation)
742
+ expect(didDocVersion.didDocument?.capabilityDelegation).toEqual(didPayload?.capabilityDelegation)
743
+ expect(didDocVersion.didDocument?.keyAgreement).toEqual(didPayload?.keyAgreement)
744
+ expect(didDocVersion.didDocument?.service).toEqual(didPayload?.service)
745
+ expect(didDocVersion.didDocument?.alsoKnownAs).toEqual(didPayload?.alsoKnownAs)
746
+
747
+ expect(didDocVersion.didDocumentMetadata.versionId).toEqual(versionId)
748
+ }, defaultAsyncTxTimeout)
749
+ })
750
+
751
+ describe('queryAllDidDocVersionsMetadata', () => {
752
+ it('should query all DID document versions metadata - case: Ed25519VerificationKey2020', async () => {
753
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
754
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
755
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
756
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
757
+ const didModule = new DIDModule(signer, querier)
758
+
759
+ const keyPair = createKeyPairBase64()
760
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
761
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
762
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
763
+ const signInputs: ISignInputs[] = [
764
+ {
765
+ verificationMethodId: didPayload.verificationMethod![0].id,
766
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
767
+ }
768
+ ]
769
+ const feePayer = (await wallet.getAccounts())[0].address
770
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
771
+ const versionId = v4()
772
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
773
+ signInputs,
774
+ didPayload,
775
+ feePayer,
776
+ fee,
777
+ undefined,
778
+ versionId
779
+ )
780
+
781
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
782
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
783
+
784
+ expect(didTx.code).toBe(0)
785
+
786
+ // update the did document
787
+ const updateVersionId = v4()
788
+ const updateDidPayload = {
789
+ '@context': didPayload?.['@context'],
790
+ id: didPayload.id,
791
+ controller: didPayload.controller,
792
+ verificationMethod: didPayload.verificationMethod,
793
+ authentication: didPayload.authentication,
794
+ assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
795
+ } as DIDDocument
796
+
797
+ const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
798
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
799
+ signInputs,
800
+ updateDidPayload,
801
+ feePayer,
802
+ feeUpdate,
803
+ undefined,
804
+ updateVersionId
805
+ )
806
+
807
+ console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
808
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
809
+
810
+ expect(updateDidDocTx.code).toBe(0)
811
+
812
+ const didDocVersionsMetadata = await didModule.queryAllDidDocVersionsMetadata(didPayload.id)
813
+
814
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata).toHaveLength(2)
815
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0].versionId, didDocVersionsMetadata.didDocumentVersionsMetadata[1].versionId], [versionId, updateVersionId])).toBe(true)
816
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].created).toBeDefined()
817
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].created).toBeDefined()
818
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0]?.updated, didDocVersionsMetadata.didDocumentVersionsMetadata[1]?.updated], [undefined])).toBe(true)
819
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].deactivated).toBe(false)
820
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].deactivated).toBe(false)
821
+ }, defaultAsyncTxTimeout)
822
+
823
+ it('should query all DID document versions metadata - case: JsonWebKey2020', async () => {
824
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
825
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
826
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
827
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
828
+ const didModule = new DIDModule(signer, querier)
829
+
830
+ const keyPair = createKeyPairBase64()
831
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
832
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
833
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
834
+ const signInputs: ISignInputs[] = [
835
+ {
836
+ verificationMethodId: didPayload.verificationMethod![0].id,
837
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
838
+ }
839
+ ]
840
+ const feePayer = (await wallet.getAccounts())[0].address
841
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
842
+ const versionId = v4()
843
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
844
+ signInputs,
845
+ didPayload,
846
+ feePayer,
847
+ fee,
848
+ undefined,
849
+ versionId
850
+ )
851
+
852
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
853
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
854
+
855
+ expect(didTx.code).toBe(0)
856
+
857
+ // update the did document
858
+ const updateVersionId = v4()
859
+ const updateDidPayload = {
860
+ '@context': didPayload?.['@context'],
861
+ id: didPayload.id,
862
+ controller: didPayload.controller,
863
+ verificationMethod: didPayload.verificationMethod,
864
+ authentication: didPayload.authentication,
865
+ assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
866
+ } as DIDDocument
867
+
868
+ const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
869
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
870
+ signInputs,
871
+ updateDidPayload,
872
+ feePayer,
873
+ feeUpdate,
874
+ undefined,
875
+ updateVersionId
876
+ )
877
+
878
+ console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
879
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
880
+
881
+ expect(updateDidDocTx.code).toBe(0)
882
+
883
+ const didDocVersionsMetadata = await didModule.queryAllDidDocVersionsMetadata(didPayload.id)
884
+
885
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata).toHaveLength(2)
886
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0].versionId, didDocVersionsMetadata.didDocumentVersionsMetadata[1].versionId], [versionId, updateVersionId])).toBe(true)
887
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].created).toBeDefined()
888
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].created).toBeDefined()
889
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0]?.updated, didDocVersionsMetadata.didDocumentVersionsMetadata[1]?.updated], [undefined])).toBe(true)
890
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].deactivated).toBe(false)
891
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].deactivated).toBe(false)
892
+ }, defaultAsyncTxTimeout)
893
+
894
+ it('should query all DID document versions metadata - case: Ed25519VerificationKey2018', async () => {
895
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
896
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
897
+ const signer = await CheqdSigningStargateClient.connectWithSigner(localnet.rpcUrl, wallet, { registry })
898
+ const querier = await CheqdQuerier.connectWithExtension(localnet.rpcUrl, setupDidExtension) as CheqdQuerier & DidExtension
899
+ const didModule = new DIDModule(signer, querier)
900
+
901
+ const keyPair = createKeyPairBase64()
902
+ const verificationKeys = createVerificationKeys(keyPair.publicKey, MethodSpecificIdAlgo.Base58, 'key-1')
903
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
904
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
905
+ const signInputs: ISignInputs[] = [
906
+ {
907
+ verificationMethodId: didPayload.verificationMethod![0].id,
908
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
909
+ }
910
+ ]
911
+ const feePayer = (await wallet.getAccounts())[0].address
912
+ const fee = await DIDModule.generateCreateDidDocFees(feePayer)
913
+ const versionId = v4()
914
+ const didTx: DeliverTxResponse = await didModule.createDidDocTx(
915
+ signInputs,
916
+ didPayload,
917
+ feePayer,
918
+ fee,
919
+ undefined,
920
+ versionId
921
+ )
922
+
923
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
924
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
925
+
926
+ expect(didTx.code).toBe(0)
927
+
928
+ // update the did document
929
+ const updateVersionId = v4()
930
+ const updateDidPayload = {
931
+ '@context': didPayload?.['@context'],
932
+ id: didPayload.id,
933
+ controller: didPayload.controller,
934
+ verificationMethod: didPayload.verificationMethod,
935
+ authentication: didPayload.authentication,
936
+ assertionMethod: [didPayload.verificationMethod![0].id], // <-- This is the only difference
937
+ } as DIDDocument
938
+
939
+ const feeUpdate = await DIDModule.generateUpdateDidDocFees(feePayer)
940
+ const updateDidDocTx: DeliverTxResponse = await didModule.updateDidDocTx(
941
+ signInputs,
942
+ updateDidPayload,
943
+ feePayer,
944
+ feeUpdate,
945
+ undefined,
946
+ updateVersionId
947
+ )
948
+
949
+ console.warn(`Using payload: ${JSON.stringify(updateDidPayload)}`)
950
+ console.warn(`DID Tx: ${JSON.stringify(updateDidDocTx)}`)
951
+
952
+ expect(updateDidDocTx.code).toBe(0)
953
+
954
+ const didDocVersionsMetadata = await didModule.queryAllDidDocVersionsMetadata(didPayload.id)
955
+
956
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata).toHaveLength(2)
957
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0].versionId, didDocVersionsMetadata.didDocumentVersionsMetadata[1].versionId], [versionId, updateVersionId])).toBe(true)
958
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].created).toBeDefined()
959
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].created).toBeDefined()
960
+ expect(containsAll([didDocVersionsMetadata.didDocumentVersionsMetadata[0]?.updated, didDocVersionsMetadata.didDocumentVersionsMetadata[1]?.updated], [undefined])).toBe(true)
961
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[1].deactivated).toBe(false)
962
+ expect(didDocVersionsMetadata.didDocumentVersionsMetadata[0].deactivated).toBe(false)
530
963
  }, defaultAsyncTxTimeout)
531
964
  })
532
965
  })