@seams/wallet 0.30.0 → 0.33.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/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +1 -127
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +38 -10
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +23 -67
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/RecoveryOptions.js +60 -0
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +6 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/authMenuPresentation.js +28 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +21 -10
- package/dist/esm/SeamsWeb/walletIframe/shared/walletAlternatives.js +4 -14
- package/dist/esm/core/ui/walletIcon.js +11 -3
- package/dist/esm/externalNear/controller.js +3 -2
- package/dist/esm/externalNear/meteor.js +1 -1
- package/dist/esm/externalNear/meteorRequest.js +8 -2
- package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +17 -1
- package/dist/esm/sdk/{host-Csu5L7VF.js → host-BsVFOugh.js} +1 -1
- package/dist/esm/sdk/ownerNearOperation-BsIdSH0C.js +1 -0
- package/dist/esm/sdk/registration-Coh0_Nva.js +1 -0
- package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/esm/sdk/runtime-auth-CJCU2yJi.js +1 -0
- package/dist/esm/sdk/{runtime-device-link-DQe0aqRi.js → runtime-device-link-C0oXLSnz.js} +1 -1
- package/dist/esm/sdk/{runtime-ecdsa-tempo-DKkeMMpm.js → runtime-ecdsa-tempo-BC8u9NuI.js} +1 -1
- package/dist/esm/sdk/{runtime-email-otp-CzTe7r9I.js → runtime-email-otp-Cl4iu0z7.js} +1 -1
- package/dist/esm/sdk/{runtime-export-BiyLbdCe.js → runtime-export-BdhfErGJ.js} +1 -1
- package/dist/esm/sdk/{runtime-near-Kk0n1FSf.js → runtime-near-CT2ALBct.js} +1 -1
- package/dist/esm/sdk/{runtime-preferences-B-A3hddU.js → runtime-preferences-fN2G9tct.js} +1 -1
- package/dist/esm/sdk/{runtime-recovery-C9p1TU1w.js → runtime-recovery-n-TGLkwz.js} +1 -1
- package/dist/esm/sdk/{runtimeContext-ChuvOC0h.js → runtimeContext-DI28d8Qu.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/wallet-service.css +2 -0
- package/dist/esm/sdk/wallet-ui.css +1 -1
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +212 -233
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +675 -694
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/headers.manifest.json +1 -1
- package/dist/public/sdk/{host-Csu5L7VF.js → host-BsVFOugh.js} +1 -1
- package/dist/public/sdk/ownerNearOperation-BsIdSH0C.js +1 -0
- package/dist/public/sdk/registration-Coh0_Nva.js +1 -0
- package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/runtime-auth-CJCU2yJi.js +1 -0
- package/dist/public/sdk/{runtime-device-link-DQe0aqRi.js → runtime-device-link-C0oXLSnz.js} +1 -1
- package/dist/public/sdk/{runtime-ecdsa-tempo-DKkeMMpm.js → runtime-ecdsa-tempo-BC8u9NuI.js} +1 -1
- package/dist/public/sdk/{runtime-email-otp-CzTe7r9I.js → runtime-email-otp-Cl4iu0z7.js} +1 -1
- package/dist/public/sdk/{runtime-export-BiyLbdCe.js → runtime-export-BdhfErGJ.js} +1 -1
- package/dist/public/sdk/{runtime-near-Kk0n1FSf.js → runtime-near-CT2ALBct.js} +1 -1
- package/dist/public/sdk/{runtime-preferences-B-A3hddU.js → runtime-preferences-fN2G9tct.js} +1 -1
- package/dist/public/sdk/{runtime-recovery-C9p1TU1w.js → runtime-recovery-n-TGLkwz.js} +1 -1
- package/dist/public/sdk/{runtimeContext-ChuvOC0h.js → runtimeContext-DI28d8Qu.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/wallet-service.css +2 -0
- package/dist/public/sdk/wallet-ui.css +1 -1
- package/dist/public/sdk/workers/device-linking-key.worker.js +454 -947
- package/dist/public/sdk/workers/email-otp.worker.js +588 -820
- package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
- package/dist/public/sdk/workers/passkey-mpc-export.worker.js +572 -804
- package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
- package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +524 -971
- package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
- package/dist/public/wallet-assets.manifest.json +29 -29
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +4 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +3 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/RecoveryOptions.d.ts +11 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.d.ts +3 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/authMenuPresentation.d.ts +13 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +7 -1
- package/dist/types/wallet/src/core/ui/walletIcon.d.ts +1 -0
- package/dist/types/wallet/src/externalNear/meteorRequest.d.ts +3 -0
- package/dist/types/wallet/src/index.d.ts +1 -1
- package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/public.d.ts +1 -1
- package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +6 -2
- package/dist/types/wallet/src/react/index.d.ts +1 -1
- package/dist/workers/device-linking-key.worker.js +454 -947
- package/dist/workers/email-otp.worker.js +588 -820
- package/dist/workers/evm_crypto_bg.wasm +0 -0
- package/dist/workers/passkey-mpc-export.worker.js +572 -804
- package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/workers/tempo_signer_bg.wasm +0 -0
- package/dist/workers/wallet-custody-ceremony.worker.js +524 -971
- package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
- package/package.json +17 -17
- package/dist/esm/sdk/ownerNearOperation-DCxxHcwX.js +0 -1
- package/dist/esm/sdk/registration-C7w_51wE.js +0 -1
- package/dist/esm/sdk/runtime-auth-BMT_gIKI.js +0 -1
- package/dist/public/sdk/ownerNearOperation-DCxxHcwX.js +0 -1
- package/dist/public/sdk/registration-C7w_51wE.js +0 -1
- package/dist/public/sdk/runtime-auth-BMT_gIKI.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as e,k as t}from"./domainIds-t1lp25yU.js";import{S as n}from"./digests-BIaE0DMd.js";import"./walletDbName-B6-CV_Rq.js";import"./activeWalletSession-HAOgRKzn.js";import"./signingSessionSeal-BFOBKj-J.js";import{S as r,T as i,a,b as o,g as s,o as c,w as l,x as ee,y as te}from"./ownerNearOperation-DCxxHcwX.js";import{t as ne}from"./walletIframeIdentity-Cz82I_Uh.js";import"./capabilityKinds-Cafn86Y1.js";import{i as re}from"./errors-BJBDbwHk.js";import{a as u}from"./signerDomain-D-EUTlLK.js";import"./accountIds-DGWFzEnw.js";import{C as ie,S as d,T as f,_ as ae,a as p,b as m,c as oe,d as se,f as ce,g as le,h,i as g,l as ue,m as de,n as fe,o as _,p as pe,r as me,s as he,t as ge,u as _e,v as ve,w as ye,x as v,y as be}from"./icons-pSZJ5Xrm.js";import{t as y}from"./surface-measurement-reporter-DJ_dQhBV.js";import{i as b,n as xe,o as Se,r as x,s as S,t as Ce}from"./csp-stylesheet-5LU6VGKK.js";import"./registrationIntent-Cb3tggIM.js";import"./presignatures-B9KnQyfE.js";import"./device-linking-BL2aDEUF.js";import"./walletAuthority-CU9nO0Ze.js";import"./digestEncoding-Rx8Vjy4J.js";import"./walletAuthMethodRecord--fvGr8r1.js";import{o as we,r as Te}from"./signerSlot-BlijMq8C.js";import{c as Ee,i as De,s as Oe}from"./sdkSentEvents-BFwv3mBw.js";import{P as ke,k as Ae,t as je}from"./indexedDB-BqsYXybq.js";import"./keccak-DGHI1G6t.js";import"./registrationSignerPlan-CeMidFme.js";import"./walletCapabilityBindings-mPx-6_r-.js";import"./emailOtpEcdsaDerivationIdentity-DJmMyqL-.js";import{t as Me}from"./walletSessionAuthorizationStatus-CQ3qA9tI.js";import{t as Ne}from"./SeamsWordmark-CeEi2RlU.js";import"./authorization-D_NueqAv.js";import{D as Pe,i as Fe,k as Ie,n as Le,r as Re,s as ze}from"./registration-C7w_51wE.js";import"./wallet-recovery-Bfm-oUoP.js";import{t as Be}from"./challengeDelivery-Dj9HrjW9.js";import"./signNear-DyFk--I3.js";import{a as Ve}from"./confirm-ui-DWFcGTsT.js";import{c as C,i as w,o as He,r as Ue,s as T,t as We}from"./appearance-token-vars-CzlRDVQ7.js";import{_ as Ge,a as Ke,b as qe,d as Je,f as Ye,g as Xe,h as Ze,handleWalletHostRuntimeRequestWithHandlers as Qe,i as $e,l as et,m as tt,n as nt,o as rt,p as it,r as at,s as E,u as ot,v as st,y as ct}from"./runtimeContext-ChuvOC0h.js";import{n as D,r as lt,t as ut}from"./shared-CkHhXgFB.js";function dt(e){return{PM_GET_LAST_WALLET_MOVE_REQUEST:ht.bind(null,e),PM_MOVE_WALLET:mt.bind(null,e),PM_GET_WALLET_PLACEMENT:ft.bind(null,e),PM_GET_WALLET_MOVE:pt.bind(null,e)}}async function ft(e,r){let i=n(r.payload,`Wallet placement request`),a=t(i.walletId);if(!a.ok||Object.keys(i).length!==1)throw Error(`Wallet placement identity is invalid`);let o=await e.getWalletRuntime().placement.get(a.value);e.respondIfCancelled(r.requestId)||D(e,r.requestId,o)}async function pt(e,r){let i=n(r.payload,`Wallet move request`),a=t(i.walletId),o=$e(i.moveId);if(!a.ok||Object.keys(i).length!==2)throw Error(`Wallet move request is invalid`);let s=await e.getWalletRuntime().placement.getMove(a.value,o);e.respondIfCancelled(r.requestId)||D(e,r.requestId,s)}async function mt(e,t){let n=Ke(t.payload),r=await e.getWalletRuntime().placement.move(n);e.respondIfCancelled(t.requestId)||D(e,t.requestId,r)}async function ht(e,r){let i=n(r.payload,`Wallet move locator request`),a=t(i.walletId);if(!a.ok||Object.keys(i).length!==1)throw Error(`Wallet move locator identity is invalid`);let o=await e.getWalletRuntime().placement.getLastMoveRequest(a.value);e.respondIfCancelled(r.requestId)||D(e,r.requestId,o)}function gt(e){if(!e)throw Error(`PM_UNLOCK payload is required`);return e}function _t(e){switch(e.kind){case`default_options`:return{};case`custom_options`:return{...O(`signerSlot`,e.options.signerSlot),...O(`signingSession`,e.options.signingSession),...O(`unlockSelection`,e.options.unlockSelection),...vt(e.options.ecdsaKeyFactsInventory)}}}function vt(e){switch(e.kind){case`default`:return{};case`value`:return{ecdsaKeyFactsInventory:e.value}}}function O(e,t){switch(t.kind){case`default`:return{};case`value`:return{[e]:t.value}}}var yt=class extends b{connect=e=>{this.props.onIntent({kind:`wallet_connection`,alternativeId:e})};renderWalletRows(e){let t=[];for(let n of e)t.push(x(`button`,{type:`button`,class:`seams-menu-option seams-wallet-alternative`,onClick:this.connect.bind(this,n.id),children:[x(`span`,{class:`seams-alternative-icon`,"aria-hidden":`true`,children:n.icon?x(`img`,{src:n.icon,alt:``,width:`32`,height:`32`}):`↗`}),x(`span`,{class:`seams-menu-option-text`,children:[n.label,n.description&&x(`small`,{children:n.description})]}),x(`span`,{class:`seams-alternative-arrow`,"aria-hidden":`true`,children:`↗`})]},n.id));return x(`div`,{class:`seams-menu-options`,children:t})}render(){let{primary:e,secondary:t}=this.props.alternatives;return x(S,{children:[e.length>0&&x(`section`,{"aria-label":`Or connect another wallet`,children:[x(`div`,{class:`seams-menu-options-label seams-alternatives-heading`,children:x(w,{copy:`Or connect another wallet`})}),this.renderWalletRows(e)]}),t.length>0&&x(`details`,{class:`seams-menu-expander`,"data-wallet-alternatives-secondary":!0,children:[x(`summary`,{children:[x(w,{copy:`More wallets`}),x(`span`,{"aria-hidden":`true`,children:`⌄`})]}),this.renderWalletRows(t)]})]})}};const bt=new Set(Ae);function k(e){let t=``;for(let n of e.toUpperCase()){let e=n===`O`?`0`:n===`I`||n===`L`?`1`:n;bt.has(e)&&(t+=e)}return t}const xt=/[\s\-\u2010-\u2015\u2212]/;function St(e){let t=new Set;for(let n of e.toUpperCase())xt.test(n)||k(n)||t.add(n);return Array.from(t).slice(0,3)}function Ct(e,t,n){let r=t&&t.start===t.end?t.start:null,i=t===null?null:Math.min(t.start,31),a=[];for(let o=0;o<32;o+=4){let s=o+4,c=[];for(let i=o;i<s;i+=1){let a=e[i]??``,o=[`seams-otp-slot`];a&&o.push(`is-filled`),i===r&&o.push(`is-caret`),r===32&&i===31&&o.push(`is-caret-after`),t&&i>=t.start&&i<t.end&&o.push(`is-selected`),n&&i>=n.start&&i<n.end&&o.push(`is-new`),c.push(x(`span`,{class:o.join(` `),"data-recovery-slot":i,children:a},i))}let l=[`seams-recovery-code-group`];i!==null&&i>=o&&i<s&&l.push(`is-active`),e.length>=s&&l.push(`is-complete`),a.push(x(`div`,{class:l.join(` `),children:c},o))}return a}function wt(e){let t=Be(e);return t===null?null:x(`p`,{class:`seams-otp-description`,children:[x(w,{message:`Demo email code:`}),` `,x(`code`,{children:t})]})}const A=`seams-auth-menu-title`,j=`seams-auth-menu-account-list`;function M(e,t=6){return e.padEnd(t,` `).slice(0,t).split(``)}function Tt(e,t,n,r){let i=null;for(let r of e.querySelectorAll(`[data-recovery-slot]`)){let e=Number(r.dataset.recoverySlot),a=r.getBoundingClientRect(),o=t<a.left?a.left-t:Math.max(0,t-a.right),s=n<a.top?a.top-n:Math.max(0,n-a.bottom),c=o*o+s*s;(i===null||c<i.distance)&&(i={index:e,distance:c,after:t>a.left+a.width/2})}return i===null?null:Math.min(i.after?i.index+1:i.index,r)}function N(e){return x(S,{children:x(`span`,{class:`seams-otp-slot ${e.trim()?`is-filled`:``}`,children:e})})}function Et(e){let t=e.kind===`recovery`?`:${e.stage}`:``;return`${e.kind}:${e.mode}:${e.status.kind}${t}`}function Dt(e){return e.status.kind===`succeeded`?``:e.status.kind===`busy`?e.status.headline:e.status.kind===`recoverable`?e.status.message:e.stage===`passkey_ready`?`Recovery code accepted.`:e.stage===`sign_in_ready`?`Wallet recovered. Unlock it to continue.`:``}function Ot(e){return e.kind===`recovery`?e.stage===`choose_method`?`Back to recovery code`:`Back to unlock wallet`:`Back`}function P(e){return e.kind===`recovery`&&e.stage===`finalizing`}function kt(e){return e===`register`?{prompt:`Already have a wallet?`,action:`Unlock wallet`,nextMode:`login`}:{prompt:`Don't have a wallet?`,action:`Create a wallet`,nextMode:`register`}}function At(e){return e===`register`?`Create a wallet`:`Unlock wallet`}function jt(e){return e===`register`?`Create wallet with passkey`:`Unlock with passkey`}function Mt(e){return e.kind===`google_otp_login`||e.kind===`google_registration`?e.error||null:e.kind===`passkey`&&e.status.kind===`recoverable`&&e.status.reason===`error`?e.status.message:null}function F(e){return f(e.accountOptions,e.selectedAccount).selectedAccount}function Nt(e){return e.walletId}function I(e){return e.authMethod===`email_otp`?e.emailAddress:null}function Pt(e){if(!e)return`Saved wallets`;let t=I(e);return t?`Saved wallets. Selected wallet ID ${e.walletId}, email ${t}`:`Saved wallets. Selected ${e.walletId}`}function Ft(e){let t=new Map;for(let n of e)t.has(n.walletId)||t.set(n.walletId,n);return t.size?[{id:`wallets`,label:`Saved wallets`,accounts:[...t.values()]}]:[]}const It=()=>new Promise(e=>setTimeout(e,90));function Lt(e){return e.dataset.blink?null:(e.dataset.blink=`off`,It().then(()=>(e.dataset.blink=`on`,It())).then(()=>{delete e.dataset.blink}))}var Rt=class extends b{shownNotice=``;render(){let{notice:e,onRetry:t}=this.props;return e&&(this.shownNotice=e),x(`div`,{class:`seams-auth-footer`,"data-state":e?`notice`:`brand`,children:[x(`div`,{class:`seams-auth-footer-brand`,"aria-hidden":e?`true`:void 0,children:[x(`span`,{children:x(w,{message:`Secured by`})}),` `,x(Ne,{})]}),x(`div`,{class:`seams-auth-footer-notice`,children:[fe(),x(`span`,{class:`seams-auth-footer-text`,"aria-hidden":`true`,children:x(w,{copy:this.shownNotice})}),x(`button`,{class:`seams-auth-footer-action`,type:`button`,disabled:!e,onClick:t,children:x(w,{message:`Try again`})})]}),e?x(`p`,{class:`sr-only`,role:`alert`,children:x(w,{copy:e})}):null]})}};function zt(e,t){return x(S,{children:x(`div`,{class:`seams-link-device-dot-ring is-${e}`,"aria-hidden":`true`,children:[Array.from({length:12},(e,t)=>x(S,{children:x(`span`,{"data-dot-index":t})})),t?x(S,{children:x(`div`,{class:`seams-link-device-dot-ring-glyph`,children:t})}):null,x(`svg`,{class:`seams-link-device-dot-ring-check`,viewBox:`0 0 52 52`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:x(`path`,{d:`m18.5 27 5 5 10-11`})})]})})}function Bt(e){switch(e.kind){case`sending`:return{ring:`waiting`,heading:`Sending your code`,status:`Emailing a 6-digit code`,pending:!0,tone:`neutral`};case`resending`:return{ring:`waiting`,heading:`Sending a new code`,status:`Emailing a fresh 6-digit code`,pending:!0,tone:`neutral`};case`submitting`:return{ring:`waiting`,heading:`Checking your code`,status:`Verifying the code you entered`,pending:!0,tone:`neutral`};case`code_input`:return{ring:`idle`,heading:`Verify your email`,status:`Enter the 6-digit code we just sent.`,pending:!1,tone:`neutral`};case`incorrect`:return{ring:`idle`,heading:`Verify your email`,status:e.message,pending:!1,tone:`error`};case`expired`:return{ring:`idle`,heading:`That code expired`,status:e.message,pending:!1,tone:`error`};case`unavailable`:return{ring:`idle`,heading:`Email code unavailable`,status:e.message,pending:!1,tone:`error`};case`completed`:return{ring:`approved`,heading:`Email verified`,status:`Finishing linking this device`,pending:!0,tone:`neutral`}}}var Vt=class extends b{static contextType=Ue;state={accountMenu:`closed`,recoverySelection:null,recoveryRejection:null};recoveryDrawnCode=``;recoveryArrival=null;recoveryArrivalTimer=null;recoveryRejectionTimer=null;accountMenuExitTimer=null;accountMenuChoice=null;previouslyFocusedElement=null;shouldFocusInitialControl=!0;contentResizeObserver=null;contentHeightFrame=null;previousLinkDeviceStateKind=null;previousRecoveryStage=null;lastMethod=`passkey`;walletRowEntry=null;get viewModel(){return this.props.viewModel}get accountMenuOpen(){return this.state.accountMenu===`open`}openAccountMenu(){this.endAccountMenuExit(),this.setState({accountMenu:`open`})}closeAccountMenu(){this.accountMenuOpen&&(this.setState({accountMenu:`closing`}),this.accountMenuExitTimer=setTimeout(()=>{this.endAccountMenuExit(),this.setState({accountMenu:`closed`})},160))}endAccountMenuExit(){this.accountMenuExitTimer!==null&&clearTimeout(this.accountMenuExitTimer),this.accountMenuExitTimer=null,this.accountMenuChoice=null}componentDidMount(){let e=document.activeElement;e instanceof HTMLElement&&!this.props.element.contains(e)&&(this.previouslyFocusedElement=e),document.addEventListener(`pointerdown`,this.onDocumentPointerDown),document.addEventListener(`keydown`,this.onKeyDown,!0),this.afterRender()}componentDidUpdate(e){this.afterRender(e.viewModel)}componentWillUnmount(){this.contentResizeObserver?.disconnect(),this.contentResizeObserver=null,this.contentHeightFrame!==null&&cancelAnimationFrame(this.contentHeightFrame),this.contentHeightFrame=null,this.endAccountMenuExit(),this.recoveryArrivalTimer!==null&&clearTimeout(this.recoveryArrivalTimer),this.recoveryRejectionTimer!==null&&clearTimeout(this.recoveryRejectionTimer),window.removeEventListener(`resize`,this.queueContentHeightSync),document.removeEventListener(`pointerdown`,this.onDocumentPointerDown),document.removeEventListener(`keydown`,this.onKeyDown,!0),this.props.styles.deleteDynamicRule(this.props.element.id+`-height`),this.restoreFocus()}afterRender(e){this.shouldFocusInitialControl&&this.focusInitialControl(),this.focusRecoveryControl(e),this.focusLinkDevicePasskeyAction(),this.observeContentSize(),this.queueContentHeightSync()}focusRecoveryControl(e){let t=this.viewModel;if(e?.kind===`recovery`&&t.kind!==`recovery`){this.previousRecoveryStage=null;let e=this.props.element.querySelector(`[data-recovery-action]`),t=e?.closest(`details`);t&&(t.open=!0),e?.focus();return}if(t.kind!==`recovery`)return;let n=this.previousRecoveryStage!==t.stage;if(this.previousRecoveryStage=t.stage,t.stage===`enter_code`){let t=this.props.element.querySelector(`[aria-invalid="true"]`);if(t){t.focus();return}(e?.kind!==`recovery`||e.stage!==`enter_code`)&&this.props.element.querySelector(`[data-recovery-code]`)?.focus();return}if(t.stage===`choose_method`){n&&this.props.element.querySelector(`[data-recovery-target]`)?.focus();return}let r=t.status.kind===`recoverable`&&e?.kind===`recovery`&&e.status.kind!==`recoverable`;(n||r)&&(t.stage===`passkey_ready`||t.stage===`finalizing`||t.stage===`sign_in_ready`)&&this.props.element.querySelector(`[data-auth-menu-primary]`)?.focus()}focusLinkDevicePasskeyAction(){let e=this.viewModel.kind===`link_device`?this.viewModel.linkDevice.kind:null,t=e===`passkey_required`&&this.previousLinkDeviceStateKind!==e;this.previousLinkDeviceStateKind=e,t&&this.props.element.querySelector(`[data-link-device-passkey-action]`)?.focus()}observeContentSize(){if(this.contentResizeObserver)return;let e=this.props.element.querySelector(`.seams-content-sizer`);e&&(this.contentResizeObserver=new ResizeObserver(this.queueContentHeightSync),this.contentResizeObserver.observe(e),window.addEventListener(`resize`,this.queueContentHeightSync))}queueContentHeightSync=()=>{this.contentHeightFrame!==null&&cancelAnimationFrame(this.contentHeightFrame),this.contentHeightFrame=requestAnimationFrame(this.syncContentHeight)};syncContentHeight=()=>{this.contentHeightFrame=null;let e=this.props.element.querySelector(`.seams-content-switcher`),t=this.props.element.querySelector(`.seams-content-sizer`);!e||!t||this.props.element.hidden||this.props.styles.setDynamicDeclarations(this.props.element.id+`-height`,`#`+this.props.element.id+` .seams-content-switcher`,{height:t.scrollHeight+`px`})};focusInitialControl(){if(!this.props.element.isConnected||!this.shouldFocusInitialControl)return;this.shouldFocusInitialControl=!1;let e=document.activeElement;e instanceof HTMLElement&&this.props.element.contains(e)||this.props.element.querySelector(`[data-auth-menu-input], [data-auth-menu-primary]`)?.focus()}restoreFocus(){let e=this.previouslyFocusedElement;this.previouslyFocusedElement=null,e?.isConnected&&e.focus()}onKeydown=e=>{if(e.key===`Escape`){if(e.preventDefault(),this.viewModel&&P(this.viewModel))return;if(this.accountMenuOpen){this.closeAccountMenu();return}this.emitIntent({kind:`close`,reason:`escape`});return}if(e.key!==`Tab`)return;let t=this.focusableElements();if(t.length===0)return;let n=document.activeElement,r=t.indexOf(n instanceof HTMLElement?n:t[0]);e.shiftKey&&r<=0?(e.preventDefault(),t[t.length-1]?.focus()):!e.shiftKey&&r===t.length-1&&(e.preventDefault(),t[0]?.focus())};focusableElements(){return Array.from(this.props.element.querySelectorAll(`button, input, select, textarea, summary, a[href], [tabindex]:not([tabindex="-1"])`)).filter(Wt)}onDismiss=()=>{P(this.viewModel)||this.emitIntent({kind:`close`,reason:`close_button`})};onBackClick=()=>{this.emitIntent({kind:`back`})};onKeyDown=e=>{if(e.key!==`Escape`||e.defaultPrevented)return;let t=this.viewModel;!t||t.kind!==`recovery`&&!d(t.status)||(e.preventDefault(),e.stopPropagation(),!P(t)&&this.emitIntent({kind:`back`}))};onIntentSwitchClick=()=>{let e=this.viewModel;e&&this.emitIntent({kind:`mode_selected`,mode:kt(e.mode).nextMode})};onRegistrationReroll=()=>{this.emitIntent({kind:`registration_reroll`})};onPasskeyNameInput=e=>{e.currentTarget instanceof HTMLInputElement&&this.emitIntent({kind:`passkey_name_changed`,passkeyName:e.currentTarget.value})};onLoginAccountSelect=e=>{let t=e.currentTarget;if(!(t instanceof HTMLButtonElement))return;let n=t.dataset.walletId,r=t.dataset.authMethod,i=this.viewModel;if(!n||i.kind!==`passkey`||i.mode!==`login`)return;let a=i.accountOptions.find(e=>e.walletId===n&&e.authMethod===r),o=F(i);if(!a||!o||this.accountMenuChoice)return;let s=Lt(t);if(!s)return;let c={chosen:a,previous:o};this.accountMenuChoice=c,this.emitIntent({kind:`login_account_selected`,walletId:a.walletId,authMethod:a.authMethod}),s.then(()=>{this.accountMenuChoice===c&&this.closeAccountMenu()})};onAccountMenuToggle=()=>{this.accountMenuOpen?this.closeAccountMenu():this.openAccountMenu()};onDocumentPointerDown=e=>{!this.accountMenuOpen||!(e.target instanceof Node)||this.props.element.querySelector(`.seams-account-menu`)?.contains(e.target)||this.closeAccountMenu()};onPrimaryClick=()=>{let e=this.viewModel;if(!e||!m(e)||e.kind===`link_device`)return;if(e.kind===`google_otp_login`){this.emitIntent({kind:`google_otp_submit`});return}if(e.kind===`google_registration`){this.emitIntent({kind:`google_registration_complete`});return}let t=e.mode===`register`?{kind:`submit`,mode:`register`,passkeyName:e.passkeyName}:{kind:`submit`,mode:`login`};this.lastMethod=`passkey`,this.emitIntent(t)};onGoogleOtpCodeInput=e=>{e.currentTarget instanceof HTMLInputElement&&this.emitIntent({kind:`google_otp_code_changed`,code:e.currentTarget.value})};onGoogleOtpKeydown=e=>{e.key===`Enter`&&(e.preventDefault(),this.emitIntent({kind:`google_otp_submit`}))};onGoogleOtpResend=()=>{this.emitIntent({kind:`google_otp_resend`})};onGoogleRegistrationReroll=()=>{this.emitIntent({kind:`google_registration_reroll`})};onVoiceClick=()=>{this.lastMethod=`voiceid`,this.emitIntent({kind:`voiceid_selected`})};onGoogleClick=()=>{this.lastMethod=`google`,this.emitIntent({kind:`external_auth`,provider:`google`})};onNoticeRetry=()=>{if(this.lastMethod===`voiceid`){this.onVoiceClick();return}this.lastMethod===`google`&&v(this.viewModel)?this.onGoogleClick():this.onPrimaryClick()};onLinkDeviceOpen=()=>{this.emitIntent({kind:`link_device_open`})};onRecoveryOpen=()=>{this.emitIntent({kind:`recovery_open`})};onRecoveryCodeInput=e=>{if(!(e.currentTarget instanceof HTMLInputElement)||this.viewModel.kind!==`recovery`)return;let t=e.currentTarget,n=t.value,r=St(n);r.length>0&&this.showRecoveryRejection(r);let i=k(n.slice(0,t.selectionStart??n.length)).length,a=k(n).slice(0,32);t.value!==a&&(t.value=a,t.setSelectionRange(Math.min(i,a.length),Math.min(i,a.length))),this.syncRecoverySelection(t),this.emitIntent({kind:`recovery_code_changed`,recoveryCode:a})};onRecoverySelectionMove=e=>{e.currentTarget instanceof HTMLInputElement&&this.syncRecoverySelection(e.currentTarget)};onRecoveryCodeClick=e=>{let t=e.currentTarget;if(t instanceof HTMLInputElement){if(t.selectionStart===t.selectionEnd){let n=Tt(this.props.element,e.clientX,e.clientY,t.value.length);n!==null&&t.setSelectionRange(n,n)}this.syncRecoverySelection(t)}};showRecoveryRejection(e){let t=this.state.recoveryRejection?.parity===0?1:0;this.setState({recoveryRejection:{characters:e,parity:t}}),this.recoveryRejectionTimer!==null&&clearTimeout(this.recoveryRejectionTimer),this.recoveryRejectionTimer=setTimeout(this.clearRecoveryRejection,2e3)}clearRecoveryRejection=()=>{this.recoveryRejectionTimer=null,this.setState({recoveryRejection:null})};recoveryCodeArrival(e){let t=this.recoveryDrawnCode;if(e===t)return this.recoveryArrival;this.recoveryDrawnCode=e;let n=0;for(;n<t.length&&t[n]===e[n];)n+=1;let r=n+e.length-t.length;return this.recoveryArrival=e.length>t.length?{start:n,end:r}:null,this.recoveryArrivalTimer!==null&&clearTimeout(this.recoveryArrivalTimer),this.recoveryArrivalTimer=setTimeout(this.endRecoveryArrival,600),this.recoveryArrival}endRecoveryArrival=()=>{this.recoveryArrivalTimer=null,this.recoveryArrival=null};onRecoveryCodeBlur=()=>{this.setState({recoverySelection:null})};syncRecoverySelection(e){let t=e.value.length,n=Math.min(e.selectionStart??t,t),r=Math.min(Math.max(e.selectionEnd??n,n),t),i=this.state.recoverySelection;i?.start===n&&i.end===r||this.setState({recoverySelection:{start:n,end:r}})}onRecoverySubmit=e=>{e.preventDefault(),this.emitIntent({kind:`recovery_code_submit`})};onRecoveryPasskeySelected=()=>{this.emitIntent({kind:`recovery_passkey_selected`})};onRecoveryGoogleSelected=()=>{this.emitIntent({kind:`recovery_google_selected`})};onRecoveryGoogleOtpCodeInput=e=>{e.currentTarget instanceof HTMLInputElement&&this.emitIntent({kind:`recovery_google_otp_code_changed`,code:e.currentTarget.value})};onRecoveryGoogleOtpKeydown=e=>{e.key===`Enter`&&(e.preventDefault(),this.emitIntent({kind:`recovery_google_otp_submit`}))};onRecoveryGoogleOtpSubmit=()=>{this.emitIntent({kind:`recovery_google_otp_submit`})};onRecoveryCreatePasskey=()=>{this.emitIntent({kind:`recovery_create_passkey`})};onRecoverySignIn=()=>{this.emitIntent({kind:`recovery_sign_in`})};onLinkDeviceCreatePasskey=()=>{this.emitIntent({kind:`link_device_create_passkey`})};onLinkDeviceFactorChange=e=>{if(!(e.currentTarget instanceof HTMLInputElement))return;let t=e.currentTarget.value===`email_otp`?{kind:`email_otp`}:{kind:`passkey_prf`};this.emitIntent({kind:`link_device_factor_selected`,targetFactor:t})};onLinkDeviceTargetEmailInput=e=>{e.currentTarget instanceof HTMLInputElement&&this.emitIntent({kind:`link_device_target_email_changed`,emailAddress:e.currentTarget.value})};onLinkDeviceStart=()=>{this.emitIntent({kind:`link_device_start`})};onLinkDeviceEmailOtpCodeInput=e=>{e.currentTarget instanceof HTMLInputElement&&this.emitIntent({kind:`link_device_email_otp_code_changed`,code:e.currentTarget.value})};onLinkDeviceEmailOtpKeydown=e=>{e.key===`Enter`&&(e.preventDefault(),this.emitIntent({kind:`link_device_email_otp_submit`}))};onLinkDeviceEmailOtpResend=()=>{this.emitIntent({kind:`link_device_email_otp_resend`})};onLinkDeviceEmailOtpSubmit=()=>{this.emitIntent({kind:`link_device_email_otp_submit`})};emitIntent(e){this.props.onIntent(e)}render(){let e=this.viewModel;if(!e)return x(S,{});let t=d(e.status),n=e.status.kind===`succeeded`?e.status.phase:null,r=e.kind===`link_device`,i=e.kind===`google_otp_login`,a=e.kind===`google_registration`,o=e.kind===`recovery`;return x(S,{children:x(`div`,{class:`seams-signup-menu-root auth-menu-root`,"data-mode":e.mode,"data-waiting":t||n?`true`:`false`,"data-success":n??void 0,"data-scan-device":r?`true`:`false`,"data-otp-prompt":i?`true`:`false`,"data-registration-prompt":a?`true`:`false`,"data-recovery":o?`true`:`false`,"aria-labelledby":A,"aria-busy":t?`true`:`false`,tabIndex:-1,onKeyDown:this.onKeydown,children:[x(`div`,{class:`seams-menu-origin`,children:[x(Ve,{}),` `,x(`span`,{children:e.hostname}),x(`button`,{type:`button`,class:`seams-menu-dismiss`,"aria-label":e.closeLabel,disabled:P(e),onClick:this.onDismiss,"data-auth-menu-dismiss":!0,children:x(`span`,{"aria-hidden":`true`,children:`×`})})]}),x(`div`,{class:`seams-content-switcher`,children:[x(`button`,{class:`seams-back-button ${!n&&(t||r||i||a||o)?`is-visible`:``}`,type:`button`,"aria-label":T(this.context,Ot(e)),"data-auth-menu-close":!0,disabled:n!==null||P(e),onClick:this.onBackClick,children:me()}),o?x(`div`,{class:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:x(w,{copy:Dt(e)})}):null,x(`div`,{class:`seams-content-area`,children:x(`div`,{class:`seams-content-sizer`,children:t||n?this.renderWaiting(e):x(S,{children:x(`div`,{class:`seams-signin-menu`,children:x(S,{children:this.renderActiveView(e)},Et(e))})})})})]}),x(Rt,{notice:Mt(e),onRetry:this.onNoticeRetry})]})})}renderActiveView(e){return e.kind===`recovery`?this.renderRecovery(e):e.kind===`link_device`?this.renderLinkDevice(e):e.kind===`google_otp_login`?this.renderGoogleOtp(e):e.kind===`google_registration`?this.renderGoogleRegistration(e):x(S,{children:[this.renderMenuHeader(e),x(`fieldset`,{class:`seams-connection-controls`,disabled:this.props.walletConnection.kind===`pending`,children:[this.renderPasskeyInput(e),this.renderAuthMethods(e),x(yt,{alternatives:this.props.walletAlternatives,onIntent:this.props.onIntent}),this.renderOtherOptions(),this.renderIntentSwitch(e)]}),this.props.walletConnection.kind===`pending`&&x(`p`,{role:`status`,children:x(w,{copy:`Complete the request in your wallet.`})}),this.props.walletConnection.kind===`failed`&&x(`p`,{role:`alert`,children:this.props.walletConnection.message})]})}renderMenuHeader(e){let t=At(e.mode);return x(`div`,{class:`seams-menu-header`,children:[t===e.heading?null:x(`div`,{class:`seams-menu-eyebrow`,children:x(w,{copy:t})}),x(`div`,{class:`seams-title`,id:A,children:x(w,{copy:e.heading})}),e.subtitle?x(`div`,{class:`seams-subhead`,children:x(w,{copy:e.subtitle})}):null]})}renderHeader(e){return x(S,{children:x(`div`,{class:`seams-header`,children:x(`div`,{children:[x(`div`,{class:`seams-title`,id:A,children:x(w,{copy:e.heading})}),x(`div`,{class:`seams-subhead`,children:x(w,{copy:e.subtitle})})]})})})}walletRowEntering(e,t){let n=Et(e),r=this.walletRowEntry;return r?.viewKey===n?t&&!r.shown&&(this.walletRowEntry={viewKey:n,shown:t,entering:!0}):this.walletRowEntry={viewKey:n,shown:t,entering:!1},this.walletRowEntry?.entering??!1}onWalletRowEntered=e=>{let t=this.walletRowEntry;e.target!==e.currentTarget||!t?.entering||(this.walletRowEntry={...t,entering:!1},this.forceUpdate())};renderPasskeyInput(e){if(e.mode===`login`){let t=F(e),n=this.walletRowEntering(e,t!==null);if(!t)return x(S,{});let r=Ft(e.accountOptions),i=this.state.accountMenu,a=this.accountMenuChoice,o=a?.previous??t;return x(S,{children:x(`div`,{class:`seams-passkey-row ${n?`is-entering`:``}`,onAnimationEnd:this.onWalletRowEntered,children:x(`div`,{class:`seams-input-pill`,children:[x(`div`,{class:`seams-input-wrap`,children:x(`div`,{class:`seams-account-menu-account seams-selected-account`,"aria-hidden":`true`,children:[x(`span`,{class:`seams-account-menu-account-primary`,children:Nt(t)}),I(t)?x(S,{children:x(`span`,{class:`seams-account-menu-account-secondary`,children:I(t)})}):null]})}),x(`div`,{class:`seams-account-menu ${i===`closed`?``:`is-open`}`,children:[x(`button`,{class:`seams-account-menu-trigger`,type:`button`,"data-auth-menu-input":!0,"aria-label":T(this.context,Pt(t)),"aria-haspopup":`listbox`,"aria-expanded":this.accountMenuOpen?`true`:`false`,"aria-controls":j,onClick:this.onAccountMenuToggle,children:ge()}),i===`closed`?null:x(S,{children:x(`div`,{id:j,class:`seams-account-menu-popover ${i===`closing`?`is-closing`:``}`,role:`listbox`,children:r.map(e=>{let t=`${j}-${e.id}`;return x(S,{children:x(`div`,{class:`seams-account-menu-group`,role:`group`,"aria-labelledby":t,children:[x(`div`,{id:t,class:`seams-account-menu-group-label`,children:x(w,{copy:e.label})}),e.accounts.map(e=>{let t=e.walletId===o.walletId,n=!t&&e.walletId===a?.chosen.walletId,r=I(e);return x(S,{children:x(`button`,{class:`seams-account-menu-option ${t?`is-selected`:``} ${n?`is-chosen`:``}`,type:`button`,role:`option`,"aria-selected":t?`true`:`false`,title:T(this.context,r?`${e.walletId} ${r}`:e.walletId),"data-wallet-id":e.walletId,"data-auth-method":e.authMethod,onClick:this.onLoginAccountSelect,children:[x(`span`,{class:`seams-account-menu-check`,"aria-hidden":`true`}),x(`span`,{class:`seams-account-menu-account`,children:[x(`span`,{class:`seams-account-menu-account-primary`,children:e.walletId}),r?x(S,{children:x(`span`,{class:`seams-account-menu-account-secondary`,children:x(w,{copy:r})})}):null]})]})})})]})})})})})]})]})})})}return e.showRegistrationInput?x(S,{children:x(`div`,{class:`seams-passkey-row`,children:x(`div`,{class:`seams-input-pill`,children:[x(`div`,{class:`seams-input-wrap`,children:x(`input`,{id:`seams-auth-menu-passkey-name`,class:`seams-input`,"data-auth-menu-input":!0,type:`text`,autocomplete:`nickname`,placeholder:T(this.context,e.passkeyNameLabel),value:e.passkeyName,readonly:e.passkeyNameReadOnly,disabled:d(e.status),onInput:this.onPasskeyNameInput})}),e.passkeyNameReadOnly?x(S,{children:x(`button`,{class:`seams-input-action-trigger auth-menu-registration-reroll`,type:`button`,title:C(this.context,`Generate another name`),"aria-label":C(this.context,`Generate another name`),onClick:this.onRegistrationReroll,disabled:!ie(e),children:pe()})}):null]})})}):x(S,{})}renderAuthMethods(e){let t=e.enabledExternalProviders?.includes(`google`)??!1;return x(S,{children:x(`div`,{class:`seams-auth-methods`,children:[x(`button`,{class:`seams-auth-method-btn seams-auth-method-btn-primary`,type:`button`,"data-auth-menu-primary":!0,disabled:!m(e),onClick:this.onPrimaryClick,children:[p(),x(`span`,{children:x(w,{copy:jt(e.mode)})})]}),t?x(`button`,{class:`seams-auth-method-btn`,type:`button`,"data-auth-menu-provider":`google`,disabled:!v(e),onClick:this.onGoogleClick,children:[_(),x(`span`,{children:x(w,{copy:e.mode===`login`?`Unlock with email code`:`Continue with Google`})})]}):null,e.mode===`login`&&e.accountOptions.some(Ht.bind(null,F(e)?.walletId))?x(`button`,{type:`button`,class:`seams-auth-method-btn`,"data-auth-menu-voiceid":!0,onClick:this.onVoiceClick,children:[Ut(),x(`span`,{children:`Unlock with VoiceID`})]}):null]})})}renderOtherOptions(){return x(`details`,{class:`seams-menu-expander`,children:[x(`summary`,{children:[x(w,{copy:`Recover or link wallet`}),g()]}),x(`div`,{class:`seams-menu-options`,children:[x(`button`,{class:`seams-menu-option`,type:`button`,onClick:this.onLinkDeviceOpen,children:[x(`span`,{class:`seams-menu-option-icon`,children:he()}),x(`span`,{class:`seams-menu-option-text`,children:[x(w,{message:`Link this device`}),x(`small`,{children:x(w,{message:`Scan a code with your other device`})})]}),g()]}),x(`button`,{class:`seams-menu-option`,type:`button`,"data-recovery-action":!0,onClick:this.onRecoveryOpen,children:[x(`span`,{class:`seams-menu-option-icon`,children:ce()}),x(`span`,{class:`seams-menu-option-text`,children:[x(w,{message:`Recover wallet`}),x(`small`,{children:x(w,{message:`Use your recovery code`})})]}),g()]})]})]})}renderRecovery(e){if(e.stage===`enter_code`){let t=k(e.recoveryCode).slice(0,32),n=this.recoveryCodeArrival(t),r=this.state.recoveryRejection,i=e.status.kind===`recoverable`?e.status.message:``,a=e.recoveryCodeError??i,o=a.length>0;return x(S,{children:[this.renderHeader(e),x(`p`,{id:`seams-recovery-code-feedback`,class:`seams-recovery-status ${o?`seams-recovery-error`:``}`,"aria-hidden":o?`false`:`true`,role:o?`alert`:`status`,children:x(w,{copy:a})}),x(`form`,{class:`seams-recovery-form`,novalidate:!0,onSubmit:this.onRecoverySubmit,children:[x(`div`,{class:`seams-recovery-field`,children:[x(`div`,{class:`seams-recovery-field-header`,children:[x(`label`,{class:`seams-field-label`,for:`seams-recovery-code`,children:x(w,{message:`Recovery code`})}),x(`span`,{id:`seams-recovery-code-count`,class:`seams-recovery-code-count`,children:[t.length,`/`,32]})]}),x(`div`,{class:`seams-otp-code-field seams-recovery-code-field ${r?`is-rejecting-${r.parity}`:``}`,children:[x(`input`,{id:`seams-recovery-code`,class:`seams-otp-input`,"data-recovery-code":!0,name:`recoveryCode`,type:`text`,inputmode:`text`,autocomplete:`off`,autocapitalize:`characters`,autocorrect:`off`,spellcheck:!1,"aria-invalid":e.recoveryCodeError?`true`:`false`,"aria-describedby":e.recoveryCodeError?`seams-recovery-code-feedback seams-recovery-code-count seams-recovery-code-hint`:`seams-recovery-code-count seams-recovery-code-hint`,value:t,onInput:this.onRecoveryCodeInput,onFocus:this.onRecoverySelectionMove,onKeyUp:this.onRecoverySelectionMove,onSelect:this.onRecoverySelectionMove,onClick:this.onRecoveryCodeClick,onBlur:this.onRecoveryCodeBlur}),x(`div`,{class:`seams-otp-slots seams-recovery-code-slots ${n&&n.end-n.start>1?`is-sweeping`:``}`,"aria-hidden":`true`,children:Ct(t,this.state.recoverySelection,n)})]}),x(`p`,{id:`seams-recovery-code-hint`,class:`seams-recovery-code-hint ${r?`is-error`:``}`,"aria-live":`polite`,children:r?`Recovery codes don’t use ${r.characters.join(`, `)}.`:x(w,{message:`You can paste the whole code.`})})]}),x(`button`,{class:`seams-auth-method-btn seams-auth-method-btn-primary`,type:`submit`,"data-auth-menu-primary":!0,"data-recovery-continue":!0,children:x(w,{message:`Continue`})})]})]})}if(e.stage===`choose_method`||e.stage===`preparing`){let t=e.stage===`preparing`?e.target.kind:null,n=e.status.kind===`recoverable`?e.status.message:e.status.kind===`busy`?e.status.headline:``,r=e.enabledExternalProviders?.includes(`google`)??!1;return x(S,{children:[this.renderHeader(e),x(`p`,{class:`seams-recovery-status ${e.status.kind===`recoverable`?`seams-recovery-error`:``}`,"aria-hidden":`true`,children:x(w,{copy:n})}),x(`div`,{class:`seams-auth-methods seams-recovery-methods`,children:[x(`button`,{class:`seams-auth-method-btn seams-auth-method-btn-primary`,type:`button`,"data-auth-menu-primary":!0,"data-recovery-target":`passkey`,disabled:t!==null,onClick:this.onRecoveryPasskeySelected,children:[t===`passkey`?x(`span`,{class:`seams-spinner`,"aria-hidden":`true`}):p(),x(`span`,{children:x(w,{message:`Create a passkey`})})]}),r?x(`button`,{class:`seams-auth-method-btn`,type:`button`,"data-recovery-target":`google_email_otp`,disabled:t!==null,onClick:this.onRecoveryGoogleSelected,children:[t===`google_email_otp`?x(`span`,{class:`seams-spinner`,"aria-hidden":`true`}):_(),x(`span`,{children:x(w,{message:`Continue with Google`})})]}):null]}),x(`p`,{class:`seams-recovery-method-note`,children:x(w,{message:`This adds a new sign-in method to your wallet.`})})]})}if(e.stage===`email_code_required`){let t=M(e.otpCode),n=/^\d{6}$/.test(e.otpCode)&&e.status.kind!==`busy`,r=e.delivery.status===`reused`?`Use the code already sent to ${e.emailHint}.`:`A 6-digit code was sent to ${e.emailHint}.`;return x(S,{children:[this.renderHeader(e),x(`div`,{class:`seams-otp-prompt`,"aria-live":`polite`,children:[x(`p`,{class:`seams-otp-description`,children:x(w,{copy:r})}),wt(e.delivery),x(`label`,{class:`seams-field-label`,for:`seams-recovery-google-otp`,children:x(w,{message:`Email code`})}),x(`div`,{class:`seams-otp-code-field`,"data-disabled":e.status.kind===`busy`?`true`:`false`,children:[x(`input`,{class:`seams-otp-input`,id:`seams-recovery-google-otp`,"data-auth-menu-input":!0,"data-email-otp-challenge-id":e.challengeId,"data-email-otp-wallet-id":e.walletId,name:`recoveryEmailOtpCode`,type:`text`,inputmode:`numeric`,autocomplete:`one-time-code`,spellcheck:!1,pattern:`[0-9]*`,maxLength:6,"aria-invalid":e.status.kind===`recoverable`?`true`:`false`,"aria-describedby":e.status.kind===`recoverable`?`seams-recovery-google-otp-error`:``,value:e.otpCode,disabled:e.status.kind===`busy`,onInput:this.onRecoveryGoogleOtpCodeInput,onKeyDown:this.onRecoveryGoogleOtpKeydown}),x(`div`,{class:`seams-otp-slots`,"aria-hidden":`true`,children:t.map(N)})]}),e.status.kind===`recoverable`?x(S,{children:x(`p`,{id:`seams-recovery-google-otp-error`,class:`seams-recovery-status seams-recovery-error`,role:`alert`,children:x(w,{copy:e.status.message})})}):null,x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,"data-auth-menu-primary":!0,disabled:!n,onClick:this.onRecoveryGoogleOtpSubmit,children:x(w,{message:`Verify email code`})})]})]})}let t=e.stage===`finalizing`&&e.status.kind===`recoverable`,n=e.stage===`sign_in_ready`,r=e.target.kind===`google_email_otp`,i=e.status.kind===`recoverable`?e.status.message:n?null:e.stage===`google_ready`?`Continue with Google, then verify the code sent to your email.`:r?`Finishing recovery with Google…`:`Create a new passkey to finish recovering this wallet.`,a=n?this.onRecoverySignIn:r?t?this.onRecoveryGoogleOtpSubmit:this.onGoogleClick:this.onRecoveryCreatePasskey;return x(S,{children:[this.renderHeader(e),x(`div`,{class:`seams-recovery-confirmation`,children:[i===null?null:x(S,{children:x(`p`,{class:`seams-recovery-status`,children:x(w,{copy:i})})}),x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,"data-auth-menu-primary":!0,onClick:a,children:[r&&!t?_():null,n?r?x(w,{message:`Unlock with Google`}):x(w,{message:`Unlock with new passkey`}):t?x(w,{message:`Retry finalization`}):r?x(w,{message:`Continue with Google`}):x(w,{message:`Create new passkey`})]})]})]})}renderIntentSwitch(e){let t=kt(e.mode);return x(S,{children:x(`div`,{class:`seams-auth-intent-switch`,children:[x(`span`,{children:x(w,{copy:t.prompt})}),x(`button`,{type:`button`,"data-auth-menu-mode":t.nextMode,onClick:this.onIntentSwitchClick,children:x(w,{copy:t.action})})]})})}renderWaiting(e){let t=e.status;if(t.kind===`succeeded`)return this.renderSuccess(t);if(t.kind!==`busy`)return x(S,{});let n=t.headline,r=t.illustration?de[t.illustration]:null;return x(S,{children:x(`div`,{class:`seams-waiting`,role:`status`,"aria-live":`polite`,children:[r?x(`span`,{class:`seams-passkey-prompt`,role:`img`,"aria-label":T(this.context,r.label),children:_e()}):null,x(`div`,{class:`seams-waiting-message`,children:[x(`span`,{class:`seams-waiting-text`,children:x(w,{copy:n})}),r?x(`span`,{class:`seams-passkey-instruction`,children:x(w,{copy:r.instruction})}):null,e.showProgress&&t.detail&&t.detail!==n?x(S,{children:x(`span`,{class:`seams-waiting-sdk-events`,children:x(w,{copy:t.detail})})}):null]}),r?null:x(`div`,{"aria-label":C(this.context,`Loading`),class:`seams-spinner`})]})})}renderSuccess(e){return x(`div`,{class:`seams-waiting seams-success`,role:`status`,"aria-live":`polite`,children:[x(`span`,{class:`seams-passkey-prompt seams-success-prompt`,children:se()},`success-prompt`),x(`div`,{class:`seams-waiting-message seams-success-message`,children:[x(`span`,{class:`seams-waiting-text`,children:x(w,{copy:e.headline})}),x(`span`,{class:`seams-passkey-instruction`,children:x(w,{copy:e.message})})]},`success-message`)]})}renderLinkDevice(e){let t=e.linkDevice;if(t.kind===`select_factor`)return this.renderLinkDeviceFactorSelection(t);if(t.kind===`passkey_required`||t.kind===`creating_passkey`)return this.renderLinkDevicePasskeyConfirmation(t);if(t.kind===`email_otp_required`)return this.renderLinkDeviceEmailOtp(t);if(t.kind===`activating`)return this.renderLinkedDeviceActivation(t);if(t.kind===`expired`)return this.renderLinkDeviceFailurePanel({dismiss:`expired`,title:`Linking expired`,detail:t.message,action:`Try again`});if(t.kind===`cancelled`)return this.renderLinkDeviceFailurePanel({dismiss:`cancelled`,title:`Linking cancelled`,detail:t.message,action:`Return to unlock wallet`});if(t.kind===`error`||t.kind===`activation_error`)return this.renderLinkDeviceFailure(t);let n=t.kind===`ready`;return x(S,{children:x(`div`,{class:`seams-scan-device-content`,children:x(`div`,{class:`qr-code-container`,children:x(`div`,{class:`qr-body`,children:x(`div`,{class:`qr-code-section`,children:[x(`div`,{class:`qr-code-display`,children:n?x(S,{children:x(`img`,{src:t.qrCodeDataURL,alt:`QR code to link this device`,class:`qr-code-image`})}):x(S,{children:x(`div`,{class:`qr-code-placeholder`,children:x(`span`,{class:`seams-spinner`,"aria-hidden":`true`})})})}),x(`div`,{class:`qr-header`,children:x(`h2`,{class:`qr-title`,id:A,children:x(w,{copy:e.heading})})}),x(`div`,{class:`qr-instruction`,children:n?x(w,{copy:e.subtitle}):x(w,{message:`Preparing a one-time code for your other device.`})}),x(`div`,{class:`qr-status`,role:`status`,"aria-live":`polite`,children:[n?x(w,{copy:t.message}):x(w,{message:`Generating QR code`}),x(`span`,{class:`animated-ellipsis`})]})]})})})})})}renderLinkDeviceFactorSelection(e){let t=e.targetFactor.kind===`email_otp`,n=e.targetFactor.kind===`email_otp`&&typeof e.targetEmail==`string`?e.targetEmail:``,r=!t||ct(n);return x(S,{children:x(`div`,{class:`seams-link-device-confirmation`,children:[x(`h2`,{class:`qr-title`,id:A,children:x(w,{message:`Match your other device`})}),x(`p`,{class:`seams-link-device-confirmation-copy`,children:x(w,{message:`Choose the unlock method for Device 2. Email code sends a one-time code to the address you enter.`})}),x(`fieldset`,{class:`seams-link-device-factor-options`,children:[x(`legend`,{class:`sr-only`,children:x(w,{message:`Wallet unlock method`})}),x(`label`,{children:[x(`span`,{class:`seams-auth-method-choice-icon`,children:p()}),x(`span`,{class:`seams-auth-method-choice-label`,children:x(w,{message:`Passkey`})}),x(`input`,{type:`radio`,name:`linked-device-factor`,value:`passkey_prf`,checked:e.targetFactor.kind===`passkey_prf`,onChange:this.onLinkDeviceFactorChange})]}),x(`label`,{children:[x(`span`,{class:`seams-auth-method-choice-icon`,children:ue()}),x(`span`,{class:`seams-auth-method-choice-label`,children:x(w,{message:`Email code`})}),x(`input`,{type:`radio`,name:`linked-device-factor`,value:`email_otp`,checked:e.targetFactor.kind===`email_otp`,onChange:this.onLinkDeviceFactorChange})]})]}),t?x(S,{children:x(`label`,{class:`seams-link-device-target-email`,children:[x(`span`,{class:`seams-field-label`,children:x(w,{message:`Email address`})}),x(`input`,{type:`email`,name:`linked-device-target-email`,autocomplete:`email`,value:n,"aria-label":C(this.context,`Email address`),"aria-invalid":n.length>0&&!r?`true`:`false`,onInput:this.onLinkDeviceTargetEmailInput})]})}):null,e.error?x(S,{children:x(`p`,{class:`seams-link-device-inline-error`,role:`alert`,children:x(w,{copy:e.error})})}):null,x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,"data-auth-menu-primary":!0,disabled:!r,onClick:this.onLinkDeviceStart,children:x(w,{message:`Continue`})})]})})}renderLinkDeviceEmailOtp(e){let t=e.state,n=Bt(t),r=t.kind===`sending`||t.kind===`submitting`||t.kind===`resending`,i=e.otpCode.length===6&&(t.kind===`code_input`||t.kind===`incorrect`),a=t.kind!==`completed`&&t.kind!==`expired`&&t.kind!==`unavailable`,o=`maskedEmailHint`in t?t.maskedEmailHint:``,s=M(e.otpCode);return x(S,{children:x(`div`,{class:`seams-link-device-confirmation seams-link-device-email-otp`,"data-tone":n.tone,"data-otp-phase":t.kind,children:[zt(n.ring,ue()),x(`h2`,{class:`qr-title`,id:A,children:x(w,{copy:n.heading})}),o?x(S,{children:x(`div`,{class:`seams-link-device-email-chip`,title:T(this.context,o),children:x(`span`,{children:o})})}):null,x(`p`,{class:`seams-link-device-email-status`,id:`seams-linked-device-otp-status`,role:`status`,"aria-live":`polite`,children:[x(w,{copy:n.status}),n.pending?x(S,{children:x(`span`,{class:`animated-ellipsis`,"aria-hidden":`true`})}):null]}),a?x(S,{children:[x(`label`,{class:`sr-only`,for:`seams-linked-device-email-otp`,children:x(w,{message:`Email code`})}),x(`div`,{class:`seams-otp-code-field`,"data-disabled":r?`true`:`false`,children:[x(`input`,{class:`seams-otp-input`,id:`seams-linked-device-email-otp`,"data-auth-menu-input":!0,type:`text`,inputmode:`numeric`,autocomplete:`one-time-code`,pattern:`[0-9]*`,maxLength:6,"aria-label":C(this.context,`Email verification code`),"aria-describedby":`seams-linked-device-otp-status`,"aria-invalid":t.kind===`incorrect`?`true`:`false`,value:e.otpCode,disabled:r,onInput:this.onLinkDeviceEmailOtpCodeInput,onKeyDown:this.onLinkDeviceEmailOtpKeydown}),x(`div`,{class:`seams-otp-slots`,"aria-hidden":`true`,children:s.map(N)})]})]}):null,this.renderLinkDeviceEmailOtpActions(t,{busy:r,canSubmit:i})]})})}renderLinkDeviceEmailOtpActions(e,t){return e.kind===`completed`?null:e.kind===`unavailable`?x(S,{children:x(`button`,{class:`seams-link-device-btn`,type:`button`,"data-link-device-error-dismiss":!0,onClick:this.onBackClick,children:x(w,{message:`Return to unlock wallet`})})}):e.kind===`expired`?x(S,{children:x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,onClick:this.onLinkDeviceEmailOtpResend,children:x(w,{message:`Send a new code`})})}):x(S,{children:[x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,disabled:!t.canSubmit,onClick:this.onLinkDeviceEmailOtpSubmit,children:e.kind===`submitting`?x(w,{message:`Verifying`}):x(w,{message:`Verify code`})}),x(`button`,{class:`seams-otp-resend`,type:`button`,disabled:t.busy,onClick:this.onLinkDeviceEmailOtpResend,children:x(w,{message:`Send another code`})})]})}renderLinkDeviceFailure(e){let t=e.kind===`activation_error`;return this.renderLinkDeviceFailurePanel({dismiss:`error`,title:t?`Device linked`:`Couldn't link device`,detail:t?x(S,{children:[x(w,{message:`Unable to open the wallet. Go back and try again.`}),` `,x(w,{copy:e.message})]}):e.message,action:`Return to unlock wallet`})}renderLinkDeviceFailurePanel(e){return x(S,{children:x(`div`,{class:`seams-link-device-confirmation seams-link-device-failure`,children:[x(`div`,{class:`seams-link-device-failure-icon`,children:oe()}),x(`h2`,{class:`qr-title`,id:A,children:x(w,{copy:e.title})}),x(`p`,{class:`seams-link-device-failure-detail`,role:`alert`,children:typeof e.detail==`string`?x(w,{copy:e.detail}):e.detail}),x(`button`,{class:`seams-link-device-btn`,type:`button`,"data-auth-menu-primary":!0,[`data-link-device-${e.dismiss}-dismiss`]:!0,onClick:this.onBackClick,children:x(w,{copy:e.action})})]})})}renderLinkedDeviceActivation(e){return x(S,{children:x(`div`,{class:`seams-link-device-confirmation`,children:[x(`span`,{class:`seams-spinner`,"aria-hidden":`true`}),x(`h2`,{class:`qr-title`,id:A,children:x(w,{message:`Opening linked wallet`})}),x(`p`,{class:`seams-link-device-confirmation-copy`,role:`status`,"aria-live":`polite`,children:x(w,{copy:e.message})})]})})}renderLinkDevicePasskeyConfirmation(e){let t=e.kind===`creating_passkey`;return x(S,{children:x(`div`,{class:`seams-link-device-confirmation`,children:[zt(t?`waiting`:`approved`),x(`h2`,{class:`qr-title`,id:A,"aria-live":`polite`,children:x(w,{copy:e.message})}),x(`button`,{class:`seams-link-device-btn seams-link-device-btn-primary`,type:`button`,"data-auth-menu-primary":!0,"data-link-device-passkey-action":!0,disabled:t,onClick:this.onLinkDeviceCreatePasskey,children:t?x(w,{message:`Waiting for passkey`}):x(w,{message:`Create passkey`})})]})})}renderGoogleOtp(e){let t=e.delivery.status===`reused`?`Use the code already sent to ${e.emailHint}.`:`A 6-digit code was sent to ${e.emailHint}.`,n=M(e.otpCode);return x(S,{children:x(`div`,{class:`seams-otp-prompt`,"aria-live":`polite`,children:[x(`div`,{class:`seams-otp-prompt-copy`,children:[x(`div`,{class:`seams-otp-title`,id:A,children:x(w,{copy:e.heading})}),x(`p`,{class:`seams-otp-description`,children:x(w,{copy:t})}),wt(e.delivery),x(`div`,{class:`seams-otp-account`,title:T(this.context,e.walletId),children:[x(`span`,{class:`seams-otp-account-label`,children:x(w,{message:`Wallet`})}),x(`span`,{class:`seams-otp-account-value`,children:e.walletId})]})]}),x(`label`,{class:`seams-field-label`,for:`seams-auth-menu-google-otp`,children:x(w,{message:`Email code`})}),x(`div`,{class:`seams-otp-code-field`,"data-disabled":e.submitBusy?`true`:`false`,children:[x(`input`,{class:`seams-otp-input`,id:`seams-auth-menu-google-otp`,"data-auth-menu-input":!0,"data-email-otp-challenge-id":e.challengeId,"data-email-otp-wallet-id":e.walletId,type:`text`,inputmode:`numeric`,autocomplete:`one-time-code`,pattern:`[0-9]*`,maxLength:6,value:e.otpCode,disabled:e.submitBusy,onInput:this.onGoogleOtpCodeInput,onKeyDown:this.onGoogleOtpKeydown}),x(`div`,{class:`seams-otp-slots`,"aria-hidden":`true`,children:n.map(N)})]}),x(`p`,{class:`seams-otp-helper`,children:x(w,{copy:e.prompt.helperText??``})}),x(`button`,{class:`seams-auth-method-btn seams-auth-method-btn-primary`,type:`button`,"data-auth-menu-primary":!0,disabled:!m(e),onClick:this.onPrimaryClick,children:e.submitBusy?x(w,{message:`Unlocking…`}):x(w,{copy:e.ctaLabel})}),x(`button`,{class:`seams-otp-resend auth-menu-google-resend`,type:`button`,disabled:e.resendBusy||e.submitBusy,onClick:this.onGoogleOtpResend,children:e.resendBusy?x(w,{message:`Sending…`}):x(w,{message:`Resend Code`})})]})})}renderGoogleRegistration(e){return x(S,{children:x(`div`,{class:`seams-otp-prompt`,"aria-live":`polite`,children:[x(`div`,{class:`seams-otp-prompt-copy`,children:[x(`div`,{class:`seams-otp-title`,id:A,children:x(w,{copy:e.heading})}),x(`p`,{class:`seams-otp-description`,children:x(w,{copy:e.subtitle})}),x(`div`,{class:`seams-otp-account`,title:T(this.context,e.walletId),children:[x(`span`,{class:`seams-otp-account-label`,children:x(w,{message:`Wallet`})}),x(`span`,{class:`seams-otp-account-value`,children:e.walletId})]}),x(`button`,{class:`seams-otp-reroll`,type:`button`,disabled:e.rerollBusy||e.submitBusy,onClick:this.onGoogleRegistrationReroll,children:e.rerollBusy?x(w,{message:`Generating…`}):x(w,{message:`Generate another name`})})]}),x(`button`,{class:`seams-auth-method-btn seams-auth-method-btn-primary`,type:`button`,"data-auth-menu-primary":!0,disabled:!m(e),onClick:this.onPrimaryClick,children:e.submitBusy?x(w,{message:`Creating...`}):x(w,{copy:e.ctaLabel})})]})})}};function Ht(e,t){return t.walletId===e&&t.authMethod===`voiceid`}function Ut(){return x(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,"aria-hidden":`true`,children:x(`path`,{d:`M4 10v4m4-7v10m4-14v18m4-14v10m4-7v4`})})}function Wt(e){return!e.matches(`:disabled`)&&e.getClientRects().length>0}const Gt=new WeakMap;let Kt=0;function qt(e){let t=Gt.get(e);return t||(t=Ce({doc:e,baseCss:``,dynamicStyleDataAttr:`data-seams-auth-menu-dynamic`,nonce:xe}),Gt.set(e,t)),t}var Jt=class{element;walletAlternatives;walletConnection={kind:`idle`};viewModel;styles;entrance=[];state;constructor(e){this.walletAlternatives=e.walletAlternatives??l(),this.viewModel=e.viewModel;let t=e.parent.ownerDocument;this.styles=qt(t),this.element=t.createElement(`div`),this.element.className=`seams-wallet-ui seams-auth-menu-surface`,this.element.id=`seams-auth-menu-${++Kt}`,this.state={kind:`mounted`,onIntent:e.onIntent},this.element.addEventListener(`cancel`,this.cancel),e.parent.appendChild(this.element);try{this.update(e.viewModel),this.animateEntrance(e.initialHeightCssPx)}catch(e){throw this.dispose(),e}}animateEntrance(e){if(e===void 0||window.matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=this.element.querySelector(`.auth-menu-root`);if(!t)return;let n=t.getBoundingClientRect().height;this.entrance.push(t.animate([{height:`${e}px`,minHeight:`0px`,overflow:`hidden`},{height:`${n}px`,minHeight:`0px`,overflow:`hidden`}],{duration:200,easing:`cubic-bezier(0.32, 0.72, 0, 1)`}));for(let e of t.children)this.entrance.push(e.animate([{opacity:0},{opacity:1}],{duration:140,delay:60,fill:`backwards`,easing:`cubic-bezier(0.25, 1, 0.5, 1)`}))}updateWalletConnection(e){this.walletConnection=e,this.update(this.viewModel)}update(e){this.viewModel=e,this.state.kind!==`disposed`&&(this.element.lang=e.appearance.locale??`en`,this.element.dataset.theme=e.appearance.theme.mode,this.styles.setDynamicRule(this.element.id+`-appearance`,We(this.element.id,e.appearance)),Se(He(e.appearance.locale??`en`,x(Vt,{element:this.element,viewModel:e,walletAlternatives:this.walletAlternatives,walletConnection:this.walletConnection,onIntent:this.state.onIntent,styles:this.styles})),this.element))}dispose(){if(this.state.kind!==`disposed`){this.state={kind:`disposed`};for(let e of this.entrance)e.cancel();this.entrance=[],this.element.removeEventListener(`cancel`,this.cancel),Se(null,this.element),this.styles.deleteDynamicRule(this.element.id+`-appearance`),this.element.remove()}}cancel=()=>{this.state.kind===`mounted`&&this.state.onIntent({kind:`close`,reason:`close_button`})}};function Yt(e){return new Jt(e)}const L=Symbol(`hostedPasskeyLoginPrepared`),Xt=Symbol(`hostedPasskeyAccountSyncPrepared`),R=300*1e3;function Zt(e){return{signingEngine:e.signingEngine,nearClient:e.nearClient,configs:e.configs,theme:e.theme,resumePendingAcknowledgementsV1:e.resumePendingAcknowledgementsV1}}const z=new WeakMap;function Qt(e){return e.signal}function B(e){if(Qt(e).aborted)throw Error(`Hosted auth-menu passkey preparation was cancelled`)}function $t(e){if(Date.now()>=e.expiresAtMs)throw H(e),Error(`Hosted auth-menu passkey preparation expired`)}function en(e){let t=z.get(e);if(!t)throw Error(`Hosted auth-menu passkey preparation is unknown`);if(t.lifecycle!==`ready`)throw Error(`Hosted auth-menu passkey preparation is no longer usable`);if(Date.now()>=e.expiresAtMs)throw H(e),Error(`Hosted auth-menu passkey preparation expired`);return B(e.cancellation),t}function tn(e){return{id:String(e.credentialId||``).trim(),type:`public-key`,transports:Array.isArray(e.transports)?e.transports:[]}}function nn(e){return{authMenuSessionId:e.authMenuSessionId,requestId:e.requestId}}async function rn(e){B(e.cancellation);let t=we(e.walletId),n=await ot(String(t));if(n){B(e.cancellation);let r=Object.freeze({kind:`hosted_passkey_linked_authority_login_prepared_v1`,...nn(e),walletId:t,selection:n,expiresAtMs:Date.now()+R,cancellation:e.cancellation,[L]:!0});return z.set(r,{context:e.context,loginOptions:{},syncOptions:{},lifecycle:`ready`,authority:null}),r}let r=await tt({walletId:String(t),requestedCapabilityFamilies:{kind:`all_registered_mpc`}}),i=r.kind===`resolved`?r.subjectSet:await Je(String(t));if(!i)return await V({context:e.context,walletId:null,authMenuSessionId:e.authMenuSessionId,requestId:e.requestId,cancellation:e.cancellation});B(e.cancellation);let a=Object.freeze({kind:`hosted_passkey_owner_login_prepared_v1`,...nn(e),walletId:t,subjectSet:i,expiresAtMs:Date.now()+R,cancellation:e.cancellation,[L]:!0});return z.set(a,{context:e.context,loginOptions:{},syncOptions:{},lifecycle:`ready`,authority:null}),a}async function V(e){B(e.cancellation);let t=await nt(e.context,e.walletId);B(e.cancellation);let n=Object.freeze({kind:`hosted_passkey_account_sync_prepared_v1`,authMenuSessionId:e.authMenuSessionId,requestId:e.requestId,challenge:t,expiresAtMs:Date.now()+R,cancellation:e.cancellation,[Xt]:!0});return z.set(n,{context:e.context,loginOptions:{},syncOptions:{},lifecycle:`ready`,authority:null}),n}function an(e){let t=en(e);t.lifecycle=`consuming`;let n={subjectId:e.challenge.walletId||`account-sync`,challengeB64u:e.challenge.syncOptions.challengeB64u,allowCredentials:e.challenge.syncOptions.credentialIds.map(e=>tn({credentialId:e}))},r;try{r=t.context.signingEngine.getAuthenticationCredentialsSerialized({...n,includeSecondPrfOutput:!1})}catch(e){throw t.lifecycle=`cancelled`,e}return t.authority=r,r.then(()=>{t.lifecycle===`consuming`&&(t.lifecycle=`consumed`)},()=>{t.lifecycle===`consuming`&&(t.lifecycle=`cancelled`)}),r}function on(e){let t=z.get(e);if(!t)throw Error(`Hosted auth-menu passkey preparation is unknown`);if(t.lifecycle!==`consuming`&&t.lifecycle!==`consumed`||!t.authority)throw Error(`Hosted auth-menu passkey credential must be started by its CTA`);return t.lifecycle=`completing`,t}async function sn(e){let t=en(e);t.lifecycle=`completing`;let n=!1,r=e=>{e.phase===Oe.CANCELLED&&(n=!0)};try{let i=t.loginOptions.onEvent,a={...t.loginOptions,onEvent:e=>{r(e),i?.(e)}},o=e.kind===`hosted_passkey_linked_authority_login_prepared_v1`?await Ye(t.context,String(e.walletId),a):await it(t.context,e.subjectSet,a);return o.success?t.context.resumePendingAcknowledgementsV1():E(),{result:o,cancelledByUser:n}}finally{t.lifecycle=`finished`}}async function cn(e){let t=on(e),n=t.authority;if(!n)throw Error(`Hosted auth-menu passkey credential is missing`);try{let r=await n;return $t(e),B(e.cancellation),await at(t.context,e.challenge,r,t.syncOptions)}finally{t.lifecycle=`finished`}}function H(e){let t=z.get(e);!t||t.lifecycle===`finished`||t.lifecycle===`cancelled`||(t.lifecycle=`cancelled`)}const ln=`That recovery code can’t be used. Check the code and try again.`;function un(e){let t=e.replace(/[\s-]/g,``);if(!t)return`Enter a recovery code.`;if(t.length!==32)return`Enter all 32 characters of the recovery code.`;try{return ke(t),null}catch{return ln}}function U(e){if(e.kind===`hosted_passkey_registration_prepared_v1`){Le(e);return}H(e)}function W(){}function dn(e){return e.target.kind===`passkey`}function G(e){return e.kind===`recovery`&&e.stage===`finalizing`&&(e.operation.kind===`hosted_recovery_credential_created`||e.operation.kind===`hosted_recovery_email_otp_verified`)}function fn(e){return e.kind===`authenticated`||e.kind===`registered`||e.kind===`account_synced`}function pn(e){return e.targetFactor.kind===`email_otp`?{targetFactor:e.targetFactor,targetEmail:qe(e.targetEmail)}:{targetFactor:e.targetFactor}}const mn=1300,hn={kind:`recoverable`,reason:`error`,message:`Google sign-in was cancelled.`};function K(e){let t=e.mode??e.request.initialMode,n=e.request.copy[t],r={kind:`passkey`,appearance:e.appearance,hostname:e.hostname,closeLabel:e.request.copy.common.closeLabel,heading:n.title,subtitle:n.subtitle,ctaLabel:n.passkeyCta,showProgress:e.request.showProgress,enabledExternalProviders:e.request.enabledExternalProviders,status:{kind:`idle`,interaction:`arming`}};return t===`register`?{...r,mode:t,showRegistrationInput:e.request.showRegistrationInput||e.request.registrationAccountInput===`sponsored_named_near_account`,passkeyNameReadOnly:e.request.registrationAccountInput===`implicit_wallet`,passkeyName:e.request.registrationAccountInput===`implicit_wallet`?String(Te()):``,passkeyNameLabel:e.request.copy.register.passkeyNameLabel}:{...r,mode:t,accountOptions:[],selectedAccount:null}}function gn(e){let t=K({...e,mode:`login`});if(t.kind!==`passkey`||t.mode!==`login`)throw Error(`login view model construction failed`);return t}async function _n(e){let[t]=await Promise.allSettled([e,new Promise(e=>setTimeout(e,500))]);if(t.status===`rejected`)throw t.reason;return t.value}function vn(e){return e.trim()||`Wallet`}function yn(e){return`close_button`}function q(){try{let e=globalThis.crypto?.randomUUID?.();if(e)return`auth-menu-external-${e}`}catch{}return`auth-menu-external-${Date.now()}-${Math.random().toString(36).slice(2)}`}function bn(e){return{appearance:e.base.appearance,hostname:e.base.hostname,closeLabel:e.base.closeLabel,heading:e.flow.prompt.title,subtitle:e.flow.prompt.description,ctaLabel:e.flow.prompt.submitLabel,showProgress:e.base.showProgress,enabledExternalProviders:e.base.enabledExternalProviders,status:e.status}}function xn(e){let t=`google-email-otp-login:${e.flow.walletId}:`;if(!e.flow.flowId.startsWith(t))throw Error(`Google Email OTP login flow identity is invalid`);return{...bn({base:e.base,flow:e.flow,status:e.status??{kind:`idle`,interaction:`actionable`}}),kind:`google_otp_login`,mode:`login`,emailHint:e.flow.emailHint,walletId:String(e.flow.walletId),challengeId:e.flow.flowId.slice(t.length),prompt:e.flow.prompt,delivery:e.flow.delivery,otpCode:e.otpCode??``,resendBusy:e.resendBusy??!1,submitBusy:e.submitBusy??!1,...e.error?{error:e.error}:{}}}function Sn(e){return{...bn({base:e.base,flow:e.flow,status:e.status??{kind:`idle`,interaction:`actionable`}}),kind:`google_registration`,mode:`register`,emailHint:e.flow.emailHint,walletId:String(e.flow.walletId),prompt:e.flow.prompt,rerollBusy:e.rerollBusy??!1,submitBusy:e.submitBusy??!1,...e.error?{error:e.error}:{}}}function J(e){return e instanceof Error&&e.message.trim()?e.message.trim():String(e)}function Cn(e){switch(e.kind){case`passkey`:return e.status.kind===`recoverable`?{mode:e.mode,message:e.status.detail??e.status.message}:null;case`google_otp_login`:case`google_registration`:return e.error?{mode:e.mode,message:e.error}:e.status.kind===`recoverable`?{mode:e.mode,message:e.status.message}:null;case`link_device`:return null;case`recovery`:return e.stage===`sign_in_ready`&&e.status.kind===`recoverable`?{mode:`login`,message:e.status.detail??e.status.message}:null;default:{let t=e;throw Error(`Unknown auth-menu view model: ${JSON.stringify(t)}`)}}}function wn(e){return{kind:`link_device`,appearance:e.appearance,hostname:e.hostname,closeLabel:e.closeLabel,heading:`Scan and link device`,subtitle:`Scan this code with your other device.`,ctaLabel:``,showProgress:e.showProgress,enabledExternalProviders:e.enabledExternalProviders,status:{kind:`idle`,interaction:`actionable`},mode:e.mode,linkDevice:{kind:`select_factor`,targetFactor:{kind:`passkey_prf`}}}}function Y(e){let t={kind:`recovery`,mode:`login`,appearance:e.base.appearance,hostname:e.base.hostname,closeLabel:e.base.closeLabel,heading:`Recover wallet`,subtitle:e.stage===`sign_in_ready`?e.target.kind===`google_email_otp`?`Your Google account is ready to unlock your wallet.`:`Your wallet is ready. Unlock it with your passkey.`:e.stage===`choose_method`||e.stage===`preparing`?`Choose how you will sign in to this wallet from now on.`:`Enter a recovery code to recover your wallet.`,ctaLabel:e.stage===`passkey_ready`?`Create new passkey`:e.stage===`google_ready`?`Continue with Google`:e.stage===`email_code_required`?`Verify email code`:e.stage===`sign_in_ready`?e.target.kind===`google_email_otp`?`Unlock with Google`:`Unlock with new passkey`:e.stage===`preparing`||e.stage===`choose_method`?`Create a passkey`:`Continue`,showProgress:e.base.showProgress,enabledExternalProviders:e.base.enabledExternalProviders,recoveryCode:e.recoveryCode??``,recoveryCodeError:e.recoveryCodeError??null};switch(e.stage){case void 0:case`enter_code`:return{...t,stage:`enter_code`,status:e.status??{kind:`idle`,interaction:`actionable`}};case`choose_method`:return{...t,stage:`choose_method`,status:e.status??{kind:`idle`,interaction:`actionable`}};case`preparing`:return{...t,stage:e.stage,target:e.target,status:e.status};case`passkey_ready`:return{...t,target:e.target,walletId:e.walletId,stage:e.stage,status:e.status??{kind:`idle`,interaction:`actionable`}};case`google_ready`:return{...t,target:e.target,walletId:e.walletId,stage:e.stage,status:e.status??{kind:`idle`,interaction:`actionable`}};case`email_code_required`:return{...t,target:e.target,walletId:e.walletId,stage:e.stage,challengeId:e.challengeId,emailHint:e.emailHint,delivery:e.delivery,otpCode:e.otpCode??``,status:e.status??{kind:`idle`,interaction:`awaiting_input`}};case`finalizing`:return{...t,target:e.target,walletId:e.walletId,stage:e.stage,status:e.status};case`sign_in_ready`:return{...t,target:e.target,walletId:e.walletId,stage:e.stage,status:e.status??{kind:`idle`,interaction:`actionable`}}}}function X(e){if(e.stage===`enter_code`||e.stage===`choose_method`||e.stage===`preparing`)throw Error(`recovery wallet id is unavailable before preparation`);return e.walletId}function Z(e){if(e.stage===`enter_code`||e.stage===`choose_method`)throw Error(`recovery target is unavailable before preparation`);return e.target}function Q(e){return e.kind===`dismissed`?{kind:`idle`,interaction:`actionable`}:{kind:`recoverable`,reason:`error`,message:e.kind===`consumed`?`That recovery code has already been used. Use another code.`:ln}}function Tn(){return{kind:`recoverable`,reason:`error`,message:`Recovery couldn’t be completed. Try again.`}}function En(e){return e.kind===`dismissed`?{kind:`idle`,interaction:`actionable`}:{kind:`recoverable`,reason:`error`,message:`A passkey couldn’t be created. Try again.`}}var Dn=class{voiceLogin={kind:`unavailable`};voiceCapture=null;menuLeaving=null;setVoiceLogin(e){this.voiceLogin.kind!==`running`&&(this.voiceLogin={kind:`ready`,unlock:e})}assertVoiceLoginActive=()=>{if(this.stateValue.kind===`complete`||this.voiceLogin.kind!==`running`)throw Error(`VoiceID login was cancelled.`)};mountVoiceCapture=e=>{if(this.assertVoiceLoginActive(),this.measurementReporter?.disconnect(),this.surface){let e=this.surface.element;this.menuLeaving=Nn(e,e.getBoundingClientRect()),this.menuLeaving.onfinish=this.finishMenuLeaving}let t=this.surface?.element.querySelector(`.seams-menu-origin`);return t&&e.querySelector(`.seams-voiceid-unlock-header`)?.prepend(t.cloneNode(!0)),document.body.append(e),this.voiceCapture=e,this.measurementReporter=y({kind:`auth_menu_surface`,element:e,requestId:this.identity.requestId,authMenuSessionId:this.identity.authMenuSessionId,postMeasurement:this.postSurfaceMeasurement}),this.restoreVoiceCapture.bind(this,e)};restoreVoiceCapture(e,t){if(this.voiceCapture=null,this.measurementReporter?.disconnect(),t===`succeeded`||!this.menuHidden()){e.remove();return}let n=Nn(e,e.getBoundingClientRect()),r=e.remove.bind(e);n.onfinish=r,n.oncancel=r,this.revealMenu()}finishMenuLeaving=()=>{!this.surface||!this.menuLeaving||(this.surface.element.hidden=!0,this.restoreMenuFlow())};restoreMenuFlow(){let e=this.menuLeaving;this.menuLeaving=null,e?.cancel(),this.surface?.element.classList.remove(`seams-auth-card-leaving`)}menuHidden(){return this.stateValue.kind!==`complete`&&(this.menuLeaving!==null||this.surface?.element.hidden===!0)}revealMenu(){!this.surface||!this.menuHidden()||(this.restoreMenuFlow(),this.surface.element.hidden=!1,this.surface.element.inert=!1,this.surface.element.querySelector(`[data-auth-menu-voiceid]`)?.focus(),this.measurementReporter=y({kind:`auth_menu_surface`,element:this.surface.element,requestId:this.identity.requestId,authMenuSessionId:this.identity.authMenuSessionId,postMeasurement:this.postSurfaceMeasurement}))}async unlockWithVoice(){if(this.voiceLogin.kind!==`ready`||this.stateValue.kind!==`ready`&&this.stateValue.kind!==`preparing`)return;let e=this.currentViewModel();if(e.kind!==`passkey`||e.mode!==`login`)return;let t=f(this.loginAccountOptions,this.selectedLoginAccount).selectedAccount?.walletId,n=this.loginAccountOptions.find(Pn.bind(null,t));if(!n||n.authMethod!==`voiceid`)return;let r=this.voiceLogin.unlock;this.invalidatePreparation(),this.voiceLogin={kind:`running`,unlock:r};try{let e=await r({walletId:n.walletId,walletAuthMethodId:n.walletAuthMethodId,method:`voiceid`},this.assertVoiceLoginActive,this.mountVoiceCapture);if(this.assertVoiceLoginActive(),!e.success)throw Error(e.error);this.complete({kind:`authenticated`,authMenuSessionId:this.identity.authMenuSessionId,walletId:e.walletId,method:`voiceid`},`capture`)}catch(t){this.revealMenu(),this.state.kind!==`complete`&&(this.stateValue={kind:`preparing`,viewModel:{...e,status:h(J(t))}},this.updateElement())}finally{this.voiceLogin={kind:`ready`,unlock:r}}}identity;request;stateValue;surface=null;walletConnection={kind:`idle`};outcomeResolver=null;outcomePromise=null;successTimers=[];cleanedUp=!1;prepared=null;preparePasskey=null;registrationPreparation=null;preparationCancellation=null;googleCancellation=null;beginGoogleEmailOtp;startDeviceLinking;cancelDeviceLinking;loginPreparation=null;loginAccountOptions=[];selectedLoginAccount=null;modeSelectionSource=`initial`;sendToParent;measurementReporter=null;preparationGeneration=0;googleGeneration=0;deviceLinkGeneration=0;linkedDeviceActivationInProgress=!1;targetPasskeyActivation=null;targetEmailOtpActivation=null;linkedDeviceEmailOtpSendStarted=!1;linkedDeviceTargetFactor={kind:`passkey_prf`};linkedDeviceTargetEmailAddress=``;preparationDeadlineTimer=null;preparationExpiryTimer=null;lastReportedError=null;recoveryPort;prepareRecoveredLogin;recoveryGeneration=0;recoveryCancellation=null;recoveryLoginPrepared=null;recoveryReturnState=null;constructor(e){this.identity={authMenuSessionId:e.request.authMenuSessionId,requestId:e.requestId},this.request=e.request,this.beginGoogleEmailOtp=e.beginGoogleEmailOtp,this.startDeviceLinking=e.startDeviceLinking,this.cancelDeviceLinking=e.cancelDeviceLinking,this.recoveryPort=e.recoveryPort,this.prepareRecoveredLogin=e.prepareRecoveredLogin,this.sendToParent=e.sendToParent,this.stateValue={kind:`preparing`,viewModel:K({request:e.request,appearance:e.appearance,hostname:vn(e.hostname)})}}get state(){return this.stateValue}setRegistrationPreparation(e){this.registrationPreparation=e,this.stateValue.kind!==`complete`&&this.currentViewModel().mode===`register`&&(this.preparePasskey=null,this.startPasskeyPreparation())}setPasskeyPreparation(e){this.preparePasskey=e,this.startPasskeyPreparation()}setLoginPreparation(e){let t=this.stateValue.kind===`complete`?null:this.currentViewModel();t?.kind===`passkey`&&t.mode===`login`&&(this.stateValue.kind===`preparing`||this.stateValue.kind===`ready`)&&this.invalidatePreparation(),this.loginPreparation=e.prepare,this.loginAccountOptions=e.accountOptions,this.selectedLoginAccount=e.selectedAccount,this.updateLoginSelectionViewModel(),(this.stateValue.kind===`preparing`||this.stateValue.kind===`ready`)&&this.currentViewModel().mode===`login`&&this.activateSelectedLoginMethod()}defaultToLoginForDetectedLocalWallet(){if(this.modeSelectionSource!==`initial`||this.stateValue.kind===`complete`)return;let e=this.currentViewModel();e.kind!==`passkey`||e.mode!==`register`||this.showPasskeyMode(`login`)}prepareSelectedLogin=e=>{if(!this.loginPreparation)throw Error(`Hosted login preparation is unavailable`);let t=f(this.loginAccountOptions,this.selectedLoginAccount);if(!ae(t))throw Error(`Email OTP accounts require Google sign-in`);return this.loginPreparation(t.kind===`discoverable`?null:t.walletId,e)};activateSelectedLoginMethod(){if(ae(f(this.loginAccountOptions,this.selectedLoginAccount))){this.setPasskeyPreparation(this.prepareSelectedLogin);return}this.preparePasskey=null;let e=this.stateValue;e.kind!==`preparing`&&e.kind!==`ready`||e.viewModel.kind!==`passkey`||e.viewModel.mode!==`login`||(this.stateValue={kind:`preparing`,viewModel:{...e.viewModel,status:{kind:`idle`,interaction:`actionable`}}},this.updateElement())}updateLoginSelectionViewModel(){let e=this.stateValue;e.kind!==`preparing`&&e.kind!==`ready`||e.viewModel.kind!==`passkey`||e.viewModel.mode!==`login`||(this.stateValue={...e,viewModel:{...e.viewModel,accountOptions:this.loginAccountOptions,selectedAccount:this.selectedLoginAccount}})}mount(){if(this.surface||this.cleanedUp)throw Error(`Hosted auth-menu session is already mounted`);if(document.querySelectorAll(`.seams-auth-menu-surface`).length>0)throw Error(`A hosted auth-menu surface is already mounted`);let e=document.body||document.documentElement;if(!e)throw Error(`Wallet host document has no mount root`);this.surface=Yt({parent:e,viewModel:this.currentViewModel(),initialHeightCssPx:this.request.initialHeightCssPx,onIntent:this.onIntent,walletAlternatives:this.request.walletAlternatives}),this.measurementReporter=y({kind:`auth_menu_surface`,element:this.surface.element,requestId:this.identity.requestId,authMenuSessionId:this.identity.authMenuSessionId,postMeasurement:this.postSurfaceMeasurement})}waitForOutcome(){return this.stateValue.kind===`complete`?Promise.resolve(this.stateValue.outcome):(this.outcomePromise||=new Promise(e=>{this.outcomeResolver=e}),this.outcomePromise)}cancel(e){if(this.stateValue.kind===`complete`){this.finish(this.stateValue.outcome);return}if(G(this.stateValue)){if(e===`close_button`)return;this.complete({kind:`cancelled`,authMenuSessionId:this.identity.authMenuSessionId,reason:e});return}this.stateValue.kind===`link_device`&&console.error(`[Device2Linking] auth menu cancelled`,{reason:e}),this.invalidatePreparation(),this.complete({kind:`cancelled`,authMenuSessionId:this.identity.authMenuSessionId,reason:e})}startPasskeyPreparation(){if(this.stateValue.kind===`complete`)return;let e=this.currentViewModel();if(e.kind!==`passkey`)return;let t=e.mode===`register`?this.registrationPreparation:null,n=e.mode===`login`?this.preparePasskey:null;if(!n&&!t)return;if(t&&e.mode===`register`&&e.showRegistrationInput&&e.passkeyName.trim().length===0){this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...e,status:{kind:`idle`,interaction:`awaiting_input`}}},this.updateElement();return}this.clearPreparationExpiryTimer();let r=++this.preparationGeneration,i=new AbortController;this.preparationCancellation=i;let a={kind:`abort_signal`,signal:i.signal};this.stateValue={kind:`preparing`,viewModel:{...e,status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.schedulePreparationDeadline(r,i),Promise.resolve().then(()=>t?t(this.registrationValue(),a,this.showRegistrationDelay):n(a)).then(t=>{if(r!==this.preparationGeneration||this.stateValue.kind===`complete`){U(t);return}this.clearPreparationDeadlineTimer(),this.prepared=t,this.stateValue={kind:`ready`,prepared:t,viewModel:{...e,status:{kind:`idle`,interaction:`actionable`}}},this.schedulePreparationExpiry(t),this.updateElement()},t=>{r!==this.preparationGeneration||this.stateValue.kind===`complete`||(this.clearPreparationDeadlineTimer(),this.stateValue={kind:`preparing`,viewModel:{...e,status:h(J(t))}},this.updateElement())})}invalidatePreparation(){this.invalidateRecovery(),this.stateValue.kind===`link_device`&&(this.deviceLinkGeneration+=1,this.cancelDeviceLinking().catch(()=>{})),this.clearPreparationDeadlineTimer(),this.clearPreparationExpiryTimer(),this.preparationGeneration+=1,this.preparationCancellation?.abort(),this.preparationCancellation=null,this.googleGeneration+=1,this.googleCancellation?.abort(),this.googleCancellation=null;let e=this.prepared;this.prepared=null,e&&U(e),this.stateValue.kind===`performing`&&U(this.stateValue.prepared),(this.stateValue.kind===`google_login`||this.stateValue.kind===`google_registration`)&&this.stateValue.flow.cancel().catch(()=>{})}invalidateRecovery(){this.recoveryGeneration+=1,this.recoveryCancellation?.abort(),this.recoveryCancellation=null;let e=this.recoveryLoginPrepared;this.recoveryLoginPrepared=null,e&&U(e);let t=this.stateValue;t.kind!==`recovery`||!t.operation||G(t)||this.recoveryPort.cancel(t.operation).catch(()=>{})}registrationValue(){let e=this.stateValue;return(e.kind===`preparing`||e.kind===`ready`)&&e.viewModel.kind===`passkey`&&e.viewModel.mode===`register`?e.viewModel.passkeyName:``}clearPreparationExpiryTimer(){this.preparationExpiryTimer!==null&&(clearTimeout(this.preparationExpiryTimer),this.preparationExpiryTimer=null)}clearPreparationDeadlineTimer(){this.preparationDeadlineTimer!==null&&(clearTimeout(this.preparationDeadlineTimer),this.preparationDeadlineTimer=null)}schedulePreparationDeadline(e,t){this.clearPreparationDeadlineTimer(),this.preparationDeadlineTimer=setTimeout(this.expirePasskeyPreparation.bind(this,e,t),2e4)}expirePasskeyPreparation(e,t){let n=this.stateValue;e!==this.preparationGeneration||t!==this.preparationCancellation||n.kind!==`preparing`||n.viewModel.kind!==`passkey`||n.viewModel.status.kind!==`idle`||n.viewModel.status.interaction!==`arming`||(this.clearPreparationDeadlineTimer(),this.preparationGeneration+=1,this.preparationCancellation=null,t.abort(),this.stateValue={kind:`preparing`,viewModel:{...n.viewModel,status:h(`Passkey preparation timed out`)}},this.updateElement())}schedulePreparationExpiry(e){this.clearPreparationExpiryTimer();let t=Math.max(0,e.expiresAtMs-Date.now());this.preparationExpiryTimer=setTimeout(()=>{this.preparationExpiryTimer=null,!(this.stateValue.kind!==`ready`||this.stateValue.prepared!==e||this.prepared!==e||this.stateValue.viewModel.kind!==`passkey`)&&(U(e),this.prepared=null,this.stateValue={kind:`preparing`,viewModel:{...this.stateValue.viewModel,status:{kind:`recoverable`,reason:`expired`,message:`Passkey preparation expired. Retry to continue.`}}},this.updateElement())},t)}startGoogleFlow(e,t){this.invalidatePreparation();let n=++this.googleGeneration,r=new AbortController;this.googleCancellation=r;let i=this.currentViewModel();i.kind===`recovery`||i.kind===`link_device`||(this.stateValue={kind:`preparing`,viewModel:{...i,status:{kind:`busy`,headline:`Waiting for Google login…`,illustration:`google`,detail:`Starting Google sign-in`}}},this.updateElement(),this.beginGoogleEmailOtp({idToken:e,authTarget:t,signal:r.signal}).then(e=>{if(n!==this.googleGeneration||r.signal.aborted||this.stateValue.kind===`complete`){e.cancel().catch(()=>{});return}this.googleCancellation=null,e.mode===`login`?this.stateValue={kind:`google_login`,flow:e,viewModel:xn({base:i,flow:e})}:this.stateValue={kind:`google_registration`,flow:e,viewModel:Sn({base:i,flow:e})},this.updateElement()},e=>{n!==this.googleGeneration||r.signal.aborted||this.stateValue.kind===`complete`||(this.googleCancellation=null,this.stateValue={kind:`preparing`,viewModel:{...i,status:h(J(e))}},this.updateElement())}))}requestExternalAuth(e){if(this.stateValue.kind===`complete`)return null;if(this.stateValue.kind===`recovery`&&this.stateValue.stage===`google_ready`)return this.requestRecoveryGoogleVerification(e,this.stateValue);if(this.stateValue.kind===`recovery`&&this.stateValue.stage===`sign_in_ready`&&this.stateValue.viewModel.target.kind===`google_email_otp`)return this.requestRecoveredGoogleSignIn(e,this.stateValue);let t=this.currentViewModel();if(t.kind!==`passkey`||!this.request.enabledExternalProviders.includes(e)||this.stateValue.kind===`awaiting_external_auth`)return null;let n;if(t.mode===`register`)n={mode:`register`};else{let e=f(t.accountOptions,t.selectedAccount);if(!le(e))return null;n={mode:`login`,loginTarget:e.loginTarget}}this.invalidatePreparation();let r=s(q());if(!r)return null;let i={kind:`hosted_auth_menu_external_auth_request_v1`,authMenuSessionId:this.identity.authMenuSessionId,externalAuthRequestId:r,provider:e,mode:t.mode};return this.stateValue={kind:`awaiting_external_auth`,viewModel:{...t,status:{kind:`busy`,headline:`Waiting for Google login…`,illustration:`google`,detail:`Waiting for Google sign-in`}},request:i,authTarget:n},this.updateElement(),this.sendToParent({type:`AUTH_MENU_EXTERNAL_AUTH_REQUEST`,requestId:this.identity.requestId,payload:i}),i}acceptExternalAuthResolution(e){let t=this.stateValue;if(t.kind===`recovery`&&t.stage===`google_external_auth`){if(t.request.authMenuSessionId!==e.authMenuSessionId||t.request.externalAuthRequestId!==e.externalAuthRequestId||this.identity.requestId!==e.requestId)return!1;if(e.evidence.kind===`google_id_token`)return this.startRecoveryGoogleVerification(t,e.evidence.idToken),!0;let n=e.evidence.kind===`cancelled`?hn:h(e.evidence.message);return this.stateValue={kind:`recovery`,stage:`google_ready`,operation:t.operation,returnState:t.returnState,viewModel:Y({base:t.viewModel,walletId:X(t.viewModel),stage:`google_ready`,target:t.operation.target,status:n})},this.updateElement(),!0}if(t.kind!==`awaiting_external_auth`||t.viewModel.kind!==`passkey`||t.request.authMenuSessionId!==e.authMenuSessionId||t.request.externalAuthRequestId!==e.externalAuthRequestId||this.identity.requestId!==e.requestId)return!1;switch(e.evidence.kind){case`google_id_token`:return this.startGoogleFlow(e.evidence.idToken,t.authTarget),!0;case`cancelled`:case`failed`:{let n=e.evidence.kind===`cancelled`?hn:h(e.evidence.message);return this.stateValue={kind:`preparing`,viewModel:{...t.viewModel,status:n}},this.updateElement(),!0}default:return Mn(e.evidence)}}requestRecoveryGoogleVerification(e,t){if(!this.request.enabledExternalProviders.includes(e))return null;let n=s(q());if(!n)return null;let r={kind:`hosted_auth_menu_external_auth_request_v1`,authMenuSessionId:this.identity.authMenuSessionId,externalAuthRequestId:n,provider:e,mode:`login`};return this.stateValue={kind:`recovery`,stage:`google_external_auth`,operation:t.operation,returnState:t.returnState,request:r,viewModel:Y({base:t.viewModel,walletId:X(t.viewModel),stage:`finalizing`,target:t.operation.target,status:{kind:`busy`,headline:`Waiting for Google login…`,illustration:`google`,detail:`Waiting for Google sign-in`}})},this.updateElement(),this.sendToParent({type:`AUTH_MENU_EXTERNAL_AUTH_REQUEST`,requestId:this.identity.requestId,payload:r}),r}requestRecoveredGoogleSignIn(e,t){if(!this.request.enabledExternalProviders.includes(e))return null;let n=s(q());if(!n)return null;let r={kind:`hosted_auth_menu_external_auth_request_v1`,authMenuSessionId:this.identity.authMenuSessionId,externalAuthRequestId:n,provider:e,mode:`login`};return this.stateValue={kind:`awaiting_external_auth`,request:r,authTarget:{mode:`login`,loginTarget:{kind:`wallet`,walletId:X(t.viewModel)}},viewModel:{...gn({request:this.request,appearance:t.viewModel.appearance,hostname:t.viewModel.hostname}),status:{kind:`busy`,headline:`Waiting for Google login…`,illustration:`google`,detail:`Waiting for Google sign-in`}}},this.updateElement(),this.sendToParent({type:`AUTH_MENU_EXTERNAL_AUTH_REQUEST`,requestId:this.identity.requestId,payload:r}),r}cleanup(){if(this.voiceCapture?.dispatchEvent(new Event(`cancel`,{cancelable:!0})),!this.cleanedUp){this.cleanedUp=!0;for(let e of this.successTimers)clearTimeout(e);this.successTimers=[],this.invalidatePreparation(),this.measurementReporter?.disconnect(),this.measurementReporter=null,this.surface?.dispose(),this.surface=null}}postSurfaceMeasurement=e=>{this.sendToParent({type:`SURFACE_MEASUREMENT`,payload:e})};currentViewModel(){switch(this.stateValue.kind){case`preparing`:case`awaiting_external_auth`:case`ready`:case`performing`:return this.stateValue.viewModel;case`google_login`:case`google_registration`:case`link_device`:case`recovery`:return this.stateValue.viewModel;case`complete`:throw Error(`Completed auth-menu session has no view model`)}}updateElement(){let e=this.currentViewModel();this.reportPresentedError(e),this.surface?.update(e)}reportPresentedError(e){let t=Cn(e);if(!t){this.lastReportedError=null;return}let n=`${t.mode}:${t.message}`;if(n===this.lastReportedError)return;this.lastReportedError=n;let r=o({kind:`hosted_auth_menu_error_v1`,authMenuSessionId:this.identity.authMenuSessionId,mode:t.mode,message:t.message});if(!r)throw Error(`Unable to emit hosted auth-menu error event`);this.sendToParent({type:`AUTH_MENU_ERROR`,requestId:this.identity.requestId,payload:r})}requestWalletConnection(e){if(this.walletConnection.kind===`pending`)return;let t=this.stateValue;if(t.kind!==`ready`&&t.kind!==`preparing`||t.viewModel.kind!==`passkey`)return;let n=this.request.walletAlternatives,r=[...n.primary,...n.secondary].find(Fn.bind(null,e));if(!r)return;let i={authMenuSessionId:this.identity.authMenuSessionId,connectionRequestId:crypto.randomUUID(),alternativeId:r.id};this.walletConnection={kind:`pending`,request:i},this.surface?.updateWalletConnection(this.walletConnection),this.sendToParent({type:`WALLET_CONNECTION_REQUEST`,requestId:this.identity.requestId,payload:i})}acceptWalletConnection(e){let t=this.walletConnection;if(this.stateValue.kind===`complete`||t.kind!==`pending`||t.request.connectionRequestId!==e.connectionRequestId)return!1;switch(e.result.kind){case`connected`:this.walletConnection={kind:`idle`},this.complete({kind:`wallet_connected`,authMenuSessionId:this.identity.authMenuSessionId,alternativeId:t.request.alternativeId});break;case`cancelled`:this.walletConnection={kind:`idle`},this.surface?.updateWalletConnection(this.walletConnection);break;case`failed`:this.walletConnection={kind:`failed`,message:e.result.message},this.surface?.updateWalletConnection(this.walletConnection);break;default:return In(e.result)}return!0}onIntent=e=>{if(this.stateValue.kind!==`complete`&&!(this.voiceLogin.kind===`running`&&e.kind!==`close`)&&!(this.walletConnection.kind===`pending`&&e.kind!==`close`))switch(e.kind){case`mode_selected`:this.selectMode(e.mode);return;case`back`:this.back();return;case`link_device_open`:this.openLinkDevice();return;case`recovery_open`:this.openRecovery();return;case`recovery_code_changed`:this.changeRecoveryCode(e.recoveryCode);return;case`recovery_code_submit`:this.submitRecoveryCode();return;case`recovery_passkey_selected`:this.prepareRecovery(`passkey`);return;case`recovery_google_selected`:this.prepareRecovery(`google_email_otp`);return;case`recovery_google_otp_code_changed`:this.changeRecoveryGoogleOtpCode(e.code);return;case`recovery_google_otp_submit`:this.submitRecoveryGoogleOtp();return;case`recovery_create_passkey`:this.createRecoveryPasskey();return;case`recovery_sign_in`:this.signInRecoveredWallet();return;case`link_device_factor_selected`:this.selectLinkedDeviceTargetFactor(e.targetFactor);return;case`link_device_target_email_changed`:this.changeLinkedDeviceTargetEmailAddress(e.emailAddress);return;case`link_device_start`:this.startSelectedDeviceLinking();return;case`link_device_create_passkey`:this.createLinkedDevicePasskey();return;case`link_device_email_otp_code_changed`:this.changeLinkedDeviceEmailOtpCode(e.code);return;case`link_device_email_otp_resend`:this.resendLinkedDeviceEmailOtp();return;case`link_device_email_otp_submit`:this.submitLinkedDeviceEmailOtp();return;case`registration_reroll`:this.rerollRegistrationWallet();return;case`close`:this.cancel(yn(e));return;case`passkey_name_changed`:{let t=this.stateValue.kind===`preparing`||this.stateValue.kind===`ready`?this.stateValue.viewModel:null;t?.kind===`passkey`&&t.mode===`register`&&!t.passkeyNameReadOnly&&(this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...t,passkeyName:e.passkeyName,status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.startPasskeyPreparation());return}case`voiceid_selected`:this.unlockWithVoice();return;case`login_account_selected`:this.selectLoginAccount(e.walletId,e.authMethod);return;case`submit`:if(this.stateValue.kind===`preparing`&&this.stateValue.viewModel.status.kind===`recoverable`){this.retryPreparation();return}this.stateValue.kind===`ready`&&this.prepared===this.stateValue.prepared&&(e.mode===`register`&&this.stateValue.prepared.kind===`hosted_passkey_registration_prepared_v1`||e.mode===`login`&&(this.stateValue.prepared.kind===`hosted_passkey_owner_login_prepared_v1`||this.stateValue.prepared.kind===`hosted_passkey_linked_authority_login_prepared_v1`||this.stateValue.prepared.kind===`hosted_passkey_account_sync_prepared_v1`))&&this.performPreparedPasskey(this.stateValue.prepared);return;case`wallet_connection`:this.requestWalletConnection(e.alternativeId);return;case`external_auth`:this.requestExternalAuth(e.provider);return;case`google_otp_code_changed`:this.updateGoogleOtpCode(e.code);return;case`google_otp_resend`:this.resendGoogleOtp();return;case`google_otp_submit`:this.submitGoogleOtp();return;case`google_registration_reroll`:this.rerollGoogleRegistration();return;case`google_registration_complete`:this.completeGoogleRegistration();return;case`retry`:this.retryPreparation();return;default:return On(e)}};selectMode(e){let t=this.stateValue;t.kind===`complete`||t.kind===`performing`||t.kind===`link_device`||(this.modeSelectionSource=`user`,this.currentViewModel().mode!==e&&this.showPasskeyMode(e))}showPasskeyMode(e){if(this.stateValue.kind===`complete`||this.stateValue.kind===`link_device`)return;let t=this.currentViewModel();this.invalidatePreparation();let n=K({request:{...this.request,initialMode:e},appearance:t.appearance,hostname:t.hostname,mode:e});this.stateValue={kind:`preparing`,viewModel:n.kind===`passkey`&&n.mode===`login`?{...n,accountOptions:this.loginAccountOptions,selectedAccount:this.selectedLoginAccount}:n},this.updateElement(),e===`login`?this.activateSelectedLoginMethod():(this.preparePasskey=null,this.startPasskeyPreparation())}back(){if(this.stateValue.kind===`recovery`){if(this.stateValue.stage===`finalizing`)return;if(this.stateValue.stage===`choose_method`){this.returnToRecoveryCode();return}this.closeRecovery();return}if(this.stateValue.kind===`link_device`){this.closeLinkDevice();return}(this.stateValue.kind===`performing`||this.stateValue.kind===`awaiting_external_auth`||this.stateValue.kind===`google_login`||this.stateValue.kind===`google_registration`)&&this.showPasskeyMode(this.stateValue.viewModel.mode)}openRecovery(){let e=this.stateValue;if(e.kind!==`preparing`&&e.kind!==`ready`||e.viewModel.kind!==`passkey`)return;let t={kind:`preparing`,viewModel:{...e.viewModel,status:{kind:`idle`,interaction:`arming`}}};this.invalidatePreparation(),this.recoveryReturnState=t,this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:t,viewModel:Y({base:e.viewModel})},this.updateElement()}closeRecovery(){let e=this.stateValue;if(e.kind!==`recovery`)return;let t=e.returnState;this.invalidateRecovery(),this.recoveryReturnState=null,this.stateValue=t,this.updateElement(),this.preparePasskey=t.viewModel.mode===`login`?this.prepareSelectedLogin:null,this.startPasskeyPreparation()}changeRecoveryCode(e){let t=this.stateValue;t.kind!==`recovery`||t.stage!==`enter_code`||(this.stateValue={...t,viewModel:{...t.viewModel,recoveryCode:e,recoveryCodeError:null}},this.updateElement())}submitRecoveryCode(){let e=this.stateValue;if(e.kind!==`recovery`||e.stage!==`enter_code`)return;let t=un(e.viewModel.recoveryCode);if(t){this.stateValue={...e,viewModel:{...e.viewModel,recoveryCodeError:t}},this.updateElement();return}this.stateValue={...e,stage:`choose_method`,viewModel:Y({base:e.viewModel,recoveryCode:e.viewModel.recoveryCode,stage:`choose_method`})},this.updateElement()}returnToRecoveryCode(){let e=this.stateValue;e.kind!==`recovery`||e.stage!==`choose_method`||(this.stateValue={...e,stage:`enter_code`,viewModel:Y({base:e.viewModel,recoveryCode:e.viewModel.recoveryCode})},this.updateElement())}prepareRecovery(e=`passkey`){let t=this.stateValue;if(t.kind!==`recovery`||t.stage!==`choose_method`)return;let n=t.viewModel.recoveryCode.trim(),r;try{r=this.recoveryPort.targetFor(e)}catch{this.stateValue={...t,viewModel:Y({base:t.viewModel,recoveryCode:t.viewModel.recoveryCode,stage:`choose_method`,status:Q({kind:`refused`})})},this.updateElement();return}let i=++this.recoveryGeneration,a=new AbortController;this.recoveryCancellation=a,this.stateValue={...t,stage:`preparing`,viewModel:Y({base:t.viewModel,recoveryCode:t.viewModel.recoveryCode,stage:`preparing`,target:r,status:{kind:`busy`,headline:`Checking recovery code…`}})},this.updateElement();let o;try{o=this.recoveryPort.prepare({recoveryCode:n,target:r,signal:a.signal})}catch{this.rejectRecoveryPreparation(i);return}o.then(this.completeRecoveryPreparation.bind(this,i),this.rejectRecoveryPreparation.bind(this,i))}completeRecoveryPreparation(e,t){let n=this.stateValue;if(e!==this.recoveryGeneration||n.kind!==`recovery`){t.kind===`hosted_recovery_prepared`&&this.recoveryPort.cancel(t).catch(W);return}if(this.recoveryCancellation=null,t.kind!==`hosted_recovery_prepared`){this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:n.returnState,viewModel:Y({base:n.viewModel,recoveryCode:n.viewModel.recoveryCode,status:Q(t)})},this.updateElement();return}if(dn(t)){this.stateValue={kind:`recovery`,stage:`passkey_ready`,operation:t,returnState:n.returnState,viewModel:Y({base:n.viewModel,walletId:String(t.walletId),recoveryCode:``,stage:`passkey_ready`,target:t.target})},this.createRecoveryPasskey();return}let r={kind:`recovery`,stage:`google_ready`,operation:t,returnState:n.returnState,viewModel:Y({base:n.viewModel,walletId:String(t.walletId),recoveryCode:``,stage:`google_ready`,target:t.target})};this.stateValue=r,this.requestRecoveryGoogleVerification(`google`,r)||(this.stateValue={...r,viewModel:Y({base:r.viewModel,walletId:X(r.viewModel),stage:`google_ready`,target:r.operation.target,status:{kind:`recoverable`,reason:`error`,message:`Google sign-in is unavailable. Try again.`}})},this.updateElement())}rejectRecoveryPreparation(e){let t=this.stateValue;e!==this.recoveryGeneration||t.kind!==`recovery`||(this.recoveryCancellation=null,this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:t.returnState,viewModel:Y({base:t.viewModel,recoveryCode:t.viewModel.recoveryCode,status:Q({kind:`transport_uncertain`})})},this.updateElement())}startRecoveryGoogleVerification(e,t){let n=++this.recoveryGeneration;this.recoveryPort.verifyGoogle(e.operation,t).then(this.completeRecoveryGoogleVerification.bind(this,n),this.rejectRecoveryGoogleVerification.bind(this,n))}completeRecoveryGoogleVerification(e,t){let n=this.stateValue;if(e!==this.recoveryGeneration||n.kind!==`recovery`||n.stage!==`google_external_auth`){t.kind===`hosted_recovery_google_verified`&&this.recoveryPort.cancel(t).catch(W);return}if(t.kind!==`hosted_recovery_google_verified`){this.showRecoveryGoogleVerificationFailure(n,t);return}this.stateValue={kind:`recovery`,stage:`email_code_required`,operation:t,returnState:n.returnState,viewModel:Y({base:n.viewModel,walletId:String(t.walletId),stage:`email_code_required`,target:t.target,challengeId:t.challengeId,emailHint:t.delivery.emailHint,delivery:t.delivery})},this.updateElement()}rejectRecoveryGoogleVerification(e){let t=this.stateValue;e!==this.recoveryGeneration||t.kind!==`recovery`||t.stage!==`google_external_auth`||this.showRecoveryGoogleVerificationFailure(t,{kind:`transport_uncertain`})}showRecoveryGoogleVerificationFailure(e,t){this.stateValue={kind:`recovery`,stage:`google_ready`,operation:e.operation,returnState:e.returnState,viewModel:Y({base:e.viewModel,walletId:X(e.viewModel),stage:`google_ready`,target:e.operation.target,status:Q(t)})},this.updateElement()}changeRecoveryGoogleOtpCode(e){let t=this.stateValue;if(t.kind!==`recovery`||t.stage!==`email_code_required`)return;let n=e.replace(/\D/g,``).slice(0,6);this.stateValue={...t,viewModel:Y({base:t.viewModel,walletId:X(t.viewModel),stage:`email_code_required`,target:t.operation.target,challengeId:t.operation.challengeId,emailHint:t.operation.delivery.emailHint,delivery:t.operation.delivery,otpCode:n})},this.updateElement(),/^\d{6}$/.test(n)&&this.submitRecoveryGoogleOtp()}submitRecoveryGoogleOtp(){let e=this.stateValue;if(e.kind===`recovery`&&e.stage===`finalizing`&&e.operation.kind===`hosted_recovery_email_otp_verified`&&e.viewModel.status.kind===`recoverable`){this.finishRecovery(e.operation);return}if(e.kind!==`recovery`||e.stage!==`email_code_required`)return;let t=e.viewModel.otpCode.trim();if(!/^\d{6}$/.test(t))return;let n=++this.recoveryGeneration;this.stateValue={...e,viewModel:Y({base:e.viewModel,walletId:X(e.viewModel),stage:`email_code_required`,target:e.operation.target,challengeId:e.operation.challengeId,emailHint:e.operation.delivery.emailHint,delivery:e.operation.delivery,otpCode:t,status:{kind:`busy`,headline:`Verifying email code…`}})},this.updateElement(),this.recoveryPort.verifyEmailOtp(e.operation,{challengeId:e.operation.challengeId,otpCode:t}).then(this.completeRecoveryEmailOtpVerification.bind(this,n),this.rejectRecoveryEmailOtpVerification.bind(this,n))}completeRecoveryEmailOtpVerification(e,t){let n=this.stateValue;if(e!==this.recoveryGeneration||n.kind!==`recovery`||n.stage!==`email_code_required`){t.kind===`hosted_recovery_email_otp_verified`&&this.recoveryPort.cancel(t).catch(W);return}if(t.kind!==`hosted_recovery_email_otp_verified`){this.showRecoveryEmailOtpFailure(n,t);return}this.finishRecovery(t)}rejectRecoveryEmailOtpVerification(e){let t=this.stateValue;e!==this.recoveryGeneration||t.kind!==`recovery`||t.stage!==`email_code_required`||this.showRecoveryEmailOtpFailure(t,{kind:`transport_uncertain`})}showRecoveryEmailOtpFailure(e,t){this.stateValue={...e,viewModel:Y({base:e.viewModel,walletId:X(e.viewModel),stage:`email_code_required`,target:e.operation.target,challengeId:e.operation.challengeId,emailHint:e.operation.delivery.emailHint,delivery:e.operation.delivery,otpCode:e.viewModel.otpCode,status:Q(t)})},this.updateElement()}createRecoveryPasskey(){let e=this.stateValue;if(e.kind!==`recovery`)return;if(e.stage===`finalizing`&&e.operation.kind===`hosted_recovery_credential_created`&&e.viewModel.status.kind===`recoverable`){this.finishRecovery(e.operation);return}if(e.stage!==`passkey_ready`)return;let t=++this.recoveryGeneration,n;try{n=this.recoveryPort.createPasskey(e.operation)}catch{this.showRecoveryCreateFailure(e,{kind:`refused`});return}this.stateValue={...e,stage:`finalizing`,viewModel:Y({base:e.viewModel,walletId:X(e.viewModel),stage:`finalizing`,target:Z(e.viewModel),status:{kind:`busy`,headline:`Creating new passkey…`}})},this.updateElement(),n.then(this.completeRecoveryCredentialCreation.bind(this,t),this.rejectRecoveryCredentialCreation.bind(this,t))}completeRecoveryCredentialCreation(e,t){let n=this.stateValue;if(e!==this.recoveryGeneration||n.kind!==`recovery`||n.stage!==`finalizing`||n.operation.kind!==`hosted_recovery_prepared`){t.kind===`hosted_recovery_credential_created`&&this.recoveryPort.cancel(t).catch(W);return}if(t.kind!==`hosted_recovery_credential_created`){this.showRecoveryCreateFailure({returnState:n.returnState,viewModel:n.viewModel,operation:n.operation},t);return}this.finishRecovery(t)}rejectRecoveryCredentialCreation(e){let t=this.stateValue;e!==this.recoveryGeneration||t.kind!==`recovery`||t.stage!==`finalizing`||t.operation.kind!==`hosted_recovery_prepared`||this.showRecoveryCreateFailure({returnState:t.returnState,viewModel:t.viewModel,operation:t.operation},{kind:`refused`})}showRecoveryCreateFailure(e,t){if(!dn(e.operation)){this.recoveryPort.cancel(e.operation).catch(W),this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:e.returnState,viewModel:Y({base:e.viewModel,recoveryCode:``,status:Q(t)})},this.updateElement();return}if(t.kind===`refused`){this.recoveryPort.cancel(e.operation).catch(W),this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:e.returnState,viewModel:Y({base:e.viewModel,recoveryCode:``,status:Q(t)})},this.updateElement();return}this.stateValue={kind:`recovery`,stage:`passkey_ready`,operation:e.operation,returnState:e.returnState,viewModel:Y({base:e.viewModel,walletId:X(e.viewModel),stage:`passkey_ready`,target:e.operation.target,status:En(t)})},this.updateElement()}finishRecovery(e){let t=this.stateValue;if(t.kind!==`recovery`)return;let n=++this.recoveryGeneration;this.stateValue={kind:`recovery`,stage:`finalizing`,operation:e,returnState:t.returnState,viewModel:Y({base:t.viewModel,walletId:X(t.viewModel),stage:`finalizing`,target:Z(t.viewModel),status:{kind:`busy`,headline:`Finishing recovery…`}})},this.updateElement();let r;try{r=this.recoveryPort.finalize(e)}catch{this.rejectRecoveryFinalization(n);return}r.then(this.completeRecoveryFinalization.bind(this,n),this.rejectRecoveryFinalization.bind(this,n))}completeRecoveryFinalization(e,t){let n=this.stateValue;if(!(e!==this.recoveryGeneration||n.kind!==`recovery`||n.stage!==`finalizing`||n.operation.kind!==`hosted_recovery_credential_created`&&n.operation.kind!==`hosted_recovery_email_otp_verified`)){if(t.kind!==`ready_for_sign_in`){t.kind===`refused`?(this.recoveryPort.cancel(n.operation).catch(()=>{}),this.stateValue={kind:`recovery`,stage:`enter_code`,returnState:n.returnState,viewModel:Y({base:n.viewModel,status:Q(t)})}):this.stateValue={...n,viewModel:Y({base:n.viewModel,walletId:X(n.viewModel),stage:`finalizing`,target:Z(n.viewModel),status:Tn()})},this.updateElement();return}if(n.operation.target.kind===`passkey`){this.prepareRecoveredPasskeyLogin(t.walletId,n.returnState);return}this.stateValue={kind:`recovery`,stage:`sign_in_ready`,returnState:n.returnState,viewModel:Y({base:n.viewModel,walletId:String(t.walletId),stage:`sign_in_ready`,target:n.operation.target})},this.updateElement()}}rejectRecoveryFinalization(e){let t=this.stateValue;e!==this.recoveryGeneration||t.kind!==`recovery`||t.stage!==`finalizing`||t.operation.kind!==`hosted_recovery_credential_created`&&t.operation.kind!==`hosted_recovery_email_otp_verified`||(this.stateValue={...t,viewModel:Y({base:t.viewModel,walletId:X(t.viewModel),stage:`finalizing`,target:Z(t.viewModel),status:Tn()})},this.updateElement())}prepareRecoveredPasskeyLogin(e,t){let n=this.stateValue;if(n.kind!==`recovery`)return;let r=++this.recoveryGeneration,i=new AbortController;this.recoveryCancellation=i;let a=this.prepareRecoveredLogin(e,{kind:`abort_signal`,signal:i.signal});this.stateValue={kind:`recovery`,stage:`sign_in_ready`,returnState:t,viewModel:Y({base:n.viewModel,walletId:String(e),stage:`sign_in_ready`,target:Z(n.viewModel),status:{kind:`busy`,headline:`Preparing to unlock…`}})},this.updateElement(),a.then(this.completeRecoveredLoginPreparation.bind(this,r,t),this.rejectRecoveredLoginPreparation.bind(this,r,e,t))}completeRecoveredLoginPreparation(e,n,r){let i=this.stateValue;if(e!==this.recoveryGeneration||i.kind!==`recovery`){U(r);return}if(this.recoveryCancellation=null,r.kind!==`hosted_passkey_owner_login_prepared_v1`&&r.kind!==`hosted_passkey_linked_authority_login_prepared_v1`){U(r);let a=t(X(i.viewModel));if(!a.ok)return;this.rejectRecoveredLoginPreparation(e,a.value,n);return}this.recoveryLoginPrepared=r,this.stateValue={kind:`recovery`,stage:`sign_in_ready`,returnState:n,viewModel:Y({base:i.viewModel,walletId:X(i.viewModel),stage:`sign_in_ready`,target:Z(i.viewModel)})},this.updateElement()}rejectRecoveredLoginPreparation(e,t,n){let r=this.stateValue;e!==this.recoveryGeneration||r.kind!==`recovery`||(this.recoveryCancellation=null,this.stateValue={kind:`recovery`,stage:`sign_in_ready`,returnState:n,viewModel:Y({base:r.viewModel,walletId:String(t),stage:`sign_in_ready`,target:Z(r.viewModel),status:{kind:`recoverable`,reason:`error`,message:`Your wallet was recovered. Unlock it again to continue.`}})},this.updateElement())}signInRecoveredWallet(){let e=this.stateValue;if(e.kind!==`recovery`||e.stage!==`sign_in_ready`)return;if(e.viewModel.target.kind===`google_email_otp`){this.requestExternalAuth(`google`);return}let n=this.recoveryLoginPrepared;if(!n){let n=t(X(e.viewModel));if(!n.ok)return;this.prepareRecoveredPasskeyLogin(n.value,e.returnState);return}this.recoveryLoginPrepared=null,this.performPreparedPasskey(n)}openLinkDevice(){let e=this.stateValue;if(e.kind!==`preparing`&&e.kind!==`ready`||e.viewModel.kind!==`passkey`)return;let t={kind:`preparing`,viewModel:{...e.viewModel,status:{kind:`idle`,interaction:`arming`}}};this.invalidatePreparation(),this.linkedDeviceActivationInProgress=!1,this.targetPasskeyActivation=null,this.targetEmailOtpActivation=null,this.linkedDeviceEmailOtpSendStarted=!1,this.linkedDeviceTargetFactor={kind:`passkey_prf`},this.linkedDeviceTargetEmailAddress=``,this.stateValue={kind:`link_device`,returnState:t,viewModel:wn(e.viewModel)},this.updateElement()}selectLinkedDeviceTargetFactor(e){let t=this.stateValue;t.kind!==`link_device`||t.viewModel.linkDevice.kind!==`select_factor`||(this.linkedDeviceTargetFactor=e,this.stateValue={...t,viewModel:{...t.viewModel,linkDevice:e.kind===`email_otp`?{kind:`select_factor`,targetFactor:e,targetEmail:this.linkedDeviceTargetEmailAddress}:{kind:`select_factor`,targetFactor:e}}},this.updateElement())}changeLinkedDeviceTargetEmailAddress(e){let t=this.stateValue;t.kind!==`link_device`||t.viewModel.linkDevice.kind!==`select_factor`||t.viewModel.linkDevice.targetFactor.kind!==`email_otp`||(this.linkedDeviceTargetEmailAddress=e,this.stateValue={...t,viewModel:{...t.viewModel,linkDevice:{kind:`select_factor`,targetFactor:t.viewModel.linkDevice.targetFactor,targetEmail:e}}},this.updateElement())}startSelectedDeviceLinking(){let e=this.stateValue;if(e.kind!==`link_device`||e.viewModel.linkDevice.kind!==`select_factor`)return;let t=e.viewModel.linkDevice,n;try{if(t.targetFactor.kind===`email_otp`){let e=t.targetEmail;if(typeof e!=`string`)throw Error(`linked-device target email address is unavailable`);n=pn({targetFactor:t.targetFactor,targetEmail:e})}else n=pn({targetFactor:t.targetFactor})}catch(t){this.stateValue={...e,viewModel:{...e.viewModel,linkDevice:{...e.viewModel.linkDevice,error:J(t)}}},this.updateElement();return}let r=++this.deviceLinkGeneration;this.stateValue={...e,viewModel:{...e.viewModel,linkDevice:{kind:`loading`,message:`Generating QR code...`}}},this.updateElement(),this.startDeviceLinking(n,{onEvent:this.onLinkDeviceEvent.bind(this,r),onTargetFactorRequired:this.onTargetFactorRequired.bind(this,r)}).then(this.completeLinkDeviceOpen.bind(this,r)).catch(this.failLinkDeviceOpen.bind(this,r))}onLinkDeviceEvent(e,t){let n=this.stateValue;if(e!==this.deviceLinkGeneration||n.kind!==`link_device`)return;let r=Ee(t);switch(r.kind){case`active`:if(this.linkedDeviceActivationInProgress)return;this.linkedDeviceActivationInProgress=!0,this.complete({kind:`authenticated`,authMenuSessionId:this.identity.authMenuSessionId,walletId:r.walletId,method:this.linkedDeviceTargetFactor.kind===`email_otp`?`google_email_otp`:`passkey`});return;case`invalid_active`:this.showLinkedDeviceActivationError(n,Error(`Linked-device activation omitted its wallet identity`));return;case`failed`:if(t.error?.code===st.SESSION_EXPIRED){this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:{kind:`expired`,message:`This linking request expired. Start again to link this device.`}}},this.updateElement();return}if(t.error?.code===st.DELIVERY_RECOVERY_REQUIRED){this.showLinkedDeviceActivationError(n,Error(t.message||`Go back and unlock the new linked method to finish setup.`));return}break;case`cancelled`:this.targetPasskeyActivation=null,this.targetEmailOtpActivation=null,this.linkedDeviceEmailOtpSendStarted=!1,this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:{kind:`cancelled`,message:`The other device cancelled this linking request. Go back to try again.`}}},this.updateElement();return;case`pending`:break;default:return kn(r)}let i=t.message?.trim();if(!i)return;let a=n.viewModel.linkDevice,o=a.kind===`email_otp_required`?a:a.kind===`ready`||a.kind===`passkey_required`||a.kind===`creating_passkey`?{...a,message:i}:{kind:`loading`,message:i};this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:o}},this.updateElement()}showLinkedDeviceActivationError(e,t){this.stateValue={...e,viewModel:{...e.viewModel,linkDevice:{kind:`activation_error`,message:J(t)}}},this.updateElement()}completeLinkDeviceOpen(e,t){let n=this.stateValue;e!==this.deviceLinkGeneration||n.kind!==`link_device`||this.linkedDeviceActivationInProgress||n.viewModel.linkDevice.kind!==`loading`||(this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:this.targetPasskeyActivation?{kind:`passkey_required`,message:`Create a passkey to finish linking this device`}:{kind:`ready`,qrCodeDataURL:t.qrCodeDataURL,message:`Waiting for device to scan`}}},this.updateElement())}onTargetFactorRequired(e,t){switch(t.kind){case`linked_device_target_passkey_activation_v1`:this.onTargetPasskeyActivation(e,t);return;case`linked_device_target_email_otp_activation_v1`:this.onTargetEmailOtpActivation(e,t);return;default:return An(t)}}onTargetPasskeyActivation(e,t){let n=this.stateValue;e!==this.deviceLinkGeneration||n.kind!==`link_device`||(this.targetPasskeyActivation=t,n.viewModel.linkDevice.kind===`ready`&&(this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:{kind:`passkey_required`,message:`Create a passkey to finish linking this device`}}},this.updateElement()))}onTargetEmailOtpActivation(e,t){let n=this.stateValue;e!==this.deviceLinkGeneration||n.kind!==`link_device`||(this.targetEmailOtpActivation=t,this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:{kind:`email_otp_required`,state:t.state,otpCode:n.viewModel.linkDevice.kind===`email_otp_required`?n.viewModel.linkDevice.otpCode:``}}},this.updateElement(),t.state.kind===`sending`&&!this.linkedDeviceEmailOtpSendStarted&&(this.linkedDeviceEmailOtpSendStarted=!0,t.sendCode().catch(this.failLinkedDeviceEmailOtp.bind(this))))}changeLinkedDeviceEmailOtpCode(e){let t=this.stateValue;if(t.kind!==`link_device`||t.viewModel.linkDevice.kind!==`email_otp_required`)return;let n=e.replace(/\D/g,``).slice(0,6),r=t.viewModel.linkDevice.otpCode,i=t.viewModel.linkDevice.state;this.stateValue={...t,viewModel:{...t.viewModel,linkDevice:{...t.viewModel.linkDevice,otpCode:n}}},this.updateElement(),n.length===6&&n!==r&&(i.kind===`code_input`||i.kind===`incorrect`)&&this.submitLinkedDeviceEmailOtpCode(n)}resendLinkedDeviceEmailOtp(){let e=this.targetEmailOtpActivation;e&&e.resendCode().catch(this.failLinkedDeviceEmailOtp.bind(this))}submitLinkedDeviceEmailOtp(){let e=this.stateValue;e.kind!==`link_device`||e.viewModel.linkDevice.kind!==`email_otp_required`||e.viewModel.linkDevice.otpCode.length!==6||this.submitLinkedDeviceEmailOtpCode(e.viewModel.linkDevice.otpCode)}submitLinkedDeviceEmailOtpCode(e){let t=this.targetEmailOtpActivation;t&&t.submitCode(e).catch(this.failLinkedDeviceEmailOtp.bind(this))}failLinkedDeviceEmailOtp(e){let t=this.stateValue;t.kind===`link_device`&&this.showLinkedDeviceActivationError(t,e)}createLinkedDevicePasskey(){let e=this.stateValue,t=this.targetPasskeyActivation;!t||e.kind!==`link_device`||e.viewModel.linkDevice.kind!==`passkey_required`||(this.targetPasskeyActivation=null,this.stateValue={...e,viewModel:{...e.viewModel,linkDevice:{kind:`creating_passkey`,message:`Follow the passkey prompt on your screen`}}},this.updateElement(),t.createPasskey().catch(this.failTargetPasskeyCreation.bind(this)))}failTargetPasskeyCreation(e){let t=this.stateValue;t.kind===`link_device`&&(this.stateValue={...t,viewModel:{...t.viewModel,linkDevice:{kind:`error`,message:J(e)}}},this.updateElement())}failLinkDeviceOpen(e,t){let n=this.stateValue;e!==this.deviceLinkGeneration||n.kind!==`link_device`||this.linkedDeviceActivationInProgress||n.viewModel.linkDevice.kind!==`loading`||(this.stateValue={...n,viewModel:{...n.viewModel,linkDevice:{kind:`error`,message:J(t)}}},this.updateElement())}closeLinkDevice(){let e=this.stateValue;e.kind===`link_device`&&(this.deviceLinkGeneration+=1,this.targetPasskeyActivation=null,this.targetEmailOtpActivation=null,this.linkedDeviceEmailOtpSendStarted=!1,this.cancelDeviceLinking().catch(()=>{}),this.stateValue=e.returnState,this.updateElement(),this.startPasskeyPreparation())}rerollRegistrationWallet(){let e=this.stateValue;e.kind!==`ready`&&e.kind!==`preparing`||e.viewModel.kind!==`passkey`||e.viewModel.mode!==`register`||!e.viewModel.passkeyNameReadOnly||!e.viewModel.showRegistrationInput||(this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...e.viewModel,passkeyName:String(Te()),status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.startPasskeyPreparation())}selectLoginAccount(e,t){let n=this.loginAccountOptions.find(n=>n.walletId===e&&n.authMethod===t);if(!n||n.walletId===this.selectedLoginAccount?.walletId&&n.authMethod===this.selectedLoginAccount.authMethod)return;let r=this.stateValue;if(r.kind!==`preparing`&&r.kind!==`ready`||r.viewModel.kind!==`passkey`||r.viewModel.mode!==`login`)return;let i=n.walletId!==this.selectedLoginAccount?.walletId;if(this.selectedLoginAccount=n,!i){this.updateLoginSelectionViewModel(),this.updateElement();return}this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...r.viewModel,selectedAccount:n,status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.activateSelectedLoginMethod()}retryPreparation(){let e=this.stateValue;e.kind!==`preparing`||e.viewModel.kind!==`passkey`||e.viewModel.status.kind!==`recoverable`||(this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...e.viewModel,status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.startPasskeyPreparation())}updateGoogleOtpCode(e){let t=this.stateValue;if(t.kind!==`google_login`||t.viewModel.submitBusy)return;let n=e.replace(/\D/g,``).slice(0,6);this.stateValue={...t,viewModel:{...t.viewModel,otpCode:n,error:``}},this.updateElement(),/^\d{6}$/.test(n)&&this.submitGoogleOtp()}resendGoogleOtp(){let e=this.stateValue;if(e.kind!==`google_login`||e.viewModel.resendBusy)return;let t=e.flow;this.stateValue={...e,viewModel:{...e.viewModel,status:{kind:`busy`,headline:`Sending a new email code`},resendBusy:!0,error:``}},this.updateElement(),_n(t.resend()).then(n=>{if(this.stateValue.kind!==`google_login`||this.stateValue.flow!==t){n.ok&&n.value.cancel().catch(()=>{});return}if(!n.ok){this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},resendBusy:!1,error:n.error.message}},this.updateElement();return}if(n.value.mode!==`login`){n.value.cancel().catch(()=>{}),this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},resendBusy:!1,error:`Google returned an unexpected registration flow.`}},this.updateElement();return}let r=n.value;this.stateValue={kind:`google_login`,flow:r,viewModel:xn({base:e.viewModel,flow:r})},this.updateElement()},e=>{this.stateValue.kind!==`google_login`||this.stateValue.flow!==t||(this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},resendBusy:!1,error:J(e)}},this.updateElement())})}submitGoogleOtp(){let e=this.stateValue;if(e.kind!==`google_login`||e.viewModel.submitBusy)return;let t=e.viewModel.otpCode;if(!/^\d{6}$/.test(t)){this.stateValue={...e,viewModel:{...e.viewModel,status:{kind:`idle`,interaction:`actionable`},error:`Enter the 6-digit code from your email.`}},this.updateElement();return}let n=e.flow;this.stateValue={...e,viewModel:{...e.viewModel,status:{kind:`busy`,headline:`Verifying your email code`},submitBusy:!0,error:``}},this.updateElement(),n.submit({otpCode:t}).then(e=>{if(!(this.stateValue.kind!==`google_login`||this.stateValue.flow!==n)){if(!e.ok){this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},submitBusy:!1,error:e.error.message}},this.updateElement();return}if(e.value.mode!==`login`){this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},submitBusy:!1,error:`Google returned an unexpected registration result.`}},this.updateElement();return}this.complete({kind:`authenticated`,authMenuSessionId:this.identity.authMenuSessionId,walletId:e.value.walletId,method:`google_email_otp`})}},e=>{this.stateValue.kind!==`google_login`||this.stateValue.flow!==n||(this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},submitBusy:!1,error:J(e)}},this.updateElement())})}rerollGoogleRegistration(){let e=this.stateValue;if(e.kind!==`google_registration`||e.viewModel.rerollBusy)return;let t=e.flow;this.stateValue={...e,viewModel:{...e.viewModel,status:{kind:`busy`,headline:`Generating another wallet name`},rerollBusy:!0,error:``}},this.updateElement(),t.rerollWalletId().then(n=>{if(this.stateValue.kind!==`google_registration`||this.stateValue.flow!==t){n.ok&&n.value.cancel().catch(()=>{});return}if(!n.ok){this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},rerollBusy:!1,error:n.error.message}},this.updateElement();return}if(n.value.mode!==`register`){n.value.cancel().catch(()=>{}),this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},rerollBusy:!1,error:`Google returned an unexpected login flow.`}},this.updateElement();return}let r=n.value;this.stateValue={kind:`google_registration`,flow:r,viewModel:Sn({base:e.viewModel,flow:r})},this.updateElement()},e=>{this.stateValue.kind!==`google_registration`||this.stateValue.flow!==t||(this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},rerollBusy:!1,error:J(e)}},this.updateElement())})}completeGoogleRegistration(){let e=this.stateValue;if(e.kind!==`google_registration`||e.viewModel.submitBusy)return;let t=e.flow;this.stateValue={...e,viewModel:{...e.viewModel,status:{kind:`busy`,headline:`Creating your wallet`},submitBusy:!0,error:``}},this.updateElement(),t.completeRegistration().then(e=>{if(!(this.stateValue.kind!==`google_registration`||this.stateValue.flow!==t)){if(!e.ok){this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},submitBusy:!1,error:e.error.message}},this.updateElement();return}this.complete({kind:`registered`,authMenuSessionId:this.identity.authMenuSessionId,walletId:e.value.walletId,method:`google_email_otp`})}},e=>{this.stateValue.kind!==`google_registration`||this.stateValue.flow!==t||(this.stateValue={...this.stateValue,viewModel:{...this.stateValue.viewModel,status:{kind:`idle`,interaction:`actionable`},submitBusy:!1,error:J(e)}},this.updateElement())})}complete(e,t=`menu`){if(this.stateValue.kind===`complete`)return;let n=this.surface?this.currentViewModel():null;if(this.stateValue={kind:`complete`,outcome:e},t===`menu`&&n&&fn(e)&&this.showSuccess(n,e,`shown`)){this.invalidatePreparation(),this.successTimers=[setTimeout(this.showSuccess.bind(this,n,e,`leaving`),mn),setTimeout(this.finish.bind(this,e),mn+240)];return}this.finish(e)}showSuccess(e,t,n){let r=be(e,{kind:`succeeded`,...ve(t.kind),phase:n});return!r||!this.surface?!1:(this.surface.update(r),!0)}finish(e){this.cleanup();let t=this.outcomeResolver;this.outcomeResolver=null,t?.(e)}showRegistrationDelay=e=>{if(e.phase!==De.STEP_05_ED25519_SIGNER_PROVISION_DELAYED&&e.phase!==De.STEP_06_RELAY_BOOTSTRAP_DELAYED)return;let t=this.stateValue;if(t.kind!==`performing`)return;let n=t.viewModel;n.kind!==`passkey`||n.status.kind!==`busy`||(this.stateValue={...t,viewModel:{...n,status:{kind:`busy`,headline:e.message}}},this.updateElement())};performPreparedPasskey(e){this.prepared=null;let t=this.currentViewModel();if(this.stateValue={kind:`performing`,prepared:e,viewModel:t.kind===`recovery`?Y({base:t,walletId:X(t),stage:`sign_in_ready`,target:Z(t),status:{kind:`busy`,headline:ye(`login`),illustration:`passkey`,detail:`Continue with your passkey`}}):{...t,status:{kind:`busy`,headline:ye(t.mode),illustration:`passkey`,detail:`Continue with your passkey`}}},e.kind===`hosted_passkey_owner_login_prepared_v1`||e.kind===`hosted_passkey_linked_authority_login_prepared_v1`){this.updateElement(),this.finishPreparedPasskey(e);return}let n;try{n=this.startPreparedCredential(e)}catch(t){this.updateElement(),this.failPreparedPasskey(e,t);return}this.updateElement(),n.then(()=>this.finishPreparedPasskey(e),t=>this.failPreparedPasskey(e,t))}startPreparedCredential(e){return e.kind===`hosted_passkey_registration_prepared_v1`?ze(e):an(e)}async finishPreparedPasskey(e){try{switch(e.kind){case`hosted_passkey_registration_prepared_v1`:{let t=await Fe({prepared:e});this.completeRegistrationResult(t);return}case`hosted_passkey_owner_login_prepared_v1`:case`hosted_passkey_linked_authority_login_prepared_v1`:{let t=await sn(e);this.completeLoginResult(t);return}case`hosted_passkey_account_sync_prepared_v1`:{let t=await cn(e);this.completeAccountSyncResult(t);return}default:return jn(e)}}catch(t){this.failPreparedPasskey(e,t)}}completeRegistrationResult(e){if(!e.success||e.kind!==`wallet_registered`&&e.kind!==`ecdsa_wallet_registered_near_pending`){this.fail({kind:`error`,error:Error(e.success?`Hosted registration returned an unexpected result`:e.error)});return}let n=t(String(e.walletId));if(!n.ok){this.fail({kind:`error`,error:Error(`Hosted registration returned an invalid wallet id`)});return}this.complete({kind:`registered`,authMenuSessionId:this.identity.authMenuSessionId,walletId:n.value,method:`passkey`})}completeLoginResult(e){let n=e.result;if(!n.success){this.fail(e.cancelledByUser?{kind:`dismissed`}:{kind:`error`,error:Error(n.error)});return}let r=t(String(n.walletId));if(!r.ok){this.fail({kind:`error`,error:Error(`Hosted login returned an invalid wallet id`)});return}this.complete({kind:`authenticated`,authMenuSessionId:this.identity.authMenuSessionId,walletId:r.value,method:`passkey`})}completeAccountSyncResult(e){if(!e.success){this.fail({kind:`error`,error:Error(e.error)});return}let n=t(String(e.walletId));if(!n.ok){this.fail({kind:`error`,error:Error(`Hosted account sync returned an invalid wallet id`)});return}this.complete({kind:`account_synced`,authMenuSessionId:this.identity.authMenuSessionId,walletId:n.value})}failPreparedPasskey(e,t){if(!(this.stateValue.kind!==`performing`||this.stateValue.prepared!==e)){if(this.preparationCancellation?.signal.aborted){this.fail({kind:`dismissed`});return}if(re(t)){this.fail({kind:`dismissed`});return}this.fail({kind:`error`,error:t})}}fail(e){if(this.stateValue.kind!==`performing`)return;let t=this.stateValue.viewModel;if(U(this.stateValue.prepared),this.prepared=null,t.kind===`recovery`){let n=this.recoveryReturnState;if(!n)return;this.recoveryLoginPrepared=null,this.stateValue={kind:`recovery`,stage:`sign_in_ready`,returnState:n,viewModel:Y({base:t,walletId:X(t),stage:`sign_in_ready`,target:Z(t),status:e.kind===`dismissed`?{kind:`idle`,interaction:`actionable`}:h(J(e.error))})},this.updateElement();return}if(e.kind===`dismissed`){this.invalidatePreparation(),this.stateValue={kind:`preparing`,viewModel:{...t,status:{kind:`idle`,interaction:`arming`}}},this.updateElement(),this.startPasskeyPreparation();return}this.stateValue={kind:`preparing`,viewModel:{...t,status:h(J(e.error))}},this.updateElement()}};function On(e){throw Error(`Unhandled auth-menu intent: ${String(e)}`)}function kn(e){throw Error(`Unhandled link-device flow outcome: ${String(e)}`)}function An(e){throw Error(`Unhandled linked-device target-factor activation: ${String(e)}`)}function jn(e){throw Error(`Unhandled hosted passkey preparation: ${String(e)}`)}function Mn(e){throw Error(`Unhandled hosted external-auth evidence: ${String(e)}`)}function Nn(e,t){e.inert=!0,e.classList.add(`seams-auth-card-leaving`);let n={left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`,margin:`0px`};return e.animate([{...n,opacity:1},{...n,opacity:0}],{duration:150,easing:`ease-out`,fill:`both`})}function Pn(e,t){return t.walletId===e&&t.authMethod===`voiceid`}function Fn(e,t){return t.id===e}function In(e){throw Error(`Unexpected wallet connection result: ${String(e)}`)}function Ln(e){return`${e.walletId}:${e.authMethod}`}function Rn(e,t){let n=String(e.walletId);switch(e.authMethod){case`passkey`:return{walletId:n,authMethod:`passkey`};case`email_otp`:return{walletId:n,authMethod:`email_otp`,emailAddress:e.emailAddress??(t?.authMethod===`email_otp`?t.emailAddress:null)}}}function zn(e,t=[]){let n=new Map;for(let t of e?.accounts??[]){if(t.authMethod!==u.passkey&&t.authMethod!==u.emailOtp)continue;let e=String(t.walletId||``).trim();if(!e)continue;let r=t.authMethod===u.passkey?{walletId:e,authMethod:`passkey`}:{walletId:e,authMethod:`email_otp`,emailAddress:null};n.set(Ln(r),r)}for(let e of t){let t=String(e.walletId||``).trim();if(!t)continue;let r=`${t}:${e.authMethod}`,i=Rn(e,n.get(r));n.set(r,i)}return[...n.values()]}function Bn(e,t){let n=e?.lastUsedAccount;if(n?.authMethod===u.passkey||n?.authMethod===u.emailOtp||n?.authMethod===`voiceid`){let e=String(n.walletId||``).trim(),r=t.find(t=>t.walletId===e&&t.authMethod===n.authMethod);if(r)return r;let i=t.find(Hn.bind(null,e));if(i)return i}return t[0]??null}function Vn(e){let t=e?.lastUsedAccount;return!t||t.authMethod!==u.passkey&&t.authMethod!==`linked_device`?null:String(t.walletId||``).trim()||null}function Hn(e,t){return t.walletId===e}async function Un(e){let t=await import(`./recovery-entrypoint-DA2FGLG6.js`),n=e();return t.createHostedRecoveryPort({context:n.getContext(),relayUrl:String(n.configs.network.relayer.url)})}var Wn=class{portPromise=null;constructor(e){this.getWalletRuntime=e}targetFor(t){if(t===`google_email_otp`)return{kind:t,googleProvider:`google`};let n=e(this.getWalletRuntime().getContext().signingEngine.getRpId());if(!n.ok)throw Error(`wallet recovery RP ID ${n.error.message}`);return{kind:t,rpId:n.value}}async prepare(e){return await(await this.port()).prepare(e)}async createPasskey(e){return await(await this.port()).createPasskey(e)}async verifyGoogle(e,t){return await(await this.port()).verifyGoogle(e,t)}async verifyEmailOtp(e,t){return await(await this.port()).verifyEmailOtp(e,t)}async finalize(e){return await(await this.port()).finalize(e)}async cancel(e){await(await this.port()).cancel(e)}port(){return this.portPromise??=Un(this.getWalletRuntime),this.portPromise}};function Gn(){try{let e=document.referrer.trim();if(e){let t=new URL(e).hostname.trim();if(t)return t}}catch{}return window.location.hostname||`Wallet`}function Kn(e){switch(e.kind){case`discoverable`:return null;case`wallet`:case`wallet_sync`:return String(e.walletId)}}function qn(e){window.setTimeout(e,0)}function Jn(){return new Promise(qn)}function Yn(e,t){return new Promise(n=>{let r=window.setTimeout(()=>n(null),t);e.then(e=>{window.clearTimeout(r),n(e)},()=>{window.clearTimeout(r),n(null)})})}var Xn=class{sessions=new Map;constructor(e){this.deps=e}async open(e){if(!e.requestId)throw Error(`Hosted auth-menu open request requires requestId`);let t=ne(e.requestId);if(this.sessions.has(e.request.authMenuSessionId))throw Error(`Hosted auth-menu session is already active`);let n=new Dn({request:e.request,requestId:t,appearance:this.deps.getAppearance(),hostname:Gn(),beginGoogleEmailOtp:async({idToken:e,authTarget:t,signal:n})=>await this.beginGoogleEmailOtp({idToken:e,authTarget:t,signal:n}),startDeviceLinking:this.startDeviceLinking,cancelDeviceLinking:this.cancelDeviceLinking,recoveryPort:new Wn(this.deps.getWalletRuntime),prepareRecoveredLogin:this.prepareRecoveredLogin.bind(this,t,e.request.authMenuSessionId),sendToParent:this.deps.send}),r=n.waitForOutcome(),i=Kn(e.request.loginTarget),a=this.readLoginAccounts();this.sessions.set(e.request.authMenuSessionId,n);try{let o=await Yn(a,50);return n.state.kind===`complete`?await r:(o&&this.applyLoginAccounts(n,t,e.request.loginTarget,o),n.mount(),await Jn(),n.setRegistrationPreparation((r,i,a)=>this.prepareRegistration(e.request,t,n.identity.authMenuSessionId,r,i,a)),!o&&i?await this.bootstrapLoginAccounts(n,t,e.request.loginTarget,a):o||(n.setLoginPreparation({accountOptions:[],selectedAccount:null,prepare:(r,i)=>this.prepareLogin(t,n.identity.authMenuSessionId,i,r,null,e.request.loginTarget)}),this.bootstrapLoginAccounts(n,t,e.request.loginTarget,a)),await r)}finally{n.cleanup(),this.sessions.delete(e.request.authMenuSessionId)}}async readLoginAccounts(){let[e,t]=await Promise.all([this.deps.getWalletRuntime().auth.getRecentUnlocks().catch(()=>null),et().catch(()=>[])]),n=[],r=this.deps.getWalletRuntime();if(r.configs.authMethods.some(Zn))try{for(let e of await je.listWalletSelectionWalletIds())try{let t=await r.registration.getAuthMethodAvailability({walletId:e,method:`voiceid`});t.kind===`enabled`&&n.push({walletId:e,authMethod:`voiceid`,walletAuthMethodId:t.walletAuthMethodId})}catch{}}catch{}return{recentUnlocks:e,localAuthMethods:t,voiceAccounts:n}}async bootstrapLoginAccounts(e,t,n,r){this.applyLoginAccounts(e,t,n,await r)}applyLoginAccounts(e,t,n,{recentUnlocks:r,localAuthMethods:i,voiceAccounts:a}){if(e.state.kind===`complete`)return;let o=Kn(n),s=[...zn(r,i),...a],c=o?s.filter(e=>e.walletId===o):s,l=c.length>0||!o?c:[{walletId:o,authMethod:u.passkey}];e.setVoiceLogin(this.deps.getWalletRuntime().auth.unlockWithAuthMethod),e.setLoginPreparation({accountOptions:l,selectedAccount:o?l[0]??null:Bn(r,l),prepare:(i,a)=>this.prepareLogin(t,e.identity.authMenuSessionId,a,i,r,n)}),i.length>0&&e.defaultToLoginForDetectedLocalWallet()}async prepareLogin(e,t,n,r,i,a){let o=Zt(this.deps.getWalletRuntime().getContext()),s=i??await this.deps.getWalletRuntime().auth.getRecentUnlocks().catch(()=>null),c=(await et().catch(()=>[])).find(e=>e.authMethod===u.passkey),l=r||Vn(s)||c?.walletId||null;return a.kind===`wallet_sync`?await V({context:o,walletId:String(a.walletId),authMenuSessionId:t,requestId:e,cancellation:n}):l?await rn({context:o,walletId:l,authMenuSessionId:t,requestId:e,cancellation:n}):await V({context:o,walletId:l,authMenuSessionId:t,requestId:e,cancellation:n})}async prepareRecoveredLogin(e,t,n,r){return await rn({context:Zt(this.deps.getWalletRuntime().getContext()),walletId:String(n),authMenuSessionId:t,requestId:e,cancellation:r})}async beginGoogleEmailOtp(e){if(e.signal.aborted)throw Error(`Google sign-in was cancelled`);let t=await this.deps.getWalletRuntime().auth.startGoogleSignIn({idToken:e.idToken,...e.authTarget});if(!t.ok)throw Error(t.error.message);let n=t.value;if(e.signal.aborted)throw await n.cancel().catch(()=>{}),Error(`Google sign-in was cancelled`);return n}startDeviceLinking=async(e,t)=>await this.deps.getWalletRuntime().devices.startLinking({...e,options:t});cancelDeviceLinking=async()=>await this.deps.getWalletRuntime().devices.cancelLinking();async prepareRegistration(t,n,r,i,a,o){let s=this.deps.getWalletRuntime().getContext(),c=e(String(s.signingEngine.getRpId()||``));if(!c.ok)throw Error(c.error.message);let l={kind:`provided`,walletId:we(i)},ee=Ie({configs:s.configs,wallet:l,preference:t.registrationAccountInput===`sponsored_named_near_account`?{kind:`relayer_named_subaccount`}:{kind:`implicit_account`}});return await Re({context:s,wallet:l,signerSelection:Pe({configs:s.configs,accountProvisioning:ee,options:{}}),authMethod:{kind:`passkey`,rpId:c.value},authMenuSessionId:r,requestId:n,cancellation:a,options:{onEvent:o}})}cancel(e){let t=this.sessions.get(e.authMenuSessionId);return!t||t.identity.requestId!==e.requestId?!1:(t.cancel(e.reason),!0)}resolveWalletConnection(e){let t=this.sessions.get(e.authMenuSessionId);return!t||t.identity.requestId!==e.requestId?!1:t.acceptWalletConnection(e)}resolveExternalAuth(e){let t=this.sessions.get(e.authMenuSessionId);return!t||t.identity.requestId!==e.requestId?!1:t.acceptExternalAuthResolution(e)}};function Zn(e){return e.kind===`voiceid`}function Qn(e,t=new Xn({getWalletRuntime:e.getWalletRuntime,getAppearance:()=>e.getWalletRuntime().configs.ui.appearance,send:e.post})){return{PM_RESOLVE_WALLET_CONNECTION:async n=>{let r=i(n.payload);if(!r)throw Error(`Invalid wallet connection resolution`);D(e,n.requestId,{accepted:t.resolveWalletConnection(r)})},PM_OPEN_AUTH_MENU:async n=>{let i=r(n.payload);if(!i)throw Error(`Hosted auth-menu open request is invalid`);let a=await t.open({request:i,requestId:n.requestId});(a.kind===`authenticated`||a.kind===`registered`||a.kind===`account_synced`)&&await e.publishCurrentSession(),!e.respondIfCancelled(n.requestId)&&D(e,n.requestId,a)},PM_CANCEL_AUTH_MENU:async n=>{let r=te(n.payload);if(!r)throw Error(`Hosted auth-menu cancellation is invalid`);let i=t.cancel(r);D(e,n.requestId,{cancelled:i})},PM_RESOLVE_AUTH_MENU_EXTERNAL_AUTH:async n=>{let r=ee(n.payload);if(!r)throw Error(`Hosted auth-menu external-auth resolution is invalid`);let i=t.resolveExternalAuth(r);D(e,n.requestId,{accepted:i})}}}function $n(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=t.options&&typeof t.options==`object`&&!Array.isArray(t.options)?t.options:null,r=n?.ecdsaKeyFactsInventory&&typeof n.ecdsaKeyFactsInventory==`object`&&!Array.isArray(n.ecdsaKeyFactsInventory)?n.ecdsaKeyFactsInventory:null,i=r?.value&&typeof r.value==`object`&&!Array.isArray(r.value)?r.value:null;if(i&&(Object.prototype.hasOwnProperty.call(i,`walletSessionToken`)||Object.prototype.hasOwnProperty.call(i,`operationCredential`)))throw Error(`wallet iframe unlock requests must not carry a Wallet Session bearer`)}function er(e,t){let n=e.ecdsaKeyFactsInventory,{ecdsaKeyFactsInventory:r,...i}=e;if(!n)return i;if(n.mode===`webauthn`)return{...i,ecdsaKeyFactsInventory:n};let a=rt(t);if(!a)throw Error(`Hosted-wallet Wallet Session is required for opaque key-facts lookup`);return{...i,ecdsaKeyFactsInventory:{mode:`wallet_session_operation_credential_v1`,operationCredential:a}}}async function tr(e,t){try{await nr(e,t)}catch{D(e,t.requestId,a(`unavailable`))}}async function nr(e,t){if(e.respondIfCancelled(t.requestId))return;let n=t.type===`PM_EXTERNAL_OWNER_AUTH`?t.payload:c(t.payload);if((n.action===`associate`||n.action===`unlink`)!=(t.type===`PM_EXTERNAL_OWNER_AUTH`)){D(e,t.requestId,a(`invalid_request`));return}let r=e.getWalletRuntime().auth;switch(n.action){case`prepare`:D(e,t.requestId,await r.prepareExternalAuth(n.walletId));return;case`prepare_association`:D(e,t.requestId,await r.prepareExternalAssociation(n.walletId));return;case`associate`:{let i=await r.associateExternalAuth(n.input,$.bind(null,e,t.requestId));await e.publishCurrentSession(),D(e,t.requestId,i);return}case`unlink`:{let i=await r.removeExternalAuth(n,$.bind(null,e,t.requestId));await e.publishCurrentSession(),D(e,t.requestId,i);return}case`authenticate`:{let i=await r.authenticate(n.input,$.bind(null,e,t.requestId));i.ok&&e.getWalletRuntime().preferences.setCurrentWallet(i.value.walletId),await e.publishCurrentSession(),D(e,t.requestId,i);return}}}function rr(e,t){return String(t?.walletId||``).trim()||String(e.preferences.getCurrentWalletId()||``).trim()||void 0}function ir(e){console.warn(`[WalletIframeHost] Restored-session presignature prefill failed:`,e)}function ar(e,t,n,r,i){e.respondIfCancelled(n)||(D(e,n,i),r.authenticationRead===`restore`&&t.prefillRestoredWalletSession(i.state).catch(ir))}function or(e){return{PM_EXTERNAL_AUTH:tr.bind(null,e),PM_EXTERNAL_OWNER_AUTH:tr.bind(null,e),...Qn(e),PM_UNLOCK_AUTH_METHOD:async t=>{let n=e.getWalletRuntime();if(!t.payload)throw Error(`Plugin unlock payload is required.`);if(e.respondIfCancelled(t.requestId))return;let r=await n.auth.unlockWithAuthMethod(t.payload,$.bind(null,e,t.requestId));e.respondIfCancelled(t.requestId)||(await e.publishCurrentSession(),D(e,t.requestId,r))},PM_UNLOCK:async t=>{let n=e.getWalletRuntime();$n(t.payload);let r=gt(t.payload),i=er(_t(r),n.configs.network.relayer.url);if(e.respondIfCancelled(t.requestId))return;let a=await n.auth.unlock(r.walletId,lt(e,t.requestId,i));e.respondIfCancelled(t.requestId)||(a.success||E(),await e.publishCurrentSession(),!e.respondIfCancelled(t.requestId)&&D(e,t.requestId,a))},PM_LOCK:async t=>{let n=e.getWalletRuntime();E(),await n.auth.lock(),ut(e,t.requestId)},PM_LOCK_EXACT_WALLET_SESSION:async t=>{let n=e.getWalletRuntime(),r=Ge(t.payload),i=await Ze(n,{authenticationRead:`current`,wallet:{kind:`current`}},new Me);if(i.kind!==`active_session`&&i.kind!==`expired_session`||!Xe(i,r)){D(e,t.requestId,{kind:`stale_session`,expected:r,current:i});return}E(),await n.auth.lock(),D(e,t.requestId,{kind:`locked`,identity:r})},...dt(e),PM_GET_WALLET_SESSION:async t=>{let n=e.getWalletRuntime(),r=rr(n,t.payload),i=await n.auth.getSession(r);D(e,t.requestId,i)},PM_GET_EXACT_WALLET_SESSION_STATE:async t=>{let n=e.getWalletRuntime(),r=t.payload;if(!r||r.authenticationRead!==`restore`&&r.authenticationRead!==`current`||!r.wallet||r.wallet.kind!==`current`&&r.wallet.kind!==`exact`||r.authenticationRead===`restore`&&r.wallet.kind!==`current`)throw Error(`Wallet iframe exact session read mode is invalid`);await e.observeSession(r,ar.bind(null,e,n,t.requestId,r))},PM_GET_RECENT_UNLOCKS:async t=>{let n=await e.getWalletRuntime().auth.getRecentUnlocks();D(e,t.requestId,n)}}}function $(e,t){if(e.isCancelled(t))throw Error(`Wallet unlock was cancelled.`)}async function sr(e){await Qe(e,or)}export{sr as handleWalletHostRuntimeRequest};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as e,k as t}from"./domainIds-t1lp25yU.js";import{S as n,b as r,g as i,x as a}from"./digests-BIaE0DMd.js";import{N as o,r as s}from"./activeWalletSession-HAOgRKzn.js";import{t as c}from"./walletIframeIdentity-Cz82I_Uh.js";import{r as l}from"./canonicalPrimitives-DKeS3M40.js";import{o as u}from"./errors-BJBDbwHk.js";import{s as d}from"./nearRpcResults-CeHdqaS4.js";import{n as f}from"./ed25519OperationFingerprint-Dev4P6Og.js";import{r as ee}from"./types-D2Zk1W7I.js";import{t as te}from"./accountIds-DGWFzEnw.js";import{t as p}from"./actions-7SvZZut1.js";const m=`__SEAMS_WALLET_SDK_BASE__`,h=`SEAMS_WALLET_SDK_BASE_CHANGED`,g=`__SEAMS_WALLET_ASSET_VERSION__`;function ne(){if(typeof window>`u`)return;let e=window[m];return typeof e==`string`&&e.length>0?e:void 0}function _(e){if(typeof window>`u`)return;let t=window;t[m]=e,window.dispatchEvent(new CustomEvent(h,{detail:e}))}function v(){if(typeof window>`u`)return;let e=window[g];return typeof e==`string`&&e.length>0?e:void 0}function re(e){if(typeof window>`u`)return;let t=e.trim();t&&(window[g]=t)}function ie(e){if(typeof window>`u`)return()=>{};let t=t=>{let n=t.detail;typeof n==`string`&&n.length>0&&e(n)};return window.addEventListener(h,t,{passive:!0}),()=>window.removeEventListener(h,t)}function ae(e){return typeof e!=`string`||e.length>131072||!/^data:image\/(?:png|webp|jpeg|svg\+xml)[;,]/i.test(e)?null:e}function y(){return{primary:[],secondary:[]}}function b(e){return typeof e==`string`&&e.trim().length>0&&e.length<=512}function x(e){if(e===null)return{ok:!0,value:null};let t=ae(e);if(t!==null)return{ok:!0,value:t};if(typeof e!=`string`||e.length>131072)return{ok:!1};try{if(new URL(e).protocol===`https:`)return{ok:!0,value:e}}catch{return{ok:!1}}return{ok:!1}}function S(e,t){if(!Array.isArray(e)||e.length>32)return null;let n=[];for(let r of e){if(!i(r)||!b(r.id)||!b(r.label)||typeof r.description!=`string`||r.description.length>512||t.has(r.id))return null;let e=x(r.icon);if(!e.ok)return null;t.add(r.id),n.push({id:r.id,label:r.label,description:r.description,icon:e.value})}return n}function oe(e){if(!i(e))return null;let t=new Set,n=S(e.primary,t),r=S(e.secondary,t);return n&&r?{primary:n,secondary:r}:null}function se(e){if(!i(e)||!i(e.result))return null;let t=O(e.authMenuSessionId),n;try{n=c(e.requestId)}catch{return null}if(!t||!b(e.connectionRequestId))return null;let r;switch(e.result.kind){case`connected`:case`cancelled`:if(e.result.message!==void 0)return null;r={kind:e.result.kind};break;case`failed`:if(!b(e.result.message))return null;r={kind:`failed`,message:e.result.message};break;default:return null}return{authMenuSessionId:t,requestId:n,connectionRequestId:e.connectionRequestId,result:r}}const C={login:{title:`Welcome back`,subtitle:``,passkeyCta:`Unlock with passkey`},register:{title:`Create a wallet`,subtitle:``,passkeyNameLabel:`Wallet name`,passkeyCta:`Create wallet with passkey`},common:{closeLabel:`Close`}};function w(e,t){return typeof e==`string`&&e.trim()||null}function T(e,t){let n=w(e,t);return n===null?null:n}function E(e){try{return c(e)}catch{return null}}function D(e,t){let n=new Set(t);return Object.keys(e).every(e=>n.has(e))}function O(e){return T(e,`authMenuSessionId`)}function k(e){return T(e,`externalAuthRequestId`)}function A(e){return i(e)?e:null}function j(e,t=new Set,n=!1){if(e===void 0)return n;if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e);if(typeof e!=`object`||t.has(e))return!1;if(t.add(e),Array.isArray(e))return e.every(e=>j(e,t,n));let r=A(e);return r!==null&&Object.values(r).every(e=>j(e,t,n))}function M(e,t){return w(e,`copy`)??t}function N(e,t){let n=A(e);return{title:M(n?.title,t.title),subtitle:M(n?.subtitle,t.subtitle),passkeyCta:M(n?.passkeyCta,t.passkeyCta)}}function ce(e){let t=A(e),n=A(t?.register);return{login:N(t?.login,C.login),register:{...N(t?.register,C.register),passkeyNameLabel:M(n?.passkeyNameLabel,C.register.passkeyNameLabel)},common:{closeLabel:M(A(t?.common)?.closeLabel,C.common.closeLabel)}}}function P(e){return e===`google`?e:null}function F(e){return e===`login`||e===`register`?e:null}function I(e){return e===`implicit_wallet`||e===`sponsored_named_near_account`?e:null}function L(e){return e===`close_button`||e===`component_unmounted`||e===`connection_closed`?e:null}function R(e,t){if(e===void 0)return!0;let n=A(e);return n!==null&&D(n,t)}function z(e){let t=A(e);return!t||!D(t,[`login`,`register`,`common`])?!1:R(t.login,[`title`,`subtitle`,`passkeyCta`])&&R(t.register,[`title`,`subtitle`,`passkeyCta`,`passkeyNameLabel`])&&R(t.common,[`closeLabel`])}function B(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=P(n);if(!e)return null;t.push(e)}return t}function V(e){let n=A(e);if(!n||!j(n,new Set,!0)||n.kind!==`hosted_auth_menu_open_v1`||!D(n,[`kind`,`authMenuSessionId`,`initialMode`,`initialHeightCssPx`,`loginTarget`,`registrationAccountInput`,`showRegistrationInput`,`showProgress`,`copy`,`enabledExternalProviders`,`walletAlternatives`])||!z(n.copy))return null;let r=O(n.authMenuSessionId),i=F(n.initialMode),a=n.initialHeightCssPx;if(a!==void 0&&(typeof a!=`number`||!Number.isFinite(a)||a<=0))return null;let o=A(n.loginTarget),s=o?.kind===`wallet`||o?.kind===`wallet_sync`?t(o.walletId):null,c=o?.kind===`discoverable`&&D(o,[`kind`])?{kind:`discoverable`}:o?.kind===`wallet`&&D(o,[`kind`,`walletId`])&&s?.ok?{kind:`wallet`,walletId:s.value}:o?.kind===`wallet_sync`&&D(o,[`kind`,`walletId`])&&s?.ok?{kind:`wallet_sync`,walletId:s.value}:null,l=I(n.registrationAccountInput),u=B(n.enabledExternalProviders),d=n.walletAlternatives===void 0?y():oe(n.walletAlternatives);return!r||!i||!c||!l||typeof n.showRegistrationInput!=`boolean`||typeof n.showProgress!=`boolean`||!u||!d||!j(n.copy,new Set,!0)?null:{kind:`hosted_auth_menu_open_v1`,authMenuSessionId:r,initialMode:i,initialHeightCssPx:a,loginTarget:c,registrationAccountInput:l,showRegistrationInput:n.showRegistrationInput,showProgress:n.showProgress,copy:ce(n.copy),enabledExternalProviders:u,walletAlternatives:d}}function H(e){let t=A(e);if(!t||!j(t)||t.kind!==`hosted_auth_menu_error_v1`||!D(t,[`kind`,`authMenuSessionId`,`mode`,`message`]))return null;let n=O(t.authMenuSessionId),r=F(t.mode),i=w(t.message,`message`);return n&&r&&i?{kind:t.kind,authMenuSessionId:n,mode:r,message:i}:null}function U(e){let t=A(e);if(!t||!j(t))return null;switch(t.kind){case`google_id_token`:{if(!D(t,[`kind`,`idToken`]))return null;let e=w(t.idToken,`idToken`);return e?{kind:t.kind,idToken:e}:null}case`cancelled`:return D(t,[`kind`,`reason`])&&t.reason===`user_cancelled`?{kind:t.kind,reason:t.reason}:null;case`failed`:{if(!D(t,[`kind`,`code`,`message`]))return null;let e=t.code===`provider_unavailable`||t.code===`provider_error`||t.code===`invalid_evidence`?t.code:null,n=w(t.message,`message`);return e&&n?{kind:t.kind,code:e,message:n}:null}default:return null}}function W(e){let t=A(e);if(!t||!j(t)||t.kind!==`hosted_auth_menu_external_auth_resolution_v1`||!D(t,[`kind`,`authMenuSessionId`,`externalAuthRequestId`,`requestId`,`evidence`]))return null;let n=O(t.authMenuSessionId),r=k(t.externalAuthRequestId),i=E(t.requestId),a=U(t.evidence);return!n||!r||!i||!a?null:{kind:t.kind,authMenuSessionId:n,externalAuthRequestId:r,requestId:i,evidence:a}}function G(e){let t=A(e);if(!t||!j(t)||t.kind!==`hosted_auth_menu_cancel_v1`||!D(t,[`kind`,`authMenuSessionId`,`requestId`,`reason`]))return null;let n=O(t.authMenuSessionId),r=E(t.requestId),i=L(t.reason);return n&&r&&i?{kind:t.kind,authMenuSessionId:n,requestId:r,reason:i}:null}const le=`20.0.0`,ue=`WALLET_IFRAME_PROTOCOL_VERSION_MISMATCH`,K=[`home`,`exchangeCode`,`nonce`,`appOrigin`,`walletOrigin`,`relayUrl`];function q(e,t){if(typeof e!=`string`||e.length===0||e.length>512||e.trim()!==e||/[\s\u0000-\u001f\u007f]/.test(e))throw Error(`${t} must be a compact opaque identifier`);return e}function J(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 de(e){if(!i(e))throw Error(`hosted-wallet redemption payload must be an exact object`);if(Object.keys(e).length!==K.length)throw Error(`hosted-wallet redemption payload fields are invalid`);for(let t of K)if(!Object.hasOwn(e,t))throw Error(`hosted-wallet redemption payload fields are invalid`);return{home:s(e.home),exchangeCode:q(e.exchangeCode,`exchangeCode`),nonce:q(e.nonce,`nonce`),appOrigin:J(e.appOrigin,`appOrigin`),walletOrigin:J(e.walletOrigin,`walletOrigin`),relayUrl:q(e.relayUrl,`relayUrl`)}}function fe(t){if(!i(t)||!D(t,[`scanRequestId`,`action`])||typeof t.scanRequestId!=`string`||t.scanRequestId.length===0||!i(t.action))return null;let n=t.action;if(n.kind===`cancel`)return D(n,[`kind`])?{scanRequestId:t.scanRequestId,action:{kind:n.kind}}:null;if(n.kind!==`select`||!D(n,[`kind`,`baseWalletAuthMethodId`]))return null;let r=e(n.baseWalletAuthMethodId);return r.ok?{scanRequestId:t.scanRequestId,action:{kind:n.kind,baseWalletAuthMethodId:r.value}}:null}function pe(e){if(!i(e)||!D(e,[`activationId`,`action`])||typeof e.activationId!=`string`||e.activationId.length===0||!i(e.action))return null;let t=e.action;switch(t.kind){case`create_passkey`:case`send_email_otp`:case`resend_email_otp`:return D(t,[`kind`])?{activationId:e.activationId,action:{kind:t.kind}}:null;case`submit_email_otp`:return D(t,[`kind`,`otpCode`])&&typeof t.otpCode==`string`&&/^\d{6}$/.test(t.otpCode)?{activationId:e.activationId,action:{kind:t.kind,otpCode:t.otpCode}}:null;default:return null}}function me(e){let t=n(e,`NEAR transaction result`);if(t.success===!0){let e=r(t.transactionId,`transactionId`),n=d(t.result);if(e!==n.transaction.hash)throw Error(`NEAR transaction result contains different transaction hashes`);return typeof n.status==`object`&&`Failure`in n.status?Y(e,Error(`NEAR transaction execution failed`)):{success:!0,transactionId:e,result:n}}if(t.success!==!1)throw Error(`Invalid NEAR transaction result`);let i=a(t.error,`NEAR transaction error`);switch(t.kind){case`not_submitted`:return{success:!1,kind:`not_submitted`,error:i};case`submission_unknown`:return{success:!1,kind:`submission_unknown`,error:i};case`unresolved`:return{success:!1,kind:`unresolved`,transactionId:r(t.transactionId,`transactionId`),error:i};default:throw Error(`Invalid NEAR transaction failure`)}}function he(e,t){return{success:!1,kind:t,error:u(e)||`NEAR transaction failed`}}function Y(e,t){return{success:!1,kind:`unresolved`,transactionId:e,error:u(t)}}function ge(){return{appIdentity:{kind:`anonymous`},authentication:{kind:`signed_out`},capabilityProjection:{kind:`not_requested`},nonceDiagnostics:null}}let X=0;function _e(){return X+=1,X}const ve=`/wallet/external-auth`;function ye(e){let t=n(e,`external identity`),i=t.provider,a=r(t.issuer,`issuer`),o=r(t.subject,`subject`);switch(i){case`google`:if(a!==`https://accounts.google.com`)throw Error(`Invalid Google issuer`);return{provider:i,issuer:a,subject:o};case`application`:return{provider:i,issuer:a,subject:o};default:throw Error(`Invalid external identity provider`)}}function be(e){let i=n(e,`external owner challenge`),a=t(i.walletId);if(!a.ok)throw Error(`Invalid owner challenge wallet`);let s=a.value,c=r(i.attemptId,`attemptId`),u=ye(i.identity),d=l(i.challengeB64u),f=o(i.expiresAtMs,`owner challenge expiry`);switch(i.kind){case`associate`:return{kind:`associate`,walletId:s,attemptId:c,identity:u,challengeB64u:d,expiresAtMs:f};case`unlink`:return{kind:`unlink`,walletId:s,attemptId:c,identity:u,challengeB64u:d,expiresAtMs:f,associationId:r(i.associationId,`associationId`)};default:throw Error(`Invalid owner challenge purpose`)}}function xe(e){let t=n(e,`external auth command`);if(t.action===`prepare`||t.action===`prepare_association`)return{action:t.action,walletId:r(t.walletId,`walletId`)};if(t.action===`unlink`)return{action:`unlink`,walletId:r(t.walletId,`walletId`),associationId:r(t.associationId,`associationId`)};if(t.action!==`authenticate`&&t.action!==`associate`)throw Error(`Invalid external authentication command`);let i=n(t.input,`authentication input`),a=r(i.walletId,`walletId`);if(i.method===`google`)return{action:t.action,input:{method:`google`,walletId:a,idToken:r(i.idToken,`idToken`)}};if(i.method===`handoff`)return{action:t.action,input:{method:`handoff`,walletId:a,attemptId:r(i.attemptId,`attemptId`),code:r(i.code,`code`)}};throw Error(`Unsupported external authentication method`)}function Z(e){let i=n(e,`external authentication`),a=t(i.walletId);if(!a.ok||i.kind!==`external_authenticated`||i.provider!==`google`&&i.provider!==`application`||i.permission!==`wallet_settings_read`||`authMethod`in i)throw Error(`External authentication is invalid`);return{kind:`external_authenticated`,walletId:a.value,sessionId:r(i.sessionId,`sessionId`),associationId:r(i.associationId,`associationId`),environmentId:r(i.environmentId,`environmentId`),provider:i.provider,permission:`wallet_settings_read`,expiresAtMs:o(i.expiresAtMs,`expiresAtMs`)}}function Q(e){return{ok:!1,code:e,message:`Wallet authentication could not be completed.`}}function Se(e){let t=n(e,`external authentication failure`);switch(t.code){case`invalid_request`:case`invalid_credential`:case`access_denied`:case`expired`:case`superseded`:case`unavailable`:case`rate_limited`:case`cancelled`:return Q(t.code);default:return Q(`unavailable`)}}function Ce(e){let t=n(e,`external settings`);if(!Array.isArray(t.accounts)||!Array.isArray(t.methods)||!Array.isArray(t.devices))throw Error(`Invalid wallet settings`);return{authentication:Z(t.authentication),accounts:t.accounts.map(we),methods:t.methods.map(Te),devices:t.devices.map(Ee)}}function we(e){let t=n(e,`account`);if(t.family!==`ed25519`&&t.family!==`ecdsa`)throw Error(`Invalid account family`);return{family:t.family,address:r(t.address,`address`),publicKey:r(t.publicKey,`publicKey`)}}function Te(e){let t=n(e,`method`);if(t.kind!==`passkey`&&t.kind!==`email_otp`&&t.kind!==`voiceid`)throw Error(`Invalid method`);return{id:r(t.id,`id`),kind:t.kind}}function Ee(e){return{id:r(n(e,`device`).id,`id`)}}function $(e){let i=n(e,`owner operation recovery`),a=r(i.operationId,`operationId`);if(!/^owner-near:[A-Za-z0-9_-]{32,64}$/.test(a))throw Error(`Invalid owner operation ID.`);let o=t(i.walletId);if(!o.ok)throw Error(`Invalid owner operation wallet.`);return{operationId:ee.signingOperation(a),walletId:o.value,nearAccountId:te(r(i.nearAccountId,`nearAccountId`))}}function De(e){let t=n(e,`owner operation command`),r=Z(t.authentication),i=$(t.recovery);if(i.walletId!==String(r.walletId))throw Error(`Owner operation wallet mismatch.`);switch(t.action){case`recover`:return{action:`recover`,authentication:r,recovery:i};case`approve`:{let e=n(t.transaction,`transaction`),a=f({nearAccountId:i.nearAccountId,receiverId:e.receiverId,actions:e.actions},`transaction`);if(a.nearAccountId!==String(i.nearAccountId))throw Error(`Owner operation account mismatch.`);let o=t.expiresAtMs;if(typeof o!=`number`||!Number.isSafeInteger(o)||o<=0)throw Error(`Invalid owner operation expiry.`);return{action:`approve`,authentication:r,recovery:i,expiresAtMs:o,transaction:{receiverId:a.receiverId,actions:a.actions.map(ke)}}}default:throw Error(`Invalid owner operation action.`)}}function Oe(e){let t=n(e,`owner operation outcome`);switch(t.kind){case`completed`:{let e=me(t.result);if(!e.success)throw Error(`A completed owner operation requires a successful transaction.`);return{kind:`completed`,result:e}}case`reverted`:return{kind:`reverted`,transactionId:r(t.transactionId,`transactionId`),error:r(t.error,`error`)};case`cancelled`:return{kind:`cancelled`};case`expired`:return{kind:`expired`};case`failed`:return{kind:`failed`,error:r(t.error,`error`)};case`unknown`:return{kind:`unknown`,recovery:$(t.recovery)};default:throw Error(`Invalid owner operation outcome.`)}}function ke(e){switch(e.action_type){case`CreateAccount`:return{action_type:p.CreateAccount};case`DeployContract`:return{action_type:p.DeployContract,code:[...e.code]};case`FunctionCall`:return{action_type:p.FunctionCall,method_name:e.method_name,args:e.args,gas:e.gas,deposit:e.deposit};case`Transfer`:return{action_type:p.Transfer,deposit:e.deposit};case`Stake`:return{action_type:p.Stake,stake:e.stake,public_key:e.public_key};case`AddKey`:return{action_type:p.AddKey,public_key:e.public_key,access_key:e.access_key};case`DeleteKey`:return{action_type:p.DeleteKey,public_key:e.public_key};case`DeleteAccount`:return{action_type:p.DeleteAccount,beneficiary_id:e.beneficiary_id};case`DeployGlobalContract`:return{action_type:p.DeployGlobalContract,code:[...e.code],deploy_mode:e.deploy_mode};case`UseGlobalContract`:return e.account_id===void 0?{action_type:p.UseGlobalContract,code_hash:e.code_hash}:{action_type:p.UseGlobalContract,account_id:e.account_id};case`SignedDelegate`:throw Error(`Use the delegate API for delegated actions.`);default:throw Error(`Unsupported owner transaction action.`)}}export{_ as A,de as C,ne as D,v as E,ie as O,V as S,se as T,fe as _,Q as a,H as b,be as c,ge as d,he as f,k as g,le as h,ve as i,re as k,Ce as l,ue as m,Oe as n,xe as o,Y as p,$ as r,Se as s,De as t,_e as u,pe as v,y as w,W as x,G as y};
|