@getpara/core-sdk 3.0.0-alpha.0 → 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.
- 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 +15 -8
- 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 +46 -26
- 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/config.js +15 -0
- package/dist/cjs/telemetry/init.js +185 -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/formatting.js +5 -0
- 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 +15 -8
- 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 +46 -26
- 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/config.js +0 -0
- package/dist/esm/telemetry/init.js +118 -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/formatting.js +4 -0
- 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/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/formatting.d.ts +1 -0
- 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 +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
|
|
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
|
|
@@ -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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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 });
|
|
@@ -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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
449
|
-
|
|
450
|
-
|
|
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;
|