@arcblock/did-connect-js 1.29.22 → 4.0.0-beta.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 (118) hide show
  1. package/{lib/adapters/detect.d.cts → dist/adapters/detect.d.ts} +3 -5
  2. package/dist/adapters/detect.d.ts.map +1 -0
  3. package/dist/adapters/detect.js +13 -0
  4. package/dist/adapters/detect.js.map +1 -0
  5. package/dist/adapters/express.d.ts +40 -0
  6. package/dist/adapters/express.d.ts.map +1 -0
  7. package/dist/adapters/express.js +30 -0
  8. package/dist/adapters/express.js.map +1 -0
  9. package/dist/adapters/hono.d.ts +49 -0
  10. package/dist/adapters/hono.d.ts.map +1 -0
  11. package/dist/adapters/hono.js +176 -0
  12. package/dist/adapters/hono.js.map +1 -0
  13. package/dist/authenticator/base.d.ts +21 -0
  14. package/dist/authenticator/base.d.ts.map +1 -0
  15. package/dist/authenticator/base.js +109 -0
  16. package/dist/authenticator/base.js.map +1 -0
  17. package/dist/authenticator/wallet.d.ts +221 -0
  18. package/dist/authenticator/wallet.d.ts.map +1 -0
  19. package/dist/authenticator/wallet.js +588 -0
  20. package/dist/authenticator/wallet.js.map +1 -0
  21. package/dist/handlers/base.d.ts +25 -0
  22. package/dist/handlers/base.d.ts.map +1 -0
  23. package/dist/handlers/base.js +48 -0
  24. package/dist/handlers/base.js.map +1 -0
  25. package/dist/handlers/util.d.ts +48 -0
  26. package/dist/handlers/util.d.ts.map +1 -0
  27. package/dist/handlers/util.js +812 -0
  28. package/dist/handlers/util.js.map +1 -0
  29. package/dist/handlers/wallet.d.ts +96 -0
  30. package/dist/handlers/wallet.d.ts.map +1 -0
  31. package/dist/handlers/wallet.js +129 -0
  32. package/dist/handlers/wallet.js.map +1 -0
  33. package/dist/index.d.ts +10 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +9 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/protocol.d.ts +14 -0
  38. package/dist/protocol.d.ts.map +1 -0
  39. package/dist/protocol.js +37 -0
  40. package/dist/protocol.js.map +1 -0
  41. package/dist/schema/claims.d.ts +17 -0
  42. package/dist/schema/claims.d.ts.map +1 -0
  43. package/dist/schema/claims.js +205 -0
  44. package/dist/schema/claims.js.map +1 -0
  45. package/dist/schema/index.d.ts +7 -0
  46. package/dist/schema/index.d.ts.map +1 -0
  47. package/dist/schema/index.js +49 -0
  48. package/dist/schema/index.js.map +1 -0
  49. package/dist/storage/kv.d.ts +31 -0
  50. package/dist/storage/kv.d.ts.map +1 -0
  51. package/dist/storage/kv.js +54 -0
  52. package/dist/storage/kv.js.map +1 -0
  53. package/dist/types.d.ts +53 -0
  54. package/dist/types.d.ts.map +1 -0
  55. package/dist/types.js +2 -0
  56. package/dist/types.js.map +1 -0
  57. package/package.json +48 -106
  58. package/LICENSE +0 -13
  59. package/README.md +0 -210
  60. package/esm/_virtual/rolldown_runtime.mjs +0 -8
  61. package/esm/adapters/detect.d.mts +0 -11
  62. package/esm/adapters/detect.mjs +0 -16
  63. package/esm/adapters/express.d.mts +0 -48
  64. package/esm/adapters/express.mjs +0 -39
  65. package/esm/adapters/hono.d.mts +0 -57
  66. package/esm/adapters/hono.mjs +0 -164
  67. package/esm/authenticator/base.d.mts +0 -23
  68. package/esm/authenticator/base.mjs +0 -88
  69. package/esm/authenticator/wallet.d.mts +0 -270
  70. package/esm/authenticator/wallet.mjs +0 -556
  71. package/esm/handlers/base.d.mts +0 -32
  72. package/esm/handlers/base.mjs +0 -37
  73. package/esm/handlers/util.d.mts +0 -70
  74. package/esm/handlers/util.mjs +0 -739
  75. package/esm/handlers/wallet.d.mts +0 -120
  76. package/esm/handlers/wallet.mjs +0 -139
  77. package/esm/index.d.mts +0 -8
  78. package/esm/index.mjs +0 -8
  79. package/esm/package.mjs +0 -120
  80. package/esm/protocol.d.mts +0 -15
  81. package/esm/protocol.mjs +0 -40
  82. package/esm/schema/claims.d.mts +0 -18
  83. package/esm/schema/claims.mjs +0 -154
  84. package/esm/schema/index.d.mts +0 -9
  85. package/esm/schema/index.mjs +0 -49
  86. package/esm/storage/kv.d.mts +0 -33
  87. package/esm/storage/kv.mjs +0 -55
  88. package/esm/types.d.mts +0 -55
  89. package/esm/types.mjs +0 -1
  90. package/lib/_virtual/rolldown_runtime.cjs +0 -31
  91. package/lib/adapters/detect.cjs +0 -18
  92. package/lib/adapters/express.cjs +0 -41
  93. package/lib/adapters/express.d.cts +0 -48
  94. package/lib/adapters/hono.cjs +0 -167
  95. package/lib/adapters/hono.d.cts +0 -57
  96. package/lib/authenticator/base.cjs +0 -91
  97. package/lib/authenticator/base.d.cts +0 -23
  98. package/lib/authenticator/wallet.cjs +0 -564
  99. package/lib/authenticator/wallet.d.cts +0 -270
  100. package/lib/handlers/base.cjs +0 -40
  101. package/lib/handlers/base.d.cts +0 -32
  102. package/lib/handlers/util.cjs +0 -760
  103. package/lib/handlers/util.d.cts +0 -70
  104. package/lib/handlers/wallet.cjs +0 -139
  105. package/lib/handlers/wallet.d.cts +0 -119
  106. package/lib/index.cjs +0 -16
  107. package/lib/index.d.cts +0 -8
  108. package/lib/package.cjs +0 -123
  109. package/lib/protocol.cjs +0 -46
  110. package/lib/protocol.d.cts +0 -15
  111. package/lib/schema/claims.cjs +0 -156
  112. package/lib/schema/claims.d.cts +0 -18
  113. package/lib/schema/index.cjs +0 -52
  114. package/lib/schema/index.d.cts +0 -9
  115. package/lib/storage/kv.cjs +0 -57
  116. package/lib/storage/kv.d.cts +0 -33
  117. package/lib/types.cjs +0 -0
  118. package/lib/types.d.cts +0 -55
