@sphereon/ssi-sdk.ebsi-support 0.26.1-unstable.101

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 (68) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +13 -0
  3. package/dist/agent/EbsiSupport.d.ts +12 -0
  4. package/dist/agent/EbsiSupport.d.ts.map +1 -0
  5. package/dist/agent/EbsiSupport.js +202 -0
  6. package/dist/agent/EbsiSupport.js.map +1 -0
  7. package/dist/did/EbsiDidProvider.d.ts +47 -0
  8. package/dist/did/EbsiDidProvider.d.ts.map +1 -0
  9. package/dist/did/EbsiDidProvider.js +172 -0
  10. package/dist/did/EbsiDidProvider.js.map +1 -0
  11. package/dist/did/EbsiDidResolver.d.ts +5 -0
  12. package/dist/did/EbsiDidResolver.d.ts.map +1 -0
  13. package/dist/did/EbsiDidResolver.js +10 -0
  14. package/dist/did/EbsiDidResolver.js.map +1 -0
  15. package/dist/did/functions.d.ts +66 -0
  16. package/dist/did/functions.d.ts.map +1 -0
  17. package/dist/did/functions.js +416 -0
  18. package/dist/did/functions.js.map +1 -0
  19. package/dist/did/index.d.ts +6 -0
  20. package/dist/did/index.d.ts.map +1 -0
  21. package/dist/did/index.js +6 -0
  22. package/dist/did/index.js.map +1 -0
  23. package/dist/did/services/EbsiRPCService.d.ts +13 -0
  24. package/dist/did/services/EbsiRPCService.d.ts.map +1 -0
  25. package/dist/did/services/EbsiRPCService.js +64 -0
  26. package/dist/did/services/EbsiRPCService.js.map +1 -0
  27. package/dist/did/services/EbsiRestService.d.ts +37 -0
  28. package/dist/did/services/EbsiRestService.d.ts.map +1 -0
  29. package/dist/did/services/EbsiRestService.js +90 -0
  30. package/dist/did/services/EbsiRestService.js.map +1 -0
  31. package/dist/did/types.d.ts +386 -0
  32. package/dist/did/types.d.ts.map +1 -0
  33. package/dist/did/types.js +47 -0
  34. package/dist/did/types.js.map +1 -0
  35. package/dist/functions/Attestation.d.ts +32 -0
  36. package/dist/functions/Attestation.d.ts.map +1 -0
  37. package/dist/functions/Attestation.js +182 -0
  38. package/dist/functions/Attestation.js.map +1 -0
  39. package/dist/functions/AttestationHeadlessCallbacks.d.ts +17 -0
  40. package/dist/functions/AttestationHeadlessCallbacks.d.ts.map +1 -0
  41. package/dist/functions/AttestationHeadlessCallbacks.js +194 -0
  42. package/dist/functions/AttestationHeadlessCallbacks.js.map +1 -0
  43. package/dist/functions/index.d.ts +7 -0
  44. package/dist/functions/index.d.ts.map +1 -0
  45. package/dist/functions/index.js +8 -0
  46. package/dist/functions/index.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +8 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types/IEbsiSupport.d.ts +211 -0
  52. package/dist/types/IEbsiSupport.d.ts.map +1 -0
  53. package/dist/types/IEbsiSupport.js +5 -0
  54. package/dist/types/IEbsiSupport.js.map +1 -0
  55. package/package.json +86 -0
  56. package/src/agent/EbsiSupport.ts +250 -0
  57. package/src/did/EbsiDidProvider.ts +269 -0
  58. package/src/did/EbsiDidResolver.ts +16 -0
  59. package/src/did/functions.ts +528 -0
  60. package/src/did/index.ts +5 -0
  61. package/src/did/services/EbsiRPCService.ts +68 -0
  62. package/src/did/services/EbsiRestService.ts +117 -0
  63. package/src/did/types.ts +449 -0
  64. package/src/functions/Attestation.ts +262 -0
  65. package/src/functions/AttestationHeadlessCallbacks.ts +242 -0
  66. package/src/functions/index.ts +15 -0
  67. package/src/index.ts +8 -0
  68. package/src/types/IEbsiSupport.ts +241 -0
