@cheqd/sdk 2.1.0-develop.1 → 2.2.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 (127) hide show
  1. package/README.md +33 -6
  2. package/build/{index.d.ts → cjs/index.d.ts} +8 -3
  3. package/build/cjs/index.d.ts.map +1 -0
  4. package/build/cjs/index.js +144 -0
  5. package/build/cjs/index.js.map +1 -0
  6. package/build/{modules → cjs/modules}/_.d.ts +1 -1
  7. package/build/cjs/modules/_.d.ts.map +1 -0
  8. package/build/{modules → cjs/modules}/_.js +3 -0
  9. package/build/cjs/modules/_.js.map +1 -0
  10. package/build/{modules → cjs/modules}/did.d.ts +4 -2
  11. package/build/cjs/modules/did.d.ts.map +1 -0
  12. package/build/{modules → cjs/modules}/did.js +42 -25
  13. package/build/cjs/modules/did.js.map +1 -0
  14. package/build/{modules → cjs/modules}/resource.d.ts +2 -2
  15. package/build/cjs/modules/resource.d.ts.map +1 -0
  16. package/build/{modules → cjs/modules}/resource.js +13 -5
  17. package/build/cjs/modules/resource.js.map +1 -0
  18. package/build/cjs/querier.d.ts.map +1 -0
  19. package/build/cjs/querier.js.map +1 -0
  20. package/build/cjs/registry.d.ts.map +1 -0
  21. package/build/cjs/registry.js.map +1 -0
  22. package/build/cjs/signer.d.ts.map +1 -0
  23. package/build/cjs/signer.js.map +1 -0
  24. package/build/{types.d.ts → cjs/types.d.ts} +1 -1
  25. package/build/cjs/types.d.ts.map +1 -0
  26. package/build/cjs/types.js.map +1 -0
  27. package/build/cjs/utils.d.ts.map +1 -0
  28. package/build/{utils.js → cjs/utils.js} +2 -5
  29. package/build/cjs/utils.js.map +1 -0
  30. package/build/types/index.d.ts +45 -0
  31. package/build/types/index.d.ts.map +1 -0
  32. package/build/types/modules/_.d.ts +20 -0
  33. package/build/types/modules/_.d.ts.map +1 -0
  34. package/build/types/modules/did.d.ts +109 -0
  35. package/build/types/modules/did.d.ts.map +1 -0
  36. package/build/types/modules/resource.d.ts +62 -0
  37. package/build/types/modules/resource.d.ts.map +1 -0
  38. package/build/types/querier.d.ts +11 -0
  39. package/build/types/querier.d.ts.map +1 -0
  40. package/build/types/registry.d.ts +4 -0
  41. package/build/types/registry.d.ts.map +1 -0
  42. package/build/types/signer.d.ts +36 -0
  43. package/build/types/signer.d.ts.map +1 -0
  44. package/build/types/types.d.ts +80 -0
  45. package/build/types/types.d.ts.map +1 -0
  46. package/build/types/utils.d.ts +18 -0
  47. package/build/types/utils.d.ts.map +1 -0
  48. package/package.json +48 -25
  49. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -74
  50. package/.github/ISSUE_TEMPLATE/config.yml +0 -14
  51. package/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -27
  52. package/.github/dependabot.yml +0 -42
  53. package/.github/linters/.commitlint.rules.js +0 -37
  54. package/.github/linters/.eslintrc.json +0 -18
  55. package/.github/linters/.markdown-lint.yml +0 -139
  56. package/.github/linters/mlc_config.json +0 -13
  57. package/.github/workflows/build.yml +0 -30
  58. package/.github/workflows/cleanup-actions.yml +0 -45
  59. package/.github/workflows/cleanup-cache-automatic.yml +0 -24
  60. package/.github/workflows/cleanup-cache-manual.yml +0 -21
  61. package/.github/workflows/codeql.yml +0 -40
  62. package/.github/workflows/dispatch.yml +0 -30
  63. package/.github/workflows/lint.yml +0 -51
  64. package/.github/workflows/pull-request.yml +0 -33
  65. package/.github/workflows/release.yml +0 -42
  66. package/.github/workflows/test.yml +0 -66
  67. package/.releaserc.json +0 -56
  68. package/CHANGELOG.md +0 -256
  69. package/CODE_OF_CONDUCT.md +0 -81
  70. package/NOTICE.md +0 -10
  71. package/SECURITY.md +0 -12
  72. package/build/index.d.ts.map +0 -1
  73. package/build/index.js +0 -97
  74. package/build/index.js.map +0 -1
  75. package/build/modules/_.d.ts.map +0 -1
  76. package/build/modules/_.js.map +0 -1
  77. package/build/modules/did.d.ts.map +0 -1
  78. package/build/modules/did.js.map +0 -1
  79. package/build/modules/resource.d.ts.map +0 -1
  80. package/build/modules/resource.js.map +0 -1
  81. package/build/querier.d.ts.map +0 -1
  82. package/build/querier.js.map +0 -1
  83. package/build/registry.d.ts.map +0 -1
  84. package/build/registry.js.map +0 -1
  85. package/build/signer.d.ts.map +0 -1
  86. package/build/signer.js.map +0 -1
  87. package/build/types.d.ts.map +0 -1
  88. package/build/types.js.map +0 -1
  89. package/build/utils.d.ts.map +0 -1
  90. package/build/utils.js.map +0 -1
  91. package/docker/Dockerfile +0 -55
  92. package/docker/entrypoint.sh +0 -58
  93. package/docker/localnet/build-latest.env +0 -7
  94. package/docker/localnet/container-env/observer-0.env +0 -13
  95. package/docker/localnet/container-env/seed-0.env +0 -17
  96. package/docker/localnet/container-env/validator-0.env +0 -13
  97. package/docker/localnet/container-env/validator-1.env +0 -13
  98. package/docker/localnet/container-env/validator-2.env +0 -13
  99. package/docker/localnet/container-env/validator-3.env +0 -13
  100. package/docker/localnet/docker-compose.yml +0 -281
  101. package/docker/localnet/gen-network-config.sh +0 -259
  102. package/docker/localnet/import-keys.sh +0 -31
  103. package/jest.config.js +0 -6
  104. package/src/index.ts +0 -128
  105. package/src/modules/_.ts +0 -55
  106. package/src/modules/did.ts +0 -564
  107. package/src/modules/resource.ts +0 -213
  108. package/src/querier.ts +0 -33
  109. package/src/registry.ts +0 -15
  110. package/src/signer.ts +0 -258
  111. package/src/types.ts +0 -101
  112. package/src/utils.ts +0 -243
  113. package/tests/index.test.ts +0 -135
  114. package/tests/modules/did.test.ts +0 -965
  115. package/tests/modules/resource.test.ts +0 -785
  116. package/tests/signer.test.ts +0 -179
  117. package/tests/testutils.test.ts +0 -24
  118. package/tests/utils.test.ts +0 -66
  119. package/tsconfig.json +0 -80
  120. /package/build/{querier.d.ts → cjs/querier.d.ts} +0 -0
  121. /package/build/{querier.js → cjs/querier.js} +0 -0
  122. /package/build/{registry.d.ts → cjs/registry.d.ts} +0 -0
  123. /package/build/{registry.js → cjs/registry.js} +0 -0
  124. /package/build/{signer.d.ts → cjs/signer.d.ts} +0 -0
  125. /package/build/{signer.js → cjs/signer.js} +0 -0
  126. /package/build/{types.js → cjs/types.js} +0 -0
  127. /package/build/{utils.d.ts → cjs/utils.d.ts} +0 -0