@@ -0,0 +1,588 @@
1
+ import qs from 'node:querystring';
2
+ import { toAddress } from '@arcblock/did';
3
+ import Client from '@ocap/client';
4
+ import RSA from '@ocap/mcrypto/lib/crypter/rsa';
5
+ import { fromBase58, toBase58, toDid } from '@ocap/util';
6
+ import { fromAddress } from '@ocap/wallet';
7
+ import Debug from 'debug';
8
+ import isEqual from 'lodash/isEqual';
9
+ import pick from 'lodash/pick';
10
+ import random from 'lodash/random';
11
+ import shuffle from 'lodash/shuffle';
12
+ import BaseAuthenticator, { DEFAULT_CHAIN_INFO } from './base.js';
13
+ const debug = Debug('@arcblock/did-connect-js:authenticator:wallet');
14
+ const DEFAULT_TIMEOUT = 8000;
15
+ const MFA_CODE_COUNT = 3;
16
+ import * as schema from '../schema/index.js';
17
+ class WalletAuthenticator extends BaseAuthenticator {
18
+ wallet;
19
+ appInfo;
20
+ memberAppInfo;
21
+ chainInfo;
22
+ delegator;
23
+ delegation;
24
+ baseUrl;
25
+ tokenKey;
26
+ timeout;
27
+ static formatDisplay(display) {
28
+ // empty
29
+ if (!display) {
30
+ return '';
31
+ }
32
+ // object like
33
+ if (display?.type && display.content) {
34
+ return JSON.stringify(pick(display, ['type', 'content']));
35
+ }
36
+ // string like
37
+ try {
38
+ const parsed = JSON.parse(display);
39
+ if (parsed?.type && parsed.content) {
40
+ return display;
41
+ }
42
+ return '';
43
+ }
44
+ catch (_err) {
45
+ return '';
46
+ }
47
+ }
48
+ /**
49
+ * Creates an instance of DID Authenticator.
50
+ *
51
+ * @class
52
+ * @param {object} config
53
+ * @param {WalletObject|Function} config.wallet - wallet instance {@see @ocap/wallet} or a function that returns wallet instance
54
+ * @param {WalletObject|Function} [config.delegator] - the party that authorizes `wallet` to perform actions on behalf of `wallet`
55
+ * @param {string|Function} [config.delegation] - the jwt token that proves delegation relationship
56
+ * @param {ApplicationInfo|Function} config.appInfo - application basic info or a function that returns application info
57
+ * @param {ChainInfo|Function} config.chainInfo - application chain info or a function that returns chain info
58
+ * @param {Number} [config.timeout=8000] - timeout in milliseconds when generating claim
59
+ * @param {object} [config.baseUrl] - url to assemble wallet request uri, can be inferred from request object
60
+ * @param {string} [config.tokenKey='_t_'] - query param key for `token`
61
+ */
62
+ constructor({ wallet, appInfo, memberAppInfo, delegator, delegation, timeout = DEFAULT_TIMEOUT, chainInfo = DEFAULT_CHAIN_INFO, baseUrl = '', tokenKey = '_t_', }) {
63
+ super();
64
+ this.wallet = this._validateWallet(wallet, false);
65
+ this.appInfo = this._validateAppInfo(appInfo);
66
+ this.memberAppInfo = this._validateAppInfo(memberAppInfo, true);
67
+ this.chainInfo = chainInfo;
68
+ this.delegator = delegator;
69
+ this.delegation = delegation;
70
+ this.baseUrl = baseUrl;
71
+ this.tokenKey = tokenKey;
72
+ this.timeout = timeout;
73
+ if (!this.appInfo.link) {
74
+ this.appInfo.link = this.baseUrl;
75
+ }
76
+ }
77
+ /**
78
+ * Generate a deep link url that can be displayed as QRCode for DID Wallet to consume
79
+ *
80
+ * @method
81
+ * @param {object} params
82
+ * @param {string} params.baseUrl - baseUrl inferred from request object
83
+ * @param {string} params.pathname - wallet callback pathname
84
+ * @param {string} params.token - action token
85
+ * @param {object} params.query - params that should be persisted in wallet callback url
86
+ * @returns {string}
87
+ */
88
+ uri({ baseUrl, pathname = '', token = '', query = {}, } = {}) {
89
+ const params = { ...query, [this.tokenKey]: token };
90
+ const payload = {
91
+ action: 'requestAuth',
92
+ url: encodeURIComponent(`${this.baseUrl || baseUrl}${pathname}?${qs.stringify(params)}`),
93
+ };
94
+ const uri = `https://abtwallet.io/i/?${qs.stringify(payload)}`;
95
+ debug('uri', { token, pathname, uri, params, payload });
96
+ return uri;
97
+ }
98
+ /**
99
+ * Compute public url to return to wallet
100
+ *
101
+ * @method
102
+ * @param {string} pathname
103
+ * @param {object} params
104
+ * @returns {string}
105
+ */
106
+ getPublicUrl(pathname, params = {}, baseUrl = '') {
107
+ return `${this.baseUrl || baseUrl}${pathname}?${qs.stringify(params)}`;
108
+ }
109
+ /**
110
+ * Sign a plain response, usually on auth success or error
111
+ *
112
+ * @method
113
+ * @param {object} params
114
+ * @param {object} params.response - response
115
+ * @param {string} params.errorMessage - error message, default to empty
116
+ * @param {string} params.successMessage - success message, default to empty
117
+ * @param {string} params.nextWorkflow - https://github.com/ArcBlock/ABT-DID-Protocol#concatenate-multiple-workflow
118
+ * @param {string} params.nextUrl - tell wallet do open this url in webview
119
+ * @param {object} params.cookies - key-value pairs to be set as cookie before open nextUrl
120
+ * @param {object} params.storages - key-value pairs to be set as localStorage before open nextUrl
121
+ * @param {string} baseUrl
122
+ * @param {object} request
123
+ * @returns {Promise<object>} { appPk, agentPk, authInfo }
124
+ */
125
+ async signResponse({ response = {}, errorMessage = '', successMessage = '', nextWorkflow = '', nextUrl = '', cookies = {}, storages = {}, }, baseUrl, request, extraParams = {}) {
126
+ const context = request.context || {};
127
+ const infoParams = { baseUrl, request, ...context, extraParams };
128
+ const [wallet, delegator, delegation] = await Promise.all([
129
+ this.getWalletInfo(infoParams),
130
+ this.getDelegator(infoParams),
131
+ this.getDelegation(infoParams),
132
+ ]);
133
+ const [appInfo, memberAppInfo] = await Promise.all([
134
+ this.getAppInfo({ ...infoParams, wallet, delegator }, 'appInfo'),
135
+ this.getAppInfo({ ...infoParams, wallet, delegator }, 'memberAppInfo'),
136
+ ]);
137
+ const didwallet = request.context.wallet;
138
+ const payload = {
139
+ appInfo,
140
+ memberAppInfo,
141
+ status: errorMessage ? 'error' : 'ok',
142
+ errorMessage: errorMessage || '',
143
+ successMessage: successMessage || '',
144
+ nextWorkflow: nextWorkflow || '',
145
+ nextUrl: nextUrl || '',
146
+ cookies: cookies || {},
147
+ storages: storages || '',
148
+ response,
149
+ };
150
+ if (delegator) {
151
+ payload.iss = toDid(delegator.address);
152
+ payload.agentDid = toDid(wallet.address);
153
+ payload.verifiableClaims = [{ type: 'certificate', content: delegation }];
154
+ }
155
+ const result = {
156
+ appPk: toBase58(wallet.pk),
157
+ authInfo: await wallet.signJWT(payload, true, didwallet ? didwallet.jwt : undefined),
158
+ };
159
+ if (delegator) {
160
+ result.appPk = toBase58(delegator.pk);
161
+ result.agentPk = toBase58(wallet.pk);
162
+ }
163
+ return result;
164
+ }
165
+ /**
166
+ * Sign a auth response that returned to wallet: tell the wallet the appInfo/chainInfo
167
+ *
168
+ * @method
169
+ * @param {object} params
170
+ * @param {object} params.claims - info required by application to complete the auth
171
+ * @param {string} params.pathname - pathname to assemble callback url
172
+ * @param {string} params.baseUrl - baseUrl
173
+ * @param {object} params.challenge - random challenge to be included in the body
174
+ * @param {object} params.extraParams - extra query params and locale
175
+ * @param {object} params.request
176
+ * @param {object} params.context
177
+ * @param {string} params.context.token - action token
178
+ * @param {number} params.context.currentStep - current step
179
+ * @param {string} [params.context.sharedKey] - shared key between app and wallet
180
+ * @param {string} [params.context.encryptionKey] - encryption key from wallet
181
+ * @param {Function} [params.context.mfaCode] - function used to generate mfa code
182
+ * @param {string} params.context.userDid - decoded from req.query, base58
183
+ * @param {string} params.context.userPk - decoded from req.query, base58
184
+ * @param {string} params.context.didwallet - DID Wallet os and version
185
+ * @returns {Promise<object>} { appPk, agentPk, sharedKey, authInfo }
186
+ */
187
+ async sign({ context, request, claims, pathname = '', baseUrl = '', challenge = '', extraParams = {}, }) {
188
+ // debug('sign.context', context);
189
+ // debug('sign.params', extraParams);
190
+ const claimsInfo = await this.tryWithTimeout(() => this.genRequestedClaims({
191
+ claims,
192
+ context: { baseUrl, request, ...context },
193
+ extraParams,
194
+ }));
195
+ if (claimsInfo.filter((x) => x.mfaCode && x.mfaCode.length > 0).length > 1) {
196
+ throw new Error('Multiple MFA is not supported when sending more than 1 claim');
197
+ }
198
+ // FIXME: this maybe buggy if user provided multiple claims
199
+ const tmp = claimsInfo.find((x) => isEqual(this._isValidChainInfo(x.chainInfo), DEFAULT_CHAIN_INFO) === false);
200
+ const infoParams = { baseUrl, request, ...context, extraParams };
201
+ const [wallet, delegator, delegation, chainInfo] = await Promise.all([
202
+ this.getWalletInfo(infoParams),
203
+ this.getDelegator(infoParams),
204
+ this.getDelegation(infoParams),
205
+ this.getChainInfo(infoParams, tmp?.chainInfo),
206
+ ]);
207
+ const [appInfo, memberAppInfo] = await Promise.all([
208
+ this.getAppInfo({ ...infoParams, wallet, delegator }, 'appInfo'),
209
+ this.getAppInfo({ ...infoParams, wallet, delegator }, 'memberAppInfo'),
210
+ ]);
211
+ const payload = {
212
+ action: 'responseAuth',
213
+ challenge,
214
+ appInfo,
215
+ memberAppInfo,
216
+ chainInfo,
217
+ requestedClaims: claimsInfo.map((x) => {
218
+ delete x.chainInfo;
219
+ return x;
220
+ }),
221
+ url: `${this.baseUrl || baseUrl}${pathname}?${qs.stringify({ [this.tokenKey]: context.token })}`,
222
+ };
223
+ if (delegator) {
224
+ payload.iss = toDid(delegator.address);
225
+ payload.agentDid = toDid(wallet.address);
226
+ payload.verifiableClaims = [{ type: 'certificate', content: delegation }];
227
+ }
228
+ // debug('sign.payload', payload);
229
+ const version = context.didwallet ? context.didwallet.jwt : undefined;
230
+ const result = {
231
+ appPk: toBase58(wallet.pk),
232
+ authInfo: await wallet.signJWT(payload, true, version),
233
+ sensitive: claimsInfo.every((x) => ['keyPair', 'encryptionKey'].includes(x.type)),
234
+ };
235
+ // encrypt context.encKey with user pk here
236
+ if (result.sensitive && context.sharedKey && context.encryptionKey) {
237
+ try {
238
+ const pk = fromBase58(context.encryptionKey).toString('utf8');
239
+ result.sharedKey = RSA.encrypt(context.sharedKey, pk, 'base58');
240
+ }
241
+ catch (err) {
242
+ console.error('Failed to encrypt shared key', err);
243
+ }
244
+ }
245
+ if (delegator) {
246
+ result.appPk = toBase58(delegator.pk);
247
+ result.agentPk = toBase58(wallet.pk);
248
+ }
249
+ return result;
250
+ }
251
+ /**
252
+ * Determine chainInfo on the fly
253
+ *
254
+ * @param {object} params - contains the context of this request
255
+ * @param {object|undefined} [info=undefined] - chain info object or function
256
+ * @returns {Promise<ChainInfo>}
257
+ * @memberof WalletAuthenticator
258
+ */
259
+ async getChainInfo(params, info) {
260
+ if (info && this._isValidChainInfo(info)) {
261
+ return info;
262
+ }
263
+ if (typeof this.chainInfo === 'function') {
264
+ const result = await this.tryWithTimeout(() => this.chainInfo(params));
265
+ if (this._isValidChainInfo(result)) {
266
+ return result;
267
+ }
268
+ }
269
+ if (this.chainInfo && this._isValidChainInfo(this.chainInfo)) {
270
+ return this.chainInfo;
271
+ }
272
+ return DEFAULT_CHAIN_INFO;
273
+ }
274
+ /**
275
+ * Determine appInfo/memberAppInfo on the fly
276
+ *
277
+ * @param {object} params - contains the context of this request
278
+ * @param {string} key - appInfo | memberAppInfo
279
+ * @returns {Promise<ApplicationInfo>}
280
+ * @memberof WalletAuthenticator
281
+ */
282
+ async getAppInfo(params, key = 'appInfo') {
283
+ if (typeof this[key] === 'function') {
284
+ const info = (await this.tryWithTimeout(() => this[key](params)));
285
+ if (info) {
286
+ if (!info.link) {
287
+ info.link = params.baseUrl;
288
+ }
289
+ if (!info.publisher) {
290
+ info.publisher = toDid(params.delegator ? params.delegator.address : params.wallet.address);
291
+ }
292
+ }
293
+ return this._validateAppInfo(info, key === 'memberAppInfo');
294
+ }
295
+ if (this[key] && !this[key].publisher) {
296
+ this[key].publisher = toDid(params.delegator ? params.delegator.address : params.wallet.address);
297
+ }
298
+ return this[key];
299
+ }
300
+ async getWalletInfo(params) {
301
+ if (typeof this.wallet === 'function') {
302
+ // No longer check wallet.secretKey, because we may have use cases (e.g. @arcblock/sdk)
303
+ // where there is no secretKey but we can still perform signing.
304
+ const result = await this.tryWithTimeout(() => this.wallet(params));
305
+ return this._validateWallet(result, false);
306
+ }
307
+ return this.wallet;
308
+ }
309
+ async getDelegator(params) {
310
+ if (typeof this.delegator === 'function') {
311
+ const result = await this.tryWithTimeout(() => this.delegator(params));
312
+ return result ? this._validateWallet(result, false) : null;
313
+ }
314
+ return this.delegator;
315
+ }
316
+ async getDelegation(params) {
317
+ if (typeof this.delegation === 'function') {
318
+ const result = await this.tryWithTimeout(() => this.delegation(params));
319
+ return result;
320
+ }
321
+ return this.delegation;
322
+ }
323
+ /**
324
+ * Verify a DID auth response sent from DID Wallet
325
+ *
326
+ * @method
327
+ * @param {object} data
328
+ * @param {string} [locale=en]
329
+ * @param {boolean} [enforceTimestamp=true]
330
+ * @returns Promise<boolean>
331
+ */
332
+ async verify(data, locale = 'en', enforceTimestamp = true) {
333
+ const { iss, iat, challenge = '', action = 'responseAuth', requestedClaims, } = await this._verify(data, 'userPk', 'userInfo', locale, enforceTimestamp);
334
+ debug('verify.context', { userPk: data.userPk, userDid: toAddress(iss), action, challenge });
335
+ debug('verify.claims', requestedClaims);
336
+ return {
337
+ token: data.token,
338
+ userDid: toAddress(iss),
339
+ userPk: data.userPk,
340
+ claims: requestedClaims,
341
+ action,
342
+ challenge,
343
+ timestamp: iat,
344
+ };
345
+ }
346
+ // ---------------------------------------
347
+ // Request claim related methods
348
+ // ---------------------------------------
349
+ genRequestedClaims({ claims, context, extraParams, }) {
350
+ return Promise.all(Object.keys(claims).map(async (x) => {
351
+ let name = x;
352
+ let claim = claims[x];
353
+ if (Array.isArray(claims[x])) {
354
+ [name, claim] = claims[x];
355
+ }
356
+ if (!schema.claims[name]) {
357
+ throw new Error(`Unsupported claim type ${name}`);
358
+ }
359
+ const fn = typeof this[name] === 'function' ? name : 'getClaimInfo';
360
+ const result = await this[fn]({ claim, context, extraParams });
361
+ if (result.mfa && typeof context.mfaCode === 'function') {
362
+ result.mfaCode = [await context.mfaCode()];
363
+ while (result.mfaCode.length < MFA_CODE_COUNT) {
364
+ const noise = random(10, 99);
365
+ if (result.mfaCode.includes(noise) === false) {
366
+ result.mfaCode.push(noise);
367
+ }
368
+ }
369
+ result.mfaCode = shuffle(result.mfaCode);
370
+ }
371
+ const { value, error } = schema.claims[name].validate(result);
372
+ if (error) {
373
+ throw new Error(`Invalid ${name} claim: ${error.message}`);
374
+ }
375
+ return value;
376
+ }));
377
+ }
378
+ async getClaimInfo({ claim, context, extraParams, }) {
379
+ const { userDid, userPk, didwallet } = context;
380
+ const result = typeof claim === 'function'
381
+ ? await claim({
382
+ userDid: userDid ? toAddress(userDid) : '',
383
+ userPk: userPk || '',
384
+ didwallet,
385
+ extraParams,
386
+ context,
387
+ })
388
+ : claim;
389
+ const infoParams = { ...context, ...extraParams };
390
+ const chainInfo = await this.getChainInfo(infoParams, result.chainInfo);
391
+ result.chainInfo = chainInfo;
392
+ return result;
393
+ }
394
+ // Request wallet to sign something: transaction/text/html/image
395
+ async signature({ claim, context, extraParams, }) {
396
+ const { data, type = 'mime:text/plain', digest = '', method = 'sha3', // set this to `none` to instruct wallet not to hash before signing
397
+ wallet, sender, display, description: desc, chainInfo, meta = {}, mfa = false, nonce = '', requirement = { tokens: [], assets: {} }, } = await this.getClaimInfo({
398
+ claim,
399
+ context,
400
+ extraParams,
401
+ });
402
+ debug('claim.signature', { data, digest, type, sender, context, nonce, requirement });
403
+ if (!data && !digest) {
404
+ throw new Error('Signature claim requires either data or digest to be provided');
405
+ }
406
+ const description = desc || 'Sign this transaction to continue.';
407
+ // We have to encode the transaction
408
+ if (type.endsWith('Tx')) {
409
+ if (!chainInfo.host) {
410
+ throw new Error('Invalid chainInfo when trying to encoding transaction');
411
+ }
412
+ const client = new Client(chainInfo.host);
413
+ if (typeof client[`encode${type}`] !== 'function') {
414
+ throw new Error(`Unsupported transaction type ${type}`);
415
+ }
416
+ if (!data.pk) {
417
+ data.pk = context.userPk;
418
+ }
419
+ try {
420
+ const { buffer: txBuffer } = await client[`encode${type}`]({
421
+ tx: data,
422
+ wallet: wallet || fromAddress(sender || context.userDid),
423
+ });
424
+ return {
425
+ type: 'signature',
426
+ description,
427
+ typeUrl: 'fg:t:transaction',
428
+ origin: toBase58(txBuffer),
429
+ method,
430
+ display: WalletAuthenticator.formatDisplay(display),
431
+ digest: '',
432
+ chainInfo,
433
+ meta,
434
+ mfa,
435
+ nonce,
436
+ requirement,
437
+ };
438
+ }
439
+ catch (err) {
440
+ throw new Error(`Failed to encode transaction: ${err.message}`);
441
+ }
442
+ }
443
+ // We have en encoded transaction
444
+ if (type === 'fg:t:transaction') {
445
+ return {
446
+ type: 'signature',
447
+ description,
448
+ typeUrl: 'fg:t:transaction',
449
+ origin: toBase58(data),
450
+ display: WalletAuthenticator.formatDisplay(display),
451
+ method,
452
+ digest: '',
453
+ chainInfo,
454
+ meta,
455
+ mfa,
456
+ nonce,
457
+ requirement,
458
+ };
459
+ }
460
+ // If we are ask user to sign anything just pass the data
461
+ // Wallet should not hash the data if `method` is empty
462
+ // If we are asking user to sign a very large piece of data
463
+ // Just hash the data and show him the digest
464
+ return {
465
+ type: 'signature',
466
+ description: desc || 'Sign this message to continue.',
467
+ origin: data ? toBase58(data) : '',
468
+ typeUrl: type,
469
+ display: WalletAuthenticator.formatDisplay(display),
470
+ method,
471
+ digest,
472
+ chainInfo,
473
+ meta,
474
+ mfa,
475
+ nonce,
476
+ requirement,
477
+ };
478
+ }
479
+ // Request wallet to complete and sign a partial tx to broadcasting
480
+ // Usually used in payment scenarios
481
+ // The wallet can leverage multiple input capabilities of the chain
482
+ async prepareTx({ claim, context, extraParams, }) {
483
+ const { partialTx, requirement = { tokens: [], assets: {} }, type, display, wallet, sender, description: desc, chainInfo, meta = {}, mfa = false, nonce = '', } = await this.getClaimInfo({
484
+ claim,
485
+ context,
486
+ extraParams,
487
+ });
488
+ debug('claim.prepareTx', { partialTx, requirement, type, sender, context });
489
+ if (!partialTx || !requirement) {
490
+ throw new Error('prepareTx claim requires both partialTx and requirement to be provided');
491
+ }
492
+ const description = desc || 'Prepare and sign this transaction to continue.';
493
+ // We have to encode the transaction
494
+ if (type?.endsWith('Tx')) {
495
+ if (!chainInfo.host) {
496
+ throw new Error('Invalid chainInfo when trying to encoding partial transaction');
497
+ }
498
+ const client = new Client(chainInfo.host);
499
+ if (typeof client[`encode${type}`] !== 'function') {
500
+ throw new Error(`Unsupported transaction type ${type} when encoding partial transaction`);
501
+ }
502
+ if (!partialTx.pk) {
503
+ partialTx.pk = context.userPk;
504
+ }
505
+ try {
506
+ const { buffer: txBuffer } = await client[`encode${type}`]({
507
+ tx: partialTx,
508
+ wallet: wallet || fromAddress(sender || context.userDid),
509
+ });
510
+ return {
511
+ type: 'prepareTx',
512
+ description,
513
+ partialTx: toBase58(txBuffer),
514
+ display: WalletAuthenticator.formatDisplay(display),
515
+ requirement,
516
+ chainInfo,
517
+ meta,
518
+ mfa,
519
+ nonce,
520
+ };
521
+ }
522
+ catch (err) {
523
+ throw new Error(`Failed to encode partial transaction: ${err.message}`);
524
+ }
525
+ }
526
+ // We have en encoded transaction
527
+ return {
528
+ type: 'prepareTx',
529
+ description,
530
+ partialTx: toBase58(partialTx),
531
+ requirement,
532
+ display: WalletAuthenticator.formatDisplay(display),
533
+ chainInfo,
534
+ meta,
535
+ mfa,
536
+ nonce,
537
+ };
538
+ }
539
+ _validateAppInfo(info, allowEmpty = false) {
540
+ if (typeof info === 'function') {
541
+ return info;
542
+ }
543
+ if (!info) {
544
+ if (allowEmpty === false) {
545
+ throw new Error('Wallet authenticator can not work with invalid appInfo: empty');
546
+ }
547
+ return null;
548
+ }
549
+ const { value, error } = schema.appInfo.validate(info);
550
+ if (error) {
551
+ throw new Error(`Wallet authenticator can not work with invalid appInfo: ${error.message}`);
552
+ }
553
+ return value;
554
+ }
555
+ _isValidChainInfo(x) {
556
+ const { error } = schema.chainInfo.validate(x);
557
+ return !error;
558
+ }
559
+ tryWithTimeout(asyncFn, label = '') {
560
+ if (typeof asyncFn !== 'function') {
561
+ throw new Error('asyncFn must be a valid function when calling tryWithTimeout');
562
+ }
563
+ const timeout = Number(this.timeout) || DEFAULT_TIMEOUT;
564
+ const inferredLabel = label || asyncFn.name || asyncFn.toString();
565
+ const invocationStack = new Error(`Timeout at: ${inferredLabel}`).stack;
566
+ // biome-ignore lint/suspicious/noAsyncPromiseExecutor: timeout wrapper requires async executor for try/catch around asyncFn
567
+ return new Promise(async (resolve, reject) => {
568
+ const timer = setTimeout(() => {
569
+ const error = new Error(`Async operation (${inferredLabel}) did not complete within ${timeout} ms`);
570
+ error.stack = invocationStack;
571
+ error.name = 'TIMEOUT';
572
+ reject(error);
573
+ }, timeout);
574
+ try {
575
+ const result = await asyncFn();
576
+ resolve(result);
577
+ }
578
+ catch (err) {
579
+ reject(err);
580
+ }
581
+ finally {
582
+ clearTimeout(timer);
583
+ }
584
+ });
585
+ }
586
+ }
587
+ export default WalletAuthenticator;
588
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/authenticator/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { EventEmitter } from 'node:events';
2
+ declare class BaseHandler extends EventEmitter {
3
+ authenticator: any;
4
+ tokenStorage: any;
5
+ pathTransformer: (v: string) => string;
6
+ onConnect: (...args: any[]) => any;
7
+ /**
8
+ * Creates an instance of DID Auth Handlers.
9
+ *
10
+ * @class
11
+ * @param {object} config
12
+ * @param {function} config.pathTransformer - function to transform path when generate action;
13
+ * @param {object} config.tokenStorage - function to generate action token
14
+ * @param {object} config.authenticator - Authenticator instance that can to jwt sign/verify
15
+ * @param {function} [config.onConnect=noop] - function called when wallet selected did
16
+ */
17
+ constructor({ pathTransformer, tokenStorage, authenticator, onConnect, }: {
18
+ pathTransformer?: (v: string) => string;
19
+ tokenStorage: any;
20
+ authenticator: any;
21
+ onConnect?: (...args: any[]) => any;
22
+ });
23
+ }
24
+ export default BaseHandler;
25
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/handlers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,cAAM,WAAY,SAAQ,YAAY;IACpC,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,eAAe,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAEnC;;;;;;;;;OASG;gBACS,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,SAAS,GACV,EAAE;QACD,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;QACxC,YAAY,EAAE,GAAG,CAAC;QAClB,aAAa,EAAE,GAAG,CAAC;QACnB,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;KACrC;CA8BF;AAED,eAAe,WAAW,CAAC"}