@@ -0,0 +1,416 @@
1
+ import { randomBytes } from '@ethersproject/random';
2
+ import { CreateRequestObjectMode } from '@sphereon/oid4vci-common';
3
+ import { getControllerKey, getEthereumAddressFromKey, getKeys } from '@sphereon/ssi-sdk-ext.did-utils';
4
+ import { calculateJwkThumbprint, calculateJwkThumbprintForKey, JwkKeyUse, toJwk } from '@sphereon/ssi-sdk-ext.key-utils';
5
+ import { getBytes, SigningKey, Transaction } from 'ethers';
6
+ import { base58btc } from 'multiformats/bases/base58';
7
+ import * as u8a from 'uint8arrays';
8
+ import { getEbsiApiBaseUrl, wait } from '../functions';
9
+ import { logger } from '../index';
10
+ import { ebsiWaitTillDocumentAnchored } from './services/EbsiRestService';
11
+ import { callRpcMethod } from './services/EbsiRPCService';
12
+ import { BASE_CONTEXT_DOC, EBSI_DID_SPEC_INFOS, EbsiPublicKeyPurpose, EbsiRpcMethod, } from './types';
13
+ export function generateEbsiMethodSpecificId(specInfo) {
14
+ const spec = specInfo ?? EBSI_DID_SPEC_INFOS.V1;
15
+ const length = spec.didLength ?? 16;
16
+ const result = new Uint8Array(length + (spec.version ? 1 : 0));
17
+ if (spec.version) {
18
+ result.set([spec.version]);
19
+ }
20
+ result.set(randomBytes(length), spec.version ? 1 : 0);
21
+ return base58btc.encode(result);
22
+ }
23
+ export function generateOrUseProvidedEbsiPrivateKeyHex(specInfo, privateKeyBytes) {
24
+ const spec = specInfo ?? EBSI_DID_SPEC_INFOS.V1;
25
+ const length = spec.didLength ? 2 * spec.didLength : 32;
26
+ if (privateKeyBytes) {
27
+ if (privateKeyBytes.length !== length) {
28
+ throw Error(`Invalid private key length supplied (${privateKeyBytes.length}. Expected ${length} for ${spec.type}`);
29
+ }
30
+ return u8a.toString(privateKeyBytes, 'base16');
31
+ }
32
+ return u8a.toString(randomBytes(length), 'base16');
33
+ }
34
+ /**
35
+ * Returns the public key in the correct format to be used with the did registry v5
36
+ * - in case of Secp256k1 - returns the uncompressed public key as hex string prefixed with 0x04
37
+ * - in case of Secp256r1 - returns the jwk public key as hex string
38
+ * @param {{ key: IKey, type: EbsiKeyType }} args
39
+ * - key is the cryptographic key containing the public key
40
+ * - type is the type of the key which can be Secp256k1 or Secp256r1
41
+ * @returns {string} The properly formatted public key
42
+ * @throws {Error} If the key type is invalid
43
+ */
44
+ export const formatEbsiPublicKey = (args) => {
45
+ const { key, type } = args;
46
+ switch (type) {
47
+ case 'Secp256k1': {
48
+ const bytes = getBytes('0x' + key.publicKeyHex, 'key');
49
+ return SigningKey.computePublicKey(bytes, false);
50
+ }
51
+ case 'Secp256r1': {
52
+ /*
53
+ Public key as hex string. For an ES256K key, it must be in uncompressed format prefixed with "0x04".
54
+ For other algorithms, it must be the JWK transformed to string and then to hex format.
55
+ */
56
+ const jwk = toJwk(key.publicKeyHex, type, { use: JwkKeyUse.Signature, key });
57
+ /*
58
+ Converting JWK to string and then hex is odd and may lead to errors. Implementing
59
+ it like that because it's how EBSI does it. However, it may be a point of pain
60
+ in the future.
61
+ */
62
+ const jwkString = JSON.stringify(jwk, null, 2);
63
+ return `0x${u8a.toString(u8a.fromString(jwkString), 'base16')}`;
64
+ }
65
+ default:
66
+ throw new Error(`Unsupported key type: ${type}`);
67
+ }
68
+ };
69
+ export const ebsiGetIssuerMock = (args) => {
70
+ const { environment = 'conformance', version = 'v3' } = args;
71
+ if (environment === 'pilot') {
72
+ throw Error(`EBSI Pilot network does not have a issuer mock server`);
73
+ }
74
+ return `${getEbsiApiBaseUrl({ environment, version, system: environment })}/issuer-mock`;
75
+ };
76
+ export const ebsiGetAuthorisationServer = (args) => {
77
+ const { environment = 'pilot', version = 'v4' } = args;
78
+ return `${getEbsiApiBaseUrl({ environment, version, system: 'authorisation' })}`;
79
+ };
80
+ export const ebsiGetRegistryAPIUrls = (args) => {
81
+ const { environment = 'pilot', version = 'v5' } = args;
82
+ const baseUrl = `${getEbsiApiBaseUrl({ environment, version, system: 'did-registry' })}`;
83
+ return {
84
+ mutate: `${baseUrl}/jsonrpc`,
85
+ query: `${baseUrl}/identifiers`,
86
+ };
87
+ };
88
+ export const determineWellknownEndpoint = ({ environment, version, type, system = environment, mock }) => {
89
+ const url = `${getEbsiApiBaseUrl({ environment, version, system })}${mock ? `/${mock}` : ''}/.well-known/${type}`;
90
+ logger.debug(`wellknown url: ${url}`);
91
+ return url;
92
+ };
93
+ export const ebsiSignAndSendTransaction = async (args, context) => {
94
+ const { rpcRequest, accessToken, kid, apiOpts, previousTxResponse } = args;
95
+ const unsignedTxResponse = await callRpcMethod(rpcRequest);
96
+ const nonce = 'result' in unsignedTxResponse ? unsignedTxResponse.result.nonce : undefined;
97
+ // We should get a new nonce once the actual previous transaction has been anchored. Thus we retry if the nonce remains the same
98
+ if (previousTxResponse &&
99
+ 'result' in unsignedTxResponse &&
100
+ 'nonce' in previousTxResponse &&
101
+ 'nonce' in unsignedTxResponse.result &&
102
+ typeof unsignedTxResponse.result === 'object' &&
103
+ previousTxResponse.nonce === unsignedTxResponse.result.nonce) {
104
+ await wait(1_000);
105
+ return await ebsiSignAndSendTransaction({ ...args, previousTxResponse }, context);
106
+ }
107
+ if ('error' in unsignedTxResponse && !!unsignedTxResponse.error) {
108
+ logger.error(JSON.stringify(unsignedTxResponse));
109
+ throw new Error(unsignedTxResponse.error.message ?? 'Unknown error occurred');
110
+ }
111
+ const unsignedTx = unsignedTxResponse.result;
112
+ const agentUnsignedTx = JSON.parse(JSON.stringify(unsignedTx));
113
+ if (unsignedTx && 'chainId' in unsignedTx && typeof unsignedTx.chainId === 'string' && unsignedTx.chainId.toLowerCase().startsWith('0x')) {
114
+ // We expect the chain id to be a regular number and not a hex string
115
+ agentUnsignedTx.chainId = Number.parseInt(unsignedTx.chainId, 16);
116
+ }
117
+ const signedRawTx = await context.agent.keyManagerSignEthTX({
118
+ kid,
119
+ transaction: agentUnsignedTx,
120
+ });
121
+ const sig = Transaction.from(signedRawTx).signature;
122
+ const { r, s, v } = sig;
123
+ const sTResponse = await callRpcMethod({
124
+ params: [
125
+ {
126
+ protocol: 'eth',
127
+ unsignedTransaction: unsignedTx,
128
+ r,
129
+ s,
130
+ v: `0x${v.toString(16)}`,
131
+ signedRawTransaction: signedRawTx,
132
+ },
133
+ ],
134
+ rpcMethod: EbsiRpcMethod.SEND_SIGNED_TRANSACTION,
135
+ rpcId: unsignedTxResponse.id,
136
+ apiOpts,
137
+ accessToken: accessToken,
138
+ });
139
+ if ('status' in sTResponse) {
140
+ throw new Error(JSON.stringify(sTResponse, null, 2));
141
+ }
142
+ return { ...sTResponse, nonce };
143
+ };
144
+ export const ebsiGenerateOrUseKeyPair = async (args, context) => {
145
+ const { keyOpts, keyType, kms, controllerKey = false } = args;
146
+ let privateKeyHex = generateOrUseProvidedEbsiPrivateKeyHex(EBSI_DID_SPEC_INFOS.V1, keyOpts?.privateKeyHex ? u8a.fromString(keyOpts.privateKeyHex, 'base16') : undefined);
147
+ if (privateKeyHex.startsWith('0x')) {
148
+ privateKeyHex = privateKeyHex.substring(2);
149
+ }
150
+ if (!privateKeyHex || privateKeyHex.length !== 64) {
151
+ throw new Error('Private key should be 32 bytes / 64 chars hex');
152
+ }
153
+ const importableKey = await toMinimalImportableKey({ key: { ...keyOpts, privateKeyHex }, type: keyType, kms });
154
+ if (keyType === 'Secp256k1') {
155
+ importableKey.meta = {
156
+ ...importableKey.meta,
157
+ ebsi: {
158
+ anchored: false,
159
+ controllerKey,
160
+ },
161
+ };
162
+ }
163
+ return importableKey;
164
+ };
165
+ export const toMinimalImportableKey = async (args) => {
166
+ const { key, kms } = args;
167
+ const minimalImportableKey = { ...key };
168
+ const type = args.key?.type ?? args.type;
169
+ minimalImportableKey.kms = kms;
170
+ minimalImportableKey.type = type;
171
+ if (!minimalImportableKey.privateKeyHex) {
172
+ throw Error(`Minimal importable key needs a private key`);
173
+ }
174
+ minimalImportableKey.meta = {
175
+ purposes: assertedPurposes({ key }) ?? setDefaultPurposes({ key, type }),
176
+ jwkThumbprint: calculateJwkThumbprintForKey({
177
+ key: minimalImportableKey,
178
+ digestAlgorithm: 'sha256',
179
+ }),
180
+ };
181
+ return minimalImportableKey;
182
+ };
183
+ export const assertedPurposes = (args) => {
184
+ const { key } = args;
185
+ if (key?.purposes && key.purposes.length > 0) {
186
+ switch (key.type) {
187
+ case 'Secp256k1': {
188
+ if (key?.purposes && key.purposes.length > 0 && key.purposes?.includes(EbsiPublicKeyPurpose.CapabilityInvocation)) {
189
+ return key.purposes;
190
+ }
191
+ throw new Error(`Secp256k1/ES256K key requires ${EbsiPublicKeyPurpose.CapabilityInvocation} purpose`);
192
+ }
193
+ case 'Secp256r1': {
194
+ if (key?.purposes &&
195
+ key.purposes.length > 0 &&
196
+ key.purposes.every((purpose) => [EbsiPublicKeyPurpose.AssertionMethod, EbsiPublicKeyPurpose.Authentication].includes(purpose))) {
197
+ return key.purposes;
198
+ }
199
+ throw new Error(`Secp256r1/ES256 key requires ${[EbsiPublicKeyPurpose.AssertionMethod, EbsiPublicKeyPurpose.Authentication].join(', ')} purposes`);
200
+ }
201
+ default:
202
+ throw new Error(`Unsupported key type: ${key.type}`);
203
+ }
204
+ }
205
+ return key?.purposes;
206
+ };
207
+ export const setDefaultPurposes = (args) => {
208
+ const { key, type } = args;
209
+ if (!key?.purposes || key.purposes.length === 0) {
210
+ switch (type) {
211
+ case 'Secp256k1':
212
+ return [EbsiPublicKeyPurpose.CapabilityInvocation];
213
+ case 'Secp256r1':
214
+ return [EbsiPublicKeyPurpose.AssertionMethod, EbsiPublicKeyPurpose.Authentication];
215
+ default:
216
+ throw new Error(`Unsupported key type: ${key?.type}`);
217
+ }
218
+ }
219
+ return key.purposes;
220
+ };
221
+ export const randomRpcId = () => {
222
+ return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
223
+ };
224
+ export const ebsiCreateDidOnLedger = async (args, context) => {
225
+ const { accessTokenOpts, notBefore = Math.floor(Date.now() / 1000 - 60), notAfter = Math.floor(Date.now() / 1000 + 10 * 365 * 24 * 60 * 60), baseDocument, identifier, } = args;
226
+ const { clientId, redirectUri, environment, credentialIssuer } = accessTokenOpts;
227
+ const controllerKey = getControllerKey({ identifier });
228
+ const secp256r1 = getKeys({ identifier, keyType: 'Secp256r1' })?.[0];
229
+ let { attestationToOnboard } = accessTokenOpts;
230
+ if (!controllerKey || !secp256r1) {
231
+ return Promise.reject(`No secp256k1 controller key and/or secp2561r key found for identifier ${identifier}`);
232
+ }
233
+ const from = getEthereumAddressFromKey({ key: controllerKey });
234
+ if (!from) {
235
+ return Promise.reject(Error(`EBSI 'from' address expected for key ${controllerKey.publicKeyHex}`));
236
+ }
237
+ const did = identifier.did;
238
+ const kid = controllerKey.kid;
239
+ const idOpts = { identifier, kid };
240
+ let rpcId = args.rpcId ?? randomRpcId();
241
+ const apiOpts = {
242
+ environment,
243
+ version: 'v5',
244
+ };
245
+ const jwksUri = args.accessTokenOpts.jwksUri ?? `${clientId}/.well-known/jwks/dids/${encodeURIComponent(identifier.did)}.json`;
246
+ if (!attestationToOnboard) {
247
+ const authReqResult = await context.agent.ebsiCreateAttestationAuthRequestURL({
248
+ credentialIssuer,
249
+ idOpts,
250
+ formats: ['jwt_vc'],
251
+ clientId,
252
+ redirectUri,
253
+ credentialType: 'VerifiableAuthorisationToOnboard',
254
+ requestObjectOpts: { iss: clientId, requestObjectMode: CreateRequestObjectMode.REQUEST_OBJECT, jwksUri },
255
+ });
256
+ const attestationResult = await context.agent.ebsiGetAttestation({
257
+ clientId,
258
+ authReqResult,
259
+ opts: { timeout: 120_000 },
260
+ });
261
+ attestationToOnboard = attestationResult.credentials[0].rawVerifiableCredential;
262
+ }
263
+ const insertDidAccessTokenResponse = await context.agent.ebsiAccessTokenGet({
264
+ attestationCredential: attestationToOnboard,
265
+ jwksUri,
266
+ scope: 'didr_invite',
267
+ idOpts,
268
+ redirectUri,
269
+ credentialIssuer,
270
+ clientId,
271
+ environment,
272
+ skipDidResolution: true,
273
+ });
274
+ const insertDidDocRequest = {
275
+ params: [
276
+ {
277
+ from,
278
+ did,
279
+ baseDocument: baseDocument ?? BASE_CONTEXT_DOC,
280
+ vMethodId: calculateJwkThumbprint({ jwk: toJwk(controllerKey.publicKeyHex, 'Secp256k1') }),
281
+ isSecp256k1: true,
282
+ publicKey: formatEbsiPublicKey({ key: controllerKey, type: 'Secp256k1' }),
283
+ notBefore,
284
+ notAfter,
285
+ },
286
+ ],
287
+ rpcMethod: EbsiRpcMethod.INSERT_DID_DOCUMENT,
288
+ rpcId,
289
+ apiOpts,
290
+ accessToken: insertDidAccessTokenResponse.accessTokenResponse.access_token,
291
+ };
292
+ const insertDidDocResponse = await ebsiSignAndSendTransaction({
293
+ rpcRequest: insertDidDocRequest,
294
+ kid,
295
+ accessToken: insertDidAccessTokenResponse.accessTokenResponse.access_token,
296
+ apiOpts,
297
+ }, context);
298
+ let anchorTime = await ebsiWaitTillDocumentAnchored({
299
+ did,
300
+ ...apiOpts,
301
+ maxWaitTime: 30_000,
302
+ startIntervalMS: 2000,
303
+ minIntervalMS: 500,
304
+ decreaseIntervalMSPerStep: 750,
305
+ });
306
+ if (!anchorTime.didDocument) {
307
+ throw Error(`did ${did} was not registered on EBSI network ${apiOpts.environment} in 45 seconds`);
308
+ }
309
+ logger.debug(`Anchoring did ${did} on network ${apiOpts.environment} took ${anchorTime.totalWaitTime / 1000} seconds in ${anchorTime.count} tries`);
310
+ // Update to the controller key for the remainder
311
+ idOpts.kid = calculateJwkThumbprintForKey({ key: controllerKey });
312
+ const addVMAccessTokenResponse = await context.agent.ebsiAccessTokenGet({
313
+ // attestationCredential: attestationToOnboard,
314
+ jwksUri,
315
+ scope: 'didr_write',
316
+ idOpts,
317
+ redirectUri,
318
+ credentialIssuer: undefined,
319
+ clientId,
320
+ environment,
321
+ skipDidResolution: true,
322
+ });
323
+ const vMethodId = calculateJwkThumbprint({ jwk: toJwk(secp256r1.publicKeyHex, 'Secp256r1') });
324
+ const publicKey = formatEbsiPublicKey({ key: secp256r1, type: 'Secp256r1' });
325
+ const addVerificationMethodRequest = {
326
+ params: [
327
+ {
328
+ from,
329
+ did,
330
+ isSecp256k1: false,
331
+ vMethodId,
332
+ publicKey,
333
+ },
334
+ ],
335
+ rpcMethod: EbsiRpcMethod.ADD_VERIFICATION_METHOD,
336
+ rpcId,
337
+ apiOpts,
338
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
339
+ };
340
+ const addVerificationMethodResponse = await ebsiSignAndSendTransaction({
341
+ rpcRequest: addVerificationMethodRequest,
342
+ previousTxResponse: insertDidDocResponse,
343
+ kid,
344
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
345
+ apiOpts,
346
+ }, context);
347
+ // We need to wait, even after the anchor. The methods below also retry in case the nonce does not get updated.
348
+ // But we simply know that at this point we need to introduce some delay
349
+ await wait(2_000);
350
+ const addAssertionMethodRelationshipRequest = {
351
+ params: [
352
+ {
353
+ from,
354
+ did,
355
+ vMethodId,
356
+ name: 'assertionMethod',
357
+ notAfter,
358
+ notBefore,
359
+ },
360
+ ],
361
+ rpcMethod: EbsiRpcMethod.ADD_VERIFICATION_RELATIONSHIP,
362
+ rpcId,
363
+ apiOpts,
364
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
365
+ };
366
+ const addAssertionMethodRelationshipResponse = await ebsiSignAndSendTransaction({
367
+ rpcRequest: addAssertionMethodRelationshipRequest,
368
+ previousTxResponse: addVerificationMethodResponse,
369
+ kid,
370
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
371
+ apiOpts,
372
+ }, context);
373
+ anchorTime = await ebsiWaitTillDocumentAnchored({
374
+ did,
375
+ ...apiOpts,
376
+ maxWaitTime: 20_000,
377
+ minIntervalMS: 500,
378
+ decreaseIntervalMSPerStep: 500,
379
+ searchForObject: { assertionMethod: [`${did}#${vMethodId}`] },
380
+ });
381
+ if (!anchorTime.didDocument) {
382
+ throw Error(`did ${did} assertionMethod id ${vMethodId} was not registered on EBSI network ${apiOpts.environment} in 20 seconds`);
383
+ }
384
+ logger.debug(`Anchoring assertionMethod ${vMethodId} for DID ${did} on network ${apiOpts.environment} took ${anchorTime.totalWaitTime / 1000} seconds in ${anchorTime.count} tries`);
385
+ const addAuthenticationRelationshipRequest = {
386
+ params: [
387
+ {
388
+ from,
389
+ did,
390
+ vMethodId,
391
+ name: 'authentication',
392
+ notAfter,
393
+ notBefore,
394
+ },
395
+ ],
396
+ rpcMethod: EbsiRpcMethod.ADD_VERIFICATION_RELATIONSHIP,
397
+ rpcId,
398
+ apiOpts,
399
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
400
+ };
401
+ const addAuthenticationRelationshipResponse = await ebsiSignAndSendTransaction({
402
+ rpcRequest: addAuthenticationRelationshipRequest,
403
+ previousTxResponse: addAssertionMethodRelationshipResponse,
404
+ kid,
405
+ accessToken: addVMAccessTokenResponse.accessTokenResponse.access_token,
406
+ apiOpts,
407
+ }, context);
408
+ return {
409
+ identifier,
410
+ insertDidDoc: insertDidDocResponse,
411
+ addVerificationMethod: addVerificationMethodResponse,
412
+ addAuthenticationRelationship: addAuthenticationRelationshipResponse,
413
+ addAssertionMethodRelationship: addAssertionMethodRelationshipResponse,
414
+ };
415
+ };
416
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/did/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { EbsiDidProvider } from './EbsiDidProvider';
2
+ export { getDidEbsiResolver } from './EbsiDidResolver';
3
+ export { ebsiCreateDidOnLedger, randomRpcId, ebsiSignAndSendTransaction, ebsiGetRegistryAPIUrls } from './functions';
4
+ export * from './services/EbsiRestService';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/did/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpH,cAAc,4BAA4B,CAAA;AAC1C,cAAc,SAAS,CAAA"}
@@ -0,0 +1,6 @@
1
+ export { EbsiDidProvider } from './EbsiDidProvider';
2
+ export { getDidEbsiResolver } from './EbsiDidResolver';
3
+ export { ebsiCreateDidOnLedger, randomRpcId, ebsiSignAndSendTransaction, ebsiGetRegistryAPIUrls } from './functions';
4
+ export * from './services/EbsiRestService';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/did/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpH,cAAc,4BAA4B,CAAA;AAC1C,cAAc,SAAS,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { EbsiRPCResponse, RpcMethodArgs } from '../types';
2
+ /**
3
+ * Allows to call 5 api methods of the EBSI RPC api
4
+ * - insertDidDocument
5
+ * - updateBaseDocument
6
+ * - addVerificationMethod
7
+ * - addVerificationMethodRelationship
8
+ * - sendSignedTransaction
9
+ * @function callRpcMethod
10
+ * @param {{ params: RPCParams[]; id: number; token: string; method: EbsiRpcMethod; apiOpts? ApiOpts }} args
11
+ */
12
+ export declare const callRpcMethod: (args: RpcMethodArgs) => Promise<EbsiRPCResponse>;
13
+ //# sourceMappingURL=EbsiRPCService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EbsiRPCService.d.ts","sourceRoot":"","sources":["../../../src/did/services/EbsiRPCService.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,MAAM,UAAU,CAAA;AAE3E;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,SAAgB,aAAa,KAAG,QAAQ,eAAe,CAEhF,CAAA"}
@@ -0,0 +1,64 @@
1
+ import fetch from 'cross-fetch';
2
+ import { wait } from '../../functions';
3
+ import { logger } from '../../index';
4
+ import { ebsiGetRegistryAPIUrls, randomRpcId } from '../functions';
5
+ import { JSON_RPC_VERSION } from '../types';
6
+ /**
7
+ * Allows to call 5 api methods of the EBSI RPC api
8
+ * - insertDidDocument
9
+ * - updateBaseDocument
10
+ * - addVerificationMethod
11
+ * - addVerificationMethodRelationship
12
+ * - sendSignedTransaction
13
+ * @function callRpcMethod
14
+ * @param {{ params: RPCParams[]; id: number; token: string; method: EbsiRpcMethod; apiOpts? ApiOpts }} args
15
+ */
16
+ export const callRpcMethod = async (args) => {
17
+ return callRpcMethodImpl({ ...args, retries: 10 });
18
+ };
19
+ const callRpcMethodImpl = async (args) => {
20
+ const { params, rpcId, accessToken, rpcMethod, apiOpts, doNotThrowErrors = false, retries } = args;
21
+ const options = buildFetchOptions({ accessToken: accessToken, params, rpcId, rpcMethod });
22
+ logger.debug(`RPC call:\r\n ${JSON.stringify(options, null, 2)}`);
23
+ const rpcResponse = await (await fetch(ebsiGetRegistryAPIUrls({ ...apiOpts }).mutate, options)).json();
24
+ let result = rpcResponse.result;
25
+ logger.debug(`RPC RESPONSE:\r\n${JSON.stringify(result ?? rpcResponse.error)}`);
26
+ if (rpcResponse.error !== undefined && !doNotThrowErrors) {
27
+ logger.error(`RPC ERROR RESPONSE:`, rpcResponse);
28
+ if (rpcResponse.error.message.includes(`replacement fee too low`)) {
29
+ args.rpcId = randomRpcId();
30
+ if (retries <= 0) {
31
+ throw Error(rpcResponse.error.message);
32
+ }
33
+ logger.warning(`Replacement fee too low error. Waiting 1 sec. Retries: ${retries}`);
34
+ await wait(1000);
35
+ return callRpcMethodImpl({ ...args, retries: retries - 1 });
36
+ }
37
+ throw Error(rpcResponse.error.message);
38
+ }
39
+ return rpcResponse;
40
+ };
41
+ /**
42
+ * Builds the request body of the http request to EBSI RPC api
43
+ * @function buildFetchOptions
44
+ * @param {{ params: RPCParams[]; id: number; token: string; method: EbsiRpcMethod }} args
45
+ */
46
+ const buildFetchOptions = (args) => {
47
+ const { params, rpcId, accessToken, rpcMethod } = args;
48
+ const fetchReq = {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ Authorization: `Bearer ${accessToken}`,
53
+ },
54
+ body: JSON.stringify({
55
+ jsonrpc: JSON_RPC_VERSION,
56
+ method: rpcMethod,
57
+ params: params,
58
+ id: rpcId,
59
+ }),
60
+ };
61
+ logger.debug(fetchReq);
62
+ return fetchReq;
63
+ };
64
+ //# sourceMappingURL=EbsiRPCService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EbsiRPCService.js","sourceRoot":"","sources":["../../../src/did/services/EbsiRPCService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { DIDDocument } from 'did-resolver';
2
+ import { ApiOpts } from '../../types/IEbsiSupport';
3
+ import { GetDidDocumentParams, GetDidDocumentsParams, GetDidDocumentsResponse } from '../types';
4
+ /**
5
+ * Gets the DID document corresponding to the DID.
6
+ * @param {{ params: GetDidDocumentParams, apiOpts?: ApiOpts }} args
7
+ * @returns a did document
8
+ */
9
+ export declare const ebsiGetDidDocument: (args: {
10
+ params: GetDidDocumentParams;
11
+ apiOpts?: ApiOpts;
12
+ }) => Promise<DIDDocument>;
13
+ /**
14
+ * Wait up to the number of MS for a DID Document or Verification methods and relationships to be registered. This is needed, as the EBSI blockchain does not directly propagate across all nodes, since it needs to mine for consensus first
15
+ * @param args
16
+ */
17
+ export declare const ebsiWaitTillDocumentAnchored: (args: GetDidDocumentParams & ApiOpts & {
18
+ startIntervalMS?: number;
19
+ minIntervalMS?: number;
20
+ decreaseIntervalMSPerStep?: number;
21
+ maxWaitTime?: number;
22
+ searchForObject?: Record<string, any>;
23
+ }) => Promise<{
24
+ totalWaitTime: number;
25
+ count: number;
26
+ didDocument: DIDDocument | undefined;
27
+ }>;
28
+ /**
29
+ * listDidDocuments - Returns a list of identifiers.
30
+ * @param {{ params: GetDidDocumentsParams; apiOpts?: ApiOpts }} args
31
+ * @returns a list of identifiers
32
+ */
33
+ export declare const ebsiListDidDocuments: (args: {
34
+ params: GetDidDocumentsParams;
35
+ apiOpts?: ApiOpts;
36
+ }) => Promise<GetDidDocumentsResponse>;
37
+ //# sourceMappingURL=EbsiRestService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EbsiRestService.d.ts","sourceRoot":"","sources":["../../../src/did/services/EbsiRestService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAElD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAE/F;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAgB;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,QAAQ,WAAW,CAevH,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,SACjC,oBAAoB,GACxB,OAAO,GAAG;IACR,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,MAAM,EAAE,GAAG,CAAC,CAAA;CACtC;mBAEY,MAAM;WACd,MAAM;iBACA,WAAW,GAAG,SAAS;EAgDrC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,SAAgB;IAAE,MAAM,EAAE,qBAAqB,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,QAAQ,uBAAuB,CAetI,CAAA"}