@getpara/core-sdk 3.0.0-alpha.1 → 3.1.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.
- package/dist/cjs/ParaCore.js +436 -86
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/cryptography/utils.js +5 -2
- package/dist/cjs/errors.js +10 -0
- package/dist/cjs/external/userManagementClient.js +21 -4
- package/dist/cjs/index.js +67 -1
- package/dist/cjs/services/AuthService.js +66 -47
- package/dist/cjs/services/LoginFlowService.js +30 -27
- package/dist/cjs/services/PollingService.js +100 -75
- package/dist/cjs/services/PortalUrlService.js +112 -19
- package/dist/cjs/services/PregenWalletService.js +125 -76
- package/dist/cjs/services/SessionManagementService.js +81 -10
- package/dist/cjs/services/SignupFlowService.js +52 -47
- package/dist/cjs/services/VerificationFlowService.js +13 -10
- package/dist/cjs/services/WalletService.js +51 -36
- package/dist/cjs/shares/enclave.js +44 -24
- package/dist/cjs/state/CoreStateManager.js +17 -5
- package/dist/cjs/state/actors/setupPara.js +4 -1
- package/dist/cjs/state/machines/walletStateMachine.js +22 -0
- package/dist/cjs/telemetry/BeaconSpanProcessor.js +99 -0
- package/dist/cjs/telemetry/config.js +15 -0
- package/dist/cjs/telemetry/init.js +193 -0
- package/dist/cjs/telemetry/modalSession.js +54 -0
- package/dist/cjs/telemetry/session.js +39 -0
- package/dist/cjs/telemetry/tracer.js +126 -0
- package/dist/cjs/telemetry/uxAction.js +30 -0
- package/dist/cjs/telemetry/uxBaggagePropagator.js +58 -0
- package/dist/cjs/telemetry/uxState.js +46 -0
- package/dist/cjs/telemetry/uxStateSpanProcessor.js +51 -0
- package/dist/cjs/utils/configEncoding.js +98 -0
- package/dist/cjs/utils/deprecation.js +13 -13
- package/dist/cjs/utils/index.js +11 -0
- package/dist/cjs/utils/partnerConfig.js +103 -0
- package/dist/cjs/utils/partnerConfigGating.js +83 -0
- package/dist/cjs/utils/stateErrorHelpers.js +6 -1
- package/dist/cjs/utils/url.js +10 -2
- package/dist/esm/ParaCore.js +441 -88
- package/dist/esm/constants.js +1 -1
- package/dist/esm/cryptography/utils.js +5 -2
- package/dist/esm/errors.js +9 -0
- package/dist/esm/external/userManagementClient.js +21 -4
- package/dist/esm/index.js +58 -4
- package/dist/esm/services/AuthService.js +66 -47
- package/dist/esm/services/LoginFlowService.js +30 -27
- package/dist/esm/services/PollingService.js +100 -75
- package/dist/esm/services/PortalUrlService.js +112 -19
- package/dist/esm/services/PregenWalletService.js +125 -76
- package/dist/esm/services/SessionManagementService.js +69 -11
- package/dist/esm/services/SignupFlowService.js +52 -47
- package/dist/esm/services/VerificationFlowService.js +13 -10
- package/dist/esm/services/WalletService.js +51 -36
- package/dist/esm/shares/enclave.js +44 -24
- package/dist/esm/state/CoreStateManager.js +17 -5
- package/dist/esm/state/actors/setupPara.js +4 -1
- package/dist/esm/state/machines/walletStateMachine.js +22 -0
- package/dist/esm/telemetry/BeaconSpanProcessor.js +74 -0
- package/dist/esm/telemetry/config.js +0 -0
- package/dist/esm/telemetry/init.js +130 -0
- package/dist/esm/telemetry/modalSession.js +29 -0
- package/dist/esm/telemetry/session.js +16 -0
- package/dist/esm/telemetry/tracer.js +84 -0
- package/dist/esm/telemetry/uxAction.js +8 -0
- package/dist/esm/telemetry/uxBaggagePropagator.js +35 -0
- package/dist/esm/telemetry/uxState.js +21 -0
- package/dist/esm/telemetry/uxStateSpanProcessor.js +28 -0
- package/dist/esm/utils/configEncoding.js +45 -0
- package/dist/esm/utils/deprecation.js +11 -12
- package/dist/esm/utils/index.js +6 -0
- package/dist/esm/utils/partnerConfig.js +67 -0
- package/dist/esm/utils/partnerConfigGating.js +61 -0
- package/dist/esm/utils/stateErrorHelpers.js +6 -1
- package/dist/esm/utils/url.js +10 -2
- package/dist/types/ParaCore.d.ts +101 -19
- package/dist/types/PlatformUtils.d.ts +1 -0
- package/dist/types/errors.d.ts +26 -0
- package/dist/types/external/userManagementClient.d.ts +2 -1
- package/dist/types/index.d.ts +15 -3
- package/dist/types/services/types/AuthServiceTypes.d.ts +10 -3
- package/dist/types/services/types/PortalUrlServiceTypes.d.ts +3 -3
- package/dist/types/services/types/WalletServiceTypes.d.ts +4 -0
- package/dist/types/state/actors/setupPara.d.ts +18 -0
- package/dist/types/state/machines/authStateMachine.d.ts +1 -1
- package/dist/types/state/machines/coreStateMachine.d.ts +30 -6
- package/dist/types/state/machines/walletStateMachine.d.ts +4 -0
- package/dist/types/state/types/core.d.ts +7 -1
- package/dist/types/telemetry/BeaconSpanProcessor.d.ts +10 -0
- package/dist/types/telemetry/config.d.ts +4 -0
- package/dist/types/telemetry/init.d.ts +17 -0
- package/dist/types/telemetry/modalSession.d.ts +5 -0
- package/dist/types/telemetry/session.d.ts +2 -0
- package/dist/types/telemetry/tracer.d.ts +10 -0
- package/dist/types/telemetry/uxAction.d.ts +3 -0
- package/dist/types/telemetry/uxBaggagePropagator.d.ts +7 -0
- package/dist/types/telemetry/uxState.d.ts +8 -0
- package/dist/types/telemetry/uxStateSpanProcessor.d.ts +9 -0
- package/dist/types/types/config.d.ts +15 -3
- package/dist/types/types/coreApi.d.ts +7 -9
- package/dist/types/types/serviceInterfaces.d.ts +5 -3
- package/dist/types/types/util.d.ts +2 -15
- package/dist/types/utils/configEncoding.d.ts +51 -0
- package/dist/types/utils/deprecation.d.ts +3 -1
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/partnerConfig.d.ts +28 -0
- package/dist/types/utils/partnerConfigGating.d.ts +48 -0
- package/dist/types/utils/url.d.ts +3 -2
- package/package.json +15 -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
|
|
133
|
+
let recoverySecret;
|
|
134
|
+
let walletIds = {};
|
|
133
135
|
if (pregenWallets.length > 0) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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.
|
|
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 =
|
|
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
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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:
|
|
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,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
4
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
7
|
var __typeError = (msg) => {
|
|
6
8
|
throw TypeError(msg);
|
|
7
9
|
};
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __spreadValues = (a, b) => {
|
|
12
|
+
for (var prop in b || (b = {}))
|
|
13
|
+
if (__hasOwnProp.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols)
|
|
16
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
+
if (__propIsEnum.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
}
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
8
22
|
var __export = (target, all) => {
|
|
9
23
|
for (var name in all)
|
|
10
24
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -48,8 +62,9 @@ __export(SessionManagementService_exports, {
|
|
|
48
62
|
});
|
|
49
63
|
module.exports = __toCommonJS(SessionManagementService_exports);
|
|
50
64
|
var import_wallet = require("../utils/wallet.js");
|
|
51
|
-
var
|
|
52
|
-
|
|
65
|
+
var import_tracer = require("../telemetry/tracer.js");
|
|
66
|
+
var _authService, _portalUrlService, _walletService, _pregenWalletService, _externalWalletService, _paraCoreInterface, _isImportedSession, _regeneratePromise, _touchPromise, _touchCachedAt, _touchCached, _TOUCH_TTL_MS, _handleTouchSessionError, _shouldDedupeTouch, _doTouchSession;
|
|
67
|
+
const _SessionManagementService = class _SessionManagementService {
|
|
53
68
|
constructor(paraCore) {
|
|
54
69
|
__privateAdd(this, _authService);
|
|
55
70
|
__privateAdd(this, _portalUrlService);
|
|
@@ -59,6 +74,21 @@ class SessionManagementService {
|
|
|
59
74
|
__privateAdd(this, _paraCoreInterface);
|
|
60
75
|
__privateAdd(this, _isImportedSession);
|
|
61
76
|
__privateAdd(this, _regeneratePromise);
|
|
77
|
+
// In-flight + short TTL dedupe for touchSession(regenerate=false). Prevents
|
|
78
|
+
// the post-login storm where useIsFullyLoggedIn → isFullyLoggedIn →
|
|
79
|
+
// isSessionActive → touchSession() fires once per render across many
|
|
80
|
+
// consumers (we observed 68 /touch round-trips in a 663ms window during
|
|
81
|
+
// AccountReady). The result is still authoritative — just shared across
|
|
82
|
+
// concurrent and immediately-following callers instead of refetched per call.
|
|
83
|
+
//
|
|
84
|
+
// IMPORTANT: this is disabled in the portal (see #shouldDedupeTouch). The
|
|
85
|
+
// portal reuses this same service and depends on touchSession() running its
|
|
86
|
+
// side-effects (currentWalletIds / partner sync) and returning fresh state on
|
|
87
|
+
// every sequential poll; a previous unconditional version of this cache
|
|
88
|
+
// (eb8e5f843, reverted in 58c8dadd6) broke that portal flow.
|
|
89
|
+
__privateAdd(this, _touchPromise);
|
|
90
|
+
__privateAdd(this, _touchCachedAt);
|
|
91
|
+
__privateAdd(this, _touchCached);
|
|
62
92
|
this.init = ({
|
|
63
93
|
authService,
|
|
64
94
|
portalUrlService,
|
|
@@ -96,14 +126,48 @@ class SessionManagementService {
|
|
|
96
126
|
if (regenerate && __privateGet(this, _regeneratePromise) !== void 0) {
|
|
97
127
|
return __privateGet(this, _regeneratePromise);
|
|
98
128
|
}
|
|
99
|
-
const
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
129
|
+
const dedupe = __privateGet(this, _shouldDedupeTouch).call(this, regenerate);
|
|
130
|
+
if (dedupe) {
|
|
131
|
+
if (__privateGet(this, _touchPromise) !== void 0) {
|
|
132
|
+
return __privateGet(this, _touchPromise);
|
|
133
|
+
}
|
|
134
|
+
if (__privateGet(this, _touchCached) !== void 0 && __privateGet(this, _touchCachedAt) !== void 0 && Date.now() - __privateGet(this, _touchCachedAt) < __privateGet(_SessionManagementService, _TOUCH_TTL_MS)) {
|
|
135
|
+
return __spreadValues({}, __privateGet(this, _touchCached));
|
|
136
|
+
}
|
|
105
137
|
}
|
|
106
|
-
return
|
|
138
|
+
return (0, import_tracer.wrapWithSpan)(
|
|
139
|
+
"session.touch",
|
|
140
|
+
() => __async(this, null, function* () {
|
|
141
|
+
const promise = __privateGet(this, _doTouchSession).call(this, regenerate);
|
|
142
|
+
if (regenerate) {
|
|
143
|
+
__privateSet(this, _regeneratePromise, promise);
|
|
144
|
+
yield promise.finally(() => {
|
|
145
|
+
__privateSet(this, _regeneratePromise, void 0);
|
|
146
|
+
__privateSet(this, _touchCached, void 0);
|
|
147
|
+
__privateSet(this, _touchCachedAt, void 0);
|
|
148
|
+
});
|
|
149
|
+
} else if (dedupe) {
|
|
150
|
+
__privateSet(this, _touchPromise, promise);
|
|
151
|
+
try {
|
|
152
|
+
const result = yield promise;
|
|
153
|
+
if (result.userId) {
|
|
154
|
+
__privateSet(this, _touchCached, result);
|
|
155
|
+
__privateSet(this, _touchCachedAt, Date.now());
|
|
156
|
+
}
|
|
157
|
+
} finally {
|
|
158
|
+
__privateSet(this, _touchPromise, void 0);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return promise;
|
|
162
|
+
}),
|
|
163
|
+
{ "session.regenerate": regenerate }
|
|
164
|
+
);
|
|
165
|
+
});
|
|
166
|
+
// Whether the non-regenerate dedupe/cache should apply. Disabled in the portal,
|
|
167
|
+
// which depends on every touchSession() call running its side-effects and
|
|
168
|
+
// returning fresh session state (see #touchCached docs).
|
|
169
|
+
__privateAdd(this, _shouldDedupeTouch, (regenerate) => {
|
|
170
|
+
return !regenerate && !__privateGet(this, _paraCoreInterface).isPortal();
|
|
107
171
|
});
|
|
108
172
|
__privateAdd(this, _doTouchSession, (regenerate) => __async(this, null, function* () {
|
|
109
173
|
var _a, _b;
|
|
@@ -263,7 +327,7 @@ class SessionManagementService {
|
|
|
263
327
|
set isImportedSession(value) {
|
|
264
328
|
__privateSet(this, _isImportedSession, value);
|
|
265
329
|
}
|
|
266
|
-
}
|
|
330
|
+
};
|
|
267
331
|
_authService = new WeakMap();
|
|
268
332
|
_portalUrlService = new WeakMap();
|
|
269
333
|
_walletService = new WeakMap();
|
|
@@ -272,8 +336,15 @@ _externalWalletService = new WeakMap();
|
|
|
272
336
|
_paraCoreInterface = new WeakMap();
|
|
273
337
|
_isImportedSession = new WeakMap();
|
|
274
338
|
_regeneratePromise = new WeakMap();
|
|
339
|
+
_touchPromise = new WeakMap();
|
|
340
|
+
_touchCachedAt = new WeakMap();
|
|
341
|
+
_touchCached = new WeakMap();
|
|
342
|
+
_TOUCH_TTL_MS = new WeakMap();
|
|
275
343
|
_handleTouchSessionError = new WeakMap();
|
|
344
|
+
_shouldDedupeTouch = new WeakMap();
|
|
276
345
|
_doTouchSession = new WeakMap();
|
|
346
|
+
__privateAdd(_SessionManagementService, _TOUCH_TTL_MS, 1e3);
|
|
347
|
+
let SessionManagementService = _SessionManagementService;
|
|
277
348
|
// Annotate the CommonJS export names for ESM import in node:
|
|
278
349
|
0 && (module.exports = {
|
|
279
350
|
SessionManagementService
|
|
@@ -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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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 });
|