@getpara/core-sdk 3.0.0-alpha.1 → 3.0.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 (103) hide show
  1. package/dist/cjs/ParaCore.js +436 -86
  2. package/dist/cjs/constants.js +1 -1
  3. package/dist/cjs/cryptography/utils.js +5 -2
  4. package/dist/cjs/errors.js +10 -0
  5. package/dist/cjs/external/userManagementClient.js +21 -4
  6. package/dist/cjs/index.js +67 -1
  7. package/dist/cjs/services/AuthService.js +66 -47
  8. package/dist/cjs/services/LoginFlowService.js +30 -27
  9. package/dist/cjs/services/PollingService.js +100 -75
  10. package/dist/cjs/services/PortalUrlService.js +112 -19
  11. package/dist/cjs/services/PregenWalletService.js +125 -76
  12. package/dist/cjs/services/SessionManagementService.js +15 -8
  13. package/dist/cjs/services/SignupFlowService.js +52 -47
  14. package/dist/cjs/services/VerificationFlowService.js +13 -10
  15. package/dist/cjs/services/WalletService.js +51 -36
  16. package/dist/cjs/shares/enclave.js +44 -24
  17. package/dist/cjs/state/CoreStateManager.js +17 -5
  18. package/dist/cjs/state/actors/setupPara.js +4 -1
  19. package/dist/cjs/state/machines/walletStateMachine.js +22 -0
  20. package/dist/cjs/telemetry/config.js +15 -0
  21. package/dist/cjs/telemetry/init.js +185 -0
  22. package/dist/cjs/telemetry/modalSession.js +54 -0
  23. package/dist/cjs/telemetry/session.js +39 -0
  24. package/dist/cjs/telemetry/tracer.js +126 -0
  25. package/dist/cjs/telemetry/uxAction.js +30 -0
  26. package/dist/cjs/telemetry/uxBaggagePropagator.js +58 -0
  27. package/dist/cjs/telemetry/uxState.js +46 -0
  28. package/dist/cjs/telemetry/uxStateSpanProcessor.js +51 -0
  29. package/dist/cjs/utils/configEncoding.js +98 -0
  30. package/dist/cjs/utils/deprecation.js +13 -13
  31. package/dist/cjs/utils/index.js +11 -0
  32. package/dist/cjs/utils/partnerConfig.js +103 -0
  33. package/dist/cjs/utils/partnerConfigGating.js +83 -0
  34. package/dist/cjs/utils/stateErrorHelpers.js +6 -1
  35. package/dist/cjs/utils/url.js +10 -2
  36. package/dist/esm/ParaCore.js +441 -88
  37. package/dist/esm/constants.js +1 -1
  38. package/dist/esm/cryptography/utils.js +5 -2
  39. package/dist/esm/errors.js +9 -0
  40. package/dist/esm/external/userManagementClient.js +21 -4
  41. package/dist/esm/index.js +58 -4
  42. package/dist/esm/services/AuthService.js +66 -47
  43. package/dist/esm/services/LoginFlowService.js +30 -27
  44. package/dist/esm/services/PollingService.js +100 -75
  45. package/dist/esm/services/PortalUrlService.js +112 -19
  46. package/dist/esm/services/PregenWalletService.js +125 -76
  47. package/dist/esm/services/SessionManagementService.js +15 -8
  48. package/dist/esm/services/SignupFlowService.js +52 -47
  49. package/dist/esm/services/VerificationFlowService.js +13 -10
  50. package/dist/esm/services/WalletService.js +51 -36
  51. package/dist/esm/shares/enclave.js +44 -24
  52. package/dist/esm/state/CoreStateManager.js +17 -5
  53. package/dist/esm/state/actors/setupPara.js +4 -1
  54. package/dist/esm/state/machines/walletStateMachine.js +22 -0
  55. package/dist/esm/telemetry/config.js +0 -0
  56. package/dist/esm/telemetry/init.js +118 -0
  57. package/dist/esm/telemetry/modalSession.js +29 -0
  58. package/dist/esm/telemetry/session.js +16 -0
  59. package/dist/esm/telemetry/tracer.js +84 -0
  60. package/dist/esm/telemetry/uxAction.js +8 -0
  61. package/dist/esm/telemetry/uxBaggagePropagator.js +35 -0
  62. package/dist/esm/telemetry/uxState.js +21 -0
  63. package/dist/esm/telemetry/uxStateSpanProcessor.js +28 -0
  64. package/dist/esm/utils/configEncoding.js +45 -0
  65. package/dist/esm/utils/deprecation.js +11 -12
  66. package/dist/esm/utils/index.js +6 -0
  67. package/dist/esm/utils/partnerConfig.js +67 -0
  68. package/dist/esm/utils/partnerConfigGating.js +61 -0
  69. package/dist/esm/utils/stateErrorHelpers.js +6 -1
  70. package/dist/esm/utils/url.js +10 -2
  71. package/dist/types/ParaCore.d.ts +101 -19
  72. package/dist/types/PlatformUtils.d.ts +1 -0
  73. package/dist/types/errors.d.ts +26 -0
  74. package/dist/types/external/userManagementClient.d.ts +2 -1
  75. package/dist/types/index.d.ts +15 -3
  76. package/dist/types/services/types/AuthServiceTypes.d.ts +10 -3
  77. package/dist/types/services/types/PortalUrlServiceTypes.d.ts +3 -3
  78. package/dist/types/services/types/WalletServiceTypes.d.ts +4 -0
  79. package/dist/types/state/actors/setupPara.d.ts +18 -0
  80. package/dist/types/state/machines/authStateMachine.d.ts +1 -1
  81. package/dist/types/state/machines/coreStateMachine.d.ts +30 -6
  82. package/dist/types/state/machines/walletStateMachine.d.ts +4 -0
  83. package/dist/types/state/types/core.d.ts +7 -1
  84. package/dist/types/telemetry/config.d.ts +4 -0
  85. package/dist/types/telemetry/init.d.ts +17 -0
  86. package/dist/types/telemetry/modalSession.d.ts +5 -0
  87. package/dist/types/telemetry/session.d.ts +2 -0
  88. package/dist/types/telemetry/tracer.d.ts +10 -0
  89. package/dist/types/telemetry/uxAction.d.ts +3 -0
  90. package/dist/types/telemetry/uxBaggagePropagator.d.ts +7 -0
  91. package/dist/types/telemetry/uxState.d.ts +8 -0
  92. package/dist/types/telemetry/uxStateSpanProcessor.d.ts +9 -0
  93. package/dist/types/types/config.d.ts +15 -3
  94. package/dist/types/types/coreApi.d.ts +7 -9
  95. package/dist/types/types/serviceInterfaces.d.ts +5 -3
  96. package/dist/types/types/util.d.ts +2 -15
  97. package/dist/types/utils/configEncoding.d.ts +51 -0
  98. package/dist/types/utils/deprecation.d.ts +3 -1
  99. package/dist/types/utils/index.d.ts +2 -0
  100. package/dist/types/utils/partnerConfig.d.ts +28 -0
  101. package/dist/types/utils/partnerConfigGating.d.ts +48 -0
  102. package/dist/types/utils/url.d.ts +3 -2
  103. package/package.json +14 -4
