@seams/wallet 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +107 -43
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-receipt.js +36 -6
- package/dist/esm/core/ui/messages.js +9 -14
- package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +23 -9
- package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.css +376 -84
- package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +87 -167
- package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +11 -9
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.css +76 -74
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +23 -22
- package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +1 -5
- package/dist/esm/react/components/AccountMenuButton/icons/MapPinIcon.js +12 -0
- package/dist/esm/react/components/AccountMenuButton/index.js +2 -1
- package/dist/esm/react/styles/styles.css +452 -162
- package/dist/{public/sdk/ConfirmationDrawer-B7RCp58z.js → esm/sdk/ConfirmationDrawer-Ck33ZmU-.js} +1 -1
- package/dist/esm/sdk/adapters-CgJpSAxH.js +2 -0
- package/dist/esm/sdk/appearance-token-vars-BA3KQyEE.js +2 -0
- package/dist/esm/sdk/{export-viewer-host-CVdpEuY6.js → export-viewer-host-C9n-62Pi.js} +1 -1
- package/dist/esm/sdk/{exportKeypairOperation-gVCqLrDl.js → exportKeypairOperation-Du9HKB8f.js} +1 -1
- package/dist/esm/sdk/{host-Bz7mRJPZ.js → host-DoftJdVQ.js} +1 -1
- package/dist/esm/sdk/{localOnly-TXaYAZj-.js → localOnly-CvFSZFUy.js} +1 -1
- package/dist/esm/sdk/{mountExportPrivateKeySurface-DUnKOBQr.js → mountExportPrivateKeySurface-DdJHWwqY.js} +1 -1
- package/dist/esm/sdk/{mountRecoveryCodeBackupSurface-MGTl6FhG.js → mountRecoveryCodeBackupSurface-D3QFgMGE.js} +1 -1
- package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-DWeemdJv.js → esm/sdk/pendingWalletRecoveryCodeBackup-LbstFwcY.js} +1 -1
- package/dist/esm/sdk/{registration-DVX_lnP7.js → registration-CIxJvbTo.js} +1 -1
- package/dist/esm/sdk/{registration-DeCUrUR9.js → registration-CeOmKyCG.js} +1 -1
- package/dist/esm/sdk/{runtime-auth-BAGyfscG.js → runtime-auth-C0V-5znH.js} +1 -1
- package/dist/{public/sdk/runtime-device-link-DKkMLVor.js → esm/sdk/runtime-device-link-B1jpHQSF.js} +1 -1
- package/dist/{public/sdk/runtime-ecdsa-tempo-0TAVH1xg.js → esm/sdk/runtime-ecdsa-tempo-CDSZ3pxS.js} +1 -1
- package/dist/esm/sdk/{runtime-email-otp-DoHa8Hif.js → runtime-email-otp-DXuxFOjL.js} +1 -1
- package/dist/esm/sdk/{runtime-export-CAt17IFH.js → runtime-export-Ba12ChDI.js} +1 -1
- package/dist/esm/sdk/{runtime-near-BQX9Jk9Z.js → runtime-near-DRrdWzmr.js} +1 -1
- package/dist/esm/sdk/{runtime-preferences-BuKTIpv6.js → runtime-preferences-BWyhRaBA.js} +1 -1
- package/dist/esm/sdk/{runtime-recovery-DyxJKKNw.js → runtime-recovery-DlJlaZlf.js} +1 -1
- package/dist/esm/sdk/{runtime-recovery-codes-CWmt0FDB.js → runtime-recovery-codes-CuqYWqK7.js} +1 -1
- package/dist/esm/sdk/{shared-BVps1f3F.js → shared-B95wnpoD.js} +1 -1
- package/dist/esm/sdk/transaction-activity-CpDMkSPm.js +1 -0
- package/dist/esm/sdk/tx-confirm-ui.js +186 -71
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/esm/sdk/wallet-ui.css +1 -1
- package/dist/{public/sdk/walletRecoveryAdminProof-CIoLawfC.js → esm/sdk/walletRecoveryAdminProof-CtH8_lph.js} +1 -1
- package/dist/public/headers.manifest.json +1 -1
- package/dist/{esm/sdk/ConfirmationDrawer-B7RCp58z.js → public/sdk/ConfirmationDrawer-Ck33ZmU-.js} +1 -1
- package/dist/public/sdk/adapters-CgJpSAxH.js +2 -0
- package/dist/public/sdk/appearance-token-vars-BA3KQyEE.js +2 -0
- package/dist/public/sdk/{export-viewer-host-CVdpEuY6.js → export-viewer-host-C9n-62Pi.js} +1 -1
- package/dist/public/sdk/{exportKeypairOperation-gVCqLrDl.js → exportKeypairOperation-Du9HKB8f.js} +1 -1
- package/dist/public/sdk/{host-Bz7mRJPZ.js → host-DoftJdVQ.js} +1 -1
- package/dist/public/sdk/{localOnly-TXaYAZj-.js → localOnly-CvFSZFUy.js} +1 -1
- package/dist/public/sdk/{mountExportPrivateKeySurface-DUnKOBQr.js → mountExportPrivateKeySurface-DdJHWwqY.js} +1 -1
- package/dist/public/sdk/{mountRecoveryCodeBackupSurface-MGTl6FhG.js → mountRecoveryCodeBackupSurface-D3QFgMGE.js} +1 -1
- package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-DWeemdJv.js → public/sdk/pendingWalletRecoveryCodeBackup-LbstFwcY.js} +1 -1
- package/dist/public/sdk/{registration-DVX_lnP7.js → registration-CIxJvbTo.js} +1 -1
- package/dist/public/sdk/{registration-DeCUrUR9.js → registration-CeOmKyCG.js} +1 -1
- package/dist/public/sdk/{runtime-auth-BAGyfscG.js → runtime-auth-C0V-5znH.js} +1 -1
- package/dist/{esm/sdk/runtime-device-link-DKkMLVor.js → public/sdk/runtime-device-link-B1jpHQSF.js} +1 -1
- package/dist/{esm/sdk/runtime-ecdsa-tempo-0TAVH1xg.js → public/sdk/runtime-ecdsa-tempo-CDSZ3pxS.js} +1 -1
- package/dist/public/sdk/{runtime-email-otp-DoHa8Hif.js → runtime-email-otp-DXuxFOjL.js} +1 -1
- package/dist/public/sdk/{runtime-export-CAt17IFH.js → runtime-export-Ba12ChDI.js} +1 -1
- package/dist/public/sdk/{runtime-near-BQX9Jk9Z.js → runtime-near-DRrdWzmr.js} +1 -1
- package/dist/public/sdk/{runtime-preferences-BuKTIpv6.js → runtime-preferences-BWyhRaBA.js} +1 -1
- package/dist/public/sdk/{runtime-recovery-DyxJKKNw.js → runtime-recovery-DlJlaZlf.js} +1 -1
- package/dist/public/sdk/{runtime-recovery-codes-CWmt0FDB.js → runtime-recovery-codes-CuqYWqK7.js} +1 -1
- package/dist/public/sdk/{shared-BVps1f3F.js → shared-B95wnpoD.js} +1 -1
- package/dist/public/sdk/transaction-activity-CpDMkSPm.js +1 -0
- package/dist/public/sdk/tx-confirm-ui.js +186 -71
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/public/sdk/wallet-ui.css +1 -1
- package/dist/{esm/sdk/walletRecoveryAdminProof-CIoLawfC.js → public/sdk/walletRecoveryAdminProof-CtH8_lph.js} +1 -1
- package/dist/public/wallet-assets.manifest.json +50 -50
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -0
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-activity.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-receipt.d.ts +25 -6
- package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MapPinIcon.d.ts +2 -0
- package/package.json +1 -1
- package/dist/esm/react/components/AccountMenuButton/SegmentedControl.js +0 -77
- package/dist/esm/sdk/adapters-La60hveX.js +0 -2
- package/dist/esm/sdk/appearance-token-vars-Bu6YUWmf.js +0 -2
- package/dist/esm/sdk/transaction-activity-D5f-Yn9t.js +0 -1
- package/dist/public/sdk/adapters-La60hveX.js +0 -2
- package/dist/public/sdk/appearance-token-vars-Bu6YUWmf.js +0 -2
- package/dist/public/sdk/transaction-activity-D5f-Yn9t.js +0 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/SegmentedControl.d.ts +0 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
import{nt as e,ot as t}from"./activeWalletSession-BtEHhe99.js";import{r as n}from"./base64-BmKR3UqU.js";import{r,t as i}from"./secureRandomId-8LSc91aN.js";import{o as a}from"./signerSlot-CpyIfl3J.js";import{l as o}from"./wallet-recovery-BEui57xM.js";import{n as s,s as c,t as l,u}from"./helpers-BXezXx19.js";import{i as ee}from"./pendingWalletRecoveryCodeBackup-DWeemdJv.js";import{t as d}from"./walletCustodyOperation-BO_tSfGY.js";import{t as f}from"./webauthnPromptCoordinator-CBkTiMP0.js";import{i as p}from"./collectAuthenticationCredentialForChallengeB64u-CSwy9csE.js";function m(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===5&&n.every(e=>[`ok`,`challengeId`,`challenge_digest`,`expiresAtMs`,`otpChannel`].includes(e))&&t.get(`ok`)===!0)return{kind:`success`,challengeId:t.get(`challengeId`),challengeDigest:t.get(`challenge_digest`),expiresAtMs:t.get(`expiresAtMs`),otpChannel:t.get(`otpChannel`)};let r=[`ok`,`code`,`message`,`retryAfterMs`];if((t.size===3||t.size===4)&&n.every(e=>r.includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`&&typeof t.get(`message`)==`string`&&(t.size===3||typeof t.get(`retryAfterMs`)==`number`)){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function h(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/custody/email-otp/challenge`,body:{walletId:e.walletId,providerSubjectId:e.providerSubjectId,operation:e.operation,payload:e.payload,...e.requestOrigin?{requestOrigin:e.requestOrigin}:{}},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`Email OTP challenge request failed`}}let n=m(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status!==200||n.kind!==`success`)return{kind:t.status>=400&&t.status<500?`rejected`:`transport_failed`,message:r||`Email OTP challenge failed (HTTP ${t.status})`};let i=typeof n.challengeId==`string`?n.challengeId.trim():``,a=typeof n.challengeDigest==`string`?n.challengeDigest.trim():``,o=Number(n.expiresAtMs),s=typeof n.otpChannel==`string`?n.otpChannel.trim():``;return!i||!a||!Number.isSafeInteger(o)||o<=0||!s?{kind:`transport_failed`,message:`Email OTP challenge returned an unusable payload`}:{kind:`ready`,challengeId:i,challenge_digest:a,expiresAtMs:o,otpChannel:s}}function g(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[`ok`,`activeCodeCount`,`totalCodeCount`,`issuedAtMs`,`storeVersion`,`backupOutstanding`],r=[...t.keys()];if(t.size===n.length&&r.every(e=>n.includes(e))&&t.get(`ok`)===!0)return{kind:`success`,activeCodeCount:t.get(`activeCodeCount`),totalCodeCount:t.get(`totalCodeCount`),issuedAtMs:t.get(`issuedAtMs`),storeVersion:t.get(`storeVersion`),backupOutstanding:t.get(`backupOutstanding`)};let i=[`ok`,`code`,`message`];if(t.size===i.length&&r.every(e=>i.includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function _(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/${encodeURIComponent(e.walletId)}/recovery/status`,body:{requestId:e.requestId,factorProof:e.factorProof},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`recovery status request failed`}}let n=g(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===401||t.status===403)return{kind:`unauthorized`,message:r||`recovery status is unauthorized`};if(t.status===404)return{kind:`no_recovery_set`,message:r||`this wallet has no recovery set`};if(t.status!==200)return{kind:`transport_failed`,message:r||`recovery status failed (HTTP ${t.status})`};if(n.kind!==`success`)return{kind:`transport_failed`,message:`recovery status returned an unusable payload`};let i=Number(n.activeCodeCount),a=Number(n.totalCodeCount),o=Number(n.issuedAtMs),s=typeof n.storeVersion==`string`?n.storeVersion.trim():``;return!Number.isSafeInteger(i)||i<0||!Number.isSafeInteger(a)||a<i||!Number.isSafeInteger(o)||o<=0||!s||typeof n.backupOutstanding!=`boolean`?{kind:`transport_failed`,message:`recovery status returned an unusable payload`}:{kind:`ready`,walletId:e.walletId,activeCodeCount:i,totalCodeCount:a,issuedAtMs:o,storeVersion:s,backupOutstanding:n.backupOutstanding,pendingLocalBackup:!1}}function v(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===2&&n.includes(`ok`)&&n.includes(`issuedAtMs`)&&t.get(`ok`)===!0)return{kind:`success`,issuedAtMs:t.get(`issuedAtMs`)};if(t.size===3&&n.includes(`ok`)&&n.includes(`code`)&&n.includes(`message`)&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function y(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/recovery/acknowledge-backup`,body:{walletId:e.walletId,requestId:e.requestId,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:e.factorProof},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`recovery backup acknowledgement failed`}}let n=v(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===401||t.status===403)return{kind:`unauthorized`,message:r||`recovery backup acknowledgement is unauthorized`};if(t.status===404)return{kind:`no_recovery_set`,message:r||`this wallet has no recovery set`};if(t.status===409)return{kind:`conflict`,message:r||`Recovery codes changed. Check status and review the current set.`};if(t.status!==200)return{kind:`transport_failed`,message:r||`recovery backup acknowledgement failed (HTTP ${t.status})`};if(n.kind!==`success`)return{kind:`transport_failed`,message:`recovery backup acknowledgement returned an unusable payload`};let i=Number(n.issuedAtMs);return!Number.isSafeInteger(i)||i<=0?{kind:`transport_failed`,message:`recovery backup acknowledgement returned an unusable payload`}:{kind:`acknowledged`,walletId:e.walletId,issuedAtMs:i}}function b(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===3&&n.every(e=>[`ok`,`issuedAtMs`,`storeVersion`].includes(e))&&t.get(`ok`)===!0)return{kind:`success`,issuedAtMs:t.get(`issuedAtMs`),storeVersion:t.get(`storeVersion`)};if(t.size===3&&n.every(e=>[`ok`,`code`,`message`].includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function x(e){let t=await S({relayUrl:e.relayUrl,path:`/wallets/recovery/rotate`,body:{walletId:e.walletId,expectedStoreVersion:e.expectedStoreVersion,manifestKekWraps:e.replacement.manifestKekWraps,entries:[e.replacement.entry],recoveryCodeLocators:e.recoveryCodeLocators,factorProof:e.factorProof},fetchImpl:e.fetchImpl}),n=b(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===200&&n.kind===`success`){let e=Number(n.issuedAtMs),t=typeof n.storeVersion==`string`?n.storeVersion.trim():``;return!Number.isSafeInteger(e)||e<=0||!t?{kind:`transport_failed`,message:`rotation returned an unusable response`}:{kind:`rotated`,issuedAtMs:e,storeVersion:t}}return t.status===404?{kind:`no_recovery_set`,message:r||`no recovery set`}:t.status===409?{kind:`conflict`,message:r||`recovery set changed`}:t.status===400?{kind:`rejected`,message:r||`rotation rejected`}:{kind:`transport_failed`,message:r||`rotation failed (HTTP ${t.status})`}}async function S(n){let r=`${t(n.relayUrl)}${n.path}`;return await(n.fetchImpl||fetch)(r,e({headers:{Accept:`application/json`},body:n.body}))}var C=class extends Error{code=`wallet_origin_webauthn_unavailable`;constructor(e){super(e),this.name=`WalletOriginWebAuthnUnavailableError`}};async function w(e,t,n){let r=T(e,t);try{return e===`create`?await navigator.credentials.create({publicKey:r,...n.abortSignal?{signal:n.abortSignal}:{}}):await navigator.credentials.get({publicKey:r,...n.abortSignal?{signal:n.abortSignal}:{}})}catch(t){throw e===`create`&&(N(t)||P(t))?new C(`Wallet-origin WebAuthn registration is unavailable: ${F(t)}`):t}}function T(e,t){return e===`create`?E(t):D(t)}function E(e){return{...e,challenge:M(e.challenge),user:{...e.user,id:M(e.user.id)},excludeCredentials:e.excludeCredentials?.map(O),extensions:k(e.extensions)}}function D(e){return{...e,challenge:M(e.challenge),allowCredentials:e.allowCredentials?.map(O),extensions:k(e.extensions)}}function O(e){return{...e,id:M(e.id)}}function k(e){if(!e)return e;let t={...e},n=t.prf;if(n&&typeof n==`object`){let e={...n};if(e.eval&&typeof e.eval==`object`&&(e.eval=A(e.eval)),e.evalByCredential&&typeof e.evalByCredential==`object`){let t={};for(let[n,r]of Object.entries(e.evalByCredential))t[n]=r&&typeof r==`object`?A(r):r;e.evalByCredential=t}t.prf=e}return t}function A(e){return{...e,...j(e.first)?{first:M(e.first)}:{},...j(e.second)?{second:M(e.second)}:{}}}function j(e){return e instanceof ArrayBuffer||ArrayBuffer.isView(e)}function M(e){if(e instanceof ArrayBuffer)return e.slice(0);let t=e,n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength).slice();if(e instanceof DataView)return new DataView(n.buffer);let r=Object.getPrototypeOf(e).constructor;return new r(n.buffer)}function N(e){let t=F(e);return/origin of the document is not the same as its ancestors/i.test(t)}function P(e){let t=I(e),n=F(e),r=t===`NotAllowedError`,i=/document is not focused|not focused|focus/i.test(n);return!!(r&&i)}function F(e){return String(e?.message||``)}function I(e){let t=e?.name;return typeof t==`string`?t:``}function L(e,t){return(e||t||``).toLowerCase()}function R(e){let t=n(String(e||``));if(t.length!==32)throw Error(`Invalid WebAuthn challenge: expected 32 bytes, got ${t.length}`);return t}function z(e){if(e.kind!==`wallet_registration`)throw Error(`Wallet registration challenge is unavailable`);return e.challengeB64u}function B(e){let t=a(String(e.walletId||``).trim());if(String(e.intendedUserName||``).trim()!==String(t))throw Error(`WebAuthn registration user.name must match walletId`);return{walletId:t}}var V=class{rpIdOverride;abortController;removePageAbortHandlers;removeExternalAbortListener;constructor(e){this.rpIdOverride=e}getRpId(){try{return L(this.rpIdOverride,window?.location?.hostname)}catch{return this.rpIdOverride||``}}getAuthenticationCredentialsSerializedForChallengeB64u(e){let t=`webauthn-get-${i(12,`WebAuthn get request IDs`)}`;return f.runImmediate({owner:{kind:`wallet_request`,requestId:t,operation:`authentication`},operation:this.executeAuthenticationCredential.bind(this,e)})}async executeAuthenticationCredential({subjectId:e,challengeB64u:t,allowCredentials:r=[],includeSecondPrfOutput:i=!1,cancellation:a={kind:`none`}}){this.abortController=new AbortController,this.removePageAbortHandlers=q(this.abortController),this.removeExternalAbortListener=H(this.abortController,a);let o=this.getRpId(),u={challenge:R(t),rpId:o,userVerification:`preferred`,timeout:6e4,extensions:{prf:{eval:{first:l(),second:s()}}}};r.length>0&&(u.allowCredentials=r.map(e=>({id:n(e.id),type:`public-key`,transports:e.transports})));try{let e=c({credential:await w(`get`,u,{abortSignal:this.abortController.signal}),firstPrfOutput:!0,secondPrfOutput:i});return G(e,t),e}finally{this.removePageAbortHandlers?.(),this.removePageAbortHandlers=void 0,this.removeExternalAbortListener?.(),this.removeExternalAbortListener=void 0,this.abortController=void 0}}generateRegistrationCredentialsInternal(e){switch(e.prompt.kind){case`reserved`:return f.runReserved({reservation:e.prompt.reservation,owner:e.prompt.owner,operation:this.executeRegistrationCredential.bind(this,e)});case`immediate`:return f.runImmediate({owner:{kind:`wallet_request`,requestId:e.prompt.requestId,operation:`registration`},operation:this.executeRegistrationCredential.bind(this,e)})}}async executeRegistrationCredential(e){this.abortController=new AbortController,this.removePageAbortHandlers=q(this.abortController),this.removeExternalAbortListener=H(this.abortController,e.prompt.cancellation);let t=this.getRpId(),r=B({walletId:e.walletId,intendedUserName:e.intendedUserName}),i=e.kind===`wallet_recovery`?e.recoveryRegistration:null,a=e.kind===`wallet_add_auth_method`?e.registration:null,o=i??a,c=o?.rpId??t;if(o&&c!==t)throw Error(`Wallet recovery RP ID does not match the wallet origin`);let u=o?{challenge:R(o.challengeB64u),rp:{name:`Seams Wallet`,id:c},user:{id:n(o.user.idB64u),name:o.user.name,displayName:o.user.displayName},pubKeyCredParams:o.pubKeyCredParams.map(e=>({...e})),authenticatorSelection:{...o.authenticatorSelection},timeout:o.timeoutMs,attestation:o.attestation,extensions:{prf:{eval:{first:n(o.extensions.prf.eval.firstB64u),second:n(o.extensions.prf.eval.secondB64u)}}},excludeCredentials:o.excludeCredentials.map(e=>({type:e.type,id:n(e.id)}))}:{challenge:R(z(e)),rp:{name:`WebAuthn Passkey`,id:c},user:{id:new TextEncoder().encode(K(e.walletId,e.signerSlot)),name:r.walletId,displayName:r.walletId},pubKeyCredParams:[{alg:-7,type:`public-key`},{alg:-257,type:`public-key`}],authenticatorSelection:{residentKey:`required`,userVerification:`preferred`},timeout:6e4,attestation:`none`,extensions:{prf:{eval:{first:l(),second:s()}}}};try{return await w(`create`,u,{abortSignal:this.abortController.signal})}finally{this.removePageAbortHandlers?.(),this.removePageAbortHandlers=void 0,this.removeExternalAbortListener?.(),this.removeExternalAbortListener=void 0,this.abortController=void 0}}};function H(e,t){if(t.kind===`none`)return;let n=t.signal,r=e.abort.bind(e);if(n.aborted){r();return}return n.addEventListener(`abort`,r,{once:!0}),n.removeEventListener.bind(n,`abort`,r)}function U(e){return String(e||``).trim().replace(/=+$/g,``)}function W(e){let t=String(e.response?.clientDataJSON||``).trim();if(!t)throw Error(`WebAuthn authentication response missing clientDataJSON`);let r=``;try{r=new TextDecoder().decode(n(t))}catch(e){throw Error(`WebAuthn authentication response has invalid clientDataJSON encoding: ${e instanceof Error?e.message:String(e)}`)}let i;try{i=JSON.parse(r)}catch(e){throw Error(`WebAuthn authentication response has invalid clientDataJSON JSON: ${e instanceof Error?e.message:String(e)}`)}let a=i&&typeof i==`object`?i.challenge:void 0;if(typeof a!=`string`||!a.trim())throw Error(`WebAuthn authentication response clientDataJSON missing challenge`);return a}function G(e,t){let n=U(W(e)),r=U(t);if(n!==r)throw Error(`Unexpected authentication response challenge "${n}", expected "${r}"`)}function K(e,t){return t===void 0||t===1?e:`${e} (${t})`}function q(e){let t=()=>{document.hidden&&e.abort()},n=()=>{e.abort()},r=()=>{e.abort()};return document.addEventListener(`visibilitychange`,t,{passive:!0}),window.addEventListener(`pagehide`,n,{passive:!0}),window.addEventListener(`beforeunload`,r,{passive:!0}),()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`pagehide`,n),window.removeEventListener(`beforeunload`,r)}}async function J(e){let t=e.request.payload.walletId,n=window.location.origin,r=await d({walletId:t,operation:e.request.operation,payload:e.request.payload,requestOrigin:n}),i=await p({credentialStore:o,touchIdPrompt:new V(e.rpId),walletId:t,challengeB64u:r,includeSecondPrfOutput:!1}),a=ee(i);if(!a)throw Error(`Wallet recovery proof did not receive a passkey credential`);return{kind:`passkey`,walletId:t,rpId:e.rpId,credentialIdB64u:a,challenge_digest:r,webauthn_authentication:u(i)}}function Y(){return r(`wallet-recovery-admin`,16,`wallet recovery administration request IDs`)}async function X(e){let t=Y(),n={walletId:e.walletId,requestId:t},r=await J({rpId:e.rpId,request:{operation:`recovery_status`,payload:n}});return await _({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,factorProof:r})}async function Z(e){let t=Y(),n={walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs},r=await J({rpId:e.rpId,request:{operation:`recovery_backup_acknowledge`,payload:n}});return await y({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:r})}async function Q(e){let t=await o.resolveSelectedWalletAuthority(e);if(t.kind!==`resolved`||t.selection.lockState!==`unlocked`||String(t.selection.walletId)!==e||t.selection.walletAuthMethodId!==t.authMethod.walletAuthMethodId||t.authMethod.kind!==`email_otp`||t.authMethod.status!==`active`||t.authority.state!==`active`||String(t.authMethod.walletId)!==e||String(t.authority.walletId)!==e)throw Error(`Unlock this wallet with its active Email OTP method`);let n=await o.listWalletAuthMethodsForWallet(e),r=null;for(let e of n)if(!(e.kind!==`email_otp`||e.status!==`active`||e.localStatus!==`synced`||String(e.authority.bindingId)!==String(t.authMethod.walletAuthMethodId))){if(r!==null)throw Error(`The selected Email OTP owner method is duplicated`);r=String(e.authority.factor.providerUserId||``).trim()}if(!r)throw Error(`The selected Email OTP owner method is unavailable on this wallet`);return{walletAuthMethodId:String(t.authMethod.walletAuthMethodId),providerSubjectId:r}}async function $(e){let t=e.request.payload.walletId,{providerSubjectId:n}=await Q(t),r=window.location.origin,i=await d({walletId:t,operation:e.request.operation,payload:e.request.payload,requestOrigin:r}),a=await h({relayUrl:e.relayUrl,walletId:t,providerSubjectId:n,operation:e.request.operation,payload:e.request.payload,requestOrigin:r});if(a.kind!==`ready`)throw Error(a.message);if(a.challenge_digest!==i)throw Error(`Recovery Email OTP challenge does not match this operation`);let o=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:e.request.operation,walletId:t,emailAddress:`your email`,challengeId:a.challengeId});if(o.challengeId!==a.challengeId)throw Error(`Recovery Email OTP confirmation changed its challenge`);return{kind:`email_otp`,provider_subject_id:n,challenge_id:o.challengeId,otp_code:o.otpCode,challenge_digest:i}}async function te(e){let t=Y(),n={walletId:e.walletId,requestId:t},r=await $({context:e.context,relayUrl:e.relayUrl,request:{operation:`recovery_status`,payload:n}});return await _({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,factorProof:r})}async function ne(e){let t=Y(),n={walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs},r=await $({context:e.context,relayUrl:e.relayUrl,request:{operation:`recovery_backup_acknowledge`,payload:n}});return await y({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:r})}export{X as a,_ as c,te as i,h as l,Z as n,Q as o,$ as r,V as s,ne as t,x as u};
|
|
1
|
+
import{nt as e,ot as t}from"./activeWalletSession-BtEHhe99.js";import{r as n}from"./base64-BmKR3UqU.js";import{r,t as i}from"./secureRandomId-8LSc91aN.js";import{o as a}from"./signerSlot-CpyIfl3J.js";import{l as o}from"./wallet-recovery-BEui57xM.js";import{n as s,s as c,t as l,u}from"./helpers-BXezXx19.js";import{i as ee}from"./pendingWalletRecoveryCodeBackup-LbstFwcY.js";import{t as d}from"./walletCustodyOperation-BO_tSfGY.js";import{t as f}from"./webauthnPromptCoordinator-CBkTiMP0.js";import{i as p}from"./collectAuthenticationCredentialForChallengeB64u-CSwy9csE.js";function m(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===5&&n.every(e=>[`ok`,`challengeId`,`challenge_digest`,`expiresAtMs`,`otpChannel`].includes(e))&&t.get(`ok`)===!0)return{kind:`success`,challengeId:t.get(`challengeId`),challengeDigest:t.get(`challenge_digest`),expiresAtMs:t.get(`expiresAtMs`),otpChannel:t.get(`otpChannel`)};let r=[`ok`,`code`,`message`,`retryAfterMs`];if((t.size===3||t.size===4)&&n.every(e=>r.includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`&&typeof t.get(`message`)==`string`&&(t.size===3||typeof t.get(`retryAfterMs`)==`number`)){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function h(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/custody/email-otp/challenge`,body:{walletId:e.walletId,providerSubjectId:e.providerSubjectId,operation:e.operation,payload:e.payload,...e.requestOrigin?{requestOrigin:e.requestOrigin}:{}},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`Email OTP challenge request failed`}}let n=m(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status!==200||n.kind!==`success`)return{kind:t.status>=400&&t.status<500?`rejected`:`transport_failed`,message:r||`Email OTP challenge failed (HTTP ${t.status})`};let i=typeof n.challengeId==`string`?n.challengeId.trim():``,a=typeof n.challengeDigest==`string`?n.challengeDigest.trim():``,o=Number(n.expiresAtMs),s=typeof n.otpChannel==`string`?n.otpChannel.trim():``;return!i||!a||!Number.isSafeInteger(o)||o<=0||!s?{kind:`transport_failed`,message:`Email OTP challenge returned an unusable payload`}:{kind:`ready`,challengeId:i,challenge_digest:a,expiresAtMs:o,otpChannel:s}}function g(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[`ok`,`activeCodeCount`,`totalCodeCount`,`issuedAtMs`,`storeVersion`,`backupOutstanding`],r=[...t.keys()];if(t.size===n.length&&r.every(e=>n.includes(e))&&t.get(`ok`)===!0)return{kind:`success`,activeCodeCount:t.get(`activeCodeCount`),totalCodeCount:t.get(`totalCodeCount`),issuedAtMs:t.get(`issuedAtMs`),storeVersion:t.get(`storeVersion`),backupOutstanding:t.get(`backupOutstanding`)};let i=[`ok`,`code`,`message`];if(t.size===i.length&&r.every(e=>i.includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function _(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/${encodeURIComponent(e.walletId)}/recovery/status`,body:{requestId:e.requestId,factorProof:e.factorProof},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`recovery status request failed`}}let n=g(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===401||t.status===403)return{kind:`unauthorized`,message:r||`recovery status is unauthorized`};if(t.status===404)return{kind:`no_recovery_set`,message:r||`this wallet has no recovery set`};if(t.status!==200)return{kind:`transport_failed`,message:r||`recovery status failed (HTTP ${t.status})`};if(n.kind!==`success`)return{kind:`transport_failed`,message:`recovery status returned an unusable payload`};let i=Number(n.activeCodeCount),a=Number(n.totalCodeCount),o=Number(n.issuedAtMs),s=typeof n.storeVersion==`string`?n.storeVersion.trim():``;return!Number.isSafeInteger(i)||i<0||!Number.isSafeInteger(a)||a<i||!Number.isSafeInteger(o)||o<=0||!s||typeof n.backupOutstanding!=`boolean`?{kind:`transport_failed`,message:`recovery status returned an unusable payload`}:{kind:`ready`,walletId:e.walletId,activeCodeCount:i,totalCodeCount:a,issuedAtMs:o,storeVersion:s,backupOutstanding:n.backupOutstanding,pendingLocalBackup:!1}}function v(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===2&&n.includes(`ok`)&&n.includes(`issuedAtMs`)&&t.get(`ok`)===!0)return{kind:`success`,issuedAtMs:t.get(`issuedAtMs`)};if(t.size===3&&n.includes(`ok`)&&n.includes(`code`)&&n.includes(`message`)&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function y(e){let t;try{t=await S({relayUrl:e.relayUrl,path:`/wallets/recovery/acknowledge-backup`,body:{walletId:e.walletId,requestId:e.requestId,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:e.factorProof},fetchImpl:e.fetchImpl})}catch(e){return{kind:`transport_failed`,message:e instanceof Error?e.message:`recovery backup acknowledgement failed`}}let n=v(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===401||t.status===403)return{kind:`unauthorized`,message:r||`recovery backup acknowledgement is unauthorized`};if(t.status===404)return{kind:`no_recovery_set`,message:r||`this wallet has no recovery set`};if(t.status===409)return{kind:`conflict`,message:r||`Recovery codes changed. Check status and review the current set.`};if(t.status!==200)return{kind:`transport_failed`,message:r||`recovery backup acknowledgement failed (HTTP ${t.status})`};if(n.kind!==`success`)return{kind:`transport_failed`,message:`recovery backup acknowledgement returned an unusable payload`};let i=Number(n.issuedAtMs);return!Number.isSafeInteger(i)||i<=0?{kind:`transport_failed`,message:`recovery backup acknowledgement returned an unusable payload`}:{kind:`acknowledged`,walletId:e.walletId,issuedAtMs:i}}function b(e){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)return{kind:`invalid`};let t=new Map(Object.entries(e)),n=[...t.keys()];if(t.size===3&&n.every(e=>[`ok`,`issuedAtMs`,`storeVersion`].includes(e))&&t.get(`ok`)===!0)return{kind:`success`,issuedAtMs:t.get(`issuedAtMs`),storeVersion:t.get(`storeVersion`)};if(t.size===3&&n.every(e=>[`ok`,`code`,`message`].includes(e))&&t.get(`ok`)===!1&&typeof t.get(`code`)==`string`){let e=t.get(`message`);return{kind:`failure`,message:typeof e==`string`&&e.trim()?e.trim():null}}return{kind:`invalid`}}async function x(e){let t=await S({relayUrl:e.relayUrl,path:`/wallets/recovery/rotate`,body:{walletId:e.walletId,expectedStoreVersion:e.expectedStoreVersion,manifestKekWraps:e.replacement.manifestKekWraps,entries:[e.replacement.entry],recoveryCodeLocators:e.recoveryCodeLocators,factorProof:e.factorProof},fetchImpl:e.fetchImpl}),n=b(await t.json().catch(()=>null)),r=n.kind===`failure`&&n.message?n.message:``;if(t.status===200&&n.kind===`success`){let e=Number(n.issuedAtMs),t=typeof n.storeVersion==`string`?n.storeVersion.trim():``;return!Number.isSafeInteger(e)||e<=0||!t?{kind:`transport_failed`,message:`rotation returned an unusable response`}:{kind:`rotated`,issuedAtMs:e,storeVersion:t}}return t.status===404?{kind:`no_recovery_set`,message:r||`no recovery set`}:t.status===409?{kind:`conflict`,message:r||`recovery set changed`}:t.status===400?{kind:`rejected`,message:r||`rotation rejected`}:{kind:`transport_failed`,message:r||`rotation failed (HTTP ${t.status})`}}async function S(n){let r=`${t(n.relayUrl)}${n.path}`;return await(n.fetchImpl||fetch)(r,e({headers:{Accept:`application/json`},body:n.body}))}var C=class extends Error{code=`wallet_origin_webauthn_unavailable`;constructor(e){super(e),this.name=`WalletOriginWebAuthnUnavailableError`}};async function w(e,t,n){let r=T(e,t);try{return e===`create`?await navigator.credentials.create({publicKey:r,...n.abortSignal?{signal:n.abortSignal}:{}}):await navigator.credentials.get({publicKey:r,...n.abortSignal?{signal:n.abortSignal}:{}})}catch(t){throw e===`create`&&(N(t)||P(t))?new C(`Wallet-origin WebAuthn registration is unavailable: ${F(t)}`):t}}function T(e,t){return e===`create`?E(t):D(t)}function E(e){return{...e,challenge:M(e.challenge),user:{...e.user,id:M(e.user.id)},excludeCredentials:e.excludeCredentials?.map(O),extensions:k(e.extensions)}}function D(e){return{...e,challenge:M(e.challenge),allowCredentials:e.allowCredentials?.map(O),extensions:k(e.extensions)}}function O(e){return{...e,id:M(e.id)}}function k(e){if(!e)return e;let t={...e},n=t.prf;if(n&&typeof n==`object`){let e={...n};if(e.eval&&typeof e.eval==`object`&&(e.eval=A(e.eval)),e.evalByCredential&&typeof e.evalByCredential==`object`){let t={};for(let[n,r]of Object.entries(e.evalByCredential))t[n]=r&&typeof r==`object`?A(r):r;e.evalByCredential=t}t.prf=e}return t}function A(e){return{...e,...j(e.first)?{first:M(e.first)}:{},...j(e.second)?{second:M(e.second)}:{}}}function j(e){return e instanceof ArrayBuffer||ArrayBuffer.isView(e)}function M(e){if(e instanceof ArrayBuffer)return e.slice(0);let t=e,n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength).slice();if(e instanceof DataView)return new DataView(n.buffer);let r=Object.getPrototypeOf(e).constructor;return new r(n.buffer)}function N(e){let t=F(e);return/origin of the document is not the same as its ancestors/i.test(t)}function P(e){let t=I(e),n=F(e),r=t===`NotAllowedError`,i=/document is not focused|not focused|focus/i.test(n);return!!(r&&i)}function F(e){return String(e?.message||``)}function I(e){let t=e?.name;return typeof t==`string`?t:``}function L(e,t){return(e||t||``).toLowerCase()}function R(e){let t=n(String(e||``));if(t.length!==32)throw Error(`Invalid WebAuthn challenge: expected 32 bytes, got ${t.length}`);return t}function z(e){if(e.kind!==`wallet_registration`)throw Error(`Wallet registration challenge is unavailable`);return e.challengeB64u}function B(e){let t=a(String(e.walletId||``).trim());if(String(e.intendedUserName||``).trim()!==String(t))throw Error(`WebAuthn registration user.name must match walletId`);return{walletId:t}}var V=class{rpIdOverride;abortController;removePageAbortHandlers;removeExternalAbortListener;constructor(e){this.rpIdOverride=e}getRpId(){try{return L(this.rpIdOverride,window?.location?.hostname)}catch{return this.rpIdOverride||``}}getAuthenticationCredentialsSerializedForChallengeB64u(e){let t=`webauthn-get-${i(12,`WebAuthn get request IDs`)}`;return f.runImmediate({owner:{kind:`wallet_request`,requestId:t,operation:`authentication`},operation:this.executeAuthenticationCredential.bind(this,e)})}async executeAuthenticationCredential({subjectId:e,challengeB64u:t,allowCredentials:r=[],includeSecondPrfOutput:i=!1,cancellation:a={kind:`none`}}){this.abortController=new AbortController,this.removePageAbortHandlers=q(this.abortController),this.removeExternalAbortListener=H(this.abortController,a);let o=this.getRpId(),u={challenge:R(t),rpId:o,userVerification:`preferred`,timeout:6e4,extensions:{prf:{eval:{first:l(),second:s()}}}};r.length>0&&(u.allowCredentials=r.map(e=>({id:n(e.id),type:`public-key`,transports:e.transports})));try{let e=c({credential:await w(`get`,u,{abortSignal:this.abortController.signal}),firstPrfOutput:!0,secondPrfOutput:i});return G(e,t),e}finally{this.removePageAbortHandlers?.(),this.removePageAbortHandlers=void 0,this.removeExternalAbortListener?.(),this.removeExternalAbortListener=void 0,this.abortController=void 0}}generateRegistrationCredentialsInternal(e){switch(e.prompt.kind){case`reserved`:return f.runReserved({reservation:e.prompt.reservation,owner:e.prompt.owner,operation:this.executeRegistrationCredential.bind(this,e)});case`immediate`:return f.runImmediate({owner:{kind:`wallet_request`,requestId:e.prompt.requestId,operation:`registration`},operation:this.executeRegistrationCredential.bind(this,e)})}}async executeRegistrationCredential(e){this.abortController=new AbortController,this.removePageAbortHandlers=q(this.abortController),this.removeExternalAbortListener=H(this.abortController,e.prompt.cancellation);let t=this.getRpId(),r=B({walletId:e.walletId,intendedUserName:e.intendedUserName}),i=e.kind===`wallet_recovery`?e.recoveryRegistration:null,a=e.kind===`wallet_add_auth_method`?e.registration:null,o=i??a,c=o?.rpId??t;if(o&&c!==t)throw Error(`Wallet recovery RP ID does not match the wallet origin`);let u=o?{challenge:R(o.challengeB64u),rp:{name:`Seams Wallet`,id:c},user:{id:n(o.user.idB64u),name:o.user.name,displayName:o.user.displayName},pubKeyCredParams:o.pubKeyCredParams.map(e=>({...e})),authenticatorSelection:{...o.authenticatorSelection},timeout:o.timeoutMs,attestation:o.attestation,extensions:{prf:{eval:{first:n(o.extensions.prf.eval.firstB64u),second:n(o.extensions.prf.eval.secondB64u)}}},excludeCredentials:o.excludeCredentials.map(e=>({type:e.type,id:n(e.id)}))}:{challenge:R(z(e)),rp:{name:`WebAuthn Passkey`,id:c},user:{id:new TextEncoder().encode(K(e.walletId,e.signerSlot)),name:r.walletId,displayName:r.walletId},pubKeyCredParams:[{alg:-7,type:`public-key`},{alg:-257,type:`public-key`}],authenticatorSelection:{residentKey:`required`,userVerification:`preferred`},timeout:6e4,attestation:`none`,extensions:{prf:{eval:{first:l(),second:s()}}}};try{return await w(`create`,u,{abortSignal:this.abortController.signal})}finally{this.removePageAbortHandlers?.(),this.removePageAbortHandlers=void 0,this.removeExternalAbortListener?.(),this.removeExternalAbortListener=void 0,this.abortController=void 0}}};function H(e,t){if(t.kind===`none`)return;let n=t.signal,r=e.abort.bind(e);if(n.aborted){r();return}return n.addEventListener(`abort`,r,{once:!0}),n.removeEventListener.bind(n,`abort`,r)}function U(e){return String(e||``).trim().replace(/=+$/g,``)}function W(e){let t=String(e.response?.clientDataJSON||``).trim();if(!t)throw Error(`WebAuthn authentication response missing clientDataJSON`);let r=``;try{r=new TextDecoder().decode(n(t))}catch(e){throw Error(`WebAuthn authentication response has invalid clientDataJSON encoding: ${e instanceof Error?e.message:String(e)}`)}let i;try{i=JSON.parse(r)}catch(e){throw Error(`WebAuthn authentication response has invalid clientDataJSON JSON: ${e instanceof Error?e.message:String(e)}`)}let a=i&&typeof i==`object`?i.challenge:void 0;if(typeof a!=`string`||!a.trim())throw Error(`WebAuthn authentication response clientDataJSON missing challenge`);return a}function G(e,t){let n=U(W(e)),r=U(t);if(n!==r)throw Error(`Unexpected authentication response challenge "${n}", expected "${r}"`)}function K(e,t){return t===void 0||t===1?e:`${e} (${t})`}function q(e){let t=()=>{document.hidden&&e.abort()},n=()=>{e.abort()},r=()=>{e.abort()};return document.addEventListener(`visibilitychange`,t,{passive:!0}),window.addEventListener(`pagehide`,n,{passive:!0}),window.addEventListener(`beforeunload`,r,{passive:!0}),()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`pagehide`,n),window.removeEventListener(`beforeunload`,r)}}async function J(e){let t=e.request.payload.walletId,n=window.location.origin,r=await d({walletId:t,operation:e.request.operation,payload:e.request.payload,requestOrigin:n}),i=await p({credentialStore:o,touchIdPrompt:new V(e.rpId),walletId:t,challengeB64u:r,includeSecondPrfOutput:!1}),a=ee(i);if(!a)throw Error(`Wallet recovery proof did not receive a passkey credential`);return{kind:`passkey`,walletId:t,rpId:e.rpId,credentialIdB64u:a,challenge_digest:r,webauthn_authentication:u(i)}}function Y(){return r(`wallet-recovery-admin`,16,`wallet recovery administration request IDs`)}async function X(e){let t=Y(),n={walletId:e.walletId,requestId:t},r=await J({rpId:e.rpId,request:{operation:`recovery_status`,payload:n}});return await _({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,factorProof:r})}async function Z(e){let t=Y(),n={walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs},r=await J({rpId:e.rpId,request:{operation:`recovery_backup_acknowledge`,payload:n}});return await y({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:r})}async function Q(e){let t=await o.resolveSelectedWalletAuthority(e);if(t.kind!==`resolved`||t.selection.lockState!==`unlocked`||String(t.selection.walletId)!==e||t.selection.walletAuthMethodId!==t.authMethod.walletAuthMethodId||t.authMethod.kind!==`email_otp`||t.authMethod.status!==`active`||t.authority.state!==`active`||String(t.authMethod.walletId)!==e||String(t.authority.walletId)!==e)throw Error(`Unlock this wallet with its active Email OTP method`);let n=await o.listWalletAuthMethodsForWallet(e),r=null;for(let e of n)if(!(e.kind!==`email_otp`||e.status!==`active`||e.localStatus!==`synced`||String(e.authority.bindingId)!==String(t.authMethod.walletAuthMethodId))){if(r!==null)throw Error(`The selected Email OTP owner method is duplicated`);r=String(e.authority.factor.providerUserId||``).trim()}if(!r)throw Error(`The selected Email OTP owner method is unavailable on this wallet`);return{walletAuthMethodId:String(t.authMethod.walletAuthMethodId),providerSubjectId:r}}async function $(e){let t=e.request.payload.walletId,{providerSubjectId:n}=await Q(t),r=window.location.origin,i=await d({walletId:t,operation:e.request.operation,payload:e.request.payload,requestOrigin:r}),a=await h({relayUrl:e.relayUrl,walletId:t,providerSubjectId:n,operation:e.request.operation,payload:e.request.payload,requestOrigin:r});if(a.kind!==`ready`)throw Error(a.message);if(a.challenge_digest!==i)throw Error(`Recovery Email OTP challenge does not match this operation`);let o=await e.context.signingEngine.requestEmailOtpOwnerConfirmation({purpose:e.request.operation,walletId:t,emailAddress:`your email`,challengeId:a.challengeId});if(o.challengeId!==a.challengeId)throw Error(`Recovery Email OTP confirmation changed its challenge`);return{kind:`email_otp`,provider_subject_id:n,challenge_id:o.challengeId,otp_code:o.otpCode,challenge_digest:i}}async function te(e){let t=Y(),n={walletId:e.walletId,requestId:t},r=await $({context:e.context,relayUrl:e.relayUrl,request:{operation:`recovery_status`,payload:n}});return await _({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,factorProof:r})}async function ne(e){let t=Y(),n={walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs},r=await $({context:e.context,relayUrl:e.relayUrl,request:{operation:`recovery_backup_acknowledge`,payload:n}});return await y({relayUrl:e.relayUrl,walletId:e.walletId,requestId:t,expectedIssuedAtMs:e.expectedIssuedAtMs,factorProof:r})}export{X as a,_ as c,te as i,h as l,Z as n,Q as o,$ as r,V as s,ne as t,x as u};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"packageName": "@seams/wallet",
|
|
4
|
-
"packageVersion": "0.
|
|
4
|
+
"packageVersion": "0.22.0",
|
|
5
5
|
"assetRoot": "dist/public",
|
|
6
6
|
"sdkBasePath": "/sdk",
|
|
7
7
|
"walletServicePath": "/wallet-service",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"headersManifest": "headers.manifest.json",
|
|
10
10
|
"versionSkewContract": {
|
|
11
11
|
"kind": "wallet_iframe_protocol_handshake",
|
|
12
|
-
"packageVersion": "0.
|
|
12
|
+
"packageVersion": "0.22.0",
|
|
13
13
|
"protocolVersion": "16.0.0",
|
|
14
14
|
"readyPayloadField": "protocolVersion",
|
|
15
15
|
"failureMode": "typed_error",
|
|
@@ -107,8 +107,8 @@
|
|
|
107
107
|
]
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
"route": "/sdk/adapters-
|
|
111
|
-
"sourceFile": "sdk/adapters-
|
|
110
|
+
"route": "/sdk/adapters-CgJpSAxH.js",
|
|
111
|
+
"sourceFile": "sdk/adapters-CgJpSAxH.js",
|
|
112
112
|
"owner": "wallet_sdk_asset",
|
|
113
113
|
"routeClass": "javascript",
|
|
114
114
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -131,8 +131,8 @@
|
|
|
131
131
|
]
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
|
-
"route": "/sdk/appearance-token-vars-
|
|
135
|
-
"sourceFile": "sdk/appearance-token-vars-
|
|
134
|
+
"route": "/sdk/appearance-token-vars-BA3KQyEE.js",
|
|
135
|
+
"sourceFile": "sdk/appearance-token-vars-BA3KQyEE.js",
|
|
136
136
|
"owner": "wallet_sdk_asset",
|
|
137
137
|
"routeClass": "javascript",
|
|
138
138
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -563,8 +563,8 @@
|
|
|
563
563
|
]
|
|
564
564
|
},
|
|
565
565
|
{
|
|
566
|
-
"route": "/sdk/ConfirmationDrawer-
|
|
567
|
-
"sourceFile": "sdk/ConfirmationDrawer-
|
|
566
|
+
"route": "/sdk/ConfirmationDrawer-Ck33ZmU-.js",
|
|
567
|
+
"sourceFile": "sdk/ConfirmationDrawer-Ck33ZmU-.js",
|
|
568
568
|
"owner": "wallet_sdk_asset",
|
|
569
569
|
"routeClass": "javascript",
|
|
570
570
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -923,8 +923,8 @@
|
|
|
923
923
|
]
|
|
924
924
|
},
|
|
925
925
|
{
|
|
926
|
-
"route": "/sdk/export-viewer-host-
|
|
927
|
-
"sourceFile": "sdk/export-viewer-host-
|
|
926
|
+
"route": "/sdk/export-viewer-host-C9n-62Pi.js",
|
|
927
|
+
"sourceFile": "sdk/export-viewer-host-C9n-62Pi.js",
|
|
928
928
|
"owner": "wallet_sdk_asset",
|
|
929
929
|
"routeClass": "javascript",
|
|
930
930
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -947,8 +947,8 @@
|
|
|
947
947
|
]
|
|
948
948
|
},
|
|
949
949
|
{
|
|
950
|
-
"route": "/sdk/exportKeypairOperation-
|
|
951
|
-
"sourceFile": "sdk/exportKeypairOperation-
|
|
950
|
+
"route": "/sdk/exportKeypairOperation-Du9HKB8f.js",
|
|
951
|
+
"sourceFile": "sdk/exportKeypairOperation-Du9HKB8f.js",
|
|
952
952
|
"owner": "wallet_sdk_asset",
|
|
953
953
|
"routeClass": "javascript",
|
|
954
954
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -995,8 +995,8 @@
|
|
|
995
995
|
]
|
|
996
996
|
},
|
|
997
997
|
{
|
|
998
|
-
"route": "/sdk/host-
|
|
999
|
-
"sourceFile": "sdk/host-
|
|
998
|
+
"route": "/sdk/host-DoftJdVQ.js",
|
|
999
|
+
"sourceFile": "sdk/host-DoftJdVQ.js",
|
|
1000
1000
|
"owner": "wallet_sdk_asset",
|
|
1001
1001
|
"routeClass": "javascript",
|
|
1002
1002
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1139,8 +1139,8 @@
|
|
|
1139
1139
|
]
|
|
1140
1140
|
},
|
|
1141
1141
|
{
|
|
1142
|
-
"route": "/sdk/localOnly-
|
|
1143
|
-
"sourceFile": "sdk/localOnly-
|
|
1142
|
+
"route": "/sdk/localOnly-CvFSZFUy.js",
|
|
1143
|
+
"sourceFile": "sdk/localOnly-CvFSZFUy.js",
|
|
1144
1144
|
"owner": "wallet_sdk_asset",
|
|
1145
1145
|
"routeClass": "javascript",
|
|
1146
1146
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1163,8 +1163,8 @@
|
|
|
1163
1163
|
]
|
|
1164
1164
|
},
|
|
1165
1165
|
{
|
|
1166
|
-
"route": "/sdk/mountExportPrivateKeySurface-
|
|
1167
|
-
"sourceFile": "sdk/mountExportPrivateKeySurface-
|
|
1166
|
+
"route": "/sdk/mountExportPrivateKeySurface-DdJHWwqY.js",
|
|
1167
|
+
"sourceFile": "sdk/mountExportPrivateKeySurface-DdJHWwqY.js",
|
|
1168
1168
|
"owner": "wallet_sdk_asset",
|
|
1169
1169
|
"routeClass": "javascript",
|
|
1170
1170
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1187,8 +1187,8 @@
|
|
|
1187
1187
|
]
|
|
1188
1188
|
},
|
|
1189
1189
|
{
|
|
1190
|
-
"route": "/sdk/mountRecoveryCodeBackupSurface-
|
|
1191
|
-
"sourceFile": "sdk/mountRecoveryCodeBackupSurface-
|
|
1190
|
+
"route": "/sdk/mountRecoveryCodeBackupSurface-D3QFgMGE.js",
|
|
1191
|
+
"sourceFile": "sdk/mountRecoveryCodeBackupSurface-D3QFgMGE.js",
|
|
1192
1192
|
"owner": "wallet_sdk_asset",
|
|
1193
1193
|
"routeClass": "javascript",
|
|
1194
1194
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1379,8 +1379,8 @@
|
|
|
1379
1379
|
]
|
|
1380
1380
|
},
|
|
1381
1381
|
{
|
|
1382
|
-
"route": "/sdk/pendingWalletRecoveryCodeBackup-
|
|
1383
|
-
"sourceFile": "sdk/pendingWalletRecoveryCodeBackup-
|
|
1382
|
+
"route": "/sdk/pendingWalletRecoveryCodeBackup-LbstFwcY.js",
|
|
1383
|
+
"sourceFile": "sdk/pendingWalletRecoveryCodeBackup-LbstFwcY.js",
|
|
1384
1384
|
"owner": "wallet_sdk_asset",
|
|
1385
1385
|
"routeClass": "javascript",
|
|
1386
1386
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1571,8 +1571,8 @@
|
|
|
1571
1571
|
]
|
|
1572
1572
|
},
|
|
1573
1573
|
{
|
|
1574
|
-
"route": "/sdk/registration-
|
|
1575
|
-
"sourceFile": "sdk/registration-
|
|
1574
|
+
"route": "/sdk/registration-CeOmKyCG.js",
|
|
1575
|
+
"sourceFile": "sdk/registration-CeOmKyCG.js",
|
|
1576
1576
|
"owner": "wallet_sdk_asset",
|
|
1577
1577
|
"routeClass": "javascript",
|
|
1578
1578
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1595,8 +1595,8 @@
|
|
|
1595
1595
|
]
|
|
1596
1596
|
},
|
|
1597
1597
|
{
|
|
1598
|
-
"route": "/sdk/registration-
|
|
1599
|
-
"sourceFile": "sdk/registration-
|
|
1598
|
+
"route": "/sdk/registration-CIxJvbTo.js",
|
|
1599
|
+
"sourceFile": "sdk/registration-CIxJvbTo.js",
|
|
1600
1600
|
"owner": "wallet_sdk_asset",
|
|
1601
1601
|
"routeClass": "javascript",
|
|
1602
1602
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1787,8 +1787,8 @@
|
|
|
1787
1787
|
]
|
|
1788
1788
|
},
|
|
1789
1789
|
{
|
|
1790
|
-
"route": "/sdk/runtime-auth-
|
|
1791
|
-
"sourceFile": "sdk/runtime-auth-
|
|
1790
|
+
"route": "/sdk/runtime-auth-C0V-5znH.js",
|
|
1791
|
+
"sourceFile": "sdk/runtime-auth-C0V-5znH.js",
|
|
1792
1792
|
"owner": "wallet_sdk_asset",
|
|
1793
1793
|
"routeClass": "javascript",
|
|
1794
1794
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1811,8 +1811,8 @@
|
|
|
1811
1811
|
]
|
|
1812
1812
|
},
|
|
1813
1813
|
{
|
|
1814
|
-
"route": "/sdk/runtime-device-link-
|
|
1815
|
-
"sourceFile": "sdk/runtime-device-link-
|
|
1814
|
+
"route": "/sdk/runtime-device-link-B1jpHQSF.js",
|
|
1815
|
+
"sourceFile": "sdk/runtime-device-link-B1jpHQSF.js",
|
|
1816
1816
|
"owner": "wallet_sdk_asset",
|
|
1817
1817
|
"routeClass": "javascript",
|
|
1818
1818
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1835,8 +1835,8 @@
|
|
|
1835
1835
|
]
|
|
1836
1836
|
},
|
|
1837
1837
|
{
|
|
1838
|
-
"route": "/sdk/runtime-ecdsa-tempo-
|
|
1839
|
-
"sourceFile": "sdk/runtime-ecdsa-tempo-
|
|
1838
|
+
"route": "/sdk/runtime-ecdsa-tempo-CDSZ3pxS.js",
|
|
1839
|
+
"sourceFile": "sdk/runtime-ecdsa-tempo-CDSZ3pxS.js",
|
|
1840
1840
|
"owner": "wallet_sdk_asset",
|
|
1841
1841
|
"routeClass": "javascript",
|
|
1842
1842
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1859,8 +1859,8 @@
|
|
|
1859
1859
|
]
|
|
1860
1860
|
},
|
|
1861
1861
|
{
|
|
1862
|
-
"route": "/sdk/runtime-email-otp-
|
|
1863
|
-
"sourceFile": "sdk/runtime-email-otp-
|
|
1862
|
+
"route": "/sdk/runtime-email-otp-DXuxFOjL.js",
|
|
1863
|
+
"sourceFile": "sdk/runtime-email-otp-DXuxFOjL.js",
|
|
1864
1864
|
"owner": "wallet_sdk_asset",
|
|
1865
1865
|
"routeClass": "javascript",
|
|
1866
1866
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1883,8 +1883,8 @@
|
|
|
1883
1883
|
]
|
|
1884
1884
|
},
|
|
1885
1885
|
{
|
|
1886
|
-
"route": "/sdk/runtime-export-
|
|
1887
|
-
"sourceFile": "sdk/runtime-export-
|
|
1886
|
+
"route": "/sdk/runtime-export-Ba12ChDI.js",
|
|
1887
|
+
"sourceFile": "sdk/runtime-export-Ba12ChDI.js",
|
|
1888
1888
|
"owner": "wallet_sdk_asset",
|
|
1889
1889
|
"routeClass": "javascript",
|
|
1890
1890
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1907,8 +1907,8 @@
|
|
|
1907
1907
|
]
|
|
1908
1908
|
},
|
|
1909
1909
|
{
|
|
1910
|
-
"route": "/sdk/runtime-near-
|
|
1911
|
-
"sourceFile": "sdk/runtime-near-
|
|
1910
|
+
"route": "/sdk/runtime-near-DRrdWzmr.js",
|
|
1911
|
+
"sourceFile": "sdk/runtime-near-DRrdWzmr.js",
|
|
1912
1912
|
"owner": "wallet_sdk_asset",
|
|
1913
1913
|
"routeClass": "javascript",
|
|
1914
1914
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1931,8 +1931,8 @@
|
|
|
1931
1931
|
]
|
|
1932
1932
|
},
|
|
1933
1933
|
{
|
|
1934
|
-
"route": "/sdk/runtime-preferences-
|
|
1935
|
-
"sourceFile": "sdk/runtime-preferences-
|
|
1934
|
+
"route": "/sdk/runtime-preferences-BWyhRaBA.js",
|
|
1935
|
+
"sourceFile": "sdk/runtime-preferences-BWyhRaBA.js",
|
|
1936
1936
|
"owner": "wallet_sdk_asset",
|
|
1937
1937
|
"routeClass": "javascript",
|
|
1938
1938
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1955,8 +1955,8 @@
|
|
|
1955
1955
|
]
|
|
1956
1956
|
},
|
|
1957
1957
|
{
|
|
1958
|
-
"route": "/sdk/runtime-recovery-codes-
|
|
1959
|
-
"sourceFile": "sdk/runtime-recovery-codes-
|
|
1958
|
+
"route": "/sdk/runtime-recovery-codes-CuqYWqK7.js",
|
|
1959
|
+
"sourceFile": "sdk/runtime-recovery-codes-CuqYWqK7.js",
|
|
1960
1960
|
"owner": "wallet_sdk_asset",
|
|
1961
1961
|
"routeClass": "javascript",
|
|
1962
1962
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -1979,8 +1979,8 @@
|
|
|
1979
1979
|
]
|
|
1980
1980
|
},
|
|
1981
1981
|
{
|
|
1982
|
-
"route": "/sdk/runtime-recovery-
|
|
1983
|
-
"sourceFile": "sdk/runtime-recovery-
|
|
1982
|
+
"route": "/sdk/runtime-recovery-DlJlaZlf.js",
|
|
1983
|
+
"sourceFile": "sdk/runtime-recovery-DlJlaZlf.js",
|
|
1984
1984
|
"owner": "wallet_sdk_asset",
|
|
1985
1985
|
"routeClass": "javascript",
|
|
1986
1986
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -2099,8 +2099,8 @@
|
|
|
2099
2099
|
]
|
|
2100
2100
|
},
|
|
2101
2101
|
{
|
|
2102
|
-
"route": "/sdk/shared-
|
|
2103
|
-
"sourceFile": "sdk/shared-
|
|
2102
|
+
"route": "/sdk/shared-B95wnpoD.js",
|
|
2103
|
+
"sourceFile": "sdk/shared-B95wnpoD.js",
|
|
2104
2104
|
"owner": "wallet_sdk_asset",
|
|
2105
2105
|
"routeClass": "javascript",
|
|
2106
2106
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -2483,8 +2483,8 @@
|
|
|
2483
2483
|
]
|
|
2484
2484
|
},
|
|
2485
2485
|
{
|
|
2486
|
-
"route": "/sdk/transaction-activity-
|
|
2487
|
-
"sourceFile": "sdk/transaction-activity-
|
|
2486
|
+
"route": "/sdk/transaction-activity-CpDMkSPm.js",
|
|
2487
|
+
"sourceFile": "sdk/transaction-activity-CpDMkSPm.js",
|
|
2488
2488
|
"owner": "wallet_sdk_asset",
|
|
2489
2489
|
"routeClass": "javascript",
|
|
2490
2490
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -2987,8 +2987,8 @@
|
|
|
2987
2987
|
]
|
|
2988
2988
|
},
|
|
2989
2989
|
{
|
|
2990
|
-
"route": "/sdk/walletRecoveryAdminProof-
|
|
2991
|
-
"sourceFile": "sdk/walletRecoveryAdminProof-
|
|
2990
|
+
"route": "/sdk/walletRecoveryAdminProof-CtH8_lph.js",
|
|
2991
|
+
"sourceFile": "sdk/walletRecoveryAdminProof-CtH8_lph.js",
|
|
2992
2992
|
"owner": "wallet_sdk_asset",
|
|
2993
2993
|
"routeClass": "javascript",
|
|
2994
2994
|
"contentType": "text/javascript; charset=utf-8",
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>Web3Authn Wallet Service</title>
|
|
7
7
|
<!-- Surface styles are external so strict CSP can keep style-src 'self' -->
|
|
8
|
-
<link rel="stylesheet" href="/sdk/wallet-ui.css?v=0.
|
|
8
|
+
<link rel="stylesheet" href="/sdk/wallet-ui.css?v=0.22.0" />
|
|
9
9
|
<!-- Minimal shims some ESM bundles expect (externalized to enable strict CSP) -->
|
|
10
|
-
<script src="/sdk/wallet-shims.js?v=0.
|
|
10
|
+
<script src="/sdk/wallet-shims.js?v=0.22.0"></script>
|
|
11
11
|
<!-- Hint the browser to fetch the host script earlier -->
|
|
12
|
-
<link rel="modulepreload" href="/sdk/wallet-iframe-host-runtime.js?v=0.
|
|
12
|
+
<link rel="modulepreload" href="/sdk/wallet-iframe-host-runtime.js?v=0.22.0" crossorigin>
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<!-- sdkBasePath points to the SDK root (e.g. '/sdk'). Load the host directly. -->
|
|
16
|
-
<script type="module" src="/sdk/wallet-iframe-host-runtime.js?v=0.
|
|
16
|
+
<script type="module" src="/sdk/wallet-iframe-host-runtime.js?v=0.22.0"></script>
|
|
17
17
|
</body>
|
|
18
18
|
</html>
|
|
@@ -14,7 +14,9 @@ export declare class AuthMenuController {
|
|
|
14
14
|
request: HostedAuthMenuOpenRequest;
|
|
15
15
|
requestId: string | undefined;
|
|
16
16
|
}): Promise<import('../../shared/messages').HostedAuthMenuOutcome>;
|
|
17
|
+
private readLoginAccounts;
|
|
17
18
|
private bootstrapLoginAccounts;
|
|
19
|
+
private applyLoginAccounts;
|
|
18
20
|
private prepareLogin;
|
|
19
21
|
private prepareRecoveredLogin;
|
|
20
22
|
private beginGoogleEmailOtp;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ChildToParentEnvelope, ParentToChildEnvelope } from '../../../../SeamsWeb/walletIframe/shared/messages';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ReceiptProgress, TransactionReceiptModel, TransactionReceiptView } from './transaction-receipt';
|
|
3
3
|
type ReceiptSurface = {
|
|
4
4
|
readonly element: HTMLElement;
|
|
5
5
|
showReceipt(model: TransactionReceiptModel): void;
|
|
@@ -9,7 +9,7 @@ type Activity = {
|
|
|
9
9
|
requestId: string;
|
|
10
10
|
post: (message: ChildToParentEnvelope) => void;
|
|
11
11
|
surface: ReceiptSurface | null;
|
|
12
|
-
|
|
12
|
+
progress: ReceiptProgress;
|
|
13
13
|
view: TransactionReceiptView;
|
|
14
14
|
retained: boolean;
|
|
15
15
|
signingHash: string | null;
|
|
@@ -19,15 +19,34 @@ export type TransactionReceiptState = {
|
|
|
19
19
|
hash: string | null;
|
|
20
20
|
message: string;
|
|
21
21
|
};
|
|
22
|
+
export type MessageReceiptState = {
|
|
23
|
+
kind: 'signing';
|
|
24
|
+
message?: never;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'signed';
|
|
27
|
+
message?: never;
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'failed';
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
export type ReceiptProgress = {
|
|
33
|
+
readonly subject: 'transaction';
|
|
34
|
+
readonly state: TransactionReceiptState;
|
|
35
|
+
} | {
|
|
36
|
+
readonly subject: 'message';
|
|
37
|
+
readonly state: MessageReceiptState;
|
|
38
|
+
};
|
|
22
39
|
export type TransactionReceiptView = 'expanded' | 'toast';
|
|
23
|
-
export type TransactionReceiptModel = {
|
|
24
|
-
state: TransactionReceiptState;
|
|
40
|
+
export type TransactionReceiptModel = ReceiptProgress & {
|
|
25
41
|
view: TransactionReceiptView;
|
|
26
42
|
onView: (view: TransactionReceiptView) => void;
|
|
27
43
|
onDismiss: () => void;
|
|
28
44
|
};
|
|
29
|
-
export declare function receiptIsPending(
|
|
30
|
-
export declare function
|
|
31
|
-
|
|
32
|
-
export declare function
|
|
45
|
+
export declare function receiptIsPending(receipt: ReceiptProgress): boolean;
|
|
46
|
+
export declare function receiptIsComplete(receipt: ReceiptProgress): boolean;
|
|
47
|
+
/** A message signature has one stage, so its toast fills at once when signed. */
|
|
48
|
+
export declare function receiptCompletedStages(receipt: ReceiptProgress): 0 | 1 | 2 | 3;
|
|
49
|
+
export declare function receiptTitle(receipt: ReceiptProgress): string;
|
|
50
|
+
export declare function receiptHeading(receipt: ReceiptProgress): string;
|
|
51
|
+
export declare function receiptDescription(receipt: ReceiptProgress): string;
|
|
33
52
|
//# sourceMappingURL=transaction-receipt.d.ts.map
|