@seams/wallet 0.6.1 → 0.6.2
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/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/operations/registration/registration.js +21 -29
- package/dist/esm/core/rpcClients/relayer/walletRegistration.js +1 -43
- package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +19 -0
- package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +25 -6
- package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +0 -29
- package/dist/esm/core/signingEngine/session/operationState/trace.js +10 -1
- package/dist/esm/react/SeamsWeb/operations/registration/registration.js +21 -29
- package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +1 -43
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +19 -0
- package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +25 -6
- package/dist/esm/react/core/signingEngine/nonce/nearNonceLane.js +0 -29
- package/dist/esm/react/core/signingEngine/session/operationState/trace.js +10 -1
- package/dist/esm/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-C7mqpJiU.js} +0 -29
- package/dist/{public/sdk/adapters-LgE4nnos.js → esm/sdk/adapters-m94YFj70.js} +1 -1
- package/dist/{public/sdk/display-Cw90-qmF.js → esm/sdk/display-DHdC2yXU.js} +1 -1
- package/dist/{public/sdk/export-viewer-host-B3K81QGA.js → esm/sdk/export-viewer-host-CbqG8ZQV.js} +1 -1
- package/dist/esm/sdk/{host-Y_xmIzPO.js → host-BPC1zSVg.js} +2 -2
- package/dist/esm/sdk/{localOnly-B5TYHJiq.js → localOnly-CbLYTVbo.js} +2 -2
- package/dist/esm/sdk/{nearEd25519YaoMaterialActivation-BLxVE6E5.js → nearEd25519YaoMaterialActivation-Cz5UJQ_7.js} +1 -43
- package/dist/esm/sdk/{registration-BtPLgKHk.js → registration-DtDICj-o.js} +1 -1
- package/dist/esm/sdk/{registration-D-istkMZ.js → registration-PIBMSsQR.js} +22 -30
- package/dist/esm/sdk/{registrationPreparationPreload-CvnlDCVn.js → registrationPreparationPreload-BZfAC_ba.js} +2 -2
- package/dist/{public/sdk/runtime-auth-B7z1ANNp.js → esm/sdk/runtime-auth-D_lUQQlc.js} +4 -4
- package/dist/{public/sdk/runtime-device-link-B8HGDakg.js → esm/sdk/runtime-device-link-CEph1iM0.js} +2 -2
- package/dist/esm/sdk/{runtime-ecdsa-tempo-DKdS5-us.js → runtime-ecdsa-tempo-tUWnafRo.js} +2 -2
- package/dist/{public/sdk/runtime-email-otp-D5bxhdyG.js → esm/sdk/runtime-email-otp-1wIPTDim.js} +2 -2
- package/dist/{public/sdk/runtime-export--hvNrx8l.js → esm/sdk/runtime-export-Du2d4_Vu.js} +2 -2
- package/dist/esm/sdk/{runtime-near-CEexHoug.js → runtime-near-CGoWxu7u.js} +2 -2
- package/dist/{public/sdk/runtime-preferences-BiqPp1lV.js → esm/sdk/runtime-preferences-JwJK_xP3.js} +2 -2
- package/dist/esm/sdk/{runtime-recovery-BYu1gDq_.js → runtime-recovery-BEqBdpyo.js} +2 -2
- package/dist/esm/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-CTt9ON27.js} +22 -22
- package/dist/{public/sdk/runtimeLoader-BFAmJAbu.js → esm/sdk/runtimeLoader-ZXsvx9zX.js} +9 -9
- package/dist/esm/sdk/{secp256k1-Cr1jBW1n.js → secp256k1-CWDid9WH.js} +1 -1
- package/dist/{public/sdk/signEvmFamily-Dxk4sBPY.js → esm/sdk/signEvmFamily-pbMepepQ.js} +5 -5
- package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-CxvfCI_o.js} +2 -2
- package/dist/{public/sdk/signEvmWithUiConfirm-CSxTBQUW.js → esm/sdk/signEvmWithUiConfirm-nk-r3Rff.js} +1 -1
- package/dist/esm/sdk/{signNear-B0OCVKoH.js → signNear-DVD9-IO5.js} +45 -8
- package/dist/esm/sdk/{signatureUses-C1o1pDql.js → signatureUses-BY1IY7uz.js} +1 -1
- package/dist/esm/sdk/{signerLoader-D0WU1jq_.js → signerLoader-D_w-SfR9.js} +3 -3
- package/dist/esm/sdk/{trace-DWnDLSuV.js → trace-08ayoiNp.js} +10 -1
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/esm/sdk/wallet-ui.css +7 -1
- package/dist/public/headers.manifest.json +1 -1
- package/dist/public/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-C7mqpJiU.js} +0 -29
- package/dist/{esm/sdk/adapters-LgE4nnos.js → public/sdk/adapters-m94YFj70.js} +1 -1
- package/dist/{esm/sdk/display-Cw90-qmF.js → public/sdk/display-DHdC2yXU.js} +1 -1
- package/dist/{esm/sdk/export-viewer-host-B3K81QGA.js → public/sdk/export-viewer-host-CbqG8ZQV.js} +1 -1
- package/dist/public/sdk/{host-Y_xmIzPO.js → host-BPC1zSVg.js} +2 -2
- package/dist/public/sdk/{localOnly-B5TYHJiq.js → localOnly-CbLYTVbo.js} +2 -2
- package/dist/public/sdk/{nearEd25519YaoMaterialActivation-BLxVE6E5.js → nearEd25519YaoMaterialActivation-Cz5UJQ_7.js} +1 -43
- package/dist/public/sdk/{registration-BtPLgKHk.js → registration-DtDICj-o.js} +1 -1
- package/dist/public/sdk/{registration-D-istkMZ.js → registration-PIBMSsQR.js} +22 -30
- package/dist/public/sdk/{registrationPreparationPreload-CvnlDCVn.js → registrationPreparationPreload-BZfAC_ba.js} +2 -2
- package/dist/{esm/sdk/runtime-auth-B7z1ANNp.js → public/sdk/runtime-auth-D_lUQQlc.js} +4 -4
- package/dist/{esm/sdk/runtime-device-link-B8HGDakg.js → public/sdk/runtime-device-link-CEph1iM0.js} +2 -2
- package/dist/public/sdk/{runtime-ecdsa-tempo-DKdS5-us.js → runtime-ecdsa-tempo-tUWnafRo.js} +2 -2
- package/dist/{esm/sdk/runtime-email-otp-D5bxhdyG.js → public/sdk/runtime-email-otp-1wIPTDim.js} +2 -2
- package/dist/{esm/sdk/runtime-export--hvNrx8l.js → public/sdk/runtime-export-Du2d4_Vu.js} +2 -2
- package/dist/public/sdk/{runtime-near-CEexHoug.js → runtime-near-CGoWxu7u.js} +2 -2
- package/dist/{esm/sdk/runtime-preferences-BiqPp1lV.js → public/sdk/runtime-preferences-JwJK_xP3.js} +2 -2
- package/dist/public/sdk/{runtime-recovery-BYu1gDq_.js → runtime-recovery-BEqBdpyo.js} +2 -2
- package/dist/public/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-CTt9ON27.js} +22 -22
- package/dist/{esm/sdk/runtimeLoader-BFAmJAbu.js → public/sdk/runtimeLoader-ZXsvx9zX.js} +9 -9
- package/dist/public/sdk/{secp256k1-Cr1jBW1n.js → secp256k1-CWDid9WH.js} +1 -1
- package/dist/{esm/sdk/signEvmFamily-Dxk4sBPY.js → public/sdk/signEvmFamily-pbMepepQ.js} +5 -5
- package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-CxvfCI_o.js} +2 -2
- package/dist/{esm/sdk/signEvmWithUiConfirm-CSxTBQUW.js → public/sdk/signEvmWithUiConfirm-nk-r3Rff.js} +1 -1
- package/dist/public/sdk/{signNear-B0OCVKoH.js → signNear-DVD9-IO5.js} +45 -8
- package/dist/public/sdk/{signatureUses-C1o1pDql.js → signatureUses-BY1IY7uz.js} +1 -1
- package/dist/public/sdk/{signerLoader-D0WU1jq_.js → signerLoader-D_w-SfR9.js} +3 -3
- package/dist/public/sdk/{trace-DWnDLSuV.js → trace-08ayoiNp.js} +10 -1
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/public/sdk/wallet-ui.css +7 -1
- package/dist/public/wallet-assets.manifest.json +58 -58
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +2 -3
- package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLane.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/operationState/trace.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
0d1577c2c1b97c7654920198df26f4d567031af57e0d5e0fb0262a294a65493a
|
|
@@ -38,7 +38,7 @@ import { planPendingNearRegistration, preparePendingNearRegistration } from "../
|
|
|
38
38
|
import { walletSessionAuthorizations } from "../../../core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js";
|
|
39
39
|
import { IndexedDBManager } from "../../../core/indexedDB/index.js";
|
|
40
40
|
import { nearEd25519YaoMaterialActivationFromMetadata } from "../../../core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js";
|
|
41
|
-
import { activateWalletRegistration,
|
|
41
|
+
import { activateWalletRegistration, completeWalletRegistrationNearProvisioning, createWalletAddSignerIntent, finalizeWalletAddSigner, isEmailOtpWalletRegistrationFinalizeResponse, parseWalletRegistrationEcdsaDerivationRespond, respondWalletRegistration, setupWalletRegistration, startWalletAddSigner } from "../../../core/rpcClients/relayer/walletRegistration.js";
|
|
42
42
|
import { buildEmailOtpAuthContext, emailOtpAuthContextEmailHashHex, emailOtpAuthContextProvider, emailOtpAuthContextProviderUserId } from "../../../core/signingEngine/session/identity/laneIdentity.js";
|
|
43
43
|
import { persistPasskeyEd25519YaoSignerMaterialV1 } from "../../../core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js";
|
|
44
44
|
import { buildPasskeyEd25519RestoreMetadata } from "../../../core/signingEngine/session/passkey/ed25519YaoSealedSession.js";
|
|
@@ -472,17 +472,10 @@ function registrationThreeRouteAuthorityPayload(authority) {
|
|
|
472
472
|
default: return assertNever(authority);
|
|
473
473
|
}
|
|
474
474
|
}
|
|
475
|
-
async function
|
|
475
|
+
async function startNearRegistrationAdmission(args) {
|
|
476
476
|
const startedAt = performance.now();
|
|
477
477
|
try {
|
|
478
|
-
const
|
|
479
|
-
relayerUrl: args.relayerUrl,
|
|
480
|
-
headers: registrationRouteHeaders(args.traceContext),
|
|
481
|
-
registrationCeremonyId: args.registrationCeremonyId,
|
|
482
|
-
signedSetup: args.signedSetup,
|
|
483
|
-
...registrationThreeRouteAuthorityPayload(args.authority)
|
|
484
|
-
})).ed25519;
|
|
485
|
-
const admissionReceipt = await admitDeferredNearRegistration(deferredNear, {
|
|
478
|
+
const admissionReceipt = await admitDeferredNearRegistration(args.deferredNear, {
|
|
486
479
|
routerOrigin: new URL(args.relayerUrl).origin,
|
|
487
480
|
authorization: {
|
|
488
481
|
kind: "bearer",
|
|
@@ -498,7 +491,7 @@ async function startEarlyNearRegistrationAdmission(args) {
|
|
|
498
491
|
outcome: "success"
|
|
499
492
|
});
|
|
500
493
|
return {
|
|
501
|
-
deferredNear,
|
|
494
|
+
deferredNear: args.deferredNear,
|
|
502
495
|
admissionReceipt
|
|
503
496
|
};
|
|
504
497
|
} catch (error) {
|
|
@@ -511,7 +504,7 @@ async function startEarlyNearRegistrationAdmission(args) {
|
|
|
511
504
|
throw error;
|
|
512
505
|
}
|
|
513
506
|
}
|
|
514
|
-
function
|
|
507
|
+
function requireNearRegistrationAdmission(admission) {
|
|
515
508
|
if (!admission) throw new Error("Mixed registration did not start NEAR admission");
|
|
516
509
|
return admission;
|
|
517
510
|
}
|
|
@@ -688,14 +681,6 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
688
681
|
clientCeremony: args.clientCeremony
|
|
689
682
|
})
|
|
690
683
|
});
|
|
691
|
-
const earlyNearAdmission = args.signerPlanKind === "near_ed25519_and_evm_family_ecdsa" ? startEarlyNearRegistrationAdmission({
|
|
692
|
-
relayerUrl: args.relayerUrl,
|
|
693
|
-
registrationCeremonyId: ceremonyId,
|
|
694
|
-
signedSetup: args.signedSetup,
|
|
695
|
-
authority: args.authority,
|
|
696
|
-
traceContext: args.traceContext
|
|
697
|
-
}) : null;
|
|
698
|
-
earlyNearAdmission?.catch(ignoreNearCustodyFailure);
|
|
699
684
|
const responded = await measureStrictEcdsaCeremonyStep({
|
|
700
685
|
registrationTiming: args.registrationTiming,
|
|
701
686
|
bucket: "ecdsaRegistrationGatewayRespondMs",
|
|
@@ -716,6 +701,14 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
716
701
|
});
|
|
717
702
|
if (responded.kind === "near_ed25519") throw new Error("ECDSA registration ceremony received an Ed25519-only respond result");
|
|
718
703
|
const deferredNear = responded.kind === "near_ed25519_and_evm_family_ecdsa" ? responded.ed25519 : null;
|
|
704
|
+
const nearAdmission = deferredNear ? startNearRegistrationAdmission({
|
|
705
|
+
relayerUrl: args.relayerUrl,
|
|
706
|
+
registrationCeremonyId: ceremonyId,
|
|
707
|
+
signedSetup: args.signedSetup,
|
|
708
|
+
deferredNear,
|
|
709
|
+
traceContext: args.traceContext
|
|
710
|
+
}) : null;
|
|
711
|
+
nearAdmission?.catch(ignoreNearCustodyFailure);
|
|
719
712
|
const verified = await measureStrictEcdsaCeremonyStep({
|
|
720
713
|
registrationTiming: args.registrationTiming,
|
|
721
714
|
bucket: "ecdsaRegistrationClientProofVerifyMs",
|
|
@@ -776,8 +769,7 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
776
769
|
deferredNear
|
|
777
770
|
});
|
|
778
771
|
deferredNearCustodyWork = args.startDeferredNearCustody({
|
|
779
|
-
|
|
780
|
-
earlyAdmission: requireEarlyNearRegistrationAdmission(earlyNearAdmission),
|
|
772
|
+
admission: requireNearRegistrationAdmission(nearAdmission),
|
|
781
773
|
establishedEvmCustodyCommit: bootstrap.preActivationCommitPayload
|
|
782
774
|
});
|
|
783
775
|
deferredNearCustodyWork.catch(ignoreNearCustodyFailure);
|
|
@@ -1075,14 +1067,14 @@ async function startDeferredNearWalletCustody(base, input) {
|
|
|
1075
1067
|
operation: "near_provisioning"
|
|
1076
1068
|
});
|
|
1077
1069
|
if (!pending || pending.operation !== "near_provisioning" || pending.phase !== "planned") throw new Error("NEAR registration has no planned continuation");
|
|
1078
|
-
let
|
|
1070
|
+
let preAdmittedReceipt;
|
|
1079
1071
|
try {
|
|
1080
|
-
const
|
|
1081
|
-
if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(
|
|
1082
|
-
|
|
1072
|
+
const admitted = await input.admission;
|
|
1073
|
+
if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(admitted.deferredNear.admissionRequest, pending.admissionRequest)) throw new Error("NEAR admission changed the authorized request");
|
|
1074
|
+
preAdmittedReceipt = admitted.admissionReceipt;
|
|
1083
1075
|
} catch (error) {
|
|
1084
|
-
if (error instanceof Error && error.message === "
|
|
1085
|
-
|
|
1076
|
+
if (error instanceof Error && error.message === "NEAR admission changed the authorized request") throw error;
|
|
1077
|
+
preAdmittedReceipt = void 0;
|
|
1086
1078
|
}
|
|
1087
1079
|
const { joined, admissionReceipt } = await continueNearRegistrationCustody({
|
|
1088
1080
|
pending,
|
|
@@ -1091,7 +1083,7 @@ async function startDeferredNearWalletCustody(base, input) {
|
|
|
1091
1083
|
credential: base.signedSetup,
|
|
1092
1084
|
traceContext: base.traceContext,
|
|
1093
1085
|
factorSecret,
|
|
1094
|
-
...
|
|
1086
|
+
...preAdmittedReceipt ? { admitted: preAdmittedReceipt } : {}
|
|
1095
1087
|
});
|
|
1096
1088
|
outcome = "success";
|
|
1097
1089
|
return {
|
|
@@ -29,7 +29,6 @@ const ROUTE_PAYLOAD_BREAKDOWN_MAX_DEPTH = 2;
|
|
|
29
29
|
const ROUTE_PAYLOAD_BREAKDOWN_MAX_FIELDS = 64;
|
|
30
30
|
const WALLET_REGISTRATION_SETUP_PATH = "/wallets/register/setup";
|
|
31
31
|
const WALLET_REGISTRATION_RESPOND_PATH = "/wallets/register/respond";
|
|
32
|
-
const WALLET_REGISTRATION_NEAR_ADMISSION_PATH = "/wallets/register/near-admission";
|
|
33
32
|
const WALLET_REGISTRATION_ACTIVATE_PATH = "/wallets/register/activate";
|
|
34
33
|
const WALLET_REGISTRATION_NEAR_PROVISIONING_PATH = "/wallets/register/near-provisioning";
|
|
35
34
|
/** Managed environment id header for Router API `api_credentials` auth. */
|
|
@@ -1732,47 +1731,6 @@ async function respondWalletRegistration(args) {
|
|
|
1732
1731
|
onServerTiming: args.onServerTiming
|
|
1733
1732
|
}));
|
|
1734
1733
|
}
|
|
1735
|
-
async function authorizeWalletRegistrationNearAdmission(args) {
|
|
1736
|
-
const body = {
|
|
1737
|
-
registrationCeremonyId: args.registrationCeremonyId,
|
|
1738
|
-
signedSetup: args.signedSetup
|
|
1739
|
-
};
|
|
1740
|
-
switch (args.kind) {
|
|
1741
|
-
case "passkey":
|
|
1742
|
-
body.webauthn_registration = args.webauthnRegistration;
|
|
1743
|
-
break;
|
|
1744
|
-
case "email_otp":
|
|
1745
|
-
body.emailOtpRegistrationProof = args.emailOtpRegistrationProof;
|
|
1746
|
-
break;
|
|
1747
|
-
}
|
|
1748
|
-
const response = await postJson({
|
|
1749
|
-
relayerUrl: args.relayerUrl,
|
|
1750
|
-
path: WALLET_REGISTRATION_NEAR_ADMISSION_PATH,
|
|
1751
|
-
headers: args.headers,
|
|
1752
|
-
body
|
|
1753
|
-
});
|
|
1754
|
-
const responseName = "Wallet registration NEAR admission";
|
|
1755
|
-
const record = requireWalletRegistrationResponseObject({
|
|
1756
|
-
responseName,
|
|
1757
|
-
field: "body",
|
|
1758
|
-
value: response
|
|
1759
|
-
});
|
|
1760
|
-
assertWalletRegistrationResponseKeys(record, [
|
|
1761
|
-
"ok",
|
|
1762
|
-
"registrationCeremonyId",
|
|
1763
|
-
"ed25519"
|
|
1764
|
-
], responseName);
|
|
1765
|
-
if (readWalletRegistrationResponseField(record, "ok", responseName) !== true) throw new Error(`${responseName} response is not successful`);
|
|
1766
|
-
return {
|
|
1767
|
-
ok: true,
|
|
1768
|
-
registrationCeremonyId: requireResponseString({
|
|
1769
|
-
responseName,
|
|
1770
|
-
field: "registrationCeremonyId",
|
|
1771
|
-
value: readWalletRegistrationResponseField(record, "registrationCeremonyId", responseName)
|
|
1772
|
-
}),
|
|
1773
|
-
ed25519: parseWalletRegistrationRespondEd25519DeferredWork(readWalletRegistrationResponseField(record, "ed25519", responseName))
|
|
1774
|
-
};
|
|
1775
|
-
}
|
|
1776
1734
|
function parseRegistrationEstablishedSessionResult(value, expectedWalletId) {
|
|
1777
1735
|
const responseName = "Wallet registration established session";
|
|
1778
1736
|
const parsed = parseRegistrationEstablishedSessionResultV2(value);
|
|
@@ -2362,6 +2320,6 @@ async function fetchWalletEcdsaKeyFactsInventoryWithWebAuthn(args) {
|
|
|
2362
2320
|
});
|
|
2363
2321
|
}
|
|
2364
2322
|
//#endregion
|
|
2365
|
-
export { activateWalletAddSignerEcdsa, activateWalletRegistration,
|
|
2323
|
+
export { activateWalletAddSignerEcdsa, activateWalletRegistration, completeWalletRegistrationNearProvisioning, createWalletAddAuthMethodIntent, createWalletAddSignerIntent, fetchWalletEcdsaKeyFactsInventoryWithOperationCredential, fetchWalletEcdsaKeyFactsInventoryWithWebAuthn, finalizeWalletAddAuthMethod, finalizeWalletAddSigner, fundImplicitNearAccountForTesting, isEmailOtpWalletRegistrationFinalizeResponse, parseWalletRegistrationEcdsaDerivationRespond, requestAddAuthMethodEmailOtpChallenge, respondWalletAddSignerEcdsa, respondWalletRegistration, revokeWalletAuthMethod, setupWalletRegistration, startWalletAddAuthMethod, startWalletAddSigner };
|
|
2366
2324
|
|
|
2367
2325
|
//# sourceMappingURL=walletRegistration.js.map
|
|
@@ -8,6 +8,7 @@ import { resolveNearNetwork } from "../../../../config/chains.js";
|
|
|
8
8
|
import { SigningSessionIds } from "../../../session/operationState/types.js";
|
|
9
9
|
import { ActionType, fromActionArgsWasm } from "../../../../../shared-ts/src/near/actions.js";
|
|
10
10
|
import { PASSKEY_MANAGER_DEFAULT_CONFIGS } from "../../../../config/defaultConfigs.js";
|
|
11
|
+
import { emitEd25519SigningTiming } from "../../../session/operationState/trace.js";
|
|
11
12
|
import { parseThresholdEd25519NearTransaction, thresholdEd25519NearTransactionOperationFingerprint } from "../../../../../shared-ts/src/threshold/ed25519OperationFingerprint.js";
|
|
12
13
|
import { WorkerResponseType } from "../../../../types/signer-worker.js";
|
|
13
14
|
import { buildThresholdEd25519DelegateSigningPayloadWasm, buildThresholdEd25519NearTxUnsignedBorshWasm, decodeThresholdEd25519SignedNearTxBorshWasm, finalizeThresholdEd25519DelegateFromSignatureWasm, finalizeThresholdEd25519NearTxFromSignatureWasm } from "../../../chains/near/nearSignerWasm.js";
|
|
@@ -260,6 +261,18 @@ function requireActiveClientMatchesNormalSigningOperation(args) {
|
|
|
260
261
|
if (!sameBytes(metadata.signingWorkerVerifyingShare, args.signingWorkerVerifyingShare)) throw new Error("Router A/B Ed25519 active Client SigningWorker verifying share mismatch");
|
|
261
262
|
}
|
|
262
263
|
async function tryFinalizeRouterAbEd25519NormalSigningSignature(args) {
|
|
264
|
+
const operationId = args.prepare.request.intent.operation_id;
|
|
265
|
+
const signatureStartedAt = performance.now();
|
|
266
|
+
let outcome = "failed";
|
|
267
|
+
try {
|
|
268
|
+
const finalized = await finalizeRouterAbEd25519NormalSigningSignature(args, operationId);
|
|
269
|
+
outcome = "succeeded";
|
|
270
|
+
return finalized;
|
|
271
|
+
} finally {
|
|
272
|
+
emitEd25519SigningTiming(operationId, "signature_total", signatureStartedAt, outcome);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
async function finalizeRouterAbEd25519NormalSigningSignature(args, operationId) {
|
|
263
276
|
const signingPayload = base64UrlDecode(args.signingDigestB64u);
|
|
264
277
|
if (signingPayload.length !== 32) throw new Error(`Router A/B normal-signing ${args.signingPayloadLabel} must be 32 bytes`);
|
|
265
278
|
const admittedDigest = requireWireBytes32(args.prepare.admissionMaterial.admittedSigningDigest.bytes, "admitted digest");
|
|
@@ -279,11 +292,13 @@ async function tryFinalizeRouterAbEd25519NormalSigningSignature(args) {
|
|
|
279
292
|
runtimePolicyScope: args.walletSessionState.runtimePolicyScope,
|
|
280
293
|
relayerUrl: args.walletSessionState.relayerUrl
|
|
281
294
|
} : args.materialFacts;
|
|
295
|
+
const prepareStartedAt = performance.now();
|
|
282
296
|
const prepareResponse = await prepareRouterAbNormalSigningV2({
|
|
283
297
|
relayServerUrl: materialFacts.relayerUrl,
|
|
284
298
|
credential: args.credential,
|
|
285
299
|
request: args.prepare.request
|
|
286
300
|
});
|
|
301
|
+
emitEd25519SigningTiming(operationId, "prepare", prepareStartedAt);
|
|
287
302
|
requireRouterAbNormalSigningPrepareMatchesRequest({
|
|
288
303
|
request: args.prepare.request,
|
|
289
304
|
signingPayloadDigest: args.prepare.admissionMaterial.signingPayloadDigest,
|
|
@@ -304,12 +319,15 @@ async function tryFinalizeRouterAbEd25519NormalSigningSignature(args) {
|
|
|
304
319
|
signingWorkerId: prepareResponse.signing_worker.server_id,
|
|
305
320
|
signingWorkerVerifyingShare
|
|
306
321
|
});
|
|
322
|
+
const clientShareStartedAt = performance.now();
|
|
307
323
|
const clientShare = await args.activeClient.createSigningShare({
|
|
308
324
|
admittedDigest,
|
|
309
325
|
signingWorkerCommitments: prepareResponse.server_commitments,
|
|
310
326
|
signingWorkerVerifyingShare
|
|
311
327
|
});
|
|
328
|
+
emitEd25519SigningTiming(operationId, "client_share", clientShareStartedAt);
|
|
312
329
|
if (clientShare.clientVerifyingShare.length !== 32) throw new Error("Router A/B normal-signing Client verifying share must be 32 bytes");
|
|
330
|
+
const finalizeStartedAt = performance.now();
|
|
313
331
|
const signingResponse = await finalizeRouterAbNormalSigningV2({
|
|
314
332
|
relayServerUrl: materialFacts.relayerUrl,
|
|
315
333
|
credential: args.credential,
|
|
@@ -323,6 +341,7 @@ async function tryFinalizeRouterAbEd25519NormalSigningSignature(args) {
|
|
|
323
341
|
clientSignatureShareB64u: clientShare.clientSignatureShareB64u
|
|
324
342
|
})
|
|
325
343
|
});
|
|
344
|
+
emitEd25519SigningTiming(operationId, "finalize", finalizeStartedAt);
|
|
326
345
|
requireRouterAbNormalSigningResponseMatchesRequest({
|
|
327
346
|
request: args.prepare.request,
|
|
328
347
|
signingPayloadDigest: args.prepare.admissionMaterial.signingPayloadDigest,
|
|
@@ -9,7 +9,7 @@ import { SignedTransaction } from "../../../rpcClients/near/NearClient.js";
|
|
|
9
9
|
import { PASSKEY_MANAGER_DEFAULT_CONFIGS } from "../../../config/defaultConfigs.js";
|
|
10
10
|
import { resolveNearSigningMaterials } from "./shared/signingMaterials.js";
|
|
11
11
|
import { buildNearTransactionSigningPayload } from "../../chains/near/payloads.js";
|
|
12
|
-
import { createSigningBoundaryTraceEvent, emitSigningBoundaryTrace } from "../../session/operationState/trace.js";
|
|
12
|
+
import { createSigningBoundaryTraceEvent, emitEd25519SigningTiming, emitSigningBoundaryTrace } from "../../session/operationState/trace.js";
|
|
13
13
|
import { parseThresholdEd25519NearTransaction, thresholdEd25519NearTransactionPlanningOperationFingerprint } from "../../../../shared-ts/src/threshold/ed25519OperationFingerprint.js";
|
|
14
14
|
import { SigningOperationCommandKind, isSigningOperationReviewApprovedState, runSigningOperationCommand } from "../shared/signingStateMachine.js";
|
|
15
15
|
import { requireNearStepUpAuth, signingAuthPlanForNearMaterialRequirement } from "./requireNearStepUpAuth.js";
|
|
@@ -45,6 +45,16 @@ function disposeOwnedNearOperationStepUpMaterialAndRethrow(args, error) {
|
|
|
45
45
|
disposeOwnedNearOperationStepUpMaterial(args);
|
|
46
46
|
throw error;
|
|
47
47
|
}
|
|
48
|
+
async function resolveWarmNearSigningMaterial(args) {
|
|
49
|
+
return {
|
|
50
|
+
material: await resolvePreparedNearEd25519YaoMaterial(args.preparation, args.executor),
|
|
51
|
+
walletSessionState: await args.executor.resolveWalletSessionState()
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function requireWarmNearSigningMaterialTask(task) {
|
|
55
|
+
if (!task) throw new Error("[SigningEngine][near] warm signing material was not prepared");
|
|
56
|
+
return task;
|
|
57
|
+
}
|
|
48
58
|
async function resolveNearTransactionOperationStepUpMaterial(args) {
|
|
49
59
|
if (args.authorization.kind === "passkey") {
|
|
50
60
|
if (args.material.kind !== "passkey_live" && args.material.kind !== "passkey_sealed") throw new Error("[SigningEngine][near] passkey transaction material changed factor");
|
|
@@ -385,6 +395,8 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
385
395
|
const nearAccountId = toAccountId(nearAccount.accountId);
|
|
386
396
|
const relayerUrl = ctx.relayerUrl;
|
|
387
397
|
const warnings = [];
|
|
398
|
+
const durableLeaseRecovery = ctx.nonceCoordinator.recoverDurableLeases({ walletId: String(commandSubject.walletSession.walletId) });
|
|
399
|
+
durableLeaseRecovery.catch(() => {});
|
|
388
400
|
emitNearSigningEvent(onEvent, nearAccountId, {
|
|
389
401
|
phase: SigningEventPhase.STEP_02_REQUEST_PREPARED,
|
|
390
402
|
status: "running",
|
|
@@ -484,6 +496,11 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
484
496
|
...passkeyEd25519OperationStepUp ? { passkeyEd25519OperationStepUp } : {},
|
|
485
497
|
...emailOtpEd25519StepUp ? { emailOtpEd25519StepUp } : {}
|
|
486
498
|
});
|
|
499
|
+
const warmSigningMaterialTask = preparedStepUp.kind === "warm_session" ? resolveWarmNearSigningMaterial({
|
|
500
|
+
preparation: yaoSigningPreparation,
|
|
501
|
+
executor: yaoMaterialExecutor
|
|
502
|
+
}) : null;
|
|
503
|
+
warmSigningMaterialTask?.catch(() => {});
|
|
487
504
|
const confirmationAuthPayload = preparedStepUp.confirmationAuthPayload;
|
|
488
505
|
if (isWarmSessionSigningAuthPlan(confirmationAuthPayload.signingAuthPlan)) emitNearSigningEvent(onEvent, nearAccountId, {
|
|
489
506
|
phase: SigningEventPhase.STEP_06_AUTH_WARM_SESSION_CLAIMED,
|
|
@@ -578,6 +595,7 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
578
595
|
readiness: operationStepUpReadiness
|
|
579
596
|
});
|
|
580
597
|
}
|
|
598
|
+
const confirmationCompletedAt = performance.now();
|
|
581
599
|
const operationStepUpMaterial = operationStepUpReadiness ? await operationStepUpReadiness : null;
|
|
582
600
|
if (transactionReviewRequired) emitNearSigningEvent(onEvent, nearAccountId, {
|
|
583
601
|
phase: SigningEventPhase.STEP_05_CONFIRMATION_APPROVED,
|
|
@@ -610,7 +628,7 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
610
628
|
});
|
|
611
629
|
const ownsResolvedOperationStepUpMaterial = operationStepUpMaterial?.kind === "passkey_sealed" || operationStepUpMaterial?.kind === "email_otp_sealed";
|
|
612
630
|
try {
|
|
613
|
-
await
|
|
631
|
+
await durableLeaseRecovery;
|
|
614
632
|
} catch (error) {
|
|
615
633
|
disposeOwnedNearOperationStepUpMaterial({
|
|
616
634
|
resolved: resolvedOperationStepUpMaterial,
|
|
@@ -633,14 +651,14 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
633
651
|
});
|
|
634
652
|
const resolvedMaterial = stepUpAuthorization.kind === "warm_session" ? {
|
|
635
653
|
kind: "warm_session",
|
|
636
|
-
|
|
654
|
+
resolved: await requireWarmNearSigningMaterialTask(warmSigningMaterialTask)
|
|
637
655
|
} : {
|
|
638
656
|
kind: "operation_step_up",
|
|
639
657
|
resolved: resolvedOperationStepUpMaterial
|
|
640
658
|
};
|
|
641
|
-
const canonicalThresholdSessionId = resolvedMaterial.kind === "warm_session" ? resolvedMaterial.material.facts.thresholdSessionId : resolvedMaterial.resolved.material.facts.thresholdSessionId;
|
|
642
|
-
const activeYaoClient = resolvedMaterial.kind === "warm_session" ? resolvedMaterial.material.activeClient : resolvedMaterial.resolved.material.activeClient;
|
|
643
|
-
const activeWalletSessionState = resolvedMaterial.kind === "warm_session" ?
|
|
659
|
+
const canonicalThresholdSessionId = resolvedMaterial.kind === "warm_session" ? resolvedMaterial.resolved.material.facts.thresholdSessionId : resolvedMaterial.resolved.material.facts.thresholdSessionId;
|
|
660
|
+
const activeYaoClient = resolvedMaterial.kind === "warm_session" ? resolvedMaterial.resolved.material.activeClient : resolvedMaterial.resolved.material.activeClient;
|
|
661
|
+
const activeWalletSessionState = resolvedMaterial.kind === "warm_session" ? resolvedMaterial.resolved.walletSessionState : null;
|
|
644
662
|
const confirmedNearContext = resolvedMaterial.kind === "warm_session" ? await resolveConfirmedNearTransactionContext({
|
|
645
663
|
confirmation,
|
|
646
664
|
ctx,
|
|
@@ -771,6 +789,7 @@ async function runAuthorizedNearTransactionWithActionsSigning({ ctx, commandSubj
|
|
|
771
789
|
warnings,
|
|
772
790
|
nonceLeases: nonceLeaseRefs
|
|
773
791
|
});
|
|
792
|
+
emitEd25519SigningTiming(String(signingOperation.operationId), "confirmed_to_signed", confirmationCompletedAt);
|
|
774
793
|
emitNearSigningEvent(onEvent, nearAccountId, {
|
|
775
794
|
phase: SigningEventPhase.STEP_11_TRANSACTION_SIGNED,
|
|
776
795
|
status: "succeeded",
|
|
@@ -393,22 +393,6 @@ var NearImplicitAccountFundingRequiredError = class extends Error {
|
|
|
393
393
|
});
|
|
394
394
|
}
|
|
395
395
|
};
|
|
396
|
-
async function readImplicitNearAccountFundingState(input) {
|
|
397
|
-
try {
|
|
398
|
-
await input.nearClient.viewAccount(input.subject.nearAccountId);
|
|
399
|
-
return { kind: "funded" };
|
|
400
|
-
} catch (error) {
|
|
401
|
-
if (!isMissingNearAccessKeyError(errorMessage(error))) throw error;
|
|
402
|
-
}
|
|
403
|
-
return {
|
|
404
|
-
kind: "needs_funding",
|
|
405
|
-
error: new NearImplicitAccountFundingRequiredError({
|
|
406
|
-
walletId: input.subject.walletId,
|
|
407
|
-
nearAccountId: input.subject.nearAccountId,
|
|
408
|
-
nearPublicKeyStr: input.subject.publicKey
|
|
409
|
-
})
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
396
|
var NearAccountLookupFailedError = class extends Error {
|
|
413
397
|
constructor(args) {
|
|
414
398
|
super(args.message || `NEAR account ${args.nearAccountId} access key lookup failed.`);
|
|
@@ -442,16 +426,11 @@ async function fetchNearFreshDataForState(input) {
|
|
|
442
426
|
let txBlockHash = previousTransactionContext?.txBlockHash;
|
|
443
427
|
const fetchAccessKey = isNonceStale || !accessKeyInfo;
|
|
444
428
|
const fetchBlock = isBlockStale || !txBlockHeight || !txBlockHash;
|
|
445
|
-
const fetchImplicitAccountFunding = isImplicitNearAccountId(capturedSubject.nearAccountId) && (input.force || fetchAccessKey || !readyContext);
|
|
446
429
|
let maybeAccessKey = accessKeyInfo ?? null;
|
|
447
430
|
let maybeBlock = null;
|
|
448
431
|
let accessKeyError = null;
|
|
449
432
|
let blockError = null;
|
|
450
433
|
const tasks = [];
|
|
451
|
-
const implicitFundingPromise = fetchImplicitAccountFunding ? readImplicitNearAccountFundingState({
|
|
452
|
-
nearClient: input.nearClient,
|
|
453
|
-
subject: capturedSubject
|
|
454
|
-
}) : null;
|
|
455
434
|
if (fetchAccessKey) tasks.push((async () => {
|
|
456
435
|
try {
|
|
457
436
|
maybeAccessKey = await input.nearClient.viewAccessKey(capturedSubject.nearAccountId, capturedSubject.publicKey);
|
|
@@ -485,14 +464,6 @@ async function fetchNearFreshDataForState(input) {
|
|
|
485
464
|
}
|
|
486
465
|
})());
|
|
487
466
|
if (tasks.length > 0) await Promise.all(tasks);
|
|
488
|
-
const implicitFunding = implicitFundingPromise ? await implicitFundingPromise : null;
|
|
489
|
-
if (implicitFunding?.kind === "needs_funding") {
|
|
490
|
-
setNearImplicitUnfunded({
|
|
491
|
-
state,
|
|
492
|
-
subject: capturedSubject
|
|
493
|
-
});
|
|
494
|
-
throw implicitFunding.error;
|
|
495
|
-
}
|
|
496
467
|
if (accessKeyError) {
|
|
497
468
|
if (accessKeyError instanceof NearImplicitAccountFundingRequiredError) setNearImplicitUnfunded({
|
|
498
469
|
state,
|
|
@@ -30,6 +30,15 @@ function emitEcdsaSigningTiming(operationId, stage, startedAt, outcome = "succee
|
|
|
30
30
|
outcome
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
+
function emitEd25519SigningTiming(operationId, stage, startedAt, outcome = "succeeded") {
|
|
34
|
+
emitSigningSessionFlowTrace("near", {
|
|
35
|
+
event: "ed25519_signing_timing",
|
|
36
|
+
operationId,
|
|
37
|
+
stage,
|
|
38
|
+
durationMs: Math.max(0, performance.now() - startedAt),
|
|
39
|
+
outcome
|
|
40
|
+
});
|
|
41
|
+
}
|
|
33
42
|
function emitSigningLaneResolutionTrace(scope, lane, args = {}) {
|
|
34
43
|
if (!lane || !isSigningSessionTraceEnabled()) return;
|
|
35
44
|
try {
|
|
@@ -80,6 +89,6 @@ function isSigningSessionTraceEnabled() {
|
|
|
80
89
|
}
|
|
81
90
|
}
|
|
82
91
|
//#endregion
|
|
83
|
-
export { createSigningBoundaryTraceEvent, emitEcdsaPresignServerTiming, emitEcdsaServerTiming, emitEcdsaSigningTiming, emitSigningBoundaryTrace, emitSigningLaneResolutionTrace, emitSigningPlannerDecisionTrace, emitSigningSessionFlowFailure, emitSigningSessionFlowTrace };
|
|
92
|
+
export { createSigningBoundaryTraceEvent, emitEcdsaPresignServerTiming, emitEcdsaServerTiming, emitEcdsaSigningTiming, emitEd25519SigningTiming, emitSigningBoundaryTrace, emitSigningLaneResolutionTrace, emitSigningPlannerDecisionTrace, emitSigningSessionFlowFailure, emitSigningSessionFlowTrace };
|
|
84
93
|
|
|
85
94
|
//# sourceMappingURL=trace.js.map
|
|
@@ -39,7 +39,7 @@ import { planPendingNearRegistration, preparePendingNearRegistration } from "../
|
|
|
39
39
|
import { walletSessionAuthorizations } from "../../../core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js";
|
|
40
40
|
import { IndexedDBManager } from "../../../core/indexedDB/index.js";
|
|
41
41
|
import { nearEd25519YaoMaterialActivationFromMetadata } from "../../../core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js";
|
|
42
|
-
import { activateWalletRegistration,
|
|
42
|
+
import { activateWalletRegistration, completeWalletRegistrationNearProvisioning, createWalletAddSignerIntent, finalizeWalletAddSigner, isEmailOtpWalletRegistrationFinalizeResponse, parseWalletRegistrationEcdsaDerivationRespond, respondWalletRegistration, setupWalletRegistration, startWalletAddSigner } from "../../../core/rpcClients/relayer/walletRegistration.js";
|
|
43
43
|
import { persistPasskeyEd25519YaoSignerMaterialV1 } from "../../../core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js";
|
|
44
44
|
import { buildPasskeyEd25519RestoreMetadata } from "../../../core/signingEngine/session/passkey/ed25519YaoSealedSession.js";
|
|
45
45
|
import { prepareWalletEcdsaRegistrationPublication, prepareWalletEd25519RegistrationPublication, prepareWalletEmailOtpEd25519RegistrationPublication } from "../../../core/signingEngine/flows/registration/accountLifecycle.js";
|
|
@@ -472,17 +472,10 @@ function registrationThreeRouteAuthorityPayload(authority) {
|
|
|
472
472
|
default: return assertNever(authority);
|
|
473
473
|
}
|
|
474
474
|
}
|
|
475
|
-
async function
|
|
475
|
+
async function startNearRegistrationAdmission(args) {
|
|
476
476
|
const startedAt = performance.now();
|
|
477
477
|
try {
|
|
478
|
-
const
|
|
479
|
-
relayerUrl: args.relayerUrl,
|
|
480
|
-
headers: registrationRouteHeaders(args.traceContext),
|
|
481
|
-
registrationCeremonyId: args.registrationCeremonyId,
|
|
482
|
-
signedSetup: args.signedSetup,
|
|
483
|
-
...registrationThreeRouteAuthorityPayload(args.authority)
|
|
484
|
-
})).ed25519;
|
|
485
|
-
const admissionReceipt = await admitDeferredNearRegistration(deferredNear, {
|
|
478
|
+
const admissionReceipt = await admitDeferredNearRegistration(args.deferredNear, {
|
|
486
479
|
routerOrigin: new URL(args.relayerUrl).origin,
|
|
487
480
|
authorization: {
|
|
488
481
|
kind: "bearer",
|
|
@@ -498,7 +491,7 @@ async function startEarlyNearRegistrationAdmission(args) {
|
|
|
498
491
|
outcome: "success"
|
|
499
492
|
});
|
|
500
493
|
return {
|
|
501
|
-
deferredNear,
|
|
494
|
+
deferredNear: args.deferredNear,
|
|
502
495
|
admissionReceipt
|
|
503
496
|
};
|
|
504
497
|
} catch (error) {
|
|
@@ -511,7 +504,7 @@ async function startEarlyNearRegistrationAdmission(args) {
|
|
|
511
504
|
throw error;
|
|
512
505
|
}
|
|
513
506
|
}
|
|
514
|
-
function
|
|
507
|
+
function requireNearRegistrationAdmission(admission) {
|
|
515
508
|
if (!admission) throw new Error("Mixed registration did not start NEAR admission");
|
|
516
509
|
return admission;
|
|
517
510
|
}
|
|
@@ -688,14 +681,6 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
688
681
|
clientCeremony: args.clientCeremony
|
|
689
682
|
})
|
|
690
683
|
});
|
|
691
|
-
const earlyNearAdmission = args.signerPlanKind === "near_ed25519_and_evm_family_ecdsa" ? startEarlyNearRegistrationAdmission({
|
|
692
|
-
relayerUrl: args.relayerUrl,
|
|
693
|
-
registrationCeremonyId: ceremonyId,
|
|
694
|
-
signedSetup: args.signedSetup,
|
|
695
|
-
authority: args.authority,
|
|
696
|
-
traceContext: args.traceContext
|
|
697
|
-
}) : null;
|
|
698
|
-
earlyNearAdmission?.catch(ignoreNearCustodyFailure);
|
|
699
684
|
const responded = await measureStrictEcdsaCeremonyStep({
|
|
700
685
|
registrationTiming: args.registrationTiming,
|
|
701
686
|
bucket: "ecdsaRegistrationGatewayRespondMs",
|
|
@@ -716,6 +701,14 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
716
701
|
});
|
|
717
702
|
if (responded.kind === "near_ed25519") throw new Error("ECDSA registration ceremony received an Ed25519-only respond result");
|
|
718
703
|
const deferredNear = responded.kind === "near_ed25519_and_evm_family_ecdsa" ? responded.ed25519 : null;
|
|
704
|
+
const nearAdmission = deferredNear ? startNearRegistrationAdmission({
|
|
705
|
+
relayerUrl: args.relayerUrl,
|
|
706
|
+
registrationCeremonyId: ceremonyId,
|
|
707
|
+
signedSetup: args.signedSetup,
|
|
708
|
+
deferredNear,
|
|
709
|
+
traceContext: args.traceContext
|
|
710
|
+
}) : null;
|
|
711
|
+
nearAdmission?.catch(ignoreNearCustodyFailure);
|
|
719
712
|
const verified = await measureStrictEcdsaCeremonyStep({
|
|
720
713
|
registrationTiming: args.registrationTiming,
|
|
721
714
|
bucket: "ecdsaRegistrationClientProofVerifyMs",
|
|
@@ -776,8 +769,7 @@ async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
|
|
|
776
769
|
deferredNear
|
|
777
770
|
});
|
|
778
771
|
deferredNearCustodyWork = args.startDeferredNearCustody({
|
|
779
|
-
|
|
780
|
-
earlyAdmission: requireEarlyNearRegistrationAdmission(earlyNearAdmission),
|
|
772
|
+
admission: requireNearRegistrationAdmission(nearAdmission),
|
|
781
773
|
establishedEvmCustodyCommit: bootstrap.preActivationCommitPayload
|
|
782
774
|
});
|
|
783
775
|
deferredNearCustodyWork.catch(ignoreNearCustodyFailure);
|
|
@@ -1075,14 +1067,14 @@ async function startDeferredNearWalletCustody(base, input) {
|
|
|
1075
1067
|
operation: "near_provisioning"
|
|
1076
1068
|
});
|
|
1077
1069
|
if (!pending || pending.operation !== "near_provisioning" || pending.phase !== "planned") throw new Error("NEAR registration has no planned continuation");
|
|
1078
|
-
let
|
|
1070
|
+
let preAdmittedReceipt;
|
|
1079
1071
|
try {
|
|
1080
|
-
const
|
|
1081
|
-
if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(
|
|
1082
|
-
|
|
1072
|
+
const admitted = await input.admission;
|
|
1073
|
+
if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(admitted.deferredNear.admissionRequest, pending.admissionRequest)) throw new Error("NEAR admission changed the authorized request");
|
|
1074
|
+
preAdmittedReceipt = admitted.admissionReceipt;
|
|
1083
1075
|
} catch (error) {
|
|
1084
|
-
if (error instanceof Error && error.message === "
|
|
1085
|
-
|
|
1076
|
+
if (error instanceof Error && error.message === "NEAR admission changed the authorized request") throw error;
|
|
1077
|
+
preAdmittedReceipt = void 0;
|
|
1086
1078
|
}
|
|
1087
1079
|
const { joined, admissionReceipt } = await continueNearRegistrationCustody({
|
|
1088
1080
|
pending,
|
|
@@ -1091,7 +1083,7 @@ async function startDeferredNearWalletCustody(base, input) {
|
|
|
1091
1083
|
credential: base.signedSetup,
|
|
1092
1084
|
traceContext: base.traceContext,
|
|
1093
1085
|
factorSecret,
|
|
1094
|
-
...
|
|
1086
|
+
...preAdmittedReceipt ? { admitted: preAdmittedReceipt } : {}
|
|
1095
1087
|
});
|
|
1096
1088
|
outcome = "success";
|
|
1097
1089
|
return {
|
|
@@ -29,7 +29,6 @@ const ROUTE_PAYLOAD_BREAKDOWN_MAX_DEPTH = 2;
|
|
|
29
29
|
const ROUTE_PAYLOAD_BREAKDOWN_MAX_FIELDS = 64;
|
|
30
30
|
const WALLET_REGISTRATION_SETUP_PATH = "/wallets/register/setup";
|
|
31
31
|
const WALLET_REGISTRATION_RESPOND_PATH = "/wallets/register/respond";
|
|
32
|
-
const WALLET_REGISTRATION_NEAR_ADMISSION_PATH = "/wallets/register/near-admission";
|
|
33
32
|
const WALLET_REGISTRATION_ACTIVATE_PATH = "/wallets/register/activate";
|
|
34
33
|
const WALLET_REGISTRATION_NEAR_PROVISIONING_PATH = "/wallets/register/near-provisioning";
|
|
35
34
|
/** Managed environment id header for Router API `api_credentials` auth. */
|
|
@@ -1732,47 +1731,6 @@ async function respondWalletRegistration(args) {
|
|
|
1732
1731
|
onServerTiming: args.onServerTiming
|
|
1733
1732
|
}));
|
|
1734
1733
|
}
|
|
1735
|
-
async function authorizeWalletRegistrationNearAdmission(args) {
|
|
1736
|
-
const body = {
|
|
1737
|
-
registrationCeremonyId: args.registrationCeremonyId,
|
|
1738
|
-
signedSetup: args.signedSetup
|
|
1739
|
-
};
|
|
1740
|
-
switch (args.kind) {
|
|
1741
|
-
case "passkey":
|
|
1742
|
-
body.webauthn_registration = args.webauthnRegistration;
|
|
1743
|
-
break;
|
|
1744
|
-
case "email_otp":
|
|
1745
|
-
body.emailOtpRegistrationProof = args.emailOtpRegistrationProof;
|
|
1746
|
-
break;
|
|
1747
|
-
}
|
|
1748
|
-
const response = await postJson({
|
|
1749
|
-
relayerUrl: args.relayerUrl,
|
|
1750
|
-
path: WALLET_REGISTRATION_NEAR_ADMISSION_PATH,
|
|
1751
|
-
headers: args.headers,
|
|
1752
|
-
body
|
|
1753
|
-
});
|
|
1754
|
-
const responseName = "Wallet registration NEAR admission";
|
|
1755
|
-
const record = requireWalletRegistrationResponseObject({
|
|
1756
|
-
responseName,
|
|
1757
|
-
field: "body",
|
|
1758
|
-
value: response
|
|
1759
|
-
});
|
|
1760
|
-
assertWalletRegistrationResponseKeys(record, [
|
|
1761
|
-
"ok",
|
|
1762
|
-
"registrationCeremonyId",
|
|
1763
|
-
"ed25519"
|
|
1764
|
-
], responseName);
|
|
1765
|
-
if (readWalletRegistrationResponseField(record, "ok", responseName) !== true) throw new Error(`${responseName} response is not successful`);
|
|
1766
|
-
return {
|
|
1767
|
-
ok: true,
|
|
1768
|
-
registrationCeremonyId: requireResponseString({
|
|
1769
|
-
responseName,
|
|
1770
|
-
field: "registrationCeremonyId",
|
|
1771
|
-
value: readWalletRegistrationResponseField(record, "registrationCeremonyId", responseName)
|
|
1772
|
-
}),
|
|
1773
|
-
ed25519: parseWalletRegistrationRespondEd25519DeferredWork(readWalletRegistrationResponseField(record, "ed25519", responseName))
|
|
1774
|
-
};
|
|
1775
|
-
}
|
|
1776
1734
|
function parseRegistrationEstablishedSessionResult(value, expectedWalletId) {
|
|
1777
1735
|
const responseName = "Wallet registration established session";
|
|
1778
1736
|
const parsed = parseRegistrationEstablishedSessionResultV2(value);
|
|
@@ -2362,6 +2320,6 @@ async function fetchWalletEcdsaKeyFactsInventoryWithWebAuthn(args) {
|
|
|
2362
2320
|
});
|
|
2363
2321
|
}
|
|
2364
2322
|
//#endregion
|
|
2365
|
-
export { activateWalletAddSignerEcdsa, activateWalletRegistration,
|
|
2323
|
+
export { activateWalletAddSignerEcdsa, activateWalletRegistration, completeWalletRegistrationNearProvisioning, createWalletAddAuthMethodIntent, createWalletAddSignerIntent, fetchWalletEcdsaKeyFactsInventoryWithOperationCredential, fetchWalletEcdsaKeyFactsInventoryWithWebAuthn, finalizeWalletAddAuthMethod, finalizeWalletAddSigner, fundImplicitNearAccountForTesting, isEmailOtpWalletRegistrationFinalizeResponse, parseWalletRegistrationEcdsaDerivationRespond, requestAddAuthMethodEmailOtpChallenge, respondWalletAddSignerEcdsa, respondWalletRegistration, revokeWalletAuthMethod, setupWalletRegistration, startWalletAddAuthMethod, startWalletAddSigner };
|
|
2366
2324
|
|
|
2367
2325
|
//# sourceMappingURL=walletRegistration.js.map
|