@@ -70,8 +70,9 @@ var import_utils = require("../utils/index.js");
70
70
  var import_events = require("../types/events.js");
71
71
  var import_shareDistribution = require("../shares/shareDistribution.js");
72
72
  var import_constants = require("../constants.js");
73
+ var import_tracer = require("../telemetry/tracer.js");
73
74
  var import_stateListener = require("../utils/stateListener.js");
74
- var _stateManager, _authService, _walletService, _pollingService, _paraCoreInterface, _isCreateGuestWalletsPending, _fetchOverridePromise;
75
+ var _stateManager, _authService, _walletService, _pollingService, _paraCoreInterface, _isCreateGuestWalletsPending, _fetchOverridePromise, _claimPregenWalletEntities;
75
76
  class PregenWalletService {
76
77
  constructor(paraCore) {
77
78
  __privateAdd(this, _stateManager);
@@ -129,37 +130,50 @@ class PregenWalletService {
129
130
  }
130
131
  const { supportedWalletTypes } = yield __privateGet(this, _paraCoreInterface).assertPartner();
131
132
  const pregenWallets = yield this.getPregenWallets();
132
- let recoverySecret, walletIds = {};
133
+ let recoverySecret;
134
+ let walletIds = {};
133
135
  if (pregenWallets.length > 0) {
134
- try {
135
- const shares = yield __privateGet(this, _paraCoreInterface).ctx.enclaveClient.getPregenShares({
136
- userId: __privateGet(this, _authService).userId,
137
- walletIds: pregenWallets.map((w) => w.id),
138
- partnerId: pregenWallets[0].partnerId
139
- });
140
- for (const share of shares) {
141
- const wallet = pregenWallets.find((w) => w.id === share.walletId);
142
- if (wallet) {
143
- __privateGet(this, _walletService).wallets[wallet.id] = {
144
- id: wallet.id,
145
- address: wallet.address,
146
- scheme: wallet.scheme,
147
- type: wallet.type,
148
- partnerId: wallet.partnerId,
149
- isPregen: wallet.isPregen,
150
- pregenIdentifier: wallet.pregenIdentifier,
151
- pregenIdentifierType: wallet.pregenIdentifierType,
152
- signer: share.signer,
153
- createdAt: String(wallet.createdAt)
154
- };
136
+ let candidates = pregenWallets.filter((w) => {
137
+ var _a;
138
+ return !!((_a = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a.signer);
139
+ });
140
+ if (candidates.length === 0) {
141
+ try {
142
+ const shares = yield __privateGet(this, _paraCoreInterface).ctx.enclaveClient.getPregenShares({
143
+ userId: __privateGet(this, _authService).userId,
144
+ walletIds: pregenWallets.map((w) => w.id),
145
+ partnerId: pregenWallets[0].partnerId
146
+ });
147
+ for (const share of shares) {
148
+ const wallet = pregenWallets.find((w) => w.id === share.walletId);
149
+ if (wallet) {
150
+ __privateGet(this, _walletService).wallets[wallet.id] = {
151
+ id: wallet.id,
152
+ address: wallet.address,
153
+ scheme: wallet.scheme,
154
+ type: wallet.type,
155
+ partnerId: wallet.partnerId,
156
+ isPregen: wallet.isPregen,
157
+ pregenIdentifier: wallet.pregenIdentifier,
158
+ pregenIdentifierType: wallet.pregenIdentifierType,
159
+ signer: share.signer,
160
+ createdAt: String(wallet.createdAt)
161
+ };
162
+ }
155
163
  }
164
+ } catch (err) {
165
+ console.warn("[performClaimPregenWallets] Failed to fetch pregen shares:", err);
156
166
  }
157
- } catch (err) {
158
- console.warn("[performClaimPregenWallets] Failed to fetch pregen shares:", err);
167
+ candidates = pregenWallets.filter((w) => {
168
+ var _a;
169
+ return !!((_a = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a.signer);
170
+ });
159
171
  }
160
- recoverySecret = yield this.claimPregenWallets();
172
+ const { recoverySecret: claimRecoverySecret, claimedWalletIds } = yield __privateGet(this, _claimPregenWalletEntities).call(this, candidates);
173
+ recoverySecret = claimRecoverySecret;
174
+ const claimed = candidates.filter((w) => claimedWalletIds.includes(w.id));
161
175
  walletIds = supportedWalletTypes.reduce((acc, { type }) => {
162
- const wallet = pregenWallets.find((w) => !!import_wallet2.WalletSchemeTypeMap[w.scheme][type]);
176
+ const wallet = claimed.find((w) => !!import_wallet2.WalletSchemeTypeMap[w.scheme][type]);
163
177
  if (!wallet) {
164
178
  return acc;
165
179
  }
@@ -173,48 +187,76 @@ class PregenWalletService {
173
187
  return resp;
174
188
  });
175
189
  this.claimPregenWallets = (..._0) => __async(this, [..._0], function* ({ pregenId } = {}) {
176
- var _a;
177
190
  __privateGet(this, _paraCoreInterface).requireApiKey();
178
191
  const pregenWallets = pregenId ? yield this.getPregenWallets({ pregenId }) : yield this.getPregenWallets();
179
192
  if (pregenWallets.length === 0) {
180
193
  return void 0;
181
194
  }
182
- const missingWallets = pregenWallets.filter((wallet) => !__privateGet(this, _walletService).wallets[wallet.id]);
183
- if (missingWallets.length > 0) {
184
- throw new Error(
185
- `Cannot claim pregen wallets because wallet data is missing. Please call setUserShare first to load the wallet data for the following wallet IDs: ${missingWallets.map((w) => w.id).join(", ")}`
195
+ const { recoverySecret } = yield __privateGet(this, _claimPregenWalletEntities).call(this, pregenWallets);
196
+ return recoverySecret;
197
+ });
198
+ // Claims only the pregen entities for which the SDK has local signer
199
+ // material. Wallets without signer material are skipped (warned, not
200
+ // thrown) so a stale/duplicate backend row cannot block login.
201
+ // Returns the wallet IDs the backend confirmed claiming so callers can
202
+ // surface only confirmed wallets.
203
+ __privateAdd(this, _claimPregenWalletEntities, (pregenWallets) => __async(this, null, function* () {
204
+ var _a;
205
+ const claimable = pregenWallets.filter((w) => {
206
+ var _a2;
207
+ return !!((_a2 = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a2.signer);
208
+ });
209
+ const skipped = pregenWallets.filter((w) => {
210
+ var _a2;
211
+ return !((_a2 = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a2.signer);
212
+ });
213
+ if (skipped.length > 0) {
214
+ console.warn(
215
+ "[claimPregenWallets] Skipping pregen wallets without local share material:",
216
+ skipped.map((w) => w.id)
186
217
  );
187
218
  }
219
+ if (claimable.length === 0) {
220
+ return { recoverySecret: void 0, claimedWalletIds: [] };
221
+ }
188
222
  let newRecoverySecret;
189
223
  const { walletIds } = yield __privateGet(this, _paraCoreInterface).ctx.client.claimPregenWallets({
190
224
  userId: __privateGet(this, _authService).userId,
191
- walletIds: pregenWallets.map((w) => w.id)
225
+ walletIds: claimable.map((w) => w.id)
192
226
  });
193
227
  for (const walletId of walletIds) {
194
228
  const wallet = __privateGet(this, _walletService).wallets[walletId];
195
229
  let refreshedShare;
196
230
  if (wallet.scheme === "ED25519") {
197
- const distributeRes = yield (0, import_shareDistribution.distributeNewShare)({
198
- ctx: __privateGet(this, _paraCoreInterface).ctx,
199
- userId: __privateGet(this, _authService).userId,
200
- walletId: wallet.id,
201
- userShare: __privateGet(this, _walletService).wallets[wallet.id].signer,
202
- emailProps: __privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
203
- partnerId: wallet.partnerId,
204
- isEnclaveUser: __privateGet(this, _authService).isEnclaveUser,
205
- walletScheme: wallet.scheme
206
- });
231
+ const distributeRes = yield (0, import_tracer.wrapWithSpan)(
232
+ "mpc.claim",
233
+ () => (0, import_shareDistribution.distributeNewShare)({
234
+ ctx: __privateGet(this, _paraCoreInterface).ctx,
235
+ userId: __privateGet(this, _authService).userId,
236
+ walletId: wallet.id,
237
+ userShare: __privateGet(this, _walletService).wallets[wallet.id].signer,
238
+ emailProps: __privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
239
+ partnerId: wallet.partnerId,
240
+ isEnclaveUser: __privateGet(this, _authService).isEnclaveUser,
241
+ walletScheme: wallet.scheme
242
+ }),
243
+ { "wallet.id": wallet.id, "wallet.scheme": "ED25519" }
244
+ );
207
245
  if (distributeRes.length > 0) {
208
246
  newRecoverySecret = distributeRes;
209
247
  }
210
248
  } else {
211
- refreshedShare = yield __privateGet(this, _walletService).refreshShare({
212
- walletId: wallet.id,
213
- share: __privateGet(this, _walletService).wallets[wallet.id].signer,
214
- oldPartnerId: wallet.partnerId,
215
- newPartnerId: wallet.partnerId,
216
- redistributeBackupEncryptedShares: true
217
- });
249
+ refreshedShare = yield (0, import_tracer.wrapWithSpan)(
250
+ "mpc.claim",
251
+ () => __privateGet(this, _walletService).refreshShare({
252
+ walletId: wallet.id,
253
+ share: __privateGet(this, _walletService).wallets[wallet.id].signer,
254
+ oldPartnerId: wallet.partnerId,
255
+ newPartnerId: wallet.partnerId,
256
+ redistributeBackupEncryptedShares: true
257
+ }),
258
+ { "wallet.id": wallet.id, "wallet.scheme": wallet.scheme }
259
+ );
218
260
  if (refreshedShare.recoverySecret) {
219
261
  newRecoverySecret = refreshedShare.recoverySecret;
220
262
  }
@@ -233,8 +275,8 @@ class PregenWalletService {
233
275
  });
234
276
  }
235
277
  yield __privateGet(this, _walletService).setWallets(__privateGet(this, _walletService).wallets);
236
- return newRecoverySecret;
237
- });
278
+ return { recoverySecret: newRecoverySecret, claimedWalletIds: walletIds };
279
+ }));
238
280
  this.getPregenWallets = (..._0) => __async(this, [..._0], function* ({ pregenId } = {}) {
239
281
  const pregenIds = pregenId ? (0, import_user_management_client.toPregenIds)(pregenId) : this.pregenIds;
240
282
  if (!pregenIds || Object.keys(pregenIds).length === 0) {
@@ -266,30 +308,36 @@ class PregenWalletService {
266
308
  _type != null ? _type : (_b = supportedWalletTypes.find(({ optional }) => !optional)) == null ? void 0 : _b.type
267
309
  );
268
310
  const [pregenIdentifierType, pregenIdentifier] = (0, import_user_management_client.toPregenTypeAndId)(pregenId);
269
- let keygenRes;
270
- switch (walletType) {
271
- case "STELLAR":
272
- case "SOLANA":
273
- keygenRes = yield __privateGet(this, _paraCoreInterface).platformUtils.ed25519PreKeygen(
274
- __privateGet(this, _paraCoreInterface).ctx,
275
- pregenIdentifier,
276
- pregenIdentifierType,
277
- __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
278
- walletType
279
- );
280
- break;
281
- default:
282
- keygenRes = yield __privateGet(this, _paraCoreInterface).platformUtils.preKeygen(
283
- __privateGet(this, _paraCoreInterface).ctx,
284
- void 0,
285
- pregenIdentifier,
286
- pregenIdentifierType,
287
- walletType,
288
- null,
289
- __privateGet(this, _paraCoreInterface).retrieveSessionCookie()
290
- );
291
- break;
292
- }
311
+ const keygenRes = yield (0, import_tracer.wrapWithSpan)(
312
+ "mpc.keygen",
313
+ () => __async(this, null, function* () {
314
+ switch (walletType) {
315
+ case "STELLAR":
316
+ case "SOLANA":
317
+ return __privateGet(this, _paraCoreInterface).platformUtils.ed25519PreKeygen(
318
+ __privateGet(this, _paraCoreInterface).ctx,
319
+ pregenIdentifier,
320
+ pregenIdentifierType,
321
+ __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
322
+ walletType
323
+ );
324
+ default:
325
+ return __privateGet(this, _paraCoreInterface).platformUtils.preKeygen(
326
+ __privateGet(this, _paraCoreInterface).ctx,
327
+ void 0,
328
+ pregenIdentifier,
329
+ pregenIdentifierType,
330
+ walletType,
331
+ null,
332
+ __privateGet(this, _paraCoreInterface).retrieveSessionCookie()
333
+ );
334
+ }
335
+ }),
336
+ {
337
+ "wallet.type": walletType,
338
+ "wallet.scheme": walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS"
339
+ }
340
+ );
293
341
  const { signer, walletId } = keygenRes;
294
342
  __privateGet(this, _walletService).wallets[walletId] = {
295
343
  id: walletId,
@@ -438,6 +486,7 @@ _pollingService = new WeakMap();
438
486
  _paraCoreInterface = new WeakMap();
439
487
  _isCreateGuestWalletsPending = new WeakMap();
440
488
  _fetchOverridePromise = new WeakMap();
489
+ _claimPregenWalletEntities = new WeakMap();
441
490
  // Annotate the CommonJS export names for ESM import in node:
442
491
  0 && (module.exports = {
443
492
  PregenWalletService
@@ -48,6 +48,7 @@ __export(SessionManagementService_exports, {
48
48
  });
49
49
  module.exports = __toCommonJS(SessionManagementService_exports);
50
50
  var import_wallet = require("../utils/wallet.js");
51
+ var import_tracer = require("../telemetry/tracer.js");
51
52
  var _authService, _portalUrlService, _walletService, _pregenWalletService, _externalWalletService, _paraCoreInterface, _isImportedSession, _regeneratePromise, _handleTouchSessionError, _doTouchSession;
52
53
  class SessionManagementService {
53
54
  constructor(paraCore) {
@@ -96,14 +97,20 @@ class SessionManagementService {
96
97
  if (regenerate && __privateGet(this, _regeneratePromise) !== void 0) {
97
98
  return __privateGet(this, _regeneratePromise);
98
99
  }
99
- const promise = __privateGet(this, _doTouchSession).call(this, regenerate);
100
- if (regenerate) {
101
- __privateSet(this, _regeneratePromise, promise);
102
- yield promise.finally(() => {
103
- __privateSet(this, _regeneratePromise, void 0);
104
- });
105
- }
106
- return promise;
100
+ return (0, import_tracer.wrapWithSpan)(
101
+ "session.touch",
102
+ () => __async(this, null, function* () {
103
+ const promise = __privateGet(this, _doTouchSession).call(this, regenerate);
104
+ if (regenerate) {
105
+ __privateSet(this, _regeneratePromise, promise);
106
+ yield promise.finally(() => {
107
+ __privateSet(this, _regeneratePromise, void 0);
108
+ });
109
+ }
110
+ return promise;
111
+ }),
112
+ { "session.regenerate": regenerate }
113
+ );
107
114
  });
108
115
  __privateAdd(this, _doTouchSession, (regenerate) => __async(this, null, function* () {
109
116
  var _a, _b;
@@ -75,6 +75,7 @@ var import_types = require("../types/index.js");
75
75
  var import_utils = require("../utils/index.js");
76
76
  var import_stateErrorHelpers = require("../utils/stateErrorHelpers.js");
77
77
  var import_stateListener = require("../utils/stateListener.js");
78
+ var import_tracer = require("../telemetry/tracer.js");
78
79
  class SignupFlowService extends import_BaseAuthFlowService.BaseAuthFlowService {
79
80
  constructor() {
80
81
  super(...arguments);
@@ -139,58 +140,62 @@ class SignupFlowService extends import_BaseAuthFlowService.BaseAuthFlowService {
139
140
  return signupState;
140
141
  });
141
142
  this.waitForSignup = (_0) => __async(this, [_0], function* ({ isCanceled = () => false, onCancel, onPoll }) {
142
- this.stateManager.send({
143
- type: "WAIT_FOR_SESSION",
144
- data: {
145
- onCancel,
146
- onPoll,
147
- isCanceled
148
- }
149
- });
150
- return yield (0, import_stateListener.waitForAuthStateChange)({
151
- stateManager: this.stateManager,
152
- resolvePhases: [
153
- {
154
- phase: "authenticated",
155
- onPhase: () => {
156
- (0, import_utils.dispatchEvent)(import_types.ParaEvent.ACCOUNT_CREATION_EVENT, true);
157
- return true;
158
- }
143
+ return (0, import_tracer.wrapWithSpan)("auth.signup_wait", () => __async(this, null, function* () {
144
+ this.stateManager.send({
145
+ type: "WAIT_FOR_SESSION",
146
+ data: {
147
+ onCancel,
148
+ onPoll,
149
+ isCanceled
159
150
  }
160
- ],
161
- onReject: (state) => {
162
- var _a;
163
- (_a = import_utils.dispatchEvent) == null ? void 0 : _a(import_types.ParaEvent.ACCOUNT_CREATION_EVENT, {}, (0, import_stateErrorHelpers.extractErrorMessage)(state.error, "failed to sign up user"));
164
- },
165
- waitForCoreAuthenticated: false
166
- });
151
+ });
152
+ return yield (0, import_stateListener.waitForAuthStateChange)({
153
+ stateManager: this.stateManager,
154
+ resolvePhases: [
155
+ {
156
+ phase: "authenticated",
157
+ onPhase: () => {
158
+ (0, import_utils.dispatchEvent)(import_types.ParaEvent.ACCOUNT_CREATION_EVENT, true);
159
+ return true;
160
+ }
161
+ }
162
+ ],
163
+ onReject: (state) => {
164
+ var _a;
165
+ (_a = import_utils.dispatchEvent) == null ? void 0 : _a(import_types.ParaEvent.ACCOUNT_CREATION_EVENT, {}, (0, import_stateErrorHelpers.extractErrorMessage)(state.error, "failed to sign up user"));
166
+ },
167
+ waitForCoreAuthenticated: false
168
+ });
169
+ }));
167
170
  });
168
171
  this.waitForWalletCreation = (..._0) => __async(this, [..._0], function* ({ isCanceled = () => false, onCancel, onPoll } = {}) {
169
- this.stateManager.send({
170
- type: "WAIT_FOR_WALLET_CREATION",
171
- data: {
172
- onCancel,
173
- onPoll,
174
- isCanceled
175
- }
176
- });
177
- return yield (0, import_stateListener.waitForCoreStateChange)({
178
- stateManager: this.stateManager,
179
- resolvePhases: [
180
- {
181
- phase: "authenticated",
182
- onPhase: (state) => {
183
- const resp = state.newWalletsResult;
184
- (0, import_utils.dispatchEvent)(import_types.ParaEvent.ACCOUNT_SETUP_EVENT, resp);
185
- return resp;
172
+ return (0, import_tracer.wrapWithSpan)("wallet.creation_wait", () => __async(this, null, function* () {
173
+ this.stateManager.send({
174
+ type: "WAIT_FOR_WALLET_CREATION",
175
+ data: {
176
+ onCancel,
177
+ onPoll,
178
+ isCanceled
179
+ }
180
+ });
181
+ return yield (0, import_stateListener.waitForCoreStateChange)({
182
+ stateManager: this.stateManager,
183
+ resolvePhases: [
184
+ {
185
+ phase: "authenticated",
186
+ onPhase: (state) => {
187
+ const resp = state.newWalletsResult;
188
+ (0, import_utils.dispatchEvent)(import_types.ParaEvent.ACCOUNT_SETUP_EVENT, resp);
189
+ return resp;
190
+ }
186
191
  }
192
+ ],
193
+ onReject: (state) => {
194
+ var _a;
195
+ (_a = import_utils.dispatchEvent) == null ? void 0 : _a(import_types.ParaEvent.ACCOUNT_SETUP_EVENT, {}, (0, import_stateErrorHelpers.extractErrorMessage)(state.error, "failed to sign up user"));
187
196
  }
188
- ],
189
- onReject: (state) => {
190
- var _a;
191
- (_a = import_utils.dispatchEvent) == null ? void 0 : _a(import_types.ParaEvent.ACCOUNT_SETUP_EVENT, {}, (0, import_stateErrorHelpers.extractErrorMessage)(state.error, "failed to sign up user"));
192
- }
193
- });
197
+ });
198
+ }));
194
199
  });
195
200
  }
196
201
  }
@@ -70,6 +70,7 @@ var import_user_management_client = require("@getpara/user-management-client");
70
70
  var import_BaseAuthFlowService = require("./BaseAuthFlowService.js");
71
71
  var import_constants = require("../constants.js");
72
72
  var import_stateListener = require("../utils/stateListener.js");
73
+ var import_tracer = require("../telemetry/tracer.js");
73
74
  class VerificationFlowService extends import_BaseAuthFlowService.BaseAuthFlowService {
74
75
  constructor() {
75
76
  super(...arguments);
@@ -101,16 +102,18 @@ class VerificationFlowService extends import_BaseAuthFlowService.BaseAuthFlowSer
101
102
  return __spreadValues(__spreadValues({}, serverAuthState), loginUrl ? { loginUrl, loginFullUrl } : {});
102
103
  });
103
104
  this.performVerifyNewAccount = (params) => __async(this, null, function* () {
104
- this.services.authService.assertIsAuthSet(["email", "phone"]);
105
- const _a = params, { verificationCode } = _a, urlOptions = __objRest(_a, ["verificationCode"]);
106
- const serverAuthState = yield this.paraCoreInterface.ctx.client.verifyAccount(this.services.authService.userId, {
107
- verificationCode
108
- });
109
- if (serverAuthState.stage === "login" || serverAuthState.stage === "done") {
110
- throw new Error("Account already exists.");
111
- }
112
- yield this.services.sessionManagementService.touchSession(true);
113
- return { authState: serverAuthState, opts: urlOptions };
105
+ return (0, import_tracer.wrapWithSpan)("verification.verify_otp", () => __async(this, null, function* () {
106
+ this.services.authService.assertIsAuthSet(["email", "phone"]);
107
+ const _a = params, { verificationCode } = _a, urlOptions = __objRest(_a, ["verificationCode"]);
108
+ const serverAuthState = yield this.paraCoreInterface.ctx.client.verifyAccount(this.services.authService.userId, {
109
+ verificationCode
110
+ });
111
+ if (serverAuthState.stage === "login" || serverAuthState.stage === "done") {
112
+ throw new Error("Account already exists.");
113
+ }
114
+ yield this.services.sessionManagementService.touchSession(true);
115
+ return { authState: serverAuthState, opts: urlOptions };
116
+ }));
114
117
  });
115
118
  this.verifyNewAccount = (params) => __async(this, null, function* () {
116
119
  this.stateManager.send({ type: "VERIFY_NEW_ACCOUNT", data: params });
@@ -83,6 +83,7 @@ var import_events = require("../types/events.js");
83
83
  var import_constants = require("../constants.js");
84
84
  var import_shareDistribution = require("../shares/shareDistribution.js");
85
85
  var import_recovery = require("../shares/recovery.js");
86
+ var import_tracer = require("../telemetry/tracer.js");
86
87
  var _authService, _pollingService, _pregenWalletService, _externalWalletService, _paraCoreInterface, _wallets, _currentWalletIds, _isWalletOwned, _getMissingTypes, _encodeWalletBase64;
87
88
  class WalletService {
88
89
  constructor(paraCore) {
@@ -164,15 +165,20 @@ class WalletService {
164
165
  }
165
166
  });
166
167
  });
168
+ // wallets.populate names the GET /users/:userId/wallets call that runs to
169
+ // refresh address state after creation/refresh; without it the GET shows up
170
+ // as a bare span at the trace top level.
167
171
  this.populateWalletAddresses = () => __async(this, null, function* () {
168
- const res = yield (__privateGet(this, _paraCoreInterface).isPortal() ? __privateGet(this, _paraCoreInterface).ctx.client.getAllWallets : __privateGet(this, _paraCoreInterface).ctx.client.getWallets)(__privateGet(this, _authService).userId, true);
169
- const wallets = res.data.wallets;
170
- wallets.forEach((entity) => {
171
- if (this.wallets[entity.id]) {
172
- this.wallets[entity.id] = __spreadValues(__spreadValues({}, (0, import_wallet2.entityToWallet)(entity)), this.wallets[entity.id]);
173
- }
174
- });
175
- yield this.setWallets(this.wallets);
172
+ return (0, import_tracer.wrapWithSpan)("wallets.populate", () => __async(this, null, function* () {
173
+ const res = yield (__privateGet(this, _paraCoreInterface).isPortal() ? __privateGet(this, _paraCoreInterface).ctx.client.getAllWallets : __privateGet(this, _paraCoreInterface).ctx.client.getWallets)(__privateGet(this, _authService).userId, true);
174
+ const wallets = res.data.wallets;
175
+ wallets.forEach((entity) => {
176
+ if (this.wallets[entity.id]) {
177
+ this.wallets[entity.id] = __spreadValues(__spreadValues({}, (0, import_wallet2.entityToWallet)(entity)), this.wallets[entity.id]);
178
+ }
179
+ });
180
+ yield this.setWallets(this.wallets);
181
+ }));
176
182
  });
177
183
  this.addToCurrentWalletIds = (walletIds, options) => __async(this, null, function* () {
178
184
  const updatedWalletIds = __spreadValues({}, this.currentWalletIds);
@@ -212,31 +218,35 @@ class WalletService {
212
218
  );
213
219
  let signer;
214
220
  let wallet;
215
- let keygenRes;
216
- switch (walletType) {
217
- case "STELLAR":
218
- case "SOLANA": {
219
- keygenRes = yield __privateGet(this, _paraCoreInterface).platformUtils.ed25519Keygen(
220
- __privateGet(this, _paraCoreInterface).ctx,
221
- __privateGet(this, _authService).userId,
222
- __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
223
- __privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
224
- walletType
225
- );
226
- break;
227
- }
228
- default: {
229
- keygenRes = yield __privateGet(this, _paraCoreInterface).platformUtils.keygen(
230
- __privateGet(this, _paraCoreInterface).ctx,
231
- __privateGet(this, _authService).userId,
232
- walletType,
233
- null,
234
- __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
235
- __privateGet(this, _paraCoreInterface).getBackupKitEmailProps()
236
- );
237
- break;
221
+ const keygenRes = yield (0, import_tracer.wrapWithSpan)(
222
+ "mpc.keygen",
223
+ () => __async(this, null, function* () {
224
+ switch (walletType) {
225
+ case "STELLAR":
226
+ case "SOLANA":
227
+ return __privateGet(this, _paraCoreInterface).platformUtils.ed25519Keygen(
228
+ __privateGet(this, _paraCoreInterface).ctx,
229
+ __privateGet(this, _authService).userId,
230
+ __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
231
+ __privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
232
+ walletType
233
+ );
234
+ default:
235
+ return __privateGet(this, _paraCoreInterface).platformUtils.keygen(
236
+ __privateGet(this, _paraCoreInterface).ctx,
237
+ __privateGet(this, _authService).userId,
238
+ walletType,
239
+ null,
240
+ __privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
241
+ __privateGet(this, _paraCoreInterface).getBackupKitEmailProps()
242
+ );
243
+ }
244
+ }),
245
+ {
246
+ "wallet.type": walletType,
247
+ "wallet.scheme": walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS"
238
248
  }
239
- }
249
+ );
240
250
  const walletId = keygenRes.walletId;
241
251
  const walletScheme = walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS";
242
252
  signer = keygenRes.signer;
@@ -444,11 +454,16 @@ class WalletService {
444
454
  }
445
455
  return type;
446
456
  });
457
+ // wallets.fetch names the post-keygen wallet list reads (the polling-style
458
+ // GETs that follow each MPC keygen). The auto-instrumented HTTP child carries
459
+ // the URL and status so this stays cheap.
447
460
  this.fetchWallets = () => __async(this, null, function* () {
448
- const res = yield __privateGet(this, _paraCoreInterface).isPortal() || __privateGet(this, _paraCoreInterface).isParaConnect() ? __privateGet(this, _paraCoreInterface).ctx.client.getAllWallets(__privateGet(this, _authService).userId) : __privateGet(this, _paraCoreInterface).ctx.client.getWallets(__privateGet(this, _authService).userId, true);
449
- return res.data.wallets.filter(
450
- (wallet) => !!wallet.address && wallet.sharesPersisted && (__privateGet(this, _paraCoreInterface).isParaConnect() || !__privateGet(this, _paraCoreInterface).isParaConnect() && this.isWalletSupported((0, import_wallet2.entityToWallet)(wallet)))
451
- );
461
+ return (0, import_tracer.wrapWithSpan)("wallets.fetch", () => __async(this, null, function* () {
462
+ const res = yield __privateGet(this, _paraCoreInterface).isPortal() || __privateGet(this, _paraCoreInterface).isParaConnect() ? __privateGet(this, _paraCoreInterface).ctx.client.getAllWallets(__privateGet(this, _authService).userId) : __privateGet(this, _paraCoreInterface).ctx.client.getWallets(__privateGet(this, _authService).userId, true);
463
+ return res.data.wallets.filter(
464
+ (wallet) => !!wallet.address && wallet.sharesPersisted && (__privateGet(this, _paraCoreInterface).isParaConnect() || !__privateGet(this, _paraCoreInterface).isParaConnect() && this.isWalletSupported((0, import_wallet2.entityToWallet)(wallet)))
465
+ );
466
+ }));
452
467
  });
453
468
  this.getWalletBalance = (_0) => __async(this, [_0], function* ({ walletId, rpcUrl }) {
454
469
  return (yield __privateGet(this, _paraCoreInterface).ctx.client.getWalletBalance({ walletId, rpcUrl })).balance;