@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
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
__spreadProps,
|
|
7
7
|
__spreadValues
|
|
8
8
|
} from "../chunk-7B52C2XE.js";
|
|
9
|
-
var _stateManager, _authService, _walletService, _pollingService, _paraCoreInterface, _isCreateGuestWalletsPending, _fetchOverridePromise;
|
|
9
|
+
var _stateManager, _authService, _walletService, _pollingService, _paraCoreInterface, _isCreateGuestWalletsPending, _fetchOverridePromise, _claimPregenWalletEntities;
|
|
10
10
|
import {
|
|
11
11
|
isPregenAuth,
|
|
12
12
|
toPregenIds,
|
|
@@ -23,6 +23,7 @@ import { dispatchEvent } from "../utils/index.js";
|
|
|
23
23
|
import { ParaEvent } from "../types/events.js";
|
|
24
24
|
import { distributeNewShare } from "../shares/shareDistribution.js";
|
|
25
25
|
import { SHORT_POLLING_INTERVAL_MS } from "../constants.js";
|
|
26
|
+
import { wrapWithSpan } from "../telemetry/tracer.js";
|
|
26
27
|
import { waitForCoreStateChange } from "../utils/stateListener.js";
|
|
27
28
|
class PregenWalletService {
|
|
28
29
|
constructor(paraCore) {
|
|
@@ -81,37 +82,50 @@ class PregenWalletService {
|
|
|
81
82
|
}
|
|
82
83
|
const { supportedWalletTypes } = yield __privateGet(this, _paraCoreInterface).assertPartner();
|
|
83
84
|
const pregenWallets = yield this.getPregenWallets();
|
|
84
|
-
let recoverySecret
|
|
85
|
+
let recoverySecret;
|
|
86
|
+
let walletIds = {};
|
|
85
87
|
if (pregenWallets.length > 0) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
88
|
+
let candidates = pregenWallets.filter((w) => {
|
|
89
|
+
var _a;
|
|
90
|
+
return !!((_a = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a.signer);
|
|
91
|
+
});
|
|
92
|
+
if (candidates.length === 0) {
|
|
93
|
+
try {
|
|
94
|
+
const shares = yield __privateGet(this, _paraCoreInterface).ctx.enclaveClient.getPregenShares({
|
|
95
|
+
userId: __privateGet(this, _authService).userId,
|
|
96
|
+
walletIds: pregenWallets.map((w) => w.id),
|
|
97
|
+
partnerId: pregenWallets[0].partnerId
|
|
98
|
+
});
|
|
99
|
+
for (const share of shares) {
|
|
100
|
+
const wallet = pregenWallets.find((w) => w.id === share.walletId);
|
|
101
|
+
if (wallet) {
|
|
102
|
+
__privateGet(this, _walletService).wallets[wallet.id] = {
|
|
103
|
+
id: wallet.id,
|
|
104
|
+
address: wallet.address,
|
|
105
|
+
scheme: wallet.scheme,
|
|
106
|
+
type: wallet.type,
|
|
107
|
+
partnerId: wallet.partnerId,
|
|
108
|
+
isPregen: wallet.isPregen,
|
|
109
|
+
pregenIdentifier: wallet.pregenIdentifier,
|
|
110
|
+
pregenIdentifierType: wallet.pregenIdentifierType,
|
|
111
|
+
signer: share.signer,
|
|
112
|
+
createdAt: String(wallet.createdAt)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
107
115
|
}
|
|
116
|
+
} catch (err) {
|
|
117
|
+
console.warn("[performClaimPregenWallets] Failed to fetch pregen shares:", err);
|
|
108
118
|
}
|
|
109
|
-
|
|
110
|
-
|
|
119
|
+
candidates = pregenWallets.filter((w) => {
|
|
120
|
+
var _a;
|
|
121
|
+
return !!((_a = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a.signer);
|
|
122
|
+
});
|
|
111
123
|
}
|
|
112
|
-
recoverySecret = yield this.
|
|
124
|
+
const { recoverySecret: claimRecoverySecret, claimedWalletIds } = yield __privateGet(this, _claimPregenWalletEntities).call(this, candidates);
|
|
125
|
+
recoverySecret = claimRecoverySecret;
|
|
126
|
+
const claimed = candidates.filter((w) => claimedWalletIds.includes(w.id));
|
|
113
127
|
walletIds = supportedWalletTypes.reduce((acc, { type }) => {
|
|
114
|
-
const wallet =
|
|
128
|
+
const wallet = claimed.find((w) => !!WalletSchemeTypeMap[w.scheme][type]);
|
|
115
129
|
if (!wallet) {
|
|
116
130
|
return acc;
|
|
117
131
|
}
|
|
@@ -125,48 +139,76 @@ class PregenWalletService {
|
|
|
125
139
|
return resp;
|
|
126
140
|
});
|
|
127
141
|
this.claimPregenWallets = (..._0) => __async(this, [..._0], function* ({ pregenId } = {}) {
|
|
128
|
-
var _a;
|
|
129
142
|
__privateGet(this, _paraCoreInterface).requireApiKey();
|
|
130
143
|
const pregenWallets = pregenId ? yield this.getPregenWallets({ pregenId }) : yield this.getPregenWallets();
|
|
131
144
|
if (pregenWallets.length === 0) {
|
|
132
145
|
return void 0;
|
|
133
146
|
}
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
147
|
+
const { recoverySecret } = yield __privateGet(this, _claimPregenWalletEntities).call(this, pregenWallets);
|
|
148
|
+
return recoverySecret;
|
|
149
|
+
});
|
|
150
|
+
// Claims only the pregen entities for which the SDK has local signer
|
|
151
|
+
// material. Wallets without signer material are skipped (warned, not
|
|
152
|
+
// thrown) so a stale/duplicate backend row cannot block login.
|
|
153
|
+
// Returns the wallet IDs the backend confirmed claiming so callers can
|
|
154
|
+
// surface only confirmed wallets.
|
|
155
|
+
__privateAdd(this, _claimPregenWalletEntities, (pregenWallets) => __async(this, null, function* () {
|
|
156
|
+
var _a;
|
|
157
|
+
const claimable = pregenWallets.filter((w) => {
|
|
158
|
+
var _a2;
|
|
159
|
+
return !!((_a2 = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a2.signer);
|
|
160
|
+
});
|
|
161
|
+
const skipped = pregenWallets.filter((w) => {
|
|
162
|
+
var _a2;
|
|
163
|
+
return !((_a2 = __privateGet(this, _walletService).wallets[w.id]) == null ? void 0 : _a2.signer);
|
|
164
|
+
});
|
|
165
|
+
if (skipped.length > 0) {
|
|
166
|
+
console.warn(
|
|
167
|
+
"[claimPregenWallets] Skipping pregen wallets without local share material:",
|
|
168
|
+
skipped.map((w) => w.id)
|
|
138
169
|
);
|
|
139
170
|
}
|
|
171
|
+
if (claimable.length === 0) {
|
|
172
|
+
return { recoverySecret: void 0, claimedWalletIds: [] };
|
|
173
|
+
}
|
|
140
174
|
let newRecoverySecret;
|
|
141
175
|
const { walletIds } = yield __privateGet(this, _paraCoreInterface).ctx.client.claimPregenWallets({
|
|
142
176
|
userId: __privateGet(this, _authService).userId,
|
|
143
|
-
walletIds:
|
|
177
|
+
walletIds: claimable.map((w) => w.id)
|
|
144
178
|
});
|
|
145
179
|
for (const walletId of walletIds) {
|
|
146
180
|
const wallet = __privateGet(this, _walletService).wallets[walletId];
|
|
147
181
|
let refreshedShare;
|
|
148
182
|
if (wallet.scheme === "ED25519") {
|
|
149
|
-
const distributeRes = yield
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
183
|
+
const distributeRes = yield wrapWithSpan(
|
|
184
|
+
"mpc.claim",
|
|
185
|
+
() => distributeNewShare({
|
|
186
|
+
ctx: __privateGet(this, _paraCoreInterface).ctx,
|
|
187
|
+
userId: __privateGet(this, _authService).userId,
|
|
188
|
+
walletId: wallet.id,
|
|
189
|
+
userShare: __privateGet(this, _walletService).wallets[wallet.id].signer,
|
|
190
|
+
emailProps: __privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
|
|
191
|
+
partnerId: wallet.partnerId,
|
|
192
|
+
isEnclaveUser: __privateGet(this, _authService).isEnclaveUser,
|
|
193
|
+
walletScheme: wallet.scheme
|
|
194
|
+
}),
|
|
195
|
+
{ "wallet.id": wallet.id, "wallet.scheme": "ED25519" }
|
|
196
|
+
);
|
|
159
197
|
if (distributeRes.length > 0) {
|
|
160
198
|
newRecoverySecret = distributeRes;
|
|
161
199
|
}
|
|
162
200
|
} else {
|
|
163
|
-
refreshedShare = yield
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
201
|
+
refreshedShare = yield wrapWithSpan(
|
|
202
|
+
"mpc.claim",
|
|
203
|
+
() => __privateGet(this, _walletService).refreshShare({
|
|
204
|
+
walletId: wallet.id,
|
|
205
|
+
share: __privateGet(this, _walletService).wallets[wallet.id].signer,
|
|
206
|
+
oldPartnerId: wallet.partnerId,
|
|
207
|
+
newPartnerId: wallet.partnerId,
|
|
208
|
+
redistributeBackupEncryptedShares: true
|
|
209
|
+
}),
|
|
210
|
+
{ "wallet.id": wallet.id, "wallet.scheme": wallet.scheme }
|
|
211
|
+
);
|
|
170
212
|
if (refreshedShare.recoverySecret) {
|
|
171
213
|
newRecoverySecret = refreshedShare.recoverySecret;
|
|
172
214
|
}
|
|
@@ -185,8 +227,8 @@ class PregenWalletService {
|
|
|
185
227
|
});
|
|
186
228
|
}
|
|
187
229
|
yield __privateGet(this, _walletService).setWallets(__privateGet(this, _walletService).wallets);
|
|
188
|
-
return newRecoverySecret;
|
|
189
|
-
});
|
|
230
|
+
return { recoverySecret: newRecoverySecret, claimedWalletIds: walletIds };
|
|
231
|
+
}));
|
|
190
232
|
this.getPregenWallets = (..._0) => __async(this, [..._0], function* ({ pregenId } = {}) {
|
|
191
233
|
const pregenIds = pregenId ? toPregenIds(pregenId) : this.pregenIds;
|
|
192
234
|
if (!pregenIds || Object.keys(pregenIds).length === 0) {
|
|
@@ -218,30 +260,36 @@ class PregenWalletService {
|
|
|
218
260
|
_type != null ? _type : (_b = supportedWalletTypes.find(({ optional }) => !optional)) == null ? void 0 : _b.type
|
|
219
261
|
);
|
|
220
262
|
const [pregenIdentifierType, pregenIdentifier] = toPregenTypeAndId(pregenId);
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
263
|
+
const keygenRes = yield wrapWithSpan(
|
|
264
|
+
"mpc.keygen",
|
|
265
|
+
() => __async(this, null, function* () {
|
|
266
|
+
switch (walletType) {
|
|
267
|
+
case "STELLAR":
|
|
268
|
+
case "SOLANA":
|
|
269
|
+
return __privateGet(this, _paraCoreInterface).platformUtils.ed25519PreKeygen(
|
|
270
|
+
__privateGet(this, _paraCoreInterface).ctx,
|
|
271
|
+
pregenIdentifier,
|
|
272
|
+
pregenIdentifierType,
|
|
273
|
+
__privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
|
|
274
|
+
walletType
|
|
275
|
+
);
|
|
276
|
+
default:
|
|
277
|
+
return __privateGet(this, _paraCoreInterface).platformUtils.preKeygen(
|
|
278
|
+
__privateGet(this, _paraCoreInterface).ctx,
|
|
279
|
+
void 0,
|
|
280
|
+
pregenIdentifier,
|
|
281
|
+
pregenIdentifierType,
|
|
282
|
+
walletType,
|
|
283
|
+
null,
|
|
284
|
+
__privateGet(this, _paraCoreInterface).retrieveSessionCookie()
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
}),
|
|
288
|
+
{
|
|
289
|
+
"wallet.type": walletType,
|
|
290
|
+
"wallet.scheme": walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS"
|
|
291
|
+
}
|
|
292
|
+
);
|
|
245
293
|
const { signer, walletId } = keygenRes;
|
|
246
294
|
__privateGet(this, _walletService).wallets[walletId] = {
|
|
247
295
|
id: walletId,
|
|
@@ -390,6 +438,7 @@ _pollingService = new WeakMap();
|
|
|
390
438
|
_paraCoreInterface = new WeakMap();
|
|
391
439
|
_isCreateGuestWalletsPending = new WeakMap();
|
|
392
440
|
_fetchOverridePromise = new WeakMap();
|
|
441
|
+
_claimPregenWalletEntities = new WeakMap();
|
|
393
442
|
export {
|
|
394
443
|
PregenWalletService
|
|
395
444
|
};
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from "../chunk-7B52C2XE.js";
|
|
7
7
|
var _authService, _portalUrlService, _walletService, _pregenWalletService, _externalWalletService, _paraCoreInterface, _isImportedSession, _regeneratePromise, _handleTouchSessionError, _doTouchSession;
|
|
8
8
|
import { currentWalletIdsEq, supportedWalletTypesEq } from "../utils/wallet.js";
|
|
9
|
+
import { wrapWithSpan } from "../telemetry/tracer.js";
|
|
9
10
|
class SessionManagementService {
|
|
10
11
|
constructor(paraCore) {
|
|
11
12
|
__privateAdd(this, _authService);
|
|
@@ -53,14 +54,20 @@ class SessionManagementService {
|
|
|
53
54
|
if (regenerate && __privateGet(this, _regeneratePromise) !== void 0) {
|
|
54
55
|
return __privateGet(this, _regeneratePromise);
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
return wrapWithSpan(
|
|
58
|
+
"session.touch",
|
|
59
|
+
() => __async(this, null, function* () {
|
|
60
|
+
const promise = __privateGet(this, _doTouchSession).call(this, regenerate);
|
|
61
|
+
if (regenerate) {
|
|
62
|
+
__privateSet(this, _regeneratePromise, promise);
|
|
63
|
+
yield promise.finally(() => {
|
|
64
|
+
__privateSet(this, _regeneratePromise, void 0);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return promise;
|
|
68
|
+
}),
|
|
69
|
+
{ "session.regenerate": regenerate }
|
|
70
|
+
);
|
|
64
71
|
});
|
|
65
72
|
__privateAdd(this, _doTouchSession, (regenerate) => __async(this, null, function* () {
|
|
66
73
|
var _a, _b;
|
|
@@ -10,6 +10,7 @@ import { ParaEvent } from "../types/index.js";
|
|
|
10
10
|
import { dispatchEvent } from "../utils/index.js";
|
|
11
11
|
import { extractErrorMessage } from "../utils/stateErrorHelpers.js";
|
|
12
12
|
import { waitForAuthStateChange, waitForCoreStateChange } from "../utils/stateListener.js";
|
|
13
|
+
import { wrapWithSpan } from "../telemetry/tracer.js";
|
|
13
14
|
class SignupFlowService extends BaseAuthFlowService {
|
|
14
15
|
constructor() {
|
|
15
16
|
super(...arguments);
|
|
@@ -74,58 +75,62 @@ class SignupFlowService extends BaseAuthFlowService {
|
|
|
74
75
|
return signupState;
|
|
75
76
|
});
|
|
76
77
|
this.waitForSignup = (_0) => __async(this, [_0], function* ({ isCanceled = () => false, onCancel, onPoll }) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
});
|
|
85
|
-
return yield waitForAuthStateChange({
|
|
86
|
-
stateManager: this.stateManager,
|
|
87
|
-
resolvePhases: [
|
|
88
|
-
{
|
|
89
|
-
phase: "authenticated",
|
|
90
|
-
onPhase: () => {
|
|
91
|
-
dispatchEvent(ParaEvent.ACCOUNT_CREATION_EVENT, true);
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
78
|
+
return wrapWithSpan("auth.signup_wait", () => __async(this, null, function* () {
|
|
79
|
+
this.stateManager.send({
|
|
80
|
+
type: "WAIT_FOR_SESSION",
|
|
81
|
+
data: {
|
|
82
|
+
onCancel,
|
|
83
|
+
onPoll,
|
|
84
|
+
isCanceled
|
|
94
85
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
86
|
+
});
|
|
87
|
+
return yield waitForAuthStateChange({
|
|
88
|
+
stateManager: this.stateManager,
|
|
89
|
+
resolvePhases: [
|
|
90
|
+
{
|
|
91
|
+
phase: "authenticated",
|
|
92
|
+
onPhase: () => {
|
|
93
|
+
dispatchEvent(ParaEvent.ACCOUNT_CREATION_EVENT, true);
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
onReject: (state) => {
|
|
99
|
+
var _a;
|
|
100
|
+
(_a = dispatchEvent) == null ? void 0 : _a(ParaEvent.ACCOUNT_CREATION_EVENT, {}, extractErrorMessage(state.error, "failed to sign up user"));
|
|
101
|
+
},
|
|
102
|
+
waitForCoreAuthenticated: false
|
|
103
|
+
});
|
|
104
|
+
}));
|
|
102
105
|
});
|
|
103
106
|
this.waitForWalletCreation = (..._0) => __async(this, [..._0], function* ({ isCanceled = () => false, onCancel, onPoll } = {}) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
107
|
+
return wrapWithSpan("wallet.creation_wait", () => __async(this, null, function* () {
|
|
108
|
+
this.stateManager.send({
|
|
109
|
+
type: "WAIT_FOR_WALLET_CREATION",
|
|
110
|
+
data: {
|
|
111
|
+
onCancel,
|
|
112
|
+
onPoll,
|
|
113
|
+
isCanceled
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return yield waitForCoreStateChange({
|
|
117
|
+
stateManager: this.stateManager,
|
|
118
|
+
resolvePhases: [
|
|
119
|
+
{
|
|
120
|
+
phase: "authenticated",
|
|
121
|
+
onPhase: (state) => {
|
|
122
|
+
const resp = state.newWalletsResult;
|
|
123
|
+
dispatchEvent(ParaEvent.ACCOUNT_SETUP_EVENT, resp);
|
|
124
|
+
return resp;
|
|
125
|
+
}
|
|
121
126
|
}
|
|
127
|
+
],
|
|
128
|
+
onReject: (state) => {
|
|
129
|
+
var _a;
|
|
130
|
+
(_a = dispatchEvent) == null ? void 0 : _a(ParaEvent.ACCOUNT_SETUP_EVENT, {}, extractErrorMessage(state.error, "failed to sign up user"));
|
|
122
131
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
var _a;
|
|
126
|
-
(_a = dispatchEvent) == null ? void 0 : _a(ParaEvent.ACCOUNT_SETUP_EVENT, {}, extractErrorMessage(state.error, "failed to sign up user"));
|
|
127
|
-
}
|
|
128
|
-
});
|
|
132
|
+
});
|
|
133
|
+
}));
|
|
129
134
|
});
|
|
130
135
|
}
|
|
131
136
|
}
|
|
@@ -7,6 +7,7 @@ import { AuthMethod } from "@getpara/user-management-client";
|
|
|
7
7
|
import { BaseAuthFlowService } from "./BaseAuthFlowService.js";
|
|
8
8
|
import { LOCAL_STORAGE_IS_ENCLAVE_USER } from "../constants.js";
|
|
9
9
|
import { waitForAuthStateChange } from "../utils/stateListener.js";
|
|
10
|
+
import { wrapWithSpan } from "../telemetry/tracer.js";
|
|
10
11
|
class VerificationFlowService extends BaseAuthFlowService {
|
|
11
12
|
constructor() {
|
|
12
13
|
super(...arguments);
|
|
@@ -38,16 +39,18 @@ class VerificationFlowService extends BaseAuthFlowService {
|
|
|
38
39
|
return __spreadValues(__spreadValues({}, serverAuthState), loginUrl ? { loginUrl, loginFullUrl } : {});
|
|
39
40
|
});
|
|
40
41
|
this.performVerifyNewAccount = (params) => __async(this, null, function* () {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
return wrapWithSpan("verification.verify_otp", () => __async(this, null, function* () {
|
|
43
|
+
this.services.authService.assertIsAuthSet(["email", "phone"]);
|
|
44
|
+
const _a = params, { verificationCode } = _a, urlOptions = __objRest(_a, ["verificationCode"]);
|
|
45
|
+
const serverAuthState = yield this.paraCoreInterface.ctx.client.verifyAccount(this.services.authService.userId, {
|
|
46
|
+
verificationCode
|
|
47
|
+
});
|
|
48
|
+
if (serverAuthState.stage === "login" || serverAuthState.stage === "done") {
|
|
49
|
+
throw new Error("Account already exists.");
|
|
50
|
+
}
|
|
51
|
+
yield this.services.sessionManagementService.touchSession(true);
|
|
52
|
+
return { authState: serverAuthState, opts: urlOptions };
|
|
53
|
+
}));
|
|
51
54
|
});
|
|
52
55
|
this.verifyNewAccount = (params) => __async(this, null, function* () {
|
|
53
56
|
this.stateManager.send({ type: "VERIFY_NEW_ACCOUNT", data: params });
|
|
@@ -28,6 +28,7 @@ import { ParaEvent } from "../types/events.js";
|
|
|
28
28
|
import { LOCAL_STORAGE_CURRENT_WALLET_IDS, LOCAL_STORAGE_WALLETS, SHORT_POLLING_INTERVAL_MS } from "../constants.js";
|
|
29
29
|
import { distributeNewShare } from "../shares/shareDistribution.js";
|
|
30
30
|
import { sendRecoveryForShare } from "../shares/recovery.js";
|
|
31
|
+
import { wrapWithSpan } from "../telemetry/tracer.js";
|
|
31
32
|
class WalletService {
|
|
32
33
|
constructor(paraCore) {
|
|
33
34
|
__privateAdd(this, _authService);
|
|
@@ -108,15 +109,20 @@ class WalletService {
|
|
|
108
109
|
}
|
|
109
110
|
});
|
|
110
111
|
});
|
|
112
|
+
// wallets.populate names the GET /users/:userId/wallets call that runs to
|
|
113
|
+
// refresh address state after creation/refresh; without it the GET shows up
|
|
114
|
+
// as a bare span at the trace top level.
|
|
111
115
|
this.populateWalletAddresses = () => __async(this, null, function* () {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
return wrapWithSpan("wallets.populate", () => __async(this, null, function* () {
|
|
117
|
+
const res = yield (__privateGet(this, _paraCoreInterface).isPortal() ? __privateGet(this, _paraCoreInterface).ctx.client.getAllWallets : __privateGet(this, _paraCoreInterface).ctx.client.getWallets)(__privateGet(this, _authService).userId, true);
|
|
118
|
+
const wallets = res.data.wallets;
|
|
119
|
+
wallets.forEach((entity) => {
|
|
120
|
+
if (this.wallets[entity.id]) {
|
|
121
|
+
this.wallets[entity.id] = __spreadValues(__spreadValues({}, entityToWallet(entity)), this.wallets[entity.id]);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
yield this.setWallets(this.wallets);
|
|
125
|
+
}));
|
|
120
126
|
});
|
|
121
127
|
this.addToCurrentWalletIds = (walletIds, options) => __async(this, null, function* () {
|
|
122
128
|
const updatedWalletIds = __spreadValues({}, this.currentWalletIds);
|
|
@@ -156,31 +162,35 @@ class WalletService {
|
|
|
156
162
|
);
|
|
157
163
|
let signer;
|
|
158
164
|
let wallet;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
165
|
+
const keygenRes = yield wrapWithSpan(
|
|
166
|
+
"mpc.keygen",
|
|
167
|
+
() => __async(this, null, function* () {
|
|
168
|
+
switch (walletType) {
|
|
169
|
+
case "STELLAR":
|
|
170
|
+
case "SOLANA":
|
|
171
|
+
return __privateGet(this, _paraCoreInterface).platformUtils.ed25519Keygen(
|
|
172
|
+
__privateGet(this, _paraCoreInterface).ctx,
|
|
173
|
+
__privateGet(this, _authService).userId,
|
|
174
|
+
__privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
|
|
175
|
+
__privateGet(this, _paraCoreInterface).getBackupKitEmailProps(),
|
|
176
|
+
walletType
|
|
177
|
+
);
|
|
178
|
+
default:
|
|
179
|
+
return __privateGet(this, _paraCoreInterface).platformUtils.keygen(
|
|
180
|
+
__privateGet(this, _paraCoreInterface).ctx,
|
|
181
|
+
__privateGet(this, _authService).userId,
|
|
182
|
+
walletType,
|
|
183
|
+
null,
|
|
184
|
+
__privateGet(this, _paraCoreInterface).retrieveSessionCookie(),
|
|
185
|
+
__privateGet(this, _paraCoreInterface).getBackupKitEmailProps()
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
}),
|
|
189
|
+
{
|
|
190
|
+
"wallet.type": walletType,
|
|
191
|
+
"wallet.scheme": walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS"
|
|
182
192
|
}
|
|
183
|
-
|
|
193
|
+
);
|
|
184
194
|
const walletId = keygenRes.walletId;
|
|
185
195
|
const walletScheme = walletType === "SOLANA" || walletType === "STELLAR" ? "ED25519" : "DKLS";
|
|
186
196
|
signer = keygenRes.signer;
|
|
@@ -388,11 +398,16 @@ class WalletService {
|
|
|
388
398
|
}
|
|
389
399
|
return type;
|
|
390
400
|
});
|
|
401
|
+
// wallets.fetch names the post-keygen wallet list reads (the polling-style
|
|
402
|
+
// GETs that follow each MPC keygen). The auto-instrumented HTTP child carries
|
|
403
|
+
// the URL and status so this stays cheap.
|
|
391
404
|
this.fetchWallets = () => __async(this, null, function* () {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
405
|
+
return wrapWithSpan("wallets.fetch", () => __async(this, null, function* () {
|
|
406
|
+
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);
|
|
407
|
+
return res.data.wallets.filter(
|
|
408
|
+
(wallet) => !!wallet.address && wallet.sharesPersisted && (__privateGet(this, _paraCoreInterface).isParaConnect() || !__privateGet(this, _paraCoreInterface).isParaConnect() && this.isWalletSupported(entityToWallet(wallet)))
|
|
409
|
+
);
|
|
410
|
+
}));
|
|
396
411
|
});
|
|
397
412
|
this.getWalletBalance = (_0) => __async(this, [_0], function* ({ walletId, rpcUrl }) {
|
|
398
413
|
return (yield __privateGet(this, _paraCoreInterface).ctx.client.getWalletBalance({ walletId, rpcUrl })).balance;
|