@arcblock/did-connect-js 1.30.0 → 4.0.0-beta.10

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