The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.
When a project protects embedded (WaaS) wallets with a password, the React SDK handled it invisibly: the widget prompted on the first wallet action of a session and exposed useWalletPassword() for setting and changing it. The JavaScript SDK gives you the same operations as functions and React hooks and leaves the prompting to you.Building the password screens (set during setup, unlock on a new device, change) is the same in any JavaScript SDK app, so it isn’t repeated here: Embedded wallet security (Building UI) covers it with full code. This page is the React→JavaScript translation plus the migration-specific behavior.
Prompting for the password (what the widget did for you)
The widget prompted automatically on the first wallet action; you now do it yourself, once per session:
Decide if this session is locked with getWalletRecoveryState({ walletAccount }). Its walletReadyState is 'encrypted' when this device’s key share is still locked (prompt for the password) and 'ready' once unlocked. Run it after sign-in — the moment the widget used to prompt.
Unlock once, not per action. After a successful unlockWallet() the state flips to 'ready', so the same check stops prompting. Don’t gate every wallet action on it — unlock once and keep signing.
isPasswordRequiredForWaasWallets() answers a different question — whether the user has set a password at all, not whether this session is unlocked. Use it to decide whether to offer the “set a password” flow; use getWalletRecoveryState() to gate unlocking.
walletReadyState is a plain string ('encrypted' / 'ready') — compare against the literals. There is no publicly exported WalletReadyState enum to import.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Dynamic","colors":{"primary":"#4779FF","light":"#A0BFFF","dark":"#69A5FF"},"logo":{"light":"https://mintcdn.com/dynamic-docs-testing/CXYm3HK725eun9ev/logo/dynamic-fireblocks-icon-light.svg?fit=max\u0026auto=format\u0026n=CXYm3HK725eun9ev\u0026q=85\u0026s=c050cd8c41715aa71119f91c19221cb3","dark":"https://mintcdn.com/dynamic-docs-testing/CXYm3HK725eun9ev/logo/dynamic-fireblocks-icon-dark.svg?fit=max\u0026auto=format\u0026n=CXYm3HK725eun9ev\u0026q=85\u0026s=434fa110e5847b7a23adc1abd636719e"},"favicon":"https://mintcdn.com/dynamic-docs-testing/C-CltRmvvkSqoMFQ/assets/favicon.png?fit=max\u0026auto=format\u0026n=C-CltRmvvkSqoMFQ\u0026q=85\u0026s=2bbf17fee49c1d60434f1fd77a2d8f38","api":{"mdx":{"auth":{"method":"bearer"}}},"background":{"image":"https://mintcdn.com/dynamic-docs-testing/C-CltRmvvkSqoMFQ/assets/images/general/background-image.png?fit=max\u0026auto=format\u0026n=C-CltRmvvkSqoMFQ\u0026q=85\u0026s=67a354a23840d92de3d1cb25c24ff27c","decoration":"gradient"},"navbar":{"links":[{"href":"https://www.dynamic.xyz/get-started","label":"Start Free"}],"primary":{"type":"button","label":"See it in action","href":"https://demo.dynamic.xyz/"}},"footer":{"socials":{"x":"https://x.com/dynamic_xyz","linkedin":"https://www.linkedin.com/company/dynamiclabs","slack":"https://www.dynamic.xyz/join-slack"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":true},"integrations":{"gtm":{"tagId":"GTM-K9NXSDK"},"cookies":{"key":"dynamic-docs-cookie-consent","value":"accepted"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dynamic-docs-testing","hasAudioNarration":false,"actualSubdomain":"dynamic-docs-testing","customDomains":["www.dynamic.xyz"],"gitSource":{"type":"github","owner":"dynamic-labs","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeca4c6754501e0c6b682aa","collectionId":"ea23aa8b-d710-42bc-b27c-e7fa0a546b58","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeca4c6754501e0c6b682aa"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeca4c6754501e0c6b682aa","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Reference","count":1964},{"language":"default","tag":"REST API","count":1181},{"language":"default","tag":"Schemas","count":636},{"language":"default","tag":"Endpoints","count":541},{"language":"default","tag":"Javascript, React \u0026 React Native","count":307},{"language":"default","tag":"Legacy React","count":287},{"language":"default","tag":"SDK","count":238},{"language":"default","tag":"JavaScript SDK Reference","count":230},{"language":"default","tag":"Implement","count":212},{"language":"default","tag":"Wallets","count":186}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".dynamic-demos-link{position:relative;overflow:hidden;margin:0.5rem 0 2rem;padding:2rem 1.75rem;border-radius:16px;border:1px solid rgba(148, 163, 184, 0.14);background:rgba(148, 163, 184, 0.04);text-align:center}html.dark .dynamic-demos-link{border-color:rgba(148, 163, 184, 0.12);background:rgba(148, 163, 184, 0.03)}.ddl-glow{position:absolute;inset:-40% auto auto 50%;width:28rem;height:28rem;transform:translateX(-50%);border-radius:50%;background:radial-gradient(circle, rgba(71, 121, 255, 0.18), transparent 70%);pointer-events:none}html.dark .ddl-glow{background:radial-gradient(circle, rgba(71, 121, 255, 0.22), transparent 70%)}.ddl-content{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;max-width:32rem;margin:0 auto}.ddl-icon{display:inline-flex;align-items:center;justify-content:center;width:3rem;height:3rem;margin-bottom:1rem;border-radius:999px;background:rgba(71, 121, 255, 0.12);color:#4779ff}html.dark .ddl-icon{background:rgba(71, 121, 255, 0.18);color:#93b4ff}.ddl-icon svg{width:1.25rem;height:1.25rem}.ddl-title{margin:0 0 0.65rem;font-size:1.5rem;font-weight:700;line-height:1.25;letter-spacing:-0.02em;color:#0f172a}html.dark .ddl-title{color:#f1f5f9}.ddl-copy{margin:0 0 1.35rem;font-size:1rem;line-height:1.65;color:#64748b}html.dark .ddl-copy{color:#94a3b8}.ddl-copy strong{color:#4779ff;font-weight:600}html.dark .ddl-copy strong{color:#93b4ff}.ddl-button{display:inline-flex;align-items:center;gap:0.45rem;padding:0.75rem 1.15rem;border-radius:10px;background:#4779ff;color:#fff;font-size:0.95rem;font-weight:600;line-height:1;text-decoration:none;transition:background-color 160ms cubic-bezier(0.2, 0, 0, 1),\n transform 160ms cubic-bezier(0.2, 0, 0, 1)}.ddl-button:hover{background:#2f5fe0;transform:translateY(-1px)}.ddl-button:focus-visible{outline:2px solid #4779ff;outline-offset:3px}.ddl-button-icon{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.ddl-button{transition:none}.ddl-button:hover{transform:none}}.welcome-section{padding:1.3rem 1.5rem 0;border-radius:14px;border:1px solid rgba(148, 163, 184, 0.12);background:rgba(148, 163, 184, 0.04);margin-bottom:2rem}html.dark .welcome-section{border-color:rgba(148, 163, 184, 0.1);background:rgba(148, 163, 184, 0.03)}.welcome-word-rotator{margin:0 0 1rem;padding:0 0 1rem;border-bottom:1px dashed rgba(148, 163, 184, 0.2)}html.dark .welcome-word-rotator{border-bottom-color:rgba(148, 163, 184, 0.15)}.welcome-section h3{margin-top:1.75rem;margin-bottom:-1rem}.wwr-title{margin:0;font-size:2rem;font-weight:700;line-height:1.3;letter-spacing:-0.02em;color:#0f172a}html.dark .wwr-title{color:#f1f5f9}.wwr-line{display:block}.wwr-line+.wwr-line{margin-top:0.1rem}.wwr-word{white-space:nowrap}.wwr-char{display:inline-block;will-change:transform, opacity, filter;transform-style:preserve-3d;backface-visibility:hidden}.wwr-accent{color:#4779ff;font-weight:550;perspective:400px}html.dark .wwr-accent{color:#93b4ff}#banner{background-color:#4779ff}.event-hero{margin:0 0 1.5rem}.event-hero-banner{width:100%;height:auto;display:block;border-radius:14px;box-shadow:0 10px 32px rgba(15, 23, 42, 0.22)}.event-hero-meta{display:flex;flex-wrap:wrap;gap:0.5rem;margin-top:0.9rem}.event-tag{display:inline-flex;align-items:center;gap:0.4rem;padding:0.35rem 0.85rem;border-radius:999px;font-size:0.85rem;font-weight:600;color:#2f5fe0;background:rgba(71, 121, 255, 0.12);border:1px solid rgba(71, 121, 255, 0.25)}html.dark .event-tag{color:#93b4ff;background:rgba(71, 121, 255, 0.16);border-color:rgba(71, 121, 255, 0.32)}@media (min-width: 768px){.nav-logo{height:2.25rem!important;max-width:18rem!important}}.mcp-install-button{pointer-events:none!important;user-select:none!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important}.before\\:bg-background-light::before,.chat-assistant-floating-input::before{content:none!important;display:none!important;background:none!important;background-color:transparent!important;height:0!important}.rn-qs-dark{display:none}.rn-qs-light{display:block}html.dark .rn-qs-dark{display:block}html.dark .rn-qs-light{display:none}html.light .rn-qs-dark{display:none}html.light .rn-qs-light{display:block}.llm-copy-btn{display:inline-flex;align-items:center;gap:6px;margin-bottom:12px;padding:7px 14px;background-color:#4779ff;color:#fff;font-size:13px;font-weight:500;border:none;border-radius:6px;cursor:pointer;transition:background-color 0.15s ease, opacity 0.15s ease}.llm-copy-btn:hover{background-color:#2f5fe0}.llm-copy-btn--copied{background-color:#16a34a}.llm-copy-btn--copied:hover{background-color:#15803d}html.dark{--ds-bg: #0c0e13;--ds-elevated: #1b1d22;--ds-border: #282b33;--ds-text: #ececec;--ds-muted: #6f7177;--ds-subtitle: #8f93ab;--ds-primary: #5c89ff}html.light{--ds-bg: #ffffff;--ds-elevated: #fafafb;--ds-border: #e9ecf2;--ds-text: #26272e;--ds-muted: #5f6478;--ds-subtitle: #8f93ab;--ds-primary: #5c89ff}html:is(.light,.dark) .DocSearch-Container,html:is(.light,.dark) .DocSearch-Modal{--docsearch-primary-color: var(--ds-primary);--docsearch-highlight-color: var(--ds-primary);--docsearch-logo-color: var(--ds-muted);--docsearch-text-color: var(--ds-text);--docsearch-muted-color: var(--ds-muted);--docsearch-hit-color: var(--ds-text);--docsearch-hit-active-color: var(--ds-text);--docsearch-container-background: rgb(0 0 0 / 0.6);--docsearch-modal-background: var(--ds-bg);--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-hit-background: transparent;--docsearch-footer-background: var(--ds-bg);--docsearch-modal-shadow: 0 4px 8px -6px rgb(24 39 75 / 0.02),\n 0 8px 24px -4px rgb(24 39 75 / 0.05),\n 0 0 0 1px var(--ds-border);--docsearch-hit-shadow: none;--docsearch-footer-shadow: 0 -1px 0 0 var(--ds-border);--docsearch-searchbox-shadow: none;--docsearch-key-gradient: var(--ds-bg);--docsearch-key-shadow: inset 0 0 0 1px var(--ds-border),\n 0 2px 0 0 var(--ds-border);--docsearch-key-pressed-shadow: inset 0 0 0 1px var(--ds-border),\n 0 1px 0 0 var(--ds-border);--docsearch-hit-height: auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html:is(.light,.dark) .DocSearch-Modal{max-width:558px;height:auto;max-height:min(80vh, 720px);border-radius:12px;overflow:hidden}html:is(.light,.dark) .DocSearch-Dropdown{height:auto;padding:12px 16px;max-height:calc(min(80vh, 720px) - 56px - 54px)}html:is(.light,.dark) .DocSearch-Dropdown-Container{display:flex;flex-direction:column;gap:17px}html:is(.light,.dark) .DocSearch-Hits ul{display:flex;flex-direction:column;gap:2px}html:is(.light,.dark) .DocSearch-SearchBar{padding:12px;border-bottom:1px solid var(--ds-border)}html:is(.light,.dark) .DocSearch-SearchBar:has(.DocSearch-Input:not(:placeholder-shown)){background:var(--ds-elevated)}html:is(.light,.dark) .DocSearch-Form{height:auto;padding:0;gap:8px;background:transparent;box-shadow:none}html:is(.light,.dark) .DocSearch-Input{padding:0;font-size:14px;font-weight:400;line-height:20px;color:var(--ds-text)}html:is(.light,.dark) .DocSearch-Input::placeholder{color:var(--ds-muted);opacity:1}html:is(.light,.dark) .DocSearch-Hit-source{height:auto;margin:0 0 6px;padding:0;background:transparent;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;text-transform:none;color:var(--ds-primary)}html:is(.light,.dark) .DocSearch-Hit{height:auto;padding:0}html:is(.light,.dark) .DocSearch-Hit a{height:54px;padding:8px 10px;border:1px solid transparent;border-radius:8px;background:transparent;display:flex;align-items:center;transition-property:background-color, border-color;transition-duration:120ms;transition-timing-function:cubic-bezier(0.2, 0, 0, 1)}html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] a{background:var(--ds-elevated);border-color:var(--ds-border)}html:is(.light,.dark) .DocSearch-Hit-Container{display:flex;align-items:center;width:100%;height:auto;min-height:0;gap:8px}html:is(.light,.dark) .DocSearch-Hit-content-wrapper{flex:1 1 auto;min-width:0}html:is(.light,.dark) .DocSearch-Hit-action{margin-left:auto;flex-shrink:0}html:is(.light,.dark) .DocSearch-Hit-title{font-size:14px;font-weight:500;line-height:20px;color:var(--ds-text)}html:is(.light,.dark) .DocSearch-Hit-path{font-size:12px;font-weight:400;line-height:18px;color:var(--ds-muted)}html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] .DocSearch-Hit-path{color:var(--ds-subtitle)}html:is(.light,.dark) .DocSearch-Hit--Result.DocSearch-Hit--Lvl1 .DocSearch-Hit-title,html:is(.light,.dark) .DocSearch-Hit--Result.DocSearch-Hit--Child .DocSearch-Hit-title,html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] .DocSearch-Hit-title,html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] mark{color:var(--ds-primary)}html:is(.light,.dark) .DocSearch-Hit-action{display:none}html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] .DocSearch-Hit-action{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:2px;border-radius:4px;background:var(--ds-bg);box-shadow:inset 0 0 0 1px var(--ds-border),\n 0 2px 0 0 var(--ds-border);flex-shrink:0}html:is(.light,.dark) .DocSearch-Footer{height:auto;padding:16px;background:var(--ds-bg);border-top:1px solid var(--ds-border);border-radius:0 0 12px 12px;box-shadow:none}html:is(.light,.dark) .DocSearch-Commands{gap:20px}html:is(.light,.dark) .DocSearch-Commands li{gap:6px}html:is(.light,.dark) .DocSearch-Commands-Key{position:relative;width:22px;height:22px;min-width:22px;margin:0;padding:2px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:500;color:var(--ds-muted)}html:is(.light,.dark) .DocSearch-Label{font-size:14px;font-weight:400;line-height:20px;color:var(--ds-muted)}html:is(.light,.dark) .DocSearch-Logo a>*{display:none}html:is(.light,.dark) .DocSearch-Logo a{font-size:11px;font-weight:400;line-height:1;color:var(--ds-muted);text-decoration:none;border-radius:2px;opacity:0.6;transition-property:opacity;transition-duration:150ms;transition-timing-function:cubic-bezier(0.2, 0, 0, 1)}html:is(.light,.dark) .DocSearch-Logo a::before{content:'Search by Algolia'}html:is(.light,.dark) .DocSearch-MagnifierLabel>*,html:is(.light,.dark) .DocSearch-Reset>*,html:is(.light,.dark) .DocSearch-Hit-icon>*,html:is(.light,.dark) .DocSearch-Hit-action>*{display:none!important}html:is(.light,.dark) .DocSearch-Commands li:nth-child(1) .DocSearch-Commands-Key>*,html:is(.light,.dark) .DocSearch-Commands li:nth-child(2) .DocSearch-Commands-Key>*{display:none!important}html:is(.light,.dark) .DocSearch-Hit-Tree,html:is(.light,.dark) .DocSearch-Hit-action-button,html:is(.light,.dark) .DocSearch-Hit-action~.DocSearch-Hit-action{display:none!important}html:is(.light,.dark) .DocSearch-MagnifierLabel,html:is(.light,.dark) .DocSearch-Reset,html:is(.light,.dark) .DocSearch-Hit-icon{display:inline-block;width:16px;height:16px;padding:0;background-color:var(--ds-muted);-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}html:is(.light,.dark) .DocSearch-MagnifierLabel{-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1zZWFyY2giIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiA+IDxwYXRoIGQ9Im0yMSAyMS00LjM0LTQuMzQiIC8+IDxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiIC8+IDwvc3ZnPg==\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1zZWFyY2giIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiA+IDxwYXRoIGQ9Im0yMSAyMS00LjM0LTQuMzQiIC8+IDxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiIC8+IDwvc3ZnPg==\")}html:is(.light,.dark) .DocSearch-Reset{position:relative;width:16px;height:16px;border:0;border-radius:2px;cursor:pointer;transition-property:transform, opacity;transition-duration:100ms;transition-timing-function:cubic-bezier(0.2, 0, 0, 1);-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS14IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPiA8cGF0aCBkPSJtNiA2IDEyIDEyIiAvPiA8L3N2Zz4=\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS14IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPiA8cGF0aCBkPSJtNiA2IDEyIDEyIiAvPiA8L3N2Zz4=\")}html:is(.light,.dark) .DocSearch-Reset[hidden]{display:none}html:is(.light,.dark) .DocSearch-Reset::after{content:'';position:absolute;inset:-12px}html:is(.light,.dark) .DocSearch-Hit-icon{-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1maWxlLXRleHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiA+IDxwYXRoIGQ9Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IiAvPiA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4gPHBhdGggZD0iTTEwIDlIOCIgLz4gPHBhdGggZD0iTTE2IDEzSDgiIC8+IDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPiA8L3N2Zz4=\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1maWxlLXRleHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiA+IDxwYXRoIGQ9Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IiAvPiA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4gPHBhdGggZD0iTTEwIDlIOCIgLz4gPHBhdGggZD0iTTE2IDEzSDgiIC8+IDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPiA8L3N2Zz4=\")}html:is(.light,.dark) .DocSearch-Hit--Result.DocSearch-Hit--Lvl1 .DocSearch-Hit-icon,html:is(.light,.dark) .DocSearch-Hit--Result.DocSearch-Hit--Child .DocSearch-Hit-icon{-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1oYXNoIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8bGluZSB4MT0iNCIgeDI9IjIwIiB5MT0iOSIgeTI9IjkiIC8+IDxsaW5lIHgxPSI0IiB4Mj0iMjAiIHkxPSIxNSIgeTI9IjE1IiAvPiA8bGluZSB4MT0iMTAiIHgyPSI4IiB5MT0iMyIgeTI9IjIxIiAvPiA8bGluZSB4MT0iMTYiIHgyPSIxNCIgeTE9IjMiIHkyPSIyMSIgLz4gPC9zdmc+\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1oYXNoIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8bGluZSB4MT0iNCIgeDI9IjIwIiB5MT0iOSIgeTI9IjkiIC8+IDxsaW5lIHgxPSI0IiB4Mj0iMjAiIHkxPSIxNSIgeTI9IjE1IiAvPiA8bGluZSB4MT0iMTAiIHgyPSI4IiB5MT0iMyIgeTI9IjIxIiAvPiA8bGluZSB4MT0iMTYiIHgyPSIxNCIgeTE9IjMiIHkyPSIyMSIgLz4gPC9zdmc+\")}html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] .DocSearch-Hit-icon{background-color:var(--ds-text)}html:is(.light,.dark) .DocSearch-Hit[aria-selected=\"true\"] .DocSearch-Hit-action::before{content:'';width:16px;height:16px;background-color:var(--ds-text);-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jb3JuZXItZG93bi1sZWZ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgLz4gPHBhdGggZD0ibTkgMTAtNSA1IDUgNSIgLz4gPC9zdmc+\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jb3JuZXItZG93bi1sZWZ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgLz4gPHBhdGggZD0ibTkgMTAtNSA1IDUgNSIgLz4gPC9zdmc+\")}html:is(.light,.dark) .DocSearch-Commands li:nth-child(1) .DocSearch-Commands-Key::before,html:is(.light,.dark) .DocSearch-Commands li:nth-child(2) .DocSearch-Commands-Key:nth-child(1)::before,html:is(.light,.dark) .DocSearch-Commands li:nth-child(2) .DocSearch-Commands-Key:nth-child(2)::before{content:'';width:16px;height:16px;background-color:var(--ds-muted);-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}html:is(.light,.dark) .DocSearch-Commands li:nth-child(1) .DocSearch-Commands-Key::before{-webkit-mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jb3JuZXItZG93bi1sZWZ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgLz4gPHBhdGggZD0ibTkgMTAtNSA1IDUgNSIgLz4gPC9zdmc+\");mask-image:url(\"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jb3JuZXItZG93bi1sZWZ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgPiA8cGF0aCBkPSJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgLz4gPHBhdGggZD0ibTkgMTAtNSA1IDUgNSIgLz4gPC9zdmc+\")}html:is(.light,.dark) .DocSearch-Commands li:nth-child(2) .DocSearch-Commands-Key:nth-child(1)::before{-webkit-mask-image:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\u003cpath d='m5 12 7-7 7 7'/>\u003cpath d='M12 19V5'/>\u003c/svg>\");mask-image:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\u003cpath d='m5 12 7-7 7 7'/>\u003cpath d='M12 19V5'/>\u003c/svg>\")}html:is(.light,.dark) .DocSearch-Commands li:nth-child(2) .DocSearch-Commands-Key:nth-child(2)::before{-webkit-mask-image:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\u003cpath d='M12 5v14'/>\u003cpath d='m19 12-7 7-7-7'/>\u003c/svg>\");mask-image:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\u003cpath d='M12 5v14'/>\u003cpath d='m19 12-7 7-7-7'/>\u003c/svg>\")}html:is(.light,.dark) .DocSearch-Reset:focus-visible,html:is(.light,.dark) .DocSearch-Logo a:focus-visible{outline:2px solid var(--ds-primary);outline-offset:4px}html:is(.light,.dark) .DocSearch-Logo a:focus-visible{opacity:1;outline-offset:3px}html:is(.light,.dark) .DocSearch-Reset:active{transform:scale(0.96)}@media (hover: hover){html:is(.light,.dark) .DocSearch-Reset:hover{opacity:0.8}html:is(.light,.dark) .DocSearch-Logo a:hover{opacity:1}}@media (prefers-reduced-motion: reduce){html:is(.light,.dark) .DocSearch-Hit a,html:is(.light,.dark) .DocSearch-Logo a,html:is(.light,.dark) .DocSearch-Reset{transition:none}html:is(.light,.dark) .DocSearch-Reset:active{transform:none}}.nav-tabs{flex:1 1 auto;min-width:0;align-items:center;gap:0.25rem!important;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;scroll-padding-inline:0.625rem}.nav-tabs::-webkit-scrollbar{display:none}.nav-tabs-item{flex:0 0 auto}.nav-tabs-item{white-space:nowrap;height:auto;padding:0.375rem 0.625rem;border-radius:0.5rem;gap:0!important;color:#5f6478;transition:background-color 0.15s ease,\n color 0.15s ease}.nav-tabs-item>svg,.nav-tabs-item>div>svg{display:none}.nav-tabs-item>div.absolute{display:none!important}.nav-tabs-item[data-active=\"true\"]{background-color:#edf1fe;color:#2b55c7}.nav-tabs-item:focus-visible{outline:2px solid #4779ff;outline-offset:2px;color:#26272e}html.dark .nav-tabs-item{color:#8f93ab}html.dark .nav-tabs-item:focus-visible{outline-color:#69a5ff;color:#ececec}html.dark .nav-tabs-item[data-active=\"true\"]{background-color:rgb(105 165 255 / 14%);color:#a0bfff}@media (hover: hover){.nav-tabs-item:hover{background-color:#f4f5f8;color:#26272e}.nav-tabs-item[data-active=\"true\"]:hover{background-color:#e4ebfd;color:#2b55c7}html.dark .nav-tabs-item:hover{background-color:#1b1d22;color:#ececec}html.dark .nav-tabs-item[data-active=\"true\"]:hover{background-color:rgb(105 165 255 / 20%);color:#a0bfff}}@media (prefers-reduced-motion: reduce){.nav-tabs-item{transition:none}}div:has(>.nav-tabs){border-bottom:1px solid #e9ecf2}html.dark div:has(>.nav-tabs){border-bottom-color:#282b33}a[href$=\"demo.dynamic.xyz/\"]>span[class*=\"bg-primary-dark\"]{background-color:#2e57d1}@media (hover: hover){a[href$=\"demo.dynamic.xyz/\"]:hover>span[class*=\"bg-primary-dark\"]{background-color:#22409e}}div:has(>.nav-tabs){height:auto!important;padding-block:0.4375rem}#sidebar-content .sidebar-group li:has(>button>div:first-child:not(.flex-1))>ul{margin-left:1.5rem}"}],"page":{"pagePath":"javascript/migrating-from-react/embedded-wallets-password-security","slug":"/javascript/migrating-from-react/embedded-wallets-password-security","pageMetadata":{"title":"Embedded wallets: password \u0026 security","description":"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.","docType":"guide","href":"/javascript/migrating-from-react/embedded-wallets-password-security"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`When a project protects embedded (WaaS) wallets with a password, the React SDK handled it invisibly: the widget prompted on the first wallet action of a session and exposed `,_jsx(_components.code,{children:`useWalletPassword()`}),` for setting and changing it. The JavaScript SDK gives you the same operations as functions and React hooks and leaves the prompting to you.`]}),`\n`,_jsxs(_components.p,{children:[`Building the password screens (set during setup, unlock on a new device, change) is the same in any JavaScript SDK app, so it isn’t repeated here: `,_jsxs(_components.a,{href:`/javascript/building-ui/embedded-wallet-security`,children:[_jsx(_components.strong,{children:`Embedded wallet security`}),` (Building UI)`]}),` covers it with full code. This page is the React→JavaScript translation plus the migration-specific behavior.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-maps-to-what`,children:`What maps to what`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`React SDK`}),_jsx(_components.th,{children:`JavaScript SDK`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`automatic password prompt on first wallet action`}),_jsxs(_components.td,{children:[`check `,_jsx(_components.code,{children:`getWalletRecoveryState()`}),`, then `,_jsx(_components.code,{children:`unlockWallet()`}),` yourself`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`useWalletPassword().setPassword(...)`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`setWaasWalletAccountPassword()`}),` / `,_jsx(_components.code,{children:`useSetWaasWalletAccountPassword()`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`useWalletPassword().updatePassword(...)`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`updateWaasPassword()`}),` / `,_jsx(_components.code,{children:`useUpdateWaasPassword()`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`useWalletPassword().unlockWallet(...)`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`unlockWallet()`}),` / `,_jsx(_components.code,{children:`useUnlockWallet()`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`useWalletPassword().isLoading`}),` / `,_jsx(_components.code,{children:`.error`})]}),_jsxs(_components.td,{children:[`the mutation’s `,_jsx(_components.code,{children:`isPending`}),` / `,_jsx(_components.code,{children:`error`})]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`prompting-for-the-password-what-the-widget-did-for-you`,children:`Prompting for the password (what the widget did for you)`}),`\n`,_jsx(_components.p,{children:`The widget prompted automatically on the first wallet action; you now do it yourself, once per session:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decide if this session is locked`}),` with `,_jsx(_components.code,{children:`getWalletRecoveryState({ walletAccount })`}),`. Its `,_jsx(_components.code,{children:`walletReadyState`}),` is `,_jsx(_components.code,{children:`'encrypted'`}),` when this device’s key share is still locked (prompt for the password) and `,_jsx(_components.code,{children:`'ready'`}),` once unlocked. Run it after sign-in — the moment the widget used to prompt.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Unlock once, not per action.`}),` After a successful `,_jsx(_components.code,{children:`unlockWallet()`}),` the state flips to `,_jsx(_components.code,{children:`'ready'`}),`, so the same check stops prompting. Don’t gate every wallet action on it — unlock once and keep signing.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`isPasswordRequiredForWaasWallets()`}),` answers a different question`]}),` — whether the user has set a password at all, not whether this session is unlocked. Use it to decide whether to offer the “set a password” flow; use `,_jsx(_components.code,{children:`getWalletRecoveryState()`}),` to gate unlocking.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`walletReadyState`}),` is a plain string (`,_jsx(_components.code,{children:`'encrypted'`}),` / `,_jsx(_components.code,{children:`'ready'`}),`) — compare against the literals. There is no publicly exported `,_jsx(_components.code,{children:`WalletReadyState`}),` enum to import.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`errors-you-now-own`,children:`Errors you now own`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Situation`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Wrong password on unlock`}),_jsx(_components.td,{children:`The mutation rejects — surface the error and let the user retry.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Wrong `,_jsx(_components.code,{children:`currentPassword`}),` on change`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`updateWaasPassword`}),` rejects — keep the form open and show the error.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Action attempted before unlock`}),_jsxs(_components.td,{children:[`Check `,_jsx(_components.code,{children:`getWalletRecoveryState()`}),` after sign-in; if `,_jsx(_components.code,{children:`'encrypted'`}),`, prompt and `,_jsx(_components.code,{children:`unlockWallet()`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Password mismatch across wallets`}),_jsx(_components.td,{children:`Use one password per user — the same one protects every WaaS wallet.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See also`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/javascript/building-ui/embedded-wallet-security`,children:`Embedded wallet security (Building UI)`}),` — the full unlock gate and password screens`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/javascript/migrating-from-react/embedded-wallets-setup`,children:`Embedded wallets: setup \u0026 creation`}),` — where the password is first supplied`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/javascript/migrating-from-react/embedded-wallets-backup-recovery`,children:`Embedded wallets: backup \u0026 recovery`}),` — recovering access when the password is lost`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/javascript/migrating-from-react/post-login-user-setup`,children:`Post-login user setup`}),` — running the unlock check right after login`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Embedded wallets: password \u0026 security","description":"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.","docType":"guide","href":"/javascript/migrating-from-react/embedded-wallets-password-security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What maps to what","slug":"what-maps-to-what","depth":2,"children":[]},{"title":"Prompting for the password (what the widget did for you)","slug":"prompting-for-the-password-what-the-widget-did-for-you","depth":2,"children":[]},{"title":"Errors you now own","slug":"errors-you-now-own","depth":2,"children":[]},{"title":"See also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/dynamic-docs-testing/fd6becaed25bf0d8/algolia-docsearch.js","/docs/_mintlify/custom/dynamic-docs-testing/078be96a1e454d1f/generate-llms.js","/docs/_mintlify/custom/dynamic-docs-testing/14f3898c5e985cd5/snippets/gsap-text-plugin.js","/docs/_mintlify/custom/dynamic-docs-testing/c174bfce53a72941/snippets/gsap.js","/docs/_mintlify/custom/dynamic-docs-testing/ea6028ffcc794f21/llm-copy-button.js","/docs/_mintlify/custom/dynamic-docs-testing/c071bd14c4f40dfd/onetrust.js"],"subdomain":"dynamic-docs-testing","siteName":"Dynamic","title":"Embedded wallets: password \u0026 security - Dynamic","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-27T17:31:47.030Z","gitLastModified":"2026-09-21T11:50:17.000Z","originalFileLocation":"javascript/migrating-from-react/embedded-wallets-password-security.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dynamic\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Embedded wallets: password \u0026amp; security - Dynamic\">\u003cmeta data-mint-head property=\"og:description\" content=\"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dynamic\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dynamic-docs-testing.mintlify.app/_mintlify/api/og/v2?division=Embedded+wallets\u0026amp;title=Embedded+wallets%3A+password+%26+security\u0026amp;description=The+React+SDK+popped+a+password+modal+for+you+on+the+first+wallet+action.+In+the+JavaScript+SDK+you+check+whether+a+password+is+needed+and+run+the+set%2C+unlock%2C+\u0026amp;theme=9bec92bca96868fc0aaaeb3b\u0026amp;signature=9852da43dacb27515b3abca6acc8bfc16bd2ff5a2b1b4e26be30dfb322655690\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Embedded wallets: password \u0026amp; security - Dynamic\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dynamic-docs-testing.mintlify.app/_mintlify/api/og/v2?division=Embedded+wallets\u0026amp;title=Embedded+wallets%3A+password+%26+security\u0026amp;description=The+React+SDK+popped+a+password+modal+for+you+on+the+first+wallet+action.+In+the+JavaScript+SDK+you+check+whether+a+password+is+needed+and+run+the+set%2C+unlock%2C+\u0026amp;theme=9bec92bca96868fc0aaaeb3b\u0026amp;signature=9852da43dacb27515b3abca6acc8bfc16bd2ff5a2b1b4e26be30dfb322655690\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/dynamic-docs-testing/mdILYDruq-iWk8yv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dynamic\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4779FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/javascript/migrating-from-react/embedded-wallets-password-security.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.dynamic.xyz/#organization\",\"name\":\"Dynamic\",\"url\":\"https://www.dynamic.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dynamic-docs-testing/CXYm3HK725eun9ev/logo/dynamic-fireblocks-icon-light.svg?fit=max\u0026auto=format\u0026n=CXYm3HK725eun9ev\u0026q=85\u0026s=c050cd8c41715aa71119f91c19221cb3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.dynamic.xyz/docs#website\",\"name\":\"Dynamic\",\"url\":\"https://www.dynamic.xyz/docs\",\"publisher\":{\"@id\":\"https://www.dynamic.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security#webpage\",\"url\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security\",\"name\":\"Embedded wallets: password \u0026 security\",\"description\":\"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\",\"dateModified\":\"2026-09-21T11:50:17.000Z\",\"isPartOf\":{\"@id\":\"https://www.dynamic.xyz/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"JavaScript SDK Reference\",\"item\":\"https://www.dynamic.xyz/docs/javascript/reference/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating from React\",\"item\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Embedded wallets\",\"item\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-setup\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Embedded wallets: password \u0026 security\",\"item\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security#article\",\"headline\":\"Embedded wallets: password \u0026 security\",\"name\":\"Embedded wallets: password \u0026 security\",\"description\":\"The React SDK popped a password modal for you on the first wallet action. In the JavaScript SDK you check whether a password is needed and run the set, unlock, and change flows yourself.\",\"url\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security\",\"mainEntityOfPage\":{\"@id\":\"https://www.dynamic.xyz/docs/javascript/migrating-from-react/embedded-wallets-password-security#webpage\"},\"dateModified\":\"2026-09-21T11:50:17.000Z\",\"publisher\":{\"@id\":\"https://www.dynamic.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://www.dynamic.xyz/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dynamic\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Dynamic","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"rocket","pages":[{"title":"Get Started","href":"/get-started/welcome"}]},{"tab":"Embedded Wallets","icon":"wallet","pages":[{"title":"Embedded Wallets","href":"/embedded-wallets/mpc/overview"}]},{"tab":"Business Accounts","icon":"building","pages":[{"title":"Business Accounts","href":"/business-accounts/accounts"}]},{"tab":"Policies","icon":"shield-check","pages":[{"title":"Policies","href":"/embedded-wallets/mpc/policies/overview"}]},{"tab":"Auth","icon":"door-open","pages":[{"title":"Auth","href":"/auth/overview"}]},{"tab":"Agents","icon":"server","pages":[{"title":"Agents","href":"/agents/overview"}]},{"tab":"Fireblocks Flow","icon":"coins","pages":[{"title":"Fireblocks Flow","href":"/flow/overview"}]},{"tab":"Earn","icon":"chart-line","pages":[{"title":"Earn","href":"/earn/overview"}]},{"tab":"Funding","icon":"money-bill-transfer","pages":[{"title":"Funding","href":"/funding/overview"}]},{"tab":"Reference","icon":"book-open","menu":[{"item":"Javascript, React \u0026 React Native","icon":"js","groups":[{"group":"JavaScript SDK Reference","pages":[{"title":"JavaScript SDK Reference","href":"/javascript/reference/overview"},{"group":"Events","icon":"bell","pages":[{"title":"onEvent","href":"/javascript/reference/client/on-event"},{"title":"offEvent","href":"/javascript/reference/client/off-event"},{"title":"Events Catalog","href":"/javascript/reference/client/events-catalog"}]},{"group":"Wallets (General)","icon":"wallet","pages":[{"title":"Get Wallet Options Catalogue","href":"/javascript/reference/wallets/get-wallet-options-catalogue"},{"title":"Getting Available Wallets to Connect","href":"/javascript/reference/wallets/get-available-wallets-to-connect"},{"title":"Connect a Wallet by Catalogue Key","href":"/javascript/reference/wallets/connect-wallet-option"},{"title":"Getting Connected Addresses","href":"/javascript/reference/wallets/get-connected-addresses"},{"title":"Getting Wallet Accounts","href":"/javascript/reference/wallets/get-wallet-accounts"},{"title":"Getting the Wallet Account Given an Address and Chain","href":"/javascript/reference/wallets/get-wallet-account-from-address"},{"title":"Comparing Two Addresses on a Chain","href":"/javascript/reference/wallets/is-same-address"},{"title":"Getting Wallet Provider Data by Key","href":"/javascript/reference/wallets/get-wallet-provider-data-by-key"},{"title":"Getting a Wallet Account Address by Type","href":"/javascript/reference/wallets/get-wallet-account-address-by-type"},{"title":"Getting Networks Data","href":"/javascript/reference/wallets/get-networks-data"},{"title":"Getting Active Network","href":"/javascript/reference/wallets/get-active-network"},{"title":"Switching Active Network","href":"/javascript/reference/wallets/switch-active-network"},{"title":"Adding a network","href":"/javascript/reference/wallets/add-network"},{"title":"Getting Multichain Token Balances","href":"/javascript/reference/wallets/get-multichain-token-balances"},{"title":"Getting Token Balances","href":"/javascript/reference/wallets/get-token-balances"},{"title":"Getting Native Balance","href":"/javascript/reference/wallets/get-native-balance"},{"title":"Get Balances for All Wallets","href":"/javascript/reference/wallets/get-balance-for-all-wallets"},{"title":"Getting Transaction History","href":"/javascript/reference/wallets/get-transaction-history"},{"title":"Checking Wallet Account Availability","href":"/javascript/reference/wallets/check-wallet-account-availability"},{"title":"Signing a Message","href":"/javascript/reference/wallets/sign-message"},{"title":"transferAmount","href":"/javascript/reference/wallets/transfer-amount"},{"title":"Removing a Wallet Account","href":"/javascript/reference/wallets/remove-wallet-account"},{"title":"Wallet Provider Events","href":"/javascript/reference/wallets/wallet-provider-events"},{"title":"canConnectWithHardwareWallet","href":"/javascript/reference/client/can-connect-with-hardware-wallet"},{"title":"isHardwareWalletAccount","href":"/javascript/reference/client/is-hardware-wallet-account"}]},{"group":"Embedded Wallets (MPC)","icon":"vault","pages":[{"title":"getGoogleDriveBackupReadiness","href":"/javascript/reference/waas/get-google-drive-backup-readiness"},{"title":"Checking if Dynamic WaaS is enabled","href":"/javascript/reference/waas/checking-if-waas-is-enabled"},{"title":"Checking WaaS Wallet Account Type","href":"/javascript/reference/waas/checking-waas-wallet-account-type"},{"title":"Creating WaaS Wallet Accounts","href":"/javascript/reference/waas/creating-waas-wallet-accounts"},{"title":"Exporting WaaS Private Key","href":"/javascript/reference/waas/exporting-waas-private-key"},{"title":"Importing WaaS Private Key","href":"/javascript/reference/waas/importing-waas-private-key"},{"title":"Migrate from Fireblocks","href":"/javascript/reference/waas/migrate-from-fireblocks"},{"title":"Triggering Delegation","href":"/javascript/wallets/embedded-wallets/mpc/delegated-access/triggering-delegation"},{"title":"Revoking Delegation","href":"/javascript/wallets/embedded-wallets/mpc/delegated-access/revoking-delegation"}]},{"group":"Authentication","icon":"door-open","pages":[{"title":"Social Account Linking","href":"/javascript/authentication-methods/social-linking"},{"title":"Authenticate with an external JWT","href":"/javascript/authentication-methods/external-jwt"},{"title":"Refresh Authentication","href":"/javascript/authentication-methods/refresh-auth"},{"title":"Refresh User Data","href":"/javascript/authentication-methods/refresh-user"},{"title":"Check User Scopes","href":"/javascript/authentication-methods/is-user-onboarding-complete"},{"title":"Session-Based MFA","href":"/javascript/authentication-methods/mfa/session-mfa"},{"title":"Check MFA Authentication Status","href":"/javascript/authentication-methods/is-user-missing-mfa-auth"},{"title":"Check Recovery Codes Acknowledgment","href":"/javascript/authentication-methods/is-pending-recovery-codes-acknowledgment"},{"title":"Passkeys","href":"/javascript/authentication-methods/mfa/passkey"},{"title":"Authenticator Apps","href":"/javascript/authentication-methods/mfa/totp"},{"title":"Recovery Codes","href":"/javascript/authentication-methods/mfa/recovery-codes"},{"title":"Delete User Account","href":"/javascript/reference/client/delete-user"}]},{"group":"Chains \u0026 Networks","icon":"link","pages":[{"group":"EVM","icon":"ethereum","pages":[{"title":"simulateEvmTransaction","href":"/javascript/reference/evm/simulate-evm-transaction"},{"title":"calculateEvmTransactionFee","href":"/javascript/reference/evm/calculate-evm-transaction-fee"},{"title":"Checking EVM Wallet Account Type","href":"/javascript/reference/evm/checking-evm-wallet-account-type"},{"title":"Getting a Viem WalletClient","href":"/javascript/reference/evm/getting-viem-wallet-client"},{"title":"Getting a Viem PublicClient","href":"/javascript/reference/evm/getting-viem-public-client"},{"title":"Validate Signatures","href":"/javascript/reference/evm/validate-signatures"},{"title":"EIP-5792 (Batched Calls)","href":"/javascript/reference/evm/eip-5792"},{"title":"Sign a Transaction","href":"/javascript/reference/evm/sign-transaction"},{"title":"Sign Typed Data (EIP-712)","href":"/javascript/reference/evm/sign-typed-data"},{"group":"Native gas sponsorship","pages":[{"title":"EVM Gas Sponsorship","sidebarTitle":"Native EVM gas sponsorship","href":"/javascript/reference/evm/evm-gas-sponsorship"},{"title":"sendSponsoredTransaction","href":"/javascript/reference/evm/send-sponsored-transaction"},{"title":"Splitting sign \u0026 send","sidebarTitle":"Splitting sign \u0026 send","href":"/javascript/reference/evm/splitting-sign-and-send"},{"title":"Managing EIP-7702 delegation","sidebarTitle":"Managing EIP-7702 delegation","href":"/javascript/reference/evm/managing-7702-delegation"}]}]},{"group":"Solana","icon":"bolt","pages":[{"title":"addPhantomRedirectSolanaExtension","href":"/javascript/reference/solana/phantom-redirect-extension"},{"title":"simulateSolanaTransaction","href":"/javascript/reference/solana/simulate-solana-transaction"},{"title":"calculateSolanaTransactionFee","href":"/javascript/reference/solana/calculate-solana-transaction-fee"},{"title":"isSolanaGasSponsorshipEnabled","href":"/javascript/reference/solana/is-solana-gas-sponsorship-enabled"},{"title":"Checking Solana Wallet Account Type","href":"/javascript/reference/solana/checking-solana-wallet-account-type"},{"title":"Signing and Sending Transactions with Solana","href":"/javascript/reference/solana/signing-sending-transactions"},{"title":"Solana Connection","href":"/javascript/reference/solana/getting-solana-connection"},{"title":"SVM Gas Sponsorship","href":"/javascript/reference/solana/svm-gas-sponsorship"}]},{"group":"Bitcoin","icon":"bitcoin","pages":[{"title":"sendBitcoin","href":"/javascript/reference/bitcoin/send-bitcoin"},{"title":"signPsbt","href":"/javascript/reference/bitcoin/sign-psbt"},{"title":"signPsbts","href":"/javascript/reference/bitcoin/sign-psbts"},{"title":"signMessageWithCustomOptions","href":"/javascript/reference/bitcoin/sign-message-with-custom-options"},{"title":"sendRawTransaction","href":"/javascript/reference/bitcoin/send-raw-transaction"},{"title":"Adding Bitcoin Extensions","href":"/javascript/reference/bitcoin/adding-bitcoin-extension"},{"title":"Checking Bitcoin Wallet Account Type","href":"/javascript/reference/bitcoin/checking-bitcoin-wallet-account-type"},{"title":"Embedded Wallet Differences","href":"/javascript/reference/bitcoin/embedded-wallet-differences"}]},{"group":"Aptos","icon":"layer-group","pages":[{"title":"getAptosClient","href":"/javascript/reference/aptos/get-aptos-client"},{"title":"Adding Aptos Extensions","href":"/javascript/reference/aptos/adding-aptos-extension"},{"title":"Checking Aptos Wallet Account Type","href":"/javascript/reference/aptos/checking-aptos-wallet-account-type"},{"title":"signTransaction (Aptos)","href":"/javascript/reference/aptos/sign-transaction"},{"title":"signAndSubmitTransaction (Aptos)","href":"/javascript/reference/aptos/sign-and-submit-transaction"}]},{"group":"Sui","icon":"water","pages":[{"title":"getSuiClient","href":"/javascript/reference/sui/get-sui-client"},{"title":"Adding Sui Extensions","href":"/javascript/reference/sui/adding-sui-extension"},{"title":"Checking Sui Wallet Account Type","href":"/javascript/reference/sui/checking-sui-wallet-account-type"},{"title":"signTransaction (Sui)","href":"/javascript/reference/sui/sign-transaction"},{"title":"signAndExecuteTransaction (Sui)","href":"/javascript/reference/sui/sign-and-execute-transaction"},{"title":"signTransactionBlock (Sui)","href":"/javascript/reference/sui/sign-transaction-block"},{"title":"signAndExecuteTransactionBlock (Sui)","href":"/javascript/reference/sui/sign-and-execute-transaction-block"}]},{"group":"TON","icon":"paper-plane","pages":[{"title":"sendTon","href":"/javascript/reference/ton/send-ton"},{"title":"sendJetton","href":"/javascript/reference/ton/send-jetton"},{"title":"generateTonConnectProof","href":"/javascript/reference/ton/generate-ton-connect-proof"},{"title":"Adding TON Extensions","href":"/javascript/reference/ton/adding-ton-extension"},{"title":"Checking TON Wallet Account Type","href":"/javascript/reference/ton/checking-ton-wallet-account-type"},{"title":"sendTransaction (TON)","href":"/javascript/reference/ton/send-transaction"}]},{"group":"Tron","icon":"circle-nodes","pages":[{"title":"getTronWeb","href":"/javascript/reference/tron/get-tron-web"},{"title":"Adding Tron Extensions","href":"/javascript/reference/tron/adding-tron-extension"},{"title":"Checking Tron Wallet Account Type","href":"/javascript/reference/tron/checking-tron-wallet-account-type"},{"title":"sendTransaction (Tron)","href":"/javascript/reference/tron/send-transaction"}]},{"group":"Starknet","icon":"star","pages":[{"title":"getStarknetAccount","href":"/javascript/reference/starknet/get-starknet-account"},{"title":"Adding Starknet Extension","href":"/javascript/reference/starknet/adding-starknet-extension"},{"title":"Checking Starknet Wallet Account Type","href":"/javascript/reference/starknet/checking-starknet-wallet-account-type"}]},{"group":"Stellar","icon":"meteor","pages":[{"title":"Adding Stellar Extension","href":"/javascript/reference/stellar/adding-stellar-extension"},{"title":"Checking Stellar Wallet Account Type","href":"/javascript/reference/stellar/checking-stellar-wallet-account-type"},{"title":"signTransaction (Stellar)","href":"/javascript/reference/stellar/sign-transaction"}]},{"group":"Tempo","icon":"dollar-sign","pages":[{"title":"Tempo","href":"/javascript/reference/tempo/overview"},{"title":"Send batched calls","href":"/javascript/reference/tempo/send-batched-calls"},{"title":"Pay fees with a TIP-20 token","href":"/javascript/reference/tempo/pay-fees-with-a-token"},{"title":"Use parallel nonce lanes","href":"/javascript/reference/tempo/use-parallel-nonce-lanes"},{"title":"Set a validity window","href":"/javascript/reference/tempo/set-a-validity-window"},{"title":"Sign for a fee sponsor","href":"/javascript/reference/tempo/sign-for-a-fee-sponsor"}]},{"group":"Networks","icon":"network-wired","pages":[{"title":"Network Transformers","href":"/javascript/reference/networks/network-transformers"}]}]},{"group":"ZeroDev","icon":"gas-pump","pages":[{"title":"createKernelClientForWalletAccount","href":"/javascript/reference/zerodev/create-kernel-client-for-wallet-account"},{"title":"signEip7702Authorization","href":"/javascript/reference/zerodev/sign-eip-7702-authorization"},{"title":"sendUserOperation","href":"/javascript/reference/zerodev/send-user-operation"},{"title":"canSponsorUserOperation","href":"/javascript/reference/zerodev/can-sponsor-user-operation"},{"title":"estimateUserOperationGas","href":"/javascript/reference/zerodev/estimate-user-operation-gas"},{"title":"simulateZerodevUserOperation","href":"/javascript/reference/zerodev/simulate-zerodev-user-operation"},{"title":"calculateFeeForUserOperation","href":"/javascript/reference/zerodev/calculate-fee-for-user-operation"},{"title":"getSignerForSmartWalletAccount","href":"/javascript/reference/zerodev/get-signer-for-smart-wallet-account"},{"title":"isGasSponsorshipError","href":"/javascript/reference/zerodev/is-gas-sponsorship-error"},{"title":"Adding ZeroDev Extension","href":"/javascript/reference/zerodev/adding-zerodev-extension"}]},{"group":"Swaps","icon":"arrows-rotate","pages":[{"title":"getSwapQuote","href":"/javascript/reference/client/get-swap-quote"},{"title":"getSwapStatus","href":"/javascript/reference/client/get-swap-status"},{"title":"executeSwapTransaction","href":"/javascript/reference/client/execute-swap-transaction"}]},{"group":"Earn","icon":"chart-line","pages":[{"title":"listYieldVaults","href":"/javascript/reference/client/list-yield-vaults"},{"title":"getYieldDetails","href":"/javascript/reference/client/get-yield-details"},{"title":"getYieldPosition","href":"/javascript/reference/client/get-yield-position"},{"title":"getYieldPerformance","href":"/javascript/reference/client/get-yield-performance"},{"title":"getYieldEarnings","href":"/javascript/reference/client/get-yield-earnings"},{"title":"getYieldRewards","href":"/javascript/reference/client/get-yield-rewards"},{"title":"withdrawFromYieldVault","href":"/javascript/reference/client/withdraw-from-yield-vault"},{"title":"claimYieldRewards","href":"/javascript/reference/client/claim-yield-rewards"},{"title":"depositToYieldVault","href":"/javascript/reference/client/deposit-to-yield-vault"}]},{"group":"Flow","icon":"coins","pages":[{"title":"getFlow","href":"/javascript/reference/client/get-flow"},{"title":"getFlowSupportedExchanges","href":"/javascript/reference/client/get-flow-supported-exchanges"},{"title":"attachFlowSource","href":"/javascript/reference/client/attach-flow-source"},{"title":"getFlowQuote","href":"/javascript/reference/client/get-flow-quote"},{"title":"submitFlowTransaction","href":"/javascript/reference/client/submit-flow-transaction"},{"title":"cancelFlow","href":"/javascript/reference/client/cancel-flow"},{"title":"shouldPollFlow","href":"/javascript/reference/client/should-poll-flow"},{"title":"getFlowDeliveredAmount","href":"/javascript/reference/client/get-flow-delivered-amount"},{"title":"prepareFlowSigning","href":"/javascript/reference/client/prepare-flow-signing"},{"title":"broadcastFlow","href":"/javascript/reference/client/broadcast-flow"}]},{"group":"Funding","icon":"money-bill-transfer","pages":[{"group":"Kraken","pages":[{"title":"Kraken Integration","href":"/javascript/funding/kraken-integration"},{"title":"getKrakenAccounts","href":"/javascript/funding/get-kraken-accounts"},{"title":"getKrakenWhitelistedAddresses","href":"/javascript/funding/get-kraken-whitelisted-addresses"},{"title":"createKrakenExchangeTransfer","href":"/javascript/funding/create-kraken-exchange-transfer"}]},{"group":"Coinbase","pages":[{"title":"getCoinbaseBuyUrl","href":"/javascript/funding/get-coinbase-buy-url"},{"title":"createCoinbaseOnrampOrder","href":"/javascript/funding/create-coinbase-onramp-order"},{"title":"getMissingVerificationForCoinbaseOnrampOrder","href":"/javascript/funding/get-missing-verification-for-coinbase-onramp-order"},{"title":"addCoinbaseOnrampOrderEventListener","href":"/javascript/funding/add-coinbase-onramp-order-event-listener"},{"title":"getCoinbaseAccounts","href":"/javascript/funding/get-coinbase-accounts"},{"title":"createCoinbaseExchangeTransfer","href":"/javascript/funding/create-coinbase-exchange-transfer"}]},{"group":"MoonPay","pages":[{"title":"getMoonPayUrl","href":"/javascript/funding/get-moonpay-url"},{"title":"getMoonPayCurrencies","href":"/javascript/funding/get-moonpay-currencies"}]},{"title":"createCryptoDotComPayment","href":"/javascript/funding/create-crypto-dot-com-payment"}]},{"group":"Building UI","icon":"palette","pages":[{"title":"Building UI Overview","sidebarTitle":"Overview","href":"/javascript/building-ui/overview"},{"group":"React UI","pages":[{"title":"React UI components","sidebarTitle":"Overview","href":"/javascript/building-ui/react-ui/overview"},{"title":"Connect wallet widget","href":"/javascript/building-ui/react-ui/connect-wallet-widget"},{"title":"Flow payment widget","href":"/javascript/building-ui/react-ui/flow-widget"},{"title":"Text keys","href":"/javascript/building-ui/react-ui/text-reference"}]},{"group":"Authentication","pages":[{"title":"Email \u0026 SMS OTP sign-in","href":"/javascript/building-ui/email-sms-otp-sign-in"},{"title":"Social sign-in \u0026 OAuth redirect handling","href":"/javascript/building-ui/social-oauth-redirect-handling"},{"title":"Passkey sign-in \u0026 registration","href":"/javascript/building-ui/passkey-sign-in-registration"}]},{"group":"Right after login","pages":[{"title":"Post-login user setup","href":"/javascript/building-ui/post-auth-user-setup"},{"title":"Account conflict resolution","href":"/javascript/building-ui/account-conflict-resolution"},{"title":"Account merging","href":"/javascript/building-ui/account-merging"}]},{"group":"Wallets","pages":[{"title":"Connecting external wallets","href":"/javascript/building-ui/connecting-external-wallets"},{"title":"Connected wallets management","href":"/javascript/building-ui/connected-wallets-management"},{"title":"Token balances \u0026 display","href":"/javascript/building-ui/token-balances-display"},{"title":"Transaction confirmation \u0026 simulation","href":"/javascript/building-ui/transaction-confirmation"},{"title":"Network switching \u0026 validation","href":"/javascript/building-ui/network-switching"}]},{"group":"Embedded wallet lifecycle","pages":[{"title":"Embedded wallet password \u0026 security","href":"/javascript/building-ui/embedded-wallet-security"},{"title":"Wallet backup \u0026 recovery","href":"/javascript/building-ui/wallet-backup-recovery"},{"title":"Embedded wallet delegated access","href":"/javascript/building-ui/embedded-wallet-delegated-access"},{"group":"Upgrading legacy embedded wallets","pages":[{"title":"Upgrading legacy embedded wallets to Dynamic WaaS","href":"/javascript/building-ui/legacy-wallet-upgrade"},{"title":"Upgrade by redirect","href":"/javascript/building-ui/legacy-wallet-upgrade/redirect"},{"title":"Embed the upgrade app (iframe)","href":"/javascript/building-ui/legacy-wallet-upgrade/embed"},{"title":"Upgrade by popup","href":"/javascript/building-ui/legacy-wallet-upgrade/popup"},{"title":"Going lower-level (build the URL yourself)","href":"/javascript/building-ui/legacy-wallet-upgrade/lower-level"}]}]},{"group":"Advanced auth \u0026 identity","pages":[{"title":"MFA enrollment \u0026 management","href":"/javascript/building-ui/mfa-enrollment-management"},{"title":"Step-up authentication","href":"/javascript/building-ui/step-up-authentication"},{"title":"Device registration","href":"/javascript/building-ui/device-registration"},{"title":"User profile \u0026 settings","href":"/javascript/building-ui/user-profile-settings"},{"title":"Handling blocked wallets","href":"/javascript/building-ui/blocked-wallet-screening"}]},{"group":"Money movement","pages":[{"title":"Funding flows","href":"/javascript/building-ui/funding-flows"},{"title":"Building an exchange transfer UI","href":"/javascript/building-ui/exchange-transfers"},{"title":"Building a swap UI","href":"/javascript/building-ui/swap-ui"},{"title":"Building an Earn UI","href":"/javascript/building-ui/earn-ui"}]}]},{"group":"Migrating from React","icon":"arrow-right-arrow-left","pages":[{"title":"Migrating from React to the JavaScript SDK","href":"/javascript/migrating-from-react/overview"},{"title":"Basic setup","href":"/javascript/migrating-from-react/basic-setup"},{"group":"Authentication","pages":[{"title":"Non-wallet authentication","href":"/javascript/migrating-from-react/non-wallet-authentication"},{"title":"Wallet authentication","href":"/javascript/migrating-from-react/wallet-authentication"}]},{"group":"Right after login","pages":[{"title":"Post-login user setup","href":"/javascript/migrating-from-react/post-login-user-setup"},{"title":"Account conflict resolution","href":"/javascript/migrating-from-react/account-conflict-resolution"}]},{"group":"Wallets","pages":[{"title":"Using connected wallets","href":"/javascript/migrating-from-react/using-connected-wallets"},{"title":"Network management","href":"/javascript/migrating-from-react/network-management"},{"title":"Transactions \u0026 balance","href":"/javascript/migrating-from-react/transactions-and-balance"}]},{"group":"Embedded wallets","pages":[{"title":"Embedded wallets: setup \u0026 creation","description":"The React SDK auto-created embedded wallets during its login flow. In the JavaScript SDK you decide when to create them and for which chains — the full build lives in the Building UI post-login guide.","href":"/javascript/migrating-from-react/embedded-wallets-setup"},{"title":"Embedded wallets: password \u0026 security","href":"/javascript/migrating-from-react/embedded-wallets-password-security"},{"title":"Embedded wallets: backup \u0026 recovery","description":"The React SDK drove keyshare backup and private-key export from its widget screens. In the JavaScript SDK you run the readiness check, the Google Drive backup, and the secure export yourself.","href":"/javascript/migrating-from-react/embedded-wallets-backup-recovery"},{"title":"Embedded wallets: delegated access","href":"/javascript/migrating-from-react/embedded-wallets-delegated-access"},{"title":"Embedded wallets: transactions \u0026 session keys","href":"/javascript/migrating-from-react/embedded-wallets-transactions"},{"title":"Upgrading embedded wallets","href":"/javascript/migrating-from-react/upgrading-embedded-wallets"}]},{"group":"Advanced auth \u0026 identity","pages":[{"title":"Multi-factor authentication","href":"/javascript/migrating-from-react/mfa"},{"title":"Step-up authentication","href":"/javascript/migrating-from-react/step-up-auth"},{"title":"Users","href":"/javascript/migrating-from-react/users"}]},{"group":"Money movement","pages":[{"title":"Funding","href":"/javascript/migrating-from-react/funding"},{"title":"Gas sponsorship \u0026 smart wallets","href":"/javascript/migrating-from-react/gas-sponsorship-smart-wallets"}]},{"group":"Chains \u0026 configuration","pages":[{"title":"Global wallets","href":"/javascript/migrating-from-react/global-wallets"},{"title":"Integrating chains","href":"/javascript/migrating-from-react/integrating-chains"},{"title":"Cookies","href":"/javascript/migrating-from-react/cookies"},{"title":"Wagmi integration","href":"/javascript/migrating-from-react/wagmi"}]},{"title":"Migration Guide: v0.9.0","href":"/javascript/reference/zerodev/migration-v0.9"}]},{"group":"Migrating from React Native","icon":"arrow-right-arrow-left","pages":[{"title":"Migrating from React Native to the JavaScript SDK","href":"/javascript/migrating-from-react-native/overview"}]},{"group":"Extensions","icon":"puzzle-piece","pages":[{"title":"Creating Extensions","href":"/javascript/reference/creating-extensions"},{"title":"Publish an Extension","href":"/javascript/reference/creating-extensions/publish"},{"title":"Custom Functions","href":"/javascript/reference/creating-extensions/custom-functions"},{"group":"Wallet Provider","icon":"wallet","pages":[{"title":"Wallet Provider","href":"/javascript/reference/creating-extensions/wallet-provider/overview"},{"title":"Supported wallet standards","href":"/javascript/reference/creating-extensions/wallet-provider/supported-standards"},{"title":"Build a WalletProvider","href":"/javascript/reference/creating-extensions/wallet-provider/build-wallet-provider"},{"title":"Add swap capabilities","href":"/javascript/reference/creating-extensions/wallet-provider/add-swap-capabilities"},{"title":"Add Earn capabilities","href":"/javascript/reference/creating-extensions/wallet-provider/add-earn-capabilities"},{"title":"Build a payment deep link","href":"/javascript/reference/creating-extensions/wallet-provider/build-payment-deep-link"}]},{"group":"Services","icon":"gears","pages":[{"title":"Storage","href":"/javascript/reference/creating-extensions/services/storage"},{"title":"Open deep links","href":"/javascript/reference/creating-extensions/services/open-deep-links"},{"title":"Wallet provider priority","href":"/javascript/reference/creating-extensions/services/wallet-provider-priority"}]}]}]}]},{"item":"Swift","icon":"swift","pages":[{"title":"Swift","href":"/swift/sdk-reference/overview"}]},{"item":"Kotlin","icon":"android","pages":[{"title":"Kotlin","href":"/kotlin/sdk-reference/overview"}]},{"item":"Flutter","icon":"flutter","pages":[{"title":"Flutter","href":"/flutter/sdk-reference/overview"}]},{"item":"Unity","icon":"unity","pages":[{"title":"Unity","href":"/unity/sdk-reference/overview"}]},{"item":"Node","icon":"node","pages":[{"title":"Node","href":"/node/reference/auth/authenticate-jwt"}]},{"item":"REST API","icon":"code","pages":[{"title":"REST API","href":"/api-reference/overview"}]},{"item":"Legacy React","icon":"react","pages":[{"title":"Legacy React","href":"/react/reference/quickstart"}]},{"item":"Legacy React Native","icon":"mobile-screen","pages":[{"title":"Legacy React Native","href":"/react-native/reference/introduction"}]}]},{"tab":"Recipes","icon":"book-open","pages":[{"title":"Recipes","href":"/recipes/recipes"}]}]},"basePath":"","title":"Embedded wallets: password \u0026 security - Dynamic","buildId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","deploymentId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","dynamics":[],"chunks":[]}