@seams/wallet 0.27.0 → 0.28.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/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/walletIframe/client/router.js +38 -0
- package/dist/esm/SeamsWeb/walletIframe/client/sessionCommands.js +16 -0
- package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +1 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +27 -4
- package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +1 -1
- package/dist/esm/core/authMethods/plugins.js +8 -2
- package/dist/esm/core/ui/messages.js +5 -0
- package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +35 -22
- package/dist/esm/react/components/AccountMenuButton/AccountSettingsDialog.js +157 -0
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +13 -1
- package/dist/esm/react/components/AccountMenuButton/ExternalWalletSettings.js +46 -0
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +14 -2
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +154 -5
- package/dist/esm/react/components/AccountMenuButton/index.js +7 -3
- package/dist/esm/react/context/reactLoginStateBuilders.js +20 -0
- package/dist/esm/react/styles/styles.css +154 -5
- package/dist/esm/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-MJoE0AAo.js} +1 -1
- package/dist/{public/sdk/adapters-d9yh1bdC.js → esm/sdk/adapters-C-g_hkkZ.js} +1 -1
- package/dist/esm/sdk/appearance-token-vars-01eH9pgA.js +1 -0
- package/dist/esm/sdk/configBuilder-DpChXfDO.js +1 -0
- package/dist/esm/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
- package/dist/esm/sdk/{confirm-ui-nU6ymgiv.js → confirm-ui-em0vkd2m.js} +1 -1
- package/dist/esm/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-x3WkiYrd.js} +1 -1
- package/dist/esm/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-BSTfHhau.js} +1 -1
- package/dist/{public/sdk/exportKeypairOperation-CGE9ZU1m.js → esm/sdk/exportKeypairOperation-CjST_NUK.js} +1 -1
- package/dist/esm/sdk/host-C51z-AxP.js +1 -0
- package/dist/esm/sdk/{localOnly-BATWJj78.js → localOnly-Xs89Xajm.js} +1 -1
- package/dist/esm/sdk/{mountExportPrivateKeySurface-CyHU8bVc.js → mountExportPrivateKeySurface-CsUEKeum.js} +1 -1
- package/dist/esm/sdk/{mountRecoveryCodeBackupSurface-C7aglQxf.js → mountRecoveryCodeBackupSurface-kFLo5zLk.js} +1 -1
- package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → esm/sdk/pendingWalletRecoveryCodeBackup-B-R_U34I.js} +1 -1
- package/dist/esm/sdk/{registration-CNLUYN-p.js → registration-Byl4l4yZ.js} +1 -1
- package/dist/esm/sdk/{registration-HSwOHZOo.js → registration-C2fb9kRQ.js} +1 -1
- package/dist/esm/sdk/resealedEnvelopeResult-CLW00Vbw.js +1 -0
- package/dist/esm/sdk/runtime-auth-ufbVur2p.js +1 -0
- package/dist/esm/sdk/{runtime-device-link-DAsq5tGT.js → runtime-device-link-CagI2Q62.js} +1 -1
- package/dist/{public/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js → esm/sdk/runtime-ecdsa-tempo-Rctxr0yM.js} +1 -1
- package/dist/{public/sdk/runtime-email-otp-BxSKK9AG.js → esm/sdk/runtime-email-otp-BQtcG-LF.js} +1 -1
- package/dist/esm/sdk/{runtime-export-BWnQXMzT.js → runtime-export-wTeEaqlk.js} +1 -1
- package/dist/esm/sdk/{runtime-near-CuzPZrDS.js → runtime-near-59yU_3ud.js} +1 -1
- package/dist/esm/sdk/{runtime-preferences-B-nDWlm3.js → runtime-preferences-B9qLHX8W.js} +1 -1
- package/dist/esm/sdk/{runtime-recovery-DpOdEJ8N.js → runtime-recovery-DNyzdMBj.js} +1 -1
- package/dist/esm/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-si1fGktB.js} +1 -1
- package/dist/esm/sdk/runtimeContext-ByeM6Z4Z.js +6 -0
- package/dist/{public/sdk/sessionObservationRevision-JOvVF4Hf.js → esm/sdk/sessionObservationRevision-ihBwjS3y.js} +1 -1
- package/dist/esm/sdk/tx-confirm-ui.js +8 -0
- package/dist/esm/sdk/voiceid-host.js +1 -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/{walletRecoveryAdminProof-CvSYbyg5.js → walletRecoveryAdminProof-B4Ic07jY.js} +1 -1
- package/dist/esm/shared-ts/src/auth/externalAuth.js +53 -0
- package/dist/esm/voiceid-host.js +1 -1
- package/dist/public/headers.manifest.json +1 -1
- package/dist/public/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-MJoE0AAo.js} +1 -1
- package/dist/{esm/sdk/adapters-d9yh1bdC.js → public/sdk/adapters-C-g_hkkZ.js} +1 -1
- package/dist/public/sdk/appearance-token-vars-01eH9pgA.js +1 -0
- package/dist/public/sdk/configBuilder-DpChXfDO.js +1 -0
- package/dist/public/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
- package/dist/public/sdk/{confirm-ui-nU6ymgiv.js → confirm-ui-em0vkd2m.js} +1 -1
- package/dist/public/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-x3WkiYrd.js} +1 -1
- package/dist/public/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-BSTfHhau.js} +1 -1
- package/dist/{esm/sdk/exportKeypairOperation-CGE9ZU1m.js → public/sdk/exportKeypairOperation-CjST_NUK.js} +1 -1
- package/dist/public/sdk/host-C51z-AxP.js +1 -0
- package/dist/public/sdk/{localOnly-BATWJj78.js → localOnly-Xs89Xajm.js} +1 -1
- package/dist/public/sdk/{mountExportPrivateKeySurface-CyHU8bVc.js → mountExportPrivateKeySurface-CsUEKeum.js} +1 -1
- package/dist/public/sdk/{mountRecoveryCodeBackupSurface-C7aglQxf.js → mountRecoveryCodeBackupSurface-kFLo5zLk.js} +1 -1
- package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → public/sdk/pendingWalletRecoveryCodeBackup-B-R_U34I.js} +1 -1
- package/dist/public/sdk/{registration-CNLUYN-p.js → registration-Byl4l4yZ.js} +1 -1
- package/dist/public/sdk/{registration-HSwOHZOo.js → registration-C2fb9kRQ.js} +1 -1
- package/dist/public/sdk/resealedEnvelopeResult-CLW00Vbw.js +1 -0
- package/dist/public/sdk/runtime-auth-ufbVur2p.js +1 -0
- package/dist/public/sdk/{runtime-device-link-DAsq5tGT.js → runtime-device-link-CagI2Q62.js} +1 -1
- package/dist/{esm/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js → public/sdk/runtime-ecdsa-tempo-Rctxr0yM.js} +1 -1
- package/dist/{esm/sdk/runtime-email-otp-BxSKK9AG.js → public/sdk/runtime-email-otp-BQtcG-LF.js} +1 -1
- package/dist/public/sdk/{runtime-export-BWnQXMzT.js → runtime-export-wTeEaqlk.js} +1 -1
- package/dist/public/sdk/{runtime-near-CuzPZrDS.js → runtime-near-59yU_3ud.js} +1 -1
- package/dist/public/sdk/{runtime-preferences-B-nDWlm3.js → runtime-preferences-B9qLHX8W.js} +1 -1
- package/dist/public/sdk/{runtime-recovery-DpOdEJ8N.js → runtime-recovery-DNyzdMBj.js} +1 -1
- package/dist/public/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-si1fGktB.js} +1 -1
- package/dist/public/sdk/runtimeContext-ByeM6Z4Z.js +6 -0
- package/dist/{esm/sdk/sessionObservationRevision-JOvVF4Hf.js → public/sdk/sessionObservationRevision-ihBwjS3y.js} +1 -1
- package/dist/public/sdk/tx-confirm-ui.js +8 -0
- package/dist/public/sdk/voiceid-host.js +1 -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/{walletRecoveryAdminProof-CvSYbyg5.js → walletRecoveryAdminProof-B4Ic07jY.js} +1 -1
- package/dist/public/wallet-assets.manifest.json +61 -61
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/shared-ts/src/auth/externalAuth.d.ts +84 -0
- package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +11 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +4 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +4 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +5 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalAuth.d.ts +29 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +1 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +3 -3
- package/dist/types/wallet/src/core/authMethods/plugins.d.ts +2 -0
- package/dist/types/wallet/src/core/types/seams.d.ts +14 -6
- package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
- package/dist/types/wallet/src/index.d.ts +1 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +2 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountSettingsDialog.d.ts +10 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/ExternalWalletSettings.d.ts +10 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +1 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/hooks/useProfileState.d.ts +2 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +4 -3
- package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +1 -1
- package/dist/types/wallet/src/react/types.d.ts +13 -3
- package/dist/types/wallet/src/voiceid-host.d.ts +2 -2
- package/package.json +1 -1
- package/dist/esm/react/components/AccountMenuButton/AccountMenuModal.js +0 -66
- package/dist/esm/sdk/appearance-token-vars-BJydfWT_.js +0 -1
- package/dist/esm/sdk/configBuilder-CSwJrmcR.js +0 -1
- package/dist/esm/sdk/host-DayrOrgm.js +0 -1
- package/dist/esm/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
- package/dist/esm/sdk/runtime-auth-BCoj7_-G.js +0 -1
- package/dist/esm/sdk/runtimeContext-5JcewRo3.js +0 -6
- package/dist/public/sdk/appearance-token-vars-BJydfWT_.js +0 -1
- package/dist/public/sdk/configBuilder-CSwJrmcR.js +0 -1
- package/dist/public/sdk/host-DayrOrgm.js +0 -1
- package/dist/public/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
- package/dist/public/sdk/runtime-auth-BCoj7_-G.js +0 -1
- package/dist/public/sdk/runtimeContext-5JcewRo3.js +0 -6
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuModal.d.ts +0 -9
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-dVx5-UGu.js";import{A as t,C as n,E as r,H as i,M as a,N as o,O as s,P as c,S as l,T as u,V as d,d as f,f as p,g as m,h,i as g,k as _,l as v,m as y,n as b,r as x,u as S,w as C,x as w,y as T}from"./domainIds-t1lp25yU.js";import{S as E,b as D,f as O,g as k,h as A,i as j,o as M,r as ee,s as te,t as ne,v as re,w as N}from"./digests-BIaE0DMd.js";import{a as ie,c as ae,i as oe,l as se,n as ce,o as le,r as ue,t as de,u as fe}from"./participants-BXdREC5k.js";import{i as pe,n as me}from"./configBuilder-CSwJrmcR.js";import{t as he}from"./theme-os0Salmo.js";import{i as P,n as ge,r as F}from"./base64-BmKR3UqU.js";import{n as _e,r as ve}from"./secureRandomId-8LSc91aN.js";import{a as ye,c as be,i as xe,n as Se,o as Ce,s as we}from"./walletDbName-Ca0rCq5r.js";import{A as Te,D as Ee,E as De,I as Oe,J as ke,M as Ae,N as je,O as Me,P as Ne,Q as Pe,X as Fe,Z as Ie,a as Le,h as Re,i as ze,j as Be,k as Ve,r as He,t as Ue,z as We}from"./activeWalletSession-BJ4B-nJo.js";import{o as Ge,s as Ke,t as qe}from"./chains-B72I4PDH.js";import{n as Je,t as Ye}from"./configHelpers-CXDY3bKC.js";import{a as Xe,c as Ze,d as Qe,n as $e,s as et,t as tt}from"./signingSessionSeal-BFOBKj-J.js";import{r as nt}from"./configuration-DBEc3bsj.js";import{r as rt}from"./transactionReviewAdmission-Cf_qUZJt.js";import{_ as it,g as at,h as ot,i as st,m as ct,n as lt,r as ut,t as dt,y as ft}from"./sessionObservationRevision-JOvVF4Hf.js";import{a as pt,d as mt,g as ht,h as gt,i as _t,l as vt,m as yt,n as bt,o as xt,r as St,t as Ct}from"./capabilityKinds-DVlGMspk.js";import{a as wt,r as Tt}from"./canonicalPrimitives-Jd3i_Ngz.js";import{t as Et}from"./walletIframeIdentity-CpgyEnKg.js";import{i as Dt,n as Ot,s as I,t as L}from"./errors-BJBDbwHk.js";import{t as kt}from"./signer-worker-BNodGJKY.js";import{n as At,t as jt}from"./csp-stylesheet-DUSqfXvZ.js";import{a as R,c as Mt,d as Nt,f as Pt,h as Ft,i as It,m as Lt,n as z,o as Rt,p as zt,r as Bt,s as Vt,u as Ht}from"./signerDomain-BAsLT3XN.js";import{E as Ut,f as Wt,g as Gt,h as Kt,m as qt,p as Jt,r as Yt,v as Xt,w as Zt,x as Qt}from"./registrationIntent-Do1tD1V7.js";import{n as $t,t as en}from"./presignatures-BCeq56DG.js";import{a as tn,c as B,i as nn,n as rn,o as V,s as an,t as on,u as sn}from"./ecdsaChainTarget-Bm5X4k-V.js";import{s as cn,t as ln}from"./normalization-Df9fZWJC.js";import{a as un,d as dn,i as fn,r as pn,t as mn}from"./accountIds-CW2BP-d9.js";import{$ as hn,A as gn,B as _n,C as vn,D as yn,E as bn,F as xn,G as Sn,H as Cn,I as wn,J as Tn,K as En,L as Dn,M as On,N as kn,O as An,P as jn,Q as Mn,R as Nn,S as Pn,T as Fn,U as In,V as Ln,W as Rn,X as zn,Y as Bn,Z as Vn,_ as Hn,a as Un,b as Wn,c as Gn,d as Kn,et as qn,f as Jn,g as Yn,h as Xn,i as Zn,j as Qn,k as $n,l as er,m as tr,n as nr,o as rr,p as ir,r as ar,s as or,u as sr,w as cr,x as lr,y as ur,z as dr}from"./device-linking-DiCNt3iA.js";import{A as fr,D as pr,G as mr,H as hr,K as gr,M as _r,N as vr,O as yr,U as br,W as xr,Y as Sr,Z as Cr,b as wr,f as Tr,n as Er,nt as Dr,o as Or,p as kr,r as Ar,s as jr,t as Mr,tt as Nr,v as Pr,w as Fr,y as Ir}from"./walletAuthority-BTGAuOi8.js";import{A as Lr,Dt as Rr,Et as zr,Ft as Br,G as Vr,I as Hr,K as Ur,Nt as Wr,Ot as Gr,Pt as Kr,Q as qr,S as Jr,Tt as Yr,W as Xr,X as Zr,Y as Qr,Z as $r,_ as ei,at as ti,ct as ni,it as ri,kt as ii,lt as ai,nt as oi,q as si,rt as ci,ut as H,x as li}from"./digestEncoding-CqNXPZY9.js";import{n as ui,r as di,t as fi}from"./walletAuthMethodRecord-DLBB5fez.js";import{a as pi,i as mi,o as hi,t as gi}from"./signerSlot-D2RZnb27.js";import{C as _i,D as vi,E as yi,I as bi,M as xi,N as Si,P as Ci,R as wi,T as Ti,V as Ei,j as Di,k as Oi,w as ki,z as Ai}from"./ecdsaCapabilityManifest-DAJEVjlP.js";import{d as ji,f as Mi,g as Ni,h as Pi,l as Fi,m as Ii,o as U,r as Li,s as W,t as Ri}from"./sdkSentEvents-DjOlKtdW.js";import{D as zi,F as Bi,I as Vi,d as Hi,f as Ui,l as Wi,n as Gi,r as Ki,t as G,u as qi,v as Ji,y as Yi}from"./indexedDB-C4SDsyOG.js";import"./keccak-mS0Mejjx.js";import{c as Xi,t as Zi}from"./registrationSignerPlan-DK2b3N_p.js";import{a as Qi,c as $i,o as ea,s as ta,t as na,u as ra}from"./walletCapabilityBindings-D5YYB7nN.js";import{n as ia}from"./authenticatorOptions-WCDKYRux.js";import{i as aa}from"./walletOwnershipGeneration-CgjCtPrV.js";import{A as oa,C as sa,O as ca,S as la,T as ua,_ as da,c as fa,d as pa,f as ma,h as ha,j as ga,k as _a,l as va,m as ya,o as ba,s as xa,v as Sa,x as Ca}from"./emailOtpEcdsaDerivationIdentity-HFQXc1Yw.js";import{c as wa,n as Ta,r as Ea,s as Da}from"./types-f7dyj5N6.js";import{o as K,t as Oa}from"./walletSessionAuthorizationStore-B9Vwkshr.js";import{a as ka,c as Aa,l as ja,o as Ma,r as Na,s as Pa,t as Fa,u as Ia}from"./resealedEnvelopeResult-B1p5UkYg.js";import{n as La,t as q}from"./walletSessionAuthorizationStatus-DG7DPcgR.js";import{t as Ra}from"./executeWorkerOperation-C9FOCCR7.js";import{a as za,c as Ba,i as Va,l as Ha,n as Ua,o as Wa,r as Ga,s as Ka,t as qa,u as Ja}from"./unlockedEd25519ExportRootCapability-yzxQjIFd.js";import{a as Ya,t as Xa}from"./actions-DrtSTGus.js";import{$ as Za,A as Qa,At as $a,B as eo,Bt as to,C as no,Ct as ro,D as io,Dt as ao,E as oo,Et as so,F as co,Ft as lo,G as uo,Gt as fo,H as po,Ht as mo,I as ho,It as go,J as _o,Jt as vo,K as yo,Kt as bo,L as xo,Lt as So,M as Co,Mt as wo,N as To,Nt as Eo,O as Do,Ot as Oo,P as ko,Pt as Ao,Q as jo,R as Mo,Rt as No,S as Po,St as Fo,T as Io,Tt as Lo,U as Ro,Ut as zo,V as Bo,Vt as Vo,W as Ho,Wt as Uo,X as Wo,Xt as Go,Y as Ko,Z as qo,Zt as Jo,_ as Yo,_t as Xo,a as Zo,at as J,b as Qo,bt as $o,c as es,ct as ts,d as ns,dt as rs,et as is,f as as,ft as os,g as ss,gt as cs,h as ls,ht as us,it as ds,j as fs,jt as ps,k as ms,kt as hs,l as gs,lt as _s,m as vs,mt as ys,nt as bs,ot as xs,p as Ss,pt as Cs,q as ws,qt as Ts,rt as Es,st as Ds,t as Os,tt as ks,u as As,ut as js,v as Ms,vt as Ns,w as Ps,wt as Fs,x as Is,xt as Ls,y as Rs,yt as zs,z as Bs,zt as Vs}from"./registration-CNLUYN-p.js";import{c as Hs,l as Us,o as Ws,s as Gs,u as Ks}from"./helpers-Dubwo5uK.js";import{i as qs}from"./profileAccountProjection-C5sNt-s2.js";import{A as Js,C as Ys,D as Xs,E as Zs,F as Qs,I as $s,M as ec,O as tc,S as nc,T as rc,_ as ic,a as ac,b as oc,c as sc,g as cc,i as lc,k as uc,l as dc,n as fc,o as pc,r as mc,s as hc,t as gc,v as _c,w as vc,x as yc,y as bc}from"./accountLifecycle-6DHYWf0v.js";import{a as xc,i as Sc,l as Cc,n as wc,o as Tc,s as Ec,t as Dc}from"./walletCustodyEcdsaContinuity-C31YQ9av.js";import{A as Oc,C as kc,E as Ac,O as jc,_ as Mc,a as Nc,g as Pc,h as Fc,i as Ic,l as Lc,n as Rc,o as zc,p as Bc,r as Vc,t as Hc}from"./nearEd25519YaoMaterialActivation-BfXmy3Jr.js";import{C as Uc,D as Wc,M as Gc,N as Kc,O as qc,P as Jc,_ as Yc,a as Xc,c as Zc,d as Qc,f as $c,h as el,i as tl,j as nl,k as rl,l as il,m as al,n as ol,p as sl,r as cl,s as ll,t as ul,u as dl,v as fl,w as pl}from"./nearEd25519YaoSigningPreparation-DHNk0F8e.js";import{a as ml,i as hl,o as gl,r as _l,t as vl}from"./pendingWalletRecoveryCodeBackup-Cjx-X-pP.js";import{c as yl,i as bl,o as xl,r as Sl,s as Cl,t as wl}from"./wallet-recovery-BZB2Vu3X.js";import{t as Tl}from"./walletCustodyOperation-DimzAbCB.js";import{n as El,t as Dl}from"./prfCache-DEHaUPSW.js";import{u as Ol}from"./trace--mRP2OQc.js";import{o as kl,r as Al}from"./walletSessionAuthorizationProjection-BzUH6gHV.js";import{_ as jl,a as Ml,c as Nl,d as Pl,f as Fl,g as Il,h as Ll,i as Rl,l as zl,m as Bl,n as Vl,o as Hl,p as Ul,r as Wl,s as Gl,t as Kl,u as ql,y as Jl}from"./adapters-d9yh1bdC.js";import{_ as Yl,a as Xl,c as Zl,d as Ql,f as $l,g as eu,h as tu,i as nu,l as ru,m as iu,n as au,o as ou,p as su,s as cu,u as lu,y as uu}from"./ecdsaDerivationExport-DJKOzDbS.js";import{i as du,n as fu,r as pu}from"./intentDigest-HvRsBQ1z.js";import{n as mu,r as hu,t as gu}from"./deviceLinkApproval-CfEiotVt.js";import{i as _u}from"./walletRecoveryCommit-Cc2LAkCS.js";import{t as vu}from"./NonceCoordinator-3YhmDTS5.js";import{A as yu,C as bu,D as xu,E as Su,F as Cu,I as wu,L as Tu,M as Eu,N as Du,O as Ou,P as ku,R as Au,S as ju,T as Mu,_ as Nu,b as Pu,c as Fu,f as Iu,g as Lu,h as Ru,j as zu,k as Bu,l as Vu,m as Hu,o as Uu,p as Wu,r as Gu,s as Ku,t as qu,v as Ju,w as Yu,y as Xu}from"./ecdsaDerivationClientWasm-AYOJgTJm.js";import{a as Zu,n as Qu,o as $u,r as ed,s as td,t as nd}from"./presignaturePool-BbvqRWYw.js";import{i as rd,t as id}from"./walletSessionFailure-CxsVtroW.js";import{_ as ad,a as od,b as sd,c as cd,d as ld,f as ud,g as dd,h as fd,i as pd,l as md,m as hd,n as gd,o as _d,p as vd,r as yd,t as bd,u as xd,v as Sd,y as Cd}from"./signEvmFamily-BY5jlZEG.js";import{a as wd,c as Td,d as Ed,f as Dd,i as Od,l as kd,o as Ad,s as jd,t as Md,u as Nd}from"./signingQueue-dMFOFOP5.js";import{_ as Pd,c as Fd,d as Id,g as Ld,h as Rd,i as zd,o as Bd,r as Vd,s as Hd,t as Ud,u as Wd,v as Gd}from"./clientSessionPersistenceState-BCkJAYSz.js";import{_ as Kd,a as qd,c as Jd,d as Yd,f as Xd,g as Zd,h as Qd,i as $d,m as ef,o as tf,p as nf,r as rf,s as af,t as of,u as sf}from"./signNear-DMpJFkwF.js";import{i as cf,t as lf}from"./collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js";import{c as uf,d as df,f as ff,i as pf,o as mf,s as hf,t as gf}from"./signingFlow-BcetvUeS.js";import{t as _f}from"./types-C4OErbBf.js";import{S as vf,_ as yf,d as bf,f as xf,m as Sf,p as Cf}from"./requireStepUpAuth-COqCGb1i.js";import{t as wf}from"./commitQueue-CYruPlkm.js";import{a as Tf,c as Ef,i as Df,l as Of,n as kf,o as Af,r as jf,s as Mf,t as Nf,u as Pf}from"./walletRecoveryAdminProof-CvSYbyg5.js";import{n as Y,t as Ff}from"./confirmTypes-BvVtQs-M.js";import{c as If,l as Lf,o as Rf,r as zf,s as Bf}from"./confirm-ui-nU6ymgiv.js";import{i as Vf,n as Hf,r as Uf,t as Wf}from"./transaction-activity-DCzHGg3b.js";import"./appearance-token-vars-BJydfWT_.js";import{t as Gf}from"./registration-HSwOHZOo.js";function Kf(){let e=typeof window<`u`&&window.location?.origin?window.location.origin:``;try{let t=window?.__SEAMS_WALLET_SDK_BASE__;if(t){let n=new URL(t,e||`https://invalid.local`).origin;if(n===e)return n}}catch{}return e}function qf(e,t){let n=t.worker,r=t.baseOrigin||Kf()||(typeof window<`u`?window.location.origin:``)||`https://invalid.local`;try{let t=typeof window<`u`?window:{},i;switch(n){case`signer`:i=t.__SEAMS_SIGNER_WORKER_URL__;break;case`ecdsaDerivationClient`:i=t.__SEAMS_ECDSA_DERIVATION_CLIENT_WORKER_URL__;break;case`ecdsaPresignClient`:i=t.__SEAMS_ECDSA_PRESIGN_CLIENT_WORKER_URL__;break;case`ecdsaOnlineClient`:i=t.__SEAMS_ECDSA_ONLINE_CLIENT_WORKER_URL__;break;case`touchConfirm`:i=t.__SEAMS_TOUCH_CONFIRM_WORKER_URL__;break;case`passkeyMpcExport`:i=t.__SEAMS_PASSKEY_MPC_EXPORT_WORKER_URL__;break;case`passkeyMpcSession`:i=t.__SEAMS_PASSKEY_MPC_SESSION_WORKER_URL__;break;case`deviceLinking`:i=t.__SEAMS_DEVICE_LINKING_WORKER_URL__;break;default:}let a=typeof i==`string`&&i?i:e||Yf(n);return Jf(/^https?:\/\//i.test(a)?new URL(a):new URL(a,r),i).toString()}catch{try{return new URL(e||Yf(n),r).toString()}catch{}return e||Yf(n)}}function Jf(e,t){if(typeof t==`string`&&t.length>0)return e;let n=ot(),r=at();if(!n||!r||e.searchParams.has(`v`))return e;try{let t=new URL(r);if(e.origin!==t.origin||!e.pathname.startsWith(t.pathname))return e;e.searchParams.set(`v`,n)}catch{}return e}function Yf(e){switch(e){case`signer`:return`/sdk/workers/near-signer.worker.js`;case`ecdsaDerivationClient`:return`/sdk/workers/ecdsa-derivation-client.worker.js`;case`ecdsaPresignClient`:return`/sdk/workers/ecdsa-presign-client.worker.js`;case`ecdsaOnlineClient`:return`/sdk/workers/ecdsa-online-client.worker.js`;case`touchConfirm`:return`/sdk/workers/passkey-confirm.worker.js`;case`passkeyMpcExport`:return`/sdk/workers/passkey-mpc-export.worker.js`;case`passkeyMpcSession`:return`/sdk/workers/passkey-mpc-session.worker.js`;case`deviceLinking`:return`/sdk/workers/device-linking-key.worker.js`;default:throw Error(`Unsupported dedicated worker kind`)}}var X=class extends Error{name=`DeviceLinkingError`;constructor(e,t,n){super(e),this.code=t,this.phase=n}};let Z=function(e){return e.INVALID_QR_DATA=`INVALID_QR_DATA`,e.ACCOUNT_NOT_OWNED=`ACCOUNT_NOT_OWNED`,e.AUTHORIZATION_TIMEOUT=`AUTHORIZATION_TIMEOUT`,e.INSUFFICIENT_BALANCE=`INSUFFICIENT_BALANCE`,e.REGISTRATION_FAILED=`REGISTRATION_FAILED`,e.WALLET_UNLOCK_REQUIRED=`WALLET_UNLOCK_REQUIRED`,e.DELIVERY_RECOVERY_REQUIRED=`DELIVERY_RECOVERY_REQUIRED`,e.SESSION_EXPIRED=`SESSION_EXPIRED`,e.UNSUPPORTED=`UNSUPPORTED`,e}({});function Xf(e){let t=u(e);if(!t.ok)throw Error(`Device-link target email address is invalid: ${t.error.message}`);return t.value}function Zf(e){try{return Xf(e),!0}catch{return!1}}async function Qf(e,t){if(!pe(e,t))throw Error(`Enable the authentication method plugin before using it.`);switch(t){case`voiceid`:return await $f()}throw Error(`Authentication method plugin is unavailable in this Wallet host.`)}async function $f(){let e;try{e=await import(`/sdk/voiceid/host.js`)}catch(e){throw await ep(e)}if(!k(e)||e.hostApiVersion!==2||!tp(e.voiceIdHostPlugin))throw Error(`VoiceID is incompatible with this Wallet host. Install matching package versions.`);return e.voiceIdHostPlugin}async function ep(e){let t=Error(`VoiceID could not load. Check your connection and retry. If it still fails, reload the page or use a passkey.`,{cause:e}),n;try{n=await fetch(`/sdk/voiceid/host.js`,{cache:`no-cache`,credentials:`omit`,signal:AbortSignal.timeout(1e4)}),await n.body?.cancel()}catch{return t}return n.status===404||n.status===410?Error(`VoiceID is missing from this Wallet host. Install @seams/voiceid on this Wallet host, or use a passkey.`,{cause:e}):t}function tp(e){return k(e)&&typeof e.unlock==`function`&&typeof e.activate==`function`&&typeof e.review==`function`}async function np(e,t){return rp(e,t,3)}async function rp(e,t,n){let{walletId:r}=e;if(n===0)return mp(r,`superseded`);let i;try{i=await t.resolveSelectedWalletAuthority(String(e.walletId))}catch{return mp(e.walletId,`unavailable`)}switch(i.kind){case`missing_selection`:return{kind:`wallet_locked`};case`missing_auth_method`:case`missing_authority`:case`integrity_error`:return mp(e.walletId,`invalid`);case`resolved`:break}let{selection:a,authMethod:o,authority:s}=i;if(a.walletId!==e.walletId||a.walletAuthMethodId!==o.walletAuthMethodId||o.walletId!==e.walletId||o.walletAuthorityId!==s.authorityId||s.walletId!==e.walletId)return mp(e.walletId,`invalid`);if(a.lockState===`locked`)return{kind:`wallet_locked`};if(o.status!==`active`||s.state!==`active`||o.kind===`voiceid`)return mp(e.walletId,`invalid`);let c=await op(t,{walletId:e.walletId,authorityId:s.authorityId,authMethodId:o.walletAuthMethodId});switch(c.kind){case`missing`:return mp(e.walletId,`absent`);case`corrupt`:return mp(e.walletId,`invalid`);case`persistence_unavailable`:return mp(e.walletId,`unavailable`);case`upgrade_required`:return mp(e.walletId,`upgrade_required`);case`found`:break}let{record:l,operationCredential:u}=c;if(!ap({walletId:e.walletId,authorization:l,operationCredential:u,selected:i}))return mp(e.walletId,`invalid`);let d=t.nowMs();if(l.expiresAtMs<=d)return cp(e.walletId,o.kind,l,u);let f;try{f=await t.readStatus({authorization:l,operationCredential:u})}catch{return mp(e.walletId,`unavailable`)}let p;try{p=await t.resolveSelectedWalletAuthority(e.walletId)}catch{return mp(e.walletId,`unavailable`)}if(p.kind!==`resolved`||p.selection.lockState!==`unlocked`||p.selection.lockGeneration!==a.lockGeneration||p.selection.walletAuthMethodId!==a.walletAuthMethodId||p.authMethod.status!==`active`||p.authMethod.kind!==o.kind||p.authority.state!==`active`||!ap({walletId:r,authorization:l,operationCredential:u,selected:p}))return rp(e,t,n-1);let m=await op(t,{walletId:r,authorityId:s.authorityId,authMethodId:o.walletAuthMethodId});return m.kind!==`found`||!Ue(m.record,l)||m.operationCredential.walletSessionId!==u.walletSessionId||m.operationCredential.token!==u.token?rp(e,t,n-1):l.expiresAtMs<=t.nowMs()?cp(r,o.kind,l,u):lp(f,l,u)?up({walletId:e.walletId,authMethod:o.kind,authorization:l,operationCredential:u,status:f}):mp(e.walletId,`invalid`)}function ip(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Wallet iframe exact session identity must be an object`);return fp(e)}function ap(e){let{authorization:t,operationCredential:n,selected:r}=e;return t.walletId===e.walletId&&t.authorityId===r.authority.authorityId&&t.authMethodId===r.authMethod.walletAuthMethodId&&t.authorityDigestB64u===r.authority.authorityDigestB64u&&t.authorityRevocationEpoch===r.authority.revocationEpoch&&n.kind===`opaque_wallet_session_operation_credential_v1`&&n.token.trim().length>0&&String(t.authorizationId)!==String(n.walletSessionId)}async function op(e,t){try{return await e.readExactActiveForWallet(t)}catch{return{kind:`persistence_unavailable`}}}function sp(e,t,n,r){return{walletId:e,authorizationId:n.authorizationId,walletSessionId:r.walletSessionId,authMethod:t,expiresAtMs:n.expiresAtMs}}function cp(e,t,n,r){return{kind:`expired_session`,...sp(e,t,n,r)}}function lp(e,t,n){if(e.walletSessionId!==n.walletSessionId||e.quotaId!==t.quotaId)return!1;switch(e.status){case`missing`:case`invalid`:return!0;case`active`:case`exhausted`:case`expired`:case`superseded`:case`authority_unavailable`:case`method_unavailable`:case`capability_unavailable`:return e.expiresAtMs===t.expiresAtMs&&Ue(e.authorization,t)}}function up(e){switch(e.status.status){case`active`:return e.status.remainingUses<=0?mp(e.walletId,`invalid`):{kind:`active_session`,status:`active`,...sp(e.walletId,e.authMethod,e.authorization,e.operationCredential)};case`exhausted`:return mp(e.walletId,`exhausted`);case`expired`:return cp(e.walletId,e.authMethod,e.authorization,e.operationCredential);case`missing`:return{kind:`wallet_unlocked_without_signing_session`,walletId:e.walletId,reason:`not_found`,authorizationId:e.authorization.authorizationId,walletSessionId:e.operationCredential.walletSessionId,authMethod:e.authMethod};case`superseded`:case`authority_unavailable`:case`method_unavailable`:case`capability_unavailable`:return mp(e.walletId,`superseded`);case`invalid`:return mp(e.walletId,`invalid`)}}function dp(e,t){return e.walletId===t.walletId&&e.authorizationId===t.authorizationId&&e.walletSessionId===t.walletSessionId}function fp(e){let t=gt(Reflect.get(e,`walletSessionId`));if(!t.ok)throw Error(`Wallet iframe walletSessionId is invalid`);let n=Reflect.get(e,`expiresAtMs`);if(!gp(n))throw Error(`Wallet iframe expiresAtMs is invalid`);let r=hp(Reflect.get(e,`walletId`)),i=yt(Reflect.get(e,`authorizationId`));if(!i.ok)throw Error(`Wallet iframe authorizationId is invalid`);let a=Reflect.get(e,`authMethod`);if(!Rt(a))throw Error(`Wallet iframe authMethod is invalid`);return pp(i.value,t.value),{walletId:r,authorizationId:i.value,walletSessionId:t.value,authMethod:a,expiresAtMs:n}}function pp(e,t){if(String(e)===String(t))throw Error(`Wallet iframe authorization and Wallet Session IDs must be distinct`)}function mp(e,t){return{kind:`wallet_unlocked_without_signing_session`,walletId:e,reason:t}}function hp(e){let t=_(e);if(!t.ok)throw Error(`Wallet iframe walletId is invalid`);return t.value}function gp(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0}async function _p(e,t){let n;try{n=await t.resolveSelectedWalletAuthority(String(e.walletId))}catch{return{kind:`failed`,reason:`unavailable`}}let r=vp(e.walletId,n);if(r.kind!==`context`)return r;let i;try{i=await t.listWalletAuthMethodsV2ForWallet(String(e.walletId))}catch{return{kind:`failed`,reason:`unavailable`}}let a=new Set;for(let e of i){let n=await yp({context:r,method:e,seenMethodIds:a},t);if(n.kind===`failed`)return n}return{kind:`reconciled`}}function vp(e,t){switch(t.kind){case`missing_selection`:return{kind:`skipped`};case`missing_auth_method`:case`missing_authority`:case`integrity_error`:return{kind:`failed`,reason:`invalid`};case`resolved`:break}return t.selection.walletId!==e||t.authMethod.walletId!==e||t.authority.walletId!==e||t.selection.walletAuthMethodId!==t.authMethod.walletAuthMethodId||t.authMethod.walletAuthorityId!==t.authority.authorityId?{kind:`failed`,reason:`invalid`}:t.selection.lockState===`locked`?{kind:`skipped`}:t.authMethod.status!==`active`||t.authority.state!==`active`?{kind:`failed`,reason:`invalid`}:{kind:`context`,walletId:e,selected:t}}async function yp(e,t){let{context:n,method:r,seenMethodIds:i}=e,a=String(r.walletAuthMethodId);if(i.has(a)||(i.add(a),r.walletId!==n.walletId))return{kind:`failed`,reason:`invalid`};if(r.walletAuthorityId!==n.selected.authority.authorityId||r.status!==`active`)return{kind:`skipped`};let o;try{o=await t.resolveWalletAuthorityForMethod(String(n.walletId),a)}catch{return{kind:`failed`,reason:`unavailable`}}if(o.kind!==`resolved`||!bp(o,n,r))return{kind:`failed`,reason:`invalid`};let s;try{s=await t.readExactActiveForWallet({walletId:n.walletId,authorityId:o.authority.authorityId,authMethodId:o.authMethod.walletAuthMethodId})}catch{return{kind:`failed`,reason:`unavailable`}}switch(s.kind){case`missing`:return{kind:`skipped`};case`upgrade_required`:case`corrupt`:return{kind:`failed`,reason:`invalid`};case`persistence_unavailable`:return{kind:`failed`,reason:`unavailable`};case`found`:break}if(!xp(s.record,s.operationCredential,o))return{kind:`failed`,reason:`invalid`};let c;try{c=await t.readStatus({authorization:s.record,operationCredential:s.operationCredential})}catch{return{kind:`failed`,reason:`unavailable`}}let l=Sp(c,s.record,s.operationCredential);if(l.kind===`failed`||l.kind===`skipped`)return l;if(!Ue(l.authorization,s.record)){try{if(await t.refreshExactWithOperationCredential({expected:s.record,record:l.authorization,operationCredential:s.operationCredential})===`superseded`)return{kind:`skipped`}}catch{return{kind:`failed`,reason:`unavailable`}}return{kind:`reconciled`}}return{kind:`reconciled`}}function bp(e,t,n){return e.selection.walletId===t.walletId&&e.authMethod.walletAuthMethodId===n.walletAuthMethodId&&e.authMethod.walletId===t.walletId&&e.authMethod.walletAuthorityId===t.selected.authority.authorityId&&e.authMethod.status===`active`&&e.authority.authorityId===t.selected.authority.authorityId&&e.authority.walletId===t.walletId&&e.authority.state===`active`&&e.authority.authorityDigestB64u===t.selected.authority.authorityDigestB64u&&e.authority.revocationEpoch===t.selected.authority.revocationEpoch}function xp(e,t,n){try{return ze(t),e.walletId===n.authority.walletId&&e.authorityId===n.authority.authorityId&&e.authMethodId===n.authMethod.walletAuthMethodId}catch{return!1}}function Sp(e,t,n){if(e.walletSessionId!==n.walletSessionId||e.quotaId!==t.quotaId)return{kind:`failed`,reason:`invalid`};switch(e.status){case`missing`:return{kind:`skipped`};case`invalid`:return{kind:`failed`,reason:`invalid`};case`active`:if(e.remainingUses<=0||e.quotaLifecycle!==`active`)return{kind:`failed`,reason:`invalid`};break;case`exhausted`:if(e.remainingUses!==0||e.quotaLifecycle!==`exhausted`)return{kind:`failed`,reason:`invalid`};break;case`expired`:case`superseded`:case`authority_unavailable`:case`method_unavailable`:case`capability_unavailable`:break}return e.authorization.walletId!==t.walletId||e.authorization.authorityId!==t.authorityId||e.authorization.authMethodId!==t.authMethodId||e.authorization.authorizationId!==t.authorizationId||e.authorization.quotaId!==t.quotaId||e.authorization.issuedAtMs!==t.issuedAtMs||e.authorization.expiresAtMs!==t.expiresAtMs||e.expiresAtMs!==e.authorization.expiresAtMs?{kind:`failed`,reason:`invalid`}:{kind:`reconciled`,authorization:e.authorization}}async function Cp(e,t,n){let r=String(e||``).trim();if(!r)throw Error(`Wallet iframe relayer URL is required`);return await t.read({relayerUrl:r,operationCredential:n.operationCredential},{walletSessionId:n.operationCredential.walletSessionId,quotaId:n.authorization.quotaId})}function wp(e,t){return{resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),listWalletAuthMethodsV2ForWallet:G.listWalletAuthMethodsV2ForWallet.bind(G),resolveWalletAuthorityForMethod:G.resolveWalletAuthorityForMethod.bind(G),readExactActiveForWallet:K.readExactActiveForWallet.bind(K),readStatus:Cp.bind(null,e,t),refreshExactWithOperationCredential:K.refreshExactWithOperationCredential.bind(K),nowMs:Date.now}}function Tp(e){e.changed=!0}async function Ep(e){let t=String(e.preferences.getCurrentWalletId()||``).trim();if(t)return t;let n={changed:!1},r=e.preferences.onCurrentWalletChange(Tp.bind(null,n));try{let t=await e.auth.getRecentUnlocks();if(n.changed)return e.preferences.getCurrentWalletId()??void 0;let r=String(t.lastUsedAccount?.walletId||``).trim(),i=t.walletIds.map(e=>String(e).trim()).filter(Boolean),a=r||(i.length===1?i[0]:void 0);return a&&e.preferences.setCurrentWallet(B(a)),a}finally{r()}}async function Dp(e,t,n){let r;switch(t.wallet.kind){case`current`:r=t.authenticationRead===`restore`?await Ep(e):e.preferences.getCurrentWalletId()??void 0;break;case`exact`:if(r=t.wallet.walletId.trim(),!r)throw Error(`Wallet iframe exact session walletId is invalid`);break}if(!r)return{kind:`wallet_locked`};let i=wp(e.configs.network.relayer.url,n),a=await _p({walletId:B(r)},i);return a.kind===`failed`?{kind:`wallet_unlocked_without_signing_session`,walletId:B(r),reason:a.reason}:await np({walletId:B(r)},i)}var Op=class{lifecycle=`active`;refresh={kind:`idle`};invalidationRevision=0;activeOperations=0;pendingObservations=new Map;unsubscribeAuthority;unsubscribeSelection;constructor(e,t,n,r){this.runtime=e,this.post=t,this.expiredSessions=n,this.readSession=r,this.unsubscribeAuthority=$t.onWalletAuthorityChange(this.invalidate.bind(this)),this.unsubscribeSelection=e.preferences.onCurrentWalletChange(this.invalidate.bind(this))}dispose(){this.lifecycle=`disposed`,this.unsubscribeAuthority(),this.unsubscribeSelection()}beginOperation(){this.assertActive(),this.activeOperations+=1}endOperation(){--this.activeOperations,this.lifecycle===`active`&&this.activeOperations===0&&this.refresh.kind===`pending`&&this.requestRefresh()}onLifecycleEvent(e){if(this.lifecycle===`disposed`)return;let t=dt();e.event===`signing_session.expired`&&(this.invalidationRevision+=1),this.post({type:`SDK_LIFECYCLE_EVENT`,payload:{revision:t,event:e}}),e.event===`signing_session.expired`&&this.requestRefresh()}publishCurrentSession(){return this.observe({authenticationRead:`current`,wallet:{kind:`current`}},this.publishSnapshot.bind(this))}async observe(e,t){for(let n=0;n<3;n+=1){this.assertActive();let n=this.invalidationRevision,r=$t.getWalletAuthorityRevision(),i={changed:!1},a=this.runtime.preferences.onCurrentWalletChange(Tp.bind(null,i));try{let{revision:a,state:o,session:s}=await this.readObservation(e,r);if(this.assertActive(),i.changed&&this.runtime.preferences.getCurrentWalletId()===null){t({revision:dt(),walletId:null,state:{kind:`wallet_locked`},session:lt()});return}if(i.changed||n!==this.invalidationRevision||r!==$t.getWalletAuthorityRevision())continue;t({revision:a,walletId:e.wallet.kind===`exact`?B(e.wallet.walletId):this.runtime.preferences.getCurrentWalletId(),state:this.projectExpiry(o),session:s});return}finally{a()}}throw Error(`Wallet authority changed repeatedly during session observation`)}readObservation(e,t){let n=this.runtime.preferences.getCurrentWalletId(),r=e.wallet.kind===`exact`?e.wallet.walletId:n,i=JSON.stringify([e.authenticationRead,r,n,t,this.invalidationRevision]),a=this.pendingObservations.get(i);if(a)return a;let o=this.resolveObservation(e).finally(this.finishObservation.bind(this,i));return this.pendingObservations.set(i,o),o}async resolveObservation(e){let t=dt(),n=q.forHostObservation(),r=await Dp(this.runtime,e,n);return{revision:t,state:r,session:r.kind===`wallet_locked`?lt():await this.readSession(r.walletId,n)}}finishObservation(e){this.pendingObservations.delete(e)}projectExpiry(e){return e.kind!==`active_session`||!this.expiredSessions.get(e.walletId)?.has(e.walletSessionId)?e:{kind:`expired_session`,walletId:e.walletId,authorizationId:e.authorizationId,walletSessionId:e.walletSessionId,authMethod:e.authMethod,expiresAtMs:e.expiresAtMs}}assertActive(){if(this.lifecycle===`disposed`)throw Error(`Wallet session observer is disposed`)}invalidate(){this.lifecycle!==`disposed`&&(this.invalidationRevision+=1,this.requestRefresh())}requestRefresh(){if(this.refresh.kind===`running`){this.refresh.pending=!0;return}if(this.activeOperations>0){this.refresh={kind:`pending`};return}this.refresh={kind:`running`,pending:!1},this.refreshSession().catch(this.reportRefreshFailure.bind(this))}async refreshSession(){try{do{if(this.refresh.kind!==`running`)return;this.refresh.pending=!1;try{await this.publishCurrentSession()}catch(e){this.reportRefreshFailure(e)}}while(this.lifecycle===`active`&&this.refresh.kind===`running`&&this.refresh.pending)}finally{this.refresh={kind:`idle`}}}publishSnapshot(e){this.assertActive(),this.refresh.kind===`running`?this.refresh.pending=!1:this.refresh.kind===`pending`&&(this.refresh={kind:`idle`}),this.post({type:`SESSION_CHANGED`,payload:e})}reportRefreshFailure(e){this.lifecycle===`active`&&console.warn(`[WalletIframeHost] Session refresh failed:`,e)}};function kp(e){let t=e.override?.ttlMs??e.defaults.ttlMs,n=typeof t==`number`?Math.floor(t):Math.floor(Number(t)||0),r=be({requestedRemainingUses:e.override?.remainingUses??e.defaults.remainingUses??xe});return!(n>0)||r===null?{kind:`disabled`,ttlMs:0,unlockRemainingUses:null}:{kind:`enabled`,ttlMs:n,unlockRemainingUses:r}}async function Ap(e){try{let t=e.runtime.activationReceipt.normalSigning.scope,n=sd({routerAbState:e.runtime.activationReceipt.normalSigning}),r=await ya({ecdsaThresholdKeyId:t.ecdsa_threshold_key_id,signingRootId:t.signing_root_id,signingRootVersion:t.signing_root_version});if(Dd(e.runtime)!==e.runtime)return;let i=ed({relayerUrl:e.relayerUrl,keyHandle:Ai(r),ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,clientVerifyingShareB64u:n.clientVerifier33B64u,clientSigningMaterial:td(e.runtime.holderHandleId),thresholdEcdsaPublicKeyB64u:n.thresholdVerifier33B64u,relayerVerifyingShareB64u:n.serverVerifier33B64u,credential:{kind:`wallet_session_opaque`,walletSessionToken:e.operationCredential.token,home:e.operationCredential.home,ownershipGeneration:e.operationCredential.ownershipGeneration},authorization:{kind:`reusable_wallet_session`,wallet_session_id:e.operationCredential.walletSessionId},materialActivation:Kr(e.runtime.materialActivation),routerAbEcdsaDerivationPoolFill:{kind:`router_ab_ecdsa_derivation_signing_worker_pool`,scope:t,ceremonyExpiresAtMs:e.expiresAtMs,materialExpiresAtMs:Date.now()+en},workerCtx:e.workerCtx});Ol(`evm-family`,{event:`ecdsa_linked_device_prefill`,scheduled:i.scheduled,reason:i.reason,depth:i.depth,targetDepth:i.targetDepth})}catch{Ol(`evm-family`,{event:`ecdsa_linked_device_prefill`,scheduled:!1,reason:`unexpected_error`})}}var jp=class extends Error{constructor(e){super(`[OwnerLaneScope] ${e}`),this.name=`OwnerLaneScopeIntegrityError`}};function Mp(e){return{walletId:e.walletId,factor:{kind:`passkey`,credentialIdB64u:e.credentialIdB64u},verifier:{kind:`webauthn`,rpId:e.rpId},bindingId:e.walletAuthMethodId}}function Np(e){let t=String(e.providerSubjectId||``).trim();if(!t)throw new jp(`active Email OTP method has no exact local factor`);let n=ti({walletId:e.authMethod.walletId,factor:{kind:`email_otp`,provider:t.startsWith(`google:`)?`google`:`email`,providerUserId:t},verifier:{kind:`email_otp_wallet_auth_method`,emailHashHex:e.authMethod.emailHashHex},bindingId:e.authMethod.walletAuthMethodId});if(!n)throw new jp(`active Email OTP method has no exact local factor`);return n}function Pp(e){let t=e.localMethods.filter(t=>t.kind===`email_otp`&&t.status===`active`&&t.walletId===e.authMethod.walletId&&t.emailHashHex===e.authMethod.emailHashHex),n=t[0],r=n?ti(n.authority):null;if(t.length!==1||!r||r.walletId!==e.authMethod.walletId||r.bindingId!==e.authMethod.walletAuthMethodId||r.verifier.emailHashHex!==e.authMethod.emailHashHex)throw new jp(`active Email OTP method has no exact local factor`);return r}async function Fp(e){let t=String(e.authMethod.walletId);try{return Pp({authMethod:e.authMethod,localMethods:await e.stores.listWalletAuthMethodsForWallet(t)})}catch(n){if(!e.stores.readEmailOtpProviderSubjectForWallet)throw n;let r=await e.stores.readEmailOtpProviderSubjectForWallet(t);if(!r)throw n;return Np({authMethod:e.authMethod,providerSubjectId:r})}}function Ip(e){if(e.authority.walletId!==e.authMethod.walletId||e.authority.bindingId!==e.authMethod.walletAuthMethodId)throw new jp(`active wallet auth method does not have an exact factor authority binding`);return e.authority}async function Lp(e){return e.authMethod.kind===`passkey`?Ip({authMethod:e.authMethod,authority:Mp(e.authMethod)}):e.authMethod.kind===`voiceid`?qr({walletId:e.authMethod.walletId,walletAuthMethodId:e.authMethod.walletAuthMethodId,deviceKeyId:e.authMethod.deviceKeyId}):Ip({authMethod:e.authMethod,authority:await Fp({authMethod:e.authMethod,stores:e.stores})})}function Rp(e){return{auth:{kind:`passkey`,rpId:ua(e.authMethod.rpId),credentialIdB64u:e.authMethod.credentialIdB64u},signerSlot:e.signerSlot}}function zp(e){return{auth:{kind:`passkey`,rpId:ua(e.authMethod.rpId),credentialIdB64u:e.authMethod.credentialIdB64u},keyFamily:`ecdsa`}}function Bp(e){if(e.factorAuthority.walletId!==e.authMethod.walletId||e.factorAuthority.bindingId!==e.authMethod.walletAuthMethodId||e.factorAuthority.verifier.emailHashHex!==e.authMethod.emailHashHex||e.authorityRef.walletId!==e.authMethod.walletId||e.authorityRef.walletAuthMethodId!==e.authMethod.walletAuthMethodId)throw new jp(`linked Email OTP authority does not match the selected V2 method`);return{auth:{kind:`email_otp`,providerSubjectId:String(e.factorAuthority.factor.providerUserId)},ownerAuthority:{walletAuthMethodId:e.authorityRef.walletAuthMethodId,authorityDigest:e.authorityRef.authorityDigest}}}async function Vp(e){let t=await e.stores.getWalletPasskeyAuthenticator({walletId:String(e.authMethod.walletId),credentialId:e.authMethod.credentialIdB64u});if(!t||t.credentialId!==e.authMethod.credentialIdB64u)throw new jp(`active Passkey auth method has no exact local authenticator`);let n=gi(t.signerSlot,{min:1});if(n===null)throw new jp(`local authenticator signer slot is invalid`);return Rp({authMethod:e.authMethod,signerSlot:n})}async function Hp(e){if(e.authMethod.kind===`passkey`)return await Vp({authMethod:e.authMethod,stores:e.stores});if(e.authMethod.kind===`voiceid`){let t=await H({authority:qr({walletId:e.authMethod.walletId,walletAuthMethodId:e.authMethod.walletAuthMethodId,deviceKeyId:e.authMethod.deviceKeyId})});return{auth:{kind:`voiceid`,walletAuthMethodId:e.authMethod.walletAuthMethodId,deviceKeyId:e.authMethod.deviceKeyId},ownerAuthority:{walletAuthMethodId:t.walletAuthMethodId,authorityDigest:t.authorityDigest}}}let t=await Fp({authMethod:e.authMethod,stores:e.stores}),n=await H({authority:t});return{auth:{kind:`email_otp`,providerSubjectId:String(t.factor.providerUserId)},ownerAuthority:{walletAuthMethodId:n.walletAuthMethodId,authorityDigest:n.authorityDigest}}}function Up(e){let t=e.available.capability,n=t.manifest.signer;if(!n.scope.targetMemberships.some(t=>V(t)===V(e.chainTarget)))return null;let r=n.registeredPublicFacts,i={capability:t,key:ba({walletId:n.walletId,ecdsaThresholdKeyId:t.manifest.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId,signingRootId:n.signingRootId,signingRootVersion:n.signingRootVersion,participantIds:r.participantIds,thresholdOwnerAddress:r.thresholdOwnerAddress}),materialActivation:t.manifest.activation.materialActivation,publicFacts:r,curve:`ecdsa`,chainTarget:e.chainTarget,source:`canonical_capability`},a=e.available.kind===`authorized_evm_family_ecdsa_signing_capability`?e.available.authorization:null;if(ci(t.authority)){let e={kind:`passkey`,rpId:ua(t.authority.verifier.rpId),credentialIdB64u:t.authority.factor.credentialIdB64u},o=ma({walletId:n.walletId,publicFacts:r,authBinding:pa(e)});return a?{...i,auth:e,resolvedKey:o,state:`ready`,authorization:a,remainingUses:a.runtime.remainingUses,expiresAtMs:a.runtime.expiresAtMs}:{...i,auth:e,resolvedKey:o,state:`deferred`}}let o;if(ri(t.authority))o={kind:`voiceid`,walletAuthMethodId:t.authority.bindingId,deviceKeyId:t.authority.factor.deviceKeyId};else if(oi(t.authority))o={kind:`email_otp`,providerSubjectId:t.authority.factor.providerUserId};else return null;return a?{...i,auth:o,state:`ready`,authorization:a,remainingUses:a.runtime.remainingUses,expiresAtMs:a.runtime.expiresAtMs}:{...i,auth:o,state:`deferred`}}function Wp(e){throw Error(`Unsupported persisted Ed25519 auth method: ${String(e)}`)}async function Gp(e,t,n,r){return await Zp(e,{...t,ecdsaChainTargets:n,requiredEcdsaCapability:`sign`},r,`all`)}async function Kp(e,t,n){return await Zp(e,{walletId:t.walletId,authMethod:wa(t.ownerScope.auth),ownerScope:t.ownerScope,ecdsaChainTargets:t.ecdsaChainTargets,requiredEcdsaCapability:t.requiredEcdsaCapability,...t.nowMs===void 0?{}:{nowMs:t.nowMs}},n,`all`)}async function qp(e,t,n){if(t.curve===`ecdsa`){let{curve:r,...i}=t,a=new Map;for(let e of[...t.ecdsaChainTargets,...n])a.set(V(e),e);return await Zp(e,{...i,ecdsaChainTargets:[...a.values()],requiredEcdsaCapability:`sign`},new q,`ecdsa`)}let{curve:r,...i}=t;return await Gp(e,i,[],new q)}function Jp(e){return String(e.thresholdSessionIds?.ed25519||``).trim().length>0}function Yp(e,t){let n=e.ecdsaRestore?.chainTarget;if(!n)return!1;let r=V(n);for(let e of t)if(r===V(e))return!0;return!1}function Xp(e,t){let n=[];for(let r of e)`recordKind`in r||Jp(r)&&(t.length>0&&!Yp(r,t)||n.push(r));return n}async function Zp(e,t,n,r){let i=String(B(t.walletId)).trim();return await Ld({...t,walletId:i,ecdsaChainTargets:t.ecdsaChainTargets},{listPublicCapabilityReferences:r===`all`&&e.ed25519YaoPublicCapabilityLanes?e.ed25519YaoPublicCapabilityLanes.listLanes.bind(e.ed25519YaoPublicCapabilityLanes):void 0,isPublicCapabilityActive:e.isEd25519YaoPublicCapabilityActive,readActiveWalletSessionAuthorization:r===`all`?e.readActiveWalletSessionAuthorization?.bind(null,n):void 0,listSealedRecordsForWallet:async({walletId:e,filter:n})=>{if(r===`ecdsa`)return[];let i=async n=>{if(n===`voiceid`)return[];let r=await Lo({walletId:e,filter:{authMethod:n,curve:`ed25519`}});switch(n){case z.passkey:return r;case z.emailOtp:{let n=Xp(await Fs({walletId:e,filter:{authMethod:z.emailOtp,curve:`ecdsa`}}),t.ecdsaChainTargets);return[...r,...n]}default:return Wp(n)}};if(n.authMethod)return await i(n.authMethod);let[a,o]=await Promise.all([i(z.emailOtp),i(z.passkey)]);return[...a,...o]},listCanonicalEcdsaLanesForWallet:async({walletId:r})=>{let i=[],a=new Set,o=await e.listEcdsaSigningCapabilitiesForWallet({walletId:r,chainTargets:t.ecdsaChainTargets,...t.authMethod?{authMethod:t.authMethod}:{}},n);for(let e of o)for(let n of t.ecdsaChainTargets){let t=Up({available:e,chainTarget:n});if(!t)continue;let r=Id(t);!r||a.has(r)||(a.add(r),i.push(t))}return i},listActiveWalletAuthorityEcdsaLanesForWallet:async({walletId:n,chainTargets:r})=>(await Promise.all(r.map(async r=>{let i=await jd({ports:e.activeWalletAuthorityEcdsaRuntimeReadPorts,input:{walletId:B(n),chainTarget:r,requiredCapability:t.requiredEcdsaCapability}});return i.kind===`resolved`&&i.lane?i.lane:null}))).filter(e=>e!==null).map(Bd)})}function Qp(e,t){let n=String(e||``).trim();if(!n)throw Error(`[WalletSessionStatus] ${t} is required`);return n}function $p(e){let t=gt(e.walletSessionId),n=mt(e.quotaId);return!t.ok||!n.ok?null:{walletSessionId:t.value,quotaId:n.value}}function em(e){let t=$p(e.authorization);if(!t)throw Error(`[WalletSessionStatus] canonical Wallet Session identity is invalid`);return{kind:`wallet_session_status_check`,owner:e.owner,authorization:t}}function tm(e){return{curve:`ed25519`,walletId:B(e)}}function nm(e){return e.walletId}function rm(e){return`${e.curve}:${nm(e)}`}function im(e){return`${e.walletSessionId}:${e.quotaId}`}function am(e){let t=String(e.walletSessionId);switch(e.status){case`active`:return{sessionId:t,status:`active`,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs};case`exhausted`:return{sessionId:t,status:`exhausted`,remainingUses:0,expiresAtMs:e.expiresAtMs};case`expired`:return{sessionId:t,status:`expired`,expiresAtMs:e.expiresAtMs};case`missing`:case`superseded`:return{sessionId:t,status:`not_found`,statusCode:e.status};case`authority_unavailable`:case`method_unavailable`:case`capability_unavailable`:return{sessionId:t,status:`unavailable`,statusCode:e.status,expiresAtMs:e.expiresAtMs};case`invalid`:return{sessionId:t,status:`status_unknown`,statusCode:`invalid_wallet_session_status`};default:throw Error(`[WalletSessionStatus] unsupported canonical status`)}}async function om(e,t){return await e.getAvailableStatus(t).catch(()=>null)}function sm(e,t){if(!t||t.status===`status_unknown`)return e;if(t.status!==`active`)return{...e,...t,sessionId:e.sessionId};let n=Math.max(0,Math.floor(Number(t.remainingUses)||0)),r=Math.floor(Number(e.expiresAtMs)||0),i=Math.floor(Number(t.expiresAtMs)||0);return{...e,status:`active`,remainingUses:n,expiresAtMs:r>0&&i>0?Math.min(r,i):r||i,...t.authMethod?{authMethod:t.authMethod}:{},...t.retention?{retention:t.retention}:{}}}function cm(e){return em(e)}function lm(e){return async t=>{let n=t.authorization,r=await e.readAuthorization(t.owner.walletId);switch(r.kind){case`missing`:case`corrupt`:case`persistence_unavailable`:case`upgrade_required`:return null;case`found`:break;default:return r}if(!um(n,t.owner.walletId,r))return null;let i=String(e.relayerUrl||``).trim();if(!i)return null;let a=await La({relayerUrl:i,operationCredential:r.operationCredential}).read(n).catch(()=>null);return a?am(a):null}}function um(e,t,n){return n.record.walletId===t&&n.record.quotaId===e.quotaId&&n.operationCredential.walletSessionId===e.walletSessionId}function dm(e,t,n){let r=String(e||``).trim();if(!r)throw Error(`[signer-core-command] ${t} is required`);if(F(r).length!==n)throw Error(`[signer-core-command] ${t} must decode to ${n} bytes`);return r}function fm(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`[signer-core-command] ${t} must be an object`);return e}function pm(e,t,n){let r=Object.keys(e).sort(),i=[...t].sort();if(r.length!==i.length||r.some((e,t)=>e!==i[t]))throw Error(`[signer-core-command] ${n} fields are invalid`)}function mm(e,t){if(typeof e!=`string`)throw Error(`[signer-core-command] ${t} must be a string`);let n=e.trim();if(!n)throw Error(`[signer-core-command] ${t} is required`);return n}function hm(e){return dm(e,`derivationClientSharePublicKey33B64u`,33)}function gm(e){return dm(e,`relayerPublicKey33B64u`,33)}function _m(e,t){return dm(e,t,33)}function vm(e){let t=String(e||``).trim();if(!/^0x[0-9a-fA-F]{40}$/.test(t))throw Error(`[signer-core-command] ethereumAddress must be 0x-prefixed 20-byte hex`);return t}function ym(e){let t=fm(e,`ECDSA pending state blob`);if(pm(t,[`kind`,`curve`,`encoding`,`producer`,`stateBlobB64u`],`ECDSA pending state blob`),Reflect.get(t,`kind`)!==`ecdsa_role_local_pending_state_blob_v1`||Reflect.get(t,`curve`)!==`secp256k1`||Reflect.get(t,`encoding`)!==`base64url`||Reflect.get(t,`producer`)!==`signer_core`)throw Error(`[signer-core-command] invalid ECDSA pending state blob envelope`);return{kind:`ecdsa_role_local_pending_state_blob_v1`,curve:`secp256k1`,encoding:`base64url`,producer:`signer_core`,stateBlobB64u:mm(Reflect.get(t,`stateBlobB64u`),`pendingStateBlob.stateBlobB64u`)}}function bm(e){if(e.kind!==`ecdsa_role_local_state_blob_v1`||e.curve!==`secp256k1`||e.encoding!==`base64url`||e.producer!==`signer_core`)throw Error(`[signer-core-command] invalid ECDSA ready state blob envelope`);return e}function xm(e){return{kind:e.kind,algorithm:e.algorithm,context:{applicationBindingDigestB64u:e.context.applicationBindingDigestB64u},participants:{clientParticipantId:e.participants.clientParticipantId,relayerParticipantId:e.participants.relayerParticipantId,participantIds:[...e.participants.participantIds]},secretSource:{kind:`threshold_prf_x_client_base`,xClientBaseB64u:dm(e.secretSource.xClientBaseB64u,`secretSource.xClientBaseB64u`,32)}}}function Sm(e){if(e.clientBootstrap.participantId!==1)throw Error(`[signer-core-command] ECDSA client bootstrap participantId must be 1`);let t=hm(e.clientBootstrap.derivationClientSharePublicKey33B64u);return{pendingStateBlob:ym(e.pendingStateBlob),clientBootstrap:{contextBinding32B64u:dm(e.clientBootstrap.contextBinding32B64u,`contextBinding32B64u`,32),derivationClientSharePublicKey33B64u:t,clientShareRetryCounter:e.clientBootstrap.clientShareRetryCounter,participantId:1},publicFacts:{derivationClientSharePublicKey33B64u:hm(e.publicFacts.derivationClientSharePublicKey33B64u),clientVerifyingShareB64u:_m(e.publicFacts.clientVerifyingShareB64u,`clientVerifyingShareB64u`)}}}function Cm(e){return{kind:e.kind,pendingStateBlob:e.pendingStateBlob,relayerPublicIdentity:{relayerKeyId:e.relayerPublicIdentity.relayerKeyId,relayerPublicKey33B64u:e.relayerPublicIdentity.relayerPublicKey33B64u,groupPublicKey33B64u:e.relayerPublicIdentity.groupPublicKey33B64u,ethereumAddress:e.relayerPublicIdentity.ethereumAddress,relayerShareRetryCounter:e.relayerPublicIdentity.relayerShareRetryCounter}}}function wm(e){return{stateBlob:bm(e.stateBlob),publicFacts:{contextBinding32B64u:dm(e.publicFacts.contextBinding32B64u,`contextBinding32B64u`,32),derivationClientSharePublicKey33B64u:hm(e.publicFacts.derivationClientSharePublicKey33B64u),clientVerifyingShareB64u:_m(e.publicFacts.clientVerifyingShareB64u,`clientVerifyingShareB64u`),relayerPublicKey33B64u:gm(e.publicFacts.relayerPublicKey33B64u),groupPublicKey33B64u:_m(e.publicFacts.groupPublicKey33B64u,`groupPublicKey33B64u`),ethereumAddress:vm(e.publicFacts.ethereumAddress)}}}function Tm(e){return{ok:!1,code:`unavailable`,message:e}}function Em(e,t){return{ok:!1,failure:`invocation`,code:e,message:t}}function Dm(e,t){return{ok:!1,failure:`command`,code:e,message:t}}function Om(e){let t=F(e),n=new ArrayBuffer(t.byteLength);return new Uint8Array(n).set(t),n}function km(e){return{challenge:Om(e.challengeB64u),rp:{id:e.rpId,name:e.rpId},user:{id:Om(e.user.idB64u),name:e.user.name,displayName:e.user.displayName},pubKeyCredParams:e.pubKeyCredParams.map(e=>({type:e.type,alg:e.alg})),authenticatorSelection:e.authenticatorSelection,timeout:e.timeoutMs,attestation:e.attestation,excludeCredentials:e.excludeCredentials.map(e=>({type:e.type,id:Om(e.id)})),extensions:{prf:{eval:{first:F(e.extensions.prf.eval.firstB64u),second:F(e.extensions.prf.eval.secondB64u)}}}}}function Am(e){return/wasm (initialization|initialize|instantiation)|webassembly|module_or_path|failed to (load|compile|instantiate) wasm|derivation client wasm initialization failed/i.test(e)}function jm(e){let t=Au(e),n=Tu(e),r=L(e);if(n===`ECDSA_DERIVATION_WASM_INIT_FAILURE`||Am(r))return Em(`native_binding_failure`,r);switch(t){case`TIMEOUT`:return Em(`timeout`,r);case`WORKER_POSTMESSAGE_ERROR`:case`WORKER_PROTOCOL_ERROR`:case`WORKER_RUNTIME_ERROR`:return Em(`worker_transport_failure`,r);default:break}return/timed out/i.test(r)?Em(`timeout`,r):/postMessage|worker runtime|worker response|worker protocol|Malformed worker|Unknown worker/i.test(r)?Em(`worker_transport_failure`,r):null}function Mm(e){let t=L(e);return/relayer|public identity|group public key|ethereum address|threshold public key/i.test(t)?Dm(`public_identity_mismatch`,t):Dm(`invalid_pending_state`,t)}function Nm(e){return{kind:`durable_record_store`,async loadEcdsaRoleLocalReadyRecord(t){let n=Ti(t);try{let r=await e.getAppState(n);if(r!=null){let e=vi(r);return ki({record:e,input:t})?{ok:!0,value:{kind:`found`,record:e}}:{ok:!0,value:{kind:`malformed`,cleanup:{...t,reason:`Stored ECDSA role-local record identity does not match lookup input`},message:`Stored ECDSA role-local record identity does not match lookup input`}}}return{ok:!0,value:{kind:`not_found`}}}catch(e){let n=L(e);return{ok:!0,value:{kind:`malformed`,cleanup:{...t,reason:n},message:n}}}},async persistEcdsaRoleLocalReadyRecord(t){try{let n=vi(t.record);return ki({record:n,input:t.storageKeyFacts})?(await e.setAppState(Ti(t.storageKeyFacts),Oi(n)),{ok:!0,value:{kind:`persisted`}}):{ok:!1,code:`invalid_record`,message:`ECDSA role-local ready record identity does not match storageKeyFacts`}}catch(e){return{ok:!1,code:`invalid_record`,message:L(e)}}},async cleanupMalformedEcdsaRoleLocalRecord(t){try{return await e.setAppState(Ti(t),null),{ok:!0,value:{kind:`deleted`}}}catch(e){return{ok:!1,code:`unavailable`,message:L(e)}}}}}function Pm(){return{kind:`secure_secret_store`,async seal(){return Tm(`Browser secure secret store is not wired yet`)},async unseal(){return Tm(`Browser secure secret store is not wired yet`)},async delete(){return Tm(`Browser secure secret store is not wired yet`)}}}function Fm(e){return e instanceof DOMException?e.name===`NotAllowedError`?{ok:!1,code:`not_allowed`,message:e.message||`Passkey operation was not allowed`}:{ok:!1,code:`platform_error`,message:e.message||e.name}:{ok:!1,code:`platform_error`,message:e instanceof Error?e.message:String(e)}}function Im(){return{prf:{eval:{first:tt,second:$e}}}}function Lm(){return{ok:!1,code:`prf_unavailable`,message:`Required passkey PRF.first output is unavailable`}}function Rm(e){return/Missing PRF/i.test(L(e))?Lm():null}function zm(e){return!!(e&&typeof e==`object`&&`rawId`in e&&`response`in e&&typeof e.getClientExtensionResults==`function`)}async function Bm(e,t,n){return e===`create`?n.create({publicKey:t}):n.get({publicKey:t})}function Vm(e){return{kind:`authenticator`,async run(t){if(!e)return{ok:!1,code:`unavailable`,message:`navigator.credentials is unavailable`};try{switch(t.kind){case`create_passkey`:{let n=t.registrationOptions,r=await Bm(`create`,km(n),e);if(!zm(r))return{ok:!1,code:`invalid_credential`,message:`Passkey creation returned an invalid credential`};let i;try{i=Hs({credential:r})}catch(e){if(t.requirePrfFirst){let t=Rm(e);if(t)return t}throw e}let a=Us(i);if(t.requirePrfFirst&&!a)return Lm();if(t.requirePrfFirst){let e=a||``;return{ok:!0,operation:`create_passkey`,requirePrfFirst:!0,credential:i,credentialIdB64u:i.rawId,rawIdB64u:i.rawId,rpId:ua(n.rpId),prf:{kind:`required`,prfFirstB64u:e}}}return{ok:!0,operation:`create_passkey`,requirePrfFirst:!1,credential:i,credentialIdB64u:i.rawId,rawIdB64u:i.rawId,rpId:ua(n.rpId),prf:a?{kind:`available_without_requirement`,prfFirstB64u:a}:{kind:`not_requested_or_unavailable`}}}case`get_passkey`:{let n=await Bm(`get`,{rpId:t.rpId,challenge:Om(t.challengeB64u),allowCredentials:[{type:`public-key`,id:Om(t.credentialIdB64u)}],userVerification:`preferred`,extensions:Im()},e);if(!zm(n))return{ok:!1,code:`invalid_credential`,message:`Passkey assertion returned an invalid credential`};let r;try{r=Gs({credential:n})}catch(e){if(t.requirePrfFirst){let t=Rm(e);if(t)return t}throw e}let i=Us(r);if(t.requirePrfFirst&&!i)return Lm();if(t.requirePrfFirst){let e=i||``;return{ok:!0,operation:`get_passkey`,requirePrfFirst:!0,credential:r,credentialIdB64u:r.rawId,rawIdB64u:r.rawId,rpId:t.rpId,prf:{kind:`required`,prfFirstB64u:e}}}return{ok:!0,operation:`get_passkey`,requirePrfFirst:!1,credential:r,credentialIdB64u:r.rawId,rawIdB64u:r.rawId,rpId:t.rpId,prf:i?{kind:`available_without_requirement`,prfFirstB64u:i}:{kind:`not_requested_or_unavailable`}}}}}catch(e){return Fm(e)}}}}function Hm(e){return{kind:`signer_crypto`,async createRouterAbEcdsaRegistrationCeremony(t){if(!e)throw Error(`ECDSA derivation client worker context is unavailable`);return Uu({command:t,workerCtx:e})},async verifyRouterAbEcdsaRegistrationClientProofs(t){if(!e)throw Error(`ECDSA derivation client worker context is unavailable`);return zu({command:t,workerCtx:e})},async persistInitialCanonicalEcdsaActivation(t){if(!e)throw Error(`ECDSA derivation client worker context is unavailable`);return Hu({command:t,workerCtx:e})},async finalizeRouterAbEcdsaRegistrationActivation(t){if(!e)throw Error(`ECDSA derivation client worker context is unavailable`);return Iu({command:t,workerCtx:e})},async closeRouterAbEcdsaRegistrationCeremony(t){if(!e)throw Error(`ECDSA derivation client worker context is unavailable`);return Gu({command:t,workerCtx:e})},async prepareEcdsaClientBootstrap(t){if(!e)return Em(`unavailable`,`ECDSA client bootstrap worker context is unavailable`);try{return{ok:!0,value:Sm(await Ru({command:xm(t),workerCtx:e}))}}catch(e){let t=L(e);return t.includes(`unsupported ECDSA bootstrap secret source`)?Dm(`unsupported_secret_source`,t):jm(e)||Dm(`crypto_failure`,t)}},async finalizeEcdsaClientBootstrap(t){if(t.pendingStateBlob.kind!==`ecdsa_role_local_pending_state_blob_v1`||t.pendingStateBlob.curve!==`secp256k1`||t.pendingStateBlob.encoding!==`base64url`||t.pendingStateBlob.producer!==`signer_core`)return Dm(`invalid_pending_state`,`ECDSA client bootstrap pending blob envelope is invalid`);if(!e)return Em(`unavailable`,`ECDSA client bootstrap worker context is unavailable`);try{return{ok:!0,value:wm(await Vu({command:Cm(t),workerCtx:e}))}}catch(e){return jm(e)||Mm(e)}},async storeEcdsaRoleLocalSigningMaterial(t){if(t.stateBlob.kind!==`ecdsa_role_local_state_blob_v1`||t.stateBlob.curve!==`secp256k1`||t.stateBlob.encoding!==`base64url`||t.stateBlob.producer!==`signer_core`)return Dm(`invalid_ready_state`,`ECDSA role-local ready blob envelope is invalid`);if(!e)return Em(`unavailable`,`ECDSA role-local material worker context is unavailable`);try{let n=await Xu({materialHandle:t.handle.materialHandle,bindingDigest:t.handle.bindingDigest,stateBlob:t.stateBlob,workerCtx:e});return{ok:!0,value:{handle:{kind:`ecdsa_role_local_worker_handle_v1`,materialHandle:Si(n.materialHandle),durableMaterialRef:xi(n.materialHandle),bindingDigest:Di(n.bindingDigest)}}}}catch(e){return jm(e)||Dm(`crypto_failure`,L(e))}}}}function Um(e){return{kind:`http_transport`,async request(t){if(!e)return{ok:!1,code:`network_error`,message:`fetch is unavailable`};let n=new AbortController,r=t.timeoutMs&&t.timeoutMs>0?setTimeout(()=>n.abort(),t.timeoutMs):null;try{let r=await e(t.url,{method:t.method,headers:t.headers,body:t.body==null?void 0:JSON.stringify(t.body),signal:n.signal}),i=(r.headers.get(`content-type`)||``).includes(`application/json`)?await r.json().catch(()=>null):await r.text().catch(()=>``);return{ok:!0,value:{status:r.status,body:i}}}catch(e){return{ok:!1,code:n.signal.aborted?`timeout`:`network_error`,message:e instanceof Error?e.message:String(e)}}finally{r&&clearTimeout(r)}}}}function Wm(e){return{kind:`clock`,nowMs:e||(()=>Date.now())}}function Gm(e){return{kind:`random_source`,randomBytes(t){if(!e?.getRandomValues)throw Error(`Browser crypto.getRandomValues is unavailable`);let n=new Uint8Array(t);return e.getRandomValues(n),n}}}function Km(e={}){return{kind:`browser`,storage:Nm(e.indexedDB||G),secrets:Pm(),authenticator:Vm(e.credentials||globalThis.navigator?.credentials),signerCrypto:Hm(e.workerCtx),http:Um(e.fetch||globalThis.fetch?.bind(globalThis)),clock:Wm(e.nowMs),random:Gm(e.crypto||globalThis.crypto)}}function qm(e){throw Error(`[threshold-ed25519] unsupported wallet auth factor kind: ${String(e)}`)}function Jm(e){return ci(e.authority)?e.authority:oi(e.authority)||ri(e.authority)?null:(e.authority,qm(e.authority))}async function Ym(e){let t=Jm(e.authority),n=t?String(t.verifier.rpId||``).trim():``;if(t&&!n)return{ok:!1,code:`invalid_args`,message:`Missing rpId for WebAuthn`};let{policy:r,sessionPolicyDigest32:i}=await ye({nearAccountId:e.nearAccountId,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,authority:e.authority,relayerKeyId:e.relayerKeyId,...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{},routerAbNormalSigning:e.routerAbNormalSigning,participantIds:e.participantIds,thresholdSessionId:e.thresholdSessionId,ttlMs:e.ttlMs,remainingUses:e.remainingUses}),a=e.auth;if(!a){if(!t)return{ok:!1,code:`invalid_args`,message:`Email OTP Ed25519 session mint requires explicit route authorization`};a={kind:`threshold_session_policy_webauthn`,policySecretSource:nf({credential:await lf({credentialStore:e.credentialStore,touchIdPrompt:e.touchIdPrompt,nearAccountId:e.nearAccountId,challengeB64u:i}),rpId:n})}}let o=ef(a);if(!o)return{ok:!1,code:`unsupported`,message:`Missing PRF.first output from credential (requires a PRF-enabled passkey)`};let s=await Qd({relayerUrl:e.relayerUrl,sessionKind:`opaque`,relayerKeyId:e.relayerKeyId,sessionPolicy:r,auth:a,projectEnvironmentId:e.runtimeScopeBootstrap?.projectEnvironmentId,publishableKey:e.runtimeScopeBootstrap?.publishableKey,...e.existingOperationCredential?{existingOperationCredential:e.existingOperationCredential}:{}});if(!s.ok)return s.code===`already_committed`?s:{ok:!1,code:s.code,message:s.message};let c=r.thresholdSessionId,l=s.thresholdSessionId||c,u=s.expiresAtMs,d=s.remainingUses,f=s.runtimePolicyScope;if(!l||!s.authorizationId||!s.walletSessionId||!s.quotaId||!f)return{ok:!1,code:`invalid_response`,message:`Threshold Ed25519 session mint returned incomplete lifecycle metadata`};let p={ok:!0,thresholdSessionId:Ea.thresholdEd25519Session(l),authorizationId:s.authorizationId,walletSessionId:s.walletSessionId,quotaId:s.quotaId,expiresAtMs:u,remainingUses:d,runtimePolicyScope:f,routerAbNormalSigning:e.routerAbNormalSigning,passkeyPrfFirstB64u:o};switch(s.sessionKind){case`issued_exact_wallet_session`:return s.operationCredential.walletSessionId===s.walletSessionId?{...p,sessionKind:s.sessionKind,operationCredential:s.operationCredential}:{ok:!1,code:`invalid_response`,message:`Threshold Ed25519 session mint credential does not identify its session`};case`already_committed_exact_wallet_session`:return{...p,sessionKind:s.sessionKind};default:return Xm(s)}}function Xm(e){throw Error(`[threshold-ed25519] unsupported Wallet Session mint kind: ${String(e)}`)}function Zm(e){return{curve:`ed25519`,authMethod:`passkey`,walletId:e.walletId,relayerUrl:e.relayerUrl,walletSessionToken:e.walletSessionToken,ed25519Restore:e.ed25519Restore}}function Qm(e){let t=String(e.authority.factor.credentialIdB64u||``).trim();if(!t)throw Error(`[threshold-ed25519] passkey authority credential id is required`);return t}function $m(e){switch(e.kind){case`fresh_ed25519_provisioning`:return{kind:`fresh`,walletId:e.walletId,nearAccountId:e.nearAccountId,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,signerSlot:e.signerSlot,thresholdSessionId:Ea.thresholdEd25519Session(El(`threshold-ed25519`))};case`exact_ed25519_provisioning`:{let t=Gc(e.laneIdentity,`exact Ed25519 capability provisioning`);return{kind:`exact`,walletId:String(t.walletId),nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:String(t.nearEd25519SigningKeyId),signerSlot:t.signerSlot,thresholdSessionId:e.laneIdentity.thresholdSessionId,walletSessionId:e.laneIdentity.walletSessionId,quotaId:e.laneIdentity.quotaId}}}throw Error(`[threshold-ed25519] unsupported Ed25519 provisioning kind`)}function eh(e){switch(e.requested.kind){case`fresh`:return!1;case`exact`:return e.returnedThresholdSessionId!==e.requested.thresholdSessionId||e.returnedWalletSessionId!==e.requested.walletSessionId||e.returnedQuotaId!==e.requested.quotaId}throw e.requested,Error(`[threshold-ed25519] unsupported resolved provisioning identity`)}function th(e){switch(e.connected.sessionKind){case`issued_exact_wallet_session`:return e.connected.operationCredential.walletSessionId===e.connected.walletSessionId?{ok:!0,operationCredential:e.connected.operationCredential}:{ok:!1,code:`invalid_result`,message:`Threshold Ed25519 session mint credential does not identify its session`};case`already_committed_exact_wallet_session`:{if(e.protocol.kind!==`exact`||!e.existingOperationCredential)return{ok:!1,code:`unlock_exact_method`,message:`Threshold Ed25519 session reuse returned no credential; exact-method unlock is required`};let t=e.existingOperationCredential;return t.walletSessionId===e.connected.walletSessionId?{ok:!0,operationCredential:t}:{ok:!1,code:`unlock_exact_method`,message:`Threshold Ed25519 reused session credential identifies another session`}}default:return nh(e.connected)}}function nh(e){throw Error(`[threshold-ed25519] unsupported connected session kind: ${String(e)}`)}async function rh(e,t){let n=$m(t);if(t.kind===`exact_ed25519_provisioning`&&t.operationCredential.walletSessionId!==t.laneIdentity.walletSessionId)return{ok:!1,code:`invalid_args`,message:`Threshold Ed25519 exact credential identifies another Wallet Session`};let r=mn(n.nearAccountId),i=String(t.relayerUrl||e.defaultRelayerUrl||``).trim(),a=ue(t.participantIds);if(!i)throw Error(`Missing relayer url (configs.network.relayer.url)`);if(!a)throw Error(`Missing participantIds for threshold Ed25519 session provision`);let o=e.getSignerWorkerContext(),s=await Ym({credentialStore:e.credentialStore,touchIdPrompt:e.touchIdPrompt,relayerUrl:i,relayerKeyId:t.relayerKeyId,nearEd25519SigningKeyId:n.nearEd25519SigningKeyId,authority:t.authority,...t.auth?{auth:t.auth}:{},...t.runtimePolicyScope?{runtimePolicyScope:t.runtimePolicyScope}:{},routerAbNormalSigning:t.routerAbNormalSigning,...t.runtimeScopeBootstrap?{runtimeScopeBootstrap:t.runtimeScopeBootstrap}:{},nearAccountId:r,participantIds:a,thresholdSessionId:n.thresholdSessionId,ttlMs:t.ttlMs,remainingUses:t.remainingUses,workerCtx:o,...t.kind===`exact_ed25519_provisioning`?{existingOperationCredential:t.operationCredential}:{}});if(!s.ok)return{ok:!1,code:String(s.code||`worker_error`).trim()||`worker_error`,message:String(s.message||``).trim()||`Threshold Ed25519 session mint failed`};let c=s.thresholdSessionId||n.thresholdSessionId,l=Number(s.expiresAtMs),u=Number(s.remainingUses),d=String(s.passkeyPrfFirstB64u||``).trim(),f=s.runtimePolicyScope;if(!c||!s.walletSessionId||!s.authorizationId||!s.quotaId||!Number.isFinite(l)||!Number.isFinite(u))return{ok:!1,code:`invalid_result`,message:`Threshold Ed25519 session mint returned incomplete public session metadata`};if(eh({requested:n,returnedThresholdSessionId:c,returnedWalletSessionId:s.walletSessionId,returnedQuotaId:s.quotaId}))return{ok:!1,code:`invalid_result`,message:`Threshold Ed25519 exact provisioning returned a different lifecycle identity`};let p=th({connected:s,protocol:n,existingOperationCredential:t.kind===`exact_ed25519_provisioning`?t.operationCredential:void 0});if(!p.ok)return p;let{operationCredential:m}=p,h=m.token,g={kind:`minted_ed25519_wallet_session_authority`,thresholdSessionId:c,walletSessionId:s.walletSessionId,authorizationId:s.authorizationId,quotaId:s.quotaId,expiresAtMs:l,remainingUses:u,runtimePolicyScope:f,operationCredential:m},_=e.touchIdPrompt.getRpId();if(d&&t.source===`email_otp`)return{ok:!1,code:`invalid_result`,message:`Passkey PRF material cannot seal an Email OTP Ed25519 session`};if(await t.onWalletSessionAuthorityReady?.(g),d&&t.source!==`email_otp`){let o=Qm(t.authority),s=So({rpId:_,nearAccountId:String(r),nearEd25519SigningKeyId:n.nearEd25519SigningKeyId,relayerKeyId:t.relayerKeyId,participantIds:a,runtimePolicyScope:f,signerSlot:n.signerSlot,routerAbNormalSigning:t.routerAbNormalSigning,credentialIdB64u:o,materialActivation:t.materialActivation}),p=Zm({walletId:n.walletId,relayerUrl:i,walletSessionToken:h,ed25519Restore:s});try{await Dl(e.touchConfirm,{thresholdSessionId:String(c),prfFirstB64u:d,expiresAtMs:l,remainingUses:u,transport:p})}catch(e){return{ok:!1,code:`warm_session_cache_failed`,message:String(e&&typeof e==`object`&&`message`in e?e.message:e||``).trim()||`Threshold Ed25519 session material could not be cached`}}}return{ok:!0,sessionKind:s.sessionKind,thresholdSessionId:c,walletSessionId:s.walletSessionId,authorizationId:s.authorizationId,quotaId:s.quotaId,expiresAtMs:l,remainingUses:u,runtimePolicyScope:f,operationCredential:m}}function ih(e){if(!e)return null;switch(e.materialKind){case`role_local_worker_handle`:return e.roleLocalMaterialRef;case`role_local_durable_sealed_ref`:return e.roleLocalMaterialRef;case`role_local_durable_public_anchor`:case`role_local_ready_state_blob`:case`metadata_only`:return null}}function ah(e){let t=e.bootstrap.thresholdEcdsaKeyRef,n=t.keyHandle,r=t.ecdsaThresholdKeyId,i=t.backendBinding?.ecdsaRoleLocalReadyRecord,a=t.backendBinding?.materialKind===`role_local_worker_handle`?t.backendBinding.publicFacts:i?.publicFacts;if(!a)throw Error(`[SigningEngine] threshold-ecdsa bootstrap did not provide role-local public facts`);let o=Ca({record:{signingRootId:a.signingRootId,signingRootVersion:a.signingRootVersion}}),s=String(o.signingRootId),c=String(o.signingRootVersion),l=ln(t.ethereumAddress);if(!l)throw Error(`[SigningEngine] threshold-ecdsa bootstrap did not provide a threshold owner address`);let u=t.thresholdEcdsaPublicKeyB64u,d=t.backendBinding.relayerKeyId,f=t.relayerVerifyingShareB64u,p=t.participantIds,m=cn(e.chainTarget),h=ih(t.backendBinding),g={accountModel:`threshold-ecdsa`,accountAddress:l,ownerAddress:l,thresholdOwnerAddress:l,keyScope:`evm-family`,keyHandle:n,walletId:e.walletId,ecdsaThresholdKeyId:r,signingRootId:s,signingRootVersion:c,relayerKeyId:d,relayerVerifyingShareB64u:f,thresholdEcdsaPublicKeyB64u:u,participantIds:p,publicCapability:a.publicCapability,ecdsaRoleLocalPublicFacts:a,chainTarget:e.chainTarget,targetMembership:{targetKey:m,chainTarget:e.chainTarget},sharedEvmFamilyKey:{walletId:e.walletId,keyScope:`evm-family`,keyHandle:n,ecdsaThresholdKeyId:r,signingRootId:s,signingRootVersion:c,participantIds:p,thresholdOwnerAddress:l,thresholdEcdsaPublicKeyB64u:u},chainId:e.chainTarget.chainId};return h&&(g.roleLocalMaterialRef=h),{account:{profileId:e.walletId,chainIdKey:m,accountAddress:l,accountModel:`threshold-ecdsa`},signer:{signerId:l,signerType:`threshold`,signerKind:Bt.thresholdEcdsa,signerAuthMethod:e.signerAuth.authMethod,signerSource:e.signerAuth.signerSource,metadata:g},activationPolicy:{mode:`allocate_next_free`},preferredSlot:1,selectAsActive:!1,mutation:{routeThroughOutbox:!1}}}async function oh(e){let t=B(e.walletId);await e.bootstrapStore.upsertProfile({profileId:t}),await e.bootstrapStore.activateAccountSigner(ah({walletId:t,chainTarget:e.chainTarget,bootstrap:e.bootstrap,signerAuth:e.signerAuth}))}function sh(e){let t=String(e.operationId||``).trim(),n=String(e.operationFingerprint||``).trim();if(!t)throw Error(`[SigningEngine] signingOperationId is required`);if(!n)throw Error(`[SigningEngine] operation fingerprint is required`);let r=e.state.callerProvidedOperationFingerprintsById,i=r.get(t);if(i&&i!==n)throw Error(`[SigningEngine] caller-provided signingOperationId reused for a different operation: ${t}`);r.set(t,n),lh(r)}var ch=class{state={callerProvidedOperationFingerprintsById:new Map};bindCallerProvidedOperationIdToFingerprint(e){sh({state:this.state,operationId:e.operationId,operationFingerprint:e.operationFingerprint})}};function lh(e){for(;e.size>1024;){let t=e.keys().next().value;if(!t)return;e.delete(t)}}function uh(e){let t=M(e);if(!t)return null;if(t.kind===`all`)return{kind:`all`};if(t.kind!==`session`)return null;let n=C(t.thresholdSessionId);return n.ok?{kind:`session`,thresholdSessionId:n.value}:null}function dh(e){let t=M(e);if(!t||t.kind!==`clear_volatile_warm_material`||t.durableRecord!=null||t.resolvedIdentity!=null||t.deleteReason!=null)return null;let n=uh(t.scope);return n?{kind:`clear_volatile_warm_material`,scope:n}:null}function fh(e){return{kind:`clear_volatile_warm_material`,scope:{kind:`session`,thresholdSessionId:e}}}function ph(){return{kind:`clear_volatile_warm_material`,scope:{kind:`all`}}}async function mh(e){let{authMethod:t,authority:n}=e.selected;if(n.state!==`active`)return{kind:`rejected`,reason:{kind:`authority_not_active`}};if(t.status!==`active`)return{kind:`rejected`,reason:{kind:`auth_method_not_active`}};if(n.walletId!==t.walletId)return{kind:`rejected`,reason:{kind:`wallet_id_mismatch`}};if(n.authorityId!==t.walletAuthorityId)return{kind:`rejected`,reason:{kind:`authority_id_mismatch`}};if(await Er(n.signerActivations)!==n.signerActivationSetDigestB64u)return{kind:`rejected`,reason:{kind:`authority_activation_set_digest_mismatch`}};if(await Mr(n)!==n.authorityDigestB64u)return{kind:`rejected`,reason:{kind:`authority_digest_mismatch`}};let r=hh(e.operation);if(!n.permissions.includes(r))return{kind:`rejected`,reason:{kind:`permission_missing`}};switch(e.operation.kind){case`near_sign`:case`near_export`:return gh(n,t);case`evm_sign`:case`evm_export`:return _h(n,t);default:return bh(e.operation)}}function hh(e){switch(e.kind){case`near_sign`:case`evm_sign`:return`sign`;case`near_export`:case`evm_export`:return`export_keys`;default:return bh(e)}}function gh(e,t){let n=vh(e.signerActivations);return n===null?{kind:`rejected`,reason:{kind:`signer_family_unavailable`}}:n.signer.walletId===e.walletId?{kind:`resolved`,value:{kind:`resolved`,keyFamily:`ed25519`,walletId:e.walletId,authorityId:e.authorityId,authMethodId:t.walletAuthMethodId,materialActivation:n.materialActivation,registeredPublicKeyB64u:n.signer.registeredPublicKeyB64u}}:{kind:`rejected`,reason:{kind:`signer_wallet_id_mismatch`}}}function _h(e,t){let n=yh(e.signerActivations);return n===null?{kind:`rejected`,reason:{kind:`signer_family_unavailable`}}:n.signer.walletId===e.walletId?{kind:`resolved`,value:{kind:`resolved`,keyFamily:`ecdsa_secp256k1`,walletId:e.walletId,authorityId:e.authorityId,authMethodId:t.walletAuthMethodId,materialActivation:n.materialActivation,thresholdPublicKey33B64u:n.signer.thresholdPublicKey33B64u,evmAddress:n.signer.evmAddress}}:{kind:`rejected`,reason:{kind:`signer_wallet_id_mismatch`}}}function vh(e){return e.keyFamilies[0]!==`ed25519`||e.ed25519===void 0?null:e.ed25519}function yh(e){return e.keyFamilies[0]!==`ecdsa_secp256k1`&&e.keyFamilies.length!==2||e.ecdsa===void 0?null:e.ecdsa}function bh(e){throw Error(`unsupported wallet authority operation: ${String(e)}`)}const xh={listed:0,discovered:0,truncated:0};async function Sh(e,t){let n=B(t.walletId);switch(t.authMethod){case z.emailOtp:return await e.discovery.emailOtp({...t,walletId:n,authMethod:z.emailOtp});case z.passkey:return await e.discovery.passkey?.({...t,walletId:n,authMethod:z.passkey})??xh;default:throw t.authMethod,Error(`Unsupported signer auth method`)}}async function Ch(e,t,n){return await Gp(e.availableLanes,t,e.getConfiguredEcdsaChainTargets(),n)}async function wh(e,t,n){return await Kp(e.availableLanes,{walletId:t.walletId,ownerScope:t.ownerScope,ecdsaChainTargets:e.getConfiguredEcdsaChainTargets(),requiredEcdsaCapability:`sign`},n)}function Th(e){let t=typeof e?.getWarmSessionStatus==`function`?t=>e.getWarmSessionStatus(t):null,n=typeof e?.getWarmSessionStatuses==`function`?t=>e.getWarmSessionStatuses(t):null;return t&&n?{statusPort:`single_and_batch`,getWarmSessionStatus:t,getWarmSessionStatuses:n}:t?{statusPort:`single`,getWarmSessionStatus:t}:n?{statusPort:`batch`,getWarmSessionStatuses:n}:null}function Eh(e){console.warn(`[WarmSessionStore] warm-session availability failure`,{operation:e.operation,thresholdSessionId:e.thresholdSessionId,code:String(e.code||`worker_error`).trim()||`worker_error`})}async function Dh(e,t){let n=String(t||``).trim();return!e||!n||e.statusPort===`batch`?null:Oh({thresholdSessionId:n,status:await e.getWarmSessionStatus({thresholdSessionId:n}).catch(()=>({ok:!1,code:`worker_error`,message:`worker_error`}))})}function Oh(e){let t=String(e.thresholdSessionId||``).trim();return e.status.ok?{state:`warm`,thresholdSessionId:t,expiresAtMs:e.status.expiresAtMs,remainingUses:e.status.remainingUses}:e.status.code===`expired`?{state:`expired`,thresholdSessionId:t}:e.status.code===`exhausted`?{state:`exhausted`,thresholdSessionId:t}:e.status.code===`not_found`?{state:`missing`,thresholdSessionId:t}:(Eh({operation:`status_read`,thresholdSessionId:t,code:e.status.code}),{state:`unavailable`,thresholdSessionId:t,code:String(e.status.code||`worker_error`).trim()||`worker_error`})}function kh(e){if(!e.auth||String(e.auth.session.walletId)!==String(e.runtime.walletId)||e.auth.selectedAuthMethod.kind!==e.runtime.factor.kind||e.auth.status.remainingUses<=0||e.auth.status.quotaId!==e.auth.session.quotaId||!Xc({session:e.auth.session,materialActivation:e.runtime.sealedRecord.ed25519Restore.materialActivation})||e.runtime.factor.kind===`passkey`&&(e.auth.selectedAuthMethod.kind!==`passkey`||String(e.auth.selectedAuthMethod.rpId)!==String(e.runtime.factor.rpId)||e.auth.selectedAuthMethod.credentialIdB64u!==e.runtime.factor.credentialIdB64u||e.auth.selectedFactorAuthority.factor.kind!==`passkey`||e.auth.selectedFactorAuthority.factor.credentialIdB64u!==e.runtime.factor.credentialIdB64u)||e.runtime.factor.kind===`email_otp`&&(e.auth.selectedAuthMethod.kind!==`email_otp`||e.auth.selectedFactorAuthority.factor.kind!==`email_otp`||e.auth.selectedFactorAuthority.factor.providerUserId!==e.runtime.factor.providerSubjectId||e.auth.selectedFactorAuthority.verifier.kind!==`email_otp_wallet_auth_method`||e.auth.selectedFactorAuthority.verifier.emailHashHex!==e.runtime.factor.emailHashHex))return`authorization_required`;let t=Yc({remainingUses:e.runtime.remainingUses,expiresAtMs:e.runtime.expiresAtMs});if(t===`expired`||t===`exhausted`)return`authorization_required`;if(!e.prfClaim)return`prf_missing`;switch(e.prfClaim.state){case`unavailable`:return`prf_unavailable`;case`warm`:return`ready`;case`missing`:case`expired`:case`exhausted`:return`prf_missing`}}function Ah(e){if(!e.auth)return`authorization_required`;let t=Yc({remainingUses:e.runtime.remainingUses,expiresAtMs:e.runtime.expiresAtMs});if(t===`expired`||t===`exhausted`)return`authorization_required`;let n=e.emailOtpAuthContext;return n&&sl(n)===`single_use`&&Number(il(n))>0||!e.prfClaim?`prf_missing`:e.prfClaim.state===`unavailable`?`prf_unavailable`:e.prfClaim.state===`warm`?`ready`:`prf_missing`}function jh(e){let t=String(e.sessionId||``).trim(),n=e.claim,r={...e.authMethod?{authMethod:e.authMethod}:{},...e.retention?{retention:e.retention}:{}};return n?n.state===`unavailable`?{sessionId:t,status:`unavailable`,statusCode:n.code,...r}:n.state===`warm`?{sessionId:t,status:`active`,...r,remainingUses:n.remainingUses,expiresAtMs:n.expiresAtMs}:{sessionId:t,...r,status:n.state===`expired`?`expired`:n.state===`exhausted`?`exhausted`:`not_found`}:{sessionId:t,status:`not_found`,...r}}function Mh(e){if(!e.auth?.operationCredential.token||!String(e.runtime.relayerUrl||``).trim())return null;let t=String(e.groupId||``).trim();return{curve:`ecdsa`,...e.signingSessionSealKeyVersion?{signingSessionSealKeyVersion:e.signingSessionSealKeyVersion}:{},...t?{groupId:t}:{}}}function Nh(e){return String(e||``).trim()}function Ph(e){let t=Nh(e.thresholdSessionId),n=Math.max(0,Math.floor(Number(e.remainingUses)||0)),r=Math.floor(Number(e.expiresAtMs)||0);return r<=Date.now()?{state:`expired`,thresholdSessionId:t}:n<=0?{state:`exhausted`,thresholdSessionId:t}:{state:`warm`,thresholdSessionId:t,remainingUses:n,expiresAtMs:r}}function Fh(e){switch(e.factor.kind){case`email_otp`:return z.emailOtp;case`passkey`:return z.passkey}}function Ih(e){for(let t of e){let e=t.source;switch(e){case`voiceid`:return`voiceid`;case z.emailOtp:return z.emailOtp;case z.passkey:break;default:return Lh(e)}}return null}function Lh(e){throw Error(`Unsupported signing session lane auth method: ${String(e)}`)}function Rh(e){return tm(e.walletId)}function zh(e,t){t&&(!t.thresholdSessionId||!t.walletSessionId||e.push(t))}function Bh(e,t,n){return{curve:`ed25519`,chain:`near`,source:Fh(e),thresholdSessionId:e.thresholdSessionId,walletSessionId:t,quotaId:n,materialActivation:e.sealedRecord.ed25519Restore.materialActivation,backing:`record_policy`,runtime:e}}async function Vh(e,t){return await Wh(e,t,e.exactWalletSessionReadPorts)}function Hh(e,t){return e.capabilitySubjects.some(e=>e.kind===`sign`&&e.keyFamily===`ed25519`&&g(e.materialActivation,t))}function Uh(e){switch(e.runtime.factor.kind){case`passkey`:return e.authMethod.kind===`passkey`&&String(e.authMethod.rpId)===String(e.runtime.factor.rpId)&&String(e.authMethod.credentialIdB64u)===String(e.runtime.factor.credentialIdB64u);case`email_otp`:return e.authMethod.kind===`email_otp`&&e.authMethod.emailHashHex===e.runtime.factor.emailHashHex}}async function Wh(e,t,n){let r=e.listExactSealedSessionsForWallet??Lo,i=(await Promise.all([r({walletId:t,filter:{authMethod:z.passkey,curve:`ed25519`}}),r({walletId:t,filter:{authMethod:z.emailOtp,curve:`ed25519`}})])).flat(),a;try{a=await n.resolveSelectedWalletAuthority(String(t))}catch{return[]}if(a.kind!==`resolved`)return[];let{selection:o,authMethod:s,authority:c}=a;if(o.lockState!==`unlocked`||o.walletId!==t||o.walletAuthMethodId!==s.walletAuthMethodId||s.status!==`active`||s.walletId!==t||s.walletAuthorityId!==c.authorityId||c.state!==`active`||c.walletId!==t)return[];let l;try{l=await mh({selected:{authMethod:s,authority:c},operation:{kind:`near_sign`,operation:`sign`,keyFamily:`ed25519`}})}catch{return[]}if(l.kind!==`resolved`||l.value.walletId!==t||l.value.authorityId!==c.authorityId||l.value.authMethodId!==s.walletAuthMethodId)return[];let u;try{u=await n.readExactWithOperationCredential({walletId:t,authorityId:c.authorityId,authMethodId:s.walletAuthMethodId})}catch{return[]}if(u.kind!==`found`)return[];let d=u.record,f=u.operationCredential;if(d.walletId!==t||d.authorityId!==c.authorityId||d.authMethodId!==s.walletAuthMethodId||d.authorityDigestB64u!==c.authorityDigestB64u||d.authorityRevocationEpoch!==c.revocationEpoch||d.expiresAtMs<=Date.now()||f.walletSessionId.length===0||f.token.trim().length===0||!Hh(d,l.value.materialActivation))return[];let p=[],m=new Set;for(let e of i){if(e.curve!==`ed25519`)continue;let n=Ns(e);!n||n.walletId!==t||!Uh({runtime:n,authMethod:s})||!g(n.sealedRecord.ed25519Restore.materialActivation,l.value.materialActivation)||m.has(n.thresholdSessionId)||(m.add(n.thresholdSessionId),zh(p,Bh(n,f.walletSessionId,d.quotaId)))}return p}async function Gh(e){let t=Qp(e.walletSessionId,`walletSessionId`);return(await Vh(e.deps,e.walletId)).filter(n=>n.walletSessionId===t&&n.quotaId===e.quotaId)}function Kh(e){let t=new Map;for(let n of e.lanes){let e=im({walletSessionId:n.walletSessionId,quotaId:n.quotaId}),r=t.get(e)||[];r.push(n),t.set(e,r)}let n=new Map;for(let r of t.values()){let t=r[0];if(!t)continue;let i=t.walletSessionId,a=t.quotaId,o=qh({walletSessionId:i,quotaId:a,lanes:r,claimsByThresholdSessionId:e.claimsByThresholdSessionId,statusOverrides:e.statusOverrides}),s=r.map(t=>({lane:t,claim:e.claimsByThresholdSessionId.get(t.thresholdSessionId)||null})),c=e=>{if(!e.length)return;let t=e.find(e=>e.claim?.state===`expired`)?.claim||e.find(e=>e.claim?.state===`exhausted`)?.claim||null,r=e.map(e=>e.claim).filter(e=>e?.state===`warm`),i=r.length?Math.min(...r.map(e=>Math.floor(Number(e.remainingUses)||0))):void 0,a=r.length?Math.min(...r.map(e=>Math.floor(Number(e.expiresAtMs)||0))):void 0;for(let r of e){if(t){n.set(r.lane.thresholdSessionId,$h(t,r.lane.thresholdSessionId));continue}if(r.claim?.state===`warm`){n.set(r.lane.thresholdSessionId,{state:`warm`,thresholdSessionId:r.lane.thresholdSessionId,remainingUses:i??r.claim.remainingUses,expiresAtMs:a??r.claim.expiresAtMs});continue}n.set(r.lane.thresholdSessionId,r.claim)}};if(o){let e=Zh(o),t=s.filter(e=>o.thresholdSessionIds.has(Nh(e.lane.thresholdSessionId))),r=s.filter(e=>!o.thresholdSessionIds.has(Nh(e.lane.thresholdSessionId)));if(t.length===s.length){for(let t of s)n.set(t.lane.thresholdSessionId,e?$h(e,t.lane.thresholdSessionId):null);continue}for(let r of t)n.set(r.lane.thresholdSessionId,e?$h(e,r.lane.thresholdSessionId):null);c(r);continue}c(s)}return n}function qh(e){let t=e.statusOverrides;if(!t)return null;for(let n of Jh(e.lanes)){let r=t.get(Yh(n,e.walletSessionId,e.quotaId));if(!r)continue;let i=Xh({override:r,lanes:e.lanes,claimsByThresholdSessionId:e.claimsByThresholdSessionId,statusOverrides:t});if(i)return i}return null}function Jh(e){let t=new Map;for(let n of e){let e=Rh(n.runtime);t.set(rm(e),e)}return[...t.values()]}function Yh(e,t,n){return`${rm(e)}:${im({walletSessionId:t,quotaId:n})}`}function Xh(e){if(!e.lanes.length)return null;if(e.lanes.find(t=>{let n=Nh(t.thresholdSessionId);return e.override.thresholdSessionIds.has(n)||t.runtime.sealedRecord.updatedAtMs<=e.override.updatedAtMs?!1:(e.claimsByThresholdSessionId.get(n)||null)?.state===`warm`})){for(let t of e.lanes)e.statusOverrides?.delete(Yh(Rh(t.runtime),e.override.walletSessionId,e.override.quotaId));return null}return e.override}function Zh(e){let t=e.status;if(t.status===`active`){if(typeof t.remainingUses!=`number`||typeof t.expiresAtMs!=`number`)return{state:`unavailable`,code:`invalid_wallet_budget_status`};let e=Math.max(0,Math.floor(Number(t.remainingUses)||0)),n=Math.floor(Number(t.expiresAtMs)||0);return n<=Date.now()?{state:`expired`}:e<=0?{state:`exhausted`}:{state:`warm`,remainingUses:e,expiresAtMs:n}}return t.status===`expired`?{state:`expired`}:t.status===`exhausted`?{state:`exhausted`}:t.status===`unavailable`?{state:`unavailable`,code:String(t.statusCode||`wallet_budget_status_override`)}:null}async function Qh(e){let t=new Map;for(let n of e.lanes)t.set(n.thresholdSessionId,Ph({thresholdSessionId:n.thresholdSessionId,remainingUses:n.runtime.remainingUses,expiresAtMs:n.runtime.expiresAtMs}));return t}function $h(e,t){switch(e.state){case`warm`:return{state:`warm`,thresholdSessionId:t,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs};case`unavailable`:return{state:`unavailable`,thresholdSessionId:t,code:e.code};case`missing`:return{state:`missing`,thresholdSessionId:t};case`expired`:return{state:`expired`,thresholdSessionId:t};case`exhausted`:return{state:`exhausted`,thresholdSessionId:t}}}async function eg(e){let t=await Vh(e.deps,e.walletId);return tg({deps:e.deps,lanes:t,statusOverrides:e.statusOverrides})}async function tg(e){let t=await Qh({deps:e.deps,lanes:e.lanes});return Kh({lanes:e.lanes,claimsByThresholdSessionId:t,statusOverrides:e.statusOverrides})}async function ng(e){let t=e.walletSessionId,n=Array.from(new Set([...e.targetThresholdSessionIds||[]].map(Nh).filter(Boolean)));if(!n.length)return null;let r=Th(e.deps.touchConfirm),i=await Promise.all(n.map(e=>Dh(r,e)));return jh({sessionId:t,claim:i.find(e=>e?.state===`expired`)||i.find(e=>e?.state===`exhausted`)||i.find(e=>e?.state===`unavailable`)||i.find(e=>e?.state===`warm`)||null})}function rg(e){let t=e.lanes.some(e=>e.source===z.emailOtp);return jh({sessionId:e.walletSessionId,claim:e.claim,authMethod:Ih(e.lanes),retention:t?`session`:null})}async function ig(e){let t=await Gh({deps:e.deps,walletId:e.walletId,walletSessionId:e.walletSessionId,quotaId:e.quotaId});e.statusOverrides.delete(Yh(tm(e.walletId),e.walletSessionId,e.quotaId));let r=new Set,i=new Set;for(let a of t){if(a.backing===`record_policy`)continue;let t=String(a.materialActivation.activationId);if(r.has(t))continue;if(r.add(t),a.backing===`email_otp_worker`){try{await e.deps.clearEmailOtpWarmSessionMaterial?.(a.thresholdSessionId)}catch{i.add(`email_otp_material`)}continue}let o=n(a.thresholdSessionId);if(o.ok)try{await e.deps.touchConfirm?.clearVolatileWarmSessionMaterial?.(fh(o.value))}catch{i.add(`touch_confirm_material`)}}return i.size>0?{kind:`unavailable`,failures:[...i]}:{kind:`cleared`}}function ag(e){return`${String(e.walletId)}:wallet-session:${String(e.walletSessionId)}`}function og(e){let t=e.state;return{kind:`wallet_session_expired`,walletId:t.walletId,walletSessionId:e.walletSessionId,authMethod:t.authMethod,expiresAtMs:t.expiresAtMs,detectedAtMs:t.detectedAtMs}}async function sg(e){let t=e.state.laneIdentity;if(!(`thresholdSessionId`in t))return{kind:`cleared`};try{return t.auth.kind===`email_otp`?await e.deps.readiness.clearEmailOtpWarmSessionMaterial(t.thresholdSessionId):await e.deps.readiness.touchConfirm.clearVolatileWarmSessionMaterial(fh(t.thresholdSessionId)),{kind:`cleared`}}catch{return{kind:`unavailable`,failures:[t.auth.kind===`email_otp`?`email_otp_material`:`touch_confirm_material`]}}}var cg=class{#e;#t=new Map;#n=new Set;constructor(e){this.#e=e}async invalidate(e){let t=e.state,n=ag(t),r=this.#t.get(n);r||(r=sg({deps:this.#e,state:t}),this.#t.set(n,r));let i=await r;return i.kind===`unavailable`?(this.#t.delete(n),{kind:`unavailable`,failures:i.failures,event:null}):this.#n.has(n)?{kind:`already_invalidated`,event:null}:(this.#n.add(n),{kind:`invalidated`,event:og(e)})}};function lg(e){return e.lane.curve===`ed25519`&&e.readiness.curve===`ed25519`}function ug(e){return e.lane.curve===`ecdsa`&&e.readiness.curve===`ecdsa`}var dg=class{#e;#t;#n=!0;constructor(e){this.#e=e.listeners,this.#t=e.listener}unsubscribe(){this.#n&&(this.#n=!1,this.#e.delete(this.#t))}};function fg(e){return Pi({walletId:e.event.walletId,walletSessionId:e.event.walletSessionId,authMethod:e.event.authMethod,expiresAtMs:e.event.expiresAtMs,detectedAtMs:e.event.detectedAtMs,source:e.source})}var pg=class{onPlannerTrace;walletSessionStatusReader;walletSessionDeps;walletSessionState;operationIdBindings;walletSessionExpiryInvalidator;lifecycleListeners=new Set;walletSessionQuotaAdmissionRefreshQueues=new Map;exactWalletSessionReadPorts;constructor(e){this.exactWalletSessionReadPorts=e.exactWalletSessionReadPorts,this.onPlannerTrace=e.onPlannerTrace,this.walletSessionDeps=e,this.walletSessionState={statusOverrides:new Map},this.walletSessionExpiryInvalidator=new cg({readiness:{touchConfirm:e.touchConfirm,clearEmailOtpWarmSessionMaterial:e.clearEmailOtpWarmSessionMaterial},statusOverrides:this.walletSessionState.statusOverrides}),this.operationIdBindings=new ch,this.walletSessionStatusReader=e.getStatus}async resolveActiveAuthorizedRouterAbEd25519WalletSessionState(e){return await us({state:e.state,nowMs:e.nowMs,ports:this.exactWalletSessionReadPorts})}subscribeLifecycle(e){return this.lifecycleListeners.add(e),new dg({listeners:this.lifecycleListeners,listener:e})}async invalidateExpiredWalletSession(e){let t=await go({ports:this.exactWalletSessionReadPorts,input:{walletId:e.state.walletId,authMethod:e.state.authMethod,walletSessionId:e.state.walletSessionId,quotaId:e.state.quotaId,requiredSigningSubject:lo(e.state.laneIdentity),expiry:{kind:`expired`,nowMs:e.state.detectedAtMs}}});if(t.kind!==`resolved`)return{kind:`unavailable`,failures:[`wallet_session_authorization`],event:null};let n=await this.walletSessionExpiryInvalidator.invalidate({state:e.state,walletSessionId:t.resolved.walletSessionId});if(n.kind!==`invalidated`)return n;let r=fg({event:n.event,source:e.source});return this.emitLifecycleEvent(r),{kind:`invalidated`,event:r}}emitLifecycleEvent(e){for(let t of this.lifecycleListeners)try{t(e)}catch(e){console.error(`[SigningSessionCoordinator] lifecycle listener failed`,e)}}resolveAuthPlan(e,t){let n=Xd(e),r=Yd(e,n);return t?.(r),t||this.onPlannerTrace?.(r),n}async resolveAuthPlanFromReadiness(e,t){if(lg(e)){let n=e.readiness.status===`ready`||e.readiness.status===`exhausted`||e.readiness.status===`expired`?e.readiness.expiresAtMs:0,r=e.readiness.status===`ready`||e.readiness.status===`exhausted`?e.readiness.remainingUses:0;return{readiness:e.readiness,expiresAtMs:n,remainingUses:r,signingSessionPlan:this.resolveAuthPlan({lane:e.lane,readiness:e.readiness,forceFreshAuth:e.forceFreshAuth,sensitiveOperationPolicy:e.sensitiveOperationPolicy},t)}}if(ug(e)){let n=e.readiness.status===`ready`||e.readiness.status===`exhausted`||e.readiness.status===`expired`?e.readiness.expiresAtMs:Math.floor(Number(e.expiresAtMs)||0),r=e.readiness.status===`ready`||e.readiness.status===`exhausted`?e.readiness.remainingUses:0;return{readiness:e.readiness,expiresAtMs:n,remainingUses:r,signingSessionPlan:this.resolveAuthPlan({lane:e.lane,readiness:e.readiness,forceFreshAuth:e.forceFreshAuth,sensitiveOperationPolicy:e.sensitiveOperationPolicy},t)}}throw Error(`[SigningSessionCoordinator] lane and readiness curves do not match`)}async getStatus(e){let t=B(e.walletId),n=e.walletSessionId,r=new Set((e.targetThresholdSessionIds||[]).map(Nh).filter(Boolean)),i=r.size>0,a=async()=>i?await ng({deps:this.walletSessionDeps,walletSessionId:n,targetThresholdSessionIds:r}):null,o=(await Vh(this.walletSessionDeps,t)).filter(t=>t.walletSessionId===n&&t.quotaId===e.quotaId);if(!o.length)return await a();let s=i?o.filter(e=>r.has(e.thresholdSessionId)):o;if(i&&!s.length)return await a()||{sessionId:n,status:`not_found`};let c=Kh({lanes:s,claimsByThresholdSessionId:await Qh({deps:this.walletSessionDeps,lanes:s}),statusOverrides:this.walletSessionState.statusOverrides}),l=s.map(e=>c.get(e.thresholdSessionId)||null).filter(Boolean);return rg({walletSessionId:n,lanes:s,claim:l.find(e=>e?.state===`expired`)||l.find(e=>e?.state===`exhausted`)||l.find(e=>e?.state===`unavailable`)||l.find(e=>e?.state===`warm`)||null})}async getLaneClaimsForWallet(e){return await eg({deps:this.walletSessionDeps,walletId:B(e),statusOverrides:this.walletSessionState.statusOverrides})}async clear(e){await ig({deps:this.walletSessionDeps,statusOverrides:this.walletSessionState.statusOverrides,walletId:B(e.walletId),walletSessionId:e.walletSessionId,quotaId:e.quotaId})}async getAvailableStatus(e){return this.walletSessionStatusReader?await this.walletSessionStatusReader(e):null}bindCallerProvidedOperationIdToFingerprint(e){this.operationIdBindings.bindCallerProvidedOperationIdToFingerprint(e)}async runWalletSessionQuotaAdmissionRetry(e){let t=String(e.queueKey),n=this.walletSessionQuotaAdmissionRefreshQueues.get(t);if(n)return await n.catch(()=>void 0),await e.retryAfterRefresh();let r=e.refresh(),i=r.catch(()=>void 0).then(()=>{this.walletSessionQuotaAdmissionRefreshQueues.get(t)===i&&this.walletSessionQuotaAdmissionRefreshQueues.delete(t)});return this.walletSessionQuotaAdmissionRefreshQueues.set(t,i),await r}};const mg={resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),readExactWithOperationCredential:K.readExactWithOperationCredential.bind(K)};function hg(e){return e.getEmailOtpWarmSessionStatus||(async t=>await e.passkeyMpcSession.getWarmSessionStatus({thresholdSessionId:t.thresholdSessionId}))}function gg(e){let{createArgs:t,getEmailOtpWarmSessionStatus:n}=e;return new pg({exactWalletSessionReadPorts:mg,getStatus:t.getWalletSessionStatus,touchConfirm:t.passkeyMpcSession,getEmailOtpWarmSessionStatus:e=>n({kind:`ecdsa`,thresholdSessionId:e}),clearEmailOtpWarmSessionMaterial:t.clearEmailOtpWarmSessionMaterial})}async function _g(e){if(e.lane.auth.kind!==`email_otp`)return null;try{let t=await e.createArgs.resolveCanonicalEcdsaSigningCapability({walletId:e.lane.signer.walletId,chainTarget:e.lane.signer.chainTarget,materialActivation:e.lane.signer.materialActivation});if(!oi(t.authority)||t.authority.factor.providerUserId!==e.lane.auth.providerSubjectId)return null;let n=await e.createArgs.resolveActiveEcdsaWalletSessionAuthorization({walletId:e.lane.signer.walletId,chainTarget:e.lane.signer.chainTarget,materialActivation:e.lane.signer.materialActivation},new q);if(!n)return null;let r=hd({capability:t,authorization:n,nowMs:Date.now()}),i=r.authorization.runtime;return r.authorization.selectedAuthMethod.kind!==`email_otp`||i.authBinding.kind!==`email_otp`||!ai(t.authority,i.authBinding.emailOtpAuthority)||t.authority.factor.providerUserId!==e.lane.auth.providerSubjectId||i.walletId!==e.lane.signer.walletId||!an(i.chainTarget,e.lane.signer.chainTarget)||!g(i.materialActivation,e.lane.signer.materialActivation)?null:r.authorization}catch{return null}}function vg(e){let{createArgs:t,signingSessionCoordinator:n,getEmailOtpWarmSessionStatus:r}=e;return{activeWalletAuthorityEcdsaRuntimeReadPorts:mg,resolveOwnerLaneScope:t.resolveOwnerLaneScope,resolveCanonicalEcdsaSigningCapability:t.resolveCanonicalEcdsaSigningCapability,resolveAuthorizedEcdsaSigningCapability:t.resolveAuthorizedEcdsaSigningCapability,resolveActiveEcdsaWalletSessionAuthorization:t.resolveActiveEcdsaWalletSessionAuthorization,walletSignerStore:e.walletSignerStore,passkeyAuthenticatorStore:e.passkeyAuthenticatorStore,seamsWebConfigs:t.seamsWebConfigs,nonceCoordinator:t.nonceCoordinator,ensureSealedRefreshStartupParity:t.ensureSealedRefreshStartupParity,getSignerWorkerContext:()=>t.signerWorkerManager.getContext(),requestEmailOtpTransactionSigningChallenge:({walletSession:e,chain:n,authority:r,operationFingerprintDigest:i})=>t.requestEmailOtpTransactionSigningChallenge?.({walletSession:e,chain:n,authority:r,operationFingerprintDigest:i})||Promise.reject(Error(`Email OTP signing challenge is not configured`)),resolveDurableEmailOtpEcdsaSigningSessionAuthority:async({lane:e})=>await _g({lane:e,createArgs:t}),restorePersistedSessionForSigning:e=>t.restorePersistedSessionForSigning(e),readAvailableSigningLanesForSigning:e=>t.readAvailableSigningLanesForSigning(e),signingSessionCoordinator:n,getEmailOtpWarmSessionStatus:e=>r({kind:`ecdsa`,thresholdSessionId:e}),provisionThresholdEcdsaSession:e=>t.provisionThresholdEcdsaSession(e),withThresholdEcdsaSigningQueue:e=>t.withThresholdEcdsaSigningQueue(e),touchConfirm:t.touchConfirm}}function yg(e){let{createArgs:t,nearRpcUrl:n,signingSessionCoordinator:r}=e;return{nearRpcUrl:n,touchConfirm:t.touchConfirm,resolveOwnerLaneScope:t.resolveOwnerLaneScope,prepareNearEd25519YaoMaterialBoundary:t.prepareNearEd25519YaoMaterialBoundary,createSigningSessionId:e=>El(e),getSignerWorkerContext:()=>t.signerWorkerManager.getContext(),readAvailableSigningLanesForSigning:e=>t.readAvailableSigningLanesForSigning(e),...t.requestEmailOtpEd25519SigningChallenge?{requestEmailOtpEd25519SigningChallenge:e=>t.requestEmailOtpEd25519SigningChallenge(e)}:{},signingSessionCoordinator:r,withThresholdEd25519CommitQueue:e=>t.withThresholdEd25519CommitQueue(e)}}function bg(e){return{credentialStore:e.credentialStore,touchIdPrompt:e.createArgs.touchIdPrompt,getSignerWorkerContext:()=>e.createArgs.signerWorkerManager.getContext(),routerAbNormalSigning:e.createArgs.seamsWebConfigs.signing.routerAb.normalSigning,defaultRelayerUrl:e.createArgs.seamsWebConfigs.network.relayer?.url||``,persistThresholdEcdsaBootstrapForWalletTarget:e.createArgs.persistThresholdEcdsaBootstrapForWalletTarget}}function xg(e){return{accountStore:e.accountStore,userPreferencesManager:e.createArgs.userPreferencesManager,nonceCoordinator:e.createArgs.nonceCoordinator}}var Sg=class{async upsert(e){}async remove(e){}async list(){return[]}async upsertLane(e){}async removeLane(e){}async listLanes(){return[]}};function Cg(e,t){let n=String(e??``).trim();if(!n)throw Error(`${t} is required`);return n}function wg(e){let t=e.materialActivation;return JSON.stringify([Cg(e.walletId,`walletId`),Cg(e.nearAccountId,`nearAccountId`),Cg(t.activationId,`materialActivation.activationId`),Cg(t.capability,`materialActivation.capability`),Cg(t.materialOwner,`materialActivation.materialOwner`),Cg(t.keyBinding,`materialActivation.keyBinding`),Cg(t.lifecycleBinding,`materialActivation.lifecycleBinding`),Cg(t.signingWorker,`materialActivation.signingWorker`)])}function Tg(e){if(e.activeClient.status().kind!==`active`)throw Error(`Ed25519 Yao active Client registry rejects disposed state`);let t=e.activeClient.metadata(),n=e.facts,r=n.signer,i=r.account.wallet.walletId,a=r.account.nearAccountId,o=Cg(n.thresholdSessionId,`material.facts.thresholdSessionId`),s=Hc(t);if(t.scope.threshold_session_id!==o||!Br(t.scope.material_activation,Kr(s))||t.scope.account_id!==String(i)||t.applicationBinding.wallet_id!==String(i)||t.applicationBinding.near_ed25519_signing_key_id!==String(r.nearEd25519SigningKeyId)||t.applicationBinding.signing_root_id!==n.signingRootId||t.scope.root_share_epoch!==n.signingRootVersion||t.applicationBinding.key_creation_signer_slot!==r.signerSlot||t.scope.signing_worker_id!==n.routerAbNormalSigning.signingWorkerId)throw Error(`Ed25519 Yao active Client registry subject identity mismatch`);if(t.participantIds[0]!==de[0]||t.participantIds[1]!==de[1])throw Error(`Ed25519 Yao active Client registry participant identity mismatch`);return{walletId:i,nearAccountId:a,materialActivation:s}}function Eg(e,t){return String(e.walletId)===String(t.walletId)&&String(e.nearAccountId)===String(t.nearAccountId)&&g(e.materialActivation,t.materialActivation)}var Dg=class{entries=new Map;lifecycleGeneration=0;constructor(e=new Sg){this.publicReferences=e}async activate(e){let t=Tg(e),n=wg(t),r=this.lifecycleGeneration;for(let n of this.entries.values())if(n.material.activeClient===e.activeClient&&!Eg(n.identity,t))throw Error(`Ed25519 Yao active Client state is already bound to another identity`);let i=this.entries.get(n);if(!i&&this.entries.size>=64)throw Error(`Ed25519 Yao active Client registry capacity is exhausted`);if(await this.publicReferences.upsert({walletId:t.walletId,nearAccountId:t.nearAccountId,thresholdSessionId:e.facts.thresholdSessionId,runtimePolicyScope:e.facts.runtimePolicyScope,materialActivation:t.materialActivation}),r!==this.lifecycleGeneration||e.activeClient.status().kind!==`active`)throw e.activeClient.dispose(),await this.publicReferences.remove(t),await this.publicReferences.removeLane(t),Error(`Ed25519 Yao active Client activation was interrupted`);return i&&i.material.activeClient!==e.activeClient&&i.material.activeClient.dispose(),this.entries.set(n,{identity:t,material:e}),t}resolve(e){let t=wg(e),n=this.entries.get(t);return n?n.material.activeClient.status().kind===`disposed`?(this.entries.delete(t),null):n.material:null}resolveExact(e){return this.resolve(e)}resolveForWalletAccount(e){let t=null;for(let n of this.entries.values())if(!(String(n.identity.walletId)!==String(e.walletId)||String(n.identity.nearAccountId)!==String(e.nearAccountId))&&n.material.activeClient.status().kind!==`disposed`){if(t)throw Error(`Ed25519 Yao active Client lookup scope is ambiguous`);t=n.material}return t}async rollbackActivation(e){this.lifecycleGeneration+=1;let t=wg(e),n=this.entries.get(t);return n&&(this.entries.delete(t),n.material.activeClient.dispose()),await this.publicReferences.remove(e),await this.publicReferences.removeLane(e),n!==void 0}disposeWallet(e){this.lifecycleGeneration+=1;let t=Cg(e,`walletId`),n=0;for(let[e,r]of this.entries)String(r.identity.walletId)===t&&(this.entries.delete(e),r.material.activeClient.dispose(),n+=1);return n}dispose(){this.lifecycleGeneration+=1;for(let e of this.entries.values())e.material.activeClient.dispose();this.entries.clear()}};function Og(e,t){t.wrapKeySalt&&(e.wrapKeySalt=t.wrapKeySalt),t.payload&&(e.payload=t.payload),typeof t.timestamp==`number`&&(e.timestamp=t.timestamp),typeof t.schemaVersion==`number`&&(e.schemaVersion=t.schemaVersion)}function kg(e,t){typeof t.timestamp==`number`&&(e.timestamp=t.timestamp),typeof t.schemaVersion==`number`&&(e.schemaVersion=t.schemaVersion)}function Ag(e){let t=fn(d(e||``));return t.startsWith(`ed25519:`)?t:``}function jg(e){let t=Ag(e.publicKey);if(t)return t;let n=fn(d(e.relayerKeyId||``));return n.startsWith(`ed25519:`)?n:``}function Mg(e,t){if(e.role!==`relayer`)return e;let n={id:e.id,role:`relayer`,relayerKeyId:t};return e.relayerUrl&&(n.relayerUrl=e.relayerUrl),e.shareDerivation&&(n.shareDerivation=e.shareDerivation),n}function Ng(e){let t=oe(e.participants),n=t?.some(e=>e.role===`relayer`)===!0;return!t||!n?ce({relayerKeyId:e.relayerKeyId,clientShareDerivation:`prf_first_v1`}):t.map(t=>Mg(t,e.relayerKeyId))}function Pg(e,t,n){if(!n)return null;let r=n.payload||{},i=Ag(n.publicKey),a=jg({publicKey:i,relayerKeyId:r.relayerKeyId}),o=d(r.keyVersion||``);return!i||!a||!o?null:{nearAccountId:e,signerSlot:t,kind:`threshold_ed25519_v1`,publicKey:i,relayerKeyId:a,keyVersion:o,participants:Ng({participants:r.participants,relayerKeyId:a}),timestamp:n.timestamp}}async function Fg(e,t,n){return Pg(t,n,await Ec({deps:e,accountRefs:qs(t),signerSlot:n,keyKind:`threshold_share_v1`}))}async function Ig(e,t){let n=d(t.nearAccountId||``).toLowerCase();if(!n)throw Error(`IndexedDBManager: Missing nearAccountId for key write`);if(!Number.isSafeInteger(t.signerSlot)||t.signerSlot<1)throw Error(`IndexedDBManager: Invalid signerSlot for key write`);let r=d(t.keyKind||``);if(!r)throw Error(`IndexedDBManager: Missing keyKind for key write`);let i=String(t.algorithm||`ed25519`).trim().toLowerCase(),a=d(t.publicKey||``);if(!a)throw Error(`IndexedDBManager: Missing publicKey for key write`);let o=d(t.signerId||``);if(!o)throw Error(`IndexedDBManager: Missing signerId for key write`);let s=d(t.chainIdKey||``).toLowerCase(),c=d(t.profileId||``),l=qs(n);if(c||s){if(!c||!s)throw Error(`IndexedDBManager: profileId and chainIdKey are required together for explicit NEAR key material writes`);let u={accountRefs:l,signerSlot:t.signerSlot,keyKind:r,algorithm:i,publicKey:a,signerId:o,explicitProfileId:c,explicitChainIdKey:s,explicitAccountAddress:n};Og(u,t),await Cc(e,u);return}let u={accountRefs:l,signerSlot:t.signerSlot,keyKind:r,algorithm:i,publicKey:a,signerId:o};Og(u,t),await Cc(e,u)}async function Lg(e,t){let n=Ag(t.publicKey);if(!n)throw Error(`IndexedDBManager: Missing Ed25519 publicKey for threshold key write`);let r=jg({publicKey:n,relayerKeyId:t.relayerKeyId}),i=d(t.keyVersion||``);if(!r||!i)throw Error(`IndexedDBManager: Missing threshold Ed25519 relayer metadata for key write`);let a={relayerKeyId:r,keyVersion:i,participants:Ng({participants:t.participants,relayerKeyId:r})},o=d(t.profileId||``),s=d(t.chainIdKey||``).toLowerCase();if(o||s){if(!o||!s)throw Error(`IndexedDBManager: profileId and chainIdKey are required together for explicit NEAR threshold key writes`);let r={nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,keyKind:`threshold_share_v1`,publicKey:n,signerId:t.signerId,payload:a,profileId:o,chainIdKey:s};kg(r,t),await Ig(e,r);return}let c={nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,keyKind:`threshold_share_v1`,publicKey:n,signerId:t.signerId,payload:a};kg(c,t),await Ig(e,c)}function Rg(e){return Math.max(0,Math.round(performance.now()-e))}async function zg(e){let t=performance.now();try{await e()}catch{}return Rg(t)}async function Bg(e,t){if(!e)return null;try{return await sf(e,t)}catch{return null}}async function Vg(e,t={kind:`none`}){let n=t.kind===`near_account_bound`?t.account:null,r=n?mn(n.nearAccountId):null,i=await Bg(r,e.store);return{kind:`worker_resource_warmup_diagnostics_v1`,authenticatedWalletStateMs:n&&r&&i?await zg(()=>e.activateAuthenticatedWalletState({walletId:n.wallet.walletId,nearAccountId:r,signerSlot:i,nearClient:e.nearClient})):0,noncePrefetchMs:await zg(()=>e.nonceCoordinator.prefetchNearContext({kind:`initialized_state`,nearClient:e.nearClient})),keyMaterialReadMs:r&&i?await zg(async()=>{await Fg({clientDB:e.store,keyMaterialStore:e.store},r,i).catch(()=>null)}):0,uiConfirmPrewarmMs:e.shouldPrewarmUiConfirmUi(e.workerBaseOrigin)?await zg(e.prewarmUiConfirmUi):0}}function Hg(e){return Ke(e.seamsWebConfigs.network.chains)}function Ug(e,t){return()=>({workerBaseOrigin:e.getWorkerBaseOrigin(),store:t.warmupStore,nearClient:e.nearClient,nonceCoordinator:e.nonceCoordinator,shouldPrewarmUiConfirmUi:e.shouldPrewarmUiConfirmUi,prewarmUiConfirmUi:async()=>{await Promise.all([e.touchConfirm.initialize(),e.passkeyMpcSession.prewarmShamir3Pass()])},activateAuthenticatedWalletState:e.activateAuthenticatedWalletState})}function Wg(e){let{createArgs:t,getWorkerResourceWarmupDeps:n}=e;return()=>({signTempo:t.signTempo,warmCriticalResources:e=>Vg(n(),e)})}function Gg(e){let t=new Dg(e.ed25519YaoPublicCapabilityReferences),n=Hg(e),r=hg(e),i=gg({createArgs:e,getEmailOtpWarmSessionStatus:r}),a=Ug(e,{warmupStore:e.stores.warmup.store});return{ed25519YaoActiveClients:t,nearSigningDeps:yg({createArgs:e,nearRpcUrl:n,signingSessionCoordinator:i}),tempoSigningDeps:vg({createArgs:e,walletSignerStore:e.stores.walletProfileAndSignerRecords.walletSignerStore,passkeyAuthenticatorStore:e.stores.walletProfileAndSignerRecords.passkeyAuthenticatorStore,signingSessionCoordinator:i,getEmailOtpWarmSessionStatus:r}),registrationAccountLifecycleDeps:xg({createArgs:e,accountStore:e.stores.walletProfileAndSignerRecords.accountStore}),registrationSessionDeps:{touchConfirm:e.touchConfirm,touchIdPrompt:e.touchIdPrompt},walletSessionActivationDeps:bg({createArgs:e,credentialStore:e.stores.recoveryAndDeviceLinking.credentialStore}),signingSessionCoordinator:i,getWorkerResourceWarmupDeps:a,getManagerConveniencePorts:Wg({createArgs:e,getWorkerResourceWarmupDeps:a})}}const Kg=[`kind`,`keyFamily`,`walletId`,`walletKeyId`,`walletKeyVersion`,`lifecycle`],qg=[...Kg,`nearEd25519SigningKeyId`,`keyCreationSignerSlot`,`registeredPublicKeyB64u`],Jg=[...Kg,`evmFamilySigningKeySlotId`,`thresholdPublicKey33B64u`,`evmAddress`],Yg=Array.from(new Set([...qg,...Jg])),Xg=[`state`,`activatedAtMs`,`retiredAtMs`,`compromisedAtMs`],Zg=[...[`kind`,`walletId`,`walletKeyId`,`laneId`,`laneKind`,`laneShareEpoch`,`participantBindingDigestB64u`],`lifecycle`],Qg=[...Zg,`walletAuthMethodId`,`ownerParticipantContinuity`],$g=[...Zg,`ownerParticipantContinuity`],e_=[...Zg,`holderParticipant`,`serverParticipant`],t_=[...e_,`authorizationId`,`agentIdentityKeyId`,`custodyBindingId`,`authorizationBindingDigestB64u`],n_=[...e_,`linkedDeviceId`],r_=Array.from(new Set([...Qg,...$g,...t_,...n_])),i_=[`state`,`revocationEpoch`,`startedAtMs`,`deliveryDigestB64u`,`activatedAtMs`,`activationReceiptDigestB64u`,`revokedAtMs`,`revokeReason`];function a_(e){switch(e){case`owner_passkey`:case`owner_voiceid`:case`owner_email_otp`:return Qg;case`recovery`:case`break_glass`:return $g;case`linked_device`:return n_;case`delegated_execution`:return t_}}function o_(e,t){if(e==null)throw Error(`${t} is required`);if(typeof e!=`string`)throw Error(`${t} must be a string`);let n=e.trim();if(!n)throw Error(`${t} is required`);if(x(n))throw Error(`${t} must not contain whitespace or control characters`);return n}function s_(e,t){if(typeof e!=`string`)throw Error(`${t} must be a string`);let n=e.trim();if(!n)throw Error(`${t} is required`);if(x(n))throw Error(`${t} must not contain whitespace or control characters`);return n}function c_(e,t){if(typeof e!=`number`||!Number.isSafeInteger(e)||e<0)throw Error(`${t} must be a non-negative safe integer`);return e}function l_(e,t=`walletKeyVersion`){return o_(e,t)}function u_(e,t){return o_(e,t)}function d_(e,t){return o_(e,t)}function f_(e,t){return o_(e,t)}function p_(e,t){switch(e){case`owner_passkey`:case`owner_voiceid`:case`owner_email_otp`:case`linked_device`:case`delegated_execution`:case`recovery`:case`break_glass`:return e;default:throw Error(`${t} must be a known signing lane kind`)}}function m_(e,t){let n=E(e,t);switch(ke(n,Xg,t,Xg),n.state){case`active`:if(n.retiredAtMs!==void 0||n.compromisedAtMs!==void 0)throw Error(`${t} cannot be active and carry a retired or compromised timestamp`);return x_({activatedAtMs:je(n.activatedAtMs,`${t}.activatedAtMs`)});case`retired`:if(n.activatedAtMs!==void 0||n.compromisedAtMs!==void 0)throw Error(`${t} cannot be retired and carry an active or compromised timestamp`);return S_({retiredAtMs:je(n.retiredAtMs,`${t}.retiredAtMs`)});case`compromised`:if(n.activatedAtMs!==void 0||n.retiredAtMs!==void 0)throw Error(`${t} cannot be compromised and carry an active or retired timestamp`);return C_({compromisedAtMs:je(n.compromisedAtMs,`${t}.compromisedAtMs`)});default:throw Error(`${t}.state must be active, retired, or compromised`)}}function h_(e,t){let n=E(e,t);ke(n,i_,t);let r=c_(n.revocationEpoch,`${t}.revocationEpoch`);switch(n.state){case`provisioning`:if(n.deliveryDigestB64u!==void 0||n.activatedAtMs!==void 0||n.activationReceiptDigestB64u!==void 0||n.revokedAtMs!==void 0||n.revokeReason!==void 0)throw Error(`${t} provisioning state carries fields from another lifecycle state`);return D_({revocationEpoch:r,startedAtMs:je(n.startedAtMs,`${t}.startedAtMs`)});case`pending_receipt`:if(n.activatedAtMs!==void 0||n.activationReceiptDigestB64u!==void 0||n.revokedAtMs!==void 0||n.revokeReason!==void 0)throw Error(`${t} pending_receipt state carries fields from another lifecycle state`);return O_({revocationEpoch:r,startedAtMs:je(n.startedAtMs,`${t}.startedAtMs`),deliveryDigestB64u:De(n.deliveryDigestB64u,`${t}.deliveryDigestB64u`)});case`active`:if(n.startedAtMs!==void 0||n.deliveryDigestB64u!==void 0||n.revokedAtMs!==void 0||n.revokeReason!==void 0)throw Error(`${t} active state carries fields from another lifecycle state`);return k_({revocationEpoch:r,activatedAtMs:je(n.activatedAtMs,`${t}.activatedAtMs`),activationReceiptDigestB64u:De(n.activationReceiptDigestB64u,`${t}.activationReceiptDigestB64u`)});case`revoked`:{if(n.startedAtMs!==void 0||n.deliveryDigestB64u!==void 0||n.activatedAtMs!==void 0||n.activationReceiptDigestB64u!==void 0)throw Error(`${t} revoked state carries fields from another lifecycle state`);let e=n.revokeReason;if(e!==`user_revoked`&&e!==`device_compromise`&&e!==`agent_compromise`&&e!==`rotation`)throw Error(`${t}.revokeReason is invalid`);return A_({revocationEpoch:r,revokedAtMs:je(n.revokedAtMs,`${t}.revokedAtMs`),revokeReason:e})}default:throw Error(`${t}.state must be provisioning, pending_receipt, active, or revoked`)}}function g_(e,n){if(e.kind!==`signing_lane_reference_v1`)throw Error(`${n}.kind must be signing_lane_reference_v1`);return E_({walletId:Ne(_(e.walletId),`${n}.walletId`),walletKeyId:Ne(t(e.walletKeyId),`${n}.walletKeyId`),laneId:Ne(w(e.laneId),`${n}.laneId`),laneShareEpoch:Ne(v(e.laneShareEpoch),`${n}.laneShareEpoch`),laneKind:p_(e.laneKind,`${n}.laneKind`),participantBindingDigestB64u:Ne(oa(e.participantBindingDigestB64u),`${n}.participantBindingDigestB64u`)})}function __(e,t){let n=g_(e,t);return{walletId:n.walletId,walletKeyId:n.walletKeyId,laneId:n.laneId,laneShareEpoch:n.laneShareEpoch,participantBindingDigestB64u:n.participantBindingDigestB64u,lifecycle:h_(e.lifecycle,`${t}.lifecycle`)}}function v_(e,t){let n=__(e,t),i=r(e.walletAuthMethodId);return{...n,walletAuthMethodId:Ne(i,`${t}.walletAuthMethodId`),ownerParticipantContinuity:ca(e.ownerParticipantContinuity,`${t}.ownerParticipantContinuity`)}}function y_(e,t){return{...__(e,t),ownerParticipantContinuity:ca(e.ownerParticipantContinuity,`${t}.ownerParticipantContinuity`)}}function b_(e,t){return{...__(e,t),holderParticipant:_a(e.holderParticipant,`${t}.holderParticipant`),serverParticipant:ga(e.serverParticipant,`${t}.serverParticipant`)}}function x_(e){return{state:`active`,activatedAtMs:e.activatedAtMs}}function S_(e){return{state:`retired`,retiredAtMs:e.retiredAtMs}}function C_(e){return{state:`compromised`,compromisedAtMs:e.compromisedAtMs}}function w_(e){return{kind:`wallet_key_record_v1`,keyFamily:`ed25519`,walletId:e.walletId,walletKeyId:e.walletKeyId,walletKeyVersion:e.walletKeyVersion,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,keyCreationSignerSlot:e.keyCreationSignerSlot,registeredPublicKeyB64u:e.registeredPublicKeyB64u,lifecycle:e.lifecycle}}function T_(e){return{kind:`wallet_key_record_v1`,keyFamily:`ecdsa_secp256k1`,walletId:e.walletId,walletKeyId:e.walletKeyId,walletKeyVersion:e.walletKeyVersion,evmFamilySigningKeySlotId:e.evmFamilySigningKeySlotId,thresholdPublicKey33B64u:e.thresholdPublicKey33B64u,evmAddress:e.evmAddress,lifecycle:e.lifecycle}}function E_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:e.laneKind,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u}}function D_(e){return{state:`provisioning`,revocationEpoch:e.revocationEpoch,startedAtMs:e.startedAtMs}}function O_(e){return{state:`pending_receipt`,revocationEpoch:e.revocationEpoch,startedAtMs:e.startedAtMs,deliveryDigestB64u:e.deliveryDigestB64u}}function k_(e){return{state:`active`,revocationEpoch:e.revocationEpoch,activatedAtMs:e.activatedAtMs,activationReceiptDigestB64u:e.activationReceiptDigestB64u}}function A_(e){return{state:`revoked`,revocationEpoch:e.revocationEpoch,revokedAtMs:e.revokedAtMs,revokeReason:e.revokeReason}}function j_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`owner_passkey`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,walletAuthMethodId:e.walletAuthMethodId,ownerParticipantContinuity:e.ownerParticipantContinuity,lifecycle:e.lifecycle}}function M_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`owner_email_otp`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,walletAuthMethodId:e.walletAuthMethodId,ownerParticipantContinuity:e.ownerParticipantContinuity,lifecycle:e.lifecycle}}function N_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`owner_voiceid`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,walletAuthMethodId:e.walletAuthMethodId,ownerParticipantContinuity:e.ownerParticipantContinuity,lifecycle:e.lifecycle}}function P_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`linked_device`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,holderParticipant:e.holderParticipant,serverParticipant:e.serverParticipant,lifecycle:e.lifecycle,linkedDeviceId:e.linkedDeviceId}}function F_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`delegated_execution`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,holderParticipant:e.holderParticipant,serverParticipant:e.serverParticipant,lifecycle:e.lifecycle,authorizationId:e.authorizationId,agentIdentityKeyId:e.agentIdentityKeyId,custodyBindingId:e.custodyBindingId,authorizationBindingDigestB64u:e.authorizationBindingDigestB64u}}function I_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`recovery`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,ownerParticipantContinuity:e.ownerParticipantContinuity,lifecycle:e.lifecycle}}function L_(e){return{kind:`signing_lane_reference_v1`,walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneKind:`break_glass`,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,ownerParticipantContinuity:e.ownerParticipantContinuity,lifecycle:e.lifecycle}}function R_(e,n=`walletKeyRecord`){let r=E(e,n);if(r.kind!==`wallet_key_record_v1`)throw Error(`${n}.kind must be wallet_key_record_v1`);if(r.keyFamily===`ed25519`)return ke(r,qg,n,Yg),w_({walletId:Ne(_(r.walletId),`${n}.walletId`),walletKeyId:Ne(t(r.walletKeyId),`${n}.walletKeyId`),walletKeyVersion:l_(r.walletKeyVersion,`${n}.walletKeyVersion`),nearEd25519SigningKeyId:pi(r.nearEd25519SigningKeyId),keyCreationSignerSlot:Be(r.keyCreationSignerSlot,`${n}.keyCreationSignerSlot`),registeredPublicKeyB64u:Ee(r.registeredPublicKeyB64u,`${n}.registeredPublicKeyB64u`),lifecycle:m_(r.lifecycle,`${n}.lifecycle`)});if(r.keyFamily===`ecdsa_secp256k1`)return ke(r,Jg,n,Yg),T_({walletId:Ne(_(r.walletId),`${n}.walletId`),walletKeyId:Ne(t(r.walletKeyId),`${n}.walletKeyId`),walletKeyVersion:l_(r.walletKeyVersion,`${n}.walletKeyVersion`),evmFamilySigningKeySlotId:ii(r.evmFamilySigningKeySlotId,`${n}.evmFamilySigningKeySlotId`),thresholdPublicKey33B64u:Ae(r.thresholdPublicKey33B64u,`${n}.thresholdPublicKey33B64u`),evmAddress:s_(r.evmAddress,`${n}.evmAddress`),lifecycle:m_(r.lifecycle,`${n}.lifecycle`)});throw Error(`${n}.keyFamily must be ed25519 or ecdsa_secp256k1`)}function z_(e,t=`signingLaneRecord`){let n=E(e,t);if(n.kind!==`signing_lane_reference_v1`)throw Error(`${t}.kind must be signing_lane_reference_v1`);let r=p_(n.laneKind,`${t}.laneKind`);switch(ke(n,a_(r),t,r_),r){case`owner_passkey`:return j_(v_(n,t));case`owner_voiceid`:return N_(v_(n,t));case`owner_email_otp`:return M_(v_(n,t));case`linked_device`:{let e=b_(n,t);return P_({walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,holderParticipant:e.holderParticipant,serverParticipant:e.serverParticipant,lifecycle:e.lifecycle,linkedDeviceId:Ne(p(n.linkedDeviceId),`${t}.linkedDeviceId`)})}case`delegated_execution`:{let e=b_(n,t);return F_({walletId:e.walletId,walletKeyId:e.walletKeyId,laneId:e.laneId,laneShareEpoch:e.laneShareEpoch,participantBindingDigestB64u:e.participantBindingDigestB64u,holderParticipant:e.holderParticipant,serverParticipant:e.serverParticipant,lifecycle:e.lifecycle,authorizationId:f_(n.authorizationId,`${t}.authorizationId`),agentIdentityKeyId:u_(n.agentIdentityKeyId,`${t}.agentIdentityKeyId`),custodyBindingId:d_(n.custodyBindingId,`${t}.custodyBindingId`),authorizationBindingDigestB64u:De(n.authorizationBindingDigestB64u,`${t}.authorizationBindingDigestB64u`)})}case`recovery`:return I_(y_(n,t));case`break_glass`:return L_(y_(n,t))}}async function B_(e){let t=await se(new Request(`${fe(e.relayerUrl)}/wallet/execution-lane/owner`,le({headers:ae(e.operationCredential),body:{curve:e.curve,expectedMaterialActivation:e.expectedMaterialActivation}}))),n=await t.json().catch(()=>null);if(!t.ok){let e=U_(n);throw Error(e||`Owner execution-lane preflight returned HTTP ${t.status}`)}return V_(n,e.curve)}function V_(e,t){let n=H_(e,[`ok`,`projection`],`owner execution-lane response`);if(n.get(`ok`)!==!0)throw Error(`owner execution-lane response is unsuccessful`);let r=H_(n.get(`projection`),[`kind`,`walletKey`,`lane`,`materialActivation`,`verifiedActivationReceiptDigestB64u`],`owner execution-lane projection`);if(r.get(`kind`)!==`active_owner_wallet_execution_lane_projection_v1`)throw Error(`owner execution-lane projection kind is invalid`);let i=R_(r.get(`walletKey`)),a=z_(r.get(`lane`)),o=m(r.get(`materialActivation`));if(!o.ok)throw Error(o.error.message);if(i.keyFamily!==t||a.walletId!==i.walletId||a.walletKeyId!==i.walletKeyId||a.laneKind!==`owner_passkey`&&a.laneKind!==`owner_email_otp`)throw Error(`owner execution-lane projection identity is inconsistent`);return{kind:`active_owner_wallet_execution_lane_projection_v1`,walletKey:i,lane:a,materialActivation:o.value,verifiedActivationReceiptDigestB64u:Tt(r.get(`verifiedActivationReceiptDigestB64u`))}}function H_(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw Error(`${n} must be a JSON object`);let r=new Map(Object.entries(e)),i=new Set(t);if(r.size!==i.size||[...r.keys()].some(e=>!i.has(e)))throw Error(`${n} fields are invalid`);return r}function U_(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return null;let t=new Map(Object.entries(e));if(t.size===0||t.size>2||[...t.keys()].some(e=>e!==`code`&&e!==`message`))return null;let n=t.get(`message`);return typeof n==`string`&&n.trim()?n.trim():null}function W_(e){return Ss(e)}function G_(e){return`selector`in e?e.selector.capability:e.capability}function K_(e){switch(e.kind){case`retired`:return Ic({capability:e.manifest.signer.capability,reason:`replaced`});case`missing`:return e.subject===`capability`?Ic({capability:null,reason:`missing_capability`}):Ic({capability:G_(e),reason:`missing_material`});case`exact_binding_mismatch`:return Ic({capability:G_(e),reason:`binding_mismatch`});case`exact_record_conflict`:return Ic({capability:G_(e),reason:`exact_record_conflict`});case`corrupt`:return Ic({capability:G_(e),reason:`corrupt`});case`persistence_unavailable`:return Ic({capability:G_(e),reason:`persistence_unavailable`})}}function q_(e){let t=e.lookup.manifest.activation.materialActivation;if(!g(t,e.lookup.material.binding.materialActivation)||e.lookup.manifest.signer.materialOwner!==t.materialOwner)return Ic({capability:e.lookup.manifest.signer.capability,reason:`binding_mismatch`});switch(e.runtime.kind){case`live`:return g(t,e.runtime.materialActivation)?zc({authority:e.lookup.manifest.signer.authority,runtime:e.runtime.runtime,materialActivation:t}):Ic({capability:e.lookup.manifest.signer.capability,reason:`binding_mismatch`});case`absent`:return Nc({authority:e.lookup.manifest.signer.authority,materialActivation:t,sealedMaterial:Ss(e.lookup.material.binding.durableMaterialRef)})}}function J_(e){return e.lookup.kind===`active`?q_({lookup:e.lookup,runtime:e.runtime}):K_(e.lookup)}function Y_(e){let t=v(e);if(!t.ok)throw Error(t.error.message);return t.value}function X_(e){return{walletKey:R_(e.walletKey),lane:z_(e.lane)}}function Z_(e,t){return{kind:`wallet_execution_lane_refused_v1`,reason:e,walletId:t.walletKey.walletId,walletKeyId:t.walletKey.walletKeyId,laneId:t.lane.laneId}}function Q_(){return{kind:`wallet_execution_lane_refused_v1`,reason:`invalid_boundary_record`}}function $_(e){if(e.lane.lifecycle.state!==`active`)throw Error(`active lane reference requires an active lane`);return{kind:`signing_lane_reference_v1`,walletId:e.lane.walletId,walletKeyId:e.lane.walletKeyId,laneId:e.lane.laneId,laneKind:e.lane.laneKind,laneShareEpoch:e.lane.laneShareEpoch,participantBindingDigestB64u:e.lane.participantBindingDigestB64u,lifecycle:e.lane.lifecycle,materialActivation:e.materialActivation}}function ev(e){switch(e.laneKind){case`owner_passkey`:case`owner_voiceid`:case`owner_email_otp`:case`recovery`:case`break_glass`:return e.ownerParticipantContinuity;case`linked_device`:case`delegated_execution`:return null}}function tv(e,t){return t.length===e.participantIds.length&&t.every((t,n)=>t===e.participantIds[n])}function nv(e,t){let{walletKey:n,lane:r}=e;if(n.lifecycle.state!==`active`)return Z_(`wallet_key_inactive`,e);if(r.lifecycle.state!==`active`)return Z_(`lane_inactive`,e);if(String(n.walletId)!==String(r.walletId)||String(n.walletKeyId)!==String(r.walletKeyId))return Z_(`wallet_key_mismatch`,e);if(n.keyFamily!==t.keyFamily)return Z_(`key_family_mismatch`,e);if(r.laneKind===`linked_device`||r.laneKind===`delegated_execution`)return Z_(`unsupported_lane_kind`,e);let i=ev(r);if(i===null)return Q_();let a;try{a=Y_(t.laneShareEpoch)}catch{return Q_()}return String(a)===String(r.laneShareEpoch)?!String(r.participantBindingDigestB64u)||!String(i.signerId)||!String(i.signingWorkerId)||i.participantIds.length!==2?Z_(`participant_binding_mismatch`,e):null:Z_(`share_epoch_mismatch`,e)}function rv(e){return e.kind===`use_live_runtime`||e.kind===`rehydrate_material_activation`}function iv(e,t){let n=nv(e,t);if(n)return n;let r=e.walletKey,i=e.lane,a=ev(i);if(r.keyFamily!==`ecdsa_secp256k1`||i.lifecycle.state!==`active`)return Z_(`key_family_mismatch`,e);if(a===null)return Q_();let o=J_({lookup:t.lookup,runtime:t.runtime});if(!rv(o)||t.lookup.kind!==`active`)return Z_(`hydration_blocked`,e);let s=t.lookup.manifest,c=s.durableMaterial,l=c.roleLocalPublicFacts,u=s.signer.registeredPublicFacts,d=s.activation.serverActivation.serverActivationReceipt,f=d.protocolReceipt.ecdsa_activation.public_identity,p=Gr({walletId:l.walletId,signingRootId:l.signingRootId,signingRootVersion:l.signingRootVersion});if(!g(o.materialActivation,s.activation.materialActivation)||!g(o.materialActivation,c.materialActivation)||String(o.authority.walletId)!==String(r.walletId)||String(s.signer.walletId)!==String(r.walletId)||String(l.walletId)!==String(r.walletId)||String(r.evmFamilySigningKeySlotId)!==String(p)||String(r.thresholdPublicKey33B64u)!==String(l.groupPublicKey33B64u)||String(r.thresholdPublicKey33B64u)!==String(u.publicKeyB64u)||r.evmAddress.toLowerCase()!==String(l.ethereumAddress).toLowerCase()||r.evmAddress.toLowerCase()!==String(u.thresholdOwnerAddress).toLowerCase()||String(f.context_binding_b64u)!==String(c.bindingDigest)||String(f.derivation_client_share_public_key33_b64u)!==String(l.derivationClientSharePublicKey33B64u)||String(f.threshold_public_key33_b64u)!==String(r.thresholdPublicKey33B64u)||String(d.activationDigest)!==String(i.lifecycle.activationReceiptDigestB64u))return Z_(`activation_receipt_mismatch`,e);if(String(a.signingWorkerId)!==String(o.materialActivation.signingWorker)||!tv(a,l.participantIds))return Z_(`participant_binding_mismatch`,e);let m=o.materialActivation;return{kind:`active_wallet_execution_lane_v1`,keyFamily:`ecdsa_secp256k1`,walletKey:r,lane:$_({lane:i,materialActivation:m}),ownerParticipantContinuity:a,materialActivation:m,laneShareEpoch:i.laneShareEpoch,activationReceiptDigestB64u:i.lifecycle.activationReceiptDigestB64u,publicIdentity:{keyFamily:`ecdsa_secp256k1`,thresholdPublicKey33B64u:r.thresholdPublicKey33B64u,evmAddress:r.evmAddress,evmFamilySigningKeySlotId:r.evmFamilySigningKeySlotId}}}function av(e){let t;try{t=X_(e)}catch{return Q_()}try{return iv(t,e.material)}catch{return Q_()}}function ov(e){let t=on(e.seamsWebConfigs.network.chains),n=e=>{if(e.ecdsaChainTargets.length===0)return e;let n=new Map;for(let r of[...e.ecdsaChainTargets,...t])n.set(V(r),r);return{...e,ecdsaChainTargets:[...n.values()]}};return{sessionLifecycle:e.sessionLifecycle,laneSelection:{readPersistedAvailableSigningLanesForTargets:t=>Zp({activeWalletAuthorityEcdsaRuntimeReadPorts:mg,ed25519YaoPublicCapabilityLanes:e.ed25519YaoPublicCapabilityLanes,isEd25519YaoPublicCapabilityActive:e.isEd25519YaoPublicCapabilityActive,readActiveWalletSessionAuthorization:e.readActiveWalletSessionAuthorization,listEcdsaSigningCapabilitiesForWallet:e.listEcdsaSigningCapabilitiesForWallet},{...n(t),requiredEcdsaCapability:`export_keys`},new q,`all`),readOwnerScopedAvailableSigningLanesForTargets:async t=>await Kp({activeWalletAuthorityEcdsaRuntimeReadPorts:mg,ed25519YaoPublicCapabilityLanes:e.ed25519YaoPublicCapabilityLanes,isEd25519YaoPublicCapabilityActive:e.isEd25519YaoPublicCapabilityActive,readActiveWalletSessionAuthorization:e.readActiveWalletSessionAuthorization,listEcdsaSigningCapabilitiesForWallet:e.listEcdsaSigningCapabilitiesForWallet},{...n(t),requiredEcdsaCapability:`export_keys`,ownerScope:await e.resolveOwnerLaneScope(String(t.walletId))},new q)},ecdsa:{activeWalletAuthorityEcdsaRuntimeReadPorts:mg,sessionStore:{...e.ecdsaSessions,resolveActiveEcdsaCapabilityRuntime:e.resolveActiveEcdsaCapabilityRuntime,relayerUrl:String(e.relayerUrl).trim().replace(/\/+$/g,``)},touchConfirm:e.touchConfirm,emailOtp:{requestExportChallenge:t=>e.emailOtpSessions.requestExportChallenge(t),exportEcdsaKeyWithDurableAuthorization:t=>e.emailOtpSessions.exportEcdsaKeyWithDurableAuthorization(t)},provisionPasskeyEcdsaExplicitExportSession:t=>e.provisionPasskeyEcdsaExplicitExportSession(t),getSignerWorkerContext:()=>e.signerWorkerManager.getContext(),withThresholdEcdsaSigningQueue:e.withThresholdEcdsaSigningQueue},ed25519Yao:{touchConfirm:e.touchConfirm,passkeyMpcExport:e.passkeyMpcExport,resolvePasskeyExportContext:e.resolvePasskeyEd25519YaoExportContext,withThresholdEd25519CommitQueue:e.withThresholdEd25519CommitQueue,emailOtp:{requestExportChallenge:t=>e.emailOtpSessions.requestExportChallenge(t),resolveExportContext:t=>e.resolveEmailOtpEd25519YaoExportContext(t),exportSeedWithFreshAuthorization:t=>e.emailOtpSessions.exportEd25519YaoSeedWithFreshEmailOtpLane(t)}},getTheme:e.getTheme}}async function sv(e,t){let n=t.laneIdentity,r={kind:`ed25519`,laneIdentity:n},i=rl(n),a;try{a=await e.resolveSelectedWalletAuthority(String(i))}catch{return Ud({observation:{kind:`unavailable`,source:r},nowMs:t.nowMs})}if(a.kind!==`resolved`)return Ud({observation:a.kind===`integrity_error`?{kind:`invalid`,source:r}:{kind:`missing`,source:r},nowMs:t.nowMs});if(!cv(a,n))return Ud({observation:{kind:`invalid`,source:r},nowMs:t.nowMs});let o;try{o=await e.readExactActiveForWallet({walletId:i,authorityId:a.authority.authorityId,authMethodId:a.authMethod.walletAuthMethodId})}catch{return Ud({observation:{kind:`unavailable`,source:r},nowMs:t.nowMs})}switch(o.kind){case`missing`:return Ud({observation:{kind:`missing`,source:r},nowMs:t.nowMs});case`corrupt`:case`upgrade_required`:return Ud({observation:{kind:`invalid`,source:r},nowMs:t.nowMs});case`persistence_unavailable`:return Ud({observation:{kind:`unavailable`,source:r},nowMs:t.nowMs});case`found`:break}return o.record.walletId!==i||o.record.authorityId!==a.authority.authorityId||o.record.authMethodId!==a.authMethod.walletAuthMethodId||o.operationCredential.walletSessionId!==n.walletSessionId||o.record.quotaId!==n.quotaId||o.record.authorityDigestB64u!==a.authority.authorityDigestB64u||o.record.authorityRevocationEpoch!==a.authority.revocationEpoch?Ud({observation:{kind:`invalid`,source:r},nowMs:t.nowMs}):Ud({observation:{kind:`found`,source:r,expiresAtMs:o.record.expiresAtMs},nowMs:t.nowMs})}function cv(e,t){let n=rl(t);if(e.selection.lockState!==`unlocked`||e.selection.walletId!==n||e.selection.walletAuthMethodId!==e.authMethod.walletAuthMethodId||e.authMethod.walletId!==n||e.authMethod.walletAuthorityId!==e.authority.authorityId||e.authMethod.status!==`active`||e.authority.walletId!==n||e.authority.state!==`active`)return!1;switch(t.auth.kind){case`voiceid`:return e.authMethod.kind===`voiceid`&&e.authMethod.walletAuthMethodId===t.auth.walletAuthMethodId&&e.authMethod.deviceKeyId===t.auth.deviceKeyId;case`passkey`:return e.authMethod.kind===`passkey`&&String(e.authMethod.rpId)===String(t.auth.rpId)&&e.authMethod.credentialIdB64u===t.auth.credentialIdB64u;case`email_otp`:return e.authMethod.kind===`email_otp`}}function lv(e){return Ud({observation:{kind:`found`,source:{kind:`ecdsa`,laneIdentity:e.laneIdentity,authorization:e.authorization},expiresAtMs:e.authorization.session.expiresAtMs},nowMs:e.nowMs})}async function uv(e,t){switch(t.kind){case`ed25519`:return await sv(e,t);case`ecdsa`:return lv(t)}}const dv={resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),readExactActiveForWallet:K.readExactActiveForWallet.bind(K)};async function fv(e){return await uv(dv,e)}function pv(e,t){return e.selection.lockState===`unlocked`&&e.selection.walletId===t&&e.selection.walletAuthMethodId===e.authMethod.walletAuthMethodId&&e.authMethod.status===`active`&&e.authMethod.walletId===t&&e.authMethod.walletAuthorityId===e.authority.authorityId&&e.authority.state===`active`&&e.authority.walletId===t}async function mv(e){let t;try{t=await G.resolveSelectedWalletAuthority(String(e))}catch{return{kind:`persistence_unavailable`}}if(t.kind!==`resolved`||!pv(t,e))return{kind:`missing`};try{return await K.readExactActiveForWallet({walletId:e,authorityId:t.authority.authorityId,authMethodId:t.authMethod.walletAuthMethodId})}catch{return{kind:`persistence_unavailable`}}}function hv(e){let t=lm({relayerUrl:String(e.seamsWebConfigs.network.relayer?.url||``).trim(),readAuthorization:mv});return ov({resolveActiveEcdsaCapabilityRuntime:ey,seamsWebConfigs:e.seamsWebConfigs,signerWorkerManager:e.signerWorkerManager,getTheme:e.getTheme,withThresholdEcdsaSigningQueue:t=>Md({queueByKey:e.thresholdEcdsaSigningQueueByKey,...t}),withThresholdEd25519CommitQueue:t=>wf({queueByKey:e.thresholdEd25519CommitQueueByKey,...t}),ecdsaSessions:e.warmSigning.ecdsaSessions,relayerUrl:String(e.seamsWebConfigs.network.relayer?.url||``).trim(),readActiveWalletSessionAuthorization:e.readActiveWalletSessionAuthorization,ed25519YaoPublicCapabilityLanes:e.ed25519YaoPublicCapabilityLanes,isEd25519YaoPublicCapabilityActive:e.isEd25519YaoPublicCapabilityActive,listEcdsaSigningCapabilitiesForWallet:e.listEcdsaSigningCapabilitiesForWallet,resolveOwnerLaneScope:e.resolveOwnerLaneScope,touchConfirm:e.touchConfirm,passkeyMpcSession:e.passkeyMpcSession,passkeyMpcExport:e.passkeyMpcExport,emailOtpSessions:{readWarmSessionStatusOnly:t=>e.emailOtpSessions.readWarmSessionStatusOnly(t),requestExportChallenge:t=>e.emailOtpSessions.requestExportChallenge(t),exportEcdsaKeyWithDurableAuthorization:t=>e.emailOtpSessions.exportEcdsaKeyWithDurableAuthorization(t),exportEd25519YaoSeedWithFreshEmailOtpLane:t=>e.emailOtpSessions.exportEd25519YaoSeedWithFreshEmailOtpLane(t)},provisionPasskeyEcdsaExplicitExportSession:t=>lu({queueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,activationDeps:e.getWalletSessionActivationDeps(),persistEcdsaRoleLocalReadyRecord:e.runtimePorts.storage.persistEcdsaRoleLocalReadyRecord},t),getWalletSessionStatus:e=>t(e),resolvePasskeyEd25519YaoExportContext:e.resolvePasskeyEd25519YaoExportContext,resolveEmailOtpEd25519YaoExportContext:e.resolveEmailOtpEd25519YaoExportContext,sessionLifecycle:{readAuthorization:fv,invalidateExpiredAuthorization:async t=>{if((await e.getSigningSessionCoordinator().invalidateExpiredWalletSession({state:t.state,source:t.source})).kind===`unavailable`)throw Error(`[SigningEngine][key-export] expired Wallet Session cleanup failed`)}}})}const gv=new Ui;function _v(e,t){return e.walletId===t.authority.walletId&&e.authorityId===t.authority.authorityId&&e.authMethodId===t.authMethod.walletAuthMethodId&&e.authorityDigestB64u===t.authority.authorityDigestB64u&&e.authorityRevocationEpoch===t.authority.revocationEpoch}function vv(e){if(e.authMethod!==`passkey`)throw Error(`Passkey restore adapter received a non-Passkey request`);let{authMethod:t,...n}=e;return n}const yv={getWalletAuthMethodV2:G.getWalletAuthMethodV2.bind(G),listWalletAuthMethodsForWallet:G.listWalletAuthMethodsForWallet.bind(G),readEmailOtpProviderSubjectForWallet:Hi.bind(null,G)};async function bv(){return null}async function xv(e,t){let n=await t.getWalletAuthMethodV2(String(e.walletAuthMethodId));if(!n||n.status!==`active`||n.walletId!==e.walletId)throw Error(`Exact wallet authentication authority is unavailable`);let r;try{r=await Lp({authMethod:n,stores:{...t,getWalletPasskeyAuthenticator:bv}})}catch{throw Error(`Exact wallet authentication authority is unavailable`)}let i=await H({authority:r});if(i.walletId===e.walletId&&i.walletAuthMethodId===e.walletAuthMethodId&&i.authorityDigest===e.authorityDigest)return r;throw Error(`Exact wallet authentication authority is unavailable`)}function Sv(e){return lm({relayerUrl:String(e.seamsWebConfigs.network.relayer?.url||``).trim(),readAuthorization:mv})}function Cv(e,t){return e.kind!==`resolved`||e.selection.lockState!==`unlocked`||e.selection.walletId!==t||e.selection.walletAuthMethodId!==e.authMethod.walletAuthMethodId||e.authMethod.status!==`active`||e.authMethod.walletId!==t||e.authMethod.walletAuthorityId!==e.authority.authorityId||e.authority.state!==`active`||e.authority.walletId!==t?null:{kind:e.kind,selection:e.selection,authMethod:e.authMethod,authority:e.authority,signerMaterials:e.signerMaterials,exportRoot:e.exportRoot}}async function wv(e,t,n){let r=Cv(await G.resolveSelectedWalletAuthority(String(e)),e),i=await mv(e);return!r||i.kind!==`found`||i.operationCredential.token!==n.token||!_v(i.record,r)||!kl(t,i.record)||t.authorityRevocationEpoch!==i.record.authorityRevocationEpoch||t.capabilitySubjects.length>=i.record.capabilitySubjects.length||!Le(t,i.record)?null:{selected:r,session:i.record}}async function Tv(e){return await Lp({authMethod:e.authMethod,stores:{...yv,getWalletPasskeyAuthenticator:bv}})}async function Ev(e){let t;try{t=await G.resolveSelectedWalletAuthority(String(e.walletId))}catch{throw Error(`[SigningEngine][near] exact Passkey authority is unavailable`)}let n=Cv(t,e.walletId);if(!n||n.authMethod.kind!==R.passkey)throw Error(`[SigningEngine][near] exact Passkey authority is unavailable`);if(e.runtime.walletId!==e.walletId||e.runtime.factor.kind!==R.passkey||String(e.runtime.factor.rpId)!==String(n.authMethod.rpId)||e.runtime.factor.credentialIdB64u!==n.authMethod.credentialIdB64u)throw Error(`[SigningEngine][near] exact Passkey authority changed`);let r;try{r=await Xo({runtime:e.runtime,walletAuthMethodId:n.authMethod.walletAuthMethodId})}catch{throw Error(`[SigningEngine][near] exact Passkey authority changed`)}let i;try{i=await Tv(n)}catch{throw Error(`[SigningEngine][near] exact Passkey authority changed`)}let a=await H({authority:i});if(a.walletId!==r.walletId||a.walletAuthMethodId!==r.walletAuthMethodId||a.authorityDigest!==r.authorityDigest)throw Error(`[SigningEngine][near] exact Passkey authority changed`);return a}async function Dv(e){switch(e.authorizationRead.kind){case`expired`:case`exhausted`:return await Ev(e);case`found`:{let t=e.authorizationRead.authorization;if(t.selectedAuthMethod.kind!==R.passkey||e.runtime.factor.kind!==R.passkey||String(e.runtime.factor.rpId)!==String(t.selectedAuthMethod.rpId)||e.runtime.factor.credentialIdB64u!==t.selectedAuthMethod.credentialIdB64u)throw Error(`[SigningEngine][near] exact Passkey authority changed`);let n=await Xo({runtime:e.runtime,walletAuthMethodId:t.selectedAuthMethod.walletAuthMethodId}),r=await H({authority:t.selectedFactorAuthority});if(n.walletId!==r.walletId||n.walletAuthMethodId!==r.walletAuthMethodId||n.authorityDigest!==r.authorityDigest)throw Error(`[SigningEngine][near] exact Passkey authority changed`);return n}default:throw e.authorizationRead,Error(`[SigningEngine][near] unsupported exact Passkey authorization read`)}}function Ov(e){switch(e.status){case`missing`:return{kind:`missing`};case`exhausted`:return{kind:`exhausted`};case`expired`:return{kind:`expired`};case`superseded`:return{kind:`superseded`};case`authority_unavailable`:return{kind:`authority_unavailable`};case`method_unavailable`:return{kind:`method_unavailable`};case`capability_unavailable`:return{kind:`capability_unavailable`};case`invalid`:return{kind:`unavailable`};case`active`:throw Error(`[SigningEngine][near] active status must be resolved as authorization`);default:throw Error(`[SigningEngine][near] unsupported Wallet Session status`)}}async function kv(e,t,n){let r=await mv(n);if(r.kind!==`found`)return r;let i=Cv(await G.resolveSelectedWalletAuthority(String(n)),n);if(!i)return{kind:`missing`};if(r.record.expiresAtMs<=Date.now())return{kind:`expired`};let a=q.observationForConfirmation({relayerUrl:e,operationCredential:r.operationCredential},{walletSessionId:r.operationCredential.walletSessionId,quotaId:r.record.quotaId});if(!a||a.status.status===`active`&&(!Ue(a.status.authorization,r.record)||!_v(r.record,i)))return Av(e,t,n);let o=a.status;if(o.status!==`active`)return Ov(o);let s=await Tv(i);return{kind:`found`,authorization:ul({selectedAuthority:i.authority,selectedAuthMethod:i.authMethod,selectedFactorAuthority:s,session:r.record,operationCredential:r.operationCredential,status:o,nowMs:Date.now()})}}async function Av(e,t,n){let r=B(n),i;try{i=await G.resolveSelectedWalletAuthority(String(r))}catch{return{kind:`persistence_unavailable`}}let a=Cv(i,r);if(!a)return{kind:`missing`};let o;try{o=await K.readExactActiveForWallet({walletId:r,authorityId:a.authority.authorityId,authMethodId:a.authMethod.walletAuthMethodId})}catch{return{kind:`persistence_unavailable`}}switch(o.kind){case`missing`:case`corrupt`:case`persistence_unavailable`:case`upgrade_required`:return o;case`found`:break;default:throw Error(`[SigningEngine][near] unsupported exact Wallet Session read result`)}let s=String(e||``).trim();if(!s)return{kind:`unavailable`};let c=Date.now();if(o.record.expiresAtMs<=c)return{kind:`expired`};let l;try{l=await t.read({relayerUrl:s,operationCredential:o.operationCredential},{walletSessionId:o.operationCredential.walletSessionId,quotaId:o.record.quotaId})}catch{return{kind:`unavailable`}}if(l.status!==`active`)return Ov(l);let u;try{u=await G.resolveSelectedWalletAuthority(String(r))}catch{return{kind:`persistence_unavailable`}}let d=Cv(u,r);if(!d)return{kind:`missing`};let f=Date.now();if(l.authorization.expiresAtMs<=f)return{kind:`expired`};if(l.walletSessionId!==o.operationCredential.walletSessionId||l.quotaId!==o.record.quotaId||l.expiresAtMs!==l.authorization.expiresAtMs||!kl(l.authorization,o.record)||!_v(l.authorization,d))return{kind:`corrupt`};let p;try{p=await G.replaceExactActiveWalletSessionFromStatus({active:l.authorization,operationCredential:o.operationCredential})}catch{return{kind:`persistence_unavailable`}}if(p.kind===`superseded`)return Ol(`near`,{event:`wallet_session_status_superseded`,walletSessionId:o.operationCredential.walletSessionId}),{kind:`unavailable`};let m;try{m=await Tv(d)}catch{return{kind:`unavailable`}}try{return{kind:`found`,authorization:ul({selectedAuthority:d.authority,selectedAuthMethod:d.authMethod,selectedFactorAuthority:m,session:l.authorization,operationCredential:o.operationCredential,status:l,nowMs:f})}}catch{return{kind:`corrupt`}}}async function jv(e,t,n){let r=await Av(t,n,e);return r.kind===`found`?r.authorization:null}function Mv(e){return e.curve===`ecdsa`}function Nv(e){let{manifest:t,selected:n,walletId:r,chainTarget:i,materialActivation:a}=e;return t.signer.walletId===r&&t.signer.authority.walletId===r&&t.signer.authority.walletAuthMethodId===n.authMethod.walletAuthMethodId&&g(t.activation.materialActivation,a)&&t.signer.scope.targetMemberships.some(e=>V(e)===V(i))}async function Pv(e){let t=(await Qv(String(e.walletId))).filter(t=>Nv({manifest:t,selected:e.selected,walletId:e.walletId,chainTarget:e.chainTarget,materialActivation:e.materialActivation}));if(t.length!==1)return{kind:`inactive`,reason:`Expected one exact ECDSA capability manifest; found ${t.length}`};let[n]=t;if(!n)return{kind:`inactive`,reason:`Exact ECDSA capability manifest is missing`};let r=await Uv(n),i=e.selected.authMethod.kind===`voiceid`?[]:await e.context.sealedSigningSessionStore.listExactSealedSessionsForWallet({walletId:String(e.walletId),filter:{authMethod:e.selected.authMethod.kind,curve:`ecdsa`,chainTarget:e.chainTarget}}),a=ld({manifest:n,walletId:e.walletId,chainTarget:e.chainTarget,sealedRecords:i.filter(Mv)}),o;if(a.kind===`resolved`){let t=a.runtime;o={kind:`exact_ecdsa_sealed_runtime_v1`,walletId:t.walletId,chainTarget:t.chainTarget,materialActivation:t.materialActivation,normalSigning:t.normalSigning,relayerUrl:t.relayerUrl,relayerKeyId:t.relayerKeyId,clientVerifyingPublicKey33B64u:t.clientVerifyingPublicKey33B64u,participantIds:t.participantIds,ecdsaThresholdKeyId:t.ecdsaThresholdKeyId,thresholdEcdsaPublicKeyB64u:t.thresholdEcdsaPublicKeyB64u,keyHandle:t.keyHandle,runtimePolicyScope:t.runtimePolicyScope,roleLocalMaterialRef:t.roleLocalMaterialRef,authBinding:t.authBinding,sealedRecord:t.sealedRecord,expiresAtMs:Math.min(t.expiresAtMs,e.status.expiresAtMs),remainingUses:e.status.remainingUses}}else{if(a.reason!==`missing_material`)return{kind:`inactive`,reason:`Exact sealed ECDSA runtime is ${a.reason}`};let t=await xd({manifest:n,chainTarget:e.chainTarget,relayerUrl:e.context.seamsWebConfigs.network.relayer?.url??``});if(t.kind!==`resolved`)return{kind:`inactive`,reason:`Exact durable ECDSA capability runtime is ${t.reason}`};try{o=ad({runtime:t.runtime,authority:r.authority,status:e.status})}catch{return{kind:`inactive`,reason:`Exact durable ECDSA quota facts are invalid`}}}try{return{kind:`resolved`,capability:dd({capability:r,selected:e.selected,session:e.session,operationCredential:e.operationCredential,runtime:o,nowMs:e.nowMs})}}catch(e){return{kind:`inactive`,reason:e instanceof Error?e.message:`Exact ECDSA Wallet Session authorization is invalid`}}}async function Fv(e,t,n){let r=B(t.walletId),i=Date.now(),a=Cv(await G.resolveSelectedWalletAuthority(String(r)),r);if(!a)return{kind:`inactive`,reason:`Selected wallet authentication authority is unavailable`};let o=String(e.seamsWebConfigs.network.relayer?.url||``).trim();if(!o)throw Error(`Exact Wallet Session status requires a relayer URL`);let s=await mv(r);if(s.kind!==`found`)return{kind:`inactive`,reason:`Exact Wallet Session authorization is ${s.kind}`};if(s.record.expiresAtMs<=i)return{kind:`inactive`,reason:`Exact Wallet Session authorization is expired`};let c=await n.read({relayerUrl:o,operationCredential:s.operationCredential},{walletSessionId:s.operationCredential.walletSessionId,quotaId:s.record.quotaId});if(c.status!==`active`&&c.status!==`exhausted`)return{kind:`inactive`,reason:`Exact Wallet Session is ${c.status}`};if(kl(c.authorization,s.record)&&!_v(c.authorization,a))try{await G.reconcilePendingNearRegistrationAuthority({walletSession:c.authorization,operationCredential:s.operationCredential})}catch{return{kind:`inactive`,reason:`NEAR authority reconciliation was superseded`}}let l=Cv(await G.resolveSelectedWalletAuthority(String(r)),r);if(!l||c.walletSessionId!==s.operationCredential.walletSessionId||c.quotaId!==s.record.quotaId||c.expiresAtMs!==c.authorization.expiresAtMs||!kl(c.authorization,s.record))return{kind:`inactive`,reason:`Exact Wallet Session status identity is inconsistent`};let u=Date.now();if(c.authorization.expiresAtMs<=u)return{kind:`inactive`,reason:`Exact Wallet Session authorization is expired`};let d=_v(c.authorization,l),f=null;if(d){let e;try{e=await G.replaceExactActiveWalletSessionFromStatus({active:c.authorization,operationCredential:s.operationCredential})}catch{return{kind:`inactive`,reason:`Exact Wallet Session promotion reconciliation could not be persisted`}}e.kind===`replaced`?f={selected:l,session:c.authorization}:Ol(`evm-family`,{event:`wallet_session_status_superseded`,walletSessionId:s.operationCredential.walletSessionId})}if(f??=await wv(r,c.authorization,s.operationCredential),!f)return{kind:`inactive`,reason:d?`Exact Wallet Session status was superseded by a newer wallet authority`:`Exact Wallet Session status identity is inconsistent`};let p=await Pv({context:e,walletId:r,selected:f.selected,session:f.session,operationCredential:s.operationCredential,status:c,chainTarget:t.chainTarget,materialActivation:t.materialActivation,nowMs:u});return p.kind===`resolved`?{kind:`active`,capability:p.capability}:p}async function Iv(e,t,n){let r=await Fv(e,t,n);if(r.kind===`inactive`)return r;let i=Cd(r.capability,Date.now());return i?{kind:`active`,authorization:i}:{kind:`inactive`,reason:`Exact Wallet Session signing quota is exhausted`}}async function Lv(e,t,n){let r=await Zv({walletId:B(t.walletId),chainTargets:t.chainTargets}),i=[];for(let a of r)for(let r of t.chainTargets){let t=await Fv(e,{walletId:a.manifest.signer.walletId,materialActivation:a.manifest.activation.materialActivation,chainTarget:r},n);if(t.kind===`active`){i.push(t.capability);break}}return i}function Rv(e){return zv.bind(null,e)}async function zv(e,t,n){let r=await Iv(e,t,n);return r.kind===`active`?r.authorization:null}async function Bv(e){for(let t of e.subjects){let n=await gv.lookup(t);if(n.kind===`persistence_unavailable`)throw Error(`ECDSA capability persistence is unavailable`);if(n.kind!==`active`)continue;let r=n.manifest;if(r.signer.walletId===e.walletId&&r.signer.scope.targetMemberships.some(t=>V(t)===V(e.chainTarget)))return r}return null}async function Vv(e){let t=await G.resolveSelectedWalletAuthority(String(e.walletId));if(t.kind!==`resolved`)throw Error(`ECDSA material activation is ambiguous and the wallet selection is ${t.kind}`);let n=e.authorities.find(e=>e.walletAuthMethodId===t.selection.walletAuthMethodId);if(!n)throw Error(`ECDSA material activation has no access projection for the selected wallet auth method`);return await gv.lookupByMaterialActivation({walletId:e.walletId,materialActivation:e.materialActivation,authority:n})}async function Hv(e,t){let n=B(t.walletId),r=await gv.listActiveWalletCapabilitySubjects(n);if(r.kind!==`resolved`)throw Error(`ECDSA capability subjects are ${r.kind}`);let i=async e=>{let i=await Bv({walletId:n,subjects:r.subjects,chainTarget:t.chainTarget});if(i)throw new gf({kind:`superseded`,supersessionKind:`material_activation_replaced`,preparedMaterialActivation:t.materialActivation,currentMaterialActivation:i.activation.materialActivation});return e()},a=await gv.lookupByMaterialActivation({walletId:n,materialActivation:t.materialActivation});if(a.kind===`ambiguous_authority`&&(a=await Vv({walletId:n,materialActivation:t.materialActivation,authorities:a.authorities})),a.kind===`persistence_unavailable`||a.kind===`exact_record_conflict`||a.kind===`corrupt`)throw Error(`ECDSA material activation is ${a.kind}`);if(a.kind!==`active`)return await i(()=>{throw Error(`ECDSA capability manifest is missing`)});let o=a.manifest;if(o.signer.walletId!==n||!o.signer.scope.targetMemberships.some(e=>V(e)===V(t.chainTarget)))throw Error(`ECDSA capability manifest does not match the requested signer`);return{capability:await Uv(o),lookup:a}}async function Uv(e){return await fd({authority:await xv(e.signer.authority,{getWalletAuthMethodV2:e=>G.getWalletAuthMethodV2(e),listWalletAuthMethodsForWallet:e=>G.listWalletAuthMethodsForWallet(e),readEmailOtpProviderSubjectForWallet:e=>Hi(G,e)}),manifest:e,material:Od({authority:e.signer.authority,materialActivation:e.activation.materialActivation,publicFacts:e.durableMaterial.roleLocalPublicFacts})})}async function Wv(e,t){return(await Hv(e,t)).capability}async function Gv(e,t){let n=await Iv(e,t,new q);if(n.kind!==`active`)throw Error(n.reason);let r=n.authorization,i=await Hv(e,t),a=await B_({relayerUrl:String(e.seamsWebConfigs.network.relayer?.url||``).trim(),operationCredential:r.operationCredential,curve:`ecdsa_secp256k1`,expectedMaterialActivation:i.capability.manifest.activation.materialActivation}),o=av({walletKey:a.walletKey,lane:a.lane,material:{keyFamily:`ecdsa_secp256k1`,laneShareEpoch:a.lane.laneShareEpoch,lookup:i.lookup,runtime:{kind:`absent`}}});if(o.kind!==`active_wallet_execution_lane_v1`)throw Error(`Owner ECDSA execution lane is ${o.reason}`);return hd({capability:i.capability,authorization:r,nowMs:Date.now()})}async function Kv(e,t,n){let r=await Zv({walletId:B(t.walletId),chainTargets:t.chainTargets,...t.authMethod?{authMethod:t.authMethod}:{}});return await Promise.all(r.map(qv.bind(null,e,t.chainTargets,n)))}async function qv(e,t,n,r){let i=r.manifest,a=t.find(e=>i.signer.scope.targetMemberships.some(t=>V(e)===V(t)));if(!a)return{kind:`authorization_required`,capability:r};let o=await Iv(e,{walletId:i.signer.walletId,chainTarget:a,materialActivation:i.activation.materialActivation},n);return o.kind===`active`?Jv(r,o.authorization):{kind:`authorization_required`,capability:r}}function Jv(e,t){try{return hd({capability:e,authorization:t,nowMs:Date.now()})}catch{return{kind:`authorization_required`,capability:e}}}async function Yv(e,t,n,r){let i=r.manifest,a=i.signer.walletId,o=t.find(e=>i.signer.scope.targetMemberships.some(t=>V(e)===V(t)));if(!o)return{kind:`authorization_required`,capability:r};let s=Cv(await G.resolveSelectedWalletAuthority(String(a)),a),c=await mv(a);if(!s||c.kind!==`found`||!_v(c.record,s))return{kind:`authorization_required`,capability:r};let l=q.observationForConfirmation({relayerUrl:e.seamsWebConfigs.network.relayer.url,operationCredential:c.operationCredential},{walletSessionId:c.operationCredential.walletSessionId,quotaId:c.record.quotaId});if(!l)return qv(e,t,n,r);let u=l.status;if(u.status!==`active`)return{kind:`authorization_required`,capability:r};if(!kl(u.authorization,c.record)||!_v(u.authorization,s))return qv(e,t,n,r);let d=await Pv({context:e,walletId:a,selected:s,session:c.record,operationCredential:c.operationCredential,status:u,chainTarget:o,materialActivation:i.activation.materialActivation,nowMs:Date.now()});if(d.kind!==`resolved`)return{kind:`authorization_required`,capability:r};let f=Cd(d.capability,Date.now());return f?Jv(r,f):{kind:`authorization_required`,capability:r}}async function Xv(e,t,n){let r=await Zv({walletId:B(t.walletId),chainTargets:t.chainTargets,...t.authMethod?{authMethod:t.authMethod}:{}});return Promise.all(r.map(Yv.bind(null,e,t.chainTargets,n)))}async function Zv(e){let t=await gv.listActiveWalletCapabilitySubjects(e.walletId);if(t.kind!==`resolved`)return[];let n=[];for(let r of t.subjects){let t=await gv.lookup(r);if(t.kind!==`active`)continue;let i=t.manifest;if(!i.signer.scope.targetMemberships.some(t=>e.chainTargets.some(e=>V(e)===V(t))))continue;let a;try{a=await Uv(i)}catch{continue}let o=a.authority.factor.kind;e.authMethod&&o!==e.authMethod||n.push(a)}return n}async function Qv(e){let t=B(e),n=await gv.listActiveWalletCapabilitySubjects(t);if(n.kind!==`resolved`)return[];let r=[];for(let e of n.subjects){let t=await gv.lookup(e);t.kind===`active`&&r.push(t.manifest)}return r}const $v={listActiveEcdsaCapabilityManifestsForWallet:Qv,listExactSealedSessionsForWallet:Lo,resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G)},ey=md($v),ty=cd($v);async function ny(e){let t=await mv(e);if(t.kind!==`found`||t.record.expiresAtMs<=Date.now())throw Error(`Email OTP step-up requires the exact unexpired Wallet Session`);return t.operationCredential}async function ry(e){switch(e.authority.kind){case`live_session`:return await e.coordinator.requestTransactionSigningChallenge({kind:`wallet_session_challenge`,walletSession:e.walletSession,chain:e.chain,authLane:e.authority.authLane,operationFingerprintDigest:e.operationFingerprintDigest});case`capability_step_up`:return await e.coordinator.requestTransactionSigningChallenge({kind:`wallet_operation_challenge`,operationCredential:await ny(e.walletSession.walletId),walletSession:e.walletSession,chain:e.chain,operationFingerprintDigest:e.operationFingerprintDigest})}}function iy(e){let t=Sv(e);return Gg({runtimePorts:e.runtimePorts,stores:e.stores,ed25519YaoPublicCapabilityReferences:e.ed25519YaoPublicCapabilityReferences,seamsWebConfigs:e.seamsWebConfigs,nearClient:e.nearClient,touchIdPrompt:e.touchIdPrompt,userPreferencesManager:e.userPreferencesManager,nonceCoordinator:e.nonceCoordinator,ensureSealedRefreshStartupParity:e.ensureSealedRefreshStartupParity,touchConfirm:e.touchConfirm,passkeyMpcSession:e.passkeyMpcSession,passkeyMpcExport:e.passkeyMpcExport,getEmailOtpWarmSessionStatus:t=>e.emailOtpSessions.readWarmSessionStatusOnly(t),consumeEmailOtpWarmSessionUses:t=>e.emailOtpSessions.consumeWarmSessionUses(t),clearEmailOtpWarmSessionMaterial:t=>e.emailOtpSessions.clearVolatileWarmSessionMaterial({kind:`ecdsa`,thresholdSessionId:t}),getWalletSessionStatus:e=>t(e),resolveCanonicalEcdsaSigningCapability:t=>Wv(e,t),resolveAuthorizedEcdsaSigningCapability:t=>Gv(e,t),resolveActiveEcdsaWalletSessionAuthorization:Rv(e),resolveOwnerLaneScope:e.resolveOwnerLaneScope,signerWorkerManager:e.signerWorkerManager,getWorkerBaseOrigin:e.getWorkerBaseOrigin,shouldPrewarmUiConfirmUi:e.shouldPrewarmUiConfirmUi,getTheme:e.getTheme,signTempo:t=>_d(e.getEnginePorts().tempoSigningDeps,t),activateAuthenticatedWalletState:t=>gc(e.getEnginePorts().registrationAccountLifecycleDeps,{walletId:t.walletId,nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,nearClient:t.nearClient}),persistThresholdEcdsaBootstrapForWalletTarget:t=>oh({bootstrapStore:e.ecdsaBootstrapStore,walletId:t.walletId,chainTarget:t.chainTarget,bootstrap:t.bootstrap,signerAuth:t.signerAuth}),requestEmailOtpTransactionSigningChallenge:t=>ry({coordinator:e.emailOtpSessions,walletSession:t.walletSession,chain:t.chain,authority:t.authority,operationFingerprintDigest:t.operationFingerprintDigest}),requestEmailOtpEd25519SigningChallenge:async({walletSession:t,operationFingerprintDigest:n})=>e.emailOtpSessions.requestTransactionSigningChallenge({kind:`wallet_operation_challenge`,operationCredential:await ny(t.walletId),walletSession:t,chain:`near`,operationFingerprintDigest:n}),prepareNearEd25519YaoMaterialBoundary:e.prepareNearEd25519YaoMaterialBoundary,provisionThresholdEd25519Session:t=>rh({credentialStore:e.stores.recoveryAndDeviceLinking.credentialStore,touchIdPrompt:e.touchIdPrompt,touchConfirm:e.passkeyMpcSession,defaultRelayerUrl:e.seamsWebConfigs.network.relayer?.url||``,getSignerWorkerContext:()=>e.getEnginePorts().walletSessionActivationDeps.getSignerWorkerContext()},t),restorePersistedSessionForSigning:t=>t.authMethod===`passkey`?e.passkeyMpcSession.restorePersistedSessionForSigning(vv(t)):e.emailOtpSessions.restorePersistedSessionForSigning(t),readAvailableSigningLanesForSigning:async t=>qp({activeWalletAuthorityEcdsaRuntimeReadPorts:{resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),readExactWithOperationCredential:K.readExactWithOperationCredential.bind(K)},ed25519YaoPublicCapabilityLanes:e.ed25519YaoPublicCapabilityReferences,isEd25519YaoPublicCapabilityActive:t=>{switch(t.auth.kind){case`email_otp`:return!0;case`passkey`:case`voiceid`:return e.getEnginePorts().ed25519YaoActiveClients.resolve({walletId:t.walletId,nearAccountId:t.nearAccountId,materialActivation:t.materialActivation})!==null}},readActiveWalletSessionAuthorization:kv.bind(null,e.seamsWebConfigs.network.relayer.url),listEcdsaSigningCapabilitiesForWallet:(t.curve===`ecdsa`?Xv:Kv).bind(null,e)},t,on(e.seamsWebConfigs.network.chains)),provisionThresholdEcdsaSession:t=>Ql({queueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,activationDeps:e.getEnginePorts().walletSessionActivationDeps,persistEcdsaRoleLocalReadyRecord:e.runtimePorts.storage.persistEcdsaRoleLocalReadyRecord},t),withThresholdEcdsaSigningQueue:t=>Md({queueByKey:e.thresholdEcdsaSigningQueueByKey,...t,walletId:B(t.walletId)}),withThresholdEd25519CommitQueue:t=>wf({queueByKey:e.thresholdEd25519CommitQueueByKey,...t})})}function ay(e){throw Error(`Unexpected Router A/B normal-signing config branch: ${String(e)}`)}function oy(e){let t=e.signing.routerAb.normalSigning;switch(t.mode){case`disabled`:throw Error(`[threshold-warm-session] Router A/B normal signing must be enabled for Ed25519 sessions`);case`enabled`:return{kind:Xe,signingWorkerId:t.signingWorkerId};default:return ay(t)}}var sy=class extends Error{code;details;constructor(e){super(`[WalletRuntimePostcondition] ${e.code} ${JSON.stringify(e.details)}`),this.name=`WalletRuntimePostconditionError`,this.code=e.code,this.details=e.details}};function cy(e){let t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:null}function ly(e,t){let n=Math.floor(Number(e));return Number.isFinite(n)&&n>t?n:null}function uy(e){return cy(e.remainingUses??e.policyHint?.remainingUses)}function dy(e,t){return ly(e.expiresAtMs??e.policyHint?.expiresAtMs,t)}function fy(e){if(e.state===`missing`)return null;switch(e.source){case`durable_sealed_record`:case`public_capability_reference`:return{kind:e.source};default:return null}}function py(e){let t=e.lanes.lanes.ed25519.near;if(t.state===`missing`)return`ed25519_lane_missing`;if(Fd(t)!==e.authMethod)return`auth_method_route_mismatch`;if(t.state!==`ready`&&t.state!==`restorable`)return`ed25519_lane_missing`;let n=uy(t),r=dy(t,e.nowMs);if(t.authorizationState!==`authorized`||!t.authorization.operationCredential.walletSessionId||!t.authorization.session.quotaId||!t.thresholdSessionId||!n||!r)return`lane_inventory_mismatch`;let i=fy(t);if(!i)return`lane_material_missing`;let a={authMethod:e.authMethod,target:{curve:`ed25519`},walletSessionId:t.authorization.operationCredential.walletSessionId,quotaId:t.authorization.session.quotaId,thresholdSessionId:t.thresholdSessionId,remainingSignatureUses:n,expiresAtMs:r,material:i};return t.state===`restorable`?{...a,state:`restorable`}:{...a,state:`ready`}}function my(e){let t=V(e.chainTarget),n=e.lanes.ecdsa.lanesByTarget[t];if(!n||n.state===`missing`)return`ecdsa_lane_missing`;let r=Hd(n);if(r!==e.authMethod)return`auth_method_route_mismatch`;if(n.state!==`ready`)return`ecdsa_lane_missing`;let i=uy(n),a=dy(n,e.nowMs);return!n.authorization||!i||!a?`lane_inventory_mismatch`:{state:n.state,authMethod:r,target:{curve:`ecdsa`,chainTarget:e.chainTarget},authorizationId:n.authorization.session.authorizationId,materialActivationId:String(n.materialActivation.activationId),remainingSignatureUses:i,expiresAtMs:a,material:{kind:`canonical_capability`}}}async function hy(e){let t=String(e.walletId||``).trim();if(!t)return{ok:!1,code:`wallet_missing`,details:{source:e.source}};let n=wa(e.ownerScope.auth),r=await e.readOwnerScopedSigningLanes({walletId:t,ownerScope:e.ownerScope}),i=e.nowMs??Date.now(),a,o=new Map;for(let s of e.requiredTargets){if(s.curve===`ed25519`){let o=py({lanes:r,authMethod:n,nowMs:i});if(typeof o==`string`)return{ok:!1,code:o,details:{source:e.source,walletId:t,authMethod:n,curve:`ed25519`,state:r.lanes.ed25519.near.state,candidateCount:r.candidates.ed25519.near.length}};a=o;continue}let c=my({lanes:r,chainTarget:s.chainTarget,authMethod:n,nowMs:i});if(typeof c==`string`){let i=V(s.chainTarget);return{ok:!1,code:c,details:{source:e.source,walletId:t,authMethod:n,curve:`ecdsa`,targetKey:i,state:r.ecdsa.lanesByTarget[i]?.state||`missing`,candidateCount:r.ecdsa.candidatesByTarget[i]?.length||0}}}o.set(V(s.chainTarget),c)}return{ok:!0,inventory:{...a?{ed25519:a}:{},ecdsaByTarget:o}}}async function gy(e){let t=await hy(e);if(!t.ok)throw new sy(t);return t.inventory}function _y(e){let{record:t,operationCredential:n,scope:r}=e;return t.walletId===r.walletId&&t.authorityId===r.authorityId&&t.authMethodId===r.authMethodId&&t.authorityDigestB64u===r.authorityDigestB64u&&t.authorityRevocationEpoch===r.authorityRevocationEpoch&&n.kind===`opaque_wallet_session_operation_credential_v1`&&n.token.trim().length>0}async function vy(e){let{walletId:t,ports:n}=e,r=await n.resolveSelectedWalletAuthority(String(t));if(r.kind!==`resolved`)return{kind:`missing`};let{selection:i,authMethod:a,authority:o}=r;if(i.walletId!==t||i.walletAuthMethodId!==a.walletAuthMethodId||i.lockState!==`unlocked`||a.walletId!==t||a.walletAuthorityId!==o.authorityId||a.status!==`active`||o.walletId!==t||o.state!==`active`)return{kind:`missing`};let s=await n.readExactWithOperationCredential({walletId:t,authorityId:o.authorityId,authMethodId:a.walletAuthMethodId});switch(s.kind){case`found`:break;case`missing`:return{kind:`missing`};case`upgrade_required`:return{kind:`upgrade_required`}}return!_y({record:s.record,operationCredential:s.operationCredential,scope:{walletId:t,authorityId:o.authorityId,authMethodId:a.walletAuthMethodId,authorityDigestB64u:o.authorityDigestB64u,authorityRevocationEpoch:o.revocationEpoch}})||s.record.expiresAtMs<=Date.now()?{kind:`missing`}:{kind:`authenticated`,state:{kind:`authenticated`,walletId:t,authMethod:a.kind},walletAuthMethodId:a.walletAuthMethodId}}function yy(e,t){switch(e.kind){case`found`:return e;case`missing`:return null;case`upgrade_required`:throw new Oa(t)}}function by(e,t){let n=String(e??``).trim();if(!n)throw Error(`${t} is required`);return n}function xy(e){return{kind:e.kind,scope:{lifecycle_id:e.scope.lifecycle_id,root_share_epoch:e.scope.root_share_epoch,account_id:e.scope.account_id,threshold_session_id:e.scope.threshold_session_id,signer_set_id:e.scope.signer_set_id,signing_worker_id:e.scope.signing_worker_id,material_activation:e.scope.material_activation},applicationBinding:{wallet_id:e.applicationBinding.wallet_id,near_ed25519_signing_key_id:e.applicationBinding.near_ed25519_signing_key_id,signing_root_id:e.applicationBinding.signing_root_id,key_creation_signer_slot:e.applicationBinding.key_creation_signer_slot},participantIds:[e.participantIds[0],e.participantIds[1]],registeredPublicKey:e.registeredPublicKey.slice(),signingWorkerVerifyingShare:e.signingWorkerVerifyingShare.slice(),stateEpoch:e.stateEpoch,transcript:e.transcript.slice(),activeCapabilityBinding:[...e.activeCapabilityBinding],materialActivation:e.materialActivation}}function Sy(e){if(e.kind===`active`)return e.handle;throw Error(`Wallet custody Ed25519 active client is disposed`)}function Cy(e){e.workerContext.requestWorkerOperation({kind:`emailOtp`,request:{type:`disposeEmailOtpEd25519YaoActiveClient`,payload:{activeClientHandle:e.handle}}}).catch(()=>void 0)}async function wy(e){return(await e.workerContext.requestWorkerOperation({kind:`emailOtp`,request:{type:`disposeEmailOtpEd25519YaoActiveClient`,payload:{activeClientHandle:by(e.activeClientHandle,`activeClientHandle`)}}})).removed}var Ty=class{lifecycle;activeMetadata;constructor(e,t,n){this.workerContext=e,this.lifecycle={kind:`active`,handle:by(t,`activeClientHandle`)},this.activeMetadata=xy(n)}async createSigningShare(e){return await this.workerContext.requestWorkerOperation({kind:`emailOtp`,request:{type:`createEmailOtpEd25519YaoSigningShare`,payload:{activeClientHandle:Sy(this.lifecycle),input:e}}})}metadata(){return xy(this.activeMetadata)}status(){return this.lifecycle.kind===`active`?{kind:`active`}:{kind:`disposed`}}dispose(){if(this.lifecycle.kind!==`active`)return;let e=this.lifecycle.handle;this.lifecycle={kind:`disposed`},Cy({workerContext:this.workerContext,handle:e})}};function Ey(e){switch(e.mode){case`ed25519_only`:return!1;case`ecdsa_only`:case`ed25519_and_ecdsa`:return!0}return!1}function Dy(e){switch(e.reason){case`missing_chain_target`:case`missing_key_handle`:case`invalid_key_handle`:case`duplicate_key_handles`:return e.reason;case`invalid_chain_target`:return`invalid_signer_record`}return e.reason,`invalid_signer_record`}function Oy(e){let t=e.signer,n=Oc({walletId:e.walletId,configuredTargets:e.configuredTargets,signer:e.signer}),r=typeof t.signerId==`string`&&t.signerId.trim()?t.signerId.trim():void 0;switch(n.kind){case`active_wallet_key`:return{kind:`active_ecdsa_signer_record`,targetKey:n.targetKey,chainTarget:n.chainTarget,walletKey:n.walletKey,publicCapability:n.publicCapability,source:`profile_continuity`,...r?{signerId:r}:{}};case`key_facts_inventory_required`:return{kind:`key_facts_inventory_required`,targetKey:n.targetKey,chainTarget:n.chainTarget,keyHandle:n.keyHandle,reason:n.reason,...r?{signerId:r}:{}};case`blocked`:return{kind:`blocked`,targetKey:n.targetKey,reason:Dy(n),...r?{signerId:r}:{}};case`skipped`:return{kind:`skipped`}}return{kind:`skipped`}}function ky(e){let t=new Map;for(let n of e){let e=t.get(n.targetKey);if(!e){t.set(n.targetKey,n);continue}if(e.kind!==`active_ecdsa_signer_record`)continue;let r=ha(Sa(e.walletKey)),i=ha(Sa(n.walletKey));(String(e.walletKey.keyHandle)!==String(n.walletKey.keyHandle)||r!==i)&&t.set(n.targetKey,{kind:`blocked`,targetKey:n.targetKey,reason:`duplicate_key_handles`,...n.signerId?{signerId:n.signerId}:{}})}return t}function Ay(e){let t=String(e.keyHandle||``).trim();if(!t)throw Error(`[login] configured-target ECDSA warm key requires keyHandle`);let n=String(e.passkeyCredentialIdB64u||``).trim();if(e.key&&e.publicCapability&&String(e.publicCapability.client_id)!==String(e.key.walletId))throw Error(`[login] configured-target ECDSA public capability wallet mismatch`);return{chainTarget:e.chainTarget,targetKey:V(e.chainTarget),keyHandle:t,...e.key?{key:e.key}:{},...n?{passkeyCredentialIdB64u:n}:{},...e.existingRoleLocalMaterial?{existingRoleLocalMaterial:e.existingRoleLocalMaterial}:{},publicCapability:e.publicCapability?{kind:`persisted_public_capability`,value:e.publicCapability}:{kind:`missing_public_capability`}}}function jy(e){let t=new Map;for(let n of e.keys){let r=V(n.chainTarget),i=String(n.keyHandle||``).trim();if(!i)continue;let a=t.get(r),o=String(a?.keyHandle||``).trim();if(o&&i&&o!==i)throw Error(`[login] threshold ECDSA warm-up received ambiguous ${e.source} key handles for ${r}`);if(a?.key&&n.key&&ha(a.key)!==ha(n.key))throw Error(`[login] threshold ECDSA warm-up received ambiguous ${e.source} key fingerprints for ${r}`);let s=a?.publicCapability.kind===`persisted_public_capability`?a.publicCapability.value:null,c=n.publicCapability.kind===`persisted_public_capability`?n.publicCapability.value:null;if(s&&c&&!Vr(s,c))throw Error(`[login] threshold ECDSA warm-up received ambiguous ${e.source} public capabilities for ${r}`);let l=c||s,u=String(n.passkeyCredentialIdB64u||a?.passkeyCredentialIdB64u||``).trim(),d=n.existingRoleLocalMaterial||a?.existingRoleLocalMaterial;if(n.existingRoleLocalMaterial&&a?.existingRoleLocalMaterial&&!g(n.existingRoleLocalMaterial.materialActivation,a.existingRoleLocalMaterial.materialActivation))throw Error(`[login] threshold ECDSA warm-up received ambiguous ${e.source} role-local material for ${r}`);t.set(r,{chainTarget:n.chainTarget,targetKey:r,keyHandle:i||o,...n.key||a?.key?{key:n.key||a?.key}:{},...u?{passkeyCredentialIdB64u:u}:{},...d?{existingRoleLocalMaterial:d}:{},publicCapability:l?{kind:`persisted_public_capability`,value:l}:{kind:`missing_public_capability`}})}return[...t.values()]}function My(e,t){return{ecdsaKeys:jy({source:`stored/relay`,keys:[...e.ecdsaKeys,...t?.ecdsaKeys||[]]}),...t?.runtimePolicyScope?{runtimePolicyScope:t.runtimePolicyScope}:e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{}}}function Ny(e){if(!e.configuredTargets.length)return{kind:`complete_configured_target_keys`,context:e.context};let t=new Map;for(let n of e.context.ecdsaKeys)t.set(n.targetKey,n);let n=e.configuredTargets.map(e=>V(e.chainTarget)).filter(e=>!t.has(e));if(n.length)return{kind:`missing_configured_target_keys`,missingTargets:n};let r={ecdsaKeys:jy({source:`configured ECDSA target completion`,keys:[...t.values()]}),...e.context.runtimePolicyScope?{runtimePolicyScope:e.context.runtimePolicyScope}:{}},i=e.configuredTargets.filter(e=>!r.ecdsaKeys.some(t=>t.targetKey===V(e.chainTarget)));return i.length?{kind:`missing_configured_target_keys`,missingTargets:i.map(e=>V(e.chainTarget))}:{kind:`complete_configured_target_keys`,context:r}}function Py(e){switch(e.completion.kind){case`complete_configured_target_keys`:return e.completion.context;case`missing_configured_target_keys`:throw Error(`[login] threshold ECDSA warm-up could not resolve configured target key facts from ${e.source} for ${e.completion.missingTargets.join(`, `)}`)}throw e.completion,Error(`[login] unsupported ECDSA warm-up key completion state`)}function Fy(e){let t=new Map;for(let n of e){let e=`${n.targetKey}:${n.keyHandle}`;t.set(e,{keyHandle:n.keyHandle,chainTarget:n.chainTarget})}return[...t.values()]}function Iy(e){if(!Ey(e.selection)||e.configuredTargets.length===0)return{kind:`no_configured_ecdsa_targets`};let t=[...e.blockedRecords||[]],n=ky(e.activeSignerRecords);for(let e of n.values())e.kind===`blocked`&&t.push(e);if(t.length)return{kind:`blocked`,blockedRecords:t};let r=new Map;for(let t of e.keyFactsInventoryRequiredRecords||[])r.set(t.targetKey,t);let i=[],a=[];for(let t of e.configuredTargets){let e=V(t),o=n.get(e);if(o?.kind===`active_ecdsa_signer_record`){a.push({targetKey:e,chainTarget:t,walletKey:o.walletKey,publicCapability:o.publicCapability});continue}let s=r.get(e);if(s){i.push(s);continue}i.push({kind:`key_facts_inventory_required`,targetKey:e,chainTarget:t,keyHandle:``,reason:`missing_key_facts`})}if(i.length===0)return{kind:`ready`,readyTargets:a};let o=i.filter(e=>String(e.keyHandle||``).trim()),s=e.runtimeConfig?.explicitKeyFactsInventoryMode??e.explicitKeyFactsInventoryMode,c=e.runtimeConfig?.allowAuthenticatedKeyFactsInventory??e.allowAuthenticatedKeyFactsInventory;return s===!0&&c===!0&&o.length===i.length?{kind:`awaiting_authenticated_key_facts_inventory`,keyFactsInventoryRequiredRecords:o,keyTargets:Fy(o)}:{kind:`key_facts_inventory_required`,keyFactsInventoryRequiredRecords:i}}async function Ly(e){let t=e.authenticators.map(e=>{let t=String(e.credentialId||``).trim();return t?{id:t,type:`public-key`,transports:Array.isArray(e.transports)?e.transports:[]}:null}).filter(e=>!!e);e.onPromptStarted();let n=await e.signingEngine.getAuthenticationCredentialsSerialized({subjectId:e.subjectId,challengeB64u:e.challengeB64u,allowCredentials:t,includeSecondPrfOutput:!1});return e.onPromptSucceeded(),n}function Ry(){if(typeof crypto>`u`||typeof crypto.getRandomValues!=`function`)throw Error(`Secure random is unavailable for passkey wallet unlock`);let e=new Uint8Array(32);return crypto.getRandomValues(e),P(e)}async function zy(e){if(!e.currentCredential)return await e.collectCredentialForChallenge(Ry())}const By=new Ui;async function Vy(e){let t=await By.listActiveWalletCapabilitySubjects(e);if(t.kind===`persistence_unavailable`)return{kind:`failed`,reason:`capability_subject_lookup_failed`};if(t.kind===`invalid_current_state`)return{kind:`failed`,reason:`invalid_capability_subject`};let n=[];for(let r of t.subjects)n.push({kind:`evm_family_ecdsa_wallet`,walletId:e,capability:r.capability,authority:r.authority,ecdsaThresholdKeyId:r.ecdsaThresholdKeyId});return{kind:`resolved`,subjects:n}}async function Hy(e){return await By.listWalletActivationJournalSelectors(e)}function Uy(e,t){let n=e?.[t];if(typeof n!=`string`||!n.trim())throw Error(`wallet unlock signer metadata requires ${t}`);return n.trim()}function Wy(e,t){try{let n=String(t.metadata?.walletId||``).trim();if(n&&n!==String(e))return{kind:`invalid`};let r=gi(t.signerSlot);return r?{kind:`valid`,subject:{kind:`near_ed25519_wallet`,walletId:e,nearAccountId:mn(Uy(t.metadata,`nearAccountId`)),nearEd25519SigningKeyId:pi(Uy(t.metadata,`nearEd25519SigningKeyId`)),signerSlot:r}}:{kind:`invalid`}}catch{return{kind:`invalid`}}}async function Gy(e){let t=[],n;try{n=await G.listActiveWalletSigners({walletId:e,signerFamily:`ed25519`})}catch{return{kind:`failed`,reason:`capability_subject_lookup_failed`}}for(let r of n){let n=Wy(e,r);if(n.kind!==`valid`)return{kind:`failed`,reason:`invalid_capability_subject`};t.push(n.subject)}return{kind:`resolved`,subjects:t}}function Ky(e){switch(e.kind){case`near_ed25519_wallet`:return[e.kind,e.walletId,e.nearAccountId,e.nearEd25519SigningKeyId,e.signerSlot].join(`\0`);case`evm_family_ecdsa_wallet`:return[e.kind,e.walletId,e.capability,e.authority.authorityDigest,e.ecdsaThresholdKeyId].join(`\0`)}return``}function qy(e,t){for(let n of e)if(Ky(n)===t)return!0;return!1}function Jy(e,t){qy(e,Ky(t))||e.push(t)}function Yy(e){return e.kind===`near_ed25519_wallet`}function Xy(e){let t=String(e||``).trim();if(!t)return null;try{return B(t)}catch{return null}}function Zy(e){return String(e||``).trim()||null}function Qy(e){let t=Zy(e?.profileId);return t?{kind:`last_used_profile`,profileId:t}:{kind:`none`}}async function $y(){return Qy(await G.getLastProfileState().catch(()=>null))}async function eb(e){let t=Xy(e);return t?{kind:`explicit_wallet`,walletId:t}:e?{kind:`none`}:await $y()}function tb(e){let t=String(e.metadata?.walletId||``).trim();if(!t)return null;try{return B(t)}catch{return null}}function nb(e){let t=[],n=new Set;for(let r of e){let e=tb(r);if(!e)return{kind:`invalid`};let i=String(e);n.has(i)||(n.add(i),t.push(e))}return{kind:`resolved`,walletIds:t}}async function rb(e){let t;try{t=await G.getProfile(e)}catch{return{kind:`unresolvable_profile`,reason:`capability_subject_lookup_failed`}}if(!t)return{kind:`unresolvable_profile`,reason:`missing_wallet_profile`};let n;try{n=await G.listAccountSignersByProfile({profileId:e,status:`active`})}catch{return{kind:`unresolvable_profile`,reason:`capability_subject_lookup_failed`}}if(n.length===0)return{kind:`unresolvable_profile`,reason:`missing_requested_capability_subject`};let r=nb(n);if(r.kind===`invalid`)return{kind:`unresolvable_profile`,reason:`invalid_wallet_profile`};let i=r.walletIds;return i.length===0?{kind:`unresolvable_profile`,reason:`invalid_wallet_profile`}:i.length>1?{kind:`unresolvable_profile`,reason:`ambiguous_wallet_profile`}:{kind:`resolved_wallet`,walletId:i[0]}}function ib(e,t){let n=t[0];return n?{kind:`resolved`,subjectSet:{kind:`wallet_unlock_subject_set`,walletId:e,subjects:[n,...t.slice(1)]}}:{kind:`missing_requested_capability_subject`}}function ab(e){return e.subjects.filter(Yy).length>1?`ambiguous_wallet_profile`:null}async function ob(e){let t=B(e.walletId),n=[];switch(e.requestedCapabilityFamilies.kind){case`near_ed25519_only`:case`all_registered_mpc`:{let r=await Gy(t);if(r.kind===`failed`)return{kind:`capability_subject_resolution_failed`,reason:r.reason};for(let e of r.subjects)Jy(n,e);if(e.requestedCapabilityFamilies.kind===`near_ed25519_only`)return ib(t,n);break}case`evm_family_ecdsa_only`:break;default:e.requestedCapabilityFamilies}let r=await Vy(t);if(r.kind===`failed`)return{kind:`capability_subject_resolution_failed`,reason:r.reason};for(let e of r.subjects)Jy(n,e);return ib(t,n)}async function sb(e){let t=await eb(e);if(t.kind===`none`)return{kind:`no_session_request`};let n,r;if(t.kind===`last_used_profile`){let e=await rb(t.profileId);if(e.kind===`unresolvable_profile`)return{kind:`unresolvable_profile`,profileId:t.profileId,reason:e.reason};n=e.walletId,r=`host_last_used_profile`}else n=t.walletId,r=`profile_projection`;let i=await ob({walletId:String(n),requestedCapabilityFamilies:{kind:`all_registered_mpc`}});if(i.kind===`missing_requested_capability_subject`)return{kind:`no_session_for_wallet`,walletId:n,reason:`missing_requested_capability_subject`};if(i.kind===`capability_subject_resolution_failed`)return{kind:`unresolvable`,walletId:n,reason:i.reason};let a=i.subjectSet,o=ab(a);return o?{kind:`unresolvable`,walletId:n,reason:o}:{kind:`resolved`,walletId:n,subjectSet:a,source:r}}function cb(e,t){return globalThis.fetch(e,t)}function lb(e){switch(e?.mode){case`ed25519_only`:return{mode:`ed25519_only`,ed25519:!0};case`ecdsa_only`:return{mode:`ecdsa_only`,ecdsa:!0};case`ed25519_and_ecdsa`:case void 0:return{mode:`ed25519_and_ecdsa`,ed25519:!0,ecdsa:!0}}return Q(e)}function ub(e){if(e.selection)return lb(e.selection);let t=!1,n=!1;for(let r of e.subjectSet.subjects)switch(r.kind){case`near_ed25519_wallet`:t=!0;break;case`evm_family_ecdsa_wallet`:n=!0;break;default:return Q(r)}if(t&&n)return{mode:`ed25519_and_ecdsa`,ed25519:!0,ecdsa:!0};if(t)return{mode:`ed25519_only`,ed25519:!0};if(n)return{mode:`ecdsa_only`,ecdsa:!0};throw Error(`[login] wallet unlock subject set has no supported capability`)}function db(e){return e.kind===`near_ed25519_wallet`}function fb(e){return e.kind===`evm_family_ecdsa_wallet`}function pb(e){let t=e.subjects.filter(db);if(t.length===0)return null;if(t.length>1)throw Error(`[WalletSession] multiple NEAR Ed25519 subjects found for wallet session`);return t[0]||null}function mb(e){let t=pb(e.subjectSet),n=e.subjectSet.subjects.filter(fb);for(let t of e.subjectSet.subjects)if(String(t.walletId)!==String(e.subjectSet.walletId))throw Error(`[login] wallet unlock subject belongs to a different wallet`);switch(e.selection.mode){case`ed25519_only`:if(!t||n.length!==0)throw Error(`[login] NEAR Ed25519 unlock requires one exact NEAR subject set`);return{kind:`near_ed25519_capable_wallet`,walletId:e.subjectSet.walletId,subjectSet:e.subjectSet,nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,signerSlot:t.signerSlot};case`ecdsa_only`:{let[r,...i]=n;if(t||!r)throw Error(`[login] ECDSA-only unlock requires exact ECDSA subjects`);return{kind:`evm_family_ecdsa_only_wallet`,walletId:e.subjectSet.walletId,subjectSet:e.subjectSet,ecdsaSubjects:[r,...i]}}case`ed25519_and_ecdsa`:if(!t||n.length===0)throw Error(`[login] combined unlock requires exact NEAR and ECDSA subjects`);return{kind:`near_ed25519_capable_wallet`,walletId:e.subjectSet.walletId,subjectSet:e.subjectSet,nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,signerSlot:t.signerSlot}}return Q(e.selection)}function hb(e){if(e.kind===`near_ed25519_capable_wallet`)return e;throw Error(`[login] NEAR Ed25519 warm-up requires an exact NEAR subject`)}function gb(e){let t=new Set;for(let n of e.identity.subjectSet.subjects)n.kind===`evm_family_ecdsa_wallet`&&t.add(String(n.ecdsaThresholdKeyId));if(t.size===0)throw Error(`[login] ECDSA warm-up requires an exact ECDSA unlock subject`);for(let n of e.context.ecdsaKeys){let e=String(n.key?.ecdsaThresholdKeyId||``).trim();if(e&&!t.has(e))throw Error(`[login] ECDSA warm-up key does not match the unlock subject set`)}}function _b(e){let t=[];for(let n of e.subjects)n.kind===`evm_family_ecdsa_wallet`&&t.push({capability:n.capability,authority:n.authority});return t}async function vb(e){let t=!1,n=!1;for(let r of e.selectors){let i=await Nu({workerCtx:e.workerCtx,command:{kind:`reconcile_canonical_ecdsa_activation_v1`,capability:r.capability,authority:r.authority}});switch(i.kind){case`canonical_ecdsa_activation_reconciliation_absent_v1`:break;case`canonical_ecdsa_activation_reconciliation_finalized_v1`:t=!0;break;case`canonical_ecdsa_activation_reconciliation_pending_v1`:n=!0;break;case`canonical_ecdsa_activation_reconciliation_failed_v1`:return{kind:`failed`,didFinalize:t,code:i.code};default:Q(i)}}return n?{kind:`pending`,didFinalize:t}:{kind:`settled`,didFinalize:t}}function yb(e){switch(e.kind){case`settled`:return;case`pending`:console.warn(`[login] ECDSA activation remains prepared and requires confirmation`);return;case`failed`:console.warn(`[login] ECDSA activation reconciliation failed without changing active state`,{code:e.code});return}Q(e)}function bb(e){let t=$i({walletId:e.walletId});switch(e.kind){case`passkey`:{let n=ra(e.rpId);return n.ok?ea({walletAuthMethodId:e.walletAuthMethodId,scope:Qi({wallet:t,rpId:n.value}),credentialIdB64u:e.credentialIdB64u}):null}case`email_otp`:return na({walletAuthMethodId:e.walletAuthMethodId,wallet:t,emailHashHex:e.emailHashHex,registrationAuthorityId:e.registrationAuthorityId});case`voiceid`:return ta({walletAuthMethodId:e.walletAuthMethodId,wallet:t,deviceKeyId:e.deviceKeyId});default:return null}}function xb(e){return{walletId:e.walletId,factor:{kind:`passkey`,credentialIdB64u:e.credentialIdB64u},verifier:{kind:`webauthn`,rpId:e.rpId},bindingId:e.walletAuthMethodId}}async function Sb(e){return await H({authority:xb(e)})}async function Cb(e){let t=ti({walletId:e.authMethod.walletId,factor:{kind:`email_otp`,provider:e.provider,providerUserId:e.providerSubjectId},verifier:{kind:`email_otp_wallet_auth_method`,emailHashHex:e.authMethod.emailHashHex},bindingId:e.authMethod.walletAuthMethodId});if(!t)throw Error(`[login] linked Email OTP provider identity does not match selected authority`);return t}async function wb(e){if(e.selection.authMethod.kind===`passkey`)return xb(e.selection.authMethod);if(e.selection.authMethod.kind===`voiceid`)throw Error(`[login] VoiceID linked-device authority requires its own unlock path`);let t=e.providerIdentity;if(!t)throw Error(`[login] linked Email OTP authority provider identity is missing`);return await Cb({authMethod:e.selection.authMethod,provider:t.provider,providerSubjectId:t.providerSubjectId})}async function Tb(e){return await H({authority:await wb(e)})}function Eb(e,t,n,r){let i=null;for(let a of e)if(!(a.authorityId!==t||a.walletAuthMethodId!==n||a.activationId!==r.activationId)){if(i)return null;i=a}return i}function Db(e){let t=[];return e.selection.walletId!==e.walletId&&t.push(`selection_wallet_id`),!e.allowUnselectedSibling&&e.selection.walletAuthMethodId!==e.authMethod.walletAuthMethodId&&t.push(`selection_auth_method_id`),e.authMethod.walletId!==e.walletId&&t.push(`auth_method_wallet_id`),e.authMethod.status!==`active`&&t.push(`auth_method_inactive`),e.expectedKind&&e.authMethod.kind!==e.expectedKind&&t.push(`auth_method_not_${e.expectedKind}`),e.authority.walletId!==e.walletId&&t.push(`authority_wallet_id`),e.authority.state!==`active`&&t.push(`authority_inactive`),e.authority.authorityId!==e.authMethod.walletAuthorityId&&t.push(`authority_auth_method_id`),t}async function Ob(e){let t=_(e);if(!t.ok)return null;let n=t.value;try{let e=await G.resolveSelectedWalletAuthority(String(n));if(e.kind!==`resolved`)return null;let{selection:t,authMethod:r,authority:i}=e;return Db({walletId:n,selection:t,authMethod:r,authority:i,expectedKind:`passkey`}).length>0||r.status!==`active`||r.kind!==`passkey`||i.state!==`active`||i.provenance.kind!==`device_link`?null:{kind:`linked_device_passkey_authority_selection_v1`,walletId:n,selection:t,authMethod:r,authority:i,signerMaterials:e.signerMaterials,exportRoot:e.exportRoot}}catch{return null}}async function kb(e){let t=_(e.walletIdInput),n=String(e.emailHashHex||``).trim().toLowerCase(),r=String(e.providerSubjectId||``).trim();if(!t.ok||!n||!r)return{kind:`none`};let i=t.value,a;try{a=e.walletAuthMethodId?await G.resolveWalletAuthorityForMethod(String(i),e.walletAuthMethodId):await G.resolveSelectedWalletAuthority(String(i))}catch(e){return{kind:`rejected`,message:e instanceof Error?e.message:`Selected Email OTP authority is unavailable`}}if(a.kind===`missing_selection`)return{kind:`none`};if(a.kind!==`resolved`)return{kind:`rejected`,message:`Selected Email OTP authority is unavailable`};let{selection:o,authMethod:s,authority:c}=a;if(s.kind!==`email_otp`)return{kind:`none`};if(Db({walletId:i,selection:o,authMethod:s,authority:c,expectedKind:`email_otp`,allowUnselectedSibling:!!e.walletAuthMethodId}).length>0||s.emailHashHex.toLowerCase()!==n)return{kind:`rejected`,message:`Selected Email OTP authority is inactive or does not match the verified email`};if(s.status!==`active`||c.state!==`active`)return{kind:`rejected`,message:`Selected Email OTP authority is inactive`};try{await Cb({authMethod:s,provider:e.provider,providerSubjectId:r})}catch(e){return{kind:`rejected`,message:e instanceof Error?e.message:`Selected Email OTP provider identity does not match the local authority`}}return c.provenance.kind===`device_link`&&a.signerMaterials.length===0?{kind:`rejected`,message:`Selected linked Email OTP authority has no signer material`}:a.signerMaterials.some(e=>e.kind!==`wallet_authority_linked_signer_material_v1`)?{kind:`rejected`,message:`Selected Email OTP authority has an invalid linked signer material set`}:{kind:`selected`,selection:{kind:`linked_device_email_otp_authority_selection_v1`,walletId:i,selection:o,authMethod:s,authority:c,signerMaterials:a.signerMaterials,exportRoot:a.exportRoot}}}function Ab(e,t){let n=t.keyFamily===`ed25519`?e.signerActivations.ed25519:e.signerActivations.ecdsa;if(!n)throw Error(`[login] linked Wallet Session requested unavailable ${t.keyFamily} material`);if(!g(n.materialActivation,t.materialActivation))throw Error(`[login] linked Wallet Session material activation does not match authority`);return n.materialActivation}function jb(e,t){if(t.walletId!==e.walletId||t.authorityId!==e.authority.authorityId||t.authMethodId!==e.authMethod.walletAuthMethodId||t.authorityDigestB64u!==e.authority.authorityDigestB64u||t.authorityRevocationEpoch!==e.authority.revocationEpoch)throw Error(`[login] linked Wallet Session identity does not match selected authority`);for(let n of t.capabilitySubjects)switch(n.kind){case`sign`:case`export_keys`:{let t=Ab(e.authority,n),r=Eb(e.signerMaterials,e.authority.authorityId,e.authMethod.walletAuthMethodId,t);if(!r||r.keyFamily!==n.keyFamily)throw Error(`[login] linked Wallet Session signer material is unavailable`);if(!g(r.materialActivation,n.materialActivation))throw Error(`[login] linked Wallet Session signer material activation is invalid`);break}case`link_devices`:case`revoke_devices`:break;default:return Q(n)}}function Mb(e,t){let n=e.targetFactor;if(n.kind!==`passkey`||n.walletAuthMethodId!==t.authMethod.walletAuthMethodId||n.rpId!==t.authMethod.rpId||n.credentialIdB64u!==t.authMethod.credentialIdB64u)throw Error(`[login] linked passkey signer material target factor does not match V2 auth`)}async function Nb(e){let t=ml(e.credential);if(!t)throw Error(`[login] linked passkey unlock requires WebAuthn PRF.first output`);let n;try{n=F(t)}catch{throw Error(`[login] linked passkey unlock returned an invalid PRF.first output`)}try{if(n.byteLength!==32)throw Error(`[login] linked passkey unlock requires a 32-byte PRF.first output`);return await Pb({selection:e.selection,factorSecret32:n})}finally{n.fill(0)}}async function Pb(e){if(e.factorSecret32.byteLength!==32)throw Error(`[login] linked signer material requires a 32-byte factor secret`);let t=e.factorSecret32.slice();try{let n=[];for(let r of e.selection.signerMaterials){if(r.kind!==`wallet_authority_linked_signer_material_v1`)throw Error(`[login] linked signer material is not a linked sealed record`);e.selection.kind===`linked_device_passkey_authority_selection_v1`?Mb(r,e.selection):Fb(r,e.selection);let i=await Bi({record:r,factorSecret:t,expected:{authorityId:e.selection.authority.authorityId,walletId:e.selection.walletId,walletAuthMethodId:e.selection.authMethod.walletAuthMethodId,packageSetDigestB64u:r.packageSetDigestB64u,targetFactor:r.targetFactor,materialActivation:r.materialActivation,keyFamily:r.keyFamily}});if(i.kind!==`opened_wallet_authority_linked_signer_material_v1`)throw Error(`[login] linked signer material open failed: ${i.reason}`);n.push(i)}let[r,...i]=n;if(!r)throw Error(`[login] linked signer material set is empty`);return[r,...i]}finally{t.fill(0)}}function Fb(e,t){let n=e.targetFactor;if(n.kind!==`email_otp`||n.walletAuthMethodId!==t.authMethod.walletAuthMethodId||n.emailHashHex.toLowerCase()!==t.authMethod.emailHashHex.toLowerCase()||n.registrationAuthorityId!==t.authMethod.registrationAuthorityId)throw Error(`[login] linked Email OTP signer material target factor does not match V2 auth`)}async function Ib(e){if(e.factorSecret32.byteLength!==32)throw Error(`[login] linked Email OTP unlock requires a 32-byte factor secret`);return await Pb({selection:e.selection,factorSecret32:e.factorSecret32})}function Lb(e){let t=String(e.walletId||``).trim();if(!t)throw Error(`[login] recent unlock account is missing walletId`);let n=String(e.loginDisplayName||``).trim()||t;return{walletId:t,nearAccountId:e.nearAccountId,displayName:n,signerSlot:e.signerSlot,...typeof e.lastLogin==`number`?{lastLogin:e.lastLogin}:{},authMethod:e.authMethod||null}}async function Rb(e){let t=await G.resolveSelectedWalletAuthority(String(e.walletId)).catch(()=>null);if(!t||t.kind!==`resolved`||t.selection.walletAuthMethodId!==e.walletAuthMethodId||t.authMethod.status!==`active`||t.authority.state!==`active`||t.authority.provenance.kind!==`device_link`)return null;let n=await Sx({walletId:e.walletId,authMethod:t.authMethod,authority:t.authority,signerMaterials:t.signerMaterials});if(n.kind!==`resolved`)return null;let r;switch(t.authMethod.kind){case z.passkey:r=z.passkey;break;case z.emailOtp:r=z.emailOtp;break;case`voiceid`:return null;default:return Q(t.authMethod)}return{walletId:String(e.walletId),nearAccountId:n.subject.nearAccountId,displayName:String(e.walletId),signerSlot:n.subject.signerSlot,lastLogin:e.updatedAtMs,authMethod:r}}function zb(e){return`${e.walletId}:${e.authMethod??``}`}function Bb(e){let t=null;for(let n of e)(!t||(n.lastLogin??0)>(t.lastLogin??0))&&(t=n);return t}async function Vb(e){return e?(await G.listWalletAuthMethodsV2ForWallet(String(e)).catch(()=>[])).filter(e=>e.status===`active`).map(bb).filter(e=>!!e):[]}function Hb(e){if(e.authMethod===z.passkey)return null;if(e.authMethod!==z.emailOtp)throw Error(`[login] unsupported wallet auth method for warm-up: ${e.authMethod}`);let t=e.authMethods.filter(e=>e.kind===`email_otp`);if(t.length!==1)throw Error(`[login] Email OTP warm-up requires one active wallet auth-method binding`);let n=t[0];if(String(n.wallet.walletId)!==String(e.walletId))throw Error(`[login] Email OTP warm-up auth-method binding wallet mismatch`);return n}async function Ub(e){return Hb({authMethods:await Vb(e.walletId),authMethod:e.authMethod,walletId:e.walletId})}async function Wb(e){let[t,n]=await Promise.all([G.listWalletPasskeyAuthenticators(String(e)),G.listWalletAuthMethodsV2ForWallet(String(e)).catch(()=>[])]),r=new Set;for(let e of n)e.kind===`passkey`&&e.status===`active`&&r.add(e.credentialIdB64u);return t.filter(e=>r.has(e.credentialId))}function Gb(e){return e?.status===`active`}function Kb(e){if(!e.request)return null;switch(e.request.mode){case`wallet_session_operation_credential_v1`:try{return{kind:`wallet_session_operation_credential_v1`,operationCredential:qb(e.request.operationCredential)}}catch{return null}case`webauthn`:return{kind:`webauthn`}}return null}function qb(e){if(e.kind===`opaque_wallet_session_operation_credential_v1`)return ze(e);if(e.kind!==`opaque_hosted_wallet_session_operation_credential_v1`||!/^wsh_[A-Za-z0-9_-]{43}$/.test(e.token))throw Error(`Hosted Wallet Session operation credential is invalid`);let t=gt(e.walletSessionId);if(!t.ok)throw Error(`Hosted Wallet Session ID is invalid: ${t.error.message}`);return{kind:e.kind,home:He(e.home),token:e.token,walletSessionId:t.value}}function Jb(){return{kind:`none`}}function Yb(e){return String(e.authenticators.find(t=>t.signerSlot===e.signerSlot)?.credentialId||e.authenticators[0]?.credentialId||``).trim()}function Xb(e){return $r({walletId:e.walletId,rpId:e.rpId,credentialIdB64u:e.credentialIdB64u})}function Zb(e){if(!e.wantsEd25519Warmup)return{kind:`not_requested`};if(e.authMethod===z.passkey)return{kind:`passkey`,authority:{kind:`wallet_auth_authority`,authority:Xb({walletId:e.walletId,rpId:e.rpId,credentialIdB64u:e.passkeyCredentialIdB64u})},source:`login`};throw e.authMethod===z.emailOtp?Error(`[login] Email OTP warm-up requires its proof-bound unlock flow`):Error(`[login] unsupported wallet auth method for Ed25519 warm-up: ${e.authMethod}`)}function Qb(e){if(e.kind===`not_requested`)throw Error(`[login] threshold Ed25519 warm-up authority is missing`);return e}function $b(e){return e.authority.kind===`email_otp`?e.authority:{kind:`passkey`,authority:{kind:`wallet_auth_authority`,authority:Xb({walletId:e.walletId,rpId:e.rpId,credentialIdB64u:e.credentialIdB64u})},source:`login`}}function ex(e){switch(e.kind){case`passkey`:return{kind:`passkey`,rpId:ua(e.authority.authority.verifier.rpId),credentialIdB64u:String(e.authority.authority.factor.credentialIdB64u||``).trim()};case`email_otp`:return{kind:`email_otp`,providerSubjectId:String(e.authority.authority.factor.providerUserId||``).trim()}}throw Error(`[login] unsupported Ed25519 exact provision authority`)}function tx(e){return pl({signer:nl({walletId:e.walletBinding.walletId,nearAccountId:e.walletBinding.nearAccountId,nearEd25519SigningKeyId:e.walletBinding.nearEd25519SigningKeyId,signerSlot:e.signerSlot}),auth:ex(e.authority),walletSessionId:e.walletSessionId,quotaId:e.quotaId,thresholdSessionId:e.thresholdSessionId})}function nx(e){switch(e.mintPlan.kind){case`not_requested`:throw Error(`[login] threshold Ed25519 mint plan is missing`);case`wallet_custody`:return e.ecdsaMint?{kind:`exact_ed25519_provisioning`,operationCredential:e.ecdsaMint.operationCredential,laneIdentity:tx({walletBinding:e.walletBinding,signerSlot:e.signerSlot,thresholdSessionId:e.mintPlan.thresholdSessionId,walletSessionId:e.ecdsaMint.operationCredential.walletSessionId,quotaId:e.ecdsaMint.quotaId,authority:e.authority})}:{kind:`fresh_ed25519_provisioning`,materialActivation:e.mintPlan.custody.ed25519.capability.materialActivation};case`fresh`:throw Error(`[login] fresh Ed25519 passkey provisioning requires canonical material activation`);case`ecdsa_authorized`:if(!e.ecdsaMint)throw Error(`[login] threshold Ed25519 warm-up requires the ECDSA bootstrap session minted during unlock`);return{kind:`exact_ed25519_provisioning`,operationCredential:e.ecdsaMint.operationCredential,laneIdentity:tx({walletBinding:e.walletBinding,signerSlot:e.signerSlot,thresholdSessionId:e.mintPlan.thresholdSessionId,walletSessionId:e.ecdsaMint.operationCredential.walletSessionId,quotaId:e.ecdsaMint.quotaId,authority:e.authority})}}return Q(e.mintPlan)}function rx(e,t){if(e.kind===`fresh_ed25519_provisioning`&&e.materialActivation)return e.materialActivation;if(t.kind===`wallet_custody`)return t.custody.ed25519.capability.materialActivation;throw Error(`[login] passkey Ed25519 warm-up requires a canonical material activation`)}function ix(e){return e.mintPlan.kind===`wallet_custody`?{relayerKeyId:e.mintPlan.custody.ed25519.relayerKeyId,participantIds:e.mintPlan.custody.ed25519.participantIds,runtimePolicyScope:e.mintPlan.custody.ed25519.capability.runtimePolicyScope,routerAbNormalSigning:e.fallback.routerAbNormalSigning}:e.fallback}function ax(e){let t=e.session,n=e.custody.ed25519,r=e.credential?ml(e.credential):``;if(t.walletId!==String(e.walletBinding.walletId)||t.nearAccountId!==String(e.walletBinding.nearAccountId)||t.nearEd25519SigningKeyId!==String(e.walletBinding.nearEd25519SigningKeyId)||n.signerSlot!==e.signerSlot||t.relayerKeyId!==e.provisionScope.relayerKeyId||t.thresholdSessionId!==n.capability.lifecycle.thresholdSessionId||t.remainingUses!==e.remainingUses||!gS(t.participantIds,e.provisionScope.participantIds)||!e.provisionScope.runtimePolicyScope||!vS(t.runtimePolicyScope,e.provisionScope.runtimePolicyScope)||!_S(t.routerAbNormalSigning,e.provisionScope.routerAbNormalSigning)||!r)throw Error(`[login] verified unlock returned an invalid Ed25519 Wallet Session`);switch(t.sessionKind){case`issued_exact_wallet_session`:if(t.operationCredential.walletSessionId!==t.walletSessionId)throw Error(`[login] verified unlock returned a mismatched Ed25519 credential`);return{ok:!0,...t,passkeyPrfFirstB64u:r};case`already_committed_exact_wallet_session`:{let n=e.unlockAuthorization;if(!n)throw Error(`[login] verified unlock reused an Ed25519 Wallet Session without its authorization`);if(n.operationCredential.walletSessionId!==t.walletSessionId||n.record.walletId!==t.walletId||n.record.authorizationId!==t.authorizationId||n.record.quotaId!==t.quotaId||n.record.expiresAtMs!==t.expiresAtMs)throw Error(`[login] verified unlock reused a mismatched Ed25519 Wallet Session`);return{ok:!0,...t,operationCredential:n.operationCredential,passkeyPrfFirstB64u:r}}default:return Q(t)}}function ox(e){return e.hasLoginCredential?{kind:`passkey_credential_already_collected`}:e.requiresLocalPasskeyUnlock?e.requireThresholdWarmup?{kind:`wallet_unlock_owns_passkey_credential`}:{kind:`local_unlock_passkey_assertion`}:{kind:`no_local_passkey_required`}}function sx(e){if(e.warmupPlan.signersToWarm.includes(`ed25519`)&&e.requiresLocalPasskeyUnlock)return{kind:`wallet_custody`};if(e.hasLoginCredential)return{kind:`existing_passkey_credential`};if(e.routeAuthorization.kind,e.requiresLocalPasskeyUnlock)throw Error(`[login] passkey warm-up requires the verified wallet-unlock credential`);return{kind:`no_passkey_credential_required`}}function cx(e){if(!e.credentialIds)return e.authenticators;let t=new Set;for(let n of e.credentialIds)t.add(n.trim());let n=[];for(let r of e.authenticators)t.has(String(r.credentialId||``).trim())&&n.push(r);if(!n.length)throw Error(`[login] no local authenticator matches the required credential`);return n}function lx(e){let t=[],n=new Set;for(let r of e){let e=String(r.credentialId||``).trim();!e||n.has(e)||(n.add(e),t.push(e))}return t}function ux(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){let e=typeof r==`string`?r.trim():``;!e||n.has(e)||(n.add(e),t.push(e))}return t}function dx(e){let t=[];for(let n of e.authenticators)n.signerSlot===e.signerSlot&&t.push(n);let n=lx(t.length>0?t:e.authenticators);if(n.length===0)throw Error(`[login] selected wallet has no local passkey credential ID`);if(e.serverCredentialIds.length===0)return n;let r=new Set(e.serverCredentialIds),i=[];for(let e of n)r.has(e)&&i.push(e);if(i.length===0)throw Error(`[login] server passkey allow-list does not match local wallet credentials`);return i}function fx(e){let t=mb({subjectSet:e.subjectSet,selection:e.selection});switch(e.selection.mode){case`ed25519_only`:return{kind:`near_ed25519_only`,wantsEd25519Warmup:!0,wantsEcdsaWarmup:!1};case`ecdsa_only`:if(t.kind!==`evm_family_ecdsa_only_wallet`)throw Error(`[login] ECDSA-only warm-up requires exact ECDSA subjects`);return{kind:`evm_family_ecdsa_only`,wantsEd25519Warmup:!1,wantsEcdsaWarmup:e.hasConfiguredEcdsaTargets};case`ed25519_and_ecdsa`:return{kind:`near_ed25519_and_evm_family_ecdsa`,wantsEd25519Warmup:!0,wantsEcdsaWarmup:e.hasConfiguredEcdsaTargets}}return Q(e.selection)}function px(e){let t=String(e.context.configs?.network.relayer?.url||``).trim();if(!t)throw Error(`[login] threshold warm session requires relayer.url to be configured`);let n=Go(e.context.configs.network.chains),r=fx({subjectSet:e.subjectSet,selection:e.selection,hasConfiguredEcdsaTargets:n.length>0}),i=r.wantsEcdsaWarmup,a=r.wantsEd25519Warmup,o=String(e.context.signingEngine.getRpId()||``).trim();return{kind:`threshold_login_warmup_phase_input`,signerSlot:e.signerSlot,selection:e.selection,relayerUrl:t,rpId:o,configuredEcdsaTargets:n,selectedEcdsaTargets:i?n:[],wantsEd25519Warmup:a,wantsEcdsaWarmup:i,ed25519SessionAuthority:Zb({wantsEd25519Warmup:a,authMethod:e.authMethod,walletId:e.subjectSet.walletId,rpId:o,passkeyCredentialIdB64u:Yb({authenticators:e.authenticators,signerSlot:e.signerSlot}),routeAuthorization:e.routeAuthorization}),keyFactsInventoryAuthority:e.keyFactsInventoryAuthority,routeAuthorization:e.routeAuthorization}}async function mx(e){let t=[...e.signersWarmed.includes(`ed25519`)?[{curve:`ed25519`}]:[],...e.signersWarmed.includes(`ecdsa`)?Go(e.context.configs.network.chains).map(e=>({curve:`ecdsa`,chainTarget:e.chainTarget})):[]],n=hl(e.credential);if(!n)throw Error(`[login] runtime lane selection requires the authenticated credential`);let r=String(e.walletIdentity.walletId),i=await G.getWalletPasskeyAuthenticator({walletId:r,credentialId:n}),a=gi(i?.signerSlot,{min:1});if(!i||a===null)throw Error(`[login] authenticated credential resolves no exact local authenticator for its signer slot`);let o={auth:{kind:`passkey`,rpId:ua(e.context.signingEngine.getRpId()),credentialIdB64u:n},signerSlot:a};t.length!==0&&await gy({source:`wallet_unlock`,walletId:String(e.walletIdentity.walletId),ownerScope:o,requiredTargets:t,readOwnerScopedSigningLanes:async t=>await e.context.signingEngine.readOwnerScopedSigningLanes(t,e.statusReads)})}async function hx(e){let t=hl(e.credential);if(!t)throw Error(`[login] successful Passkey unlock omitted its credential identity`);let n=await Is({walletId:e.walletIdentity.walletId,rpId:e.context.signingEngine.getRpId(),credentialIdB64u:t});await e.context.signingEngine.markWalletSelectionUnlocked({walletId:e.walletIdentity.walletId,walletAuthMethodId:n.walletAuthMethodId})}function gx(e){if(e.userData&&String(e.userData.walletId)!==String(e.walletId))throw Error(`[login] NEAR account projection belongs to a different wallet`);let t=typeof e.userData?.operationalPublicKey==`string`?e.userData.operationalPublicKey.trim():``;return{kind:`near_wallet`,walletId:e.walletId,operationalPublicKey:t||null}}async function _x(e){J(e.onEvent,String(e.identity.nearAccountId),{phase:W.STEP_02_ACCOUNT_LOOKUP_STARTED,status:`running`,authMethod:`passkey`});let t=e.signerSlotHint===null?Promise.resolve(null):e.signingEngine.getUserBySignerSlot(e.identity.nearAccountId,e.signerSlotHint).catch(()=>null),[n,r,i,a]=await Promise.all([t,e.signingEngine.getLastUser().catch(()=>null),$s(G,e.identity.nearAccountId).catch(()=>null),Wb(e.identity.walletId)]);if(a.length===0)throw Error(`No authenticators found for account ${e.identity.nearAccountId}. Please register an account.`);let o=null;o=n&&n.nearAccountId===e.identity.nearAccountId?n:i&&i.nearAccountId===e.identity.nearAccountId?i:r&&r.nearAccountId===e.identity.nearAccountId?r:await e.signingEngine.getUserBySignerSlot(e.identity.nearAccountId,Number(e.identity.signerSlot)).catch(()=>null);let s=gx({userData:o,walletId:e.identity.walletId});return J(e.onEvent,String(e.identity.nearAccountId),{phase:W.STEP_02_ACCOUNT_LOOKUP_SUCCEEDED,status:`succeeded`,authMethod:`passkey`,data:{signerSlot:Number(e.identity.signerSlot),...s.operationalPublicKey?{operationalPublicKey:s.operationalPublicKey}:{walletKind:s.kind}}}),{kind:`login_unlock_account_phase_ready`,accountSubject:s,authenticators:a,baseSignerSlot:e.signerSlotHint??Number(e.identity.signerSlot),localUnlockAuthMethod:z.passkey,requiresLocalPasskeyUnlock:!0}}async function vx(e){let t=String(e.identity.walletId);J(e.onEvent,t,{phase:W.STEP_02_ACCOUNT_LOOKUP_STARTED,status:`running`,authMethod:`passkey`});let[n,r]=await Promise.all([G.getProfile(t),Wb(e.identity.walletId)]);if(!n||r.length===0)throw Error(`[login] ECDSA wallet ${t} has no local passkey profile`);let i=gi(n.defaultSignerSlot,{min:1}),a=e.signerSlotHint??i;if(a===null)throw Error(`[login] ECDSA wallet profile is missing its exact signerSlot`);return J(e.onEvent,t,{phase:W.STEP_02_ACCOUNT_LOOKUP_SUCCEEDED,status:`succeeded`,authMethod:`passkey`,data:{signerSlot:a,walletKind:`ecdsa_wallet_only`}}),{kind:`login_unlock_account_phase_ready`,accountSubject:{kind:`ecdsa_wallet_only`,walletId:e.identity.walletId,operationalPublicKey:null},authenticators:r,baseSignerSlot:a,localUnlockAuthMethod:z.passkey,requiresLocalPasskeyUnlock:!0}}async function yx(e){switch(e.identity.kind){case`near_ed25519_capable_wallet`:return await _x({signingEngine:e.signingEngine,identity:e.identity,signerSlotHint:e.signerSlotHint,onEvent:e.onEvent});case`evm_family_ecdsa_only_wallet`:return await vx({identity:e.identity,signerSlotHint:e.signerSlotHint,onEvent:e.onEvent})}return Q(e.identity)}function bx(e){switch(e.identity.kind){case`near_ed25519_capable_wallet`:if(e.accountSubject.kind!==`near_wallet`)throw Error(`[login] NEAR unlock returned an ECDSA-only account subject`);return{success:!0,kind:`near_wallet_unlocked`,walletId:e.identity.walletId,loggedInNearAccountId:String(e.identity.nearAccountId),operationalPublicKey:e.accountSubject.operationalPublicKey,nearAccountId:e.identity.nearAccountId};case`evm_family_ecdsa_only_wallet`:if(e.accountSubject.kind!==`ecdsa_wallet_only`)throw Error(`[login] ECDSA-only unlock returned a NEAR account subject`);return{success:!0,kind:`ecdsa_wallet_unlocked`,walletId:e.identity.walletId}}return Q(e.identity)}async function xx(e,t,n){return await Jx(e,t,n,{kind:`wallet_only`})}async function Sx(e){let t=e.authority.signerActivations.ed25519;if(!t)return{kind:`absent`};let n=Eb(e.signerMaterials,e.authority.authorityId,e.authMethod.walletAuthMethodId,t.materialActivation);if(!n||n.kind!==`wallet_authority_linked_signer_material_v1`||n.keyFamily!==`ed25519`||!g(n.materialActivation,t.materialActivation))return{kind:`invalid`};let r=n.publicFacts.applicationBinding;if(r.wallet_id!==String(e.walletId))return{kind:`invalid`};let i=null,a=await new Wi(G).listLanes();for(let o of a){let a;switch(e.authMethod.kind){case z.passkey:a=o.auth.kind===z.passkey&&String(o.auth.rpId)===String(e.authMethod.rpId)&&String(o.auth.credentialIdB64u)===String(e.authMethod.credentialIdB64u);break;case z.emailOtp:a=o.auth.kind===z.emailOtp;break;case`voiceid`:return{kind:`invalid`};default:return Q(e.authMethod)}if(!(!a||String(o.walletId)!==String(e.walletId)||o.signerSlot!==r.key_creation_signer_slot||String(o.nearEd25519SigningKeyId)!==r.near_ed25519_signing_key_id||String(o.thresholdSessionId)!==n.publicFacts.targetBinding.lifecycle.session_id||!g(o.materialActivation,t.materialActivation))){if(i)return{kind:`invalid`};i=o}}if(!i)return{kind:`invalid`};let o=gi(i.signerSlot,{min:1});return o?{kind:`resolved`,subject:{kind:`near_ed25519_wallet`,walletId:e.walletId,nearAccountId:i.nearAccountId,nearEd25519SigningKeyId:i.nearEd25519SigningKeyId,signerSlot:o}}:{kind:`invalid`}}function Cx(e){let t=ni({kind:`wallet_auth_authority_ref`,walletId:e.authority.walletId,authorityDigest:e.authority.authorityDigestB64u,walletAuthMethodId:e.authMethod.walletAuthMethodId});if(!t)throw Error(`[login] linked device wallet authority reference is invalid`);return t}async function wx(e){let t=_(e);if(!t.ok)return null;let n=t.value;try{let e=await G.resolveSelectedWalletAuthority(String(n));if(e.kind!==`resolved`)return null;let{selection:t,authMethod:r,authority:i}=e;if(Db({walletId:n,selection:t,authMethod:r,authority:i}).length>0||r.status!==`active`||i.state!==`active`)return null;let a=[],o=await Sx({walletId:n,authMethod:r,authority:i,signerMaterials:e.signerMaterials});if(o.kind===`invalid`)return null;o.kind===`resolved`&&a.push(o.subject);let s=i.signerActivations.ecdsa;if(s){let t=Eb(e.signerMaterials,i.authorityId,r.walletAuthMethodId,s.materialActivation);if(!t||t.keyFamily!==`ecdsa_secp256k1`||!g(t.materialActivation,s.materialActivation))return null;let o;try{o=r.kind===z.passkey?await Sb(r):Cx({authority:i,authMethod:r})}catch{return null}a.push({kind:`evm_family_ecdsa_wallet`,walletId:n,capability:s.materialActivation.capability,authority:o,ecdsaThresholdKeyId:t.ecdsaThresholdKeyId})}let c=a[0];return c?{kind:`wallet_unlock_subject_set`,walletId:n,subjects:[c,...a.slice(1)]}:null}catch{return null}}async function Tx(e){let t=await cb(c(e.relayUrl,`/wallet/unlock/challenge`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({unlockBackend:`passkey`,userId:String(e.walletId),rpId:e.rpId})}),n=await t.json().catch(()=>({})),r=A(n)?n:{};if(!t.ok||r.ok!==!0)throw Error(typeof r.message==`string`?r.message:`wallet/unlock/challenge failed (HTTP ${t.status})`);let i=String(r.challengeId||``).trim(),a=String(r.challengeB64u||``).trim();if(!i||!a)throw Error(`[login] linked passkey challenge is incomplete`);return{challengeId:i,challengeB64u:a}}function Ex(e){return{id:e,type:`public-key`,transports:[]}}function Dx(e,t){return e.capabilitySubjects.some(e=>(e.kind===`sign`||e.kind===`export_keys`)&&e.keyFamily===(t===`ed25519`?`ed25519`:`ecdsa_secp256k1`))}function Ox(e){let t=e.filter(e=>e.keyFamily===`ed25519`);if(t.length>1)throw Error(`[login] linked passkey has multiple active Ed25519 materials`);return t[0]??null}function kx(e){let t=e.filter(e=>e.keyFamily===`ecdsa_secp256k1`);if(t.length>1)throw Error(`[login] linked passkey has multiple active ECDSA materials`);return t[0]??null}async function Ax(e){let t=Dd({walletId:e.selection.walletId,materialActivation:e.material.materialActivation});if(t){let[n,r]=await Promise.all([H({authority:t.factorAuthority}),H({authority:e.factorAuthority})]);if(t.authorityId!==e.selection.authority.authorityId||t.walletAuthMethodId!==e.selection.authMethod.walletAuthMethodId||t.ecdsaThresholdKeyId!==e.material.publicFacts.ecdsaThresholdKeyId||n.authorityDigest!==r.authorityDigest)throw Error(`[login] linked ECDSA holder runtime conflicts with the selected authority`);return{runtime:t,installed:!1}}let n=ve(`linked-ecdsa-holder`);try{let t=await Pu({holderHandleId:n,ownedSigningShare32:e.material.material.slice(),activationReceiptJson:JSON.stringify(e.material.publicFacts.activationReceipt),workerCtx:e.context.signingEngine.getSignerWorkerContext()}),r={kind:`linked_ecdsa_holder_runtime_v1`,walletId:e.selection.walletId,authorityId:e.selection.authority.authorityId,walletAuthMethodId:e.selection.authMethod.walletAuthMethodId,factorAuthority:e.factorAuthority,materialActivation:e.material.materialActivation,holderHandleId:t.holderHandleId,ecdsaThresholdKeyId:e.material.publicFacts.ecdsaThresholdKeyId,activationReceipt:e.material.publicFacts.activationReceipt};return kd(r),{runtime:r,installed:!0}}catch(t){throw await Ku({holderHandleId:n,workerCtx:e.context.signingEngine.getSignerWorkerContext()}).catch(()=>void 0),t}}async function jx(e){if(e.kind===`passkey`){let t=await Ob(String(e.walletId));if(!t)throw Error(`[login] linked Passkey authority is unavailable after link`);return t}let t=await kb({walletIdInput:String(e.walletId),walletAuthMethodId:String(e.walletAuthMethodId),emailHashHex:e.emailHashHex,provider:e.providerIdentity.provider,providerSubjectId:e.providerIdentity.providerSubjectId});if(t.kind!==`selected`)throw Error(t.kind===`rejected`?t.message:`[login] linked Email OTP authority is unavailable after link`);return t.selection}async function Mx(e){let t=Px(e.material),r=pn(`ed25519:${dn(t.registeredPublicKey)}`),i=Cr({kind:`router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1`,walletId:String(e.selection.walletId),nearAccountId:r,nearEd25519SigningKeyId:t.applicationBinding.near_ed25519_signing_key_id,signerSlot:t.applicationBinding.key_creation_signer_slot,thresholdSessionId:t.scope.threshold_session_id,signingWorkerId:t.scope.signing_worker_id,participantIds:t.participantIds});if(!i.ok)throw Error(i.message);let a=await fetch(`${new URL(e.relayerUrl).origin}${vr}`,{method:`POST`,headers:{Authorization:`Bearer ${e.operationCredential.token}`,"Content-Type":`application/json`},body:JSON.stringify(i.value)}),o=await a.json().catch(()=>null);if(!a.ok||!A(o)){let e=A(o)?String(o.message||``).trim():``;throw Error(`[login] linked Ed25519 post-link bootstrap failed (HTTP ${a.status}): ${e||`invalid response`}`)}let s=n(o.thresholdSessionId),c=gt(o.walletSessionId),l=mt(o.quotaId),u=Fe(o.runtimePolicyScope),d=Qe(o.routerAbNormalSigning),f=Array.isArray(o.participantIds)?o.participantIds:[];if(o.kind!==`router_ab_ed25519_yao_warm_recovery_bootstrap_v1`&&o.kind!==`router_ab_ed25519_yao_v2_session_bootstrap_v1`||String(o.walletId)!==String(e.selection.walletId)||String(o.nearAccountId)!==i.value.nearAccountId||String(o.nearEd25519SigningKeyId)!==i.value.nearEd25519SigningKeyId||String(o.signingWorkerId)!==i.value.signingWorkerId||!s.ok||!c.ok||!l.ok||!u||!d||f.length!==2||!Number.isSafeInteger(f[0])||!Number.isSafeInteger(f[1])||String(c.value)!==String(e.operationCredential.walletSessionId)||String(s.value)!==i.value.thresholdSessionId)throw Error(`[login] linked Ed25519 post-link bootstrap identity is invalid`);let p=Number(o.thresholdExpiresAtMs);if(!Number.isSafeInteger(p)||p<=Date.now())throw Error(`[login] linked Ed25519 post-link bootstrap is expired`);return{walletId:String(e.selection.walletId),nearAccountId:i.value.nearAccountId,nearEd25519SigningKeyId:i.value.nearEd25519SigningKeyId,relayerKeyId:i.value.signingWorkerId,participantIds:[f[0],f[1]],thresholdSessionId:s.value,authorizationId:e.walletSession.authorizationId,walletSessionId:c.value,quotaId:l.value,expiresAtMs:p,remainingUses:xe,runtimePolicyScope:u,routerAbNormalSigning:d,operationCredential:e.operationCredential}}async function Nx(e){let t=await jx(e.factor);jb(t,e.walletSession);let n=String(e.context.configs.network.relayer?.url||``).trim();if(!n)throw Error(`[login] linked post-link activation requires relayer.url`);await K.writeExactWithOperationCredential({record:e.walletSession,operationCredential:e.operationCredential});let r=await Pb({selection:t,factorSecret32:e.factorSecret32});try{let i=e.factor.kind===`email_otp`?e.factor.providerIdentity:void 0,a=await wb({selection:t,...i?{providerIdentity:i}:{}}),o=kx(r);if(o){let{runtime:r}=await Ax({context:e.context,selection:t,factorAuthority:a,material:o});Ap({runtime:r,operationCredential:e.operationCredential,expiresAtMs:e.walletSession.expiresAtMs,relayerUrl:n,workerCtx:e.context.signingEngine.getSignerWorkerContext()})}let s=Ox(r);if(s){let r=await Mx({relayerUrl:n,selection:t,walletSession:e.walletSession,operationCredential:e.operationCredential,material:s});await zx({context:e.context,selection:t,session:r,material:s,relayerUrl:n,...i?{providerIdentity:i}:{}})}t.exportRoot&&(e.factor.kind===`passkey`?await e.context.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({existingEnvelope:t.exportRoot.envelope,passkeyPrfFirstB64u:P(e.factorSecret32),walletId:String(t.walletId),walletAuthMethodId:String(t.authMethod.walletAuthMethodId),walletSessionId:String(e.operationCredential.walletSessionId),expiresAtMs:e.walletSession.expiresAtMs}):(Ut(t.exportRoot.envelope.binding)||t.exportRoot.envelope.binding.kind===`ed25519_yao_client_root_v1`)&&await Ga(Ka(e.context.signingEngine.getSignerWorkerContext()),{existingEnvelope:t.exportRoot.envelope,existingFactorSecret:e.factorSecret32,walletId:String(t.walletId),walletAuthMethodId:String(t.authMethod.walletAuthMethodId),walletSessionId:String(e.operationCredential.walletSessionId),expiresAtMs:e.walletSession.expiresAtMs})),await e.context.signingEngine.markWalletSelectionUnlocked({walletId:t.walletId,walletAuthMethodId:t.authMethod.walletAuthMethodId})}finally{for(let e of r)e.material.fill(0)}}function Px(e){let t=e.publicFacts.targetBinding,n=e.publicFacts.activationReceipt;return{kind:zo,scope:{lifecycle_id:t.lifecycle.lifecycle_id,root_share_epoch:t.lifecycle.root_share_epoch,account_id:t.lifecycle.account_id,threshold_session_id:t.lifecycle.session_id,signer_set_id:t.lifecycle.signer_set_id,signing_worker_id:t.lifecycle.selected_server_id,material_activation:t.material_activation},applicationBinding:e.publicFacts.applicationBinding,participantIds:e.publicFacts.participantIds,registeredPublicKey:Uint8Array.from(n.registered_public_key),signingWorkerVerifyingShare:Uint8Array.from(n.signing_worker_verifying_share),stateEpoch:BigInt(n.state_epoch),transcript:Uint8Array.from(n.transcript),activeCapabilityBinding:t.session_id,materialActivation:e.materialActivation}}function Fx(e){let t=String(e?.providerSubjectId||``).trim();if(!t)throw Error(`[login] linked Email OTP lane provider identity is missing`);return t}function Ix(e){let t=e.session;if(t.walletSessionId!==e.operationCredential.walletSessionId||t.sessionKind===`issued_exact_wallet_session`&&t.operationCredential.walletSessionId!==e.operationCredential.walletSessionId)throw Error(`[login] linked Passkey Ed25519 credentials identify different sessions`);return{walletId:t.walletId,nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,relayerKeyId:t.relayerKeyId,participantIds:t.participantIds,thresholdSessionId:t.thresholdSessionId,authorizationId:t.authorizationId,walletSessionId:t.walletSessionId,quotaId:t.quotaId,expiresAtMs:t.expiresAtMs,remainingUses:t.remainingUses,runtimePolicyScope:t.runtimePolicyScope,routerAbNormalSigning:t.routerAbNormalSigning,operationCredential:e.operationCredential}}function Lx(e){let t=e.session;if(t.authorityScope.kind!==`email_otp`||String(t.authorityScope.providerUserId)!==String(e.providerIdentity.providerSubjectId)){let n=[...t.authorityScope.kind===`email_otp`?[]:[`scope.kind`],...t.authorityScope.kind===`email_otp`&&String(t.authorityScope.providerUserId)!==String(e.providerIdentity.providerSubjectId)?[`scope.providerUserId`]:[]];throw Error(`[login] linked Email OTP Ed25519 session authority mismatch: ${n.join(`, `)}`)}let r=n(t.thresholdSessionId),i=yt(t.authorizationId),a=gt(t.walletSessionId),o=mt(t.quotaId);if(!r.ok||!i.ok||!a.ok||!o.ok)throw Error(`[login] linked Email OTP Ed25519 session identity is invalid`);if(e.operationCredential.walletSessionId!==a.value)throw Error(`[login] linked Email OTP Ed25519 credential identifies another session`);return{walletId:String(t.walletId),nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,relayerKeyId:t.routerAbNormalSigning.signingWorkerId,participantIds:t.participantIds,thresholdSessionId:r.value,authorizationId:i.value,walletSessionId:a.value,quotaId:o.value,expiresAtMs:t.expiresAtMs,remainingUses:t.remainingUses,runtimePolicyScope:t.runtimePolicyScope,routerAbNormalSigning:t.routerAbNormalSigning,operationCredential:e.operationCredential}}function Rx(e){let t=mn(e.session.nearAccountId),n={walletId:e.selection.walletId,nearAccountId:t,thresholdSessionId:e.session.thresholdSessionId,runtimePolicyScope:e.session.runtimePolicyScope,materialActivation:e.material.materialActivation,nearEd25519SigningKeyId:mi(e.session.nearEd25519SigningKeyId),signerSlot:e.material.publicFacts.applicationBinding.key_creation_signer_slot};return e.selection.authMethod.kind===`passkey`?{...n,auth:{kind:`passkey`,rpId:ua(e.selection.authMethod.rpId),credentialIdB64u:e.selection.authMethod.credentialIdB64u}}:{...n,auth:{kind:`email_otp`,providerSubjectId:Fx(e.providerIdentity)},remainingUses:e.session.remainingUses,expiresAtMs:e.session.expiresAtMs}}async function zx(e){let t=Px(e.material),n=t.applicationBinding,r=[];if(e.session.walletId!==String(e.selection.walletId)&&r.push(`walletId`),n.wallet_id!==String(e.selection.walletId)&&r.push(`application.walletId`),t.scope.account_id!==String(e.selection.walletId)&&r.push(`material.walletId`),e.session.nearEd25519SigningKeyId!==n.near_ed25519_signing_key_id&&r.push(`nearEd25519SigningKeyId`),e.session.thresholdSessionId!==t.scope.threshold_session_id&&r.push(`thresholdSessionId`),e.session.relayerKeyId!==t.scope.signing_worker_id&&r.push(`signingWorkerId`),r.length>0)throw Error(`[login] linked Ed25519 Wallet Session does not match local material: ${r.join(`, `)}`);let i=(await Uo.initializeBundled()).importLinkedMaterial({ownedClientScalarShare:e.material.material,publicReceipt:e.material.publicFacts.activationReceipt,metadata:t}),a=!1;try{let r=await e.context.signingEngine.activateVerifiedNearEd25519YaoMaterial({activeClient:i,facts:{thresholdSessionId:e.session.thresholdSessionId,signer:nl({walletId:e.selection.walletId,nearAccountId:mn(e.session.nearAccountId),nearEd25519SigningKeyId:mi(e.session.nearEd25519SigningKeyId),signerSlot:n.key_creation_signer_slot}),signingRootId:n.signing_root_id,signingRootVersion:t.scope.root_share_epoch,routerAbNormalSigning:e.session.routerAbNormalSigning,runtimePolicyScope:e.session.runtimePolicyScope,relayerUrl:e.relayerUrl}}),o=mn(e.session.nearAccountId);if(String(r.walletId)!==String(e.selection.walletId)||String(r.nearAccountId)!==String(o)||!g(r.materialActivation,e.material.materialActivation))throw Error(`[login] linked Ed25519 activation identity does not match the V2 session`);await qi(new Wi(G),Rx({selection:e.selection,session:e.session,material:e.material,...e.providerIdentity?{providerIdentity:e.providerIdentity}:{}})),a=!0}finally{a||i.dispose()}let o=mn(e.session.nearAccountId);return{success:!0,kind:`near_wallet_unlocked`,walletId:e.selection.walletId,loggedInNearAccountId:String(o),operationalPublicKey:`ed25519:${dn(t.registeredPublicKey)}`,nearAccountId:o}}function Bx(e){let[t,...n]=e.signerMaterials;if(e.authority.provenance.kind===`device_link`){if(!t)throw Error(`[login] linked Email OTP authority has no signer material`);return{kind:`linked_device`,selection:e,signerMaterials:[t,...n]}}if(t)throw Error(`[login] owner Email OTP authority must not carry linked signer material`);return{kind:`owner_authority`,selection:e}}async function Vx(e){let{source:t}=e;if(t.kind===`linked_device`){let e=t.signerMaterials.find(e=>e.kind===`wallet_authority_linked_signer_material_v1`&&e.keyFamily===`ed25519`);return e?{kind:`linked_device`,signerSlot:e.publicFacts.applicationBinding.key_creation_signer_slot,remainingUses:xe}:{kind:`no_ed25519`}}return!t.selection.authority.signerActivations.ed25519||await Hx(t.selection)?{kind:`no_ed25519`}:await e.context.signingEngine.resolveOwnerAuthorityEd25519UnlockRequestInternal({walletSession:{walletId:t.selection.walletId,walletSessionUserId:String(t.selection.walletId)},providerSubjectId:e.providerIdentity.providerSubjectId,walletAuthMethodId:String(t.selection.authMethod.walletAuthMethodId),remainingUses:xe})??{kind:`no_ed25519`}}async function Hx(e){let t=e.authority.signerActivations.ed25519?.materialActivation;return t?(await G.listPendingWalletRegistrationCommits()).some(Ux.bind(void 0,e,t)):!1}function Ux(e,t,n){return n.operation===`near_provisioning`&&n.phase===`joined`&&n.signerPlanKind===`near_ed25519_and_evm_family_ecdsa`&&n.walletId===e.walletId&&n.walletAuthMethodId===e.authMethod.walletAuthMethodId&&g(n.localMaterial.ed25519.metadata.materialActivation,t)}async function Wx(e){let{selection:t,unlocked:n}=e,r=n.walletSession;if(r.walletId!==t.walletId||r.authorityId!==t.authority.authorityId||r.authMethodId!==t.authMethod.walletAuthMethodId||r.authorityDigestB64u!==t.authority.authorityDigestB64u||r.authorityRevocationEpoch!==t.authority.revocationEpoch)throw Error(`[login] owner Email OTP Wallet Session does not match the selected authority`);let i=t.authority.signerActivations.ed25519?.materialActivation;if(!i)return;if(n.ed25519Activation.kind!==`ed25519_activation_ready`){if(await Hx(t))return;throw Error(`[login] owner Email OTP unlock built no Ed25519 runtime to install`)}let a=n.ed25519Activation;if(!g(a.bootstrap.capability.materialActivation,i))throw Error(`[login] owner Email OTP Ed25519 capability names another activation`);if(!g(a.metadata.materialActivation,i))throw Error(`[login] owner Email OTP Ed25519 runtime names another activation`);if(a.bootstrap.session.walletSessionId!==n.operationCredential.walletSessionId)throw Error(`[login] owner Email OTP Ed25519 session credential mismatch`);let o=await Tb({selection:t,providerIdentity:e.providerIdentity});await e.context.signingEngine.activateOwnerAuthorityEd25519RuntimeInternal({walletSession:{walletId:t.walletId,walletSessionUserId:String(t.walletId)},providerSubjectId:e.providerIdentity.providerSubjectId,walletAuthMethodId:String(t.authMethod.walletAuthMethodId),emailHashHex:e.emailHashHex,authority:o,activeClientHandle:a.activeClientHandle,metadata:a.metadata,bootstrap:a.bootstrap})}function Gx(e){switch(e.walletCustodySeed.kind){case`owner_authority_seed_envelope`:return e.walletCustodySeed.existingEnvelope;case`linked_device_seed_unavailable`:throw Error(`[login] owner Email OTP unlock returned linked-device custody state`);default:return Q(e.walletCustodySeed)}}async function Kx(e){let t={provider:e.providerSubjectId.startsWith(`google:`)?`google`:`email`,providerSubjectId:e.providerSubjectId},n=await kb({walletIdInput:e.walletIdInput,emailHashHex:e.emailHashHex,provider:t.provider,providerSubjectId:t.providerSubjectId,walletAuthMethodId:e.walletAuthMethodId});if(n.kind===`none`)throw Error(`[login] linked Email OTP authority is unavailable`);if(n.kind===`rejected`)throw Error(n.message);let r=n.selection;if(String(r.authMethod.walletAuthMethodId)!==String(e.walletAuthMethodId))throw Error(`[login] linked Email OTP selected auth method changed during unlock`);let i=String(e.relayUrl||``).trim();if(!i)throw Error(`[login] linked Email OTP unlock requires relayer.url`);let a=Bx(r),o=await Vx({context:e.context,source:a,providerIdentity:t}),s=await Bo({relayUrl:i,walletId:String(r.walletId),walletAuthMethodId:String(r.authMethod.walletAuthMethodId),challengeId:e.challengeId,otpCode:e.otpCode,ed25519:o,workerCtx:e.context.signingEngine.getSignerWorkerContext()}),c=s.factorSecret32,l=t,u=null,d=null,f=s.ed25519Activation.kind===`ed25519_activation_ready`?s.ed25519Activation.activeClientHandle:null;try{if(a.kind===`owner_authority`){if(await K.writeExactWithOperationCredential({record:s.walletSession,operationCredential:s.operationCredential}),await Wx({context:e.context,selection:r,unlocked:s,providerIdentity:l,emailHashHex:e.emailHashHex}),f=null,!c)throw Error(`[login] owner Email OTP factor secret ownership was lost`);await Ga(Ka(e.context.signingEngine.getSignerWorkerContext()),{existingEnvelope:Gx(s),existingFactorSecret:c,walletId:String(r.walletId),walletAuthMethodId:String(r.authMethod.walletAuthMethodId),walletSessionId:String(s.operationCredential.walletSessionId),expiresAtMs:s.walletSession.expiresAtMs}),await e.context.signingEngine.markWalletSelectionUnlocked({walletId:r.walletId,walletAuthMethodId:r.authMethod.walletAuthMethodId}),e.context.signingEngine.setWalletAuthenticated({kind:`authenticated`,walletId:r.walletId,authMethod:z.emailOtp}),LC({context:e.context,sessionAuthority:{record:s.walletSession,operationCredential:s.operationCredential},factor:{kind:`email_otp`,provider:t.provider,providerSubject:t.providerSubjectId,emailHashHex:e.emailHashHex},ownedFactorSecret:c.slice().buffer,custodyEnvelope:Gx(s)});return}if(jb(r,s.walletSession),!c)throw Error(`[login] linked Email OTP factor secret ownership was lost`);u=await Ib({selection:r,factorSecret32:c});let n=Ox(u),o=kx(u);if(Dx(s.walletSession,`ed25519`)){if(!n||!s.ed25519Activation.bootstrap)throw Error(`[login] linked Email OTP Ed25519 runtime material or capability is missing`);if(!g(s.ed25519Activation.bootstrap.capability.materialActivation,n.materialActivation))throw Error(`[login] linked Email OTP Ed25519 capability activation is invalid`)}if(Dx(s.walletSession,`ecdsa`)){if(!o)throw Error(`[login] linked Email OTP ECDSA runtime material is missing`);let t=await Ax({context:e.context,selection:r,factorAuthority:await wb({selection:r,providerIdentity:l}),material:o});t.installed&&(d=t.runtime)}let p;if(n&&s.ed25519Activation.bootstrap){let t=Lx({session:s.ed25519Activation.bootstrap.session,operationCredential:s.operationCredential,providerIdentity:l});if(t.walletSessionId!==s.operationCredential.walletSessionId)throw Error(`[login] linked Email OTP Ed25519 session credential mismatch`);p=await zx({context:e.context,selection:r,session:t,material:n,relayerUrl:i,providerIdentity:l})}else if(o)p={success:!0,kind:`ecdsa_wallet_unlocked`,walletId:r.walletId};else throw Error(`[login] linked Email OTP has no unlockable signing runtime`);await K.writeExactWithOperationCredential({record:s.walletSession,operationCredential:s.operationCredential}),r.exportRoot&&Ut(r.exportRoot.envelope.binding)&&await Ga(Ka(e.context.signingEngine.getSignerWorkerContext()),{existingEnvelope:r.exportRoot.envelope,existingFactorSecret:c,walletId:String(r.walletId),walletAuthMethodId:String(r.authMethod.walletAuthMethodId),walletSessionId:String(s.operationCredential.walletSessionId),expiresAtMs:s.walletSession.expiresAtMs}),await e.context.signingEngine.markWalletSelectionUnlocked({walletId:r.walletId,walletAuthMethodId:r.authMethod.walletAuthMethodId}),e.context.signingEngine.setWalletAuthenticated({kind:`authenticated`,walletId:p.walletId,authMethod:z.emailOtp})}catch(t){d&&(Ed({walletId:d.walletId,materialActivation:d.materialActivation,holderHandleId:d.holderHandleId}),await Ku({holderHandleId:d.holderHandleId,workerCtx:e.context.signingEngine.getSignerWorkerContext()}).catch(()=>void 0));let n=e.context.signingEngine.getSignerWorkerContext();throw n&&await qa(Ka(n),{kind:`wallet_session`,walletSessionId:String(s.operationCredential.walletSessionId)}),await Promise.allSettled([e.context.signingEngine.clearVolatileWarmSigningMaterial(r.walletId),K.clearWallet(r.walletId)]),t}finally{if(f){let t=e.context.signingEngine.getSignerWorkerContext();t&&await wy({workerContext:t,activeClientHandle:f}).catch(()=>void 0),f=null}for(let e of u||[])e.material.fill(0);c?.fill(0)}}async function qx(e,t,n){let r=String(t).trim()||`linked-passkey`,{onEvent:i,onError:a,afterCall:o}=n||{};J(i,r,{phase:W.STEP_01_STARTED,status:`started`,authMethod:`passkey`});try{let n=await Ob(t);if(!n)throw Error(`[login] linked passkey authority is unavailable`);let a=String(e.configs.network.relayer?.url||``).trim();if(!a)throw Error(`[login] linked passkey unlock requires relayer.url`);J(i,r,{phase:W.STEP_03_PASSKEY_CHALLENGE_STARTED,status:`running`,authMethod:`passkey`});let s=await Tx({relayUrl:a,walletId:n.walletId,rpId:n.authMethod.rpId});J(i,r,{phase:W.STEP_03_PASSKEY_PROMPT_STARTED,status:`running`,authMethod:`passkey`,interaction:{kind:`passkey_assert`,overlay:`show`}});let c=await e.signingEngine.getAuthenticationCredentialsSerialized({subjectId:String(n.walletId),challengeB64u:s.challengeB64u,allowCredentials:[Ex(n.authMethod.credentialIdB64u)],includeSecondPrfOutput:!0});J(i,r,{phase:W.STEP_03_PASSKEY_PROMPT_SUCCEEDED,status:`succeeded`,authMethod:`passkey`,interaction:{kind:`passkey_assert`,overlay:`hide`}});let l=String(typeof window<`u`?window.location.origin:``).trim(),u={challengeId:s.challengeId,webauthn_authentication:c,ed25519SessionRequest:n.signerMaterials.some(e=>e.keyFamily===`ed25519`)?{kind:`requested`,remainingUses:xe}:{kind:`not_requested`},...l?{expected_origin:l}:{}};J(i,r,{phase:W.STEP_04_WALLET_UNLOCK_EXCHANGE_STARTED,status:`running`,authMethod:`passkey`});let d=await co(a,u);if(!d.success)throw Error(d.error);jb(n,d.walletSession);let f=await Nb({selection:n,credential:c}),p;try{let t=Ox(f),r=kx(f);if(Dx(d.walletSession,`ed25519`)&&(!t||!d.ed25519Session))throw Error(`[login] linked Ed25519 runtime material or Wallet Session is missing`);if(Dx(d.walletSession,`ecdsa`)){if(!r)throw Error(`[login] linked ECDSA runtime material is missing`);await Ax({context:e,selection:n,factorAuthority:await wb({selection:n}),material:r})}if(t&&d.ed25519Session)p=await zx({context:e,selection:n,session:Ix({session:d.ed25519Session,operationCredential:d.operationCredential}),material:t,relayerUrl:a});else if(r)p={success:!0,kind:`ecdsa_wallet_unlocked`,walletId:n.walletId};else throw Error(`[login] linked passkey has no unlockable signing runtime`);if(await K.writeExactWithOperationCredential({record:d.walletSession,operationCredential:d.operationCredential}),n.exportRoot){let t=ml(c);if(!t)throw Error(`[login] linked export-root unlock requires WebAuthn PRF.first output`);await e.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({existingEnvelope:n.exportRoot.envelope,passkeyPrfFirstB64u:t,walletId:String(n.walletId),walletAuthMethodId:String(n.authMethod.walletAuthMethodId),walletSessionId:String(d.operationCredential.walletSessionId),expiresAtMs:d.walletSession.expiresAtMs})}await e.signingEngine.markWalletSelectionUnlocked({walletId:n.walletId,walletAuthMethodId:n.authMethod.walletAuthMethodId})}catch(t){throw await Promise.allSettled([e.signingEngine.clearVolatileWarmSigningMaterial(n.walletId),K.clearWallet(n.walletId)]),t}finally{for(let e of f)e.material.fill(0)}return J(i,r,{phase:W.STEP_04_WALLET_UNLOCK_EXCHANGE_SUCCEEDED,status:`succeeded`,authMethod:`passkey`}),await Ds({context:e,authMethod:z.passkey,unlockSubjectId:r,loginResult:p,onEvent:i,afterCall:o})}catch(e){let t=I(e);return await xs({unlockSubjectId:r,message:t.message,error:t,onEvent:i,onError:a,afterCall:o,cancelled:Dt(t)})}}async function Jx(e,t,n,r){let{onEvent:i,onError:a,afterCall:o}=n||{},{signingEngine:s}=e,c=ub({selection:n?.unlockSelection,subjectSet:t}),l=mb({subjectSet:t,selection:c}),u=l.kind===`near_ed25519_capable_wallet`?String(l.nearAccountId):String(l.walletId),d;J(i,u,{phase:W.STEP_01_STARTED,status:`started`,authMethod:`passkey`});try{if(s.assertSealedRefreshStartupParity().catch(e=>{console.warn(`[login] sealed refresh startup parity check failed during unlock; continuing to local passkey prompt`,e instanceof Error?e.message:String(e||`unknown error`))}),typeof window<`u`&&!window.isSecureContext){let e=`Passkey operations require a secure context (HTTPS or localhost).`;return await xs({unlockSubjectId:u,message:e,error:Error(e),onEvent:i,onError:a,afterCall:o,callAfterCall:!1})}let{accountSubject:t,authenticators:r,baseSignerSlot:f,localUnlockAuthMethod:p,requiresLocalPasskeyUnlock:m}=await yx({signingEngine:s,identity:l,signerSlotHint:gi(n?.signerSlot,{min:1}),onEvent:i}),h=async e=>{let t=cx({authenticators:r,credentialIds:e.credentialIds}),n=await Ly({signingEngine:s,subjectId:u,challengeB64u:e.challengeB64u,authenticators:t,onPromptStarted:()=>{J(i,u,{phase:W.STEP_03_PASSKEY_PROMPT_STARTED,status:`waiting_for_user`,authMethod:`passkey`,interaction:{kind:`passkey_assert`,overlay:`show`}})},onPromptSucceeded:()=>{J(i,u,{phase:W.STEP_03_PASSKEY_PROMPT_SUCCEEDED,status:`succeeded`,authMethod:`passkey`,interaction:{kind:`passkey_assert`,overlay:`hide`}})}});return e.saveAsLoginCredential&&(d=n),n},g=async()=>{let e=await zy({currentCredential:d,collectCredentialForChallenge:async e=>await h({challengeB64u:e,saveAsLoginCredential:!0,credentialIds:dx({authenticators:r,signerSlot:f,serverCredentialIds:[]})})});e&&(d=e)},_=kp({defaults:e.configs.signing.sessionDefaults,override:n?.signingSession}),v=_.kind===`enabled`,y=v&&l.kind===`near_ed25519_capable_wallet`?Fg({clientDB:G,keyMaterialStore:G},l.nearAccountId,f).catch(()=>null):Promise.resolve(null),b=null,x=null,S=null,C=null,w=Jb(),T=null,E=(e,t)=>{if(Gb(t))return t;let n=String(t?.status||`not_found`);throw Error(`[login] ${e} did not produce an active warm signing session (status=${n})`)},D=async t=>{J(i,u,{phase:W.STEP_05_SIGNING_SESSION_WARMUP_STARTED,status:`running`,authMethod:d?`passkey`:`warm_session`});let a=t.wantsEd25519Warmup?hb(l):null,o=io(e.configs),c=!1,h=async()=>{c||(c=!0,await s.clearVolatileWarmSigningMaterial(l.walletId))};t.wantsEcdsaWarmup&&yb(await vb({workerCtx:s.getSignerWorkerContext(),selectors:_b(l.subjectSet)}));let g=t.wantsEcdsaWarmup?await cC(e,l.walletId,{keyFactsInventoryAuthority:t.keyFactsInventoryAuthority,keyFactsInventoryRequested:!!n?.ecdsaKeyFactsInventory,relayerUrl:t.relayerUrl,rpId:t.rpId},p):{ecdsaKeys:[]},v=await y,w=v?.participants.map(e=>e.id)||[];t.wantsEcdsaWarmup&&gb({identity:l,context:g});let T=KS({selection:t.selection,selectedEcdsaTargets:t.selectedEcdsaTargets,storedCanonicalEcdsaContext:g,wantsEd25519Warmup:t.wantsEd25519Warmup}),D=b,O=!!(D&&T.signersToWarm.includes(`ecdsa`)),k=O?T.signersToWarm.includes(`ed25519`):T.ed25519DependsOnEcdsa,A=O?!1:T.ecdsaDependsOnEd25519,M=sx({requiresLocalPasskeyUnlock:m,hasLoginCredential:!!d,routeAuthorization:t.routeAuthorization,warmupPlan:T});await h();let ee=qS(`threshold-login`),te=T.signersToWarm.includes(`ed25519`)?k?{kind:`ecdsa_authorized`,thresholdSessionId:ee}:{kind:`fresh`}:{kind:`not_requested`};switch(M.kind){case`existing_passkey_credential`:case`no_passkey_credential_required`:break;case`wallet_custody`:if(t.ed25519SessionAuthority.kind!==`passkey`)throw Error(`[login] wallet custody requires passkey wallet authority`);if(!C||C.ed25519.kind!==`active`)throw QS();te={kind:`wallet_custody`,thresholdSessionId:ee,custody:{...C,ed25519:C.ed25519}};break;default:return Q(M)}if(a&&!v&&te.kind!==`wallet_custody`)throw Error(`[login] threshold warm-up requires threshold key material for ${a.nearAccountId} signer slot ${t.signerSlot}`);let ne=d?hl(d):``,re=String(ne||r.find(e=>e.signerSlot===f)?.credentialId||r[0]?.credentialId||``).trim(),N=d?{kind:`available`,credential:d,localPasskeyCredentialIdB64u:re}:re?{kind:`credential_id_only`,localPasskeyCredentialIdB64u:re}:{kind:`unavailable`,localPasskeyCredentialIdB64u:``},ie=o?{kind:`available`,runtimeScopeBootstrap:o}:{kind:`unavailable`},ae=await FS({statusReads:j,context:e,signingEngine:s,walletIdentity:l,signerSlot:t.signerSlot,thresholdKeyMaterial:v,relayerUrl:t.relayerUrl,relayerKeyId:v?.relayerKeyId||``,participantIds:w,ttlMs:_.ttlMs,unlockRemainingUses:XS(_.unlockRemainingUses),ecdsaContext:T.ecdsaContext,credentialState:N,runtimeScopeBootstrapState:ie,signersToWarm:T.signersToWarm,ed25519DependsOnEcdsa:k,ecdsaDependency:A?{kind:`ed25519_wallet_session_authority`}:{kind:`none`},ed25519MintPlan:te,ed25519SessionAuthority:t.ed25519SessionAuthority,routeAuthorization:t.routeAuthorization,passkeyExchangeEcdsaActivation:D,passkeyUnlockEd25519Session:x,passkeyUnlockWalletSessionAuthorization:S});if(T.signersToWarm.includes(`ed25519`)){let e=ae.ed25519Session;if(!e)throw Error(`[login] threshold warm-up omitted the Ed25519 session result`);let t=E(`threshold warm-up`,dS({session:e,authMethod:p}));return J(i,u,{phase:W.STEP_05_ED25519_SIGNING_SESSION_READY,status:`succeeded`,authMethod:`warm_session`}),T.signersToWarm.includes(`ecdsa`)&&J(i,u,{phase:W.STEP_05_ECDSA_SIGNING_SESSION_READY,status:`succeeded`,authMethod:`warm_session`}),{kind:`threshold_login_warmup_ready`,signingSession:t,signersWarmed:T.signersToWarm}}if(T.signersToWarm.length!==1||T.signersToWarm[0]!==`ecdsa`)throw Error(`[login] threshold warm-up signer selection is invalid`);return J(i,u,{phase:W.STEP_05_ECDSA_SIGNING_SESSION_READY,status:`succeeded`,authMethod:`warm_session`}),{kind:`threshold_login_ecdsa_only_warmup_ready`,signersWarmed:[`ecdsa`]}},O=async n=>{await s.setLastUser(l.walletId,n),l.kind===`near_ed25519_capable_wallet`&&(t.kind===`near_wallet`&&t.operationalPublicKey===null||await s.activateAuthenticatedWalletState({walletId:l.walletId,nearAccountId:mn(l.nearAccountId),signerSlot:n,nearClient:e.nearClient}))},k=async()=>{await s.getNonceCoordinator().recoverDurableLeases({walletId:l.walletId}).catch(e=>{console.warn(`[login] nonce lane durable recovery after unlock failed`,e)})},A=ox({requiresLocalPasskeyUnlock:m,requireThresholdWarmup:v,hasLoginCredential:!!d});switch(A.kind){case`wallet_unlock_owns_passkey_credential`:case`passkey_credential_already_collected`:case`no_local_passkey_required`:break;case`local_unlock_passkey_assertion`:await g();break;default:return Q(A)}let j=new q;if(v&&p===z.passkey){let t=await nS({context:e,walletIdentity:l,selection:c,ttlMs:_.ttlMs,remainingUses:XS(_.unlockRemainingUses)}),n=String(e.configs.network.relayer.url||``).trim(),a=String(s.getRpId()||``).trim();if(!n||!a)throw Error(`[login] passkey wallet unlock requires relayer URL and rpId`);let o=await sS({context:e,walletIdentity:l,unlockSubjectId:u,onEvent:i,authenticators:r,signerSlot:f,remainingUses:XS(_.unlockRemainingUses),relayUrl:n,rpId:a,expectedOrigin:void 0,activation:t,collectCredentialForChallenge:async e=>await h({challengeB64u:e.challengeB64u,saveAsLoginCredential:!0,credentialIds:e.credentialIds})},j);d=o.credential,b=o.activation,x=o.result.ed25519Session,S=o.result.walletSessionAuthorization??(o.activation?Zx(o.activation.sessionActivation):null),C=o.custody,await tS({walletId:String(l.walletId),unlock:o}),w=Jb()}if(!d)throw Error(`[login] successful Passkey unlock omitted its credential`);if(await hx({context:e,walletIdentity:l,credential:d}),v){let t=await Ub({walletId:l.walletId,authMethod:p}),i=Qx({completedActivation:b,request:n?.ecdsaKeyFactsInventory,routeAuthorization:w,wantsEcdsaWarmup:fx({subjectSet:l.subjectSet,selection:c,hasConfiguredEcdsaTargets:Go(e.configs.network.chains).length>0}).wantsEcdsaWarmup});if(T=await D(px({context:e,signerSlot:f,authenticators:r,selection:c,subjectSet:l.subjectSet,authMethod:p,authMethodBinding:t,keyFactsInventoryAuthority:i,routeAuthorization:w})),p===z.passkey){let t=d;if(!t)throw Error(`[login] passkey threshold warm-up completed without a credential`);await mx({context:e,statusReads:j,walletIdentity:l,signersWarmed:T.signersWarmed,credential:t})}}if(await O(f),k(),S&&d&&C){let t=ml(d);t&&LC({context:e,sessionAuthority:S,factor:{kind:`passkey`,rpId:s.getRpId(),credentialIdB64u:hl(d),prfFirstB64u:t},ownedFactorSecret:F(t).slice().buffer,custodyEnvelope:C.envelope})}let M=bx({identity:l,accountSubject:t}),ee=T?{...M,...T.kind===`threshold_login_warmup_ready`?{signingSession:T.signingSession}:{}}:M;return J(i,u,{phase:W.STEP_06_SESSION_READY,status:`succeeded`,authMethod:d?`passkey`:void 0}),await Ds({context:e,authMethod:p,unlockSubjectId:u,loginResult:ee,onEvent:i,afterCall:o})}catch(t){return console.warn(`[login] unlock failed before active session commit`,{unlockSubjectId:u,message:t&&typeof t==`object`&&`message`in t?String(t.message||``):String(t||``)}),await Yx({context:e,walletId:l.walletId}),await xs({unlockSubjectId:u,message:Ot(t,`login`)||`Login failed`,error:t,cancelled:Dt(t),onEvent:i,onError:a,afterCall:o})}}async function Yx(e){await G.clearLastProfileSelection().catch(()=>void 0);try{e.context.signingEngine.getNonceCoordinator().clearAll()}catch{}try{await e.context.signingEngine.clearVolatileWarmSigningMaterial(e.walletId)}catch{}}function Xx(e){return Yl(e)?e.activation.session.threshold_session_id:e.session.threshold_session_id}function Zx(e){return Yl(e)?e.authorization:{record:e.session.wallet_session,operationCredential:e.session.operation_credential}}function Qx(e){if(!e.wantsEcdsaWarmup)return null;if(e.completedActivation){let t;try{let n=e.completedActivation.sessionActivation;if(Yl(n))t=ze(n.authorization.operationCredential);else{let n=e.completedActivation.response;if(n.kind!==`router_ab_ecdsa_post_registration_session_activated_v1`)throw Error(`completed ECDSA unlock activation branch is invalid`);t=ze(n.session.operation_credential)}}catch{throw Error(`[login] completed ECDSA unlock omitted a valid Wallet Session operation credential`)}return{kind:`wallet_session_operation_credential_v1`,operationCredential:t}}let t=Kb({request:e.request??null,routeAuthorization:e.routeAuthorization});if(t?.kind===`webauthn`)throw Error(`[login] ECDSA warm-up requires the Wallet Session minted by the unlock assertion`);return t}function $x(e){let t=e.continuity.signers.find(t=>V(t.chainTarget)===e.prepared.targetKey);if(!t)throw Error(`Passkey ECDSA custody continuity omitted the requested chain target`);let n=t.walletKey.publicCapability,r=t.activationReceipt,i=r.ecdsa_activation,a=e.response.normal_signing.scope;if(t.walletKey.walletId!==e.walletId||t.walletKey.keyHandle!==e.prepared.policy.key_handle||e.response.session.threshold_session_id!==e.prepared.policy.session_policy.threshold_session_id||!vS(t.runtimePolicyScope,e.prepared.policy.session_policy.runtime_policy_scope)||!Vr(e.response.public_capability,n)||!si(e.activationReceipt,r)||n.context.application_binding_digest_b64u!==i.context.application_binding_digest_b64u||!Ur(n.public_identity,i.public_identity)||!Br(n.material_activation,i.material_activation)||!Qr(n.signer_set.selected_server,i.signing_worker)||n.activation_epoch!==i.activation_epoch||a.context.application_binding_digest_b64u!==i.context.application_binding_digest_b64u||!Ur(a.public_identity,i.public_identity)||!Br(a.material_activation,i.material_activation)||!Qr(a.signing_worker,i.signing_worker)||a.activation_epoch!==i.activation_epoch||a.wallet_id!==e.walletId||a.ecdsa_threshold_key_id!==t.walletKey.ecdsaThresholdKeyId||a.signing_root_id!==t.walletKey.signingRootId||a.signing_root_version!==t.walletKey.signingRootVersion)throw Error(`Passkey ECDSA session activation changed custody continuity`)}function eS(e){let t=e.signer.walletKey.publicCapability.public_identity;if(e.publicFacts.contextBinding32B64u!==t.context_binding_b64u||e.publicFacts.derivationClientSharePublicKey33B64u!==t.derivation_client_share_public_key33_b64u||e.publicFacts.relayerPublicKey33B64u!==t.server_public_key33_b64u||e.publicFacts.groupPublicKey33B64u!==t.threshold_public_key33_b64u||e.publicFacts.ethereumAddress!==MS(t.ethereum_address20_b64u)||e.publicFacts.clientShareRetryCounter!==t.client_share_retry_counter||e.publicFacts.relayerShareRetryCounter!==t.server_share_retry_counter)throw Error(`Passkey ECDSA custody rejoin changed registered public identity`)}async function tS(e){let t=String(e.unlock.credential.rawId||e.unlock.credential.id||``).trim();if(!t)throw Error(`[login] passkey assertion credential id is missing`);await Rs({walletId:e.walletId,credentialIdB64u:t,envelope:e.unlock.custody.envelope})}async function nS(e){let t=Go(e.context.configs.network.chains);if(!fx({subjectSet:e.walletIdentity.subjectSet,selection:e.selection,hasConfiguredEcdsaTargets:t.length>0}).wantsEcdsaWarmup)return null;let n=t[0];if(!n)return null;let r=await cC(e.context,e.walletIdentity.walletId,void 0,`passkey`),i=V(n.chainTarget),a=r.ecdsaKeys.find(e=>e.targetKey===i);if(!a)throw ZS(i);let o=r.runtimePolicyScope;if(!o)throw Error(`[login] passkey ECDSA activation requires runtime policy scope`);let s=JS(qS(`threshold-ecdsa-login`)),c=YS(qS(`wallet-session-mint`));return{targetKey:i,requiresCustodyRejoin:!a.existingRoleLocalMaterial,policy:{kind:`router_ab_ecdsa_post_registration_session_activation_policy_v1`,key_handle:a.keyHandle,session_policy:{threshold_session_id:s,wallet_session_mint_id:c,ttl_ms:e.ttlMs,remaining_uses:e.remainingUses,runtime_policy_scope:o}}}}function rS(e){switch(e.walletIdentity.kind){case`near_ed25519_capable_wallet`:return{kind:`requested`,remainingUses:e.remainingUses};case`evm_family_ecdsa_only_wallet`:return{kind:`not_requested`};default:return Q(e.walletIdentity)}}function iS(e){return e.activation?{type:`passkey_assertion`,challengeId:e.challengeId,walletId:String(e.walletIdentity.walletId),webauthn_authentication:e.credential,ed25519SessionRequest:e.ed25519SessionRequest,expected_origin:e.expectedOrigin,ecdsaSessionPolicy:e.activation.policy}:{type:`passkey_assertion`,challengeId:e.challengeId,webauthn_authentication:e.credential,ed25519SessionRequest:e.ed25519SessionRequest,expected_origin:e.expectedOrigin}}async function aS(e){let t=hl(e.credential);if(!t)throw Error(`Passkey Wallet Session adoption requires WebAuthn credential identity`);let n=await Po({walletId:e.walletIdentity.walletId,rpId:e.rpId,credentialIdB64u:t}),r=await Io({walletId:e.walletIdentity.walletId,authorization:e.authorization});if(e.authorization.record.walletId!==e.walletIdentity.walletId||e.authorization.record.authMethodId!==n.walletAuthMethodId||e.authorization.record.authorityId!==n.walletAuthorityId||r.reference.walletId!==e.walletIdentity.walletId)throw Error(`Passkey Wallet Session authorization changed auth-method identity`);return r}function oS(e,t){return{...e,session_policy:{...e.session_policy,wallet_session_mint_id:YS(t)}}}async function sS(e,t){J(e.onEvent,e.unlockSubjectId,{phase:W.STEP_03_PASSKEY_CHALLENGE_STARTED,status:`running`,authMethod:`passkey`});let n=await fetch(c(e.relayUrl,`/wallet/unlock/challenge`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({unlockBackend:`passkey`,userId:String(e.walletIdentity.walletId),rpId:e.rpId})}),r=await n.json().catch(()=>({})),i=A(r)?r:{},a=typeof i.message==`string`?i.message:``;if(!n.ok||i.ok!==!0)throw Error(a||`wallet/unlock/challenge failed (HTTP ${n.status})`);let o=String(i.challengeId||``).trim(),s=String(i.challengeB64u||``).trim();if(!o||!s)throw Error(`wallet/unlock/challenge returned invalid challenge`);let l=e.activation?{...e.activation,policy:oS(e.activation.policy,o)}:null,u=dx({authenticators:e.authenticators,signerSlot:e.signerSlot,serverCredentialIds:ux(i.credentialIds)}),d=await e.collectCredentialForChallenge({challengeB64u:s,credentialIds:u}),f=String(e.expectedOrigin??(typeof window<`u`?window.location.origin:``)).trim();if(!f)throw Error(`[login] passkey wallet unlock requires an expected origin`);let p=iS({challengeId:o,credential:d,ed25519SessionRequest:rS({walletIdentity:e.walletIdentity,remainingUses:e.remainingUses}),expectedOrigin:f,walletIdentity:e.walletIdentity,activation:l}),m=await Po({walletId:e.walletIdentity.walletId,rpId:e.rpId,credentialIdB64u:hl(d)}),h=await no({walletId:e.walletIdentity.walletId,authMethodId:m.walletAuthMethodId}),g=await ho(e.relayUrl,p,t);if(!g.success)throw Error(g.error||`Passkey wallet unlock failed`);if(!g.walletCustody)throw Error(`Passkey wallet unlock omitted wallet custody continuity`);if(l&&(!g.ecdsaSession||!g.ecdsaActivationReceipt||!g.ecdsaCustody))throw Error(`Passkey wallet unlock omitted the requested ECDSA activation`);let _=g.walletSessionAuthorization??null;_&&await oo({session:_.record,previous:h});let v=_?await aS({walletIdentity:e.walletIdentity,rpId:e.rpId,credential:d,authorization:_}):null,y=null;if(l&&g.ecdsaSession&&g.ecdsaActivationReceipt&&g.ecdsaCustody&&g.ecdsaSession.kind===`router_ab_ecdsa_credential_free_session_activated_v1`){let e=g.walletSessionAuthorization;if(!e)throw Error(`Passkey credential-free activation omitted exact Wallet Session authority`);if(!v)throw Error(`Passkey credential-free activation omitted exact Passkey authority`);y={kind:`credential_free_ecdsa_session_activation_authorization_v1`,activation:g.ecdsaSession,authorization:e}}l&&g.ecdsaSession&&g.ecdsaActivationReceipt&&g.ecdsaCustody&&($x({walletId:String(e.walletIdentity.walletId),prepared:l,response:g.ecdsaSession,activationReceipt:g.ecdsaActivationReceipt,continuity:g.ecdsaCustody}),g.ecdsaSession.kind===`router_ab_ecdsa_post_registration_session_activated_v1`&&(y=g.ecdsaSession));let b=y?await aS({walletIdentity:e.walletIdentity,rpId:e.rpId,credential:d,authorization:Zx(y)}):null;if(_&&await K.writeExactWithOperationCredential(_),l?.requiresCustodyRejoin){if(!(`ecdsaCustody`in g)||!g.ecdsaCustody)throw Error(`Passkey wallet unlock omitted ECDSA custody rejoin continuity`);let t=ml(d);if(!t)throw Error(`Passkey ECDSA custody rejoin requires WebAuthn PRF.first`);let n=hl(d),r=b?.reference??v?.reference??await Is({walletId:e.walletIdentity.walletId,rpId:e.rpId,credentialIdB64u:n});await PS({signingEngine:e.context.signingEngine,walletId:String(e.walletIdentity.walletId),custody:g.walletCustody,continuity:g.ecdsaCustody,authority:r,passkeyPrfFirstB64u:t})}return{credential:d,activation:l&&g.ecdsaSession&&y&&b?{...l,response:g.ecdsaSession,sessionActivation:y,authorizationIdentity:b.identity,activationReceipt:g.ecdsaActivationReceipt,continuity:g.ecdsaCustody}:null,custody:g.walletCustody,result:g}}var cS=class{promise;resolvePromise;rejectPromise;settled=!1;constructor(){this.promise=new Promise(this.capturePromise.bind(this))}resolve(e){this.settled||(this.settled=!0,this.resolvePromise(e))}reject(e){this.settled||(this.settled=!0,this.rejectPromise(I(e)))}async wait(){return await this.promise}capturePromise(e,t){this.resolvePromise=e,this.rejectPromise=t}};async function lS(e,t){e.sharedState.ed25519.thresholdSessionId=String(t.thresholdSessionId),e.sharedState.ed25519.authorizationId=t.authorizationId,e.sharedState.ed25519.walletSessionId=t.walletSessionId,e.sharedState.ed25519.quotaId=t.quotaId,e.sharedState.ed25519.operationCredential=t.operationCredential,e.sharedState.ed25519.expiresAtMs=t.expiresAtMs,e.sharedState.ed25519.remainingUses=t.remainingUses,e.sharedState.ed25519.runtimePolicyScope=t.runtimePolicyScope,e.authorityDeferred?.resolve(t)}function uS(e,t){e?.reject(t)}function dS(e){return{sessionId:String(e.session.thresholdSessionId),status:`active`,authMethod:e.authMethod,...e.authMethod===z.emailOtp?{retention:`session`}:{},remainingUses:e.session.remainingUses,expiresAtMs:e.session.expiresAtMs}}function fS(e){return e?.kind===`opaque_wallet_session_operation_credential_v1`}function pS(e){let t=e.thresholdEcdsaKeyRef.backendBinding;if(t)switch(t.materialKind){case`role_local_worker_handle`:case`role_local_durable_sealed_ref`:case`role_local_durable_public_anchor`:return t.publicFacts.publicCapability;case`role_local_ready_state_blob`:return t.ecdsaRoleLocalReadyRecord.publicFacts.publicCapability;case`metadata_only`:return}}function mS(e){return JSON.stringify(e)}function hS(e){let t=pS(e);if(!t)throw Error(`[login] ECDSA bootstrap is missing its public capability`);let n=e.session,r=e.thresholdEcdsaKeyRef.routerAbEcdsaDerivationNormalSigning;if(!r)throw Error(`[login] ECDSA bootstrap is missing normal-signing state`);return{kind:`router_ab_ecdsa_post_registration_session_activated_v1`,public_capability:t,session:{authorization_session_id:n.authorizationSessionId,authorization_id:n.authorizationId,threshold_session_id:JS(n.thresholdSessionId),wallet_session_id:n.walletSessionId,quota_id:n.quotaId,expires_at_ms:n.expiresAtMs,remaining_uses:n.remainingUses,wallet_session:n.walletSession,operation_credential:n.operationCredential},normal_signing:r}}function gS(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function _S(e,t){return e.kind===t.kind&&e.signingWorkerId===t.signingWorkerId}function vS(e,t){return e.orgId===t.orgId&&e.projectId===t.projectId&&e.envId===t.envId&&e.signingRootVersion===t.signingRootVersion}function yS(e){if(e.current.runtimePolicyScope&&e.incoming.runtimePolicyScope&&!vS(e.current.runtimePolicyScope,e.incoming.runtimePolicyScope))throw Error(`[login] threshold ECDSA ${e.source} has a conflicting runtime policy scope`);return My(e.current,e.incoming)}async function bS(e){if(e.targetEcdsaKey.publicCapability.kind===`persisted_public_capability`){let t=e.targetEcdsaKey.publicCapability.value;if(String(t.client_id)!==String(e.walletId))throw Error(`[login] threshold ECDSA persisted public capability wallet mismatch for ${V(e.chainTarget)}`);return t}let t=await ey({walletId:e.walletId,chainTarget:e.chainTarget});if(t.kind!==`resolved`)throw ZS(V(e.chainTarget));let n=t.manifest.durableMaterial.roleLocalPublicFacts;if(String(n.keyHandle)!==String(e.targetEcdsaKey.keyHandle)||String(n.walletId)!==String(e.walletId))throw ZS(V(e.chainTarget));return n.publicCapability}function xS(e){let t=[];for(let n of e)n!==`ed25519`&&n!==`ecdsa`||t.includes(n)||t.push(n);return t}async function SS(e){try{return await e.run(),{kind:`succeeded`,task:e}}catch(t){return e.onFailure?.(t),{kind:`failed`,task:e,error:I(t)}}}async function CS(e){let t=new Map;for(let n of e)t.set(n.signer,n);let n=new Set;for(;t.size>0;){let e=[];for(let r of t.values())r.dependencies.every(e=>n.has(e))&&e.push(r);if(e.length===0)throw Error(`[login] threshold warm-up task dependency graph is unsatisfied`);let r=await Promise.all(e.map(SS)),i=null;for(let e of r)switch(e.kind){case`succeeded`:n.add(e.task.signer),t.delete(e.task.signer);break;case`failed`:i??=e.error;break;default:return Q(e)}if(i)throw i}}function wS(e){if(e.routeAuthorization.kind,e.credentialState.kind===`available`)return{};throw Error(`[login] threshold ECDSA warm-up requires route authorization`)}function TS(e){return String((e&&typeof e==`object`&&`message`in e?e.message:e)||``)}function Q(e){throw Error(`[login] unexpected state: ${String(e)}`)}async function ES(e){switch(e.runtimeScopeBootstrapState.kind){case`available`:return await e.signingEngine.bootstrapEcdsaSession({...e.request,runtimeScopeBootstrap:e.runtimeScopeBootstrapState.runtimeScopeBootstrap});case`unavailable`:return await e.signingEngine.bootstrapEcdsaSession(e.request);default:return Q(e.runtimeScopeBootstrapState)}}function DS(e){if(`operationCredential`in e)return e.operationCredential;throw Error(`[login] wallet custody Ed25519 activation requires the exact issued operation credential`)}async function OS(e){let t=await e.signingEngine.getUserBySignerSlot(e.walletBinding.nearAccountId,e.signerSlot).catch(()=>null);if(t){if(t.walletId!==String(e.walletBinding.walletId)||t.nearEd25519SigningKeyId!==String(e.walletBinding.nearEd25519SigningKeyId)||t.signerSlot!==e.signerSlot)throw Error(`[login] local Ed25519 owner profile identity is invalid`);return}await e.signingEngine.storeUserData({walletId:String(e.walletBinding.walletId),nearAccountId:e.walletBinding.nearAccountId,nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),signerSlot:e.signerSlot,operationalPublicKey:`ed25519:${dn(e.registeredPublicKey)}`,passkeyCredential:{id:e.credentialIdB64u,rawId:e.credentialIdB64u},lastUpdated:Date.now(),version:2})}function kS(e,t){let n=e.ed25519.capability,r=n.registrationContinuity;return{materialActivation:n.materialActivation,lifecycleId:n.lifecycle.lifecycleId,signingRootVersion:n.lifecycle.rootShareEpoch,signingRootId:n.applicationBinding.signing_root_id,signerSetId:n.lifecycle.signerSetId,thresholdSessionId:t,activationTranscriptB64u:P(Uint8Array.from(r.activationTranscript)),activationCapabilityBindingB64u:P(Uint8Array.from(n.activeCapabilityBinding))}}function AS(e){let t=e.custody.ed25519,n=t.capability;if(t.nearAccountId!==String(e.walletBinding.nearAccountId)||t.nearEd25519SigningKeyId!==String(e.walletBinding.nearEd25519SigningKeyId)||t.signerSlot!==e.signerSlot||n.applicationBinding.wallet_id!==String(e.walletBinding.walletId)||n.applicationBinding.near_ed25519_signing_key_id!==String(e.walletBinding.nearEd25519SigningKeyId)||n.applicationBinding.key_creation_signer_slot!==e.signerSlot||n.nearAccountId!==e.walletBinding.nearAccountId||n.lifecycle.accountId!==String(e.walletBinding.walletId)||n.lifecycle.signingWorkerId!==t.relayerKeyId)throw Error(`[login] wallet custody identity does not match the selected signing lane`)}async function jS(e){AS(e);let t=e.custody.ed25519.capability,r=await e.signingEngine.loadWalletCustodyEd25519Material({nearAccountId:String(e.walletBinding.nearAccountId),signerSlot:e.signerSlot,expectedRegisteredPublicKeyB64u:P(Uint8Array.from(t.registeredPublicKey))}),i=n(e.walletSession.thresholdSessionId);if(!i.ok)throw Error(`[login] wallet custody returned an invalid threshold session identity`);let a=kS(e.custody,i.value),o=mo(e.custody.envelope),s=await no({walletId:e.walletBinding.walletId,authMethodId:e.authority.walletAuthMethodId}),c=null,l=null,u=null;try{if(r.kind===`found`)u=F(e.passkeyPrfFirstB64u),c=await to({material:r.material,activation:a,envelope:o,ownedFactorSecret:u});else{let n=_s(e.custody.envelope);if(!n.ok)throw Error(n.reason);l=F(e.passkeyPrfFirstB64u),u=F(e.passkeyPrfFirstB64u);let r=await e.signingEngine.rejoinWalletCustodyNearEd25519KeySet({walletId:String(e.walletBinding.walletId),custodyJson:n.custodyJson,factorSecret:l.buffer,nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),recoveryBasis:t,routerOrigin:new URL(e.relayerUrl).origin,walletSessionToken:DS(e.walletSession).token}),i={kind:ec,applicationBindingDigestB64u:r.localMaterial.applicationBindingDigestB64u,registeredPublicKeyB64u:P(r.metadata.registeredPublicKey),participantIds:r.metadata.participantIds,stateEpoch:String(r.metadata.stateEpoch),walletId:String(e.walletBinding.walletId),nearAccountId:String(e.walletBinding.nearAccountId),nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),signerSlot:e.signerSlot,signingWorkerId:e.custody.ed25519.relayerKeyId,signingWorkerVerifyingShareB64u:P(r.metadata.signingWorkerVerifyingShare)},a={ciphertextB64u:r.localMaterial.b64u,nonceB64u:r.localMaterial.nonceB64u};try{await e.signingEngine.persistWalletCustodyEd25519Material({binding:i,sealed:a})}catch(e){console.warn(`[login] wallet custody cache write failed; continuing with verified material`,{error:e})}c=await to({material:{binding:i,sealed:a},activation:Vo(r.metadata),envelope:o,ownedFactorSecret:u})}if(!c)throw Error(`[login] wallet custody produced no active client`);let i=n(c.metadata().scope.threshold_session_id);if(!i.ok)throw Error(`[login] wallet custody returned an invalid threshold session identity`);if(i.value!==e.walletSession.thresholdSessionId)throw Error(`[login] wallet custody changed the threshold session identity`);let d=e.custody.envelope.factor;if(d.kind!==`passkey`)throw Error(`[login] wallet custody returned a different factor authority`);await OS({signingEngine:e.signingEngine,walletBinding:e.walletBinding,signerSlot:e.signerSlot,credentialIdB64u:d.credentialIdB64u,registeredPublicKey:c.metadata().registeredPublicKey}),await As({store:G,activeClient:c,identity:{walletId:String(e.walletBinding.walletId),nearAccountId:String(e.walletBinding.nearAccountId),nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),thresholdSessionId:i.value,signerSlot:e.signerSlot,rpId:d.rpId,credentialIdB64u:d.credentialIdB64u,signingRootId:t.applicationBinding.signing_root_id,signingRootVersion:t.lifecycle.rootShareEpoch,signingWorkerId:e.custody.ed25519.relayerKeyId},stableServerScope:{relayerKeyId:e.custody.ed25519.relayerKeyId,participantIds:e.custody.ed25519.participantIds,runtimePolicyScope:t.runtimePolicyScope,routerAbNormalSigning:e.routerAbNormalSigning},passkeyPrfFirstB64u:e.passkeyPrfFirstB64u});let f=await e.signingEngine.activateVerifiedNearEd25519YaoMaterial({activeClient:c,facts:{thresholdSessionId:i.value,signer:nl({walletId:e.walletBinding.walletId,nearAccountId:e.walletBinding.nearAccountId,nearEd25519SigningKeyId:e.walletBinding.nearEd25519SigningKeyId,signerSlot:e.signerSlot}),signingRootId:t.applicationBinding.signing_root_id,signingRootVersion:t.lifecycle.rootShareEpoch,routerAbNormalSigning:e.routerAbNormalSigning,runtimePolicyScope:t.runtimePolicyScope,relayerUrl:e.relayerUrl}}),p=Ao({walletId:String(e.walletBinding.walletId),nearAccountId:String(e.walletBinding.nearAccountId),nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),walletSessionId:e.walletSession.walletSessionId,authorizationId:e.walletSession.authorizationId,quotaId:e.walletSession.quotaId,thresholdSessionId:i.value,remainingUses:e.walletSession.remainingUses,expiresAtMs:e.walletSession.expiresAtMs,runtimePolicyScope:e.walletSession.runtimePolicyScope,signingRootId:t.applicationBinding.signing_root_id,signingRootVersion:t.lifecycle.rootShareEpoch,routerAbNormalSigning:e.routerAbNormalSigning,walletSessionToken:DS(e.walletSession).token,home:DS(e.walletSession).home,nowMs:Math.min(Date.now(),e.walletSession.expiresAtMs-1)});if(!p.ok)throw Error(`[login] wallet custody returned an unusable Ed25519 Wallet Session: ${p.reason}`);let m=os({walletId:e.walletBinding.walletId,nearAccountId:e.walletBinding.nearAccountId,nearEd25519SigningKeyId:e.walletBinding.nearEd25519SigningKeyId,signerSlot:e.signerSlot,rpId:ua(d.rpId),credentialIdB64u:d.credentialIdB64u,relayerUrl:e.relayerUrl,authority:e.authority,signingWalletSession:p.value});return await No({persistence:e.signingEngine,session:m,prfFirstB64u:e.passkeyPrfFirstB64u,ed25519Restore:So({rpId:d.rpId,nearAccountId:String(e.walletBinding.nearAccountId),nearEd25519SigningKeyId:String(e.walletBinding.nearEd25519SigningKeyId),relayerKeyId:e.custody.ed25519.relayerKeyId,participantIds:e.custody.ed25519.participantIds,runtimePolicyScope:e.walletSession.runtimePolicyScope,signerSlot:e.signerSlot,routerAbNormalSigning:e.routerAbNormalSigning,credentialIdB64u:d.credentialIdB64u,materialActivation:f.materialActivation}),materialActivation:f.materialActivation}),await e.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({existingEnvelope:e.custody.envelope,passkeyPrfFirstB64u:e.passkeyPrfFirstB64u,walletId:String(e.walletBinding.walletId),walletAuthMethodId:String(e.authority.walletAuthMethodId),walletSessionId:String(e.walletSession.walletSessionId),expiresAtMs:e.walletSession.expiresAtMs}),r.kind===`found`?{kind:`unchanged`}:{kind:`recovered`,materialActivation:f.materialActivation,previousAuthority:s}}catch(e){throw c?.dispose(),e}finally{l?.fill(0),u?.fill(0)}}function MS(e){let t=F(e);if(t.length!==20)throw Error(`[login] ECDSA custody address is invalid`);let n=`0x`;for(let e of t)n+=e.toString(16).padStart(2,`0`);return n}function NS(e){let[t,...n]=e;if(!t)throw Error(`[login] passkey ECDSA custody continuity is empty`);return[t.chainTarget,...n.map(e=>e.chainTarget)]}async function PS(e){let t=e.continuity.signers[0];if(!t)throw Error(`[login] passkey ECDSA custody continuity is empty`);if(t.walletKey.walletId!==e.walletId)throw Error(`[login] passkey ECDSA custody continuity changed wallet identity`);for(let n of e.continuity.signers)if(n.walletKey.walletId!==t.walletKey.walletId||n.walletKey.keyHandle!==t.walletKey.keyHandle||n.walletKey.ecdsaThresholdKeyId!==t.walletKey.ecdsaThresholdKeyId||n.walletKey.signingRootId!==t.walletKey.signingRootId||n.walletKey.signingRootVersion!==t.walletKey.signingRootVersion||n.walletKey.relayerKeyId!==t.walletKey.relayerKeyId||!Vr(n.walletKey.publicCapability,t.walletKey.publicCapability)||!si(n.activationReceipt,t.activationReceipt)||!vS(n.runtimePolicyScope,t.runtimePolicyScope))throw Error(`[login] passkey ECDSA custody continuity conflicts across targets`);let n=_s(e.custody.envelope);if(!n.ok)throw Error(n.reason);let r=F(e.passkeyPrfFirstB64u);try{let i=await e.signingEngine.rejoinWalletCustodyEvmFamilyKeySet({walletId:e.walletId,custodyJson:n.custodyJson,factorSecret:r.buffer,evmFamilySigningKeySlotId:da({walletId:e.walletId,signingRootId:t.walletKey.signingRootId,signingRootVersion:t.walletKey.signingRootVersion}),applicationBindingDigestB64u:t.walletKey.publicCapability.context.application_binding_digest_b64u,registeredClientRootPublicKey33B64u:t.walletKey.derivationClientSharePublicKey33B64u,relayerPublicIdentityJson:JSON.stringify({relayerKeyId:t.walletKey.relayerKeyId,relayerPublicKey33B64u:t.activationReceipt.ecdsa_activation.public_identity.server_public_key33_b64u,groupPublicKey33B64u:t.activationReceipt.ecdsa_activation.public_identity.threshold_public_key33_b64u,ethereumAddress:MS(t.activationReceipt.ecdsa_activation.public_identity.ethereum_address20_b64u),relayerShareRetryCounter:t.activationReceipt.ecdsa_activation.public_identity.server_share_retry_counter})});eS({publicFacts:i.publicFacts,signer:t}),await e.signingEngine.restoreWalletCustodyEcdsaContinuity({authority:e.authority,chainTargets:NS(e.continuity.signers),walletId:t.walletKey.walletId,keyHandle:t.walletKey.keyHandle,ecdsaThresholdKeyId:t.walletKey.ecdsaThresholdKeyId,signingRootId:t.walletKey.signingRootId,signingRootVersion:t.walletKey.signingRootVersion,relayerKeyId:t.walletKey.relayerKeyId,participantIds:t.walletKey.participantIds,publicCapability:t.walletKey.publicCapability,activationReceipt:t.activationReceipt,runtimePolicyScope:t.runtimePolicyScope,readyStateBlobB64u:i.readyStateBlobB64u,publicFacts:i.publicFacts})}finally{r.fill(0)}}async function FS(e){let t=xS(e.signersToWarm),n=e.credentialState.kind===`available`?e.credentialState.credential:void 0,r=e.credentialState.localPasskeyCredentialIdB64u,i=e.runtimeScopeBootstrapState.kind===`available`?e.runtimeScopeBootstrapState.runtimeScopeBootstrap:null,a=e.ecdsaContext,o={activeCanonicalEcdsaContext:a,ed25519:{thresholdSessionId:``,authorizationId:null,walletSessionId:null,quotaId:null,operationCredential:null,expiresAtMs:0,remainingUses:0,runtimePolicyScope:null}},s=e.ecdsaDependency.kind===`ed25519_wallet_session_authority`?new cS:null,c={generatedThresholdSessionId:e.passkeyExchangeEcdsaActivation?.policy.session_policy.threshold_session_id||``},l=e.unlockRemainingUses,u=[],d=null,f={outcome:{kind:`unchanged`}},p=null,m=[];if(t.includes(`ed25519`)&&m.push({signer:`ed25519`,dependencies:e.ed25519DependsOnEcdsa?[`ecdsa`]:[],onFailure:s?uS.bind(void 0,s):null,run:async()=>{let t=hb(e.walletIdentity),c=p,u=$b({authority:Qb(e.ed25519SessionAuthority),walletId:t.walletId,rpId:e.context.signingEngine.getRpId(),credentialIdB64u:r}),m=nx({mintPlan:e.ed25519MintPlan,ecdsaMint:c,walletBinding:t,signerSlot:e.signerSlot,authority:u}),h=ix({mintPlan:e.ed25519MintPlan,fallback:{relayerKeyId:e.relayerKeyId,participantIds:e.participantIds,runtimePolicyScope:a.runtimePolicyScope??null,routerAbNormalSigning:oy(e.context.configs)}}),g={relayerUrl:e.relayerUrl,relayerKeyId:h.relayerKeyId,runtimePolicyScope:h.runtimePolicyScope||void 0,routerAbNormalSigning:h.routerAbNormalSigning,runtimeScopeBootstrap:i||void 0,participantIds:h.participantIds,ttlMs:e.ttlMs,remainingUses:l,onWalletSessionAuthorityReady:lS.bind(void 0,{sharedState:o,authorityDeferred:s})},_=m.kind===`fresh_ed25519_provisioning`?{...m,walletId:String(t.walletId),nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,signerSlot:e.signerSlot,...g}:{...m,...g},v;switch(u.kind){case`email_otp`:v=await e.signingEngine.connectEd25519Session({..._,source:`email_otp`,authority:u.authority,emailOtpAuthContext:u.emailOtpAuthContext,materialActivation:void 0});break;case`passkey`:if(!e.passkeyUnlockEd25519Session)throw Error(`[login] verified wallet unlock omitted its Ed25519 Wallet Session`);if(e.ed25519MintPlan.kind!==`wallet_custody`)throw Error(`[login] verified unlock Ed25519 session requires wallet custody`);v=ax({session:e.passkeyUnlockEd25519Session,walletBinding:t,signerSlot:e.signerSlot,custody:e.ed25519MintPlan.custody,provisionScope:h,credential:n,remainingUses:l,unlockAuthorization:e.passkeyUnlockWalletSessionAuthorization});break;default:return Q(u)}if(!v.ok){let e=String(v.message||v.code||`Failed to connect threshold Ed25519 session`);throw Error(`[login] threshold Ed25519 warm-up failed: ${e}`)}if(d=v,!v.thresholdSessionId)throw Error(`[login] threshold Ed25519 warm-up did not return a thresholdSessionId`);let y=u.kind===`passkey`?await Is({walletId:t.walletId,rpId:e.context.signingEngine.getRpId(),credentialIdB64u:hl(n||void 0)||r}):await H({authority:u.authority.authority});if(e.ed25519MintPlan.kind===`wallet_custody`){if(u.kind!==`passkey`)throw Error(`[login] wallet custody requires passkey authority`);let r=rx(m,e.ed25519MintPlan),i=n?ml(n):``;if(!i)throw Error(`[login] wallet custody requires WebAuthn PRF.first`);f.outcome=await e.signingEngine.withExactEd25519MaterialOwner({materialActivation:r,nearAccountId:t.nearAccountId,task:jS.bind(void 0,{signingEngine:e.signingEngine,custody:e.ed25519MintPlan.custody,walletBinding:t,signerSlot:e.signerSlot,passkeyPrfFirstB64u:i,walletSession:v,authority:y,routerAbNormalSigning:h.routerAbNormalSigning,relayerUrl:e.relayerUrl})})}}}),t.includes(`ecdsa`)&&m.push({signer:`ecdsa`,dependencies:[],onFailure:null,run:async()=>{await s?.promise;let t=null,i=!1,a=new Map,d=Go(e.context.configs.network.chains),f=e=>{let t=Ny({context:o.activeCanonicalEcdsaContext,configuredTargets:d});if(t.kind===`complete_configured_target_keys`){o.activeCanonicalEcdsaContext=t.context;return}t.kind!==`missing_configured_target_keys`&&Py({completion:t,source:e})},m=e=>{if(p)return;let t=e.session.operationCredential,i=n?ml(n):``,a=hl(n||void 0)||r;!t.token||!i||!a||(p={operationCredential:t,passkeyPrfFirstB64u:i,passkeyCredentialIdB64u:a,quotaId:e.session.quotaId})},h=()=>{if(o.ed25519.operationCredential)return{routeAuth:o.ed25519.operationCredential};let n=p?.operationCredential;return n?{routeAuth:n}:t||(t=wS({credentialState:e.credentialState,routeAuthorization:e.routeAuthorization}),t)},g=async(t,n)=>{if(!n.key)throw Error(`[login] threshold ECDSA warm-up requires configured target key identity`);let s=await bS({walletId:e.walletIdentity.walletId,chainTarget:t.chainTarget,targetEcdsaKey:n}),u=a.get(mS(s)),d=e.passkeyExchangeEcdsaActivation,f=d&&!i&&d.targetKey===V(t.chainTarget)?d:null,p=f?{sessionActivation:f.sessionActivation,authorizationIdentity:f.authorizationIdentity}:u??null,m=p?Xx(p.sessionActivation):$S({sharedState:c}),g=o.activeCanonicalEcdsaContext.runtimePolicyScope;if(!g)throw Error(`[login] ECDSA session lane requires runtimePolicyScope`);let _=fa({chainTarget:t.chainTarget,thresholdSessionId:m,ttlMs:e.ttlMs,remainingUses:l,runtimePolicyScope:g}),v=n.existingRoleLocalMaterial;if(!v)throw ZS(V(t.chainTarget));if(!r)throw Error(`[login] ECDSA role-local activation requires passkey identity`);let y=v.authority;if(p)return f&&(i=!0),await ES({signingEngine:e.signingEngine,runtimeScopeBootstrapState:e.runtimeScopeBootstrapState,request:{kind:`passkey_preauthorized_ecdsa_bootstrap`,source:`login`,relayerUrl:e.relayerUrl,keyHandle:sa(n.keyHandle),key:n.key,lanePolicy:_,publicCapability:s,existingRoleLocalMaterial:v,authorizationAuthority:y,authorizationIdentity:p.authorizationIdentity,passkeyCredentialIdB64u:r,sessionActivation:p.sessionActivation}});let b=h().routeAuth;if(!fS(b))throw Error(`[login] ECDSA role-local activation requires a verified Wallet Session`);return await ES({signingEngine:e.signingEngine,runtimeScopeBootstrapState:e.runtimeScopeBootstrapState,request:{kind:`wallet_session_reconnect_ecdsa_bootstrap`,source:`login`,relayerUrl:e.relayerUrl,keyHandle:sa(n.keyHandle),key:n.key,lanePolicy:_,publicCapability:s,existingRoleLocalMaterial:v,authorizationAuthority:y,passkeyCredentialIdB64u:r,routeAuth:b}})},_=async()=>{f(`login ECDSA warm-up preflight`);let t=[],n=e.passkeyExchangeEcdsaActivation?.targetKey||null;if(n)for(let e of d)V(e.chainTarget)===n&&t.push(e);for(let e of d)V(e.chainTarget)!==n&&t.push(e);for(let n of t){let t=V(n.chainTarget),r=o.activeCanonicalEcdsaContext.ecdsaKeys.find(e=>e.targetKey===t),i=String(r?.keyHandle||``).trim();if(!r?.key||!i)throw ZS(t);let s=await g(n,r);u.push(s),fs({statusReads:e.statusReads,trigger:`unlock`,signingEngine:e.signingEngine,walletId:e.walletIdentity.walletId,chainTarget:n.chainTarget}),m(s);let c=hS(s),l=mS(c.public_capability);if(!a.has(l)){let t=await Io({walletId:e.walletIdentity.walletId,authorization:{record:s.session.walletSession,operationCredential:s.session.operationCredential}});a.set(l,{sessionActivation:c,authorizationIdentity:t.identity})}if(String(s.thresholdEcdsaKeyRef?.keyHandle||``).trim()!==r.keyHandle)throw Error(`[login] threshold ECDSA warm-up returned a different keyHandle for ${t}`)}if(e.passkeyExchangeEcdsaActivation&&!i)throw Error(`[login] passkey exchange ECDSA activation did not match a configured target`)};try{await _()}catch(e){let t=TS(e)||`Failed to bootstrap threshold ECDSA session`;throw Error(`[login] threshold ECDSA warm-up failed: ${t}`)}}}),await CS(m),f.outcome.kind===`recovered`){if(!e.passkeyUnlockWalletSessionAuthorization)throw Error(`Recovered passkey material requires its exact Wallet Session`);await Ps({authorization:e.passkeyUnlockWalletSessionAuthorization,materialActivation:f.outcome.materialActivation,relayerUrl:e.relayerUrl,statusReads:e.statusReads,previousAuthority:f.outcome.previousAuthority})}return{ecdsaBootstraps:u,ed25519Session:d}}async function IS(e,t,n){let r=e.signingEngine.readWalletAuthenticationState(),i=t??(r.kind===`signed_out`?void 0:r.walletId),a=null,o=null;if(i!==void 0){let e=_(String(i));if(e.ok){if(a=e.value,o=await vy({walletId:e.value,ports:mg}),o.kind===`upgrade_required`)throw new Oa(`[WalletSession] Wallet Session authorization requires a newer client`);o.kind===`missing`&&(r={kind:`signed_out`})}}let s=await sb(i);if(s.kind===`no_session_for_wallet`){let e=await wx(String(s.walletId));e&&(s={kind:`resolved`,walletId:s.walletId,subjectSet:e,source:`local_wallet_authority`})}let c=!1;if(s.kind===`no_session_request`)return lt();if(s.kind===`no_session_for_wallet`){let t=await Hy(s.walletId);if(t.kind!==`resolved`)return await zS({context:e,walletId:s.walletId,reason:`activation_reconciliation_failed`});if(t.selectors.length>0){c=!0;let n=await vb({workerCtx:e.signingEngine.getSignerWorkerContext(),selectors:t.selectors});if(n.didFinalize&&(s=await sb(s.walletId)),s.kind===`no_session_for_wallet`&&n.kind!==`settled`)return await zS({context:e,walletId:s.walletId,reason:n.kind===`pending`?`activation_reconciliation_pending`:`activation_reconciliation_failed`})}}if(s.kind===`no_session_for_wallet`)return await zS({context:e,walletId:s.walletId,reason:s.reason});if(s.kind===`no_session_request`)return lt();if(s.kind===`unresolvable_profile`)return console.warn(`[WalletSession] wallet session profile is unresolvable`,{profileId:s.profileId,reason:s.reason}),lt();if(s.kind===`unresolvable`)return console.warn(`[WalletSession] wallet session identity is unresolvable`,{walletId:String(s.walletId),reason:s.reason}),await zS({context:e,walletId:s.walletId,reason:s.reason});let l=_b(s.subjectSet);!c&&l.length>0&&yb(await vb({workerCtx:e.signingEngine.getSignerWorkerContext(),selectors:l})),e.signingEngine.assertSealedRefreshStartupParity().catch(e=>{console.warn(`[WalletSession] sealed refresh startup parity check failed during session read; continuing with cached login state`,e instanceof Error?e.message:String(e||`unknown error`))});let[u,d]=await Promise.all([OC(e,s),BS(e,s.walletId,n)]),f=o&&a&&String(a)===String(s.walletId)?o:await vy({walletId:s.walletId,ports:mg}),p={kind:`signed_out`};switch(f.kind){case`authenticated`:await RS(e,f.state)&&(p=f.state);break;case`missing`:break;case`upgrade_required`:throw new Oa(`[WalletSession] Wallet Session authorization requires a newer client`)}let m=xC({subjectSet:p.kind===`authenticated`&&f.kind===`authenticated`?LS(s.subjectSet,f.walletAuthMethodId):s.subjectSet,availableLanes:d,configuredEcdsaTargets:Go(e.configs.network.chains).map(e=>e.chainTarget)});return{appIdentity:u,authentication:p,capabilityProjection:m,nonceDiagnostics:VS(e,u.nearAccountId)}}function LS(e,t){let[n,...r]=e.subjects.filter(e=>e.kind!==`evm_family_ecdsa_wallet`||String(e.authority.walletAuthMethodId)===String(t));return n?{...e,subjects:[n,...r]}:e}async function RS(e,t){if(t.authMethod===`voiceid`){let n=e.signingEngine.readWalletAuthenticationState();if(n.kind!==`authenticated`||n.walletId!==t.walletId||n.authMethod!==`voiceid`)return!1}let n=!1;try{let e=await G.resolveSelectedWalletAuthority(String(t.walletId));n=e.kind!==`resolved`||e.selection.lockState!==`unlocked`}catch{n=!0}return n?!1:(e.signingEngine.setWalletAuthenticated(t),!0)}async function zS(e){let[t,n]=await Promise.all([DC(e.context,e.walletId),vy({walletId:e.walletId,ports:mg})]),r={kind:`signed_out`};switch(n.kind){case`authenticated`:await RS(e.context,n.state)&&(r=n.state);break;case`missing`:break;case`upgrade_required`:throw new Oa(`[WalletSession] Wallet Session authorization requires a newer client`)}return{appIdentity:t,authentication:r,capabilityProjection:{kind:`unresolvable`,reason:e.reason},nonceDiagnostics:VS(e.context,t.nearAccountId)}}function BS(e,t,n){return e.signingEngine.readPersistedAvailableSigningLanes({walletId:t},n).then(e=>({kind:`available`,lanes:e})).catch(()=>({kind:`unavailable`}))}function VS(e,t){let n=String(t||``).trim();if(!n)return null;try{return e.signingEngine.getNonceCoordinator().getDiagnostics({accountId:n,emitMetrics:!0})}catch{return null}}function HS(e){let t=String(e||``).trim().toLowerCase();return/^0x[0-9a-f]{40}$/.test(t)?t:``}async function US(e,t){let n=Go(e.configs.network.chains).map(e=>e.chainTarget);if(!n.length)return[];let r=await G.listAccountSignersByProfile({profileId:String(t),status:`active`}).catch(()=>[]),i=[];for(let e of r){let r=Oy({walletId:t,configuredTargets:n,signer:e});r.kind===`active_ecdsa_signer_record`&&i.push(r.walletKey)}return i}async function WS(e,t){let n=[...new Set((await US(e,t)).map(e=>HS(e.keyFacts.thresholdOwnerAddress)).filter(Boolean))];return n.length===1?n[0]:(n.length>1&&console.warn(`[WalletSession] conflicting profile threshold ECDSA addresses`,{walletId:String(t),addresses:n}),null)}function GS(e){if(e.selection.mode===`ed25519_only`)return[`ed25519`];if(!e.configuredEcdsaTargets.length)return e.selection.mode===`ecdsa_only`?[]:[`ed25519`];let t=new Set((e.canonicalEcdsaContext?.ecdsaKeys||[]).map(e=>e.targetKey));if(t.size===0)throw Error(`[login] threshold ECDSA warm-up missing canonical key identity`);let n=e.configuredEcdsaTargets.map(e=>V(e.chainTarget)).filter(e=>!t.has(e));if(n.length)throw Error(`[login] threshold ECDSA warm-up missing configured-target key ids for ${n.join(`, `)}`);return e.selection.mode===`ecdsa_only`?[`ecdsa`]:[`ed25519`,`ecdsa`]}function KS(e){let t=Ny({context:e.storedCanonicalEcdsaContext,configuredTargets:e.selectedEcdsaTargets}),n=Py({completion:t,source:`stored ECDSA key facts`}),r=GS({selection:e.selection,configuredEcdsaTargets:e.selectedEcdsaTargets,canonicalEcdsaContext:n});e.wantsEd25519Warmup&&!r.includes(`ed25519`)&&(r=[`ed25519`,...r]);let i=r.includes(`ed25519`)&&r.includes(`ecdsa`);if(!r.length)throw Error(`[login] ECDSA unlock requested with no configured ECDSA targets`);return{kind:`threshold_login_warmup_plan_ready`,storedCanonicalEcdsaContext:e.storedCanonicalEcdsaContext,configuredTargetKeyCompletion:t,ecdsaContext:n,signersToWarm:r,ed25519DependsOnEcdsa:!1,ecdsaDependsOnEd25519:i}}function qS(e){return ve(e,32,`threshold login warm session IDs`)}function JS(e){let t=l(e);if(!t.ok)throw Error(`[login] failed to create threshold ECDSA session identity`);return t.value}function YS(e){let t=ht(e);if(!t.ok)throw Error(`[login] failed to create Wallet Session mint identity`);return t.value}function XS(e){if(e==null||e<=0)throw Error(`[login] unlock warm-up requires positive unlock session uses`);return e}function ZS(e){let t=Error(`[login] device_link_required: local threshold ECDSA material is unavailable for ${e}`);return t.code=`device_link_required`,t}function QS(){let e=Error(`[login] device_link_required: local threshold Ed25519 material is unavailable`);return e.code=`device_link_required`,e}function $S(e){let t=String(e.sharedState.generatedThresholdSessionId||``).trim();if(t)return t;let n=qS(`threshold-ecdsa-login`);return e.sharedState.generatedThresholdSessionId=n,n}async function eC(e){if(!e.collectCredential)throw Error(`[login] WebAuthn ECDSA key-facts inventory requires a credential collector`);let t=Ry(),n=await zi({walletId:e.walletId,rpId:e.rpId,keyTargets:e.keyTargets,serverNonceB64u:t,...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{}}),r=await e.collectCredential(n);return await Pc({relayerUrl:e.relayerUrl,walletId:e.walletId,rpId:e.rpId,credential:r,keyTargets:e.keyTargets,serverNonceB64u:t,expectedChallengeDigestB64u:n,...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{}})}async function tC(e){let t=String(e.relayerUrl||``).trim(),n=String(e.rpId||``).trim();if(!t||!n)throw Error(`[login] threshold ECDSA key-facts inventory requires relayerUrl and rpId`);return e.authority?.kind===`wallet_session_operation_credential_v1`?await Fc({relayerUrl:t,walletId:e.walletId,rpId:n,operationCredential:e.authority.operationCredential,keyTargets:e.keyTargets}):await eC({walletId:e.walletId,relayerUrl:t,rpId:n,keyTargets:e.keyTargets,...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{},collectCredential:e.collectWebAuthnInventoryCredential})}function nC(e){let t=Oy({walletId:e.walletId,configuredTargets:e.configuredTargets,signer:e.signer});switch(t.kind){case`active_ecdsa_signer_record`:return t.targetKey===V(e.record.walletKey.chainTarget)&&String(t.walletKey.keyHandle)===String(e.record.walletKey.keyHandle);case`key_facts_inventory_required`:return t.targetKey===V(e.record.walletKey.chainTarget)&&t.keyHandle===String(e.record.walletKey.keyHandle);case`blocked`:case`skipped`:return!1}return!1}function rC(e){let t=e.record.walletKey,n=t.keyFacts,r=V(t.chainTarget);return{...e.signer.metadata||{},accountModel:`threshold-ecdsa`,accountAddress:e.record.accountAddress,ownerAddress:e.record.ownerAddress,thresholdOwnerAddress:n.thresholdOwnerAddress,keyScope:n.keyScope,keyHandle:t.keyHandle,walletId:t.walletId,ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,signingRootId:n.signingRootId,signingRootVersion:n.signingRootVersion,publicCapability:e.record.publicCapability,thresholdEcdsaPublicKeyB64u:n.thresholdEcdsaPublicKeyB64u,participantIds:[...n.participantIds],chainTarget:t.chainTarget,targetMembership:{targetKey:r,chainTarget:t.chainTarget},sharedEvmFamilyKey:{walletId:t.walletId,keyScope:n.keyScope,keyHandle:t.keyHandle,ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,signingRootId:n.signingRootId,signingRootVersion:n.signingRootVersion,participantIds:[...n.participantIds],thresholdOwnerAddress:n.thresholdOwnerAddress,thresholdEcdsaPublicKeyB64u:n.thresholdEcdsaPublicKeyB64u},chainId:t.chainTarget.chainId}}async function iC(e){for(let t of e.records){let n=e.walletSigners.filter(n=>nC({walletId:e.walletId,configuredTargets:e.configuredTargets,signer:n,record:t}));if(n.length!==1)throw Error(`[login] authenticated ECDSA key inventory could not identify one profile signer for ${V(t.walletKey.chainTarget)}`);let r=n[0];if(String(t.walletKey.walletId)!==String(e.walletId)||t.accountAddress!==r.accountAddress||t.ownerAddress!==r.accountAddress||String(t.walletKey.keyFacts.thresholdOwnerAddress)!==r.accountAddress)throw Error(`[login] authenticated ECDSA key inventory profile identity mismatch for ${V(t.walletKey.chainTarget)}`);await e.store.activateAccountSigner({account:{profileId:r.profileId,chainIdKey:r.chainIdKey,accountAddress:r.accountAddress,accountModel:`threshold-ecdsa`},signer:{signerId:r.signerId,signerType:r.signerType,signerKind:r.signerKind,signerAuthMethod:r.signerAuthMethod,signerSource:r.signerSource,metadata:rC({signer:r,record:t})},activationPolicy:{mode:`allocate_next_free`},preferredSlot:r.signerSlot,selectAsActive:!1,mutation:{routeThroughOutbox:!1}})}}function aC(e,t){return t?{ecdsaKeys:e,runtimePolicyScope:t}:{ecdsaKeys:e}}function oC(e){let t=e.input?.keyFactsInventoryAuthority||null,n=e.input?.keyFactsInventoryRequested===!0,r=e.input?.relayerUrl||``,i=e.input?.rpId||``,a=e.input?.collectWebAuthnInventoryCredential;return e.runtimePolicyScope?{kind:`runtime_policy_scoped`,keyFactsInventoryAuthority:t,keyFactsInventoryRequested:n,relayerUrl:r,rpId:i,runtimePolicyScope:e.runtimePolicyScope,collectWebAuthnInventoryCredential:a}:{kind:`runtime_policy_unscoped`,keyFactsInventoryAuthority:t,keyFactsInventoryRequested:n,relayerUrl:r,rpId:i,collectWebAuthnInventoryCredential:a}}async function sC(e,t,n){let r=t.map(e=>e.chainTarget),i=await G.listAccountSignersByProfile({profileId:String(e),status:`active`}).catch(()=>[]),a=[],o=[],s=[];for(let t of i){let n=Oy({walletId:e,configuredTargets:r,signer:t});switch(n.kind){case`active_ecdsa_signer_record`:a.push(n);break;case`key_facts_inventory_required`:o.push(n);break;case`blocked`:s.push(n);break;case`skipped`:break;default:}}if(!a.length&&!o.length&&!s.length)return[];let c=Iy({selection:{mode:`ecdsa_only`,ecdsa:!0},configuredTargets:r,activeSignerRecords:a,keyFactsInventoryRequiredRecords:o,blockedRecords:s,runtimeConfig:{explicitKeyFactsInventoryMode:n?.keyFactsInventoryRequested===!0,allowAuthenticatedKeyFactsInventory:!!n?.keyFactsInventoryAuthority}});switch(c.kind){case`ready`:{let t=c.readyTargets.filter(e=>e.publicCapability.kind===`missing_public_capability`),a=new Map,o=[];if(t.length){let r=await tC({walletId:e,relayerUrl:n?.relayerUrl||``,rpId:n?.rpId||``,keyTargets:t.map(e=>({keyHandle:e.walletKey.keyHandle,chainTarget:e.chainTarget})),authority:n?.keyFactsInventoryAuthority||null,...n?.runtimePolicyScope?{runtimePolicyScope:n.runtimePolicyScope}:{},collectWebAuthnInventoryCredential:n?.collectWebAuthnInventoryCredential});o=r.records;for(let e of r.records)a.set(V(e.walletKey.chainTarget),e.publicCapability)}let s=jy({source:`profile continuity`,keys:c.readyTargets.map(e=>Ay({chainTarget:e.chainTarget,keyHandle:e.walletKey.keyHandle,key:Sa(e.walletKey),publicCapability:e.publicCapability.kind===`persisted_public_capability`?e.publicCapability.value:a.get(e.targetKey)}))}),l=s.filter(e=>e.publicCapability.kind===`missing_public_capability`).map(e=>e.targetKey);if(l.length)throw Error(`[login] authenticated ECDSA key inventory did not return public capabilities for ${l.join(`, `)}`);return await iC({store:G,walletId:e,configuredTargets:r,walletSigners:i,records:o}),s}case`no_configured_ecdsa_targets`:return[];case`awaiting_authenticated_key_facts_inventory`:{let a=n?.keyFactsInventoryAuthority;if(!a)throw Error(`[login] threshold ECDSA key-facts inventory requires authenticated inventory authority`);let o=await tC({walletId:e,relayerUrl:n.relayerUrl,rpId:n.rpId,keyTargets:c.keyTargets,authority:a,...n.runtimePolicyScope?{runtimePolicyScope:n.runtimePolicyScope}:{},collectWebAuthnInventoryCredential:n.collectWebAuthnInventoryCredential}),s=Ny({context:{ecdsaKeys:jy({source:`profile continuity inventory`,keys:o.records.map(e=>Ay({chainTarget:e.walletKey.chainTarget,keyHandle:e.walletKey.keyHandle,key:Sa(e.walletKey),publicCapability:e.publicCapability}))})},configuredTargets:t});if(s.kind!==`complete_configured_target_keys`)throw Error(`[login] threshold ECDSA key-facts inventory returned incomplete key facts`);return await iC({store:G,walletId:e,configuredTargets:r,walletSigners:i,records:o.records}),s.context.ecdsaKeys}case`key_facts_inventory_required`:{let e=c.keyFactsInventoryRequiredRecords.map(e=>e.targetKey).join(`, `);throw n?.keyFactsInventoryRequested?Error(`[login] threshold ECDSA key-facts inventory requires authenticated inventory authority for ${e}`):Error(`[login] threshold ECDSA warm-up requires complete local key facts for ${e}; run explicit authenticated ECDSA key-facts inventory before unlock`)}case`blocked`:{let e=c.blockedRecords.map(e=>`${e.targetKey||`unknown`}:${e.reason}`).join(`, `);throw Error(`[login] threshold ECDSA warm-up requires complete local key facts before unlock; run explicit authenticated ECDSA key-facts inventory before unlock; blocked profile signer records: ${e}`)}}return[]}async function cC(e,t,n,r){let i=Go(e.configs.network.chains),a=aC(jy({source:`stored`,keys:[]}),void 0),o=await Zv({walletId:t,chainTargets:i.map(e=>e.chainTarget),...r?{authMethod:r}:{}}),s=[],c;for(let e of o){let t=e.manifest;for(let{chainTarget:n}of i){if(!t.signer.scope.targetMemberships.some(e=>V(e)===V(n)))continue;let r=t.durableMaterial.roleLocalPublicFacts,i=String(r.keyHandle),a=r.publicCapability,o=e.material,l=t.durableMaterial.runtimePolicyScope,u=la({runtimePolicyScope:l});if(String(u.signingRootId)!==String(t.signer.signingRootId)||String(u.signingRootVersion)!==String(t.signer.signingRootVersion))throw Error(`[login] threshold ECDSA canonical runtime policy scope mismatch for ${V(n)}`);if(c&&l&&!vS(c,l))throw Error(`[login] threshold ECDSA durable lanes have conflicting runtime policy scopes`);!c&&l&&(c=l),s.push(Ay({chainTarget:n,keyHandle:i,key:ba({walletId:t.signer.walletId,ecdsaThresholdKeyId:t.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId,signingRootId:t.signer.signingRootId,signingRootVersion:t.signer.signingRootVersion,participantIds:t.signer.registeredPublicFacts.participantIds,thresholdOwnerAddress:t.signer.registeredPublicFacts.thresholdOwnerAddress}),publicCapability:a,existingRoleLocalMaterial:o}))}}let l=jy({source:`available lane`,keys:s});a=yS({current:a,incoming:aC(l,c),source:`durable lanes`});let u=Ny({context:a,configuredTargets:i});if(u.kind===`complete_configured_target_keys`)return u.context;let d=new Set(u.missingTargets),f=await sC(t,i.filter(e=>d.has(V(e.chainTarget))),oC({input:n,runtimePolicyScope:a.runtimePolicyScope}));return a=yS({current:a,incoming:{ecdsaKeys:f},source:`profile continuity`}),a}async function lC(e,t){let n=[...new Set((await US(e,t)).map(e=>String(e.keyFacts.thresholdEcdsaPublicKeyB64u||``).trim()).filter(Boolean))];return n.length===1?n[0]:(n.length>1&&console.warn(`[WalletSession] conflicting profile threshold ECDSA public keys`,{walletId:String(t),publicKeyCount:n.length}),null)}async function uC(e,t){let[n,r]=await Promise.all([WS(e,t),lC(e,t)]);if(n&&r)return{ethereumAddress:n,thresholdEcdsaPublicKeyB64u:r};let i=await Zv({walletId:t,chainTargets:Go(e.configs.network.chains).map(e=>e.chainTarget)}),a=new Set,o=new Set;for(let e of i){let t=e.manifest.signer.registeredPublicFacts;a.add(HS(t.thresholdOwnerAddress)),o.add(t.publicKeyB64u)}return{ethereumAddress:n??(a.size===1?[...a][0]:null),thresholdEcdsaPublicKeyB64u:r??(o.size===1?[...o][0]:null)}}function dC(e){return{kind:`failed`,reason:e}}function fC(){return{kind:`failed`,reason:`persistence_unavailable`}}function pC(e){switch(e.state){case`ready`:return{kind:`ready`};case`restorable`:return{kind:`pending`,resume:`restore_material`};case`deferred`:return{kind:`pending`,resume:`resolve_deferred_state`};case`expired`:return{kind:`authorization_required`,requirement:`wallet_session_expired`};case`exhausted`:return{kind:`authorization_required`,requirement:`wallet_session_exhausted`}}throw Error(`[SeamsWeb] unsupported capability lane readiness`)}function mC(e,t){let n=e.diagnostics?.invalidLanes.find(e=>e.curve===t);return n?n.reason===`ambiguous_material`||n.reason===`conflicting_key_material`?`ambiguous_lane`:`malformed`:null}function hC(e,t){let n=V(t),r=e.diagnostics?.invalidLanes.find(e=>e.curve===`ecdsa`&&(e.targetKey===void 0||e.targetKey===n));return r?r.reason===`ambiguous_material`||r.reason===`conflicting_key_material`?`ambiguous_lane`:`malformed`:null}function gC(e,t){return String(t.walletId)===String(e.walletId)&&String(t.nearAccountId)===String(e.nearAccountId)&&String(t.nearEd25519SigningKeyId)===String(e.nearEd25519SigningKeyId)&&t.signerSlot===e.signerSlot}function _C(e,t){return String(t.key.walletId)===String(e.walletId)&&String(t.key.ecdsaThresholdKeyId)===String(e.ecdsaThresholdKeyId)}function vC(e){if(e.availableLanes.kind===`unavailable`)return{kind:`near_ed25519`,subject:e.subject,lane:fC()};let t=e.availableLanes.lanes;if(String(t.walletId)!==String(e.subject.walletId))return{kind:`near_ed25519`,subject:e.subject,lane:dC(`identity_mismatch`)};let n=mC(t,`ed25519`);if(n)return{kind:`near_ed25519`,subject:e.subject,lane:dC(n)};let r=t.lanes.ed25519.near;return Rd(r)?{kind:`near_ed25519`,subject:e.subject,lane:gC(e.subject,r)?pC(r):dC(`identity_mismatch`)}:{kind:`near_ed25519`,subject:e.subject,lane:dC(`missing`)}}function yC(e){if(e.availableLanes.kind===`unavailable`)return fC();let t=e.availableLanes.lanes;if(String(t.walletId)!==String(e.subject.walletId))return dC(`identity_mismatch`);let n=hC(t,e.chainTarget);if(n)return dC(n);let r=Wd(t,e.chainTarget);return Rd(r)?_C(e.subject,r)?r.source===`canonical_capability`&&!r.authorization?{kind:`authorization_required`,requirement:`same_method_step_up`}:pC(r):dC(`identity_mismatch`):dC(`missing`)}function bC(e){let[t,...n]=e.configuredTargets;return t?{kind:`evm_family_ecdsa`,subject:e.subject,targets:{kind:`configured_targets`,lanes:[{chainTarget:t,readiness:yC({subject:e.subject,availableLanes:e.availableLanes,chainTarget:t})},...n.map(t=>({chainTarget:t,readiness:yC({subject:e.subject,availableLanes:e.availableLanes,chainTarget:t})}))]}}:{kind:`evm_family_ecdsa`,subject:e.subject,targets:{kind:`no_configured_target`}}}function xC(e){let t=e.subjectSet.subjects.map(t=>{switch(t.kind){case`near_ed25519_wallet`:return vC({subject:t,availableLanes:e.availableLanes});case`evm_family_ecdsa_wallet`:return bC({subject:t,availableLanes:e.availableLanes,configuredTargets:e.configuredEcdsaTargets})}return Q(t)}),n=t[0];if(!n)throw Error(`[WalletSession] resolved capability subjects must be non-empty`);return{kind:`resolved`,subjectSet:e.subjectSet,capabilities:[n,...t.slice(1)]}}function SC(e){return e?e.operationalPublicKey:null}function CC(e,t){return!!(e&&String(e.walletId)===String(t.walletId)&&String(e.nearAccountId)===String(t.nearAccountId)&&e.signerSlot===t.signerSlot)}async function wC(e,t){let n=await e.getLastUser().catch(()=>null);if(CC(n,t))return n;let r=await $s(G,t.nearAccountId,t.signerSlot).catch(()=>null);if(CC(r,t))return r;let i=await e.getUserBySignerSlot(t.nearAccountId,t.signerSlot).catch(()=>null);return CC(i,t)?i:null}function TC(e,t){return e.walletId===t.walletId&&e.nearAccountId===t.nearAccountId&&e.nearEd25519SigningKeyId===t.nearEd25519SigningKeyId&&e.signerSlot===t.signerSlot}async function EC(e){let t=_(String(e.walletId));if(!t.ok)return null;let n=t.value,r;try{r=await G.resolveSelectedWalletAuthority(String(n))}catch{return null}if(r.kind!==`resolved`)return null;let{selection:i,authMethod:a,authority:o}=r;if(Db({walletId:n,selection:i,authMethod:a,authority:o}).length>0||a.status!==`active`||o.state!==`active`||o.provenance.kind!==`device_link`)return null;let s=await Sx({walletId:n,authMethod:a,authority:o,signerMaterials:r.signerMaterials});if(s.kind!==`resolved`||!TC(s.subject,e))return null;let c=o.signerActivations.ed25519;return c?`ed25519:${dn(F(c.signer.registeredPublicKeyB64u))}`:null}async function DC(e,t){let[n,r]=await Promise.all([Vb(t),uC(e,t).catch(()=>({ethereumAddress:null,thresholdEcdsaPublicKeyB64u:null}))]);return{kind:`resolved`,walletId:t,nearAccountId:null,nearOperationalPublicKey:null,userData:null,authMethods:n,thresholdEcdsaEthereumAddress:r.ethereumAddress,thresholdEcdsaPublicKeyB64u:r.thresholdEcdsaPublicKeyB64u}}async function OC(e,t){let n=t.walletId,r=pb(t.subjectSet),i=r?.nearAccountId||null,[a,o]=await Promise.all([r?wC(e.signingEngine,r):null,DC(e,n)]),s=SC(a)||(r?await EC(r):null);return{...o,nearAccountId:i,nearOperationalPublicKey:s,userData:a}}async function kC(e){let[t,n,r]=await Promise.all([e.signingEngine.getAllUsers(),G.listWalletSelections(),e.signingEngine.getLastUser()]),i=(await Promise.all(n.map(Rb))).filter(e=>e!==null),a=new Map;for(let e of t){let t=Lb(e);a.set(zb(t),t)}for(let e of i)a.set(zb(e),e);let o=[...a.values()],s=[...new Set([...o.map(e=>e.walletId),...n.map(e=>String(e.walletId))])],c=[...new Set(o.map(e=>e.nearAccountId))],l=r?Lb(r):null;return{walletIds:s,accountIds:c,accounts:o,lastUsedAccount:Bb([...i,...l?[l]:[]])}}function AC(e){if(e.record.status!==`active`)return null;switch(e.kind){case`passkey`:return{walletId:e.record.walletId,authMethod:`passkey`};case`email_otp`:{let t=e.presentation.email.kind===`verified`?String(e.presentation.email.address):null;return{walletId:e.record.walletId,authMethod:`email_otp`,emailAddress:t}}case`voiceid`:return null;default:return Q(e)}}function jC(e){let t=[];for(let n of e){let e=AC(n);e&&t.push(e)}return t}async function MC(e){return jC(await PC(e,await G.listLocalWalletAuthMethodProjectionsV2ForWallet(e)))}function NC(e){return e.kind===`email_otp`&&e.record.status===`active`&&e.presentation.email.kind===`unavailable`}async function PC(e,t){let n=[];for(let e of t)NC(e)&&n.push(e);if(n.length===0)return[...t];let r=u(await Hi(G,e));if(!r.ok)return[...t];let i=!1;for(let t of n){let n=await G.retainVerifiedEmailOtpLocalPresentation({walletId:e,walletAuthMethodId:t.record.walletAuthMethodId,emailAddress:r.value});switch(n.kind){case`retained`:i=!0;break;case`not_retained`:break;default:Q(n)}}return i?await G.listLocalWalletAuthMethodProjectionsV2ForWallet(e):[...t]}async function FC(){let e=await G.listWalletSelectionWalletIds();return(await Promise.all([...new Set(e)].map(MC))).flat()}async function IC(e){let{signingEngine:t}=e,n=t.readWalletAuthenticationState(),r,i=!1,a=!1,o=[];try{o=n.kind===`authenticated`?[n.walletId]:await G.listWalletSelectionWalletIds()}catch(e){r=e,i=!0}for(let e of o){try{await t.advanceWalletLockGeneration(e)}catch(e){r=e,i=!0}try{await t.retireActiveWalletSessionAuthorizationForLock(e)}catch(e){i||=(r=e,!0)}}try{a=t.clearWalletAuthenticationIfCurrent(n)}catch(e){i||=(r=e,!0)}if(a){try{t.getNonceCoordinator().clearAll()}catch{}try{t.clearThresholdEcdsaSigningQueue()}catch{}}try{await t.clearVolatileWarmSigningMaterial(n.kind===`authenticated`?n.walletId:void 0)}catch(e){i||=(r=e,!0)}if(i)throw r}async function LC(e){try{await(await import(`./registration-CNLUYN-p.js`).then(e=>e.o)).resumeNearRegistrationAfterUnlock(e)}catch(e){console.warn(`[login] NEAR continuation could not start`,e instanceof Error?e.message:`module unavailable`)}finally{new Uint8Array(e.ownedFactorSecret).fill(0)}}let RC=null,zC=null;function BC(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function VC(e,t){let n=e[t];if(typeof n!=`string`||n.length===0||n.trim()!==n)throw Error(`${t} must be a non-empty canonical string`);return n}function HC(e,t,n){if(Object.keys(e).length!==t.size)throw Error(`${n} fields are invalid`);for(let r of t)if(!Object.hasOwn(e,r))throw Error(`Missing ${n} field: ${r}`)}function UC(e,t){if(typeof e!=`string`||e.length===0||e.trim()!==e)throw Error(`${t} must be a canonical HTTP origin`);let n;try{n=new URL(e)}catch{throw Error(`${t} must be a canonical HTTP origin`)}if(n.protocol!==`https:`&&n.protocol!==`http:`||n.origin!==e||n.pathname!==`/`||n.search!==``||n.hash!==``)throw Error(`${t} must be a canonical HTTP origin`);return n.origin}function WC(e){if(typeof e!=`string`||e.length===0||e.trim()!==e)throw Error(`relayUrl must be a non-empty canonical string`);return i(e)}function GC(e){if(!Number.isSafeInteger(e)||Number(e)<=Date.now())throw Error(`hosted-wallet Wallet Session is expired or invalid`);return Number(e)}function KC(e,t){let n=BC(e);if(HC(n,new Set([`ok`,`code`,`message`]),`hosted-wallet exchange failure`),n.ok!==!1)throw Error(`hosted-wallet exchange failure is invalid`);let r=VC(n,`code`),i=VC(n,`message`),a=Error(i);return a.code=r,a.status=t,a}function qC(e){if(typeof e!=`string`||!/^wsh_[A-Za-z0-9_-]{43}$/.test(e))throw Error(`hosted-wallet operationCredential.token is invalid`);return e}function JC(e){let t=gt(e);if(!t.ok)throw Error(`walletSessionId is invalid: ${t.error.message}`);return t.value}function YC(e){let t=BC(e);if(HC(t,new Set([`kind`,`home`,`token`,`walletSessionId`]),`hosted-wallet operationCredential`),t.kind!==`opaque_hosted_wallet_session_operation_credential_v1`)throw Error(`hosted-wallet operationCredential.kind is invalid`);return{kind:t.kind,home:He(t.home),token:qC(t.token),walletSessionId:JC(t.walletSessionId)}}function XC(e){let t=BC(e);if(t.ok!==!0)throw KC(t,400);HC(t,new Set([`ok`,`walletSessionId`,`operationCredential`,`expiresAtMs`]),`hosted-wallet session redemption response`);let n=JC(t.walletSessionId),r=YC(t.operationCredential);if(r.walletSessionId!==n)throw Error(`hosted-wallet operationCredential does not identify its parent Wallet Session`);return{operationCredential:r,expiresAtMs:GC(t.expiresAtMs)}}async function ZC(e){try{return await e.json()}catch{return null}}function QC(e){zC=UC(e,`adopted parent origin`)}function $C(e){let t=RC;if(t){if(t.expiresAtMs<=Date.now()||t.appOrigin!==zC||t.walletOrigin!==window.location.origin||e!==void 0&&t.relayUrl!==WC(e)){RC=null;return}return t.operationCredential}}function ew(){RC=null,zC=null}function tw(e){return JSON.stringify({exchangeCode:e.exchangeCode,nonce:e.nonce,appOrigin:e.appOrigin,walletOrigin:e.walletOrigin})}async function nw(e,t){let n=ct(e),r=WC(t);if(WC(n.relayUrl)!==r)throw Error(`Hosted-wallet redemption relayUrl does not match its request boundary`);if(n.walletOrigin!==window.location.origin)throw Error(`Hosted-wallet redemption walletOrigin does not match the wallet host`);if(zC===null||n.appOrigin!==zC)throw Error(`Hosted-wallet redemption appOrigin does not match the adopted iframe parent`);let i=await fetch(c(r,`/wallet/session/exchange/redeem`),{method:`POST`,headers:{"Content-Type":`application/json`,...n.home.kind===`regional`?{"X-Seams-Wallet-Region":n.home.region}:{}},body:tw(n)}),a=await ZC(i);if(!i.ok)throw KC(a,i.status);let o=XC(a),s={kind:`active_hosted_wallet_seams_session`,operationCredential:o.operationCredential,expiresAtMs:o.expiresAtMs,relayUrl:r,appOrigin:n.appOrigin,walletOrigin:n.walletOrigin};return RC=s,s}async function rw(e,t){switch(t.state){case`unavailable`:return;case`settled`:await aa(e,t.generation);return;case`moving`:await aa(e,t.move.destinationGeneration);return;case`completed`:await aa(e,t.destinationGeneration);return;default:throw Error(`Unsupported wallet placement observation`)}}async function iw(e,t,n){let r=e.readAuthentication();if(await rw(t,n),r.kind!==`authenticated`||r.walletId!==t)return;let i=aw(n);if(i===null)return;let a=await G.resolveSelectedWalletAuthority(t);if(a.kind!==`resolved`)return;let o=await K.readExactWithOperationCredential({walletId:t,authorityId:a.authority.authorityId,authMethodId:a.authMethod.walletAuthMethodId});o.kind===`found`&&o.operationCredential.ownershipGeneration<i&&e.readAuthentication()===r&&await e.lockWallet()}function aw(e){switch(e.state){case`unavailable`:return null;case`settled`:return e.generation;case`completed`:return e.destinationGeneration;case`moving`:return e.move.progress.availability===`active`?e.move.destinationGeneration:null;default:throw Error(`Unsupported wallet activation observation`)}}function ow(e){if(!sw(e))throw Error(`Wallet move identity is invalid`);return e}function sw(e){return typeof e==`string`&&/^wmove_[A-Za-z0-9_-]{43}$/u.test(e)}function cw(e){let t=E(e,`Wallet move request`),n=_(t.walletId);if(!n.ok||Object.keys(t).length!==4)throw Error(`Wallet move request is invalid`);return{walletId:n.value,moveId:ow(t.moveId),destinationRegion:uw(t.destinationRegion),expectedGeneration:dw(t.expectedGeneration)}}function lw(e){let t=E(e,`Wallet placement`);switch(t.state){case`settled`:if(Object.keys(t).length!==4)break;return{state:`settled`,region:uw(t.region),generation:dw(t.generation),nextMoveAtMs:Re(t.nextMoveAtMs,`Next relocation time`)};case`unavailable`:if(Object.keys(t).length!==2||t.code!==`not_found`&&t.code!==`wallet_not_established`)break;return{state:`unavailable`,code:t.code};case`moving`:{if(Object.keys(t).length!==2)break;let e=E(t.move,`Wallet relocation`);if(Object.keys(e).length!==8)break;let{moveId:n,sourceRegion:r,destinationRegion:i,sourceGeneration:a,destinationGeneration:o,admittedAtMs:s}=hw(e),c=Re(e.nextMoveAtMs,`Next relocation time`);if(c<s)break;return{state:`moving`,move:{moveId:n,sourceRegion:r,destinationRegion:i,sourceGeneration:a,destinationGeneration:o,admittedAtMs:s,nextMoveAtMs:c,progress:fw(e.progress)}}}}throw Error(`Wallet placement response is invalid`)}function uw(e){switch(e){case`US`:case`WEUR`:case`APAC`:case`OC`:return e;default:throw Error(`Wallet region is invalid`)}}function dw(e){let t=Re(e,`Wallet placement generation or time`);if(t===0)throw Error(`Wallet placement generation or time must be positive`);return t}function fw(e){let t=E(e,`Wallet relocation progress`);if(Object.keys(t).length!==3)throw Error(`Wallet relocation progress fields are invalid`);let n=pw(t.execution);switch(t.state){case`freezing`:case`copying`:case`verified`:case`activating`:if(t.availability===`paused`)return{state:t.state,availability:`paused`,execution:n};break;case`cleanup`:if(t.availability===`active`)return{state:`cleanup`,availability:`active`,execution:n};break}throw Error(`Wallet relocation availability is invalid`)}function pw(e){let t=E(e,`Wallet relocation execution`);switch(t.state){case`ready`:case`running`:if(Object.keys(t).length===1)return{state:t.state};break;case`retry_wait`:if(Object.keys(t).length!==3)break;if(t.code===`transport_unavailable`||t.code===`authority_unavailable`)return{state:`retry_wait`,code:t.code,retryAtMs:dw(t.retryAtMs)};break;case`blocked`:if(Object.keys(t).length!==2)break;switch(t.code){case`transport_unavailable`:case`authority_unavailable`:case`identity_conflict`:case`receipt_conflict`:case`content_conflict`:return{state:`blocked`,code:t.code}}}throw Error(`Wallet relocation execution is invalid`)}function mw(e,t){let n=E(e,`Wallet move status`);if(n.state===`moving`){let e=lw(n);if(e.state!==`moving`||e.move.moveId!==t)throw Error(`Wallet move identity changed`);return e}if(n.state!==`completed`||Object.keys(n).length!==8)throw Error(`Wallet move status is invalid`);let{moveId:r,sourceRegion:i,destinationRegion:a,sourceGeneration:o,destinationGeneration:s,admittedAtMs:c}=hw(n),l=dw(n.completedAtMs);if(r!==t||l<c)throw Error(`Wallet move completion is invalid`);return{state:`completed`,moveId:r,sourceRegion:i,destinationRegion:a,sourceGeneration:o,destinationGeneration:s,admittedAtMs:c,completedAtMs:l}}function hw(e){let t=ow(e.moveId),n=uw(e.sourceRegion),r=uw(e.destinationRegion),i=dw(e.sourceGeneration),a=dw(e.destinationGeneration),o=dw(e.admittedAtMs);if(n===r||a!==i+1)throw Error(`Wallet move generations or regions are invalid`);return{moveId:t,sourceRegion:n,destinationRegion:r,sourceGeneration:i,destinationGeneration:a,admittedAtMs:o}}function gw(e){return`wallet_move_request:${e}`}async function _w(e){let t=await G.getAppState(gw(e));if(t===void 0)return null;let n=cw(t);if(n.walletId!==e)throw Error(`Stored wallet move identity is invalid`);return n}async function vw(e){await G.setAppState(gw(e.walletId),{walletId:e.walletId,moveId:e.moveId,destinationRegion:e.destinationRegion,expectedGeneration:e.expectedGeneration})}var yw=class extends Error{constructor(e,t){super(`Owner Router request failed: ${t}`),this.code=e,this.name=`WalletHostOwnerRequestTransportError`}};function bw(e){let t=xw(e);return{ownerAuthorization:{authenticateOwnerForLinkingV1:async e=>await Cw(t,e)},ownerRequest:{requestOwnerV1:async e=>await ww(t,e)},managementRequest:{request:async e=>await Tw(t,e)}}}function xw(e){let t=String(e.relayerUrl||``).trim().replace(/\/+$/,``);if(!t)throw Error(`Wallet-host device linking requires a Router URL`);return{...e,baseUrl:t}}function Sw(){return new X(`wallet_unlock_required`,Z.WALLET_UNLOCK_REQUIRED,`authorization`)}async function Cw(e,t){let n=e.readWalletAuthenticationState();if(n.kind!==`authenticated`)throw Sw();await Do(n.walletId);let r=await Ew(e,n.walletId),i=await Dw(e,r,{method:`POST`,canonicalPath:`/wallet/device-linking/v1/owner-authorization`,body:Nn({payload:t.payload,requestedAtMs:t.requestedAtMs})});if(i.status<200||i.status>=300)throw Error(Iw(i));let a=kw(i.body,r),o=We(t.payload.requestedPermission,`export_keys`)&&a.sourceSignerManifest.keyFamilies.some(e=>e===`ed25519`),s=o?e.readUnlockedEd25519ExportRootCapabilityV1(n.walletId):void 0;if(o&&(!s||s.walletId!==String(n.walletId)||s.walletSessionId!==String(r.operationCredential.walletSessionId)||s.expiresAtMs<=Date.now()))throw Sw();let c=await e.confirmDeviceLinking({walletId:n.walletId,payload:t.payload}),l=e.readWalletAuthenticationState();if(l.kind!==`authenticated`||l.walletId!==n.walletId)throw Sw();let u=await Ew(e,n.walletId);if(c.assertCurrent(),u.operationCredential.walletSessionId!==r.operationCredential.walletSessionId||u.record.authorizationId!==r.record.authorizationId)throw Sw();if(o){if(!s)throw Sw();return{...a,exportRootRequirement:`required`,ed25519ExportRootCapability:s}}return{...a,exportRootRequirement:`not_required`}}async function ww(e,t){if(t.authentication.source.kind!==`wallet_session`)throw Error(`Wallet-host device linking requires a reusable owner Wallet Session`);let n=e.readWalletAuthenticationState();if(n.kind!==`authenticated`)throw Sw();let r=await Ew(e,n.walletId);if(t.authentication.source.walletSessionId!==r.operationCredential.walletSessionId||t.authentication.source.authorizationId!==r.record.authorizationId)throw Error(`Owner Wallet Session identity changed after authorization`);return await Dw(e,r,t)}async function Tw(e,t){return await Dw(e,await Ew(e,t.walletId),t)}async function Ew(e,t){let n=await e.resolveSelectedWalletAuthority(t);if(n.kind!==`resolved`)throw Sw();let{selection:r,authMethod:i,authority:a}=n;if(r.lockState!==`unlocked`||r.walletId!==t||r.walletAuthMethodId!==i.walletAuthMethodId||i.walletId!==t||i.walletAuthorityId!==a.authorityId||i.status!==`active`||a.walletId!==t||a.state!==`active`)throw Sw();let o=await e.walletSessions.readExactWithOperationCredential({walletId:t,authorityId:a.authorityId,authMethodId:i.walletAuthMethodId});switch(o.kind){case`found`:break;case`missing`:throw Sw();case`upgrade_required`:throw new Oa(`Stored owner Wallet Session requires a newer client`);default:throw Error(`Unsupported owner Wallet Session read result`)}if(o.record.authorityDigestB64u!==a.authorityDigestB64u||o.record.authorityRevocationEpoch!==a.revocationEpoch||o.record.expiresAtMs<=Date.now())throw Sw();return o}async function Dw(e,t,n){return await Ow(e,t.operationCredential.token,n)}async function Ow(e,t,n){let r=await e.http.request({method:n.method,url:`${e.baseUrl}${n.canonicalPath}`,headers:{authorization:`Bearer ${t}`},...n.body===void 0?{}:{body:n.body}});if(!r.ok)throw new yw(r.code,r.message);return r.value}function kw(e,t){let n=Mw(e),r=Pw(n.authentication);if(r.kind!==`link_session_authenticated_request_v1`)throw Error(`Owner authorization authentication kind is invalid`);let i=dr(r.source),a=dr(n.ownerAuthorization);Aw(i,t),jw(i,a);let o={kind:`link_session_authenticated_request_v1`,source:i,proofDigestB64u:Tt(r.proofDigestB64u)},s=_(n.walletId);if(!s.ok||s.value!==t.record.walletId)throw Error(`Owner authorization wallet identity changed`);return{authentication:o,walletId:s.value,ownerAuthorization:a,sourceSignerManifest:Dr(n.sourceSignerManifest),expiresAtMs:zw(n.expiresAtMs,`expiresAtMs`)}}function Aw(e,t){if(e.kind!==`wallet_session`)throw Error(`Owner authorization did not return a Wallet Session source`);if(e.walletSessionId!==t.operationCredential.walletSessionId)throw Error(`Owner authorization Wallet Session id changed`);if(e.authorizationId!==t.record.authorizationId)throw Error(`Owner authorization id changed`)}function jw(e,t){if(e.kind!==`wallet_session`||t.kind!==`wallet_session`||e.walletSessionId!==t.walletSessionId||e.authorizationId!==t.authorizationId)throw Error(`Owner authorization source changed`)}function Mw(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Owner authorization response must be an object`);if(!Nw(e))throw Error(`Owner authorization response has unexpected fields`);return e}function Nw(e){return Object.keys(e).sort().join(`|`)===`authentication|expiresAtMs|ownerAuthorization|sourceSignerManifest|walletId`}function Pw(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Owner authorization response must be an object`);if(!Fw(e))throw Error(`Owner authorization response has unexpected fields`);return e}function Fw(e){return Object.keys(e).sort().join(`|`)===`kind|proofDigestB64u|source`}function Iw(e){let t=Lw(e.body);return t?`Owner authorization failed: ${t}`:`Owner authorization failed with HTTP ${e.status}`}function Lw(e){return typeof e!=`object`||!e||Array.isArray(e)||!Rw(e)||e.ok!==!1||typeof e.code!=`string`?null:typeof e.message==`string`&&e.message.trim()?e.message:null}function Rw(e){return Object.keys(e).sort().join(`|`)===`code|message|ok`}function zw(e,t){if(!Number.isSafeInteger(e)||Number(e)<=0)throw Error(`${t} must be a positive safe integer`);return Number(e)}const Bw=`/wallet/placement/v1/relocations`;function Vw(e){if(e.host.readAuthentication()!==e.authentication)throw Error(`Wallet authentication changed during relocation approval`)}function Hw(e,t){let n=E(e,`Wallet relocation challenge`);if(n.kind!==`challenge`||n.walletId!==t.walletId||n.moveId!==t.moveId||n.destinationRegion!==t.destinationRegion||n.expectedGeneration!==t.expectedGeneration||typeof n.requestDigest!=`string`||!/^[a-f0-9]{64}$/u.test(n.requestDigest)||typeof n.expiresAtMs!=`number`||!Number.isSafeInteger(n.expiresAtMs)||n.expiresAtMs<=Date.now())throw Error(`Wallet relocation challenge does not match the requested move`);let r=Tt(n.challengeB64u),i=E(n.factor,`Wallet relocation factor`);if(i.kind===`passkey`)return{challengeB64u:r,expiresAtMs:n.expiresAtMs,factor:{kind:`passkey`}};if(i.kind!==`email_otp`)throw Error(`Wallet relocation factor is unsupported`);let a=E(i.delivery,`Wallet relocation email delivery`);return{challengeB64u:r,expiresAtMs:n.expiresAtMs,factor:{kind:`email_otp`,challengeId:D(i.challengeId,`OTP challenge`),emailHint:D(a.emailHint,`Email hint`)}}}async function Uw(e){Vw(e);let t=await e.host.managementRequest.request({walletId:e.request.walletId,method:`POST`,canonicalPath:`${Bw}/challenge`,body:e.request});if(Vw(e),t.status!==200)throw Error(`Wallet relocation challenge failed (${t.status})`);return Hw(t.body,e.request)}async function Ww(e){let t=await Uw(e);if(t.factor.kind!==`email_otp`)throw Error(`Wallet relocation factor changed`);return{challengeId:t.factor.challengeId,emailHint:t.factor.emailHint}}async function Gw(e,t){switch(t.factor.kind){case`passkey`:{let n=await G.resolveSelectedWalletAuthority(e.request.walletId);if(Vw(e),n.kind!==`resolved`||n.authMethod.kind!==`passkey`)throw Error(`Wallet relocation requires the selected owner passkey`);return{kind:`passkey`,credential:Ks(await e.host.signingEngine.getAuthenticationCredentialsSerialized({subjectId:e.request.walletId,challengeB64u:t.challengeB64u,allowCredentials:[{id:n.authMethod.credentialIdB64u,type:`public-key`,transports:[]}],includeSecondPrfOutput:!1}))}}case`email_otp`:{let n=await e.host.signingEngine.requestEmailOtpOwnerConfirmation({purpose:`move_wallet`,walletId:e.request.walletId,emailAddress:t.factor.emailHint,emailHint:t.factor.emailHint,challengeId:t.factor.challengeId,confirmerText:{title:`Move wallet region`,body:`Enter the code to move this wallet to ${e.request.destinationRegion}.`},onResend:Ww.bind(null,e)});return{kind:`email_otp`,challengeId:n.challengeId,otpCode:n.otpCode}}default:return Kw(t.factor)}}function Kw(e){throw Error(`Unsupported wallet relocation factor: ${String(e)}`)}async function qw(e,t){return Vw(e),e.host.managementRequest.request({walletId:e.request.walletId,method:`POST`,canonicalPath:Bw,body:t})}async function Jw(e,t){let n=cw(t),r=e.readAuthentication();if(r.kind!==`authenticated`||r.walletId!==n.walletId)return{ok:!1,code:`wallet_unlock_required`};let i={host:e,request:n,authentication:r},a=await e.managementRequest.request({walletId:n.walletId,method:`GET`,canonicalPath:`${Bw}/${encodeURIComponent(n.moveId)}?walletId=${encodeURIComponent(n.walletId)}`});if(Vw(i),a.status===200)return Yw(a.body,i);if(a.status===401||a.status===403)return{ok:!1,code:`unauthorized`};if(a.status!==404)return{ok:!1,code:`transport_unavailable`};await vw(n),Vw(i);let o=await qw(i,{walletId:n.walletId,moveId:n.moveId,destinationRegion:n.destinationRegion,expectedGeneration:n.expectedGeneration,sourceProof:null});if(Vw(i),o.status===200)return Yw(o.body,i);if(o.status===401||o.status===403)return{ok:!1,code:`unauthorized`};if(!Xw(o))return{ok:!1,code:`transport_unavailable`};let s=await Uw(i),c=await Gw(i,s);if(Vw(i),s.expiresAtMs<=Date.now())throw Error(`Wallet relocation approval expired`);let l={walletId:n.walletId,moveId:n.moveId,destinationRegion:n.destinationRegion,expectedGeneration:n.expectedGeneration,sourceProof:c},u;try{u=await qw(i,l)}catch(e){if(!(e instanceof yw)||e.code!==`network_error`)throw e;u=await qw(i,l)}return Vw(i),u.status===401||u.status===403?{ok:!1,code:`unauthorized`}:u.status===200?Yw(u.body,i):{ok:!1,code:`transport_unavailable`}}async function Yw(e,t){let n=t.request,r;try{r=mw(e,n.moveId);let t=r.state===`moving`?r.move:r;if(t.destinationRegion!==n.destinationRegion||t.sourceGeneration!==n.expectedGeneration)throw Error(`Wallet relocation conflicts with the request`)}catch{return{ok:!1,code:`invalid_response`}}return await iw(t.host,n.walletId,r),t.host.readAuthentication()===t.authentication?{ok:!0,status:r}:{ok:!1,code:`wallet_unlock_required`}}function Xw(e){if(e.status!==409)return!1;try{let t=E(e.body,`Wallet relocation approval result`);return t.ok===!1&&t.code===`owner_approval_required`}catch{return!1}}function Zw(e){return{getLastMoveRequest:_w,move:Jw.bind(null,e),get:Qw.bind(null,e),getMove:tT.bind(null,e)}}async function Qw(e,t){let n=e.readAuthentication(),r=await nT(e,t,`/wallet/placement/v1?walletId=${encodeURIComponent(t)}`,$w);return r.ok&&await iw(e,t,r.placement),e.readAuthentication()===n?r:{ok:!1,code:`wallet_unlock_required`}}function $w(e){return{ok:!0,placement:lw(e)}}function eT(e,t){return{ok:!0,status:mw(t,e)}}async function tT(e,t,n){let r=e.readAuthentication(),i=await nT(e,t,`/wallet/placement/v1/relocations/${encodeURIComponent(n)}?walletId=${encodeURIComponent(t)}`,eT.bind(null,n));return i.ok&&await iw(e,t,i.status),e.readAuthentication()===r?i:{ok:!1,code:`wallet_unlock_required`}}async function nT(e,t,n,r){let i=e.readAuthentication();if(i.kind!==`authenticated`||i.walletId!==t)return{ok:!1,code:`wallet_unlock_required`};let a;try{a=await e.managementRequest.request({walletId:t,method:`GET`,canonicalPath:n})}catch(t){return t instanceof X&&t.code===Z.WALLET_UNLOCK_REQUIRED||e.readAuthentication()!==i?{ok:!1,code:`wallet_unlock_required`}:{ok:!1,code:`transport_unavailable`}}if(e.readAuthentication()!==i)return{ok:!1,code:`wallet_unlock_required`};if(a.status===401||a.status===403)return{ok:!1,code:`unauthorized`};if(a.status!==200)return{ok:!1,code:`transport_unavailable`};try{return r(a.body)}catch{return{ok:!1,code:`invalid_response`}}}function rT(e){let t;return()=>(t??=e().catch(e=>{throw t=void 0,e}),t)}function iT(){return{ecdsaSessions:{exportArtifactsByLane:new Map}}}function aT(e){let t=rT(async()=>{let{createWarmSessionHydrationService:t}=await import(`./warmSessionHydration-B-A5Tdx7.js`);return t({getWarmSessionMaterialWriter:e.ui.warmSessions.getWarmSessionMaterialWriter})}),n={hydrateSigningSession:async e=>(await t()).hydrateSigningSession(e)},r=rT(async()=>{let{createRegistrationAccountsService:t}=await import(`./registrationAccounts-4r74gX1l.js`);return t(e.registration.accountLifecycle)}),i={storeUserData:async e=>(await r()).storeUserData(e),getAllUsers:async()=>(await r()).getAllUsers(),getUserBySignerSlot:async(e,t)=>(await r()).getUserBySignerSlot(e,t),getLastUser:async()=>(await r()).getLastUser(),nearAuthenticatorsByAccount:async e=>(await r()).nearAuthenticatorsByAccount(e),setLastUser:async(e,t)=>(await r()).setLastUser(e,t),activateAuthenticatedWalletState:async e=>(await r()).activateAuthenticatedWalletState(e),setWalletNearProvisioningState:async e=>(await r()).setWalletNearProvisioningState(e),getWalletNearProvisioningState:async e=>(await r()).getWalletNearProvisioningState(e),storeAuthenticator:async e=>(await r()).storeAuthenticator(e),rollbackUserRegistration:async e=>(await r()).rollbackUserRegistration(e),hasPasskeyCredential:async e=>(await r()).hasPasskeyCredential(e),storeWalletEd25519RegistrationData:async e=>(await r()).storeWalletEd25519RegistrationData(e),storeWalletEd25519RecoveryRegistrationData:async e=>(await r()).storeWalletEd25519RecoveryRegistrationData(e),storeWalletEmailOtpEd25519RegistrationData:async e=>(await r()).storeWalletEmailOtpEd25519RegistrationData(e),storeWalletEmailOtpMixedRegistrationData:async e=>(await r()).storeWalletEmailOtpMixedRegistrationData(e),finalizeWalletEd25519SignerRegistration:async e=>(await r()).finalizeWalletEd25519SignerRegistration(e),rollbackWalletEd25519SignerRegistration:async e=>(await r()).rollbackWalletEd25519SignerRegistration(e)},a=rT(async()=>{let{createEcdsaWalletRecordsService:t}=await import(`./ecdsaWalletRecords-WLyq414E.js`);return t({accountLifecycle:e.registration.accountLifecycle})}),o={storeWalletEcdsaSignerRecords:async e=>(await a()).storeWalletEcdsaSignerRecords(e),storeWalletEmailOtpEcdsaSignerRecords:async e=>(await a()).storeWalletEmailOtpEcdsaSignerRecords(e),storeWalletEcdsaRecoverySignerRecords:async e=>(await a()).storeWalletEcdsaRecoverySignerRecords(e),finalizeWalletEcdsaRegistration:async e=>(await a()).finalizeWalletEcdsaRegistration(e),storeWalletEmailOtpEcdsaRegistrationData:async e=>(await a()).storeWalletEmailOtpEcdsaRegistrationData(e)},s={signNear:async t=>{let{signNear:n}=await import(`./signNear-DMpJFkwF.js`).then(e=>e.n);return n(e.signing.near.getDeps(),t)}},c={signEvmFamily:async t=>{let{signEvmFamily:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)},reportTempoBroadcastAccepted:async t=>{let{reportTempoBroadcastAccepted:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)},reportTempoBroadcastRejected:async t=>{let{reportTempoBroadcastRejected:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)},reportTempoFinalized:async t=>{let{reportTempoFinalized:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)},reportTempoDroppedOrReplaced:async t=>{let{reportTempoDroppedOrReplaced:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)},reconcileTempoNonceLane:async t=>{let{reconcileTempoNonceLane:n}=await import(`./signEvmFamily-BY5jlZEG.js`).then(e=>e.s);return n(e.signing.evmFamily.getDeps(),t)}};return{...e,services:{warmSessions:n,registrationAccounts:i,nearSigning:s,evmFamilySigning:c,ecdsaWalletRecords:o}}}function oT(e){return{network:e.network,registration:e.registration,signing:e.signing}}function sT(e){return Km({indexedDB:G,workerCtx:e})}function cT(e){let t=iT(),n=oT(e.config);return aT({runtimePorts:sT(e.workerCtx),workers:{emailOtp:e.workerCtx},signing:{near:{getDeps:e.getNearSigningDeps},evmFamily:{getDeps:e.getEvmFamilySigningDeps}},registration:{accountLifecycle:e.accountLifecycle,ecdsaBootstrapStore:e.ecdsaBootstrapStore},ui:{warmSessions:{getWarmSessionMaterialWriter:e.getWarmSessionMaterialWriter}},config:n,state:t})}var lT=class extends Error{code=`browser_capability_unavailable`;selection;constructor(e){super(`Browser capability ${e.operation.capabilityKind} is unavailable for ${e.operation.operationKind}: ${e.reason}`),this.name=`BrowserCapabilityUnavailableError`,this.selection=e}};function uT(e){return{kind:`selected`,operation:e}}function dT(e,t){return{kind:`disabled`,operation:e,reason:t}}function fT(e,t){switch(t.operationKind){case St.signTransaction:case St.signDelegateAction:case St.signNep413Message:{let n=pt(t.operationKind);return e.signing.routerAb.normalSigning.mode===`enabled`?uT(n):dT(n,`router_ab_normal_signing_disabled`)}case St.exportKey:return uT(pt(t.operationKind))}}function pT(e,t){let n=on(e.network.chains).some(e=>an(e,t.chainTarget));switch(t.operationKind){case bt.signTransaction:case bt.exportKey:{let e=_t(t.operationKind);return n?uT(e):dT(e,`ecdsa_target_not_configured`)}}}function mT(e,t){switch(t.capabilityKind){case Ct.vaultAccess:return dT(xt(t.operationKind),`capability_not_deployed`);case Ct.nearEd25519MpcSigning:return fT(e,t);case Ct.evmEcdsaMpcSigning:return pT(e,t)}}function hT(e,t){let n=mT(e,t);switch(n.kind){case`selected`:return n.operation;case`disabled`:throw new lT(n)}}function gT(e){return typeof e==`object`&&!!e&&`kind`in e}function _T(e,t){return typeof t==`string`?e.networkSlug===t:`chainId`in t?e.chainId===t.chainId:e.kind===t.family}function vT(e){return typeof e==`string`?e:gT(e)?V(e):`chainId`in e?`chainId ${e.chainId}`:`family ${e.family}`}function yT(e,t){if(gT(t))return tn(t);let n=on(e),r=n.filter(e=>_T(e,t)),i=r[0];if(r.length===1&&i)return i;if(r.length>1)throw Error(`[threshold-ecdsa] ambiguous chain selector "${vT(t)}": matched ${r.map(V).join(`, `)}. Name one exact network slug instead.`);let a=n.map(e=>e.networkSlug).join(`, `);throw Error(`[threshold-ecdsa] no configured ECDSA chain matches "${vT(t)}". Configured chains: ${a||`(none)`}.`)}function bT(e,t){let n=yT(e,t);if(n.kind!==`tempo`)throw Error(`[threshold-ecdsa] expected a Tempo chain target, resolved ${V(n)}`);return n}function xT(e,t){let n=yT(e,t);if(n.kind!==`evm`)throw Error(`[threshold-ecdsa] expected an EVM chain target, resolved ${V(n)}`);return n}function ST(e,t){switch(t.kind){case`ed25519`:hT(e,{capabilityKind:Ct.nearEd25519MpcSigning,operationKind:St.exportKey});return;case`ecdsa`:hT(e,{capabilityKind:Ct.evmEcdsaMpcSigning,operationKind:bt.exportKey,chainTarget:t.chainTarget});return}}function CT(e){return{exportKey:wT.bind(null,e)}}async function wT(e,t){let n=t.options??{};if(t.kind===`ed25519`){let r={kind:`ed25519`,...await e.currentWallet.nearSubject(t)};ST(e.configs,r);let i=await e.domain.resolveExactKeyExportLane(r);if(i.kind!==`ed25519`)throw Error(`[key-export] expected an Ed25519 lane, received ${i.kind}`);return await e.domain.exportKeypairWithUI({...r,laneIdentity:i.laneIdentity,materialActivation:i.materialActivation,options:n}),{kind:`exported`}}let r={kind:`ecdsa`,walletSession:await e.currentWallet.walletSession(t.walletSession),chainTarget:yT(e.configs.network.chains,t.chainTarget)};ST(e.configs,r);let i=await e.domain.resolveExactKeyExportLane(r);if(i.kind!==`ecdsa`)throw Error(`[key-export] expected an ECDSA lane, received ${i.kind}`);return await e.domain.exportKeypairWithUI({...r,laneIdentity:i.laneIdentity,options:n}),{kind:`exported`}}function TT(e,t,n){let r=String(e[t]||``).trim();if(!r)throw Error(`${n} returned missing ${t}`);return r}function ET(e,t){let n=typeof e==`number`?e:Number(e);if(!Number.isSafeInteger(n)||n<=0)throw Error(`${t} returned invalid signerSlot`);return Math.floor(n)}function DT(e,t){if(!A(e))throw Error(`${t} returned missing walletBinding`);let n=hi(TT(e,`walletId`,t)),r=mn(TT(e,`nearAccountId`,t)),i=mi(TT(e,`nearEd25519SigningKeyId`,t)),o=TT(e,`rpId`,t),s=a(TT(e,`credentialIdB64u`,t));if(!s.ok)throw Error(`${t} returned invalid credentialIdB64u`);let c=ET(e.signerSlot,t);return{walletId:n,nearAccountId:r,nearEd25519SigningKeyId:i,rpId:o,credentialIdB64u:s.value,signerSlot:c}}function OT(e,t){return DT(A(e.walletBinding)?e.walletBinding:e,t)}function kT(e,t,n){if(String(e.walletId)!==String(t.walletId)||String(e.nearAccountId)!==String(t.nearAccountId)||String(e.nearEd25519SigningKeyId)!==String(t.nearEd25519SigningKeyId)||e.rpId!==t.rpId||e.signerSlot!==t.signerSlot)throw Error(`${n} returned mismatched wallet binding`)}function AT(e){return{success:!1,error:e}}function jT(e,t){return globalThis.fetch(e,t)}function MT(e){try{e.onEvent?.(Fi({flowId:e.flowId,...e.event}))}catch{}}function NT(e){let t=String(e.configs.network.relayer?.url||``).trim();if(!t)throw Error(`missing_relayer_url`);return t}function PT(e){let t=o(e.signingEngine.getRpId());if(!t.ok)throw Error(`missing_rp_id`);return t.value}function FT(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=typeof n==`string`?n.trim():``;e&&t.push(e)}return t}function IT(e,t){let n=String(e[t]||``).trim();if(!n)throw Error(`sync-account ${t} is required`);return n}function LT(e){if(!k(e))throw Error(`sync-account ECDSA chain target is invalid`);let t=Number(e.chainId);if(!Number.isSafeInteger(t)||t<=0)throw Error(`sync-account ECDSA chain id is invalid`);if(e.kind===`evm`&&e.namespace===`eip155`)return{kind:`evm`,namespace:`eip155`,chainId:t,networkSlug:String(e.networkSlug||``).trim()||`evm-${t}`};if(e.kind===`tempo`)return{kind:`tempo`,chainId:t,networkSlug:String(e.networkSlug||``).trim()||`tempo-${t}`};throw Error(`sync-account ECDSA chain family is invalid`)}function RT(e){if(!Array.isArray(e)||e.length!==2||e[0]!==1||e[1]!==2)throw Error(`sync-account ECDSA participant ids are invalid`);return[1,2]}function zT(e){return e.kind===`sign`&&e.keyFamily===`ecdsa_secp256k1`}function BT(e){for(let t of e)if(zT(t))return t;return null}function VT(e,t){let n=k(e)?e:{},r=n.ecdsaCustody;if(!k(r)||r.kind!==`wallet_custody_ecdsa_sync_continuity_v1`)throw Error(`sync-account ECDSA custody continuity is invalid`);if(!Array.isArray(r.signers))throw Error(`sync-account ECDSA custody signer list is invalid`);let i=[];for(let e of r.signers){if(!k(e)||!k(e.walletKey))throw Error(`sync-account ECDSA custody signer is invalid`);let n=e.walletKey,r=IT(n,`walletId`);if(r!==String(t.walletId))throw Error(`sync-account ECDSA custody signer changed the wallet identity`);i.push({chainTarget:LT(e.chainTarget),walletKey:{walletId:r,keyHandle:IT(n,`keyHandle`),ecdsaThresholdKeyId:IT(n,`ecdsaThresholdKeyId`),signingRootId:IT(n,`signingRootId`),signingRootVersion:IT(n,`signingRootVersion`),relayerKeyId:IT(n,`relayerKeyId`),contextBinding32B64u:IT(n,`contextBinding32B64u`),derivationClientSharePublicKey33B64u:IT(n,`derivationClientSharePublicKey33B64u`),participantIds:RT(n.participantIds),publicCapability:Jr(n.publicCapability)},activationReceipt:Lr(e.activationReceipt),runtimePolicyScope:Fe(e.runtimePolicyScope)})}let a=i[0];if(!a){if(n.ecdsaSession!==void 0||n.ecdsaActivationReceipt!==void 0)throw Error(`sync-account returned an ECDSA session without custody continuity`);return{kind:`wallet_custody_ecdsa_sync_continuity_v1`,state:`absent`,signers:[]}}let o=ei(n.ecdsaSession),s=Lr(n.ecdsaActivationReceipt),c=BT(t.walletSession.capabilitySubjects);if(!c||o.session.authorization_id!==t.walletSession.authorizationId||!Vr(o.public_capability,a.walletKey.publicCapability)||!si(s,a.activationReceipt)||!g(c.materialActivation,Wr(o.public_capability.material_activation))||o.session.wallet_session_id!==t.session.walletSessionId||o.session.quota_id!==t.session.quotaId||o.session.expires_at_ms!==t.session.expiresAtMs||o.session.remaining_uses!==t.session.remainingUses)throw Error(`sync-account ECDSA session changed the Wallet Session or custody identity`);return{kind:`wallet_custody_ecdsa_sync_continuity_v1`,state:`activated`,signers:[a,...i.slice(1)],sessionActivation:o}}async function HT(e){try{return await e.json()}catch{return null}}async function UT(e){let t=await e.fetch(`${e.relayerUrl}/sync-account/options`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({rp_id:e.rpId,...e.walletId?{account_id:e.walletId}:{}})}),n=await HT(t);if(!t.ok||!k(n)||n.ok!==!0){let e=k(n)?String(n.message||n.code||``):``;throw Error(e||`sync-account/options failed (HTTP ${t.status})`)}let r=String(n.challengeId||``).trim(),i=String(n.challengeB64u||``).trim();if(!r||!i)throw Error(`sync-account/options returned an invalid challenge`);let a=k(n.walletBinding)?OT(n,`sync-account/options`):null,o=FT(n.credentialIds);if(e.walletId&&(!a||o.length===0))throw Error(`No passkey recovery capability found for wallet ${e.walletId}`);return{challengeId:r,challengeB64u:i,credentialIds:o,walletBinding:a}}async function WT(e,t){let n=t?hi(String(t)):null,r=NT(e),i=PT(e),a=await UT({relayerUrl:r,rpId:i,walletId:n?String(n):null,fetch:jT});return Object.freeze({walletId:n?String(n):null,relayerUrl:r,rpId:i,syncOptions:a})}function GT(e){let t=String(e.id||``).trim(),n=String(e.rawId||``).trim();if(!t||!n||t!==n)throw Error(`selected passkey credential identity is invalid`);let r=a(n);if(!r.ok)throw Error(`selected passkey credential identity is invalid`);return r.value}function KT(e,t){if(t===null)return e.credentialIds;if(!e.credentialIds.includes(t))throw Error(`replacement account-sync challenge changed the selected passkey`);return[t]}function qT(e,t){if(typeof e!=`string`||e.trim()!==e||!e)return null;let n=t(e);return n.ok?n.value:null}function JT(e){if(e.response.status!==409||!k(e.raw))return null;let t=e.raw;if(t.ok!==!1||t.code!==`already_committed`||t.kind!==`already_committed`||t.next!==`unlock_exact_method`||[`walletId`,`authorityId`,`walletAuthMethodId`,`mintId`,`authorizationId`,`walletSessionId`,`quotaId`].some(e=>{let n=t[e];return typeof n!=`string`||!n.trim()})||`walletSessionToken`in t||`walletSessionJwt`in t||`sessionKind`in t||`walletSession`in t||`operationCredential`in t||`credential`in t)return null;let n=qT(t.walletId,_),i=qT(t.authorityId,s),a=qT(t.walletAuthMethodId,r),o=qT(t.mintId,ht),c=qT(t.authorizationId,yt),l=qT(t.walletSessionId,gt),u=qT(t.quotaId,mt);return!n||!i||!a||!o||!c||!l||!u||e.expectedWalletId!==null&&n!==e.expectedWalletId?null:{walletId:n,walletAuthMethodId:a}}async function YT(e){let t=await e.fetch(`${e.relayerUrl}/sync-account/verify`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({challengeId:e.challengeId,webauthn_authentication:Ks(e.credential)})}),n=await HT(t);if(!t.ok||!k(n)||n.ok!==!0||n.verified!==!0){let r=JT({response:t,raw:n,expectedWalletId:e.expectedWalletId});if(r)return{kind:`already_committed`,walletId:r.walletId,walletAuthMethodId:r.walletAuthMethodId,credentialIdB64u:e.selectedCredentialId};let i=k(n)?String(n.message||n.code||``):``;throw Error(i||`sync-account/verify failed (HTTP ${t.status})`)}let r=OT(n,`sync-account/verify`);e.onRelayVerifySucceeded?.(r);let i=Bs(n);return{kind:`verified`,response:{verifiedBinding:r,parsedYaoResponse:i,ecdsaContinuity:VT(n,i)}}}function XT(e){throw Error(`Unexpected recovered capability ownership: ${String(e)}`)}async function ZT(e){let t=e.ownership;switch(t.kind){case`caller_owned`:t.recovery.activeClient.dispose(),await e.context.signingEngine.clearVolatileWarmSigningMaterial(t.recovery.parsed.walletId);return;case`registry_owned`:await e.context.signingEngine.clearVolatileWarmSigningMaterial(t.recovery.parsed.walletId);return;case`empty`:case`committed`:return;default:return XT(t)}}function QT(e){e.optionsBinding&&kT(e.optionsBinding,e.verifiedBinding,`sync-account/verify`);let t=e.parsed;if(e.verifiedBinding.rpId!==e.rpId||e.requestedWalletId!==null&&e.requestedWalletId!==e.verifiedBinding.walletId||String(t.walletId)!==String(e.verifiedBinding.walletId)||String(t.nearAccountId)!==String(e.verifiedBinding.nearAccountId)||t.nearEd25519SigningKeyId!==String(e.verifiedBinding.nearEd25519SigningKeyId)||t.credentialIdB64u!==e.verifiedBinding.credentialIdB64u||t.credentialIdB64u!==e.selectedCredentialId||e.expectedWalletAuthMethodId!==null&&String(t.walletAuthMethodId)!==e.expectedWalletAuthMethodId||t.signerSlot!==e.verifiedBinding.signerSlot)throw Error(`recovered Yao capability does not match the verified wallet binding`)}function $T(e){let t=e.capability.registrationContinuity;return{materialActivation:e.capability.materialActivation,lifecycleId:e.capability.lifecycle.lifecycleId,signingRootVersion:e.capability.lifecycle.rootShareEpoch,signingRootId:e.capability.applicationBinding.signing_root_id,signerSetId:e.capability.lifecycle.signerSetId,thresholdSessionId:e.capability.lifecycle.thresholdSessionId,activationTranscriptB64u:P(Uint8Array.from(t.activationTranscript)),activationCapabilityBindingB64u:P(Uint8Array.from(e.capability.activeCapabilityBinding))}}async function eE(e){return await e.load({nearAccountId:String(e.parsed.nearAccountId),signerSlot:e.parsed.signerSlot,expectedRegisteredPublicKeyB64u:P(Uint8Array.from(e.parsed.capability.registeredPublicKey))})}function tE(e){return{kind:ec,applicationBindingDigestB64u:e.applicationBindingDigestB64u,registeredPublicKeyB64u:P(e.metadata.registeredPublicKey),participantIds:e.metadata.participantIds,stateEpoch:String(e.metadata.stateEpoch),walletId:String(e.parsed.walletId),nearAccountId:String(e.parsed.nearAccountId),nearEd25519SigningKeyId:e.parsed.nearEd25519SigningKeyId,signerSlot:e.parsed.signerSlot,signingWorkerId:e.parsed.relayerKeyId,signingWorkerVerifyingShareB64u:P(e.metadata.signingWorkerVerifyingShare)}}function nE(e){return`sealLocalMaterial`in e&&typeof e.sealLocalMaterial==`function`}async function rE(e){let t=_s(e.parsed.walletCustody.envelope);if(!t.ok)throw Error(t.reason);let r=e.ownedFactorSecret.slice(),i=null,a=null,o=null;try{let s=mo(e.parsed.walletCustody.envelope),c=$T(e.parsed),l=await Vs({loadCachedMaterial:eE.bind(void 0,{load:e.loadWalletCustodyEd25519Material,parsed:e.parsed}),activation:c,envelope:s,ownedFactorSecret:r});if(l.kind===`opened`)o=l.activeClient;else{i=e.ownedFactorSecret.slice(),a=e.ownedFactorSecret.slice();let n=await e.rejoinWalletCustodyNearEd25519KeySet({walletId:String(e.parsed.walletId),custodyJson:t.custodyJson,factorSecret:i.buffer,nearEd25519SigningKeyId:e.parsed.nearEd25519SigningKeyId,recoveryBasis:e.parsed.capability,routerOrigin:new URL(e.relayerUrl).origin,walletSessionToken:e.parsed.operationCredential.token}),r=tE({parsed:e.parsed,applicationBindingDigestB64u:n.localMaterial.applicationBindingDigestB64u,metadata:n.metadata});await e.persistWalletCustodyEd25519Material({binding:r,sealed:{ciphertextB64u:n.localMaterial.b64u,nonceB64u:n.localMaterial.nonceB64u}}),o=await to({material:{binding:r,sealed:{ciphertextB64u:n.localMaterial.b64u,nonceB64u:n.localMaterial.nonceB64u}},activation:Vo(n.metadata),envelope:s,ownedFactorSecret:a})}if(!o)throw Error(`Wallet custody recovery produced no active Ed25519 client`);if(!nE(o))throw Error(`Wallet custody recovery produced an unsealable Ed25519 client`);let u=n(o.metadata().scope.threshold_session_id);if(!u.ok)throw Error(`Wallet custody recovery returned an invalid threshold session identity`);let d=e.parsed.walletCustody.envelope.factor;if(d.kind!==`passkey`)throw Error(`Wallet custody recovery returned a different factor authority`);await As({store:G,activeClient:o,identity:{walletId:String(e.parsed.walletId),nearAccountId:String(e.parsed.nearAccountId),nearEd25519SigningKeyId:String(e.parsed.nearEd25519SigningKeyId),thresholdSessionId:u.value,signerSlot:e.parsed.signerSlot,rpId:d.rpId,credentialIdB64u:d.credentialIdB64u,signingRootId:e.parsed.capability.applicationBinding.signing_root_id,signingRootVersion:e.parsed.capability.lifecycle.rootShareEpoch,signingWorkerId:e.parsed.relayerKeyId},stableServerScope:{relayerKeyId:e.parsed.relayerKeyId,participantIds:e.parsed.session.participantIds,runtimePolicyScope:e.parsed.capability.runtimePolicyScope,routerAbNormalSigning:e.parsed.session.routerAbNormalSigning},passkeyPrfFirstB64u:P(e.ownedFactorSecret)});let f=Mo({parsed:e.parsed,relayerUrl:e.relayerUrl,rpId:e.rpId,thresholdSessionId:u.value}),p={activeClient:o,walletSessionState:f,parsed:e.parsed},m=Hc(p.activeClient.metadata());await No({persistence:e.sessionPersistence,session:p.walletSessionState,prfFirstB64u:P(e.ownedFactorSecret),ed25519Restore:So({rpId:d.rpId,nearAccountId:String(e.parsed.nearAccountId),nearEd25519SigningKeyId:String(e.parsed.nearEd25519SigningKeyId),relayerKeyId:e.parsed.relayerKeyId,participantIds:e.parsed.session.participantIds,runtimePolicyScope:e.parsed.session.runtimePolicyScope,signerSlot:e.parsed.signerSlot,routerAbNormalSigning:e.parsed.session.routerAbNormalSigning,credentialIdB64u:d.credentialIdB64u,materialActivation:m}),materialActivation:m});let h=await e.activateCapability({activeClient:p.activeClient,facts:{thresholdSessionId:p.walletSessionState.thresholdSessionId,signer:p.walletSessionState.signingLane.identity.signer,signingRootId:p.walletSessionState.signingRootId,signingRootVersion:p.walletSessionState.signingRootVersion,routerAbNormalSigning:p.walletSessionState.routerAbNormalSigning,runtimePolicyScope:p.walletSessionState.runtimePolicyScope,relayerUrl:p.walletSessionState.relayerUrl}});if(!g(h.materialActivation,m))throw Error(`Passkey Ed25519 registry activation changed during recovery commit`);let _=await kr({authority:e.parsed.foundingAuthority,materialActivation:h.materialActivation,updatedAtMs:Date.now()});return await G.persistFoundingWalletAuthority({authority:_,authMethod:e.parsed.foundingAuthMethod}),await e.sessionPersistence.upsertEd25519YaoPublicCapabilityLaneReference(eo({walletSessionState:p.walletSessionState,materialActivation:h.materialActivation})),p}catch(e){throw o?.dispose(),e}finally{r.fill(0),i?.fill(0),a?.fill(0)}}function iE(e){let t=F(e);if(t.length!==20)throw Error(`ECDSA custody address must contain 20 bytes`);let n=`0x`;for(let e of t)n+=e.toString(16).padStart(2,`0`);return n}function aE(e){if(e.state===`absent`)return null;let t=e.signers[0],n=new Set;for(let n of e.signers.slice(1))if(n.walletKey.keyHandle!==t.walletKey.keyHandle||!Vr(n.walletKey.publicCapability,t.walletKey.publicCapability)||!si(n.activationReceipt,t.activationReceipt)||!ts(n.runtimePolicyScope,t.runtimePolicyScope))throw Error(`sync-account returned conflicting ECDSA custody identities`);for(let t of e.signers){let e=V(t.chainTarget);if(n.has(e))throw Error(`sync-account returned duplicate ECDSA custody chain targets`);n.add(e)}return t}async function oE(e){let t=aE(e.continuity);if(!t)return;let n=_s(e.parsed.walletCustody.envelope);if(!n.ok)throw Error(n.reason);let r=t.walletKey,i=t.activationReceipt.ecdsa_activation.public_identity,a=e.ownedFactorSecret.slice(),[o,...s]=e.continuity.signers.map(e=>e.chainTarget);if(o)try{let c=await e.signingSurface.rejoinWalletCustodyEvmFamilyKeySet({walletId:r.walletId,custodyJson:n.custodyJson,factorSecret:a.buffer,evmFamilySigningKeySlotId:Gr({walletId:r.walletId,signingRootId:r.signingRootId,signingRootVersion:r.signingRootVersion}),applicationBindingDigestB64u:r.publicCapability.context.application_binding_digest_b64u,registeredClientRootPublicKey33B64u:r.derivationClientSharePublicKey33B64u,relayerPublicIdentityJson:JSON.stringify({relayerKeyId:r.relayerKeyId,relayerPublicKey33B64u:i.server_public_key33_b64u,groupPublicKey33B64u:i.threshold_public_key33_b64u,ethereumAddress:iE(i.ethereum_address20_b64u),relayerShareRetryCounter:i.server_share_retry_counter})});await e.signingSurface.restoreWalletCustodyEcdsaContinuity({authority:e.parsed.authority,chainTargets:[o,...s],walletId:r.walletId,keyHandle:r.keyHandle,ecdsaThresholdKeyId:r.ecdsaThresholdKeyId,signingRootId:r.signingRootId,signingRootVersion:r.signingRootVersion,relayerKeyId:r.relayerKeyId,participantIds:r.participantIds,publicCapability:r.publicCapability,activationReceipt:t.activationReceipt,runtimePolicyScope:t.runtimePolicyScope,readyStateBlobB64u:c.readyStateBlobB64u,publicFacts:c.publicFacts})}finally{a.fill(0)}}async function sE(e){let t=e.walletId===null?null:String(e.walletId).trim();if(e.walletId!==null&&!t)throw Error(`passkey Yao unlock recovery requires a valid walletId`);let n=t?hi(t):null,r=e.prepared??await UT({relayerUrl:e.relayerUrl,rpId:e.rpId,walletId:n?String(n):null,fetch:e.fetch});if(e.prepared&&!e.credential)throw Error(`prepared account-sync challenge requires a CTA credential`);let i=KT(r,e.expectedCredentialIdB64u);e.onPromptStarted?.();let a=e.credential?e.credential:await e.collectCredential({challengeB64u:r.challengeB64u,credentialIds:i});e.onPromptSucceeded?.();let o=GT(a);if(e.expectedCredentialIdB64u!==null&&o!==e.expectedCredentialIdB64u)throw Error(`replacement account-sync assertion changed the selected passkey`);let s=Us(a);if(!s)throw Error(`selected passkey did not return PRF.first`);e.onRelayVerifyStarted?.();let c=await YT({relayerUrl:e.relayerUrl,challengeId:r.challengeId,expectedWalletId:n,selectedCredentialId:o,credential:a,fetch:e.fetch,onRelayVerifySucceeded:e.onRelayVerifySucceeded});if(c.kind===`already_committed`)return c;let{verifiedBinding:l,parsedYaoResponse:u,ecdsaContinuity:d}=c.response,f=F(s);try{QT({requestedWalletId:n,expectedWalletAuthMethodId:e.expectedWalletAuthMethodId,rpId:e.rpId,optionsBinding:r.walletBinding,verifiedBinding:l,parsed:u,selectedCredentialId:o}),await e.prepareLocalProfile(u,a);let t=await e.withExactEd25519MaterialOwner({materialActivation:u.capability.materialActivation,nearAccountId:u.nearAccountId,task:rE.bind(void 0,{parsed:u,ownedFactorSecret:f,relayerUrl:e.relayerUrl,rpId:e.rpId,sessionPersistence:e.sessionPersistence,activateCapability:e.activateCapability,rejoinWalletCustodyNearEd25519KeySet:e.rejoinWalletCustodyNearEd25519KeySet,loadWalletCustodyEd25519Material:e.loadWalletCustodyEd25519Material,persistWalletCustodyEd25519Material:e.persistWalletCustodyEd25519Material})});return await Rs({walletId:String(u.walletId),credentialIdB64u:u.credentialIdB64u,envelope:u.walletCustody.envelope}),await oE({signingSurface:{rejoinWalletCustodyEvmFamilyKeySet:e.rejoinWalletCustodyEvmFamilyKeySet,restoreWalletCustodyEcdsaContinuity:e.restoreWalletCustodyEcdsaContinuity},parsed:u,continuity:d,ownedFactorSecret:f}),{kind:`recovered`,recovery:t,verifiedBinding:l}}finally{f.fill(0)}}async function cE(e){let t=e.parsed,n=F(t.credentialPublicKeyB64u);await e.context.signingEngine.storeUserData({walletId:String(t.walletId),nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,operationalPublicKey:t.operationalPublicKey,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,lastUpdated:Date.now(),passkeyCredential:{id:String(e.credential.id||``),rawId:String(e.credential.rawId||``)},version:2}),await e.context.signingEngine.setWalletNearProvisioningState({walletId:t.walletId,status:`near_ready`,nearAccountId:t.nearAccountId});let r=(await G.listWalletPasskeyAuthenticators(String(t.walletId))).find(e=>e.credentialId===t.credentialIdB64u);if(r){if(r.signerSlot!==t.signerSlot||P(r.credentialPublicKey)!==t.credentialPublicKeyB64u)throw Error(`Stored linked passkey authenticator does not match account sync`)}else await e.context.signingEngine.storeAuthenticator({nearAccountId:t.nearAccountId,credentialId:t.credentialIdB64u,credentialPublicKey:n,transports:[],name:`Passkey for ${String(t.walletId)}`,registered:new Date().toISOString(),syncedAt:new Date().toISOString(),signerSlot:t.signerSlot});await G.persistFoundingWalletAuthority({authority:t.foundingAuthority,authMethod:t.foundingAuthMethod})}async function lE(e,t){await e.storeNearThresholdKeyMaterial({nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,publicKey:t.operationalPublicKey,relayerKeyId:t.relayerKeyId,keyVersion:t.keyVersion,participants:ce({clientParticipantId:t.session.participantIds[0],relayerParticipantId:t.session.participantIds[1],relayerKeyId:t.relayerKeyId,clientShareDerivation:`prf_first_v1`}),signerId:t.operationalPublicKey})}async function uE(e){await K.writeExactWithOperationCredential({record:e.walletSession,operationCredential:e.operationCredential})}async function dE(e,t,n){await cE({context:e,parsed:t,credential:n})}function fE(e){return{id:e,type:`public-key`,transports:[]}}async function pE(e,t){return await e.signingSurface.getAuthenticationCredentialsSerialized({subjectId:e.requestedWalletId||`account-sync`,challengeB64u:t.challengeB64u,allowCredentials:t.credentialIds.map(fE),includeSecondPrfOutput:!1})}function mE(e){MT({onEvent:e.onEvent,flowId:e.flowId,event:{phase:Ri.STEP_02_PASSKEY_PROMPT_STARTED,status:`waiting_for_user`,...e.requestedWalletId?{accountId:e.requestedWalletId}:{},interaction:{kind:`passkey_assert`,overlay:`show`}}})}function hE(e){MT({onEvent:e.onEvent,flowId:e.flowId,event:{phase:Ri.STEP_02_PASSKEY_PROMPT_SUCCEEDED,status:`succeeded`,...e.requestedWalletId?{accountId:e.requestedWalletId}:{},interaction:{kind:`passkey_assert`,overlay:`hide`}}})}function gE(e){MT({onEvent:e.onEvent,flowId:e.flowId,event:{phase:Ri.STEP_03_RELAY_VERIFY_STARTED,status:`started`,...e.requestedWalletId?{accountId:e.requestedWalletId}:{}}})}function _E(e,t){MT({onEvent:e.onEvent,flowId:e.flowId,event:{phase:Ri.STEP_03_RELAY_VERIFY_SUCCEEDED,status:`succeeded`,accountId:String(t.walletId)}})}async function vE(e,t,n,r,i,a){let o=t?hi(String(t)):null;if(n.kind===`replacement_after_committed`&&o!==n.walletId)throw Error(`replacement account-sync attempt changed the committed wallet`);if(i&&i.walletId!==(o?String(o):null))throw Error(`prepared account-sync challenge wallet binding changed`);let s=`account-sync:${String(o||`discovery`)}`,c={kind:`empty`};try{let t=i?.relayerUrl??NT(e),l=i?.rpId??PT(e);if(i&&(NT(e)!==t||PT(e)!==l))throw Error(`prepared account-sync challenge runtime binding changed`);MT({onEvent:r?.onEvent,flowId:s,event:{phase:Ri.STEP_01_STARTED,status:`started`,...o?{accountId:String(o)}:{}}});let u={signingSurface:e.signingEngine,requestedWalletId:o?String(o):null,onEvent:r?.onEvent,flowId:s},d=await sE({walletId:o?String(o):null,relayerUrl:t,rpId:l,fetch:jT,expectedCredentialIdB64u:n.kind===`replacement_after_committed`?n.credentialIdB64u:null,expectedWalletAuthMethodId:n.kind===`replacement_after_committed`?n.walletAuthMethodId:null,...i?{prepared:i.syncOptions,credential:a}:{},collectCredential:pE.bind(void 0,u),activateCapability:e.signingEngine.activateVerifiedNearEd25519YaoMaterial.bind(e.signingEngine),withExactEd25519MaterialOwner:e.signingEngine.withExactEd25519MaterialOwner.bind(e.signingEngine),sessionPersistence:e.signingEngine,rejoinWalletCustodyNearEd25519KeySet:e.signingEngine.rejoinWalletCustodyNearEd25519KeySet.bind(e.signingEngine),rejoinWalletCustodyEvmFamilyKeySet:e.signingEngine.rejoinWalletCustodyEvmFamilyKeySet.bind(e.signingEngine),restoreWalletCustodyEcdsaContinuity:e.signingEngine.restoreWalletCustodyEcdsaContinuity.bind(e.signingEngine),loadWalletCustodyEd25519Material:e.signingEngine.loadWalletCustodyEd25519Material.bind(e.signingEngine),persistWalletCustodyEd25519Material:e.signingEngine.persistWalletCustodyEd25519Material.bind(e.signingEngine),prepareLocalProfile:dE.bind(void 0,e),onPromptStarted:mE.bind(void 0,u),onPromptSucceeded:hE.bind(void 0,u),onRelayVerifyStarted:gE.bind(void 0,u),onRelayVerifySucceeded:_E.bind(void 0,u)});if(d.kind===`already_committed`){if(n.kind===`initial`)return await vE(e,d.walletId,{kind:`replacement_after_committed`,walletId:d.walletId,walletAuthMethodId:d.walletAuthMethodId,credentialIdB64u:d.credentialIdB64u},r);throw Error(`sync-account/verify remained already committed after one replacement attempt`)}let{recovery:f,verifiedBinding:p}=d;return c={kind:`registry_owned`,recovery:f},await uE(f.parsed),await lE(e.signingEngine,f.parsed),MT({onEvent:r?.onEvent,flowId:s,event:{phase:Ri.STEP_04_AUTHENTICATOR_SAVED,status:`succeeded`,accountId:String(p.walletId)}}),MT({onEvent:r?.onEvent,flowId:s,event:{phase:Ri.STEP_05_THRESHOLD_SESSION_READY,status:`succeeded`,accountId:String(p.walletId)}}),await e.signingEngine.activateAuthenticatedWalletState({walletId:p.walletId,nearAccountId:p.nearAccountId,signerSlot:p.signerSlot,nearClient:e.nearClient}),c={kind:`committed`},MT({onEvent:r?.onEvent,flowId:s,event:{phase:Ri.STEP_06_COMPLETED,status:`succeeded`,accountId:String(p.walletId)}}),{success:!0,accountId:String(p.walletId),walletId:String(p.walletId),nearAccountId:String(p.nearAccountId),nearEd25519SigningKeyId:String(p.nearEd25519SigningKeyId),publicKey:f.parsed.operationalPublicKey,message:`Account synced successfully`,loginState:{isLoggedIn:!0}}}catch(t){let n=L(t)||`syncAccount failed`;try{await ZT({context:e,ownership:c})}catch(e){let t=L(e)||`recovered capability cleanup failed`;n=`${n}; ${t}`}return MT({onEvent:r?.onEvent,flowId:s,event:{phase:Ri.FAILED,status:`failed`,...o?{accountId:String(o)}:{},error:{message:n}}}),AT(n)}}async function yE(e,t,n){return await vE(e,t,{kind:`initial`},n)}async function bE(e,t,n,r){return await vE(e,t.walletId,{kind:`initial`},r,t,n)}function xE(e,t,n){try{e?.(Ii({...n,flowId:`signing:near:${String(t)}:${n.phase}`,accountId:String(t)}))}catch{}}function SE(e){let t=rn(mn(e.nearAccountId));return{walletSession:sn(e.walletSession),nearAccount:t}}function CE(e){let t=e.transaction,n=String(t.signerId||``).trim();if(!n)throw Error(`Signed transaction is missing signerId`);return n}function wE(e){let t=CE(e.signedTransaction);if(t!==String(e.nearAccountId))throw Error(`Signed transaction signerId ${t} does not match NEAR account ${String(e.nearAccountId)}`)}function TE(e){if(!(e.serverDispatch||e.nonceLease))throw Error(`near.sendTransaction requires an SDK-produced signed transaction with nonce readiness`)}function EE(e){let t=String(e||``).trim();if(!t)throw Error(`NEAR broadcast response is missing transaction hash`);return t}function DE(e){return!e.signedTransaction.serverDispatch&&!e.signedTransaction.nonceLease&&e.signingResult.nonceLease&&(e.signedTransaction.nonceLease=e.signingResult.nonceLease),e.signedTransaction}async function OE(){if(typeof window<`u`&&typeof window.requestAnimationFrame==`function`){await new Promise(e=>{window.requestAnimationFrame(()=>e())});return}await Promise.resolve()}async function kE(e){return NE({context:e.context,nearAccountId:e.nearAccountId,walletSession:e.walletSession,transactionInput:e.transactionInput,options:e.options,confirmationConfigOverride:e.options.confirmationConfig})}async function AE(e){try{return PE({context:e.context,nearAccountId:e.nearAccountId,walletSession:e.walletSession,transactionInput:e.transactionInput,options:e.options,confirmationConfigOverride:e.options.confirmationConfig})}catch(e){throw I(e)}}async function jE({context:e,nearAccountId:t,walletSession:n,signedTransaction:r,options:i}){let a=r.nonceLease,o={kind:`not_started`},s,c;try{let l=SE({nearAccountId:t,walletSession:n}).nearAccount.accountId;if(wE({signedTransaction:r,nearAccountId:l}),TE(r),xE(i?.onEvent,l,{phase:U.STEP_12_BROADCAST_STARTED,status:`running`,interaction:{kind:`none`,overlay:`none`}}),r.serverDispatch){if(o={kind:`dispatching`},s=r.serverDispatch.rpcResult,c=EE(r.serverDispatch.transactionHash),c!==r.transactionHash)throw Error(`NEAR dispatch returned a different transaction hash`);return o={kind:`accepted`,transactionId:c},a&&(await e.signingEngine.getNonceCoordinator().markBroadcastAccepted({leaseId:a.leaseId,operationId:a.operationId,operationFingerprint:a.operationFingerprint,txHash:c}),await e.signingEngine.getNonceCoordinator().markFinalized({leaseId:a.leaseId,operationId:a.operationId,operationFingerprint:a.operationFingerprint,txHash:c})),xE(i?.onEvent,l,{phase:U.STEP_12_BROADCAST_ACCEPTED,status:`succeeded`,message:`Transaction ${c} sent successfully`,interaction:{kind:`none`,overlay:`none`},data:{txId:c}}),xE(i?.onEvent,l,{phase:U.STEP_15_COMPLETED,status:`succeeded`,message:`Transaction ${c} completed`,interaction:{kind:`none`,overlay:`none`},data:{txId:c}}),{success:!0,transactionId:c,result:s}}if(o={kind:`dispatching`},s=await e.nearClient.sendTransaction(r,i?.waitUntil),c=EE(s.transaction.hash),c!==r.transactionHash)throw Error(`NEAR RPC returned a different transaction hash`);o={kind:`accepted`,transactionId:c},a&&(await e.signingEngine.getNonceCoordinator().markBroadcastAccepted({leaseId:a.leaseId,operationId:a.operationId,operationFingerprint:a.operationFingerprint,txHash:c}),await e.signingEngine.getNonceCoordinator().markFinalized({leaseId:a.leaseId,operationId:a.operationId,operationFingerprint:a.operationFingerprint,...c?{txHash:c}:{}})),xE(i?.onEvent,l,{phase:U.STEP_12_BROADCAST_ACCEPTED,status:`succeeded`,message:`Transaction ${c} sent successfully`,interaction:{kind:`none`,overlay:`none`},...c?{data:{txId:c}}:{}}),xE(i?.onEvent,l,{phase:U.STEP_15_COMPLETED,status:`succeeded`,message:`Transaction ${c} completed`,interaction:{kind:`none`,overlay:`none`},...c?{data:{txId:c}}:{}})}catch(e){let n=I(e);console.error(`[sendTransaction] failed:`,n);let a=n.details;switch(a&&console.error(`[sendTransaction] RPC error details:`,a),xE(i?.onEvent,t,{phase:U.FAILED,status:`failed`,interaction:{kind:`none`,overlay:`hide`},error:{message:n.message}}),o.kind){case`not_started`:return ut(n,`not_submitted`);case`dispatching`:return st(r.transactionHash,n);case`accepted`:return st(o.transactionId,n);default:return ME(o)}}return{success:!0,transactionId:c,result:s}}function ME(e){throw Error(`Unsupported NEAR submission state: ${String(e)}`)}async function NE({context:e,nearAccountId:t,walletSession:n,transactionInput:r,options:i,confirmationConfigOverride:a}){try{let o=await PE({context:e,nearAccountId:t,walletSession:n,transactionInput:r,options:i,confirmationConfigOverride:a});return await jE({context:e,nearAccountId:t,walletSession:n,signedTransaction:DE({signedTransaction:o.signedTransaction,signingResult:o}),options:{onEvent:i?.onEvent,waitUntil:i?.waitUntil}})}catch(e){let n=I(e),r=n.short||un(n)||n.message;return xE(i?.onEvent,t,{phase:U.FAILED,status:`failed`,message:`Action failed: ${r}`,interaction:{kind:`none`,overlay:`hide`},error:{message:r}}),ut(n,`not_submitted`)}}async function PE({context:e,nearAccountId:t,walletSession:n,transactionInput:r,options:i,confirmationConfigOverride:a}){let{onEvent:o,onError:s,waitUntil:c,confirmerText:l,signerSlot:u}=i||{};try{xE(o,t,{phase:U.STEP_01_STARTED,status:`started`,message:`Starting ${r.actions[0].type} action`,interaction:{kind:`none`,overlay:`none`}}),await FE(t,[r],{onEvent:o,onError:s,waitUntil:c}),await OE();let i={receiverId:r.receiverId,actions:r.actions.map(e=>Ya(e))},d=await e.signingEngine.signNear({chain:`near`,kind:`transactionWithActions`,args:{commandSubject:SE({nearAccountId:t,walletSession:n}),transaction:i,rpcCall:{nearRpcUrl:Ke(e.configs.network.chains),nearAccountId:t},signerSlot:u,confirmationConfigOverride:a,title:l?.title,body:l?.body,onEvent:o}});if(!d?.signedTransaction)throw Error(`NEAR signing returned no signed transaction`);return d}catch(e){console.error(`[signTransaction] Error during execution:`,e);let n=I(e),r=n.short||un(n)||n.message;throw s?.(n),xE(o,t,{phase:U.FAILED,status:`failed`,message:`Action failed: ${r}`,interaction:{kind:`none`,overlay:`hide`},error:{message:r}}),n}}async function FE(e,t,n){let{onEvent:r}=n||{};if(!e)throw Error(`User not logged in or NEAR account ID not set for direct action.`);if(xE(r,e,{phase:U.STEP_02_REQUEST_PREPARED,status:`running`,message:`Validating inputs`,interaction:{kind:`none`,overlay:`none`}}),t.length===0)throw Error(`No payloads provided for signing`);if(t.length!==1)throw Error(`NEAR signing supports exactly one transaction per operation; received ${t.length}`);for(let e of t){if(!e.receiverId)throw Error(`Missing required parameter: receiverId`);for(let t of e.actions){if(t.type===Xa.FunctionCall&&(!t.methodName||t.args===void 0))throw Error(`Missing required parameters for function call: methodName or args`);if(t.type===Xa.Transfer&&!t.amount)throw Error(`Missing required parameter for transfer: amount`)}}}async function IE(){if(typeof window<`u`&&typeof window.requestAnimationFrame==`function`){await new Promise(RE);return}await Promise.resolve()}async function LE(e){let{context:t,delegate:n,options:r}=e,i=mn(String(e.nearAccountId)),a=r?.confirmerText?.title,o=r?.confirmerText?.body,s={...n,senderId:n.senderId||String(i)};xE(r?.onEvent,i,{phase:U.STEP_01_STARTED,status:`started`,message:`Preparing delegate action inputs`,interaction:{kind:`none`,overlay:`none`}}),await IE();try{let n=await t.signingEngine.signNear({chain:`near`,kind:`delegateAction`,args:{commandSubject:SE({nearAccountId:i,walletSession:e.walletSession}),delegate:s,rpcCall:{nearRpcUrl:Ke(t.configs.network.chains),nearAccountId:String(i)},signerSlot:r?.signerSlot,confirmationConfigOverride:r?.confirmationConfig,title:a,body:o,onEvent:r?.onEvent}}),c={hash:n.hash,signedDelegate:n.signedDelegate,nearAccountId:String(i),logs:n.logs};return xE(r?.onEvent,i,{phase:U.STEP_15_COMPLETED,status:`succeeded`,message:`Delegate action signed`,interaction:{kind:`none`,overlay:`none`},data:{hash:c.hash}}),await r?.afterCall?.(!0,c),c}catch(e){let t=I(e);throw r?.onError?.(t),await r?.afterCall?.(!1),xE(r?.onEvent,i,{phase:U.FAILED,status:`failed`,message:t.message,interaction:{kind:`none`,overlay:`hide`},error:{message:t.message}}),t}}function RE(e){window.requestAnimationFrame(e)}async function zE(e){let{context:t,nearAccountId:n,params:r,options:i}=e,a=i?.confirmerText,o=i?.confirmationConfig,{signingEngine:s}=t,c=i?.signerSlot,l=typeof c==`number`&&Number.isSafeInteger(c)&&c>=1;try{let u=r.callbackUrl===void 0?null:D(r.callbackUrl,`callbackUrl`),d=r.state===void 0?null:te(r.state,`state`);if(xE(i?.onEvent,n,{phase:U.STEP_01_STARTED,status:`started`,message:`Preparing NEP-413 message signing`,interaction:{kind:`none`,overlay:`none`}}),c!==void 0&&!l)throw Error(`Invalid signerSlot for NEP-413 signing: ${c}`);let f=l?await s.getUserBySignerSlot(n,c):await s.getLastUser();if(!f||!f.operationalPublicKey)throw Error(`Operational NEAR key data not found for ${n}`);let p=new Uint8Array(32);if(typeof crypto>`u`||typeof crypto.getRandomValues!=`function`)throw Error(`Secure random not available to generate NEP-413 nonce`);crypto.getRandomValues(p);let m=ge(p);xE(i?.onEvent,n,{phase:U.STEP_10_COMMIT_STARTED,status:`running`,message:`Signing NEP-413 message`,interaction:{kind:`none`,overlay:`none`}});let h=await t.signingEngine.signNear({chain:`near`,kind:`nep413`,args:{commandSubject:SE({nearAccountId:n,walletSession:e.walletSession}),onEvent:i?.onEvent,message:r.message,recipient:r.recipient,nonce:m,callbackUrl:u,state:d,signerSlot:l?c:void 0,title:a?.title,body:a?.body,confirmationConfigOverride:o}});if(h.success)return xE(i?.onEvent,n,{phase:U.STEP_15_COMPLETED,status:`succeeded`,message:`NEP-413 message signed successfully`,interaction:{kind:`none`,overlay:`none`}}),{success:!0,accountId:h.accountId,publicKey:h.publicKey,signature:h.signature,nonce:m,...h.state===void 0?{}:{state:h.state}};throw Error(`NEP-413 signing failed: ${h.error||`Unknown error`}`)}catch(e){let t=e instanceof Error?e.message:`Unknown error`;return xE(i?.onEvent,n,{phase:U.FAILED,status:`failed`,message:`NEP-413 signing failed: ${t}`,interaction:{kind:`none`,overlay:`hide`},error:{message:t}}),i?.onError?.(e instanceof Error?e:Error(t)),{success:!1,error:t}}}function BE(e){let t=new VE(e);return{signAndSendTransaction:t.signAndSendTransaction.bind(t),signTransaction:t.signTransaction.bind(t),sendTransaction:t.sendTransaction.bind(t),signDelegateAction:t.signDelegateAction.bind(t),signMessage:t.signMessage.bind(t)}}var VE=class{constructor(e){this.getContext=e}async signAndSendTransaction(e){let t=e.nearAccount.accountId,n={receiverId:e.receiverId,actions:e.actions};try{return await kE({context:this.getContext(),nearAccountId:t,walletSession:e.walletSession,transactionInput:n,options:e.options})}catch(e){return ut(e,`not_submitted`)}}async signTransaction(e){let t=e.nearAccount.accountId,{transaction:n,options:r}=e;try{return await AE({context:this.getContext(),nearAccountId:t,walletSession:e.walletSession,transactionInput:n,options:r})}catch(e){let t=I(e);throw await r?.afterCall?.(!1,void 0,t),t}}async sendTransaction(e){let t=e.nearAccount.accountId;return await jE({context:this.getContext(),nearAccountId:t,walletSession:e.walletSession,signedTransaction:e.signedTransaction,options:e.options})}async signDelegateAction(e){let t=e.nearAccount.accountId,{delegate:n,options:r}=e;return await LE({context:this.getContext(),nearAccountId:t,walletSession:e.walletSession,delegate:n,options:r})}async signMessage(e){let t=e.nearAccount.accountId,n=await zE({context:this.getContext(),nearAccountId:t,walletSession:e.walletSession,params:e.params,options:e.options});if(n?.success)await e.options?.afterCall?.(!0,n);else{let t=I(n?.error||`NEP-413 signing failed`);await e.options?.afterCall?.(!1,void 0,t)}return n}};function HE(e){let t=new UE(e);return{signEvmFamily:t.signEvmFamily.bind(t),reportBroadcastAccepted:t.reportBroadcastAccepted.bind(t),reportBroadcastRejected:t.reportBroadcastRejected.bind(t),reportFinalized:t.reportFinalized.bind(t),reportDroppedOrReplaced:t.reportDroppedOrReplaced.bind(t),reconcileNonceLane:t.reconcileNonceLane.bind(t),onBroadcastStarted:t.onBroadcastStarted.bind(t)}}var UE=class{constructor(e){this.getContext=e}async signEvmFamily(e){let{chainTarget:t,walletSession:n}=e;return await this.getContext().signingEngine.signEvmFamily({walletSession:n,request:e.request,chainTarget:t,confirmationConfigOverride:e.options?.confirmationConfig,shouldAbort:e.options?.shouldAbort,onEvent:e.options?.onEvent})}async reportBroadcastAccepted(e){let t=B(e.walletSession.walletId);await this.getContext().signingEngine.reportTempoBroadcastAccepted({walletId:t,signedResult:e.signedResult,txHash:e.txHash,onEvent:e.options?.onEvent})}async reportBroadcastRejected(e){let t=B(e.walletSession.walletId);await this.getContext().signingEngine.reportTempoBroadcastRejected({walletId:t,signedResult:e.signedResult,...e.error===void 0?{}:{error:e.error},onEvent:e.options?.onEvent})}async reportFinalized(e){let t=B(e.walletSession.walletId);await this.getContext().signingEngine.reportTempoFinalized({walletId:t,signedResult:e.signedResult,...e.txHash?{txHash:e.txHash}:{},...e.receiptStatus?{receiptStatus:e.receiptStatus}:{},onEvent:e.options?.onEvent})}async reportDroppedOrReplaced(e){let t=B(e.walletSession.walletId);await this.getContext().signingEngine.reportTempoDroppedOrReplaced({walletId:t,signedResult:e.signedResult,reason:e.reason,...e.txHash?{txHash:e.txHash}:{},onEvent:e.options?.onEvent})}async reconcileNonceLane(e){let t=B(e.walletSession.walletId);return await this.getContext().signingEngine.reconcileTempoNonceLane({walletId:t,signedResult:e.signedResult,onEvent:e.options?.onEvent})}onBroadcastStarted(e){}};const WE=/^0x[0-9a-fA-F]{40}$/,GE=`0xfeec000000000000000000000000000000000000`,KE=[{type:`function`,name:`setUserToken`,inputs:[{name:`token`,type:`address`}]}];function qE(e,t){let n=String(t||``).trim();if(!WE.test(n))throw Error(`[tempo] invalid ${e}: expected 20-byte 0x-prefixed address`);return n.toLowerCase()}function JE(e){return`0xe7897444${qE(`fee token address`,e).slice(2).toLowerCase().padStart(64,`0`)}`}function YE(e){let{request:t,chainTarget:n}=e;if(t.chain!==`evm`||t.kind!==`eip1559`||t.senderSignatureAlgorithm!==`secp256k1`)throw Error(`[tempo] fee-token request must use the EIP-1559 secp256k1 envelope`);if(t.tx.chainId!==n.chainId)throw Error(`[tempo] fee-token request chain id does not match the Tempo target`);if(t.tx.to?.toLowerCase()!==`0xfeec000000000000000000000000000000000000`)throw Error(`[tempo] fee-token request must call the Tempo FeeManager`);if(t.tx.value!==0n)throw Error(`[tempo] fee-token request must not transfer value`);let r=String(t.tx.data??``).toLowerCase(),i=r.slice(10);if(!r.startsWith(`0xe7897444`)||!/^0{24}[0-9a-f]{40}$/.test(i))throw Error(`[tempo] fee-token request must call FeeManager.setUserToken(address)`);if(t.tx.accessList&&t.tx.accessList.length!==0)throw Error(`[tempo] fee-token request must not carry an access list`);let a=qE(`fee token address`,`0x${i.slice(24)}`);return{...t,tx:{...t.tx,to:GE,value:0n,data:JE(a)}}}function XE(e){return`0xed498fa8${qE(`user address`,e).slice(2).toLowerCase().padStart(64,`0`)}`}function ZE(e){let t=String(e||``).trim().toLowerCase();if(!/^0x[0-9a-f]*$/.test(t))throw Error(`[tempo] invalid userTokens(address) result: expected 0x-prefixed hex`);let n=t.slice(2);if(n.length<64)throw Error(`[tempo] invalid userTokens(address) result: expected at least 32 bytes`);let r=n.slice(0,64).slice(24);if(!/^[0-9a-f]{40}$/.test(r))throw Error(`[tempo] invalid userTokens(address) result: malformed address word`);return/^0+$/.test(r)?null:`0x${r}`}function QE(e){let t=qE(`fee token address`,e.token);return{to:qE(`fee manager contract address`,e.feeManager??`0xfeec000000000000000000000000000000000000`),value:0n,input:JE(t),abi:KE}}function $E(e,t){let n=String(e||``).trim().toLowerCase();if(!/^0x[0-9a-f]+$/.test(n))throw Error(`[tempo] invalid ${t} result: expected 0x-prefixed hex`);let r=n.slice(2);if(r.length<128)throw Error(`[tempo] invalid ${t} result: missing ABI string header`);let i=Number(BigInt(`0x${r.slice(0,64)}`));if(!Number.isSafeInteger(i))throw Error(`[tempo] invalid ${t} result: unsafe ABI offset`);let a=i*2,o=a+64;if(o>r.length)throw Error(`[tempo] invalid ${t} result: ABI offset out of bounds`);let s=Number(BigInt(`0x${r.slice(a,o)}`));if(!Number.isSafeInteger(s))throw Error(`[tempo] invalid ${t} result: unsafe ABI string length`);let c=o;if(c+s*2>r.length)throw Error(`[tempo] invalid ${t} result: ABI string out of bounds`);let l=new Uint8Array(s);for(let e=0;e<s;e+=1)l[e]=Number.parseInt(r.slice(c+e*2,c+e*2+2),16);return new TextDecoder().decode(l)}function eD(e,t){let n=String(e||``).trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(n))throw Error(`[tempo] invalid ${t} result: expected one ABI word`);let r=BigInt(n);if(r!==0n&&r!==1n)throw Error(`[tempo] invalid ${t} result: expected boolean`);return r===1n}async function tD(e){let t=await df({rpcUrl:e.rpcUrl,...e.timeoutMs===void 0?{}:{requestTimeoutMs:e.timeoutMs}}).request({method:`eth_call`,params:[{to:e.to,data:e.data},`latest`],...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}});if(typeof t!=`string`)throw Error(`[tempo] invalid eth_call response: expected a hex string`);return t}async function nD(e){let t=qE(`account address`,e.account);return ZE(await tD({rpcUrl:e.rpcUrl,to:GE,data:XE(t),...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}))}async function rD(e){let t=qE(`fee token address`,e.feeToken),n={rpcUrl:e.rpcUrl,to:t,...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}},r=$E(await tD({...n,data:`0xe5a6b10f`}),`currency()`);return r===`USD`?eD(await tD({...n,data:`0x5c975abb`}),`paused()`)?{kind:`invalid`,feeToken:t,reason:`paused`,currency:`USD`}:{kind:`valid`,feeToken:t,currency:`USD`,paused:!1}:{kind:`invalid`,feeToken:t,reason:`unsupported_currency`,currency:r}}function iD(e){if(!Number.isSafeInteger(e.chainId)||e.chainId<=0)throw Error(`[tempo] chainId must be a positive safe integer`);if(e.maxPriorityFeePerGas<0n)throw Error(`[tempo] maxPriorityFeePerGas must be non-negative`);if(e.maxFeePerGas<e.maxPriorityFeePerGas)throw Error(`[tempo] maxFeePerGas must be at least maxPriorityFeePerGas`);if(e.gasLimit<=0n)throw Error(`[tempo] gasLimit must be positive`);let t=QE({token:e.feeToken});return{chain:`evm`,kind:`eip1559`,senderSignatureAlgorithm:`secp256k1`,tx:{chainId:e.chainId,maxPriorityFeePerGas:e.maxPriorityFeePerGas,maxFeePerGas:e.maxFeePerGas,gasLimit:e.gasLimit,to:t.to,value:0n,data:t.input??`0x`,abi:t.abi,accessList:[]}}}function aD(e){return{managerStores:{userPreferencesStore:e,nonceLaneCoordinationStore:Ki({indexedDB:e}),webauthnCredentialStore:e,passkeyAuthenticatorStore:e,nearKeyMaterialStore:e},signingEngineStores:{walletProfileAndSignerRecords:{accountStore:e,walletSignerStore:e,passkeyAuthenticatorStore:e,ecdsaBootstrapStore:e},recoveryAndDeviceLinking:{credentialStore:e},warmup:{store:e}},sealedSigningSessionStore:{writeExactSealedSession:ps,readExactSealedSession:ao,listExactSealedSessionsForWallet:Lo,listEcdsaSealedSessionsForWallet:Fs,acquireSigningSessionRestoreLease:Fo,releaseSigningSessionRestoreLease:Oo,updateExactSealedSessionPolicy:$a},ed25519YaoPublicCapabilityReferences:new Wi(e)}}function oD(){return Kf()||(typeof window<`u`?window.location.origin:``)}function sD(e){e.setWorkerBaseOrigin(oD()),typeof window<`u`&&it(()=>{let t=oD();t!==e.getWorkerBaseOrigin()&&e.setWorkerBaseOrigin(t)}),e.userPreferencesManager.initFromIndexedDB().catch(()=>void 0)}async function cD(e){let t=Cl(),n=new Uint8Array(e.factorSecret.slice(0));try{return await uD(e,t,t=>{let r=_s(e.custodyEnvelope);if(!r.ok)throw Error(r.reason);return e.worker.rotateRecoverySet({custodyJson:r.custodyJson,factorSecret:n.buffer.slice(0),recoveryCodesJson:dD(t)})})}finally{n.fill(0),t&&yl(t),t=null}}async function lD(e){let t=Cl();try{return await uD(e,t,t=>e.worker.rotateRecoverySet({recoveryCodesJson:dD(t)}))}finally{t&&yl(t),t=null}}async function uD(e,t,n){let r={walletId:e.walletId,requestId:e.statusRequestId},i=await Ef({relayUrl:e.relayUrl,walletId:e.walletId,requestId:e.statusRequestId,factorProof:await e.factorProof({operation:`recovery_status`,payload:r}),...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});if(i.kind!==`ready`)return i.kind===`unauthorized`?{kind:`transport_failed`,message:i.message}:i;let a=bl(await n(t.codeBytes));if(a.walletId!==e.walletId)throw Error(`Recovery rotation worker returned a different wallet`);let o=await fD(t.codeBytes,a.manifestKekWraps),s=await Pf({relayUrl:e.relayUrl,walletId:e.walletId,factorProof:await e.factorProof({operation:`recovery_rotate`,payload:{walletId:e.walletId,expectedStoreVersion:i.storeVersion,manifestKekWraps:a.manifestKekWraps,entries:[a.entry],recoveryCodeLocators:o}}),expectedStoreVersion:i.storeVersion,replacement:a,recoveryCodeLocators:o,...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}});return s.kind===`rotated`?{kind:`rotated`,walletId:e.walletId,recoveryCodes:t.codes,issuedAtMs:s.issuedAtMs,storeVersion:s.storeVersion}:s}function dD(e){return JSON.stringify(e.map(e=>({codeBytesB64u:P(e)})))}async function fD(e,t){if(e.length!==t.length)throw Error(`Recovery code locators do not match the replacement wraps`);let n=await Promise.all(e.map(async(e,n)=>{let r=t[n];if(!r)throw Error(`Recovery code locators do not match the replacement wraps`);return{locatorB64u:await xl(e),recoveryKeyId:r.recoveryKeyId}}));if(new Set(n.map(e=>e.locatorB64u)).size!==n.length)throw Error(`Recovery code locators must be unique`);return n}async function pD(e){let t=`${fe(e.relayUrl)}/wallets/custody/envelope`,n=e.fetchImpl||fetch,r;try{r=await n(t,le({body:{locator:e.locator,challengeId:e.challengeId,expectedOrigin:e.expectedOrigin,webauthnAuthentication:e.webauthnAuthentication}}))}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`custody envelope request failed`}}let i=await r.json().catch(()=>void 0);if(r.status===200&&vD(i))try{return{kind:`active`,envelope:hD(i).envelope}}catch{return{kind:`corrupt`,message:`custody envelope response was incomplete`}}let a=_D(i,`custody envelope response`),o=a.code??``,s=a.message??``;switch(r.status){case 404:return{kind:`missing`,message:s||`no custody envelope for this credential`};case 409:return{kind:`retired`,message:s||`this envelope was superseded`};case 401:case 403:return{kind:`credential_rejected`,message:s||`this credential does not open the wallet`};case 500:return o===`envelope_digest_mismatch`?{kind:`corrupt`,message:s||`stored custody envelope failed its digest`}:{kind:`transport_failed`,message:s||`custody envelope request failed (HTTP ${r.status})`};default:return{kind:`request_rejected`,message:s||`custody envelope request rejected (HTTP ${r.status})`}}}async function mD(e){let t=`${fe(e.relayUrl)}/wallets/${encodeURIComponent(e.walletId)}/custody/envelope/ownership`,n=e.fetchImpl||fetch,r;try{r=await n(t,le({body:{envelope:e.envelope},headers:ie({token:e.walletSessionToken,missingMessage:`custody envelope upgrade needs an active Wallet Session`})}))}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`custody envelope upgrade failed`}}let i=await r.json().catch(()=>void 0);if(r.status===200)try{let e=gD(i);if(e.kind===`already_owned`)return e;let t=Number(e.envelopeRevision);if(!Number.isSafeInteger(t)||t<=0)throw Error(`invalid envelope revision`);return{kind:`upgraded`}}catch{return{kind:`rejected`,message:`custody envelope upgrade returned an invalid response`}}return{kind:`rejected`,message:_D(i,`custody envelope upgrade response`).message||`custody envelope upgrade rejected (HTTP ${r.status})`}}function hD(e){let t=bD(e,[`ok`,`envelope`,`storeVersion`],`custody envelope response`);if(CD(t,`ok`)!==!0)throw Error(`custody envelope response did not succeed`);let n=wD(t,`storeVersion`);if(!n)throw Error(`custody envelope response is missing its store version`);return{envelope:Qt(CD(t,`envelope`),`custody envelope response.envelope`),storeVersion:n}}function gD(e){let t=yD(e,`custody envelope upgrade response`),n=CD(t,`upgraded`);if(n===!0){if(bD(t,[`ok`,`upgraded`,`envelopeRevision`],`custody envelope upgrade response`),CD(t,`ok`)!==!0)throw Error(`custody envelope upgrade response did not succeed`);return{kind:`upgraded`,envelopeRevision:CD(t,`envelopeRevision`)}}if(n===!1){if(bD(t,[`ok`,`upgraded`],`custody envelope upgrade response`),CD(t,`ok`)!==!0)throw Error(`custody envelope upgrade response did not succeed`);return{kind:`already_owned`}}throw Error(`custody envelope upgrade response has an invalid branch`)}function _D(e,t){try{let n=yD(e,t),r=Object.keys(n);if(!r.includes(`ok`)||!SD(r,[`ok`,`code`,`message`]))throw Error(`${t} has an unexpected response shape`);if(CD(n,`ok`)!==!1)throw Error(`${t} is not a failure`);return{code:TD(n,`code`),message:TD(n,`message`)}}catch{return{code:null,message:null}}}function vD(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return!1;let n=Object.getOwnPropertyDescriptor(e,`ok`);return!!(n&&`value`in n&&n.value===!0)}function yD(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`${t} must be a JSON object`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw Error(`${t} must be a plain JSON object`);return e}function bD(e,t,n){let r=yD(e,n),i=Object.keys(r);if(i.length!==t.length||!xD(i,t))throw Error(`${n} has an unexpected response shape`);return r}function xD(e,t){for(let n of t)if(!e.includes(n))return!1;return!0}function SD(e,t){for(let n of e)if(!t.includes(n))return!1;return!0}function CD(e,t){let n=Object.getOwnPropertyDescriptor(e,t);if(!n||!(`value`in n))throw Error(`response field ${t} is missing`);return n.value}function wD(e,t){let n=CD(e,t);return typeof n==`string`?n.trim():``}function TD(e,t){let n=Object.getOwnPropertyDescriptor(e,t);return!n||!(`value`in n)?null:(typeof n.value==`string`?n.value.trim():``)||null}function ED(e){return Array.isArray(e)?e.filter(e=>{switch(e){case`ble`:case`hybrid`:case`internal`:case`nfc`:case`smart-card`:case`usb`:return!0;default:return!1}}):[]}function DD(e){let t=e.flatMap(e=>{let t=String(e.credentialId||``).trim();return t?[{id:t,type:`public-key`,transports:ED(e.transports)}]:[]});if(t.length===0)throw Error(`Wallet recovery-code rotation requires an active passkey`);return t}async function OD(e){let t=await fetch(c(e.relayUrl,`/wallet/unlock/challenge`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({unlockBackend:`passkey`,userId:e.walletId,rpId:e.rpId})}),n=await t.json().catch(()=>({})),r=n&&typeof n==`object`&&!Array.isArray(n)?n:{};if(!t.ok||r.ok!==!0)throw Error(typeof r.message==`string`?r.message:`passkey envelope challenge failed`);let i=typeof r.challengeId==`string`?r.challengeId.trim():``,a=typeof r.challengeB64u==`string`?r.challengeB64u.trim():``;if(!i||!a)throw Error(`passkey envelope challenge is invalid`);return{challengeId:i,challengeB64u:a}}async function kD(e){let t=String(e.context.signingEngine.getRpId()||``).trim();if(!t)throw Error(`Wallet recovery-code rotation requires an RP ID`);let n=typeof window>`u`?``:window.location.origin;if(!n)throw Error(`Wallet recovery-code rotation requires a browser Origin`);let r=DD(await G.listProfileAuthenticators(e.walletId)),i=await OD({relayUrl:e.relayUrl,walletId:e.walletId,rpId:t}),a=await e.context.signingEngine.getAuthenticationCredentialsSerialized({subjectId:e.walletId,challengeB64u:i.challengeB64u,allowCredentials:r,includeSecondPrfOutput:!0}),o=hl(a);if(!o)throw Error(`Wallet recovery-code rotation did not receive a passkey credential`);let s=await pD({relayUrl:e.relayUrl,locator:{walletId:e.walletId,factor:{kind:`passkey`,rpId:t,credentialIdB64u:o}},challengeId:i.challengeId,expectedOrigin:n,webauthnAuthentication:Ks(a)});if(s.kind!==`active`)throw Error(s.message);let c=s.envelope,l=F(gl(a,`Wallet recovery-code rotation`));try{let i=e.context.signingEngine.getSignerWorkerContext();return await cD({relayUrl:e.relayUrl,walletId:e.walletId,factorProof:async({operation:i,payload:a})=>{let s=await Tl({walletId:e.walletId,operation:i,payload:a,requestOrigin:n}),c=await e.context.signingEngine.getAuthenticationCredentialsSerialized({subjectId:e.walletId,challengeB64u:s,allowCredentials:r,includeSecondPrfOutput:!1}),l=hl(c);if(!l||l!==o)throw Error(`Wallet recovery-code rotation selected an unrelated passkey`);return{kind:`passkey`,walletId:e.walletId,rpId:t,credentialIdB64u:o,challenge_digest:s,webauthn_authentication:Ks(c)}},statusRequestId:ve(`wallet-recovery-status`,16,`wallet recovery status request IDs`),custodyEnvelope:c,factorSecret:l.buffer,worker:{rotateRecoverySet:async e=>await i.requestWorkerOperation({kind:`walletCustodyCeremony`,request:{type:`rotateWalletRecoverySet`,timeoutMs:3e4,payload:e,transfer:[e.factorSecret]}})}})}finally{l.fill(0)}}async function AD(e,t){return await jf({context:e.context,relayUrl:e.relayUrl,request:t})}async function jD(e,t){let n=await Af(e.walletId),r=await ls({relayUrl:e.relayUrl,walletId:e.walletId,walletAuthMethodId:n.walletAuthMethodId,operation:Ft});if(r.walletAuthMethodId!==n.walletAuthMethodId)throw Error(`Recovery rotation Email OTP challenge selected another owner method`);let i=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:`recovery_unlock`,walletId:e.walletId,emailAddress:`your email`,challengeId:r.challengeId});if(i.challengeId!==r.challengeId)throw Error(`Recovery rotation Email OTP unlock changed its challenge`);let a=Wo({routeFamily:`login`,operation:Ft});return await e.context.signingEngine.getSignerWorkerContext().requestWorkerOperation({kind:`emailOtp`,request:{type:`rotateEmailOtpWalletRecoverySet`,timeoutMs:6e4,payload:{relayUrl:e.relayUrl,walletId:e.walletId,walletAuthMethodId:n.walletAuthMethodId,userId:e.walletId,groupId:Ze,routePlan:a,verification:{kind:`otp`,challengeId:i.challengeId,otpCode:i.otpCode},recoveryCodesJson:t.recoveryCodesJson}}})}async function MD(e){let t=AD.bind(null,{context:e.context,relayUrl:e.relayUrl});return await lD({relayUrl:e.relayUrl,walletId:e.walletId,factorProof:t,statusRequestId:ve(`wallet-recovery-status`,16,`wallet recovery status request IDs`),worker:{rotateRecoverySet:jD.bind(null,e)}})}async function ND(e){switch(e.authorization.kind){case`existing_passkey`:return await kD(e);case`email_otp`:return await MD(e)}}function PD(e){return e?e.status===`near_ready`?{kind:`near_ready`,nearAccountId:e.nearAccountId}:e.status===`near_failed_retryable`?{kind:`near_failed_retryable`,reason:e.error}:null:null}async function FD(e,t){let n=String(t.walletId||``).trim();if(!n)throw Error(`[seams] waitForNearAccount requires a walletId`);let r=Math.max(1,Math.floor(t.timeoutMs??12e4)),i=null,a=null,o=null;try{return await new Promise((s,c)=>{let l=!1,u=e=>{l||(l=!0,s(e))};if(t.signal?.aborted){c(t.signal.reason??Error(`[seams] waitForNearAccount aborted`));return}t.signal&&(o=()=>{l||(l=!0,c(t.signal?.reason??Error(`[seams] waitForNearAccount aborted`)))},t.signal.addEventListener(`abort`,o,{once:!0})),i=e.onNearAccountChange(e=>{if(String(e.walletId)!==n)return;let t=PD(e.state);t&&u(t)}),a=setTimeout(()=>u({kind:`timed_out`}),r),e.getNearAccountState({walletId:n}).then(e=>{let t=PD(e);t&&u(t)}).catch(()=>{})})}finally{a&&clearTimeout(a),o&&t.signal&&t.signal.removeEventListener(`abort`,o);try{i?.()}catch{}}}function ID(e){return typeof e==`string`?sn({walletId:e}):e}function LD(e){return typeof e==`string`?rn(e):e}function RD(e){let t=async()=>{let t=await e.getWalletSession();if(t.authentication.kind!==`authenticated`)throw Error("[seams] no authenticated wallet: unlock a wallet first, or pass an explicit `walletSession`.");return t};return{walletSession:async e=>e?ID(e):sn({walletId:(await t()).authentication.walletId}),nearSubject:async e=>{if(e.walletSession&&e.nearAccount)return{walletSession:ID(e.walletSession),nearAccount:LD(e.nearAccount)};let n=await t(),r=n.authentication.walletId,i=e.walletSession?ID(e.walletSession):sn({walletId:r});if(e.nearAccount)return{walletSession:i,nearAccount:LD(e.nearAccount)};let a=n.appIdentity;if(a.kind!==`resolved`||String(a.walletId)!==String(r))throw Error("[seams] the authenticated wallet has no resolved NEAR account: pass an explicit `nearAccount`.");if(!a.nearAccountId)throw Error("[seams] this wallet has no NEAR account yet (NEAR provisioning may still be pending): pass an explicit `nearAccount`, or await `seams.registration.waitForNearAccount`.");return{walletSession:i,nearAccount:rn(a.nearAccountId)}}}}function zD(e){let t=new BD(e.linkedDeviceManagement);return{startLinking:e.startLinking,cancelLinking:e.cancelLinking,approveLinking:e.approveLinking,list:t.list.bind(t),remove:t.remove.bind(t)}}var BD=class{constructor(e){this.management=e}async list(e){let t=tr({kind:`linked_device_list_request_v1`,walletId:VD(e.walletId),limit:e.limit,cursor:e.cursor});return Xn(await this.management.listLinkedDevices({walletId:t.walletId,limit:t.limit,cursor:t.cursor}))}async remove(e){return Hn(await this.management.revokeLinkedDevice({walletId:VD(e.walletId),walletAuthMethodId:HD(e.walletAuthMethodId)}))}};function VD(e){let t=_(e);if(!t.ok)throw Error(t.error.message);return t.value}function HD(e){let t=r(e);if(!t.ok)throw Error(t.error.message);return t.value}function UD(e){return/UNKNOWN_ACCOUNT|unknown\s+account|account\b[^\n]*\bdoes not exist/iu.test(L(e))}function WD(e){return/server error|internal|temporar|timeout|throttl|too many requests|429|empty response|rpc request failed|failed to fetch/iu.test(L(e))}function GD(e){setTimeout(e,150)}async function KD(e,t){let n=mn(t);try{return await e.viewAccount(n),!0}catch(e){if(UD(e))return!1;if(!WD(e))throw e}await new Promise(GD);try{return await e.viewAccount(n),!0}catch(e){if(UD(e))return!1;throw e}}function qD(e){let t={"content-type":`application/json`},n=String(e?.publishableKey??``).trim();n&&(t.Authorization=`Bearer ${n}`);let r=String(e?.environmentId??``).trim();return r&&(t[`X-Seams-Environment-Id`]=r),t}function JD(e,t){if(!A(e))return{ok:!1,error:`Relayer HTTP ${t}`};let n=typeof e.code==`string`?e.code.trim():``,r=(typeof e.message==`string`?e.message.trim():typeof e.error==`string`?e.error.trim():``)||`Relayer HTTP ${t}`;return{ok:!1,error:n?`${r} (${n})`:r}}function YD(e){let t=e?.registration;if(!t||typeof t!=`object`||t.mode!==`managed`)return{};let n=String(t.publishableKey??``).trim(),r=String(t.projectEnvironmentId??``).trim();return{...n?{publishableKey:n}:{},...r?{environmentId:r}:{}}}const XD=e=>Array.isArray(e)?e:Array.from(e),ZD=e=>{let t=e.delegateAction,n=e.signature;return{delegateAction:{...t,publicKey:{...t.publicKey,keyData:XD(t.publicKey.keyData)}},signature:{...n,signatureData:XD(n.signatureData)}}};async function QD(e){let{url:t,payload:n,auth:r,signal:i,options:a}=e,o={...n,signedDelegate:ZD(n.signedDelegate)};xE(a?.onEvent,`delegate`,{phase:U.STEP_12_BROADCAST_STARTED,status:`running`,message:`Submitting delegate to relayer`,interaction:{kind:`none`,overlay:`none`}});let s;try{s=await fetch(t,{method:`POST`,headers:qD(r),body:JSON.stringify(o),signal:i||AbortSignal.timeout(3e4)})}catch(e){let t=e instanceof DOMException&&e.name===`TimeoutError`?Error(`Relayer request timed out after 30 seconds`):e instanceof Error?e:Error(String(e));throw a?.onError?.(t),$D(a,t.message),await a?.afterCall?.(!1),t}if(!s.ok){let e=null;try{e=await s.json()}catch{}let t=JD(e,s.status);return a?.onError?.(Error(t.error)),$D(a,t.error),await a?.afterCall?.(!1),t}let c;try{let e=await s.json();c=A(e)?e:{}}catch(e){let t={ok:!1,error:`Relayer returned non-JSON response`},n=e instanceof Error?e:Error(String(e));return a?.onError?.(n),$D(a,t.error),await a?.afterCall?.(!1),t}let l={ok:!!(c.ok??!0),relayerTxHash:typeof c.relayerTxHash==`string`?c.relayerTxHash:typeof c.transactionId==`string`?c.transactionId:typeof c.txHash==`string`?c.txHash:void 0,status:typeof c.status==`string`?c.status:void 0,outcome:c.outcome,error:typeof c.error==`string`?c.error:void 0};if(l.ok!==!1)xE(a?.onEvent,`delegate`,{phase:U.STEP_15_COMPLETED,status:`succeeded`,message:`Delegate relayed successfully`,interaction:{kind:`none`,overlay:`none`}}),await a?.afterCall?.(!0,l);else{let e=l.error||`Relayer execution failed`;a?.onError?.(Error(e)),$D(a,e),await a?.afterCall?.(!1)}return l}function $D(e,t){xE(e?.onEvent,`delegate`,{phase:U.FAILED,status:`failed`,message:t,interaction:{kind:`none`,overlay:`hide`},error:{message:t}})}function eO(e){let t=new nO(e);return{accountExists:KD.bind(null,e.nearClient),signAndSendTransaction:t.signAndSendTransaction.bind(t),signTransaction:t.signTransaction.bind(t),sendTransaction:t.sendTransaction.bind(t),signDelegateAction:t.signDelegateAction.bind(t),signMessage:t.signMessage.bind(t),sendDelegateAction:t.sendDelegateAction.bind(t),signAndSendDelegateAction:t.signAndSendDelegateAction.bind(t)}}function tO(){}var nO=class{constructor(e){this.deps=e}async signAndSendTransaction(e){let t;try{t=await this.deps.currentWallet.nearSubject(e),hT(this.deps.configs,{capabilityKind:Ct.nearEd25519MpcSigning,operationKind:St.signTransaction})}catch(e){return ut(e,`not_submitted`)}return this.deps.commands.signAndSendTransaction({...e,...t,options:e.options??{}})}async signTransaction(e){let t={...e,...await this.deps.currentWallet.nearSubject(e),options:e.options??{}};return hT(this.deps.configs,{capabilityKind:Ct.nearEd25519MpcSigning,operationKind:St.signTransaction}),await this.deps.commands.signTransaction(t)}async sendTransaction(e){let t;try{t=await this.deps.currentWallet.nearSubject(e)}catch(e){return ut(e,`not_submitted`)}return this.deps.commands.sendTransaction({...e,...t,options:e.options??{}})}async signDelegateAction(e){let t={...e,...await this.deps.currentWallet.nearSubject(e),options:e.options??{}};return hT(this.deps.configs,{capabilityKind:Ct.nearEd25519MpcSigning,operationKind:St.signDelegateAction}),await this.deps.commands.signDelegateAction(t)}async signMessage(e){let t={...e,...await this.deps.currentWallet.nearSubject(e),options:e.options??{}};return hT(this.deps.configs,{capabilityKind:Ct.nearEd25519MpcSigning,operationKind:St.signNep413Message}),await this.deps.commands.signMessage(t)}async sendDelegateAction(e){return await QD({url:`${e.relayerUrl.replace(/\/+$/,``)}${(this.deps.configs.network.relayer?.routes?.delegateAction||`/signed-delegate`).replace(/^\/?/,`/`)}`,payload:{hash:e.hash,signedDelegate:e.signedDelegate},auth:YD(this.deps.configs),signal:e.signal,options:e.options})}async signAndSendDelegateAction(e){let t={...e,...await this.deps.currentWallet.nearSubject(e),options:e.options??{}},n={signerSlot:t.options.signerSlot,onEvent:t.options.onEvent,onError:t.options.onError,waitUntil:t.options.waitUntil,confirmationConfig:t.options.confirmationConfig,confirmerText:t.options.confirmerText,afterCall:tO},r;try{r=await this.signDelegateAction({walletSession:t.walletSession,nearAccount:t.nearAccount,delegate:t.delegate,options:n})}catch(e){let n=I(e);throw await t.options?.afterCall?.(!1,void 0,n),n}let i={onEvent:t.options.onEvent,onError:t.options.onError},a;try{a=await this.sendDelegateAction({relayerUrl:t.relayerUrl,hash:r.hash,signedDelegate:r.signedDelegate,signal:t.signal,options:i})}catch(e){let n=I(e);throw await t.options?.afterCall?.(!1,void 0,n),n}let o={signResult:r,relayResult:a};if(a.ok!==!1)await t.options?.afterCall?.(!0,o);else{let e=I(a.error||`Delegate relay failed`);await t.options?.afterCall?.(!1,void 0,e)}return o}};function rO(e){let t=new iO(e);return{signAndSendTransaction:e.signAndSendTransaction,advanced:e.advanced,signTransaction:t.signTransaction.bind(t)}}var iO=class{constructor(e){this.deps=e}async signTransaction(e){let t=xT(this.deps.configs.network.chains,e.chainTarget),n=await this.deps.currentWallet.walletSession(e.walletSession);hT(this.deps.configs,{capabilityKind:Ct.evmEcdsaMpcSigning,operationKind:bt.signTransaction,chainTarget:t});let r=await this.deps.commands.signEvmFamily({walletSession:n,request:e.request,chainTarget:t,options:e.options});if(r.chain!==`evm`||r.kind!==`eip1559`)throw Error(`[EVM capability] expected EVM result, received ${r.chain}`);return r}};function aO(e,t){let n=e.tx.chainId;if(n!==void 0&&Number(n)!==t.chainId)throw Error(`[evm-family] request tx.chainId ${n} does not match chain target ${V(t)}`);return{...e,tx:{...e.tx,chainId:t.chainId}}}const oO=5e3;function sO(e,t,n){try{e?.(Ii({...n,flowId:`signing:evm_family:${t}:${n.phase}`,accountId:t}))}catch{}}function cO(){let e=Error(`Request cancelled`);return e.code=`cancelled`,e}function lO(e){let t=Error(e);return t.code=`timeout`,t}async function uO(e){let t=Math.max(1,Math.floor(Number(e.timeoutMs)||0)),n=null,r=!1;try{return await new Promise((i,a)=>{n=setTimeout(()=>{if(!r){r=!0;try{e.onTimeout?.()}catch{}a(lO(e.message))}},t),e.promise.then(e=>{r||(r=!0,n&&clearTimeout(n),i(e))},e=>{r||(r=!0,n&&clearTimeout(n),a(e))})})}finally{n&&clearTimeout(n)}}function dO(e){let t=Math.floor(Number(e));return!Number.isFinite(t)||t<=0?oO:Math.min(oO,Math.max(250,t))}function fO(e){if(typeof e==`function`&&e())throw cO()}function pO(e){return String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`)}function mO(e,t){return!e||typeof e!=`object`?!1:pO(e.code)===pO(t)}function hO(e){if(e instanceof Error){let t=String(e.code||``).trim(),n=`details`in e?e.details:void 0;return{...t?{code:t}:{},message:e.message,...n===void 0?{}:{details:n}}}if(e&&typeof e==`object`){let t=e,n=String(t.code||``).trim(),r=String(t.message||``).trim();return{...n?{code:n}:{},message:r||String(e),...t.details===void 0?{}:{details:t.details}}}return{message:String(e||`unknown error`)}}function gO(e){let t=pO(e instanceof Error||e&&typeof e==`object`&&`message`in e?e.message:e);return t.includes(`nonce_lane_blocked`)||t.includes(`nonce lane blocked`)}function _O(e){return!e||typeof e!=`object`||!mO(e,`tx_dropped_or_replaced`)?null:pO(e.reason)===`replaced`?`replaced`:`dropped`}function vO(e){let t=String(e||``).trim().toLowerCase();return/^0x[0-9a-f]*$/.test(t)?t:null}function yO(e){return String(e??``).trim()||null}function bO(e){let t=yO(e);return t?t.toLowerCase():null}function xO(e){throw Error(`[Tempo capability] unhandled finalized payload branch: ${String(e)}`)}function SO(e,t){let n=vO(e);if(!n)throw Error(`[Tempo capability] invalid ${t} payload input`);return n}function CO(e){return{kind:`evm_eip1559`,to:e.tx.to??null,input:SO(e.tx.data||`0x`,`EVM`)}}function wO(e){return{to:e.to,input:SO(e.input||`0x`,`Tempo call`)}}function TO(e){let[t,...n]=e.tx.calls;if(!t)throw Error(`[Tempo capability] Tempo transaction has no calls`);return{kind:`tempo_eip2718_calls`,calls:[wO(t),...n.map(wO)]}}function EO(e){switch(e.chain){case`evm`:return CO(e);case`tempo`:return TO(e);default:return xO(e)}}function DO(e){return e.input??e.data??null}function OO(e){return Array.isArray(e.calls)?{kind:`tempo_eip2718_calls`,calls:e.calls.map(e=>({to:e?.to??null,input:e?DO(e):null,data:e?.data??null}))}:{kind:`evm_eip1559`,to:e.to??null,input:e.input??null}}function kO(e){return bO(e.observed.to)===bO(e.expected.to)&&vO(e.observed.input)===vO(e.expected.input)}function AO(e){return bO(e.observed.to)===bO(e.expected.to)&&vO(DO(e.observed))===vO(e.expected.input)}function jO(e){return e.observed.calls.length===e.expected.calls.length?e.expected.calls.every((t,n)=>{let r=e.observed.calls[n];return r?AO({expected:t,observed:r}):!1}):!1}function MO(e){switch(e.expected.kind){case`evm_eip1559`:return e.observed.kind===`evm_eip1559`?kO({expected:e.expected,observed:e.observed}):!1;case`tempo_eip2718_calls`:return e.observed.kind===`tempo_eip2718_calls`?jO({expected:e.expected,observed:e.observed}):!1;default:return xO(e.expected)}}function NO(e){let t=V(e.chainTarget),n=e.chains.filter(e=>{let n=qe(e.network);return n!==`evm`&&n!==`tempo`?!1:V(nn(e))===t});if(n.length===1){let e=String(n[0].rpcUrl||``).trim();if(!e)throw Error(`[Tempo capability] missing rpcUrl for ${n[0].network} ${t}`);return e}if(n.length>1){let e=n.map(e=>e.network).join(`, `);throw Error(`[Tempo capability] ambiguous RPC routing for ${t} across [${e}]`)}throw Error(`[Tempo capability] unable to resolve RPC URL for ${t}`)}function PO(e){let t=String(e?.managedNonce?.sender||``).trim(),n=/^0x[0-9a-fA-F]{40}$/.test(t)?t:void 0,r;try{let t=String(e?.managedNonce?.nonce||``).trim();if(t){let e=BigInt(t);e>=0n&&(r=e)}}catch{}return{...n?{managedNonceSenderAddress:n}:{},...typeof r==`bigint`?{nonceHint:r}:{}}}async function FO(e){let t=await df({rpcUrl:e.rpcUrl}).getTransactionByHash({txHash:e.txHash}).catch(()=>null);if(!t)return{kind:`tx_unavailable`,expected:e.expected};let n=OO(t);return MO({expected:e.expected,observed:n})?{kind:`matched`,expected:e.expected,observed:n}:{kind:`mismatch`,expected:e.expected,observed:n}}async function IO(e){if(!e.broadcastAccepted){await e.lifecycle.reportBroadcastRejected({walletSession:e.walletSession,signedResult:e.signedResult,error:e.error,options:{onEvent:e.onEvent}});return}let t=_O(e.error);if(t){await e.lifecycle.reportDroppedOrReplaced({walletSession:e.walletSession,signedResult:e.signedResult,reason:t,...e.txHash?{txHash:e.txHash}:{},options:{onEvent:e.onEvent}});return}try{await e.lifecycle.reconcileNonceLane({walletSession:e.walletSession,signedResult:e.signedResult,options:{onEvent:e.onEvent}})}catch(t){if(mO(t,`nonce_lane_blocked`)||gO(t)){await e.lifecycle.reportDroppedOrReplaced({walletSession:e.walletSession,signedResult:e.signedResult,reason:`dropped`,...e.txHash?{txHash:e.txHash}:{},options:{onEvent:e.onEvent}});return}throw t}}function LO(e){let t=String(e||``).trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw Error(`[Tempo capability] invalid transaction hash from broadcast: ${t||`empty`}`);return t}function RO(e){let t=String(e||``).trim();if(!/^0x[0-9a-fA-F]+$/.test(t))throw Error(`[Tempo capability] signed rawTxHex is missing or invalid`);return t}function zO(e){return e.payloadExpectation??EO(e.request)}async function BO(e){let t=e.input.options?.onEvent,n=B(e.input.walletSession.walletId);fO(e.input.options?.shouldAbort);let r=null,i,a=!1,o=!1,s=e=>sO(t,n,e),c=e=>{if(e.phase!==U.STEP_15_COMPLETED)try{t?.(e)}catch{}};try{let n=e.input.request,l=NO({chains:e.chains,chainTarget:e.input.chainTarget}),u=df({rpcUrl:l});r=await e.lifecycle.signEvmFamily({walletSession:e.input.walletSession,request:n,chainTarget:e.input.chainTarget,options:e.input.options?{...e.input.options.voiceId===void 0?{}:{voiceId:e.input.options.voiceId},...e.input.options.confirmationConfig?{confirmationConfig:e.input.options.confirmationConfig}:{},...e.input.options.shouldAbort?{shouldAbort:e.input.options.shouldAbort}:{},...t?{onEvent:c}:{}}:void 0}),fO(e.input.options?.shouldAbort),s({phase:U.STEP_12_BROADCAST_STARTED,status:`running`,interaction:{kind:`none`,overlay:`none`}});let d=RO(r.rawTxHex);e.lifecycle.onBroadcastStarted({walletSession:e.input.walletSession,signedResult:r}),i=LO(await u.request({method:`eth_sendRawTransaction`,params:[d]})),await e.lifecycle.reportBroadcastAccepted({walletSession:e.input.walletSession,signedResult:r,txHash:i,options:{...t?{onEvent:t}:{}}}),a=!0,s({phase:U.STEP_13_NONCE_RECONCILE_STARTED,status:`running`,message:`Waiting for transaction finalization`,interaction:{kind:`none`,overlay:`none`},data:{txHash:i}});let f=new AbortController,p=null;typeof e.input.options?.shouldAbort==`function`&&(p=setInterval(()=>{e.input.options?.shouldAbort?.()&&f.abort(cO())},100));let m=Math.max(1,Math.floor(Number(e.input.finalization?.timeoutMs??9e4)||0)),h=Math.max(1,Math.floor(Number(e.input.finalization?.pollIntervalMs??1250)||0)),g=Math.max(1,Math.floor(Number(e.input.finalization?.confirmations??1)||0)),_=PO(r),v=await uO({promise:u.waitForTransactionReceipt({txHash:i,timeoutMs:m,pollIntervalMs:h,confirmations:g,maxFeePerGasHint:n.tx.maxFeePerGas,signal:f.signal,..._.managedNonceSenderAddress?{transactionSenderAddress:_.managedNonceSenderAddress}:{},...typeof _.nonceHint==`bigint`?{nonceHint:_.nonceHint}:{}}).finally(()=>{p&&=(clearInterval(p),null),f.abort(Error(`finalization wait settled`))}),timeoutMs:m+2e3,message:`Timed out waiting for transaction finalization after ${m.toString()}ms`,onTimeout:()=>{f.abort(lO(`Transaction finalization watchdog timed out`))}}),y=ff(v.status,`receipt.status`);if(y===0n){await e.lifecycle.reportFinalized({walletSession:e.input.walletSession,signedResult:r,txHash:i,receiptStatus:`reverted`,options:{...t?{onEvent:t}:{}}}),o=!0;let n=Error(`Transaction reverted with receipt status ${String(v.status||`unknown`)}`);throw n.code=`tx_reverted`,n.txHash=i,n}if(y!==1n)throw Error(`Unexpected transaction receipt status ${v.status}`);let b=zO(e.input),x=await FO({rpcUrl:l,txHash:i,expected:b});if(x.kind===`mismatch`){let e=Error(`Finalized transaction payload mismatch for ${i}.`);throw e.code=`tx_payload_mismatch`,e.details=x,e}if(await e.lifecycle.reportFinalized({walletSession:e.input.walletSession,signedResult:r,txHash:i,receiptStatus:`success`,options:{...t?{onEvent:t}:{}}}),o=!0,s({phase:U.STEP_13_RECEIPT_FINALIZED,status:`succeeded`,interaction:{kind:`none`,overlay:`none`},data:{txHash:i}}),typeof e.input.postFinalizationCheck==`function`){s({phase:U.STEP_14_APP_STATE_SYNC_STARTED,status:`running`,interaction:{kind:`none`,overlay:`none`},data:{txHash:i}});try{await e.input.postFinalizationCheck()}catch(e){let t=e instanceof Error?e.message:String(e||``),n=Error(`Post-finalization state verification failed for ${i}: ${t||`unknown error`}`);throw n.code=`post_finalization_state_mismatch`,n.txHash=i,n.details={...e instanceof Error&&e.message?{message:e.message}:{},originalError:e},n}s({phase:U.STEP_14_APP_STATE_SYNC_SUCCEEDED,status:`succeeded`,interaction:{kind:`none`,overlay:`none`},data:{txHash:i}})}return s({phase:U.STEP_15_COMPLETED,status:`succeeded`,interaction:{kind:`none`,overlay:`none`},data:{operation:`execute`,txHash:i}}),{txHash:i,signedResult:r,payloadVerification:x}}catch(s){try{let t=r?a?o?`post_finalization`:`finalization`:`broadcast`:`sign`;console.warn(`[EvmFamilyLifecycle][failure]`,{stage:t,walletId:n,requestChain:e.input.request.chain,requestKind:e.input.request.kind,requestChainId:e.input.request.tx.chainId,chainTarget:e.input.chainTarget,signed:!!r,...r?.managedNonce?{managedNonce:{chain:r.managedNonce.chainTarget.kind,networkKey:r.managedNonce.chainTarget.networkSlug,chainId:r.managedNonce.chainTarget.chainId,sender:r.managedNonce.sender,nonce:r.managedNonce.nonce.toString(),...r.managedNonce.nonceKey==null?{}:{nonceKey:r.managedNonce.nonceKey.toString()}}}:{},broadcastAccepted:a,finalizedReported:o,...i?{txHash:i}:{},error:hO(s)})}catch{}throw!o&&r&&await uO({promise:IO({lifecycle:e.lifecycle,walletSession:e.input.walletSession,signedResult:r,error:s,broadcastAccepted:a,...i?{txHash:i}:{},...t?{onEvent:t}:{}}),timeoutMs:dO(e.input.finalization?.timeoutMs),message:`Timed out during best-effort nonce cleanup after EVM-family signing failure`}).catch(()=>null),s}}function VO(e,t){return NO({chains:e,chainTarget:t})}async function HO(e,t){return await nD({rpcUrl:VO(e,t.chainTarget),account:qE(`account address`,t.account),...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}})}async function UO(e,t){return await rD({rpcUrl:VO(e,t.chainTarget),feeToken:qE(`fee token address`,t.feeToken),...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}})}async function WO(e){let t=await nD(e);if(t?.toLowerCase()!==e.feeToken.toLowerCase())throw Error(`[Tempo capability] fee-token preference mismatch: expected ${e.feeToken}, received ${t??`unset`}`)}async function GO(e,t){let n=VO(e.chains,t.chainTarget),r=qE(`account address`,t.account),i=qE(`fee token address`,t.feeToken),a=await rD({rpcUrl:n,feeToken:i});if(a.kind===`invalid`)throw Error(`[Tempo capability] invalid fee token: ${a.reason}`);let o=iD({chainId:t.chainTarget.chainId,feeToken:i,maxPriorityFeePerGas:t.feeCaps.maxPriorityFeePerGas,maxFeePerGas:t.feeCaps.maxFeePerGas,gasLimit:t.gasLimit??1000000n});return await e.execute({walletSession:t.walletSession,chainTarget:t.chainTarget,request:o,payloadExpectation:{kind:`evm_eip1559`,to:o.tx.to??null,input:o.tx.data??`0x`},...t.finalization?{finalization:t.finalization}:{},...t.options?{options:t.options}:{},postFinalizationCheck:WO.bind(null,{rpcUrl:n,account:r,feeToken:i})})}function KO(e){let t=new qO(e),n=e.commands,r={reportBroadcastAccepted:n.reportBroadcastAccepted,reportBroadcastRejected:n.reportBroadcastRejected,reportFinalized:n.reportFinalized,reportDroppedOrReplaced:n.reportDroppedOrReplaced,reconcileNonceLane:n.reconcileNonceLane},i=t.signTempo.bind(t),a=t.executeEvmFamilyTransaction.bind(t);return{tempo:{signTransaction:i,signAndSendTransaction:a,advanced:r,getFeeToken:HO.bind(null,e.configs.network.chains),validateFeeToken:UO.bind(null,e.configs.network.chains),setFeeToken:GO.bind(null,{chains:e.configs.network.chains,execute:a})},evm:rO({...e,advanced:r,signAndSendTransaction:a})}}var qO=class{constructor(e){this.deps=e}async signEvmFamily(e){let t=yT(this.deps.configs.network.chains,e.chainTarget),n=await this.deps.currentWallet.walletSession(e.walletSession);return hT(this.deps.configs,{capabilityKind:Ct.evmEcdsaMpcSigning,operationKind:bt.signTransaction,chainTarget:t}),await this.deps.commands.signEvmFamily({walletSession:n,chainTarget:t,request:e.request,options:e.options})}async signTempo(e){let t=await this.signEvmFamily({...e,chainTarget:bT(this.deps.configs.network.chains,e.chainTarget)});if(t.chain!==`tempo`||t.kind!==`tempoTransaction`)throw Error(`[Tempo capability] expected Tempo result, received ${t.chain}`);return t}async executeEvmFamilyTransaction(e){let t=yT(this.deps.configs.network.chains,e.chainTarget),n=await this.deps.currentWallet.walletSession(e.walletSession);return await BO({lifecycle:{...this.deps.commands,signEvmFamily:this.signEvmFamily.bind(this)},chains:this.deps.configs.network.chains,input:{...e,chainTarget:t,walletSession:n,request:aO(e.request,t)}})}};function JO(e){let t=e.auth,n=zD(e.devices),r=RD({getWalletSession:t.getSession}),i={createNearCommands:e.createNearCommands,createEvmFamilyCommands:e.createEvmFamilyCommands,nearClient:e.nearClient,configs:e.configs,currentWallet:r},a=eO({...i,commands:e.createNearCommands({kind:`ordinary`})}),o=e.createEvmFamilyCommands({kind:`ordinary`}),s=KO({...i,commands:o});return{preferences:e.preferences,auth:t,registration:{getNearAccountState:e.registration.getNearAccountState,onNearAccountChange:e.registration.onNearAccountChange,waitForNearAccount:FD.bind(null,e.registration),addSigner:e.registration.addSigner,addPasskey:e.registration.addPasskey,activateAuthMethod:e.registration.activateAuthMethod,getAuthMethodAvailability:e.registration.getAuthMethodAvailability,setAuthMethodEnabled:e.registration.setAuthMethodEnabled,addEmail:e.registration.addEmail,removeAuthMethod:e.registration.removeAuthMethod,registerWallet:YO.bind(null,e.registration,e.configs)},recovery:e.recovery,devices:n,keys:CT({configs:e.configs,currentWallet:r,domain:e.keys}),near:a,tempo:s.tempo,evm:s.evm}}async function YO(e,t,n){let r;try{let e=n.wallet===void 0?{kind:`server_allocated`}:n.wallet,i=n.signerSelection===void 0?bo({configs:t,wallet:e,options:n.options??{}}):n.signerSelection;r={authMethod:n.authMethod,wallet:e,signerSelection:i,options:n.options}}catch(e){let t=I(e);throw await n.options?.onError?.(t),await n.options?.afterCall?.(!1,void 0,t),t}return e.registerWallet(r)}async function XO(e){let{walletSession:t,custodyEnvelope:n,signal:r}=e;r.throwIfAborted();let i=await G.getWalletAuthMethodV2(t.authMethodId),a=await G.getWalletAuthority(t.authorityId);if(!i||i.kind!==`voiceid`||i.status!==`active`||i.walletId!==t.walletId||i.walletAuthorityId!==t.authorityId||!a||a.state!==`active`||a.walletId!==t.walletId||a.authorityDigestB64u!==t.authorityDigestB64u||a.revocationEpoch!==t.authorityRevocationEpoch||n.walletId!==t.walletId||n.ownership.walletAuthMethodId!==i.walletAuthMethodId||n.factor.kind!==`voiceid`||n.factor.deviceKeyId!==i.deviceKeyId)throw Error(`Wallet Session, device method, and custody do not match.`);return{method:i,authority:a,ref:await H({authority:qr({walletId:i.walletId,walletAuthMethodId:i.walletAuthMethodId,deviceKeyId:i.deviceKeyId})})}}async function ZO(e){let{walletSession:t,operationCredential:n,custodyEnvelope:r,near:i,signal:a}=e.unlocked;if(a.aborted)throw Error(`Wallet unlock was cancelled.`);if(i.kind!==`ready`)throw Error(`This wallet has no active NEAR signer.`);let{method:o,authority:s,ref:c}=e.identity,l=i.capability;if(!s.signerActivations.ed25519||!g(s.signerActivations.ed25519.materialActivation,l.materialActivation)||l.applicationBinding.wallet_id!==t.walletId)throw Error(`NEAR capability does not match the Wallet Session authority.`);let u=await e.loadMaterial({nearAccountId:l.nearAccountId,signerSlot:l.applicationBinding.key_creation_signer_slot,expectedRegisteredPublicKeyB64u:P(Uint8Array.from(l.registeredPublicKey))});if(u.kind!==`found`)throw Error(`Unlock with a passkey or Email OTP once to restore NEAR custody on this device.`);if(u.material.binding.walletId!==t.walletId||u.material.binding.nearEd25519SigningKeyId!==l.applicationBinding.near_ed25519_signing_key_id||u.material.binding.signingWorkerId!==l.lifecycle.signingWorkerId||u.material.binding.stateEpoch!==String(l.stateEpoch))throw Error(`Cached NEAR custody belongs to another material activation.`);let d=e.unlocked.factorSecret32.slice(),f=await to({material:u.material,envelope:mo(r),ownedFactorSecret:d,activation:{materialActivation:l.materialActivation,lifecycleId:l.lifecycle.lifecycleId,signingRootId:l.applicationBinding.signing_root_id,signingRootVersion:l.lifecycle.rootShareEpoch,signerSetId:l.lifecycle.signerSetId,thresholdSessionId:l.lifecycle.thresholdSessionId,activationTranscriptB64u:P(Uint8Array.from(l.registrationContinuity.activationTranscript)),activationCapabilityBindingB64u:P(Uint8Array.from(l.activeCapabilityBinding))}}).finally(d.fill.bind(d,0));try{if(a.aborted)throw Error(`Wallet unlock was cancelled.`);let r=Ao({walletId:t.walletId,nearAccountId:l.nearAccountId,nearEd25519SigningKeyId:l.applicationBinding.near_ed25519_signing_key_id,walletSessionId:n.walletSessionId,authorizationId:t.authorizationId,quotaId:t.quotaId,thresholdSessionId:l.lifecycle.thresholdSessionId,expiresAtMs:t.expiresAtMs,remainingUses:i.remainingUses,runtimePolicyScope:l.runtimePolicyScope,signingRootId:l.applicationBinding.signing_root_id,signingRootVersion:l.lifecycle.rootShareEpoch,routerAbNormalSigning:{kind:Xe,signingWorkerId:l.lifecycle.signingWorkerId},walletSessionToken:n.token,home:n.home,nowMs:Date.now()});if(!r.ok)throw Error(`NEAR Wallet Session is invalid: ${r.reason}`);return{activeClient:f,state:rs({walletId:t.walletId,nearAccountId:l.nearAccountId,nearEd25519SigningKeyId:mi(l.applicationBinding.near_ed25519_signing_key_id),signerSlot:l.applicationBinding.key_creation_signer_slot,auth:{kind:`voiceid`,walletAuthMethodId:o.walletAuthMethodId,deviceKeyId:o.deviceKeyId},authority:c,relayerUrl:e.relayerUrl,signingWalletSession:r.value}),capability:l}}catch(e){throw f.dispose(),e}}async function QO(e,t,n){let r=t.authority.signerActivations.ecdsa;if(!r){if(e.near.kind!==`ready`)throw Error(`This wallet has no active signer.`);return}let i=e.walletSession.capabilitySubjects.filter($O);if(i.length!==1||i[0]?.kind!==`sign`||!g(i[0].materialActivation,r.materialActivation))throw Error(`ECDSA material does not belong to this Wallet Session.`);e.signal.throwIfAborted();let a=new Ui,o={authority:t.ref,capability:r.materialActivation.capability},s=await a.lookup(o);if(s.kind===`missing`){let e=await a.listActiveWalletCapabilitySubjects(t.method.walletId);if(e.kind!==`resolved`)throw Error(`ECDSA material inventory is unavailable.`);let n=!1;for(let i of e.subjects){if(i.authority.walletAuthMethodId===t.method.walletAuthMethodId)continue;let e=await a.lookup(i);if(e.kind!==`active`||!g(e.manifest.activation.materialActivation,r.materialActivation))continue;let o=await G.getWalletAuthMethodV2(i.authority.walletAuthMethodId);if(!(!o||o.status!==`active`||o.walletAuthorityId!==t.authority.authorityId)){await Dc({walletId:t.method.walletId,walletAuthorityId:t.authority.authorityId,sourceWalletAuthMethodId:o.walletAuthMethodId,targetAuthority:t.ref}),n=!0;break}}if(!n)throw Error(`Unlock with a passkey or Email OTP once to restore ECDSA material on this device.`);s=await a.lookup(o)}if(s.kind!==`active`||!g(s.manifest.activation.materialActivation,r.materialActivation))throw Error(`ECDSA material changed during VoiceID unlock.`);if(e.signal.throwIfAborted(),!(await Wu({workerCtx:n,authority:t.ref,materialActivation:r.materialActivation})).ok)throw Error(`ECDSA material could not be opened for VoiceID.`);e.signal.throwIfAborted()}function $O(e){return e.kind===`sign`&&e.keyFamily===`ecdsa_secp256k1`}async function ek(e,t,n){let r=await XO(n),i=n.near.kind===`ready`?await ZO({unlocked:n,identity:r,relayerUrl:e.relayerUrl,loadMaterial:e.engine.loadWalletCustodyEd25519Material.bind(e.engine)}):null;try{let a=tk.bind(null,e,t,n,i,r);return i?await e.engine.withExactEd25519MaterialOwner({materialActivation:i.capability.materialActivation,nearAccountId:i.capability.nearAccountId,task:a}):await a()}catch(e){throw i?.activeClient.dispose(),e}}async function tk(e,t,n,r,i){let a=n.walletSession.walletId;try{let e=await G.resolveSelectedWalletAuthority(a);if(n.signal.aborted||e.kind!==`resolved`||e.selection.lockGeneration!==t)throw Error(`Wallet lock state changed during unlock.`)}catch(e){throw r?.activeClient.dispose(),e}let o=r?.capability;try{if(await e.engine.clearVolatileWarmSigningMaterial(a),n.signal.aborted)throw Error(`Wallet unlock was cancelled.`);if(await K.writeExactWithOperationCredential({record:n.walletSession,operationCredential:n.operationCredential}),r&&o&&(await e.engine.activateVerifiedNearEd25519YaoMaterial({activeClient:r.activeClient,facts:Cs(r.state)}),await e.engine.upsertEd25519YaoPublicCapabilityLaneReference({walletId:a,nearAccountId:o.nearAccountId,nearEd25519SigningKeyId:mi(o.applicationBinding.near_ed25519_signing_key_id),signerSlot:o.applicationBinding.key_creation_signer_slot,auth:{kind:`voiceid`,walletAuthMethodId:n.walletSession.authMethodId,deviceKeyId:i.method.deviceKeyId},thresholdSessionId:o.lifecycle.thresholdSessionId,runtimePolicyScope:o.runtimePolicyScope,materialActivation:o.materialActivation,expiresAtMs:n.walletSession.expiresAtMs,remainingUses:r.state.remainingUses})),await Ga(e.transport,{existingEnvelope:n.custodyEnvelope,existingFactorSecret:n.factorSecret32,walletId:a,walletAuthMethodId:n.walletSession.authMethodId,walletSessionId:n.operationCredential.walletSessionId,expiresAtMs:n.walletSession.expiresAtMs}),await QO(n,i,e.engine.getSignerWorkerContext()),o&&await e.engine.activateAuthenticatedWalletState({walletId:a,nearAccountId:o.nearAccountId,signerSlot:o.applicationBinding.key_creation_signer_slot,nearClient:e.nearClient}),!await ka(a,n.walletSession.authMethodId))throw Error(`VoiceID is turned off in this browser.`);if(n.signal.aborted||(await G.markWalletSelectionUnlockedAtGeneration({walletId:a,walletAuthMethodId:n.walletSession.authMethodId,unlockedAtMs:Date.now(),expectedLockGeneration:t}),n.signal.aborted))throw Error(`Wallet unlock was cancelled.`);return r&&e.rememberNearSession(r.state),e.engine.setWalletAuthenticated({kind:`authenticated`,walletId:a,authMethod:`voiceid`}),o?{success:!0,kind:`near_wallet_unlocked`,walletId:a,loggedInNearAccountId:o.nearAccountId,nearAccountId:o.nearAccountId,operationalPublicKey:`ed25519:${dn(Uint8Array.from(o.registeredPublicKey))}`}:{success:!0,kind:`ecdsa_wallet_unlocked`,walletId:a}}catch(t){throw r?.activeClient.dispose(),await e.engine.clearVolatileWarmSigningMaterial(a),await K.clearWallet(a),await e.engine.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({kind:`wallet_session`,walletSessionId:n.operationCredential.walletSessionId}),e.engine.clearWalletAuthentication(),t}}var nk=class{state={kind:`active`};handlePageHideBound;constructor(e,t){this.eventTarget=e,this.clientOwner=t,this.handlePageHideBound=this.handlePageHide.bind(this),this.eventTarget?.addEventListener(`pagehide`,this.handlePageHideBound)}handlePageHide(){this.dispose()}dispose(){this.state.kind!==`disposed`&&(this.state={kind:`disposed`},this.eventTarget?.removeEventListener(`pagehide`,this.handlePageHideBound),this.clientOwner.dispose())}};function rk(e){let t;try{t=JSON.parse(e.activationResultJson)}catch{throw Error(`the Router activation result is not JSON`)}let n=Sr(t);if(!n.ok)throw Error(`Router activation result is invalid: ${n.message}`);let r=n.value,i=r.public_receipt;if(r.binding.lifecycle.lifecycle_id!==e.admissionRequest.scope.lifecycle_id)throw Error(`the Router activation result belongs to another lifecycle`);let a=i.material_activation,o=m({kind:a.kind,activationId:a.activation_id,capability:a.capability,materialOwner:a.material_owner,keyBinding:a.key_binding,lifecycleBinding:a.lifecycle_binding,signingWorker:a.signing_worker});if(!o.ok)throw Error(`Invalid activation material reference: ${o.error.message}`);let s=e.admissionRequest.participant_ids;if(s.length!==2)throw Error(`an Ed25519 Yao registration has exactly two participants`);return{kind:zo,scope:e.admissionRequest.scope,applicationBinding:e.admissionRequest.application_binding,participantIds:[s[0],s[1]],registeredPublicKey:Uint8Array.from(i.registered_public_key),signingWorkerVerifyingShare:Uint8Array.from(i.signing_worker_verifying_share),stateEpoch:BigInt(i.state_epoch),transcript:Uint8Array.from(i.transcript),activeCapabilityBinding:r.binding.session_id,materialActivation:o.value}}function ik(e){let t;try{t=JSON.parse(e.activationResultJson)}catch{throw Error(`the Router recovery result is not JSON`)}let n=mr(t);if(!n.ok)throw Error(`Router recovery result is invalid: ${n.message}`);if(n.value.binding.lifecycle.lifecycle_id!==e.admissionRequest.scope.lifecycle_id)throw Error(`the Router recovery result belongs to another lifecycle`);if(e.activationReceipt.binding.lifecycle.lifecycle_id!==e.admissionRequest.scope.lifecycle_id)throw Error(`the Router recovery activation belongs to another lifecycle`);let r=e.activationReceipt.public_receipt,i=m({kind:r.material_activation.kind,activationId:r.material_activation.activation_id,capability:r.material_activation.capability,materialOwner:r.material_activation.material_owner,keyBinding:r.material_activation.key_binding,lifecycleBinding:r.material_activation.lifecycle_binding,signingWorker:r.material_activation.signing_worker});if(!i.ok)throw Error(`Invalid recovery material reference: ${i.error.message}`);return{kind:zo,scope:e.admissionRequest.scope,applicationBinding:e.admissionRequest.application_binding,participantIds:[e.admissionRequest.participant_ids[0],e.admissionRequest.participant_ids[1]],registeredPublicKey:Uint8Array.from(r.registered_public_key),signingWorkerVerifyingShare:Uint8Array.from(r.signing_worker_verifying_share),stateEpoch:BigInt(r.state_epoch),transcript:Uint8Array.from(r.transcript),activeCapabilityBinding:[...e.activationReceipt.active_capability_binding],materialActivation:i.value}}async function ak(e){let t=Wr(e.currentScope.material_activation),n=h(ve(`wallet-recovery-ed25519-material-activation`,32,`wallet recovery Ed25519 activation identities`)),r=y(`${e.lifecycleId}:material-activation`);if(!n.ok||!r.ok)throw Error(`wallet recovery Ed25519 material activation identity is invalid`);let i=b({activationId:n.value,capability:t.capability,materialOwner:t.materialOwner,keyBinding:t.keyBinding,lifecycleBinding:r.value,signingWorker:t.signingWorker}),a=new Uint8Array(32);globalThis.crypto.getRandomValues(a);try{return sk(gr({scope:{lifecycle_id:e.lifecycleId,root_share_epoch:e.currentScope.root_share_epoch,account_id:e.currentScope.account_id,threshold_session_id:e.thresholdSessionId,signer_set_id:e.currentScope.signer_set_id,signing_worker_id:e.currentScope.signing_worker_id,material_activation:Kr(i)},active_material_activation:e.currentScope.material_activation,application_binding:e.applicationBinding,participant_ids:e.participantIds,active_capability_binding:e.activeCapabilityBinding,replacement_capability_binding:[...a],registered_public_key:e.registeredPublicKey}),`wallet recovery Ed25519 admission request is invalid`)}finally{a.fill(0)}}function ok(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r+=1)n|=(e[r]??0)^(t[r]??0);return n===0}function sk(e,t){if(!e.ok)throw Error(`${t}: ${e.message}`);return e.value}async function ck(e){let t=await Ji({reservationId:Yi(e.reservationId),keySetId:e.entry.keySetId});return await ak({lifecycleId:t,thresholdSessionId:`${t}:threshold-session`,currentScope:e.entry.recoveryBasis.scope,applicationBinding:e.entry.recoveryBasis.applicationBinding,participantIds:e.entry.recoveryBasis.participantIds,activeCapabilityBinding:e.entry.recoveryBasis.activeCapabilityBinding,registeredPublicKey:e.entry.recoveryBasis.registeredPublicKey})}async function lk(e){return await ak({lifecycleId:ve(`wallet-session-ed25519-recovery`,32,`wallet-session Ed25519 recovery lifecycles`),thresholdSessionId:e.basis.lifecycle.thresholdSessionId,currentScope:{root_share_epoch:e.basis.lifecycle.rootShareEpoch,account_id:e.basis.lifecycle.accountId,signer_set_id:e.basis.lifecycle.signerSetId,signing_worker_id:e.basis.lifecycle.signingWorkerId,material_activation:Kr(e.basis.materialActivation)},applicationBinding:e.basis.applicationBinding,participantIds:e.basis.participantIds,activeCapabilityBinding:e.basis.activeCapabilityBinding,registeredPublicKey:e.basis.registeredPublicKey})}async function uk(e){let t=await e.transport.send({kind:`recovery_admit`,path:yr,body:e.request});if(!t.ok)throw Error(`Router Ed25519 recovery admission failed: ${t.message}`);let n=sk(hr(t.value),`Router Ed25519 recovery admission is invalid`);if(n.binding.lifecycle.lifecycle_id!==e.request.scope.lifecycle_id||!Br(n.binding.material_activation,e.request.scope.material_activation))throw Error(`Router Ed25519 recovery admission changed the requested lifecycle`);return{request:e.request,receipt:n}}async function dk(e){let t=sk(br(JSON.parse(e.executeRequestJson)),`wallet recovery Ed25519 execute request is invalid`),n=await e.transport.send({kind:`recovery_execute`,path:fr,body:t});if(!n.ok)throw Error(`Router Ed25519 recovery execute failed: ${n.message}`);let r=sk(mr(n.value),`Router Ed25519 recovery result is invalid`);return JSON.stringify(r)}async function fk(e){let t=sk(mr(JSON.parse(e.protocolResultJson)),`Router Ed25519 recovery result is invalid`),n=await e.transport.send({kind:`recovery_activate`,path:pr,body:{binding:t.binding,public_receipt:t.public_receipt}});if(!n.ok)throw Error(`Router Ed25519 recovery activation failed: ${n.message}`);let r=sk(xr(n.value),`Router Ed25519 recovery activation is invalid`);if(!ok(r.active_capability_binding,e.request.replacement_capability_binding)||!ok(r.retired_capability_binding,e.request.active_capability_binding)||!ok(r.public_receipt.transcript,t.public_receipt.transcript)||!ok(r.public_receipt.registered_public_key,t.public_receipt.registered_public_key)||!ok(r.public_receipt.signing_worker_verifying_share,t.public_receipt.signing_worker_verifying_share)||r.public_receipt.state_epoch!==t.public_receipt.state_epoch||!Br(r.public_receipt.material_activation,e.request.scope.material_activation))throw Error(`Router Ed25519 recovery activation changed the requested identity`);return r}const pk=[250,500,1e3];function mk(e){return new Promise(t=>setTimeout(t,e))}async function hk(e){let t=e.wait??mk,n=JSON.parse(e.executeRequestJson),r=0;for(let i=0;;i+=1){let a=await e.transport.send({kind:`execute`,path:_r,body:n});if(a.ok)return JSON.stringify(a.value);if(a.code!==`execution_in_progress`||r>=15e3)throw Error(`Router Ed25519 Yao execute failed: ${a.message}`);let o=pk[Math.min(i,pk.length-1)];await t(o),r+=o}}function gk(e){let t=F(e);if(t.length!==20)throw Error(`wallet recovery ECDSA identity has an invalid address`);return`0x${Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}`}function _k(e){let t=e.activationReceipt.ecdsa_activation;if(t.context.application_binding_digest_b64u!==e.publicCapability.context.application_binding_digest_b64u||!Ur(t.public_identity,e.publicCapability.public_identity)||!Qr(t.signing_worker,e.publicCapability.signer_set.selected_server)||!Br(t.material_activation,e.publicCapability.material_activation)||t.activation_epoch!==e.publicCapability.activation_epoch||e.activationReceipt.server_generation!==e.serverGeneration)throw Error(`wallet recovery ECDSA activation changed its registered capability`)}function vk(e){let t=e.publicCapability.public_identity;if(e.challenge.walletId!==e.walletId||e.challenge.reservationId!==e.reservationId||e.challenge.replacementId!==e.replacementId||e.challenge.keySetId!==e.entry.keySetId||e.challenge.keyHandle!==e.entry.keyHandle||e.challenge.recordedKeyManifestDigestB64u!==e.entry.recordedKeyManifestDigestB64u||e.challenge.expectedServerGeneration!==String(e.entry.recoveryBasis.serverGeneration)||e.challenge.derivationClientSharePublicKey33B64u!==t.derivation_client_share_public_key33_b64u)throw Error(`wallet recovery ECDSA possession challenge changed its registered identity`)}function yk(e){let t=e.publicCapability.public_identity;if(e.publicFacts.contextBinding32B64u!==t.context_binding_b64u||e.publicFacts.derivationClientSharePublicKey33B64u!==t.derivation_client_share_public_key33_b64u||e.publicFacts.clientVerifyingShare33B64u!==t.derivation_client_share_public_key33_b64u||e.publicFacts.relayerPublicKey33B64u!==t.server_public_key33_b64u||e.publicFacts.groupPublicKey33B64u!==t.threshold_public_key33_b64u||e.publicFacts.clientShareRetryCounter!==t.client_share_retry_counter||e.publicFacts.relayerShareRetryCounter!==t.server_share_retry_counter||e.publicFacts.ethereumAddress!==gk(t.ethereum_address20_b64u))throw Error(`wallet recovery ECDSA custody public facts changed the capability`)}function bk(e){let t=e.trim();if(!t)throw Error(`wallet recovery ECDSA returned no ready state blob`);return{kind:`ecdsa_role_local_state_blob_v1`,curve:`secp256k1`,encoding:`base64url`,producer:`signer_core`,stateBlobB64u:t}}async function xk(e){let t=Jr(e.entry.recoveryBasis.publicCapability),n=Lr(e.entry.recoveryBasis.activationReceipt);_k({activationReceipt:n,publicCapability:t,serverGeneration:String(e.entry.recoveryBasis.serverGeneration)});let r=wl(e.entry.recoveryBasis.possessionChallenge);vk({challenge:r,entry:e.entry,walletId:e.walletId,reservationId:e.reservationId,replacementId:e.replacementId,publicCapability:t});let i=P(await ee(ne(t)));if(r.publicCapabilityDigestB64u!==i)throw Error(`wallet recovery ECDSA possession challenge changed the capability digest`);yk({publicFacts:e.publicFacts,publicCapability:t});let a=await Ju({workerCtx:e.workerCtx,challenge:r,stateBlob:bk(e.readyStateBlobB64u)}),o=await Sl(r);if(a.challengeDigestB64u!==o||a.derivationClientSharePublicKey33B64u!==r.derivationClientSharePublicKey33B64u)throw Error(`wallet recovery ECDSA possession proof changed its challenge binding`);return{activationReceipt:n,publicCapability:t,possessionProof:a.proof}}function Sk(e){return e.entryIndex===0?{kind:`reseal_replacement_factor`,factorJson:JSON.stringify({envelopeId:e.replacementFactor.replacementId,walletAuthMethodId:e.replacementFactor.walletAuthMethodId,factor:e.replacementFactor.factor}),factorSecret:e.replacementFactor.factorSecret.slice(0)}:{kind:`preserve_existing`}}function Ck(e){return Uint8Array.from(e).buffer}function wk(e){e.kind===`reseal_replacement_factor`&&new Uint8Array(e.factorSecret).fill(0)}function Tk(e){let t=F(e);if(t.length!==20)throw Error(`wallet recovery ECDSA identity has an invalid address`);return`0x${Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}`}function Ek(e){let t=e.entry.recoveryBasis.publicCapability.public_identity;if(e.bootstrap.contextBinding32B64u!==t.context_binding_b64u||e.bootstrap.clientSharePublicKey33B64u!==t.derivation_client_share_public_key33_b64u||e.bootstrap.clientShareRetryCounter!==t.client_share_retry_counter)throw Error(`wallet recovery changed ECDSA identity for ${e.entry.keySetId}`)}function Dk(e){if(!e.candidate)return e.current;if(e.current)throw Error(`wallet recovery produced more than one replacement envelope`);return e.candidate}async function Ok(e){let t=[],n=[],r=null;for(let[i,a]of e.prepared.keyManifest.entries.entries()){let o=null,s=null;try{let c=Ck(e.recoveryCodeBytes);o=c;let l=Sk({entryIndex:i,replacementFactor:e.replacementFactor});switch(s=l,a.kind){case`near_ed25519`:{let n=new fo({routing:{kind:`discovery`},routerOrigin:new URL(e.relayUrl).origin,authorization:{kind:`recovery_challenge`,challengeId:e.recoveryChallengeId},fetch:globalThis.fetch}),i=await ck({reservationId:e.prepared.reservationId,entry:a}),o=await uk({request:i,transport:n}),s=await bs({runStep:e.runStep,walletId:e.walletId,custodyJson:e.custodyJson,recoveryCode:c,recordedKeyManifestDigestB64u:a.recordedKeyManifestDigestB64u,factorReplacement:l,nearEd25519SigningKeyId:a.recoveryBasis.applicationBinding.near_ed25519_signing_key_id,yaoAdmission:o.receipt,yaoApplication:o.request.application_binding,participantIds:o.request.participant_ids,registeredPublicKeyB64u:P(Uint8Array.from(a.recoveryBasis.registeredPublicKey)),runRouterRound:e=>dk({executeRequestJson:e,transport:n}),activateRouterRecovery:e=>fk({request:i,protocolResultJson:e,transport:n})});if(!s.localMaterial)throw Error(`wallet recovery produced no NEAR local material`);r=Dk({current:r,candidate:s.recoveryReplacementEnvelope}),t.push({entry:a,metadata:ik({admissionRequest:i,activationResultJson:s.activationResultJson,activationReceipt:s.activationReceipt}),localMaterial:s.localMaterial});break}case`evm_family_ecdsa`:{let t=await ks({runStep:e.runStep,walletId:e.walletId,custodyJson:e.custodyJson,recoveryCode:c,recordedKeyManifestDigestB64u:a.recordedKeyManifestDigestB64u,factorReplacement:l,evmFamilySigningKeySlotId:a.evmFamilySigningKeySlotId,applicationBindingDigestB64u:a.recoveryBasis.publicCapability.context.application_binding_digest_b64u,registeredClientRootPublicKey33B64u:a.recoveryBasis.clientRootPublicKey33B64u,resolveRelayerPublicIdentity:async e=>(Ek({entry:a,bootstrap:e}),JSON.stringify({relayerKeyId:a.recoveryBasis.publicCapability.signer_set.selected_server.server_id,relayerPublicKey33B64u:a.recoveryBasis.publicCapability.public_identity.server_public_key33_b64u,groupPublicKey33B64u:a.recoveryBasis.publicCapability.public_identity.threshold_public_key33_b64u,ethereumAddress:Tk(a.recoveryBasis.publicCapability.public_identity.ethereum_address20_b64u),relayerShareRetryCounter:a.recoveryBasis.publicCapability.public_identity.server_share_retry_counter}))}),i=await xk({entry:a,walletId:e.walletId,reservationId:e.prepared.reservationId,replacementId:e.replacementFactor.replacementId,readyStateBlobB64u:t.readyStateBlobB64u,publicFacts:t.publicFacts,workerCtx:e.workerCtx});r=Dk({current:r,candidate:t.recoveryReplacementEnvelope}),n.push({entry:a,activation:i,readyStateBlobB64u:t.readyStateBlobB64u,publicFacts:t.publicFacts});break}}}finally{s&&wk(s),o&&new Uint8Array(o).fill(0)}}if(!r)throw Error(`wallet recovery produced no replacement custody envelope`);return{replacementEnvelope:Qo({expectedWalletId:e.walletId,replacement:r,activatedAtMs:(e.nowMs??Date.now)()}),nearKeySets:t,ecdsaKeySets:n}}function kk(e,t){if(typeof e!=`number`||!Number.isSafeInteger(e)||e<1)throw Error(`${t} must be a positive integer`);return e}function Ak(e){if(!Array.isArray(e)||e.length!==2||!Number.isSafeInteger(e[0])||!Number.isSafeInteger(e[1])||e[0]<1||e[1]<1||e[0]===e[1])throw Error(`warm recovery participantIds must contain two distinct positive integers`);return[Number(e[0]),Number(e[1])]}const jk=[`capability`,`kind`,`nearAccountId`,`nearEd25519SigningKeyId`,`participantIds`,`quotaId`,`routerAbNormalSigning`,`runtimePolicyScope`,`signerSlot`,`signingWorkerId`,`thresholdExpiresAtMs`,`thresholdSessionId`,`walletId`,`walletSessionId`];function Mk(e,t){let n=[...t].sort(),r=Object.keys(e).sort();if(r.length!==n.length)throw Error(`warm recovery bootstrap response fields are invalid`);for(let e=0;e<r.length;e+=1)if(r[e]!==n[e])throw Error(`warm recovery bootstrap response fields are invalid`)}function Nk(e,t){if(e.authMethod!==`passkey`)return!1;let n=e.ed25519Restore;return n.credentialIdB64u?e.walletId===t.walletId&&n.nearAccountId===t.nearAccountId&&n.nearEd25519SigningKeyId===t.nearEd25519SigningKeyId&&n.signerSlot===t.signerSlot&&e.thresholdSessionIds.ed25519===t.thresholdSessionId:!1}async function Pk(e,t){let n=await t.readExactEd25519SealedSession(Pd({authMethod:`passkey`,materialActivation:e.materialActivation}));return n&&(n.curve!==`ed25519`||!Nk(n,e)||!g(n.ed25519Restore.materialActivation,e.materialActivation))||!n||n.expiresAtMs<=t.nowMs()||n.remainingUses<1?{kind:`unavailable`}:{kind:`ready`,record:n}}async function Fk(e){let t;try{t=await e.runtime.resolveSelectedWalletAuthority(String(e.walletId))}catch{return null}if(t.kind!==`resolved`)return null;let{selection:n,authMethod:r,authority:i}=t;if(n.lockState!==`unlocked`||n.walletId!==e.walletId||e.expectedAuthorityRef.walletId!==e.walletId||n.walletAuthMethodId!==e.expectedAuthorityRef.walletAuthMethodId||r.kind!==`passkey`||r.status!==`active`||r.walletId!==e.walletId||r.walletAuthMethodId!==e.expectedAuthorityRef.walletAuthMethodId||r.walletAuthorityId!==i.authorityId||String(r.rpId)!==e.rpId||String(r.credentialIdB64u)!==e.credentialIdB64u||i.state!==`active`||i.walletId!==e.walletId)return null;try{return{authorizationRead:await e.runtime.readExactWalletSessionAuthorization({walletId:e.walletId,authorityId:i.authorityId,authMethodId:r.walletAuthMethodId}),authorityId:i.authorityId,authorityDigestB64u:i.authorityDigestB64u,authorityRevocationEpoch:i.revocationEpoch}}catch{return null}}async function Ik(e){if(e.authorizationRead.kind!==`found`)return null;let t=e.authorizationRead,n=t.record,r=n.capabilitySubjects.filter(t=>t.kind===`sign`&&t.keyFamily===`ed25519`&&g(t.materialActivation,e.record.ed25519Restore.materialActivation));return n.walletId!==e.expectedAuthorityRef.walletId||n.walletId!==e.record.walletId||n.authorityId!==e.expectedAuthorityId||n.authMethodId!==e.expectedAuthorityRef.walletAuthMethodId||String(n.authorityDigestB64u)!==String(e.expectedAuthorityDigestB64u)||n.authorityRevocationEpoch!==e.expectedAuthorityRevocationEpoch||n.expiresAtMs<=e.nowMs||t.operationCredential.walletSessionId.trim().length===0||t.operationCredential.token.trim().length===0||r.length!==1?null:t}function Lk(e,t){let n=e.ed25519Restore,r=Cr({kind:`router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1`,walletId:e.walletId,nearAccountId:n.nearAccountId,nearEd25519SigningKeyId:n.nearEd25519SigningKeyId,signerSlot:n.signerSlot,thresholdSessionId:t,signingWorkerId:n.routerAbNormalSigning.signingWorkerId,participantIds:n.participantIds});if(!r.ok)throw Error(r.message);return r.value}async function Rk(e){let t=e.authorization.operationCredential.token;if(e.authorization.record.walletId!==e.request.walletId||!e.authorization.operationCredential.walletSessionId||!t.trim())throw Error(`[SigningEngine][near] active Wallet Session authorization does not match sealed material`);let n=await e.fetch(`${new URL(e.relayerUrl).origin}${vr}`,{method:`POST`,headers:{Authorization:`Bearer ${t}`,"Content-Type":`application/json`},body:JSON.stringify(e.request)}),r=await zk(n),i=k(r)?r:null;if(!n.ok){let e=i?String(i.code||``).trim():``;if(n.status===401&&e===`wallet_session_expired`)return{kind:`unavailable`,reason:`wallet_session_expired`};let t=i?String(i.message||``).trim():``;throw Error(`[SigningEngine][near] Ed25519 warm recovery bootstrap failed (HTTP ${n.status}${e?`, ${e}`:``}): ${t||`invalid response`}`)}if(!i)throw Error(`Ed25519 warm recovery bootstrap returned invalid JSON`);return{kind:`ready`,descriptor:await Bk({record:e.record,authorization:e.authorization,expectedAuthorityRef:e.expectedAuthorityRef,expectedThresholdSessionId:e.expectedThresholdSessionId,response:i})}}async function zk(e){try{return await e.json()}catch{return null}}async function Bk(e){let t=e.record,n=e.response;if(Mk(n,jk),n.kind!==`router_ab_ed25519_yao_v2_session_bootstrap_v1`)throw Error(`warm recovery bootstrap response kind is invalid`);let r=t.ed25519Restore,i=N(n.walletId,`response.walletId`),a=N(n.nearAccountId,`response.nearAccountId`),o=N(n.nearEd25519SigningKeyId,`response.nearEd25519SigningKeyId`),s=kk(n.signerSlot,`response.signerSlot`),c=N(n.thresholdSessionId,`response.thresholdSessionId`),l=N(n.signingWorkerId,`response.signingWorkerId`),u=kk(n.thresholdExpiresAtMs,`response.thresholdExpiresAtMs`),d=Ak(n.participantIds),f=Fe(E(n.runtimePolicyScope,`response.runtimePolicyScope`)),p=Fe(E(r.runtimePolicyScope,`ed25519Restore.runtimePolicyScope`)),m=Qe(n.routerAbNormalSigning),h=gt(n.walletSessionId),g=mt(n.quotaId),_=Ja(n.capability),v=e.authorization.operationCredential.token;if(!h.ok||!g.ok||e.expectedAuthorityRef.walletId!==t.walletId||String(h.value)!==String(e.authorization.operationCredential.walletSessionId)||String(g.value)!==String(e.authorization.record.quotaId)||!m||i!==t.walletId||a!==r.nearAccountId||o!==r.nearEd25519SigningKeyId||s!==r.signerSlot||c!==String(e.expectedThresholdSessionId)||!v||l!==r.relayerKeyId||l!==r.routerAbNormalSigning.signingWorkerId||m.signingWorkerId!==l||t.expiresAtMs>u||d[0]!==r.participantIds[0]||d[1]!==r.participantIds[1]||!Ie(f,p))throw Error(`warm recovery bootstrap does not match the exact sealed Ed25519 lane`);if(!Pe(f))throw Error(`warm recovery bootstrap signing-root scope is invalid`);if(!v)throw Error(`[SigningEngine][near] active Wallet Session authorization is unavailable`);let y={authority:e.expectedAuthorityRef,walletId:hi(i),nearAccountId:mn(a),nearEd25519SigningKeyId:o,signerSlot:s,operationalPublicKey:`ed25519:${dn(Uint8Array.from(_.registeredPublicKey))}`,relayerKeyId:l,credentialIdB64u:N(r.credentialIdB64u,`ed25519Restore.credentialIdB64u`),session:{sessionKind:`opaque`,home:e.authorization.operationCredential.home,walletSessionToken:v,thresholdSessionId:c,walletSessionId:h.value,authorizationId:e.authorization.record.authorizationId,quotaId:g.value,expiresAtMs:u,remainingUses:t.remainingUses,runtimePolicyScope:f,participantIds:d,routerAbNormalSigning:m},capability:_};return xo(y,r.materialActivation),y}async function Vk(e,t){let n=await Pk(e.subject,t);if(n.kind===`unavailable`)return{kind:`capability_recovery_required`};let r=_(n.record.walletId);if(!r.ok)throw Error(`[SigningEngine][near] sealed Ed25519 wallet identity is invalid`);let i=N(n.record.ed25519Restore.credentialIdB64u,`ed25519Restore.credentialIdB64u`),a;try{a=await t.resolveExactPasskeyWalletAuthAuthorityRef({walletId:r.value,rpId:n.record.ed25519Restore.rpId,credentialIdB64u:i})}catch{return{kind:`capability_recovery_required`}}if(!a)return{kind:`capability_recovery_required`};let o=await Fk({walletId:r.value,rpId:n.record.ed25519Restore.rpId,credentialIdB64u:i,expectedAuthorityRef:a,runtime:t});if(!o)return{kind:`capability_recovery_required`};let s=await Ik({record:n.record,authorizationRead:o.authorizationRead,expectedAuthorityRef:a,expectedAuthorityId:o.authorityId,expectedAuthorityDigestB64u:o.authorityDigestB64u,expectedAuthorityRevocationEpoch:o.authorityRevocationEpoch,nowMs:t.nowMs()});if(!s)return{kind:`capability_recovery_required`};let c=await Rk({request:Lk(n.record,e.subject.thresholdSessionId),authorization:s,record:n.record,expectedAuthorityRef:a,expectedThresholdSessionId:e.subject.thresholdSessionId,relayerUrl:e.relayerUrl,fetch:e.fetch});if(c.kind===`unavailable`)return{kind:`capability_recovery_required`};let l=c.descriptor,u=await t.readPasskeyCustodySessionEnvelope({walletId:String(l.walletId),credentialIdB64u:l.credentialIdB64u});return!u||u.binding.kind!==`wallet_custody_seed_v1`?{kind:`capability_recovery_required`}:{kind:`ready`,context:{kind:`passkey_ed25519_yao_export_context_v1`,selectedLaneMaterialActivation:l.capability.materialActivation,material:{authority:l.authority,walletId:l.walletId,nearAccountId:l.nearAccountId,nearEd25519SigningKeyId:l.nearEd25519SigningKeyId,signerSlot:l.signerSlot,operationalPublicKey:l.operationalPublicKey,relayerKeyId:l.relayerKeyId,credentialIdB64u:l.credentialIdB64u,capability:l.capability},authorization:s,relayerUrl:e.relayerUrl,rpId:n.record.ed25519Restore.rpId,walletCustodyEnvelope:u}}}async function Hk(e){let{authority:t,authMethod:n}=e.projection;if(String(t.walletId)!==e.walletId||String(n.walletId)!==e.walletId||String(n.walletAuthMethodId)!==e.walletAuthMethodId||String(n.walletAuthorityId)!==String(t.authorityId))throw Error(`Verified Email OTP authority changed during wallet unlock`);switch(t.provenance.kind){case`wallet_registration`:await G.persistFoundingWalletAuthority({authority:t,authMethod:n});return;case`wallet_recovery`:{if(!jr(t))throw Error(`Recovered Email OTP authority provenance is invalid`);let r=await G.resolveWalletAuthorityForMethod(e.walletId,e.walletAuthMethodId),i=r.kind===`resolved`?[...String(r.authority.authorityId)===String(t.authorityId)?[]:[`authorityId`],...String(r.authority.authorityDigestB64u)===String(t.authorityDigestB64u)?[]:[`authorityDigest`],...r.authMethod.kind===`email_otp`?[]:[`method.kind`],...r.authMethod.status===`active`?[]:[`method.status`],...String(r.authMethod.walletAuthMethodId)===String(n.walletAuthMethodId)?[]:[`method.id`],...String(r.authMethod.walletAuthorityId)===String(n.walletAuthorityId)?[]:[`method.authorityId`],...r.authMethod.kind===`email_otp`&&r.authMethod.emailHashHex!==n.emailHashHex?[`method.emailHash`]:[]]:[`resolution:${r.kind}`];if(i.length>0)throw Error(`Verified recovered Email OTP authority is not installed on this device: ${i.join(`, `)}`);return}case`device_link`:{let n=await G.resolveWalletAuthorityForMethod(e.walletId,e.walletAuthMethodId);if(n.kind!==`resolved`||String(n.authority.authorityId)!==String(t.authorityId)||String(n.authority.authorityDigestB64u)!==String(t.authorityDigestB64u))throw Error(`Verified linked Email OTP authority is not installed on this device`);return}}t.provenance}async function Uk(e){let{authority:t,authMethod:n}=e.projection;if(String(t.walletId)!==e.walletId||String(n.walletId)!==e.walletId||String(n.walletAuthMethodId)!==e.walletAuthMethodId||String(n.walletAuthorityId)!==String(t.authorityId)||n.emailHashHex!==e.emailHashHex)throw Error(`Verified Email OTP authority does not match the wallet unlock factor`);let r=Zr({walletId:e.walletId,provider:e.providerSubject.startsWith(`google:`)?`google`:`email`,providerUserId:e.providerSubject,emailHashHex:e.emailHashHex});return await H({authority:{walletId:r.walletId,factor:r.factor,verifier:r.verifier,bindingId:n.walletAuthMethodId}})}function Wk(){}async function Gk(e,t){switch(t.kind){case`near_ed25519_wallet`:await e.signingEngine.activateAuthenticatedWalletState({walletId:t.signer.account.wallet.walletId,nearAccountId:mn(t.signer.account.nearAccountId),signerSlot:t.signer.signerSlot,...e.nearClient?{nearClient:e.nearClient}:{}}),await e.signingEngine.markSelectedEmailOtpWalletAuthorityUnlocked({walletId:t.signer.account.wallet.walletId,walletAuthMethodId:t.walletAuthMethodId}),e.signingEngine.setWalletAuthenticated({kind:`authenticated`,walletId:t.signer.account.wallet.walletId,authMethod:`email_otp`});return;case`evm_family_ecdsa_wallet`:{let n=e.signingEngine.getUserPreferences();n.setCurrentWallet(t.walletId),await n.reloadUserSettings().catch(Wk),await e.signingEngine.markSelectedEmailOtpWalletAuthorityUnlocked({walletId:t.walletId,walletAuthMethodId:t.walletAuthMethodId}),e.signingEngine.setWalletAuthenticated({kind:`authenticated`,walletId:t.walletId,authMethod:`email_otp`});return}}}function Kk(e){return{laneSelection:e.laneSelection,sessionLifecycle:e.sessionLifecycle,ecdsa:{...e.ecdsa,theme:e.getTheme()},ed25519Yao:{...e.ed25519Yao,theme:e.getTheme()}}}async function qk(e,t){let{exportKeypairWithUI:n}=await import(`./exportKeypairOperation-CGE9ZU1m.js`);return await n(Kk(e),t)}async function Jk(e,t){let{resolveExactKeyExportLane:n}=await import(`./exportKeypairOperation-CGE9ZU1m.js`);return await n(Kk(e),t)}async function Yk(e,t){return await e.touchConfirm.requestRegistrationCredentialConfirmation({walletId:t.walletId,nearAccountId:t.nearAccountId,signerSlot:t.signerSlot,confirmerText:t.confirmerText,confirmationConfigOverride:t.confirmationConfigOverride,challengeB64u:t.challengeB64u,registrationOptions:t.registrationOptions})}async function Xk(e,t){return await e.touchIdPrompt.getAuthenticationCredentialsSerializedForChallengeB64u({subjectId:t.subjectId,challengeB64u:t.challengeB64u,allowCredentials:t.allowCredentials,includeSecondPrfOutput:t.includeSecondPrfOutput??!1})}function Zk(e){e instanceof Uint8Array&&e.fill(0)}function Qk(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`${t} returned invalid JSON`);return e}function $k(e,t){return N(e,t)}function eA(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}function tA(e){if(!e||typeof e.requestWorkerOperation!=`function`)throw Error(`Email OTP secret-bearing operations require the dedicated emailOtp worker`);return e}function nA(e,t){if(!(e instanceof Uint8Array))throw Error(`${t} must be a Uint8Array`);if(e.length!==32)throw Error(`${t} must contain 32 bytes`);return Uint8Array.from(e)}function rA(e){return e.routeFamily===`registration`?Wo({routeFamily:`registration`,operation:Pt}):Wo({routeFamily:`login`,operation:Ft})}function iA(e){let t=Qk(e,`Email OTP registration ECDSA handle`),n=$k(t.kind,`emailOtpSessionHandle.handle.kind`);if(n!==`email_otp_worker_session_handle_v1`)throw Error(`Unsupported Email OTP worker handle kind: ${n}`);let r=$k(t.action,`emailOtpSessionHandle.handle.action`);if(r!==`wallet_registration_ecdsa_prepare`)throw Error(`Unsupported Email OTP worker handle action: ${r}`);if($k(t.operation,`emailOtpSessionHandle.handle.operation`)!==`registration`)throw Error(`Email OTP registration ECDSA handle requires registration operation`);if($k(t.keyScope,`emailOtpSessionHandle.handle.keyScope`)!==`evm-family`)throw Error(`Email OTP registration ECDSA handle requires evm-family keyScope`);return{kind:`email_otp_worker_session_handle_v1`,sessionId:$k(t.sessionId,`emailOtpSessionHandle.handle.sessionId`),walletId:$k(t.walletId,`emailOtpSessionHandle.handle.walletId`),evmFamilySigningKeySlotId:$k(t.evmFamilySigningKeySlotId,`emailOtpSessionHandle.handle.evmFamilySigningKeySlotId`),authSubjectId:$k(t.authSubjectId,`emailOtpSessionHandle.handle.authSubjectId`),action:`wallet_registration_ecdsa_prepare`,operation:`registration`,keyScope:`evm-family`,chainTarget:aA(t.chainTarget)}}function aA(e){let t=e&&typeof e==`object`?e:null;if(!t)throw Error(`Email OTP registration ECDSA handle requires chainTarget`);return tn(t)}function oA(e){let t=Qk(e,`Email OTP registration ECDSA handle result`),n=$k(t.kind,`emailOtpSessionHandle.kind`);switch(n){case`available`:if(!Array.isArray(t.handles)||t.handles.length===0)throw Error(`Email OTP registration ECDSA handle result requires handles`);{let e=[];for(let n of t.handles)e.push(iA(n));let n=e[0];if(!n)throw Error(`Email OTP registration ECDSA handle result requires handles`);return{kind:`available`,handles:[n,...e.slice(1)]}}case`not_requested`:if(`handles`in t)throw Error(`Email OTP unrequested registration ECDSA handle result forbids handles`);return{kind:`not_requested`};default:throw Error(`Unsupported Email OTP registration ECDSA handle result kind: ${n}`)}}async function sA(e){let t=tA(e.workerCtx),n=null;try{n=e.clientSecret32?nA(e.clientSecret32,`clientSecret32`):null;let r=await t.requestWorkerOperation({kind:`emailOtp`,request:{type:`prepareEmailOtpRegistrationEnrollmentMaterial`,payload:{relayUrl:$k(e.relayUrl,`relayUrl`),walletId:$k(e.walletId,`walletId`),userId:$k(e.userId,`userId`),groupId:$k(e.groupId,`groupId`),routePlan:rA({routeFamily:`registration`}),otpChannel:e.otpChannel||`email_otp`,ecdsaSessionHandle:e.ecdsaSessionHandle,...n?{clientSecret32:eA(n)}:{}}}});return{...r,emailOtpSessionHandle:oA(r.emailOtpSessionHandle),emailOtpEnrollment:r.emailOtpEnrollment}}finally{Zk(n)}}function cA(e,t){return ws({freshRouteFamily:t,operation:e.operation})}function lA(e){return{walletSession:e.walletSession,authoritySelector:e.authoritySelector,chainTarget:e.chainTarget,otpCode:e.otpCode,routePlan:cA(e,`login`),ecdsaBootstrapAuthorization:e.ecdsaBootstrapAuthorization,emailHashHex:e.emailHashHex,providerIdentity:e.providerIdentity,ed25519YaoRecovery:e.ed25519YaoRecovery??{kind:`not_requested`},...e.emailOtpAuthPolicy?{emailOtpAuthPolicy:e.emailOtpAuthPolicy}:{},...e.emailOtpAuthReason?{emailOtpAuthReason:e.emailOtpAuthReason}:{},...e.relayUrl?{relayUrl:e.relayUrl}:{},...e.challengeId?{challengeId:e.challengeId}:{},...e.operation?{operation:e.operation}:{},...e.groupId?{groupId:e.groupId}:{},...e.keyHandle?{keyHandle:e.keyHandle}:{},...e.participantIds?{participantIds:e.participantIds}:{},...e.publicationChainTargets?{publicationChainTargets:e.publicationChainTargets}:{},...typeof e.ttlMs==`number`?{ttlMs:e.ttlMs}:{},...typeof e.remainingUses==`number`?{remainingUses:e.remainingUses}:{},...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{},...e.onProgress?{onProgress:e.onProgress}:{}}}async function uA(e,t){return await e.emailOtpSessions.loginWithEcdsaCapabilityInternal(lA(t))}async function dA(e,t){let n=B(t.walletId),r=String(t.relayUrl||e.relayerUrl||``).trim();if(!r)throw Error(`Missing relayer url (configs.network.relayer.url)`);let i=String(t.groupId||e.groupId||``).trim();if(!i)throw Error(`Missing shamir prime for Email OTP runtime`);let a=String(t.userId).trim();if(!a)throw Error(`Email OTP registration enrollment material requires userId`);return await sA({relayUrl:r,walletId:String(n),userId:a,groupId:i,workerCtx:e.getSignerWorkerContext(),otpChannel:t.otpChannel,ecdsaSessionHandle:{kind:`not_requested`},...t.clientSecret32?{clientSecret32:t.clientSecret32}:{}})}const fA={BUILD:{ROOT:`dist`,WORKERS:`dist/workers`,ESM:`dist/esm`,TYPES:`dist/types`},SOURCE:{ROOT:`src`,CORE:`src/core`,STATIC:`src/static`,SIGNING_WORKERS:`src/core/signingEngine/workerManager/workers`,WASM_SIGNER:`../../wasm/near_signer`,ED25519_YAO_CLIENT:`../../crates/router-ab-ed25519-yao-client`,WASM_ECDSA_CLIENT:`../../wasm/router_ab_ecdsa_client`,WASM_EVM_CRYPTO:`../../wasm/evm_crypto`,WASM_TEMPO_SIGNER:`../../wasm/tempo_signer`,WASM_SHAMIR3PASS_RUNTIME:`../../wasm/shamir3pass_runtime`,WASM_EMAIL_OTP_RUNTIME:`../../wasm/email_otp_runtime`,WASM_WALLET_CUSTODY_CEREMONY:`../../wasm/wallet_custody_ceremony`,CRITICAL_DIRS:[`src/core`,`src/react`,`src/static`,`src/utils`,`../wallet-server/src`,`../shared-ts/src`,`../../crates/router-ab-ed25519-yao-client`,`../../wasm/near_signer`,`../../wasm/router_ab_ecdsa_client`,`../../wasm/evm_crypto`,`../../wasm/tempo_signer`,`../../wasm/shamir3pass_runtime`,`../../wasm/email_otp_runtime`,`../../wasm/wallet_custody_ceremony`]},RUNTIME:{SDK_BASE:`/sdk`,WORKERS_BASE:`/sdk/workers`,TOUCH_CONFIRM_WORKER:`/sdk/workers/passkey-confirm.worker.js`,PASSKEY_MPC_SESSION_WORKER:`/sdk/workers/passkey-mpc-session.worker.js`,PASSKEY_MPC_EXPORT_WORKER:`/sdk/workers/passkey-mpc-export.worker.js`,SIGNER_WORKER:`/sdk/workers/near-signer.worker.js`,ECDSA_DERIVATION_CLIENT_WORKER:`/sdk/workers/ecdsa-derivation-client.worker.js`,ECDSA_PRESIGN_CLIENT_WORKER:`/sdk/workers/ecdsa-presign-client.worker.js`,ECDSA_ONLINE_CLIENT_WORKER:`/sdk/workers/ecdsa-online-client.worker.js`,EMAIL_OTP_WORKER:`/sdk/workers/email-otp.worker.js`,WALLET_CUSTODY_CEREMONY_WORKER:`/sdk/workers/wallet-custody-ceremony.worker.js`,DEVICE_LINKING_KEY_WORKER:`/sdk/workers/device-linking-key.worker.js`},WORKERS:{TOUCH_CONFIRM:`passkey-confirm.worker.js`,PASSKEY_MPC_SESSION:`passkey-mpc-session.worker.js`,PASSKEY_MPC_EXPORT:`passkey-mpc-export.worker.js`,SIGNER:`near-signer.worker.js`,ECDSA_DERIVATION_CLIENT:`ecdsa-derivation-client.worker.js`,ECDSA_PRESIGN_CLIENT:`ecdsa-presign-client.worker.js`,ECDSA_ONLINE_CLIENT:`ecdsa-online-client.worker.js`,EMAIL_OTP:`email-otp.worker.js`,WALLET_CUSTODY_CEREMONY:`wallet-custody-ceremony.worker.js`,DEVICE_LINKING_KEY:`device-linking-key.worker.js`,SHAMIR3PASS:`shamir3pass.worker.js`,WASM_SIGNER_JS:`wasm_signer_worker.js`,WASM_SIGNER_WASM:`wasm_signer_worker_bg.wasm`,ED25519_YAO_CLIENT_JS:`router_ab_ed25519_yao_client.js`,ED25519_YAO_CLIENT_WASM:`router_ab_ed25519_yao_client_bg.wasm`,ECDSA_CLIENT_JS:`router_ab_ecdsa_client.js`,ECDSA_CLIENT_WASM:`router_ab_ecdsa_client_bg.wasm`,WASM_EVM_CRYPTO_BG_WASM:`evm_crypto_bg.wasm`,WASM_TEMPO_SIGNER_BG_WASM:`tempo_signer_bg.wasm`,EMAIL_OTP_RUNTIME_JS:`email_otp_runtime.js`,EMAIL_OTP_RUNTIME_WASM:`email_otp_runtime_bg.wasm`,WALLET_CUSTODY_CEREMONY_WASM:`wallet_custody_ceremony_bg.wasm`},TEST_WORKERS:{TOUCH_CONFIRM:`/sdk/workers/passkey-confirm.worker.js`,PASSKEY_MPC_SESSION:`/sdk/workers/passkey-mpc-session.worker.js`,PASSKEY_MPC_EXPORT:`/sdk/workers/passkey-mpc-export.worker.js`,SIGNER:`/sdk/workers/near-signer.worker.js`,ECDSA_DERIVATION_CLIENT:`/sdk/workers/ecdsa-derivation-client.worker.js`,ECDSA_PRESIGN_CLIENT:`/sdk/workers/ecdsa-presign-client.worker.js`,ECDSA_ONLINE_CLIENT:`/sdk/workers/ecdsa-online-client.worker.js`,EMAIL_OTP:`/sdk/workers/email-otp.worker.js`,WALLET_CUSTODY_CEREMONY:`/sdk/workers/wallet-custody-ceremony.worker.js`,DEVICE_LINKING_KEY:`/sdk/workers/device-linking-key.worker.js`,SHAMIR3PASS:`/sdk/workers/shamir3pass.worker.js`,WASM_SIGNER_JS:`/sdk/workers/wasm_signer_worker.js`,WASM_SIGNER_WASM:`/sdk/workers/wasm_signer_worker_bg.wasm`,ED25519_YAO_CLIENT_JS:`/sdk/workers/router_ab_ed25519_yao_client.js`,ED25519_YAO_CLIENT_WASM:`/sdk/workers/router_ab_ed25519_yao_client_bg.wasm`,ECDSA_CLIENT_JS:`/sdk/workers/router_ab_ecdsa_client.js`,ECDSA_CLIENT_WASM:`/sdk/workers/router_ab_ecdsa_client_bg.wasm`,WASM_EVM_CRYPTO_BG_WASM:`/sdk/workers/evm_crypto_bg.wasm`,WASM_TEMPO_SIGNER_BG_WASM:`/sdk/workers/tempo_signer_bg.wasm`,EMAIL_OTP_RUNTIME_JS:`/sdk/workers/email_otp_runtime.js`,EMAIL_OTP_RUNTIME_WASM:`/sdk/workers/email_otp_runtime_bg.wasm`,WALLET_CUSTODY_CEREMONY_WASM:`/sdk/workers/wallet_custody_ceremony_bg.wasm`}},pA=()=>{let e=navigator.userAgent.toLowerCase(),t=/android|iphone|ipod|blackberry|iemobile|opera mini/i.test(e),n=/ipad|tablet|kindle|playbook|silk/i.test(e),r=navigator.maxTouchPoints>0,i=window.screen.width,a=i<=480,o=i<=1024,s=`orientation`in window;return t||r&&a?`mobile`:n||r&&o&&s?`tablet`:`desktop`},mA=()=>{try{let e=navigator.userAgent;return/safari/i.test(e)&&!/chrome|crios|crmo|chromium|edg|edge|opr|opera|brave/i.test(e)}catch{return!1}},hA=()=>{try{let e=navigator.userAgent,t=navigator.platform||``,n=Number(navigator.maxTouchPoints||0),r=/iPad|iPhone|iPod/.test(e),i=/Macintosh/.test(e)&&n>1,a=/iPad|iPhone|iPod/.test(t);return r||i||a}catch{return!1}},gA=()=>{try{let e=navigator.userActivation;return!!(e&&typeof e.isActive==`boolean`&&e.isActive)}catch{return!1}},_A=()=>{try{return gA()?!1:hA()||vA()||mA()}catch{return!1}},vA=()=>pA()===`mobile`;function yA(e){try{return Il(e)===`emailOtp`}catch{return!1}}function bA(e,t){let n=e.userPreferencesManager.getConfirmationConfig(),r=t?.confirmationConfig||{},i=Object.fromEntries(Object.entries(r).filter(([,e])=>e!=null)),a={...n,...i};if(t?.type===Y.AUTHORIZE_KEY_EXPORT)return Jl({uiMode:`none`,behavior:a.behavior,autoProceedDelay:a.autoProceedDelay});t&&yA(t)&&(a={...a,uiMode:a.uiMode===`none`?`modal`:a.uiMode,behavior:`requireClick`});let o=window.self!==window.top;if(_A()){let e=a.uiMode===`none`?`drawer`:a.uiMode;a={...a,uiMode:e,behavior:`requireClick`}}return o&&t?.type&&(t.type===Y.REGISTER_ACCOUNT||t.type===Y.LINK_DEVICE)?Jl({uiMode:`modal`,behavior:`requireClick`,autoProceedDelay:a.autoProceedDelay}):Jl(a)}const xA=new Map;function SA(e){e?.cleanupTimer&&(clearTimeout(e.cleanupTimer),e.cleanupTimer=null)}function CA(e){let t=String(e.requestId||``).trim();if(!t)return;SA(xA.get(t));let n=Number.isFinite(e.ttlMs)&&Number(e.ttlMs)>0?Number(e.ttlMs):12e4,r={readiness:e.readiness,cleanupTimer:null};r.cleanupTimer=setTimeout(()=>{xA.get(t)===r&&xA.delete(t)},n),xA.set(t,r)}function wA(e){let t=String(e||``).trim();if(!t)return;let n=xA.get(t);return xA.delete(t),SA(n),n?.readiness}function TA(e){let t=String(e||``).trim();t&&(SA(xA.get(t)),xA.delete(t))}const EA={CONFIRMATION_COMPLETE:`confirmation.complete`,PASSKEY_PROMPT_STARTED:`auth.passkey.prompt.started`,PASSKEY_PROMPT_SUCCEEDED:`auth.passkey.prompt.succeeded`};function DA(e,t,n){Nl(e,{requestId:t,step:2,phase:EA.CONFIRMATION_COMPLETE,status:`failed`,message:n||Wl.cancelled})}function OA(e){return e.type===Y.SIGN_TRANSACTION||e.type===Y.SIGN_NEP413_MESSAGE?Il(e)??`webauthn`:`webauthn`}function kA(e){return!vf(e.signingOperationStateKind)||e.signingAuthMode===`emailOtp`}function AA(e){if(!e)throw Error(`NEAR transaction signing lifecycle callback is required`);return e}function jA(){}function MA(){return new Promise(jA)}function NA(){return MA()}function PA(e){let t=rd(e);return t?.kind===`expired`?{kind:`wallet_session_expired`,failure:t}:MA()}function FA(e){return e.then(NA,PA)}function IA(e){return`kind`in e&&e.kind===`wallet_session_expired`}function LA(e){return e.request.type===Y.SIGN_NEP413_MESSAGE||e.request.type===Y.SIGN_TRANSACTION&&e.transactionSummary.type===`delegateAction`?{kind:`signature_only`}:{kind:`transaction_access_key`}}function RA(e){return e.error===`NEAR_ACCOUNT_LOOKUP_FAILED`?e.details||`NEAR account access-key lookup failed.`:e.details?`${Wl.nearRpcFailed}: ${e.details}`:Wl.nearRpcFailed}function zA(e){if(e.readinessMode.kind!==`transaction_access_key`)return;if(e.request.type!==Y.SIGN_TRANSACTION)throw Error(`NEAR transaction readiness requires a transaction confirmation request`);let t=Ll(e.request);if(t.signingKind!==`transaction`)throw Error(`NEAR transaction readiness cannot use a delegate confirmation payload`);let n=t.nearFundingRequest;if(n.signatureUses!==e.usesNeeded)throw Error(`NEAR funding request signature use count does not match confirmation request`);return n}function BA(e){return e?{nearTransactionReadiness:e}:{}}function VA(e){let t=String(e||``).replace(/\D/g,``).slice(0,6);if(!/^\d{6}$/.test(t))throw Error(`Enter the 6-digit Email OTP code to continue`);return t}function HA(e){if(e.signingAuthPlanKind===_f.EmailOtpReauth)throw console.warn(`[SigningEngine][ui-confirm] Email OTP auth plan reached passkey credential lookup`,{stage:e.stage,subjectId:e.subjectId,requestId:e.requestId,signingAuthPlanKind:e.signingAuthPlanKind}),Error(`[SigningEngine] passkey_lookup_for_email_otp`)}function UA(e){throw Error(`Unsupported WebAuthn challenge branch: ${JSON.stringify(e)}`)}function WA(e){e.ctx.operationStepUpPreparation.cancel({requestId:e.requestId,...e.preparation?{handle:e.preparation.handle}:{}})}function GA(e){let t=String(e||``).trim();return!t||t===`AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`?``:t}function KA(e){let t=GA(e.defaultChallengeB64u);if(!e.webauthnChallenge){if(e.requireTypedChallenge)throw Error(`Missing typed WebAuthn challenge for passkey signing flow`);return t}switch(e.webauthnChallenge.kind){case`intent_digest`:return GA(e.webauthnChallenge.challengeB64u)||t;case`threshold_session_policy`:return String(e.webauthnChallenge.digest32B64u||``).trim();case`ecdsa_role_local_bootstrap`:return String(e.webauthnChallenge.digest32B64u||``).trim()}return UA(e.webauthnChallenge)}async function qA(e,t,n,r){let i=rt(e.surfaceMeasurementBinding),{confirmationConfig:a,transactionSummary:o,theme:s,surface:c}=r,l=Vl(e),u=Kl({adapters:l,worker:n,request:t,confirmationConfig:a,transactionSummary:o,theme:s,surface:c}),d=Ul(t),f,p=String(Fl(t)||``).trim()||void 0;p===`pending-intent-digest`&&(p=void 0);try{let a=OA(t),s=t.type===Y.SIGN_TRANSACTION?Ll(t):null,c=s?.signingKind===`transaction`?s:null,m=c?AA(r.onSigningOperationInteractionEvent):null,h=c?vf(c.signingOperationStateKind):!1,g=c?kA({signingOperationStateKind:c.signingOperationStateKind,signingAuthMode:a}):!0,_=jl(t),v=t.type===Y.SIGN_TRANSACTION?hf(t.requestId):void 0,y=t.type===Y.SIGN_TRANSACTION?String(Fl(t)||``).trim()||void 0:t.type===Y.SIGN_NEP413_MESSAGE&&String(await fu({nearAccountId:d,recipient:t.payload.recipient,message:t.payload.message})).trim()||void 0;y===`pending-intent-digest`&&(y=void 0);let b=y;p=y;let x=LA({request:t,transactionSummary:o}),S=zA({request:t,usesNeeded:_,readinessMode:x}),C=S?l.near.fetchNearContext(S):void 0,w=l.security.getRpId(),T=w?{rpId:w}:void 0,E,D=new Promise(e=>{E=e}),O=!1,k=!1,A=wA(t.requestId),j=!!A,M=A?Promise.resolve(A.promise):void 0,ee=M?FA(M):void 0,te=()=>{E?.(),E=void 0};a===`emailOtp`&&m?.({kind:yf.AuthenticationStarted});let ne=g?u.promptUser({securityContext:T,loading:!1,onMounted:()=>{te(),j&&u.updateUI({preparing:!0})}}):Promise.resolve({confirmed:!0});g?ne.finally(te):te();let re,N=e=>{let t=String(e.intentDigest||``).trim(),n=String(e.challengeB64u||``).trim();t&&(y=t,p=t),n&&(b=n)},ie=e=>{N(e),u.updateUI({...e.displayModel?{model:e.displayModel}:{},...e.title?{title:e.title}:{},...e.body?{body:e.body}:{},loading:!1})},ae=v?(async()=>(await D,await v))():void 0;ae&&ae.then(e=>{O||ie(e)}).catch(e=>{O||u.updateUI({loading:!1,errorMessage:String(I(e)?.message||e||`Failed to prepare intent`)})}),M&&M.then(async()=>{j=!1,await D,!O&&u.updateUI({preparing:!1})}).catch(async e=>{if(j=!1,await D,O)return;if(k){u.updateUI({preparing:!1});return}let t=String(I(e)?.message||`NEAR signing session could not be finalized`);u.updateUI({preparing:!1,errorMessage:`NEAR signing session could not be finalized: ${t}`})}),C&&C.then(async e=>{if(re=e,await D,e.kind===`failed`){if(k=!0,O)return;u.updateUI({loading:!1,errorMessage:RA(e)});return}if(k=!1,e.readiness.kind===`funding_required`){if(O)return;u.updateUI({loading:!1,body:Rf(String(e.readiness.request.subject.nearAccountId)),errorMessage:``,confirmText:`Fund account`});return}u.setNonceLeases(e.reservedNonceLeases),O||r.onNearTransactionContextReady?.(e.readiness);let t=e.readiness.transactionContext,n=w?{rpId:w,blockHeight:t.txBlockHeight,blockHash:t.txBlockHash}:void 0;O||u.updateUI({securityContext:n,loading:!1})});let oe=ee?await Promise.race([ne,ee]):await ne;if(O=!0,IA(oe))return WA({ctx:e,requestId:t.requestId,preparation:f}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,walletSessionFailure:oe.failure});let{confirmed:se,error:ce,otpCode:le,emailOtpChallengeId:ue}=oe;if(!se)return DA(n,t.requestId,ce),WA({ctx:e,requestId:t.requestId,preparation:f}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,error:ce});m&&!h&&(m({kind:yf.ReviewApproved}),u.dismissReviewSurface());let de=C?re||await C:void 0,fe;if(C){if(!de||de.kind===`failed`){let n=de||{kind:`failed`,error:`NEAR_CONTEXT_UNAVAILABLE`,details:`NEAR transaction readiness did not resolve`};return console.error(`[SigningFlow] fetchNearContext failed`,n),WA({ctx:e,requestId:t.requestId,preparation:f}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,error:RA(n)})}fe=de.readiness,de.readiness.kind===`context_ready`&&u.setNonceLeases(de.reservedNonceLeases)}if(ae&&N(await ae),M)try{await M}catch(n){let r=String(I(n)?.message||`NEAR signing session could not be finalized`);return WA({ctx:e,requestId:t.requestId,preparation:f}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,error:`NEAR signing session could not be finalized: ${r}`})}if(a!==`warmSession`&&fe?.kind===`funding_required`&&S){u.updateUI({body:Bf(String(fe.request.subject.nearAccountId)),errorMessage:``,loading:!0});let n;try{n=await e.nearImplicitAccountFunding.fund({requestId:t.requestId,request:fe.request})}catch(n){return WA({ctx:e,requestId:t.requestId,preparation:f}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,error:`NEAR account funding failed: ${String(I(n)?.message||n)}`})}fe=n.readiness,u.setNonceLeases(n.reservedNonceLeases)}if(a!==`warmSession`&&fe?.kind===`context_ready`){let n=zA({request:t,usesNeeded:_,readinessMode:x});if(!n)throw Error(`Operation step-up requires exact NEAR operation facts`);f=await e.operationStepUpPreparation.prepare({kind:`near_transaction`,requestId:t.requestId,transactionContext:fe.transactionContext,operationId:n.operation.operationId,operationFingerprint:n.operation.operationFingerprint,displayDigest:String(p||``).trim()})}else a!==`warmSession`&&x.kind===`signature_only`&&(f=await e.operationStepUpPreparation.prepare({kind:`near_signature_only`,requestId:t.requestId,displayDigest:String(p||``).trim()}));if(a===`emailOtp`){m?.({kind:yf.AuthenticationCompleted}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!0,otpCode:VA(le),...ue?{emailOtpChallengeId:ue}:{},...f?{operationStepUpPreparation:f}:{},...BA(fe)});return}if(a===`warmSession`){u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!0,...BA(fe)});return}HA({stage:`transaction_prompt`,subjectId:d,requestId:t.requestId,signingAuthPlanKind:t.payload.signingAuthPlan.kind});let pe=f?.challengeB64u||KA({webauthnChallenge:t.payload.webauthnChallenge,defaultChallengeB64u:String(b||``).trim(),requireTypedChallenge:t.payload.signingAuthPlan.kind===_f.PasskeyReauth&&!!t.payload.webauthnChallenge});if(!pe)throw Error(`Missing WebAuthn challenge digest for signing flow`);m?.({kind:yf.AuthenticationStarted});let me=await cf({credentialStore:e.webauthnCredentialStore,touchIdPrompt:e.touchIdPrompt,onBeforePrompt:i?.beforeCredential,cancellation:i?{kind:`abort_signal`,signal:i.abortController.signal}:{kind:`none`},walletId:t.payload.walletId,challengeB64u:pe});i?.afterCredential(),m?.({kind:yf.AuthenticationCompleted}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!0,credential:me,...f?{operationStepUpPreparation:f}:{},...BA(fe)})}catch(n){WA({ctx:e,requestId:t.requestId,preparation:f});let r=Ml(n),i=String(I(n)?.message||n||``);r&&window.parent?.postMessage({type:`WALLET_UI_CLOSED`},`*`);let a=/multiple passkeys \\(devicenumbers\\) for account/i.test(i);return u.confirmAndCloseModal({requestId:t.requestId,intentDigest:p,confirmed:!1,error:r?Wl.cancelled:a?i:i||Wl.collectCredentialsFailed})}}function JA(e){return Il(e)??`webauthn`}async function YA(e,t,n,r){let i=rt(e.surfaceMeasurementBinding),{confirmationConfig:a,transactionSummary:o,theme:s,surface:c}=r,l=Vl(e),u=Kl({adapters:l,worker:n,request:t,confirmationConfig:a,transactionSummary:o,theme:s,surface:c}),d=Bl(t),f=d.kind===`near_wallet`?d.nearAccountId:d.walletId,p=d.kind===`near_wallet`?d.nearAccountId:``,m=hf(t.requestId);try{let r=JA(t),o=String(Fl(t)||``).trim()||void 0,s=String(t.payload.challengeB64u||``).trim(),c=a.kind===`interactive`,h=l.security.getRpId(),g=h?{rpId:h}:void 0;c&&Nl(n,{requestId:t.requestId,step:2,phase:`intent-confirmation-required`,status:`running`,message:`Awaiting confirmation click`});let _,v=new Promise(e=>{_=e}),y=()=>{_?.(),_=void 0},b=u.promptUser({securityContext:g,loading:!1,onMounted:()=>{y()}});b.finally(y);let x=!1,S=!1,C=e=>{o=String(e.intentDigest||``).trim()||o,s=String(e.challengeB64u||``).trim()||s,u.updateUI({...e.displayModel?{model:e.displayModel}:{},...e.title?{title:e.title}:{},...e.body?{body:e.body}:{},loading:!1}),S=!0},w=m?(async()=>(await v,await m))():void 0;w&&w.then(e=>{x||S||C(e)}).catch(e=>{x||u.updateUI({loading:!1,errorMessage:String(I(e)?.message||e||`Failed to prepare intent`)})});let{confirmed:T,error:E,otpCode:D,emailOtpChallengeId:O}=await b;if(x=!0,!T)return c&&DA(n,t.requestId,E),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:o,confirmed:!1,error:E});if(w){let e=await w;S||C(e)}if(r===`emailOtp`)return c&&Nl(n,{requestId:t.requestId,step:2,phase:EA.CONFIRMATION_COMPLETE,status:`succeeded`,message:`Email OTP submitted`}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:o,confirmed:!0,otpCode:VA(D),...O?{emailOtpChallengeId:O}:{}});if(r===`warmSession`)return c&&Nl(n,{requestId:t.requestId,step:2,phase:EA.CONFIRMATION_COMPLETE,status:`succeeded`,message:`Confirmation complete`}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:o,confirmed:!0});HA({stage:`intent_digest_prompt`,subjectId:f,requestId:t.requestId,signingAuthPlanKind:t.payload.signingAuthPlan.kind});let k=KA({webauthnChallenge:t.payload.webauthnChallenge,defaultChallengeB64u:String(s||``).trim(),requireTypedChallenge:t.payload.signingAuthPlan.kind===_f.PasskeyReauth});if(!k)throw Error(`Missing WebAuthn challenge digest for intent signing flow`);Nl(n,{requestId:t.requestId,step:3,phase:EA.PASSKEY_PROMPT_STARTED,status:`running`,message:`Authenticating with passkey...`});let A=d.kind===`near_wallet`?await lf({credentialStore:e.webauthnCredentialStore,touchIdPrompt:e.touchIdPrompt,onBeforePrompt:i?.beforeCredential,cancellation:i?{kind:`abort_signal`,signal:i.abortController.signal}:{kind:`none`},nearAccountId:p,challengeB64u:k}):await cf({credentialStore:e.webauthnCredentialStore,touchIdPrompt:e.touchIdPrompt,onBeforePrompt:i?.beforeCredential,cancellation:i?{kind:`abort_signal`,signal:i.abortController.signal}:{kind:`none`},walletId:d.walletId,challengeB64u:k});return i?.afterCredential(),Nl(n,{requestId:t.requestId,step:4,phase:EA.PASSKEY_PROMPT_SUCCEEDED,status:`succeeded`,message:`Authentication complete`}),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:o,confirmed:!0,credential:A})}catch(e){mf(t.requestId),Nl(n,{requestId:t.requestId,step:4,phase:EA.PASSKEY_PROMPT_SUCCEEDED,status:`failed`,message:String(I(e)?.message||e||Wl.collectCredentialsFailed)});let r=Ml(e),i=String(I(e)?.message||e||``);return r&&window.parent?.postMessage({type:`WALLET_UI_CLOSED`},`*`),u.confirmAndCloseModal({requestId:t.requestId,intentDigest:String(Fl(t)||``).trim()||void 0,confirmed:!1,error:r?Wl.cancelled:i||Wl.collectCredentialsFailed})}}async function XA(e,t,n,r){let i=Rl(n,{channelToken:t.channelToken,onDecision:r?.onDecision}),a=t.data,o,s,c;try{Pl(a),ql(a),o=bA(e,a),c=he(e.getTheme?.())??`dark`;let t=Fl(a);s=Gl({...a.summary,...t?{intentDigest:t}:{}})}catch(e){console.error(`[UserConfirm][Host] validateAndParseRequest failed`,e),zl(i,{requestId:a.requestId,confirmed:!1,error:L(e)||`Invalid secure confirm request`});return}try{let t={confirmationConfig:o,transactionSummary:s,theme:c,surface:r?.signingSurface??{kind:`mount_new`}};switch(a.type){case Y.AUTHORIZE_KEY_EXPORT:case Y.SHOW_SECURE_PRIVATE_KEY_UI:{let{handleLocalOnlyFlow:n}=await import(`./localOnly-BATWJj78.js`);await n(e,a,i,t);break}case Y.REGISTER_ACCOUNT:case Y.LINK_DEVICE:{let{handleRegistrationFlow:n}=await import(`./registration-HSwOHZOo.js`).then(e=>e.n);await n(e,a,i,t);break}case Y.SIGN_TRANSACTION:case Y.SIGN_NEP413_MESSAGE:await qA(e,a,i,{...t,...r?.onSigningOperationInteractionEvent?{onSigningOperationInteractionEvent:r.onSigningOperationInteractionEvent}:{},...r?.onNearTransactionContextReady?{onNearTransactionContextReady:r.onNearTransactionContextReady}:{}});break;case Y.SIGN_INTENT_DIGEST:await YA(e,a,i,t);break;default:ZA(a)}}catch(e){console.error(`[UserConfirm][Host] handler failed`,e),zl(i,{requestId:a.requestId,intentDigest:Fl(a),confirmed:!1,error:L(e)||`Secure confirmation failed`})}}function ZA(e){throw Error(`Unsupported secure confirmation request`)}function QA(e){let t={signingKind:`transaction`,walletId:e.params.walletId,txSigningRequests:e.txSigningRequests,intentDigest:e.intentDigest,displayModel:e.displayModel,rpcCall:e.params.rpcCall,nearPublicKeyStr:e.params.nearPublicKeyStr,nearFundingRequest:e.params.nearFundingRequest,signingOperationStateKind:e.params.signingOperationStateKind};switch(e.params.signingAuthPlan.kind){case _f.WarmSession:return{...t,signingAuthPlan:e.params.signingAuthPlan};case _f.ActiveWalletAuthority:return{...t,signingAuthPlan:e.params.signingAuthPlan};case _f.PasskeyReauth:return{...t,signingAuthPlan:e.params.signingAuthPlan,...e.params.webauthnChallenge?{webauthnChallenge:e.params.webauthnChallenge}:{}};case _f.EmailOtpReauth:if(!e.params.emailOtpPrompt)throw Error(`Email OTP NEAR confirmation requires a prompt`);return{...t,signingAuthPlan:e.params.signingAuthPlan,emailOtpPrompt:e.params.emailOtpPrompt};default:return $A(e.params.signingAuthPlan)}}function $A(e){throw Error(`Unsupported transaction signing auth params: ${String(e)}`)}function ej(e){let t={signingKind:`delegate`,walletId:e.params.walletId,txSigningRequests:e.txSigningRequests,intentDigest:e.intentDigest,displayModel:e.displayModel,rpcCall:e.params.rpcCall,...e.params.nearPublicKeyStr?{nearPublicKeyStr:e.params.nearPublicKeyStr}:{}};switch(e.params.signingAuthPlan.kind){case _f.WarmSession:return{...t,signingAuthPlan:e.params.signingAuthPlan};case _f.ActiveWalletAuthority:return{...t,signingAuthPlan:e.params.signingAuthPlan};case _f.PasskeyReauth:return{...t,signingAuthPlan:e.params.signingAuthPlan,...e.params.webauthnChallenge?{webauthnChallenge:e.params.webauthnChallenge}:{}};case _f.EmailOtpReauth:{let n=e.params.signingAuthPlan.emailOtpPrompt;if(!n)throw Error(`Email OTP delegate confirmation requires a prompt`);return{...t,signingAuthPlan:e.params.signingAuthPlan,emailOtpPrompt:n}}default:return $A(e.params.signingAuthPlan)}}function tj(e){let t=String(e||``).trim();return!t||t===`pending-intent-digest`?``:t}function nj(e){return String(e||``).trim()||pf}function rj(e){if(!e)throw Error(`[SigningConfirmation] passkey intent signing requires webauthnChallenge`);return e}function ij(e){return e.signingAuthPlan.kind===_f.PasskeyReauth?{signingSubject:e.signingSubject,challengeB64u:e.challengeB64u,...e.displayModel?{displayModel:e.displayModel}:{},webauthnChallenge:rj(e.webauthnChallenge),signingAuthPlan:e.signingAuthPlan}:{signingSubject:e.signingSubject,challengeB64u:e.challengeB64u,...e.displayModel?{displayModel:e.displayModel}:{},signingAuthPlan:e.signingAuthPlan,...e.webauthnChallenge?{webauthnChallenge:e.webauthnChallenge}:{},...e.emailOtpPrompt?{emailOtpPrompt:e.emailOtpPrompt}:{}}}function aj(e){try{return tf({txSigningRequests:e.txSigningRequests,intentDigest:e.intentDigest||``,signerAccount:e.signerAccountId,title:e.title,subtitle:e.body})}catch{return{chain:`near`,...e.intentDigest?{intentDigest:e.intentDigest}:{},signerAccount:e.signerAccountId,...e.title==null?{}:{title:e.title},...e.body==null?{}:{subtitle:e.body},operations:[]}}}async function oj(e){let{sessionId:t}=e,n=sj(e.ctx),r,i;switch(e.kind){case`transaction`:{let n=e.txSigningRequests,a=n.map(e=>({receiverId:e.receiverId,actions:e.actions.map(du)})),o={receiverId:n[0]?.receiverId,totalAmount:cj(n),type:`transaction`,...e.title==null?{}:{title:e.title},...e.body==null?{}:{body:e.body}};r=await pu(a);let s={...o,intentDigest:r},c=aj({txSigningRequests:n,intentDigest:r,signerAccountId:e.rpcCall.nearAccountId,title:s.title,body:s.body});i={requestId:t,type:Y.SIGN_TRANSACTION,summary:s,payload:QA({params:e,txSigningRequests:n,intentDigest:r,displayModel:c}),confirmationConfig:e.confirmationConfigOverride,intentDigest:r};break}case`delegate`:{let n=[{receiverId:e.delegate.receiverId,actions:e.delegate.actions}];r=await pu(n.map(e=>({receiverId:e.receiverId,actions:e.actions.map(du)})));let a={intentDigest:r,receiverId:n[0]?.receiverId,totalAmount:cj(n),type:`delegateAction`,...e.title==null?{}:{title:e.title},...e.body==null?{}:{body:e.body},delegate:{senderId:e.delegate.senderId,receiverId:e.delegate.receiverId,nonce:String(e.delegate.nonce),maxBlockHeight:String(e.delegate.maxBlockHeight)}},o=aj({txSigningRequests:n,intentDigest:r,signerAccountId:e.nearAccountId,title:a.title,body:a.body});i={requestId:t,type:Y.SIGN_TRANSACTION,summary:a,payload:ej({params:e,txSigningRequests:n,intentDigest:r,displayModel:o}),confirmationConfig:e.confirmationConfigOverride,intentDigest:r};break}case`nep413`:{r=`${e.nearAccountId}:${e.recipient}:${e.message}`;let n=af({signerAccount:e.nearAccountId,recipient:e.recipient,message:e.message,intentDigest:r,title:e.title,subtitle:e.body}),a={intentDigest:r,method:`NEP-413`,receiverId:e.recipient,...e.title==null?{}:{title:e.title},...e.body==null?{}:{body:e.body}};i={requestId:t,type:Y.SIGN_NEP413_MESSAGE,summary:a,payload:{walletId:e.walletId,nearAccountId:e.nearAccountId,...e.nearPublicKeyStr?{nearPublicKeyStr:e.nearPublicKeyStr}:{},message:e.message,recipient:e.recipient,displayModel:n,...e.webauthnChallenge?{webauthnChallenge:e.webauthnChallenge}:{},signingAuthPlan:e.signingAuthPlan,...e.emailOtpPrompt?{emailOtpPrompt:e.emailOtpPrompt}:{}},confirmationConfig:e.confirmationConfigOverride,intentDigest:r};break}case`intentDigest`:{let n=tj(e.intentDigest);r=n;let a=nj(e.challengeB64u),o=e.signingSubject,s=e.displayModel,c={...n?{intentDigest:n}:{},...e.title==null?{}:{title:e.title},...e.body==null?{}:{body:e.body}};i={requestId:t,type:Y.SIGN_INTENT_DIGEST,summary:c,payload:ij({signingSubject:o,challengeB64u:a,displayModel:s,webauthnChallenge:e.webauthnChallenge,signingAuthPlan:e.signingAuthPlan,...e.emailOtpPrompt?{emailOtpPrompt:e.emailOtpPrompt}:{}}),confirmationConfig:e.confirmationConfigOverride,...n?{intentDigest:n}:{}};break}default:throw Error(`Unsupported signing confirmation kind`)}e.confirmationReadiness&&CA({requestId:t,readiness:e.confirmationReadiness});let a=await n(i,{onProgress:e.onProgress,...e.kind===`transaction`?{onSigningOperationInteractionEvent:e.onSigningOperationInteractionEvent}:{},...e.chain===`near`&&e.kind===`transaction`&&e.onNearTransactionContextReady?{onNearTransactionContextReady:e.onNearTransactionContextReady}:{}}).finally(()=>{TA(t)});if(!a?.confirmed)throw a?.walletSessionFailure?new id({failure:a.walletSessionFailure,message:`Wallet Session expired while signing confirmation was open`}):Error(a?.error||`User rejected signing request`);if(e.kind===`intentDigest`)return{sessionId:t,intentDigest:a.intentDigest||r,credential:a.credential,otpCode:a.otpCode,emailOtpChallengeId:a.emailOtpChallengeId};if(e.kind===`delegate`||e.kind===`nep413`)return{sessionId:t,intentDigest:a.intentDigest||r,credential:a.credential,operationStepUpPreparation:a.operationStepUpPreparation,otpCode:a.otpCode,emailOtpChallengeId:a.emailOtpChallengeId};if(!a.nearTransactionReadiness)throw Error(`Missing explicit NEAR transaction readiness from confirmation flow`);return{sessionId:t,readiness:a.nearTransactionReadiness,intentDigest:a.intentDigest||r,credential:a.credential,operationStepUpPreparation:a.operationStepUpPreparation,otpCode:a.otpCode,emailOtpChallengeId:a.emailOtpChallengeId}}function sj(e){return e.touchConfirm.requestUserConfirmation.bind(e.touchConfirm)}function cj(e){try{let t=BigInt(0);for(let n of e)for(let e of n.actions)switch(e.action_type){case Xa.Transfer:t+=BigInt(e.deposit||`0`);break;case Xa.FunctionCall:t+=BigInt(e.deposit||`0`);break;case Xa.Stake:t+=BigInt(e.stake||`0`);break;default:break}return t>BigInt(0)?t.toString():void 0}catch{return}}async function lj({ctx:e,surface:t,walletId:n,nearAccountId:r,signerSlot:i,confirmerText:a,confirmationConfig:o,challengeB64u:s,registrationOptions:c}){let l=uj({walletId:n,nearAccountId:r,signerSlot:i,confirmerText:a,confirmationConfig:o,challengeB64u:s,registrationOptions:c});ql(l);let u=await fj({ctx:e,surface:t,request:l,confirmationConfig:bA(e,l),transactionSummary:dj(l),theme:he(e.getTheme?.())??`dark`});return mj({requestId:l.requestId,decision:u})}function uj({walletId:e,nearAccountId:t,signerSlot:n,confirmerText:r,confirmationConfig:i,challengeB64u:a,registrationOptions:o}){let s=ve(`register`,32,`registration credential confirmation IDs`),c=r?.title,l=r?.body,u=String(e||``).trim(),d=String(t||``).trim();if(!u)throw Error(`Registration credential confirmation requires walletId`);return o?{requestId:s,type:Y.REGISTER_ACCOUNT,summary:{walletId:u,signerSlot:n,...c==null?{}:{title:c},...l==null?{}:{body:l}},payload:{walletId:u,walletAddAuthMethodRegistration:o},confirmationConfig:i,intentDigest:`register:${u}:${o.challengeId}`}:{requestId:s,type:Y.REGISTER_ACCOUNT,summary:{walletId:u,...d?{nearAccountId:d}:{},signerSlot:n,...c==null?{}:{title:c},...l==null?{}:{body:l}},payload:{walletId:u,...d?{nearAccountId:d}:{},signerSlot:n,...a?{webauthnChallenge:{kind:`intent_digest`,challengeB64u:a}}:{}},confirmationConfig:i,intentDigest:`register:${u}:${n}`}}function dj(e){let t=Hl(e.summary),n=Fl(e);return{...t,...n?{intentDigest:n}:{}}}async function fj({ctx:e,surface:t,request:n,confirmationConfig:r,transactionSummary:i,theme:a}){let o,s,c=!1,l=new Promise((e,t)=>{o=e,s=t}),u=Gf(e,n,{postMessage:e=>{let t=pj(e,n.requestId);if(t.ok){o(t.value);return}s(Error(t.message))}},{confirmationConfig:r,transactionSummary:i,theme:a,surface:t}).then(()=>{c||s(Error(`Registration confirmation completed without a decision`))},e=>{s(Error(L(e)||`Registration confirmation failed`))}),d=await l;return c=!0,await u,d}function pj(e,t){if(!A(e))return{ok:!1,message:`Registration confirmation returned a malformed response`};let n=e;if(n.type!==Ff.USER_PASSKEY_CONFIRM_RESPONSE)return{ok:!1,message:`Registration confirmation returned an unexpected response type`};if((re(n.requestId)?n.requestId.trim():``)!==t)return{ok:!1,message:`Registration confirmation response requestId mismatch`};if(!A(n.data))return{ok:!1,message:`Registration confirmation returned missing decision data`};let r=n.data,i=re(r.requestId)?r.requestId.trim():``;return i===t?O(r.confirmed)?{ok:!0,value:{requestId:i,confirmed:r.confirmed,...re(r.intentDigest)?{intentDigest:r.intentDigest}:{},...r.credential?{credential:r.credential}:{},...r.transactionContext?{transactionContext:r.transactionContext}:{},...r.registrationDiagnostics?{registrationDiagnostics:r.registrationDiagnostics}:{},...re(r.error)?{error:r.error}:{}}}:{ok:!1,message:`Registration confirmation returned invalid decision state`}:{ok:!1,message:`Registration confirmation decision requestId mismatch`}}function mj({requestId:e,decision:t}){if(!t.confirmed)throw Error(t.error||`User rejected registration request`);if(!t.credential)throw Error(`Missing credential from registration confirmation`);return rf({confirmed:t.confirmed,requestId:e,intentDigest:t.intentDigest||``,credential:t.credential,transactionContext:t.transactionContext,registrationDiagnostics:t.registrationDiagnostics,error:t.error})}function hj(e){return Math.max(0,Math.round(performance.now()-e))}function gj(e){throw Error(`Unexpected UI confirmation state: ${String(e)}`)}function _j(e){return typeof e==`object`&&!!e}function vj(e){if(!_j(e)||e.type!==Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD)return null;let t=typeof e.requestId==`string`?e.requestId.trim():``,n=typeof e.channelToken==`string`?e.channelToken.trim():``;if(!t||!n||!_j(e.data)||e.data.kind!==`pending_request`||`request`in e.data)return null;let r=typeof e.data.requestId==`string`?e.data.requestId.trim():``,i=typeof e.data.requestToken==`string`?e.data.requestToken.trim():``;return!r||r!==t||!i?null:{type:Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD,requestId:t,channelToken:n,data:{kind:`pending_request`,requestId:t,requestToken:i}}}function yj(e){if(!_j(e))return null;let t=typeof e.requestId==`string`?e.requestId.trim():``,n=typeof e.step==`number`?e.step:NaN,r=typeof e.phase==`string`?e.phase:``,i=e.status;return!t||!Number.isFinite(n)||!r||i!==`running`&&i!==`succeeded`&&i!==`failed`?null:{requestId:t,step:n,phase:r,status:i,...typeof e.message==`string`?{message:e.message}:{},...`data`in e?{data:e.data}:{}}}var bj=class{worker=null;initializationPromise=null;messageId=0;config;workerBaseOrigin;context;pendingWorkerRequests=new Map;userConfirmProgressListeners=new Map;pendingConfirmRequests=new Map;boundHandleWorkerMessage=this.handleWorkerMessage.bind(this);boundHandleWorkerError=this.handleWorkerError.bind(this);registrationPreparationModalState={kind:`closed`,generation:0};transactionPreparationModalState={kind:`closed`,generation:0};constructor(e,t){this.config={workerUrl:fA.RUNTIME.TOUCH_CONFIRM_WORKER,workerTimeout:6e4,debug:!1,...e},this.context={...t}}getContext(){return this.context}async requestUserConfirmation(e,t){let n=typeof e?.requestId==`string`?e.requestId.trim():``;if(!n)throw Error(`Invalid secure confirmation request: missing requestId`);if(this.pendingConfirmRequests.has(n))throw Error(`Duplicate secure confirmation request id: ${n}`);let r=this.generateMessageId();this.pendingConfirmRequests.set(n,{kind:`awaiting_decision`,context:{...this.context},request:e,requestToken:r,...t?.onSigningOperationInteractionEvent?{onSigningOperationInteractionEvent:t.onSigningOperationInteractionEvent}:{},...t?.onNearTransactionContextReady?{onNearTransactionContextReady:t.onNearTransactionContextReady}:{}});try{let e=performance.now();await this.ensureWorkerReady(!1);let i=hj(e);t?.onProgress&&this.userConfirmProgressListeners.set(n,t.onProgress);let a=performance.now(),o=await this.sendMessage({type:`SECURE_CONFIRM_REQUEST`,id:r,payload:{requestId:n}}),s=hj(a),c=performance.now();if(!o?.success)throw Error(String(o?.error||`Secure confirmation request failed`));let l=this.pendingConfirmRequests.get(n);if(!l||l.kind!==`decided`)throw Error(`Secure confirmation failed: missing host decision`);let u=l.decision,d=hj(c);return u.registrationDiagnostics?.kind===`registration_confirmation_diagnostics_v1`?{...u,registrationDiagnostics:{...u.registrationDiagnostics,workerReadyMs:i,workerRequestRoundTripMs:s,workerResponseValidationMs:d}}:u}finally{this.userConfirmProgressListeners.delete(n),this.pendingConfirmRequests.delete(n)}}async orchestrateSigningConfirmation(e){return oj(e)}async openTransactionPreparationModal(e){if(!String(e.walletLabel||``).trim())throw Error(`Transaction preparation modal requires a wallet label`);this.closeTransactionPreparationModal();let t=this.context.userPreferencesManager.getConfirmationConfig(),n=Object.fromEntries(Object.entries(e.confirmationConfigOverride||{}).filter(([,e])=>e!=null)),r=Jl({...t,...n});if(r.kind===`silent`)return;let i=String(this.context.touchIdPrompt.getRpId()||``).trim(),a=this.transactionPreparationModalState.generation+1;this.transactionPreparationModalState={kind:`opening`,generation:a};let o=await zf({ctx:this.getContext(),summary:{title:`Review transaction`},...e.chain===`near`?{txSigningRequests:e.txSigningRequests}:{},model:e.model,securityContext:i?{rpId:i}:void 0,loading:!1,theme:this.context.getTheme?.()??`dark`,uiMode:r.uiMode}),s=this.transactionPreparationModalState;if(s.kind!==`opening`||s.generation!==a){o.close(!1);return}this.transactionPreparationModalState={kind:`open`,generation:a,handle:o},o.onCancel?.(this.handleTransactionPreparationCancel.bind(this,a,o))}handleTransactionPreparationCancel(e,t){let n=this.transactionPreparationModalState;n.kind!==`open`||n.generation!==e||n.handle!==t||(this.transactionPreparationModalState={kind:`cancelled`,generation:e},t.close(!1))}closeTransactionPreparationModal(){let e=this.transactionPreparationModalState;this.transactionPreparationModalState={kind:`closed`,generation:e.generation},e.kind===`open`&&e.handle.close(!1)}takeTransactionConfirmationSurface(){let e=this.transactionPreparationModalState;switch(e.kind){case`closed`:return{kind:`mount_new`};case`opening`:throw Error(`Transaction confirmation started before its preparation modal opened`);case`cancelled`:return this.transactionPreparationModalState={kind:`closed`,generation:e.generation},{kind:`preparation_cancelled`};case`open`:return this.transactionPreparationModalState={kind:`closed`,generation:e.generation},{kind:`reuse_mounted`,handle:e.handle};default:return gj(e)}}async requestRegistrationCredentialConfirmation(e){let t=this.takeRegistrationConfirmationSurface();try{return await lj({ctx:this.getContext(),surface:t,walletId:e.walletId,nearAccountId:e.nearAccountId,signerSlot:e.signerSlot,confirmerText:e.confirmerText,confirmationConfig:e.confirmationConfigOverride,challengeB64u:e.challengeB64u,registrationOptions:e.registrationOptions})}catch(e){throw t.kind===`reuse_mounted`&&t.handle.close(!1),e}}takeRegistrationConfirmationSurface(){let e=this.registrationPreparationModalState;switch(e.kind){case`closed`:return{kind:`mount_new`};case`opening`:throw Error(`Registration confirmation started before its preparation modal opened`);case`open`:return this.registrationPreparationModalState={kind:`closed`,generation:e.generation},{kind:`reuse_mounted`,handle:e.handle};default:return gj(e)}}async openRegistrationPreparationModal(e){let t=String(e.walletLabel||``).trim();if(!t)throw Error(`Registration preparation modal requires a wallet label`);if(!Number.isInteger(e.signerSlot)||e.signerSlot<1)throw Error(`Registration preparation modal requires a positive signer slot`);let n=String(this.context.touchIdPrompt.getRpId()||``).trim();if(!n)throw Error(`Registration preparation modal requires an RP ID`);this.closeRegistrationPreparationModal();let r=this.registrationPreparationModalState.generation+1;this.registrationPreparationModalState={kind:`opening`,generation:r};let i=await zf({ctx:this.getContext(),summary:{title:`Create your passkey`,body:`Preparing secure registration…`},securityContext:{rpId:n,passkeyRegistration:{kind:`passkey_registration_confirm_display_v1`,intendedUserName:t,accountId:t,rpId:n,signerSlot:e.signerSlot}},loading:!0,theme:this.context.getTheme?.()??`dark`,uiMode:`modal`}),a=this.registrationPreparationModalState;if(a.kind!==`opening`||a.generation!==r){i.close(!1);return}this.registrationPreparationModalState={kind:`open`,generation:r,handle:i}}closeRegistrationPreparationModal(){let e=this.registrationPreparationModalState;this.registrationPreparationModalState={kind:`closed`,generation:e.generation},e.kind===`open`&&e.handle.close(!1)}setWorkerBaseOrigin(e){this.workerBaseOrigin=e}async ensureWorkerReady(e=!1){if(this.initializationPromise?await this.initializationPromise:this.worker||await this.initialize(),!this.worker)throw Error(`UserConfirm worker failed to initialize`);if(e)try{if(!(await this.sendMessage({type:`PING`,id:this.generateMessageId()},3e3)).success)throw Error(`UserConfirm worker failed health check`)}catch(e){throw console.error(`[UserConfirmWorker] health check failed:`,e),Error(`UserConfirm worker failed health check`)}}async initialize(){if(this.initializationPromise)return this.initializationPromise;if(!this.worker)return this.initializationPromise=this.createUserConfirmWorker().catch(e=>{throw console.error(`[UserConfirmWorker] initialization failed:`,e),console.error(`[UserConfirmWorker] error details:`,{message:e.message,stack:e.stack,name:e.name}),this.initializationPromise=null,e}),await this.initializationPromise}async createUserConfirmWorker(){try{if(this.worker){let e=this.worker;this.detachWorkerRouter(e),e.terminate(),this.worker=null,this.rejectPendingWorkerRequestsForWorker(e,Error(`UserConfirm worker was restarted`))}let e=qf(this.config.workerUrl||fA.RUNTIME.TOUCH_CONFIRM_WORKER,{worker:`touchConfirm`,baseOrigin:this.workerBaseOrigin});this.config.debug&&console.debug(`[UserConfirmWorker] Worker URL:`,e);let t=new Worker(e,{type:`module`,name:`Web3AuthnSecureConfirmWorker`});this.attachWorkerRouter(t),this.worker=t,await this.testWebWorkerCommunication()}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`UserConfirm worker initialization failed: ${t}`)}}attachWorkerRouter(e){e.addEventListener(`message`,this.boundHandleWorkerMessage),e.addEventListener(`error`,this.boundHandleWorkerError)}detachWorkerRouter(e){e.removeEventListener(`message`,this.boundHandleWorkerMessage),e.removeEventListener(`error`,this.boundHandleWorkerError)}isFromActiveWorker(e){return e.currentTarget===this.worker&&e.target===this.worker}normalizePromptEnvelope(e){let t=vj(e);if(!t)return null;let n=this.pendingConfirmRequests.get(t.requestId);return!n||n.kind!==`awaiting_decision`||n.requestToken!==t.data.requestToken?null:{type:t.type,requestId:t.requestId,channelToken:t.channelToken,data:n.request}}capturePendingConfirmationDecision(e,t){let n=e.request.requestId.trim();if(!n||t.requestId.trim()!==n)return;let r=this.pendingConfirmRequests.get(n);r!==e||r.kind!==`awaiting_decision`||this.pendingConfirmRequests.set(n,{kind:`decided`,request:r.request,requestToken:r.requestToken,decision:t})}postPromptEnvelopeError(e,t,n,r){e.postMessage({type:Ff.USER_PASSKEY_CONFIRM_RESPONSE,requestId:t,channelToken:n,data:{requestId:t,confirmed:!1,error:r}})}dispatchUserConfirmProgress(e){let t=yj(e.data),n=typeof e.requestId==`string`&&e.requestId.trim()?e.requestId.trim():typeof t?.requestId==`string`?t.requestId.trim():``;if(!n||!t)return;let r=this.userConfirmProgressListeners.get(n);if(r)try{r(t)}catch(e){console.error(`[UserConfirmWorker] progress listener failed:`,e)}}handleWorkerMessage(e){if(!this.isFromActiveWorker(e))return;let t=e.data;if(_j(t)&&t.type===Ff.USER_PASSKEY_CONFIRM_PROGRESS){this.dispatchUserConfirmProgress(t);return}let n=this.normalizePromptEnvelope(t);if(n){let t=this.pendingConfirmRequests.get(n.requestId);if(!t||t.kind!==`awaiting_decision`)return;let r=t.context,i=e.currentTarget;XA(r,n,i,{signingSurface:n.data.type===Y.SIGN_TRANSACTION||n.data.type===Y.SIGN_NEP413_MESSAGE||n.data.type===Y.SIGN_INTENT_DIGEST?this.takeTransactionConfirmationSurface():{kind:`mount_new`},onDecision:this.capturePendingConfirmationDecision.bind(this,t),...t.onSigningOperationInteractionEvent?{onSigningOperationInteractionEvent:t.onSigningOperationInteractionEvent}:{},...t.onNearTransactionContextReady?{onNearTransactionContextReady:t.onNearTransactionContextReady}:{}}).catch(e=>{console.error(`[UserConfirmWorker] failed to handle confirmation prompt:`,e),this.postPromptEnvelopeError(i,n.requestId,n.channelToken,`Secure confirmation failed`)});return}if(_j(t)&&t.type===Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD){console.error(`[UserConfirmWorker] rejected malformed prompt envelope`);return}let r=uu(t);if(!r)return;let i=r.id||``;if(!i)return;let a=e.currentTarget;this.resolvePendingWorkerRequest(a,i,r)}handleWorkerError(e){if(!this.isFromActiveWorker(e))return;let t=e,n=String(t?.message||`UserConfirm worker encountered an unknown error`),r=Error(`UserConfirm worker failed: ${n}`);console.error(`[UserConfirmWorker] error:`,t);let i=e.currentTarget;i===this.worker&&this.worker&&(this.detachWorkerRouter(this.worker),this.worker.terminate(),this.worker=null,this.initializationPromise=null),this.rejectPendingWorkerRequestsForWorker(i,r)}resolvePendingWorkerRequest(e,t,n){let r=this.pendingWorkerRequests.get(t);!r||r.worker!==e||(clearTimeout(r.timeoutId),r.settle?.(),this.pendingWorkerRequests.delete(t),r.resolve(n))}rejectPendingWorkerRequest(e,t){let n=this.pendingWorkerRequests.get(e);n&&(clearTimeout(n.timeoutId),n.settle?.(),this.pendingWorkerRequests.delete(e),n.reject(t))}rejectPendingWorkerRequestsForWorker(e,t){for(let n of this.pendingWorkerRequests.values())n.worker===e&&(this.pendingWorkerRequests.delete(n.id),clearTimeout(n.timeoutId),n.settle?.(),n.reject(t))}async sendMessage(e,t,n){return new Promise((r,i)=>{let a=this.worker;if(!a){i(Error(`UserConfirm worker not available`));return}let o=()=>Error(`UserConfirm worker request aborted for message type: ${e.type}`);if(n?.aborted){i(o());return}let s=typeof e.id==`string`&&e.id.trim().length?e.id.trim():this.generateMessageId();if(this.pendingWorkerRequests.has(s)){i(Error(`Duplicate UserConfirm worker request id: ${s}`));return}let c=t??this.config.workerTimeout??6e4,l=setTimeout(()=>{this.rejectPendingWorkerRequest(s,Error(`UserConfirm worker communication timeout (${c}ms) for message type: ${e.type}`))},c),u;if(n){let e=()=>{this.rejectPendingWorkerRequest(s,o())};n.addEventListener(`abort`,e,{once:!0}),u=()=>{n.removeEventListener(`abort`,e)}}this.pendingWorkerRequests.set(s,{id:s,messageType:e.type,worker:a,timeoutId:l,settle:u,resolve:r,reject:i});try{a.postMessage({...e,id:s})}catch(e){let t=e instanceof Error?e:Error(String(e));this.rejectPendingWorkerRequest(s,t)}})}generateMessageId(){return`sc_${Date.now()}_${++this.messageId}`}async testWebWorkerCommunication(){try{let e=await this.sendMessage({type:`PING`,id:this.generateMessageId()},15e3);if(!e.success)throw Error(`UserConfirm worker PING failed: ${e.error}`);return}catch(e){let t=e instanceof Error?e.message:String(e);throw console.warn(`[UserConfirmWorker] testWebWorkerCommunication failed:`,t),this.worker&&=(this.detachWorkerRouter(this.worker),this.worker.terminate(),null),e}}};function xj(e,t){return new bj(e,t)}function Sj(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Invalid export confirmation: ${t} must be an object`);return e}function Cj(e,t){if(typeof e!=`string`)throw Error(`Invalid export confirmation: ${t} must be a string`);return e}function wj(e,t){let n=Cj(e,t);if(!n.trim()||n!==n.trim())throw Error(`Invalid export confirmation: ${t} must be a nonempty identity`);return n}function Tj(e,t){return e===void 0?void 0:Cj(e,t)}function Ej(e,t){if(e===void 0||typeof e==`boolean`)return e;throw Error(`Invalid export confirmation: ${t} must be a boolean`)}function Dj(e){let t=Sj(e,`subject`);switch(t.kind){case`near_wallet`:if(t.walletId!==void 0)throw Error(`Invalid NEAR export subject`);return{kind:`near_wallet`,nearAccountId:wj(t.nearAccountId,`nearAccountId`)};case`evm_wallet`:if(t.nearAccountId!==void 0)throw Error(`Invalid EVM export subject`);return{kind:`evm_wallet`,walletId:wj(t.walletId,`walletId`)};default:throw Error(`Invalid export confirmation: unsupported subject`)}}function Oj(e){let t=Sj(e,`summary`),n=t.operation;if(n!==`Export Private Key`&&n!==`Export Recovery Key`)throw Error(`Invalid export confirmation: unsupported operation`);return{operation:n,accountId:wj(t.accountId,`summary.accountId`),publicKey:Cj(t.publicKey,`summary.publicKey`),warning:Cj(t.warning,`summary.warning`)}}function kj(e){let t=Sj(e,`key`),n=t.scheme;if(n!==`ed25519`&&n!==`secp256k1`)throw Error(`Invalid export confirmation: unsupported key scheme`);return{scheme:n,label:Cj(t.label,`key.label`),publicKey:Cj(t.publicKey,`key.publicKey`),privateKey:Cj(t.privateKey,`key.privateKey`),address:Tj(t.address,`key.address`)}}function Aj(e){if(e!==void 0){if(!Array.isArray(e))throw Error(`Invalid export confirmation: keys must be an array`);return e.map(kj)}}function jj(e){return Cj(e,`guidance step`)}function Mj(e){if(e===void 0)return;let t=Sj(e,`guidance`);if(t.steps!==void 0&&!Array.isArray(t.steps))throw Error(`Invalid export confirmation: guidance steps must be an array`);return{title:Cj(t.title,`guidance.title`),body:Tj(t.body,`guidance.body`),steps:t.steps?.map(jj)}}function Nj(e){if(e===void 0)return;let{uiMode:t,behavior:n,autoProceedDelay:r}=Sj(e,`confirmationConfig`);if(t!==void 0&&t!==`none`&&t!==`modal`&&t!==`drawer`)throw Error(`Invalid export confirmation: unsupported UI mode`);if(n!==void 0&&n!==`skipClick`&&n!==`requireClick`)throw Error(`Invalid export confirmation: unsupported behavior`);if(r!==void 0&&(typeof r!=`number`||!Number.isFinite(r)))throw Error(`Invalid export confirmation: invalid autoProceedDelay`);return{uiMode:t,behavior:n,autoProceedDelay:r}}function Pj(e){let t=Sj(e,`request`),n=Sj(t.payload,`payload`);if(n.prfOutput!==void 0||n.prf_output!==void 0||n.wrapKeySeed!==void 0||n.wrapKeySalt!==void 0||n.prfKey!==void 0)throw Error(`Invalid export confirmation: forbidden signing secret`);let r=wj(t.requestId,`requestId`),i=Oj(t.summary),a=Dj(n.subject),o=Cj(n.publicKey,`publicKey`),s=Tj(t.intentDigest,`intentDigest`),c=Nj(t.confirmationConfig);if(n.onLifecycle!==void 0)throw Error(`Invalid export confirmation: callbacks belong to the host`);switch(t.type){case Y.AUTHORIZE_KEY_EXPORT:return{type:Y.AUTHORIZE_KEY_EXPORT,requestId:r,summary:i,intentDigest:s,confirmationConfig:c,payload:{subject:a,publicKey:o,credentialIdB64u:wj(n.credentialIdB64u,`credentialIdB64u`),challengeB64u:Tj(n.challengeB64u,`challengeB64u`)}};case Y.SHOW_SECURE_PRIVATE_KEY_UI:{let{variant:e,theme:t}=n;if(e!==void 0&&e!==`drawer`&&e!==`modal`)throw Error(`Invalid export confirmation: unsupported variant`);if(t!==void 0&&t!==`dark`&&t!==`light`)throw Error(`Invalid export confirmation: unsupported theme`);return{type:Y.SHOW_SECURE_PRIVATE_KEY_UI,requestId:r,summary:i,intentDigest:s,confirmationConfig:c,payload:{subject:a,publicKey:o,viewerSessionId:Tj(n.viewerSessionId,`viewerSessionId`),privateKey:Tj(n.privateKey,`privateKey`),keys:Aj(n.keys),guidance:Mj(n.guidance),variant:e,theme:t,loading:Ej(n.loading,`loading`),errorMessage:Tj(n.errorMessage,`errorMessage`)}}}default:throw Error(`Invalid export confirmation: unsupported request type`)}}const Fj=6e4;function Ij(e){return typeof e==`object`&&!!e}function Lj(e){if(!Ij(e))return null;let t=e.kind;if(typeof e.accountId!=`string`)return null;let n=Array.isArray(e.exportedSchemes)?e.exportedSchemes:null;if(!n)return null;let r=n.filter(e=>e===`ed25519`||e===`secp256k1`);return r.length===n.length?t===`completed`?`error`in e?null:{kind:t,accountId:e.accountId,exportedSchemes:r}:t!==`cancelled`&&t!==`failed`||r.length!==0||typeof e.error!=`string`?null:{kind:t,accountId:e.accountId,exportedSchemes:[],error:e.error}:null}var Rj=class{worker=null;initializationPromise=null;workerBaseOrigin;messageId=0;pendingRequests=new Map;viewerLifecycleBySessionId=new Map;boundHandleWorkerMessage=this.handleWorkerMessage.bind(this);boundHandleWorkerError=this.handleWorkerError.bind(this);constructor(e){this.context=e}setWorkerBaseOrigin(e){this.workerBaseOrigin=e}async exportPrivateKeysWithUi(e,t){await this.ensureWorkerReady();let n=`viewerSessionId`in e?String(e.viewerSessionId||``).trim():``;n&&t?.onViewerLifecycle&&this.viewerLifecycleBySessionId.set(n,t.onViewerLifecycle);try{let t=await this.sendMessage({type:`EXPORT_PRIVATE_KEYS_WITH_UI`,id:this.generateMessageId(),payload:e});if(!t.success)throw Error(String(t.error||`Export private keys request failed`));let n=Lj(t.data);if(!n)throw Error(`Export private keys request failed: invalid worker response payload`);return n}finally{n&&this.viewerLifecycleBySessionId.delete(n)}}async ensureWorkerReady(){if(!this.worker&&(this.initializationPromise||=this.createWorker().catch(e=>{throw this.initializationPromise=null,e}),await this.initializationPromise,!this.worker))throw Error(`Passkey MPC export worker failed to initialize`)}async createWorker(){let e=qf(fA.RUNTIME.PASSKEY_MPC_EXPORT_WORKER,{worker:`passkeyMpcExport`,baseOrigin:this.workerBaseOrigin}),t=new Worker(e,{type:`module`,name:`PasskeyMpcExportWorker`});t.addEventListener(`message`,this.boundHandleWorkerMessage),t.addEventListener(`error`,this.boundHandleWorkerError),this.worker=t}normalizePromptEnvelope(e){if(!Ij(e)||e.type!==Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD||!Ij(e.data)||e.data.kind!==`export_request`)return null;let t;try{t=Pj(e.data.request)}catch{return null}let n=typeof e.requestId==`string`?e.requestId.trim():``,r=typeof t.requestId==`string`?t.requestId.trim():``,i=typeof e.channelToken==`string`?e.channelToken.trim():``;return!n||n!==r||!i?null:{type:Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD,requestId:n,channelToken:i,data:this.restoreViewerLifecycle(t)}}restoreViewerLifecycle(e){if(e.type!==Y.SHOW_SECURE_PRIVATE_KEY_UI)return e;let t=e.payload.viewerSessionId;if(!t)return e;let n=this.viewerLifecycleBySessionId.get(t);return n?{type:e.type,requestId:e.requestId,summary:e.summary,intentDigest:e.intentDigest,confirmationConfig:e.confirmationConfig,payload:{...e.payload,onLifecycle:n}}:e}postPromptEnvelopeError(e,t,n){e.postMessage({type:Ff.USER_PASSKEY_CONFIRM_RESPONSE,requestId:t,channelToken:n,data:{requestId:t,confirmed:!1,error:`Secure confirmation failed`}})}handleWorkerMessage(e){if(e.currentTarget!==this.worker||e.target!==this.worker)return;let t=this.normalizePromptEnvelope(e.data);if(t){let n=e.currentTarget;XA(this.context,t,n).catch(e=>{console.error(`[PasskeyMpcExportWorker] failed to handle export prompt:`,e),this.postPromptEnvelopeError(n,t.requestId,t.channelToken||``)});return}if(Ij(e.data)&&e.data.type===Ff.PROMPT_USER_CONFIRM_IN_JS_MAIN_THREAD){console.error(`[PasskeyMpcExportWorker] rejected malformed prompt envelope`);return}let n=uu(e.data);if(!n)return;let r=n.id||``;if(!r)return;let i=this.pendingRequests.get(r);i&&(clearTimeout(i.timeoutId),this.pendingRequests.delete(r),i.resolve(n))}handleWorkerError(e){if(e.currentTarget!==this.worker||e.target!==this.worker)return;let t=e,n=Error(`Passkey MPC export worker failed: ${String(t.message||`unknown worker error`)}`),r=this.worker;r&&(r.removeEventListener(`message`,this.boundHandleWorkerMessage),r.removeEventListener(`error`,this.boundHandleWorkerError),r.terminate()),this.worker=null,this.initializationPromise=null;for(let e of this.pendingRequests.values())clearTimeout(e.timeoutId),e.reject(n);this.pendingRequests.clear()}sendMessage(e){return new Promise((t,n)=>{let r=this.worker;if(!r){n(Error(`Passkey MPC export worker not available`));return}let i=typeof e.id==`string`&&e.id.trim()?e.id.trim():this.generateMessageId();if(this.pendingRequests.has(i)){n(Error(`Duplicate Passkey MPC export request id: ${i}`));return}let a=setTimeout(()=>{let e=this.pendingRequests.get(i);e&&(this.pendingRequests.delete(i),e.reject(Error(`Passkey MPC export request timed out (${Fj}ms)`)))},Fj);this.pendingRequests.set(i,{id:i,timeoutId:a,resolve:t,reject:n});try{r.postMessage({...e,id:i})}catch(e){clearTimeout(a),this.pendingRequests.delete(i),n(e instanceof Error?e:Error(String(e)))}})}generateMessageId(){return`mpc_export_${Date.now()}_${++this.messageId}`}};function zj(e){return new Rj(e)}function Bj(e){if(e.purpose.curve===`ecdsa`)return e.purpose.thresholdSessionId;if(e.thresholdSessionId===void 0)throw Error(`Ed25519 warm material operation requires its protocol session id`);return e.thresholdSessionId}function Vj(e){return e.curve===`ecdsa`?{thresholdSessionId:e.thresholdSessionId,chainTarget:e.chainTarget}:null}function $(e){return String(e??``).trim()||null}function Hj(e){return Array.isArray(e)?e.map(e=>Math.floor(Number(e))).filter(e=>Number.isFinite(e)&&e>0):[]}function Uj(e){try{return li(e)}catch{return null}}function Wj(e){try{return Jr(e)}catch{return null}}function Gj(e){switch(e){case`login`:case`registration`:case`manual-bootstrap`:case`email_otp`:return e;default:return null}}function Kj(e){let t=Gj(e);return t&&t!==`email_otp`?t:null}function qj(e){return e&&typeof e==`object`?e:null}function Jj(e){return qj(e.thresholdSessionIds)||{}}function Yj(e){let t=String(e||``).trim().toLowerCase();return/^0x[0-9a-f]{40}$/.test(t)?t:null}function Xj(e){try{return $r(e)}catch{return null}}function Zj(e){let t=$(e.rawSigningRootId),n=$(e.rawSigningRootVersion),r=null,i=null;if(e.runtimePolicyScope)try{let t=Pe(e.runtimePolicyScope);r=$(t.signingRootId),i=$(t.signingRootVersion)}catch{}if(t&&r&&t!==r||n&&i&&n!==i)return null;let a=t||r,o=n||i;return a&&o?{signingRootId:a,signingRootVersion:o}:null}function Qj(e){return!!($(e.signingRootId)||$(e.signingRootVersion))}function $j(e){return!!($(e.subjectId)||$(e.userId))}function eM(e){let t=Jj(e);return{authMethod:e.authMethod,curve:e.curve,storeKey:e.storeKey,walletId:e.walletId||null,thresholdSessionIds:t,issuedAtMs:e.issuedAtMs,expiresAtMs:e.expiresAtMs,remainingUses:e.remainingUses,updatedAtMs:e.updatedAtMs,hasEcdsaRestore:!!e.ecdsaRestore}}function tM(e,t){return{kind:`rejected`,rejection:{kind:`rejected_sealed_recovery_record`,storeKey:$(e.storeKey),walletId:$(e.walletId),reason:t,safeSummary:eM(e)}}}function nM(e,t={}){let n=Jj(e),r=qj(e.ecdsaRestore),i=$(e.storeKey),a=$(e.walletId),o=$(e.sealedSecretB64u),s=Math.floor(Number(e.issuedAtMs)||0),c=Math.floor(Number(e.expiresAtMs)||0),l=Math.floor(Number(e.remainingUses)||0),u=Math.floor(Number(e.updatedAtMs)||0);if(e.authMethod!==`passkey`&&e.authMethod!==`email_otp`||e.curve!==`ecdsa`)return tM(e,`unsupported_record`);if(!i||!a||!o)return tM(e,`missing_identity`);if(c<=0||u<=0||s<=0)return tM(e,`missing_restore_metadata`);if($j(e))return tM(e,`invalid_identity`);if(!t.allowExpired&&c<=Date.now())return tM(e,`expired`);if(!t.allowExhausted&&e.authMethod!==`passkey`&&l<=0)return tM(e,`exhausted`);let d=$(n.ecdsa),f=r,p=we(f?.runtimePolicyScope),m=Zj({runtimePolicyScope:p,rawSigningRootId:f?.signingRootId,rawSigningRootVersion:f?.signingRootVersion}),h=$(e.relayerUrl),g=e.authMethod===`passkey`?$(f?.rpId):null,_=e.authMethod===`passkey`?Kj(f?.source):null,v=e.authMethod===`email_otp`&&Gj(f?.source)===`email_otp`?`email_otp`:null,y=$(f?.credentialIdB64u),b=$(f?.providerSubjectId),x=$(f?.emailHashHex),S=$(f?.relayerKeyId),C=$(f?.keyHandle),w=$(f?.ecdsaThresholdKeyId),T=Yj(f?.ethereumAddress),E=$(f?.thresholdEcdsaPublicKeyB64u),D=Hj(f?.participantIds),O=Uj(f?.routerAbEcdsaDerivationNormalSigning),k=Wj(f?.publicCapability),A=null;try{A=Ci(f?.roleLocalMaterialRef)}catch{A=null}let j=$(f?.clientVerifyingShareB64u),M=e.authMethod===`passkey`?j:null;if(f?.sessionKind!=null||Qj(e))return tM(e,`invalid_identity`);if(!d||!m)return tM(e,`missing_identity`);if(!f?.chainTarget)return tM(e,`wrong_chain_target`);let ee;try{ee=tn(f.chainTarget)}catch{return tM(e,`wrong_chain_target`)}if(!h||e.authMethod===`passkey`&&!_||e.authMethod===`email_otp`&&!v||e.authMethod===`passkey`&&!g||e.authMethod===`passkey`&&!y||e.authMethod===`email_otp`&&(!b||!x)||!w||!S||!C||!T||!E||!p||!O||!k||!D.length||!A||e.authMethod===`passkey`&&!M)return tM(e,`missing_restore_metadata`);let te=e.authMethod===`passkey`?Xj({walletId:a,rpId:g,credentialIdB64u:y}):null,ne=ni(f.authority),re=ti(f.emailOtpAuthority),N=e.authMethod===`email_otp`&&ne&&re&&re.walletId===a&&re.factor.provider===f.provider&&re.factor.providerUserId===b&&re.verifier.emailHashHex===x?re:null;return e.authMethod===`passkey`&&!te||e.authMethod===`email_otp`&&!N?tM(e,`invalid_identity`):{kind:`accepted`,record:e.authMethod===`passkey`?{storeKey:i,walletId:a,authMethod:`passkey`,curve:`ecdsa`,thresholdSessionId:d,sealedSecretB64u:o,issuedAtMs:s,expiresAtMs:c,remainingUses:l,updatedAtMs:u,...$(e.keyVersion)?{keyVersion:$(e.keyVersion)}:{},...$(e.groupId)?{groupId:$(e.groupId)}:{},chainTarget:ee,source:_,authority:te,signingRootId:m.signingRootId,signingRootVersion:m.signingRootVersion,keyHandle:C,ecdsaThresholdKeyId:w,ethereumAddress:T,thresholdEcdsaPublicKeyB64u:E,participantIds:D,relayerUrl:h,relayerKeyId:S,runtimePolicyScope:p,routerAbEcdsaDerivationNormalSigning:O,publicCapability:k,clientVerifyingShareB64u:M,roleLocalMaterialRef:A}:{storeKey:i,walletId:a,authMethod:`email_otp`,curve:`ecdsa`,thresholdSessionId:d,sealedSecretB64u:o,issuedAtMs:s,expiresAtMs:c,remainingUses:l,updatedAtMs:u,...$(e.keyVersion)?{keyVersion:$(e.keyVersion)}:{},...$(e.groupId)?{groupId:$(e.groupId)}:{},chainTarget:ee,source:`email_otp`,authority:ne,emailOtpAuthority:N,signingRootId:m.signingRootId,signingRootVersion:m.signingRootVersion,keyHandle:C,ecdsaThresholdKeyId:w,ethereumAddress:T,thresholdEcdsaPublicKeyB64u:E,participantIds:D,relayerUrl:h,relayerKeyId:S,runtimePolicyScope:p,routerAbEcdsaDerivationNormalSigning:O,publicCapability:k,...j?{clientVerifyingShareB64u:j}:{},roleLocalMaterialRef:A}}}function rM(e,t){return String(e??``).trim()===String(t??``).trim()}function iM(e,t){return String(e??``).trim().toLowerCase()===String(t??``).trim().toLowerCase()}function aM(e,t){return e.length===t.length?e.every((e,n)=>Number(e)===Number(t[n])):!1}function oM(e,t){let n=[],r=t.signer;return rM(e.walletId,r.walletId)||n.push(`wallet_id`),an(e.chainTarget,r.chainTarget)||n.push(`chain_target`),rM(e.keyHandle,r.keyHandle)||n.push(`key_handle`),rM(e.ecdsaThresholdKeyId,r.key.ecdsaThresholdKeyId)||n.push(`ecdsa_threshold_key_id`),rM(e.signingRootId,r.key.signingRootId)||n.push(`signing_root_id`),rM(e.signingRootVersion,r.key.signingRootVersion)||n.push(`signing_root_version`),iM(e.ethereumAddress,r.key.thresholdOwnerAddress)||n.push(`threshold_owner_address`),aM(e.participantIds,r.key.participantIds)||n.push(`participant_ids`),e.authMethod!==t.auth.kind&&n.push(`auth_method`),e.authMethod===`passkey`?t.auth.kind===`passkey`?(rM(e.authority.verifier.rpId,t.auth.rpId)||n.push(`rp_id`),rM(e.authority.factor.credentialIdB64u,t.auth.credentialIdB64u)||n.push(`credential_id`),n):(n.push(`passkey_auth_branch`),n):t.auth.kind===`email_otp`?(rM(e.emailOtpAuthority.factor.providerUserId,t.auth.providerSubjectId)||n.push(`provider_subject_id`),n):(n.push(`email_otp_auth_branch`),n)}function sM(e){console.warn(`[SigningSessionRestore] ECDSA restore identity mismatch`,JSON.stringify({reasons:e.reasons,record:{authMethod:e.record.authMethod,walletId:e.record.walletId,source:e.record.source,chainTarget:V(e.record.chainTarget),keyHandle:e.record.keyHandle,ecdsaThresholdKeyId:e.record.ecdsaThresholdKeyId,signingRootId:e.record.signingRootId,signingRootVersion:e.record.signingRootVersion,ethereumAddress:e.record.ethereumAddress,participantIds:e.record.participantIds},lane:{authMethod:e.lane.auth.kind,walletId:e.lane.signer.walletId,chainTarget:V(e.lane.signer.chainTarget),keyHandle:e.lane.signer.keyHandle,ecdsaThresholdKeyId:e.lane.signer.key.ecdsaThresholdKeyId,signingRootId:e.lane.signer.key.signingRootId,signingRootVersion:e.lane.signer.key.signingRootVersion,thresholdOwnerAddress:e.lane.signer.key.thresholdOwnerAddress,participantIds:e.lane.signer.key.participantIds}},null,2))}function cM(e,t){if(t.authMethod!==e.authMethod||!an(t.chainTarget,e.chainTarget)||t.thresholdSessionId!==e.thresholdSessionId)return null;let n=e.materialRestoreIdentity.lane,r=oM(t,n);return r.length>0?(sM({record:t,lane:n,reasons:r}),null):!rM(t.ecdsaThresholdKeyId,e.materialRestoreIdentity.ecdsaThresholdKeyId)||!rM(t.walletId,n.signer.walletId)||!rM(t.keyHandle,n.signer.keyHandle)||!g(t.roleLocalMaterialRef.materialActivation,n.signer.materialActivation)?null:{record:t,purpose:{walletId:e.walletId,authMethod:e.authMethod,curve:`ecdsa`,chainTarget:e.chainTarget,materialActivation:t.roleLocalMaterialRef.materialActivation,thresholdSessionId:t.thresholdSessionId,reason:e.reason}}}function lM(e,t){let n=nM(t,{allowExpired:!1,allowExhausted:!1});if(n.kind===`rejected`)return{kind:`rejected`,rejection:n.rejection};let r=cM(e,n.record);return r?{kind:`matched`,workItem:r}:{kind:`not_applicable`}}function uM(e){return an(e.record.chainTarget,e.requestedChainTarget)?[{record:e.record,purpose:{walletId:e.walletId,authMethod:e.record.authMethod,curve:`ecdsa`,chainTarget:e.requestedChainTarget,materialActivation:e.record.roleLocalMaterialRef.materialActivation,thresholdSessionId:e.record.thresholdSessionId,reason:e.reason}}]:[]}function dM(e){let t=nM(e.record);if(t.kind===`rejected`)return[{kind:`rejected`,rejection:t.rejection}];let n=uM({walletId:e.walletId,record:t.record,reason:e.reason,requestedChainTarget:e.requestedChainTarget});return n.length?n.map(e=>({kind:`matched`,workItem:e})):[{kind:`not_applicable`}]}function fM(e){return e.kind===`matched`}function pM(e,t){let n=V(e.chainTarget),r=`materialRestoreIdentity`in e?e.materialRestoreIdentity.lane.signer.materialActivation:e.materialActivation;return[e.walletId,e.authMethod,e.curve,n,e.reason,Gd(r),e.thresholdSessionId,t.thresholdSessionId,t.updatedAtMs,`restored`].join(`|`)}function mM(e,t){let n=V(e.chainTarget);return[e.walletId,e.authMethod,e.curve,n,Gd(e.materialActivation),e.thresholdSessionId,t.updatedAtMs].join(`|`)}function hM(e){return{kind:`completed`,attempted:e.attempted,restored:e.restored,deferred:e.deferred}}function gM(e){return e.map(({record:e,purpose:t})=>({authMethod:t.authMethod,curve:t.curve,chain:V(t.chainTarget),thresholdSessionId:t.thresholdSessionId,recordThresholdSessionId:e.thresholdSessionId,updatedAtMs:e.updatedAtMs}))}function _M(){let e=new Set;return{hasSuccessfulRestore:(t,n)=>e.has(pM(t,n)),rememberSuccessfulRestore:(t,n)=>{e.add(pM(t,n))},clear:()=>{e.clear()}}}function vM(){let e=new Set,t=new Map;return{hasCompleted:t=>e.has(String(t||``).trim()),rememberCompleted:t=>{let n=String(t||``).trim();n&&e.add(n)},getInFlight:e=>{let n=String(e||``).trim();return n?t.get(n):void 0},setInFlight:(e,n)=>{let r=String(e||``).trim();r&&t.set(r,n)},clearInFlight:e=>{let n=String(e||``).trim();n&&t.delete(n)},clear:()=>{e.clear(),t.clear()}}}async function yM(e,t){let n=String(e.walletId||``).trim();if(!n)return hM({attempted:0,restored:0,deferred:0});let r={...e,walletId:n},i;try{i=await t.listExactSealedSessionsForWallet({walletId:n,authMethod:r.authMethod,curve:`ecdsa`,chainTarget:r.chainTarget})}catch(e){return t.onListError?.({walletId:n,target:V(r.chainTarget),reason:r.reason,error:e}),hM({attempted:0,restored:0,deferred:0})}let a=i.map(e=>lM(r,e));for(let e of a)e.kind===`rejected`&&t.onRejectedRecord?.({walletId:n,rejection:e.rejection});let o=a.filter(fM).map(e=>e.workItem);if(!o.length)return hM({attempted:0,restored:0,deferred:0});if(o.length>1)return{kind:`duplicate_records`,attempted:0,restored:0,deferred:0,duplicateCount:o.length,duplicateRecordSummaries:gM(o)};let s=0,c=0,l=0;return await Promise.all(o.map(async({record:e,purpose:i})=>{if(t.cache?.hasSuccessfulRestore(r,e))return;s+=1;let a=await t.restoreSealedRecordForWallet({walletId:n,record:e,purpose:i});a===`restored`&&(c+=1,t.cache?.rememberSuccessfulRestore(r,e)),a===`ready`&&t.cache?.rememberSuccessfulRestore(r,e),a===`deferred`&&(l+=1)})),hM({attempted:s,restored:c,deferred:l})}async function bM(e,t){let n=String(e.walletId||``).trim(),r=Math.max(0,Math.floor(e.maxRecords??10)),i={listed:0,discovered:0,truncated:0};if(!n||r<=0)return i;let a;try{a=(await Promise.all(e.ecdsaChainTargets.map(r=>t.listExactSealedSessionsForWallet({walletId:n,authMethod:e.authMethod,curve:`ecdsa`,chainTarget:r})))).flat()}catch(e){return t.onListError?.({walletId:n,error:e}),i}let o=new Set,s=a.flatMap(t=>e.ecdsaChainTargets.flatMap(e=>dM({walletId:n,record:t,reason:`session_status`,requestedChainTarget:e}))).filter(e=>e.kind===`rejected`?(t.onRejectedRecord?.({walletId:n,rejection:e.rejection}),!1):!0).filter(fM).map(e=>e.workItem).filter(e=>{let t=mM(e.purpose,e.record);return o.has(t)?!1:(o.add(t),!0)}),c=s.slice(0,r);return{listed:a.length,discovered:c.length,truncated:Math.max(0,s.length-c.length)}}function xM(e){if(e.ok)return!1;switch(e.code){case`expired`:case`exhausted`:return!1;case`not_found`:case`invalid_args`:case`invalid_response`:return!0;default:return!1}}async function SM(e){let t=await e.resolveCurrentEcdsaCapabilityRuntime({walletId:B(e.record.walletId),chainTarget:e.record.chainTarget});return t.kind===`resolved`&&g(t.runtime.materialActivation,e.record.roleLocalMaterialRef.materialActivation)?{kind:`current`}:{kind:`superseded`,status:{ok:!1,code:`superseded`,message:`Passkey ECDSA sealed recovery was superseded (${t.kind===`blocked`?t.reason:`material_activation_mismatch`})`}}}async function CM(e){if(!an(e.record.chainTarget,e.purpose.chainTarget))return null;let t=String(e.purpose.thresholdSessionId||``).trim();if(!t||!e.groupId)return null;let n=await SM({record:e.record,resolveCurrentEcdsaCapabilityRuntime:e.resolveCurrentEcdsaCapabilityRuntime});if(n.kind===`superseded`)return n.status;let r=await e.rehydrateWarmSessionMaterial({thresholdSessionId:t,sealedSecretB64u:e.record.sealedSecretB64u,signingSessionSealKeyVersion:Ei(e.record.keyVersion),expiresAtMs:e.record.expiresAtMs,remainingUses:e.record.remainingUses,transport:{...e.transport,groupId:e.groupId}});if(!r.ok){let t=await SM({record:e.record,resolveCurrentEcdsaCapabilityRuntime:e.resolveCurrentEcdsaCapabilityRuntime});return t.kind===`superseded`?t.status:(xM(r)&&await e.deletePersistedRecord().catch(()=>void 0),await e.recordSessionMaterialRestored(r),r)}let i=await e.readWarmSessionStatusFromWorker(t);if(!i)return{ok:!1,code:`worker_error`,message:`Warm-session status read failed after rehydrate`};let a=await SM({record:e.record,resolveCurrentEcdsaCapabilityRuntime:e.resolveCurrentEcdsaCapabilityRuntime});return a.kind===`superseded`?a.status:(i.ok?await e.updatePersistedPolicy({expiresAtMs:i.expiresAtMs,remainingUses:i.remainingUses,updatedAtMs:Date.now()}).catch(()=>void 0):xM(i)&&await e.deletePersistedRecord().catch(()=>void 0),await e.recordSessionMaterialRestored(i),i)}const wM=new Map;function TM(e){return Math.max(0,Math.round(performance.now()-e))}function EM(e){e.diagnostics?.recordDuration(e.bucket,TM(e.startedAt))}function DM(e){!e.diagnostics||!e.resultDiagnostics||(e.diagnostics.recordDuration(`sealed_record_apply_runtime_setup`,e.resultDiagnostics.runtimeSetupMs),e.diagnostics.recordDuration(`sealed_record_apply_client_seal`,e.resultDiagnostics.clientSealMs),e.diagnostics.recordDuration(`sealed_record_apply_server_route`,e.resultDiagnostics.serverSealRouteMs),e.diagnostics.recordDuration(`sealed_record_apply_client_unseal`,e.resultDiagnostics.clientUnsealMs),e.diagnostics.recordDuration(`sealed_record_apply_policy_update`,e.resultDiagnostics.policyUpdateMs))}function OM(e){if(e.transport.curve===`ecdsa`){let t=String(e.transport.walletId).trim(),n=String(e.transport.ecdsaRestore.authority.walletId).trim();if(!t||!n||t!==n)throw Error(`Passkey ECDSA seal transport wallet does not match restore metadata`);return{walletId:t,ecdsaRestore:e.transport.ecdsaRestore}}let t=Pe(Fe(e.transport.ed25519Restore.runtimePolicyScope));return{walletId:e.transport.walletId,signingRootId:t.signingRootId,...t.signingRootVersion?{signingRootVersion:t.signingRootVersion}:{},ed25519Restore:e.transport.ed25519Restore}}function kM(e){return e.transport.curve===`ed25519`?{authMethod:`passkey`,curve:`ed25519`}:{authMethod:`passkey`,curve:`ecdsa`,chainTarget:e.transport.chainTarget}}function AM(e){if(e.transport.curve===`ecdsa`){let t=e.transport.ecdsaRestore?.roleLocalMaterialRef;if(!t)throw Error(`Passkey ECDSA persistence requires exact restore metadata`);return[`persist`,`passkey`,`ecdsa`,V(e.transport.chainTarget),t.materialActivation.activationId,t.materialActivation.capability,t.materialActivation.materialOwner,t.materialActivation.keyBinding,t.materialActivation.lifecycleBinding,t.materialActivation.signingWorker,t.durableMaterialRef,t.bindingDigest].join(`|`)}let t=Pd({authMethod:`passkey`,materialActivation:e.transport.ed25519Restore.materialActivation});return[`persist`,t.kind,t.authMethod,Gd(t.materialActivation)].join(`|`)}function jM(e){return e.transport.curve===`ed25519`}function MM(e){if(!jM(e)){let t=String(e.metadata.walletId||``).trim();if(!t||!e.metadata.ecdsaRestore)throw Error(`[SigningSessionSealedStore] missing Passkey ECDSA seal metadata`);let n={...e.existing?.thresholdSessionIds,ecdsa:e.thresholdSessionId};return{thresholdSessionId:e.thresholdSessionId,sealedSecretB64u:e.sealedSecretB64u,curve:`ecdsa`,authMethod:`passkey`,thresholdSessionIds:n,walletId:t,relayerUrl:e.relayerUrl,keyVersion:e.keyVersion,groupId:e.groupId,ecdsaRestore:e.metadata.ecdsaRestore,...e.metadata.ed25519Restore?{ed25519Restore:e.metadata.ed25519Restore}:{},issuedAtMs:e.issuedAtMs,expiresAtMs:e.expiresAtMs,remainingUses:e.remainingUses,updatedAtMs:e.updatedAtMs}}let t=String(e.metadata.walletId||``).trim();if(!t||!e.metadata.ed25519Restore)throw Error(`[SigningSessionSealedStore] missing Passkey Ed25519 seal metadata`);let n={...e.existing?.thresholdSessionIds,ed25519:e.thresholdSessionId};return{thresholdSessionId:e.thresholdSessionId,sealedSecretB64u:e.sealedSecretB64u,curve:`ed25519`,authMethod:`passkey`,thresholdSessionIds:n,walletId:t,...e.metadata.signingRootId?{signingRootId:e.metadata.signingRootId}:{},...e.metadata.signingRootVersion?{signingRootVersion:e.metadata.signingRootVersion}:{},relayerUrl:e.relayerUrl,keyVersion:e.keyVersion,groupId:e.groupId,...e.metadata.ecdsaRestore?{ecdsaRestore:e.metadata.ecdsaRestore}:{},ed25519Restore:e.metadata.ed25519Restore,issuedAtMs:e.issuedAtMs,expiresAtMs:e.expiresAtMs,remainingUses:e.remainingUses,updatedAtMs:e.updatedAtMs}}function NM(e){return e.transport.curve===`ed25519`}async function PM(e){let t=wo(e);if(!t)throw Error(`[SigningSessionSealedStore] invalid sealed session record write input`);await ps(t)}function FM(e,t){return e.source===t.source&&an(e.chainTarget,t.chainTarget)&&e.keyHandle===t.keyHandle&&e.ecdsaThresholdKeyId===t.ecdsaThresholdKeyId&&e.ethereumAddress===t.ethereumAddress&&e.relayerKeyId===t.relayerKeyId&&e.clientVerifyingShareB64u===t.clientVerifyingShareB64u&&e.thresholdEcdsaPublicKeyB64u===t.thresholdEcdsaPublicKeyB64u&&g(e.roleLocalMaterialRef.materialActivation,t.roleLocalMaterialRef.materialActivation)&&e.roleLocalMaterialRef.durableMaterialRef===t.roleLocalMaterialRef.durableMaterialRef&&e.roleLocalMaterialRef.bindingDigest===t.roleLocalMaterialRef.bindingDigest&&e.participantIds.length===t.participantIds.length&&e.participantIds.every((e,n)=>e===t.participantIds[n])&&e.authority.kind===t.authority.kind&&e.authority.walletId===t.authority.walletId&&e.authority.authorityDigest===t.authority.authorityDigest&&e.authority.walletAuthMethodId===t.authority.walletAuthMethodId&&Vr(e.publicCapability,t.publicCapability)&&Xr(e.routerAbEcdsaDerivationNormalSigning,t.routerAbEcdsaDerivationNormalSigning)}function IM(e){if(e.existing.curve!==e.transport.curve)return!1;let t=String(e.transport.walletId).trim();if(!t||t!==e.existing.walletId)return!1;if(e.existing.curve===`ed25519`&&e.transport.curve===`ed25519`)return g(e.existing.ed25519Restore.materialActivation,e.transport.ed25519Restore.materialActivation);if(e.existing.curve!==`ecdsa`||e.transport.curve!==`ecdsa`||!an(e.existing.ecdsaRestore.chainTarget,e.transport.chainTarget))return!1;let n=e.metadata.ecdsaRestore;return n?FM(e.existing.ecdsaRestore,n):!0}function LM(e){return e.curve===`ecdsa`?{walletId:e.walletId,ecdsaRestore:e.ecdsaRestore,...e.ed25519Restore?{ed25519Restore:e.ed25519Restore}:{}}:{walletId:e.walletId,...e.signingRootId?{signingRootId:e.signingRootId}:{},...e.signingRootVersion?{signingRootVersion:e.signingRootVersion}:{},...e.ecdsaRestore?{ecdsaRestore:e.ecdsaRestore}:{},ed25519Restore:e.ed25519Restore}}function RM(e,t){return e.curve,{...e,authMethod:`passkey`,groupId:t}}async function zM(e){return e.transport.curve===`ed25519`?await so(Pd({authMethod:`passkey`,materialActivation:e.transport.ed25519Restore.materialActivation})):await ao(e.thresholdSessionId,e.purpose)}var BM=class{constructor(e){this.deps=e}async persistSigningSessionSealForThresholdSession(e){if(this.deps.signingSessionPersistenceMode!==`sealed_refresh_v1`)return{ok:!1,code:`not_enabled`,message:`Passkey signing-session seal persistence requires signingSessionPersistenceMode="sealed_refresh_v1"`};let t=String(e.thresholdSessionId||``).trim();if(!t)return{ok:!1,code:`invalid_args`,message:`Missing threshold sessionId`};let n=String(e.transport.relayerUrl||``).trim();if(!n)return{ok:!1,code:`invalid_args`,message:`Passkey seal persistence requires relayerUrl`};let r=OM({transport:e.transport}),i=kM({transport:e.transport});if(!i)return{ok:!1,code:`invalid_args`,message:`Passkey seal persistence requires one exact record purpose`};let a=AM({transport:e.transport}),o=wM.get(a);if(o)return await o;let s;s=(e.transport.curve,this.persistExactRecord({thresholdSessionId:t,transport:e.transport,metadata:r,purpose:i,relayerUrl:n,diagnostics:e.diagnostics,completedSeal:e.completedSeal}));let c=s.finally(()=>{wM.delete(a)});return wM.set(a,c),await c}async recordPolicyResult(e,t,n){let r=await this.readRecordForPurpose(e,t);if(r){if(n.ok){await this.writePolicy(r,n.expiresAtMs,Math.max(0,n.remainingUses));return}if(n.code===`exhausted`){await this.writePolicy(r,r.expiresAtMs,0);return}n.code===`expired`&&await this.writePolicy(r,Math.min(r.expiresAtMs,Date.now()),Math.max(0,r.remainingUses))}}async updatePersistedPolicy(e){let t=await this.readRecordForPurpose(e.purpose,e.thresholdSessionId);!t||t.curve!==`ecdsa`||t.thresholdSessionIds.ecdsa!==e.thresholdSessionId||await this.writePolicy(t,e.expiresAtMs,e.remainingUses)}async persistExactRecord(e){let t=performance.now(),n;try{n=await zM(e)}catch(n){return EM({diagnostics:e.diagnostics,bucket:`sealed_record_existing_read`,startedAt:t}),{ok:!1,code:`local_persist_failed`,message:n instanceof Error?`Failed to read the existing sealed session: ${n.message}`:`Failed to read the existing sealed session`}}if(EM({diagnostics:e.diagnostics,bucket:`sealed_record_existing_read`,startedAt:t}),n){if(!IM({existing:n,transport:e.transport,metadata:e.metadata}))return{ok:!1,code:`binding_mismatch`,message:`Existing sealed session names different material`};let t=performance.now(),r;try{r=await this.deps.readWarmSessionStatus({thresholdSessionId:e.thresholdSessionId})}catch(e){return{ok:!1,code:`worker_error`,message:e instanceof Error?`Failed to read warm-session policy: ${e.message}`:`Failed to read warm-session policy`}}EM({diagnostics:e.diagnostics,bucket:`sealed_record_policy_read`,startedAt:t});let i=LM(n),a=r.ok?r.expiresAtMs:r.code===`expired`?Math.min(n.expiresAtMs,Date.now()):n.expiresAtMs,o=r.ok?r.remainingUses:r.code===`exhausted`?0:n.remainingUses;if(!r.ok&&r.code!==`expired`&&r.code!==`exhausted`)return r;let s=performance.now();return await PM((NM(e),MM({thresholdSessionId:e.thresholdSessionId,transport:e.transport,metadata:i,sealedSecretB64u:n.sealedSecretB64u,relayerUrl:n.relayerUrl,keyVersion:n.keyVersion,groupId:n.groupId,issuedAtMs:n.issuedAtMs,expiresAtMs:a,remainingUses:o,updatedAtMs:Date.now(),existing:n}))),EM({diagnostics:e.diagnostics,bucket:`sealed_record_register`,startedAt:s}),{ok:!0,sealedSecretB64u:n.sealedSecretB64u,keyVersion:n.keyVersion,remainingUses:o,expiresAtMs:a}}if(e.transport.curve===`ecdsa`&&!e.metadata.ecdsaRestore)return{ok:!1,code:`missing_restore_metadata`,message:`Passkey ECDSA seal persistence requires exact restore metadata`};if(e.transport.curve===`ecdsa`&&e.metadata.ecdsaRestore&&!an(e.transport.chainTarget,e.metadata.ecdsaRestore.chainTarget))return{ok:!1,code:`binding_mismatch`,message:`Passkey ECDSA seal transport and restore metadata name different material`};if(e.transport.curve===`ed25519`&&!e.metadata.ed25519Restore)return{ok:!1,code:`missing_restore_metadata`,message:`Passkey Ed25519 seal persistence requires exact restore metadata`};if(String(e.transport.groupId||`rfc2409-group2`).trim()!==`rfc2409-group2`)return{ok:!1,code:`invalid_args`,message:`Unsupported groupId for Passkey signing-session seal persistence`};let r=Ze,i=performance.now(),a=e.completedSeal??await this.deps.sealAndPersistWarmSessionMaterial({thresholdSessionId:e.thresholdSessionId,transport:RM(e.transport,r)});if(EM({diagnostics:e.diagnostics,bucket:`sealed_record_apply_server_seal`,startedAt:i}),DM({diagnostics:e.diagnostics,resultDiagnostics:a.ok?a.diagnostics:void 0}),!a.ok)return a;let o=String(a.keyVersion||``).trim();if(!o)return{ok:!1,code:`invalid_key_version`,message:`Signing-session seal response did not include a key version`};let s=Date.now(),c=performance.now();await PM((NM(e),MM({thresholdSessionId:e.thresholdSessionId,transport:e.transport,metadata:e.metadata,sealedSecretB64u:a.sealedSecretB64u,relayerUrl:e.relayerUrl,keyVersion:o,groupId:r,issuedAtMs:s,expiresAtMs:a.expiresAtMs,remainingUses:a.remainingUses,updatedAtMs:s}))),EM({diagnostics:e.diagnostics,bucket:`sealed_record_register`,startedAt:c});let l=performance.now(),u;try{u=await zM(e)}catch{u=null}return EM({diagnostics:e.diagnostics,bucket:`sealed_record_verify_read`,startedAt:l}),u?a:{ok:!1,code:`local_persist_failed`,message:`Failed to persist sealed signing-session record locally`}}async readRecordForPurpose(e,t){return e.curve===`ed25519`?await so(Pd({authMethod:`passkey`,materialActivation:e.materialActivation})):await ao(t,{authMethod:`passkey`,curve:`ecdsa`,chainTarget:e.chainTarget})}async writePolicy(e,t,n){if(e.curve===`ed25519`){await hs({locator:Pd({authMethod:`passkey`,materialActivation:e.ed25519Restore.materialActivation}),expiresAtMs:Math.max(1,Math.floor(t)),remainingUses:Math.max(0,Math.floor(n)),updatedAtMs:Date.now()});return}await $a({thresholdSessionId:e.thresholdSessionIds.ecdsa,filter:{authMethod:`passkey`,curve:`ecdsa`,chainTarget:e.ecdsaRestore.chainTarget},expiresAtMs:Math.max(1,Math.floor(t)),remainingUses:Math.max(0,Math.floor(n)),updatedAtMs:Date.now()})}};const VM=new Map,HM=new Map;function UM(e){return[`rehydrate`,`passkey`,`ecdsa`,V(e.chainTarget),Gd(e.materialActivation),String(e.thresholdSessionId||``).trim()].join(`|`)}function WM(e,t){if(!e)return`deferred`;if(e.ok)return t;if(e.code===`exhausted`)return`ready`;if(e.code===`expired`)return`deferred`;throw Error(`[PasskeyMpcSession] sealed-session restore failed (${e.code}): ${e.message}`)}async function GM(e){return{chainTarget:e.chainTarget,signingRootId:e.signingRootId,signingRootVersion:e.signingRootVersion,source:e.source,authority:await H({authority:e.authority}),roleLocalMaterialRef:e.roleLocalMaterialRef,rpId:e.authority.verifier.rpId,credentialIdB64u:e.authority.factor.credentialIdB64u,keyHandle:e.keyHandle,ecdsaThresholdKeyId:e.ecdsaThresholdKeyId,ethereumAddress:e.ethereumAddress,relayerKeyId:e.relayerKeyId,clientVerifyingShareB64u:e.clientVerifyingShareB64u,thresholdEcdsaPublicKeyB64u:e.thresholdEcdsaPublicKeyB64u,participantIds:[...e.participantIds],...e.runtimePolicyScope?{runtimePolicyScope:e.runtimePolicyScope}:{},routerAbEcdsaDerivationNormalSigning:e.routerAbEcdsaDerivationNormalSigning,publicCapability:e.publicCapability}}function KM(e){return e.session.capabilitySubjects.some(t=>t.kind===`sign`&&t.keyFamily===`ecdsa_secp256k1`&&g(t.materialActivation,e.materialActivation))}async function qM(e){let t=B(e.walletId),n;try{n=await G.resolveSelectedWalletAuthority(String(t))}catch{return null}if(n.kind!==`resolved`)return null;let{selection:r,authMethod:i,authority:a}=n;if(r.lockState!==`unlocked`||r.walletId!==t||r.walletAuthMethodId!==i.walletAuthMethodId||i.kind!==`passkey`||i.status!==`active`||i.walletId!==t||i.walletAuthorityId!==a.authorityId||i.walletAuthMethodId!==e.factorAuthority.bindingId||i.rpId!==e.factorAuthority.verifier.rpId||i.credentialIdB64u!==e.factorAuthority.factor.credentialIdB64u||a.state!==`active`||a.walletId!==t)return null;let o;try{o=await K.readExactWithOperationCredential({walletId:t,authorityId:a.authorityId,authMethodId:i.walletAuthMethodId})}catch{return null}return o.kind!==`found`||o.record.walletId!==t||o.record.authorityId!==a.authorityId||o.record.authMethodId!==i.walletAuthMethodId||o.record.authorityDigestB64u!==a.authorityDigestB64u||o.record.authorityRevocationEpoch!==a.revocationEpoch||o.record.expiresAtMs<=e.nowMs||!KM({session:o.record,materialActivation:e.materialActivation})?null:o.operationCredential}async function JM(e){let t=Eo({durableRecord:{authMethod:`passkey`,curve:`ecdsa`,thresholdSessionId:e.thresholdSessionId,chainTarget:e.chainTarget},deleteReason:`invalid_persisted_record`,preserveResolvedIdentity:!1}),n=[`delete`,`passkey`,`ecdsa`,V(e.chainTarget),e.thresholdSessionId].join(`|`),r=HM.get(n);if(r)return await r;let i=ro(t).finally(()=>{HM.delete(n)});HM.set(n,i),await i}async function YM(e){return await Lo({walletId:e.walletId,filter:{authMethod:`passkey`,curve:`ecdsa`,chainTarget:e.chainTarget}})}function XM(e){console.warn(`[PasskeyMpcSession] signing-session restore list failed`,{walletId:e.walletId,target:e.target,reason:e.reason,error:e.error instanceof Error?e.error.message:String(e.error||`unknown error`)})}function ZM(e){console.warn(`[PasskeyMpcSession] signing-session restore rejected record`,e)}function QM(e){return typeof e==`object`&&!!e}function $M(e){let t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:0}function eN(e){return Number.isSafeInteger(e)&&Number(e)>=0}function tN(e){return Number.isSafeInteger(e)&&Number(e)>0}function nN(e){return!QM(e)||typeof e.ok!=`boolean`?null:e.ok?!eN(e.remainingUses)||!tN(e.expiresAtMs)?null:{ok:!0,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs}:{ok:!1,code:typeof e.code==`string`?e.code:`worker_error`,message:typeof e.message==`string`?e.message:`Warm-session status read failed`}}function rN(e){if(!QM(e)||!Array.isArray(e.results))return null;let t=[];for(let n of e.results){if(!QM(n)||typeof n.thresholdSessionId!=`string`||!n.thresholdSessionId.trim())return null;let e=nN(n.result);if(!e)return null;t.push({thresholdSessionId:n.thresholdSessionId,result:e})}return{results:t}}function iN(e){return!QM(e)||typeof e.ok!=`boolean`?null:e.ok?typeof e.prfFirstB64u!=`string`||!e.prfFirstB64u.trim()||!eN(e.remainingUses)||!tN(e.expiresAtMs)?null:{ok:!0,prfFirstB64u:e.prfFirstB64u,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs}:{ok:!1,code:typeof e.code==`string`?e.code:`worker_error`,message:typeof e.message==`string`?e.message:`Warm-session claim failed`}}function aN(e){if(!QM(e)||typeof e.ok!=`boolean`)return null;if(!e.ok)return{ok:!1,code:typeof e.code==`string`?e.code:`worker_error`,message:typeof e.message==`string`?e.message:`Signing-session seal and persist failed`};if(typeof e.sealedSecretB64u!=`string`||!e.sealedSecretB64u.trim()||typeof e.keyVersion!=`string`||!e.keyVersion.trim()||!eN(e.remainingUses)||!tN(e.expiresAtMs))return null;let t=QM(e.diagnostics)?{runtimeSetupMs:$M(e.diagnostics.runtimeSetupMs),clientSealMs:$M(e.diagnostics.clientSealMs),serverSealRouteMs:$M(e.diagnostics.serverSealRouteMs),clientUnsealMs:$M(e.diagnostics.clientUnsealMs),policyUpdateMs:$M(e.diagnostics.policyUpdateMs)}:void 0;return{ok:!0,sealedSecretB64u:e.sealedSecretB64u,keyVersion:e.keyVersion.trim(),remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs,...t?{diagnostics:t}:{}}}function oN(e){if(e.authMethod===`email_otp`||e.curve===`linked_device`)throw Error(`Passkey MPC durable owner requires an owner signing-lane transport`);return e}function sN(e){return Math.max(0,Math.round(performance.now()-e))}function cN(e){e.diagnostics?.recordDuration(e.bucket,sN(e.startedAt))}var lN=class{worker=null;initializationPromise=null;workerBaseOrigin;messageId=0;pendingRequests=new Map;boundHandleWorkerMessage=this.handleWorkerMessage.bind(this);boundHandleWorkerError=this.handleWorkerError.bind(this);durableState;constructor(e){this.deps=e,this.durableState=new BM({signingSessionPersistenceMode:e.signingSessionPersistenceMode,sealAndPersistWarmSessionMaterial:this.sealAndPersistWarmSessionMaterial.bind(this),readWarmSessionStatus:this.readWarmSessionStatus.bind(this)})}setWorkerBaseOrigin(e){this.workerBaseOrigin=e}async prewarmShamir3Pass(){try{await this.sendMessage({type:`PREWARM_SHAMIR3PASS`,id:this.generateMessageId(),payload:{}},15e3)}catch{}}async prepareSigningSessionHydration(e){let t=await this.sendMessage({type:`PREPARE_SESSION_CLIENT_SEAL`,id:this.generateMessageId(),payload:e});if(!t.success)throw Error(t.error||`Client seal preparation failed`)}async discardSigningSessionHydration(e){let t=await this.sendMessage({type:`DISCARD_SESSION_CLIENT_SEAL`,id:this.generateMessageId(),payload:e});if(!t.success)throw Error(t.error||`Client seal cleanup failed`)}async readPreparedSigningSessionHydration(e){let t=await this.sendMessage({type:`READ_SESSION_CLIENT_SEAL`,id:this.generateMessageId(),payload:e});if(!t.success||!QM(t.data)||t.data.ok!==!0||typeof t.data.ciphertext!=`string`||!t.data.ciphertext.trim())throw Error(t.success?`Prepared client seal is invalid`:t.error||`Client seal read failed`);return{ciphertext:t.data.ciphertext}}putWarmSessionMaterial=async e=>{let{diagnostics:t,preparedServerSeal:n,...r}=e;if(n&&!e.transport)throw Error(`Prepared server seal requires exact persistence transport`);let i=performance.now();await this.ensureWorkerReady(),cN({diagnostics:t,bucket:`worker_ready`,startedAt:i});let a=performance.now(),o=await this.sendMessage({type:`WARM_SESSION_MATERIAL_PUT`,id:this.generateMessageId(),payload:r});if(!o.success)throw Error(String(o.error||`Failed to cache warm-session material`));let s=nN(o.data);if(!s)throw Error(`Warm-session cache returned an invalid response`);if(!s.ok)throw Error(`Warm-session cache failed (${s.code}): ${s.message}`);cN({diagnostics:t,bucket:`worker_put`,startedAt:a});let c;if(n&&e.transport){let t=await this.sendMessage({type:`COMPLETE_SESSION_CLIENT_SEAL`,id:this.generateMessageId(),payload:{preparationId:n.preparationId,thresholdSessionId:e.thresholdSessionId,transport:oN(e.transport),serverSeal:{ok:!0,ciphertext:n.ciphertext,keyVersion:n.keyVersion,expiresAtMs:n.expiresAtMs,remainingUses:n.remainingUses}}}),r=t.success?aN(t.data):null;if(!r){let e=t.success?`Prepared signing-session seal returned an invalid response`:t.error||`Prepared signing-session seal failed`;throw Error(e)}if(!r.ok)throw Error(`Prepared signing-session seal failed (${r.code}): ${r.message}`);c=r}let l=performance.now(),u=e.transport?await this.durableState.persistSigningSessionSealForThresholdSession({thresholdSessionId:e.thresholdSessionId,transport:oN(e.transport),...t?{diagnostics:t}:{},...c?{completedSeal:c}:{}}):null;if(cN({diagnostics:t,bucket:`sealed_record_persist`,startedAt:l}),u&&!u.ok)throw Error(`Warm-session cache could not persist sealed refresh material (${u.code}): ${u.message}`)};getWarmSessionStatus=async e=>await this.readWarmSessionStatus(e);discoverPersistedSessionsForWallet=async e=>this.deps.signingSessionPersistenceMode===`sealed_refresh_v1`?await bM({...e,authMethod:`passkey`},{listExactSealedSessionsForWallet:async e=>await Lo({walletId:e.walletId,filter:e.curve===`ecdsa`?{authMethod:`passkey`,curve:`ecdsa`,chainTarget:e.chainTarget}:{authMethod:`passkey`,curve:`ed25519`}}),onListError:({walletId:e,error:t})=>{console.warn(`[PasskeyMpcSession] persisted-session discovery list failed`,{walletId:e,error:t instanceof Error?t.message:String(t||`unknown error`)})},onRejectedRecord:({walletId:e,rejection:t})=>{console.warn(`[PasskeyMpcSession] persisted-session discovery rejected record`,{walletId:e,rejection:t})}}):{listed:0,discovered:0,truncated:0};restorePersistedSessionForSigning=async e=>this.deps.signingSessionPersistenceMode===`sealed_refresh_v1`?await yM({...e,authMethod:`passkey`},{listExactSealedSessionsForWallet:YM,restoreSealedRecordForWallet:this.restorePasskeySealedRecordForWallet,onListError:XM,onRejectedRecord:ZM}):{kind:`completed`,attempted:0,restored:0,deferred:0};restorePasskeySealedRecordForWallet=async e=>{let{record:t,purpose:n}=e;if(n.authMethod!==`passkey`||t.authMethod!==`passkey`)return`deferred`;let r=String(n.thresholdSessionId||``).trim(),i=n.chainTarget;if(!r||t.curve!==`ecdsa`||!an(t.chainTarget,i)||!g(t.roleLocalMaterialRef.materialActivation,n.materialActivation))return`deferred`;let a=UM({thresholdSessionId:r,chainTarget:i,materialActivation:n.materialActivation}),o=VM.get(a);if(o)return WM(await o,`ready`);let s=Md({queueByKey:this.deps.thresholdEcdsaSigningQueueByKey,queueKey:zd({materialActivation:t.roleLocalMaterialRef.materialActivation}),walletId:B(e.walletId),enabled:!0,task:async()=>await this.restorePasskeyEcdsaRecord({walletId:e.walletId,record:t,purpose:{...n,authMethod:`passkey`}})}).finally(()=>{VM.delete(a)});return VM.set(a,s),WM(await s,`restored`)};async restorePasskeyEcdsaRecord(e){let t=e.purpose.thresholdSessionId,n=e.purpose.chainTarget,r=await Fo({thresholdSessionId:t,authMethod:`passkey`,curve:`ecdsa`,chainTarget:n});if(!r)return null;try{let r=await qM({walletId:e.walletId,factorAuthority:e.record.authority,materialActivation:e.purpose.materialActivation,nowMs:Date.now()});if(!r)return null;let i=await GM(e.record),a=r.token,o=String(i.authority.walletId).trim();if(!o||o!==String(e.walletId).trim())return null;let s=String(e.record.groupId||``).trim();if(!s)return null;let c={curve:`ecdsa`,authMethod:`passkey`,walletId:o,chainTarget:n,relayerUrl:e.record.relayerUrl,signingSessionSealKeyVersion:Ei(e.record.keyVersion),groupId:s,walletSessionToken:a,ecdsaRestore:i};return await CM({record:e.record,purpose:e.purpose,transport:c,groupId:s,rehydrateWarmSessionMaterial:this.rehydrateWarmSessionMaterial.bind(this),deletePersistedRecord:async()=>await JM({thresholdSessionId:t,chainTarget:n}),recordSessionMaterialRestored:async e=>await this.recordWarmSessionPolicyResult({curve:`ecdsa`,thresholdSessionId:t,chainTarget:n},t,e),readWarmSessionStatusFromWorker:async e=>await this.readWarmSessionStatus({thresholdSessionId:e}),resolveCurrentEcdsaCapabilityRuntime:this.deps.resolveCurrentEcdsaCapabilityRuntime,updatePersistedPolicy:async e=>await this.durableState.updatePersistedPolicy({thresholdSessionId:t,purpose:{curve:`ecdsa`,thresholdSessionId:t,chainTarget:n},...e})})}finally{await Oo(r)}}getWarmSessionStatuses=async e=>{let t=Array.from(new Set(e.thresholdSessionIds.map(e=>String(e||``).trim()).filter(Boolean)));if(!t.length)return{results:[]};let n=await this.sendMessage({type:`WARM_SESSION_STATUS_BATCH_READ`,id:this.generateMessageId(),payload:{thresholdSessionIds:t}});if(n.success){let e=rN(n.data);if(e)return e}return{results:t.map(e=>({thresholdSessionId:e,result:{ok:!1,code:`worker_error`,message:String(n.success?`Warm-session batch status read failed`:n.error)}}))}};claimWarmSessionMaterial=async e=>{let t=Bj(e),n=await this.sendMessage({type:`WARM_SESSION_MATERIAL_CLAIM`,id:this.generateMessageId(),payload:{thresholdSessionId:t,...typeof e.uses==`number`?{uses:e.uses}:{},...typeof e.consume==`boolean`?{consume:e.consume}:{},curve:e.purpose.curve}});if(!n.success)return{ok:!1,code:`worker_error`,message:n.error};let r=iN(n.data);return r?(await this.recordWarmSessionPolicyResult(e.purpose,t,r),r):{ok:!1,code:`worker_error`,message:`Warm-session claim failed`}};consumeWarmSessionUses=async e=>{let t=Bj(e),n=await this.sendMessage({type:`WARM_SESSION_MATERIAL_CONSUME`,id:this.generateMessageId(),payload:{thresholdSessionId:t,...typeof e.uses==`number`?{uses:e.uses}:{},curve:e.purpose.curve}});if(!n.success)return{ok:!1,code:`worker_error`,message:n.error};let r=nN(n.data);return r?(await this.recordWarmSessionPolicyResult(e.purpose,t,r),r):{ok:!1,code:`worker_error`,message:`Warm-session consume failed`}};clearVolatileWarmSessionMaterial=async e=>{let t=dh(e);if(t?.scope.kind!==`session`||!this.worker&&!this.initializationPromise)return;let n=await this.sendMessage({type:`WARM_SESSION_VOLATILE_MATERIAL_CLEAR`,id:this.generateMessageId(),payload:t});if(!n.success)throw Error(String(n.error||`Failed to clear volatile warm-session material`))};clearAllVolatileWarmSessionMaterial=async e=>{let t=dh(e);if(t?.scope.kind!==`all`||!this.worker&&!this.initializationPromise)return;let n=await this.sendMessage({type:`WARM_SESSION_VOLATILE_MATERIAL_CLEAR_ALL`,id:this.generateMessageId(),payload:t});if(!n.success)throw Error(String(n.error||`Failed to clear all volatile warm-session material entries`))};async sealAndPersistWarmSessionMaterial(e){if(this.deps.signingSessionPersistenceMode!==`sealed_refresh_v1`)return{ok:!1,code:`not_enabled`,message:`Passkey MPC session sealing requires sealed refresh mode`};let t=await this.sendMessage({type:`WARM_SESSION_SEAL_AND_PERSIST`,id:this.generateMessageId(),payload:e});if(t.success){let e=aN(t.data);if(e)return e}return{ok:!1,code:`worker_error`,message:String(t.success?`Signing-session seal and persist failed`:t.error)}}persistSigningSessionSealForThresholdSession=async e=>await this.durableState.persistSigningSessionSealForThresholdSession(e);recordWarmSessionPolicyResult=async(e,t,n)=>await this.durableState.recordPolicyResult(e,t,n);async rehydrateWarmSessionMaterial(e){if(this.deps.signingSessionPersistenceMode!==`sealed_refresh_v1`)return{ok:!1,code:`not_enabled`,message:`Passkey MPC session rehydration requires sealed refresh mode`};let t=await this.sendMessage({type:`WARM_SESSION_REHYDRATE`,id:this.generateMessageId(),payload:e});if(t.success){let e=nN(t.data);if(e)return e}return{ok:!1,code:`worker_error`,message:String(t.success?`Warm-session rehydrate failed`:t.error)}}async readWarmSessionStatus(e){let t=await this.sendMessage({type:`WARM_SESSION_STATUS_READ`,id:this.generateMessageId(),payload:e});if(t.success){let e=nN(t.data);if(e)return e}return{ok:!1,code:`worker_error`,message:String(t.success?`Warm-session status read failed`:t.error)}}async ensureWorkerReady(){if(!this.worker&&(this.initializationPromise||=this.createWorker().catch(e=>{throw this.initializationPromise=null,e}),await this.initializationPromise,!this.worker))throw Error(`Passkey MPC session worker failed to initialize`)}async createWorker(){let e=qf(fA.RUNTIME.PASSKEY_MPC_SESSION_WORKER,{worker:`passkeyMpcSession`,baseOrigin:this.workerBaseOrigin}),t=new Worker(e,{type:`module`,name:`PasskeyMpcSessionWorker`});t.addEventListener(`message`,this.boundHandleWorkerMessage),t.addEventListener(`error`,this.boundHandleWorkerError),this.worker=t}async sendMessage(e,t=6e4){await this.ensureWorkerReady();let n=this.worker;if(!n)throw Error(`Passkey MPC session worker not available`);let r=String(e.id||this.generateMessageId());if(this.pendingRequests.has(r))throw Error(`Duplicate Passkey MPC session worker request id: ${r}`);return await new Promise((i,a)=>{let o=setTimeout(()=>{this.rejectPendingRequest(r,Error(`Passkey MPC session worker communication timeout (${t}ms) for ${e.type}`))},t);this.pendingRequests.set(r,{id:r,timeoutId:o,resolve:i,reject:a});try{n.postMessage({...e,id:r})}catch(e){this.rejectPendingRequest(r,e instanceof Error?e:Error(String(e)))}})}handleWorkerMessage(e){if(e.currentTarget!==this.worker||e.target!==this.worker)return;let t=uu(e.data);if(!t)return;let n=t.id||``;if(!n)return;let r=this.pendingRequests.get(n);r&&(clearTimeout(r.timeoutId),this.pendingRequests.delete(n),r.resolve(t))}handleWorkerError(e){if(e.currentTarget!==this.worker||e.target!==this.worker)return;let t=this.worker;this.worker=null,this.initializationPromise=null,t?.removeEventListener(`message`,this.boundHandleWorkerMessage),t?.removeEventListener(`error`,this.boundHandleWorkerError),t?.terminate();let n=e,r=Error(`Passkey MPC session worker failed: ${String(n.message||`unknown error`)}`);for(let e of this.pendingRequests.values())clearTimeout(e.timeoutId),e.reject(r);this.pendingRequests.clear()}rejectPendingRequest(e,t){let n=this.pendingRequests.get(e);n&&(clearTimeout(n.timeoutId),this.pendingRequests.delete(e),n.reject(t))}generateMessageId(){return`passkey_mpc_session_${Date.now()}_${++this.messageId}`}};function uN(e){return new lN(e)}var dN=class{resolveOperationStepUpCredential;nearKeyMaterialStore;touchIdPrompt;touchConfirm;passkeyMpcSession;nearClient;userPreferencesManager;nonceCoordinator;relayerUrl;chains;nearExplorerUrl;tempoExplorerUrl;evmExplorerUrl;getTheme;workerTransport;constructor(e){this.resolveOperationStepUpCredential=e.resolveOperationStepUpCredential,this.nearKeyMaterialStore=e.nearKeyMaterialStore,this.touchIdPrompt=e.touchIdPrompt,this.touchConfirm=e.touchConfirm,this.passkeyMpcSession=e.passkeyMpcSession,this.nearClient=e.nearClient,this.userPreferencesManager=e.userPreferencesManager,this.nonceCoordinator=e.nonceCoordinator,this.relayerUrl=e.relayerUrl,this.chains=e.chains,this.nearExplorerUrl=e.nearExplorerUrl,this.tempoExplorerUrl=e.tempoExplorerUrl,this.evmExplorerUrl=e.evmExplorerUrl,this.getTheme=e.getTheme,this.workerTransport=e.workerTransport}setWorkerBaseOrigin(e){this.workerTransport.setWorkerBaseOrigin(e)}getContext(){return{resolveOperationStepUpCredential:this.resolveOperationStepUpCredential,requestWorkerOperation:this.requestWorkerOperation.bind(this),nearKeyMaterialStore:this.nearKeyMaterialStore,touchIdPrompt:this.touchIdPrompt,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,nearClient:this.nearClient,userPreferencesManager:this.userPreferencesManager,nonceCoordinator:this.nonceCoordinator,chains:this.chains,getTheme:this.getTheme,rpIdOverride:this.touchIdPrompt.getRpId(),nearExplorerUrl:this.nearExplorerUrl,tempoExplorerUrl:this.tempoExplorerUrl,evmExplorerUrl:this.evmExplorerUrl,relayerUrl:this.relayerUrl}}async clearEcdsaClientWorkerState(e){await this.workerTransport.clearEcdsaClientWorkerState(e)}async prewarmEcdsaRegistrationCrypto(){return await this.workerTransport.prewarmEcdsaRegistrationCrypto()}prewarmNearSigner(){this.workerTransport.prewarmNearSigner()}async prewarmEmailOtpYao(e){return await this.workerTransport.prewarmEmailOtpYao(e)}requestWorkerOperation(e){return this.workerTransport.requestOperation(e)}};const fN={TIMEOUTS:{DEFAULT:6e4,TRANSACTION:6e4,REGISTRATION:6e4},WORKER:{URL:fA.RUNTIME.SIGNER_WORKER,TYPE:`module`,NAME:`Web3AuthnSignerWorker`},ECDSA_DERIVATION_CLIENT_WORKER:{URL:fA.RUNTIME.ECDSA_DERIVATION_CLIENT_WORKER,TYPE:`module`,NAME:`Web3AuthnEcdsaDerivationClientWorker`},ECDSA_PRESIGN_CLIENT_WORKER:{URL:fA.RUNTIME.ECDSA_PRESIGN_CLIENT_WORKER,TYPE:`module`,NAME:`Web3AuthnEcdsaPresignClientWorker`},ECDSA_ONLINE_CLIENT_WORKER:{URL:fA.RUNTIME.ECDSA_ONLINE_CLIENT_WORKER,TYPE:`module`,NAME:`Web3AuthnEcdsaOnlineClientWorker`},RETRY:{MAX_ATTEMPTS:3,BACKOFF_MS:1e3}};function pN(e){switch(e){case`evmCrypto`:return`/sdk/workers/evm-crypto.worker.js`;case`tempoSigner`:return`/sdk/workers/tempo-signer.worker.js`}}function mN(e){let t=typeof window<`u`?window:{};switch(e){case`evmCrypto`:return typeof t.__SEAMS_EVM_CRYPTO_WORKER_URL__==`string`?t.__SEAMS_EVM_CRYPTO_WORKER_URL__:void 0;case`tempoSigner`:return typeof t.__SEAMS_TEMPO_SIGNER_WORKER_URL__==`string`?t.__SEAMS_TEMPO_SIGNER_WORKER_URL__:void 0}}function hN(e,t){let n=t?.baseOrigin||Kf()||(typeof window<`u`?window.location.origin:``)||`https://invalid.local`,r=mN(e)||pN(e);return/^https?:\/\//i.test(r)?r:new URL(r,n).toString()}function gN(e){let t=e?.baseOrigin||Kf()||(typeof window<`u`?window.location.origin:``)||`https://invalid.local`,n=(typeof window<`u`&&typeof window.__SEAMS_EMAIL_OTP_WORKER_URL__==`string`?String(window.__SEAMS_EMAIL_OTP_WORKER_URL__):``)||`/sdk/workers/email-otp.worker.js`;return/^https?:\/\//i.test(n)?n:new URL(n,t).toString()}function _N(e){let t=e?.baseOrigin||Kf()||(typeof window<`u`?window.location.origin:``)||`https://invalid.local`,n=(typeof window<`u`&&typeof window.__SEAMS_WALLET_CUSTODY_CEREMONY_WORKER_URL__==`string`?String(window.__SEAMS_WALLET_CUSTODY_CEREMONY_WORKER_URL__):``)||`/sdk/workers/wallet-custody-ceremony.worker.js`;return/^https?:\/\//i.test(n)?n:new URL(n,t).toString()}const vN={AttachDerivationToPresign:`attach_ecdsa_derivation_to_presign_v1`,AttachLinkedHolderToPresign:`attach_linked_holder_to_ecdsa_presign_v1`,AttachPresignToOnline:`attach_ecdsa_presign_to_online_v1`};`A`.repeat(43);function yN(e){return Math.max(0,Math.round(performance.now()-e))}function bN(e){throw Error(`Unsupported Email OTP Yao prewarm result: ${String(e)}`)}function xN(e){throw Error(`Unsupported Email OTP Yao prewarm request: ${String(e)}`)}function SN(e,t,n){console.warn(`[WorkerTransport] operation timed out; resetting worker`,{kind:e,type:String(t),timeoutMs:n})}function CN(e){return ve(e,32,`signer worker request IDs`)}function wN(e){return e?.type===wu.WORKER_READY||e?.ready===!0}function TN(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.progress===!0}function EN(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.ok===!0&&`result`in e}function DN(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.ok===!1&&typeof e.error==`string`}function ON(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.ok===!0&&`result`in e}function kN(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.ok===!1&&typeof e.error==`string`}function AN(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&e.progress===!0&&`payload`in e}const jN=new class{workerBaseOrigin;workers=new Map;pendingByKind=new Map;messageHandlers=new Map;errorHandlers=new Map;presignAuthorityKind=null;presignOnlineConnected=!1;ecdsaRegistrationCryptoPrewarmPromise=null;emailOtpYaoPrewarmPromise=null;setWorkerBaseOrigin(e){if(this.workerBaseOrigin!==e){this.workerBaseOrigin=e,this.emailOtpYaoPrewarmPromise=null;for(let e of Array.from(this.workers.keys()))this.resetWorker(e)}}prewarmNearSigner(){this.getOrCreateWorker(`nearSigner`)}async clearEcdsaClientWorkerState(e){switch(e.kind){case`all`:this.resetWorker(`ecdsaPresignClient`);return;case`wallet`:if(Qu(e.walletId),!this.workers.has(`ecdsaPresignClient`))return;await this.requestOperation({kind:`ecdsaPresignClient`,request:{type:ku.ClearWallet,timeoutMs:2e4,payload:{walletId:e.walletId}}});return}}async prewarmEcdsaRegistrationCrypto(){let e=this.ecdsaRegistrationCryptoPrewarmPromise;if(e)return await e;let t=this.requestEcdsaRegistrationCryptoPrewarm();this.ecdsaRegistrationCryptoPrewarmPromise=t;let n=await t;return n.kind===`failed`&&this.ecdsaRegistrationCryptoPrewarmPromise===t&&(this.ecdsaRegistrationCryptoPrewarmPromise=null),n}async requestEcdsaRegistrationCryptoPrewarm(){let e=performance.now();try{return await this.requestDerivationOperation({type:Eu.PrewarmEcdsaRegistrationCrypto,payload:{}}),{kind:`succeeded`,wasmInitMs:yN(e)}}catch{return{kind:`failed`,wasmInitMs:yN(e)}}}async prewarmEmailOtpYao(e={kind:`requested`}){switch(e.kind){case`not_requested`:return{kind:`not_requested`,elapsedMs:0,workerPrewarmMs:0,yaoWasmInitMs:0};case`requested`:break;default:return xN(e)}let t=this.emailOtpYaoPrewarmPromise;if(t)return await t;let n=this.requestEmailOtpYaoPrewarm();this.emailOtpYaoPrewarmPromise=n;let r=await n;return r.kind===`failed`&&this.emailOtpYaoPrewarmPromise===n&&(this.emailOtpYaoPrewarmPromise=null),r}async requestEmailOtpYaoPrewarm(){let e=performance.now();try{let t=await this.requestOperation({kind:`emailOtp`,request:{type:`prewarmEmailOtpRegistrationCrypto`,payload:{}}}),n=yN(e);switch(t.kind){case`succeeded`:return{kind:`succeeded`,elapsedMs:n,workerPrewarmMs:n,yaoWasmInitMs:t.elapsedMs};case`failed`:return{kind:`failed`,elapsedMs:n,workerPrewarmMs:n,yaoWasmInitMs:t.elapsedMs,failureStage:t.failureStage};default:return bN(t)}}catch{let t=yN(e);return{kind:`failed`,elapsedMs:t,workerPrewarmMs:t,yaoWasmInitMs:0,failureStage:`worker_ready`}}}async requestOperation(e){return e.kind===`nearSigner`?await this.requestNearOperation(e.request):e.kind===`ecdsaDerivationClient`?e.request.type===Eu.DisposeLinkedDeviceEcdsaHolderMaterials&&!this.workers.has(`ecdsaDerivationClient`)?{type:Du.DisposeLinkedDeviceEcdsaHolderMaterialsSuccess,payload:e.request.payload}:await this.requestDerivationOperation(e.request):e.kind===`ecdsaPresignClient`?(this.connectPresignAuthorityChannel(e.request),await this.requestRpcOperation(`ecdsaPresignClient`,e.request)):e.kind===`ecdsaOnlineClient`?(this.connectPresignOnlineChannel(),await this.requestRpcOperation(`ecdsaOnlineClient`,e.request)):e.kind===`evmCrypto`?await this.requestRpcOperation(`evmCrypto`,e.request):e.kind===`tempoSigner`?await this.requestRpcOperation(`tempoSigner`,e.request):e.kind===`walletCustodyCeremony`?await this.requestRpcOperation(`walletCustodyCeremony`,e.request):e.request.type===`clearEmailOtpWarmSessionMaterial`&&!this.workers.has(`emailOtp`)?{ok:!0,cleared:!0}:await this.requestRpcOperation(e.kind,e.request)}async requestNearOperation({type:e,payload:t,onEvent:n,timeoutMs:r=fN.TIMEOUTS.DEFAULT,transfer:i}){let a=this.getOrCreateWorker(`nearSigner`),o=CN(`nearSigner`);return await new Promise((s,c)=>{let l=setTimeout(()=>{this.rejectRequest(`nearSigner`,o,new Cu({message:`Worker operation timed out after ${r}ms`,code:`TIMEOUT`,workerKind:`nearSigner`})),SN(`nearSigner`,e,r),this.resetWorker(`nearSigner`);try{let e=Math.round(r/1e3);window.postMessage({type:`MODAL_TIMEOUT`,payload:`Timed out after ${e}s, try again`},`*`)}catch{}},r);this.getPendingMap(`nearSigner`).set(o,{resolve:e=>s(e),reject:c,onEvent:n?e=>n(e):void 0,timeoutId:l});try{a.postMessage({id:o,type:e,payload:t},i||[])}catch(e){this.rejectRequest(`nearSigner`,o,new Cu({message:`[nearSigner] failed to postMessage: ${L(e)}`,code:`WORKER_POSTMESSAGE_ERROR`,workerKind:`nearSigner`}))}})}async requestDerivationOperation({type:e,payload:t,timeoutMs:n=fN.TIMEOUTS.DEFAULT,transfer:r}){let i=this.getOrCreateWorker(`ecdsaDerivationClient`),a=CN(`ecdsaDerivationClient`);return await new Promise((o,s)=>{let c=setTimeout(()=>{this.rejectRequest(`ecdsaDerivationClient`,a,new Cu({message:`Worker operation timed out after ${n}ms`,code:`TIMEOUT`,workerKind:`ecdsaDerivationClient`})),SN(`ecdsaDerivationClient`,e,n),this.resetWorker(`ecdsaDerivationClient`)},n);this.getPendingMap(`ecdsaDerivationClient`).set(a,{resolve:e=>o(e),reject:s,timeoutId:c});try{i.postMessage({id:a,type:e,payload:t},r||[])}catch(e){this.rejectRequest(`ecdsaDerivationClient`,a,new Cu({message:`[ecdsaDerivationClient] failed to postMessage: ${L(e)}`,code:`WORKER_POSTMESSAGE_ERROR`,workerKind:`ecdsaDerivationClient`}))}})}async requestRpcOperation(e,t){let n=this.getOrCreateWorker(e),r=CN(e),i=Math.floor(Number(t.timeoutMs)),a=Number.isFinite(i)&&i>0?i:2e4;return await new Promise((i,o)=>{let s=setTimeout(()=>{this.rejectRequest(e,r,new Cu({message:`Worker operation timed out after ${a}ms`,code:`TIMEOUT`,workerKind:e})),SN(e,t.type,a),this.resetWorker(e)},a);this.getPendingMap(e).set(r,{resolve:e=>i(e),reject:o,onEvent:t.onEvent,timeoutId:s});try{n.postMessage({id:r,type:t.type,payload:t.payload},t.transfer||[])}catch(t){this.rejectRequest(e,r,new Cu({message:`[${e}] failed to postMessage: ${L(t)}`,code:`WORKER_POSTMESSAGE_ERROR`,workerKind:e}))}})}getOrCreateWorker(e){let t=this.workers.get(e);if(t)return t;let n=this.createWorker(e),r=t=>{this.handleWorkerMessage(e,t)},i=t=>{this.handleWorkerError(e,t)};return n.addEventListener(`message`,r),n.addEventListener(`error`,i),this.workers.set(e,n),this.messageHandlers.set(e,r),this.errorHandlers.set(e,i),n}connectPresignAuthorityChannel(e){if(e.type!==ku.ListAvailable&&e.type!==ku.SessionInit)return;let t=this.getOrCreateWorker(`ecdsaPresignClient`),n=this.parsePresignAuthorityKind(e.payload);switch(n){case`role_local_derivation_handle`:this.connectDerivationPresignChannel(t,n);return;case`linked_holder_signing_material`:this.connectDerivationPresignChannel(t,n);return;default:}}parsePresignAuthorityKind(e){if(!A(e)||!A(e.authority))throw Error(`ECDSA presign init authority is required`);switch(e.authority.kind){case`role_local_derivation_handle`:case`linked_holder_signing_material`:return e.authority.kind;default:throw Error(`ECDSA presign init authority kind is invalid`)}}createLinkedHolderPresignAuthorityPortV1(){let e=this.getOrCreateWorker(`ecdsaPresignClient`);nd();let t=new MessageChannel;return e.postMessage({kind:vN.AttachLinkedHolderToPresign,port:t.port1},[t.port1]),t.port2}connectDerivationPresignChannel(e,t){if(this.presignAuthorityKind===t)return;this.presignAuthorityKind!==null&&nd();let n=this.getOrCreateWorker(`ecdsaDerivationClient`),r=new MessageChannel,i=t===`role_local_derivation_handle`?vN.AttachDerivationToPresign:vN.AttachLinkedHolderToPresign;n.postMessage({kind:i,port:r.port1},[r.port1]),e.postMessage({kind:i,port:r.port2},[r.port2]),this.presignAuthorityKind=t}connectPresignOnlineChannel(){if(this.presignOnlineConnected)return;let e=this.getOrCreateWorker(`ecdsaPresignClient`),t=this.getOrCreateWorker(`ecdsaOnlineClient`),n=new MessageChannel;e.postMessage({kind:vN.AttachPresignToOnline,port:n.port1},[n.port1]),t.postMessage({kind:vN.AttachPresignToOnline,port:n.port2},[n.port2]),this.presignOnlineConnected=!0}createWorker(e){try{if(e===`nearSigner`){let e=qf(fN.WORKER.URL,{worker:`signer`,baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:fN.WORKER.TYPE,name:fN.WORKER.NAME})}if(e===`ecdsaDerivationClient`){let e=qf(fN.ECDSA_DERIVATION_CLIENT_WORKER.URL,{worker:`ecdsaDerivationClient`,baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:fN.ECDSA_DERIVATION_CLIENT_WORKER.TYPE,name:fN.ECDSA_DERIVATION_CLIENT_WORKER.NAME})}if(e===`ecdsaPresignClient`){let e=qf(fN.ECDSA_PRESIGN_CLIENT_WORKER.URL,{worker:`ecdsaPresignClient`,baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:fN.ECDSA_PRESIGN_CLIENT_WORKER.TYPE,name:fN.ECDSA_PRESIGN_CLIENT_WORKER.NAME})}if(e===`ecdsaOnlineClient`){let e=qf(fN.ECDSA_ONLINE_CLIENT_WORKER.URL,{worker:`ecdsaOnlineClient`,baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:fN.ECDSA_ONLINE_CLIENT_WORKER.TYPE,name:fN.ECDSA_ONLINE_CLIENT_WORKER.NAME})}if(e===`emailOtp`){let e=gN({baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:`module`,name:`email-otp-worker`})}if(e===`walletCustodyCeremony`){let e=_N({baseOrigin:this.workerBaseOrigin});return new Worker(e,{type:`module`,name:`wallet-custody-ceremony-worker`})}let t=hN(e,{baseOrigin:this.workerBaseOrigin});return new Worker(t,{type:`module`,name:`${e}-worker`})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Failed to create ${e} worker: ${n}`)}}handleWorkerMessage(e,t){let n=t.data;if(wN(n))return;if(e===`nearSigner`){this.handleNearWorkerMessage(n);return}if(e===`ecdsaDerivationClient`){this.handleEcdsaDerivationWorkerMessage(n);return}if(AN(n)){let t=this.getPendingMap(e).get(n.id);if(!t)return;t.onEvent?.(n.payload);return}if(ON(n)){this.resolveRequest(e,n.id,n.result);return}if(kN(n)){this.rejectRequest(e,n.id,new Cu({message:n.error||`[${e}] worker error`,code:n.code,coreCode:n.coreCode,workerKind:e}));return}let r=A(n)&&typeof n.id==`string`?n.id:void 0;if(r&&this.getPendingMap(e).has(r)){this.rejectRequest(e,r,new Cu({message:`Malformed worker response frame for request ${r}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:e}));return}this.getPendingMap(e).size!==0&&(this.rejectAllPending(e,new Cu({message:`Unknown worker response frame: ${JSON.stringify(n)}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:e})),this.resetWorker(e))}handleNearWorkerMessage(e){if(TN(e)){let t=this.getPendingMap(`nearSigner`).get(e.id);if(!t)return;t.onEvent?.(e.payload);return}if(EN(e)){this.resolveNearResponse(e.id,e.result);return}if(DN(e)){this.rejectRequest(`nearSigner`,e.id,new Cu({message:e.error,code:e.code,coreCode:e.coreCode,workerKind:`nearSigner`}));return}let t=A(e)&&typeof e.id==`string`?e.id:void 0;if(t&&this.getPendingMap(`nearSigner`).has(t)){this.rejectRequest(`nearSigner`,t,new Cu({message:`Malformed worker response frame for request ${t}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:`nearSigner`}));return}this.getPendingMap(`nearSigner`).size!==0&&(this.rejectAllPending(`nearSigner`,new Cu({message:`Unknown worker response frame: ${JSON.stringify(e)}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:`nearSigner`})),this.resetWorker(`nearSigner`))}handleEcdsaDerivationWorkerMessage(e){if(ON(e)){this.resolveRequest(`ecdsaDerivationClient`,e.id,e.result);return}if(kN(e)){this.rejectRequest(`ecdsaDerivationClient`,e.id,new Cu({message:e.error||`[ecdsaDerivationClient] worker error`,code:e.code,coreCode:e.coreCode,workerKind:`ecdsaDerivationClient`}));return}let t=A(e)&&typeof e.id==`string`?e.id:void 0;if(t&&this.getPendingMap(`ecdsaDerivationClient`).has(t)){this.rejectRequest(`ecdsaDerivationClient`,t,new Cu({message:`Malformed worker response frame for request ${t}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:`ecdsaDerivationClient`}));return}this.getPendingMap(`ecdsaDerivationClient`).size!==0&&(this.rejectAllPending(`ecdsaDerivationClient`,new Cu({message:`Unknown worker response frame: ${JSON.stringify(e)}`,code:`WORKER_PROTOCOL_ERROR`,workerKind:`ecdsaDerivationClient`})),this.resetWorker(`ecdsaDerivationClient`))}resolveNearResponse(e,t){this.getPendingMap(`nearSigner`).get(e)&&this.resolveRequest(`nearSigner`,e,t)}handleWorkerError(e,t){let n=new Cu({message:`[${e}] worker runtime error: ${t.message||`unknown error`}`,code:`WORKER_RUNTIME_ERROR`,workerKind:e});this.rejectAllPending(e,n),this.resetWorker(e)}getPendingMap(e){let t=this.pendingByKind.get(e);if(t)return t;let n=new Map;return this.pendingByKind.set(e,n),n}resolveRequest(e,t,n){let r=this.getPendingMap(e).get(t);r&&(this.clearRequest(e,t),r.resolve(n))}rejectRequest(e,t,n){let r=this.getPendingMap(e).get(t);r&&(this.clearRequest(e,t),r.reject(n))}rejectAllPending(e,t){let n=Array.from(this.getPendingMap(e).keys());for(let r of n)this.rejectRequest(e,r,t)}clearRequest(e,t){let n=this.getPendingMap(e).get(t);n&&(n.timeoutId&&clearTimeout(n.timeoutId),this.getPendingMap(e).delete(t))}resetWorker(e){e===`ecdsaDerivationClient`?(this.presignAuthorityKind=null,this.resetWorker(`ecdsaPresignClient`)):e===`ecdsaPresignClient`?(this.presignAuthorityKind=null,this.presignOnlineConnected=!1,this.resetWorker(`ecdsaOnlineClient`),this.terminateWorkerOnly(`ecdsaDerivationClient`)):e===`ecdsaOnlineClient`&&(this.presignOnlineConnected=!1),(e===`ecdsaDerivationClient`||e===`ecdsaPresignClient`||e===`ecdsaOnlineClient`)&&nd(),this.terminateWorkerOnly(e)}terminateWorkerOnly(e){let t=this.workers.get(e);if(!t)return;this.rejectAllPending(e,Error(`${e} worker was reset`));let n=this.messageHandlers.get(e),r=this.errorHandlers.get(e);n&&t.removeEventListener(`message`,n),r&&t.removeEventListener(`error`,r),t.terminate(),this.workers.delete(e),this.messageHandlers.delete(e),this.errorHandlers.delete(e),e===`walletCustodyCeremony`&&Ua()}};function MN(){return jN}function NN(e){let t=String(e.metadata?.walletId||``).trim();if(!t)return null;try{return B(t)}catch{return null}}function PN(e){let t=[],n=new Set;for(let r of e){let e=NN(r);if(!e)continue;let i=String(e);n.has(i)||(n.add(i),t.push(e))}return t}async function FN(e){let t=PN(await e.store.listAccountSignersByProfile({profileId:e.profileId,status:`active`}).catch(()=>[]));return t.length===1?t[0]:null}var IN=class{confirmationConfigChangeListeners=new Set;currentWalletChangeListeners=new Set;currentWalletId=null;lifecycle={kind:`active`,revision:0};writeQueue=Promise.resolve();confirmationConfig=kt;unsubscribeFromIndexedDB;constructor(e){this.deps=e,this.subscribeToIndexedDBChanges()}onConfirmationConfigChange(e){return this.confirmationConfigChangeListeners.add(e),()=>{this.confirmationConfigChangeListeners.delete(e)}}onCurrentWalletChange(e){return this.currentWalletChangeListeners.add(e),()=>{this.currentWalletChangeListeners.delete(e)}}notifyConfirmationConfigChange(e){if(this.confirmationConfigChangeListeners.size!==0)for(let t of this.confirmationConfigChangeListeners)try{t(e)}catch{}}notifyCurrentWalletChange(e){if(this.currentWalletChangeListeners.size!==0)for(let t of this.currentWalletChangeListeners)try{t(e)}catch{}}sanitizeConfirmationConfig(e){if(!e)return{};let{uiMode:t,behavior:n,autoProceedDelay:r}=e,i={};return t!=null&&(i.uiMode=t),n!=null&&(i.behavior=n),r!=null&&(i.autoProceedDelay=r),i}mergeConfirmationConfig(e,t){let n={...e,...t};return{uiMode:n.uiMode??kt.uiMode,behavior:n.behavior??kt.behavior,autoProceedDelay:n.autoProceedDelay??kt.autoProceedDelay}}async initFromIndexedDB(){await this.loadUserSettings().catch(e=>{console.warn(`[SigningEngine]: Failed to initialize user settings:`,e)})}subscribeToIndexedDBChanges(){this.unsubscribeFromIndexedDB=this.deps.store.onChange(e=>{this.handleIndexedDBEvent(e).catch(e=>{console.warn(`[SigningEngine]: Error handling IndexedDB event:`,e)})})}async handleIndexedDBEvent(e){switch(e.type){case`preferences-updated`:case`user-updated`:this.currentWalletId&&String(e.accountId)===String(this.currentWalletId)&&await this.reloadUserSettings();break;case`user-deleted`:this.currentWalletId&&String(e.accountId)===String(this.currentWalletId)&&(this.invalidateReads(),this.currentWalletId=null,this.confirmationConfig=kt,this.notifyCurrentWalletChange(null),this.notifyConfirmationConfigChange(this.confirmationConfig));break}}destroy(){this.lifecycle={kind:`disposed`},this.unsubscribeFromIndexedDB&&=(this.unsubscribeFromIndexedDB(),void 0),this.confirmationConfigChangeListeners.clear(),this.currentWalletChangeListeners.clear()}getCurrentWalletId(){return this.currentWalletId}getConfirmationConfig(){return this.confirmationConfig}setCurrentWallet(e){this.invalidateReads();let t=this.currentWalletId;this.currentWalletId=e,t!==e&&(this.confirmationConfig=kt,this.notifyCurrentWalletChange(e),this.notifyConfirmationConfigChange(this.confirmationConfig)),this.deps.store.isDisabled()||this.loadSettingsForWallet(e).catch(()=>void 0)}projectCurrentWallet(e){let t=this.currentWalletId;this.setCurrentWallet(e),t&&String(t)===String(e)&&this.notifyCurrentWalletChange(e)}assertActive(){if(this.lifecycle.kind===`disposed`)throw Error(`Wallet preferences are disposed`)}invalidateReads(){if(this.lifecycle.kind===`disposed`)throw Error(`Wallet preferences are disposed`);return++this.lifecycle.revision}async loadSettingsForWallet(e){if(this.deps.store.isDisabled())return;let t=this.invalidateReads(),n=await this.deps.store.getWalletPreferences(e);this.lifecycle.kind!==`active`||this.lifecycle.revision!==t||this.currentWalletId!==e||(this.confirmationConfig=this.mergeConfirmationConfig(kt,this.sanitizeConfirmationConfig(n.confirmationConfig)),this.notifyConfirmationConfigChange(this.confirmationConfig))}async reloadUserSettings(){let e=this.getCurrentWalletId();e&&await this.loadSettingsForWallet(e)}setConfirmationBehavior(e){return this.setConfirmationConfig({behavior:e})}setConfirmationConfig(e){this.invalidateReads();let t=this.currentWalletId,n=this.sanitizeConfirmationConfig(e),r=this.writeQueue.then(this.commitConfirmationConfig.bind(this,t,n));return this.writeQueue=r.then(LN,LN),r}async commitConfirmationConfig(e,t){this.assertActive();let n=this.confirmationConfig;if(e!==null){if(this.deps.store.isDisabled())throw Error(`Wallet preference storage is unavailable`);let t=await this.deps.store.getWalletPreferences(e);n=this.mergeConfirmationConfig(kt,this.sanitizeConfirmationConfig(t.confirmationConfig))}let r=this.mergeConfirmationConfig(n,t);if(e!==null&&(this.assertActive(),await this.deps.store.updateWalletPreferences({walletId:e,preferences:{confirmationConfig:r}})===null))throw Error(`Wallet preference target does not exist`);this.lifecycle.kind===`active`&&this.currentWalletId===e&&(this.invalidateReads(),this.confirmationConfig=r,this.notifyConfirmationConfigChange(r))}async loadUserSettings(){if(this.deps.store.isDisabled())return;let e=this.invalidateReads(),t=await Qs(this.deps.store).catch(()=>null);if(!t){console.debug(`[SigningEngine]: No last user found, using default settings`);return}let n=await FN({store:this.deps.store,profileId:t.profileId});if(!n){console.debug(`[SigningEngine]: Last profile has no wallet-bound signer metadata`);return}this.lifecycle.kind!==`active`||this.lifecycle.revision!==e||(this.currentWalletId=n,this.confirmationConfig=kt,this.notifyCurrentWalletChange(n),this.notifyConfirmationConfigChange(this.confirmationConfig),await this.loadSettingsForWallet(n))}};function LN(){}function RN(e){let t=e.seamsWebConfigs.wallet,n=new Mf(t.mode===`direct`?t.rpId:t.iframe.rpIdOverride),r=new IN({store:e.stores.userPreferencesStore}),i=e.seamsWebConfigs.network.chains,a=vu({evmNonceBackend:uf({chains:i}),nearClient:e.nearClient,nonceLaneCoordinationStore:e.stores.nonceLaneCoordinationStore}),o=Ge(i,`near`),s=Ge(i,`tempo`),c=Ge(i,`evm`),l=uN({signingSessionPersistenceMode:e.seamsWebConfigs.signing.sessionPersistenceMode,thresholdEcdsaSigningQueueByKey:e.thresholdEcdsaSigningQueueByKey,resolveCurrentEcdsaCapabilityRuntime:e.resolveActiveEcdsaCapabilityRuntime}),u=xj({},{touchIdPrompt:n,nearClient:e.nearClient,webauthnCredentialStore:e.stores.webauthnCredentialStore,passkeyAuthenticatorStore:e.stores.passkeyAuthenticatorStore,userPreferencesManager:r,nonceCoordinator:a,operationStepUpPreparation:qd,nearImplicitAccountFunding:$d,relayerUrl:e.seamsWebConfigs.network.relayer.url,chains:i,rpIdOverride:n.getRpId(),nearExplorerUrl:o,tempoExplorerUrl:s,evmExplorerUrl:c,getTheme:e.getTheme,getAppearance:e.getAppearance,loadEcdsaRoleLocalReadyRecord:e.loadEcdsaRoleLocalReadyRecord,surfaceMeasurementBinding:{kind:`disabled`}});return{touchIdPrompt:n,userPreferencesManager:r,nonceCoordinator:a,touchConfirm:u,passkeyMpcExport:zj(u.getContext()),passkeyMpcSession:l,signerWorkerManager:new dN({resolveOperationStepUpCredential:e.resolveOperationStepUpCredential,nearKeyMaterialStore:e.stores.nearKeyMaterialStore,touchIdPrompt:n,touchConfirm:u,passkeyMpcSession:l,nearClient:e.nearClient,userPreferencesManager:r,nonceCoordinator:a,relayerUrl:e.seamsWebConfigs.network.relayer.url,workerTransport:MN(),chains:i,nearExplorerUrl:o,tempoExplorerUrl:s,evmExplorerUrl:c,getTheme:e.getTheme})}}const zN=new Map;function BN(e){return typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null?null:new Map(Object.entries(e))}function VN(e,t){let n=e.get(t);if(typeof n==`string`)return n.trim()||void 0}function HN(e){if(typeof e!=`string`)return null;let t=e.trim().toLowerCase();return t===`none`?`none`:t===`sealed_refresh_v1`?`sealed_refresh_v1`:null}function UN(e){let t=BN(e);if(!t)return null;let n=HN(t.get(`mode`));if(!n)return null;if(n===`none`)return{mode:`none`};let r=BN(t.get(`protocol`)),i=r?VN(r,`algorithm`):void 0,a=r?VN(r,`groupId`):void 0,o=VN(t,`currentKeyVersion`);return i!==`shamir3pass-v2`||a!==`rfc2409-group2`||!o?null:{mode:`sealed_refresh_v1`,protocol:{algorithm:et,groupId:Ze},currentKeyVersion:o}}function WN(e){let t=BN(e);return t&&UN(BN(t.get(`capabilities`))?.get(`signingSessionSeal`))||{mode:`none`}}function GN(e){return e.signing.sessionPersistenceMode===`sealed_refresh_v1`?!(e.wallet.mode===`iframe`&&!If()):!1}function KN(e){return[String(e.network.relayer.url||``).trim(),String(e.signing.sessionPersistenceMode||``).trim().toLowerCase(),et,Ze,If()?`wallet-host`:`app`,e.wallet.mode].join(`|`)}function qN(e,t){let n=Number(e);return!Number.isFinite(n)||n<=0?t:Math.max(250,Math.floor(n))}function JN(e,t){let n=Error(e);return n.code=t,n}function YN(e){if(e.signal?.aborted)throw JN(`Parity check aborted`,`sealed_refresh_parity_aborted`);let t=new AbortController,n=setTimeout(()=>t.abort(`timeout`),e.timeoutMs),r=()=>{try{t.abort(e.signal?.reason)}catch{}};return e.signal?.addEventListener(`abort`,r,{once:!0}),e.task(t.signal).finally(()=>{clearTimeout(n),e.signal?.removeEventListener(`abort`,r)}).catch(e=>{let n=e instanceof Error?e.message:String(e||`Unknown error`);throw t.signal.aborted?JN(`[sealed-refresh-parity] Failed to fetch relayer well-known capabilities: ${n}`,`sealed_refresh_parity_fetch_failed`):e})}async function XN(e){let t=String(e.relayerUrl||``).trim();if(!t)throw JN(`[sealed-refresh-parity] Missing relayer URL for capability check`,`sealed_refresh_parity_invalid_config`);let n=e.fetchImpl||fetch.bind(globalThis),r=qN(e.timeoutMs,8e3),i=`${t.replace(/\/+$/,``)}/.well-known/webauthn`;return await YN({timeoutMs:r,task:async e=>{let t=await n(i,{method:`GET`,headers:{Accept:`application/json`},signal:e});if(!t.ok)throw JN(`[sealed-refresh-parity] Well-known endpoint returned HTTP ${t.status}`,`sealed_refresh_parity_http_error`);let r={};try{r=await t.json()}catch{throw JN(`[sealed-refresh-parity] Well-known response is not valid JSON`,`sealed_refresh_parity_invalid_payload`)}return WN(r)}})}async function ZN(e){if(!GN(e.configs))return;let t=KN(e.configs),n=zN.get(t);if(n){await n;return}let r=(async()=>{let t=String(e.configs.network.relayer.url||``).trim(),n=e.configs.signing.sessionPersistenceMode,r=await XN({relayerUrl:t,fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs}),i=[];if(r.mode!==n&&i.push(`mode`),r.mode===`sealed_refresh_v1`&&r.protocol.algorithm!==`shamir3pass-v2`&&i.push(`algorithm`),r.mode===`sealed_refresh_v1`&&r.protocol.groupId!==`rfc2409-group2`&&i.push(`groupId`),i.length>0)throw JN(`[sealed-refresh-parity] Client/server mismatch for fields: ${i.join(`, `)}. client={mode:${n},algorithm:${et},groupId:${Ze}} server={mode:${r.mode}${r.mode===`sealed_refresh_v1`?`,algorithm:${r.protocol.algorithm},groupId:${r.protocol.groupId}`:``}}`,`sealed_refresh_parity_mismatch`)})().catch(e=>{throw zN.delete(t),e});zN.set(t,r),await r}function QN(e,t){let n=String(e??``).trim();if(!n)throw Error(`${t} is required`);return n}function $N(e,t){let n=Number(e);if(!Number.isSafeInteger(n)||n<1)throw Error(`${t} must be a positive integer`);return n}function eP(e){let t=n(e);if(!t.ok)throw Error(`thresholdSessionId is invalid`);return t.value}function tP(e){let t=e.bootstrap.session,n=e.bootstrap.capability;if(!t.walletId||!t.walletSessionId||!t.quotaId||!t.thresholdSessionId)throw Error(`Wallet custody Ed25519 bootstrap Wallet Session binding is invalid`);if(e.operationCredential.walletSessionId!==t.walletSessionId)throw Error(`Wallet custody Ed25519 operation credential does not identify the bootstrap session`);let r=String(e.identity.walletId);if(String(t.walletId)!==r||t.nearAccountId!==String(e.identity.nearAccountId)||t.thresholdSessionId!==e.identity.expectedThresholdSessionId||n.applicationBinding.wallet_id!==r||n.applicationBinding.key_creation_signer_slot!==e.identity.signerSlot||n.nearAccountId!==String(e.identity.nearAccountId)||n.lifecycle.accountId!==r||n.lifecycle.thresholdSessionId!==e.identity.expectedThresholdSessionId||n.lifecycle.signerSetId!==String(Xi(e.identity.signerSlot))||`ed25519:${dn(Uint8Array.from(n.registeredPublicKey))}`!==e.identity.expectedOperationalPublicKey)throw Error(`Wallet custody Ed25519 bootstrap identity changed`)}async function nP(e){let t=e.bootstrap.session,n=t.authorityScope;if(n.kind!==`email_otp`)throw Error(`Wallet custody Ed25519 bootstrap returned another authority kind`);let r=QN(e.providerSubject,`providerSubject`);if(n.providerUserId!==r)throw Error(`Wallet custody Ed25519 bootstrap provider subject changed`);if(e.authority.walletId!==t.walletId)throw Error(`Wallet custody Ed25519 Wallet Session authority changed wallets`);let i=Ao({walletId:String(t.walletId),nearAccountId:t.nearAccountId,nearEd25519SigningKeyId:t.nearEd25519SigningKeyId,walletSessionId:t.walletSessionId,authorizationId:t.authorizationId,quotaId:t.quotaId,thresholdSessionId:t.thresholdSessionId,remainingUses:t.remainingUses,expiresAtMs:t.expiresAtMs,runtimePolicyScope:t.runtimePolicyScope,signingRootId:t.signingRootId,signingRootVersion:t.signingRootVersion,routerAbNormalSigning:t.routerAbNormalSigning,walletSessionToken:e.operationCredential.token,home:e.operationCredential.home,nowMs:Date.now()});if(!i.ok)throw Error(`Wallet custody Ed25519 Wallet Session is unusable (${i.reason})`);return js({walletId:t.walletId,nearAccountId:mn(t.nearAccountId),nearEd25519SigningKeyId:mi(t.nearEd25519SigningKeyId),providerSubjectId:r,signerSlot:$N(e.bootstrap.capability.applicationBinding.key_creation_signer_slot,`server capability signerSlot`),relayerUrl:QN(e.relayerUrl,`relayerUrl`),authority:e.authority,signingWalletSession:i.value})}function rP(e,t){return{activeClient:t,facts:{thresholdSessionId:e.thresholdSessionId,signer:e.signingLane.identity.signer,signingRootId:e.signingRootId,signingRootVersion:e.signingRootVersion,routerAbNormalSigning:e.routerAbNormalSigning,runtimePolicyScope:e.runtimePolicyScope,relayerUrl:e.relayerUrl}}}async function iP(e){let t={walletId:e.walletSession.walletId,nearAccountId:QN(e.nearAccountId,`nearAccountId`),signerSlot:$N(e.signerSlot,`signerSlot`),expectedOperationalPublicKey:QN(e.expectedOperationalPublicKey,`expectedOperationalPublicKey`),expectedThresholdSessionId:QN(e.expectedThresholdSessionId,`expectedThresholdSessionId`)};if(tP({bootstrap:e.bootstrap,identity:t,operationCredential:e.operationCredential}),e.metadata.applicationBinding.wallet_id!==String(e.walletSession.walletId)||e.metadata.applicationBinding.key_creation_signer_slot!==t.signerSlot||e.metadata.scope.threshold_session_id!==t.expectedThresholdSessionId||!g(e.metadata.materialActivation,e.bootstrap.capability.materialActivation))throw Error(`Wallet custody Ed25519 active client metadata changed`);let n=await nP({bootstrap:e.bootstrap,operationCredential:e.operationCredential,providerSubject:e.providerSubject,relayerUrl:e.relayerUrl,authority:e.authority}),r=new Ty(e.workerContext,e.activeClientHandle,e.metadata);try{let i=rP(n,r),a=await e.activateCapability(i);if(String(a.walletId)!==String(t.walletId)||String(a.nearAccountId)!==t.nearAccountId||!g(a.materialActivation,e.metadata.materialActivation))throw Error(`Wallet custody Ed25519 active client identity changed during activation`);return r=null,{thresholdSessionId:eP(n.thresholdSessionId),material:i,walletSessionState:n}}finally{r?.dispose()}}function aP(e,t){let n=e.trim();if(!n)throw Error(`Wallet custody Ed25519 projection requires ${t}`);return n}async function oP(e,t,n,r){let i=String(t.walletId),a=aP(String(n),`providerSubject`),o=(await e.listPublicCapabilityReferences()).filter(e=>String(e.walletId)===i&&g(e.materialActivation,r));if(o.length===0)return null;if(o.length!==1||!o[0])throw Error(`Wallet custody Ed25519 requires one exact public capability reference`);let s=o[0],c=(await e.listUsers()).filter(e=>String(e.walletId)===i&&String(e.nearAccountId)===String(s.nearAccountId));if(c.length!==1||!c[0])throw Error(`Wallet custody Ed25519 requires one exact persisted signer projection`);return{identity:s,user:c[0],providerSubject:a}}function sP(e){if(!e.authorization)throw Error(`Available Ed25519 lane requires Wallet Session authorization`);return pl({signer:nl({walletId:e.walletId,nearAccountId:e.nearAccountId,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,signerSlot:e.signerSlot}),auth:e.auth,walletSessionId:e.authorization.operationCredential.walletSessionId,quotaId:e.authorization.session.quotaId,thresholdSessionId:e.thresholdSessionId})}function cP(e){let t=e.signer;return JSON.stringify([String(t.account.wallet.walletId),String(t.account.nearAccountId),String(t.nearEd25519SigningKeyId),t.signerSlot,Da(e.auth),String(e.thresholdSessionId)])}function lP(e){return{kind:`near_ed25519_material_identity`,signer:nl({walletId:e.walletId,nearAccountId:e.nearAccountId,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,signerSlot:e.signerSlot}),auth:e.auth,thresholdSessionId:Ea.thresholdEd25519Session(e.thresholdSessionId)}}function uP(e){return{kind:`near_ed25519_material_identity`,signer:e.signer,auth:e.auth,thresholdSessionId:e.thresholdSessionId}}function dP(e){switch(e.kind){case`exact_lane`:return{kind:`near_ed25519_material_identity`,signer:e.laneIdentity.signer,auth:e.laneIdentity.auth,thresholdSessionId:e.laneIdentity.thresholdSessionId};case`export_exact_lane`:return uP(e.laneIdentity);case`material_identity`:return e.materialIdentity;default:return mP(e)}}function fP(e,t){if(!Rd(e)||e.curve!==`ed25519`)return!1;let n=dP(t),r=n.signer;if(String(e.walletId)!==String(r.account.wallet.walletId)||String(e.nearAccountId)!==String(r.account.nearAccountId)||e.signerSlot!==r.signerSlot||String(e.thresholdSessionId)!==n.thresholdSessionId)return!1;switch(t.kind){case`exact_lane`:return e.authorizationState===`authorized`&&qc(sP(e),t.laneIdentity);case`export_exact_lane`:return cP(lP(e))===cP(n)&&g(e.materialActivation,t.materialActivation);case`material_identity`:return cP(lP(e))===cP(n);default:return mP(t)}}function pP(e){switch(e.kind){case`exact_lane`:return JSON.stringify([e.kind,Wc(e.laneIdentity)]);case`export_exact_lane`:return JSON.stringify([e.kind,cP(uP(e.laneIdentity)),Gd(e.materialActivation)]);case`material_identity`:return JSON.stringify([e.kind,cP(e.materialIdentity)]);default:return mP(e)}}function mP(e){throw Error(`Unknown Ed25519 capability rehydration subject: ${String(e)}`)}function hP(e){return e.binding.kind===`ed25519_yao_client_root_v1`}function gP(e){if(!hP(e))throw Error(`[SigningEngine][ed25519-export] export envelope has the wrong secret kind`);return e}function _P(e,t,n){let r=Object.keys(e).sort(),i=[...t].sort();if(r.length!==i.length||r.some((e,t)=>e!==i[t]))throw Error(`${n} fields are invalid`)}function vP(e,t){if(typeof e!=`number`||!Number.isSafeInteger(e)||e<1)throw Error(`${t} is invalid`);return e}function yP(e){if(!Array.isArray(e)||e.length!==2||!Number.isSafeInteger(e[0])||!Number.isSafeInteger(e[1])||Number(e[0])<1||Number(e[1])<1||e[0]===e[1])throw Error(`Ed25519 export bootstrap participantIds are invalid`);return[Number(e[0]),Number(e[1])]}async function bP(e){let t=e.authorization.operationCredential,r=e.authorization.status,i=e.authorization.record.authorizationId,a=e.subject.signer,o=e.source;if(e.authorization.record.walletId!==a.account.wallet.walletId||e.authorization.record.authMethodId!==e.authorization.selectedAuthMethod.walletAuthMethodId||e.authorization.factorAuthority.factor.providerUserId!==e.subject.auth.providerSubjectId||!o.signingWorkerId||o.participantIds.length!==2||!o.registeredPublicKeyB64u)throw Error(`[SigningEngine][ed25519-export] sealed custody identity mismatch`);let s=Cr({kind:`router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1`,walletId:String(a.account.wallet.walletId),nearAccountId:String(a.account.nearAccountId),nearEd25519SigningKeyId:String(a.nearEd25519SigningKeyId),signerSlot:a.signerSlot,thresholdSessionId:e.subject.thresholdSessionId,signingWorkerId:o.signingWorkerId,participantIds:o.participantIds});if(!s.ok)throw Error(s.message);let c=await e.fetch(`${new URL(e.relayerUrl).origin}${vr}`,{method:`POST`,headers:{Authorization:`Bearer ${t.token}`,"Content-Type":`application/json`},body:JSON.stringify(s.value)}),l=await c.json().catch(()=>null);if(!c.ok){let e=l&&typeof l==`object`?l:null;throw Error(`[SigningEngine][ed25519-export] capability bootstrap failed (HTTP ${c.status}): ${String(e?.message||`invalid response`)}`)}let u=E(l,`Ed25519 export bootstrap`);if(_P(u,[`kind`,`walletId`,`nearAccountId`,`nearEd25519SigningKeyId`,`signerSlot`,`thresholdSessionId`,`walletSessionId`,`quotaId`,`signingWorkerId`,`thresholdExpiresAtMs`,`participantIds`,`runtimePolicyScope`,`routerAbNormalSigning`,`capability`],`Ed25519 export bootstrap`),u.kind!==`router_ab_ed25519_yao_v2_session_bootstrap_v1`)throw Error(`Ed25519 export bootstrap kind is invalid`);let d=D(u.walletId,`bootstrap.walletId`),f=D(u.nearAccountId,`bootstrap.nearAccountId`),p=D(u.nearEd25519SigningKeyId,`bootstrap.nearEd25519SigningKeyId`),m=n(u.thresholdSessionId),h=gt(u.walletSessionId),_=mt(u.quotaId),v=e.authorization.factorAuthority,y=Fe(u.runtimePolicyScope),b=Pe(y),x=Qe(u.routerAbNormalSigning),S={kind:`router_ab_ed25519_yao_active_capability_v1`,...Ja(u.capability)},C=yP(u.participantIds),w=P(Uint8Array.from(S.registeredPublicKey));if(!m.ok||!h.ok||!_.ok||!b||!x||d!==String(a.account.wallet.walletId)||f!==String(a.account.nearAccountId)||p!==String(a.nearEd25519SigningKeyId)||m.value!==S.lifecycle.thresholdSessionId||h.value!==t.walletSessionId||_.value!==e.authorization.record.quotaId||vP(u.signerSlot,`bootstrap.signerSlot`)!==a.signerSlot||D(u.signingWorkerId,`bootstrap.signingWorkerId`)!==o.signingWorkerId||C[0]!==o.participantIds[0]||C[1]!==o.participantIds[1]||v.factor.providerUserId!==e.subject.auth.providerSubjectId||w!==o.registeredPublicKeyB64u||!g(S.materialActivation,e.expectedMaterialActivation))throw Error(`[SigningEngine][ed25519-export] capability bootstrap identity mismatch`);return{emailHashHex:v.verifier.emailHashHex,bootstrap:{kind:`router_ab_ed25519_yao_email_otp_recovery_v1`,session:{walletId:a.account.wallet.walletId,nearAccountId:f,nearEd25519SigningKeyId:p,authorityScope:{kind:`email_otp`,provider:v.factor.provider,providerUserId:v.factor.providerUserId},thresholdSessionId:m.value,authorizationId:i,walletSessionId:h.value,quotaId:_.value,expiresAtMs:Math.min(vP(u.thresholdExpiresAtMs,`bootstrap.thresholdExpiresAtMs`),r.expiresAtMs),participantIds:C,remainingUses:r.remainingUses,signingRootId:b.signingRootId,signingRootVersion:y.signingRootVersion,runtimePolicyScope:y,routerAbNormalSigning:x},capability:S}}}async function xP(e){let t=TP({subject:e.subject,expectedMaterialActivation:e.expectedMaterialActivation,result:e.authorization});return(await bP({subject:e.subject,authorization:t,source:e.source,expectedMaterialActivation:e.expectedMaterialActivation,relayerUrl:e.relayerUrl,fetch:e.fetch})).bootstrap}async function SP(e){let t=e.authorization.operationCredential,r=e.subject.signer;if(e.authorization.record.walletId!==r.account.wallet.walletId||e.authorization.record.authMethodId!==e.authorization.selectedAuthMethod.walletAuthMethodId||e.authorization.factorAuthority.factor.providerUserId!==e.subject.auth.providerSubjectId)throw Error(`[SigningEngine][ed25519-export] linked Wallet Session is unavailable`);let i=Cr({kind:`router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1`,walletId:String(r.account.wallet.walletId),nearAccountId:String(r.account.nearAccountId),nearEd25519SigningKeyId:String(r.nearEd25519SigningKeyId),signerSlot:r.signerSlot,thresholdSessionId:e.subject.thresholdSessionId,signingWorkerId:e.source.signingWorkerId,participantIds:e.source.participantIds});if(!i.ok)throw Error(i.message);let a=await e.fetch(`${new URL(e.relayerUrl).origin}${vr}`,{method:`POST`,headers:{Authorization:`Bearer ${t.token}`,"Content-Type":`application/json`},body:JSON.stringify(i.value)}),o=await a.json().catch(()=>null);if(!a.ok){let e=o&&typeof o==`object`?o:null;throw Error(`[SigningEngine][ed25519-export] linked capability bootstrap failed (HTTP ${a.status}): ${String(e?.message||`invalid response`)}`)}let s=E(o,`linked Ed25519 export bootstrap`);if(_P(s,[`kind`,`walletId`,`nearAccountId`,`nearEd25519SigningKeyId`,`signerSlot`,`thresholdSessionId`,`walletSessionId`,`quotaId`,`signingWorkerId`,`thresholdExpiresAtMs`,`participantIds`,`runtimePolicyScope`,`routerAbNormalSigning`,`capability`],`linked Ed25519 export bootstrap`),s.kind!==`router_ab_ed25519_yao_v2_session_bootstrap_v1`)throw Error(`linked Ed25519 export bootstrap kind is invalid`);let c=n(s.thresholdSessionId),l=gt(s.walletSessionId),u=mt(s.quotaId),d=Fe(s.runtimePolicyScope),f=Qe(s.routerAbNormalSigning),p={kind:`router_ab_ed25519_yao_active_capability_v1`,...Ja(s.capability)},m=yP(s.participantIds),h=P(Uint8Array.from(p.registeredPublicKey));if(!c.ok||!l.ok||!u.ok||!d||!f||D(s.walletId,`bootstrap.walletId`)!==String(r.account.wallet.walletId)||D(s.nearAccountId,`bootstrap.nearAccountId`)!==String(r.account.nearAccountId)||D(s.nearEd25519SigningKeyId,`bootstrap.nearEd25519SigningKeyId`)!==String(r.nearEd25519SigningKeyId)||vP(s.signerSlot,`bootstrap.signerSlot`)!==r.signerSlot||c.value!==p.lifecycle.thresholdSessionId||l.value!==t.walletSessionId||u.value!==e.authorization.record.quotaId||D(s.signingWorkerId,`bootstrap.signingWorkerId`)!==e.source.signingWorkerId||m[0]!==e.source.participantIds[0]||m[1]!==e.source.participantIds[1]||h!==e.source.registeredPublicKeyB64u||!g(p.materialActivation,e.expectedMaterialActivation))throw Error(`[SigningEngine][ed25519-export] linked capability identity mismatch`);return p}function CP(e,t){let n=0;for(let r of e)switch(r.kind){case`export_keys`:r.keyFamily===`ed25519`&&g(r.materialActivation,t)&&(n+=1);break;case`sign`:case`link_devices`:case`revoke_devices`:break;default:break}return n}function wP(e){let{authorization:t}=e,n=t.selectedAuthority,r=t.selectedAuthMethod,i=t.factorAuthority,a=t.record,o=t.operationCredential,s=t.status,c=s.status===`active`&&s.quotaLifecycle===`active`&&s.remainingUses>0||s.status===`exhausted`&&s.quotaLifecycle===`exhausted`&&s.remainingUses===0;if(n.state!==`active`||n.walletId!==e.subject.signer.account.wallet.walletId||r.status!==`active`||r.walletId!==e.subject.signer.account.wallet.walletId||r.walletAuthorityId!==n.authorityId||i.walletId!==e.subject.signer.account.wallet.walletId||i.bindingId!==r.walletAuthMethodId||i.verifier.emailHashHex!==r.emailHashHex||i.factor.providerUserId!==e.subject.auth.providerSubjectId||a.walletId!==e.subject.signer.account.wallet.walletId||a.authorityId!==n.authorityId||a.authMethodId!==r.walletAuthMethodId||String(a.authorityDigestB64u)!==String(n.authorityDigestB64u)||a.authorityRevocationEpoch!==n.revocationEpoch||!c||s.walletSessionId!==o.walletSessionId||s.quotaId!==a.quotaId||!Ue(s.authorization,a)||o.walletSessionId.trim().length===0||o.token.trim().length===0||s.expiresAtMs<=Date.now()||CP(a.capabilitySubjects,e.expectedMaterialActivation)!==1)throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization identity mismatch`)}function TP(e){switch(e.result.kind){case`found`:return wP({subject:e.subject,expectedMaterialActivation:e.expectedMaterialActivation,authorization:e.result.authorization}),e.result.authorization;case`missing`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization is missing`);case`upgrade_required`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization requires an upgrade`);case`corrupt`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization is corrupt`);case`persistence_unavailable`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization persistence is unavailable`);case`exhausted`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization is exhausted`);case`expired`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization is expired`);case`superseded`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authorization is superseded`);case`authority_unavailable`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP authority is unavailable`);case`method_unavailable`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP method is unavailable`);case`capability_unavailable`:throw Error(`[SigningEngine][ed25519-export] exact Email OTP export capability is unavailable`);default:return e.result}}function EP(e){if(e.material.activeClient.status().kind!==`active`)throw Error(`[SigningEngine][ed25519-export] wallet custody client is inactive`);let t=e.material.activeClient.metadata(),r=e.subject.signer;if(!g(t.materialActivation,e.expectedMaterialActivation)||e.material.facts.signer.account.wallet.walletId!==r.account.wallet.walletId||String(e.material.facts.signer.account.nearAccountId)!==String(r.account.nearAccountId)||e.material.facts.signer.nearEd25519SigningKeyId!==r.nearEd25519SigningKeyId||e.material.facts.signer.signerSlot!==r.signerSlot||t.applicationBinding.wallet_id!==r.account.wallet.walletId||t.applicationBinding.near_ed25519_signing_key_id!==r.nearEd25519SigningKeyId||t.applicationBinding.key_creation_signer_slot!==r.signerSlot)throw Error(`[SigningEngine][ed25519-export] wallet custody client changed the exact lane`);let i=n(t.scope.threshold_session_id);if(!i.ok)throw Error(`[SigningEngine][ed25519-export] threshold session id is invalid: ${i.error.message}`);return{kind:`router_ab_ed25519_yao_active_capability_v1`,materialActivation:t.materialActivation,activeCapabilityBinding:t.activeCapabilityBinding,registeredPublicKey:[...t.registeredPublicKey],nearAccountId:String(r.account.nearAccountId),applicationBinding:t.applicationBinding,runtimePolicyScope:e.material.facts.runtimePolicyScope,participantIds:t.participantIds,lifecycle:{lifecycleId:t.scope.lifecycle_id,rootShareEpoch:t.scope.root_share_epoch,accountId:t.scope.account_id,thresholdSessionId:i.value,signerSetId:t.scope.signer_set_id,signingWorkerId:t.scope.signing_worker_id},stateEpoch:Number(t.stateEpoch),registrationContinuity:{kind:`recovery`,activationTranscript:[...t.transcript]}}}async function DP(e){let t=e.subject.signer.account.wallet.walletId,n=TP({subject:e.subject,expectedMaterialActivation:e.expectedMaterialActivation,result:await e.readExactWalletSessionAuthorization({subject:e.subject,expectedMaterialActivation:e.expectedMaterialActivation})}),r=e.resolveActiveCapability(t,e.subject.signer.account.nearAccountId,e.expectedMaterialActivation),i=r?EP({subject:e.subject,expectedMaterialActivation:e.expectedMaterialActivation,material:r}):null,a=e.resolveEd25519YaoClientRootEnvelope?await e.resolveEd25519YaoClientRootEnvelope({subject:e.subject,capability:i,selectedMaterialActivation:e.expectedMaterialActivation}):null,o=a&&`envelope`in a?a.envelope:a,s=i;if(a&&`envelope`in a&&(s=await SP({subject:e.subject,authorization:n,source:a.source,expectedMaterialActivation:a.source.materialActivation,relayerUrl:e.relayerUrl,fetch:e.fetch})),o){if(!s)throw Error(`[SigningEngine][ed25519-export] Ed25519 export-root capability is unavailable`);return{kind:`wallet_custody_ed25519_export_context_v1`,lane:e.subject,authorization:n,material:{kind:`sealed_export_root`,materialActivation:s.materialActivation,capability:s,exportRootEnvelope:gP(o)}}}if(r){if(!i)throw Error(`[SigningEngine][ed25519-export] active Email OTP capability is unavailable`);return{kind:`wallet_custody_ed25519_export_context_v1`,lane:e.subject,authorization:n,material:{kind:`active_capability`,materialActivation:e.expectedMaterialActivation,capability:i}}}let c=await e.loadWalletCustodyMaterial();if(c.kind!==`found`)throw Error(`[SigningEngine][ed25519-export] sealed wallet custody material is unavailable`);let l=await bP({subject:e.subject,authorization:n,source:c.material.binding,expectedMaterialActivation:e.expectedMaterialActivation,relayerUrl:e.relayerUrl,fetch:e.fetch});return{kind:`wallet_custody_ed25519_export_context_v1`,lane:e.subject,authorization:n,material:{kind:`sealed_custody`,materialActivation:e.expectedMaterialActivation,capability:l.bootstrap.capability,walletCustodyEd25519Material:c.material,bootstrap:l.bootstrap,activateRecoveredCapability:t=>{if(t.operationCredential.walletSessionId!==n.operationCredential.walletSessionId||t.operationCredential.token!==n.operationCredential.token)throw Error(`[SigningEngine][ed25519-export] recovered capability credential does not match authorization`);return e.activateRecoveredCapability({activation:{...t.activation,bootstrap:l.bootstrap,emailHashHex:l.emailHashHex},operationCredential:t.operationCredential})}}}}async function OP(e){return await e.workerCtx.requestWorkerOperation({kind:`emailOtp`,request:{type:`sealEmailOtpWarmSessionMaterial`,timeoutMs:3e4,payload:{target:e.target,transport:{...e.transport,authorizationThresholdSessionId:e.authorizationThresholdSessionId}}}})}async function kP(e){return await e.worker.requestWorkerOperation({kind:`emailOtp`,request:{type:`getEmailOtpWarmSessionStatus`,timeoutMs:5e3,payload:{target:e.target}}})}async function AP(e){return await e.worker.requestWorkerOperation({kind:`emailOtp`,request:{type:`consumeEmailOtpWarmSessionUses`,timeoutMs:5e3,payload:{target:e.target,...typeof e.uses==`number`?{uses:e.uses}:{}}}})}async function jP(e){return await e.worker.requestWorkerOperation({kind:`emailOtp`,request:{type:`clearEmailOtpWarmSessionMaterial`,timeoutMs:5e3,payload:{target:e.target}}})}async function MP(e){return await e.workerCtx.requestWorkerOperation({kind:`emailOtp`,request:{type:`rehydrateEmailOtpEcdsaWarmSessionMaterial`,timeoutMs:6e4,payload:{target:e.target,sealedSecretB64u:e.sealedSecretB64u,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs,transport:{...e.transport,authorizationThresholdSessionId:e.authorizationThresholdSessionId},restore:e.restore}}})}async function NP(e){return await e.workerCtx.requestWorkerOperation({kind:`emailOtp`,request:{type:`rehydrateEmailOtpEd25519YaoOperationMaterial`,timeoutMs:12e4,payload:e.payload}})}function PP(e){let{capability:t}=e;if(!t.auth||!e.hasWalletSessionAuthorization)return t.capability===`ed25519`?`authorization_required`:`auth_missing`;if(e.emailOtpSingleUseConsumed)return`prf_missing`;let n=t.prfClaim;if(t.capability===`ed25519`){let e=Yc({remainingUses:t.runtime.remainingUses,expiresAtMs:t.runtime.expiresAtMs});return e===`expired`||e===`exhausted`?`authorization_required`:n?.state===`unavailable`?`prf_unavailable`:n?.state===`warm`?`ready`:`prf_missing`}let r=Yc({remainingUses:t.runtime.remainingUses,expiresAtMs:t.runtime.expiresAtMs});return r===`expired`||r===`exhausted`?`authorization_required`:n?n.state===`unavailable`?`prf_unavailable`:n.state===`warm`?`ready`:`prf_missing`:`prf_missing`}function FP(e){let{capability:t}=e,n=t.runtime,r=t.auth,i=t.prfClaim,a=String(n?.thresholdSessionId||``).trim();if(!n){if(t.state!==`missing`&&t.state!==`invalid`)throw Error(`[WarmSessionStore] invalid ${e.label} capability: missing runtime must be missing or invalid`);if(r)throw Error(`[WarmSessionStore] invalid ${e.label} capability: missing runtime cannot have auth`);if(i)throw Error(`[WarmSessionStore] invalid ${e.label} capability: missing runtime cannot have warm-session status`);return}if(String(n.walletId)!==String(e.walletId))throw Error(`[WarmSessionStore] invalid ${e.label} capability: runtime wallet does not match envelope wallet`);if(!a)throw Error(`[WarmSessionStore] invalid ${e.label} capability: runtime is missing thresholdSessionId`);if(r){if(String(r.session.walletId)!==String(n.walletId))throw Error(`[WarmSessionStore] invalid ${e.label} capability: authorization wallet does not match runtime`);if(r.selectedAuthMethod.kind!==n.factor.kind)throw Error(`[WarmSessionStore] invalid ${e.label} capability: authorization factor does not match runtime`)}if(i){if(String(i.thresholdSessionId||``).trim()!==a)throw Error(`[WarmSessionStore] invalid ${e.label} capability: warm-session status thresholdSessionId does not match record thresholdSessionId`);switch(i.state){case`warm`:if(i.remainingUses<=0||i.expiresAtMs<=0)throw Error(`[WarmSessionStore] invalid ${e.label} capability: warm warm-session status requires positive remainingUses and expiresAtMs`);break;case`unavailable`:if(!String(i.code||``).trim())throw Error(`[WarmSessionStore] invalid ${e.label} capability: unavailable warm-session status requires a code`);break;case`missing`:case`expired`:case`exhausted`:break;default:throw Error(`[WarmSessionStore] unsupported warm-session claim state`)}}let o=PP({capability:t,hasWalletSessionAuthorization:!!r,emailOtpSingleUseConsumed:!1});if(t.state!==o)throw Error(`[WarmSessionStore] invalid ${e.label} capability: state=${t.state} does not match derived state=${o}`)}function IP(e){let{capability:t}=e,n=t.runtime,r=t.manifest.durableMaterial.roleLocalPublicFacts;if(String(n.walletId)!==String(e.walletId))throw Error(`[WarmSessionStore] invalid ${e.label} capability: runtime wallet does not match envelope wallet`);if(String(t.key.walletId)!==String(e.walletId))throw Error(`[WarmSessionStore] invalid ${e.label} capability: key wallet does not match envelope wallet`);if(String(t.key.thresholdOwnerAddress).toLowerCase()!==String(r.ethereumAddress).toLowerCase())throw Error(`[WarmSessionStore] invalid ${e.label} capability: key owner address does not match manifest public facts`);if(t.state===`authorization_required`){if(t.lane)throw Error(`[WarmSessionStore] invalid ${e.label} capability: authorization_required cannot carry a lane`);return}if(!t.lane)throw Error(`[WarmSessionStore] invalid ${e.label} capability: authorized ECDSA capability requires a lane`);if(!an(t.lane.identity.signer.chainTarget,n.chainTarget))throw Error(`[WarmSessionStore] invalid ${e.label} capability: lane chain target does not match runtime chain target`);if(String(t.lane.materialActivation.activationId)!==String(n.materialActivation.activationId))throw Error(`[WarmSessionStore] invalid ${e.label} capability: lane material activation does not match runtime`);if(wa(t.lane.auth)!==n.authBinding.kind)throw Error(`[WarmSessionStore] invalid ${e.label} capability: lane authMethod does not match sealed auth binding`);if(t.emailOtpAuthContext&&n.authBinding.kind!==`email_otp`)throw Error(`[WarmSessionStore] invalid ${e.label} capability: non-email_otp binding cannot carry email-otp auth context`)}function LP(e){let{capability:t}=e;if(t.state!==`missing`){if(t.capability===`ecdsa`){if(t.state===`invalid`)return;IP({walletId:e.walletId,label:e.label,capability:t});return}FP(e)}}function RP(e){return LP({walletId:e.walletId,label:`ed25519`,capability:e.capabilities.ed25519}),LP({walletId:e.walletId,label:`ecdsa.evm`,capability:e.capabilities.ecdsa.evm}),LP({walletId:e.walletId,label:`ecdsa.tempo`,capability:e.capabilities.ecdsa.tempo}),e}function zP(e){switch(e.kind){case`voiceid`:return{kind:`voiceid`,walletAuthMethodId:e.voiceIdAuthority.bindingId,deviceKeyId:e.voiceIdAuthority.factor.deviceKeyId};case`passkey`:return{kind:`passkey`,rpId:ua(e.rpId),credentialIdB64u:e.credentialIdB64u};case`email_otp`:return{kind:`email_otp`,providerSubjectId:e.providerSubjectId};default:throw Error(`[WarmSessionStore] unsupported ECDSA runtime auth binding`)}}async function BP(e){if(!e.resolve||e.resolution.kind!==`resolved`)return null;try{return await e.resolve({walletId:e.walletId,chainTarget:e.resolution.runtime.chainTarget,materialActivation:e.resolution.manifest.activation.materialActivation},e.statusReads)}catch{return null}}function VP(e){return e.kind===`resolved`?Ph({thresholdSessionId:e.runtime.sealedRecord.thresholdSessionId,remainingUses:e.runtime.remainingUses,expiresAtMs:e.runtime.expiresAtMs}):null}function HP(e){async function t(t,n){let r=e.resolveActiveEd25519WalletSessionAuthorization;if(!r)return null;try{return await r(t,n)}catch{return null}}function n(e){if(e.resolution.kind===`missing`)return{capability:`ed25519`,runtime:null,auth:null,prfClaim:null,state:`missing`};if(e.resolution.kind===`conflict`||e.resolution.kind===`corrupt`)return{capability:`ed25519`,runtime:null,auth:null,prfClaim:null,invalidReason:e.resolution.kind===`conflict`?`exact_record_conflict`:`corrupt`,state:`invalid`};let t=e.resolution.runtime,n=kh({runtime:t,auth:e.auth,prfClaim:e.prfClaim});if(n===`authorization_required`)return{capability:`ed25519`,runtime:t,auth:null,prfClaim:e.prfClaim,state:n};if(n===`missing`||n===`invalid`)throw Error(`[WarmSessionStore] Ed25519 capability state=${n} with resolved material`);if(!e.auth)throw Error(`[WarmSessionStore] Ed25519 capability state=${n} requires active authorization`);return{capability:`ed25519`,runtime:t,auth:e.auth,prfClaim:e.prfClaim,state:n}}function r(e){if(e.resolution.kind===`blocked`){let t=e.resolution.reason;return t===`missing_capability`||t===`missing_material`?{capability:`ecdsa`,manifest:null,runtime:null,key:null,lane:null,auth:null,prfClaim:null,state:`missing`}:{capability:`ecdsa`,manifest:null,runtime:null,key:null,lane:null,auth:null,prfClaim:null,invalidReason:t,state:`invalid`}}let{manifest:t,runtime:n}=e.resolution,r=t.durableMaterial.roleLocalPublicFacts,i=ba({walletId:n.walletId,ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,signingRootId:String(r.signingRootId),signingRootVersion:String(r.signingRootVersion),participantIds:[...n.participantIds],thresholdOwnerAddress:String(r.ethereumAddress)}),a=n.authBinding,o=Ah({runtime:n,auth:e.authorization,prfClaim:e.prfClaim,emailOtpAuthContext:null});if(o===`authorization_required`)return{capability:`ecdsa`,manifest:t,runtime:n,key:i,lane:null,auth:null,prfClaim:e.prfClaim,emailOtpAuthContext:null,state:o};if(!e.authorization)throw Error(`[WarmSessionStore] ECDSA capability without authorization must be authorization_required`);if(o===`missing`||o===`invalid`)throw Error(`[WarmSessionStore] ECDSA capability state=${o} with resolved material`);let s=fl({key:i,materialActivation:n.materialActivation,keyHandle:n.keyHandle,walletId:n.walletId,auth:zP(a),authorization:e.authorization,chainTarget:n.chainTarget});if(o===`ready`||o===`material_pending`){if(!e.prfClaim||e.prfClaim.state!==`warm`)throw Error(`[WarmSessionStore] ECDSA capability state=${o} requires a warm PRF claim`);return{capability:`ecdsa`,manifest:t,runtime:n,key:i,lane:s,auth:e.authorization,prfClaim:e.prfClaim,state:o}}return o===`auth_missing`?{capability:`ecdsa`,manifest:t,runtime:n,key:i,lane:s,auth:null,prfClaim:e.prfClaim,state:o}:{capability:`ecdsa`,manifest:t,runtime:n,key:i,lane:s,auth:e.authorization,prfClaim:e.prfClaim,state:o}}async function i(i){let a=B(i),o=new q,[s,c,l,u]=await Promise.all([$o(a),t(a,o),e.resolveActiveEcdsaCapabilityRuntimeForChain({walletId:a,chain:`evm`}),e.resolveActiveEcdsaCapabilityRuntimeForChain({walletId:a,chain:`tempo`})]),[d,f]=await Promise.all([BP({resolve:e.resolveActiveEcdsaWalletSessionAuthorization,walletId:a,resolution:l,statusReads:o}),BP({resolve:e.resolveActiveEcdsaWalletSessionAuthorization,walletId:a,resolution:u,statusReads:o})]);return RP({walletId:a,capabilities:{ed25519:n({resolution:s,auth:c,prfClaim:s.kind===`resolved`?await e.statusReader.readEd25519WarmSessionClaim(s.runtime):null}),ecdsa:{evm:r({resolution:l,prfClaim:VP(l),authorization:d}),tempo:r({resolution:u,prfClaim:VP(u),authorization:f})}},updatedAtMs:Date.now()})}async function a(t){let n=await e.resolveActiveEcdsaCapabilityRuntime({walletId:t.lane.signer.walletId,chainTarget:t.lane.signer.chainTarget});return r({resolution:n,prfClaim:VP(n),authorization:t.authorization})}function o(){return e.signingSessionSeal.seal===`configured`?{groupId:String(e.signingSessionSeal.groupId||``).trim()}:{groupId:``}}async function s(t){let n=await e.resolveActiveEcdsaCapabilityRuntime({walletId:t.lane.signer.walletId,chainTarget:t.lane.signer.chainTarget});if(n.kind!==`resolved`)return null;let r=o();return Mh({runtime:n.runtime,auth:t.authorization,groupId:r.groupId})}return{getWarmSession:i,getEcdsaCapabilityForLane:a,resolveEcdsaSealTransportForLane:s}}function UP(e){switch(e.factor.kind){case z.passkey:return{authMethod:z.passkey};case z.emailOtp:return{authMethod:z.emailOtp,retention:`session`};default:throw e.factor,Error(`[WarmSessionStore] unsupported Ed25519 runtime factor`)}}async function WP(e){return cs({runtime:e.runtime,authorization:e.authorization})}function GP(e){let t=Th(e.touchConfirm);async function n(e){let t=String(e.thresholdSessionId);return await r({authMethod:e.factor.kind,thresholdSessionId:t,materialActivation:e.sealedRecord.ed25519Restore.materialActivation})}async function r(n){if(n.authMethod===z.emailOtp){let t=await e.getEmailOtpWarmSessionStatus({kind:`ed25519_yao`,thresholdSessionId:n.thresholdSessionId,materialActivation:n.materialActivation}).catch(()=>({ok:!1,code:`worker_error`,message:`worker_error`}));return Oh({thresholdSessionId:n.thresholdSessionId,status:t})}return await Dh(t,n.thresholdSessionId)}async function i(e){let t=e.runtime,r=String(t.thresholdSessionId),i=UP(t);if(!e.authorization||!await WP({runtime:t,authorization:e.authorization}))return{sessionId:r,status:`unavailable`,statusCode:`auth_missing`,...i};if(e.authorization.status.expiresAtMs<=e.nowMs||t.expiresAtMs<=e.nowMs)return{sessionId:r,status:`expired`,expiresAtMs:Math.min(e.authorization.status.expiresAtMs,t.expiresAtMs),...i};if(t.remainingUses<=0)return{sessionId:r,status:`exhausted`,remainingUses:0,expiresAtMs:t.expiresAtMs,...i};let a=jh({sessionId:r,claim:await n(t),authMethod:i.authMethod,retention:i.retention??null});return a.status===`not_found`?{sessionId:r,status:`active`,remainingUses:t.remainingUses,expiresAtMs:t.expiresAtMs,...i}:a}return{getEd25519SigningSessionStatus:i,readEd25519WarmSessionClaim:n}}function KP(){return{ok:!1,code:`not_found`,message:`Email OTP warm-session status reader is unavailable`}}function qP(e){let t=Th(e.touchConfirm),n=e.getEmailOtpWarmSessionStatus;return n?{runtimeStatus:`configured`,touchConfirm:t,getEmailOtpWarmSessionStatus:n}:t?.statusPort===`single`||t?.statusPort===`single_and_batch`?{runtimeStatus:`configured`,touchConfirm:t,getEmailOtpWarmSessionStatus:async e=>await t.getWarmSessionStatus({thresholdSessionId:e.thresholdSessionId})}:t?{runtimeStatus:`configured`,touchConfirm:t,getEmailOtpWarmSessionStatus:async()=>KP()}:{runtimeStatus:`no_runtime_status`,touchConfirm:null,getEmailOtpWarmSessionStatus:async()=>KP()}}function JP(e){let t=String(e?.groupId||``).trim();return t?{seal:`configured`,groupId:t}:{seal:`unconfigured`}}function YP(e){let t=qP(e),n=GP({touchConfirm:t.touchConfirm,getEmailOtpWarmSessionStatus:t.getEmailOtpWarmSessionStatus});return HP({resolveActiveEcdsaCapabilityRuntime:e.resolveActiveEcdsaCapabilityRuntime,resolveActiveEcdsaCapabilityRuntimeForChain:e.resolveActiveEcdsaCapabilityRuntimeForChain,statusReader:n,signingSessionSeal:JP(e.signingSessionSeal),...e.resolveActiveEcdsaWalletSessionAuthorization?{resolveActiveEcdsaWalletSessionAuthorization:e.resolveActiveEcdsaWalletSessionAuthorization}:{},...e.resolveActiveEd25519WalletSessionAuthorization?{resolveActiveEd25519WalletSessionAuthorization:e.resolveActiveEd25519WalletSessionAuthorization}:{}})}function XP(e){return!e.ok&&(e.code===`not_found`||e.code===`worker_error`)}function ZP(e){let{base:t,secondary:n}=e,r=async e=>{let r=await n.readWarmSessionStatusOnly(e.thresholdSessionId);return XP(r)?await t.getWarmSessionStatus(e):r},i=async e=>{let r=await Promise.all(e.thresholdSessionIds.map(async e=>({thresholdSessionId:e,result:await n.readWarmSessionStatusOnly(e)}))),i=r.filter(e=>XP(e.result)).map(e=>e.thresholdSessionId),a=i.length===0?{results:[]}:typeof t.getWarmSessionStatuses==`function`?await t.getWarmSessionStatuses({thresholdSessionIds:i}):{results:await Promise.all(i.map(async e=>({thresholdSessionId:e,result:await t.getWarmSessionStatus({thresholdSessionId:e})})))},o=new Map(a.results.map(e=>[e.thresholdSessionId,e]));return{results:r.map(e=>XP(e.result)&&o.get(e.thresholdSessionId)||e)}},a=async e=>{await Promise.all([t.clearVolatileWarmSessionMaterial(e).catch(()=>void 0),n.clearVolatileWarmSessionMaterial(e).catch(()=>void 0)])};return new Proxy(t,{get:(e,t,n)=>{if(t===`getWarmSessionStatus`)return r;if(t===`getWarmSessionStatuses`)return i;if(t===`clearVolatileWarmSessionMaterial`)return a;let o=Reflect.get(e,t,n);return typeof o==`function`?o.bind(e):o}})}function QP(e){let{base:t,secondary:n}=e;return{getWarmSessionStatus:async e=>{let r=await n.readWarmSessionStatusOnly(e.thresholdSessionId);return XP(r)?await t.getWarmSessionStatus(e):r},getWarmSessionStatuses:async e=>{let r=Array.from(new Set((Array.isArray(e.thresholdSessionIds)?e.thresholdSessionIds:[]).map(e=>String(e||``).trim()).filter(Boolean))),i=await Promise.all(r.map(async e=>({thresholdSessionId:e,result:await n.readWarmSessionStatusOnly(e)}))),a=i.filter(e=>XP(e.result)).map(e=>e.thresholdSessionId),o=a.length===0?{results:[]}:await t.getWarmSessionStatuses({thresholdSessionIds:a}),s=new Map(o.results.map(e=>[e.thresholdSessionId,e.result]));return{results:i.map(e=>XP(e.result)?{thresholdSessionId:e.thresholdSessionId,result:s.get(e.thresholdSessionId)||e.result}:e)}}}}function $P(e){return{queueByWallet:e.queueByWallet,activationDeps:e.activationDeps,persistEcdsaRoleLocalReadyRecord:e.persistEcdsaRoleLocalReadyRecord}}function eF(e){return{getWarmSession:t=>e.capabilityReader.getWarmSession(t),discoverPersistedSessionsForWallet:e.passkeyMpcSession.discoverPersistedSessionsForWallet.bind(e.passkeyMpcSession)}}function tF(e){let t=tu(e),n=iu(e);return e.source===`registration`?{kind:`key_enrollment_bootstrap_parity`,walletId:t,chainTarget:n}:e.operationIntent===Ta.TransactionSign?{kind:`transaction_bootstrap_parity`,walletId:t,chainTarget:n,operationIntent:Ta.TransactionSign}:e.kind===`email_otp_ecdsa_bootstrap`?{kind:`email_otp_bootstrap_parity`,walletId:t,chainTarget:n,authMethod:`email_otp`}:{kind:`default_bootstrap_parity`,walletId:t,chainTarget:n}}async function nF(e,t){return await $l($P(e),t)}function rF(e){let t=e.error instanceof Error?e.error.message:String(e.error||`unknown error`);return{ok:!1,code:iF(e.error),chainTargetKey:e.chainTargetKey,errorMessage:t}}function iF(e){let t=rd(e);if(t)switch(t.kind){case`expired`:return`sealed_record_expired`;case`exhausted`:return`sealed_record_exhausted`;case`missing`:case`invalid`:case`unavailable`:return`sealed_restore_failed`}switch(e&&typeof e==`object`?Reflect.get(e,`code`):void 0){case`expired`:return`sealed_record_expired`;case`exhausted`:return`sealed_record_exhausted`;default:return`sealed_restore_failed`}}async function aF(e,t,n){let r=n.chainTarget,i=V(r);if((await e.getWarmSession(t)).capabilities.ed25519.state!==`ready`)return{ok:!1,code:`missing_exact_material`,chainTargetKey:i};try{await e.discoverPersistedSessionsForWallet({kind:`discover_wallet_ecdsa_signing_sessions`,walletId:t,ecdsaChainTargets:[r],maxRecords:1})}catch(e){return console.warn(`[SigningEngine][ecdsa] reuse warm sealed discovery failed`,{walletId:t,chainTarget:r,error:e instanceof Error?e.message:String(e||`unknown error`)}),rF({chainTargetKey:i,error:e})}return{ok:!1,code:`missing_exact_material`,chainTargetKey:i}}function oF(e){switch(e.code){case`missing_exact_material`:return`[SigningEngine][ecdsa] reuse_warm_ecdsa_bootstrap requires restored passkey ECDSA material for ${e.chainTargetKey}`;case`sealed_restore_failed`:return`[SigningEngine][ecdsa] reuse_warm_ecdsa_bootstrap sealed restore failed for ${e.chainTargetKey}: ${e.errorMessage||`unknown error`}`;case`sealed_record_expired`:return`[SigningEngine][ecdsa] reuse_warm_ecdsa_bootstrap sealed record expired for ${e.chainTargetKey}`;case`sealed_record_exhausted`:return`[SigningEngine][ecdsa] reuse_warm_ecdsa_bootstrap sealed record exhausted for ${e.chainTargetKey}`}return`[SigningEngine][ecdsa] reuse_warm_ecdsa_bootstrap failed`}function sF(e){return Error(oF(e))}async function cF(e,t){await ud(e.ensureSealedRefreshStartupParity,tF(t));let n=B(tu(t));switch(t.kind){case`reuse_warm_ecdsa_bootstrap`:{let r=await aF(eF(e),n,t);return r.ok?{ok:!0,bootstrap:r.bootstrap}:{ok:!1,kind:`reuse_failed`,failure:r}}case`passkey_fresh_ecdsa_bootstrap`:case`passkey_preauthorized_ecdsa_bootstrap`:case`wallet_session_reconnect_ecdsa_bootstrap`:case`email_otp_ecdsa_bootstrap`:return{ok:!0,bootstrap:await nF(e,t)}}throw Error(`[SigningEngine][ecdsa] unsupported warm bootstrap request`)}function lF(e){return typeof e?.clearAllVolatileWarmSessionMaterial==`function`}function uF(e){return typeof e?.clearVolatileWarmSessionMaterial==`function`}async function dF(e){let t=new Set,r=await Promise.all([Lo({walletId:e,filter:{authMethod:`passkey`,curve:`ed25519`}}),Lo({walletId:e,filter:{authMethod:`email_otp`,curve:`ed25519`}})]);for(let e of r.flat()){let r=n(e.thresholdSessionIds.ed25519);r.ok&&t.add(r.value)}return[...t]}async function fF(e,t){if(t==null&&lF(e.touchConfirm)){await e.touchConfirm.clearAllVolatileWarmSessionMaterial(ph()).catch(()=>void 0);return}let n=t==null?[]:await dF(t);uF(e.touchConfirm)&&await Promise.all(n.map(t=>e.clearVolatileThresholdSessionMaterial(fh(t)).catch(()=>void 0)))}function pF(e){switch(e.kind){case`rehydrated`:return e;case`device_link_required`:throw Error(`ECDSA login prefill requires local role-local material`);case`corrupt`:throw Error(`ECDSA login prefill role-local material is corrupt (${e.reason}): ${e.message}`);default:{let t=e;throw Error(`Unsupported ECDSA login prefill material state: ${String(t)}`)}}}function mF(e){return{kind:`router_ab_ecdsa_derivation_client_signing_material_source_v1`,initClientPresignSession:async t=>{let n=pF(await Ad({purpose:`wallet_unlock`,source:wd({authority:e.manifest.signer.authority,materialActivation:e.manifest.durableMaterial.materialActivation,publicFacts:e.manifest.durableMaterial.roleLocalPublicFacts}),workerCtx:t.workerCtx}));return await Ou({materialHandle:n.liveHandle.materialHandle,material:{kind:`persisted`,materialRef:n.materialRef},...t})},stepClientPresignSession:Bu,abortClientPresignSession:xu,admitClientPresignature:bu,destroyClientPresignature:Su,reserveClientPresignature:yu,commitClientPresignature:Yu,listAvailableClientPresignatures:ju.bind(void 0,`role_local_derivation_handle`),computeSignatureShareFromPresignatureHandle:Mu}}function hF(e){let t={exportArtifactsByLane:e.ecdsaExportArtifacts.exportArtifactsByLane},n=QP({base:e.passkeyMpcSession,secondary:{readWarmSessionStatusOnly:t=>e.getEmailOtpWarmSessionStatus({kind:`ecdsa`,thresholdSessionId:t})}}),r=GP({touchConfirm:n,getEmailOtpWarmSessionStatus:e.getEmailOtpWarmSessionStatus});return{ecdsaSessions:t,statusUiConfirm:n,capabilityReader:YP({resolveActiveEcdsaCapabilityRuntime:e.resolveActiveEcdsaCapabilityRuntime,resolveActiveEcdsaCapabilityRuntimeForChain:e.resolveActiveEcdsaCapabilityRuntimeForChain,touchConfirm:e.passkeyMpcSession,signingSessionSeal:e.signingSessionSeal.mode===`sealed_refresh_v1`?{groupId:Ze}:null,getEmailOtpWarmSessionStatus:e.getEmailOtpWarmSessionStatus,...e.resolveActiveEcdsaWalletSessionAuthorization?{resolveActiveEcdsaWalletSessionAuthorization:e.resolveActiveEcdsaWalletSessionAuthorization}:{},...e.resolveActiveEd25519WalletSessionAuthorization?{resolveActiveEd25519WalletSessionAuthorization:e.resolveActiveEd25519WalletSessionAuthorization}:{}}),statusReader:r}}function gF(e){return{getWarmSession:t=>e.warmSigning.capabilityReader.getWarmSession(B(t)),provisionThresholdEd25519Session:async t=>await rh({credentialStore:e.credentialStore,touchIdPrompt:e.touchIdPrompt,touchConfirm:e.passkeyMpcSession,defaultRelayerUrl:e.seamsWebConfigs.network.relayer?.url||``,getSignerWorkerContext:()=>e.walletSessionActivationDeps.getSignerWorkerContext()},t),bootstrapEcdsaSession:async t=>{let n=await cF({ensureSealedRefreshStartupParity:e.ensureSealedRefreshStartupParity,queueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,activationDeps:e.walletSessionActivationDeps,passkeyMpcSession:e.passkeyMpcSession,persistEcdsaRoleLocalReadyRecord:e.persistEcdsaRoleLocalReadyRecord,capabilityReader:e.warmSigning.capabilityReader},t);if(n.ok)return n.bootstrap;switch(n.kind){case`reuse_failed`:throw sF(n.failure)}throw Error(`[SigningEngine][ecdsa] unsupported warm bootstrap result`)}}}function _F(e){return{statusReader:e.warmSigning.statusReader,persistThresholdEcdsaBootstrapForWalletTarget:async t=>await oh({bootstrapStore:e.bootstrapStore,walletId:t.walletId,chainTarget:t.chainTarget,bootstrap:t.bootstrap,signerAuth:t.signerAuth}),hydrateSigningSession:async t=>await Dl(e.passkeyMpcSession,t),clearVolatileWarmSigningMaterial:async t=>await fF({touchConfirm:e.passkeyMpcSession,clearVolatileThresholdSessionMaterial:async t=>await e.passkeyMpcSession.clearVolatileWarmSessionMaterial(t)},t),getWalletSessionStatus:t=>e.signingSessionCoordinator.getAvailableStatus(t),routerAbEcdsaDerivationPresignaturePoolPolicy:e.seamsWebConfigs.signing.routerAbEcdsaDerivation.presignaturePool,getSignerWorkerContext:()=>e.walletSessionActivationDeps.getSignerWorkerContext(),resolveClientSigningMaterialSource:mF}}function vF(e){return{availableLanes:{activeWalletAuthorityEcdsaRuntimeReadPorts:mg,ed25519YaoPublicCapabilityLanes:e.ed25519YaoPublicCapabilityLanes,isEd25519YaoPublicCapabilityActive:e.isEd25519YaoPublicCapabilityActive,readActiveWalletSessionAuthorization:e.readActiveWalletSessionAuthorization,listEcdsaSigningCapabilitiesForWallet:e.listEcdsaSigningCapabilitiesForWallet},signingSessionSeal:e.seamsWebConfigs.signing.sessionSeal.mode===`sealed_refresh_v1`?{groupId:Ze}:void 0,getConfiguredEcdsaChainTargets:()=>on(e.seamsWebConfigs.network.chains),discovery:{emailOtp:t=>e.emailOtpSessions.discoverPersistedSessionsForWallet(t),passkey:t=>e.passkeyMpcSession.discoverPersistedSessionsForWallet(t)}}}async function yF(e,t){let{runtime:n,session:r,operationCredential:i}=t.capability.authorization,a=i.walletSessionId;try{let o=n.relayerUrl,s=n.clientVerifyingPublicKey33B64u,c=Date.now(),l=Math.min(n.expiresAtMs,r.expiresAtMs);if(l<=c)return{status:`skipped`,reason:`session_expired`,walletSessionId:a};let u=$u(e.routerAbEcdsaDerivationPresignaturePoolPolicy);if(!u.enabled)return{status:`skipped`,reason:`pool_disabled`,walletSessionId:a};let d=n.remainingUses,f={kind:`router_ab_ecdsa_derivation_signing_worker_pool`,scope:n.normalSigning.scope,ceremonyExpiresAtMs:l,materialExpiresAtMs:c+en},p=e.resolveClientSigningMaterialSource({manifest:t.capability.capability.manifest}),m=ed({relayerUrl:o,keyHandle:Ai(n.keyHandle),ecdsaThresholdKeyId:bi(n.ecdsaThresholdKeyId),clientVerifyingShareB64u:wi(s),clientSigningMaterial:p,thresholdEcdsaPublicKeyB64u:n.thresholdEcdsaPublicKeyB64u,relayerVerifyingShareB64u:n.normalSigning.scope.public_identity.server_public_key33_b64u,credential:{kind:`wallet_session_opaque`,walletSessionToken:i.token,home:i.home,ownershipGeneration:i.ownershipGeneration},authorization:{kind:`reusable_wallet_session`,wallet_session_id:i.walletSessionId},materialActivation:Kr(n.materialActivation),routerAbEcdsaDerivationPoolFill:f,workerCtx:e.getSignerWorkerContext(),poolPolicy:u});return m.scheduled?(t.waitForPoolReady&&await Zu({ownershipGeneration:i.ownershipGeneration,relayerUrl:o,scope:n.normalSigning.scope,materialActivation:Kr(n.materialActivation)}),{status:`scheduled`,reason:`scheduled`,walletSessionId:a,remainingUses:d,schedule:m}):(t.waitForPoolReady&&m.reason===`in_flight_for_pool_key`&&await Zu({ownershipGeneration:i.ownershipGeneration,relayerUrl:o,scope:n.normalSigning.scope,materialActivation:Kr(n.materialActivation)}),{status:`skipped`,reason:`refill_not_scheduled`,walletSessionId:a,remainingUses:d,schedule:m})}catch(e){return{status:`failed`,reason:`unexpected_error`,walletSessionId:a,error:e instanceof Error?e.message:`unexpected error`}}}async function bF(e,t){let n=await e.statusReader.getEd25519SigningSessionStatus(t),r=t.authorization?cm({owner:tm(t.runtime.walletId),authorization:{walletSessionId:t.authorization.operationCredential.walletSessionId,quotaId:t.authorization.session.quotaId}}):null;return sm(n,r?await om({getAvailableStatus:e.getWalletSessionStatus},r):null)}async function xF(e,t){return await yF({getSignerWorkerContext:e.getSignerWorkerContext,resolveClientSigningMaterialSource:e.resolveClientSigningMaterialSource,routerAbEcdsaDerivationPresignaturePoolPolicy:e.routerAbEcdsaDerivationPresignaturePoolPolicy},t)}async function SF(e,t){await e.hydrateSigningSession(t)}async function CF(e,t){await e.clearVolatileWarmSigningMaterial(t)}function wF(e){let t=e.capability===`ecdsa`?e.runtime?.sealedRecord.thresholdSessionId:e.runtime?.thresholdSessionId,n=t?String(t).trim():null;return{state:e.state,thresholdSessionId:n||null,authState:e.auth?`present`:`missing`,prfClaimState:e.prfClaim?.state||null,...e.prfClaim?.state===`warm`?{remainingUses:e.prfClaim.remainingUses,expiresAtMs:e.prfClaim.expiresAtMs}:{}}}function TF(e){return{capabilities:{ed25519:wF(e.capabilities.ed25519),ecdsa:{evm:wF(e.capabilities.ecdsa.evm),tempo:wF(e.capabilities.ecdsa.tempo)}}}}function EF(e){if(typeof e.onTransition==`function`)try{let t=e.onTransition(e.event);t&&typeof t.then==`function`&&Promise.resolve(t).catch(t=>{console.warn(`[WarmSessionStore] warm-session transition callback failed`,{type:e.event.type,walletId:e.event.walletId,error:t})})}catch(t){console.warn(`[WarmSessionStore] warm-session transition callback failed`,{type:e.event.type,walletId:e.event.walletId,error:t})}}function DF(e){return String(e||``).trim()||void 0}function OF(e){let t=String(e.persistedSessionIdRaw||``).trim();if(t!==e.expectedThresholdSessionId)throw Error(`[WarmSessionStore] provisioned Ed25519 capability was not persisted for ${e.walletId} (expected thresholdSessionId=${e.expectedThresholdSessionId}, found=${t||`missing`})`)}function kF(e){return e.kind===`exact_ed25519_provisioning`?B(Gc(e.laneIdentity,`exact Ed25519 capability provisioning`).walletId):B(e.walletId)}function AF(e){return mn(e.kind===`exact_ed25519_provisioning`?Gc(e.laneIdentity,`exact Ed25519 capability provisioning`).nearAccountId:e.nearAccountId)}async function jF(e,t){let n=AF(t),r=kF(t);if(!r)throw Error(`[WarmSessionStore] walletId is required to provision Ed25519 capability`);if(typeof e.provisionThresholdEd25519Session!=`function`)throw Error(`[WarmSessionStore] provisionThresholdEd25519Session is required to provision Ed25519 capability`);let i=await e.getWarmSession(r);await t.beforeProvision?.(),t.assertNotCancelled?.();let a=await e.provisionThresholdEd25519Session(t);if(t.assertNotCancelled?.(),!a.ok)return a;let o=DF(a.thresholdSessionId);if(!o)throw Error(`[WarmSessionStore] provisioned Ed25519 capability is missing thresholdSessionId for ${n}`);let s=await e.getWarmSession(r);return OF({walletId:r,expectedThresholdSessionId:o,persistedSessionIdRaw:s.capabilities.ed25519.runtime?.thresholdSessionId}),EF({onTransition:e.onTransition,event:{type:`ed25519_capability_provisioned`,walletId:r,thresholdSessionId:o,before:TF(i),after:TF(s)}}),a}async function MF(e,t){return await jF({getWarmSession:t=>e.getWarmSession(t),provisionThresholdEd25519Session:async t=>await e.provisionThresholdEd25519Session(t)},t)}async function NF(e,t){return await e.bootstrapEcdsaSession(t)}function PF(e){switch(e){case`email_otp`:return{authMethod:z.emailOtp,signerSource:It.emailOtpRegistration};case`login`:case`registration`:case`manual-bootstrap`:return{authMethod:z.passkey,signerSource:It.passkeyRegistration};default:throw Error(`[SigningEngine] unsupported threshold ECDSA session source`)}}function FF(e){throw Error(`[SigningEngine] unsupported threshold ECDSA bootstrap backend binding: ${JSON.stringify(e)}`)}async function IF(e){let t=e.bootstrap.thresholdEcdsaKeyRef.backendBinding;if(!t)throw Error(`[SigningEngine] ECDSA bootstrap is missing its backend binding`);let n=LF(t);if(!n)return;let r=await e.deps.persistEcdsaRoleLocalReadyRecord({record:n,storageKeyFacts:yi(n)});if(!r.ok)throw Error(`[SigningEngine] ECDSA role-local ready record persistence failed (${r.code}): ${r.message}`)}function LF(e){switch(e.materialKind){case`role_local_ready_state_blob`:return e.ecdsaRoleLocalReadyRecord;case`role_local_worker_handle`:case`role_local_durable_public_anchor`:case`role_local_durable_sealed_ref`:case`metadata_only`:return null;default:return FF(e)}}async function RF(e,t){return t.source===`email_otp`?await e.ensureSealedRefreshStartupParityForThresholdEcdsaBootstrap({kind:`email_otp_bootstrap_parity`,walletId:t.walletId,chainTarget:t.chainTarget,authMethod:z.emailOtp}):await e.ensureSealedRefreshStartupParityForThresholdEcdsaBootstrap({kind:`default_bootstrap_parity`,walletId:t.walletId,chainTarget:t.chainTarget}),await su(e.queueByWallet,t.walletId,async()=>{let n=t.bootstrap;if(!String(n.thresholdEcdsaKeyRef.ecdsaThresholdKeyId||``).trim())throw Error(`[SigningEngine] threshold-ecdsa bootstrap did not provide canonical ecdsaThresholdKeyId`);return await oh({bootstrapStore:e.bootstrapStore,walletId:t.walletId,chainTarget:t.chainTarget,bootstrap:n,signerAuth:PF(t.source)}),await IF({deps:e,bootstrap:n}),{bootstrap:n,authorization:await Al(K,{walletId:t.walletId,authority:t.authority,bootstrap:n})}})}async function zF(e,t){let n=t.source===`email_otp`?await RF(e,{walletId:t.walletId,chainTarget:t.chainTarget,bootstrap:t.bootstrap,source:`email_otp`,authority:t.authority,emailOtpAuthContext:t.emailOtpAuthContext}):await RF(e,{walletId:t.walletId,chainTarget:t.chainTarget,bootstrap:t.bootstrap,source:t.source,authority:t.authority});return{bootstrap:n.bootstrap,authorization:n.authorization}}function BF(e){let t=[],n=new Set;for(let r of e.network.chains){let e=qe(r.network);if(e!==`evm`&&e!==`tempo`)continue;let i=nn(r),a=V(i);n.has(a)||(n.add(a),t.push(i))}if(!t.length)throw Error(`[EmailOtpSession] exact ECDSA snapshot requires configured ECDSA targets`);return t}function VF(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function HF(){return{signingSessionSealApplyMs:0,warmCapabilityPersistenceMs:0}}function UF(e,t,n){e[t]+=Math.max(0,Math.round(VF()-n))}function WF(e,t){e.signingSessionSealApplyMs+=t.signingSessionSealApplyMs,e.warmCapabilityPersistenceMs+=t.warmCapabilityPersistenceMs}function GF(e){let t=String(e||``).trim().toLowerCase();return/^0x[0-9a-f]{40}$/.test(t)?t:null}function KF(e){let t=[],n=new Set,r=e=>{let r=V(e);n.has(r)||(n.add(r),t.push(e))};r(e.chainTarget);let i=e.additionalChainTargets!==void 0;for(let t of e.additionalChainTargets||[])r(t);if(!i&&sl(e.emailOtpAuthContext)===`session`)for(let t of BF(e.configs))r(t);return t}function qF(e){let t=Pe(e.runtimePolicyScope),n=String(t.signingRootId).trim(),r=String(t.signingRootVersion||`default`).trim();if(!n||!r)throw Error(`Email OTP ECDSA persisted identity is incomplete`);return{signingRootId:n,signingRootVersion:r}}function JF(e){let t=e.existingKey.persistedRoleLocalMaterial.publicFacts,n=_i({walletId:t.walletId,chainTarget:e.chainTarget,keyHandle:t.keyHandle,ecdsaThresholdKeyId:t.ecdsaThresholdKeyId,signingRootId:t.signingRootId,signingRootVersion:t.signingRootVersion,applicationBindingDigestB64u:t.applicationBindingDigestB64u,clientParticipantId:t.clientParticipantId,relayerParticipantId:t.relayerParticipantId,participantIds:t.participantIds,contextBinding32B64u:t.contextBinding32B64u,derivationClientSharePublicKey33B64u:t.derivationClientSharePublicKey33B64u,relayerPublicKey33B64u:t.relayerPublicKey33B64u,groupPublicKey33B64u:t.groupPublicKey33B64u,ethereumAddress:t.ethereumAddress,publicCapability:t.publicCapability});return{keyHandle:e.existingKey.keyHandle,publicCapability:n.publicCapability,walletKey:va({walletId:n.walletId,keyHandle:n.keyHandle,chainTarget:e.chainTarget,ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,signingRootId:n.signingRootId,signingRootVersion:n.signingRootVersion,participantIds:n.participantIds,thresholdOwnerAddress:n.ethereumAddress,thresholdEcdsaPublicKeyB64u:n.groupPublicKey33B64u}),persistedRoleLocalMaterial:Od({authority:e.existingKey.persistedRoleLocalMaterial.authority,materialActivation:e.existingKey.persistedRoleLocalMaterial.materialActivation,publicFacts:n}),runtimePolicyScope:e.existingKey.runtimePolicyScope}}function YF(e){let t=e.durableMaterial.roleLocalPublicFacts,n=va({walletId:t.walletId,keyHandle:t.keyHandle,chainTarget:t.chainTarget,ecdsaThresholdKeyId:t.ecdsaThresholdKeyId,signingRootId:t.signingRootId,signingRootVersion:t.signingRootVersion,participantIds:t.participantIds,thresholdOwnerAddress:t.ethereumAddress,thresholdEcdsaPublicKeyB64u:t.groupPublicKey33B64u});return{keyHandle:String(n.keyHandle),publicCapability:t.publicCapability,walletKey:n,persistedRoleLocalMaterial:Od({authority:e.signer.authority,materialActivation:e.activation.materialActivation,publicFacts:t}),runtimePolicyScope:e.durableMaterial.runtimePolicyScope}}async function XF(e){let t=e.scope.kind===`exact`?qF({runtimePolicyScope:e.scope.runtimePolicyScope}):null,n=String(e.keyHandle||``).trim(),r=e.scope.kind===`durable_manifest`?null:e.scope.authorityRef,i=(await e.listActiveEcdsaCapabilityManifestsForWallet(e.walletId)).filter(i=>{let a=i.durableMaterial.roleLocalPublicFacts;return i.signer.walletId===e.walletId&&(!r||i.signer.authority.walletAuthMethodId===r.walletAuthMethodId&&String(i.signer.authority.authorityDigest)===String(r.authorityDigest))&&i.signer.scope.targetMemberships.some(t=>an(t,e.chainTarget))&&(!n||String(a.keyHandle).trim()===n)&&(!t||String(a.signingRootId).trim()===t.signingRootId)&&(!t||String(a.signingRootVersion||`default`).trim()===t.signingRootVersion)}).map(YF).reduce((t,n)=>{let r=t.find(e=>e.keyHandle===n.keyHandle);if(!r)return t.push(n),t;if(!Vr(r.publicCapability,n.publicCapability)||!g(r.persistedRoleLocalMaterial.materialActivation,n.persistedRoleLocalMaterial.materialActivation))throw Error(`Email OTP ECDSA has conflicting persisted role-local material for ${V(e.chainTarget)}`);return t},[]);if(i.length===0)return null;if(i.length!==1)throw Error(`Email OTP ECDSA has multiple persisted public capabilities for ${V(e.chainTarget)}`);return JF({existingKey:i[0],chainTarget:e.chainTarget})}function ZF(e){return{authMethod:`email_otp`,curve:`ecdsa`,walletId:e.walletId,chainTarget:e.chainTarget,walletSessionId:e.walletSessionId,quotaId:e.quotaId,thresholdSessionId:Ea.thresholdEcdsaSession(e.thresholdSessionId),emailOtpAuthContext:e.emailOtpAuthContext,material:{kind:`worker_handle`,workerSessionId:e.thresholdSessionId}}}function QF(e){let t=String(e.warmThresholdSessionId).trim();if(!t)throw Error(`Email OTP sealed refresh requires a warm threshold session`);return{warmMaterialTarget:{kind:`ecdsa`,thresholdSessionId:t},authorizationThresholdSessionId:$F(e.normalSigning)}}function $F(e){return Hr(e)}async function eI(e,t){if(e.bootstraps.length!==e.publicationChainTargets.length)throw Error(`Email OTP ECDSA publication returned an unexpected lane count`);let n=HF(),r=[],i=e.bootstraps[0]?.session;if(!i)throw Error(`Email OTP ECDSA publication has no primary session`);for(let[t,n]of e.bootstraps.entries()){let a=e.publicationChainTargets[t],o=n.thresholdEcdsaKeyRef.chainTarget;if(!an(o,a))throw Error(`Email OTP ECDSA publication returned ${V(o)} for ${V(a)}`);if(n.session.walletSessionId!==i.walletSessionId||n.session.quotaId!==i.quotaId)throw Error(`Email OTP ECDSA publication returned mismatched Wallet Session authority`);r.push({chainTarget:a,bootstrap:n})}let a={args:e,ports:t},o=await Promise.all(r.map(nI.bind(null,a))),s=o.map(tI);for(let e of o)WF(n,e.timings);let[c,...l]=s;if(!c)throw Error(`Email OTP ECDSA publication did not commit a primary lane`);return{bootstrap:c.bootstrap,authorization:c.authorization,authorizations:[c.authorization,...l.map(e=>e.authorization)],timings:n}}function tI(e){return e.result}async function nI(e,t){let n=HF(),r=t.bootstrap,i=VF(),a=await e.ports.commitEvmFamilyThresholdEcdsaSessions({walletId:e.args.walletId,chainTarget:t.chainTarget,bootstrap:r,source:`email_otp`,authority:e.args.authority,emailOtpAuthContext:e.args.emailOtpAuthContext});return UF(n,`warmCapabilityPersistenceMs`,i),WF(n,await rI({walletId:e.args.walletId,chainTarget:t.chainTarget,bootstrap:a.bootstrap,runtimePolicyScope:e.args.runtimePolicyScope,emailOtpAuthContext:e.args.emailOtpAuthContext,relayerUrl:e.args.relayerUrl,groupId:e.args.groupId},e.ports)),{result:a,timings:n}}async function rI(e,t){let n=HF();if(t.configs.signing.sessionPersistenceMode!==`sealed_refresh_v1`||sl(e.emailOtpAuthContext)!==`session`)return n;let r=t.getSignerWorkerContext();if(!r)throw Error(`Email OTP sealed refresh requires the dedicated emailOtp worker`);let i=e.bootstrap.thresholdEcdsaKeyRef,a=e.bootstrap.session,o=String(a.thresholdSessionId||``).trim(),s=String(e.relayerUrl||i.relayerUrl||``).trim();if(e.groupId&&e.groupId!==`rfc2409-group2`)throw Error(`Email OTP sealed refresh received an unsupported Shamir group`);let c=Ze;if(!o||!s)throw Error(`Email OTP sealed refresh is missing threshold-session persistence metadata`);let l=ZF({walletId:e.walletId,chainTarget:e.chainTarget,walletSessionId:a.walletSessionId,quotaId:a.quotaId,thresholdSessionId:o,emailOtpAuthContext:e.emailOtpAuthContext}),u=a.operationCredential,d=e.runtimePolicyScope,f=Pe(d),p=String(f?.signingRootId||``).trim(),m=String(f?.signingRootVersion||``).trim(),h=String(i.ecdsaThresholdKeyId||``).trim(),_=String(i.userId||``).trim(),v=String($c(e.emailOtpAuthContext)||_).trim(),y=String(dl(e.emailOtpAuthContext)).trim(),b=GF(i.ethereumAddress),x=String(i.backendBinding?.clientVerifyingShareB64u||``).trim(),S=String(i.thresholdEcdsaPublicKeyB64u||``).trim(),C=String(i.backendBinding?.relayerKeyId||``).trim(),w=i.routerAbEcdsaDerivationNormalSigning,T=i.backendBinding,E=null,D=null;(T?.materialKind===`role_local_worker_handle`||T?.materialKind===`role_local_durable_sealed_ref`)&&(E=T.roleLocalMaterialRef,D=T.publicFacts.publicCapability);let O=Array.isArray(i.participantIds)?i.participantIds.map(e=>Math.floor(Number(e))).filter(e=>Number.isFinite(e)&&e>0):[];if(!h||!_||!v||!y||!b||!x||!C||!w||!D||!E||!O.length||!u.token||!p||!m)throw Error(`Email OTP sealed refresh is missing ECDSA restore metadata`);if(l.material.kind!==`worker_handle`)throw Error(`Email OTP sealed refresh requires worker-owned warm material`);let k=l.material.workerSessionId,A=i.chainTarget;if(!A)throw Error(`Email OTP sealed refresh requires exact ECDSA chain target`);if(!an(A,l.chainTarget))throw Error(`Email OTP sealed refresh chain target drifted from ${V(l.chainTarget)} to ${V(A)}`);let j=String(i.keyHandle||``).trim();if(!j)throw Error(`Email OTP sealed refresh requires exact ECDSA key handle`);let M=E.materialActivation,ee=QF({warmThresholdSessionId:k,normalSigning:w}),te=await H({authority:e.emailOtpAuthContext.authority}),ne=await XF({walletId:e.walletId,chainTarget:e.chainTarget,scope:{kind:`exact`,runtimePolicyScope:d,authorityRef:te},keyHandle:j,listActiveEcdsaCapabilityManifestsForWallet:t.listActiveEcdsaCapabilityManifestsForWallet});if(!ne||!g(ne.persistedRoleLocalMaterial.materialActivation,M))throw Error(`Email OTP sealed refresh material activation was superseded`);let re=VF(),N=await OP({workerCtx:r,target:ee.warmMaterialTarget,authorizationThresholdSessionId:ee.authorizationThresholdSessionId,transport:{relayerUrl:s,operationCredential:u,groupId:c}}).catch(e=>{let t=e instanceof Error?e.message:String(e||`unknown error`);throw Error(`Email OTP sealed refresh seal failed: ${t}`)});if(UF(n,`signingSessionSealApplyMs`,re),!N?.ok){let e=String(N?.message||N?.code||`unknown error`).trim();throw Error(`Email OTP sealed refresh seal failed: ${e}`)}let ie=String(N.sealedSecretB64u||``).trim(),ae=Math.floor(Number(N.expiresAtMs)||Number(a?.expiresAtMs)||0),oe=Math.floor(Number(N.remainingUses)||Number(a?.remainingUses)||0);if(!ie||ae<=0||oe<0)throw Error(`Email OTP sealed refresh seal returned invalid persistence metadata`);let se=String(N.keyVersion||``).trim();if(!se)throw Error(`Email OTP sealed refresh seal returned no key version`);let ce=Date.now(),le={thresholdSessionId:l.thresholdSessionId,sealedSecretB64u:ie,curve:`ecdsa`,authMethod:`email_otp`,thresholdSessionIds:{ecdsa:l.thresholdSessionId},walletId:String(e.walletId||``).trim(),relayerUrl:s,keyVersion:se,groupId:c,issuedAtMs:ce,expiresAtMs:ae,remainingUses:oe},ue=VF(),de=await XF({walletId:e.walletId,chainTarget:A,scope:{kind:`exact`,runtimePolicyScope:d,authorityRef:te},keyHandle:j,listActiveEcdsaCapabilityManifestsForWallet:t.listActiveEcdsaCapabilityManifestsForWallet});if(!de||!g(de.persistedRoleLocalMaterial.materialActivation,M))throw Error(`Email OTP sealed refresh material activation was superseded`);let fe=de.persistedRoleLocalMaterial.authority;await t.registerSigningSession({...le,ecdsaRestore:{chainTarget:A,source:`email_otp`,signingRootId:p,signingRootVersion:m,provider:Qc(e.emailOtpAuthContext),providerSubjectId:v,emailHashHex:y,authority:fe,emailOtpAuthority:e.emailOtpAuthContext.authority,...d?{runtimePolicyScope:d}:{},keyHandle:j,ecdsaThresholdKeyId:h,ethereumAddress:b,relayerKeyId:C,clientVerifyingShareB64u:x,...S?{thresholdEcdsaPublicKeyB64u:S}:{},participantIds:O,routerAbEcdsaDerivationNormalSigning:w,publicCapability:D,roleLocalMaterialRef:E},updatedAtMs:ce});let pe=await t.readExactSealedSession(o,{authMethod:`email_otp`,curve:`ecdsa`,chainTarget:A}).catch(e=>{let t=e instanceof Error?e.message:String(e||`unknown error`);throw Error(`Email OTP sealed refresh read-back failed: ${t}`)});if(UF(n,`warmCapabilityPersistenceMs`,ue),!pe)throw Error(`Email OTP sealed refresh ${V(A)} record was not durably persisted`);let me=pe.ecdsaRestore?.roleLocalMaterialRef;if(pe.authMethod!==`email_otp`||pe.secretKind!==`signing_session_secret32`||pe.thresholdSessionIds.ecdsa!==o||pe.sealedSecretB64u!==ie||!me||!iI(me,E)||!pe.ecdsaRestore?.chainTarget||!an(pe.ecdsaRestore.chainTarget,A))throw Error(`Email OTP sealed refresh read-back record does not match ${V(A)} unlock session`);return n}function iI(e,t){return e.kind===t.kind&&e.durableMaterialRef===t.durableMaterialRef&&e.bindingDigest===t.bindingDigest&&g(e.materialActivation,t.materialActivation)}function aI(e){return{thresholdSessionId:Ea.thresholdEcdsaSession(e.thresholdSessionId)}}function oI(e){if(!e)return{kind:`not_requested`};switch(e.kind){case`wallet_custody_cache_absent`:return{kind:`cache_absent`,bootstrap:e.ed25519YaoRecovery};case`ed25519_yao_capability`:return{kind:`capability`,activeClientHandle:e.activeClientHandle,metadata:e.metadata,bootstrap:e.ed25519YaoCapability}}throw Error(`Unsupported Email OTP Ed25519 unlock material`)}async function sI(e){if(e.workerResult){switch(e.workerResult.kind){case`wallet_custody_cache_absent`:return;case`ed25519_yao_capability`:if(!await wy({workerContext:e.workerContext,activeClientHandle:e.workerResult.activeClientHandle}))throw Error(`Email OTP capability unlock local Ed25519 client was unavailable`);return}e.workerResult}}function cI(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}async function lI(e){try{await Ga(Ka(e.workerContext),{existingEnvelope:e.unlock.ed25519ExportRootCustody.existingEnvelope,existingFactorSecret:e.unlock.ed25519ExportRootCustody.factorSecret32,walletId:String(e.authorization.record.walletId),walletAuthMethodId:e.walletAuthMethodId,walletSessionId:String(e.authorization.operationCredential.walletSessionId),expiresAtMs:e.authorization.record.expiresAtMs})}catch(e){console.warn(`[SigningEngine][email-otp] unlocked Ed25519 export-root capability was not established:`,e instanceof Error?e.message:String(e||`unknown error`))}}function uI(){return{emailOtpProofVerificationMs:0,ecdsaMaterialRestoreMs:0,signingSessionSealApplyMs:0,warmCapabilityPersistenceMs:0}}function dI(e,t,n){e[t]+=Math.max(0,Math.round(cI()-n))}function fI(e,t){e.signingSessionSealApplyMs+=t.signingSessionSealApplyMs,e.warmCapabilityPersistenceMs+=t.warmCapabilityPersistenceMs}function pI(e,t){let n=String(e||``).trim();if(!n)throw Error(`[SigningEngine][email-otp] ${t} is required`);return n}function mI(e){return{provider:e.identity.provider,providerUserId:pI(e.identity.providerUserId,`Email OTP provider user id`)}}async function hI(e){let t=await e.ownerLaneScopeStores.listWalletAuthMethodsForWallet(String(e.walletId)),n=[];for(let r of t){if(r.kind!==`email_otp`||r.status!==`active`||String(r.walletId)!==String(e.walletId)||String(r.emailHashHex)!==String(e.emailHashHex))continue;let t=r.authority;String(t.walletId)!==String(e.walletId)||t.factor.provider!==e.provider||String(t.factor.providerUserId)!==String(e.providerUserId)||String(t.verifier.emailHashHex)!==String(e.emailHashHex)||n.push(t)}let[r,...i]=n;if(!r)return{kind:`canonical_boundary`};if(i.length>0)throw Error(`Email OTP identity matches more than one active wallet auth method`);return{kind:`selected_v2`,authority:r}}function gI(e){let t=r(e.walletAuthMethodId);if(!t.ok)throw Error(`Selected Email OTP wallet auth method is invalid`);let n=Zr({walletId:e.walletId,provider:e.provider,providerUserId:e.providerUserId,emailHashHex:e.emailHashHex});return{kind:`selected_v2`,authority:{walletId:n.walletId,factor:n.factor,verifier:n.verifier,bindingId:t.value}}}async function _I(e){if(e.authoritySelector.kind===`wallet_auth_method`)return await gI({walletId:e.walletId,walletAuthMethodId:e.authoritySelector.walletAuthMethodId,emailHashHex:e.emailHashHex,provider:e.provider,providerUserId:e.providerUserId});let t=await e.authorityPorts.resolveSelectedWalletAuthority(String(e.walletId));if(t.kind===`missing_selection`)return{kind:`canonical_boundary`};if(t.kind!==`resolved`)throw Error(`Email OTP authority selection is unavailable: ${t.kind}`);if(t.authMethod.kind!==`email_otp`)return await hI({walletId:e.walletId,emailHashHex:e.emailHashHex,provider:e.provider,providerUserId:e.providerUserId,ownerLaneScopeStores:e.authorityPorts.ownerLaneScopeStores});if(t.authMethod.status!==`active`||t.authority.state!==`active`||String(t.authMethod.walletId)!==String(e.walletId)||String(t.authority.walletId)!==String(e.walletId)||String(t.authMethod.walletAuthorityId)!==String(t.authority.authorityId))throw Error(`Email OTP authority selected by the wallet is not active`);let n=t.authMethod,r=String(n.walletAuthMethodId),i=await Lp({authMethod:n,stores:e.authorityPorts.ownerLaneScopeStores});if(!oi(i))throw Error(`Email OTP authority selected by the wallet session has the wrong factor`);let a=await H({authority:i});if(String(a.walletId)!==String(t.authority.walletId)||String(a.walletAuthMethodId)!==r||String(i.verifier.emailHashHex)!==String(e.emailHashHex)||i.factor.provider!==e.provider||String(i.factor.providerUserId)!==String(e.providerUserId))throw Error(`Email OTP authority selected by the wallet session does not match the request`);return{kind:`selected_v2`,authority:i}}function vI(e){return e.source.kind===`selected_v2`&&!e.runtimePolicyScope?{kind:`exact_authority`,authorityRef:e.authorityRef}:e.runtimePolicyScope?{kind:`exact`,runtimePolicyScope:e.runtimePolicyScope,authorityRef:e.authorityRef}:{kind:`durable_manifest`}}function yI(e){if(`persistedExportMaterial`in e&&`explicitExportAuthorization`in e&&e.operation===`export_key`)return e;throw Error(`Email OTP ECDSA export requires prepared operation authorization`)}function bI(e){switch(e.unseal.kind){case`email_otp_grant`:return{kind:`email_otp_unseal_grant`,grant:e.unseal.grant,challengeId:e.unseal.challenge_id};case`not_requested`:throw Error(`Email OTP ECDSA export requires its verified unseal grant`);default:{let t=e.unseal;throw Error(`Unsupported Email OTP ECDSA export unseal state: ${String(t)}`)}}}function xI(e){if(e.operation!==e.routePlan.operation)throw Error(`Email OTP operation does not match its route plan`)}function SI(e){let t=e.existingKey.walletKey;if(String(e.handle.walletId)!==String(t.walletId)||String(e.handle.keyHandle)!==String(t.keyHandle)||e.handle.authSubjectId!==$c(e.emailOtpAuthContext)||!an(e.handle.chainTarget,t.chainTarget)||!an(e.handle.chainTarget,e.chainTarget))throw Error(`Email OTP ECDSA export worker handle does not match the resolved lane`)}function CI(e){if(!al(e))throw Error(`Email OTP ECDSA export requires single-use authorization`);return e}function wI(e){let t=Ce({ttlMs:e.ttlMs??Se.ttlMs,remainingUses:e.remainingUses});return{ttlMs:t.ttlMs,remainingUses:t.remainingUses}}function TI(e){let t=e.bootstrap.session,n=Math.floor(Number(t.expiresAtMs)),r=Math.floor(Number(t.remainingUses)),i=n-Date.now();if(!Number.isSafeInteger(n)||i<1)throw Error(`Email OTP capability unlock returned an invalid server signing budget`);if(r!==e.expectedRemainingUses)throw Error(`Email OTP capability unlock changed the requested signing budget uses`);return{ttlMs:i,remainingUses:r}}function EI(e){return e.ed25519YaoResult?TI({bootstrap:e.ed25519YaoResult.kind===`wallet_custody_cache_absent`?e.ed25519YaoResult.ed25519YaoRecovery:e.ed25519YaoResult.ed25519YaoCapability,expectedRemainingUses:e.requestedRemainingUses}):wI({ttlMs:e.requestedTtlMs,remainingUses:e.requestedRemainingUses})}function DI(e){if(!e)throw Error(`Email OTP capability recovery requires explicit wallet unlock`);return e}function OI(e){return{kind:`router_ab_ecdsa_post_registration_session_activation_policy_v1`,key_handle:String(e.keyHandle),session_policy:e.request.session_policy}}function kI(e){return{kind:`router_ab_ecdsa_post_registration_session_activation_policy_v1`,key_handle:String(e.keyHandle),session_policy:{threshold_session_id:FI(e.thresholdSessionId),wallet_session_mint_id:II(e.walletSessionMintId),ttl_ms:e.ttlMs,remaining_uses:e.remainingUses,runtime_policy_scope:e.runtimePolicyScope}}}function AI(e,t){if(e.operation!==`wallet_unlock`||!e.ecdsaSession)throw Error(`Email OTP unlock did not return its ECDSA Wallet Session`);if(e.ecdsaSession.kind===`router_ab_ecdsa_credential_free_session_activated_v1`){if(!t)throw Error(`Email OTP combined unlock did not return its exact Wallet Session`);return{kind:`credential_free_ecdsa_session_activation_authorization_v1`,activation:e.ecdsaSession,authorization:t}}return e.ecdsaSession}function jI(e){if(!e)throw Error(`Email OTP unlock did not return its prepared ECDSA Wallet Session`);return e}function MI(e,t,n){let r=e.signers[0];if(!r)throw Error(`Email OTP ECDSA custody continuity is empty`);if(r.walletKey.walletId!==t||r.walletKey.keyHandle!==n)throw Error(`Email OTP ECDSA custody continuity changed the requested wallet key`);for(let t of e.signers)if(t.walletKey.walletId!==r.walletKey.walletId||t.walletKey.keyHandle!==r.walletKey.keyHandle||t.walletKey.ecdsaThresholdKeyId!==r.walletKey.ecdsaThresholdKeyId||t.walletKey.signingRootId!==r.walletKey.signingRootId||t.walletKey.signingRootVersion!==r.walletKey.signingRootVersion||t.walletKey.relayerKeyId!==r.walletKey.relayerKeyId||!Vr(t.walletKey.publicCapability,r.walletKey.publicCapability)||!si(t.activationReceipt,r.activationReceipt)||!Ie(t.runtimePolicyScope,r.runtimePolicyScope))throw Error(`Email OTP ECDSA custody continuity conflicts across targets`);return r}function NI(e){let[t,...n]=e.signers;if(!t)throw Error(`Email OTP ECDSA custody continuity is empty`);return[t.chainTarget,...n.map(e=>e.chainTarget)]}async function PI(e){let t=e.restore.ecdsaCustody,n=MI(t.continuity,e.walletId,e.keyHandle);await e.restoreWalletCustodyEcdsaContinuity({authority:e.authority,chainTargets:NI(t.continuity),walletId:n.walletKey.walletId,keyHandle:n.walletKey.keyHandle,ecdsaThresholdKeyId:n.walletKey.ecdsaThresholdKeyId,signingRootId:n.walletKey.signingRootId,signingRootVersion:n.walletKey.signingRootVersion,relayerKeyId:n.walletKey.relayerKeyId,participantIds:n.walletKey.participantIds,publicCapability:n.walletKey.publicCapability,activationReceipt:n.activationReceipt,runtimePolicyScope:n.runtimePolicyScope,readyStateBlobB64u:t.readyStateBlobB64u,publicFacts:t.publicFacts})}function FI(e){let t=l(e);if(!t.ok)throw Error(`Failed to create Email OTP threshold session identity`);return t.value}function II(e){let t=ht(e);if(!t.ok)throw Error(`Failed to create Email OTP Wallet Session mint identity`);return t.value}function LI(e){if(!e)throw Error(`Email OTP ECDSA bootstrap requires route auth`);return e}function RI(e){switch(e){case Lt:return`sign`;case Nt:return`export`;case Ft:throw Error(`Email OTP wallet unlock requires first-session activation`);case zt:throw Error(`Email OTP relocation approval cannot create a signing session`);case Ht:throw Error(`Email OTP device linking requires linked-device activation`);case`registration`:throw Error(`Email OTP ECDSA registration requires wallet-registration prepare`)}throw Error(`Unsupported Email OTP non-unlock operation`)}function zI(e){switch(e.operation){case`sign`:return{keyHandle:e.keyHandle,authSubjectId:e.authSubjectId,operation:`sign`,chainTarget:e.chainTarget};case`export`:return{keyHandle:e.keyHandle,authSubjectId:e.authSubjectId,operation:`export`,chainTarget:e.chainTarget}}throw e.operation,Error(`Unsupported Email OTP non-unlock handle operation`)}function BI(e){if(e.emailOtpWorkerSessionHandle.action!==`threshold_ecdsa_bootstrap`)throw Error(`Email OTP ECDSA activation requires a threshold ECDSA worker handle`);let t=aI({thresholdSessionId:e.thresholdSessionId}),n=fa({chainTarget:e.chainTarget,thresholdSessionId:t.thresholdSessionId,ttlMs:e.ttlMs,remainingUses:e.remainingUses,runtimePolicyScope:e.runtimePolicyScope});if(el(e.emailOtpAuthContext)){let r={source:`email_otp`,relayerUrl:e.relayerUrl,sessionIdentity:t,sessionKind:`opaque`,sessionBudgetUses:e.remainingUses,runtimePolicy:{kind:`scoped_policy`,scope:e.runtimePolicyScope},emailOtpWorkerSessionHandle:e.emailOtpWorkerSessionHandle,emailOtpAuthContext:e.emailOtpAuthContext,walletKey:e.existingKey.walletKey,lanePolicy:n,publicCapability:e.existingKey.publicCapability,existingRoleLocalMaterial:e.existingKey.persistedRoleLocalMaterial};return e.authorization.kind===`preauthorized_wallet_unlock`?ou({...r,preauthorizedSessionActivation:e.authorization.sessionActivation}):Zl({...r,walletSessionRouteAuth:e.authorization.routeAuth})}if(al(e.emailOtpAuthContext)){if(e.authorization.kind===`preauthorized_wallet_unlock`)throw Error(`Email OTP operation step-up cannot adopt a reusable Wallet Session`);return Xl({source:`email_otp`,relayerUrl:e.relayerUrl,sessionIdentity:t,sessionKind:`opaque`,sessionBudgetUses:e.remainingUses,runtimePolicy:{kind:`scoped_policy`,scope:e.runtimePolicyScope},emailOtpWorkerSessionHandle:e.emailOtpWorkerSessionHandle,emailOtpAuthContext:e.emailOtpAuthContext,walletSessionRouteAuth:e.authorization.routeAuth,walletKey:e.existingKey.walletKey,lanePolicy:n,publicCapability:e.existingKey.publicCapability,existingRoleLocalMaterial:e.existingKey.persistedRoleLocalMaterial})}throw Error(`Email OTP ECDSA activation cannot use a consumed single-use context`)}function VI(e){if(e.emailOtpWorkerSessionHandle.action!==`threshold_ecdsa_bootstrap`)throw Error(`Email OTP ECDSA recovery requires a threshold ECDSA worker handle`);let t=Ea.thresholdEcdsaSession(e.thresholdSessionId);return cu({source:`email_otp`,relayerUrl:e.relayerUrl,sessionIdentity:{kind:`recovered_material_session`,thresholdSessionId:t,materialActivation:e.existingKey.persistedRoleLocalMaterial.materialActivation},sessionKind:`opaque`,sessionBudgetUses:e.remainingUses,runtimePolicy:{kind:`scoped_policy`,scope:e.runtimePolicyScope},emailOtpWorkerSessionHandle:e.emailOtpWorkerSessionHandle,emailOtpAuthContext:e.emailOtpAuthContext,walletSessionRouteAuth:e.routeAuth,walletKey:e.existingKey.walletKey,lanePolicy:xa({chainTarget:e.chainTarget,thresholdSessionId:t,ttlMs:e.ttlMs,remainingUses:e.remainingUses,runtimePolicyScope:e.runtimePolicyScope}),publicCapability:e.existingKey.publicCapability,existingRoleLocalMaterial:e.existingKey.persistedRoleLocalMaterial})}function HI(e){switch(e.kind){case`route_authorized`:return{sessionIdentity:e.sessionIdentity,authorization:{kind:`route_authorized`,routeAuth:e.routeAuth}};case`preauthorized_wallet_unlock`:{let t=e.request.session_policy,n=Yl(e.response)?e.response.activation.session:e.response.session;if(t.threshold_session_id!==n.threshold_session_id)throw Error(`Email OTP unlock returned a different prepared ECDSA session identity`);return{sessionIdentity:aI({thresholdSessionId:n.threshold_session_id}),authorization:{kind:`preauthorized_wallet_unlock`,sessionActivation:e.response}}}}}async function UI(e){let t=Kd(e.emailOtpSessionHandle);if(t.action!==`threshold_ecdsa_bootstrap`)throw Error(`Email OTP wallet unlock returned an invalid ECDSA worker handle`);let n=HI(e.primarySession),r={args:e,sessionIdentity:n.sessionIdentity,authorization:n.authorization,emailOtpWorkerSessionHandle:t},i=e.publicationChainTargets[0];if(!i)throw Error(`Email OTP ECDSA activation requires a primary target`);let a=await WI(r,i),o=e.primarySession.kind===`preauthorized_wallet_unlock`?n.authorization:{kind:`route_authorized`,routeAuth:a.session.operationCredential},s={...r,args:{...e,primarySession:{kind:`route_authorized`,sessionIdentity:n.sessionIdentity,routeAuth:a.session.operationCredential}},authorization:o},c=[a,...await Promise.all(e.publicationChainTargets.slice(1).map(WI.bind(null,s)))];if(!a)throw Error(`Email OTP ECDSA activation did not return a primary warm session`);return c}async function WI(e,t){let n=JF({existingKey:e.args.primaryExistingKey,chainTarget:t});return await e.args.ports.provisionThresholdEcdsaSession(BI({existingKey:n,chainTarget:t,thresholdSessionId:e.sessionIdentity.thresholdSessionId,ttlMs:e.args.ttlMs,remainingUses:e.args.remainingUses,runtimePolicyScope:e.args.runtimePolicyScope,relayerUrl:e.args.relayerUrl,emailOtpAuthContext:e.args.emailOtpAuthContext,emailOtpWorkerSessionHandle:e.emailOtpWorkerSessionHandle,authorization:e.authorization}))}async function GI(e){return await e.ports.provisionEmailOtpEcdsaExplicitExportSession(nu({relayerUrl:e.relayerUrl,existingRoleLocalMaterial:e.persistedMaterial,authorization:e.authorization}))}function KI(e){let t=Math.floor(Number(e)||0);if(!Number.isFinite(t)||t<=0)throw Error(`[SigningEngine][email-otp][ecdsa] signing remainingUses is required`);return t}function qI(e){let t=e.runtimePolicyScope;if(!t)throw Error(`Email OTP ECDSA signing refresh requires runtimePolicyScope`);return t}function JI(e){if(e.authority.factor.kind!==`email_otp`||!e.authLane)throw Error(`[SigningEngine][email-otp][ecdsa] committed lane requires Email OTP authority`);return{keyHandle:String(sa(e.lane.identity.signer.keyHandle)),participantIds:e.lane.identity.signer.key.participantIds.map(Number),emailHashHex:e.authority.verifier.emailHashHex,providerIdentity:{kind:`explicit_provider_user`,provider:e.authority.factor.provider,providerUserId:e.authority.factor.providerUserId}}}async function YI(e){let t=await e.resolveCurrentEcdsaCapabilityRuntime({walletId:B(e.committedLane.lane.identity.signer.walletId),chainTarget:e.chainTarget});if(t.kind!==`resolved`)throw Error(`[SigningEngine][email-otp][ecdsa] signing refresh runtime unavailable: ${t.reason}`);if(!g(t.runtime.materialActivation,e.committedLane.lane.materialActivation))throw Error(`[SigningEngine][email-otp][ecdsa] signing refresh runtime material activation mismatch`);return{...JI(e.committedLane),runtimePolicyScope:qI({runtimePolicyScope:t.runtime.runtimePolicyScope})}}async function XI(e,t){let n=Lt,r=KI(e.remainingUses),i=e.committedLane,a=await YI({committedLane:i,chainTarget:e.chainTarget,resolveCurrentEcdsaCapabilityRuntime:t.resolveCurrentEcdsaCapabilityRuntime}),o=yo({authLane:uo(i.authLane),operation:n});return await t.loginWithEcdsaCapabilityInternal({walletSession:e.walletSession,authoritySelector:{kind:`wallet_auth_method`,walletAuthMethodId:String((await H({authority:i.authority})).walletAuthMethodId)},chainTarget:e.chainTarget,emailOtpAuthPolicy:`session`,emailOtpAuthReason:`sign`,challengeId:e.challengeId,otpCode:e.otpCode,operation:n,keyHandle:a.keyHandle,participantIds:a.participantIds,routePlan:o,emailHashHex:a.emailHashHex,providerIdentity:a.providerIdentity,ecdsaBootstrapAuthorization:{kind:`route_plan_auth`},remainingUses:r,runtimePolicyScope:a.runtimePolicyScope,ed25519YaoRecovery:{kind:`not_requested`}})}async function ZI(e,t){let n=e.operation??e.routePlan.operation;xI({operation:n,routePlan:e.routePlan});let r=uI(),i=e.chainTarget,a=e.emailOtpAuthPolicy||t.configs.signing.emailOtp.authPolicy,o=e.emailOtpAuthReason||`login`,s=o===`sign`,c=s&&a===`per_operation`?`single_use`:`session`,l=c===`session`?`session`:a,u=String(e.relayUrl||t.requireRelayUrl()).trim(),d=String(e.groupId||t.requireSigningSessionSealGroupId()).trim(),f=e.remainingUses,p=t.configs.signing.sessionDefaults?.remainingUses,m=Math.min(Math.max(1,Math.floor(Number(f??p??xe)||1)),xe),h=Math.max(1,Math.floor(Number(f)||1)),g=be({requestedRemainingUses:m})||(()=>{throw Error(`[SigningEngine][email-otp] unlock session uses are required`)})(),_=s?h:g,v=t.getSignerWorkerContext(),y=e.routePlan,b=e.ecdsaBootstrapAuthorization.kind===`route_plan_auth`?_o(y):e.ecdsaBootstrapAuthorization.routeAuth,x=b?b.operationCredential:void 0,S=e.runtimePolicyScope;if(!v)throw Error(`Email OTP login requires the dedicated emailOtp worker`);let C=mI({identity:e.providerIdentity}),w=await _I({walletId:e.walletSession.walletId,authoritySelector:e.authoritySelector,emailHashHex:e.emailHashHex,provider:C.provider,providerUserId:C.providerUserId,authorityPorts:t}),T=c===`single_use`?w.kind===`selected_v2`?Zc({policy:l,authority:w.authority,retention:`single_use`}):ll({policy:l,walletId:B(e.walletSession.walletId),emailHashHex:e.emailHashHex,retention:`single_use`,provider:C.provider,providerUserId:C.providerUserId}):w.kind===`selected_v2`?Zc({policy:l,authority:w.authority,retention:`session`,reason:o}):ll({policy:l,walletId:B(e.walletSession.walletId),emailHashHex:e.emailHashHex,retention:`session`,reason:o,provider:C.provider,providerUserId:C.providerUserId}),E=vI({source:w,runtimePolicyScope:S,authorityRef:await H({authority:T.authority})}),D=KF({configs:t.configs,chainTarget:i,emailOtpAuthContext:T,...e.publicationChainTargets?{additionalChainTargets:e.publicationChainTargets}:{}}),O=t.publicationPorts,k=n===Ft,A=String(e.keyHandle||``).trim(),j=await XF({walletId:B(e.walletSession.walletId),chainTarget:i,scope:E,keyHandle:e.keyHandle,listActiveEcdsaCapabilityManifestsForWallet:O.listActiveEcdsaCapabilityManifestsForWallet});if(!j&&!k)throw Error(`device_link_required: local threshold ECDSA material is unavailable for ${i.kind}:${i.chainId}`);let M=String(j?.keyHandle||A).trim();if(!M)throw Error(`Email OTP ECDSA wallet unlock requires an exact key handle`);let ee=j?.runtimePolicyScope||S;if(!ee)throw Error(`Email OTP ECDSA wallet unlock requires runtime policy scope`);let te=e.ed25519YaoRecovery.kind===`requested`?await t.loadWalletCustodyEd25519Material({nearAccountId:e.ed25519YaoRecovery.nearAccountId,signerSlot:e.ed25519YaoRecovery.signerSlot}):null,ne=k?Ce({ttlMs:e.ttlMs??Se.ttlMs,remainingUses:_}):null,re=ne?FI(El(`threshold-ecdsa-login`)):null,N=ne&&re&&j?eu({publicCapability:j.publicCapability,thresholdSessionId:re,walletSessionMintId:II(El(`wallet-session-mint`)),ttlMs:ne.ttlMs,remainingUses:ne.remainingUses,runtimePolicyScope:ee}):null,ie=ne&&re?kI({keyHandle:M,thresholdSessionId:re,walletSessionMintId:II(El(`wallet-session-mint`)),ttlMs:ne.ttlMs,remainingUses:ne.remainingUses,runtimePolicyScope:ee}):null,ae=cI(),oe=n===`export_key`?yI(e):null,se=oe?{walletSession:e.walletSession,authoritySelector:e.authoritySelector,relayUrl:u,groupId:d,verification:bI(oe.explicitExportAuthorization),routePlan:y,workerCtx:v,runtimePolicyScope:ee,...e.onProgress?{onProgress:e.onProgress}:{}}:{walletSession:e.walletSession,authoritySelector:e.authoritySelector,relayUrl:u,groupId:d,verification:{kind:`otp`,...e.challengeId?{challengeId:e.challengeId}:{},otpCode:e.otpCode},routePlan:y,workerCtx:v,runtimePolicyScope:ee,...e.onProgress?{onProgress:e.onProgress}:{}},ce=e.ed25519YaoRecovery.kind===`not_requested`?await Ro({...se,...ie?{ecdsaSessionHandleBinding:{keyHandle:M,authSubjectId:C.providerUserId,operation:`wallet_unlock`,chainTarget:i},ecdsaSessionPolicy:N?OI({request:N,keyHandle:M}):ie}:{ecdsaSessionHandleBinding:zI({keyHandle:M,authSubjectId:C.providerUserId,operation:RI(y.operation),chainTarget:i})}}):await Ho({...se,ecdsaSessionHandleBinding:{keyHandle:M,authSubjectId:C.providerUserId,operation:`wallet_unlock`,chainTarget:i},providerSubject:e.ed25519YaoRecovery.providerSubject,signerSlot:e.ed25519YaoRecovery.signerSlot,nearAccountId:e.ed25519YaoRecovery.nearAccountId,expectedOperationalPublicKey:e.ed25519YaoRecovery.expectedOperationalPublicKey,expectedThresholdSessionId:e.ed25519YaoRecovery.expectedThresholdSessionId,walletCustodyEd25519Material:te||{kind:`absent`},remainingUses:_,ecdsaSessionPolicy:N?OI({request:N,keyHandle:M}):DI(ie)}),le=ce.kind===`wallet_unlock_capabilities`?ce.ecdsa:ce,ue=ce.kind===`wallet_unlock_capabilities`?ce.ed25519Yao:null,de=ce.kind===`wallet_unlock_capabilities`?ce.walletSessionAuthorization:void 0;try{if(le.operation===`wallet_unlock`&&!j){let n=await H({authority:T.authority});await PI({restore:le,walletId:String(e.walletSession.walletId),keyHandle:M,authority:n,restoreWalletCustodyEcdsaContinuity:t.restoreWalletCustodyEcdsaContinuity})}if(!j&&(j=await XF({walletId:B(e.walletSession.walletId),chainTarget:i,scope:E,keyHandle:M,listActiveEcdsaCapabilityManifestsForWallet:O.listActiveEcdsaCapabilityManifestsForWallet}),!j))throw Error(`Email OTP ECDSA custody restore did not publish the canonical key`);let a=N||(ie?eu({publicCapability:j.publicCapability,thresholdSessionId:ie.session_policy.threshold_session_id,walletSessionMintId:ie.session_policy.wallet_session_mint_id,ttlMs:ie.session_policy.ttl_ms,remainingUses:ie.session_policy.remaining_uses,runtimePolicyScope:ee}):null),o=n===`export_key`?CI(T):null,s=n===`export_key`?Zd(le.emailOtpSessionHandle):null;s&&o&&SI({handle:s,existingKey:j,chainTarget:i,emailOtpAuthContext:o}),dI(r,`emailOtpProofVerificationMs`,ae);let c=a?AI(le,de):null,l=c?wI({ttlMs:e.ttlMs,remainingUses:_}):EI({ed25519YaoResult:ue,requestedTtlMs:e.ttlMs,requestedRemainingUses:_});if(ae=cI(),n===`export_key`){if(!s||!o)throw Error(`Email OTP ECDSA export worker handle is unavailable`);let n=yI(e),i=await GI({relayerUrl:u,persistedMaterial:n.persistedExportMaterial,authorization:n.explicitExportAuthorization,ports:t});return dI(r,`ecdsaMaterialRestoreMs`,ae),{kind:`transient_export`,value:{bootstrap:i}}}let f=await UI({primaryExistingKey:j,publicationChainTargets:D,runtimePolicyScope:ee,relayerUrl:u,ttlMs:l.ttlMs,remainingUses:l.remainingUses,emailOtpAuthContext:T,emailOtpSessionHandle:le.emailOtpSessionHandle,primarySession:a?{kind:`preauthorized_wallet_unlock`,request:a,response:jI(c)}:{kind:`route_authorized`,sessionIdentity:aI({thresholdSessionId:El(`threshold-ecdsa-login`)}),routeAuth:LI(x)},ports:t});dI(r,`ecdsaMaterialRestoreMs`,ae);let{bootstrap:p,authorization:m,authorizations:h,timings:g}=await eI({walletId:B(e.walletSession.walletId),publicationChainTargets:D,bootstraps:f,runtimePolicyScope:ee,authority:j.persistedRoleLocalMaterial.authority,emailOtpAuthContext:T,relayerUrl:u,groupId:d},O);return ce.kind===`wallet_unlock_capabilities`&&await lI({workerContext:v,unlock:ce,authorization:m,walletAuthMethodId:String(T.authority.bindingId)}),fI(r,g),{kind:`published_signing_session`,value:{recovery:ce.recovery,bootstrap:p,authorization:m,authorizations:h,emailOtpSessionHandle:le.emailOtpSessionHandle,ed25519YaoRecovery:oI(ue),timings:r}}}catch(e){try{await sI({workerResult:ue,workerContext:v})}catch(t){throw AggregateError([e,t],`Email OTP unlock failed and Ed25519 material disposal failed`)}throw e}finally{ce.kind===`wallet_unlock_capabilities`&&ce.ed25519ExportRootCustody.factorSecret32.fill(0)}}async function QI(e,t){if((e.operation??e.routePlan.operation)===`export_key`)throw Error(`Email OTP ECDSA export must use transient export preparation`);let n=await ZI(e,t);if(n.kind!==`published_signing_session`)throw Error(`Email OTP ECDSA login did not publish a signing session`);return n.value}async function $I(e,t){let n=await ZI(e,t);if(n.kind!==`transient_export`)throw Error(`Email OTP ECDSA export preparation published a signing session`);return n.value}var eL=class extends Error{code=`material_activation_superseded`;constructor(e){super(`Email OTP sealed refresh material activation was superseded ${e.replace(`_`,` `)}`),this.phase=e,this.name=`EmailOtpEcdsaSealedRestoreSupersededError`}};function tL(e){return Zc({policy:`session`,authority:e,retention:`session`,reason:`login`})}function nL(e){if(e.length!==2||e[0]!==1||e[1]!==2)throw Error(`Email OTP sealed refresh requires participantIds [1, 2]`);return[1,2]}async function rL(e){if((await H({authority:e.emailOtpAuthority})).walletId!==e.authority.walletId)throw Error(`Email OTP sealed refresh route authority wallet mismatch`);let t=e.publicCapability,n=t.public_identity,r=_i({walletId:B(e.walletId),chainTarget:e.chainTarget,keyHandle:e.keyHandle,ecdsaThresholdKeyId:Rr(e.ecdsaThresholdKeyId),signingRootId:Yr(e.signingRootId),signingRootVersion:zr(e.signingRootVersion),applicationBindingDigestB64u:t.context.application_binding_digest_b64u,participantIds:nL(e.participantIds),clientParticipantId:1,relayerParticipantId:2,contextBinding32B64u:n.context_binding_b64u,derivationClientSharePublicKey33B64u:n.derivation_client_share_public_key33_b64u,relayerPublicKey33B64u:n.server_public_key33_b64u,groupPublicKey33B64u:n.threshold_public_key33_b64u,ethereumAddress:e.ethereumAddress,publicCapability:t}),i=va({walletId:r.walletId,keyHandle:r.keyHandle,chainTarget:r.chainTarget,ecdsaThresholdKeyId:r.ecdsaThresholdKeyId,signingRootId:r.signingRootId,signingRootVersion:r.signingRootVersion,participantIds:r.participantIds,thresholdOwnerAddress:r.ethereumAddress,thresholdEcdsaPublicKeyB64u:r.groupPublicKey33B64u});return{keyHandle:String(i.keyHandle),publicCapability:t,walletKey:i,runtimePolicyScope:e.runtimePolicyScope,persistedRoleLocalMaterial:Od({authority:e.authority,materialActivation:e.roleLocalMaterialRef.materialActivation,publicFacts:r})}}function iL(e){let t=String(e.keyVersion||``).trim(),n=String(e.groupId||``).trim();if(!t||!n)throw Error(`Email OTP sealed refresh is missing normalized seal transport metadata`);return{signingSessionSealKeyVersion:t,signingSessionSealGroupId:n}}function aL(e){let{sealedRecord:t}=e,n=iL(t);if(!t.thresholdSessionId||!t.relayerUrl||!t.keyHandle||!t.relayerKeyId||!t.participantIds.length)throw Error(`Email OTP sealed refresh is missing durable ECDSA restore metadata`);return{kind:`sealed_record_restore`,sealedRecord:t,emailOtpAuthContext:tL(t.emailOtpAuthority),authorization:e.authorization,relayerUrl:t.relayerUrl,chainTarget:t.chainTarget,keyHandle:t.keyHandle,...n,...t.runtimePolicyScope?{runtimePolicyScope:t.runtimePolicyScope}:{}}}async function oL(e,t){let n=await e(String(t));if(n.kind!==`resolved`||n.selection.lockState!==`unlocked`||n.selection.walletId!==t||n.selection.walletAuthMethodId!==n.authMethod.walletAuthMethodId||n.authMethod.kind!==`email_otp`||n.authMethod.status!==`active`||n.authMethod.walletId!==t||n.authMethod.walletAuthorityId!==n.authority.authorityId||n.authority.state!==`active`||n.authority.walletId!==t)throw Error(`Email OTP sealed refresh selected authority is invalid`);return{kind:`resolved`,selection:n.selection,authMethod:n.authMethod,authority:n.authority,signerMaterials:n.signerMaterials,exportRoot:n.exportRoot}}function sL(e){if(e.authBinding.kind!==`email_otp`)throw Error(`Email OTP sealed refresh runtime is not Email OTP bound`);return e.authBinding.emailOtpAuthority}function cL(e){if(e.authorizationRead.kind!==`found`)throw Error(`Email OTP sealed refresh requires active Wallet Session authorization: ${e.authorizationRead.kind}`);let{record:t,operationCredential:n}=e.authorizationRead;if(e.runtime.kind!==`exact_ecdsa_sealed_runtime_v1`)throw Error(`Email OTP sealed refresh ECDSA runtime is unavailable`);if(e.sealedRecord.authMethod!==`email_otp`||t.walletId!==B(e.sealedRecord.walletId)||t.authorityId!==e.selected.authority.authorityId||t.authMethodId!==e.selected.authMethod.walletAuthMethodId||t.authorityDigestB64u!==e.selected.authority.authorityDigestB64u||t.authorityRevocationEpoch!==e.selected.authority.revocationEpoch||t.expiresAtMs<=e.nowMs||n.walletSessionId.trim().length===0||n.token.trim().length===0||e.runtime.walletId!==t.walletId||!an(e.runtime.chainTarget,e.sealedRecord.chainTarget)||e.runtime.sealedRecord.thresholdSessionId!==e.sealedRecord.thresholdSessionId||e.runtime.sealedRecord.authMethod!==e.selected.authMethod.kind||e.runtime.authBinding.kind!==`email_otp`||e.runtime.authBinding.emailOtpAuthority.bindingId!==e.selected.authMethod.walletAuthMethodId||e.runtime.authBinding.emailOtpAuthority.walletId!==t.walletId)throw Error(`Email OTP sealed refresh Wallet Session authorization mismatch`);return Sd({capability:e.capability,selected:e.selected,session:t,operationCredential:n,runtime:e.runtime,nowMs:e.nowMs})}function lL(e){return async t=>await uL({...e,...t})}async function uL(e){let t=e.sealedRecord;if(t.authMethod!==`email_otp`||t.curve!==`ecdsa`)return null;let n=t.roleLocalMaterialRef.materialActivation;return await e.withThresholdEcdsaSigningQueue({queueKey:zd({materialActivation:n}),walletId:B(t.walletId),enabled:!0,task:async()=>await dL(e)})}async function dL(e){let t=e.sealedRecord,n=t.roleLocalMaterialRef.materialActivation,r=B(t.walletId),i=await e.resolveCurrentEcdsaCapabilityRuntime({walletId:r,chainTarget:t.chainTarget});if(i.kind!==`resolved`||!g(i.runtime.materialActivation,n))throw new eL(`before_rehydrate`);let a=await oL(e.resolveSelectedWalletAuthority,r),o=await e.readExactWalletSessionAuthorization({walletId:r,authorityId:a.authority.authorityId,authMethodId:a.authMethod.walletAuthMethodId}),s=await rL(t),c=await fd({authority:sL(i.runtime),manifest:i.manifest,material:s.persistedRoleLocalMaterial}),l=aL({sealedRecord:t,authorization:cL({sealedRecord:t,authorizationRead:o,selected:a,runtime:i.runtime,capability:c,nowMs:Date.now()})});if(l.authorization.runtime.kind!==`exact_ecdsa_sealed_runtime_v1`)throw Error(`Email OTP sealed refresh requires a sealed ECDSA runtime`);let u=l.authorization.operationCredential;if(sl(l.emailOtpAuthContext)!==`session`)return null;let d=e.getSignerWorkerContext();if(!d)throw Error(`Email OTP sealed refresh requires the dedicated emailOtp worker`);if(t.expiresAtMs<=Date.now())throw Error(`Email OTP sealed refresh expired sealed record`);if(t.remainingUses<=0)throw Error(`Email OTP sealed refresh exhausted sealed record`);let f=n,p=l.authorization.runtime.sealedRecord.thresholdSessionId,m=$F(t.routerAbEcdsaDerivationNormalSigning),h=await MP({workerCtx:d,target:{kind:`ecdsa`,thresholdSessionId:p},authorizationThresholdSessionId:m,sealedSecretB64u:t.sealedSecretB64u,remainingUses:t.remainingUses,expiresAtMs:t.expiresAtMs,transport:{relayerUrl:l.relayerUrl,operationCredential:u,signingSessionSealKeyVersion:Ei(l.signingSessionSealKeyVersion),groupId:l.signingSessionSealGroupId},restore:{thresholdSessionId:p,walletId:t.walletId,keyHandle:l.keyHandle,chainTarget:l.chainTarget,authSubjectId:$c(l.emailOtpAuthContext)}});if(!h.ok)throw Error(h.message||h.code||`Email OTP sealed refresh failed`);if(!l.runtimePolicyScope)throw Error(`Email OTP sealed refresh requires runtime policy scope`);let _=Kd(h.emailOtpSessionHandle),v=await e.provisionThresholdEcdsaSession(VI({existingKey:s,chainTarget:l.chainTarget,thresholdSessionId:p,ttlMs:Math.max(1,h.expiresAtMs-Date.now()),remainingUses:h.remainingUses,runtimePolicyScope:l.runtimePolicyScope,relayerUrl:l.relayerUrl,emailOtpAuthContext:l.emailOtpAuthContext,emailOtpWorkerSessionHandle:_,routeAuth:u})),y=await e.resolveCurrentEcdsaCapabilityRuntime({walletId:B(t.walletId),chainTarget:l.chainTarget});if(y.kind!==`resolved`||!g(y.runtime.materialActivation,f))throw new eL(`before_commit`);let b=await e.commitEvmFamilyThresholdEcdsaSessions({walletId:r,chainTarget:l.chainTarget,bootstrap:v,source:`email_otp`,authority:s.persistedRoleLocalMaterial.authority,emailOtpAuthContext:l.emailOtpAuthContext});return{authorization:Sd({capability:c,selected:a,session:b.bootstrap.session.walletSession,operationCredential:b.bootstrap.session.operationCredential,runtime:y.runtime,nowMs:Date.now()}),remainingUses:b.bootstrap.session.remainingUses,expiresAtMs:b.bootstrap.session.expiresAtMs}}var fL=class{constructor(e){this.ports=e}async loginWithEcdsaCapabilityForSigning(e){return await XI(e,{resolveCurrentEcdsaCapabilityRuntime:this.ports.resolveCurrentEcdsaCapabilityRuntime,loginWithEcdsaCapabilityInternal:e=>this.loginWithEcdsaCapabilityInternal(e)})}async loginWithEcdsaCapabilityInternal(e){return await QI(e,{configs:this.ports.configs,getSignerWorkerContext:this.ports.getSignerWorkerContext,loadWalletCustodyEd25519Material:this.ports.loadWalletCustodyEd25519Material,restoreWalletCustodyEcdsaContinuity:this.ports.restoreWalletCustodyEcdsaContinuity,provisionThresholdEcdsaSession:this.ports.provisionThresholdEcdsaSession,provisionEmailOtpEcdsaExplicitExportSession:this.ports.provisionEmailOtpEcdsaExplicitExportSession,requireRelayUrl:()=>this.ports.runtimeConfig.requireRelayUrl(),requireSigningSessionSealGroupId:()=>this.ports.runtimeConfig.requireSigningSessionSealGroupId(),ownerLaneScopeStores:this.ports.ownerLaneScopeStores,resolveSelectedWalletAuthority:this.ports.resolveSelectedWalletAuthority,publicationPorts:this.ports.publicationPorts()})}async prepareEcdsaExportCapability(e){return await $I(e,{configs:this.ports.configs,getSignerWorkerContext:this.ports.getSignerWorkerContext,loadWalletCustodyEd25519Material:this.ports.loadWalletCustodyEd25519Material,restoreWalletCustodyEcdsaContinuity:this.ports.restoreWalletCustodyEcdsaContinuity,provisionThresholdEcdsaSession:this.ports.provisionThresholdEcdsaSession,provisionEmailOtpEcdsaExplicitExportSession:this.ports.provisionEmailOtpEcdsaExplicitExportSession,requireRelayUrl:()=>this.ports.runtimeConfig.requireRelayUrl(),requireSigningSessionSealGroupId:()=>this.ports.runtimeConfig.requireSigningSessionSealGroupId(),ownerLaneScopeStores:this.ports.ownerLaneScopeStores,resolveSelectedWalletAuthority:this.ports.resolveSelectedWalletAuthority,publicationPorts:this.ports.publicationPorts()})}};async function pL(e,t){let n=await e.resolveSelectedWalletAuthority(String(t));if(n.kind===`missing_selection`)return{kind:`canonical`};if(n.kind!==`resolved`)throw Error(`Email OTP challenge authority selection is unavailable: ${n.kind}`);if(n.authMethod.kind!==`email_otp`)return{kind:`canonical`};if(n.authMethod.status!==`active`||n.authority.state!==`active`||String(n.authMethod.walletId)!==String(t)||String(n.authority.walletId)!==String(t)||String(n.authMethod.walletAuthorityId)!==String(n.authority.authorityId))throw Error(`Email OTP challenge selected authority is not active`);return{kind:`exact`,walletAuthMethodId:String(n.authMethod.walletAuthMethodId)}}function mL(e){return e===`near`?`ed25519`:`ecdsa`}function hL(e){let t=e.authLane;return t?.kind!==`signing_session`&&Ko({kind:`auth_lane_missing`,source:`provided_route_auth`,expectedCurve:mL(e.chain)}),t}async function gL(e,t){let n=t.kind===`wallet_session`?t.walletId:t.walletSession.walletId,r=e.requireRelayUrl(),i=e.getSignerWorkerContext();if(!i)throw Error(`Email OTP signing requires the dedicated emailOtp worker`);let a=await pL(e,n),o=await i.requestWorkerOperation({kind:`emailOtp`,request:{type:`requestEmailOtpChallenge`,timeoutMs:3e4,payload:{relayUrl:r,walletId:String(n),...a.kind===`exact`?{walletAuthMethodId:a.walletAuthMethodId}:{},routePlan:t.routePlan,otpChannel:Mt,...t.operationFingerprintDigest?{operationFingerprintDigest:t.operationFingerprintDigest}:{}}}}),s=String(o.challengeId||``).trim();if(!s)throw Error(`Email OTP signing challenge response did not include challengeId`);let c=o.delivery;return{challengeId:s,emailHint:c.emailHint,delivery:c}}async function _L(e,t){let n=vL(e,t);return t.kind===`near_account_challenge`?await gL(e,{kind:`near_account`,walletSession:t.walletSession,routePlan:n,...t.operationFingerprintDigest?{operationFingerprintDigest:t.operationFingerprintDigest}:{}}):await gL(e,{kind:`wallet_session`,walletId:t.walletSession.walletId,routePlan:n,...t.operationFingerprintDigest?{operationFingerprintDigest:t.operationFingerprintDigest}:{}})}function vL(e,t){switch(t.kind){case`wallet_operation_challenge`:return Wo({routeFamily:`operation_step_up`,operation:Lt,operationCredential:t.operationCredential});case`wallet_session_challenge`:case`near_account_challenge`:return e.buildSigningSessionRoutePlan({authLane:hL({authLane:t.authLane,chain:t.chain}),operation:Lt})}}async function yL(e,t){let n=bL(e,t);return t.kind===`near_account_challenge`?await gL(e,{kind:`near_account`,walletSession:t.walletSession,routePlan:n}):t.kind===`wallet_export_challenge`?await gL(e,{kind:`wallet_session`,walletId:t.walletId,routePlan:n}):await gL(e,{kind:`wallet_session`,walletId:t.walletSession.walletId,routePlan:n})}function bL(e,t){switch(t.kind){case`wallet_login_challenge`:return Wo({routeFamily:`login`,operation:Nt});case`wallet_session_challenge`:case`near_account_challenge`:return e.buildSigningSessionRoutePlan({authLane:hL({authLane:t.authLane,chain:t.chain}),operation:Nt});case`wallet_export_challenge`:return Wo({routeFamily:`login`,operation:Nt})}}function xL(e){return Wo({routeFamily:`login`,operation:Nt})}function SL(e){switch(e.material.kind){case`active_capability`:return e.material;case`sealed_custody`:return{kind:`sealed_custody`,materialActivation:e.material.materialActivation,walletCustodyEd25519Material:e.material.walletCustodyEd25519Material,bootstrap:e.material.bootstrap};case`sealed_export_root`:return{kind:`sealed_export_root`,materialActivation:e.material.materialActivation,capability:e.material.capability,exportRootEnvelope:e.material.exportRootEnvelope};default:throw e.material,Error(`Email OTP Ed25519 export material is invalid`)}}async function CL(e,t){let n=e.getSignerWorkerContext();if(!n)throw Error(`Email OTP Ed25519 Yao export requires the dedicated emailOtp worker`);let r=e.requireRelayUrl(),i=t.exportContext.lane.signer.account.wallet.walletId,a=await n.requestWorkerOperation({kind:`emailOtp`,request:{type:`exportEmailOtpEd25519YaoSeed`,timeoutMs:6e4,payload:{relayUrl:r,challengeId:t.challengeId,otpCode:t.otpCode,lane:{walletId:String(i),providerSubjectId:t.exportContext.lane.auth.providerSubjectId,walletAuthMethodId:String(t.exportContext.authorization.record.authMethodId),nearAccountId:String(t.exportContext.lane.signer.account.nearAccountId),nearEd25519SigningKeyId:String(t.exportContext.lane.signer.nearEd25519SigningKeyId),signerSlot:t.exportContext.lane.signer.signerSlot},material:SL(t.exportContext)}}});switch(a.kind){case`exported`:return a;case`exported_and_rehydrated`:if(t.exportContext.material.kind!==`sealed_custody`)throw await wy({workerContext:n,activeClientHandle:a.activeClientHandle}).catch(()=>void 0),Error(`Email OTP Ed25519 export returned unexpected recovered material`);if(t.exportContext.authorization.status.status===`exhausted`)return await wy({workerContext:n,activeClientHandle:a.activeClientHandle}),a;try{await t.exportContext.material.activateRecoveredCapability({activation:{activeClientHandle:a.activeClientHandle,metadata:a.metadata,bootstrap:a.bootstrap},operationCredential:t.exportContext.authorization.operationCredential})}catch(e){throw await wy({workerContext:n,activeClientHandle:a.activeClientHandle}).catch(()=>void 0),e}return a;default:throw Error(`Email OTP Ed25519 export returned an invalid result`)}}async function wL(e,t){let n=xL(t.explicitExportAuthorization);return await TL({walletSession:t.walletSession,authority:await H({authority:t.authority}),chainTarget:t.chainTarget,challengeId:t.challengeId,otpCode:t.otpCode,routePlan:n,keyHandle:String(t.publicFacts.keyHandle),participantIds:t.publicFacts.participantIds.map(Number),emailHashHex:t.authority.verifier.emailHashHex,provider:t.authority.factor.provider,providerUserId:t.authority.factor.providerUserId,runtimePolicyScope:t.runtimePolicyScope,relayUrl:e.requireRelayUrl(),getSignerWorkerContext:e.getSignerWorkerContext,prepareEcdsaExportCapability:t.prepareEcdsaExportCapability,persistedMaterial:t.persistedMaterial,explicitExportAuthorization:t.explicitExportAuthorization})}async function TL(e){let t=await e.prepareEcdsaExportCapability({walletSession:e.walletSession,authoritySelector:{kind:`wallet_auth_method`,walletAuthMethodId:String(e.authority.walletAuthMethodId)},chainTarget:e.chainTarget,relayUrl:e.relayUrl,emailOtpAuthPolicy:`per_operation`,emailOtpAuthReason:`sign`,challengeId:e.challengeId,otpCode:e.otpCode,operation:Nt,routePlan:e.routePlan,ecdsaBootstrapAuthorization:{kind:`route_plan_auth`},keyHandle:e.keyHandle,participantIds:e.participantIds,remainingUses:1,emailHashHex:e.emailHashHex,providerIdentity:{kind:`explicit_provider_user`,provider:e.provider,providerUserId:e.providerUserId},runtimePolicyScope:e.runtimePolicyScope,ed25519YaoRecovery:{kind:`not_requested`},persistedExportMaterial:e.persistedMaterial,explicitExportAuthorization:e.explicitExportAuthorization}),n=e.getSignerWorkerContext();if(!n)throw Error(`Email OTP ECDSA export requires the dedicated signer worker`);return await au({getSignerWorkerContext:()=>n},{walletSessionUserId:e.walletSession.walletSessionUserId,exportProvision:t.bootstrap,factorAuthorization:{kind:`email_otp_verified`}})}var EL=class{constructor(e){this.ports=e}async requestTransactionSigningChallenge(e){return await _L(this.workerPorts(),e)}async requestExportChallenge(e){return await yL(this.workerPorts(),e)}async exportEcdsaKeyWithDurableAuthorization(e){return await wL({getSignerWorkerContext:this.ports.getSignerWorkerContext,requireRelayUrl:this.ports.requireRelayUrl},{walletSession:e.walletSession,chainTarget:e.chainTarget,challengeId:e.challengeId,otpCode:e.otpCode,publicFacts:e.publicFacts,runtimePolicyScope:e.runtimePolicyScope,authority:e.authority,persistedMaterial:e.persistedMaterial,explicitExportAuthorization:e.explicitExportAuthorization,prepareEcdsaExportCapability:this.ports.prepareEcdsaExportCapability})}async exportEd25519YaoSeedWithFreshEmailOtpLane(e){return await CL({getSignerWorkerContext:this.ports.getSignerWorkerContext,requireRelayUrl:this.ports.requireRelayUrl},e)}workerPorts(){return{getSignerWorkerContext:this.ports.getSignerWorkerContext,requireRelayUrl:this.ports.requireRelayUrl,requireSigningSessionSealGroupId:this.ports.requireSigningSessionSealGroupId,resolveSelectedWalletAuthority:this.ports.resolveSelectedWalletAuthority,buildSigningSessionRoutePlan:yo}}},DL=class{constructor(e){this.ports=e}requireRelayUrl(){let e=String(this.ports.configs.network.relayer?.url||``).trim();if(!e)throw Error(`Missing relayer url (configs.network.relayer.url)`);return e}requireSigningSessionSealGroupId(){return Ze}requireRpId(e){let t=String(this.ports.getRpId()||``).trim();if(!t)throw Error(`${e} requires an RP ID for ECDSA bootstrap`);return t}},OL=class{constructor(e){this.ports=e}async registerSigningSession(e){let t=wo(e);if(!t)throw Error(`[SigningSessionSealedStore] invalid sealed session record write input`);await this.ports.writeExactSealedSession(t),this.ports.clearEcdsaRestoreCaches()}ecdsaPublicationPorts(){return{configs:this.ports.configs,getSignerWorkerContext:this.ports.getSignerWorkerContext,commitEvmFamilyThresholdEcdsaSessions:this.ports.commitEvmFamilyThresholdEcdsaSessions,registerSigningSession:e=>this.registerSigningSession(e),readExactSealedSession:this.ports.readExactSealedSession,listActiveEcdsaCapabilityManifestsForWallet:this.ports.listActiveEcdsaCapabilityManifestsForWallet}}async persistEcdsaSessionForRefresh(e){await rI({walletId:e.walletId,chainTarget:e.chainTarget,bootstrap:e.bootstrap,runtimePolicyScope:e.runtimePolicyScope,emailOtpAuthContext:e.emailOtpAuthContext,relayerUrl:this.ports.configs.network.relayer?.url||``,groupId:Ze},this.ecdsaPublicationPorts())}},kL=class{constructor(e){this.ports=e}sealedRecordFilter(e){return{authMethod:`email_otp`,curve:`ecdsa`,chainTarget:e.chainTarget}}async recordSessionUseConsumed(e,t){await this.recordSessionPolicyResult({purpose:e,result:t})}async recordSessionMaterialRestored(e,t){await this.recordSessionPolicyResult({purpose:e,result:t})}async recordSessionPolicyResult(e){let t=String(e.purpose.thresholdSessionId||``).trim();if(t){if(!e.result.ok){this.ports.clearEcdsaRestoreCaches();return}await this.ports.updateExactSealedSessionPolicy({thresholdSessionId:t,filter:this.sealedRecordFilter(e.purpose),expiresAtMs:e.result.expiresAtMs,remainingUses:e.result.remainingUses,updatedAtMs:Date.now()}).catch(()=>void 0),this.ports.clearEcdsaRestoreCaches()}}};const AL={listed:0,discovered:0,truncated:0},jL={kind:`completed`,attempted:0,restored:0,deferred:0};var ML=class{restoreCache=_M();restoreAttempts=vM();requestedChainTarget=null;constructor(e){this.ports=e}clearCache(){this.restoreCache.clear(),this.restoreAttempts.clear()}async tryRestoreEcdsaWarmSessionStatusFromSealedRecord(e){if(this.ports.sessionPersistenceMode!==`sealed_refresh_v1`)return null;let t=String(e.thresholdSessionId||``).trim();if(!t)return null;this.requestedChainTarget=e.chainTarget;let n=t,r=await this.readEcdsaSealedRecord(t);if(!r)return null;if(r.remainingUses<=0||Date.now()>=r.expiresAtMs)return console.debug(`[EmailOtpSession] sealed refresh restore deferred by durable policy hint`,{thresholdSessionId:n,remainingUses:r.remainingUses,expiresAtMs:r.expiresAtMs}),null;if(r.authMethod!==`email_otp`||r.thresholdSessionId!==n)return console.warn(`[EmailOtpSession] sealed refresh restore deferred by store metadata mismatch`,{thresholdSessionId:n,authMethod:r.authMethod,ecdsaThresholdSessionId:r.thresholdSessionId}),null;let i=await this.ports.acquireSigningSessionRestoreLease({thresholdSessionId:n,authMethod:`email_otp`,curve:`ecdsa`,chainTarget:r.chainTarget}).catch(()=>null);if(!i){let e=`lease-unavailable:${n}`;return this.ports.shouldLogDiagnostic(e)&&console.debug(`[EmailOtpSession] sealed refresh restore deferred; lease unavailable`,{thresholdSessionId:n}),null}try{console.debug(`[EmailOtpSession] sealed refresh restore started`,{thresholdSessionId:n});let e=await this.ports.restoreEcdsaSigningSessionMaterialFromSealedRecord({sealedRecord:r}).catch(e=>(console.warn(`[EmailOtpSession] sealed refresh restore failed`,{thresholdSessionId:n,error:e instanceof Error?e.message:String(e||`unknown error`)}),null));if(!e)return null;console.debug(`[EmailOtpSession] sealed refresh restore succeeded`,{thresholdSessionId:n,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs});let t={ok:!0,remainingUses:e.remainingUses,expiresAtMs:e.expiresAtMs};return await this.ports.recordSessionMaterialRestored({thresholdSessionId:n,chainTarget:r.chainTarget},t),t}finally{await this.ports.releaseSigningSessionRestoreLease(i).catch(()=>void 0)}}async discoverPersistedSessionsForWallet(e){if(this.ports.sessionPersistenceMode!==`sealed_refresh_v1`)return{...AL};let t=String(B(e.walletId)||``).trim();if(!t)return{...AL};let n=await bM({...e,walletId:t},{listExactSealedSessionsForWallet:({walletId:e,...t})=>this.ports.listExactSealedSessionsForWallet({walletId:e,filter:t}),onListError:({walletId:e,error:t})=>{console.warn(`[EmailOtpSession] wallet-scoped sealed ECDSA discovery list failed`,{walletId:e,error:t instanceof Error?t.message:String(t||`unknown error`)})}});if(!n.listed){let e=`wallet-sealed-ecdsa-empty:${t}`;this.ports.shouldLogDiagnostic(e)&&console.debug(`[EmailOtpSession] no durable sealed ECDSA records for wallet discovery`,{walletId:t})}return n}async restorePersistedSessionForSigning(e){if(this.ports.sessionPersistenceMode!==`sealed_refresh_v1`)return{...jL};let t=String(B(e.walletId)||``).trim();return t?await yM({...e,walletId:t},{listExactSealedSessionsForWallet:({walletId:e,...t})=>t.curve===`ecdsa`?this.ports.listExactSealedSessionsForWallet({walletId:e,filter:{authMethod:t.authMethod,curve:`ecdsa`,chainTarget:t.chainTarget}}):Promise.resolve([]),restoreSealedRecordForWallet:e=>this.restoreEmailOtpSealedRecordForWallet(e),cache:this.restoreCache,onListError:({walletId:e,target:t,reason:n,error:r})=>{console.warn(`[EmailOtpSession] signing-intent sealed ECDSA restore list failed`,{walletId:e,target:t,reason:n,error:r instanceof Error?r.message:String(r||`unknown error`)})}}):{...jL}}async readEcdsaSealedRecord(e){let t=this.requestedChainTarget;return t?await this.readEcdsaSealedRecordForTarget(e,t):null}async readEcdsaSealedRecordForTarget(e,t){let n=await this.ports.readExactSealedSession(e,{authMethod:`email_otp`,curve:`ecdsa`,chainTarget:t}).catch(n=>(console.warn(`[EmailOtpSession] sealed refresh ECDSA read failed`,{thresholdSessionId:e,chain:t.kind,error:n instanceof Error?n.message:String(n||`unknown error`)}),null));if(!n)return null;let r=nM(n);return r.kind===`accepted`&&r.record.authMethod===`email_otp`&&r.record.curve===`ecdsa`?r.record:null}async restoreEmailOtpSealedRecordForWallet(e){return e.purpose.authMethod!==`email_otp`||e.purpose.curve!==`ecdsa`||e.record.authMethod!==`email_otp`||e.record.curve!==`ecdsa`?`deferred`:await this.restoreEcdsaSealedRecordForWallet({...e,record:e.record,purpose:e.purpose})}async restoreEcdsaSealedRecordForWallet(e){let t=String(e.purpose.thresholdSessionId||``).trim();if(!t||e.record.authMethod!==e.purpose.authMethod||e.record.thresholdSessionId!==t||!an(e.record.chainTarget,e.purpose.chainTarget)||!g(e.record.roleLocalMaterialRef.materialActivation,e.purpose.materialActivation))return`deferred`;let n=[e.walletId,e.purpose.authMethod,e.purpose.curve,V(e.purpose.chainTarget),Gd(e.purpose.materialActivation),t].join(`:`);if(this.restoreAttempts.hasCompleted(n))return`ready`;let r=this.restoreAttempts.getInFlight(n);if(r)return await r,this.restoreAttempts.hasCompleted(n)?`ready`:`deferred`;let i=`deferred`,a=(async()=>{let r=await this.ports.restoreEcdsaSigningSessionMaterialFromSealedRecord({sealedRecord:e.record});r&&(await this.ports.recordSessionMaterialRestored({thresholdSessionId:t,chainTarget:e.record.chainTarget},{ok:!0,remainingUses:r.remainingUses,expiresAtMs:r.expiresAtMs}),this.restoreAttempts.rememberCompleted(n),i=`restored`)})().catch(n=>{console.warn(`[EmailOtpSession] wallet-scoped sealed ECDSA restore failed`,{walletId:e.walletId,thresholdSessionId:t,error:n instanceof Error?n.message:String(n||`unknown error`)})}).finally(()=>{this.restoreAttempts.clearInFlight(n)});return this.restoreAttempts.setInFlight(n,a),await a,i}};async function NL(e){let t=IL(e.target);return t?await e.readWarmSessionStatusFromWorker(t).catch(e=>({ok:!1,code:`worker_error`,message:e instanceof Error?e.message:String(e||`Email OTP worker error`)})):{ok:!1,code:`invalid_args`,message:`Missing thresholdSessionId`}}async function PL(e){let t=IL(e.target);if(!t)return{ok:!1,code:`invalid_args`,message:`Missing thresholdSessionId`};try{let n=await e.consumeWarmSessionUsesFromWorker({target:t,...typeof e.uses==`number`?{uses:e.uses}:{}});if(!n.ok&&n.code===`not_found`&&e.ecdsaPurpose){let r=await e.tryRestoreEcdsaWarmSessionStatusFromSealedRecord(e.ecdsaPurpose);if(r?.ok){let n=await e.consumeWarmSessionUsesFromWorker({target:t,...typeof e.uses==`number`?{uses:e.uses}:{}});return e.ecdsaPurpose&&await e.recordSessionUseConsumed(e.ecdsaPurpose,n),n}return r&&e.ecdsaPurpose&&await e.recordSessionMaterialRestored(e.ecdsaPurpose,r),n}return e.ecdsaPurpose&&await e.recordSessionUseConsumed(e.ecdsaPurpose,n),n}catch(e){return{ok:!1,code:`worker_error`,message:e instanceof Error?e.message:String(e||`Email OTP worker error`)}}}async function FL(e){let t=IL(e.target);t&&await e.clearVolatileWarmSessionMaterialFromWorker(t).catch(()=>void 0)}function IL(e){let t=String(e.thresholdSessionId||``).trim();return t?e.kind===`ecdsa`?{kind:`ecdsa`,thresholdSessionId:t}:{kind:`ed25519_yao`,thresholdSessionId:t,materialActivation:e.materialActivation}:null}function LL(e){return{async readStatus(t){return await kP({worker:e.worker,target:t})},async consumeUses(t){return await AP({worker:e.worker,target:t.target,...typeof t.uses==`number`?{uses:t.uses}:{}})},async clearMaterial(t){await jP({worker:e.worker,target:t})}}}var RL=class{constructor(e){this.ports=e}async readWarmSessionStatusOnly(e){return await NL({target:e,readWarmSessionStatusFromWorker:e=>this.ports.workerClient.readStatus(e)})}async consumeWarmSessionUses(e){return await PL({target:zL(e),...typeof e.uses==`number`?{uses:e.uses}:{},consumeWarmSessionUsesFromWorker:e=>this.ports.workerClient.consumeUses(e),ecdsaPurpose:Vj(e.purpose),tryRestoreEcdsaWarmSessionStatusFromSealedRecord:e=>this.ports.sealedRestoreOrchestrator.tryRestoreEcdsaWarmSessionStatusFromSealedRecord(e),recordSessionUseConsumed:(e,t)=>this.ports.sealedRefreshPolicy.recordSessionUseConsumed(e,t),recordSessionMaterialRestored:(e,t)=>this.ports.sealedRefreshPolicy.recordSessionMaterialRestored(e,t)})}async clearVolatileWarmSessionMaterial(e){await FL({target:e,clearVolatileWarmSessionMaterialFromWorker:e=>this.ports.workerClient.clearMaterial(e)})}};function zL(e){let t=Bj(e);return e.purpose.curve===`ecdsa`?{kind:`ecdsa`,thresholdSessionId:t}:{kind:`ed25519_yao`,thresholdSessionId:t,materialActivation:e.purpose.materialActivation}}var BL=class{sealedRefreshDiagnosticLogAtMsByKey=new Map;sealedRefreshPolicy;sealedRestoreOrchestrator;runtimeConfig;sealedSessionRegistry;warmSessionRuntime;exportRecoveryRuntime;ecdsaLifecycleRuntime;constructor(e){this.runtimeConfig=new DL({configs:e.configs,getRpId:e.getRpId}),this.sealedSessionRegistry=new OL({configs:e.configs,getSignerWorkerContext:e.getSignerWorkerContext,commitEvmFamilyThresholdEcdsaSessions:e.commitEvmFamilyThresholdEcdsaSessions,listActiveEcdsaCapabilityManifestsForWallet:e.listActiveEcdsaCapabilityManifestsForWallet,writeExactSealedSession:e.writeExactSealedSession,readExactSealedSession:e.readExactSealedSession,clearEcdsaRestoreCaches:()=>this.clearEcdsaRestoreCaches()}),this.ecdsaLifecycleRuntime=new fL({configs:e.configs,getSignerWorkerContext:e.getSignerWorkerContext,loadWalletCustodyEd25519Material:e.loadWalletCustodyEd25519Material,restoreWalletCustodyEcdsaContinuity:e.restoreWalletCustodyEcdsaContinuity,provisionThresholdEcdsaSession:e.provisionThresholdEcdsaSession,provisionEmailOtpEcdsaExplicitExportSession:e.provisionEmailOtpEcdsaExplicitExportSession,runtimeConfig:this.runtimeConfig,ownerLaneScopeStores:e.ownerLaneScopeStores,resolveSelectedWalletAuthority:e.resolveSelectedWalletAuthority,resolveCurrentEcdsaCapabilityRuntime:e.resolveCurrentEcdsaCapabilityRuntime,publicationPorts:()=>this.sealedSessionRegistry.ecdsaPublicationPorts()}),this.exportRecoveryRuntime=new EL({getSignerWorkerContext:e.getSignerWorkerContext,requireRelayUrl:()=>this.runtimeConfig.requireRelayUrl(),requireSigningSessionSealGroupId:()=>this.runtimeConfig.requireSigningSessionSealGroupId(),resolveSelectedWalletAuthority:e.resolveSelectedWalletAuthority,prepareEcdsaExportCapability:e=>this.ecdsaLifecycleRuntime.prepareEcdsaExportCapability(e)});let t=lL({withThresholdEcdsaSigningQueue:e.withThresholdEcdsaSigningQueue,getSignerWorkerContext:e.getSignerWorkerContext,resolveSelectedWalletAuthority:e.resolveSelectedWalletAuthority,readExactWalletSessionAuthorization:e.readExactWalletSessionAuthorization,provisionThresholdEcdsaSession:e.provisionThresholdEcdsaSession,commitEvmFamilyThresholdEcdsaSessions:e.commitEvmFamilyThresholdEcdsaSessions,resolveCurrentEcdsaCapabilityRuntime:e.resolveCurrentEcdsaCapabilityRuntime}),n=LL({worker:e.signerWorkerManager});this.sealedRefreshPolicy=new kL({updateExactSealedSessionPolicy:e.updateExactSealedSessionPolicy,clearEcdsaRestoreCaches:()=>this.clearEcdsaRestoreCaches()}),this.sealedRestoreOrchestrator=new ML({sessionPersistenceMode:e.configs.signing.sessionPersistenceMode,listExactSealedSessionsForWallet:e.listExactSealedSessionsForWallet,readExactSealedSession:e.readExactSealedSession,acquireSigningSessionRestoreLease:e.acquireSigningSessionRestoreLease,releaseSigningSessionRestoreLease:e.releaseSigningSessionRestoreLease,readWarmSessionStatusFromWorker:e=>n.readStatus({kind:`ecdsa`,thresholdSessionId:e}),restoreEcdsaSigningSessionMaterialFromSealedRecord:e=>t(e),recordSessionMaterialRestored:(e,t)=>this.sealedRefreshPolicy.recordSessionMaterialRestored(e,t),shouldLogDiagnostic:e=>this.shouldLogSealedRefreshDiagnostic(e)}),this.warmSessionRuntime=new RL({workerClient:n,sealedRefreshPolicy:this.sealedRefreshPolicy,sealedRestoreOrchestrator:this.sealedRestoreOrchestrator})}async persistEcdsaSessionForRefresh(e){await this.sealedSessionRegistry.persistEcdsaSessionForRefresh(e)}clearEcdsaRestoreCaches(){this.sealedRestoreOrchestrator.clearCache()}shouldLogSealedRefreshDiagnostic(e,t=Date.now()){let n=String(e||``).trim();return!n||t-(this.sealedRefreshDiagnosticLogAtMsByKey.get(n)||0)<6e4?!1:(this.sealedRefreshDiagnosticLogAtMsByKey.set(n,t),!0)}async discoverPersistedSessionsForWallet(e){return await this.sealedRestoreOrchestrator.discoverPersistedSessionsForWallet(e)}async restorePersistedSessionForSigning(e){return await this.sealedRestoreOrchestrator.restorePersistedSessionForSigning(e)}async readWarmSessionStatusOnly(e){return await this.warmSessionRuntime.readWarmSessionStatusOnly(e)}async consumeWarmSessionUses(e){return await this.warmSessionRuntime.consumeWarmSessionUses(e)}async clearVolatileWarmSessionMaterial(e){await this.warmSessionRuntime.clearVolatileWarmSessionMaterial(e)}async requestTransactionSigningChallenge(e){return await this.exportRecoveryRuntime.requestTransactionSigningChallenge(e)}async requestExportChallenge(e){return await this.exportRecoveryRuntime.requestExportChallenge(e)}async exportEcdsaKeyWithDurableAuthorization(e){return await this.exportRecoveryRuntime.exportEcdsaKeyWithDurableAuthorization(e)}async exportEd25519YaoSeedWithFreshEmailOtpLane(e){return await this.exportRecoveryRuntime.exportEd25519YaoSeedWithFreshEmailOtpLane(e)}async loginWithEcdsaCapabilityForSigning(e){return await this.ecdsaLifecycleRuntime.loginWithEcdsaCapabilityForSigning(e)}async loginWithEcdsaCapabilityInternal(e){return await this.ecdsaLifecycleRuntime.loginWithEcdsaCapabilityInternal(e)}};function VL(e){let t=new BL({configs:e.seamsWebConfigs,signerWorkerManager:e.signerWorkerManager,getRpId:()=>e.touchIdPrompt.getRpId(),getSignerWorkerContext:e.getSignerWorkerContext,loadWalletCustodyEd25519Material:e.loadWalletCustodyEd25519Material,restoreWalletCustodyEcdsaContinuity:e.restoreWalletCustodyEcdsaContinuity,resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),ownerLaneScopeStores:{getWalletAuthMethodV2:G.getWalletAuthMethodV2.bind(G),listWalletAuthMethodsForWallet:G.listWalletAuthMethodsForWallet.bind(G),getWalletPasskeyAuthenticator:G.getWalletPasskeyAuthenticator.bind(G)},readExactWalletSessionAuthorization:K.readExactWithOperationCredential.bind(K),provisionThresholdEcdsaSession:e.provisionThresholdEcdsaSession,withThresholdEcdsaSigningQueue:t=>Md({queueByKey:e.thresholdEcdsaSigningQueueByKey,...t}),provisionEmailOtpEcdsaExplicitExportSession:e.provisionEmailOtpEcdsaExplicitExportSession,commitEvmFamilyThresholdEcdsaSessions:t=>zF({queueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,bootstrapStore:e.ecdsaBootstrapStore,persistEcdsaRoleLocalReadyRecord:e.persistEcdsaRoleLocalReadyRecord,ensureSealedRefreshStartupParityForThresholdEcdsaBootstrap:t=>ud(e.ensureSealedRefreshStartupParity,t)},t),listActiveEcdsaCapabilityManifestsForWallet:t=>e.listActiveEcdsaCapabilityManifestsForWallet(String(t)),resolveCurrentEcdsaCapabilityRuntime:e.resolveActiveEcdsaCapabilityRuntime,writeExactSealedSession:e.sealedSessionStore.writeExactSealedSession,readExactSealedSession:e.sealedSessionStore.readExactSealedSession,listExactSealedSessionsForWallet:e.sealedSessionStore.listExactSealedSessionsForWallet,acquireSigningSessionRestoreLease:e.sealedSessionStore.acquireSigningSessionRestoreLease,releaseSigningSessionRestoreLease:e.sealedSessionStore.releaseSigningSessionRestoreLease,updateExactSealedSessionPolicy:e.sealedSessionStore.updateExactSealedSessionPolicy}),n=ZP({base:e.passkeyMpcSession,secondary:{readWarmSessionStatusOnly:e=>t.readWarmSessionStatusOnly({kind:`ecdsa`,thresholdSessionId:String(e)}),clearVolatileWarmSessionMaterial:e=>t.clearVolatileWarmSessionMaterial({kind:`ecdsa`,thresholdSessionId:String(e.scope.thresholdSessionId)})}});return{emailOtpSessions:t,touchConfirm:e.baseTouchConfirm,passkeyMpcSession:n}}function HL(e){return VL({resolveActiveEcdsaCapabilityRuntime:ey,seamsWebConfigs:e.seamsWebConfigs,touchIdPrompt:e.touchIdPrompt,signerWorkerManager:e.signerWorkerManager,ecdsaBootstrapStore:e.stores.walletProfileAndSignerRecords.ecdsaBootstrapStore,sealedSessionStore:e.sealedSigningSessionStore,baseTouchConfirm:e.baseTouchConfirm,passkeyMpcSession:e.passkeyMpcSession,getSignerWorkerContext:()=>e.getEnginePorts().walletSessionActivationDeps.getSignerWorkerContext(),provisionThresholdEcdsaSession:t=>e.getEnginePorts().tempoSigningDeps.provisionThresholdEcdsaSession(t),provisionEmailOtpEcdsaExplicitExportSession:t=>ru({queueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,activationDeps:e.getEnginePorts().walletSessionActivationDeps,persistEcdsaRoleLocalReadyRecord:e.runtimePorts.storage.persistEcdsaRoleLocalReadyRecord},t),thresholdEcdsaBootstrapQueueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,thresholdEcdsaSigningQueueByKey:e.thresholdEcdsaSigningQueueByKey,loadWalletCustodyEd25519Material:e.loadWalletCustodyEd25519Material,restoreWalletCustodyEcdsaContinuity:e.restoreWalletCustodyEcdsaContinuity,persistEcdsaRoleLocalReadyRecord:e.runtimePorts.storage.persistEcdsaRoleLocalReadyRecord,listActiveEcdsaCapabilityManifestsForWallet:e.listActiveEcdsaCapabilityManifestsForWallet,ensureSealedRefreshStartupParity:e.ensureSealedRefreshStartupParity})}function UL(e){return{passkeyPublicDeps:gF({seamsWebConfigs:e.seamsWebConfigs,credentialStore:e.stores.recoveryAndDeviceLinking.credentialStore,touchIdPrompt:e.touchIdPrompt,passkeyMpcSession:e.passkeyMpcSession,warmSigning:e.warmSigning,thresholdEcdsaBootstrapQueueByWallet:e.thresholdEcdsaBootstrapQueueByWallet,ensureSealedRefreshStartupParity:e.ensureSealedRefreshStartupParity,walletSessionActivationDeps:e.enginePorts.walletSessionActivationDeps,persistEcdsaRoleLocalReadyRecord:e.runtimePorts.storage.persistEcdsaRoleLocalReadyRecord}),warmCapabilitiesPublicDeps:_F({seamsWebConfigs:e.seamsWebConfigs,bootstrapStore:e.stores.walletProfileAndSignerRecords.ecdsaBootstrapStore,passkeyMpcSession:e.passkeyMpcSession,warmSigning:e.warmSigning,walletSessionActivationDeps:e.enginePorts.walletSessionActivationDeps,signingSessionCoordinator:e.enginePorts.signingSessionCoordinator})}}function WL(e){return e.session.chainTargets.length===e.walletKeys.length?e.walletKeys.every((t,n)=>{let r=e.session.chainTargets[n];return r!==void 0&&V(r)===V(t.chainTarget)}):!1}function GL(e){let t=e.walletKey;return{keyScope:t.keyScope,chainTarget:t.chainTarget,walletId:t.walletId,evmFamilySigningKeySlotId:t.evmFamilySigningKeySlotId,keyHandle:t.keyHandle,ecdsaThresholdKeyId:t.ecdsaThresholdKeyId,signingRootId:t.signingRootId,signingRootVersion:t.signingRootVersion,thresholdEcdsaPublicKeyB64u:t.thresholdEcdsaPublicKeyB64u,thresholdOwnerAddress:t.thresholdOwnerAddress,relayerKeyId:t.relayerKeyId,relayerVerifyingShareB64u:t.relayerVerifyingShareB64u,participantIds:t.participantIds,publicCapability:t.publicCapability,roleLocalMaterialRef:e.materialRef,ecdsaRoleLocalPublicFacts:e.publicFacts}}async function KL(e){if(!WL({session:e.session,walletKeys:e.walletKeys}))throw Error(`[SigningEngine] strict ECDSA registration requires one family activation projected to every wallet target`);let t=B(e.walletId);if(e.session.authority.walletId!==t)throw Error(`[SigningEngine] strict ECDSA registration authority does not match the target wallet`);let n=e.session.roleLocalMaterial,r=Ci({kind:`ecdsa_role_local_persisted_material_ref_v1`,durableMaterialRef:n.durableMaterialRef,bindingDigest:n.bindingDigest,materialActivation:e.session.materialActivation}),[i,...a]=e.walletKeys.map(n=>GL({walletKey:n,publicFacts:_i({walletId:t,chainTarget:n.chainTarget,keyHandle:n.keyHandle,ecdsaThresholdKeyId:n.ecdsaThresholdKeyId,signingRootId:n.signingRootId,signingRootVersion:n.signingRootVersion,applicationBindingDigestB64u:e.session.bootstrap.applicationBindingDigestB64u,clientParticipantId:1,relayerParticipantId:2,participantIds:n.participantIds,contextBinding32B64u:e.session.clientPublicFacts.contextBinding32B64u,derivationClientSharePublicKey33B64u:e.session.clientPublicFacts.derivationClientSharePublicKey33B64u,relayerPublicKey33B64u:e.session.clientPublicFacts.relayerPublicKey33B64u,groupPublicKey33B64u:e.session.clientPublicFacts.groupPublicKey33B64u,ethereumAddress:e.session.clientPublicFacts.ethereumAddress,publicCapability:e.session.publicCapability}),materialRef:r}));if(!i)throw Error(`[SigningEngine] strict ECDSA registration did not persist any wallet keys`);return[i,...a]}function qL(e){let t=e.clientExtensionResults.prf?.results?.first;if(typeof t!=`string`||!t)throw Error(`the replacement passkey returned no wallet-custody PRF output`);let n=F(t);if(n.length!==32)throw Error(`the replacement passkey returned an invalid wallet-custody PRF output`);return Uint8Array.from(n).buffer}function JL(e){let t=a(String(e.rawId||e.id||``).trim());if(!t.ok)throw Error(`replacement passkey credential id ${t.error.message}`);return{registration:e,credentialIdB64u:t.value,factorSecret:qL(e)}}function YL(e,t){let n=null;for(let r of e)if(r.signer.authority.authorityDigest===t){if(n&&n.durableMaterial.roleLocalBinding.keyHandle!==r.durableMaterial.roleLocalBinding.keyHandle)throw Error(`[SigningEngine][near] Email OTP ECDSA session identity is ambiguous`);n=r}if(!n)throw Error(`[SigningEngine][near] Email OTP ECDSA capability is unavailable`);return n}function XL(e){let t=ht(El(`wallet-session-mint`));if(!t.ok)throw Error(`[SigningEngine][near] failed to generate an ECDSA Wallet Session mint id`);return{kind:`router_ab_ecdsa_post_registration_session_activation_policy_v1`,key_handle:String(e.manifest.durableMaterial.roleLocalBinding.keyHandle),session_policy:{threshold_session_id:Ea.thresholdEcdsaSession(El(`threshold-ecdsa-login`)),wallet_session_mint_id:t.value,ttl_ms:Se.ttlMs,remaining_uses:e.remainingUses,runtime_policy_scope:e.manifest.durableMaterial.runtimePolicyScope}}}async function ZL(e,t){if(e.selectedFactorAuthority.factor.kind!==`email_otp`)throw Error(`Email OTP restore requires an Email OTP factor authority`);if(Or(e.selectedAuthority))return{kind:`absent`};let n=await H({authority:e.selectedFactorAuthority}),r=YL(await Qv(String(e.selectedAuthority.walletId)),String(n.authorityDigest));return{kind:`required`,sessionHandleBinding:{operation:`wallet_unlock`,keyHandle:String(r.durableMaterial.roleLocalBinding.keyHandle),authSubjectId:e.selectedFactorAuthority.factor.providerUserId,chainTarget:r.signer.scope.targetMemberships[0]},runtimePolicyScope:r.durableMaterial.runtimePolicyScope,sessionPolicy:XL({manifest:r,remainingUses:t})}}function QL(e){let t=Wr(e.activation.public_capability.material_activation),n=0;for(let r of e.walletSession.capabilitySubjects)r.kind===`sign`&&r.keyFamily===`ecdsa_secp256k1`&&g(r.materialActivation,t)&&(n+=1);return n===1}async function $L(e){let t=e.response.session,n=e.authorization.record,r=e.authorization.operationCredential;if(String(n.walletId)!==String(e.walletId)||String(e.response.public_capability.client_id)!==String(n.walletId)||n.authorizationId!==t.authorization_id||n.quotaId!==t.quota_id||n.expiresAtMs!==t.expires_at_ms||r.walletSessionId!==t.wallet_session_id||!QL({walletSession:n,activation:e.response}))throw Error(`[SigningEngine][near] refreshed ECDSA exact Wallet Session is inconsistent`);await K.writeExactWithOperationCredential({record:n,operationCredential:r})}async function eR(e){return await Hi(G,e)}async function tR(){return null}const nR={getWalletAuthMethodV2:e=>G.getWalletAuthMethodV2(e),listWalletAuthMethodsForWallet:e=>G.listWalletAuthMethodsForWallet(e),getWalletPasskeyAuthenticator:tR,readEmailOtpProviderSubjectForWallet:eR};async function rR(e){let t=(await G.listWalletAuthMethodsV2ForWallet(String(e.walletId))).filter(t=>t.kind===R.passkey&&t.status===`active`&&t.walletId===e.walletId&&String(t.rpId)===e.rpId&&String(t.credentialIdB64u)===e.credentialIdB64u),[n]=t;return t.length!==1||!n||n.kind!==R.passkey?null:await H({authority:{walletId:n.walletId,factor:{kind:R.passkey,credentialIdB64u:n.credentialIdB64u},verifier:{kind:`webauthn`,rpId:n.rpId},bindingId:n.walletAuthMethodId}})}function iR(e){let t=ni({kind:`wallet_auth_authority_ref`,walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,authorityDigest:e.authorityDigestB64u});if(!t)throw Error(`[SigningEngine][near] exact Email OTP authority digest is invalid`);return t}async function aR(e){let t=await Lp({authMethod:e.authMethod,stores:nR});if(!oi(t)||t.walletId!==e.authMethod.walletId||t.bindingId!==e.authMethod.walletAuthMethodId||t.verifier.emailHashHex!==e.emailHashHex||t.factor.providerUserId!==e.providerSubject)throw Error(`[SigningEngine][near] exact Email OTP factor authority changed`);return t}function oR(e){let t=e.auth;switch(t.kind){case R.emailOtp:return{kind:e.kind,signer:e.signer,auth:t,thresholdSessionId:e.thresholdSessionId};case R.passkey:case`voiceid`:throw Error(`[SigningEngine][near] Email OTP material identity is required`);default:throw Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}}async function sR(e){if(String(e.identity.signer.account.wallet.walletId)!==String(e.walletId)||String(e.identity.signer.account.nearAccountId)!==String(e.nearAccountId)||e.identity.signer.signerSlot!==e.signerSlot)return null;let t;try{t=await G.resolveSelectedWalletAuthority(String(e.walletId))}catch{return null}if(t.kind!==`resolved`)return null;let{selection:n,authMethod:r,authority:i}=t,a=i.signerActivations.ed25519;if(n.lockState!==`unlocked`||n.walletId!==e.walletId||n.walletAuthMethodId!==r.walletAuthMethodId||r.kind!==R.emailOtp||r.status!==`active`||r.walletId!==e.walletId||r.walletAuthorityId!==i.authorityId||i.state!==`active`||i.walletId!==e.walletId||!a||a.signer.walletId!==e.walletId||!g(a.materialActivation,e.materialActivation))return null;try{let t=await H({authority:await aR({authMethod:r,emailHashHex:r.emailHashHex,providerSubject:e.identity.auth.providerSubjectId})});return t.walletId!==e.walletId||t.walletAuthMethodId!==r.walletAuthMethodId?null:t}catch{return null}}async function cR(e){let t=e.bootstrap.session,n=e.exactAuthorization?.record??await K.readExact(t.walletSessionId);if(!n||n.kind!==`active_wallet_session_v1`||n.walletId!==e.walletId||n.authorizationId!==t.authorizationId||n.quotaId!==t.quotaId||n.expiresAtMs<=Date.now())throw Error(`[SigningEngine][near] exact Email OTP activation session is unavailable`);let[r,i]=await Promise.all([G.getWalletAuthMethodV2(String(n.authMethodId)),G.getWalletAuthority(String(n.authorityId))]);if(!r||r.kind!==`email_otp`||r.status!==`active`||r.walletId!==e.walletId||r.walletAuthorityId!==n.authorityId||r.emailHashHex!==e.emailHashHex||!i||i.state!==`active`||i.walletId!==e.walletId||i.authorityId!==n.authorityId||i.authorityDigestB64u!==n.authorityDigestB64u||i.revocationEpoch!==n.authorityRevocationEpoch)throw Error(`[SigningEngine][near] exact Email OTP activation authority is unavailable`);let a=iR({walletId:e.walletId,walletAuthMethodId:r.walletAuthMethodId,authorityDigestB64u:i.authorityDigestB64u}),o=await H({authority:await aR({authMethod:r,emailHashHex:e.emailHashHex,providerSubject:e.providerSubject})});if(e.verifiedAuthority&&(e.verifiedAuthority.walletId!==o.walletId||e.verifiedAuthority.walletAuthMethodId!==o.walletAuthMethodId))throw Error(`[SigningEngine][near] verified Email OTP activation authority changed`);let s=e.exactAuthorization;if(s){if(!Ue(s.record,n)||s.operationCredential.walletSessionId!==t.walletSessionId)throw Error(`[SigningEngine][near] exact Email OTP activation credential is unavailable`);return{authority:a,operationCredential:s.operationCredential}}let c=await K.readExactActiveForWallet({walletId:e.walletId,authorityId:n.authorityId,authMethodId:n.authMethodId});if(c.kind!==`found`||!Ue(c.record,n)||c.operationCredential.walletSessionId!==t.walletSessionId)throw Error(`[SigningEngine][near] exact Email OTP activation credential is unavailable`);return{authority:a,operationCredential:c.operationCredential}}function lR(e){switch(e.status){case`missing`:return{kind:`missing`};case`expired`:return{kind:`expired`};case`superseded`:return{kind:`superseded`};case`authority_unavailable`:return{kind:`authority_unavailable`};case`method_unavailable`:return{kind:`method_unavailable`};case`capability_unavailable`:return{kind:`capability_unavailable`};case`invalid`:return{kind:`corrupt`};default:throw Error(`[SigningEngine][ed25519-export] unsupported exact session status`)}}async function uR(e){let t=e.subject.signer.account.wallet.walletId,n;try{n=await G.resolveSelectedWalletAuthority(String(t))}catch{return{kind:`persistence_unavailable`}}if(n.kind!==`resolved`)return n.kind===`integrity_error`?{kind:`corrupt`}:{kind:`missing`};let{selection:r,authority:i,authMethod:a}=n;if(r.lockState!==`unlocked`||r.walletId!==t||r.walletAuthMethodId!==a.walletAuthMethodId||i.state!==`active`||i.walletId!==t||a.kind!==`email_otp`||a.status!==`active`||a.walletId!==t||a.walletAuthorityId!==i.authorityId)return{kind:`corrupt`};let o;try{o=await aR({authMethod:a,emailHashHex:a.emailHashHex,providerSubject:e.subject.auth.providerSubjectId})}catch{return{kind:`corrupt`}}let s=await K.readExactActiveForWallet({walletId:t,authorityId:i.authorityId,authMethodId:a.walletAuthMethodId});switch(s.kind){case`missing`:case`upgrade_required`:case`corrupt`:case`persistence_unavailable`:return s;case`found`:break;default:throw Error(`[SigningEngine][ed25519-export] unsupported exact local session result`)}if(s.record.expiresAtMs<=Date.now())return{kind:`expired`};let c;try{c=await La({relayerUrl:e.relayerUrl,operationCredential:s.operationCredential}).read({walletSessionId:s.operationCredential.walletSessionId,quotaId:s.record.quotaId})}catch{return{kind:`persistence_unavailable`}}return c.status!==`active`&&c.status!==`exhausted`?lR(c):{kind:`found`,authorization:{selectedAuthority:i,selectedAuthMethod:a,factorAuthority:o,record:s.record,operationCredential:s.operationCredential,status:c}}}function dR(e,t){return globalThis.fetch(e,t)}function fR(e){let t=e.walletSessionState.thresholdSessionId;switch(e.subject.kind){case`exact_lane`:return{kind:`exact_lane`,laneIdentity:e.walletSessionState.signingLane.identity};case`export_exact_lane`:return{kind:`export_exact_lane`,laneIdentity:Uc({signer:e.walletSessionState.signingLane.identity.signer,auth:e.walletSessionState.signingLane.identity.auth,thresholdSessionId:t}),materialActivation:e.subject.materialActivation};case`material_identity`:return{kind:`material_identity`,materialIdentity:{kind:`near_ed25519_material_identity`,signer:e.walletSessionState.signingLane.identity.signer,auth:e.walletSessionState.signingLane.identity.auth,thresholdSessionId:t}};default:return pR(e.subject)}}function pR(e){throw Error(`Unknown Ed25519 capability rehydration subject: ${String(e)}`)}async function mR(e){let t=e.walletSessionState.thresholdSessionId,n=await e.claimWarmSessionMaterial({thresholdSessionId:t,purpose:{curve:`ed25519`,materialActivation:e.materialActivation},consume:!1});if(n.ok||n.code!==`not_found`)return n;if(e.runtime.factor.kind!==`passkey`)throw Error(`[SigningEngine][near] persisted Ed25519 credential is unavailable`);let r=String(e.walletSessionState.walletSessionAuth.walletSessionToken||``).trim(),i=String(e.runtime.sealedRecord.groupId||``).trim();if(!r||!i)return{ok:!1,code:`invalid_args`,message:`Passkey Ed25519 sealed restore metadata is incomplete`};if(!g(e.runtime.sealedRecord.ed25519Restore.materialActivation,e.materialActivation))throw Error(`[SigningEngine][near] persisted Ed25519 material activation mismatch`);let a=Ei(e.runtime.sealedRecord.keyVersion),o=await e.rehydrateWarmSessionMaterial({thresholdSessionId:t,sealedSecretB64u:e.runtime.sealedRecord.sealedSecretB64u,signingSessionSealKeyVersion:a,expiresAtMs:e.runtime.sealedRecord.expiresAtMs,remainingUses:e.runtime.sealedRecord.remainingUses,transport:{curve:`ed25519`,authMethod:`passkey`,walletId:String(e.runtime.walletId),relayerUrl:e.runtime.relayerUrl,signingSessionSealKeyVersion:a,groupId:i,walletSessionToken:r,ed25519Restore:So({rpId:e.runtime.factor.rpId,nearAccountId:e.runtime.nearAccountId,nearEd25519SigningKeyId:e.runtime.nearEd25519SigningKeyId,relayerKeyId:e.runtime.relayerKeyId,participantIds:e.runtime.participantIds,runtimePolicyScope:e.runtime.runtimePolicyScope,signerSlot:e.runtime.signerSlot,routerAbNormalSigning:e.runtime.routerAbNormalSigning,credentialIdB64u:e.runtime.factor.credentialIdB64u,materialActivation:e.materialActivation})}});return o.ok?(n=await e.claimWarmSessionMaterial({thresholdSessionId:t,purpose:{curve:`ed25519`,materialActivation:e.materialActivation},consume:!1}),n):o}async function hR(e){let t=e.identity.signer,n=(await e.store.listLanes()).filter(n=>String(n.walletId)===String(t.account.wallet.walletId)&&String(n.nearAccountId)===String(t.account.nearAccountId)&&String(n.nearEd25519SigningKeyId)===String(t.nearEd25519SigningKeyId)&&n.signerSlot===t.signerSlot&&String(n.thresholdSessionId)===String(e.identity.thresholdSessionId)&&WR(n.auth,e.identity.auth));if(n.length>1)throw Error(`[SigningEngine][near] public Ed25519 capability lane is conflicting`);return n[0]?.materialActivation??null}function gR(e){let t=e.walletSessionState.signingLane,n=t.identity.signer;if(t.auth.kind!==`email_otp`)throw Error(`[SigningEngine][near] Email OTP recovery returned another auth lane`);return{walletId:n.account.wallet.walletId,nearAccountId:n.account.nearAccountId,thresholdSessionId:e.walletSessionState.thresholdSessionId,runtimePolicyScope:e.walletSessionState.runtimePolicyScope,materialActivation:e.materialActivation,auth:{kind:`email_otp`,providerSubjectId:t.auth.providerSubjectId},nearEd25519SigningKeyId:n.nearEd25519SigningKeyId,signerSlot:n.signerSlot,remainingUses:e.walletSessionState.signingWalletSession.remainingUses,expiresAtMs:e.walletSessionState.signingWalletSession.expiresAtMs}}function _R(e){return e.kind===`wallet_authority_linked_signer_material_v1`&&e.keyFamily===`ed25519`}function vR(e){let t=e.selected;if(t.kind!==`resolved`){let e=t.kind===`integrity_error`?`: ${t.reason}`:``;throw Error(`[SigningEngine][ed25519-export] selected Wallet Authority is ${t.kind}${e}`)}if(t.authority.provenance.kind===`wallet_registration`||t.authority.provenance.kind===`wallet_recovery`)return null;let{selection:n,authMethod:r,authority:i,signerMaterials:a,exportRoot:o}=t,s=e.subject.signer,c=i.signerActivations.ed25519;if(n.lockState!==`unlocked`||r.kind!==R.emailOtp||r.status!==`active`||i.state!==`active`||String(n.walletId)!==String(s.account.wallet.walletId)||n.walletAuthMethodId!==r.walletAuthMethodId||r.walletAuthorityId!==i.authorityId||String(r.walletId)!==String(s.account.wallet.walletId)||!i.permissions.includes(`export_keys`)||!c||!g(c.materialActivation,e.expectedMaterialActivation)||!o)throw Error(`[SigningEngine][ed25519-export] selected linked Email OTP authority has no exact export root`);let l=null;for(let t of a)if(!(!_R(t)||t.authorityId!==i.authorityId||t.walletAuthMethodId!==r.walletAuthMethodId||!g(t.materialActivation,e.expectedMaterialActivation))){if(l)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 material is ambiguous`);l=t}if(!l)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 material is unavailable`);let u=l.targetFactor,d=l.publicFacts.applicationBinding,f=l.publicFacts.targetBinding.lifecycle,p=c.signer.registeredPublicKeyB64u;if(u.kind!==R.emailOtp||u.walletAuthMethodId!==r.walletAuthMethodId||u.emailHashHex!==r.emailHashHex||u.registrationAuthorityId!==r.registrationAuthorityId||o.authorityId!==i.authorityId||o.walletAuthMethodId!==r.walletAuthMethodId||o.walletKeyId!==c.signer.walletKeyId||o.envelope.binding.kind!==`ed25519_yao_client_root_v1`||o.envelope.binding.registeredPublicKeyB64u!==p||o.envelope.factor.kind!==R.emailOtp||d.wallet_id!==String(s.account.wallet.walletId)||d.near_ed25519_signing_key_id!==String(s.nearEd25519SigningKeyId)||d.key_creation_signer_slot!==s.signerSlot||f.account_id!==String(s.account.wallet.walletId)||f.session_id!==String(e.subject.thresholdSessionId)||f.selected_server_id!==e.expectedMaterialActivation.signingWorker||P(Uint8Array.from(l.publicFacts.activationReceipt.registered_public_key))!==p)throw Error(`[SigningEngine][ed25519-export] linked Email OTP export identity changed`);if(e.activeCapability){if(!g(e.activeCapability.materialActivation,e.expectedMaterialActivation)||P(Uint8Array.from(e.activeCapability.registeredPublicKey))!==p)throw Error(`[SigningEngine][ed25519-export] active Email OTP capability changed`);return o.envelope}return{envelope:o.envelope,source:{materialActivation:e.expectedMaterialActivation,signingWorkerId:f.selected_server_id,participantIds:l.publicFacts.participantIds,registeredPublicKeyB64u:p}}}async function yR(e){let t=null;for(let n of e.signerMaterials)if(!(!_R(n)||n.authorityId!==e.authMethod.walletAuthorityId||n.walletAuthMethodId!==e.authMethod.walletAuthMethodId)){if(t)throw Error(`[SigningEngine] linked Passkey Ed25519 signer material is conflicting`);t=n}if(!t)throw Error(`[SigningEngine] linked Passkey Ed25519 signer material is unavailable`);let n=t.publicFacts.applicationBinding,r=gi(n.key_creation_signer_slot,{min:1}),i=t.targetFactor;if(!r||n.wallet_id!==String(e.walletId)||String(t.materialActivation.materialOwner)!==String(e.walletId)||i.kind!==R.passkey||i.walletAuthMethodId!==e.authMethod.walletAuthMethodId||String(i.rpId)!==String(e.authMethod.rpId)||String(i.credentialIdB64u)!==String(e.authMethod.credentialIdB64u))throw Error(`[SigningEngine] linked Passkey Ed25519 signer material identity is invalid`);let a=0;for(let i of await e.publicLaneStore.listLanes())i.auth.kind===`passkey`&&(String(i.walletId)!==String(e.walletId)||String(i.auth.rpId)!==String(e.authMethod.rpId)||i.auth.credentialIdB64u!==e.authMethod.credentialIdB64u||String(i.nearEd25519SigningKeyId)!==String(n.near_ed25519_signing_key_id)||i.signerSlot!==r||!g(i.materialActivation,t.materialActivation)||(a+=1));if(a===0)throw Error(`[SigningEngine] linked Passkey Ed25519 public lane is unavailable`);if(a!==1)throw Error(`[SigningEngine] linked Passkey Ed25519 public lane is ambiguous`);return r}async function bR(e){let t=e.laneIdentity.signer,n=(await e.store.listLanes()).filter(n=>n.auth.kind===R.emailOtp&&e.laneIdentity.auth.kind===R.emailOtp&&n.auth.providerSubjectId===e.laneIdentity.auth.providerSubjectId&&String(n.walletId)===String(t.account.wallet.walletId)&&String(n.nearAccountId)===String(t.account.nearAccountId)&&String(n.nearEd25519SigningKeyId)===String(t.nearEd25519SigningKeyId)&&n.signerSlot===t.signerSlot&&String(n.thresholdSessionId)===String(e.laneIdentity.thresholdSessionId)&&g(n.materialActivation,e.materialActivation));if(n.length!==1)throw Error(n.length===0?`[SigningEngine][near] Email OTP public lane is unavailable`:`[SigningEngine][near] Email OTP public lane is ambiguous`);return n[0]}async function xR(e){if(e.laneIdentity.auth.kind!==R.passkey)throw Error(`[SigningEngine][near] Passkey public lane authority is required`);let t=e.laneIdentity.auth,n=e.laneIdentity.signer,r=(await e.store.listLanes()).filter(r=>r.auth.kind===R.passkey&&r.auth.rpId===t.rpId&&r.auth.credentialIdB64u===t.credentialIdB64u&&String(r.walletId)===String(n.account.wallet.walletId)&&String(r.nearAccountId)===String(n.account.nearAccountId)&&String(r.nearEd25519SigningKeyId)===String(n.nearEd25519SigningKeyId)&&r.signerSlot===n.signerSlot&&String(r.thresholdSessionId)===String(e.laneIdentity.thresholdSessionId));if(r.length!==1)throw Error(r.length===0?`[SigningEngine][near] Passkey public lane is unavailable`:`[SigningEngine][near] Passkey public lane is ambiguous`);return r[0]}async function SR(e){let t=e.identity.signer,n=(await e.store.listLanes()).filter(n=>String(n.walletId)===String(t.account.wallet.walletId)&&String(n.nearAccountId)===String(t.account.nearAccountId)&&String(n.nearEd25519SigningKeyId)===String(t.nearEd25519SigningKeyId)&&n.signerSlot===t.signerSlot&&String(n.thresholdSessionId)===String(e.identity.thresholdSessionId)&&WR(n.auth,e.identity.auth)&&g(n.materialActivation,e.materialActivation));if(n.length!==1)throw Error(n.length===0?`[SigningEngine][near] exact Ed25519 public lane is unavailable`:`[SigningEngine][near] exact Ed25519 public lane is ambiguous`);return n[0]}async function CR(e){if(e.reference.auth.kind!==R.passkey)throw Error(`[SigningEngine][near] Passkey public lane authority is required`);if(e.authorization.selectedAuthMethod.kind!==R.passkey||String(e.authorization.session.walletId)!==String(e.reference.walletId))throw Error(`[SigningEngine][near] Passkey Wallet Session authority does not match lane`);let t=await G.getWalletAuthMethodV2(e.authorization.selectedAuthMethod.walletAuthMethodId);if(!t||t.kind!==R.passkey||t.status!==`active`||String(t.walletId)!==String(e.reference.walletId)||String(t.rpId)!==String(e.reference.auth.rpId)||String(t.credentialIdB64u)!==String(e.reference.auth.credentialIdB64u))throw Error(`[SigningEngine][near] Passkey Wallet Session method does not match lane`);let n=await H({authority:{walletId:t.walletId,factor:{kind:R.passkey,credentialIdB64u:t.credentialIdB64u},verifier:{kind:`webauthn`,rpId:t.rpId},bindingId:t.walletAuthMethodId}}),r=await H({authority:e.authorization.selectedFactorAuthority});if(n.authorityDigest!==r.authorityDigest||n.walletAuthMethodId!==r.walletAuthMethodId)throw Error(`[SigningEngine][near] Passkey Wallet Session authority changed`);return n}async function wR(e){if(e.reference.auth.kind!==R.passkey)throw Error(`[SigningEngine][near] Passkey public lane authority is required`);if(!Xc({session:e.authorization.session,materialActivation:e.materialActivation}))throw Error(`[SigningEngine][near] Passkey Wallet Session material changed`);let t=await CR({reference:e.reference,authorization:e.authorization}),n=yt(e.authorization.session.authorizationId);if(!n.ok||e.authorization.operationCredential.token.trim().length===0)throw Error(`[SigningEngine][near] Passkey Ed25519 Wallet Session credential is unavailable`);let r=e.material.facts,i=Ao({walletId:String(e.reference.walletId),nearAccountId:String(e.reference.nearAccountId),nearEd25519SigningKeyId:String(e.reference.nearEd25519SigningKeyId),walletSessionId:e.authorization.operationCredential.walletSessionId,authorizationId:n.value,quotaId:e.authorization.session.quotaId,thresholdSessionId:e.reference.thresholdSessionId,remainingUses:e.authorization.status.remainingUses,expiresAtMs:e.authorization.status.expiresAtMs,runtimePolicyScope:r.runtimePolicyScope,signingRootId:r.signingRootId,signingRootVersion:r.signingRootVersion,routerAbNormalSigning:r.routerAbNormalSigning,walletSessionToken:e.authorization.operationCredential.token,home:e.authorization.operationCredential.home,nowMs:Date.now()});if(!i.ok)throw Error(`[SigningEngine][near] Passkey Wallet Session is unusable (${i.reason})`);return os({walletId:e.reference.walletId,nearAccountId:e.reference.nearAccountId,nearEd25519SigningKeyId:e.reference.nearEd25519SigningKeyId,signerSlot:e.reference.signerSlot,rpId:e.reference.auth.rpId,credentialIdB64u:e.reference.auth.credentialIdB64u,relayerUrl:e.relayerUrl,authority:t,signingWalletSession:i.value})}async function TR(e){let t=await zs(e);if(t.kind!==`resolved`)throw xf(t.kind===`conflict`?`runtime_conflict`:`missing_runtime`);return t.runtime}async function ER(e){let t=await so(Pd({authMethod:Vt(e.laneIdentity.auth.kind),materialActivation:e.materialActivation}));if(!t||t.curve!==`ed25519`)throw Error(`[SigningEngine][near] exact persisted Ed25519 runtime is missing`);let n=Ns(t);if(!n||String(n.walletId)!==String(e.walletId)||String(n.nearAccountId)!==String(e.laneIdentity.signer.account.nearAccountId)||String(n.nearEd25519SigningKeyId)!==String(e.laneIdentity.signer.nearEd25519SigningKeyId)||n.signerSlot!==e.laneIdentity.signer.signerSlot||String(n.thresholdSessionId)!==String(e.laneIdentity.thresholdSessionId)||!WR(n.auth,e.laneIdentity.auth)||!g(n.sealedRecord.ed25519Restore.materialActivation,e.materialActivation))throw Error(`[SigningEngine][near] exact persisted Ed25519 runtime identity mismatch`);return n}async function DR(e){let t=(await Lo({walletId:e.walletId,filter:{authMethod:Vt(e.identity.auth.kind),curve:`ed25519`}})).filter(e=>e.curve===`ed25519`).map(Ns).filter(t=>t!==null&&GR({runtime:t,identity:e.identity}));if(t.length===0)throw xf(`missing_runtime`);if(t.length!==1)throw xf(`runtime_conflict`);return t[0]}function OR(e){let{selection:t,authMethod:n,authority:r}=e.selected;if(t.lockState!==`unlocked`||t.walletId!==e.walletId||t.walletAuthMethodId!==n.walletAuthMethodId||n.walletId!==e.walletId||n.walletAuthorityId!==r.authorityId||r.walletId!==e.walletId)return!1;switch(e.proof.kind){case`passkey`:return n.kind===R.passkey&&e.proof.authority.walletId===e.walletId&&e.proof.authority.bindingId===n.walletAuthMethodId&&e.proof.authority.factor.credentialIdB64u===n.credentialIdB64u&&e.proof.authority.verifier.rpId===n.rpId;case`email_otp`:return n.kind===R.emailOtp&&e.proof.authorityRef.walletId===e.walletId&&e.proof.authorityRef.walletAuthMethodId===n.walletAuthMethodId;default:throw e.proof,Error(`[SigningEngine][near] unsupported operation step-up proof`)}}async function kR(e){let t=await G.resolveSelectedWalletAuthority(String(e.walletId));if(t.kind!==`resolved`){let e=t.kind===`integrity_error`?`: ${t.reason}`:``;throw Error(`[SigningEngine][near] selected Wallet Authority is ${t.kind}${e}`)}if(!OR({walletId:e.walletId,proof:e.proof,selected:t}))throw Error(`[SigningEngine][near] operation step-up authority does not match selection`);let n=await mh({selected:{authMethod:t.authMethod,authority:t.authority},operation:{kind:`near_sign`,operation:`sign`,keyFamily:`ed25519`}});if(n.kind!==`resolved`)throw Error(`[SigningEngine][near] selected Wallet Authority rejected signing (${n.reason.kind})`);let r=yy(await K.readExactWithOperationCredential({walletId:e.walletId,authorityId:t.authority.authorityId,authMethodId:t.authMethod.walletAuthMethodId}),`[SigningEngine][near] exact Wallet Session requires a newer client`),i=r?.record.capabilitySubjects.filter(e=>e.kind===`sign`&&e.keyFamily===`ed25519`&&g(e.materialActivation,n.value.materialActivation)).length===1;if(!r||r.record.walletId!==e.walletId||r.record.authorityId!==t.authority.authorityId||r.record.authMethodId!==t.authMethod.walletAuthMethodId||r.record.authorityDigestB64u!==t.authority.authorityDigestB64u||r.record.authorityRevocationEpoch!==t.authority.revocationEpoch||r.record.expiresAtMs<=Date.now()||!i)throw Error(`[SigningEngine][near] exact Wallet Session is unavailable for operation step-up`);return r.operationCredential}async function AR(e){let t=await jv(e.runtime.walletId,e.relayerUrl,new q);if(!t)throw Error(`[SigningEngine][near] active Wallet Session authorization is unavailable`);return await ys({runtime:e.runtime,authorization:t,nowMs:Date.now()})}async function jR(e){let{identity:t}=e;if(t.auth.kind!==R.passkey)throw xf(`binding_mismatch`);let n=await G.resolveSelectedWalletAuthority(String(e.walletId));if(n.kind!==`resolved`||n.selection.lockState!==`unlocked`||n.selection.walletId!==e.walletId||n.authMethod.kind!==R.passkey||String(n.authMethod.rpId)!==String(t.auth.rpId)||n.authMethod.credentialIdB64u!==t.auth.credentialIdB64u)throw xf(`binding_mismatch`);let r=await mh({selected:{authMethod:n.authMethod,authority:n.authority},operation:{kind:`near_sign`,operation:`sign`,keyFamily:`ed25519`}});if(r.kind!==`resolved`)throw xf(`missing_capability`);let i=await rR({walletId:e.walletId,rpId:t.auth.rpId,credentialIdB64u:t.auth.credentialIdB64u});if(!i||i.walletAuthMethodId!==n.authMethod.walletAuthMethodId)throw xf(`binding_mismatch`);let a=await as({store:G,walletId:String(e.walletId),nearAccountId:String(t.signer.account.nearAccountId),nearEd25519SigningKeyId:String(t.signer.nearEd25519SigningKeyId),signerSlot:t.signer.signerSlot,rpId:t.auth.rpId,credentialIdB64u:t.auth.credentialIdB64u,authority:i});if(a.kind!==`available`)throw xf(`missing_runtime`);if(!g(a.locator.materialActivation,r.value.materialActivation))throw xf(`binding_mismatch`);let o=a.locator.stableServerScope,s=Pe(o.runtimePolicyScope);if(!s.signingRootVersion)throw xf(`binding_mismatch`);let c={walletId:String(e.walletId),nearAccountId:String(t.signer.account.nearAccountId),nearEd25519SigningKeyId:String(t.signer.nearEd25519SigningKeyId),thresholdSessionId:String(t.thresholdSessionId),signerSlot:t.signer.signerSlot,rpId:t.auth.rpId,credentialIdB64u:t.auth.credentialIdB64u,signingRootId:s.signingRootId,signingRootVersion:s.signingRootVersion,signingWorkerId:o.routerAbNormalSigning.signingWorkerId},l={kind:`available`,walletId:c.walletId,nearAccountId:c.nearAccountId,signerSlot:c.signerSlot,materialActivation:a.locator.materialActivation},u=await NR({store:G,identity:c,authority:i,publicLocator:l});if(u.kind===`blocked`)throw Sf(u.plan.reason);return{prepared:u,localIdentity:c,authority:i,publicLocator:l,facts:{thresholdSessionId:t.thresholdSessionId,signer:t.signer,signingRootId:s.signingRootId,signingRootVersion:s.signingRootVersion,routerAbNormalSigning:o.routerAbNormalSigning,runtimePolicyScope:o.runtimePolicyScope,relayerUrl:e.relayerUrl},participantIds:o.participantIds}}function MR(e){if(e.factor.kind!==R.passkey)throw xf(`binding_mismatch`);return{walletId:String(e.walletId),nearAccountId:String(e.nearAccountId),nearEd25519SigningKeyId:String(e.nearEd25519SigningKeyId),thresholdSessionId:String(e.thresholdSessionId),signerSlot:e.signerSlot,rpId:String(e.factor.rpId),credentialIdB64u:e.factor.credentialIdB64u,signingRootId:e.signingRootId,signingRootVersion:e.signingRootVersion,signingWorkerId:e.routerAbNormalSigning.signingWorkerId}}async function NR(e){try{return await ns(e)}catch{throw xf(`binding_mismatch`)}}async function PR(e){try{return await gs(e)}catch{throw xf(`corrupt`)}}function FR(e){if(!e||e.activeClient.status().kind!==`active`)return{kind:`absent`};let t=Hc(e.activeClient.metadata());return{kind:`live`,runtime:Rc(t),materialActivation:t}}function IR(e){return e.laneIdentity===void 0?e.materialIdentity:{kind:`near_ed25519_material_identity`,signer:e.laneIdentity.signer,auth:e.laneIdentity.auth,thresholdSessionId:e.laneIdentity.thresholdSessionId}}function LR(e){return IR(e).auth}function RR(e){return e.auth===void 0?e.materialIdentity.auth:e.auth}function zR(e){return IR(e).signer}function BR(e){return String(IR(e).thresholdSessionId)}function VR(e){if(e.laneIdentity===void 0||e.auth===void 0)throw Error(`[SigningEngine][near] authorized lane identity is required`);return{walletId:e.walletId,nearAccountId:e.nearAccountId,laneIdentity:e.laneIdentity,auth:e.auth}}function HR(e){return{walletId:e.walletId,nearAccountId:e.nearAccountId,materialIdentity:IR(e)}}async function UR(e){if(e.reference.auth.kind!==R.emailOtp)throw Error(`[SigningEngine][near] Email OTP public lane authority is required`);if(!Xc({session:e.authorization.session,materialActivation:e.materialActivation}))throw Error(`[SigningEngine][near] Email OTP Wallet Session material changed`);let t=yt(e.authorization.session.authorizationId);if(!t.ok||e.authorization.operationCredential.token.trim().length===0)throw Error(`[SigningEngine][near] Email OTP Ed25519 Wallet Session credential is unavailable`);let n=await H({authority:e.authorization.selectedFactorAuthority}),r=e.material.facts,i=Ao({walletId:String(e.reference.walletId),nearAccountId:String(e.reference.nearAccountId),nearEd25519SigningKeyId:String(e.reference.nearEd25519SigningKeyId),walletSessionId:e.authorization.operationCredential.walletSessionId,authorizationId:t.value,quotaId:e.authorization.session.quotaId,thresholdSessionId:e.reference.thresholdSessionId,remainingUses:e.authorization.status.remainingUses,expiresAtMs:e.authorization.status.expiresAtMs,runtimePolicyScope:r.runtimePolicyScope,signingRootId:r.signingRootId,signingRootVersion:r.signingRootVersion,routerAbNormalSigning:r.routerAbNormalSigning,walletSessionToken:e.authorization.operationCredential.token,home:e.authorization.operationCredential.home,nowMs:Date.now()});if(!i.ok)throw Error(`[SigningEngine][near] Email OTP Wallet Session is unusable (${i.reason})`);return js({walletId:e.reference.walletId,nearAccountId:e.reference.nearAccountId,nearEd25519SigningKeyId:e.reference.nearEd25519SigningKeyId,providerSubjectId:e.reference.auth.providerSubjectId,signerSlot:e.reference.signerSlot,relayerUrl:e.relayerUrl,authority:n,signingWalletSession:i.value})}function WR(e,t){if(e.kind!==t.kind)return!1;switch(e.kind){case`voiceid`:return t.kind===`voiceid`&&e.walletAuthMethodId===t.walletAuthMethodId&&e.deviceKeyId===t.deviceKeyId;case R.passkey:return t.kind===R.passkey&&e.rpId===t.rpId&&e.credentialIdB64u===t.credentialIdB64u;case R.emailOtp:return t.kind===R.emailOtp&&e.providerSubjectId===t.providerSubjectId;default:throw Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}}function GR(e){let t=e.identity.signer;return String(e.runtime.walletId)===String(t.account.wallet.walletId)&&String(e.runtime.nearAccountId)===String(t.account.nearAccountId)&&String(e.runtime.nearEd25519SigningKeyId)===String(t.nearEd25519SigningKeyId)&&e.runtime.signerSlot===t.signerSlot&&String(e.runtime.thresholdSessionId)===String(e.identity.thresholdSessionId)&&WR(e.runtime.auth,e.identity.auth)}function KR(e){let t=Pe(e.publicLane.runtimePolicyScope);if(!t.signingRootVersion)throw Error(`[SigningEngine][near] Email OTP lane requires a signing-root version`);return{thresholdSessionId:e.publicLane.thresholdSessionId,signer:zR(e.input),signingRootId:t.signingRootId,signingRootVersion:t.signingRootVersion,routerAbNormalSigning:{kind:Xe,signingWorkerId:String(e.publicLane.materialActivation.signingWorker)},runtimePolicyScope:e.publicLane.runtimePolicyScope,relayerUrl:e.relayerUrl}}function qR(e){let t=LR(e),n=RR(e);if(t.kind!==n.kind)throw Error(`[SigningEngine][near] prepared material factor changed`);switch(n.kind){case`voiceid`:if(t.kind!==`voiceid`||t.walletAuthMethodId!==n.walletAuthMethodId||t.deviceKeyId!==n.deviceKeyId)throw Error(`Prepared VoiceID material binding changed`);return;case R.passkey:if(t.kind!==R.passkey||t.rpId!==n.rpId||t.credentialIdB64u!==n.credentialIdB64u)throw Error(`[SigningEngine][near] prepared Passkey material binding changed`);return;case R.emailOtp:if(t.kind!==R.emailOtp||t.providerSubjectId!==n.providerSubjectId)throw Error(`[SigningEngine][near] prepared Email OTP material binding changed`);return;default:throw Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}}function JR(e){let t=e.material.facts,n=e.material.activeClient.metadata(),r=BR(e.input),i=zR(e.input),a=t.signer;if(String(t.thresholdSessionId)!==r)throw Error(`[SigningEngine][near] active Ed25519 Yao capability session mismatch`);if(n.scope.threshold_session_id!==String(t.thresholdSessionId))throw Error(`[SigningEngine][near] active Ed25519 Yao metadata session mismatch`);if(n.scope.account_id!==String(e.input.walletId)||n.applicationBinding.wallet_id!==String(e.input.walletId))throw Error(`[SigningEngine][near] active Ed25519 Yao capability subject mismatch`);if(String(a.account.wallet.walletId)!==String(i.account.wallet.walletId)||String(a.account.nearAccountId)!==String(i.account.nearAccountId)||a.signerSlot!==i.signerSlot||String(a.nearEd25519SigningKeyId)!==String(i.nearEd25519SigningKeyId))throw Error(`[SigningEngine][near] active Ed25519 Yao capability signer mismatch`);let o=Hc(n);if(!g(e.expectedActivation,o))throw Error(`[SigningEngine][near] active Ed25519 Yao capability activation mismatch`);return e.material}async function YR(e){let t=Hc(e.material.activeClient.metadata());if(!Xc({session:e.authorization.session,materialActivation:t}))throw Error(`Owner Ed25519 execution-lane material changed`);JR({material:e.material,input:e.input,expectedActivation:t});let n=await Xo({runtime:e.sealedRuntime,walletAuthMethodId:e.authorization.selectedAuthMethod.walletAuthMethodId}),r=await H({authority:e.authorization.selectedFactorAuthority});if(n.walletId!==r.walletId||n.walletAuthMethodId!==r.walletAuthMethodId||n.authorityDigest!==r.authorityDigest)throw Error(`Owner Ed25519 execution-lane authority does not match sealed material`);if(FR(e.material).kind!==`live`)throw Error(`Owner Ed25519 signing requires active Yao material`)}function XR(e){let t=e.hydration.materialActivation;if(!t)throw Error(`[SigningEngine][near] prepared material has no activation`);return t}function ZR(e){let t=XR(e.preparation);if(!e.context.materialActivation||!g(e.context.materialActivation,t))throw Error(`[SigningEngine][near] prepared material boundary changed activation`);return t}function QR(e){return Hs({credential:e,firstPrfOutput:!0,secondPrfOutput:!0})}async function $R(e,t){return e.current?await e.current.storage.loadEcdsaRoleLocalReadyRecord(t):{ok:!1,code:`unavailable`,message:`Signing runtime storage is not initialized`}}function ez(e){let t=e.event;switch(t){case`signing_session.expired`:return`${String(e.walletId)}:${String(e.walletSessionId)}`;case`registration.near_provisioning_changed`:return`${String(e.walletId)}:${e.state.status}:${e.state.updatedAtMs}`;default:return tz(t)}}function tz(e){throw Error(`Unsupported SDK lifecycle event: ${String(e)}`)}async function nz(e){if(!G.isDisabled())return await G.getAppState(e)}async function rz(e,t){G.isDisabled()||await G.setAppState(e,t)}const iz={readCacheEntry:nz,writeCacheEntry:rz};function az(e,t){switch(e){case`add_email_code`:return{title:`Enter email code to add sign-in`,body:`This one-time code confirms ${t} can unlock this wallet.`,operation:`Add email code sign-in`,warning:`Adding email code lets anyone with access to your inbox try to unlock this wallet.`};case`add_passkey`:return{title:`Enter email code to add a passkey`,body:`This code confirms you can add a new passkey to this wallet.`,operation:`Add passkey`};case`remove_auth_method`:return{title:`Enter email code to remove sign-in`,body:`This code confirms removal of a wallet authentication method.`,operation:`Remove authentication method`};case`move_wallet`:return{title:`Enter email code to move wallet`,body:`This code confirms a wallet region move.`,operation:`Move wallet`};case`recovery_status`:return{title:`Enter email code to check recovery codes`,body:`This code confirms you can view this wallet’s recovery-code status.`,operation:`Check recovery-code status`};case`recovery_unlock`:return{title:`Enter email code to prepare new recovery codes`,body:`This code unlocks your wallet seed to create a new recovery-code set.`,operation:`Prepare recovery-code rotation`};case`recovery_rotate`:return{title:`Enter email code to rotate recovery codes`,body:`This code confirms the new recovery-code set replaces the old set.`,operation:`Rotate recovery codes`};case`recovery_backup_acknowledge`:return{title:`Enter email code to confirm backup`,body:`This code confirms you saved the recovery codes shown by this wallet.`,operation:`Confirm recovery-code backup`}}}var oz=class{touchConfirm;passkeyMpcSession;signerWorkerManager;touchIdPrompt;userPreferencesManager;nearClient;nonceCoordinator;workerBaseOrigin=``;appearance;thresholdEcdsaBootstrapQueueByWallet=new Map;thresholdEcdsaSigningQueueByKey=new Map;thresholdEd25519CommitQueueByKey=new Map;nearEd25519CapabilityRehydrationBySubject=new Map;emailOtpSessions;warmSigning;passkeyPublicDeps;warmCapabilitiesPublicDeps;sessionPublicDeps;emailOtpPublicDeps;recoveryPublicDeps;sealedRefreshStartupParityPromise;hostWarmCriticalResourcesTask=null;sealedRefreshStartupParityError=null;runtimePorts;enginePorts;ecdsaBootstrapStore;ed25519YaoPageLifecycleOwner;ed25519YaoPublicCapabilityReferences;sdkLifecycleEventListeners=new Set;deliveredSdkLifecycleEventKeys=new Set;signingSessionLifecycleSubscription;nearProvisioningUnsubscribe;walletAuthenticationState={kind:`signed_out`};voiceIdNearSessions=new Map;volatileWarmSigningMaterialCleanupInFlight=null;seamsWebConfigs;readNearEd25519SigningCandidate(e){return kv(String(this.seamsWebConfigs.network.relayer?.url||``).trim(),new q,e)}async prepareVoiceIdNearSigning(e){let t=IR(e),n=this.voiceIdNearSessions.get(e.walletId);if(t.auth.kind!==`voiceid`||!n||!WR(t.auth,n.signingLane.auth)||t.signer.account.nearAccountId!==n.signingLane.identity.signer.account.nearAccountId||t.signer.nearEd25519SigningKeyId!==n.signingLane.identity.signer.nearEd25519SigningKeyId||t.thresholdSessionId!==n.thresholdSessionId)throw Error(`Unlock with VoiceID again before signing.`);let r=await this.readNearEd25519SigningCandidate(e.walletId);if(r.kind!==`found`||r.authorization.selectedAuthMethod.kind!==`voiceid`||r.authorization.selectedAuthMethod.walletAuthMethodId!==t.auth.walletAuthMethodId||r.authorization.operationCredential.walletSessionId!==n.walletSessionId)throw Error(`The VoiceID Wallet Session is unavailable. Unlock again.`);let i=r.authorization.selectedAuthority.signerActivations.ed25519;if(!i)throw Error(`VoiceID Wallet Session has no NEAR signer.`);let a=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.walletId,nearAccountId:e.nearAccountId,materialActivation:i.materialActivation});if(!a)throw Error(`Unlock with VoiceID again to restore signing material.`);return JR({material:a,input:e,expectedActivation:i.materialActivation}),await cl({hydration:zc({authority:n.authority,runtime:Rc(i.materialActivation),materialActivation:i.materialActivation}),requirement:t.auth,authorization:r.authorization})}readExactNearEd25519WalletSessionAuthorization(e){return Av(String(this.seamsWebConfigs.network.relayer?.url||``).trim(),new q,e)}resolveActiveNearEd25519WalletSessionAuthorization(e,t){return jv(e,String(this.seamsWebConfigs.network.relayer?.url||``).trim(),t)}listPreprocessingCapabilities;constructor(e,t,n){Yo(iz),this.seamsWebConfigs=e,this.ed25519YaoPublicCapabilityReferences=n.ed25519YaoPublicCapabilityReferences,this.appearance=e.ui.appearance,this.nearClient=t,this.ecdsaBootstrapStore=n.signingEngineStores.walletProfileAndSignerRecords.ecdsaBootstrapStore,this.sealedRefreshStartupParityPromise=ZN({configs:this.seamsWebConfigs}).catch(e=>{this.sealedRefreshStartupParityError=e instanceof Error?e:Error(String(e||`sealed refresh parity check failed`))});let r={current:null},i=$R.bind(null,r),a=RN({resolveActiveEcdsaCapabilityRuntime:ey,resolveOperationStepUpCredential:this.resolveOperationStepUpCredential.bind(this),stores:n.managerStores,seamsWebConfigs:this.seamsWebConfigs,nearClient:this.nearClient,loadEcdsaRoleLocalReadyRecord:i,getTheme:()=>this.appearance.theme.mode,getAppearance:()=>this.appearance,thresholdEcdsaSigningQueueByKey:this.thresholdEcdsaSigningQueueByKey});this.touchIdPrompt=a.touchIdPrompt,this.userPreferencesManager=a.userPreferencesManager,this.nonceCoordinator=a.nonceCoordinator,this.signerWorkerManager=a.signerWorkerManager;let o=n.createRuntime({config:this.seamsWebConfigs,workerCtx:this.signerWorkerManager.getContext(),accountLifecycle:{accountStore:n.signingEngineStores.walletProfileAndSignerRecords.accountStore,userPreferencesManager:this.userPreferencesManager,nonceCoordinator:this.nonceCoordinator},ecdsaBootstrapStore:this.ecdsaBootstrapStore,getWarmSessionMaterialWriter:()=>this.passkeyMpcSession,getNearSigningDeps:()=>this.enginePorts.nearSigningDeps,getEvmFamilySigningDeps:()=>this.enginePorts.tempoSigningDeps});r.current=o.runtimePorts;let s=o.state.ecdsaSessions;this.runtimePorts=o.runtimePorts;let c=HL({seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,signerWorkerManager:this.signerWorkerManager,stores:n.signingEngineStores,runtimePorts:this.runtimePorts,sealedSigningSessionStore:n.sealedSigningSessionStore,baseTouchConfirm:a.touchConfirm,passkeyMpcSession:a.passkeyMpcSession,getEnginePorts:()=>this.enginePorts,thresholdEcdsaBootstrapQueueByWallet:this.thresholdEcdsaBootstrapQueueByWallet,thresholdEcdsaSigningQueueByKey:this.thresholdEcdsaSigningQueueByKey,loadWalletCustodyEd25519Material:this.loadEmailOtpWalletCustodyEd25519Material.bind(this),restoreWalletCustodyEcdsaContinuity:this.restoreWalletCustodyEcdsaContinuity.bind(this),getWarmSigning:()=>this.warmSigning,ensureSealedRefreshStartupParity:()=>this.ensureSealedRefreshStartupParity(),listActiveEcdsaCapabilityManifestsForWallet:Qv});this.emailOtpSessions=c.emailOtpSessions,this.touchConfirm=c.touchConfirm,this.passkeyMpcSession=c.passkeyMpcSession,this.warmSigning=hF({resolveActiveEcdsaCapabilityRuntime:ey,resolveActiveEcdsaCapabilityRuntimeForChain:ty,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,getEmailOtpWarmSessionStatus:e=>this.emailOtpSessions.readWarmSessionStatusOnly(e),signingSessionSeal:this.seamsWebConfigs.signing.sessionSeal,ecdsaExportArtifacts:s,resolveActiveEcdsaWalletSessionAuthorization:Rv({seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,stores:n.signingEngineStores,emailOtpSessions:this.emailOtpSessions,sealedSigningSessionStore:n.sealedSigningSessionStore}),resolveActiveEd25519WalletSessionAuthorization:this.resolveActiveNearEd25519WalletSessionAuthorization.bind(this)}),this.listPreprocessingCapabilities=Lv.bind(null,{seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,stores:n.signingEngineStores,emailOtpSessions:this.emailOtpSessions,sealedSigningSessionStore:n.sealedSigningSessionStore}),this.sessionPublicDeps=vF({seamsWebConfigs:this.seamsWebConfigs,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,emailOtpSessions:this.emailOtpSessions,ed25519YaoPublicCapabilityLanes:n.ed25519YaoPublicCapabilityReferences,isEd25519YaoPublicCapabilityActive:this.isEd25519YaoPublicCapabilityActive.bind(this),readActiveWalletSessionAuthorization:Av.bind(null,this.seamsWebConfigs.network.relayer.url),listEcdsaSigningCapabilitiesForWallet:(e,t)=>Kv({seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,stores:n.signingEngineStores,emailOtpSessions:this.emailOtpSessions,sealedSigningSessionStore:n.sealedSigningSessionStore},e,t),getWalletSessionStatus:Sv({seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,stores:n.signingEngineStores,emailOtpSessions:this.emailOtpSessions,sealedSigningSessionStore:n.sealedSigningSessionStore})}),this.emailOtpPublicDeps={relayerUrl:this.seamsWebConfigs.network.relayer?.url||``,groupId:Ze,getSignerWorkerContext:()=>this.enginePorts.walletSessionActivationDeps.getSignerWorkerContext(),emailOtpSessions:this.emailOtpSessions},this.recoveryPublicDeps=hv({seamsWebConfigs:this.seamsWebConfigs,runtimePorts:this.runtimePorts,signerWorkerManager:this.signerWorkerManager,warmSigning:this.warmSigning,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,passkeyMpcExport:a.passkeyMpcExport,emailOtpSessions:this.emailOtpSessions,thresholdEcdsaBootstrapQueueByWallet:this.thresholdEcdsaBootstrapQueueByWallet,thresholdEcdsaSigningQueueByKey:this.thresholdEcdsaSigningQueueByKey,thresholdEd25519CommitQueueByKey:this.thresholdEd25519CommitQueueByKey,getWalletSessionActivationDeps:()=>this.enginePorts.walletSessionActivationDeps,resolvePasskeyEd25519YaoExportContext:this.resolveExactPasskeyEd25519YaoExportContext.bind(this),resolveEmailOtpEd25519YaoExportContext:this.resolveEmailOtpEd25519YaoExportContext.bind(this),getSigningSessionCoordinator:()=>this.enginePorts.signingSessionCoordinator,getTheme:()=>this.appearance.theme.mode,ed25519YaoPublicCapabilityLanes:n.ed25519YaoPublicCapabilityReferences,isEd25519YaoPublicCapabilityActive:this.isEd25519YaoPublicCapabilityActive.bind(this),readActiveWalletSessionAuthorization:Av.bind(null,this.seamsWebConfigs.network.relayer.url),listEcdsaSigningCapabilitiesForWallet:(e,t)=>Kv({seamsWebConfigs:this.seamsWebConfigs,touchIdPrompt:this.touchIdPrompt,stores:n.signingEngineStores,emailOtpSessions:this.emailOtpSessions,sealedSigningSessionStore:n.sealedSigningSessionStore},e,t),resolveOwnerLaneScope:e=>this.resolveSelectedOwnerLaneScope(e)}),this.enginePorts=iy({runtimePorts:this.runtimePorts,stores:n.signingEngineStores,ed25519YaoPublicCapabilityReferences:n.ed25519YaoPublicCapabilityReferences,seamsWebConfigs:this.seamsWebConfigs,nearClient:this.nearClient,touchIdPrompt:this.touchIdPrompt,userPreferencesManager:this.userPreferencesManager,nonceCoordinator:this.nonceCoordinator,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,passkeyMpcExport:a.passkeyMpcExport,signerWorkerManager:this.signerWorkerManager,emailOtpSessions:this.emailOtpSessions,warmSigning:this.warmSigning,sealedSigningSessionStore:n.sealedSigningSessionStore,ecdsaBootstrapStore:this.ecdsaBootstrapStore,thresholdEcdsaBootstrapQueueByWallet:this.thresholdEcdsaBootstrapQueueByWallet,thresholdEcdsaSigningQueueByKey:this.thresholdEcdsaSigningQueueByKey,thresholdEd25519CommitQueueByKey:this.thresholdEd25519CommitQueueByKey,getWorkerBaseOrigin:()=>this.workerBaseOrigin,shouldPrewarmUiConfirmUi:n.shouldPrewarmUiConfirmUi,getTheme:()=>this.appearance.theme.mode,ensureSealedRefreshStartupParity:()=>this.ensureSealedRefreshStartupParity(),resolveOwnerLaneScope:e=>this.resolveSelectedOwnerLaneScope(e),getEnginePorts:()=>this.enginePorts,prepareNearEd25519YaoMaterialBoundary:this.prepareExactNearEd25519YaoMaterialBoundary.bind(this)}),this.signingSessionLifecycleSubscription=this.enginePorts.signingSessionCoordinator.subscribeLifecycle(this.publishSdkLifecycleEvent.bind(this)),this.nearProvisioningUnsubscribe=Qa(this.publishNearProvisioningLifecycleEvent.bind(this)),this.ed25519YaoPageLifecycleOwner=new nk(typeof window>`u`?null:window,this.enginePorts.ed25519YaoActiveClients);let l=UL({seamsWebConfigs:this.seamsWebConfigs,stores:n.signingEngineStores,touchIdPrompt:this.touchIdPrompt,touchConfirm:this.touchConfirm,passkeyMpcSession:this.passkeyMpcSession,warmSigning:this.warmSigning,runtimePorts:this.runtimePorts,thresholdEcdsaBootstrapQueueByWallet:this.thresholdEcdsaBootstrapQueueByWallet,ensureSealedRefreshStartupParity:()=>this.ensureSealedRefreshStartupParity(),enginePorts:this.enginePorts});this.passkeyPublicDeps=l.passkeyPublicDeps,this.warmCapabilitiesPublicDeps=l.warmCapabilitiesPublicDeps,Wa(e=>{this.persistUpgradedWalletCustodyEnvelopeV1(e)}),n.initializeRuntime({userPreferencesManager:this.userPreferencesManager,getWorkerBaseOrigin:()=>this.workerBaseOrigin,setWorkerBaseOrigin:e=>{this.workerBaseOrigin=e,this.signerWorkerManager.setWorkerBaseOrigin(e),this.touchConfirm.setWorkerBaseOrigin?.(e),a.passkeyMpcExport.setWorkerBaseOrigin(e),this.passkeyMpcSession.setWorkerBaseOrigin(e)}})}async resolveOperationStepUpCredential(e){let t=await kR({walletId:e.walletId,proof:e.proof});return{kind:`wallet_session_opaque`,walletSessionToken:t.token,home:t.home}}async ensureSealedRefreshStartupParity(){if(await this.sealedRefreshStartupParityPromise,this.sealedRefreshStartupParityError)throw this.sealedRefreshStartupParityError}async establishWalletCustodyNearEd25519KeySet(e){let t=new fo({routerOrigin:e.routerOrigin,routing:e.home,authorization:{kind:`bearer`,value:e.authorization},fetch:globalThis.fetch,...e.traceContext?{traceContext:e.traceContext}:{}}),n=null,r=await jo({runStep:Ha(this.walletCustodyCeremonyTransportV1()),walletId:e.walletId,...e.factor,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,registrationCeremonyId:e.registrationCeremonyId,yaoAdmission:e.admissionReceipt,yaoApplication:e.admissionRequest.application_binding,participantIds:e.participantIds,runRouterRound:async r=>{let i=e.executeWithProof?await e.executeWithProof(r):null;return i===null?(n=await hk({executeRequestJson:r,transport:t}),n):(n=i,n)}});if(!n)throw Error(`the wallet custody NEAR run completed without a Router activation result`);if(!r.localMaterial)throw Error(`the wallet custody NEAR run sealed no local material`);return{recoveryCodes:r.recoveryCodes,commitPayload:r.commitPayload,activationReference:r.activationReference,localMaterial:r.localMaterial,metadata:rk({admissionRequest:e.admissionRequest,activationResultJson:n})}}async recoverWalletCustodyManifest(e){return await Ok({...e,runStep:Ha(this.walletCustodyCeremonyTransportV1()),workerCtx:this.signerWorkerManager.getContext()})}async createWalletRecoveryReplacementCredential(e){let t=Et(`wallet-recovery:${e.registration.challengeId}`),n=JL(QR(await this.touchIdPrompt.generateRegistrationCredentialsInternal({kind:`wallet_recovery`,walletId:e.walletId,intendedUserName:e.walletId,recoveryRegistration:e.registration,prompt:{kind:`immediate`,requestId:t,cancellation:e.cancellation}})));return{registration:Ws(n.registration),credentialIdB64u:n.credentialIdB64u,factorSecret:n.factorSecret}}async joinWalletCustodyNearEd25519KeySet(e){let t=new fo({routerOrigin:e.routerOrigin,routing:e.routing,authorization:{kind:`bearer`,value:e.authorization},fetch:globalThis.fetch,...e.traceContext?{traceContext:e.traceContext}:{}}),n=null,r=await is({runStep:Ha(this.walletCustodyCeremonyTransportV1()),preparation:e.preparation,beforeRouterRound:e.beforeRouterRound,custodyJson:e.custodyJson,factorSecret:e.factorSecret,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,registrationCeremonyId:e.registrationCeremonyId,yaoAdmission:e.admissionReceipt,yaoApplication:e.admissionRequest.application_binding,participantIds:e.participantIds,runRouterRound:async e=>(n=await hk({executeRequestJson:e,transport:t}),n)});if(!n||!r.localMaterial)throw Error(`the wallet custody NEAR join produced no local signing material`);return{commitPayload:r.commitPayload,activationReference:r.activationReference,localMaterial:r.localMaterial,metadata:rk({admissionRequest:e.admissionRequest,activationResultJson:n})}}async rejoinWalletCustodyNearEd25519KeySet(e){let t=new fo({routerOrigin:e.routerOrigin,routing:{kind:`discovery`},authorization:{kind:`bearer`,value:`Bearer ${e.walletSessionToken}`},fetch:globalThis.fetch}),n=await lk({basis:e.recoveryBasis}),r=await uk({request:n,transport:t}),i=await ds({runStep:Ha(this.walletCustodyCeremonyTransportV1()),walletId:e.walletId,custodyJson:e.custodyJson,factorSecret:e.factorSecret,nearEd25519SigningKeyId:e.nearEd25519SigningKeyId,recoveryLifecycleId:n.scope.lifecycle_id,yaoAdmission:r.receipt,yaoApplication:r.request.application_binding,participantIds:e.recoveryBasis.participantIds,registeredPublicKeyB64u:P(Uint8Array.from(e.recoveryBasis.registeredPublicKey)),runRouterRound:e=>dk({executeRequestJson:e,transport:t}),activateRouterRecovery:e=>fk({request:n,protocolResultJson:e,transport:t})});if(!i.localMaterial)throw Error(`the wallet custody NEAR cold rejoin produced no local signing material`);return{commitPayload:i.commitPayload,activationReference:i.activationReference,localMaterial:i.localMaterial,metadata:ik({admissionRequest:n,activationResultJson:i.activationResultJson,activationReceipt:i.activationReceipt})}}async establishWalletCustodyEvmFamilyKeySet(e){return await qo({...e,runStep:Ha(this.walletCustodyCeremonyTransportV1())})}async joinWalletCustodyEvmFamilyKeySet(e){return await Za({...e,runStep:Ha(this.walletCustodyCeremonyTransportV1())})}async rejoinWalletCustodyEvmFamilyKeySet(e){return await Es({...e,runStep:Ha(this.walletCustodyCeremonyTransportV1())})}async restoreWalletCustodyEcdsaContinuity(e){let t=await wc({...e,store:new Ui});if(t.kind!==`committed`)throw Error(`wallet custody ECDSA import returned ${t.kind}`);let n=Wr(e.publicCapability.material_activation),r=await Wu({workerCtx:this.signerWorkerManager.getContext(),authority:e.authority,materialActivation:n});if(!r.ok)throw Error(`wallet custody ECDSA material open returned ${r.reason}`);return{materialActivation:n,materialRef:r.materialRef}}async persistWalletCustodyEd25519Material(e){await Tc({store:this.signerWorkerManager.getContext().nearKeyMaterialStore,binding:e.binding,sealed:e.sealed})}async loadWalletCustodyEd25519Material(e){return await xc({store:this.signerWorkerManager.getContext().nearKeyMaterialStore,nearAccountId:e.nearAccountId,signerSlot:e.signerSlot,expectedRegisteredPublicKeyB64u:e.expectedRegisteredPublicKeyB64u})}async loadEmailOtpWalletCustodyEd25519Material(e){let t=await this.loadWalletCustodyEd25519Material({nearAccountId:e.nearAccountId,signerSlot:e.signerSlot,expectedRegisteredPublicKeyB64u:``});return t.kind===`found`?t:{kind:`absent`}}async deleteWalletCustodyEd25519Material(e){await Sc({store:this.signerWorkerManager.getContext().nearKeyMaterialStore,nearAccountId:e.nearAccountId,signerSlot:e.signerSlot})}async assertSealedRefreshStartupParity(){await this.ensureSealedRefreshStartupParity()}async discoverPersistedSessionsForWallet(e){return await Sh(this.sessionPublicDeps,e)}isEd25519YaoPublicCapabilityActive(e){switch(e.auth.kind){case R.emailOtp:return!0;case R.passkey:case`voiceid`:return this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.walletId,nearAccountId:e.nearAccountId,materialActivation:e.materialActivation})!==null;default:throw e.auth,Error(`Unsupported Ed25519 public capability auth method`)}}async readPersistedAvailableSigningLanes(e,t){return await Ch(this.sessionPublicDeps,e,t)}async readOwnerScopedSigningLanes(e,t){return await wh(this.sessionPublicDeps,e,t)}async resolveSelectedOwnerLaneScope(e){let t=_(e);if(!t.ok)throw Error(t.error.message);let n={getWalletAuthMethodV2:e=>G.getWalletAuthMethodV2(e),listWalletAuthMethodsForWallet:e=>G.listWalletAuthMethodsForWallet(e),getWalletPasskeyAuthenticator:e=>G.getWalletPasskeyAuthenticator(e),readEmailOtpProviderSubjectForWallet:e=>Hi(G,e)},r=await G.resolveSelectedWalletAuthority(String(t.value));if(r.kind===`resolved`){let{selection:e,authMethod:i,authority:a}=r;if(e.walletId!==t.value||e.walletAuthMethodId!==i.walletAuthMethodId||i.walletId!==t.value||i.walletAuthorityId!==a.authorityId||a.walletId!==t.value)throw Error(`[SigningEngine] selected Wallet Authority identity mismatch`);if(e.lockState!==`unlocked`)throw bf(`wallet_locked`);if(i.status!==`active`)throw bf(`method_unavailable`);if(a.state!==`active`)throw bf(`authority_unavailable`);if(a.provenance.kind===`device_link`&&i.kind===`passkey`&&a.signerActivations.ed25519)return Rp({authMethod:i,signerSlot:await yR({walletId:t.value,authMethod:i,signerMaterials:r.signerMaterials,publicLaneStore:this.ed25519YaoPublicCapabilityReferences})});if(a.provenance.kind===`device_link`&&i.kind===`passkey`&&a.signerActivations.ecdsa)return zp({authMethod:i});if(a.provenance.kind===`device_link`&&i.kind===`email_otp`&&a.signerActivations.ecdsa){let e=Dd({walletId:t.value,materialActivation:a.signerActivations.ecdsa.materialActivation});if(!e||e.authorityId!==a.authorityId||!oi(e.factorAuthority))throw Error(`[SigningEngine] selected linked Email OTP authority has no exact ECDSA holder runtime`);let n=await H({authority:e.factorAuthority});if(n.walletId!==t.value||n.walletAuthMethodId!==i.walletAuthMethodId)throw Error(`[SigningEngine] selected linked Email OTP authority has no exact ECDSA holder runtime`);return Bp({authMethod:i,factorAuthority:e.factorAuthority,authorityRef:n})}return await Hp({authMethod:i,stores:n})}let i=r.kind===`integrity_error`?`: ${r.reason}`:``;throw Error(`[SigningEngine] selected Wallet Authority is ${r.kind}${i}`)}readWalletAuthenticationState(){return this.walletAuthenticationState}async retireActiveWalletSessionAuthorizationForLock(e){let t=Date.now();(await K.retireExactActiveForWallet({walletId:e,reason:`wallet_locked`,retiredAtMs:t})).length>0&&this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({kind:`wallet`,walletId:String(e)})}async advanceWalletLockGeneration(e){return G.advanceWalletLockGeneration({walletId:e,lockedAtMs:Date.now()})}async markWalletSelectionUnlocked(e){await G.markWalletSelectionUnlocked({walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,unlockedAtMs:Date.now()})}async markSelectedEmailOtpWalletAuthorityUnlocked(e){await this.markWalletSelectionUnlocked(e)}setWalletAuthenticated(e){let t=this.walletAuthenticationState;t.kind===`authenticated`&&String(t.walletId)!==String(e.walletId)&&this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({kind:`wallet`,walletId:String(t.walletId)}),this.walletAuthenticationState=e,this.userPreferencesManager.setCurrentWallet(e.walletId)}clearWalletAuthentication(){this.walletAuthenticationState={kind:`signed_out`},this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({kind:`all`})}clearWalletAuthenticationIfCurrent(e){return this.walletAuthenticationState===e?(this.clearWalletAuthentication(),!0):!1}walletCustodyCeremonyTransportV1(){let e=this.getSignerWorkerContext();return{requestOperation:Ba.bind(void 0,e)}}async establishUnlockedWalletEd25519ExportRootCapabilityV1(e){try{let t=e.existingEnvelope.binding;if(!Ut(t)&&t.kind!==`ed25519_yao_client_root_v1`)return;if(e.existingEnvelope.factor.kind!==`passkey`)throw Error(`unlocked export-root capability requires a passkey envelope factor`);let n=F(e.passkeyPrfFirstB64u);try{await Ga(this.walletCustodyCeremonyTransportV1(),{existingEnvelope:e.existingEnvelope,existingFactorSecret:n,walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,walletSessionId:e.walletSessionId,expiresAtMs:e.expiresAtMs})}finally{n.fill(0)}}catch(e){console.warn(`[BrowserSigningSurface] unlocked Ed25519 export-root capability was not established:`,e instanceof Error?e.message:String(e||`unknown error`))}}async persistUpgradedWalletCustodyEnvelopeV1(e){try{let t=String(this.seamsWebConfigs.network.relayer?.url||``).trim();if(!t)return;let n=_(e.walletId);if(!n.ok)return;let r=(await jv(n.value,t,new q))?.operationCredential.token;if(!r)return;let i=await mD({relayUrl:t,walletId:e.walletId,walletSessionToken:String(r),envelope:e.envelope});if(i.kind===`upgraded`||i.kind===`already_owned`)return;console.warn(`[BrowserSigningSurface] the upgraded custody envelope was not stored:`,i.message)}catch(e){console.warn(`[BrowserSigningSurface] the upgraded custody envelope was not stored:`,e instanceof Error?e.message:String(e||`unknown error`))}}async destroyUnlockedWalletEd25519ExportRootCapabilitiesV1(e){await qa(this.walletCustodyCeremonyTransportV1(),e)}async runWarmCriticalResources(e){try{await this.ensureSealedRefreshStartupParity()}catch(e){if(!vd(e))throw e;console.warn(`[BrowserSigningSurface] warmCriticalResources skipped retryable sealed-refresh capability fetch failure`,e instanceof Error?e.message:String(e||`unknown error`))}return await this.enginePorts.getManagerConveniencePorts().warmCriticalResources(e)}async warmCriticalResources(e){if(If()&&e===void 0){let e=this.hostWarmCriticalResourcesTask;if(e)return await e;let t=this.runWarmCriticalResources();return this.hostWarmCriticalResourcesTask=t,t.catch(()=>{this.hostWarmCriticalResourcesTask===t&&(this.hostWarmCriticalResourcesTask=null)}),await t}return await this.runWarmCriticalResources(e)}prewarmNearSigner(){this.signerWorkerManager.prewarmNearSigner()}prewarmEmailOtpYao(e){return this.signerWorkerManager.prewarmEmailOtpYao(e)}prewarmEcdsaRegistrationCrypto(){return this.signerWorkerManager.prewarmEcdsaRegistrationCrypto()}getRpId(){return this.touchIdPrompt.getRpId()}getSignerWorkerContext(){return this.enginePorts.walletSessionActivationDeps.getSignerWorkerContext()}getNonceCoordinator(){return this.nonceCoordinator}setAppearance(e){this.appearance=e}setWalletIframeSurfaceMeasurementBinding(e){this.touchConfirm.getContext().surfaceMeasurementBinding=e}getWalletIframeSurfaceMeasurementBinding(){return this.touchConfirm.getContext().surfaceMeasurementBinding}getUserPreferences(){return this.userPreferencesManager}async signNear(e){let t=e.args.commandSubject.walletSession.walletId;try{return await of(this.enginePorts.nearSigningDeps,e)}catch(e){throw Cf(e)&&await this.terminateWalletStateAfterSigningFailure(t),e}}async terminateWalletStateAfterSigningFailure(e){let t=this.readWalletAuthenticationState(),n=!1;try{await this.advanceWalletLockGeneration(e)}catch{}try{await this.retireActiveWalletSessionAuthorizationForLock(e)}catch{}try{n=this.clearWalletAuthenticationIfCurrent(t)}catch{}if(n){try{this.nonceCoordinator.clearAll()}catch{}try{this.clearThresholdEcdsaSigningQueue()}catch{}}try{await this.clearVolatileWarmSigningMaterial(e)}catch{}}async ensureNearEd25519YaoCapabilityForSigning(e){let t=pP(e),n=this.nearEd25519CapabilityRehydrationBySubject.get(t);if(n){let e=await n,t=await this.resolveActiveNearEd25519YaoSigningLane(e.subject);if(t)return t;throw Error(`[SigningEngine][near] joined rehydration did not publish an active lane`)}let r=this.rehydrateNearEd25519YaoCapabilityForSigning(e);this.nearEd25519CapabilityRehydrationBySubject.set(t,r);try{return(await r).material}finally{this.nearEd25519CapabilityRehydrationBySubject.get(t)===r&&this.nearEd25519CapabilityRehydrationBySubject.delete(t)}}async rehydrateExactPasskeyEd25519YaoCapabilityForSigning(e){let t=IR(e);return await this.ensureNearEd25519YaoCapabilityForSigning(e.laneIdentity===void 0?{kind:`material_identity`,materialIdentity:t}:{kind:`exact_lane`,laneIdentity:e.laneIdentity})}async prepareMaterialIdentityNearEd25519YaoSigning(e){let t=e.materialIdentity;if(t.auth.kind===`voiceid`)return await this.prepareVoiceIdNearSigning(e);let n=this.enginePorts.ed25519YaoActiveClients.resolveForWalletAccount({walletId:t.signer.account.wallet.walletId,nearAccountId:t.signer.account.nearAccountId}),r=await hR({store:this.ed25519YaoPublicCapabilityReferences,identity:t}),i=t.auth.kind===R.passkey?await this.readNearEd25519SigningCandidate(e.walletId):null,a=i?tl(i):null;if(t.auth.kind===R.passkey&&r){let e=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.signer.account.wallet.walletId,nearAccountId:t.signer.account.nearAccountId,materialActivation:r}),n=FR(e);if(e&&n.kind===`live`){if(a?.kind===`authorized`){let e=a.authorization;if(e.selectedAuthMethod.kind!==R.passkey)throw Error(`[SigningEngine][near] active Wallet Session method is unavailable`);return await cl({hydration:zc({authority:await H({authority:e.selectedFactorAuthority}),runtime:n.runtime,materialActivation:r}),requirement:t.auth,authorization:e})}if(a?.kind!==`operation_step_up`)throw a?.kind===`full_login_required`?bf(a.reason):Error(`[SigningEngine][near] Wallet Session status is temporarily unavailable`)}}if(a?.kind===`full_login_required`)throw bf(a.reason);if(a?.kind===`temporarily_unavailable`)throw Error(`[SigningEngine][near] Wallet Session persistence is temporarily unavailable`);if(t.auth.kind===R.passkey&&a?.kind===`operation_step_up`)return ol({hydration:(await jR({walletId:e.walletId,identity:t,relayerUrl:this.seamsWebConfigs.network.relayer.url})).prepared.plan,requirement:t.auth});let o=t.auth.kind===R.passkey?await DR({walletId:e.walletId,identity:t}):null,s=o?.sealedRecord.ed25519Restore.materialActivation??(n?Hc(n.activeClient.metadata()):r);if(!s)throw xf(`missing_capability`);let c=FR(this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.signer.account.wallet.walletId,nearAccountId:t.signer.account.nearAccountId,materialActivation:s})),l;switch(t.auth.kind){case R.passkey:{if(!o)throw xf(`missing_runtime`);if(a?.kind!==`authorized`)throw Error(`[SigningEngine][near] exact Passkey authorization is unavailable`);let n={kind:`found`,authorization:a.authorization},r=await ys({runtime:o,authorization:a.authorization,nowMs:Date.now()}),i=await this.ensurePasskeyEd25519WarmSessionForSigning({runtime:o,walletSessionState:r,materialActivation:s}),u;try{u=await Dv({walletId:e.walletId,runtime:o,authorizationRead:n})}catch{throw xf(`binding_mismatch`)}let d=MR(o),f=await as({store:G,walletId:String(t.signer.account.wallet.walletId),nearAccountId:String(t.signer.account.nearAccountId),nearEd25519SigningKeyId:String(t.signer.nearEd25519SigningKeyId),signerSlot:t.signer.signerSlot,rpId:t.auth.rpId,credentialIdB64u:t.auth.credentialIdB64u,authority:u}),p={kind:`available`,walletId:String(t.signer.account.wallet.walletId),nearAccountId:String(t.signer.account.nearAccountId),signerSlot:t.signer.signerSlot,materialActivation:s,authority:u};l=Vc({publicLocator:p,sealed:f.kind===`available`?{kind:`available`,authority:f.locator.authority,materialActivation:f.locator.materialActivation,sealedMaterial:f.locator.sealedMaterial}:{kind:`missing`},runtime:c,unlockSource:i.ok?{kind:`available`,authority:u}:{kind:`unavailable`}}),l.kind===`blocked`&&l.reason===`missing_material`&&(l=(await NR({store:G,identity:d,authority:u,publicLocator:p})).plan);break}case R.emailOtp:l=await this.resolveWalletCustodyEmailOtpHydration({walletId:e.walletId,nearAccountId:e.nearAccountId,identity:oR(t),signerSlot:t.signer.signerSlot,materialActivation:s});break;default:throw t.auth,Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}if(l.kind===`blocked`)throw l.reason===`persistence_unavailable`?Error(`[SigningEngine][near] signing material persistence is unavailable`):Sf(l.reason);return ol({hydration:l,requirement:t.auth})}async resolveWalletCustodyEmailOtpHydration(e){let t=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.walletId,nearAccountId:e.nearAccountId,materialActivation:e.materialActivation}),n=await this.readNearEd25519SigningCandidate(e.walletId),r;if(n.kind===`found`){if(n.authorization.selectedAuthMethod.kind!==R.emailOtp)return Ic({capability:e.materialActivation.capability,reason:`missing_material`});if(r=await H({authority:n.authorization.selectedFactorAuthority}),t)return zc({authority:r,runtime:Rc(e.materialActivation),materialActivation:e.materialActivation})}else if(n.kind===`exhausted`){let n=await sR({walletId:e.walletId,nearAccountId:e.nearAccountId,identity:e.identity,signerSlot:e.signerSlot,materialActivation:e.materialActivation,authorizationRead:{kind:`exhausted`}});if(!n)return Ic({capability:e.materialActivation.capability,reason:`missing_material`});if(r=n,t)try{JR({material:t,input:{walletId:e.walletId,nearAccountId:e.nearAccountId,materialIdentity:e.identity},expectedActivation:e.materialActivation})}catch{return Ic({capability:e.materialActivation.capability,reason:`binding_mismatch`})}}else return Ic({capability:e.materialActivation.capability,reason:`missing_material`});if(t)return zc({authority:r,runtime:Rc(e.materialActivation),materialActivation:e.materialActivation});let i=await this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:String(e.nearAccountId),signerSlot:e.signerSlot});return i.kind===`found`&&i.material.binding.walletId===String(e.walletId)&&i.material.binding.nearAccountId===String(e.nearAccountId)&&i.material.binding.signerSlot===e.signerSlot&&String(e.materialActivation.materialOwner)===String(e.walletId)&&(n.kind===`found`||i.material.binding.nearEd25519SigningKeyId===String(e.identity.signer.nearEd25519SigningKeyId)&&i.material.binding.signingWorkerId===String(e.materialActivation.signingWorker))?Nc({authority:r,materialActivation:e.materialActivation,sealedMaterial:W_(JSON.stringify([i.material.binding.walletId,i.material.binding.nearAccountId,i.material.binding.signerSlot,e.materialActivation.activationId]))}):Ic({capability:e.materialActivation.capability,reason:`missing_material`})}async rehydrateActiveEmailOtpEd25519YaoSessionMaterial(e){let t=VR(e.input);if(t.auth.kind!==R.emailOtp)throw Error(`[SigningEngine][near] Email OTP session restore requires Email OTP material`);let n=await bR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:t.laneIdentity,materialActivation:e.materialActivation}),r=await this.getUserBySignerSlot(t.nearAccountId,t.laneIdentity.signer.signerSlot);if(!r||String(r.walletId)!==String(t.walletId)||String(r.nearAccountId)!==String(t.nearAccountId)||r.signerSlot!==t.laneIdentity.signer.signerSlot||r.authMethod!==R.emailOtp)throw Error(`[SigningEngine][near] Email OTP signer record is unavailable`);let i=await this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:String(t.nearAccountId),signerSlot:r.signerSlot}),a=e.authorization.operationCredential;if(i.kind!==`found`)throw Error(`[SigningEngine][near] Email OTP session material is unavailable`);let o=await ZL(e.authorization,e.remainingUses),s=await this.signerWorkerManager.requestWorkerOperation({kind:`emailOtp`,request:{type:`rehydrateActiveEmailOtpEd25519YaoSessionMaterial`,payload:{relayUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim(),walletId:String(t.walletId),walletAuthMethodId:String(e.authorization.selectedAuthMethod.walletAuthMethodId),orgId:n.runtimePolicyScope.orgId,providerSubjectId:t.auth.providerSubjectId,nearAccountId:String(t.nearAccountId),signerSlot:r.signerSlot,remainingUses:e.remainingUses,expectedOperationalPublicKey:r.operationalPublicKey,expectedThresholdSessionId:n.thresholdSessionId,operationCredential:a,ecdsa:o,walletCustodyEd25519Material:i}}});switch(s.ecdsa.kind){case`activated`:if(o.kind!==`required`)throw Error(`NEAR-only restore returned ECDSA activation`);await $L({walletId:t.walletId,authorization:s.walletSessionAuthorization,response:s.ecdsa.session});break;case`absent`:if(o.kind!==`absent`)throw Error(`Combined restore omitted ECDSA activation`);break;default:throw s.ecdsa,Error(`Unsupported Email OTP restore result`)}return await this.activateEmailOtpEd25519CustodyCapabilityInternal({commitQueue:`acquire`,walletSession:{walletId:t.walletId,walletSessionUserId:String(t.walletId)},providerSubject:t.auth.providerSubjectId,emailHashHex:await j(r.loginDisplayName.trim().toLowerCase()),signerSlot:r.signerSlot,expectedOperationalPublicKey:r.operationalPublicKey,expectedThresholdSessionId:String(n.thresholdSessionId),bootstrap:s.bootstrap,activeClientHandle:s.activeClientHandle,metadata:s.metadata,exactAuthorization:s.walletSessionAuthorization}),s.ecdsa.kind===`absent`&&await K.writeExactWithOperationCredential({record:s.walletSessionAuthorization.record,operationCredential:s.walletSessionAuthorization.operationCredential}),zc({authority:await H({authority:e.authorization.selectedFactorAuthority}),runtime:Rc(e.materialActivation),materialActivation:e.materialActivation})}async prepareExactNearEd25519YaoSigning(e){if(e.auth?.kind===`voiceid`||e.materialIdentity?.auth.kind===`voiceid`)return await this.prepareVoiceIdNearSigning(e);if(e.laneIdentity!==void 0&&e.auth?.kind===R.emailOtp){let t=await this.prepareMaterialIdentityNearEd25519YaoSigning(HR(e)),n=await this.readNearEd25519SigningCandidate(e.walletId);if(n.kind!==`found`||n.authorization.selectedAuthMethod.kind!==R.emailOtp)return t;let r=n.authorization;switch(t.hydration.kind){case`use_live_runtime`:break;case`rehydrate_material_activation`:t=ol({hydration:await this.rehydrateActiveEmailOtpEd25519YaoSessionMaterial({input:e,materialActivation:t.hydration.materialActivation,authorization:r,remainingUses:r.status.remainingUses}),requirement:e.auth});break;case`reauthorize_public_anchor`:case`blocked`:return t;default:throw t.hydration,Error(`[SigningEngine][near] unsupported Email OTP hydration state`)}let i=await this.readNearEd25519SigningCandidate(e.walletId);return i.kind!==`found`||i.authorization.selectedAuthMethod.kind!==R.emailOtp?t:await cl({hydration:t.hydration,requirement:e.auth,authorization:i.authorization})}if(e.laneIdentity===void 0)return await this.prepareMaterialIdentityNearEd25519YaoSigning(e);let t=await this.readNearEd25519SigningCandidate(e.walletId);switch(t.kind){case`found`:{let n=t.authorization;if(n.selectedAuthMethod.kind!==e.auth.kind)return await this.prepareMaterialIdentityNearEd25519YaoSigning(HR(e));let r=await zs({walletId:e.walletId,laneIdentity:e.laneIdentity});if(r.kind===`missing`&&e.auth.kind===R.passkey){let t=await xR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:e.laneIdentity}),r=t.materialActivation,i=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.walletId,nearAccountId:e.nearAccountId,materialActivation:r});if(!i)throw Error(`[SigningEngine][near] active Passkey Ed25519 material is unavailable`);let a=JR({material:i,input:e,expectedActivation:r}),o=await wR({reference:t,material:a,authorization:n,materialActivation:r,relayerUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim()}),s=FR(a);if(s.kind!==`live`)throw Error(`[SigningEngine][near] active Passkey Ed25519 material is unavailable`);return await cl({hydration:zc({authority:o.authority,runtime:s.runtime,materialActivation:r}),requirement:e.auth,authorization:n})}if(r.kind!==`resolved`)throw Error(`[SigningEngine][near] exact persisted Ed25519 runtime is ${r.kind}`);let i=r.runtime,a=i.sealedRecord.ed25519Restore.materialActivation,o=await ys({runtime:i,authorization:n,nowMs:Date.now()}),s=o.signingLane.identity.signer,c={kind:`available`,walletId:String(s.account.wallet.walletId),nearAccountId:String(s.account.nearAccountId),signerSlot:s.signerSlot,materialActivation:a},l=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:s.account.wallet.walletId,nearAccountId:s.account.nearAccountId,materialActivation:a}),u=e.auth.kind===R.passkey?await this.passkeyMpcSession.claimWarmSessionMaterial({thresholdSessionId:i.thresholdSessionId,purpose:{curve:`ed25519`,materialActivation:a},consume:!1}):null,d={kind:`unavailable`};u?.ok===!0&&(d={kind:`available`,passkeyPrfFirstB64u:u.prfFirstB64u});let f=await this.resolveExactNearEd25519YaoSigningHydration({args:e,walletSessionState:o,publicLocator:c,runtime:FR(l),unlockSource:d});if(f.kind===`use_live_runtime`){if(!l)throw Error(`[SigningEngine][near] live Ed25519 material is unavailable`);await YR({input:e,authorization:n,sealedRuntime:i,material:l})}return await cl({hydration:f,requirement:e.auth,authorization:n})}case`missing`:case`expired`:case`exhausted`:case`superseded`:case`authority_unavailable`:case`method_unavailable`:case`capability_unavailable`:case`unavailable`:return await this.prepareMaterialIdentityNearEd25519YaoSigning(HR(e));case`upgrade_required`:throw new Oa(`[SigningEngine][near] Wallet Session authorization requires a newer client`);case`corrupt`:case`persistence_unavailable`:throw Error(`[SigningEngine][near] Wallet Session authorization is ${t.kind}`);default:throw Error(`[SigningEngine][near] unsupported Wallet Session authorization state`)}}async prepareExactNearEd25519YaoMaterialBoundary(e){qR(e);let t=await this.prepareExactNearEd25519YaoSigning(e),n={input:e,materialActivation:t.hydration.materialActivation||null};return{preparation:t,executor:{resolveSigningKeyMaterial:this.resolveExactNearEd25519SigningKeyMaterial.bind(this,n),resolve:this.resolveExactNearEd25519YaoPreparedMaterial.bind(this,n),resolveWalletSessionState:this.resolveExactNearEd25519YaoWalletSessionState.bind(this,n),resolveFundingSession:this.resolveExactNearEd25519FundingSession.bind(this,n),preparePasskeyOperationStepUp:this.prepareExactNearEd25519YaoOperationStepUpAtBoundary.bind(this,n),prepareEmailOtpOperationStepUp:this.prepareExactNearEmailOtpEd25519YaoOperationStepUpAtBoundary.bind(this,n)}}}async resolveExactNearEd25519SigningKeyMaterial(e){let t=IR(e.input),n=t.signer,r=t.auth,i=e.materialActivation;if(!i)throw Error(`[SigningEngine][near] prepared material has no activation`);if(String(n.account.wallet.walletId)!==String(e.input.walletId)||String(n.account.nearAccountId)!==String(e.input.nearAccountId))throw Error(`[SigningEngine][near] selected Ed25519 lane identity changed`);let a=await G.resolveSelectedWalletAuthority(String(e.input.walletId));if(a.kind!==`resolved`){let e=a.kind===`integrity_error`?`: ${a.reason}`:``;throw Error(`[SigningEngine][near] selected Wallet Authority is ${a.kind}${e}`)}let{selection:o,authMethod:s,authority:c,signerMaterials:l}=a,u;switch(r.kind){case`voiceid`:u=s.kind===`voiceid`&&s.walletAuthMethodId===r.walletAuthMethodId&&s.deviceKeyId===r.deviceKeyId;break;case R.passkey:u=s.kind===R.passkey&&String(s.rpId)===String(r.rpId)&&s.credentialIdB64u===r.credentialIdB64u;break;case R.emailOtp:u=s.kind===R.emailOtp;break;default:throw Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}if(o.lockState!==`unlocked`||c.state!==`active`||s.status!==`active`||String(o.walletId)!==String(e.input.walletId)||o.walletAuthMethodId!==s.walletAuthMethodId||s.walletAuthorityId!==c.authorityId||String(s.walletId)!==String(e.input.walletId)||!u)throw Error(`[SigningEngine][near] selected Wallet Authority does not match the lane`);let d=await mh({selected:{authMethod:s,authority:c},operation:{kind:`near_sign`,operation:`sign`,keyFamily:`ed25519`}});if(d.kind!==`resolved`)throw Error(`[SigningEngine][near] selected Wallet Authority rejected signing (${d.reason.kind})`);let f=d.value;if(f.keyFamily!==`ed25519`||String(f.walletId)!==String(e.input.walletId)||f.authMethodId!==s.walletAuthMethodId||!g(f.materialActivation,i))throw Error(`[SigningEngine][near] selected Wallet Authority activation changed`);if(c.signerActivations.keyFamilies[0]!==`ed25519`||c.signerActivations.ed25519===void 0||!g(c.signerActivations.ed25519.materialActivation,i)||c.signerActivations.ed25519.signer.registeredPublicKeyB64u!==f.registeredPublicKeyB64u)throw Error(`[SigningEngine][near] selected Ed25519 authority activation changed`);let p=F(f.registeredPublicKeyB64u);if(p.byteLength!==32)throw Error(`[SigningEngine][near] selected Ed25519 public key is invalid`);let m=i.signingWorker,h=[1,2],_=null;if(c.provenance.kind===`device_link`){await SR({store:this.ed25519YaoPublicCapabilityReferences,identity:t,materialActivation:i});for(let e of l)if(!(!_R(e)||e.authorityId!==c.authorityId||e.walletAuthMethodId!==s.walletAuthMethodId||!g(e.materialActivation,i))){if(_)throw Error(`[SigningEngine][near] linked Ed25519 signer material is ambiguous`);_=e}if(!_)throw Error(`[SigningEngine][near] linked Ed25519 signer material is unavailable`);let a=_.publicFacts.applicationBinding,o=_.publicFacts.targetBinding,u=o.lifecycle,d=_.targetFactor,p;switch(r.kind){case`voiceid`:throw Error(`VoiceID unlock requires owner custody on this device.`);case R.passkey:p=d.kind===R.passkey&&d.walletAuthMethodId===s.walletAuthMethodId&&String(d.rpId)===String(r.rpId)&&d.credentialIdB64u===r.credentialIdB64u;break;case R.emailOtp:p=d.kind===R.emailOtp&&s.kind===R.emailOtp&&d.walletAuthMethodId===s.walletAuthMethodId&&d.emailHashHex===s.emailHashHex;break;default:throw Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}if(a.wallet_id!==String(e.input.walletId)||a.near_ed25519_signing_key_id!==String(n.nearEd25519SigningKeyId)||a.key_creation_signer_slot!==n.signerSlot||u.account_id!==String(e.input.walletId)||u.session_id!==String(t.thresholdSessionId)||u.selected_server_id!==String(m)||!g(Wr(o.material_activation),i)||!g(Wr(_.publicFacts.activationReceipt.material_activation),i)||P(Uint8Array.from(_.publicFacts.activationReceipt.registered_public_key))!==f.registeredPublicKeyB64u||!p)throw Error(`[SigningEngine][near] linked Ed25519 signer identity changed`);h=_.publicFacts.participantIds}let v=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.input.walletId,nearAccountId:e.input.nearAccountId,materialActivation:i});if(v){let r=JR({material:v,input:e.input,expectedActivation:i}),a=r.activeClient.metadata(),o=r.facts;if(P(a.registeredPublicKey)!==f.registeredPublicKeyB64u||a.participantIds[0]!==h[0]||a.participantIds[1]!==h[1]||a.applicationBinding.wallet_id!==String(e.input.walletId)||a.applicationBinding.near_ed25519_signing_key_id!==String(n.nearEd25519SigningKeyId)||a.applicationBinding.key_creation_signer_slot!==n.signerSlot||a.scope.account_id!==String(e.input.walletId)||a.scope.threshold_session_id!==String(t.thresholdSessionId)||a.scope.signing_worker_id!==String(m)||o.routerAbNormalSigning.signingWorkerId!==String(m)||o.signingRootId!==a.applicationBinding.signing_root_id||o.signingRootVersion!==a.scope.root_share_epoch)throw Error(`[SigningEngine][near] active Ed25519 public material changed`);if(_){let e=_.publicFacts.applicationBinding,t=_.publicFacts.targetBinding.lifecycle;if(a.applicationBinding.wallet_id!==e.wallet_id||a.applicationBinding.near_ed25519_signing_key_id!==e.near_ed25519_signing_key_id||a.applicationBinding.signing_root_id!==e.signing_root_id||a.applicationBinding.key_creation_signer_slot!==e.key_creation_signer_slot||a.scope.lifecycle_id!==t.lifecycle_id||a.scope.root_share_epoch!==t.root_share_epoch||a.scope.account_id!==t.account_id||a.scope.threshold_session_id!==t.session_id||a.scope.signing_worker_id!==t.selected_server_id)throw Error(`[SigningEngine][near] linked Ed25519 runtime identity changed`)}}let y=`ed25519:${dn(p)}`;return{nearAccountId:e.input.nearAccountId,signerSlot:n.signerSlot,kind:`threshold_ed25519_v1`,publicKey:y,relayerKeyId:m,keyVersion:Zi,participants:ce({clientParticipantId:h[0],relayerParticipantId:h[1],relayerKeyId:m,clientShareDerivation:`prf_first_v1`}),timestamp:c.activatedAtMs}}async resolveExactNearEd25519YaoPreparedMaterial(e,t){let n=ZR({context:e,preparation:t});switch(t.hydration.kind){case`use_live_runtime`:{let t=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.input.walletId,nearAccountId:e.input.nearAccountId,materialActivation:n});if(!t)throw Error(`[SigningEngine][near] active Ed25519 Yao capability is unavailable`);return JR({material:t,input:e.input,expectedActivation:n})}case`rehydrate_material_activation`:{let t=VR(e.input);switch(t.auth.kind){case`voiceid`:throw Error(`Unlock with VoiceID again to restore signing material.`);case R.passkey:{let e=await this.rehydrateExactPasskeyEd25519YaoCapabilityForSigning(t);try{let r=await this.readNearEd25519SigningCandidate(t.walletId);if(r.kind!==`found`||r.authorization.selectedAuthMethod.kind!==R.passkey)throw Error(`[SigningEngine][near] Wallet Session authorization is ${r.kind}`);let i=await TR({walletId:t.walletId,laneIdentity:t.laneIdentity});return await YR({input:t,authorization:r.authorization,sealedRuntime:i,material:e}),JR({material:e,input:t,expectedActivation:n})}catch(t){throw e.activeClient.dispose(),t}}case R.emailOtp:throw Error(`[SigningEngine][near] Email OTP custody cache is unavailable; link the device before signing`);default:throw t.auth,Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}}case`reauthorize_public_anchor`:throw Error(`[SigningEngine][near] retired material requires reauthorization`);case`blocked`:throw Error(`[SigningEngine][near] prepared material is blocked: ${t.hydration.reason}`);default:throw t.hydration,Error(`[SigningEngine][near] unsupported prepared material hydration`)}}async resolveExactNearEd25519YaoWalletSessionState(e){let t=VR(e.input);if(t.auth.kind===`voiceid`){let e=this.voiceIdNearSessions.get(t.walletId);if(!e||e.walletSessionId!==t.laneIdentity.walletSessionId)throw Error(`Unlock with VoiceID again before signing.`);return e}if(t.auth.kind===R.emailOtp){if(!e.materialActivation)throw Error(`[SigningEngine][near] prepared material has no activation`);let n=await bR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:t.laneIdentity,materialActivation:e.materialActivation}),r=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.walletId,nearAccountId:t.nearAccountId,materialActivation:e.materialActivation});if(!r)throw Error(`[SigningEngine][near] active Email OTP Ed25519 material is unavailable`);let i=await this.readNearEd25519SigningCandidate(t.walletId);if(i.kind!==`found`||i.authorization.selectedAuthMethod.kind!==R.emailOtp)throw Error(`[SigningEngine][near] Wallet Session authorization is ${i.kind}`);return await UR({reference:n,material:JR({material:r,input:t,expectedActivation:e.materialActivation}),authorization:i.authorization,materialActivation:e.materialActivation,relayerUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim()})}let n=await zs({walletId:t.walletId,laneIdentity:t.laneIdentity});if(n.kind===`missing`&&t.auth.kind===R.passkey){if(!e.materialActivation)throw Error(`[SigningEngine][near] prepared material has no activation`);let n=await xR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:t.laneIdentity});if(!g(n.materialActivation,e.materialActivation))throw Error(`[SigningEngine][near] Passkey public lane activation changed`);let r=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.walletId,nearAccountId:t.nearAccountId,materialActivation:e.materialActivation});if(!r)throw Error(`[SigningEngine][near] active Passkey Ed25519 material is unavailable`);let i=JR({material:r,input:t,expectedActivation:e.materialActivation}),a=await this.readNearEd25519SigningCandidate(t.walletId);if(a.kind!==`found`||a.authorization.selectedAuthMethod.kind!==R.passkey)throw Error(`[SigningEngine][near] Wallet Session authorization is ${a.kind}`);return await wR({reference:n,material:i,authorization:a.authorization,materialActivation:e.materialActivation,relayerUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim()})}if(n.kind!==`resolved`)throw Error(`[SigningEngine][near] exact persisted Ed25519 runtime is ${n.kind}`);let r=n.runtime,i=await this.readNearEd25519SigningCandidate(t.walletId);if(i.kind!==`found`)throw Error(`[SigningEngine][near] Wallet Session authorization is ${i.kind}`);return await ys({runtime:r,authorization:i.authorization,nowMs:Date.now()})}async resolveExactNearEd25519FundingSession(e){let t=IR(e.input),n=await this.readExactNearEd25519WalletSessionAuthorization(t.signer.account.wallet.walletId);if(n.kind!==`found`||n.authorization.selectedAuthMethod.kind!==t.auth.kind)throw Error(`[SigningEngine][near] authenticated funding session is unavailable`);if(!e.materialActivation)throw Error(`[SigningEngine][near] funding session material activation is unavailable`);if(!Xc({session:n.authorization.session,materialActivation:e.materialActivation}))throw Error(`[SigningEngine][near] authenticated funding session material changed`);let r=n.authorization.operationCredential.token;if(n.authorization.session.walletId!==t.signer.account.wallet.walletId||n.authorization.selectedAuthMethod.kind!==t.auth.kind||!n.authorization.operationCredential.walletSessionId||!n.authorization.session.quotaId)throw Error(`[SigningEngine][near] funding session identity does not match`);return{kind:`near_ed25519_funding_session`,signer:t.signer,thresholdSessionId:t.thresholdSessionId,walletSessionToken:r}}async prepareExactNearEd25519YaoOperationStepUpAtBoundary(e,t){if(RR(e.input).kind!==R.passkey)throw Error(`[SigningEngine][near] Email OTP material cannot use Passkey rehydration`);let n=ZR({context:e,preparation:t}),r=await this.prepareExactPasskeyEd25519YaoOperationStepUpForSigning(e.input);if(!g(n,r.materialActivation))throw Error(`[SigningEngine][near] operation step-up changed material activation`);return r}async prepareExactNearEmailOtpEd25519YaoOperationStepUpAtBoundary(e,t){let n=IR(e.input);if(n.auth.kind!==R.emailOtp)throw Error(`[SigningEngine][near] Passkey material cannot use Email OTP rehydration`);let r=ZR({context:e,preparation:t});switch(t.hydration.kind){case`use_live_runtime`:return{kind:`live`,materialActivation:r,material:await this.resolveExactNearEd25519YaoPreparedMaterial(e,t)};case`rehydrate_material_activation`:{let t=await bR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:n,materialActivation:r}),i=await this.getUserBySignerSlot(e.input.nearAccountId,n.signer.signerSlot);if(!i||String(i.walletId)!==String(e.input.walletId)||String(i.nearAccountId)!==String(e.input.nearAccountId)||i.signerSlot!==n.signer.signerSlot||i.authMethod!==R.emailOtp)throw Error(`[SigningEngine][near] Email OTP signer record is unavailable`);let a=await this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:String(e.input.nearAccountId),signerSlot:i.signerSlot});if(a.kind!==`found`)throw Error(`[SigningEngine][near] Email OTP custody material is unavailable`);if(`ed25519:${dn(F(a.material.binding.registeredPublicKeyB64u))}`!==i.operationalPublicKey||a.material.binding.walletId!==String(e.input.walletId)||a.material.binding.nearAccountId!==String(e.input.nearAccountId)||a.material.binding.signerSlot!==i.signerSlot||a.material.binding.signingWorkerId!==String(r.signingWorker))throw Error(`[SigningEngine][near] Email OTP custody material binding changed`);let o=this.seamsWebConfigs.network.relayer?.url||``;if(!o)throw Error(`[SigningEngine][near] Email OTP recovery requires a relay URL`);let s={input:e.input,materialActivation:r,facts:KR({input:e.input,publicLane:t,relayerUrl:o}),publicLane:t,sealedMaterial:a.material,operationalPublicKey:i.operationalPublicKey,emailHashHex:await j(i.loginDisplayName.trim().toLowerCase())};return{kind:`sealed`,materialActivation:r,facts:s.facts,authorizeAndRehydrate:this.authorizeAndRehydrateEmailOtpEd25519OperationMaterial.bind(this,s)}}case`reauthorize_public_anchor`:throw Error(`[SigningEngine][near] retired Email OTP material cannot sign`);case`blocked`:throw Error(`[SigningEngine][near] Email OTP operation material is blocked: ${t.hydration.reason}`);default:throw t.hydration,Error(`[SigningEngine][near] unsupported Email OTP operation material`)}}async authorizeAndRehydrateEmailOtpEd25519OperationMaterial(e,t){let n=IR(e.input);if(n.auth.kind!==R.emailOtp||t.proof.providerSubjectId!==n.auth.providerSubjectId)throw Error(`[SigningEngine][near] Email OTP operation authority changed`);let r=await kR({walletId:e.input.walletId,proof:t.proof}),i={kind:`exact_ed25519_export_material`,signer:n.signer,auth:n.auth,thresholdSessionId:n.thresholdSessionId},a=await xP({subject:i,expectedMaterialActivation:e.materialActivation,authorization:await this.readExactEmailOtpEd25519ExportAuthorization({subject:i,expectedMaterialActivation:e.materialActivation}),source:{signingWorkerId:e.sealedMaterial.binding.signingWorkerId,participantIds:e.sealedMaterial.binding.participantIds,registeredPublicKeyB64u:e.sealedMaterial.binding.registeredPublicKeyB64u},relayerUrl:e.facts.relayerUrl,fetch:globalThis.fetch.bind(globalThis)}),o=await NP({workerCtx:this.signerWorkerManager.getContext(),payload:{relayUrl:e.facts.relayerUrl,walletId:String(e.input.walletId),orgId:e.publicLane.runtimePolicyScope.orgId,providerSubjectId:n.auth.providerSubjectId,nearAccountId:String(e.input.nearAccountId),signerSlot:e.publicLane.signerSlot,expectedOperationalPublicKey:e.operationalPublicKey,expectedThresholdSessionId:e.publicLane.thresholdSessionId,expectedMaterialActivation:e.materialActivation,ed25519YaoRecovery:{kind:Fr,signerSlot:e.publicLane.signerSlot,remainingUses:xe,orgId:e.publicLane.runtimePolicyScope.orgId},walletCustodyEd25519Material:{kind:`found`,material:e.sealedMaterial},bootstrap:a,normalSigningRequest:t.normalSigningRequest,displayDigest:t.displayDigest,proof:t.proof,operationCredential:r}});if(o.walletCustodyEd25519Material)try{await this.persistWalletCustodyEd25519Material(o.walletCustodyEd25519Material)}catch(e){throw await wy({workerContext:this.signerWorkerManager.getContext(),activeClientHandle:o.activeClientHandle}).catch(()=>void 0),e}let s=new Ty(this.signerWorkerManager.getContext(),o.activeClientHandle,o.metadata),c;try{c=JR({material:{activeClient:s,facts:e.facts},input:e.input,expectedActivation:e.materialActivation})}catch(e){throw s.dispose(),e}return{material:c,issuedAuthorization:{kind:o.issuedAuthorization.kind,authorization:o.issuedAuthorization.authorization,expiresAtMs:o.issuedAuthorization.expiresAtMs}}}async resolveExactNearEd25519YaoSigningHydration(e){let t=VR(e.args);switch(t.auth.kind){case`voiceid`:throw Error(`Unlock with VoiceID again before signing.`);case R.passkey:{let n=await this.resolvePasskeyEd25519YaoHydration({walletSessionState:e.walletSessionState,credentialIdB64u:t.auth.credentialIdB64u,publicLocator:e.publicLocator,unlockSource:e.unlockSource}),r;switch(n.kind){case`live`:case`blocked`:r=n.plan;break;case`rehydrated`:n.activeClient.dispose(),r=n.plan;break;default:throw Error(`[SigningEngine][near] unsupported Passkey hydration result`)}return r.kind===`blocked`&&r.reason===`missing_material`?(await ns({store:G,identity:es(e.walletSessionState,t.auth.rpId,t.auth.credentialIdB64u),authority:e.walletSessionState.authority,publicLocator:e.publicLocator})).plan:r}case R.emailOtp:if(e.publicLocator.kind!==`available`)throw Error(`[SigningEngine][near] Email OTP custody locator is unavailable`);return await this.resolveWalletCustodyEmailOtpHydration({walletId:t.walletId,nearAccountId:t.nearAccountId,identity:oR(IR(t)),signerSlot:t.laneIdentity.signer.signerSlot,materialActivation:e.publicLocator.materialActivation});default:throw t.auth,Error(`[SigningEngine][near] unsupported Ed25519 material authority`)}}async prepareExactPasskeyEd25519YaoOperationStepUpForSigning(e){let t=IR(e);if(t.auth.kind!==R.passkey)throw Error(`[SigningEngine][near] Passkey operation step-up requires Passkey material`);if(!await this.resolveNearEd25519YaoSigningLane({...e.laneIdentity===void 0?{kind:`material_identity`,materialIdentity:t}:{kind:`exact_lane`,laneIdentity:e.laneIdentity}}))throw Error(`[SigningEngine][near] sealed Ed25519 operation lane is unavailable`);let n=await jR({walletId:e.walletId,identity:t,relayerUrl:this.seamsWebConfigs.network.relayer.url});return{materialActivation:n.prepared.plan.materialActivation,facts:n.facts,participantIds:[...n.participantIds],rehydrate:this.rehydratePreparedPasskeyEd25519YaoOperationStepUp.bind(this,{input:e,identity:n.localIdentity,facts:n.facts,authority:n.authority,rpId:t.auth.rpId,credentialIdB64u:t.auth.credentialIdB64u,publicLocator:n.publicLocator,materialActivation:n.prepared.plan.materialActivation})}}async rehydratePreparedPasskeyEd25519YaoOperationStepUp(e,t){if(String(t.rawId||t.id||``).trim()!==e.credentialIdB64u)throw xf(`binding_mismatch`);let n=nf({credential:t,rpId:e.rpId}),r=await PR({store:G,identity:e.identity,authority:e.authority,publicLocator:e.publicLocator,unlockSource:{kind:`available`,passkeyPrfFirstB64u:n.secretSource.prfFirstB64u},liveMaterial:null});if(r.kind===`blocked`)throw Sf(r.plan.reason);if(r.kind!==`rehydrated`)throw xf(`corrupt`);if(!g(e.materialActivation,r.plan.materialActivation))throw r.activeClient.dispose(),xf(`binding_mismatch`);let i={activeClient:r.activeClient,facts:e.facts};try{return JR({material:i,input:e.input,expectedActivation:e.materialActivation})}catch{throw i.activeClient.dispose(),xf(`binding_mismatch`)}}async resolveExactPasskeyEd25519YaoExportContext(e){let t=String(this.seamsWebConfigs.network.relayer?.url||``).trim();if(!t)throw Error(`[SigningEngine][ed25519-export] passkey export requires relayerUrl`);let n=B(String(e.laneIdentity.signer.account.wallet.walletId));if(!await so(Pd({authMethod:e.laneIdentity.auth.kind,materialActivation:e.materialActivation})))return await this.resolveLinkedPasskeyEd25519YaoExportContext({...e,walletId:n,relayerUrl:t});let r=await ER({walletId:n,laneIdentity:e.laneIdentity,materialActivation:e.materialActivation}),i=e.laneIdentity.thresholdSessionId,a=await jv(r.walletId,t,new q);if(a){let t=await ys({runtime:r,authorization:a,nowMs:Date.now()});(await this.ensurePasskeyEd25519WarmSessionForSigning({runtime:r,walletSessionState:t,materialActivation:e.materialActivation})).ok&&(i=t.thresholdSessionId)}return await Vk({subject:{kind:`owner_sealed_runtime`,walletId:B(String(e.laneIdentity.signer.account.wallet.walletId)),nearAccountId:String(e.laneIdentity.signer.account.nearAccountId),nearEd25519SigningKeyId:String(e.laneIdentity.signer.nearEd25519SigningKeyId),signerSlot:e.laneIdentity.signer.signerSlot,thresholdSessionId:i,materialActivation:e.materialActivation},relayerUrl:t,fetch:dR},{readExactEd25519SealedSession:so,readPasskeyCustodySessionEnvelope:Ms,resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),readExactWalletSessionAuthorization:K.readExactActiveForWallet.bind(K),resolveExactPasskeyWalletAuthAuthorityRef:rR,nowMs:this.runtimePorts.clock.nowMs})}async resolveLinkedPasskeyEd25519YaoExportContext(e){if(e.laneIdentity.auth.kind!==R.passkey)throw Error(`[SigningEngine][ed25519-export] linked export requires a Passkey lane`);let t=await G.resolveSelectedWalletAuthority(String(e.walletId));if(t.kind!==`resolved`){let e=t.kind===`integrity_error`?`: ${t.reason}`:``;throw Error(`[SigningEngine][ed25519-export] selected Wallet Authority is ${t.kind}${e}`)}let{selection:r,authMethod:i,authority:a,signerMaterials:o,exportRoot:s}=t;if(r.lockState!==`unlocked`||i.kind!==R.passkey||i.status!==`active`||a.state!==`active`||a.provenance.kind!==`device_link`||String(i.walletId)!==String(e.walletId)||i.walletAuthorityId!==a.authorityId||i.walletAuthMethodId!==r.walletAuthMethodId||String(i.rpId)!==String(e.laneIdentity.auth.rpId)||i.credentialIdB64u!==e.laneIdentity.auth.credentialIdB64u)throw Error(`[SigningEngine][ed25519-export] selected linked Passkey authority is unavailable`);let c=a.signerActivations.ed25519;if(!a.permissions.includes(`export_keys`)||!c||!g(c.materialActivation,e.materialActivation)||!s)throw Error(`[SigningEngine][ed25519-export] selected authority has no exact Ed25519 export capability`);let l=null;for(let t of o)if(!(!_R(t)||t.authorityId!==a.authorityId||t.walletAuthMethodId!==i.walletAuthMethodId||!g(t.materialActivation,e.materialActivation))){if(l)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 material is ambiguous`);l=t}if(!l)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 material is unavailable`);let u=l.targetFactor;if(u.kind!==R.passkey||u.walletAuthMethodId!==i.walletAuthMethodId||u.rpId!==i.rpId||u.credentialIdB64u!==i.credentialIdB64u)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 factor binding changed`);let d=yy(await K.readExactWithOperationCredential({walletId:e.walletId,authorityId:a.authorityId,authMethodId:i.walletAuthMethodId}),`[SigningEngine][ed25519-export] exact linked Wallet Session requires a newer client`),f=!1;if(d){for(let t of d.record.capabilitySubjects)if(t.kind===`export_keys`&&t.keyFamily===`ed25519`&&g(t.materialActivation,e.materialActivation)){f=!0;break}}if(!d||!f||d.record.authorityDigestB64u!==a.authorityDigestB64u||d.record.authorityRevocationEpoch!==a.revocationEpoch||d.record.expiresAtMs<=Date.now())throw Error(`[SigningEngine][ed25519-export] exact linked Wallet Session is unavailable`);let p=await xR({store:this.ed25519YaoPublicCapabilityReferences,laneIdentity:e.laneIdentity});if(!g(p.materialActivation,e.materialActivation))throw Error(`[SigningEngine][ed25519-export] linked public lane activation changed`);let m=await H({authority:{walletId:i.walletId,factor:{kind:R.passkey,credentialIdB64u:i.credentialIdB64u},verifier:{kind:`webauthn`,rpId:i.rpId},bindingId:i.walletAuthMethodId}});if(m.walletAuthMethodId!==i.walletAuthMethodId)throw Error(`[SigningEngine][ed25519-export] Passkey Wallet Session authority changed`);let h=this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e.walletId,nearAccountId:e.laneIdentity.signer.account.nearAccountId,materialActivation:e.materialActivation});if(!h||h.activeClient.status().kind!==`active`)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 runtime is unavailable`);let _=h.activeClient.metadata(),v=Hc(_),y=h.facts,b=e.laneIdentity.signer,x=l.publicFacts.applicationBinding,S=P(_.registeredPublicKey),C=Number(_.stateEpoch),w=n(_.scope.threshold_session_id),T=y.runtimePolicyScope,E=p.runtimePolicyScope;if(!w.ok||!Number.isSafeInteger(C)||C<1||!g(v,e.materialActivation)||String(y.thresholdSessionId)!==String(e.laneIdentity.thresholdSessionId)||String(y.signer.account.wallet.walletId)!==String(e.walletId)||String(y.signer.account.nearAccountId)!==String(b.account.nearAccountId)||String(y.signer.nearEd25519SigningKeyId)!==String(b.nearEd25519SigningKeyId)||y.signer.signerSlot!==b.signerSlot||x.wallet_id!==String(e.walletId)||x.near_ed25519_signing_key_id!==String(b.nearEd25519SigningKeyId)||x.key_creation_signer_slot!==b.signerSlot||_.applicationBinding.wallet_id!==x.wallet_id||_.applicationBinding.near_ed25519_signing_key_id!==x.near_ed25519_signing_key_id||_.applicationBinding.signing_root_id!==x.signing_root_id||_.applicationBinding.key_creation_signer_slot!==x.key_creation_signer_slot||_.scope.lifecycle_id!==l.publicFacts.targetBinding.lifecycle.lifecycle_id||_.scope.root_share_epoch!==l.publicFacts.targetBinding.lifecycle.root_share_epoch||_.scope.account_id!==String(e.walletId)||_.scope.threshold_session_id!==String(e.laneIdentity.thresholdSessionId)||_.scope.signing_worker_id!==y.routerAbNormalSigning.signingWorkerId||y.signingRootId!==x.signing_root_id||y.signingRootVersion!==_.scope.root_share_epoch||T.orgId!==E.orgId||T.projectId!==E.projectId||T.envId!==E.envId||T.signingRootVersion!==E.signingRootVersion||l.publicFacts.participantIds[0]!==_.participantIds[0]||l.publicFacts.participantIds[1]!==_.participantIds[1]||P(Uint8Array.from(l.publicFacts.activationReceipt.registered_public_key))!==S||c.signer.registeredPublicKeyB64u!==S)throw Error(`[SigningEngine][ed25519-export] linked Ed25519 runtime identity changed`);let D={authority:m,walletId:b.account.wallet.walletId,nearAccountId:b.account.nearAccountId,nearEd25519SigningKeyId:String(b.nearEd25519SigningKeyId),signerSlot:b.signerSlot,operationalPublicKey:`ed25519:${dn(_.registeredPublicKey)}`,relayerKeyId:_.scope.signing_worker_id,credentialIdB64u:i.credentialIdB64u,capability:{materialActivation:v,activeCapabilityBinding:[..._.activeCapabilityBinding],registeredPublicKey:[..._.registeredPublicKey],nearAccountId:b.account.nearAccountId,applicationBinding:_.applicationBinding,participantIds:_.participantIds,runtimePolicyScope:y.runtimePolicyScope,lifecycle:{lifecycleId:_.scope.lifecycle_id,rootShareEpoch:_.scope.root_share_epoch,accountId:_.scope.account_id,thresholdSessionId:w.value,signerSetId:_.scope.signer_set_id,signingWorkerId:_.scope.signing_worker_id},stateEpoch:C}};return{kind:`ready`,context:{kind:`passkey_ed25519_yao_export_context_v1`,selectedLaneMaterialActivation:e.materialActivation,material:D,authorization:d,relayerUrl:e.relayerUrl,rpId:i.rpId,walletCustodyEnvelope:s.envelope}}}readExactEmailOtpEd25519ExportAuthorization(e){return uR({subject:e.subject,relayerUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim()})}async activateRecoveredEmailOtpEd25519ExportCapability(e,t){let n=t.activation;await this.activateEmailOtpEd25519CustodyCapabilityWithExactCredential({commitQueue:`acquire`,walletSession:{walletId:e.signer.account.wallet.walletId,walletSessionUserId:String(e.signer.account.wallet.walletId)},providerSubject:e.auth.providerSubjectId,emailHashHex:n.emailHashHex,signerSlot:e.signer.signerSlot,expectedOperationalPublicKey:`ed25519:${dn(n.metadata.registeredPublicKey)}`,expectedThresholdSessionId:String(e.thresholdSessionId),bootstrap:n.bootstrap,activeClientHandle:n.activeClientHandle,metadata:n.metadata,credentialExpectation:{kind:`expect_exact_operation_credential`,operationCredential:t.operationCredential}})}async resolveEmailOtpEd25519YaoExportContext(e){return await DP({subject:e.laneIdentity,expectedMaterialActivation:e.materialActivation,readExactWalletSessionAuthorization:this.readExactEmailOtpEd25519ExportAuthorization.bind(this),resolveActiveCapability:(e,t,n)=>this.enginePorts.ed25519YaoActiveClients.resolve({walletId:e,nearAccountId:mn(t),materialActivation:n}),resolveEd25519YaoClientRootEnvelope:async({subject:e,capability:t,selectedMaterialActivation:n})=>vR({selected:await G.resolveSelectedWalletAuthority(String(e.signer.account.wallet.walletId)),subject:e,expectedMaterialActivation:n,activeCapability:t}),loadWalletCustodyMaterial:()=>this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:String(e.laneIdentity.signer.account.nearAccountId),signerSlot:e.laneIdentity.signer.signerSlot}),relayerUrl:this.seamsWebConfigs.network.relayer?.url||``,fetch:dR,activateRecoveredCapability:this.activateRecoveredEmailOtpEd25519ExportCapability.bind(this,e.laneIdentity)})}async resolveActiveNearEd25519YaoSigningLane(e){if(!await this.resolveNearEd25519YaoSigningLane(e))return null;let t=dP(e),n=e.kind===`export_exact_lane`?this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.signer.account.wallet.walletId,nearAccountId:t.signer.account.nearAccountId,materialActivation:e.materialActivation}):this.enginePorts.ed25519YaoActiveClients.resolveForWalletAccount({walletId:t.signer.account.wallet.walletId,nearAccountId:t.signer.account.nearAccountId});return n?.activeClient.status().kind===`active`?n:null}async resolveNearEd25519YaoSigningLane(e){let t=dP(e).signer.account.wallet.walletId,n=await this.readPersistedAvailableSigningLanes({walletId:t,ownerScope:await this.resolveSelectedOwnerLaneScope(t)},new q),r=[];for(let t of n.candidates.ed25519.near)fP(t,e)&&(!Rd(t)||t.curve!==`ed25519`||r.push(t));if(r.length>1)throw Error(`[SigningEngine][near] local Ed25519 material lane is ambiguous`);return r[0]||null}async ensurePasskeyEd25519WarmSessionForSigning(e){let t=await mR({...e,claimWarmSessionMaterial:this.passkeyMpcSession.claimWarmSessionMaterial.bind(this.passkeyMpcSession),rehydrateWarmSessionMaterial:this.passkeyMpcSession.rehydrateWarmSessionMaterial.bind(this.passkeyMpcSession)});return t.ok&&e.runtime.factor.kind===`passkey`&&String(e.runtime.thresholdSessionId)!==String(e.walletSessionState.thresholdSessionId)&&await No({persistence:this,session:e.walletSessionState,prfFirstB64u:t.prfFirstB64u,ed25519Restore:So({rpId:e.runtime.factor.rpId,nearAccountId:e.runtime.nearAccountId,nearEd25519SigningKeyId:e.runtime.nearEd25519SigningKeyId,relayerKeyId:e.runtime.relayerKeyId,participantIds:e.runtime.participantIds,runtimePolicyScope:e.runtime.runtimePolicyScope,signerSlot:e.runtime.signerSlot,routerAbNormalSigning:e.runtime.routerAbNormalSigning,credentialIdB64u:e.runtime.factor.credentialIdB64u,materialActivation:e.materialActivation}),materialActivation:e.materialActivation}),t}async rehydrateNearEd25519YaoCapabilityForSigning(e){let t=dP(e),n=await this.resolveNearEd25519YaoSigningLane(e);if(!n)throw Error(`[SigningEngine][near] local Ed25519 material lane is unavailable`);let r;if(e.kind===`export_exact_lane`)r=await ER({walletId:t.signer.account.wallet.walletId,laneIdentity:e.laneIdentity,materialActivation:e.materialActivation});else{let i=e.kind===`exact_lane`?e.laneIdentity:sP(n);r=await TR({walletId:t.signer.account.wallet.walletId,laneIdentity:i})}let i=await AR({runtime:r,relayerUrl:String(this.seamsWebConfigs.network.relayer?.url||``).trim()});if(r.factor.kind!==`passkey`)throw Error(`[SigningEngine][near] persisted Ed25519 credential is unavailable`);let a=r.factor.credentialIdB64u,o=r.sealedRecord.ed25519Restore.materialActivation;if(!g(o,n.materialActivation))throw Error(`[SigningEngine][near] persisted Ed25519 material activation mismatch`);let s=await this.ensurePasskeyEd25519WarmSessionForSigning({runtime:r,walletSessionState:i,materialActivation:o}),c={kind:`available`,walletId:String(i.signingLane.identity.signer.account.wallet.walletId),nearAccountId:String(i.signingLane.identity.signer.account.nearAccountId),signerSlot:i.signingLane.identity.signer.signerSlot,materialActivation:o},l=await this.resolvePasskeyEd25519YaoHydration({walletSessionState:i,credentialIdB64u:a,publicLocator:c,unlockSource:s.ok?{kind:`available`,passkeyPrfFirstB64u:s.prfFirstB64u}:{kind:`unavailable`}});if(l.kind===`live`){let t=await this.resolveActiveNearEd25519YaoSigningLane(e);if(!t)throw Error(`[SigningEngine][near] local material rehydration did not publish a lane`);return{subject:e,material:t}}if(l.kind===`rehydrated`){if(!s.ok)throw l.activeClient.dispose(),Error(`[SigningEngine][near] local material rehydration lost the PRF secret`);try{await No({persistence:this,session:i,prfFirstB64u:s.prfFirstB64u,ed25519Restore:So({rpId:r.factor.rpId,nearAccountId:r.nearAccountId,nearEd25519SigningKeyId:r.nearEd25519SigningKeyId,relayerKeyId:r.relayerKeyId,participantIds:r.participantIds,runtimePolicyScope:r.runtimePolicyScope,signerSlot:r.signerSlot,routerAbNormalSigning:r.routerAbNormalSigning,credentialIdB64u:a,materialActivation:o}),materialActivation:o}),await this.enginePorts.ed25519YaoActiveClients.activate({activeClient:l.activeClient,facts:Cs(i)});let t=fR({subject:e,walletSessionState:i}),n=await this.resolveActiveNearEd25519YaoSigningLane(t);if(!n)throw Error(`[SigningEngine][near] local material rehydration did not publish an active lane`);return{subject:t,material:n}}catch(e){throw l.activeClient.dispose(),e}}throw l.plan.reason===`missing_material`?Error(`[SigningEngine][near] local threshold Ed25519 material requires Passkey reauthorization`):Error(`[SigningEngine][near] local threshold Ed25519 hydration blocked: ${l.plan.reason}`)}async resolvePasskeyEd25519YaoHydration(e){let t=e.walletSessionState.signingLane.identity.signer;return gs({store:G,identity:es(e.walletSessionState,this.getRpId(),e.credentialIdB64u),authority:e.walletSessionState.authority,publicLocator:e.publicLocator,unlockSource:e.unlockSource,liveMaterial:e.publicLocator.kind===`available`?this.enginePorts.ed25519YaoActiveClients.resolve({walletId:t.account.wallet.walletId,nearAccountId:t.account.nearAccountId,materialActivation:e.publicLocator.materialActivation}):null})}async signEvmFamily(e){return await _d(this.enginePorts.tempoSigningDeps,e)}async reportTempoBroadcastAccepted(e){await gd(this.enginePorts.tempoSigningDeps,e)}async reportTempoBroadcastRejected(e){await yd(this.enginePorts.tempoSigningDeps,e)}async reportTempoFinalized(e){await od(this.enginePorts.tempoSigningDeps,e)}async reportTempoDroppedOrReplaced(e){await pd(this.enginePorts.tempoSigningDeps,e)}async reconcileTempoNonceLane(e){return await bd(this.enginePorts.tempoSigningDeps,e)}storeUserData(e){return yc(this.enginePorts.registrationAccountLifecycleDeps,e)}async storeNearThresholdKeyMaterial(e){await Lg({clientDB:G,keyMaterialStore:G},e)}getAllUsers(){return lc(this.enginePorts.registrationAccountLifecycleDeps)}getUserBySignerSlot(e,t){return pc(this.enginePorts.registrationAccountLifecycleDeps,e,t)}getLastUser(){return ac(this.enginePorts.registrationAccountLifecycleDeps)}nearAuthenticatorsByAccount(e){return dc(this.enginePorts.registrationAccountLifecycleDeps,e)}setLastUser(e,t){return _c(this.enginePorts.registrationAccountLifecycleDeps,e,t)}activateAuthenticatedWalletState(e){return gc(this.enginePorts.registrationAccountLifecycleDeps,e)}async upsertEd25519YaoPublicCapabilityReference(e){await this.ed25519YaoPublicCapabilityReferences.upsert(e)}async upsertEd25519YaoPublicCapabilityLaneReference(e){await qi(this.ed25519YaoPublicCapabilityReferences,e)}setWalletNearProvisioningState(e){return bc(this.enginePorts.registrationAccountLifecycleDeps,e)}getWalletNearProvisioningState(e){return hc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeAuthenticator(e){return oc(this.enginePorts.registrationAccountLifecycleDeps,e)}rollbackUserRegistration(e){return cc(this.enginePorts.registrationAccountLifecycleDeps,e)}hasPasskeyCredential(e){return sc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEd25519RegistrationData(e){return rc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletMixedRegistrationData(e){return Js(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEd25519RecoveryRegistrationData(e){return vc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEmailOtpEd25519RegistrationData(e){return tc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEmailOtpMixedRegistrationData(e){return uc(this.enginePorts.registrationAccountLifecycleDeps,e)}finalizeWalletEd25519SignerRegistration(e){return mc(this.enginePorts.registrationAccountLifecycleDeps,e)}rollbackWalletEd25519SignerRegistration(e){return ic(this.enginePorts.registrationAccountLifecycleDeps,e)}createRouterAbEcdsaRegistrationCeremony(e){return this.runtimePorts.signerCrypto.createRouterAbEcdsaRegistrationCeremony(e)}verifyRouterAbEcdsaRegistrationClientProofs(e){return this.runtimePorts.signerCrypto.verifyRouterAbEcdsaRegistrationClientProofs(e)}persistInitialCanonicalEcdsaActivation(e){return this.runtimePorts.signerCrypto.persistInitialCanonicalEcdsaActivation(e)}finalizeRouterAbEcdsaRegistrationActivation(e){return this.runtimePorts.signerCrypto.finalizeRouterAbEcdsaRegistrationActivation(e)}closeRouterAbEcdsaRegistrationCeremony(e){return this.runtimePorts.signerCrypto.closeRouterAbEcdsaRegistrationCeremony(e)}finalizeWalletRegistrationEcdsaSessions(e){return KL(e)}storeWalletEcdsaSignerRecords(e){return Ys(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEcdsaRecoverySignerRecords(e){return nc(this.enginePorts.registrationAccountLifecycleDeps,e)}storeWalletEmailOtpEcdsaSignerRecords(e){return Xs(this.enginePorts.registrationAccountLifecycleDeps,e)}finalizeWalletEcdsaRegistration(e){return fc(this.enginePorts.registrationAccountLifecycleDeps,e)}async activateVerifiedNearEd25519YaoMaterial(e){return await this.enginePorts.ed25519YaoActiveClients.activate(e)}async installAuthMethodSession(e,t){return await ek({engine:this,relayerUrl:this.seamsWebConfigs.network.relayer.url,nearClient:this.nearClient,transport:this.walletCustodyCeremonyTransportV1(),rememberNearSession:this.voiceIdNearSessions.set.bind(this.voiceIdNearSessions,t.walletSession.walletId)},e,t)}async withExactEd25519MaterialOwner(e){return await wf({queueByKey:this.thresholdEd25519CommitQueueByKey,queueKey:zd({materialActivation:e.materialActivation}),nearAccountId:e.nearAccountId,enabled:!0,task:e.task})}storeWalletEmailOtpEcdsaRegistrationData(e){return Zs(this.enginePorts.registrationAccountLifecycleDeps,e)}requestWorkerOperation=e=>this.signerWorkerManager.getContext().requestWorkerOperation(e);prepareSigningSessionHydration(e){return this.passkeyMpcSession.prepareSigningSessionHydration(e)}readPreparedSigningSessionHydration(e){return this.passkeyMpcSession.readPreparedSigningSessionHydration(e)}discardSigningSessionHydration(e){return this.passkeyMpcSession.discardSigningSessionHydration(e)}hydrateSigningSession(e){return SF(this.warmCapabilitiesPublicDeps,e)}persistSigningSessionSealForThresholdSession(e){return this.passkeyMpcSession.persistSigningSessionSealForThresholdSession(e)}async requestEmailOtpOwnerConfirmation(e){let t=az(e.purpose,e.emailAddress),n=e.onResend,r=e.challengeId,i={challengeId:e.challengeId,...e.emailHint?{emailHint:e.emailHint}:{},title:e.confirmerText?.title||t.title,body:e.confirmerText?.body||t.body,helperText:`Enter the 6-digit code sent to your email`,...n?{onResend:async()=>{let e=await n();return r=e.challengeId,{challengeId:e.challengeId,...e.emailHint?{emailHint:e.emailHint}:{},delivery:{mode:`email_provider`}}}}:{}},a=await this.touchConfirm.requestUserConfirmation({requestId:ve(`wallet-owner-email-otp`,32,`Wallet owner Email OTP UI ids`),type:Y.SIGN_INTENT_DIGEST,summary:{type:e.purpose===`add_email_code`||e.purpose===`add_passkey`?`add_auth_method`:`wallet_owner_confirmation`,operation:t.operation,title:i.title,body:i.body,...t.warning?{warning:t.warning}:{}},payload:{signingSubject:{kind:`evm_wallet`,walletId:e.walletId},challengeB64u:e.challengeId,signingAuthPlan:{kind:_f.EmailOtpReauth,method:`email_otp`,emailOtpPrompt:i},emailOtpPrompt:i},intentDigest:`wallet-owner-email-otp:${e.purpose}:${e.walletId}`,...e.confirmationConfigOverride?{confirmationConfigOverride:e.confirmationConfigOverride}:{}});if(!a.confirmed)throw Error(a.error||`Email code confirmation was cancelled`);let o=String(a.otpCode||``).replace(/\D/g,``).slice(0,6);if(o.length!==6)throw Error(`Email code confirmation requires a 6-digit code`);return{challengeId:String(a.emailOtpChallengeId||r).trim(),otpCode:o}}requestRegistrationCredentialConfirmation(e){return Yk(this.enginePorts.registrationSessionDeps,e)}openRegistrationPreparationModal(e){return this.touchConfirm.openRegistrationPreparationModal(e)}closeRegistrationPreparationModal(){this.touchConfirm.closeRegistrationPreparationModal()}startPreparedPasskeyRegistrationCredential(e){if(this.touchIdPrompt.getRpId()!==e.expectedRpId)throw Error(`Prepared registration rpId does not match the wallet runtime`);return this.touchIdPrompt.generateRegistrationCredentialsInternal({kind:`wallet_registration`,walletId:e.walletId,challengeB64u:e.challengeB64u,signerSlot:e.signerSlot,intendedUserName:e.walletId,prompt:{kind:`reserved`,reservation:e.reservation,owner:e.owner,cancellation:e.cancellation}}).then(QR)}getAuthenticationCredentialsSerialized(e){return e.cancellation?this.touchIdPrompt.getAuthenticationCredentialsSerializedForChallengeB64u(e):Xk(this.enginePorts.registrationSessionDeps,e)}async exportKeypairWithUI(e){return await qk(this.recoveryPublicDeps,e)}async resolveExactKeyExportLane(e){return await Jk(this.recoveryPublicDeps,e)}async connectEd25519Session(e){return await MF(this.passkeyPublicDeps,e)}async bootstrapEcdsaSession(e){return await NF(this.passkeyPublicDeps,e)}async loginWithEmailOtpEcdsaCapabilityInternal(e){return await uA(this.emailOtpPublicDeps,e)}async resolveEmailOtpEd25519CustodyProjectionInternal(e){let t=String(e.walletSession.walletId),n;switch(e.selector.kind){case`material_activation`:n=e.selector.materialActivation;break;case`wallet_auth_method`:{let r=await G.resolveWalletAuthorityForMethod(t,e.selector.walletAuthMethodId);n=r.kind===`resolved`&&r.authority.state===`active`?r.authority.signerActivations.ed25519?.materialActivation:void 0;break}case`selected_wallet_authority`:{let e=await G.resolveSelectedWalletAuthority(t);n=e.kind===`resolved`&&e.authority.state===`active`?e.authority.signerActivations.ed25519?.materialActivation:void 0;break}default:e.selector}return n?await oP({listPublicCapabilityReferences:this.ed25519YaoPublicCapabilityReferences.list.bind(this.ed25519YaoPublicCapabilityReferences),listUsers:this.getAllUsers.bind(this)},e.walletSession,e.providerSubjectId,n):null}async resolveOwnerAuthorityEd25519UnlockRequestInternal(e){let t=await this.resolveEmailOtpEd25519CustodyProjectionInternal({walletSession:e.walletSession,providerSubjectId:e.providerSubjectId,selector:{kind:`wallet_auth_method`,walletAuthMethodId:e.walletAuthMethodId}});if(!t)return null;let n=t.user.signerSlot;return{kind:`owner_authority`,signerSlot:n,remainingUses:e.remainingUses,recovery:{ed25519YaoRecovery:{kind:Fr,signerSlot:n,remainingUses:e.remainingUses,orgId:t.identity.runtimePolicyScope.orgId},providerSubject:t.providerSubject,nearAccountId:String(t.identity.nearAccountId),expectedOperationalPublicKey:t.user.operationalPublicKey,expectedThresholdSessionId:String(t.identity.thresholdSessionId),walletCustodyEd25519Material:await this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:String(t.identity.nearAccountId),signerSlot:n})}}}async activateOwnerAuthorityEd25519RuntimeInternal(e){let t=await this.resolveEmailOtpEd25519CustodyProjectionInternal({walletSession:e.walletSession,providerSubjectId:e.providerSubjectId,selector:{kind:`wallet_auth_method`,walletAuthMethodId:e.walletAuthMethodId}});if(!t)throw Error(`Owner Email OTP Ed25519 activation has no signer projection`);await this.activateEmailOtpEd25519CustodyCapabilityInternal({walletSession:e.walletSession,providerSubject:t.providerSubject,emailHashHex:e.emailHashHex,signerSlot:t.user.signerSlot,expectedOperationalPublicKey:t.user.operationalPublicKey,expectedThresholdSessionId:String(t.identity.thresholdSessionId),bootstrap:e.bootstrap,activeClientHandle:e.activeClientHandle,metadata:e.metadata,authority:e.authority,commitQueue:`acquire`})}async activateEmailOtpEd25519RegistrationMaterialInternal(e){let t=await this.signerWorkerManager.requestWorkerOperation({kind:`emailOtp`,request:{type:`activateEmailOtpEd25519YaoRegistrationMaterial`,payload:{material:e.material,bootstrap:e.bootstrap,envelope:e.envelope,factorSecret32:e.factorSecret32},transfer:[e.factorSecret32]}});try{let n=await this.activateEmailOtpEd25519CustodyCapabilityInternal({commitQueue:`acquire`,walletSession:e.walletSession,providerSubject:e.providerSubject,emailHashHex:e.emailHashHex,signerSlot:e.signerSlot,expectedOperationalPublicKey:e.expectedOperationalPublicKey,expectedThresholdSessionId:e.expectedThresholdSessionId,bootstrap:e.bootstrap,activeClientHandle:t.activeClientHandle,metadata:t.metadata});return await cR({walletId:e.walletSession.walletId,emailHashHex:e.emailHashHex,providerSubject:e.providerSubject,bootstrap:e.bootstrap}),n}catch(n){try{await jP({worker:this.signerWorkerManager.getContext(),target:{kind:`ed25519_yao`,thresholdSessionId:e.bootstrap.session.thresholdSessionId,materialActivation:t.metadata.materialActivation}})}catch{}try{await wy({workerContext:this.signerWorkerManager.getContext(),activeClientHandle:t.activeClientHandle})}catch{}throw n}}async activateEmailOtpEd25519CustodyCapabilityInternal(e){return await this.activateEmailOtpEd25519CustodyCapabilityWithExactCredential({...e,credentialExpectation:{kind:`resolve_exact_operation_credential`}})}async activateEmailOtpEd25519CustodyCapabilityWithExactCredential(e){let t=await cR({walletId:e.walletSession.walletId,emailHashHex:e.emailHashHex,providerSubject:e.providerSubject,bootstrap:e.bootstrap,...e.authority?{verifiedAuthority:e.authority}:{},...e.exactAuthorization?{exactAuthorization:e.exactAuthorization}:{}});if(e.credentialExpectation.kind===`expect_exact_operation_credential`&&(e.credentialExpectation.operationCredential.walletSessionId!==t.operationCredential.walletSessionId||e.credentialExpectation.operationCredential.token!==t.operationCredential.token))throw Error(`[SigningEngine][near] expected Email OTP operation credential changed`);return await wf({queueByKey:this.thresholdEd25519CommitQueueByKey,queueKey:zd({materialActivation:e.metadata.materialActivation}),nearAccountId:mn(e.bootstrap.session.nearAccountId),enabled:e.commitQueue===`acquire`,task:async()=>{let n=await iP({walletSession:e.walletSession,nearAccountId:e.bootstrap.session.nearAccountId,providerSubject:e.providerSubject,relayerUrl:this.seamsWebConfigs.network.relayer?.url||``,authority:t.authority,signerSlot:e.signerSlot,expectedOperationalPublicKey:e.expectedOperationalPublicKey,expectedThresholdSessionId:e.expectedThresholdSessionId,bootstrap:e.bootstrap,operationCredential:t.operationCredential,activeClientHandle:e.activeClientHandle,metadata:e.metadata,workerContext:this.signerWorkerManager.getContext(),activateCapability:this.enginePorts.ed25519YaoActiveClients.activate.bind(this.enginePorts.ed25519YaoActiveClients)}),r=n.walletSessionState;if(await this.upsertEd25519YaoPublicCapabilityLaneReference(gR({walletSessionState:r,materialActivation:n.material.activeClient.metadata().materialActivation})),!this.enginePorts.ed25519YaoActiveClients.resolve({walletId:r.signingLane.identity.signer.account.wallet.walletId,nearAccountId:r.signingLane.identity.signer.account.nearAccountId,materialActivation:n.material.activeClient.metadata().materialActivation}))throw Error(`[SigningEngine][near] wallet custody activation was superseded`);return r.signingLane.identity.signer}})}async loginWithEmailOtpWalletCustodyEd25519Internal(e){if(e.authoritySelector.kind!==`wallet_auth_method`)throw Error(`Email OTP Ed25519 unlock requires an exact wallet auth method`);let t=e.authoritySelector.walletAuthMethodId,n=e.ed25519Selection,r=await po({walletSession:e.walletSession,authoritySelector:e.authoritySelector,relayUrl:this.seamsWebConfigs.network.relayer?.url||``,groupId:Ze,verification:{kind:`otp`,challengeId:e.challengeId,otpCode:e.otpCode},routePlan:ws({freshRouteFamily:`login`,operation:Ft}),workerCtx:this.signerWorkerManager.getContext(),providerSubject:e.providerSubjectId,signerSlot:n.signerSlot,remainingUses:e.remainingUses,orgId:n.runtimePolicyScope.orgId,nearAccountId:n.nearAccountId,expectedOperationalPublicKey:n.operationalPublicKey,expectedThresholdSessionId:n.thresholdSessionId,walletCustodyEd25519Material:await this.loadEmailOtpWalletCustodyEd25519Material({nearAccountId:n.nearAccountId,signerSlot:n.signerSlot})});if(r.kind===`wallet_custody_cache_absent`)throw Error(`Email OTP wallet custody material is unavailable; recover with a recovery code`);try{await Hk({walletId:String(e.walletSession.walletId),walletAuthMethodId:t,projection:r.recovery.verifiedAuthorityProjection});let i=await Uk({walletId:String(e.walletSession.walletId),walletAuthMethodId:t,providerSubject:e.providerSubjectId,emailHashHex:e.emailHashHex,projection:r.recovery.verifiedAuthorityProjection});r.walletCustodyEd25519Material&&await this.persistWalletCustodyEd25519Material(r.walletCustodyEd25519Material),await K.replaceExactActive({active:r.walletSessionAuthorization.record,operationCredential:r.walletSessionAuthorization.operationCredential});let a=await this.activateEmailOtpEd25519CustodyCapabilityInternal({commitQueue:`acquire`,walletSession:e.walletSession,providerSubject:e.providerSubjectId,emailHashHex:e.emailHashHex,signerSlot:n.signerSlot,expectedOperationalPublicKey:n.operationalPublicKey,expectedThresholdSessionId:n.thresholdSessionId,bootstrap:r.ed25519YaoCapability,activeClientHandle:r.activeClientHandle,metadata:r.metadata,authority:i,exactAuthorization:r.walletSessionAuthorization});return await Ga(this.walletCustodyCeremonyTransportV1(),{existingEnvelope:r.ed25519ExportRootCustody.existingEnvelope,existingFactorSecret:r.ed25519ExportRootCustody.factorSecret32,walletId:String(e.walletSession.walletId),walletAuthMethodId:String(r.walletSessionAuthorization.record.authMethodId),walletSessionId:String(r.walletSessionAuthorization.operationCredential.walletSessionId),expiresAtMs:r.walletSessionAuthorization.record.expiresAtMs}),a}catch(e){throw await wy({workerContext:this.signerWorkerManager.getContext(),activeClientHandle:r.activeClientHandle}).catch(()=>void 0),e}finally{r.ed25519ExportRootCustody.factorSecret32.fill(0)}}async prepareEmailOtpRegistrationEnrollmentMaterialInternal(e){return await dA(this.emailOtpPublicDeps,e)}async getWarmThresholdEd25519SessionStatus(e){let t=B(e.walletId),n=await Ls({walletId:t,nearAccountId:mn(e.nearAccountId),nearEd25519SigningKeyId:mi(e.nearEd25519SigningKeyId)});if(n.kind===`missing`)return null;if(n.kind!==`resolved`)throw Error(`[WarmSessionStore] Ed25519 sealed runtime is ${n.kind}`);let r=await this.readExactNearEd25519WalletSessionAuthorization(t);return await bF(this.warmCapabilitiesPublicDeps,{runtime:n.runtime,authorization:r.kind===`found`?r.authorization:null,nowMs:Date.now()})}async scheduleRouterAbEcdsaDerivationLoginPresignaturePrefill(e,t){let n=await this.listPreprocessingCapabilities({walletId:e.walletId,chainTargets:[e.chainTarget]},t),r=n.length===1?n[0]:null;return r?await xF(this.warmCapabilitiesPublicDeps,{capability:r,waitForPoolReady:e.waitForPoolReady}):{status:`skipped`,reason:`exact_wallet_session_unavailable`,walletSessionId:null}}async clearVolatileWarmSigningMaterial(e){let t=this.clearVolatileWarmSigningMaterialInternal(e);this.volatileWarmSigningMaterialCleanupInFlight=t;try{await t}finally{this.volatileWarmSigningMaterialCleanupInFlight===t&&(this.volatileWarmSigningMaterialCleanupInFlight=null)}}async clearVolatileWarmSigningMaterialInternal(e){e?this.voiceIdNearSessions.delete(e):this.voiceIdNearSessions.clear();try{e?this.enginePorts.ed25519YaoActiveClients.disposeWallet(e):this.enginePorts.ed25519YaoActiveClients.dispose()}finally{try{await CF(this.warmCapabilitiesPublicDeps,e)}finally{try{e===void 0?await this.clearLinkedEcdsaHolderMaterials():await this.clearLinkedEcdsaHolderMaterialsForWallet(e)}finally{await this.signerWorkerManager.clearEcdsaClientWorkerState(e===void 0?{kind:`all`}:{kind:`wallet`,walletId:e})}}}}onSdkLifecycleEvent(e){return this.sdkLifecycleEventListeners.add(e),this.removeSdkLifecycleEventListener.bind(this,e)}publishSdkLifecycleEvent(e){let t=ez(e);if(!this.deliveredSdkLifecycleEventKeys.has(t)){this.deliveredSdkLifecycleEventKeys.add(t);for(let t of Array.from(this.sdkLifecycleEventListeners))t(e)}}publishNearProvisioningLifecycleEvent(e,t){this.publishSdkLifecycleEvent(Mi({walletId:e,state:t}))}removeSdkLifecycleEventListener(e){this.sdkLifecycleEventListeners.delete(e)}dispose(){this.signingSessionLifecycleSubscription.unsubscribe(),this.nearProvisioningUnsubscribe(),this.sdkLifecycleEventListeners.clear(),this.deliveredSdkLifecycleEventKeys.clear(),this.ed25519YaoPageLifecycleOwner.dispose()}clearThresholdEcdsaSigningQueue(){Vd(this.thresholdEcdsaSigningQueueByKey)}async clearLinkedEcdsaHolderMaterials(){await qu({workerCtx:this.signerWorkerManager.getContext()}),Td()}async clearLinkedEcdsaHolderMaterialsForWallet(e){let t=Nd(e),n;for(let e of t)try{await Fu({holderHandleIds:[e.holderHandleId],workerCtx:this.signerWorkerManager.getContext()}),Ed(e)}catch(e){n??=e}if(n!==void 0)throw n}};function sz(e){return Array.isArray(e)?e.filter(e=>[`ble`,`hybrid`,`internal`,`nfc`,`smart-card`,`usb`].includes(String(e))):[]}function cz(e){let t=new Set;for(let n of e.authMethods)n.kind===`passkey`&&n.status===`active`&&n.walletId===e.walletId&&t.add(n.credentialIdB64u);let n=[];for(let r of e.authenticators){let i=String(r.credentialId||``).trim();!i||i===e.excludeCredentialIdB64u||!t.has(i)||n.push({id:i,type:`public-key`,transports:sz(r.transports)})}return n}async function lz(e){let[t,n]=await Promise.all([G.listProfileAuthenticators(String(e.walletId)),G.listWalletAuthMethodsV2ForWallet(String(e.walletId))]);return cz({walletId:e.walletId,authenticators:t,authMethods:n,excludeCredentialIdB64u:e.excludeCredentialIdB64u})}async function uz(e){let t=await e.context.signingEngine.getAuthenticationCredentialsSerialized({subjectId:String(e.walletId),challengeB64u:e.operationFingerprintDigest,allowCredentials:e.allowCredentials,includeSecondPrfOutput:!1}),n=hl(t);if(!n||!e.allowCredentials.some(e=>e.id===n))throw Error(`registration.removeAuthMethod used a credential outside the wallet`);return{kind:`webauthn_assertion`,rpId:e.rpId,credential:Ks(t),expectedChallengeDigestB64u:e.operationFingerprintDigest}}async function dz(e){let[t,...n]=(await G.listWalletAuthMethodsForWallet(String(e.walletId))).filter(t=>t.kind===`email_otp`&&t.status===`active`&&String(t.walletId)===String(e.walletId)&&String(t.authority.bindingId)!==String(e.targetWalletAuthMethodId)&&(e.source.kind===`surviving_method`||String(t.authority.bindingId)===String(e.source.walletAuthMethodId)));if(!t||n.length>0||t.kind!==`email_otp`)throw Error(`registration.removeAuthMethod needs exactly one other active method to authorize with`);let r=String(t.authority.bindingId),i=async()=>await ls({relayUrl:e.relayerUrl,walletId:String(e.walletId),walletAuthMethodId:r,operation:Lt,operationFingerprintDigest:Tt(e.operationFingerprintDigest)}),a=await i(),o=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:`remove_auth_method`,walletId:String(e.walletId),emailAddress:String(a.emailHint||``),challengeId:a.challengeId,...a.emailHint?{emailHint:a.emailHint}:{},onResend:async()=>{let e=await i();return e.emailHint?{challengeId:e.challengeId,emailHint:e.emailHint}:{challengeId:e.challengeId}}});return{kind:`email_otp`,challengeId:o.challengeId,otpCode:o.otpCode,ownerProofBindingDigest:a.ownerProofBindingDigest}}async function fz(e,t,n){let r=String(e.configs.network.relayer.url||``).trim();if(!r)throw Error(`registration.removeAuthMethod requires relayer.url`);let i=o(String(e.signingEngine.getRpId()||``).trim());if(!i.ok)throw Error(`registration.removeAuthMethod ${i.error.message}`);let a=Date.now(),s=await ui({walletId:n.walletId,targetWalletAuthMethodId:n.walletAuthMethodId,requestedAtMs:a}),c=await G.getWalletAuthMethodV2(n.walletAuthMethodId),l=c&&c.kind===`passkey`?String(c.credentialIdB64u):null,u=await lz({walletId:n.walletId,excludeCredentialIdB64u:l});if(t.kind===`selected_method`){let e=await G.getWalletAuthMethodV2(t.walletAuthMethodId);if(!e||e.status!==`active`||e.walletId!==n.walletId||e.walletAuthMethodId===n.walletAuthMethodId)throw Error(`Removal requires a different active method on this wallet`);if(u=e.kind===`passkey`?u.filter(t=>t.id===e.credentialIdB64u):[],e.kind===`passkey`&&u.length===0)throw Error(`Selected passkey is unavailable for removal authorization`)}let d;d=u.length>0?R.passkey:R.emailOtp;let f;switch(d){case R.passkey:f=await uz({context:e,walletId:n.walletId,rpId:i.value,operationFingerprintDigest:String(s),allowCredentials:u});break;case R.emailOtp:f=await dz({context:e,relayerUrl:r,walletId:n.walletId,targetWalletAuthMethodId:n.walletAuthMethodId,source:t,operationFingerprintDigest:String(s)});break;default:throw Error(`registration.removeAuthMethod encountered an unsupported source method`)}return{relayerUrl:r,requestedAtMs:a,sourceProof:f}}async function pz(e){let{relayerUrl:t,requestedAtMs:n,sourceProof:r}=await fz(e.context,{kind:`surviving_method`},{walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId}),i=await Ac({relayerUrl:t,walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,requestedAtMs:n,sourceProof:r});if(!i.ok||i.authMethod.status!==`revoked`)throw Error(`registration.removeAuthMethod did not revoke the method`);let a=await G.getWalletAuthMethodV2(e.walletAuthMethodId);if(a&&a.status!==`revoked`){let e=Date.now(),t=a.status===`active`?a.activatedAtMs:e,n=di({...a,status:`revoked`,activatedAtMs:t,revokedAtMs:e,updatedAtMs:e});n&&await G.upsertWalletAuthMethodV2(n)}return{ok:!0,walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,authMethod:i.authMethod}}async function mz(e){let t=hi(String(e.walletId||``).trim()),n=r(String(e.walletAuthMethodId||``).trim());if(!n.ok)throw Error(`registration.removeAuthMethod requires a wallet auth method id`);try{return await pz({context:e.context,walletId:t,walletAuthMethodId:n.value})}catch(e){throw I(e)}}const hz=`/wallet/device-linking/v1/sessions`,gz=4e3,_z=[`ok`,`outcome`,`session`],vz=[`ok`,`outcome`,`session`,`targetCredential`],yz=[`ok`,`code`,`message`],bz=[`ok`,`outcome`,`code`,`message`],xz=[`ok`,`outcome`,`expectedRevision`,`actualRevision`,`session`],Sz=[`ok`,`outcome`,`session`],Cz=[`ok`,`outcome`,`state`,`session`],wz=[`ok`,`outcome`,`reason`,`session`];function Tz(e,t){let n=Math.min(e,gz),r=Math.min(Math.max(t,0),5),i=Math.min(gz,n*2**r),a=Math.max(1,Math.min(n,i/4)),o=Math.floor(Math.random()*a);return Math.min(gz,i+o)}async function Ez(e){let t=e.options.nowMs()+6e4,n=0;for(;e.options.nowMs()<t;){let t=await Pz({options:e.options,baseUrl:e.baseUrl,method:`GET`,canonicalPath:qz(e.linkSessionId,`approval`),linkSessionId:e.linkSessionId});if(t.status!==204)return En(t.body);let r=Tz(e.options.pollIntervalMs,n);await new Promise(e=>setTimeout(e,r)),n+=1}throw Error(`committed authority packages were not ready before the activation deadline`)}function Dz(e){let t=Gz(e.relayerUrl);if(!Number.isSafeInteger(e.pollIntervalMs)||e.pollIntervalMs<=0)throw Error(`linked-device session poll interval must be a positive integer`);return{...kz(e),...Oz(e),createUnclaimedSessionV1:async n=>{await Nz({options:e,baseUrl:t,method:`POST`,canonicalPath:hz,linkSessionId:n.payload.linkSessionId,body:{kind:`linked_device_session_create_request_v1`,payload:n.payload}})},getSessionV1:async({linkSessionId:n})=>await Mz({options:e,baseUrl:t,linkSessionId:n}),getApprovalV1:async({linkSessionId:n})=>An((await Pz({options:e,baseUrl:t,method:`GET`,canonicalPath:qz(n,`approval`),linkSessionId:n})).body).approval,getTargetPreparationV1:async({linkSessionId:n,deliveryRecipientPublicKey65B64u:r})=>{let i=Cn({kind:`linked_device_target_preparation_request_v1`,linkSessionId:n,deliveryRecipientPublicKey65B64u:r});return In((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n,`target-preparation`),linkSessionId:n,body:i})).body)},startTargetEmailOtpChallengeV1:async({request:n})=>{let r=kn(n);return On((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(r.linkSessionId,`email-otp/challenge`),linkSessionId:r.linkSessionId,body:r})).body)},resendTargetEmailOtpChallengeV1:async({request:n})=>{let r=Qn(n);return On((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(r.linkSessionId,`email-otp/challenge/resend`),linkSessionId:r.linkSessionId,body:r})).body)},verifyTargetEmailOtpChallengeV1:async({request:n})=>{let r=jn(n);return Dn((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(r.linkSessionId,`email-otp/challenge/verify`),linkSessionId:r.linkSessionId,body:r})).body)},registerTargetCredentialV1:async({registration:n})=>Rz((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n.linkSessionId,`credential`),linkSessionId:n.linkSessionId,body:n})).body),registerEd25519ExportRootRecipientV1:async({recipient:n})=>{let r=jz(n.linkSessionId);await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(r,`ed25519-export-root-recipient`),linkSessionId:r,body:n})},getEd25519ExportRootPackageV1:async({linkSessionId:n})=>{let r=await Pz({options:e,baseUrl:t,method:`GET`,canonicalPath:qz(n,`ed25519-export-root`),linkSessionId:n});return r.status===204?null:zn(r.body)},retryCommittedDeliveryV1:async({request:n})=>{await Nz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n.linkSessionId,`retry`),linkSessionId:n.linkSessionId,body:n})},cancelSessionV1:async({request:n})=>{await Nz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n.linkSessionId,`cancel`),linkSessionId:n.linkSessionId,body:n})},subscribeSessionV1:async({linkSessionId:n,onEvent:r})=>await Iz({options:e,baseUrl:t,linkSessionId:n,onEvent:r})}}function Oz(e){let t=Gz(e.relayerUrl);return{acknowledgeLocalAuthorityActivationWithWalletSessionV1:async({acknowledgement:n,operationCredential:r})=>{let i=er(n),a=ze(r);if(a.walletSessionId!==i.walletSessionId)throw Error(`linked-device acknowledgement credential does not match Wallet Session`);await Fz({options:e,baseUrl:t,linkSessionId:i.linkSessionId,token:a.token,body:i})}}}function kz(e){let t=Gz(e.relayerUrl);return{receiveCommittedAuthorityPackagesV1:async({linkSessionId:n})=>await Ez({options:e,baseUrl:t,linkSessionId:n}),activateInstalledAuthorityV1:async({linkSessionId:n,receipt:r})=>{let i=sr(r);return Gn((await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n,`receipt`),linkSessionId:n,body:i})).body)},acknowledgeLocalAuthorityActivationV1:async({acknowledgement:n})=>{let r=er(n);await Pz({options:e,baseUrl:t,method:`POST`,canonicalPath:qz(n.linkSessionId,`receipt`),linkSessionId:n.linkSessionId,body:r})}}}function Az(e){return{...e.owner,createAuthenticatedSessionTransportV1:({keyMaterial:t,devicePublicKeyB64u:n})=>Dz({http:e.http,relayerUrl:e.relayerUrl,publishableKey:e.publishableKey,projectEnvironmentId:e.projectEnvironmentId,keyMaterial:e.keyMaterial,keyMaterialHandle:t,devicePublicKeyB64u:n,nowMs:e.nowMs,pollIntervalMs:e.pollIntervalMs})}}function jz(e){let t=S(e);if(!t.ok)throw Error(t.error.message);return t.value}async function Mz(e){return Lz((await Pz({options:e.options,baseUrl:e.baseUrl,method:`GET`,canonicalPath:Kz(e.linkSessionId),linkSessionId:e.linkSessionId})).body).session}async function Nz(e){return Lz((await Pz(e)).body)}async function Pz(e){let t=e.options.publishableKey.trim(),n=e.options.projectEnvironmentId.trim();if(!t||!n)throw Error(`linked-device Passkey ceremony requires registration API credentials`);let r=await wt(Wz(e.body)),i=e.options.nowMs();if(!Number.isSafeInteger(i)||i<=0)throw Error(`linked-device request clock is invalid`);let a=i+ar,o=_e(32,`linked-device request proof nonce`),s=await Zn(e.options.devicePublicKeyB64u),c=await e.options.keyMaterial.signDeviceSessionRequestV1({handle:e.options.keyMaterialHandle,linkSessionId:e.linkSessionId,method:e.method,canonicalPath:e.canonicalPath,bodyDigestB64u:r,devicePublicKeyDigestB64u:s,challengeB64u:o,issuedAtMs:i,expiresAtMs:a}),l={kind:`linked_device_request_proof_v1`,linkSessionId:e.linkSessionId,devicePublicKeyDigestB64u:s,requestNonceB64u:o,method:e.method,canonicalPath:e.canonicalPath,bodyDigestB64u:r,issuedAtMs:i,expiresAtMs:a,signatureB64u:c.signatureB64u},u=P(new TextEncoder().encode(JSON.stringify(l))),d=await e.options.http.request({method:e.method,url:`${e.baseUrl}${e.canonicalPath}`,headers:{Accept:`application/json`,Authorization:`Bearer ${t}`,"Content-Type":`application/json`,"X-Seams-Environment-Id":n,[nr]:u},...e.body===void 0?{}:{body:e.body}});if(!d.ok)throw Error(`linked-device request failed: ${d.message}`);if(d.value.status<200||d.value.status>=300)throw Error(Bz(d.value));return d.value}async function Fz(e){let t=e.token.trim(),n=e.options.projectEnvironmentId.trim();if(!t||!n)throw Error(`linked-device Wallet Session acknowledgement requires session credentials`);let r=await e.options.http.request({method:`POST`,url:`${e.baseUrl}${qz(e.linkSessionId,`receipt`)}`,headers:{Accept:`application/json`,Authorization:`Bearer ${t}`,"Content-Type":`application/json`,"X-Seams-Environment-Id":n},body:e.body});if(!r.ok)throw Error(`linked-device request failed: ${r.message}`);if(r.value.status<200||r.value.status>=300)throw Error(Bz(r.value))}async function Iz(e){let t=!1,n,r=null,i=!0,a=0,o=null,s=async()=>{if(!t)try{let t=await Mz({...e});r===null||t.revision!==r?(r=t.revision,a=0,e.onEvent(yn({kind:`linked_device_session_event_v1`,linkSessionId:t.linkSessionId,state:t.state,emittedAtMs:t.updatedAtMs}))):a+=1}catch(e){if(i)throw t=!0,e;a+=1}finally{i=!1,t||(n=setTimeout(()=>{o=s()},Tz(e.options.pollIntervalMs,Math.max(0,a-1))))}};return await(o=s()),{close:async()=>{t=!0,n!==void 0&&clearTimeout(n),await o?.catch(()=>void 0)}}}function Lz(e){let t=Vz(e);if(t===null)throw Error(`linked-device response must be an object`);if(!Uz(t,_z))throw Error(`linked-device response contains invalid fields`);if(t.ok!==!0)throw Error(`linked-device response outcome is invalid`);switch(t.outcome){case`applied`:return{ok:!0,outcome:`applied`,session:bn(t.session)};case`replayed`:return{ok:!0,outcome:`replayed`,session:bn(t.session)};default:throw Error(`linked-device response outcome is invalid`)}}function Rz(e){let t=Vz(e);if(t===null)throw Error(`linked-device target credential response must be an object`);if(!Uz(t,vz))throw Error(`linked-device target credential response contains invalid fields`);if(t.ok!==!0)throw Error(`linked-device target credential response outcome is invalid`);switch(t.outcome){case`applied`:return zz(t,`applied`);case`replayed`:return zz(t,`replayed`);default:throw Error(`linked-device target credential response outcome is invalid`)}}function zz(e,t){let n=bn(e.session),r=Ln(e.targetCredential);if(r.outcome!==t)throw Error(`linked-device target credential response outcome does not match its result`);if(r.linkSessionId!==n.linkSessionId)throw Error(`linked-device target credential response session identity differs`);return r}function Bz(e){let t=Vz(e.body);if(t===null||t.ok!==!1)return`linked-device request failed with HTTP ${e.status}`;if(Uz(t,yz)&&typeof t.code==`string`&&typeof t.message==`string`&&t.message.trim()||Uz(t,bz)&&typeof t.outcome==`string`&&typeof t.code==`string`&&typeof t.message==`string`&&t.message.trim())return`linked-device request failed: ${t.message}`;switch(t.outcome){case`conflict`:if(Uz(t,xz))return`linked-device request failed: conflict`;break;case`expired`:if(Uz(t,Sz))return`linked-device request failed: expired`;break;case`invalid_state`:if(Uz(t,Cz))return`linked-device request failed: invalid_state`;break;case`integrity_error`:if(Uz(t,wz))return`linked-device request failed: integrity_error`;break;default:break}return`linked-device request failed with HTTP ${e.status}`}function Vz(e){return Hz(e)?e:null}function Hz(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;try{let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}catch{return!1}}function Uz(e,t){try{return Lc(e,t)}catch{return!1}}function Wz(e){if(e===void 0)return new Uint8Array;let t=JSON.stringify(e);if(typeof t!=`string`)throw Error(`linked-device request body is not JSON serializable`);return new TextEncoder().encode(t)}function Gz(e){let t=e.trim().replace(/\/+$/,``);if(!t)throw Error(`linked-device relayer URL is required`);return t}function Kz(e){return`${hz}/${String(e)}`}function qz(e,t){return`${Kz(e)}/${t}`}function Jz(e){return e?String(e.linkSessionId):`link-device-scan`}function Yz(e){return new X(e,Z.INVALID_QR_DATA,`authorization`)}function Xz(e,t){try{e?.(t)}catch{}}function Zz(e,t,n){e?.(ji({flowId:Jz(t),...n,data:{role:`scanner`,...n.data??{}}}))}function Qz(e,t){if(e.walletSessionId!==t.walletSessionId||e.authorizationId!==t.authorizationId)throw Error(`wallet-session authorization source changed during linking`)}function $z(e){if(e instanceof X)return e;let t=L(e)||`Device linking failed`;return/expired|expiry/i.test(t)?new X(t,Z.SESSION_EXPIRED,`authorization`):new X(t,Z.REGISTRATION_FAILED,`registration`)}function eB(e){let t;try{t=Rn(e)}catch(e){throw Yz(L(e)||`Invalid linked-device QR payload`)}let n=Date.now();if(t.issuedAtMs>n+6e4)throw Yz(`QR payload was issued in the future`);if(t.expiresAtMs<=n)throw new X(`QR code expired`,Z.SESSION_EXPIRED,`authorization`);return t}async function tB(e,t,n,r,i){let a=null,o=null;Zz(n.onEvent,a,{phase:Li.STEP_02_QR_SCAN_STARTED,status:`started`,message:`Review the device link`,interaction:{kind:`qr_scan`,overlay:`show`}});try{a=eB(t);let e=await r.ownerAuthorization.authenticateOwnerForLinkingV1({payload:a,requestedAtMs:Date.now()});Qz(e.ownerAuthorization,e.authentication.source),Zz(n.onEvent,a,{phase:Li.STEP_02_QR_SCAN_STARTED,status:`started`,message:`Linking the approved device`,interaction:{kind:`qr_scan`,overlay:`hide`}});let s=await r.transport.claimSessionV1({request:Pn(a),authentication:e.authentication});if(s.linkSessionId!==a.linkSessionId||s.devicePublicKeyB64u!==a.devicePublicKeyB64u||s.walletId!==e.walletId)throw Error(`linked-device claim does not match the scanned QR payload`);o={linkSessionId:s.linkSessionId,expectedRevision:s.sessionRevision,authentication:e.authentication},i?.(o);let c=await rB({targetFactor:a.targetFactor,targetEmail:a.targetFactor.kind===`email_otp`?a.targetEmail:void 0,linkSessionId:s.linkSessionId,sessionRevision:s.sessionRevision,transport:r.transport,authentication:e.authentication,onEmailOtpBaseFactorRequired:n.onEmailOtpBaseFactorRequired}),l=ur({linkSessionId:s.linkSessionId,walletId:s.walletId,enrollmentId:s.enrollmentId,deviceId:s.deviceId,linkPublicKeyB64u:a.linkPublicKeyB64u,devicePublicKeyB64u:s.devicePublicKeyB64u,targetFactor:c,permission:a.requestedPermission,ownerAuthorization:e.ownerAuthorization,approvedAtMs:Date.now(),expiresAtMs:Math.min(e.expiresAtMs,s.claimExpiresAtMs)});cB(await r.transport.recordOwnerApprovalV1({approval:l,authentication:e.authentication})),o=null,await mB({transport:r.transport,linkSessionId:s.linkSessionId,walletId:s.walletId,enrollmentId:s.enrollmentId,deviceId:s.deviceId,expiresAtMs:Math.min(e.expiresAtMs,s.claimExpiresAtMs),exportRootRequirement:e.exportRootRequirement,ed25519ExportRootCapability:e.exportRootRequirement===`required`?e.ed25519ExportRootCapability:void 0,ed25519ExportRoot:r.ed25519ExportRoot,authentication:e.authentication}),await lB({transport:r.transport,sourceContribution:r.sourceContribution,ed25519ExportRootCapability:e.exportRootRequirement===`required`?e.ed25519ExportRootCapability:void 0,initialApproval:l,authentication:e.authentication,expiresAtMs:Math.min(e.expiresAtMs,s.claimExpiresAtMs)});let u={success:!0,kind:`approval_recorded`,walletId:s.walletId,enrollmentId:s.enrollmentId,deviceId:s.deviceId};return Zz(n.onEvent,a,{phase:Li.STEP_02_QR_SCAN_STARTED,status:`succeeded`,message:`Device-link approval recorded`,walletId:String(s.walletId),data:{enrollmentId:String(s.enrollmentId)},interaction:{kind:`qr_scan`,overlay:`hide`}}),await n.afterCall?.(!0,u),u}catch(e){o&&(await nB(r.transport,o),i?.(null));let t=$z(e);throw Zz(n.onEvent,a,{phase:Li.FAILED,status:`failed`,message:t.message,interaction:{kind:`qr_scan`,overlay:`hide`},error:{code:t.code,message:t.message,retryable:t.code!==Z.SESSION_EXPIRED}}),Xz(n.onError,t),await n.afterCall?.(!1,void 0,t),t}}async function nB(e,t){t&&await e.cancelClaimedSessionV1(t).catch(()=>void 0)}async function rB(e){if(e.targetFactor.kind===`passkey_prf`)return{kind:`passkey_prf`};let t=oB(e.targetEmail),n=await e.transport.resolveEmailOtpBaseFactorV1({linkSessionId:e.linkSessionId,request:{kind:`resolve`,expectedRevision:e.sessionRevision},authentication:e.authentication});switch(aB(n,e.sessionRevision),n.resolution.kind){case`selected`:return{kind:`email_otp`,targetEmail:t,enrollment:{kind:`existing_enrollment`},baseWalletAuthMethodId:n.resolution.choice.baseWalletAuthMethodId};case`selection_required`:return await iB(e,n.resolution.choices);case`unavailable`:return{kind:`email_otp`,targetEmail:t,enrollment:{kind:`new_enrollment`}}}}async function iB(e,t){if(!e.onEmailOtpBaseFactorRequired)throw Error(`Choose the Email OTP method to use for the linked device`);let n=await e.onEmailOtpBaseFactorRequired(t);if(!sB(t,n))throw Error(`The selected Email OTP method is unavailable for this linked device`);let r=await e.transport.resolveEmailOtpBaseFactorV1({linkSessionId:e.linkSessionId,request:{kind:`select`,expectedRevision:e.sessionRevision,baseWalletAuthMethodId:n},authentication:e.authentication});if(aB(r,e.sessionRevision),r.resolution.kind!==`selected`||r.resolution.choice.baseWalletAuthMethodId!==n)throw Error(`The selected Email OTP method is unavailable for this linked device`);return{kind:`email_otp`,targetEmail:oB(e.targetEmail),enrollment:{kind:`existing_enrollment`},baseWalletAuthMethodId:n}}function aB(e,t){if(e.revision!==t)throw e.resolution.kind===`unavailable`?Error(`linked-device Email OTP target-factor resolution failed: ${e.resolution.reason}`):Error(`linked-device Email OTP target-factor resolution changed the session`)}function oB(e){if(!e)throw Error(`Email OTP linked-device QR omitted its target email`);return e}function sB(e,t){for(let n of e)if(n.baseWalletAuthMethodId===t)return!0;return!1}function cB(e){switch(e.outcome){case`pending`:return;case`replayed`:if(e.replay.state===`pending`)return;throw Error(`linked-device approval replay returned an unsupported session state`);default:{let t=e;throw Error(`unsupported linked-device approval result: ${String(t)}`)}}}async function lB(e){let t=null,n=0;for(;Date.now()<e.expiresAtMs&&(t=await e.transport.getSourceContributionPreparationV1({linkSessionId:e.initialApproval.linkSessionId,authentication:e.authentication}),!t);)await _B(n),n+=1;if(!t)throw new X(`Device-link approval expired before target source preparation was published`,Z.SESSION_EXPIRED,`registration`);let r=await dB({preparation:t,ports:e.sourceContribution,ed25519ExportRootCapability:e.ed25519ExportRootCapability,authentication:e.authentication}),i=uB(e.initialApproval,r);pB(await e.transport.recordSourceContributionV1({approval:i,authentication:e.authentication}))}function uB(e,t){return e.targetFactor.kind,ur({linkSessionId:e.linkSessionId,walletId:e.walletId,enrollmentId:e.enrollmentId,deviceId:e.deviceId,linkPublicKeyB64u:e.linkPublicKeyB64u,devicePublicKeyB64u:e.devicePublicKeyB64u,targetFactor:e.targetFactor,permission:e.permission,ownerAuthorization:e.ownerAuthorization,approvedAtMs:e.approvedAtMs,expiresAtMs:e.expiresAtMs,sourceContribution:t})}async function dB(e){let t=e.preparation[0];if(!t)throw Error(`source contribution preparation is empty`);if(fB(t)){if(!e.ed25519ExportRootCapability)throw Error(`Ed25519 export-root capability is required for source contribution`);let n=await e.ports.ed25519.produceSourceContributionV1({preparation:t,capability:e.ed25519ExportRootCapability,authentication:e.authentication}),r=e.preparation[1];if(!r)return[n];if(fB(r))throw Error(`source contribution preparation repeats Ed25519`);return[n,await e.ports.ecdsa.produceSourceContributionV1({preparation:r})]}if(e.preparation.length!==1)throw Error(`ECDSA source contribution preparation is out of order`);return[await e.ports.ecdsa.produceSourceContributionV1({preparation:t})]}function fB(e){return`kind`in e}function pB(e){if(e.state.state!==`authority_pending_local_install`&&e.state.state!==`active`)throw Error(`source contribution acknowledgement did not commit the linked device`)}async function mB(e){if(e.exportRootRequirement===`not_required`)return;if(!e.ed25519ExportRootCapability)throw Error(`Ed25519 export-root capability is required for this authority`);let t=null,n=0;for(;Date.now()<e.expiresAtMs;){if(!t){let n=await e.transport.getEd25519ExportRootRecipientV1({linkSessionId:e.linkSessionId,authentication:e.authentication});if(n){if(String(n.linkSessionId)!==String(e.linkSessionId)||String(n.walletId)!==String(e.walletId)||String(n.enrollmentId)!==String(e.enrollmentId)||String(n.deviceId)!==String(e.deviceId))throw Error(`Ed25519 export-root recipient differs from the approved linked-device session`);t=await e.ed25519ExportRoot.sealForLinkedDeviceV1({recipient:n,capability:e.ed25519ExportRootCapability,sealedAtMs:Date.now()})}}if(t)try{await e.transport.submitEd25519ExportRootPackageV1({submission:{kind:`linked_device_ed25519_export_root_submission_v1`,linkSessionId:e.linkSessionId,package:t},authentication:e.authentication});return}catch(e){let t=hB(e);if(t!==null&&t!==408&&t!==429&&t<500)throw e}await _B(n),n+=1}throw new X(`Device-link approval expired before the export root recipient was published`,Z.SESSION_EXPIRED,`registration`)}function hB(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Reflect.get(e,`status`);return typeof t==`number`&&Number.isSafeInteger(t)?t:null}function gB(e,t){setTimeout(e,Tz(250,t))}async function _B(e){await new Promise(t=>gB(t,e))}async function vB(e){let t=await e.ed25519ExportRoot.createRecipientV1({identity:e.identity,registeredAtMs:e.registeredAtMs});try{await e.transport.registerEd25519ExportRootRecipientV1({recipient:t.registration})}catch(n){throw await bB(e.ed25519ExportRoot,t),n}return t}async function yB(e){let t=e.nowMs??Date.now,n=await xB({transport:e.transport,recipient:e.recipient.registration,expiresAtMs:e.expiresAtMs,assertCurrentRun:e.assertCurrentRun,waitForPollV1:e.waitForPollV1,now:t});return await e.ed25519ExportRoot.acceptTransferV1({recipient:e.recipient,transferPackage:n,replacementEnvelope:e.replacementEnvelope,replacementFactorSecret:e.replacementFactorSecret})}async function bB(e,t){try{await e.discardRecipientV1(t)}catch{}}async function xB(e){let t=S(e.recipient.linkSessionId);if(!t.ok)throw Error(t.error.message);let n=0;for(;e.now()<e.expiresAtMs;){e.assertCurrentRun();let r=await e.transport.getEd25519ExportRootPackageV1({linkSessionId:t.value});if(r){if(!SB(r,e.recipient))throw new X(`Device-link Ed25519 export-root package is addressed to another device`,Z.REGISTRATION_FAILED,`registration`);return r}await e.waitForPollV1(n),n+=1}throw new X(`Device-link session expired before the Ed25519 export root was sealed`,Z.SESSION_EXPIRED,`registration`)}function SB(e,t){return e.linkSessionId===t.linkSessionId&&e.walletId===t.walletId&&e.walletKeyId===t.walletKeyId&&e.enrollmentId===t.enrollmentId&&e.deviceId===t.deviceId&&e.applicationBindingDigestB64u===t.applicationBindingDigestB64u&&e.registeredPublicKeyB64u===t.registeredPublicKeyB64u&&e.targetFactor.kind===t.targetFactor.kind&&e.revocationEpoch===t.revocationEpoch&&e.recipientPublicKeyB64u===t.recipientPublicKeyB64u}function CB(e){if(e.binding.kind!==`ed25519_yao_client_root_v1`)throw Error(`Ed25519 export-root replacement binding has the wrong custody kind`);if(!Number.isSafeInteger(e.createdAtMs)||e.createdAtMs<0)throw Error(`Ed25519 export-root replacement timestamp is invalid`);return{envelopeId:e.envelopeId,walletId:e.walletId,ownership:e.ownership,binding:e.binding,factor:e.factor,createdAtMs:e.createdAtMs}}function wB(e){return{async createRecipientV1(t){let n=OB(await e.requestOperation({kind:`walletCustodyCeremony`,request:{type:`createLinkedDeviceEd25519ExportRootRecipient`,payload:{}}}),`Ed25519 export-root recipient`);return{recipientHandleId:kB(n.recipientHandleId),registration:Mn({kind:`linked_device_ed25519_export_root_recipient_v1`,linkSessionId:t.identity.linkSessionId,walletId:t.identity.walletId,walletKeyId:t.identity.walletKeyId,enrollmentId:t.identity.enrollmentId,deviceId:t.identity.deviceId,transferAlg:Tn,applicationBindingDigestB64u:t.identity.applicationBindingDigestB64u,registeredPublicKeyB64u:t.identity.registeredPublicKeyB64u,targetFactor:t.identity.targetFactor,revocationEpoch:t.identity.revocationEpoch,recipientPublicKeyB64u:Vn(n.recipientPublicKeyB64u),registeredAtMs:t.registeredAtMs})}},async sealForLinkedDeviceV1(t){let n=t.recipient;if(t.capability.walletId!==String(n.walletId))throw Error(`Ed25519 export-root capability names another wallet`);let r=Bn({linkSessionId:n.linkSessionId,walletId:n.walletId,walletKeyId:n.walletKeyId,targetFactor:n.targetFactor,enrollmentId:n.enrollmentId,deviceId:n.deviceId,revocationEpoch:n.revocationEpoch,applicationBindingDigestB64u:n.applicationBindingDigestB64u,registeredPublicKeyB64u:n.registeredPublicKeyB64u,recipientPublicKeyB64u:n.recipientPublicKeyB64u}),i=OB(await e.requestOperation({kind:`walletCustodyCeremony`,request:{type:`sealEd25519ExportRootForLinkedDevice`,payload:{capability:t.capability,transferBindingJson:hn(r)}}}),`Ed25519 export-root seal`);return{kind:`linked_device_ed25519_export_root_package_v1`,linkSessionId:n.linkSessionId,walletId:n.walletId,walletKeyId:n.walletKeyId,enrollmentId:n.enrollmentId,deviceId:n.deviceId,transferAlg:Tn,applicationBindingDigestB64u:n.applicationBindingDigestB64u,registeredPublicKeyB64u:n.registeredPublicKeyB64u,targetFactor:n.targetFactor,revocationEpoch:n.revocationEpoch,recipientPublicKeyB64u:n.recipientPublicKeyB64u,ephemeralPublicKeyB64u:Vn(i.ephemeralPublicKeyB64u,`Ed25519 export-root ephemeralPublicKeyB64u`),nonceB64u:Ve(i.nonceB64u,`Ed25519 export-root nonceB64u`),sealedExportRootB64u:Me(i.sealedExportRootB64u,`Ed25519 export-root sealedExportRootB64u`),bindingDigestB64u:De(i.bindingDigestB64u,`Ed25519 export-root bindingDigestB64u`),ciphertextDigestB64u:De(i.ciphertextDigestB64u,`Ed25519 export-root ciphertextDigestB64u`),sealedAtMs:t.sealedAtMs}},async acceptTransferV1(t){let n=t.recipient.registration,r=t.transferPackage;if(!TB(r,n))throw Error(`Ed25519 export-root package is addressed to another device`);let i=Bn({linkSessionId:n.linkSessionId,walletId:n.walletId,walletKeyId:n.walletKeyId,targetFactor:n.targetFactor,enrollmentId:n.enrollmentId,deviceId:n.deviceId,revocationEpoch:n.revocationEpoch,applicationBindingDigestB64u:n.applicationBindingDigestB64u,registeredPublicKeyB64u:n.registeredPublicKeyB64u,recipientPublicKeyB64u:n.recipientPublicKeyB64u}),a=t.replacementEnvelope;if(a.walletId!==n.walletId||a.binding.kind!==`ed25519_yao_client_root_v1`||a.binding.walletKeyId!==n.walletKeyId||a.binding.linkSessionId!==n.linkSessionId||a.binding.enrollmentId!==n.enrollmentId||a.binding.deviceId!==n.deviceId||a.binding.applicationBindingDigestB64u!==n.applicationBindingDigestB64u||a.binding.registeredPublicKeyB64u!==n.registeredPublicKeyB64u||a.binding.revocationEpoch!==n.revocationEpoch||!EB(n.targetFactor,a.factor))throw Error(`Ed25519 export-root replacement envelope identity is invalid`);let o=Xt({walletId:a.walletId,envelopeId:a.envelopeId,factor:a.factor,envelopeRevision:Te(1),binding:a.binding,ownership:a.ownership}),s=t.replacementFactorSecret.slice();try{let n=OB(await e.requestOperation({kind:`walletCustodyCeremony`,request:{type:`acceptLinkedDeviceEd25519ExportRoot`,payload:{recipientHandleId:t.recipient.recipientHandleId,transferBindingJson:hn(i),ephemeralPublicKeyB64u:String(r.ephemeralPublicKeyB64u),nonceB64u:String(r.nonceB64u),sealedExportRootB64u:String(r.sealedExportRootB64u),bindingDigestB64u:String(r.bindingDigestB64u),ciphertextDigestB64u:String(r.ciphertextDigestB64u),replacementEnvelopeBindingJson:o,replacementFactorSecret:s.buffer},transfer:[s.buffer]}}),`Ed25519 export-root acceptance`);return{envelope:Qt(Kt({envelopeId:a.envelopeId,walletId:a.walletId,ownership:a.ownership,binding:a.binding,factor:a.factor,envelopeRevision:Te(1),nonceB64u:Ve(n.nonceB64u,`Ed25519 export-root resealed nonceB64u`),sealedCustodySecretB64u:Me(n.sealedExportRootB64u,`Ed25519 export-root resealed ciphertext`),aadHashB64u:De(n.aadHashB64u,`Ed25519 export-root resealed aadHashB64u`),ciphertextDigestB64u:De(n.ciphertextDigestB64u,`Ed25519 export-root resealed ciphertextDigestB64u`),lifecycle:Wt({activatedAtMs:a.createdAtMs}),createdAtMs:a.createdAtMs,updatedAtMs:a.createdAtMs}))}}finally{s.byteLength>0&&s.fill(0)}},async discardRecipientV1(t){await e.requestOperation({kind:`walletCustodyCeremony`,request:{type:`discardLinkedDeviceEd25519ExportRootRecipient`,payload:{recipientHandleId:t.recipientHandleId}}})}}}function TB(e,t){return e.linkSessionId===t.linkSessionId&&e.walletId===t.walletId&&e.walletKeyId===t.walletKeyId&&e.enrollmentId===t.enrollmentId&&e.deviceId===t.deviceId&&e.applicationBindingDigestB64u===t.applicationBindingDigestB64u&&e.registeredPublicKeyB64u===t.registeredPublicKeyB64u&&e.targetFactor.kind===t.targetFactor.kind&&e.revocationEpoch===t.revocationEpoch&&e.recipientPublicKeyB64u===t.recipientPublicKeyB64u}function EB(e,t){switch(e.kind){case`passkey_prf`:return t.kind===`passkey`;case`email_otp`:return t.kind===`email_otp`}return DB(e)}function DB(e){throw Error(`Unsupported linked-device target factor kind: ${String(e)}`)}function OB(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`${t} returned no result`);return e}function kB(e){if(typeof e!=`string`||!e||e.trim()!==e)throw Error(`Ed25519 export-root recipient handle is invalid`);return e}const AB=`linked_device_committed_resume_v1`,jB=`linked_device_pending_ack_v1`,MB=`device-linking/committed-resume/v1/`,NB=`device-linking/pending-ack/v1/`,PB=[`kind`,`acknowledgement`],FB=[`kind`,`linkSessionId`,`walletId`,`enrollmentId`,`authorityId`,`authMethodId`,`deviceId`,`targetFactorKind`,`targetFactorVerificationDigestB64u`,`authorityDigestB64u`,`signerActivationSetDigestB64u`,`signerActivations`,`packageSetDigestB64u`,`committedAtMs`];function IB(e){return`${MB}${String(e)}`}function LB(e){return`${NB}${String(e)}`}function RB(e){return{kind:jB,acknowledgement:er(e)}}function zB(e){let t=WB(e);if(t===null||!Lc(t,PB)||t.kind!==jB)return null;try{return{kind:jB,acknowledgement:er(t.acknowledgement)}}catch{return null}}function BB(e){let t=e.committed.authority;if(t.provenance.kind!==`device_link`)throw Error(`committed link authority provenance is invalid`);if(t.provenance.linkSessionId!==e.linkSessionId)throw Error(`committed link session identity differs from authority provenance`);if(e.committed.authMethod.walletAuthMethodId!==e.targetFactor.authMethod.walletAuthMethodId)throw Error(`committed link auth method differs from target factor`);if(!Number.isSafeInteger(e.committedAtMs)||e.committedAtMs<=0)throw Error(`committed link resume timestamp is invalid`);return{kind:AB,linkSessionId:e.linkSessionId,walletId:t.walletId,enrollmentId:t.provenance.enrollmentId,authorityId:t.authorityId,authMethodId:e.committed.authMethod.walletAuthMethodId,deviceId:t.principal.deviceId,targetFactorKind:e.targetFactor.kind,targetFactorVerificationDigestB64u:e.targetFactor.verificationDigestB64u,authorityDigestB64u:t.authorityDigestB64u,signerActivationSetDigestB64u:t.signerActivationSetDigestB64u,signerActivations:t.signerActivations,packageSetDigestB64u:e.committed.packageSetDigestB64u,committedAtMs:e.committedAtMs}}function VB(e){let t=BB({linkSessionId:e.linkSessionId,committed:e.committed,targetFactor:e.targetFactor,committedAtMs:e.resume.committedAtMs});return e.resume.authorityId===t.authorityId?e.resume.linkSessionId!==t.linkSessionId||e.resume.enrollmentId!==t.enrollmentId?{kind:`package_set_digest_mismatch`,expectedPackageSetDigestB64u:e.resume.packageSetDigestB64u,actualPackageSetDigestB64u:t.packageSetDigestB64u}:e.resume.walletId===t.walletId?e.resume.authMethodId===t.authMethodId?e.resume.deviceId===t.deviceId?e.resume.targetFactorKind!==t.targetFactorKind||e.resume.targetFactorVerificationDigestB64u!==t.targetFactorVerificationDigestB64u?{kind:`installation_receipt_mismatch`,field:`targetFactorVerificationDigestB64u`}:e.resume.signerActivationSetDigestB64u===t.signerActivationSetDigestB64u?e.resume.authorityDigestB64u!==t.authorityDigestB64u||e.resume.packageSetDigestB64u!==t.packageSetDigestB64u?{kind:`package_set_digest_mismatch`,expectedPackageSetDigestB64u:e.resume.packageSetDigestB64u,actualPackageSetDigestB64u:t.packageSetDigestB64u}:KB(e.resume.signerActivations,t.signerActivations)?null:{kind:`installation_receipt_mismatch`,field:`installedActivationRefs`}:{kind:`installation_receipt_mismatch`,field:`installedActivationRefs`}:{kind:`installation_receipt_mismatch`,field:`deviceId`}:{kind:`installation_receipt_mismatch`,field:`authMethodId`}:{kind:`installation_receipt_mismatch`,field:`walletId`}:{kind:`authority_id_mismatch`,expectedAuthorityId:e.resume.authorityId,actualAuthorityId:t.authorityId}}function HB(e){let t=WB(e);if(t===null||!Lc(t,FB)||t.kind!==AB)return null;let n=S(t.linkSessionId),i=_(t.walletId),a=f(t.enrollmentId),o=s(t.authorityId),c=r(t.authMethodId),l=vt(t.deviceId);if(!n.ok||!i.ok||!a.ok||!o.ok||!c.ok||!l.ok||t.targetFactorKind!==`verified_passkey_target_v1`&&t.targetFactorKind!==`verified_email_otp_target_v1`)return null;let u=Tr(t.signerActivations);if(!u.ok)return null;let d=t.committedAtMs;if(typeof d!=`number`||!Number.isSafeInteger(d)||d<=0)return null;try{return{kind:AB,linkSessionId:n.value,walletId:i.value,enrollmentId:a.value,authorityId:o.value,authMethodId:c.value,deviceId:l.value,targetFactorKind:t.targetFactorKind,targetFactorVerificationDigestB64u:Tt(t.targetFactorVerificationDigestB64u),authorityDigestB64u:Tt(t.authorityDigestB64u),signerActivationSetDigestB64u:Tt(t.signerActivationSetDigestB64u),signerActivations:u.value,packageSetDigestB64u:Tt(t.packageSetDigestB64u),committedAtMs:d}}catch{return null}}async function UB(e){let[t,n]=await Promise.all([e.installation.listCommittedDeliveryResumesV1(),e.installation.listPendingActivationAcknowledgementsV1()]),r=t.filter(t=>t.authorityId===e.authorityId),i=n.filter(t=>t.authorityId===e.authorityId);if(i.length===0)return{kind:`none`};for(let t of i){let n=r.find(e=>e.linkSessionId===t.linkSessionId&&e.packageSetDigestB64u===t.packageSetDigestB64u);if(!n)throw Error(`durable linked-device acknowledgement has no matching resume`);if(n.walletId!==e.walletId||n.authMethodId!==e.authMethodId)throw Error(`durable linked-device acknowledgement identity changed`);await e.transport.acknowledgeLocalAuthorityActivationWithWalletSessionV1({acknowledgement:t,operationCredential:e.operationCredential}),await e.installation.clearPendingActivationAcknowledgementV1({authorityId:t.authorityId}),await e.installation.clearCommittedDeliveryResumeV1({authorityId:t.authorityId})}return{kind:`replayed`}}function WB(e){return GB(e)?e:null}function GB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;try{let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}catch{return!1}}function KB(e,t){let n=Ar(e),r=Ar(t);return n.length===r.length&&n.every((e,t)=>e===r[t])}function qB(e,t){let n=String(e.walletId);switch(e.kind){case`passkey`:{let t=String(e.credentialIdB64u);return{profile:{profileId:n,defaultSignerSlot:1,passkeyCredential:{id:t,rawId:t}},authenticator:{profileId:n,signerSlot:1,credentialId:t,credentialPublicKey:F(e.credentialPublicKeyB64u),registered:new Date(e.createdAtMs).toISOString(),syncedAt:new Date(e.updatedAtMs).toISOString()},localAuthMethod:null}}case`email_otp`:{if(t.kind!==`verified_email_otp_target_v1`||t.authMethod.walletAuthMethodId!==e.walletAuthMethodId||t.authMethod.walletId!==e.walletId||t.authMethod.emailHashHex!==e.emailHashHex||t.authMethod.registrationAuthorityId!==e.registrationAuthorityId)throw Error(`linked Email OTP target factor does not match the committed auth method`);let r=Zr({walletId:e.walletId,provider:t.enrollment.kind===`existing_enrollment`?`google`:`email`,providerUserId:t.providerUserId,emailHashHex:e.emailHashHex});return{profile:{profileId:n,defaultSignerSlot:1},authenticator:null,localAuthMethod:{version:`wallet_auth_method_v1`,kind:`email_otp`,status:`active`,localStatus:`synced`,walletId:e.walletId,emailHashHex:e.emailHashHex,registrationAuthorityId:e.registrationAuthorityId,authority:{walletId:r.walletId,factor:r.factor,verifier:r.verifier,bindingId:e.walletAuthMethodId},createdAtMs:e.createdAtMs,updatedAtMs:e.updatedAtMs}}}default:{let t=e;throw Error(`Unsupported linked-device auth method: ${String(t)}`)}}}function JB(e){return{...YB({indexedDB:e.indexedDB}),persistCommittedDeliveryResumeV1:async t=>{let n=BB(t);await e.indexedDB.setAppState(IB(n.authorityId),n)},readCommittedDeliveryResumeV1:async({authorityId:t})=>HB(await e.indexedDB.getAppState(IB(t))),persistPendingActivationAcknowledgementV1:async({acknowledgement:t})=>{let n=RB(t);await e.indexedDB.setAppState(LB(t.authorityId),n)},readPendingActivationAcknowledgementV1:async({authorityId:t})=>zB(await e.indexedDB.getAppState(LB(t)))?.acknowledgement??null,readLocalAuthorityInstallationReceiptV1:async({authorityId:t})=>await e.indexedDB.getLocalAuthorityInstallationReceipt(t),installLocalAuthorityV1:t=>XB({...t,...e}),publishLocalAuthorityActivationV1:({active:t,expectedLockGeneration:n})=>ZB({indexedDB:e.indexedDB,active:t,expectedLockGeneration:n}),finalizeLocalAuthorityActivationV1:({active:t,operationCredential:n,expectedLockGeneration:r})=>QB({indexedDB:e.indexedDB,active:t,operationCredential:n,expectedLockGeneration:r})}}function YB(e){return{listCommittedDeliveryResumesV1:async()=>(await e.indexedDB.listAppStateEntriesByPrefix(MB)).flatMap(e=>{if(e.value===null)return[];let t=HB(e.value);if(!t||IB(t.authorityId)!==e.key)throw Error(`durable linked-device delivery resume is corrupt`);return[t]}),listPendingActivationAcknowledgementsV1:async()=>(await e.indexedDB.listAppStateEntriesByPrefix(NB)).flatMap(e=>{if(e.value===null)return[];let t=zB(e.value);if(!t||LB(t.acknowledgement.authorityId)!==e.key)throw Error(`durable linked-device acknowledgement is corrupt`);return[t.acknowledgement]}),clearCommittedDeliveryResumeV1:async({authorityId:t})=>{await e.indexedDB.setAppState(IB(t),null)},clearPendingActivationAcknowledgementV1:async({authorityId:t})=>{await e.indexedDB.setAppState(LB(t),null)}}}async function XB(e){let t=await e.indexedDB.getLocalAuthorityInstallationReceipt(e.committed.authority.authorityId);if(t)return aV({committed:e.committed,targetFactor:e.targetFactor,receipt:t}),t;let n=await e.sealing.sealCommittedAuthorityPackagesV1({committed:e.committed,targetFactor:e.targetFactor,keyMaterial:e.keyMaterial,resealedExportRoot:e.resealedExportRoot});iV({committed:e.committed,sealed:n});let r=qB(e.committed.authMethod,e.targetFactor),i=e.nowMs();if(!Number.isSafeInteger(i)||i<=0)throw Error(`local authority installation clock is invalid`);let a={kind:`local_authority_installation_receipt_v1`,authorityId:e.committed.authority.authorityId,walletId:e.committed.authority.walletId,authMethodId:e.committed.authMethod.walletAuthMethodId,deviceId:e.committed.authority.principal.deviceId,packageSetDigestB64u:e.committed.packageSetDigestB64u,installedActivationRefs:e.committed.authority.signerActivations,installedRecordSetDigestB64u:n.installedRecordSetDigestB64u,targetFactorVerificationDigestB64u:e.targetFactor.verificationDigestB64u,installedAtMs:i},o=await e.indexedDB.installLocalAuthority({authority:e.committed.authority,authMethod:e.committed.authMethod,profile:r.profile,authenticator:r.authenticator,localAuthMethod:r.localAuthMethod,signerMaterials:n.signerMaterials,exportRoot:n.exportRoot,receipt:a,expectedLockGeneration:e.expectedLockGeneration});switch(o.kind){case`installed`:case`idempotent_replay`:return o.receipt;case`stale_lock_generation`:throw Error(`local authority installation lock generation is stale (expected ${o.expectedLockGeneration}, actual ${o.actualLockGeneration})`);case`integrity_error`:throw Error(`local authority installation integrity error: ${o.reason}`)}}async function ZB(e){let t=await e.indexedDB.publishLocalAuthorityActivation({authority:e.active.authority,authMethod:e.active.authMethod,expectedLockGeneration:e.expectedLockGeneration});switch(t.kind){case`published`:return;case`stale_lock_generation`:throw Error(`local authority activation lock generation is stale (expected ${t.expectedLockGeneration}, actual ${t.actualLockGeneration})`);case`wallet_locked`:throw Error(`local authority activation refused while wallet is locked at generation ${t.lockGeneration}`);default:throw Error(`local authority activation publication returned an unknown result`)}}async function QB(e){let t={authority:e.active.authority,authMethod:e.active.authMethod,walletSession:e.active.walletSession,operationCredential:e.operationCredential,expectedLockGeneration:e.expectedLockGeneration},n=await e.indexedDB.finalizeLocalAuthorityActivation(t);switch(n.kind){case`finalized`:return;case`stale_lock_generation`:throw Error(`local authority activation lock generation is stale (expected ${n.expectedLockGeneration}, actual ${n.actualLockGeneration})`);case`wallet_locked`:throw Error(`local authority activation refused while wallet is locked at generation ${n.lockGeneration}`);default:throw Error(`local authority activation returned an unknown result`)}}async function $B(e){let t=tV({committed:e.committed,sessionState:e.sessionState});if(t)return t;let n=await e.installation.readCommittedDeliveryResumeV1({authorityId:e.committed.authority.authorityId});if(n){let t=VB({resume:n,linkSessionId:e.linkSessionId,committed:e.committed,targetFactor:e.targetFactor});if(t)return{kind:`integrity_error`,reason:t}}else await e.installation.persistCommittedDeliveryResumeV1({linkSessionId:e.linkSessionId,committed:e.committed,targetFactor:e.targetFactor,committedAtMs:e.nowMs()});let r=await e.installation.installLocalAuthorityV1({committed:e.committed,targetFactor:e.targetFactor,keyMaterial:e.keyMaterial,resealedExportRoot:e.resealedExportRoot,expectedLockGeneration:e.expectedLockGeneration}),i=await e.transport.activateInstalledAuthorityV1({linkSessionId:e.linkSessionId,receipt:r});switch(i.kind){case`pending_local_install`:return{kind:`pending_local_install`,authorityId:i.authorityId,packageSetDigestB64u:r.packageSetDigestB64u};case`integrity_error`:return i;case`active`:{let t=nV({active:i,receipt:r});if(t)return t;await e.installation.publishLocalAuthorityActivationV1({active:i,expectedLockGeneration:e.expectedLockGeneration}),await Kn(i.sealedDelivery),await rV({active:i,receipt:r,linkSessionId:e.linkSessionId,deliveryRecipientPublicKey65B64u:e.deliveryRecipientPublicKey65B64u}),await e.installation.persistPendingActivationAcknowledgementV1({acknowledgement:await eV({active:i,receipt:r,linkSessionId:e.linkSessionId,acknowledgedAtMs:e.nowMs()})});let n=await e.keyMaterialPort.openWalletSessionCredentialDeliveryV1({keyMaterial:e.keyMaterial,delivery:i.sealedDelivery,expected:{linkSessionId:e.linkSessionId,walletId:i.walletSession.walletId,authorityId:i.walletSession.authorityId,walletAuthMethodId:i.walletSession.authMethodId,authorizationId:i.walletSession.authorizationId,walletSessionId:i.sealedDelivery.aad.walletSessionId,quotaId:i.walletSession.quotaId,deliveryBinding:i.deliveryBinding,credentialDigestB64u:i.sealedDelivery.aad.credentialDigestB64u,installationReceiptDigestB64u:i.sealedDelivery.installationReceiptDigestB64u,recipientPublicKey65B64u:e.deliveryRecipientPublicKey65B64u,issuedAtMs:i.walletSession.issuedAtMs,expiresAtMs:i.walletSession.expiresAtMs}});return await e.installation.finalizeLocalAuthorityActivationV1({active:i,operationCredential:n,expectedLockGeneration:e.expectedLockGeneration}),{kind:`active`,session:i.walletSession,operationCredential:n}}}}async function eV(e){if(!Number.isSafeInteger(e.acknowledgedAtMs)||e.acknowledgedAtMs<=0)throw Error(`linked-device acknowledgement clock is invalid`);return{kind:`local_authority_activation_final_ack_v1`,linkSessionId:e.linkSessionId,authorityId:e.active.authority.authorityId,packageSetDigestB64u:e.receipt.packageSetDigestB64u,authorizationId:e.active.sealedDelivery.aad.authorizationId,walletSessionId:e.active.sealedDelivery.aad.walletSessionId,credentialDigestB64u:e.active.sealedDelivery.aad.credentialDigestB64u,installationReceiptDigestB64u:await rr(e.receipt),acknowledgedAtMs:e.acknowledgedAtMs}}function tV(e){return e.sessionState.state===`provisioning`?null:e.committed.authority.authorityId===e.sessionState.authorityId?e.sessionState.state!==`active`&&e.committed.packageSetDigestB64u!==e.sessionState.packageSetDigestB64u?{kind:`integrity_error`,reason:{kind:`package_set_digest_mismatch`,expectedPackageSetDigestB64u:e.sessionState.packageSetDigestB64u,actualPackageSetDigestB64u:e.committed.packageSetDigestB64u}}:null:{kind:`integrity_error`,reason:{kind:`authority_id_mismatch`,expectedAuthorityId:e.sessionState.authorityId,actualAuthorityId:e.committed.authority.authorityId}}}function nV(e){return e.active.authority.authorityId===e.receipt.authorityId?e.active.authority.walletId!==e.receipt.walletId||e.active.walletSession.walletId!==e.receipt.walletId?{kind:`integrity_error`,reason:{kind:`installation_receipt_mismatch`,field:`walletId`}}:e.active.authMethod.walletAuthMethodId!==e.receipt.authMethodId||e.active.walletSession.authMethodId!==e.receipt.authMethodId?{kind:`integrity_error`,reason:{kind:`installation_receipt_mismatch`,field:`authMethodId`}}:null:{kind:`integrity_error`,reason:{kind:`authority_id_mismatch`,expectedAuthorityId:e.receipt.authorityId,actualAuthorityId:e.active.authority.authorityId}}}async function rV(e){let t=e.active.sealedDelivery.aad,n=e.active.deliveryBinding,r=e.active.sealedDelivery.installationReceiptDigestB64u,i=await rr(e.receipt);if(n.namespace!==t.namespace||n.orgId!==t.orgId||n.projectId!==t.projectId||n.envId!==t.envId||n.tenantId!==t.tenantId||n.principalId!==t.principalId||t.linkSessionId!==e.linkSessionId||t.walletId!==e.receipt.walletId||t.authorityId!==e.receipt.authorityId||t.walletAuthMethodId!==e.receipt.authMethodId||t.authorizationId!==e.active.walletSession.authorizationId||t.quotaId!==e.active.walletSession.quotaId||String(t.principalId)!==`linked-device:${String(e.active.authority.principal.deviceId)}`||t.recipientPublicKey65B64u!==e.deliveryRecipientPublicKey65B64u||t.issuedAtMs!==e.active.walletSession.issuedAtMs||t.expiresAtMs!==e.active.walletSession.expiresAtMs||r!==i)throw Error(`linked-device Wallet Session credential delivery identity changed`)}function iV(e){let t=e.committed.authority,n=e.committed.authMethod,r=cV(t.signerActivations);if(e.sealed.signerMaterials.length!==r.length)throw Error(`sealed signer material count does not match committed authority`);for(let i=0;i<r.length;i+=1){let a=r[i],o=e.sealed.signerMaterials[i];if(!o||o.authorityId!==t.authorityId||o.walletAuthMethodId!==n.walletAuthMethodId||o.keyFamily!==a.keyFamily||o.activationId!==a.materialActivation.activationId||o.materialActivation.activationId!==a.materialActivation.activationId)throw Error(`sealed signer material identity does not match committed authority`)}if((sV(t.signerActivations)&&t.permissions.includes(`export_keys`))!==(e.sealed.exportRoot!==null))throw Error(`sealed Ed25519 export root presence does not match committed authority`);if(e.sealed.exportRoot&&(e.sealed.exportRoot.authorityId!==t.authorityId||e.sealed.exportRoot.walletAuthMethodId!==n.walletAuthMethodId))throw Error(`sealed export root identity does not match committed authority`);Tt(e.sealed.installedRecordSetDigestB64u)}function aV(e){if(e.receipt.authorityId!==e.committed.authority.authorityId||e.receipt.walletId!==e.committed.authority.walletId||e.receipt.authMethodId!==e.committed.authMethod.walletAuthMethodId||e.receipt.deviceId!==e.committed.authority.principal.deviceId||e.receipt.packageSetDigestB64u!==e.committed.packageSetDigestB64u||e.receipt.targetFactorVerificationDigestB64u!==e.targetFactor.verificationDigestB64u||!oV(e.receipt.installedActivationRefs,e.committed.authority.signerActivations))throw Error(`stored local authority receipt does not match committed packages`)}function oV(e,t){let n=Ar(e),r=Ar(t);if(n.byteLength!==r.byteLength)return!1;for(let e=0;e<n.byteLength;e+=1)if(n[e]!==r[e])return!1;return!0}function sV(e){return e.keyFamilies.length===2||e.keyFamilies[0]===`ed25519`}function cV(e){if(e.keyFamilies.length===1&&e.keyFamilies[0]===`ed25519`){if(!e.ed25519)throw Error(`Ed25519 activation is missing`);return[{keyFamily:`ed25519`,materialActivation:e.ed25519.materialActivation}]}if(e.keyFamilies.length===1&&e.keyFamilies[0]===`ecdsa_secp256k1`){if(!e.ecdsa)throw Error(`ECDSA activation is missing`);return[{keyFamily:`ecdsa_secp256k1`,materialActivation:e.ecdsa.materialActivation}]}if(e.keyFamilies.length===2){if(!e.ed25519||!e.ecdsa)throw Error(`combined signer activations are incomplete`);return[{keyFamily:`ed25519`,materialActivation:e.ed25519.materialActivation},{keyFamily:`ecdsa_secp256k1`,materialActivation:e.ecdsa.materialActivation}]}throw Error(`committed signer activation families are invalid`)}function lV(e,t){switch(t.targetFactor.kind){case`verified_passkey_target_v1`:return{kind:`authenticated`,walletId:e.walletId,authMethod:R.passkey};case`verified_email_otp_target_v1`:return{kind:`authenticated`,walletId:e.walletId,authMethod:R.emailOtp};default:return t.targetFactor}}function uV(){let e=S(ve(`link-session`,32));if(!e.ok)throw Error(e.error.message);return e.value}function dV(){return ve(`link-flow`,16)}function fV(e,t){try{e?.(t)}catch{}}function pV(e){console.info(`[Device2Linking]`,{flowId:e.flowId,linkSessionId:e.linkSessionId,stage:e.stage,...e.details})}function mV(e){console.error(`[Device2Linking] failed`,{flowId:e.flowId,linkSessionId:e.linkSessionId,state:e.state,error:L(e.error)})}function hV(e,t){setTimeout(e,Tz(250,t))}async function gV(e){await new Promise(t=>hV(t,e))}function _V(e){switch(e.state){case`displaying_qr`:case`expired`:case`cancelled`:return Li.STEP_01_QR_PREPARE_STARTED;case`claimed`:case`awaiting_target_factor`:case`awaiting_source_contribution`:case`provisioning`:case`authority_pending_local_install`:case`active`:return Li.STEP_02_QR_SCAN_STARTED;case`failed_before_commit`:return Li.FAILED;default:return qn(e)}}function vV(e,t){return e instanceof X?e:new X(L(e)||`Device linking failed`,Z.REGISTRATION_FAILED,t)}function yV(e){let t=L(e).toLowerCase();return t.includes(`device-linking key handle is unknown or discarded`)||t.includes(`recipient handle lost`)?`recipient_private_handle_lost`:t.includes(`linked-device wallet session credential delivery is expired`)?`sealed_delivery_expired`:null}function bV(e){switch(e){case`recipient_private_handle_lost`:case`sealed_delivery_expired`:return`The linked device is ready. Return to sign in and unlock the new method to finish setup.`;default:return e}}var xV=class extends Error{constructor(){super(`Device-link flow was cancelled or reset`),this.name=`LinkDeviceFlowSupersededError`}};async function SV(t){let n;try{n=await import(`./browser-CKS7Tq2r.js`).then(t=>e(t.default,1))}catch{throw new X(`Device-link QR generation requires the optional qrcode package`,Z.UNSUPPORTED,`generation`)}return await n.toDataURL(t,{errorCorrectionLevel:`M`,margin:2})}function CV(e){let t=Oe();return e.target.targetFactor.kind===`email_otp`?cr({linkSessionId:e.linkSessionId,linkPublicKeyB64u:e.linkPublicKeyB64u,devicePublicKeyB64u:e.devicePublicKeyB64u,requestedPermission:t,targetFactor:{kind:`email_otp`},targetEmail:Xf(e.target.targetEmail),issuedAtMs:e.issuedAtMs,expiresAtMs:e.expiresAtMs}):cr({linkSessionId:e.linkSessionId,linkPublicKeyB64u:e.linkPublicKeyB64u,devicePublicKeyB64u:e.devicePublicKeyB64u,requestedPermission:t,targetFactor:{kind:`passkey_prf`},issuedAtMs:e.issuedAtMs,expiresAtMs:e.expiresAtMs})}function wV(e){return e.targetFactor.kind===`passkey_prf`}function TV(e){return e.targetFactor.kind===`email_otp`}function EV(e){return{event:e.event,state:e.state,runEpoch:e.runEpoch,deviceId:e.deviceId,preparation:e.preparation,ordinarySignerMaterialRecipientRequests:e.ordinarySignerMaterialRecipientRequests,exportRoot:e.exportRoot}}function DV(e){if(e.kind!==`completed`||!e.factorSecret||typeof e.providerUserId!=`string`)throw Error(`linked-device Email OTP factor runtime is unavailable`);return{kind:`completed`,runEpoch:e.runEpoch,enrollment:e.enrollment,factorSecret:e.factorSecret,providerUserId:e.providerUserId}}function OV(e){throw Error(`Unknown Email OTP target activation state: ${String(e)}`)}function kV(e){throw Error(`Unknown target credential activation state: ${String(e)}`)}function AV(e){switch(e.targetFactor.kind){case`verified_passkey_target_v1`:{let t=e.targetCredentialActivationState;if(t.kind!==`factor_ready`||t.runEpoch!==e.runEpoch)throw Error(`linked-device Passkey factor runtime is unavailable`);return{factor:{kind:`passkey`,walletId:e.walletId},factorSecret32:t.factorSecret}}case`verified_email_otp_target_v1`:{let t=DV(e.emailOtpTargetActivationState);if(t.runEpoch!==e.runEpoch)throw Error(`linked-device Email OTP factor runtime is unavailable`);return{factor:{kind:`email_otp`,walletId:e.walletId,walletAuthMethodId:e.walletAuthMethodId,emailHashHex:e.targetFactor.authMethod.emailHashHex,providerIdentity:{provider:NV(t.enrollment),providerSubjectId:t.providerUserId}},factorSecret32:t.factorSecret}}default:return jV(e.targetFactor)}}function jV(e){throw Error(`Unknown verified target factor kind: ${String(e)}`)}function MV(e){e.byteLength>0&&e.fill(0)}function NV(e){return e.kind===`existing_enrollment`?`google`:`email`}function PV(e){return e.passkeyCreationOptions.rpId}function FV(e){if(!TV(e))throw Error(`linked-device Email OTP preparation is unavailable`);return e}function IV(){let e=T(ve(`linked-device-ed25519-export-root-envelope`,24,`export-root envelope ids`));if(!e.ok)throw Error(e.error.message);return e.value}function LV(){return crypto.getRandomValues(new Uint8Array(32))}async function RV(e){let t=e.factorSecret.slice();try{let n=await e.context.signingEngine.prepareEmailOtpRegistrationEnrollmentMaterialInternal({relayUrl:String(e.context.configs.network.relayer.url||``).trim(),walletId:e.walletId,userId:e.targetEmail,clientSecret32:t});if(n.emailOtpSessionHandle.kind!==`not_requested`)throw Error(`Strict linked-device Email OTP enrollment received obsolete ECDSA material`);return{enrollmentId:n.enrollmentId,enrollment:n.emailOtpEnrollment}}finally{MV(t)}}function zV(e){if(!e)throw Error(`new linked-device Email OTP enrollment material is unavailable`);return e}var BV=class{pendingActivationCompletion=null;options;ports;getAuthenticationContext;flowId;session=null;keyMaterialHandle=null;deliveryRecipientPublicKey65B64u=null;resealedExportRoot=null;targetCredentialRegistrationResult=null;committedAuthorityPackages=null;deliveryRecoveryReason=null;ordinarySignerMaterialRecipientPreparation=null;authenticatedTransport=null;subscription=null;error;cancelled=!1;runEpoch=0;generationInProgress=!1;discardInProgress=null;targetCredentialActivationState={kind:`idle`};emailOtpTargetActivationState={kind:`idle`};handledStates=new Set;sessionEventQueue=Promise.resolve();constructor(e,t,n=null){this.options=e,this.flowId=dV(),this.ports=t,this.getAuthenticationContext=n}async generateQR(){if(this.generationInProgress||this.keyMaterialHandle||this.subscription||this.session&&!this.cancelled)throw Error(`Device-link QR flow is already running`);let e=this.startRun(),t=this.ports;this.emit({phase:Li.STEP_01_QR_PREPARE_STARTED,status:`started`,message:`Preparing device link`,data:{role:`display`},interaction:{kind:`qr_display`,overlay:`show`}});try{let n=await t.keyMaterial.createBootstrapKeyMaterialV1();if(!this.isCurrentRun(e))throw this.keyMaterialHandle=n.handle,await this.discardKeyMaterial(),new xV;this.keyMaterialHandle=n.handle,this.deliveryRecipientPublicKey65B64u=n.deliveryRecipientPublicKey65B64u;let r=Date.now(),i=uV(),a=CV({linkSessionId:i,linkPublicKeyB64u:n.linkPublicKeyB64u,devicePublicKeyB64u:n.devicePublicKeyB64u,target:this.options,issuedAtMs:r,expiresAtMs:r+900*1e3}),o={state:`displaying_qr`},s=t.transport.createAuthenticatedSessionTransportV1({keyMaterial:n.handle,devicePublicKeyB64u:n.devicePublicKeyB64u});this.authenticatedTransport=s,this.session={linkSessionId:i,state:o,qrData:a},pV({flowId:this.flowId,linkSessionId:i,stage:`session_create_started`}),await s.createUnclaimedSessionV1({payload:a,state:o}),this.assertCurrentRun(e);let c=await s.subscribeSessionV1({linkSessionId:i,onEvent:this.handleSessionTransportEvent.bind(this)});if(!this.isCurrentRun(e))throw await c.close(),new xV;this.subscription=c,pV({flowId:this.flowId,linkSessionId:i,stage:`session_subscription_ready`});let l=await SV(Sn(a));this.assertCurrentRun(e);let u={qrData:a,qrCodeDataURL:l};return this.emit({phase:Li.STEP_01_QR_PREPARE_STARTED,status:`succeeded`,message:`Device-link QR ready`,data:{role:`display`},interaction:{kind:`qr_display`,overlay:`show`}}),await this.options.options?.afterCall?.(!0,u),u}catch(e){try{await this.cleanupLocalResources()}catch{}if(e instanceof xV)throw e;this.session=null,this.authenticatedTransport=null,this.handledStates.clear();let t=vV(e,`generation`);throw this.error=t,this.emitFailure(t,`generation`),fV(this.options.options?.onError,t),await this.options.options?.afterCall?.(!1,void 0,t),t}finally{this.generationInProgress=!1}}getState(){return{phase:this.session?_V(this.session.state):Li.STEP_01_QR_PREPARE_STARTED,session:this.session,...this.error?{error:this.error}:{},cancelled:this.cancelled}}async cancel(){if(this.hasCommittedDeliveryState())throw Error(`Device-link authority delivery is committed and must be resumed`);if(this.cancelled){await this.cleanupLocalResources();return}this.cancelled=!0,this.runEpoch+=1;let e=this.session,t=this.keyMaterialHandle,n=this.authenticatedTransport;try{if(e&&t&&n){let t=Date.now();switch(e.state.state){case`displaying_qr`:await n.cancelSessionV1({request:lr({linkSessionId:e.linkSessionId,requestedAtMs:t})}),this.session={...e,state:{state:`cancelled`,cancelledAtMs:t}};break;case`claimed`:case`awaiting_target_factor`:case`awaiting_source_contribution`:case`provisioning`:await this.cancelClaimedSessionV1(n,e.linkSessionId,t),this.session={...e,state:{state:`cancelled`,cancelledAtMs:t}};break;case`authority_pending_local_install`:break;case`active`:case`expired`:case`cancelled`:case`failed_before_commit`:break;default:qn(e.state)}}}finally{await this.cleanupLocalResources()}this.emit({phase:Li.CANCELLED,status:`cancelled`,message:`Device-link flow cancelled`,interaction:{kind:`qr_display`,overlay:`hide`}})}async resolveLinkIdentityV1(e){let t=this.targetCredentialRegistrationResult;if(t&&t.linkSessionId===e)return{enrollmentId:t.enrollmentId,deviceId:t.deviceId};let n=await this.requireAuthenticatedTransport().getTargetPreparationV1({linkSessionId:e,deliveryRecipientPublicKey65B64u:this.requireDeliveryRecipientPublicKey65B64u()});return{enrollmentId:n.enrollmentId,deviceId:n.deviceId}}async cancelClaimedSessionV1(e,t,n){let r=await this.resolveLinkIdentityV1(t);await e.cancelSessionV1({request:Wn({linkSessionId:t,enrollmentId:r.enrollmentId,deviceId:r.deviceId,reason:`user_cancelled`,requestedAtMs:n})})}async handleSessionEvent(e){if(this.cancelled||this.deliveryRecoveryReason!==null||!this.session||e.linkSessionId!==this.session.linkSessionId)return;pV({flowId:this.flowId,linkSessionId:e.linkSessionId,stage:`session_event_received`,details:{state:e.state.state,emittedAtMs:e.emittedAtMs,runEpoch:this.runEpoch}});let t=this.runEpoch;if(this.handledStates.has(e.state.state)){pV({flowId:this.flowId,linkSessionId:e.linkSessionId,stage:`session_event_already_handled`,details:{state:e.state.state}});return}switch(this.session={...this.session,state:e.state},this.handledStates.add(e.state.state),e.state.state){case`displaying_qr`:return;case`claimed`:this.emit({phase:Li.STEP_02_QR_SCAN_STARTED,status:`running`,message:`Device link claimed by owner`,data:{role:`display`},interaction:{kind:`qr_display`,overlay:`show`}});return;case`awaiting_target_factor`:await this.prepareTargetCredentialActivation(e,t);return;case`awaiting_source_contribution`:return;case`provisioning`:case`authority_pending_local_install`:{let n=await this.activateAuthorityForStateV1(e.state,t);if(n.kind===`pending_local_install`)return;if(n.kind===`integrity_error`)throw new X(`Linked-device authority installation failed: ${n.reason}`,Z.REGISTRATION_FAILED,`registration`);if(n.kind===`failed_before_commit`)throw new X(`Linked-device authority activation cannot continue`,Z.REGISTRATION_FAILED,`registration`);await this.finishActiveAuthorityV1(e.state,n.session,n.operationCredential,t);return}case`active`:await this.replayCommittedAuthorityV1(e.state,t);return;case`expired`:{let e=new X(`Device-link session expired`,Z.SESSION_EXPIRED,`registration`);this.error=e,this.emitFailure(e,`registration`),fV(this.options.options?.onError,e),this.runEpoch+=1,await this.cleanupLocalResources();return}case`cancelled`:this.cancelled=!0,this.emit({phase:Li.CANCELLED,status:`cancelled`,message:`The other device cancelled this linking request.`,interaction:{kind:`qr_display`,overlay:`show`}}),this.runEpoch+=1,await this.cleanupLocalResources();return;case`failed_before_commit`:this.cancelled=!0,this.runEpoch+=1,await this.cleanupLocalResources();return;default:return qn(e.state)}}async prepareTargetCredentialActivation(e,t){if(e.state.state!==`awaiting_target_factor`)throw Error(`target passkey activation requires an awaiting session`);let n=e.state;if(!this.keyMaterialHandle||!this.session)throw Error(`device-link key material is unavailable`);let r=this.requireAuthenticatedTransport();this.assertCurrentRun(t);let i=await r.getTargetPreparationV1({linkSessionId:e.linkSessionId,deliveryRecipientPublicKey65B64u:this.requireDeliveryRecipientPublicKey65B64u()});this.assertCurrentRun(t),this.assertTargetPreparationMatchesSession({preparation:i,state:n,linkSessionId:e.linkSessionId});let a=i.deviceId;if(this.ordinarySignerMaterialRecipientPreparation=await this.ports.keyMaterial.createOrdinarySignerMaterialRecipientRequestsV1({keyMaterial:this.keyMaterialHandle,requirements:i.ordinarySignerMaterialRecipientRequirements}),this.assertCurrentRun(t),this.requireSessionTargetFactorV1().kind===`email_otp`){await this.prepareTargetEmailOtpActivation({event:e,state:n,runEpoch:t,deviceId:a,preparation:i});return}if(!wV(i))throw Error(`Passkey session returned a non-Passkey target preparation`);let o=this.options.options?.onTargetFactorRequired;if(!o)throw new X(`Confirm passkey creation on Device 2 to continue linking`,Z.UNSUPPORTED,`registration`);o({kind:`linked_device_target_passkey_activation_v1`,createPasskey:this.activateTargetCredential.bind(this,{event:e,state:n,runEpoch:t,deviceId:a,preparation:i})})}async prepareTargetEmailOtpActivation(e){if(!TV(e.preparation))throw Error(`Email OTP session returned a non-Email OTP target preparation`);if(!this.keyMaterialHandle||!this.session||!this.deliveryRecipientPublicKey65B64u)throw Error(`Email OTP target key material is unavailable`);if(!this.options.options?.onTargetFactorRequired)throw new X(`Enter the Email OTP on Device 2 to continue linking`,Z.UNSUPPORTED,`registration`);let t=this.requireAuthenticatedTransport(),n=e.preparation.ed25519ExportRoot,r=n===null?{kind:`not_required`}:{kind:`required`,recipient:await vB({ed25519ExportRoot:this.ports.ed25519ExportRoot,transport:t,identity:{linkSessionId:e.event.linkSessionId,walletId:e.preparation.walletId,walletKeyId:n.walletKeyId,enrollmentId:e.preparation.enrollmentId,deviceId:e.deviceId,applicationBindingDigestB64u:n.applicationBindingDigestB64u,registeredPublicKeyB64u:n.registeredPublicKeyB64u,targetFactor:e.preparation.targetFactor,revocationEpoch:n.revocationEpoch},registeredAtMs:Date.now()})};this.assertCurrentRun(e.runEpoch);let i={event:e.event,state:e.state,runEpoch:e.runEpoch,deviceId:e.deviceId,preparation:e.preparation,ordinarySignerMaterialRecipientRequests:this.requireOrdinarySignerMaterialRecipientPreparationV1().recipientRequests,exportRoot:r};this.emailOtpTargetActivationState={kind:`available`,context:i},await this.startTargetEmailOtpChallengeV1(i)}notifyEmailOtpActivationV1(e){let t=this.options.options?.onTargetFactorRequired;t&&t({kind:`linked_device_target_email_otp_activation_v1`,state:e,sendCode:this.sendTargetEmailOtpCodeV1.bind(this),submitCode:this.submitTargetEmailOtpCodeV1.bind(this),resendCode:this.resendTargetEmailOtpCodeV1.bind(this)})}sendTargetEmailOtpCodeV1(){let e=this.emailOtpTargetActivationState;switch(e.kind){case`available`:{let t=this.startTargetEmailOtpChallengeV1(e.context);return this.emailOtpTargetActivationState={kind:`starting`,context:e.context,promise:t},t}case`starting`:return e.promise;case`resending`:return e.promise;case`awaiting_code`:case`submitting`:case`completed`:return Promise.resolve();case`failed`:return Promise.reject(Error(e.message));case`idle`:return Promise.reject(Error(`Email OTP activation is unavailable`));default:return OV(e)}}async startTargetEmailOtpChallengeV1(e){try{this.assertCurrentRun(e.runEpoch);let t=this.deliveryRecipientPublicKey65B64u;if(!t)throw Error(`Email OTP factor-release recipient is unavailable`);let n=await this.requireAuthenticatedTransport().startTargetEmailOtpChallengeV1({request:{kind:`linked_device_email_otp_challenge_start_request_v1`,linkSessionId:e.event.linkSessionId,workerEphemeralPublicKey65B64u:t}});this.assertCurrentRun(e.runEpoch),this.awaitTargetEmailOtpCodeV1(e,n)}catch(t){throw this.isCurrentRun(e.runEpoch)&&(this.emailOtpTargetActivationState={kind:`available`,context:e},this.notifyEmailOtpActivationV1({kind:`unavailable`,message:L(t)})),t}}awaitTargetEmailOtpCodeV1(e,t){this.emailOtpTargetActivationState={kind:`awaiting_code`,context:{...EV(e),challenge:t}},this.notifyEmailOtpActivationV1({kind:`code_input`,maskedEmailHint:t.maskedEmailHint,expiresAtMs:t.expiresAtMs,resendAvailableAtMs:t.resendAvailableAtMs})}resendTargetEmailOtpCodeV1(){let e=this.emailOtpTargetActivationState;if(e.kind===`resending`)return e.promise;if(e.kind!==`awaiting_code`)return Promise.reject(Error(`Email OTP challenge is not ready to resend`));try{this.assertCurrentRun(e.context.runEpoch)}catch(e){return Promise.reject(e)}let t=this.runTargetEmailOtpResendV1(e.context);return this.emailOtpTargetActivationState={kind:`resending`,context:e.context,promise:t},this.notifyEmailOtpActivationV1({kind:`resending`,maskedEmailHint:e.context.challenge.maskedEmailHint}),t}async runTargetEmailOtpResendV1(e){try{let t=await this.requireAuthenticatedTransport().resendTargetEmailOtpChallengeV1({request:{kind:`linked_device_email_otp_challenge_resend_request_v1`,linkSessionId:e.event.linkSessionId,challengeId:e.challenge.challengeId}});this.assertCurrentRun(e.runEpoch),this.awaitTargetEmailOtpCodeV1(e,t)}catch(t){if(this.isCurrentRun(e.runEpoch)){let n=L(t)||`Email OTP resend is unavailable`;this.emailOtpTargetActivationState={kind:`available`,context:EV(e)},this.notifyEmailOtpActivationV1({kind:`unavailable`,message:n})}throw t}}submitTargetEmailOtpCodeV1(e){let t=this.emailOtpTargetActivationState;if(t.kind!==`awaiting_code`)return Promise.reject(Error(`Email OTP challenge is not ready for verification`));this.assertCurrentRun(t.context.runEpoch);let n=this.completeTargetEmailOtpActivationV1(t.context,e);return this.emailOtpTargetActivationState={kind:`submitting`,context:t.context,promise:n},this.notifyEmailOtpActivationV1({kind:`submitting`,maskedEmailHint:t.context.challenge.maskedEmailHint,expiresAtMs:t.context.challenge.expiresAtMs,resendAvailableAtMs:t.context.challenge.resendAvailableAtMs}),n}async completeTargetEmailOtpActivationV1(e,t){let n;try{n=await this.requireAuthenticatedTransport().verifyTargetEmailOtpChallengeV1({request:{kind:`linked_device_email_otp_challenge_verify_request_v1`,linkSessionId:e.event.linkSessionId,challengeId:e.challenge.challengeId,otpCode:t}})}catch(t){throw this.isCurrentRun(e.runEpoch)&&(this.emailOtpTargetActivationState={kind:`awaiting_code`,context:e},Date.now()>=e.challenge.expiresAtMs?this.notifyEmailOtpActivationV1({kind:`expired`,maskedEmailHint:e.challenge.maskedEmailHint,message:L(t)}):this.notifyEmailOtpActivationV1({kind:`incorrect`,maskedEmailHint:e.challenge.maskedEmailHint,expiresAtMs:e.challenge.expiresAtMs,resendAvailableAtMs:e.challenge.resendAvailableAtMs,message:L(t)})),t}this.assertCurrentRun(e.runEpoch);let r=FV(e.preparation),i=e.exportRoot.kind===`required`?e.exportRoot.recipient:null,a=null,o=null,s=null,c=null,l=null,u=null,d=r.enrollment.kind===`existing_enrollment`;try{let t=await Un(r);if(n.verificationGrant.targetEmail!==r.targetEmail)throw Error(`linked-device Email OTP verification target email changed`);if(d){let i=n.verificationGrant;if(i.enrollment.kind!==`existing_enrollment`)throw Error(`linked-device Email OTP verification enrollment changed`);let o=i.baseWalletAuthMethodId;if(!o)throw Error(`linked-device Email OTP base auth method is unavailable`);let u=n.factorRelease;if(!u)throw Error(`linked-device Email OTP factor release is unavailable`);let d=await this.ports.keyMaterial.openEmailOtpFactorReleaseV1({keyMaterial:this.requireKeyMaterialHandleV1(),walletId:r.walletId,linkSessionId:r.linkSessionId,enrollmentId:r.enrollmentId,deviceId:r.deviceId,walletAuthMethodId:r.walletAuthMethodId,baseWalletAuthMethodId:o,targetPreparationDigestB64u:t,expectedChallengeId:e.challenge.challengeId,verificationGrant:i,factorRelease:u});a=d.factorSecret,s=d.verificationGrant,c=u.enrollmentId,l=u.enrollmentSealKeyVersion}else{let e=n.verificationGrant;if(e.enrollment.kind!==`new_enrollment`)throw Error(`linked-device Email OTP verification enrollment changed`);if(n.factorRelease!==null)throw Error(`new linked-device Email OTP enrollment returned a factor release`);let t=this.getAuthenticationContext?.();if(!t)throw Error(`linked-device authentication context is unavailable`);let i=LV();a=i.buffer;let o=await RV({context:t,walletId:r.walletId,targetEmail:r.targetEmail,factorSecret:i});c=o.enrollmentId,l=o.enrollment.enrollmentSealKeyVersion,u=o.enrollment,s=e}if(!a||!s||!c||!l)throw Error(`linked-device Email OTP factor material is unavailable`);if(this.assertCurrentRun(e.runEpoch),e.exportRoot.kind===`required`){if(!i)throw Error(`linked-device Ed25519 export-root recipient is unavailable`);let t=r.ed25519ExportRoot;if(!t)throw Error(`linked-device Ed25519 export-root preparation is unavailable`);let n=IV(),o=Jt({enrollmentId:c,enrollmentSealKeyVersion:l});this.resealedExportRoot=await this.acceptTargetExportRootV1({preparation:r,exportRoot:t,recipient:i,envelopeId:n,factor:o,replacementFactorSecret:new Uint8Array(a),runEpoch:e.runEpoch}),i=null}let f=vn(d?{linkSessionId:r.linkSessionId,walletId:r.walletId,enrollmentId:r.enrollmentId,deviceId:r.deviceId,walletAuthMethodId:r.walletAuthMethodId,targetFactor:{kind:`email_otp`},targetEmail:r.targetEmail,emailOtpVerificationGrant:s,targetPreparationDigestB64u:t,ordinarySignerMaterialRecipientRequests:e.ordinarySignerMaterialRecipientRequests,registeredAtMs:Date.now()}:{linkSessionId:r.linkSessionId,walletId:r.walletId,enrollmentId:r.enrollmentId,deviceId:r.deviceId,walletAuthMethodId:r.walletAuthMethodId,targetFactor:{kind:`email_otp`},targetEmail:r.targetEmail,emailOtpVerificationGrant:s,emailOtpEnrollment:zV(u),targetPreparationDigestB64u:t,ordinarySignerMaterialRecipientRequests:e.ordinarySignerMaterialRecipientRequests,registeredAtMs:Date.now()}),p=await this.requireAuthenticatedTransport().registerTargetCredentialV1({registration:f});if(this.assertCurrentRun(e.runEpoch),this.targetCredentialRegistrationResult=p,o=new Uint8Array(a).slice(),await this.ports.keyMaterial.prepareOrdinarySignerMaterialV1({keyMaterial:this.requireKeyMaterialHandleV1(),targetFactor:p.targetFactor,preparations:p.ordinarySignerMaterialPreparations,recipientRequests:p.ordinarySignerMaterialRecipientRequests,recipientInputs:this.requireOrdinarySignerMaterialRecipientPreparationV1().recipientInputs,factorSecret:a}),a=null,this.assertCurrentRun(e.runEpoch),pV({flowId:this.flowId,linkSessionId:e.preparation.linkSessionId,stage:`ordinary_signer_material_prepared`}),!o)throw Error(`linked-device Email OTP factor runtime is unavailable`);this.emailOtpTargetActivationState={kind:`completed`,runEpoch:e.runEpoch,enrollment:d?{kind:`existing_enrollment`}:{kind:`new_enrollment`},factorSecret:o,providerUserId:s.providerUserId},o=null,this.notifyEmailOtpActivationV1({kind:`completed`,maskedEmailHint:e.challenge.maskedEmailHint})}catch(t){if(a&&a.byteLength>0&&new Uint8Array(a).fill(0),o?.fill(0),i&&await bB(this.ports.ed25519ExportRoot,i),this.isCurrentRun(e.runEpoch)){let n=L(t)||`Email OTP activation is unavailable`;this.emailOtpTargetActivationState={kind:`failed`,runEpoch:e.runEpoch,message:n},this.notifyEmailOtpActivationV1({kind:`unavailable`,message:n}),await this.cancelFailedPrecommitSession(e.event).catch(()=>void 0)}throw t}}activateTargetCredential(e){if(!this.isCurrentRun(e.runEpoch))return Promise.reject(new xV);switch(this.targetCredentialActivationState.kind){case`idle`:break;case`in_progress`:return this.targetCredentialActivationState.runEpoch===e.runEpoch?this.targetCredentialActivationState.promise:Promise.reject(new xV);case`factor_ready`:return this.targetCredentialActivationState.runEpoch===e.runEpoch?Promise.reject(Error(`Device-link target passkey activation has already completed`)):Promise.reject(new xV);default:return kV(this.targetCredentialActivationState)}let t=this.runTargetCredentialActivation(e);return this.targetCredentialActivationState={kind:`in_progress`,runEpoch:e.runEpoch,promise:t},t}async runTargetCredentialActivation(e){try{let t=await this.createTargetCredential(e),n=this.targetCredentialActivationState;if(!this.isCurrentRun(e.runEpoch)||n.kind!==`in_progress`||n.runEpoch!==e.runEpoch)throw MV(t),new xV;this.targetCredentialActivationState={kind:`factor_ready`,runEpoch:e.runEpoch,factorSecret:t}}catch(t){throw this.isCurrentRun(e.runEpoch)&&await this.handleSessionTransportFailure(e.event,t),t}finally{let t=this.targetCredentialActivationState;t.kind===`in_progress`&&t.runEpoch===e.runEpoch&&(this.targetCredentialActivationState={kind:`idle`})}}async waitForTargetCredentialActivation(){switch(this.requireSessionTargetFactorV1().kind){case`passkey_prf`:{let e=this.targetCredentialActivationState;if(e.kind===`in_progress`&&await e.promise,this.targetCredentialActivationState.kind!==`factor_ready`)throw Error(`linked-device target Passkey activation is incomplete`);return}case`email_otp`:{let e=this.emailOtpTargetActivationState;if(e.kind===`submitting`&&await e.promise,this.emailOtpTargetActivationState.kind!==`completed`)throw Error(`linked-device target Email OTP activation is incomplete`);return}default:throw Error(`linked-device target factor is unsupported`)}}clearTargetCredentialActivationState(){let e=this.targetCredentialActivationState;e.kind===`factor_ready`&&MV(e.factorSecret),this.targetCredentialActivationState={kind:`idle`}}async createTargetCredential(e){let{runEpoch:t,deviceId:n,preparation:r}=e;if(!this.keyMaterialHandle||!this.session)throw Error(`device-link key material is unavailable`);let i=this.requireAuthenticatedTransport();pV({flowId:this.flowId,linkSessionId:r.linkSessionId,stage:`target_passkey_prompt_started`});let a=r.ed25519ExportRoot,o=a===null?Promise.resolve(null):vB({ed25519ExportRoot:this.ports.ed25519ExportRoot,transport:i,identity:{linkSessionId:r.linkSessionId,walletId:r.walletId,walletKeyId:a.walletKeyId,enrollmentId:r.enrollmentId,deviceId:n,applicationBindingDigestB64u:a.applicationBindingDigestB64u,registeredPublicKeyB64u:a.registeredPublicKeyB64u,targetFactor:r.targetFactor,revocationEpoch:a.revocationEpoch},registeredAtMs:Date.now()});o.catch(()=>void 0);let s=null,c=null;try{if(s=await this.ports.targetCredential.createTargetCredentialV1({preparation:r,keyMaterial:this.keyMaterialHandle}),s.walletAuthMethodId!==r.walletAuthMethodId)throw Error(`linked-device target credential returned a different auth method`);if(pV({flowId:this.flowId,linkSessionId:r.linkSessionId,stage:`target_passkey_created`}),this.emit({phase:Li.STEP_02_QR_SCAN_STARTED,status:`running`,message:`Finishing linked-device setup`,data:{role:`display`},interaction:{kind:`qr_display`,overlay:`show`}}),c=await o,c&&pV({flowId:this.flowId,linkSessionId:r.linkSessionId,stage:`export_root_recipient_published`}),this.assertCurrentRun(t),a!==null){if(!c)throw Error(`linked-device Ed25519 export-root recipient is unavailable`);let e=IV(),n=Gt({rpId:PV(r),credentialIdB64u:s.webauthnRegistration.credentialIdB64u}),i=await this.acceptTargetExportRootV1({preparation:r,exportRoot:a,recipient:c,envelopeId:e,factor:n,replacementFactorSecret:s.factorSecret,runEpoch:t});pV({flowId:this.flowId,linkSessionId:r.linkSessionId,stage:`export_root_accepted`}),this.resealedExportRoot=i,c=null}this.assertCurrentRun(t);let e=await Un(r),n=vn({linkSessionId:r.linkSessionId,walletId:r.walletId,enrollmentId:r.enrollmentId,deviceId:r.deviceId,walletAuthMethodId:s.walletAuthMethodId,targetFactor:{kind:`passkey_prf`},targetPreparationDigestB64u:e,webauthnRegistration:s.webauthnRegistration,ordinarySignerMaterialRecipientRequests:this.requireOrdinarySignerMaterialRecipientPreparationV1().recipientRequests,registeredAtMs:Date.now()}),l=await i.registerTargetCredentialV1({registration:n});return this.assertCurrentRun(t),this.targetCredentialRegistrationResult=l,await this.ports.keyMaterial.prepareOrdinarySignerMaterialV1({keyMaterial:this.requireKeyMaterialHandleV1(),targetFactor:l.targetFactor,preparations:l.ordinarySignerMaterialPreparations,recipientRequests:l.ordinarySignerMaterialRecipientRequests,recipientInputs:this.requireOrdinarySignerMaterialRecipientPreparationV1().recipientInputs,factorSecret:s.factorSecret.slice().buffer}),this.assertCurrentRun(t),pV({flowId:this.flowId,linkSessionId:r.linkSessionId,stage:`ordinary_signer_material_prepared`}),s.factorSecret}catch(e){if(s&&MV(s.factorSecret),!c)try{c=await o}catch{}throw c&&await bB(this.ports.ed25519ExportRoot,c),e}}async acceptTargetExportRootV1(e){let{preparation:t,exportRoot:n}=e,r=Zt({linkSessionId:t.linkSessionId,walletKeyId:n.walletKeyId,targetFactor:t.targetFactor,applicationBindingDigestB64u:n.applicationBindingDigestB64u,registeredPublicKeyB64u:n.registeredPublicKeyB64u,enrollmentId:t.enrollmentId,deviceId:t.deviceId,revocationEpoch:n.revocationEpoch});return await yB({ed25519ExportRoot:this.ports.ed25519ExportRoot,transport:this.requireAuthenticatedTransport(),recipient:e.recipient,replacementEnvelope:CB({walletId:t.walletId,ownership:qt(t.walletAuthMethodId),envelopeId:e.envelopeId,factor:e.factor,binding:r,createdAtMs:Date.now()}),replacementFactorSecret:e.replacementFactorSecret,expiresAtMs:Math.min(t.expiresAtMs,this.requireSessionV1().qrData.expiresAtMs),assertCurrentRun:()=>this.assertCurrentRun(e.runEpoch),waitForPollV1:gV})}assertTargetPreparationMatchesSession(e){let t=this.requireSessionTargetFactorV1(),n=this.requireSessionV1().qrData;if(e.preparation.linkSessionId!==e.linkSessionId||String(e.preparation.deviceId)!==String(e.state.deviceId)||e.preparation.targetFactor.kind!==t.kind||e.preparation.deliveryRecipientPublicKey65B64u!==this.requireDeliveryRecipientPublicKey65B64u()||e.preparation.expiresAtMs<=Date.now())throw Error(`linked-device target preparation does not match the claimed session`);if(t.kind===`email_otp`&&n.targetFactor.kind===`email_otp`&&e.preparation.targetFactor.kind===`email_otp`&&e.preparation.targetEmail!==n.targetEmail)throw Error(`linked-device target preparation email does not match the QR session`)}async activateAuthorityForStateV1(e,t){this.assertCurrentRun(t),await this.waitForTargetCredentialActivation(),this.assertCurrentRun(t);let n=this.targetCredentialRegistrationResult;if(!n)throw Error(`linked-device target credential registration is unavailable`);let r=this.requireKeyMaterialHandleV1(),i=this.requireAuthenticatedTransport(),a=await this.ports.readExpectedLockGenerationV1(n.walletId);this.assertCurrentRun(t);let o=this.committedAuthorityPackages||await i.receiveCommittedAuthorityPackagesV1({linkSessionId:this.requireSessionV1().linkSessionId});this.committedAuthorityPackages=o,await this.ports.authorityInstallation.persistCommittedDeliveryResumeV1({linkSessionId:this.requireSessionV1().linkSessionId,committed:o,targetFactor:n.targetFactor,committedAtMs:Date.now()}),this.assertCurrentRun(t);let s=this.requireSessionV1().qrData.expiresAtMs,c=0;for(;Date.now()<s;){let s=await $B({transport:i,committed:o,installation:this.ports.authorityInstallation,sessionState:e,linkSessionId:this.requireSessionV1().linkSessionId,targetFactor:n.targetFactor,keyMaterialPort:this.ports.keyMaterial,keyMaterial:r,deliveryRecipientPublicKey65B64u:this.requireDeliveryRecipientPublicKey65B64u(),resealedExportRoot:this.resealedExportRoot,expectedLockGeneration:a,nowMs:()=>Date.now()});if(s.kind!==`pending_local_install`)return s;await gV(c),this.assertCurrentRun(t),c+=1}throw new X(`Linked-device authority activation did not complete before the link session expired`,Z.REGISTRATION_FAILED,`registration`)}async finishActiveAuthorityV1(e,t,n,r){this.assertCurrentRun(r);let i=this.requireSessionV1(),a=this.targetCredentialRegistrationResult;if(!a||a.walletId!==t.walletId)throw Error(`linked-device activation identity is unavailable`);this.handledStates.add(`provisioning`),this.handledStates.add(`authority_pending_local_install`),this.handledStates.add(`active`);let o=this.getAuthenticationContext?.();if(!o)throw Error(`linked-device authentication context is unavailable`);let s=AV({targetFactor:a.targetFactor,walletAuthMethodId:a.walletAuthMethodId,targetCredentialActivationState:this.targetCredentialActivationState,emailOtpTargetActivationState:this.emailOtpTargetActivationState,walletId:t.walletId,runEpoch:r});await Nx({context:o,factor:s.factor,walletSession:t,operationCredential:n,factorSecret32:s.factorSecret32});let c=this.committedAuthorityPackages;if(!c)throw Error(`linked-device committed authority packages are unavailable for acknowledgement`);let l=await this.ports.authorityInstallation.readLocalAuthorityInstallationReceiptV1({authorityId:t.authorityId});if(!l)throw Error(`linked-device installation receipt is unavailable for acknowledgement`);let u={kind:`local_authority_activation_final_ack_v1`,linkSessionId:i.qrData.linkSessionId,authorityId:t.authorityId,packageSetDigestB64u:c.packageSetDigestB64u,authorizationId:t.authorizationId,walletSessionId:n.walletSessionId,credentialDigestB64u:await or(n),installationReceiptDigestB64u:await rr(l),acknowledgedAtMs:Date.now()};await this.ports.authorityInstallation.persistPendingActivationAcknowledgementV1({acknowledgement:u});let d={walletSession:t,deviceId:e.deviceId,runEpoch:r};this.pendingActivationCompletion=d,await this.sendActivationAcknowledgementV1(u),await this.completeAcknowledgedActivationV1(d)}async completeAcknowledgedActivationV1(e){this.assertCurrentRun(e.runEpoch);let{walletSession:t}=e,n=this.requireSessionV1(),r=this.targetCredentialRegistrationResult,i=this.getAuthenticationContext?.();if(!r||!i)throw Error(`linked-device activation completion is unavailable`);this.session={linkSessionId:n.linkSessionId,qrData:n.qrData,state:{state:`active`,deviceId:e.deviceId,authorityId:t.authorityId,activatedAtMs:t.issuedAtMs}},i.signingEngine.setWalletAuthenticated(lV(t,r)),await this.cleanupCompletedLocalResources(),pV({flowId:this.flowId,linkSessionId:n.qrData.linkSessionId,stage:`post_link_runtime_ready`}),this.emit({phase:Li.STEP_02_QR_SCAN_STARTED,status:`succeeded`,message:`Device link active`,walletId:String(t.walletId),data:{role:`display`,enrollmentId:String(r.enrollmentId)},interaction:{kind:`qr_display`,overlay:`hide`}})}requireAuthenticatedTransport(){if(!this.authenticatedTransport)throw new X(`Authenticated link-session transport is unavailable`,Z.UNSUPPORTED,`registration`);return this.authenticatedTransport}requireSessionTargetFactorV1(){if(!this.session)throw Error(`device-link session is unavailable`);return this.session.qrData.targetFactor}requireSessionV1(){if(!this.session)throw Error(`device-link session is unavailable`);return this.session}requireKeyMaterialHandleV1(){if(!this.keyMaterialHandle)throw Error(`device-link key material is unavailable`);return this.keyMaterialHandle}requireDeliveryRecipientPublicKey65B64u(){if(!this.deliveryRecipientPublicKey65B64u)throw Error(`device-link delivery recipient is unavailable`);return this.deliveryRecipientPublicKey65B64u}requireOrdinarySignerMaterialRecipientPreparationV1(){let e=this.ordinarySignerMaterialRecipientPreparation;if(!e)throw Error(`ordinary signer material recipient preparation is unavailable`);return e}startRun(){return this.clearRunActivationStateV1(),this.committedAuthorityPackages=null,this.deliveryRecoveryReason=null,this.runEpoch+=1,this.generationInProgress=!0,this.cancelled=!1,this.error=void 0,this.handledStates.clear(),this.runEpoch}isCurrentRun(e){return!this.cancelled&&this.runEpoch===e}assertCurrentRun(e){if(!this.isCurrentRun(e))throw new xV}handleSessionTransportEvent(e){this.sessionEventQueue=this.sessionEventQueue.then(this.handleSessionEvent.bind(this,e)).catch(this.handleSessionTransportFailure.bind(this,e))}async handleSessionTransportFailure(e,t){if(t instanceof xV)return;if(this.hasCommittedDeliveryState()){await this.handleCommittedDeliveryFailureV1(e,t);return}mV({flowId:this.flowId,linkSessionId:e.linkSessionId,state:e.state.state,error:t}),this.handledStates.delete(e.state.state);let n=vV(t,`registration`);this.error=n,this.emitFailure(n,`registration`),fV(this.options.options?.onError,n),await this.cancelFailedPrecommitSession(e).catch(()=>void 0),this.runEpoch+=1;try{await this.cleanupLocalResources()}catch{}}async handleCommittedDeliveryFailureV1(e,t){let n=yV(t);if(n){await this.requireExactMethodUnlockForCommittedDeliveryV1(e,n);return}pV({flowId:this.flowId,linkSessionId:e.linkSessionId,stage:`committed_delivery_retry_started`,details:{state:e.state.state,error:L(t)}}),this.handledStates.delete(e.state.state);try{await this.retryCommittedDeliveryV1(e)}catch(t){let n=yV(t);if(n){await this.requireExactMethodUnlockForCommittedDeliveryV1(e,n);return}mV({flowId:this.flowId,linkSessionId:e.linkSessionId,state:e.state.state,error:t})}}async requireExactMethodUnlockForCommittedDeliveryV1(e,t){this.deliveryRecoveryReason=t,this.handledStates.clear(),this.runEpoch+=1;let n=new X(bV(t),Z.DELIVERY_RECOVERY_REQUIRED,`registration`);this.error=n;try{await this.cleanupCompletedLocalResources()}catch(t){mV({flowId:this.flowId,linkSessionId:e.linkSessionId,state:e.state.state,error:t})}this.clearRunActivationStateV1(),this.committedAuthorityPackages=null,this.keyMaterialHandle=null,this.deliveryRecipientPublicKey65B64u=null,this.authenticatedTransport=null,this.subscription=null,this.emitFailure(n,`registration`),fV(this.options.options?.onError,n)}async retryCommittedDeliveryV1(e){if(!await this.replayPendingActivationAcknowledgementV1())switch(e.state.state){case`provisioning`:case`authority_pending_local_install`:case`active`:await this.replayCommittedAuthorityV1(e.state,this.runEpoch);return;default:throw Error(`committed link delivery cannot resume from ${e.state.state}`)}}async replayCommittedAuthorityV1(e,t){let n=await this.activateAuthorityForStateV1(e,t);if(n.kind!==`pending_local_install`){if(n.kind===`integrity_error`)throw new X(`Linked-device authority replay failed: ${n.reason}`,Z.REGISTRATION_FAILED,`registration`);if(n.kind===`failed_before_commit`)throw new X(`Linked-device authority replay cannot continue`,Z.REGISTRATION_FAILED,`registration`);await this.finishActiveAuthorityV1(e,n.session,n.operationCredential,t)}}async replayPendingActivationAcknowledgementV1(){let e=this.committedAuthorityPackages;if(!e)return!1;let t=await this.ports.authorityInstallation.readPendingActivationAcknowledgementV1({authorityId:e.authority.authorityId});if(!t)return!1;let n=this.requireSessionV1();if(t.linkSessionId!==n.qrData.linkSessionId||t.authorityId!==e.authority.authorityId||t.packageSetDigestB64u!==e.packageSetDigestB64u)throw Error(`pending linked-device acknowledgement identity is inconsistent`);let r=this.pendingActivationCompletion;if(!r||r.walletSession.authorizationId!==t.authorizationId)throw Error(`pending linked-device activation completion is unavailable`);return await this.sendActivationAcknowledgementV1(t),await this.completeAcknowledgedActivationV1(r),!0}async sendActivationAcknowledgementV1(e){await this.closeSessionSubscriptionV1();let t=this.requireAuthenticatedTransport();for(let n=1;n<=3;n+=1)try{await t.acknowledgeLocalAuthorityActivationV1({acknowledgement:e});break}catch(e){if(yV(e)||n===3)throw e}await this.ports.authorityInstallation.clearPendingActivationAcknowledgementV1({authorityId:e.authorityId}),await this.ports.authorityInstallation.clearCommittedDeliveryResumeV1({authorityId:e.authorityId})}async cancelFailedPrecommitSession(e){let t=this.authenticatedTransport;if(t)switch(e.state.state){case`claimed`:case`awaiting_target_factor`:case`awaiting_source_contribution`:case`provisioning`:{let n=Date.now();await this.cancelClaimedSessionV1(t,e.linkSessionId,n),this.session?.linkSessionId===e.linkSessionId&&(this.session={...this.session,state:{state:`cancelled`,cancelledAtMs:n}});return}case`displaying_qr`:case`authority_pending_local_install`:case`active`:case`expired`:case`cancelled`:case`failed_before_commit`:return;default:qn(e.state)}}async cleanupLocalResources(e=!1){if(!e&&this.hasCommittedDeliveryState())return;let t=e&&this.hasCommittedDeliveryState();t||this.clearRunActivationStateV1();let n,r=this.subscription;if(r)try{await r.close(),this.subscription===r&&(this.subscription=null)}catch(e){n=e}if(!n)try{await this.discardKeyMaterial()}catch(e){n=e}if(n)throw n;t&&(this.clearRunActivationStateV1(),this.committedAuthorityPackages=null)}clearRunActivationStateV1(){this.pendingActivationCompletion=null,this.clearTargetCredentialActivationState(),this.clearEmailOtpTargetActivationState(),this.resealedExportRoot=null,this.targetCredentialRegistrationResult=null,this.ordinarySignerMaterialRecipientPreparation=null}async closeSessionSubscriptionV1(){let e=this.subscription;e&&(await e.close(),this.subscription===e&&(this.subscription=null))}async cleanupCompletedLocalResources(){await this.cleanupLocalResources(!0)}clearEmailOtpTargetActivationState(){let e=this.emailOtpTargetActivationState;e.kind===`completed`&&DV(e).factorSecret.fill(0),this.emailOtpTargetActivationState={kind:`idle`}}hasCommittedDeliveryState(){return this.committedAuthorityPackages!==null||this.keyMaterialHandle!==null&&(this.session?.state.state===`authority_pending_local_install`||this.session?.state.state===`active`)}async discardKeyMaterial(){let e=this.keyMaterialHandle;if(!e)return;if(this.discardInProgress)return await this.discardInProgress;let t=this.ports.keyMaterial.discardKeyMaterialV1({handle:e});this.discardInProgress=t;try{await t,this.keyMaterialHandle===e&&(this.keyMaterialHandle=null,this.deliveryRecipientPublicKey65B64u=null,this.authenticatedTransport=null)}finally{this.discardInProgress===t&&(this.discardInProgress=null)}}emitFailure(e,t){this.emit({phase:t===`generation`?Li.STEP_01_QR_PREPARE_STARTED:Li.FAILED,status:`failed`,message:e.message,data:{role:`display`},interaction:{kind:`qr_display`,overlay:`hide`},error:{code:e.code,message:e.message,retryable:e.code!==Z.UNSUPPORTED&&e.code!==Z.DELIVERY_RECOVERY_REQUIRED}})}emit(e){this.options.options?.onEvent?.(ji({flowId:this.flowId,...e}))}};function VV(e){let t=e.getState();if(t.cancelled||t.error||!t.session)return!0;switch(t.session.state.state){case`active`:case`expired`:case`cancelled`:case`failed_before_commit`:return!0;case`displaying_qr`:case`claimed`:case`awaiting_target_factor`:case`awaiting_source_contribution`:case`provisioning`:case`authority_pending_local_install`:return!1;default:return qn(t.session.state)}}var HV=class{deps;activeDeviceLinkFlow=null;activeOwnerLinkCancellation=null;constructor(e){this.deps=e}async startDevice2LinkingFlow(e){if(this.activeDeviceLinkFlow&&VV(this.activeDeviceLinkFlow)&&(this.activeDeviceLinkFlow=null),this.activeDeviceLinkFlow)throw Error(`Device-link QR flow is already running`);let t=new BV(e,this.deps.ports,this.deps.getContext);this.activeDeviceLinkFlow=t;try{return await t.generateQR()}catch(e){throw this.activeDeviceLinkFlow===t&&(this.activeDeviceLinkFlow=null),e}}async cancelDeviceLinking(){if(this.activeDeviceLinkFlow&&VV(this.activeDeviceLinkFlow)&&(this.activeDeviceLinkFlow=null),this.activeDeviceLinkFlow){await this.activeDeviceLinkFlow.cancel(),this.activeDeviceLinkFlow=null;return}let e=this.activeOwnerLinkCancellation;e&&(await this.deps.ports.transport.cancelClaimedSessionV1(e),this.activeOwnerLinkCancellation===e&&(this.activeOwnerLinkCancellation=null))}async scanAndLinkDevice(e,t){return await tB(this.deps.getContext(),e,t,this.deps.ports,this.registerOwnerLinkCancellationV1.bind(this))}registerOwnerLinkCancellationV1(e){this.activeOwnerLinkCancellation=e}};function UV(e){let t=r(e.authMethod.walletAuthMethodId);if(!t.ok)throw Error(t.error.message);let n=Tt(e.verificationDigestB64u);return e.kind===`verified_passkey_target_v1`?{kind:`passkey`,walletAuthMethodId:t.value,verificationDigestB64u:n,rpId:e.authMethod.rpId,credentialIdB64u:e.authMethod.credentialIdB64u}:{kind:`email_otp`,walletAuthMethodId:t.value,verificationDigestB64u:n,emailHashHex:e.authMethod.emailHashHex,registrationAuthorityId:e.authMethod.registrationAuthorityId}}function WV(e){return{async prepareOrdinarySignerMaterialV1(t){if(!(t.factorSecret instanceof ArrayBuffer)||t.factorSecret.byteLength!==32)throw Error(`ordinary signer material factorSecret must be 32 bytes`);let n=qV(t.preparations),r=YV(t.recipientRequests),i=ZV(t.recipientInputs);eH(i,r);let a=[t.factorSecret,...$V(i)];return KV(await e({kind:`device_linking_ordinary_signer_material_prepare_private_v1`,handleId:D(t.keyMaterial.handleId,`keyMaterial.handleId`,`is required`),targetFactor:UV(t.targetFactor),preparations:n,recipientRequests:r,recipientInputs:i,factorSecret:t.factorSecret},a))},async createOrdinarySignerMaterialRecipientRequestsV1(t){return XV(await e({kind:`device_linking_ordinary_signer_material_recipient_prepare_v1`,handleId:D(t.keyMaterial.handleId,`keyMaterial.handleId`,`is required`),requirements:JV(t.requirements)}))},async sealCommittedAuthorityPackagesV1(t){let n=En(t.committed);return oH(await e({kind:`device_linking_ordinary_signer_material_seal_v1`,handleId:D(t.keyMaterial.handleId,`keyMaterial.handleId`,`is required`),committed:n,targetFactor:UV(t.targetFactor),resealedExportRoot:GV(t.resealedExportRoot)}))}}}function GV(e){if(e===null)return null;if(!Lc(e,[`envelope`]))throw Error(`ordinary material resealed export root has unsupported fields`);return{envelope:Qt(e.envelope)}}function KV(e){if(!Lc(e,[`kind`,`targetFactor`,`preparations`]))throw Error(`ordinary material preparation result has invalid fields`);if(e.kind!==`device_linking_ordinary_signer_material_preparation_v1`)throw Error(`ordinary material preparation result kind is invalid`);return{kind:`device_linking_ordinary_signer_material_preparation_v1`,targetFactor:iH(e.targetFactor),preparations:qV(e.preparations)}}function qV(e){if(!Array.isArray(e)||e.length===0||e.length>2)throw Error(`ordinary signer material preparations must contain one or two entries`);let t=e.map(rH),n=t.map(e=>`kind`in e?`ed25519`:`ecdsa_secp256k1`);if(new Set(n).size!==t.length)throw Error(`ordinary signer material preparations repeat a key family`);let r=t.map(e=>`kind`in e?e.targetMaterialActivation:e.target.activation);if(r.length===2&&r[0].activationId===r[1].activationId)throw Error(`ordinary signer material preparations repeat an activation reference`);let i=t[0];if(!i)throw Error(`ordinary signer material preparations are empty`);return[i,...t.slice(1)]}function JV(e){if(!Array.isArray(e)||e.length===0||e.length>2)throw Error(`ordinary signer material recipient requirements must contain one or two entries`);let t=e.map((e,t)=>{if(!Lc(e,[`kind`,`keyFamily`,`walletKeyId`]))throw Error(`ordinary recipient requirement ${t} has invalid fields`);if(e.kind!==`ordinary_signer_material_recipient_requirement_v1`)throw Error(`ordinary recipient requirement kind is invalid`);if(e.keyFamily!==`ed25519`&&e.keyFamily!==`ecdsa_secp256k1`)throw Error(`ordinary recipient requirement key family is invalid`);let n=nH(e.walletKeyId);return{kind:e.kind,keyFamily:e.keyFamily,walletKeyId:n}});tH(t);let n=t[0];if(!n)throw Error(`ordinary recipient requirements are empty`);return[n,...t.slice(1)]}function YV(e){if(!Array.isArray(e)||e.length===0||e.length>2)throw Error(`ordinary signer material recipient requests must contain one or two entries`);let t=e.map(e=>{if(Lc(e,[`kind`,`keyFamily`,`walletKeyId`,`recipientPublicKeyB64u`])){if(e.kind!==`ordinary_ed25519_signer_material_recipient_request_v1`||e.keyFamily!==`ed25519`)throw Error(`ordinary Ed25519 recipient request kind is invalid`);return{kind:`ordinary_ed25519_signer_material_recipient_request_v1`,keyFamily:`ed25519`,walletKeyId:nH(e.walletKeyId),recipientPublicKeyB64u:sH(e.recipientPublicKeyB64u,`Ed25519 recipient public key`)}}if(Lc(e,[`kind`,`keyFamily`,`walletKeyId`,`clientEphemeralPublicKey`])){if(e.kind!==`ordinary_ecdsa_signer_material_recipient_request_v1`||e.keyFamily!==`ecdsa_secp256k1`)throw Error(`ordinary ECDSA recipient request kind is invalid`);return{kind:`ordinary_ecdsa_signer_material_recipient_request_v1`,keyFamily:`ecdsa_secp256k1`,walletKeyId:nH(e.walletKeyId),clientEphemeralPublicKey:D(e.clientEphemeralPublicKey,`ECDSA client ephemeral public key`,`is required`)}}throw Error(`ordinary recipient request key family is invalid`)});tH(t);let n=t[0];if(!n)throw Error(`ordinary recipient requests are empty`);return[n,...t.slice(1)]}function XV(e){if(!Lc(e,[`kind`,`recipientRequests`,`recipientInputs`]))throw Error(`ordinary recipient preparation result has invalid fields`);if(e.kind!==`device_linking_ordinary_signer_material_recipient_preparation_v1`)throw Error(`ordinary recipient preparation result kind is invalid`);let t=YV(e.recipientRequests),n=ZV(e.recipientInputs);return eH(n,t),{recipientRequests:t,recipientInputs:n}}function ZV(e){if(!Array.isArray(e)||e.length===0||e.length>2)throw Error(`ordinary signer material recipient inputs must contain one or two entries`);let t=e.map(e=>{if(Lc(e,[`kind`,`keyFamily`,`walletKeyId`,`recipientPrivateKey`])){if(e.kind!==`ordinary_ed25519_signer_material_recipient_input_v1`||e.keyFamily!==`ed25519`)throw Error(`ordinary Ed25519 recipient input kind is invalid`);return{kind:`ordinary_ed25519_signer_material_recipient_input_v1`,keyFamily:`ed25519`,walletKeyId:nH(e.walletKeyId),recipientPrivateKey:QV(e.recipientPrivateKey,`Ed25519 recipient private key`)}}if(Lc(e,[`kind`,`keyFamily`,`walletKeyId`,`clientEphemeralPrivateKey`])){if(e.kind!==`ordinary_ecdsa_signer_material_recipient_input_v1`||e.keyFamily!==`ecdsa_secp256k1`)throw Error(`ordinary ECDSA recipient input kind is invalid`);return{kind:`ordinary_ecdsa_signer_material_recipient_input_v1`,keyFamily:`ecdsa_secp256k1`,walletKeyId:nH(e.walletKeyId),clientEphemeralPrivateKey:QV(e.clientEphemeralPrivateKey,`ECDSA client ephemeral private key`)}}throw Error(`ordinary recipient input key family is invalid`)});tH(t);let n=t[0];if(!n)throw Error(`ordinary recipient inputs are empty`);return[n,...t.slice(1)]}function QV(e,t){if(!(e instanceof ArrayBuffer)||e.byteLength!==32)throw Error(`${t} must be a 32-byte ArrayBuffer`);return e}function $V(e){return e.map(e=>e.kind===`ordinary_ed25519_signer_material_recipient_input_v1`?e.recipientPrivateKey:e.clientEphemeralPrivateKey)}function eH(e,t){if(e.length!==t.length)throw Error(`ordinary recipient inputs and requests have different lengths`);for(let n of t)if(e.filter(e=>e.walletKeyId===n.walletKeyId&&e.keyFamily===n.keyFamily).length!==1)throw Error(`ordinary recipient input for ${String(n.walletKeyId)} is missing or duplicated`)}function tH(e){let t=new Set,n=new Set;for(let r of e){if(t.has(r.keyFamily))throw Error(`ordinary recipient family repeats`);if(n.has(String(r.walletKeyId)))throw Error(`ordinary recipient wallet key repeats`);t.add(r.keyFamily),n.add(String(r.walletKeyId))}let r=e[0];if(e.length===2&&r?.keyFamily!==`ed25519`)throw Error(`ordinary recipient requests must be ordered Ed25519 then ECDSA`)}function nH(e){let n=t(e);if(!n.ok)throw Error(n.error.message);return n.value}function rH(e){return wr(e)}function iH(e){if(Lc(e,[`kind`,`walletAuthMethodId`,`verificationDigestB64u`,`rpId`,`credentialIdB64u`])){if(e.kind!==`passkey`)throw Error(`ordinary material target factor kind is unsupported`);let t=r(e.walletAuthMethodId);if(!t.ok)throw Error(t.error.message);let n=Tt(e.verificationDigestB64u);return{kind:`passkey`,walletAuthMethodId:t.value,verificationDigestB64u:n,rpId:D(e.rpId,`ordinary target factor rpId`,`is required`),credentialIdB64u:sH(e.credentialIdB64u,`ordinary target factor credentialIdB64u`)}}if(Lc(e,[`kind`,`walletAuthMethodId`,`verificationDigestB64u`,`emailHashHex`,`registrationAuthorityId`])){if(e.kind!==`email_otp`)throw Error(`ordinary material target factor kind is unsupported`);let t=r(e.walletAuthMethodId);if(!t.ok)throw Error(t.error.message);let n=Tt(e.verificationDigestB64u),i=D(e.emailHashHex,`ordinary target factor emailHashHex`,`is required`);if(!/^[0-9a-f]{64}$/.test(i))throw Error(`ordinary target factor emailHashHex is invalid`);return{kind:`email_otp`,walletAuthMethodId:t.value,verificationDigestB64u:n,emailHashHex:i,registrationAuthorityId:D(e.registrationAuthorityId,`ordinary target factor registrationAuthorityId`,`is required`)}}throw Error(`ordinary material target factor kind is unsupported`)}function aH(e){if(!Lc(e,[`kind`,`authorityId`,`walletAuthMethodId`,`walletKeyId`,`envelope`]))throw Error(`ordinary material export-root record has invalid fields`);if(e.kind!==`wallet_authority_export_root_v1`)throw Error(`ordinary material export-root record kind is invalid`);let n=s(e.authorityId);if(!n.ok)throw Error(n.error.message);let i=r(e.walletAuthMethodId);if(!i.ok)throw Error(i.error.message);let a=t(e.walletKeyId);if(!a.ok)throw Error(a.error.message);return{kind:`wallet_authority_export_root_v1`,authorityId:n.value,walletAuthMethodId:i.value,walletKeyId:a.value,envelope:Qt(e.envelope)}}function oH(e){if(!Lc(e,[`signerMaterials`,`exportRoot`,`installedRecordSetDigestB64u`])||!Array.isArray(e.signerMaterials)||e.signerMaterials.length===0)throw Error(`ordinary material worker returned an invalid sealed record set`);let t=e.signerMaterials.map(e=>Vi(e)),n=t[0];if(!n)throw Error(`ordinary material worker returned an invalid sealed record set`);return{signerMaterials:[n,...t.slice(1)],exportRoot:e.exportRoot===null?null:aH(e.exportRoot),installedRecordSetDigestB64u:Tt(e.installedRecordSetDigestB64u)}}function sH(e,t){let n=D(e,t,`is required`),r;try{r=F(n)}catch{throw Error(`${t} is invalid base64url`)}if(r.length===0||P(r)!==n)throw r.fill(0),Error(`${t} must be canonical non-empty base64url`);return r.fill(0),n}function cH(e,t){if(typeof e!=`string`||e.trim()!==e||e.length===0)throw Error(`${t} is required`);return e}function lH(e,t){try{return Tt(e)}catch(e){throw Error(`${t} ${e instanceof Error?e.message:`is invalid`}`)}}function uH(e,t,n){let r=cH(e,n);if(!/^[A-Za-z0-9_-]+$/.test(r))throw Error(`${n} is invalid`);let i;try{i=F(r)}catch{throw Error(`${n} is invalid`)}if(i.length!==t||P(i)!==r)throw Error(`${n} must be canonical base64url`);return i.fill(0),r}function dH(e){if(!Lc(e,[`kind`,`handleId`]))throw Error(`device-linking key handle has invalid fields`);let t=e;if(t.kind!==`device_linking_key_material_handle_v1`)throw Error(`device-linking key handle kind is invalid`);return{kind:`device_linking_key_material_handle_v1`,handleId:cH(t.handleId,`device-linking key handle.handleId`)}}function fH(e){if(!Lc(e,[`handleId`,`linkPublicKeyB64u`,`devicePublicKeyB64u`,`deliveryRecipientPublicKey65B64u`]))throw Error(`device-linking key create response has invalid fields`);let t=e;return{handle:{kind:`device_linking_key_material_handle_v1`,handleId:cH(t.handleId,`device-linking key create handleId`)},linkPublicKeyB64u:Fn(t.linkPublicKeyB64u),devicePublicKeyB64u:Fn(t.devicePublicKeyB64u),deliveryRecipientPublicKey65B64u:uH(t.deliveryRecipientPublicKey65B64u,65,`deliveryRecipientPublicKey65B64u`)}}function pH(e){if(!Lc(e,[`kind`,`verificationGrant`,`factorSecret`]))throw Error(`device-linking Email OTP factor release response has invalid fields`);let t=e;if(t.kind!==`device_linking_email_otp_factor_release_result_v1`)throw Error(`device-linking Email OTP factor release response kind is invalid`);if(!(t.factorSecret instanceof ArrayBuffer)||t.factorSecret.byteLength!==32)throw Error(`device-linking Email OTP factor release secret is invalid`);return{kind:`device_linking_email_otp_factor_release_result_v1`,verificationGrant:wn(t.verificationGrant),factorSecret:t.factorSecret}}function mH(e){return ze(e)}function hH(e){if(!Lc(e,[`signatureB64u`]))throw Error(`device-linking request signature response has invalid fields`);return{signatureB64u:uH(e.signatureB64u,64,`signatureB64u`)}}function gH(e){if(Lc(e,[`id`,`ok`,`result`])&&e.ok===!0){let t=e.id;return typeof t!=`string`||t.trim()!==t||t.length===0?null:{id:t,ok:!0,result:e.result}}if(Lc(e,[`id`,`ok`,`error`])&&e.ok===!1){let t=e.id;return typeof t!=`string`||t.trim()!==t||t.length===0||typeof e.error!=`string`||!e.error.trim()?null:{id:t,ok:!1,error:e.error}}return null}function _H(){if(!globalThis.crypto||typeof globalThis.crypto.getRandomValues!=`function`)throw Error(`secure randomness is unavailable for device-linking worker`);let e=globalThis.crypto.getRandomValues(new Uint8Array(16)),t=`device-linking-${P(e)}`;return e.fill(0),t}function vH(e){return e!==void 0&&Number.isSafeInteger(e)&&e>0?e:6e4}function yH(e){return e instanceof Error?e:typeof e==`string`&&e.trim()?Error(e):Error(`device-linking worker failed`)}function bH(){if(typeof Worker>`u`)throw Error(`device-linking worker is unavailable; provide an authenticated worker endpoint`);let e=qf(void 0,{worker:`deviceLinking`});return new Worker(e,{type:`module`})}function xH(e){if(!e.startsWith(`/`)||e.includes(`?`)||e.includes(`#`)||e.trim()!==e)throw Error(`canonicalPath is invalid`);return e}function SH(e,t){if(!Number.isSafeInteger(e)||e<=0)throw Error(`${t} is invalid`);return e}function CH(e){let t=S(e.linkSessionId);if(!t.ok)throw Error(t.error.message);if(e.method!==`GET`&&e.method!==`POST`)throw Error(`method is invalid`);let n=SH(e.expiresAtMs,`expiresAtMs`),r=SH(e.issuedAtMs,`issuedAtMs`);if(n<=r)throw Error(`expiresAtMs must be after issuedAtMs`);return{kind:`device_linking_request_sign_v1`,handleId:cH(e.handle.handleId,`handle.handleId`),linkSessionId:t.value,method:e.method,canonicalPath:xH(e.canonicalPath),bodyDigestB64u:lH(e.bodyDigestB64u,`bodyDigestB64u`),devicePublicKeyDigestB64u:lH(e.devicePublicKeyDigestB64u,`devicePublicKeyDigestB64u`),challengeB64u:uH(e.challengeB64u,32,`challengeB64u`),issuedAtMs:r,expiresAtMs:n}}function wH(e={}){let t=vH(e.timeoutMs),n=new Map,i=e.endpoint??null,a=!1,o=e=>{let t=gH(e.data);if(!t)return;let r=n.get(t.id);r&&(clearTimeout(r.timeoutId),n.delete(t.id),t.ok?r.resolve(t.result):r.reject(Error(t.error)))},c=e=>{let t=yH(e.message);for(let[e,r]of n)clearTimeout(r.timeoutId),n.delete(e),r.reject(t)},l=e=>{e.addEventListener(`message`,o),e.addEventListener(`error`,c)};e.endpoint&&(l(e.endpoint),i=e.endpoint);let u=()=>{if(i)return i;let e=bH();try{return l(e),i=e,e}catch(t){throw e.terminate(),t}},d=()=>{if(a)return;a=!0;let e=i;e?.removeEventListener(`message`,o),e?.removeEventListener(`error`,c);let t=Error(`device-linking worker transport is closed`);for(let[e,r]of n)clearTimeout(r.timeoutId),n.delete(e),r.reject(t);e?.terminate(),i=null},m=(e,r)=>{if(a)return Promise.reject(Error(`device-linking worker transport is closed`));let i;try{i=u()}catch(e){return Promise.reject(yH(e))}let o=_H();return new Promise((a,s)=>{let c=setTimeout(()=>{n.delete(o),s(Error(`device-linking worker request timed out after ${t}ms`))},t);n.set(o,{resolve:a,reject:s,timeoutId:c});try{i.postMessage({id:o,request:e},r)}catch(e){clearTimeout(c),n.delete(o),s(yH(e))}})};return{...WV(m),close:d,async createBootstrapKeyMaterialV1(){return fH(await m({kind:`device_linking_key_material_create_v1`}))},async discardKeyMaterialV1(e){await m({kind:`device_linking_key_material_discard_v1`,handleId:dH(e.handle).handleId})},async openEmailOtpFactorReleaseV1(e){let t=dH(e.keyMaterial),n=_(e.walletId);if(!n.ok)throw Error(n.error.message);let i=S(e.linkSessionId);if(!i.ok)throw Error(i.error.message);let a=f(e.enrollmentId);if(!a.ok)throw Error(a.error.message);let o=p(e.deviceId);if(!o.ok)throw Error(o.error.message);let s=r(e.walletAuthMethodId);if(!s.ok)throw Error(s.error.message);let c=r(e.baseWalletAuthMethodId);if(!c.ok)throw Error(c.error.message);let l=lH(e.targetPreparationDigestB64u,`targetPreparationDigestB64u`),u=cH(e.expectedChallengeId,`expectedChallengeId`),d=wn(e.verificationGrant),h=xn(e.factorRelease);return pH(await m({kind:`device_linking_email_otp_factor_release_open_v1`,handleId:t.handleId,walletId:n.value,linkSessionId:i.value,enrollmentId:a.value,deviceId:o.value,walletAuthMethodId:s.value,baseWalletAuthMethodId:c.value,targetPreparationDigestB64u:l,expectedChallengeId:u,verificationGrant:d,factorRelease:h}))},async openWalletSessionCredentialDeliveryV1(e){let t=dH(e.keyMaterial),n=ir(e.delivery),i=e.expected,a=_(i.walletId);if(!a.ok)throw Error(a.error.message);let o=s(i.authorityId);if(!o.ok)throw Error(o.error.message);let c=S(i.linkSessionId);if(!c.ok)throw Error(c.error.message);let l=r(i.walletAuthMethodId);if(!l.ok)throw Error(l.error.message);return mH(await m({kind:`device_linking_wallet_session_credential_delivery_open_v1`,handleId:t.handleId,delivery:n,expected:{...i,linkSessionId:c.value,walletId:a.value,authorityId:o.value,walletAuthMethodId:l.value,deliveryBinding:Jn(i.deliveryBinding)}}))},async signDeviceSessionRequestV1(e){return hH(await m(CH(e)))}}}function TH(e){return{claimSessionV1:async t=>EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(t.request.payload.linkSessionId)}/claim`,body:t.request,authentication:t.authentication}),_n),resolveEmailOtpBaseFactorV1:async t=>EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(t.linkSessionId)}/email-otp-base-factor`,body:t.request,authentication:t.authentication}),gn),cancelClaimedSessionV1:async t=>EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(t.linkSessionId)}/owner-cancel`,body:{expectedRevision:t.expectedRevision},authentication:t.authentication}),kH),recordOwnerApprovalV1:async t=>EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(t.approval.linkSessionId)}/approval`,body:t.approval,authentication:t.authentication}),$n),getSourceContributionPreparationV1:async t=>{let n=await e.request.requestOwnerV1({method:`GET`,canonicalPath:`${MH(t.linkSessionId)}/source-contribution-preparation`,authentication:t.authentication});return n.status===204?null:EH(n,Ir)},recordSourceContributionV1:async t=>EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(t.approval.linkSessionId)}/source-contribution`,body:t.approval,authentication:t.authentication}),OH),getApprovalV1:e.approvalUpdates.getApprovalV1,getEd25519ExportRootRecipientV1:async t=>{let n=await e.request.requestOwnerV1({method:`GET`,canonicalPath:`${MH(t.linkSessionId)}/ed25519-export-root-recipient`,authentication:t.authentication});return n.status===204?null:EH(n,Mn)},submitEd25519ExportRootPackageV1:async t=>{EH(await e.request.requestOwnerV1({method:`POST`,canonicalPath:`${MH(NH(t.submission.linkSessionId))}/ed25519-export-root`,body:t.submission,authentication:t.authentication}),e=>e)},subscribeApprovalV1:e.approvalUpdates.subscribeApprovalV1}}function EH(e,t){if(e.status<200||e.status>=300)throw Object.assign(Error(DH(e)),{status:e.status});return t(e.body)}function DH(e){let t=jH(e.body);return t?`linked-device owner request failed: ${t.message}`:`linked-device owner request failed with HTTP ${e.status}`}function OH(e){let t=AH(e);if(!t)throw Error(`linked-device source contribution response is invalid`);return bn(t.session)}function kH(e){let t=AH(e);if(!t)throw Error(`linked-device session response is invalid`);return bn(t.session)}function AH(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return null;let t=new Map(Object.entries(e)),n=[...t.keys()],r=new Set([`ok`,`outcome`,`session`]);return n.length!==r.size||!n.every(e=>r.has(e))||t.get(`ok`)!==!0||t.get(`outcome`)!==`applied`&&t.get(`outcome`)!==`replayed`?null:{session:t.get(`session`)}}function jH(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return null;let t=new Map(Object.entries(e)),n=[...t.keys()];if(n.length===0||n.length>2||!n.every(e=>e===`code`||e===`message`))return null;let r=t.get(`message`);return typeof r==`string`?{message:r}:null}function MH(e){return`${hz}/${String(e)}`}function NH(e){let t=S(e);if(!t.ok)throw Error(t.error.message);return t.value}function PH(e){let t=a(e);if(t.ok)return t.value;throw Error(t.error.message)}function FH(e){switch(e){case`ble`:case`cable`:case`hybrid`:case`internal`:case`nfc`:case`smart-card`:case`usb`:return e;default:throw Error(`linked-device WebAuthn transport ${e} is unsupported`)}}function IH(e){e.byteLength>0&&e.fill(0)}function LH(e){let t=e.credential.authenticatorAttachment;if(t!==void 0&&t!==`platform`&&t!==`cross-platform`)throw Error(`linked-device WebAuthn authenticator attachment is invalid`);return{kind:`linked_device_webauthn_registration_v1`,credentialIdB64u:PH(e.credentialIdB64u),authenticatorAttachment:t??null,clientDataJsonB64u:e.credential.response.clientDataJSON,attestationObjectB64u:e.credential.response.attestationObject,transports:e.credential.response.transports.map(FH)}}function RH(e){return{async createTargetCredentialV1(t){let n=t.preparation.passkeyCreationOptions;if(n.walletAuthMethodId!==t.preparation.walletAuthMethodId)throw Error(`linked-device passkey options are bound to a different auth method`);let r=await e.authenticator.run({kind:`create_passkey`,registrationOptions:n,requirePrfFirst:!0});if(!r.ok)throw Error(`linked-device passkey creation failed: ${r.message}`);if(r.operation!==`create_passkey`||!r.requirePrfFirst)throw Error(`linked-device passkey creation returned the wrong operation result`);let i=LH(r),a=F(r.prf.prfFirstB64u);if(a.byteLength!==32)throw IH(a),Error(`linked-device passkey PRF output must be 32 bytes`);return{walletAuthMethodId:n.walletAuthMethodId,webauthnRegistration:i,factorSecret:a}}}}function zH(e,t){return t.authorityId===e.authorityId&&t.linkSessionId===e.linkSessionId&&t.packageSetDigestB64u===e.packageSetDigestB64u}async function BH(e){let[t,n]=await Promise.all([e.installation.listCommittedDeliveryResumesV1(),e.installation.listPendingActivationAcknowledgementsV1()]);for(let r of n){let n=t.find(zH.bind(null,r));if(!n)throw Error(`durable linked-device acknowledgement has no matching resume`);let i=await e.readExactSession({walletId:n.walletId,authorityId:n.authorityId,authMethodId:n.authMethodId});i.kind!==`missing`&&await UB({installation:e.installation,transport:e.transport,walletId:n.walletId,authorityId:n.authorityId,authMethodId:n.authMethodId,operationCredential:i.operationCredential})}}async function VH(e){let t=await K.readExactWithOperationCredential(e);switch(t.kind){case`found`:return{kind:`found`,operationCredential:t.operationCredential};case`missing`:return{kind:`missing`};case`upgrade_required`:throw Error(`Linked-device acknowledgement requires a newer client`)}}function HH(e){let t=wH({...e.workerEndpoint?{endpoint:e.workerEndpoint}:{},...e.workerTimeoutMs===void 0?{}:{timeoutMs:e.workerTimeoutMs}}),n=Az({owner:TH({request:e.ownerRequest,approvalUpdates:e.ownerApprovalUpdates}),http:e.http,relayerUrl:e.relayerUrl,publishableKey:e.publishableKey,projectEnvironmentId:e.projectEnvironmentId,keyMaterial:t,nowMs:e.nowMs,pollIntervalMs:e.pollIntervalMs}),r=Oz({http:e.http,relayerUrl:e.relayerUrl,projectEnvironmentId:e.projectEnvironmentId}),i=RH({authenticator:e.authenticator}),a=JB({indexedDB:G,sealing:t,nowMs:e.nowMs}),o=wB(e.custodyCeremonyTransport);return{transport:n,ownerAuthorization:e.ownerAuthorization,sourceContribution:e.sourceContribution,keyMaterial:t,targetCredential:i,authorityInstallation:a,readExpectedLockGenerationV1:async e=>{let t=await G.resolveSelectedWalletAuthority(String(e));if(t.kind===`missing_selection`)return 0;if(t.kind!==`resolved`)throw Error(`selected wallet authority is unavailable: ${t.kind}`);return t.selection.lockGeneration},ed25519ExportRoot:o,resumePendingAcknowledgementsV1:BH.bind(null,{installation:a,transport:r,readExactSession:VH}),dispose:t.close}}const UH=`/wallet/device-linking/v1/devices`;var WH=class extends Error{code=`owner_wallet_session_reauth_required`;constructor(){super(`The owner Wallet Session must be renewed`),this.name=`OwnerWalletSessionReauthRequiredError`}};function GH(e){let t=HH(e);return{linkedDeviceManagement:KH({request:e.managementRequest,authorizeRemoval:e.authorizeRemoval}),deviceLinkingPorts:t,dispose:t.dispose}}function KH(e){return{listLinkedDevices:async({walletId:t,limit:n,cursor:r})=>{let i=tr({kind:`linked_device_list_request_v1`,walletId:t,limit:n,cursor:r}),a=`${UH}?walletId=${encodeURIComponent(String(i.walletId))}&limit=${encodeURIComponent(String(i.limit))}&cursor=${encodeURIComponent(i.cursor??``)}`,o=await e.request.request({method:`GET`,canonicalPath:a,walletId:i.walletId});return JH(o,`list linked devices`),XH(o.body)},revokeLinkedDevice:async({walletId:t,walletAuthMethodId:n})=>{let{requestedAtMs:r,sourceProof:i}=await e.authorizeRemoval({walletId:t,walletAuthMethodId:n}),a=Yn({kind:`linked_device_revoke_request_v1`,walletId:t,walletAuthMethodId:n,requestedAtMs:r}),o=async()=>await e.request.request({method:`POST`,canonicalPath:`${UH}/${encodeURIComponent(String(n))}/revoke`,body:{...a,sourceProof:i},walletId:t}),s;try{s=await o()}catch(e){if(!(e instanceof yw)||e.code!==`network_error`)throw e;s=await o()}return qH(s)}}}function qH(e){return e.status===404?Hn({kind:`not_found`}):e.status===409?Hn({kind:`conflict`}):e.status===401||e.status===403?Hn({kind:`unauthorized`}):(JH(e,`revoke linked device`),QH(e.body))}function JH(e,t){if(e.status<200||e.status>=300){if(e.status===401&&tU(e.body))throw new WH;let n=YH(e.body);throw Error(n?`linked-device ${t} failed with HTTP ${e.status}: ${n}`:`linked-device ${t} failed with HTTP ${e.status}`)}}function YH(e){return typeof e!=`object`||!e||Array.isArray(e)?null:eU(e)||tU(e)?e.message:null}function XH(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`linked-device list response must be an object`);if(!ZH(e))throw Error(`linked-device list response has unexpected fields`);if(e.ok!==!0)throw Error(`linked-device list response is not successful`);return Xn({devices:e.devices,ownerDevices:e.ownerDevices,nextCursor:e.nextCursor})}function ZH(e){return Object.keys(e).sort().join(`|`)===`devices|nextCursor|ok|ownerDevices`}function QH(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`linked-device revoke response must be an object`);if(!$H(e))throw Error(`linked-device revoke response has unexpected fields`);if(e.ok!==!0)throw Error(`linked-device revoke response is not successful`);return Hn({kind:e.kind,walletAuthMethodId:e.walletAuthMethodId,authorityId:e.authorityId,revocationEpoch:e.revocationEpoch})}function $H(e){return Object.keys(e).sort().join(`|`)===`authorityId|kind|ok|revocationEpoch|walletAuthMethodId`}function eU(e){return Object.keys(e).sort().join(`|`)!==`kind|message|ok`||!(`ok`in e)||!(`kind`in e)||!(`message`in e)?!1:e.ok===!1&&(e.kind===`invalid_input`||e.kind===`internal`)&&typeof e.message==`string`&&e.message.trim().length>0}function tU(e){return typeof e!=`object`||!e||Array.isArray(e)||Object.keys(e).sort().join(`|`)!==`code|kind|message|ok`||!(`ok`in e)||!(`kind`in e)||!(`code`in e)||!(`message`in e)?!1:e.ok===!1&&e.kind===`unauthorized`&&typeof e.code==`string`&&typeof e.message==`string`&&e.message.trim().length>0}function nU(e){if(typeof e!=`string`||!e.trim())throw Error(`Yao lane request JSON is required`);return e}async function rU(e){let t=await Ra({ctx:e.workerCtx,kind:`walletCustodyCeremony`,request:{type:`openEd25519YaoLaneSource`,payload:{kind:`unlocked_ed25519_export_root_capability`,capability:e.capability,applicationBindingDigestB64u:e.applicationBindingDigestB64u,walletKeyId:e.walletKeyId,enrollmentId:e.enrollmentId,revocationEpoch:e.revocationEpoch,registeredPublicKeyB64u:e.registeredPublicKeyB64u}}});return new iU(e.workerCtx,t.sourceHandle)}var iU=class{#e=!1;constructor(e,t){this.workerCtx=e,this.sourceHandle=t}async discard(){this.#e||(this.#e=!0,await Ra({ctx:this.workerCtx,kind:`walletCustodyCeremony`,request:{type:`discardEd25519YaoLaneSource`,payload:{sourceHandle:this.sourceHandle}}}))}async prepareSourcePreservingRegistration(e){if(this.#e)throw Error(`Ed25519 Yao lane source is already consumed`);return this.#e=!0,{requestJson:nU((await Ra({ctx:this.workerCtx,kind:`walletCustodyCeremony`,request:{type:`prepareEd25519YaoSourcePreservingRegistration`,payload:{sourceHandle:this.sourceHandle,targetAdmission:e.targetAdmission,applicationBinding:e.applicationBinding,participantIds:e.participantIds,expectedRegisteredPublicKeyB64u:e.expectedRegisteredPublicKeyB64u,targetClientRecipientPublicKeyB64u:e.targetClientRecipientPublicKeyB64u}}})).requestJson)}}};function aU(e){return async({preparation:t})=>{let n=t.source.activation,r=e.readLinkedEcdsaHolderV1({materialActivation:n});if(r)return oU(r,n);let i=await e.readActiveEcdsaCapabilityManifestV1({materialActivation:n});return sU({sourceActivation:n,manifest:i}),{walletKeyId:cU(i),sourceDerivation:{applicationBindingDigestB64u:Tt(i.durableMaterial.routerAbEcdsaDerivationNormalSigning.scope.context.application_binding_digest_b64u),clientShareRetryCounter:i.durableMaterial.routerAbEcdsaDerivationNormalSigning.scope.public_identity.client_share_retry_counter,ecdsaThresholdKeyId:bi(i.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId),sourceNormalSigning:i.durableMaterial.routerAbEcdsaDerivationNormalSigning}}}}function oU(e,n){if(!g(e.materialActivation,n))throw Error(`linked ECDSA holder activation does not match preparation`);let r=e.activationReceipt.normalSigning,i=r.scope,a=Gr({walletId:e.walletId,signingRootId:i.signing_root_id,signingRootVersion:i.signing_root_version}),o=t(`wallet-key:ecdsa:${e.walletId}:${a}`);if(!o.ok)throw Error(`linked ECDSA source wallet key identity: ${o.error.message}`);return{walletKeyId:o.value,sourceDerivation:{applicationBindingDigestB64u:Tt(i.context.application_binding_digest_b64u),clientShareRetryCounter:i.public_identity.client_share_retry_counter,ecdsaThresholdKeyId:bi(e.ecdsaThresholdKeyId),sourceNormalSigning:r},linkedHolderHandleId:e.holderHandleId}}function sU(e){if(!g(e.manifest.activation.materialActivation,e.sourceActivation))throw Error(`ECDSA capability manifest activation does not match preparation`)}function cU(e){let n=Gr({walletId:e.signer.walletId,signingRootId:e.signer.signingRootId,signingRootVersion:e.signer.signingRootVersion}),r=t(`wallet-key:ecdsa:${e.signer.walletId}:${n}`);if(!r.ok)throw Error(`ECDSA source wallet key identity: ${r.error.message}`);return r.value}function lU(e){return{produceSourceContributionV1:async({preparation:t,capability:n,authentication:r})=>{let i=await rU({workerCtx:e.workerContext,capability:n,applicationBindingDigestB64u:await fU(t.applicationBinding),walletKeyId:String(t.walletKeyId),enrollmentId:String(t.enrollmentId),revocationEpoch:t.sourceRevocationEpoch,registeredPublicKeyB64u:t.sourceRegisteredPublicKeyB64u});try{let n=await i.prepareSourcePreservingRegistration({targetAdmission:t.targetAdmission,applicationBinding:t.applicationBinding,participantIds:t.participantIds,expectedRegisteredPublicKeyB64u:t.sourceRegisteredPublicKeyB64u,targetClientRecipientPublicKeyB64u:t.targetClientRecipientPublicKeyB64u}),a=Pr(await e.executeSourcePreservingV1({linkSessionId:t.linkSessionId,sourceBinding:t.sourceBinding,targetRequestJson:n.requestJson,participantIds:t.participantIds,authentication:r}));return{kind:`linked_device_ed25519_source_contribution_v1`,keyFamily:`ed25519`,linkSessionId:t.linkSessionId,enrollmentId:t.enrollmentId,sourceAuthorityId:t.sourceAuthorityId,walletKeyId:t.walletKeyId,targetDeviceId:t.targetDeviceId,targetFactorVerificationDigestB64u:t.targetFactorVerificationDigestB64u,targetMaterialActivation:t.targetMaterialActivation,targetClientRecipientPublicKeyB64u:t.targetClientRecipientPublicKeyB64u,targetSigningWorkerRecipientPublicKeyB64u:t.targetSigningWorkerRecipientPublicKeyB64u,sourceRegisteredPublicKeyB64u:t.sourceRegisteredPublicKeyB64u,sourceBinding:t.sourceBinding,reservationId:a.reservationId,targetBinding:t.targetAdmission.binding,activationReceipt:a.activationReceipt,participantIds:a.participantIds,deriver_a_client_package:a.deriver_a_client_package,deriver_b_client_package:a.deriver_b_client_package}}finally{await i.discard()}}}}function uU(e){return{ed25519:e.ed25519,ecdsa:{produceSourceContributionV1:async({preparation:t})=>await dU({workerContext:e.workerContext,readMetadataV1:e.readEcdsaMetadataV1,preparation:t})}}}async function dU(e){let t=await e.readMetadataV1({preparation:e.preparation}),n=await Lu({preparation:e.preparation,workerCtx:e.workerContext,...t.linkedHolderHandleId===void 0?{}:{linkedHolderHandleId:t.linkedHolderHandleId}});return{kind:`linked_device_ecdsa_source_contribution_v1`,keyFamily:`ecdsa_secp256k1`,linkSessionId:e.preparation.linkSessionId,enrollmentId:e.preparation.enrollmentId,sourceAuthorityId:e.preparation.sourceAuthorityId,walletKeyId:t.walletKeyId,targetDeviceId:e.preparation.target.targetDeviceId,targetFactorVerificationDigestB64u:e.preparation.target.targetFactorVerificationDigestB64u,sourceSigner:e.preparation.source,sourceDerivation:t.sourceDerivation,target:e.preparation.target,package:n.package}}async function fU(e){return P(Uint8Array.from(await Nr(e)))}const pU=new Ui;async function mU(e,t){let n=await G.resolveSelectedWalletAuthority(String(t.walletId));if(n.kind!==`resolved`)throw Error(`Unlock the wallet before removing a device`);return await fz(e,{kind:`selected_method`,walletAuthMethodId:n.authMethod.walletAuthMethodId},t)}function hU(e){let{platform:t,ownerAuthorities:n}=e,r=vU({signingEngine:e.signingEngine,ownerRequest:n.ownerRequest,readEcdsaMetadataV1:_U({signingEngine:e.signingEngine})}),i=GH({authenticator:t.authenticator,http:t.http,relayerUrl:String(e.configs.network.relayer?.url||``).trim(),publishableKey:e.configs.registration.publishableKey,projectEnvironmentId:e.configs.registration.projectEnvironmentId,ownerRequest:n.ownerRequest,ownerApprovalUpdates:gU({request:n.ownerRequest,pollIntervalMs:1e3}),ownerAuthorization:n.ownerAuthorization,sourceContribution:r,custodyCeremonyTransport:Ka(e.signingEngine.getSignerWorkerContext()),managementRequest:n.managementRequest,authorizeRemoval:mU.bind(void 0,{configs:e.configs,signingEngine:e.signingEngine}),nowMs:Date.now,pollIntervalMs:1e3}),a=new HV({getContext:e.getContext,ports:i.deviceLinkingPorts});return{domain:{linkedDeviceManagement:i.linkedDeviceManagement,startLinking:a.startDevice2LinkingFlow.bind(a),cancelLinking:xU.bind(null,a),approveLinking:gu.bind(null,{execute:a.scanAndLinkDevice.bind(a),readAppearance:e.readAppearance,readMeasurementBinding:e.signingEngine.getWalletIframeSurfaceMeasurementBinding.bind(e.signingEngine)})},resumePendingAcknowledgementsV1:i.deviceLinkingPorts.resumePendingAcknowledgementsV1,dispose:SU.bind(null,i.dispose)}}function gU(e){return{getApprovalV1:async t=>await yU(e.request,t),subscribeApprovalV1:async t=>bU({...e,input:t})}}function _U(e){return aU({readActiveEcdsaCapabilityManifestV1:async({materialActivation:t})=>{let n=e.signingEngine.readWalletAuthenticationState();if(n.kind!==`authenticated`)throw Error(`ECDSA source metadata requires an authenticated wallet`);let r=await pU.lookupByMaterialActivation({walletId:n.walletId,materialActivation:t});if(r.kind===`ambiguous_authority`&&(r=await Vv({walletId:n.walletId,materialActivation:t,authorities:r.authorities})),r.kind!==`active`)throw Error(`ECDSA source metadata manifest is ${r.kind}`);return r.manifest},readLinkedEcdsaHolderV1:({materialActivation:t})=>{let n=e.signingEngine.readWalletAuthenticationState();return n.kind===`authenticated`?Dd({walletId:n.walletId,materialActivation:t}):null}})}function vU(e){let t=e.signingEngine.getSignerWorkerContext();return uU({workerContext:t,ed25519:lU({workerContext:t,executeSourcePreservingV1:async({linkSessionId:t,targetRequestJson:n,authentication:r})=>{let i=await e.ownerRequest.requestOwnerV1({method:`POST`,canonicalPath:`${hz}/${String(t)}/source-contribution/execute`,body:JSON.parse(n),authentication:r});if(i.status<200||i.status>=300)throw Error(`Wallet-host Ed25519 source-preserving request failed with HTTP ${i.status}`);return i.body}}),readEcdsaMetadataV1:e.readEcdsaMetadataV1})}async function yU(e,t){let n=await e.requestOwnerV1({method:`GET`,canonicalPath:`${hz}/${String(t.linkSessionId)}/approval`,authentication:t.authentication});if(n.status<200||n.status>=300)throw Error(`Wallet-host approval request failed with HTTP ${n.status}`);return $n(n.body)}function bU(e){let t=!1,n=null,r=async()=>{if(!t){try{let n=await yU(e.request,e.input);t||e.input.onResult(n)}catch{}t||(n=setTimeout(()=>void r(),e.pollIntervalMs))}};return r(),{close:()=>{t=!0,n&&clearTimeout(n),n=null}}}async function xU(e){mu({kind:`all`}),await e.cancelDeviceLinking()}function SU(e){mu({kind:`all`}),e()}const CU=[`delivery`,`challengeId`,`otpCode`,`resend`,`webauthn`,`webauthnRegistration`,`webauthn_registration`,`authenticatorOptions`,`publicKey`,`passkey`,`passkeyPrfFirstB64u`],wU=[`recoveryKeys`,`recoveryCodes`,`bootstrap`,`bootstrapMaterial`,`clientSecret32`];function TU(e,t){if(typeof e!=`number`||!Number.isSafeInteger(e)||e<=0)throw Error(`${t} must be a positive integer timestamp`);return e}function EU(e,t,n){let r=t.find(t=>Object.prototype.hasOwnProperty.call(e,t));if(r)throw Error(`${n} must not include ${r}`)}function DU(e){return N(e,`offerId`)}function OU(e,t=`candidateId`){return N(e,t)}function kU(e){let t=E(e,`registration candidate`);return EU(t,CU,`registration candidate`),EU(t,wU,`registration candidate`),{candidateId:OU(t.candidateId),walletId:hi(N(t.walletId,`candidate.walletId`))}}function AU(e){let t=E(e,`Google Email OTP registration offer`);if(EU(t,CU,`Google Email OTP registration offer`),EU(t,wU,`Google Email OTP registration offer`),t.kind!==`google_email_otp_registration_offer_v1`)throw Error(`registration offer kind must be google_email_otp_registration_offer_v1`);if(!Array.isArray(t.candidates)||t.candidates.length<1)throw Error(`registration offer must include at least one candidate`);let n=t.candidates.map(kU),r=OU(t.selectedCandidateId,`selectedCandidateId`);if(!n.some(e=>e.candidateId===r))throw Error(`selectedCandidateId must refer to an offered candidate`);let[i,...a]=n;return{kind:`google_email_otp_registration_offer_v1`,offerId:DU(t.offerId),expiresAtMs:TU(t.expiresAtMs,`expiresAtMs`),emailHint:N(t.emailHint,`emailHint`),candidates:[i,...a],selectedCandidateId:r}}const jU=600*1e3;function MU(e){return{ok:!0,value:e}}function NU(e,t){let n=t instanceof Error&&t.message?t.message:String(t||e),r=t&&typeof t==`object`&&`retryAfterMs`in t?Number(t.retryAfterMs):NaN;return{ok:!1,error:{code:e,message:n,...Number.isFinite(r)&&r>=0?{retryAfterMs:Math.floor(r)}:{}}}}function PU(e,t,n){let r=NU(e,n);return r.ok?r:{ok:!1,error:{...r.error,message:t}}}function FU(e){let t=e&&typeof e==`object`&&`code`in e?String(e.code||``):``;if(t.includes(`rate`))return`email_otp_rate_limited`;if(t.includes(`expired`))return`email_otp_expired`;if(t.includes(`invalid`)||t.includes(`otp`))return`email_otp_invalid_code`;let n=e instanceof Error?e.message.toLowerCase():``;return n.includes(`backup`)?`recovery_code_backup_incomplete`:n.includes(`expired`)?`email_otp_expired`:n.includes(`invalid`)||n.includes(`code`)?`email_otp_invalid_code`:`unlock_failed`}function IU(e){if((e&&typeof e==`object`&&`code`in e?String(e.code||``):``)===`already_finalized_restore_required`)return`registration_restore_required`;let t=e instanceof Error?e.message.toLowerCase():``;return t.includes(`already finalized`)||t.includes(`restore or unlock`)?`registration_restore_required`:t.includes(`backup`)?`recovery_code_backup_incomplete`:t.includes(`expired`)?`flow_expired`:`registration_failed`}function LU(e){let t=String(e.walletId||``).trim();if(!t)throw Error(`Google verification did not return a wallet id`);return hi(t)}function RU(e){let t=String(e.providerSubject||``).trim();if(!t)throw Error(`Google verification did not return a provider subject`);return t}function zU(e){let t=String(e.email||``).trim();if(!t)throw Error(`Google verification did not return an email address`);return t}function BU(e){let t=typeof e==`number`?e:typeof e==`string`?Date.parse(e):NaN;return Number.isFinite(t)&&t>Date.now()?t:Date.now()+jU}function VU(e){let t=typeof e==`number`?e:typeof e==`string`?Date.parse(e):NaN;if(!Number.isFinite(t)||t<=Date.now())throw Error(`Google Email OTP registration offer is expired or missing expiry`);return Math.floor(t)}function HU(e){return e.mode===`register`?{title:`Create your Email OTP wallet`,description:`Google verified ${e.emailHint}.`,submitLabel:`Create wallet`,helperText:``}:{title:`Check your email to unlock your wallet`,description:`Enter the 6-digit code we sent to ${e.emailHint}.`,submitLabel:`Unlock wallet`,helperText:``}}function UU(e){return e===`register_started`?`register`:`login`}function WU(e){if(!e||typeof e!=`object`||!(`code`in e))return!1;let t=String(e.code||``).trim(),n=e instanceof Error?e.message:String(e.message||``).trim();return t===`not_found`&&/Email OTP enrollment not found/i.test(n)}function GU(){return`Account doesn't exist. Create your account to continue.`}function KU(e){return!e||typeof e!=`object`||!(`code`in e)?`google_verification_failed`:Reflect.get(e,`code`)===`stale_identity_mapping`?`google_account_registration_required`:`google_verification_failed`}function qU(e,t){if(e.replaceExistingWallet===!0&&t!==`register`)throw Error(`replaceExistingWallet is only valid with register mode`);return{idToken:e.idToken,accountMode:t,relayUrl:e.relayUrl,restartRegistrationOffer:t===`register`&&e.replaceExistingWallet===!0,...e.mode===`login`&&e.loginTarget.kind===`wallet`?{loginWalletId:String(e.loginTarget.walletId)}:{}}}function JU(e){return e.providerSubject.toLowerCase()===e.verifiedEmail.toLowerCase()?`email`:`google`}async function YU(e){return await e.deps.resolveGoogleEmailOtpProvider(qU(e.input,e.input.mode))}function XU(e){let t=e.authInput.mode===`login`&&e.authInput.loginTarget.kind===`wallet`?hi(String(e.authInput.loginTarget.walletId)):LU(e.resolution),n=zU(e.resolution),r=e.resolution,i=UU(r.mode),a=r.mode===`register_started`?AU({kind:`google_email_otp_registration_offer_v1`,offerId:r?.offer?.offerId,expiresAtMs:VU(r.expiresAtMs),emailHint:n,candidates:r?.offer?.candidates,selectedCandidateId:r?.offer?.selectedCandidateId}):void 0;return{walletId:a?$U(a).walletId:t,...a?{offer:a}:{},providerSubject:RU(e.resolution),emailHint:n,requestedMode:e.authInput.mode,mode:i,expiresAtMs:r.mode===`register_started`?VU(r.expiresAtMs):BU(void 0),...r.mode===`register_started`?{registrationAttemptId:r.registrationAttemptId}:{}}}async function ZU(e){if(e.state.mode!==`login`||!e.deps.resolveLinkedEmailOtpWalletAuth)return e.state;let t=await e.deps.resolveLinkedEmailOtpWalletAuth({walletId:String(e.state.walletId),email:e.state.emailHint,provider:JU({providerSubject:e.state.providerSubject,verifiedEmail:e.state.emailHint}),providerSubjectId:e.state.providerSubject});switch(t.kind){case`none`:return e.state;case`selected`:return{...e.state,linkedEmailOtpSelection:t};case`rejected`:throw Error(t.message);default:throw Error(`Google Email OTP linked auth selection is invalid`)}}function QU(e){let t=e.offer.candidates.findIndex(t=>t.walletId===e.currentWalletId);return t<0||e.offer.candidates.length<2?null:e.offer.candidates[(t+1)%e.offer.candidates.length]||null}function $U(e){let t=e.candidates.find(t=>t.candidateId===e.selectedCandidateId);if(!t)throw Error(`Google Email OTP registration offer selected candidate is missing`);return t}async function eW(e){let t=await e.deps.requestEmailOtpChallenge({walletId:e.state.walletId,...e.state.linkedEmailOtpSelection?{walletAuthMethodId:e.state.linkedEmailOtpSelection.walletAuthMethodId}:{},...e.relayUrl?{relayUrl:e.relayUrl}:{},...e.onEvent?{onEvent:e.onEvent}:{}});return{challengeId:t.challengeId,expiresAtMs:tW(t.expiresAtMs),emailHint:t.delivery.emailHint,delivery:t.delivery,walletAuthMethodId:t.walletAuthMethodId,signerSelection:t.signerSelection}}function tW(e){if(typeof e!=`number`||!Number.isSafeInteger(e)||e<=Date.now())throw Error(`Email code challenge is expired or missing expiry`);return e}function nW(e){let t=e.policy||{kind:`configured`};return t.kind===`none`?[]:t.kind===`explicit`?t.targets:Jo({signerOptions:e.configs.signing.thresholdEcdsa.provisioningDefaults,chains:e.configs.network.chains}).map(e=>e.chainTarget)}function rW(e){let t=e.policy||{kind:`configured`};return t.kind===`none`?[]:t.kind===`explicit`?t.targets:Go(e.configs.network.chains).map(e=>e.chainTarget)}function iW(e){return{...e.onEvent?{onEvent:e.onEvent}:{},...e.recoveryCodeBackup?{recoveryCodeBackup:e.recoveryCodeBackup}:{}}}function aW(e){let t=Math.floor(Number(e.signing.sessionDefaults?.remainingUses)||0);return t<=0?xe:Math.min(t,xe)}async function oW(e){let t=sn({walletId:e.state.walletId}),n={kind:`wallet_auth_method`,walletAuthMethodId:e.challenge.walletAuthMethodId},[r]=e.targets;if(!r){if(e.challenge.signerSelection.kind!==`ed25519_only`)throw Error(`Selected Email OTP authority requires an ECDSA chain target`);await e.deps.loginWithEmailOtpEd25519YaoCapability({walletSession:t,authoritySelector:n,providerSubjectId:e.state.providerSubject,emailOtpAuthorityEmail:e.state.emailHint,challengeId:e.challenge.challengeId,otpCode:e.otpCode,remainingUses:aW(e.deps.configs),ed25519Selection:e.challenge.signerSelection});return}let i={walletSession:t,walletAuthMethodId:n.walletAuthMethodId,providerIdentity:{provider:JU({providerSubject:e.state.providerSubject,verifiedEmail:e.state.emailHint}),providerSubjectId:e.state.providerSubject},challengeId:e.challenge.challengeId,emailOtpAuthorityEmail:e.state.emailHint,otpCode:e.otpCode,...e.input.relayUrl?{relayUrl:e.input.relayUrl}:{},...e.input.emailOtpAuthPolicy?{emailOtpAuthPolicy:e.input.emailOtpAuthPolicy}:{},...e.input.onEvent?{onEvent:e.input.onEvent}:{}};if(e.challenge.signerSelection.kind!==`ecdsa`)throw Error(`Selected Email OTP authority has no ECDSA signer`);await e.deps.loginWithEmailOtpEcdsaCapability({...i,chainTarget:r,publicationChainTargets:e.targets,keyHandle:e.challenge.signerSelection.keyHandle,ed25519Selection:e.challenge.signerSelection.ed25519})}function sW(e){return{...e.options,signerOptions:{tempo:{enabled:!1,signingSession:{kind:`jwt`,ttlMs:0,remainingUses:0}},evm:{enabled:!1,signingSession:{kind:`jwt`,ttlMs:0,remainingUses:0}}}}}async function cW(e,t){let n=await e.getWalletSession(t);if(n.appIdentity.kind!==`resolved`||String(n.appIdentity.walletId)!==String(t)||n.authentication.kind!==`authenticated`||String(n.authentication.walletId)!==String(t))throw Error(`Wallet auth completed, but the local signing session is not ready yet.`);return n}async function lW(e,t){let n=await e.getWalletSession(t);if(n.appIdentity.kind!==`resolved`||String(n.appIdentity.walletId)!==String(t))throw Error(`Wallet registration completed, but the local wallet identity is not ready.`);return n}function uW(e,t){return vo(t)?{kind:`started`,completion:e.prewarmEmailOtpYao().catch(()=>void 0)}:{kind:`not_started`}}async function dW(e,t){let n;try{n=XU({authInput:t,resolution:await YU({deps:e,input:t})}),n=await ZU({deps:e,state:n})}catch(e){return NU(KU(e),e)}if(n.mode===`register`)return MU(hW(e,{state:n,input:t,prewarm:{kind:`not_started`}}));try{let r=await eW({deps:e,state:n,...t.relayUrl?{relayUrl:t.relayUrl}:{},...t.onEvent?{onEvent:t.onEvent}:{}});return MU(_W(e,{state:n,challenge:r,input:t}))}catch(e){return WU(e)?PU(`google_account_registration_required`,GU(),e):NU(`email_otp_challenge_failed`,e)}}async function fW(e,t){if(t.method===`google`){let n=await dW(e,{mode:`login`,idToken:t.idToken,loginTarget:t.target,onEvent:t.onEvent});return n.ok?n.value.mode===`login`?MU(n.value):NU(`unlock_failed`,Error(`Email unlock requires an existing wallet`)):n}try{let n=t.email.trim().toLowerCase();if(!n)throw Error(`Email address is required`);let r=await ZU({deps:e,state:{walletId:hi(t.walletId),providerSubject:n,emailHint:n,requestedMode:`login`,mode:`login`,expiresAtMs:Date.now()+jU}});return r.linkedEmailOtpSelection?MU(_W(e,{state:r,challenge:await eW({deps:e,state:r,onEvent:t.onEvent}),input:{onEvent:t.onEvent}})):NU(`unlock_failed`,Error(`No active email method matches this wallet`))}catch(e){return NU(`email_otp_challenge_failed`,e)}}function pW(e){let t=!0;return{ensureActive(){if(!t)throw Error(`Google Email OTP wallet auth flow is no longer active`);if(Date.now()>e.state.expiresAtMs)throw t=!1,Error(`Google Email OTP wallet auth flow expired`)},burn(){t=!1}}}function mW(e){return String(e.input.relayUrl||e.deps.configs.network.relayer?.url||``).trim()}function hW(e,t){let n=String(t.state.registrationAttemptId||``).trim();if(!n)throw Error(`Google Email OTP registration requires a registration attempt id`);if(!t.state.offer)throw Error(`Google Email OTP registration requires an offer`);let r=t.state.offer,i=nW({configs:e.configs,policy:t.input.ecdsaTargets}),a=iW({onEvent:t.input.onEvent,recoveryCodeBackup:t.input.recoveryCodeBackup}),o=i.length?a:sW({options:a}),s=$U(r).walletId,c={kind:`email_otp`,proofKind:`google_sso_registration`,email:t.state.emailHint,providerSubject:t.state.providerSubject,googleEmailOtpRegistrationAttemptId:n,googleEmailOtpRegistrationOfferId:r.offerId,googleEmailOtpRegistrationCandidateId:r.selectedCandidateId},l={wallet:{kind:`provided`,walletId:s},authMethod:c,signerSelection:t.input.signerSelection??Ts({configs:e.configs,options:o,ecdsaChainTargets:i}),options:o},u=t.prewarm.kind===`not_started`?uW(e,l.signerSelection):t.prewarm,d=pW({state:t.state});return{kind:`google_email_otp_wallet_auth_flow_v1`,state:`registration_ready`,flowId:`google-email-otp-registration:${s}:${n}`,requestedMode:t.state.requestedMode,mode:`register`,walletId:s,emailHint:t.state.emailHint,prompt:HU({mode:`register`,emailHint:t.state.emailHint}),expiresAtMs:t.state.expiresAtMs,completeRegistration:async()=>{try{d.ensureActive();let t=await e.registerWallet(l);if(!t.success){let e=Object.assign(Error(t.error||`Wallet registration failed`),{code:t.errorCode});return NU(IU(e),e)}return d.burn(),MU({walletId:s,mode:`register`,session:await lW(e,s),registration:t})}catch(e){return NU(IU(e),e)}},rerollWalletId:async()=>{try{if(d.ensureActive(),!t.state.offer)return NU(`google_verification_failed`,Error(`Google Email OTP registration offer is missing wallet candidates`));let n=QU({offer:t.state.offer,currentWalletId:s});return n?(d.burn(),MU(hW(e,{state:{...t.state,walletId:n.walletId,offer:{...t.state.offer,selectedCandidateId:n.candidateId}},input:t.input,prewarm:u}))):NU(`google_verification_failed`,Error(`Google Email OTP registration offer has no alternate wallet candidate`))}catch(e){return NU(`google_verification_failed`,e)}},cancel:async()=>{d.burn()}}}var gW=class{state=`ready`;constructor(e){this.expiresAtMs=e}begin(){if(this.state!==`ready`)throw Error(`Email unlock flow is no longer available`);if(Date.now()>=this.expiresAtMs)throw this.state=`finished`,Error(`Email unlock flow expired`);this.state=`running`}release(){this.state===`running`&&(this.state=`ready`)}burn(){this.state=`finished`}cancel(){if(this.state===`running`)throw Error(`Email unlock operation is already in progress`);this.burn()}};function _W(e,t){let n=new gW(t.state.expiresAtMs);return{kind:`google_email_otp_wallet_auth_flow_v1`,state:`challenge_sent`,flowId:`google-email-otp-login:${t.state.walletId}:${t.challenge.challengeId}`,requestedMode:t.state.requestedMode,mode:`login`,walletId:t.state.walletId,emailHint:t.challenge.emailHint,prompt:HU({mode:`login`,emailHint:t.challenge.emailHint}),delivery:t.challenge.delivery,expiresAtMs:t.state.expiresAtMs,resend:async()=>{let r=!1;try{n.begin(),r=!0;let i=await eW({deps:e,state:t.state,...t.input.relayUrl?{relayUrl:t.input.relayUrl}:{},...t.input.onEvent?{onEvent:t.input.onEvent}:{}});return n.burn(),MU(_W(e,{state:t.state,challenge:i,input:t.input}))}catch(e){return NU(`email_otp_challenge_failed`,e)}finally{r&&n.release()}},submit:async r=>{let i=!1;try{if(n.begin(),i=!0,Date.now()>=t.challenge.expiresAtMs)return NU(`email_otp_expired`,Error(`Email code expired. Request a new code.`));let a=String(r.otpCode||``).trim();if(!/^\d{6}$/.test(a))return NU(`email_otp_invalid_code`,Error(`Enter the 6-digit code from your email.`));let o=rW({configs:e.configs,policy:t.input.ecdsaTargets}),s=t.challenge.signerSelection.kind===`ed25519_only`?[]:o;if(t.state.linkedEmailOtpSelection?.execution===`authority`){if(!e.loginWithLinkedEmailOtpWallet)throw Error(`Exact linked Email OTP wallet unlock is unavailable`);await e.loginWithLinkedEmailOtpWallet({walletId:String(t.state.walletId),walletAuthMethodId:t.state.linkedEmailOtpSelection.walletAuthMethodId,email:t.state.emailHint,providerSubjectId:t.state.providerSubject,challengeId:t.challenge.challengeId,otpCode:a,relayUrl:mW({deps:e,input:t.input})})}else await oW({deps:e,state:t.state,input:t.input,challenge:t.challenge,otpCode:a,targets:s});n.burn();let c=await cW(e,t.state.walletId);return MU({walletId:t.state.walletId,mode:`login`,session:c})}catch(e){return NU(FU(e),e)}finally{i&&n.release()}},cancel:async()=>{n.cancel()}}}async function vW(e){return await e.challenge.submit({otpCode:e.code})}function yW(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function bW(){return{emailOtpProofVerificationMs:0,walletUnlockExchangeMs:0,ecdsaMaterialRestoreMs:0,signingSessionSealApplyMs:0,warmCapabilityPersistenceMs:0,activeRuntimeConstructionMs:0,emailHashLookupMs:0,workerUnlockAndSessionBootstrapMs:0,walletStateActivationMs:0,runtimePostconditionMs:0,walletIframeRoundTripMs:0}}function xW(e,t,n){SW(e,t,n)}function SW(e,t,n){let r=Math.max(0,Math.round(n));e[t]+=r,CW()&&console.info(`[EmailOtpUnlock] timing`,{bucket:t,deltaMs:r,accumulatedMs:e[t]})}function CW(){return Reflect.get(globalThis,`__SEAMS_EMAIL_OTP_UNLOCK_DIAGNOSTICS`)===!0}function wW(e){if(!CW())return;let t=Object.entries(e.timings),n=[];for(let[e,r]of t)r>0&&n.push({bucket:e,durationMs:r});n.sort(kW);let r=n.slice(0,5),i=e.error instanceof Error?e.error.message:e.error?String(e.error):``,a={kind:`email_otp_unlock_timing_summary_v1`,status:e.status,mode:e.mode,walletId:e.walletId,...e.chainTarget?{chainTarget:e.chainTarget}:{},totalElapsedMs:Math.max(0,Math.round(yW()-e.startedAtMs)),timings:e.timings,topBuckets:r,...i?{errorMessage:i}:{}};console.info(`[EmailOtpUnlock] timing summary`,a)}function TW(e,t){if(!A(e))throw Error(`[SeamsWeb] ${t} requires a concrete ECDSA chainTarget`);return tn(e)}function EW(e,t){return`email-otp-unlock:${String(e||`unknown-wallet`).trim()||`unknown-wallet`}:${String(t||`active`).trim()||`active`}`}function DW(e,t){try{e?.(Ni(t))}catch{}}function OW(e,t){let n=Dt(t.error);DW(e,{...t,phase:n?W.CANCELLED:W.FAILED,status:n?`cancelled`:`failed`,interaction:t.interaction??{kind:n?`otp_input`:`none`,overlay:`hide`},error:{message:t.error.message}})}function kW(e,t){return t.durationMs-e.durationMs}async function AW(e,t){if(e.kind===`device_link`)return`authority`;let n=await G.listPendingWalletRegistrationCommits();for(let e of n)if(e.operation===`near_provisioning`&&e.signerPlanKind===`near_ed25519_and_evm_family_ecdsa`&&e.walletAuthMethodId===t)return`authority`;return`ordinary`}function jW(e){let t=r(e);if(!t.ok)throw Error(`Email OTP unlock returned an invalid wallet auth method id`);return t.value}function MW(e){let t=e.recovery.verifiedAuthorityProjection.authority,n=ni({kind:`wallet_auth_authority_ref`,walletId:t.walletId,walletAuthMethodId:e.authorization.record.authMethodId,authorityDigest:t.authorityDigestB64u});if(!n)throw Error(`Email OTP unlock returned an invalid authority reference`);return n}function NW(e,t,n){SW(e,t,yW()-n)}function PW(e){return{kind:`email_otp_unlock_active_runtime_state_v1`,inventory:e}}function FW(e){if(e.result.authorization.record.walletId!==e.walletSession.walletId)throw Error(`Email OTP unlock authorization does not match the wallet session`);return{kind:`email_otp_unlock_activation_plan_v1`,mode:`evm_family_ecdsa`,activeAuthorization:e.result.authorization,authorizations:e.result.authorizations,runtimeState:PW(e.runtimeInventory)}}function IW(e){CW()&&console.info(`[EmailOtpUnlock] activation plan constructed`,{kind:e.kind,mode:e.mode,walletId:e.activeAuthorization.record.walletId,authorityDigest:e.activeAuthorization.record.authorityDigestB64u,walletSessionIds:e.authorizations.map(VW),runtimeTargetCount:e.runtimeState.inventory.ecdsaByTarget.size})}function LW(e,t){let n=t.chainTarget.kind===`tempo`?`Tempo`:`EVM`,r={flowId:t.flowId,walletId:t.walletId,authMethod:`email_otp`,...t.challengeId?{requestId:t.challengeId}:{}};switch(t.progress.code){case`otp.verify.succeeded`:return DW(e,{...r,phase:W.STEP_03_EMAIL_OTP_VERIFY_SUCCEEDED,status:`succeeded`,interaction:{kind:`otp_input`,overlay:`hide`}}),W.STEP_03_EMAIL_OTP_VERIFY_SUCCEEDED;case`signer.ecdsa.bootstrap.started`:return DW(e,{...r,phase:W.STEP_05_SIGNING_SESSION_WARMUP_STARTED,status:`running`,message:`Preparing ${n} signing session`,data:{chainTarget:t.chainTarget}}),W.STEP_05_SIGNING_SESSION_WARMUP_STARTED;case`signer.ecdsa.bootstrap.prepared`:return DW(e,{...r,phase:W.STEP_05_SIGNING_SESSION_WARMUP_STARTED,status:`running`,message:`Coordinating ${n} signing session`,data:{chainTarget:t.chainTarget}}),W.STEP_05_SIGNING_SESSION_WARMUP_STARTED;case`signer.ecdsa.bootstrap.responded`:return DW(e,{...r,phase:W.STEP_05_SIGNING_SESSION_WARMUP_STARTED,status:`running`,message:`Finalizing ${n} signing session`,data:{chainTarget:t.chainTarget}}),W.STEP_05_SIGNING_SESSION_WARMUP_STARTED;case`signer.ecdsa.bootstrap.succeeded`:return DW(e,{...r,phase:W.STEP_05_SIGNING_SESSION_WARMUP_STARTED,status:`running`,message:`Saving ${n} signing session`,data:{chainTarget:t.chainTarget}}),W.STEP_05_SIGNING_SESSION_WARMUP_STARTED;default:return null}}function RW(e){let t=new BW(e);return{requestEmailCode:t.requestEmailCode.bind(t),unlockWithEmailCode:vW,startGoogleSignIn:t.startGoogleSignInDomain.bind(t)}}function zW(e){return{curve:`ecdsa`,chainTarget:e}}var BW=class{constructor(e){this.deps=e}async readOwnerScopedSigningLanes(e){return await this.deps.getContext().signingEngine.readOwnerScopedSigningLanes(e,new q)}async requestUnlockChallenge(e){let t=EW(e.walletId);DW(e.onEvent,{flowId:t,walletId:e.walletId,authMethod:`email_otp`,phase:W.STEP_03_EMAIL_OTP_CHALLENGE_STARTED,status:`running`});try{let t=e.walletAuthMethodId;if(!t){let n=await G.resolveSelectedWalletAuthority(String(e.walletId||``).trim());n.kind===`resolved`&&n.authMethod.kind===`email_otp`&&n.authMethod.status===`active`&&String(n.authMethod.walletId)===String(e.walletId||``).trim()&&(t=String(n.authMethod.walletAuthMethodId))}if(!t)throw Error(`Email OTP challenge requires an exact walletAuthMethodId`);let n=await ls({relayUrl:String(e.relayUrl||this.deps.getContext().configs.network.relayer.url||``).trim(),walletId:String(e.walletId||``).trim(),walletAuthMethodId:t});return DW(e.onEvent,{flowId:EW(e.walletId,n.challengeId),walletId:e.walletId,authMethod:`email_otp`,phase:W.STEP_03_EMAIL_OTP_CHALLENGE_SENT,status:`succeeded`,data:{challengeId:n.challengeId,otpChannel:n.otpChannel}}),n}catch(n){let r=I(n);throw OW(e.onEvent,{flowId:t,walletId:e.walletId,authMethod:`email_otp`,error:r}),r}}async loginWithEmailOtpEcdsaCapabilityDomain(e){let t=e.walletSession.walletId,n=EW(t,e.challengeId),r=TW(e.chainTarget,`Email OTP ECDSA unlock`),i={startedAtMs:yW(),timings:bW()};DW(e.onEvent,{flowId:n,walletId:t,authMethod:`email_otp`,phase:W.STEP_03_EMAIL_OTP_VERIFY_STARTED,status:`running`,interaction:{kind:`otp_input`,overlay:`none`},...e.challengeId?{requestId:e.challengeId}:{}});try{let a=new Set,o=HW.bind(null,a,e.onEvent,{flowId:n,walletId:t,challengeId:e.challengeId,chainTarget:r}),s=UW.bind(null,a,e.onEvent),c=yW(),l=await this.emailOtpEmailHashHex(e.emailOtpAuthorityEmail||``);NW(i.timings,`emailHashLookupMs`,c),c=yW();let u=e.ed25519Selection.kind===`present`?e.ed25519Selection:null,d=await this.deps.getContext().signingEngine.loginWithEmailOtpEcdsaCapabilityInternal({...e,authoritySelector:{kind:`wallet_auth_method`,walletAuthMethodId:e.walletAuthMethodId},chainTarget:r,emailHashHex:l,...u?{ed25519YaoRecovery:{kind:`requested`,providerSubject:e.providerIdentity.providerSubjectId,signerSlot:u.signerSlot,nearAccountId:u.nearAccountId,expectedOperationalPublicKey:u.operationalPublicKey,expectedThresholdSessionId:u.thresholdSessionId}}:{ed25519YaoRecovery:{kind:`not_requested`}},ecdsaBootstrapAuthorization:{kind:`route_plan_auth`},providerIdentity:{kind:`explicit_provider_user`,provider:e.providerIdentity.provider,providerUserId:e.providerIdentity.providerSubjectId},onProgress:o});await Hk({walletId:String(t),walletAuthMethodId:String(e.walletAuthMethodId),projection:d.recovery.verifiedAuthorityProjection});let f;if(u){let t;switch(d.ed25519YaoRecovery.kind){case`capability`:t=await this.deps.getContext().signingEngine.activateEmailOtpEd25519CustodyCapabilityInternal({walletSession:e.walletSession,providerSubject:e.providerIdentity.providerSubjectId,emailHashHex:l,signerSlot:u.signerSlot,expectedOperationalPublicKey:u.operationalPublicKey,expectedThresholdSessionId:u.thresholdSessionId,bootstrap:d.ed25519YaoRecovery.bootstrap,activeClientHandle:d.ed25519YaoRecovery.activeClientHandle,metadata:d.ed25519YaoRecovery.metadata,authority:MW(d)});break;case`cache_absent`:throw Error(`Email OTP wallet custody material is unavailable; recover with a recovery code`);case`not_requested`:throw Error(`Email OTP capability unlock omitted Ed25519 Yao session material`);default:throw Error(`Email OTP capability unlock returned an invalid Ed25519 Yao state`)}f={kind:`near_ed25519_wallet`,signer:t,walletAuthMethodId:jW(e.walletAuthMethodId)}}else{if(d.ed25519YaoRecovery.kind!==`not_requested`)throw Error(`EVM-family ECDSA Email OTP unlock returned unexpected Ed25519 Yao material`);f={kind:`evm_family_ecdsa_wallet`,walletId:t,walletAuthMethodId:jW(e.walletAuthMethodId)}}let p=yW()-c;xW(i.timings,`workerUnlockAndSessionBootstrapMs`,p),xW(i.timings,`emailOtpProofVerificationMs`,d.timings.emailOtpProofVerificationMs),xW(i.timings,`ecdsaMaterialRestoreMs`,d.timings.ecdsaMaterialRestoreMs),xW(i.timings,`signingSessionSealApplyMs`,d.timings.signingSessionSealApplyMs),xW(i.timings,`warmCapabilityPersistenceMs`,d.timings.warmCapabilityPersistenceMs),c=yW(),await Gk({signingEngine:this.deps.getContext().signingEngine,nearClient:this.deps.getContext().nearClient},f),NW(i.timings,`walletStateActivationMs`,c),c=yW();let m=await Uk({walletId:String(t),walletAuthMethodId:String(e.walletAuthMethodId),providerSubject:e.providerIdentity.providerSubjectId,emailHashHex:l,projection:d.recovery.verifiedAuthorityProjection}),h=await gy({source:`wallet_unlock`,walletId:t,ownerScope:{auth:{kind:`email_otp`,providerSubjectId:e.providerIdentity.providerSubjectId},ownerAuthority:{walletAuthMethodId:m.walletAuthMethodId,authorityDigest:m.authorityDigest}},requiredTargets:[...u?[{curve:`ed25519`}]:[],...(e.publicationChainTargets??[r]).map(zW)],readOwnerScopedSigningLanes:this.readOwnerScopedSigningLanes.bind(this)});IW(FW({walletSession:e.walletSession,result:d,runtimeInventory:h}));let g=yW()-c;return xW(i.timings,`runtimePostconditionMs`,g),xW(i.timings,`activeRuntimeConstructionMs`,g),wW({status:`succeeded`,mode:`evm_family_ecdsa`,walletId:t,chainTarget:r,startedAtMs:i.startedAtMs,timings:i.timings}),s({flowId:n,walletId:t,authMethod:`email_otp`,phase:W.STEP_03_EMAIL_OTP_VERIFY_SUCCEEDED,status:`succeeded`,interaction:{kind:`otp_input`,overlay:`hide`},...e.challengeId?{requestId:e.challengeId}:{}}),s({flowId:n,walletId:t,authMethod:`email_otp`,phase:W.STEP_05_ECDSA_SIGNING_SESSION_READY,status:`succeeded`,...e.challengeId?{requestId:e.challengeId}:{},data:{chainTarget:r}}),s({flowId:n,walletId:t,authMethod:`email_otp`,phase:W.STEP_07_COMPLETED,status:`succeeded`,...e.challengeId?{requestId:e.challengeId}:{}}),d}catch(a){let o=I(a);throw wW({status:`failed`,mode:`evm_family_ecdsa`,walletId:t,chainTarget:r,startedAtMs:i.startedAtMs,timings:i.timings,error:o}),OW(e.onEvent,{flowId:n,walletId:t,authMethod:`email_otp`,...e.challengeId?{requestId:e.challengeId}:{},error:o}),o}}async loginWithLinkedEmailOtpWalletDomain(e){let t=await Co(hi(e.walletId));if(t){if(t.auth.kind!==`email_otp`||t.walletAuthMethodId!==e.walletAuthMethodId||t.auth.email!==e.email.trim().toLowerCase()||t.auth.providerSubject!==e.providerSubjectId)throw Error(`Pending registration requires its exact email authentication method`);let n=this.deps.getContext(),r=kp({defaults:n.configs.signing.sessionDefaults,override:void 0});if(r.kind===`disabled`)throw Error(`Pending registration recovery requires an enabled signing session policy`);await To({relayerUrl:e.relayUrl,sessionPolicy:r,pending:t,exactMethod:{kind:`email_otp`,challengeId:e.challengeId,otpCode:e.otpCode},signingSurface:n.signingEngine,nearContext:n,nearCompletion:`await`,onEvent:void 0}),n.signingEngine.setWalletAuthenticated({kind:`authenticated`,walletId:t.walletId,authMethod:`email_otp`}),this.deps.resumePendingAcknowledgements();return}let n=await this.emailOtpEmailHashHex(e.email);await Kx({context:this.deps.getContext(),walletIdInput:e.walletId,emailHashHex:n,walletAuthMethodId:e.walletAuthMethodId,providerSubjectId:e.providerSubjectId,challengeId:e.challengeId,otpCode:e.otpCode,relayUrl:e.relayUrl}),this.deps.resumePendingAcknowledgements()}async requestEmailCode(e){return await fW(this.flowDependencies(),e)}async startGoogleSignInDomain(e){return await dW(this.flowDependencies(),e)}flowDependencies(){return{configs:this.deps.getContext().configs,resolveGoogleEmailOtpProvider:this.resolveGoogleEmailOtpProviderDomain.bind(this),requestEmailOtpChallenge:this.requestUnlockChallenge.bind(this),prewarmEmailOtpYao:this.prewarmEmailOtpYaoDomain.bind(this),registerWallet:this.deps.registerWallet,loginWithEmailOtpEcdsaCapability:this.loginWithEmailOtpEcdsaCapabilityDomain.bind(this),loginWithEmailOtpEd25519YaoCapability:this.loginWithEmailOtpEd25519YaoCapabilityDomain.bind(this),resolveLinkedEmailOtpWalletAuth:this.resolveLinkedEmailOtpWalletAuthDomain.bind(this),loginWithLinkedEmailOtpWallet:this.loginWithLinkedEmailOtpWalletDomain.bind(this),getWalletSession:this.getGoogleEmailOtpWalletSessionDomain.bind(this)}}async resolveGoogleEmailOtpProviderDomain(e){return await ss({relayUrl:String(e.relayUrl||this.deps.getContext().configs.network.relayer.url||``).trim(),idToken:e.idToken,accountMode:e.accountMode,...e.loginWalletId?{loginWalletId:e.loginWalletId}:{},projectEnvironmentId:this.deps.getContext().configs.registration.projectEnvironmentId,publishableKey:this.deps.getContext().configs.registration.publishableKey,...e.restartRegistrationOffer===!0?{restartRegistrationOffer:!0}:{}})}async resolveLinkedEmailOtpWalletAuthDomain(e){let t=await Co(hi(e.walletId));if(t)return t.auth.kind!==`email_otp`||t.auth.email!==e.email.trim().toLowerCase()||t.auth.providerSubject!==e.providerSubjectId?{kind:`rejected`,message:`Pending registration requires its exact email authentication method`}:{kind:`selected`,walletAuthMethodId:t.walletAuthMethodId,execution:`authority`};let n=await this.emailOtpEmailHashHex(e.email),r=await kb({walletIdInput:e.walletId,emailHashHex:n,provider:e.provider,providerSubjectId:e.providerSubjectId});switch(r.kind){case`none`:{let t=await G.listWalletAuthMethodsV2ForWallet(e.walletId),r=[];for(let e of t)e.kind===`email_otp`&&e.status===`active`&&e.emailHashHex.toLowerCase()===n&&r.push(e);let i=r[0];if(r.length===0||!i){let t=await G.listWalletAuthMethodsForWallet(e.walletId),r=[];for(let i of t)i.kind===`email_otp`&&i.status===`active`&&i.emailHashHex.toLowerCase()===n&&oi(i.authority)&&i.authority.factor.provider===e.provider&&i.authority.factor.providerUserId===e.providerSubjectId&&r.push(i);let i=r[0];if(r.length===0||!i)return{kind:`none`};if(r.length!==1)return{kind:`rejected`,message:`Multiple active local Email OTP factors match the verified email`};let a=i.authority;return!a||!oi(a)?{kind:`none`}:{kind:`selected`,walletAuthMethodId:String(a.bindingId),execution:`ordinary`}}if(r.length!==1)return{kind:`rejected`,message:`Multiple active local Email OTP authorities match the verified email`};let a=await G.getWalletAuthority(String(i.walletAuthorityId));return!a||a.state!==`active`||a.walletId!==i.walletId||a.authorityId!==i.walletAuthorityId||a.provenance.kind!==`wallet_registration`&&a.provenance.kind!==`wallet_recovery`?{kind:`none`}:(await Cb({authMethod:i,provider:e.provider,providerSubjectId:e.providerSubjectId}),{kind:`selected`,walletAuthMethodId:String(i.walletAuthMethodId),execution:await AW(a.provenance,i.walletAuthMethodId),keyFamilies:a.signerActivations.keyFamilies})}case`selected`:return{kind:`selected`,walletAuthMethodId:String(r.selection.authMethod.walletAuthMethodId),execution:await AW(r.selection.authority.provenance,r.selection.authMethod.walletAuthMethodId),keyFamilies:r.selection.authority.signerActivations.keyFamilies};case`rejected`:return{kind:`rejected`,message:r.message};default:throw Error(`Linked Email OTP authority resolution is invalid`)}}async prewarmEmailOtpYaoDomain(){await this.deps.getContext().signingEngine.prewarmEmailOtpYao()}async getGoogleEmailOtpWalletSessionDomain(e){return await this.deps.getWalletSession(e)}async loginWithEmailOtpEd25519YaoCapabilityDomain(e){if(e.authoritySelector.kind!==`wallet_auth_method`)throw Error(`Email OTP Ed25519 unlock requires an exact wallet auth method`);let t=await this.emailOtpEmailHashHex(e.emailOtpAuthorityEmail),n=await this.deps.getContext().signingEngine.loginWithEmailOtpWalletCustodyEd25519Internal({...e,emailHashHex:t});await Gk({signingEngine:this.deps.getContext().signingEngine,nearClient:this.deps.getContext().nearClient},{kind:`near_ed25519_wallet`,signer:n,walletAuthMethodId:jW(e.authoritySelector.walletAuthMethodId)})}async emailOtpEmailHashHex(e){let t=String(e||``).trim().toLowerCase();if(!t)throw Error(`[SeamsWeb][email-otp] verified email is required for auth-method hash`);return j(t)}};function VW(e){return e.operationCredential.walletSessionId}function HW(e,t,n,r){let i=LW(t,{flowId:n.flowId,walletId:n.walletId,challengeId:n.challengeId,chainTarget:n.chainTarget,progress:r});i&&e.add(i)}function UW(e,t,n){e.has(n.phase)||DW(t,n)}function WW(e){let t=o(e.rpId);if(!t.ok)throw Error(t.error.message);let n=a(e.credentialIdB64u);if(!n.ok)throw Error(n.error.message);let r=String(e.credentialPublicKeyB64u||``).trim();if(!r)throw Error(`Wallet add-passkey finalize omitted credential public key`);if(F(r).byteLength===0)throw Error(`Wallet add-passkey finalize returned an empty credential public key`);if(!Number.isSafeInteger(e.counter)||e.counter<0)throw Error(`Wallet add-passkey finalize returned an invalid credential counter`);let i=Date.now();return{version:`wallet_auth_method_v1`,kind:`passkey`,status:`active`,localStatus:`synced`,walletId:e.walletId,rpId:t.value,credentialIdB64u:n.value,credentialPublicKeyB64u:r,counter:e.counter,createdAtMs:i,updatedAtMs:i}}async function GW(e){await G.upsertWalletAuthMethod(WW(e))}async function KW(e){await GW(e);let t=r(e.walletAuthMethodId),n=s(e.walletAuthorityId);if(!t.ok||!n.ok)throw Error(`added passkey identity is invalid`);await JW({walletId:e.walletId,walletAuthMethodId:t.value,walletAuthorityId:n.value,rpId:e.rpId,credentialIdB64u:e.credentialIdB64u,credentialPublicKeyB64u:e.credentialPublicKeyB64u,counter:e.counter});let i=new Date().toISOString();await G.upsertProfileAuthenticator({profileId:String(e.walletId),signerSlot:e.signerSlot,credentialId:e.credentialIdB64u,credentialPublicKey:F(e.credentialPublicKeyB64u),registered:i,syncedAt:i})}function qW(e){let t=o(e.rpId),n=a(e.credentialIdB64u),i=r(e.walletAuthMethodId),c=s(e.walletAuthorityId),l=String(e.credentialPublicKeyB64u||``).trim();if(!t.ok||!n.ok||!i.ok||!c.ok)throw Error(`Synced passkey auth-method identity is invalid`);if(!l||F(l).byteLength===0)throw Error(`Synced passkey auth method omitted credential public key`);if(!Number.isSafeInteger(e.counter)||e.counter<0)throw Error(`Synced passkey auth method returned an invalid credential counter`);let u=Date.now(),d=fi({version:`wallet_auth_method_v2`,walletAuthMethodId:i.value,walletId:e.walletId,walletAuthorityId:c.value,kind:`passkey`,status:`active`,rpId:t.value,credentialIdB64u:n.value,credentialPublicKeyB64u:l,counter:e.counter,createdAtMs:u,updatedAtMs:u,activatedAtMs:u});if(d.kind!==`passkey`||d.status!==`active`)throw Error(`Synced passkey auth method branch is invalid`);return d}async function JW(e){await G.upsertWalletAuthMethodV2(qW(e))}function YW(e){if(!e||!(e instanceof PublicKeyCredential))throw Error(`Passkey registration did not return a public-key credential`);return e}function XW(e){return{challenge:F(e.challengeB64u),rp:{id:e.rpId,name:e.rpId},user:{id:F(e.user.idB64u),name:e.user.name,displayName:e.user.displayName},pubKeyCredParams:e.pubKeyCredParams.map(e=>({type:e.type,alg:e.alg})),authenticatorSelection:e.authenticatorSelection,timeout:e.timeoutMs,attestation:e.attestation,excludeCredentials:e.excludeCredentials.map(e=>({type:e.type,id:F(e.id)})),extensions:{prf:{eval:{first:F(e.extensions.prf.eval.firstB64u),second:F(e.extensions.prf.eval.secondB64u)}}}}}function ZW(e){if(e.kind!==`unlocked_capability`)throw Error(`wallet custody reseal source is not an unlocked capability`);return e.capability}function QW(e){let t=a(e);if(!t.ok)throw Error(`Passkey registration credential id is invalid: ${t.error.message}`);return t.value}async function $W(e){let t=e.registrationCredential?e.registrationCredential:Hs({credential:YW(await navigator.credentials.create({publicKey:XW(e.registration)})),firstPrfOutput:!0,secondPrfOutput:!1}),n=Us(t);if(!n)throw Error(`New passkey did not return PRF.first`);let r=QW(t.rawId||t.id),i=T(ve(`wallet-custody-envelope`,24,`wallet custody envelope ids`));if(!i.ok)throw Error(i.error.message);let a=Gt({rpId:e.registration.rpId,credentialIdB64u:r}),o=qt(e.walletAuthMethodId),s=Xt({walletId:e.existingEnvelope.walletId,envelopeId:i.value,factor:a,envelopeRevision:Te(1),binding:e.existingEnvelope.binding,ownership:o}),c=F(n),l=e.sealSource.kind===`factor_secret`?e.sealSource.existingFactorSecret.slice():null,u;try{u=Fa(l===null?await e.worker.requestOperation({kind:`walletCustodyCeremony`,request:{type:`resealWalletCustodyFromUnlockedCapability`,payload:{capability:ZW(e.sealSource),replacementEnvelopeBindingJson:s,replacementFactorSecret:c.buffer},transfer:[c.buffer]}}):await e.worker.requestOperation({kind:`walletCustodyCeremony`,request:{type:`linkWalletCustodyPasskey`,payload:{existingEnvelope:e.existingEnvelope,existingFactorSecret:l.buffer,replacementEnvelopeBindingJson:s,replacementFactorSecret:c.buffer},transfer:[l.buffer,c.buffer]}}))}finally{l&&l.byteLength>0&&l.fill(0),c.byteLength>0&&c.fill(0)}let d=(e.nowMs??Date.now)();return{registration:t,custodyEnvelope:Qt(Kt({envelopeId:i.value,walletId:e.existingEnvelope.walletId,ownership:o,binding:e.existingEnvelope.binding,factor:a,envelopeRevision:Te(1),nonceB64u:u.nonceB64u,sealedCustodySecretB64u:u.sealedCustodySecretB64u,ciphertextDigestB64u:u.ciphertextDigestB64u,aadHashB64u:u.aadHashB64u,lifecycle:{state:`active`,activatedAtMs:d},createdAtMs:d,updatedAtMs:d}))}}async function eG(e){let t=await jc({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodIntentGrant:e.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:e.addAuthMethodIntentDigestB64u,intent:e.intent,auth:e.auth,authority:{kind:`passkey`}});if(!t.custodyEnvelope||!t.registration)throw Error(`Passkey add-auth-method start omitted custody envelope or registration options`);let n=await $W({registration:t.registration,walletAuthMethodId:e.walletAuthMethodId,existingEnvelope:t.custodyEnvelope,sealSource:e.sealSource,worker:e.worker,...e.createRegistrationCredential?{registrationCredential:await e.createRegistrationCredential(t.registration)}:{},nowMs:e.nowMs});return{finalized:await Mc({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodCeremonyId:t.addAuthMethodCeremonyId,webauthnRegistration:n.registration,custodyEnvelope:n.custodyEnvelope})}}async function tG(e){let t=await G.resolveSelectedWalletAuthority(String(e));if(t.kind!==`resolved`)return{kind:`unavailable`,reason:`selected wallet authority is ${t.kind}`};if(t.authMethod.status!==`active`)return{kind:`unavailable`,reason:`selected auth method is not active`};if(t.authority.state!==`active`)return{kind:`unavailable`,reason:`selected wallet authority is not active`};if(t.selection.lockState!==`unlocked`||t.selection.walletId!==e||t.selection.walletAuthMethodId!==t.authMethod.walletAuthMethodId||t.authMethod.walletId!==e||t.authMethod.walletAuthorityId!==t.authority.authorityId||t.authority.walletId!==e)return{kind:`unavailable`,reason:`selected wallet authority identity is invalid`};let n;if(t.authMethod.kind===`voiceid`){let r=await G.listWalletAuthMethodsV2ForWallet(e),i=nG(e,t.authority.authorityId,r);if(!i)return{kind:`unavailable`,reason:`this authority needs an active passkey or Email OTP method to confirm the addition`};n=i}else n=t.authMethod;return{kind:`resolved`,sourceAuthMethod:n,source:{walletAuthorityId:n.walletAuthorityId,walletAuthMethodId:n.walletAuthMethodId,authorityDigestB64u:String(t.authority.authorityDigestB64u),revocationEpoch:t.authority.revocationEpoch}}}function nG(e,t,n){let r=null;for(let i of n)if(!(i.status!==`active`||i.walletId!==e||i.walletAuthorityId!==t))switch(i.kind){case`passkey`:return i;case`email_otp`:r=i;break;case`voiceid`:break;default:return rG(i)}return r}function rG(e){throw Error(`Unsupported confirmation method: ${String(e)}`)}function iG(e){return[{id:e.credentialIdB64u,type:`public-key`,transports:[]}]}async function aG(e){if(e.finalized.walletId!==e.walletId||e.finalized.rpId!==e.rpId||e.finalized.authMethod.kind!==`passkey`||e.finalized.authMethod.status!==`active`)throw Error(`Wallet add-passkey finalize returned a mismatched auth method`);return await GW({walletId:e.finalized.walletId,rpId:e.finalized.rpId,credentialIdB64u:e.finalized.authMethod.credentialIdB64u,credentialPublicKeyB64u:e.finalized.authMethod.credentialPublicKeyB64u,counter:e.finalized.authMethod.counter}),{ok:!0,walletId:e.finalized.walletId,rpId:e.finalized.rpId,walletAuthMethodId:e.walletAuthMethodId,authMethod:{kind:`passkey`,status:`active`}}}function oG(e){let t=e.signingEngine.getSignerWorkerContext();return{requestOperation:Ba.bind(void 0,t)}}async function sG(e){let t=String(e.context.configs.network.relayer.url||``).trim();if(!t)throw Error(`registration.addPasskey requires relayer.url`);let n=io(e.context.configs);if(!n)throw Error(`registration.addPasskey requires registration.publishableKey and registration.projectEnvironmentId`);let r=await tG(e.walletId);if(r.kind!==`resolved`)throw Error(`Wallet add-passkey requires a selected active source: ${r.reason}`);let i=await Bc({relayerUrl:t,walletId:e.walletId,request:{walletId:e.walletId,rpId:e.rpId,authMethod:{kind:`passkey`,rpId:e.rpId},caller:{caller:`same_device_addition`,source:r.source}},auth:{publishableKey:n.publishableKey,environmentId:n.projectEnvironmentId}});if(await Yt(i.intent)!==i.addAuthMethodIntentDigestB64u)throw Error(`Add-auth-method intent digest mismatch`);if(i.intent.walletId!==e.walletId||i.intent.authMethod.kind!==`passkey`||i.intent.authMethod.rpId!==e.rpId)throw Error(`Add-auth-method intent identity changed`);let a=await G.getProfile(String(e.walletId));if(!a||!Number.isSafeInteger(a.defaultSignerSlot)||a.defaultSignerSlot<1)throw Error(`Wallet add-passkey requires an initialized wallet profile`);if(r.sourceAuthMethod.kind===`email_otp`)return await cG({context:e.context,walletId:e.walletId,rpId:e.rpId,relayerUrl:t,profile:a,sourceWalletAuthorityId:r.source.walletAuthorityId,sourceWalletAuthMethodId:r.source.walletAuthMethodId,intentResponse:i,...e.options?{options:e.options}:{}});let o=iG(r.sourceAuthMethod),s=await e.context.signingEngine.getAuthenticationCredentialsSerialized({subjectId:String(e.walletId),challengeB64u:i.addAuthMethodIntentDigestB64u,allowCredentials:o,includeSecondPrfOutput:!1}),c=hl(s);if(!c||!o.some(e=>e.id===c))throw Error(`Wallet add-passkey selected a credential outside the authorized wallet`);let l=F(gl(s,`Wallet add-passkey custody linking`));try{let n=await eG({relayerUrl:t,walletId:e.walletId,addAuthMethodIntentGrant:i.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:i.addAuthMethodIntentDigestB64u,intent:i.intent,auth:{kind:`webauthn_assertion`,rpId:e.rpId,credential:Ks(s),expectedChallengeDigestB64u:i.addAuthMethodIntentDigestB64u},sealSource:{kind:`factor_secret`,existingFactorSecret:l},walletAuthMethodId:i.intent.targetWalletAuthMethodId,worker:oG(e.context),createRegistrationCredential:async t=>{let n=await e.context.signingEngine.requestRegistrationCredentialConfirmation({walletId:String(e.walletId),signerSlot:a.defaultSignerSlot,confirmerText:e.options?.confirmerText,confirmationConfigOverride:e.options?.confirmationConfig,registrationOptions:t});if(!n.confirmed)throw Error(`Wallet add-passkey registration was cancelled`);return n.credential}});return await aG({walletId:e.walletId,rpId:e.rpId,walletAuthMethodId:i.intent.targetWalletAuthMethodId,finalized:n.finalized})}finally{l.fill(0)}}async function cG(e){let t=za(String(e.walletId));if(!t)throw Error(`Wallet add-passkey from an Email OTP source requires an unlocked wallet`);let n=async()=>await kc({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodIntentGrant:e.intentResponse.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:e.intentResponse.addAuthMethodIntentDigestB64u}),r=await n(),i=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:`add_passkey`,walletId:String(e.walletId),emailAddress:r.emailHint||`your email`,challengeId:r.challengeId,...r.emailHint?{emailHint:r.emailHint}:{},confirmerText:{title:`Enter email code to add a passkey`,body:`This one-time code confirms you can add a new passkey to this wallet.`},...e.options?.confirmationConfig?{confirmationConfigOverride:e.options.confirmationConfig}:{},onResend:n}),a=(await eG({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodIntentGrant:e.intentResponse.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:e.intentResponse.addAuthMethodIntentDigestB64u,intent:e.intentResponse.intent,auth:{kind:`email_otp`,challengeId:i.challengeId,otpCode:i.otpCode,expectedChallengeDigestB64u:e.intentResponse.addAuthMethodIntentDigestB64u},sealSource:{kind:`unlocked_capability`,capability:t},walletAuthMethodId:e.intentResponse.intent.targetWalletAuthMethodId,worker:oG(e.context),createRegistrationCredential:async t=>{let n=await e.context.signingEngine.requestRegistrationCredentialConfirmation({walletId:String(e.walletId),signerSlot:e.profile.defaultSignerSlot,confirmerText:e.options?.confirmerText,confirmationConfigOverride:e.options?.confirmationConfig,registrationOptions:t});if(!n.confirmed)throw Error(`Wallet add-passkey registration was cancelled`);return n.credential}})).finalized;if(a.walletId!==e.walletId||a.authMethod.kind!==`passkey`||a.authMethod.status!==`active`)throw Error(`Wallet add-passkey finalize returned a mismatched auth method`);return await KW({walletId:e.walletId,walletAuthMethodId:e.intentResponse.intent.targetWalletAuthMethodId,walletAuthorityId:e.sourceWalletAuthorityId,rpId:String(e.rpId),credentialIdB64u:a.authMethod.credentialIdB64u,credentialPublicKeyB64u:a.authMethod.credentialPublicKeyB64u,counter:a.authMethod.counter,signerSlot:e.profile.defaultSignerSlot,credential:{id:a.authMethod.credentialIdB64u,rawId:a.authMethod.credentialIdB64u}}),await Dc({walletId:e.walletId,walletAuthorityId:e.sourceWalletAuthorityId,sourceWalletAuthMethodId:e.sourceWalletAuthMethodId,targetAuthority:await H({authority:a.authority})}),{ok:!0,walletId:e.walletId,rpId:String(e.rpId),walletAuthMethodId:e.intentResponse.intent.targetWalletAuthMethodId,authMethod:{kind:`passkey`,status:`active`}}}async function lG(e){let t=hi(String(e.walletId||``).trim()),n=o(String(e.rpId||``).trim());if(!n.ok)throw Error(n.error.message);try{let r=await sG({context:e.context,walletId:t,rpId:n.value,options:e.options});return await e.options?.afterCall?.(!0,r),r}catch(t){let n=I(t);try{e.options?.onError?.(n)}finally{await e.options?.afterCall?.(!1)}throw n}}async function uG(e){let t=await jc({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodIntentGrant:e.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:e.addAuthMethodIntentDigestB64u,intent:e.intent,auth:e.auth,authority:e.authority});if(!t.custodyEnvelope)throw Error(`Email OTP add-auth-method start omitted the source custody envelope`);let n=t.custodyEnvelope,r=crypto.getRandomValues(new Uint8Array(32)),i=r.slice(),a;try{a=await e.context.signingEngine.prepareEmailOtpRegistrationEnrollmentMaterialInternal({relayUrl:e.relayerUrl,walletId:B(String(e.walletId)),userId:e.providerSubject,clientSecret32:r})}catch(e){throw i.fill(0),e}finally{r.fill(0)}let o=T(ve(`wallet-custody-envelope`,24,`wallet custody envelope ids`));if(!o.ok)throw Error(o.error.message);let s=Jt({enrollmentId:a.enrollmentId,enrollmentSealKeyVersion:a.enrollmentSealKeyVersion}),c=qt(e.walletAuthMethodId),l=Te(1),u=Xt({walletId:n.walletId,envelopeId:o.value,factor:s,envelopeRevision:l,binding:n.binding,ownership:c}),d=e.existingFactorSecret.slice(),f;try{f=Fa(await e.worker.requestOperation({kind:`walletCustodyCeremony`,request:{type:`linkWalletCustodyPasskey`,payload:{existingEnvelope:n,existingFactorSecret:d.buffer,replacementEnvelopeBindingJson:u,replacementFactorSecret:i.buffer},transfer:[d.buffer,i.buffer]}}))}finally{d.byteLength>0&&d.fill(0),i.byteLength>0&&i.fill(0)}let p=(e.nowMs??Date.now)(),m=Qt(Kt({envelopeId:o.value,walletId:n.walletId,ownership:c,binding:n.binding,factor:s,envelopeRevision:l,nonceB64u:f.nonceB64u,sealedCustodySecretB64u:f.sealedCustodySecretB64u,ciphertextDigestB64u:f.ciphertextDigestB64u,aadHashB64u:f.aadHashB64u,lifecycle:{state:`active`,activatedAtMs:p},createdAtMs:p,updatedAtMs:p}));return{finalized:await Mc({relayerUrl:e.relayerUrl,walletId:e.walletId,addAuthMethodCeremonyId:t.addAuthMethodCeremonyId,custodyEnvelope:m,emailOtpTarget:{kind:`new_enrollment`,enrollment:a.emailOtpEnrollment}})}}async function dG(e){if(!oi(e.authority))throw Error(`Wallet add-email-code finalize returned a non-Email authority`);let t=r(e.walletAuthMethodId);if(!t.ok)throw Error(t.error.message);let n=s(e.walletAuthorityId);if(!n.ok)throw Error(n.error.message);let i=String(e.authority.verifier.emailHashHex||``).trim();if(!i)throw Error(`Wallet add-email-code finalize returned no verified email digest`);let a=String(e.authority.factor.providerUserId||``).trim();if(!a)throw Error(`Wallet add-email-code finalize returned no provider identity`);let o=u(e.emailAddress);if(!o.ok)throw Error(o.error.message);let c=Date.now();await G.upsertWalletAuthMethod({version:`wallet_auth_method_v1`,kind:`email_otp`,status:`active`,localStatus:`synced`,walletId:e.walletId,emailHashHex:i,registrationAuthorityId:a,authority:e.authority,createdAtMs:c,updatedAtMs:c}),await G.upsertWalletAuthMethodV2(fi({version:`wallet_auth_method_v2`,walletAuthMethodId:t.value,walletId:e.walletId,walletAuthorityId:n.value,kind:`email_otp`,status:`active`,emailHashHex:i,registrationAuthorityId:a,createdAtMs:c,updatedAtMs:c,activatedAtMs:c}));let l=await G.retainVerifiedEmailOtpLocalPresentation({walletId:e.walletId,walletAuthMethodId:t.value,emailAddress:o.value});if(l.kind!==`retained`)throw Error(`Verified Email OTP presentation was not retained: ${l.reason}`)}function fG(e){let t=e.signingEngine.getSignerWorkerContext();return{requestOperation:Ba.bind(void 0,t)}}function pG(e){return e}function mG(e){let t=String(e||``).trim().toLowerCase();if(!t||!t.includes(`@`))throw Error(`registration.addEmail requires an email address`);return t}async function hG(e){let t=String(e.context.configs.network.relayer.url||``).trim();if(!t)throw Error(`registration.addEmail requires relayer.url`);let n=io(e.context.configs);if(!n)throw Error(`registration.addEmail requires registration.publishableKey and registration.projectEnvironmentId`);let r=mG(e.emailAddress),i=pG(r),a=o(String(e.context.signingEngine.getRpId()||``).trim());if(!a.ok)throw Error(`registration.addEmail ${a.error.message}`);let s=a.value,c=await tG(e.walletId);if(c.kind!==`resolved`)throw Error(`Wallet add-email-code requires a selected active source: ${c.reason}`);if(c.sourceAuthMethod.kind!==`passkey`)throw Error(`Wallet add-email-code requires a selected active passkey source`);let l=await Bc({relayerUrl:t,walletId:e.walletId,request:{walletId:e.walletId,rpId:String(s),authMethod:{kind:`email_otp`,email:r},caller:{caller:`same_device_addition`,source:c.source}},auth:{publishableKey:n.publishableKey,environmentId:n.projectEnvironmentId}});if(await Yt(l.intent)!==l.addAuthMethodIntentDigestB64u)throw Error(`Add-auth-method intent digest mismatch`);if(l.intent.walletId!==e.walletId||l.intent.authMethod.kind!==`email_otp`||l.intent.authMethod.email!==r)throw Error(`Add-auth-method intent identity changed`);let u=await G.getProfile(String(e.walletId));if(!u||!Number.isSafeInteger(u.defaultSignerSlot)||u.defaultSignerSlot<1)throw Error(`Wallet add-email-code requires an initialized wallet profile`);let d=iG(c.sourceAuthMethod),f=await e.context.signingEngine.getAuthenticationCredentialsSerialized({subjectId:String(e.walletId),challengeB64u:l.addAuthMethodIntentDigestB64u,allowCredentials:d,includeSecondPrfOutput:!1}),p=hl(f);if(!p||!d.some(e=>e.id===p))throw Error(`Wallet add-email-code selected a credential outside the authorized wallet`);let m=gl(f,`Wallet add-email-code custody linking`),h=async()=>await kc({relayerUrl:t,walletId:e.walletId,addAuthMethodIntentGrant:l.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:l.addAuthMethodIntentDigestB64u}),g=await h(),_=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:`add_email_code`,walletId:String(e.walletId),emailAddress:r,challengeId:g.challengeId,...g.emailHint?{emailHint:g.emailHint}:{},...e.options?.confirmerText?{confirmerText:e.options.confirmerText}:{},...e.options?.confirmationConfig?{confirmationConfigOverride:e.options.confirmationConfig}:{},onResend:h}),v=await vs({authMethod:{kind:`email_otp`,proofKind:`otp_challenge`,email:r,providerSubject:i,otpCode:_.otpCode,challengeId:_.challengeId},relayUrl:t,walletId:String(e.walletId),registrationIntentDigestB64u:l.addAuthMethodIntentDigestB64u}),y=F(m);try{let n=await uG({context:e.context,relayerUrl:t,walletId:e.walletId,addAuthMethodIntentGrant:l.addAuthMethodIntentGrant,addAuthMethodIntentDigestB64u:l.addAuthMethodIntentDigestB64u,intent:l.intent,auth:{kind:`webauthn_assertion`,rpId:s,credential:Ks(f),expectedChallengeDigestB64u:l.addAuthMethodIntentDigestB64u},authority:{kind:`email_otp`,emailOtpRegistrationProof:v.proof},existingFactorSecret:y,walletAuthMethodId:l.intent.targetWalletAuthMethodId,providerSubject:i,worker:fG(e.context)});if(n.finalized.walletId!==e.walletId||n.finalized.authMethod.kind!==`email_otp`||n.finalized.authMethod.status!==`active`)throw Error(`Wallet add-email-code finalize returned a mismatched auth method`);return await dG({walletId:e.walletId,walletAuthMethodId:l.intent.targetWalletAuthMethodId,walletAuthorityId:c.source.walletAuthorityId,emailAddress:r,authority:n.finalized.authority}),await Dc({walletId:e.walletId,walletAuthorityId:c.source.walletAuthorityId,sourceWalletAuthMethodId:c.source.walletAuthMethodId,targetAuthority:await H({authority:n.finalized.authority})}),{ok:!0,walletId:e.walletId,emailAddress:r,walletAuthMethodId:l.intent.targetWalletAuthMethodId,authMethod:{kind:`email_otp`,status:`active`}}}finally{y.fill(0)}}async function gG(e){let t=hi(String(e.walletId||``).trim());try{let n=await hG({context:e.context,walletId:t,emailAddress:e.emailAddress,options:e.options});return await e.options?.afterCall?.(!0,n),n}catch(t){let n=I(t);try{e.options?.onError?.(n)}finally{await e.options?.afterCall?.(!1)}throw n}}function _G(e,t){return{registerWallet:vG.bind(null,e),getNearAccountState:yG.bind(null,e),addSigner:bG.bind(null,e),addPasskey:xG.bind(null,e),activateAuthMethod:SG.bind(null,e),getAuthMethodAvailability:TG.bind(null,e),setAuthMethodEnabled:EG.bind(null,e,t),removeAuthMethod:CG.bind(null,e),addEmail:wG.bind(null,e)}}async function vG(e,t){let n=e();return await Zo({context:n,authMethod:t.authMethod,wallet:t.wallet,signerSelection:t.signerSelection,options:t.options||{},authenticatorOptions:ia(n.configs.webauthn.authenticatorOptions)})}async function yG(e,t){let n=B(t.walletId);return ms(n)||await e().signingEngine.getWalletNearProvisioningState(n)}async function bG(e,t){return await Os({context:e(),walletId:t.walletId,rpId:t.rpId,signerSelection:t.signerSelection,options:t.options||{}})}async function xG(e,t){return await lG({context:e(),walletId:t.walletId,rpId:t.rpId,options:t.options})}async function SG(e,t){let n=e();return await(await Qf(n.configs.authMethods,t.method)).activate({context:n,walletId:B(t.walletId)})}async function CG(e,t){let n=await mz({context:e(),walletId:t.walletId,walletAuthMethodId:t.walletAuthMethodId});return n.authMethod.kind===`voiceid`&&await Pa(n.walletId,n.walletAuthMethodId),n}async function wG(e,t){return await gG({context:e(),walletId:t.walletId,emailAddress:t.emailAddress,options:t.options})}async function TG(e,t){if(!pe(e().configs.authMethods,t.method))throw Error(`Enable the authentication plugin in the SDK first.`);return Ma(B(t.walletId))}async function EG(e,t,n){if(typeof n.enabled!=`boolean`)throw Error(`Authentication method availability must be a boolean.`);let r=B(n.walletId),i=await TG(e,n);if(i.kind===`not_enrolled`)throw Error(`Enroll VoiceID before enabling it.`);let a=await t.getSession(r);if(a.authentication.kind!==`authenticated`||a.authentication.walletId!==r)throw Error(`Unlock this wallet before managing VoiceID.`);if(n.enabled&&a.authentication.authMethod===`voiceid`)throw Error(`Unlock with a passkey or Email OTP before enabling VoiceID.`);if(!n.enabled&&!await Na(r,i.walletAuthMethodId))throw Error(`Add another authentication method before turning off VoiceID.`);return await Aa(r,i.walletAuthMethodId,n.enabled),!n.enabled&&a.authentication.authMethod===`voiceid`&&await t.lock(),n.enabled?{kind:`enabled`,walletAuthMethodId:i.walletAuthMethodId}:{kind:`disabled`,walletAuthMethodId:i.walletAuthMethodId}}async function DG(e){let{context:t,pending:n,options:r}=e,i=String(n.walletId);J(r?.onEvent,i,{phase:W.STEP_01_STARTED,status:`started`,authMethod:`passkey`});try{if(n.auth.kind!==`passkey`)throw Error(`Pending registration requires its founding email authentication method`);let e=r?.unlockSelection?.mode===`ed25519_only`||r?.unlockSelection?.mode===`ed25519_and_ecdsa`;if(e&&n.signerPlanKind!==`near_ed25519_and_evm_family_ecdsa`)throw Error(`wallet unlock is missing the requested capability subject`);let a=kp({defaults:t.configs.signing.sessionDefaults,override:r?.signingSession});if(a.kind===`disabled`)throw Error(`Pending registration recovery requires an enabled signing session policy`);let o=await To({relayerUrl:t.configs.network.relayer.url,sessionPolicy:a,pending:n,exactMethod:{kind:`passkey`},signingSurface:t.signingEngine,nearContext:t,nearCompletion:e?`await`:`background`,onEvent:r?.onEvent}),s=await OG({context:t,walletId:n.walletId,requireNear:e,signingSession:o.signingSession});return J(r?.onEvent,i,{phase:W.STEP_06_SESSION_READY,status:`succeeded`,authMethod:`passkey`}),await Ds({context:t,authMethod:`passkey`,unlockSubjectId:i,loginResult:s,onEvent:r?.onEvent,afterCall:r?.afterCall})}catch(e){let t=I(e);return await xs({unlockSubjectId:i,message:t.message,error:t,cancelled:Dt(t),onEvent:r?.onEvent,onError:r?.onError,afterCall:r?.afterCall})}}async function OG(e){if(!e.requireNear)return{success:!0,kind:`ecdsa_wallet_unlocked`,walletId:e.walletId,signingSession:e.signingSession};let t=ms(e.walletId);if(t?.status!==`near_ready`)throw Error(t?.status===`near_failed_retryable`?t.error:`Pending NEAR registration did not establish the requested account`);let n=await IS(e.context,e.walletId,new q);if(n.appIdentity.kind!==`resolved`||!n.appIdentity.nearAccountId||n.appIdentity.nearAccountId!==t.nearAccountId)throw Error(`Pending NEAR registration did not establish the requested account`);return{success:!0,kind:`near_wallet_unlocked`,walletId:e.walletId,nearAccountId:n.appIdentity.nearAccountId,loggedInNearAccountId:n.appIdentity.nearAccountId,operationalPublicKey:n.appIdentity.nearOperationalPublicKey,signingSession:e.signingSession}}function kG(e){return{unlock:LG.bind(null,e),unlockWithAuthMethod:jG.bind(null,e),lock:RG.bind(null,e),getSession:zG.bind(null,e),getRecentUnlocks:VG.bind(null,e),hasPasskey:BG}}function AG(e){return e.kind===z.passkey&&e.status===`active`}async function jG(e,t,n=NG,i){let a=e(),o=B(t.walletId),s=r(t.walletAuthMethodId);if(!s.ok)throw Error(`Wallet unlock method ID is invalid.`);let c=await Qf(a.configs.authMethods,t.method);return n(),await c.unlock({walletId:o,walletAuthMethodId:s.value,relayerUrl:a.configs.network.relayer.url,assertActive:n,mountCapture:i,surfaceMeasurementBinding:a.signingEngine.getWalletIframeSurfaceMeasurementBinding(),prepareSession:MG.bind(null,a,o,n)})}async function MG(e,t,n,r){r.throwIfAborted(),n(),await IC(e),r.throwIfAborted(),n();let i=await e.signingEngine.advanceWalletLockGeneration(t);return r.throwIfAborted(),n(),e.signingEngine.installAuthMethodSession.bind(e.signingEngine,i)}function NG(){}function PG(e){switch(e?.mode){case`ed25519_only`:return{kind:`near_ed25519_only`};case`ecdsa_only`:return{kind:`evm_family_ecdsa_only`};case`ed25519_and_ecdsa`:case void 0:return{kind:`all_registered_mpc`}}throw Error(`wallet unlock selection is unsupported`)}async function FG(e){let t=await ob({walletId:e.walletId,requestedCapabilityFamilies:PG(e.selection)});switch(t.kind===`missing_requested_capability_subject`&&(await ko({relayerUrl:e.relayerUrl}),t=await ob({walletId:e.walletId,requestedCapabilityFamilies:PG(e.selection)})),t.kind){case`resolved`:return t.subjectSet;case`missing_requested_capability_subject`:throw Error(`wallet unlock is missing the requested capability subject`);case`capability_subject_resolution_failed`:throw Error(`wallet unlock subject resolution failed: ${t.reason}`)}throw Error(`wallet unlock subject resolution returned an unknown result`)}function IG(e){let t=null;for(let n of e.subjects)if(n.kind===`near_ed25519_wallet`){if(t)throw Error(`wallet unlock resolved multiple NEAR Ed25519 subjects`);t=n}return t}async function LG(e,t,n){let r=String(t||``).trim();if(!r)throw Error(`unlock requires walletId`);let i=e(),a=await Co(B(r));if(a)return await DG({context:i,pending:a,options:n});let o=await FG({relayerUrl:i.configs.network.relayer.url,walletId:r,selection:n?.unlockSelection}),s=await xx(i,o,n);if(s?.success){let e=IG(o);e&&await i.signingEngine.activateAuthenticatedWalletState({walletId:e.walletId,nearAccountId:e.nearAccountId,signerSlot:e.signerSlot,nearClient:i.nearClient})}return await i.signingEngine.warmCriticalResources({kind:`none`}),s}async function RG(e){await IC(e())}async function zG(e,t){return await IS(e(),t,new q)}async function BG(e){let t=String(e||``).trim();if(!t)return!1;try{return(await G.listWalletAuthMethodsV2ForWallet(t)).some(AG)}catch{return!1}}async function VG(e){return await kC(e())}async function HG(e,t,n){let r=B(t.walletSession.walletId);return await e().signingEngine.scheduleRouterAbEcdsaDerivationLoginPresignaturePrefill({walletId:r,chainTarget:t.chainTarget},n)}async function UG(e){switch(e.state.kind){case`active_session`:break;case`wallet_unlocked_without_signing_session`:if(e.state.reason!==`exhausted`)return;break;case`wallet_locked`:case`wallet_authenticated_identity_unresolvable`:case`expired_session`:return;default:e.state;return}let t=sn({walletId:e.state.walletId}),n=new q,r=[];for(let i of e.chainTargets)r.push(e.prefill({walletSession:t,chainTarget:i},n));await Promise.all(r)}function WG(e){switch(e.kind){case`ecdsa`:return{kind:`ecdsa`,walletSession:sn(e.walletSession),chainTarget:tn(e.chainTarget)};case`ed25519`:return{kind:`ed25519`,walletSession:sn(e.walletSession),nearAccount:rn(e.nearAccount.accountId)}}}function GG(e){switch(e.kind){case`ecdsa`:return{kind:`ecdsa`,laneIdentity:Kc(e.laneIdentity)};case`ed25519`:{let t=m(e.materialActivation);if(!t.ok)throw Error(t.error.message);return{kind:`ed25519`,laneIdentity:Jc(e.laneIdentity),materialActivation:t.value}}}}function KG(e,t){let n={...e.options,theme:e.options.theme??t};switch(e.kind){case`ecdsa`:{let t=Kc(e.laneIdentity);if(String(t.signer.walletId)!==String(e.walletSession.walletId))throw Error(`[SeamsWeb] key export lane wallet does not match wallet session`);if(!an(t.signer.chainTarget,e.chainTarget))throw Error(`[SeamsWeb] key export lane chain target does not match request target`);return{kind:`ecdsa`,chainTarget:e.chainTarget,walletSession:e.walletSession,laneIdentity:t,options:n}}case`ed25519`:{let t=Jc(e.laneIdentity),r=m(e.materialActivation);if(!r.ok)throw Error(r.error.message);if(String(t.signer.account.wallet.walletId)!==String(e.walletSession.walletId))throw Error(`[SeamsWeb] Ed25519 export lane wallet does not match wallet session`);if(String(t.signer.account.nearAccountId)!==String(e.nearAccount.accountId))throw Error(`[SeamsWeb] Ed25519 export lane does not match the NEAR account`);return{kind:`ed25519`,nearAccount:rn(e.nearAccount.accountId),walletSession:e.walletSession,laneIdentity:t,materialActivation:r.value,options:n}}}}function qG(e,t){let n=t;return{locale:me(n.locale??e.locale),theme:Ye({value:n.theme,fallback:e.theme,legacyTokens:n.tokens}),palette:Je({value:n.palette,fallback:e.palette})}}function JG(e,t){t.event===`registration.near_provisioning_changed`&&e(t)}function YG(e){switch(e.kind){case`completed`:return;case`pending`:console.warn(`[SeamsWeb] pending wallet recovery replay remains pending:`,e.recoveryOperationId,e.failure);return;case`discarded`:console.warn(`[SeamsWeb] pending wallet recovery was refused and discarded:`,e.recoveryOperationId);return;case`corrupt`:console.warn(`[SeamsWeb] pending wallet recovery replay record is corrupt:`,e.recoveryOperationId);return}}function XG(e){e().catch(ZG)}function ZG(e){console.warn(`[SeamsWeb] pending linked-device acknowledgement replay failed:`,e instanceof Error?e.message:String(e||`unknown error`))}var QG=class{signingEngine;nearClient;configs;appearance;theme;prefillRestoredSession;recovery;devices;keys;preferences;auth;placement;registration;near;tempo;evm;deviceLinkingDispose;resumePendingAcknowledgementsV1;constructor(e,t){this.configs=e,Gi({mode:`wallet`}),this.nearClient=t||new Jd(Ke(this.configs.network.chains));let n=aD(G),r=new oz(this.configs,this.nearClient,{managerStores:n.managerStores,signingEngineStores:n.signingEngineStores,sealedSigningSessionStore:n.sealedSigningSessionStore,ed25519YaoPublicCapabilityReferences:n.ed25519YaoPublicCapabilityReferences,createRuntime:cT,initializeRuntime:sD,shouldPrewarmUiConfirmUi:eK});this.signingEngine=r,this.appearance=this.configs.ui.appearance,this.theme=this.appearance.theme.mode;try{this.signingEngine.setAppearance(this.appearance)}catch{}let i=this.signingEngine.getUserPreferences(),a=sT(r.getSignerWorkerContext()),o=bw({confirmDeviceLinking:hu,http:a.http,relayerUrl:String(this.configs.network.relayer?.url||``).trim(),walletSessions:K,resolveSelectedWalletAuthority:G.resolveSelectedWalletAuthority.bind(G),readWalletAuthenticationState:r.readWalletAuthenticationState.bind(r),readUnlockedEd25519ExportRootCapabilityV1:Va});this.placement=Zw({lockWallet:this.lockAfterWalletMove.bind(this),signingEngine:r,managementRequest:o.managementRequest,readAuthentication:r.readWalletAuthenticationState.bind(r)});let s=hU({readAppearance:this.readAppearance.bind(this),platform:a,ownerAuthorities:o,configs:this.configs,signingEngine:r,getContext:this.getContext.bind(this)});this.deviceLinkingDispose=s.dispose,this.resumePendingAcknowledgementsV1=s.resumePendingAcknowledgementsV1;let c=kG(this.getContext.bind(this)),l=_G(this.getContext.bind(this),c);this.prefillRestoredSession=HG.bind(null,this.getContext.bind(this));let u=RW({getContext:this.getContext.bind(this),registerWallet:l.registerWallet,getWalletSession:c.getSession,resumePendingAcknowledgements:this.resumePendingAcknowledgementsAfterExactUnlockV1.bind(this)}),d={flush:$G,setCurrentWallet:i.setCurrentWallet.bind(i),getCurrentWalletId:i.getCurrentWalletId.bind(i),onConfirmationConfigChange:i.onConfirmationConfigChange.bind(i),onCurrentWalletChange:i.onCurrentWalletChange.bind(i),setConfirmationBehavior:i.setConfirmationBehavior.bind(i),setConfirmationConfig:i.setConfirmationConfig.bind(i),getConfirmationConfig:i.getConfirmationConfig.bind(i)},f={resolveExactKeyExportLane:this.resolveExactKeyExportLaneDomain.bind(this),exportKeypairWithUI:this.exportKeypairWithUIDomain.bind(this)},p=JO({createNearCommands:BE.bind(null,this.getContext.bind(this)),createEvmFamilyCommands:HE.bind(null,this.getContext.bind(this)),nearClient:this.nearClient,configs:this.configs,preferences:d,auth:{...c,...u},registration:{...l,onNearAccountChange:this.onNearAccountChange.bind(this)},recovery:{syncAccount:this.syncAccountDomain.bind(this),getCodeStatus:this.getCodeStatusDomain.bind(this),confirmBackup:this.confirmBackupDomain.bind(this),requestWalletCustodyEmailOtpChallenge:this.requestWalletCustodyEmailOtpChallengeDomain.bind(this),rotateCodes:this.rotateCodesDomain.bind(this)},devices:{...s.domain},keys:f});this.preferences=d,this.auth=p.auth,this.registration=p.registration,this.recovery=p.recovery,this.devices=p.devices,this.keys=f,this.near=p.near,this.tempo=p.tempo,this.evm=p.evm,this.resumePendingRegistrationOnStartup(),XG(s.resumePendingAcknowledgementsV1)}async prefillRestoredWalletSession(e){await UG({state:e,chainTargets:this.configuredChainTargets(),prefill:this.prefillRestoredSession})}async lockAfterWalletMove(){ew(),await this.auth.lock()}onSdkLifecycleEvent(e){return this.signingEngine.onSdkLifecycleEvent(e)}getContext(){return{signingEngine:this.signingEngine,nearClient:this.nearClient,configs:this.configs,theme:this.theme,resumePendingAcknowledgementsV1:this.resumePendingAcknowledgementsAfterExactUnlockV1.bind(this)}}resumePendingAcknowledgementsAfterExactUnlockV1(){XG(this.resumePendingAcknowledgementsV1)}async resumePendingRegistrationOnStartup(){if(G.isDisabled())return;let e=String(this.configs.network.relayer?.url||``).trim();if(e){try{let t=await ko({relayerUrl:e});for(let e of t)e.kind===`failed`&&console.warn(`[SeamsWeb] pending registration replay remains pending:`,e.registrationCeremonyId,e.error)}catch(e){console.warn(`[SeamsWeb] pending registration startup replay failed:`,e instanceof Error?e.message:String(e||`unknown error`))}try{let t=await _u({relayUrl:e});for(let e of t)YG(e)}catch(e){console.warn(`[SeamsWeb] pending wallet recovery startup replay failed:`,e instanceof Error?e.message:String(e||`unknown error`))}}}dispose(){this.deviceLinkingDispose(),this.signingEngine.dispose()}readAppearance(){return this.appearance}setTheme(e){e!==`light`&&e!==`dark`||this.setAppearance({theme:{...this.appearance.theme,mode:e}})}chainTarget(e){return yT(this.configs.network.chains,e)}configuredChainTargets(){return on(this.configs.network.chains)}setAppearance(e){let t=qG(this.appearance,e);this.appearance=t,this.theme=t.theme.mode;try{this.signingEngine.setAppearance(t)}catch{}try{document.documentElement.setAttribute(`data-seams-theme`,this.theme)}catch{}}setWalletIframeSurfaceMeasurementBinding(e){this.signingEngine.setWalletIframeSurfaceMeasurementBinding(e)}async syncAccountDomain(e){let t=e.walletId?hi(e.walletId):null;return await yE(this.getContext(),t?String(t):null,e.options)}onNearAccountChange(e){return this.onSdkLifecycleEvent(JG.bind(null,e))}async getCodeStatusDomain(e){let t=String(this.configs.network.relayer.url||``).trim(),n=e.authorization.kind===`passkey`?await Tf({relayUrl:t,walletId:e.walletId,rpId:this.configs.wallet.rpId}):await Df({context:this.getContext(),relayUrl:t,walletId:e.walletId});return n.kind===`ready`?{...n,pendingLocalBackup:await vl.has(e.walletId)}:n}async preloadedCodeStatusDomain(e){return e}async confirmBackupDomain(e){let t=String(this.configs.network.relayer.url||``).trim(),n=this.getCodeStatusDomain.bind(this,e);if(e.authorization.kind===`email_otp`){let e=await n();if(e.kind!==`ready`)throw Error(e.message);n=this.preloadedCodeStatusDomain.bind(this,e)}let r=await _l({walletId:e.walletId,loadStatus:n,loadPendingBackup:this.loadPendingWalletRecoveryCodeBackupRequest.bind(this,e.walletId)},this.signingEngine.getWalletIframeSurfaceMeasurementBinding(),{appearance:this.appearance});if(r.kind!==`wallet_recovery_codes_backed_up_v1`)throw Error(`Pending wallet recovery-code backup was not completed`);let i=e.authorization.kind===`passkey`?await kf({relayUrl:t,walletId:e.walletId,rpId:this.configs.wallet.rpId,expectedIssuedAtMs:r.issuedAtMs}):await Nf({context:this.getContext(),relayUrl:t,walletId:e.walletId,expectedIssuedAtMs:r.issuedAtMs});return i.kind===`acknowledged`&&await vl.deleteIssuedAtMs(e.walletId,r.issuedAtMs),i}async loadPendingWalletRecoveryCodeBackupRequest(e){let t=await vl.read(e);if(!t)return null;if(t.kind!==`ready`)throw Error(`Recovery codes are awaiting a verified server issuance. Retry registration.`);return{kind:`wallet_recovery_code_backup_request_v1`,walletId:t.walletId,recoveryCodes:t.recoveryCodes,continuation:`pending_backup_must_finish`,issuedAtMs:t.issuedAtMs}}async requestWalletCustodyEmailOtpChallengeDomain(e){return await Of({relayUrl:String(this.configs.network.relayer.url||``).trim(),...e})}async rotateCodesDomain(e){let t=String(this.configs.network.relayer.url||``).trim();return await ND({context:this.getContext(),relayUrl:t,walletId:e.walletId,authorization:e.authorization})}async signTempoFeeTokenPreferenceInternal(e){let t=YE(e),n=await this.signingEngine.signEvmFamily({...e,request:t});if(n.chain!==`evm`||n.kind!==`eip1559`)throw Error(`[SeamsWeb][tempo] expected EVM FeeManager result, received ${n.chain}`);return n}async resolveExactKeyExportLaneDomain(e){let t=WG(e);if(ST(this.configs,t),!String(t.walletSession.walletId||``).trim())throw Error(`[SeamsWeb] key export lane resolution requires wallet session context`);return GG(await this.signingEngine.resolveExactKeyExportLane(t))}async exportKeypairWithUIDomain(e){let t=KG(e,this.theme);if(ST(this.configs,t),!String(t.walletSession.walletId||``).trim())throw Error(`[SeamsWeb] key export requires wallet session user context`);await this.signingEngine.exportKeypairWithUI(t)}};async function $G(){}function eK(e){return!(typeof window>`u`||window.Worker===void 0||e&&e!==window.location.origin)}const tK=`seams-theme-overrides`,nK=[`.seams-wallet-ui`,`.seams-auth-menu-surface`,`.seams-host-themed-dialog`],rK=nK.join(`,
|
|
2
|
-
`),iK=nK.map(e=>`${e}[theme="light"],\n:root[data-seams-theme="light"] ${e}:not([theme="dark"])`).join(`,
|
|
3
|
-
`);let aK=null;function oK(){return aK||=jt({doc:document,baseCss:``,dynamicStyleDataAttr:`data-seams-theme-overrides`,nonce:()=>At()}),aK}function sK(e){let t=e.trim();return t&&/^[A-Za-z][A-Za-z0-9_-]*$/.test(t)?t:null}function cK(e){let t=e.trim();return!t||t.length>1024||/[{};\n\r]/.test(t)?null:t}function lK(e,t){let n=[];for(let[r,i]of Object.entries(e)){let e=sK(r);if(!e)continue;let a=cK(i);a&&n.push(` --seams-${t}-${e}: ${a} !important;`)}return n}function uK(e){let t=e.theme.mode,n=e.theme.colors,r=[...lK(n,`colors`),...lK(e.theme.shape??{},`shape`)],i=[];if(r.length>0){let e=t===`light`?iK:rK;i.push(`${e} {\n${r.join(`
|
|
4
|
-
`)}\n}`)}let a=i.join(`
|
|
5
|
-
|
|
6
|
-
`).trim();if(!a){oK().deleteDynamicRule(tK);return}oK().setDynamicRule(tK,a)}function dK(){return{parentOrigin:null,port:null,configuration:{kind:`unconfigured`},preferencesRevision:0,sessionObserver:null,nearClient:null,walletRuntime:null,prefsUnsubscribe:null,lifecycleSource:null,lifecycleUnsubscribe:null,lifecycleListener:null,expiredSessionsByWallet:new Map,surfaceMeasurementBinding:{kind:`disabled`}}}function fK(e){let{configuration:t}=e;if(t.kind===`unconfigured`)throw Error(`Wallet service not configured. Call PM_SET_CONFIG first.`);let n=Ke(t.config.network.chains);return e.nearClient||=new Jd(n),e.walletRuntime||(Lf(!0),e.walletRuntime=new QG(t.config,e.nearClient),pK(e)),e.walletRuntime}function pK(e){try{let t=e.walletRuntime;if(!t)return;let n=t.theme;(n===`light`||n===`dark`)&&document.documentElement.setAttribute(`data-seams-theme`,n)}catch{}}function mK(e,t){let n=nt(e.configuration.kind===`configured`?e.configuration.config:null),r=nt(t.config);e.configuration=t;let i=t.config.ui.appearance,a=i.theme.mode;try{document.documentElement.setAttribute(`data-seams-theme`,a),document.documentElement.lang=i.locale??`en`,uK(i)}catch{}if(e.walletRuntime&&r===n)try{e.walletRuntime.setAppearance(i)}catch{}if(ft(hK(t.assetsBaseUrl)),r!==n){let t=e.walletRuntime;e.walletRuntime=null,e.sessionObserver?.dispose(),e.sessionObserver=null,e.lifecycleSource=null,e.surfaceMeasurementBinding={kind:`disabled`},e.prefsUnsubscribe?.(),e.lifecycleUnsubscribe?.(),e.prefsUnsubscribe=null,e.lifecycleUnsubscribe=null,e.nearClient=null,t?.dispose()}}function hK(e){let t=window.location.origin;try{let n=new URL(e,t);if(n.origin===t)return n.href.endsWith(`/`)?n.href:`${n.href}/`}catch{}return new URL(`/sdk/`,t).href}function gK(e,t){e.lifecycleSource!==t&&(e.lifecycleUnsubscribe?.(),e.lifecycleSource=t,e.lifecycleUnsubscribe=t.onSdkLifecycleEvent(yK.bind(null,e,t)))}function _K(e,t){e.lifecycleListener=t,e.walletRuntime&&gK(e,e.walletRuntime)}function vK(e){throw Error(`Unhandled SDK lifecycle event: ${String(e)}`)}function yK(e,t,n){if(e.lifecycleSource===t)switch(n.event){case`signing_session.expired`:{let t=e.expiredSessionsByWallet.get(n.walletId);if(t?.has(n.walletSessionId))return;t?t.add(n.walletSessionId):e.expiredSessionsByWallet.set(n.walletId,new Set([n.walletSessionId])),e.lifecycleListener?.(n);return}case`registration.near_provisioning_changed`:e.lifecycleListener?.(n);return;default:return vK(n)}}let bK=null;const xK=new Map;let SK=null;const CK=new Set([`PM_REGISTER_WALLET`,`PM_ADD_WALLET_SIGNER`,`PM_ADD_PASSKEY`,`PM_ACTIVATE_AUTH_METHOD`,`PM_ADD_EMAIL_OTP`,`PM_REVOKE_AUTH_METHOD`,`PM_REVOKE_LINKED_DEVICE`,`PM_SIGN_TX_WITH_ACTIONS`,`PM_SIGN_AND_SEND_TX`,`PM_SIGN_DELEGATE_ACTION`,`PM_SIGN_NEP413`,`PM_UNLOCK`,`PM_UNLOCK_AUTH_METHOD`,`PM_SIGN_TEMPO`,`PM_ROTATE_WALLET_RECOVERY_CODES`,`PM_GET_WALLET_RECOVERY_CODE_STATUS`,`PM_ACKNOWLEDGE_WALLET_RECOVERY_CODE_BACKUP`,`PM_SYNC_ACCOUNT_FLOW`,`PM_EXPORT_KEYPAIR_UI`,`PM_SCAN_AND_LINK_DEVICE`,`PM_START_DEVICE2_LINKING_FLOW`]);function wK(e,t){e.post({type:`SURFACE_MEASUREMENT`,payload:t})}function TK(e){if(e.type!==`PM_EXPORT_KEYPAIR_UI`)return;let t=e.payload?.options?.variant;return t===`modal`||t===`drawer`?t:`drawer`}function EK(e){let t;try{t=Et(e.req.requestId)}catch{return null}let n=TK(e.req);return{requestId:t,binding:{kind:`wallet_iframe`,...e.transactionReview?{transactionReview:e.transactionReview}:{},requestId:t,postMeasurement:wK.bind(null,e),...n?{hostSurfaceVariant:n}:{}}}}function DK(e){return CK.has(e.req.type)}function OK(e,t){let n=e.surfaceMeasurementBinding;n.kind!==`wallet_iframe`||n.requestId!==t||(e.surfaceMeasurementBinding={kind:`disabled`},e.walletRuntime?.setWalletIframeSurfaceMeasurementBinding({kind:`disabled`}))}function kK(e,t){e.surfaceMeasurementBinding=t,fK(e).setWalletIframeSurfaceMeasurementBinding(t)}function AK(e){return SK!==e.executionGeneration&&(xK.clear(),SK=e.executionGeneration),bK||=dK(),e.onConfigurationChanged=jK.bind(null,e),bK.parentOrigin=e.parentOrigin,bK.port!==e.port&&(bK.sessionObserver?.dispose(),bK.sessionObserver=null),bK.port=e.port,e.parentOrigin!==null&&QC(e.parentOrigin),_K(bK,UK.bind(null,bK)),e.configuration.kind===`configured`&&mK(bK,e.configuration),bK}function jK(e){!bK||e.configuration.kind===`unconfigured`||AK(e)}function MK(e){let t=e.walletRuntime,n=fK(e);if(gK(e,n),t===n)return PK(e,n),n;let r=n.preferences;e.prefsUnsubscribe?.();let i=RK.bind(null,e,n),a=r.onConfirmationConfigChange?.(i)||null,o=r.onCurrentWalletChange?.(i)||null;return e.prefsUnsubscribe=()=>{try{a?.()}catch{}try{o?.()}catch{}},PK(e,n),Promise.resolve().then(i).catch(()=>{}),n}function NK(e,t,n,r){e.walletRuntime!==t||e.port!==n||n.postMessage(r)}function PK(e,t){if(e.sessionObserver)return e.sessionObserver;if(!e.port)throw Error(`Wallet session observation requires a connected parent`);return e.sessionObserver=new Op(t,NK.bind(null,e,t,e.port),e.expiredSessionsByWallet,IS.bind(null,t.getContext())),e.sessionObserver}function FK(e,t,n,r){return PK(e,zK(e,t)).observe(n,r)}function IK(e,t){return PK(e,zK(e,t)).publishCurrentSession()}function LK(e,t){return{walletId:t.preferences.getCurrentWalletId(),confirmationConfig:t.preferences.getConfirmationConfig(),revision:e.preferencesRevision}}function RK(e,t){e.walletRuntime===t&&(e.preferencesRevision+=1,e.port?.postMessage({type:`PREFERENCES_CHANGED`,payload:LK(e,t)}))}function zK(e,t){if(t.executionGeneration!==t.state.executionGeneration)throw Error(`Wallet configuration changed during request`);return MK(e)}function BK(e,t){return LK(e,zK(e,t))}function VK(e,t){return{getWalletRuntime:zK.bind(null,e,t),readPreferences:BK.bind(null,e,t),observeSession:FK.bind(null,e,t),publishCurrentSession:IK.bind(null,e,t),post:HK.bind(null,t),postProgress:(e,n)=>{e&&HK(t,{type:`PROGRESS`,requestId:e,payload:n})},isCancelled:t.isCancelled,respondIfCancelled:t.respondIfCancelled}}function HK(e,t){e.executionGeneration===e.state.executionGeneration&&(Uf(t),e.post(t))}function UK(e,t){e.sessionObserver?.onLifecycleEvent(t)}async function WK(e,t){if(e.respondIfCancelled(e.req.requestId))return;let n=AK(e.state),r=PK(n,zK(n,e));r.beginOperation(),Wf(e.req,e.post);let i=DK(e)?EK(e):null;try{let r=zK(n,e);await ja(e.req,r.preferences.getCurrentWalletId());let a=xK.get(t);a||(a=t(VK(n,e)),xK.set(t,a));let o=a[e.req.type];if(!o)throw Error(`Unsupported wallet iframe request type: ${e.req.type}`);i&&kK(n,i.binding),await o(e.req),e.executionGeneration===e.state.executionGeneration&&Vf(e.req)}catch(t){throw e.executionGeneration===e.state.executionGeneration&&Hf(e.req.requestId,t),t}finally{r.endOperation(),i&&e.executionGeneration===e.state.executionGeneration&&OK(n,i.requestId)}}async function GK(e,t){let n=AK(e),r=n.configuration;if(r.kind!==`configured`)throw Error(`Wallet service is not configured.`);let i=Ia(t,null);if(i===null)return{kind:`disabled`};MK(n);let a=await G.resolveSelectedWalletAuthority(i);if(a.kind!==`resolved`||a.authMethod.kind!==`voiceid`)return{kind:`disabled`};if(!await ka(i,a.authMethod.walletAuthMethodId))throw Error(`VoiceID is turned off. Unlock with another method.`);return await(await Qf(r.config.authMethods,`voiceid`)).review(t,r)}export{ip as _,cw as a,Xf as b,nw as c,wx as d,qx as f,dp as g,Dp as h,WK as handleWalletHostRuntimeRequestWithHandlers,ow as i,FC as l,ob as m,WT as n,$C as o,xx as p,bE as r,ew as s,YE as t,Ob as u,Z as v,GK as walletAuthMethodReviewPolicy,Zf as y};
|