@@ -1,564 +0,0 @@
1
- import { createPagination, createProtobufRpcClient, DeliverTxResponse, QueryClient } from "@cosmjs/stargate"
2
- import { AbstractCheqdSDKModule, MinimalImportableCheqdSDKModule } from './_';
3
- import { CheqdSigningStargateClient } from "../signer"
4
- import { DIDDocument, DidStdFee, IContext, ISignInputs, QueryExtensionSetup, SpecValidationResult, VerificationMethods, DIDDocumentWithMetadata } from '../types';
5
- import {
6
- MsgCreateDidDoc,
7
- MsgCreateDidDocPayload,
8
- MsgCreateDidDocResponse,
9
- MsgDeactivateDidDoc,
10
- MsgDeactivateDidDocPayload,
11
- MsgDeactivateDidDocResponse,
12
- MsgUpdateDidDoc,
13
- MsgUpdateDidDocPayload,
14
- MsgUpdateDidDocResponse,
15
- protobufPackage,
16
- QueryClientImpl,
17
- Service,
18
- SignInfo,
19
- VerificationMethod,
20
- QueryAllDidDocVersionsMetadataResponse,
21
- DidDocWithMetadata,
22
- DidDoc,
23
- Metadata
24
- } from "@cheqd/ts-proto/cheqd/did/v2"
25
- import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"
26
- import { v4 } from "uuid"
27
- import { assert } from "@cosmjs/utils";
28
- import { PageRequest } from "@cheqd/ts-proto/cosmos/base/query/v1beta1/pagination";
29
- import { CheqdQuerier } from "../querier";
30
- import { DIDDocumentMetadata } from "did-resolver";
31
-
32
- export const defaultDidExtensionKey = "did" as const
33
-
34
- export const contexts = {
35
- W3CDIDv1: "https://www.w3.org/ns/did/v1",
36
- W3CSuiteEd255192020: "https://w3id.org/security/suites/ed25519-2020/v1",
37
- W3CSuiteEd255192018: "https://w3id.org/security/suites/ed25519-2018/v1",
38
- W3CSuiteJws2020: "https://w3id.org/security/suites/jws-2020/v1",
39
- } as const
40
-
41
- export const protobufLiterals = {
42
- MsgCreateDidDoc: "MsgCreateDidDoc",
43
- MsgCreateDidDocResponse: "MsgCreateDidDocResponse",
44
- MsgUpdateDidDoc: "MsgUpdateDidDoc",
45
- MsgUpdateDidDocResponse: "MsgUpdateDidDocResponse",
46
- MsgDeactivateDidDoc: "MsgDeactivateDidDoc",
47
- MsgDeactivateDidDocResponse: "MsgDeactivateDidDocResponse",
48
- } as const
49
- export const typeUrlMsgCreateDidDoc = `/${protobufPackage}.${protobufLiterals.MsgCreateDidDoc}`
50
- export const typeUrlMsgCreateDidDocResponse = `/${protobufPackage}.${protobufLiterals.MsgCreateDidDocResponse}`
51
- export const typeUrlMsgUpdateDidDoc = `/${protobufPackage}.${protobufLiterals.MsgUpdateDidDoc}`
52
- export const typeUrlMsgUpdateDidDocResponse = `/${protobufPackage}.${protobufLiterals.MsgUpdateDidDocResponse}`
53
- export const typeUrlMsgDeactivateDidDoc = `/${protobufPackage}.${protobufLiterals.MsgDeactivateDidDoc}`
54
- export const typeUrlMsgDeactivateDidDocResponse = `/${protobufPackage}.${protobufLiterals.MsgDeactivateDidDocResponse}`
55
-
56
- export interface MsgCreateDidDocEncodeObject extends EncodeObject {
57
- readonly typeUrl: typeof typeUrlMsgCreateDidDoc,
58
- readonly value: Partial<MsgCreateDidDoc>
59
- }
60
-
61
- export function isMsgCreateDidDocEncodeObject(obj: EncodeObject): obj is MsgCreateDidDocEncodeObject {
62
- return obj.typeUrl === typeUrlMsgCreateDidDoc
63
- }
64
-
65
- export interface MsgCreateDidDocResponseEncodeObject extends EncodeObject {
66
- readonly typeUrl: typeof typeUrlMsgCreateDidDocResponse,
67
- readonly value: Partial<MsgCreateDidDocResponse>
68
- }
69
-
70
- export function MsgCreateDidDocResponseEncodeObject(obj: EncodeObject): obj is MsgCreateDidDocResponseEncodeObject {
71
- return obj.typeUrl === typeUrlMsgCreateDidDocResponse
72
- }
73
-
74
- export interface MsgUpdateDidDocEncodeObject extends EncodeObject {
75
- readonly typeUrl: typeof typeUrlMsgUpdateDidDoc,
76
- readonly value: Partial<MsgUpdateDidDoc>
77
- }
78
-
79
- export function MsgUpdateDidDocEncodeObject(obj: EncodeObject): obj is MsgUpdateDidDocEncodeObject {
80
- return obj.typeUrl === typeUrlMsgUpdateDidDoc
81
- }
82
-
83
- export interface MsgUpdateDidDocResponseEncodeObject extends EncodeObject {
84
- readonly typeUrl: typeof typeUrlMsgUpdateDidDocResponse,
85
- readonly value: Partial<MsgUpdateDidDocResponse>
86
- }
87
-
88
- export function MsgUpdateDidDocResponseEncodeObject(obj: EncodeObject): obj is MsgUpdateDidDocResponseEncodeObject {
89
- return obj.typeUrl === typeUrlMsgUpdateDidDocResponse
90
- }
91
-
92
- export interface MsgDeactivateDidDocEncodeObject extends EncodeObject {
93
- readonly typeUrl: typeof typeUrlMsgDeactivateDidDoc,
94
- readonly value: Partial<MsgDeactivateDidDoc>
95
- }
96
-
97
- export function MsgDeactivateDidDocEncodeObject(obj: EncodeObject): obj is MsgUpdateDidDocEncodeObject {
98
- return obj.typeUrl === typeUrlMsgDeactivateDidDoc
99
- }
100
-
101
- export interface MsgDeactivateDidDocResponseEncodeObject extends EncodeObject {
102
- readonly typeUrl: typeof typeUrlMsgDeactivateDidDocResponse,
103
- readonly value: Partial<MsgDeactivateDidDocResponse>
104
- }
105
-
106
- export function MsgDeactiveDidDocResponseEncodeObject(obj: EncodeObject): obj is MsgDeactivateDidDocResponseEncodeObject {
107
- return obj.typeUrl === typeUrlMsgUpdateDidDocResponse
108
- }
109
-
110
-
111
- export type MinimalImportableDIDModule = MinimalImportableCheqdSDKModule<DIDModule>
112
-
113
- export type DidExtension = {
114
- readonly [defaultDidExtensionKey]: {
115
- readonly didDoc: (id: string) => Promise<DidDocWithMetadata>
116
- readonly didDocVersion: (id: string, versionId: string) => Promise<DidDocWithMetadata>
117
- readonly allDidDocVersionsMetadata: (id: string, paginationKey?: Uint8Array) => Promise<QueryAllDidDocVersionsMetadataResponse>
118
- }
119
- }
120
-
121
- export const setupDidExtension = (base: QueryClient): DidExtension => {
122
- const rpc = createProtobufRpcClient(base)
123
-
124
- const queryService = new QueryClientImpl(rpc)
125
-
126
- return {
127
- [defaultDidExtensionKey]: {
128
- didDoc: async (id: string) => {
129
- const { value } = await queryService.DidDoc({ id })
130
- assert(value)
131
- return value
132
- },
133
- didDocVersion: async (id: string, versionId: string) => {
134
- const { value } = await queryService.DidDocVersion({ id, version: versionId })
135
- assert(value)
136
- return value
137
- },
138
- allDidDocVersionsMetadata: async (id: string, paginationKey?: Uint8Array) => {
139
- const response = await queryService.AllDidDocVersionsMetadata({ id, pagination: createPagination(paginationKey) as PageRequest | undefined })
140
- return response
141
- }
142
- }
143
- } as DidExtension
144
- }
145
-
146
- export class DIDModule extends AbstractCheqdSDKModule {
147
- static readonly registryTypes: Iterable<[string, GeneratedType]> = [
148
- [typeUrlMsgCreateDidDoc, MsgCreateDidDoc],
149
- [typeUrlMsgCreateDidDocResponse, MsgCreateDidDocResponse],
150
- [typeUrlMsgUpdateDidDoc, MsgUpdateDidDoc],
151
- [typeUrlMsgUpdateDidDocResponse, MsgUpdateDidDocResponse],
152
- [typeUrlMsgDeactivateDidDoc, MsgDeactivateDidDoc],
153
- [typeUrlMsgDeactivateDidDocResponse, MsgDeactivateDidDocResponse],
154
- ]
155
-
156
- static readonly baseMinimalDenom = 'ncheq' as const
157
-
158
- static readonly fees = {
159
- DefaultCreateDidDocFee: { amount: '50000000000', denom: DIDModule.baseMinimalDenom } as const,
160
- DefaultUpdateDidDocFee: { amount: '25000000000', denom: DIDModule.baseMinimalDenom } as const,
161
- DefaultDeactivateDidDocFee: { amount: '10000000000', denom: DIDModule.baseMinimalDenom } as const,
162
- } as const
163
-
164
- static readonly querierExtensionSetup: QueryExtensionSetup<DidExtension> = setupDidExtension
165
-
166
- readonly querier: CheqdQuerier & DidExtension
167
-
168
- constructor(signer: CheqdSigningStargateClient, querier: CheqdQuerier & DidExtension) {
169
- super(signer, querier)
170
- this.querier = querier
171
- this.methods = {
172
- createDidDocTx: this.createDidDocTx.bind(this),
173
- updateDidDocTx: this.updateDidDocTx.bind(this),
174
- deactivateDidDocTx: this.deactivateDidDocTx.bind(this),
175
- queryDidDoc: this.querier.did.didDoc.bind(this),
176
- queryDidDocVersion: this.querier.did.didDocVersion.bind(this),
177
- queryAllDidDocVersionsMetadata: this.querier.did.allDidDocVersionsMetadata.bind(this),
178
- }
179
- }
180
-
181
- public getRegistryTypes(): Iterable<[string, GeneratedType]> {
182
- return DIDModule.registryTypes
183
- }
184
-
185
- public getQuerierExtensionSetup(): QueryExtensionSetup<DidExtension> {
186
- return DIDModule.querierExtensionSetup
187
- }
188
-
189
- async createDidDocTx(signInputs: ISignInputs[] | SignInfo[], didPayload: DIDDocument, address: string, fee?: DidStdFee | 'auto' | number, memo?: string, versionId?: string, context?: IContext): Promise<DeliverTxResponse> {
190
- if (!this._signer) {
191
- this._signer = context!.sdk!.signer
192
- }
193
-
194
- if (!versionId || versionId === '') {
195
- versionId = v4()
196
- }
197
-
198
- const { valid, error, protobufVerificationMethod, protobufService } = await DIDModule.validateSpecCompliantPayload(didPayload)
199
-
200
- if (!valid) {
201
- throw new Error(`DID payload is not spec compliant: ${error}`)
202
- }
203
-
204
- const payload = MsgCreateDidDocPayload.fromPartial({
205
- context: <string[]>didPayload?.['@context'],
206
- id: didPayload.id,
207
- controller: <string[]>didPayload.controller,
208
- verificationMethod: protobufVerificationMethod,
209
- authentication: <string[]>didPayload.authentication,
210
- assertionMethod: <string[]>didPayload.assertionMethod,
211
- capabilityInvocation: <string[]>didPayload.capabilityInvocation,
212
- capabilityDelegation: <string[]>didPayload.capabilityDelegation,
213
- keyAgreement: <string[]>didPayload.keyAgreement,
214
- service: protobufService,
215
- alsoKnownAs: <string[]>didPayload.alsoKnownAs,
216
- versionId: versionId
217
- })
218
-
219
- let signatures: SignInfo[]
220
- if(ISignInputs.isSignInput(signInputs)) {
221
- signatures = await this._signer.signcreateDidDocTx(signInputs, payload)
222
- } else {
223
- signatures = signInputs
224
- }
225
-
226
- const value: MsgCreateDidDoc = {
227
- payload,
228
- signatures
229
- }
230
-
231
- const createDidMsg: MsgCreateDidDocEncodeObject = {
232
- typeUrl: typeUrlMsgCreateDidDoc,
233
- value
234
- }
235
-
236
- if (address === '') {
237
- address = (await context!.sdk!.options.wallet.getAccounts())[0].address
238
- }
239
-
240
- if (!fee) {
241
- fee = await DIDModule.generateCreateDidDocFees(address)
242
- }
243
-
244
- return this._signer.signAndBroadcast(
245
- address,
246
- [createDidMsg],
247
- fee!,
248
- memo
249
- )
250
- }
251
-
252
- async updateDidDocTx(signInputs: ISignInputs[] | SignInfo[], didPayload: DIDDocument, address: string, fee?: DidStdFee | 'auto' | number, memo?: string, versionId?: string, context?: IContext): Promise<DeliverTxResponse> {
253
- if (!this._signer) {
254
- this._signer = context!.sdk!.signer
255
- }
256
-
257
- if (!versionId || versionId === '') {
258
- versionId = v4()
259
- }
260
-
261
- const { valid, error, protobufVerificationMethod, protobufService } = await DIDModule.validateSpecCompliantPayload(didPayload)
262
-
263
- if (!valid) {
264
- throw new Error(`DID payload is not spec compliant: ${error}`)
265
- }
266
-
267
- const payload = MsgUpdateDidDocPayload.fromPartial({
268
- context: <string[]>didPayload?.['@context'],
269
- id: didPayload.id,
270
- controller: <string[]>didPayload.controller,
271
- verificationMethod: protobufVerificationMethod,
272
- authentication: <string[]>didPayload.authentication,
273
- assertionMethod: <string[]>didPayload.assertionMethod,
274
- capabilityInvocation: <string[]>didPayload.capabilityInvocation,
275
- capabilityDelegation: <string[]>didPayload.capabilityDelegation,
276
- keyAgreement: <string[]>didPayload.keyAgreement,
277
- service: protobufService,
278
- alsoKnownAs: <string[]>didPayload.alsoKnownAs,
279
- versionId: versionId
280
- })
281
- let signatures: SignInfo[]
282
- if(ISignInputs.isSignInput(signInputs)) {
283
- signatures = await this._signer.signupdateDidDocTx(signInputs, payload)
284
- } else {
285
- signatures = signInputs
286
- }
287
-
288
- const value: MsgUpdateDidDoc = {
289
- payload,
290
- signatures
291
- }
292
-
293
- const updateDidMsg: MsgUpdateDidDocEncodeObject = {
294
- typeUrl: typeUrlMsgUpdateDidDoc,
295
- value
296
- }
297
-
298
- if (address === '') {
299
- address = (await context!.sdk!.options.wallet.getAccounts())[0].address
300
- }
301
-
302
- if (!fee) {
303
- fee = await DIDModule.generateUpdateDidDocFees(address)
304
- }
305
-
306
- return this._signer.signAndBroadcast(
307
- address,
308
- [updateDidMsg],
309
- fee!,
310
- memo
311
- )
312
- }
313
-
314
- async deactivateDidDocTx(signInputs: ISignInputs[] | SignInfo[], didPayload: DIDDocument, address: string, fee?: DidStdFee | 'auto' | number, memo?: string, versionId?: string, context?: IContext): Promise<DeliverTxResponse> {
315
- if (!this._signer) {
316
- this._signer = context!.sdk!.signer
317
- }
318
-
319
- if (!versionId || versionId === '') {
320
- versionId = v4()
321
- }
322
-
323
- const { valid, error, protobufVerificationMethod } = await DIDModule.validateSpecCompliantPayload(didPayload)
324
-
325
- if (!valid) {
326
- throw new Error(`DID payload is not spec compliant: ${error}`)
327
- }
328
-
329
- const payload = MsgDeactivateDidDocPayload.fromPartial({
330
- id: didPayload.id,
331
- versionId: versionId
332
- })
333
-
334
- let signatures: SignInfo[]
335
- if(ISignInputs.isSignInput(signInputs)) {
336
- signatures = await this._signer.signdeactivateDidDocTx(signInputs, payload, protobufVerificationMethod!)
337
- } else {
338
- signatures = signInputs
339
- }
340
-
341
- const value: MsgDeactivateDidDoc = {
342
- payload,
343
- signatures
344
- }
345
-
346
- const deactivateDidMsg: MsgDeactivateDidDocEncodeObject = {
347
- typeUrl: typeUrlMsgDeactivateDidDoc,
348
- value
349
- }
350
-
351
- if (address === '') {
352
- address = (await context!.sdk!.options.wallet.getAccounts())[0].address
353
- }
354
-
355
- if (!fee) {
356
- fee = await DIDModule.generateDeactivateDidDocFees(address)
357
- }
358
-
359
- return this._signer.signAndBroadcast(
360
- address,
361
- [deactivateDidMsg],
362
- fee!,
363
- memo
364
- )
365
- }
366
-
367
- async queryDidDoc(id: string, context?: IContext): Promise<DIDDocumentWithMetadata> {
368
- const { didDoc, metadata } = await this.querier[defaultDidExtensionKey].didDoc(id)
369
- return {
370
- didDocument: await DIDModule.toSpecCompliantPayload(didDoc!),
371
- didDocumentMetadata: await DIDModule.toSpecCompliantMetadata(metadata!)
372
- } as DIDDocumentWithMetadata
373
- }
374
-
375
- async queryDidDocVersion(id: string, versionId: string, context?: IContext): Promise<DIDDocumentWithMetadata> {
376
- const { didDoc, metadata } = await this.querier[defaultDidExtensionKey].didDocVersion(id, versionId)
377
- return {
378
- didDocument: await DIDModule.toSpecCompliantPayload(didDoc!),
379
- didDocumentMetadata: await DIDModule.toSpecCompliantMetadata(metadata!)
380
- } as DIDDocumentWithMetadata
381
- }
382
-
383
- async queryAllDidDocVersionsMetadata(id: string, context?: IContext): Promise<{ didDocumentVersionsMetadata: DIDDocumentMetadata[], pagination: QueryAllDidDocVersionsMetadataResponse['pagination']}> {
384
- const { versions, pagination } = await this.querier[defaultDidExtensionKey].allDidDocVersionsMetadata(id)
385
- return {
386
- didDocumentVersionsMetadata: await Promise.all(versions.map(async (m) => await DIDModule.toSpecCompliantMetadata(m))),
387
- pagination
388
- }
389
- }
390
-
391
- static async validateSpecCompliantPayload(didDocument: DIDDocument): Promise<SpecValidationResult> {
392
- // id is required, validated on both compile and runtime
393
- if (!didDocument?.id) return { valid: false, error: 'id is required' }
394
-
395
- // verificationMethod is required
396
- if (!didDocument?.verificationMethod) return { valid: false, error: 'verificationMethod is required' }
397
-
398
- // verificationMethod must be an array
399
- if (!Array.isArray(didDocument?.verificationMethod)) return { valid: false, error: 'verificationMethod must be an array' }
400
-
401
- // verificationMethod types must be supported
402
- const protoVerificationMethod = didDocument.verificationMethod.map((vm) => {
403
- switch (vm?.type) {
404
- case VerificationMethods.Ed255192020:
405
- if (!vm?.publicKeyMultibase) throw new Error('publicKeyMultibase is required')
406
-
407
- return VerificationMethod.fromPartial({
408
- id: vm.id,
409
- controller: vm.controller,
410
- verificationMethodType: VerificationMethods.Ed255192020,
411
- verificationMaterial: vm.publicKeyMultibase,
412
- })
413
- case VerificationMethods.JWK:
414
- if (!vm?.publicKeyJwk) throw new Error('publicKeyJwk is required')
415
-
416
- return VerificationMethod.fromPartial({
417
- id: vm.id,
418
- controller: vm.controller,
419
- verificationMethodType: VerificationMethods.JWK,
420
- verificationMaterial: JSON.stringify(vm.publicKeyJwk),
421
- })
422
- case VerificationMethods.Ed255192018:
423
- if (!vm?.publicKeyBase58) throw new Error('publicKeyBase58 is required')
424
-
425
- return VerificationMethod.fromPartial({
426
- id: vm.id,
427
- controller: vm.controller,
428
- verificationMethodType: VerificationMethods.Ed255192018,
429
- verificationMaterial: vm.publicKeyBase58,
430
- })
431
- default:
432
- throw new Error('Unsupported verificationMethod type')
433
- }
434
- })
435
-
436
- const protoService = didDocument?.service?.map((s) => {
437
- return Service.fromPartial({
438
- id: s?.id,
439
- serviceType: s?.type,
440
- serviceEndpoint: <string[]>s?.serviceEndpoint,
441
- })
442
- })
443
-
444
- return { valid: true, protobufVerificationMethod: protoVerificationMethod, protobufService: protoService } as SpecValidationResult
445
- }
446
-
447
- static async toSpecCompliantPayload(protobufDidDocument: DidDoc): Promise<DIDDocument> {
448
- const verificationMethod = protobufDidDocument.verificationMethod.map((vm) => {
449
- switch (vm.verificationMethodType) {
450
- case VerificationMethods.Ed255192020:
451
- if (!protobufDidDocument.context.includes(contexts.W3CSuiteEd255192020))
452
- protobufDidDocument.context = [...protobufDidDocument.context, contexts.W3CSuiteEd255192020]
453
- return {
454
- id: vm.id,
455
- type: vm.verificationMethodType,
456
- controller: vm.controller,
457
- publicKeyMultibase: vm.verificationMaterial,
458
- }
459
- case VerificationMethods.JWK:
460
- if (!protobufDidDocument.context.includes(contexts.W3CSuiteJws2020))
461
- protobufDidDocument.context = [...protobufDidDocument.context, contexts.W3CSuiteJws2020]
462
- return {
463
- id: vm.id,
464
- type: vm.verificationMethodType,
465
- controller: vm.controller,
466
- publicKeyJwk: JSON.parse(vm.verificationMaterial),
467
- }
468
- case VerificationMethods.Ed255192018:
469
- if (!protobufDidDocument.context.includes(contexts.W3CSuiteEd255192018))
470
- protobufDidDocument.context = [...protobufDidDocument.context, contexts.W3CSuiteEd255192018]
471
- return {
472
- id: vm.id,
473
- type: vm.verificationMethodType,
474
- controller: vm.controller,
475
- publicKeyBase58: vm.verificationMaterial,
476
- }
477
- default:
478
- throw new Error('Unsupported verificationMethod type') // should never happen
479
- }
480
- })
481
-
482
- const service = protobufDidDocument.service.map((s) => {
483
- return {
484
- id: s.id,
485
- type: s.serviceType,
486
- serviceEndpoint: s.serviceEndpoint,
487
- }
488
- })
489
-
490
- const context = function () {
491
- if (protobufDidDocument.context.includes(contexts.W3CDIDv1))
492
- return protobufDidDocument.context
493
-
494
- return [contexts.W3CDIDv1, ...protobufDidDocument.context]
495
- }()
496
-
497
- const specCompliant = {
498
- '@context': context,
499
- id: protobufDidDocument.id,
500
- controller: protobufDidDocument.controller,
501
- verificationMethod: verificationMethod,
502
- authentication: protobufDidDocument.authentication,
503
- assertionMethod: protobufDidDocument.assertionMethod,
504
- capabilityInvocation: protobufDidDocument.capabilityInvocation,
505
- capabilityDelegation: protobufDidDocument.capabilityDelegation,
506
- keyAgreement: protobufDidDocument.keyAgreement,
507
- service: service,
508
- alsoKnownAs: protobufDidDocument.alsoKnownAs,
509
- } as DIDDocument
510
-
511
- if (!protobufDidDocument.authentication?.length) delete specCompliant.authentication
512
- if (!protobufDidDocument.assertionMethod?.length) delete specCompliant.assertionMethod
513
- if (!protobufDidDocument.capabilityInvocation?.length) delete specCompliant.capabilityInvocation
514
- if (!protobufDidDocument.capabilityDelegation?.length) delete specCompliant.capabilityDelegation
515
- if (!protobufDidDocument.keyAgreement?.length) delete specCompliant.keyAgreement
516
- if (!protobufDidDocument.service?.length) delete specCompliant.service
517
- if (!protobufDidDocument.alsoKnownAs?.length) delete specCompliant.alsoKnownAs
518
-
519
- return specCompliant
520
- }
521
-
522
- static async toSpecCompliantMetadata(protobufDidDocument: Metadata): Promise<DIDDocumentMetadata> {
523
- return {
524
- created: protobufDidDocument.created?.toISOString(),
525
- updated: protobufDidDocument.updated?.toISOString(),
526
- deactivated: protobufDidDocument.deactivated,
527
- versionId: protobufDidDocument.versionId,
528
- nextVersionId: protobufDidDocument?.nextVersionId,
529
- }
530
- }
531
-
532
- static async generateCreateDidDocFees(feePayer: string, granter?: string): Promise<DidStdFee> {
533
- return {
534
- amount: [
535
- DIDModule.fees.DefaultCreateDidDocFee
536
- ],
537
- gas: '360000',
538
- payer: feePayer,
539
- granter: granter
540
- } as DidStdFee
541
- }
542
-
543
- static async generateUpdateDidDocFees(feePayer: string, granter?: string): Promise<DidStdFee> {
544
- return {
545
- amount: [
546
- DIDModule.fees.DefaultUpdateDidDocFee
547
- ],
548
- gas: '360000',
549
- payer: feePayer,
550
- granter: granter
551
- } as DidStdFee
552
- }
553
-
554
- static async generateDeactivateDidDocFees(feePayer: string, granter?: string): Promise<DidStdFee> {
555
- return {
556
- amount: [
557
- DIDModule.fees.DefaultDeactivateDidDocFee
558
- ],
559
- gas: '360000',
560
- payer: feePayer,
561
- granter: granter
562
- } as DidStdFee
563
- }
564
- }