@bounded-sh/client 0.0.53-next.1 → 0.0.55

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.
Files changed (53) hide show
  1. package/README.md +10 -4
  2. package/dist/builds/apps.d.ts +33 -4
  3. package/dist/builds/client.d.ts +5 -1
  4. package/dist/builds/types.d.ts +9 -0
  5. package/dist/{email-auth-provider-CR7B2pob.mjs → email-auth-provider-BKl9GgHV.mjs} +2 -2
  6. package/dist/{email-auth-provider-CRFJd5Rp.mjs.map → email-auth-provider-BKl9GgHV.mjs.map} +1 -1
  7. package/dist/{email-auth-provider-BQ-DTX3z.js → email-auth-provider-BaZceaov.js} +2 -2
  8. package/dist/{email-auth-provider-BQ-DTX3z.js.map → email-auth-provider-BaZceaov.js.map} +1 -1
  9. package/dist/{email-auth-provider-CyEhOnGQ.js → email-auth-provider-lVwM8vRR.js} +2 -2
  10. package/dist/{email-auth-provider-CyEhOnGQ.js.map → email-auth-provider-lVwM8vRR.js.map} +1 -1
  11. package/dist/{email-auth-provider-CRFJd5Rp.mjs → email-auth-provider-yBbGzH2e.mjs} +2 -2
  12. package/dist/{email-auth-provider-CR7B2pob.mjs.map → email-auth-provider-yBbGzH2e.mjs.map} +1 -1
  13. package/dist/{guest-auth-provider-BLzLLs7u.mjs → guest-auth-provider-BnugW3TI.mjs} +2 -2
  14. package/dist/{guest-auth-provider-BLzLLs7u.mjs.map → guest-auth-provider-BnugW3TI.mjs.map} +1 -1
  15. package/dist/{guest-auth-provider-3cWfAi5V.js → guest-auth-provider-DTKczntw.js} +2 -2
  16. package/dist/{guest-auth-provider-3cWfAi5V.js.map → guest-auth-provider-DTKczntw.js.map} +1 -1
  17. package/dist/{guest-auth-provider-1GGM1eWA.mjs → guest-auth-provider-Dgs8zcnC.mjs} +2 -2
  18. package/dist/{guest-auth-provider-1GGM1eWA.mjs.map → guest-auth-provider-Dgs8zcnC.mjs.map} +1 -1
  19. package/dist/{guest-auth-provider-DkUngKob.js → guest-auth-provider-DhN9PoAi.js} +2 -2
  20. package/dist/{guest-auth-provider-DkUngKob.js.map → guest-auth-provider-DhN9PoAi.js.map} +1 -1
  21. package/dist/{index-C6p_-77w.js → index-CXVwyR6_.js} +34 -13
  22. package/dist/{index-C6p_-77w.js.map → index-CXVwyR6_.js.map} +1 -1
  23. package/dist/{index-Co7IqxVo.mjs → index-DkdIADby.mjs} +34 -13
  24. package/dist/{index-Co7IqxVo.mjs.map → index-DkdIADby.mjs.map} +1 -1
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +9 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +2 -2
  29. package/dist/{index.native-BTPOnWux.js → index.native-CouprxZp.js} +34 -13
  30. package/dist/{index.native-BTPOnWux.js.map → index.native-CouprxZp.js.map} +1 -1
  31. package/dist/{index.native-BoKkzObx.mjs → index.native-aSo8M0A8.mjs} +34 -13
  32. package/dist/{index.native-BoKkzObx.mjs.map → index.native-aSo8M0A8.mjs.map} +1 -1
  33. package/dist/index.native.d.ts +2 -0
  34. package/dist/index.native.js +9 -1
  35. package/dist/index.native.js.map +1 -1
  36. package/dist/index.native.mjs +2 -2
  37. package/dist/{injected-evm-wallet-provider-CA9ENSN4.mjs → injected-evm-wallet-provider-BgiFW_kf.mjs} +2 -2
  38. package/dist/{injected-evm-wallet-provider-CA9ENSN4.mjs.map → injected-evm-wallet-provider-BgiFW_kf.mjs.map} +1 -1
  39. package/dist/{injected-evm-wallet-provider-Cjs3K7fU.js → injected-evm-wallet-provider-CiCeS1n2.js} +2 -2
  40. package/dist/{injected-evm-wallet-provider-Cjs3K7fU.js.map → injected-evm-wallet-provider-CiCeS1n2.js.map} +1 -1
  41. package/dist/{injected-evm-wallet-provider-DCqeV702.js → injected-evm-wallet-provider-CtrS-gLC.js} +2 -2
  42. package/dist/{injected-evm-wallet-provider-DCqeV702.js.map → injected-evm-wallet-provider-CtrS-gLC.js.map} +1 -1
  43. package/dist/{injected-evm-wallet-provider-Bsh00akg.mjs → injected-evm-wallet-provider-D7fd42En.mjs} +2 -2
  44. package/dist/{injected-evm-wallet-provider-Bsh00akg.mjs.map → injected-evm-wallet-provider-D7fd42En.mjs.map} +1 -1
  45. package/dist/{injected-wallet-provider-uF4yZt8l.mjs → injected-wallet-provider-BhpwmpgW.mjs} +2 -2
  46. package/dist/{injected-wallet-provider-uF4yZt8l.mjs.map → injected-wallet-provider-BhpwmpgW.mjs.map} +1 -1
  47. package/dist/{injected-wallet-provider-CfzCTdM5.js → injected-wallet-provider-Bic6GpDr.js} +2 -2
  48. package/dist/{injected-wallet-provider-CfzCTdM5.js.map → injected-wallet-provider-Bic6GpDr.js.map} +1 -1
  49. package/dist/{injected-wallet-provider-BwHOxPAR.mjs → injected-wallet-provider-CRG9TaA9.mjs} +2 -2
  50. package/dist/{injected-wallet-provider-BwHOxPAR.mjs.map → injected-wallet-provider-CRG9TaA9.mjs.map} +1 -1
  51. package/dist/{injected-wallet-provider-CmhZtf9E.js → injected-wallet-provider-CST-B9EE.js} +2 -2
  52. package/dist/{injected-wallet-provider-CmhZtf9E.js.map → injected-wallet-provider-CST-B9EE.js.map} +1 -1
  53. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"guest-auth-provider-1GGM1eWA.mjs","sources":["../.rollup-tmp/auth/providers/guest-keystore.js","../.rollup-tmp/auth/providers/guest-auth-provider.js"],"sourcesContent":["// guest-keystore.ts — durable per-device keypair for anonymous (\"guest\") auth.\n//\n// A guest is an ed25519 keypair generated on the device. Its public key is the\n// Bounded account address; it signs the auth challenge exactly like a wallet.\n//\n// Guest auth has one backend: WebCrypto Ed25519 + IndexedDB. The key is\n// NON-EXTRACTABLE: an XSS can ask it to sign but can never read the private\n// bytes. If WebCrypto or IndexedDB is unavailable, guest auth fails closed\n// instead of silently creating an extractable/stored-secret credential.\n//\n// The public output is a base58 address + a base64\n// detached signature, which is the format the session endpoint already accepts.\nimport bs58 from 'bs58';\nimport { getPlatform } from '../../platform';\nconst LEGACY_STORED_SECRET_KEY = 'bounded_guest_key_v1';\nconst IDB_NAME = 'bounded-guest';\nconst IDB_STORE = 'keys';\nconst IDB_KEY = 'ed25519';\nconst GUEST_KEY_REQUIREMENT = 'Guest auth requires non-extractable WebCrypto Ed25519 keys persisted in IndexedDB; ' +\n 'stored-secret guest credentials are disabled.';\nfunction toBase64(bytes) {\n let bin = '';\n for (let i = 0; i < bytes.length; i++)\n bin += String.fromCharCode(bytes[i]);\n // btoa exists in browsers + RN (Hermes) ; Buffer is the Node/SSR fallback.\n return typeof btoa !== 'undefined' ? btoa(bin) : Buffer.from(bytes).toString('base64');\n}\n// ----- WebCrypto (non-extractable) backend -----------------------------------\nfunction subtle() {\n const c = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto;\n return c && c.subtle ? c.subtle : null;\n}\nfunction idb() {\n return new Promise((resolve, reject) => {\n const req = globalThis.indexedDB.open(IDB_NAME, 1);\n req.onupgradeneeded = () => req.result.createObjectStore(IDB_STORE);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction idbGet(db, key) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readonly').objectStore(IDB_STORE).get(key);\n r.onsuccess = () => resolve(r.result);\n r.onerror = () => reject(r.error);\n });\n}\nfunction idbPut(db, key, val) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).put(val, key);\n r.onsuccess = () => resolve();\n r.onerror = () => reject(r.error);\n });\n}\nfunction guestKeyUnavailable(cause) {\n const detail = cause instanceof Error && cause.message ? ` Cause: ${cause.message}` : '';\n return new Error(`${GUEST_KEY_REQUIREMENT}${detail}`);\n}\nasync function webCryptoKey(createIfMissing) {\n const s = subtle();\n if (!s)\n throw guestKeyUnavailable(new Error('WebCrypto subtle crypto is unavailable.'));\n if (typeof globalThis.indexedDB === 'undefined') {\n throw guestKeyUnavailable(new Error('IndexedDB is unavailable.'));\n }\n try {\n const db = await idb();\n let pair = (await idbGet(db, IDB_KEY));\n if (!pair) {\n if (!createIfMissing)\n return null;\n // Probe Ed25519 support by generating (throws on unsupported engines).\n pair = (await s.generateKey({ name: 'Ed25519' }, /* extractable */ false, [\n 'sign',\n 'verify',\n ]));\n await idbPut(db, IDB_KEY, pair); // CryptoKey is structured-cloneable; bytes never exposed\n }\n const raw = new Uint8Array(await s.exportKey('raw', pair.publicKey)); // public is exportable\n const address = bs58.encode(raw);\n return {\n address,\n nonExtractable: true,\n async sign(message) {\n const data = new TextEncoder().encode(message);\n const sig = new Uint8Array(await s.sign({ name: 'Ed25519' }, pair.privateKey, data));\n return toBase64(sig);\n },\n };\n }\n catch (error) {\n throw guestKeyUnavailable(error);\n }\n}\nlet cached = null;\n/** Get (or create) this device's durable guest key. */\nexport async function getGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(true);\n if (!cached)\n throw guestKeyUnavailable(new Error('Guest key creation returned no key.'));\n return cached;\n}\n/** Read the existing durable guest key without ever minting a replacement. */\nexport async function getExistingGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(false);\n return cached;\n}\n/** Forget the guest key on this device (a fresh signInAnonymously mints a new one). */\nexport async function clearGuestKey() {\n cached = null;\n try {\n getPlatform().storage.removeItem(LEGACY_STORED_SECRET_KEY);\n }\n catch (_a) { }\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n const db = await idb();\n await new Promise((res) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).delete(IDB_KEY);\n r.onsuccess = () => res();\n r.onerror = () => res();\n });\n }\n }\n catch (_b) { }\n}\n","import { getActiveSessionManager as SessionManager, createSessionWithSignature, genAuthNonce, genSolanaMessage, } from '@bounded-sh/core';\nimport { getPlatform } from '../../platform';\nimport { setCurrentUser, setAuthLoading } from '../../global';\nimport { getGuestKey, getExistingGuestKey, clearGuestKey } from './guest-keystore';\nconst GUEST_TX_UNSUPPORTED = 'Guest (anonymous) auth is offchain-only — it cannot sign or submit Solana transactions. ' +\n 'Use a wallet provider for onchain actions.';\nexport class GuestAuthProvider {\n async loginInternal(commitGlobalState, manageLoading) {\n if (manageLoading)\n setAuthLoading(true);\n try {\n const key = await getGuestKey();\n // Reuse a still-valid session for this exact guest.\n const existing = await SessionManager().getSession();\n if (existing && existing.address === key.address) {\n if (!this.tokenIsGuest(SessionManager().getIdToken(), key.address)) {\n throw new Error('The active session for this device key is not anonymous. Sign out explicitly before starting a guest session.');\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n // Mint a fresh session: nonce -> canonical message -> local signature.\n const nonce = await genAuthNonce();\n const message = await genSolanaMessage(key.address, nonce);\n const signature = await key.sign(message); // base64 detached ed25519\n // Pass the discriminator explicitly. During a transactional switch the\n // shared core config intentionally remains on the previous provider until\n // this session is safely minted and persisted.\n const result = await createSessionWithSignature(key.address, message, signature, 'guest');\n if (!this.tokenIsGuest(result.idToken, key.address)) {\n throw new Error('Guest session issuer returned a non-anonymous or identity-mismatched token.');\n }\n await SessionManager().storeSession(key.address, result.accessToken, result.idToken, result.refreshToken);\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n finally {\n if (manageLoading)\n setAuthLoading(false);\n }\n }\n async login() {\n return this.loginInternal(true, true);\n }\n /** @internal Stage a guest session without exposing mixed provider/user state. */\n async loginForProviderSwitch() {\n return this.loginInternal(false, false);\n }\n tokenIsGuest(idToken, expectedAddress) {\n var _a;\n try {\n if (!idToken)\n return false;\n let b64 = (_a = idToken.split('.')[1]) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '+').replace(/_/g, '/');\n if (!b64)\n return false;\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n const claims = JSON.parse(getPlatform().atob(b64));\n if ((claims === null || claims === void 0 ? void 0 : claims.is_anonymous) !== true)\n return false;\n if (expectedAddress && (claims === null || claims === void 0 ? void 0 : claims['custom:walletAddress']) !== expectedAddress)\n return false;\n return true;\n }\n catch (_b) {\n return false;\n }\n }\n async restoreSessionInternal(commitGlobalState) {\n const manager = SessionManager();\n const session = await manager.getSession();\n if (!session)\n return null;\n // The marker/provider choice is not authority. A guest provider may only\n // continue with an issuer-stamped guest bearer whose persisted device key\n // still controls the exact same address. Anything else is an identity split\n // and must lose bearer authority immediately.\n if (!this.tokenIsGuest(manager.getIdToken(), session.address)) {\n manager.clearSession();\n return null;\n }\n let key;\n try {\n key = await getExistingGuestKey();\n }\n catch (_a) {\n manager.clearSession();\n return null;\n }\n if (!key || session.address !== key.address) {\n manager.clearSession();\n return null;\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n async restoreSession() {\n return this.restoreSessionInternal(true);\n }\n /** @internal Reconcile an applied-yet-error guest mint before committing a switch. */\n async restoreSessionForProviderSwitch() {\n return this.restoreSessionInternal(false);\n }\n async logout() {\n // Clears the SESSION but keeps the device key, so logging back in returns the\n // SAME guest identity (and its data). Use forgetGuest() to wipe the key too.\n SessionManager().clearSession();\n setCurrentUser(null);\n }\n /** Wipe the device key — the next login() is a brand-new guest identity. */\n async forgetGuest() {\n SessionManager().clearSession();\n await clearGuestKey();\n setCurrentUser(null);\n }\n async signMessage(message) {\n const key = await getGuestKey();\n return key.sign(message);\n }\n // --- offchain guest: no Solana transaction surface -------------------------\n async runTransaction(_evm, _sol, _options) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signTransaction(_t) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signAndSubmitTransaction() {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async getNativeMethods() {\n return {};\n }\n}\n"],"names":["SessionManager"],"mappings":"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"}
1
+ {"version":3,"file":"guest-auth-provider-Dgs8zcnC.mjs","sources":["../.rollup-tmp/auth/providers/guest-keystore.js","../.rollup-tmp/auth/providers/guest-auth-provider.js"],"sourcesContent":["// guest-keystore.ts — durable per-device keypair for anonymous (\"guest\") auth.\n//\n// A guest is an ed25519 keypair generated on the device. Its public key is the\n// Bounded account address; it signs the auth challenge exactly like a wallet.\n//\n// Guest auth has one backend: WebCrypto Ed25519 + IndexedDB. The key is\n// NON-EXTRACTABLE: an XSS can ask it to sign but can never read the private\n// bytes. If WebCrypto or IndexedDB is unavailable, guest auth fails closed\n// instead of silently creating an extractable/stored-secret credential.\n//\n// The public output is a base58 address + a base64\n// detached signature, which is the format the session endpoint already accepts.\nimport bs58 from 'bs58';\nimport { getPlatform } from '../../platform';\nconst LEGACY_STORED_SECRET_KEY = 'bounded_guest_key_v1';\nconst IDB_NAME = 'bounded-guest';\nconst IDB_STORE = 'keys';\nconst IDB_KEY = 'ed25519';\nconst GUEST_KEY_REQUIREMENT = 'Guest auth requires non-extractable WebCrypto Ed25519 keys persisted in IndexedDB; ' +\n 'stored-secret guest credentials are disabled.';\nfunction toBase64(bytes) {\n let bin = '';\n for (let i = 0; i < bytes.length; i++)\n bin += String.fromCharCode(bytes[i]);\n // btoa exists in browsers + RN (Hermes) ; Buffer is the Node/SSR fallback.\n return typeof btoa !== 'undefined' ? btoa(bin) : Buffer.from(bytes).toString('base64');\n}\n// ----- WebCrypto (non-extractable) backend -----------------------------------\nfunction subtle() {\n const c = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto;\n return c && c.subtle ? c.subtle : null;\n}\nfunction idb() {\n return new Promise((resolve, reject) => {\n const req = globalThis.indexedDB.open(IDB_NAME, 1);\n req.onupgradeneeded = () => req.result.createObjectStore(IDB_STORE);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction idbGet(db, key) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readonly').objectStore(IDB_STORE).get(key);\n r.onsuccess = () => resolve(r.result);\n r.onerror = () => reject(r.error);\n });\n}\nfunction idbPut(db, key, val) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).put(val, key);\n r.onsuccess = () => resolve();\n r.onerror = () => reject(r.error);\n });\n}\nfunction guestKeyUnavailable(cause) {\n const detail = cause instanceof Error && cause.message ? ` Cause: ${cause.message}` : '';\n return new Error(`${GUEST_KEY_REQUIREMENT}${detail}`);\n}\nasync function webCryptoKey(createIfMissing) {\n const s = subtle();\n if (!s)\n throw guestKeyUnavailable(new Error('WebCrypto subtle crypto is unavailable.'));\n if (typeof globalThis.indexedDB === 'undefined') {\n throw guestKeyUnavailable(new Error('IndexedDB is unavailable.'));\n }\n try {\n const db = await idb();\n let pair = (await idbGet(db, IDB_KEY));\n if (!pair) {\n if (!createIfMissing)\n return null;\n // Probe Ed25519 support by generating (throws on unsupported engines).\n pair = (await s.generateKey({ name: 'Ed25519' }, /* extractable */ false, [\n 'sign',\n 'verify',\n ]));\n await idbPut(db, IDB_KEY, pair); // CryptoKey is structured-cloneable; bytes never exposed\n }\n const raw = new Uint8Array(await s.exportKey('raw', pair.publicKey)); // public is exportable\n const address = bs58.encode(raw);\n return {\n address,\n nonExtractable: true,\n async sign(message) {\n const data = new TextEncoder().encode(message);\n const sig = new Uint8Array(await s.sign({ name: 'Ed25519' }, pair.privateKey, data));\n return toBase64(sig);\n },\n };\n }\n catch (error) {\n throw guestKeyUnavailable(error);\n }\n}\nlet cached = null;\n/** Get (or create) this device's durable guest key. */\nexport async function getGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(true);\n if (!cached)\n throw guestKeyUnavailable(new Error('Guest key creation returned no key.'));\n return cached;\n}\n/** Read the existing durable guest key without ever minting a replacement. */\nexport async function getExistingGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(false);\n return cached;\n}\n/** Forget the guest key on this device (a fresh signInAnonymously mints a new one). */\nexport async function clearGuestKey() {\n cached = null;\n try {\n getPlatform().storage.removeItem(LEGACY_STORED_SECRET_KEY);\n }\n catch (_a) { }\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n const db = await idb();\n await new Promise((res) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).delete(IDB_KEY);\n r.onsuccess = () => res();\n r.onerror = () => res();\n });\n }\n }\n catch (_b) { }\n}\n","import { getActiveSessionManager as SessionManager, createSessionWithSignature, genAuthNonce, genSolanaMessage, } from '@bounded-sh/core';\nimport { getPlatform } from '../../platform';\nimport { setCurrentUser, setAuthLoading } from '../../global';\nimport { getGuestKey, getExistingGuestKey, clearGuestKey } from './guest-keystore';\nconst GUEST_TX_UNSUPPORTED = 'Guest (anonymous) auth is offchain-only — it cannot sign or submit Solana transactions. ' +\n 'Use a wallet provider for onchain actions.';\nexport class GuestAuthProvider {\n async loginInternal(commitGlobalState, manageLoading) {\n if (manageLoading)\n setAuthLoading(true);\n try {\n const key = await getGuestKey();\n // Reuse a still-valid session for this exact guest.\n const existing = await SessionManager().getSession();\n if (existing && existing.address === key.address) {\n if (!this.tokenIsGuest(SessionManager().getIdToken(), key.address)) {\n throw new Error('The active session for this device key is not anonymous. Sign out explicitly before starting a guest session.');\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n // Mint a fresh session: nonce -> canonical message -> local signature.\n const nonce = await genAuthNonce();\n const message = await genSolanaMessage(key.address, nonce);\n const signature = await key.sign(message); // base64 detached ed25519\n // Pass the discriminator explicitly. During a transactional switch the\n // shared core config intentionally remains on the previous provider until\n // this session is safely minted and persisted.\n const result = await createSessionWithSignature(key.address, message, signature, 'guest');\n if (!this.tokenIsGuest(result.idToken, key.address)) {\n throw new Error('Guest session issuer returned a non-anonymous or identity-mismatched token.');\n }\n await SessionManager().storeSession(key.address, result.accessToken, result.idToken, result.refreshToken);\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n finally {\n if (manageLoading)\n setAuthLoading(false);\n }\n }\n async login() {\n return this.loginInternal(true, true);\n }\n /** @internal Stage a guest session without exposing mixed provider/user state. */\n async loginForProviderSwitch() {\n return this.loginInternal(false, false);\n }\n tokenIsGuest(idToken, expectedAddress) {\n var _a;\n try {\n if (!idToken)\n return false;\n let b64 = (_a = idToken.split('.')[1]) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '+').replace(/_/g, '/');\n if (!b64)\n return false;\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n const claims = JSON.parse(getPlatform().atob(b64));\n if ((claims === null || claims === void 0 ? void 0 : claims.is_anonymous) !== true)\n return false;\n if (expectedAddress && (claims === null || claims === void 0 ? void 0 : claims['custom:walletAddress']) !== expectedAddress)\n return false;\n return true;\n }\n catch (_b) {\n return false;\n }\n }\n async restoreSessionInternal(commitGlobalState) {\n const manager = SessionManager();\n const session = await manager.getSession();\n if (!session)\n return null;\n // The marker/provider choice is not authority. A guest provider may only\n // continue with an issuer-stamped guest bearer whose persisted device key\n // still controls the exact same address. Anything else is an identity split\n // and must lose bearer authority immediately.\n if (!this.tokenIsGuest(manager.getIdToken(), session.address)) {\n manager.clearSession();\n return null;\n }\n let key;\n try {\n key = await getExistingGuestKey();\n }\n catch (_a) {\n manager.clearSession();\n return null;\n }\n if (!key || session.address !== key.address) {\n manager.clearSession();\n return null;\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n async restoreSession() {\n return this.restoreSessionInternal(true);\n }\n /** @internal Reconcile an applied-yet-error guest mint before committing a switch. */\n async restoreSessionForProviderSwitch() {\n return this.restoreSessionInternal(false);\n }\n async logout() {\n // Clears the SESSION but keeps the device key, so logging back in returns the\n // SAME guest identity (and its data). Use forgetGuest() to wipe the key too.\n SessionManager().clearSession();\n setCurrentUser(null);\n }\n /** Wipe the device key — the next login() is a brand-new guest identity. */\n async forgetGuest() {\n SessionManager().clearSession();\n await clearGuestKey();\n setCurrentUser(null);\n }\n async signMessage(message) {\n const key = await getGuestKey();\n return key.sign(message);\n }\n // --- offchain guest: no Solana transaction surface -------------------------\n async runTransaction(_evm, _sol, _options) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signTransaction(_t) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signAndSubmitTransaction() {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async getNativeMethods() {\n return {};\n }\n}\n"],"names":["SessionManager"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@bounded-sh/core');
4
- var index_native = require('./index.native-BTPOnWux.js');
4
+ var index_native = require('./index.native-CouprxZp.js');
5
5
  require('react');
6
6
 
7
7
  // guest-keystore.ts — durable per-device keypair for anonymous ("guest") auth.
@@ -274,4 +274,4 @@ class GuestAuthProvider {
274
274
  }
275
275
 
276
276
  exports.GuestAuthProvider = GuestAuthProvider;
277
- //# sourceMappingURL=guest-auth-provider-DkUngKob.js.map
277
+ //# sourceMappingURL=guest-auth-provider-DhN9PoAi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guest-auth-provider-DkUngKob.js","sources":["../.rollup-tmp/auth/providers/guest-keystore.js","../.rollup-tmp/auth/providers/guest-auth-provider.js"],"sourcesContent":["// guest-keystore.ts — durable per-device keypair for anonymous (\"guest\") auth.\n//\n// A guest is an ed25519 keypair generated on the device. Its public key is the\n// Bounded account address; it signs the auth challenge exactly like a wallet.\n//\n// Guest auth has one backend: WebCrypto Ed25519 + IndexedDB. The key is\n// NON-EXTRACTABLE: an XSS can ask it to sign but can never read the private\n// bytes. If WebCrypto or IndexedDB is unavailable, guest auth fails closed\n// instead of silently creating an extractable/stored-secret credential.\n//\n// The public output is a base58 address + a base64\n// detached signature, which is the format the session endpoint already accepts.\nimport bs58 from 'bs58';\nimport { getPlatform } from '../../platform';\nconst LEGACY_STORED_SECRET_KEY = 'bounded_guest_key_v1';\nconst IDB_NAME = 'bounded-guest';\nconst IDB_STORE = 'keys';\nconst IDB_KEY = 'ed25519';\nconst GUEST_KEY_REQUIREMENT = 'Guest auth requires non-extractable WebCrypto Ed25519 keys persisted in IndexedDB; ' +\n 'stored-secret guest credentials are disabled.';\nfunction toBase64(bytes) {\n let bin = '';\n for (let i = 0; i < bytes.length; i++)\n bin += String.fromCharCode(bytes[i]);\n // btoa exists in browsers + RN (Hermes) ; Buffer is the Node/SSR fallback.\n return typeof btoa !== 'undefined' ? btoa(bin) : Buffer.from(bytes).toString('base64');\n}\n// ----- WebCrypto (non-extractable) backend -----------------------------------\nfunction subtle() {\n const c = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto;\n return c && c.subtle ? c.subtle : null;\n}\nfunction idb() {\n return new Promise((resolve, reject) => {\n const req = globalThis.indexedDB.open(IDB_NAME, 1);\n req.onupgradeneeded = () => req.result.createObjectStore(IDB_STORE);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction idbGet(db, key) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readonly').objectStore(IDB_STORE).get(key);\n r.onsuccess = () => resolve(r.result);\n r.onerror = () => reject(r.error);\n });\n}\nfunction idbPut(db, key, val) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).put(val, key);\n r.onsuccess = () => resolve();\n r.onerror = () => reject(r.error);\n });\n}\nfunction guestKeyUnavailable(cause) {\n const detail = cause instanceof Error && cause.message ? ` Cause: ${cause.message}` : '';\n return new Error(`${GUEST_KEY_REQUIREMENT}${detail}`);\n}\nasync function webCryptoKey(createIfMissing) {\n const s = subtle();\n if (!s)\n throw guestKeyUnavailable(new Error('WebCrypto subtle crypto is unavailable.'));\n if (typeof globalThis.indexedDB === 'undefined') {\n throw guestKeyUnavailable(new Error('IndexedDB is unavailable.'));\n }\n try {\n const db = await idb();\n let pair = (await idbGet(db, IDB_KEY));\n if (!pair) {\n if (!createIfMissing)\n return null;\n // Probe Ed25519 support by generating (throws on unsupported engines).\n pair = (await s.generateKey({ name: 'Ed25519' }, /* extractable */ false, [\n 'sign',\n 'verify',\n ]));\n await idbPut(db, IDB_KEY, pair); // CryptoKey is structured-cloneable; bytes never exposed\n }\n const raw = new Uint8Array(await s.exportKey('raw', pair.publicKey)); // public is exportable\n const address = bs58.encode(raw);\n return {\n address,\n nonExtractable: true,\n async sign(message) {\n const data = new TextEncoder().encode(message);\n const sig = new Uint8Array(await s.sign({ name: 'Ed25519' }, pair.privateKey, data));\n return toBase64(sig);\n },\n };\n }\n catch (error) {\n throw guestKeyUnavailable(error);\n }\n}\nlet cached = null;\n/** Get (or create) this device's durable guest key. */\nexport async function getGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(true);\n if (!cached)\n throw guestKeyUnavailable(new Error('Guest key creation returned no key.'));\n return cached;\n}\n/** Read the existing durable guest key without ever minting a replacement. */\nexport async function getExistingGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(false);\n return cached;\n}\n/** Forget the guest key on this device (a fresh signInAnonymously mints a new one). */\nexport async function clearGuestKey() {\n cached = null;\n try {\n getPlatform().storage.removeItem(LEGACY_STORED_SECRET_KEY);\n }\n catch (_a) { }\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n const db = await idb();\n await new Promise((res) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).delete(IDB_KEY);\n r.onsuccess = () => res();\n r.onerror = () => res();\n });\n }\n }\n catch (_b) { }\n}\n","import { getActiveSessionManager as SessionManager, createSessionWithSignature, genAuthNonce, genSolanaMessage, } from '@bounded-sh/core';\nimport { getPlatform } from '../../platform';\nimport { setCurrentUser, setAuthLoading } from '../../global';\nimport { getGuestKey, getExistingGuestKey, clearGuestKey } from './guest-keystore';\nconst GUEST_TX_UNSUPPORTED = 'Guest (anonymous) auth is offchain-only — it cannot sign or submit Solana transactions. ' +\n 'Use a wallet provider for onchain actions.';\nexport class GuestAuthProvider {\n async loginInternal(commitGlobalState, manageLoading) {\n if (manageLoading)\n setAuthLoading(true);\n try {\n const key = await getGuestKey();\n // Reuse a still-valid session for this exact guest.\n const existing = await SessionManager().getSession();\n if (existing && existing.address === key.address) {\n if (!this.tokenIsGuest(SessionManager().getIdToken(), key.address)) {\n throw new Error('The active session for this device key is not anonymous. Sign out explicitly before starting a guest session.');\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n // Mint a fresh session: nonce -> canonical message -> local signature.\n const nonce = await genAuthNonce();\n const message = await genSolanaMessage(key.address, nonce);\n const signature = await key.sign(message); // base64 detached ed25519\n // Pass the discriminator explicitly. During a transactional switch the\n // shared core config intentionally remains on the previous provider until\n // this session is safely minted and persisted.\n const result = await createSessionWithSignature(key.address, message, signature, 'guest');\n if (!this.tokenIsGuest(result.idToken, key.address)) {\n throw new Error('Guest session issuer returned a non-anonymous or identity-mismatched token.');\n }\n await SessionManager().storeSession(key.address, result.accessToken, result.idToken, result.refreshToken);\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n finally {\n if (manageLoading)\n setAuthLoading(false);\n }\n }\n async login() {\n return this.loginInternal(true, true);\n }\n /** @internal Stage a guest session without exposing mixed provider/user state. */\n async loginForProviderSwitch() {\n return this.loginInternal(false, false);\n }\n tokenIsGuest(idToken, expectedAddress) {\n var _a;\n try {\n if (!idToken)\n return false;\n let b64 = (_a = idToken.split('.')[1]) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '+').replace(/_/g, '/');\n if (!b64)\n return false;\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n const claims = JSON.parse(getPlatform().atob(b64));\n if ((claims === null || claims === void 0 ? void 0 : claims.is_anonymous) !== true)\n return false;\n if (expectedAddress && (claims === null || claims === void 0 ? void 0 : claims['custom:walletAddress']) !== expectedAddress)\n return false;\n return true;\n }\n catch (_b) {\n return false;\n }\n }\n async restoreSessionInternal(commitGlobalState) {\n const manager = SessionManager();\n const session = await manager.getSession();\n if (!session)\n return null;\n // The marker/provider choice is not authority. A guest provider may only\n // continue with an issuer-stamped guest bearer whose persisted device key\n // still controls the exact same address. Anything else is an identity split\n // and must lose bearer authority immediately.\n if (!this.tokenIsGuest(manager.getIdToken(), session.address)) {\n manager.clearSession();\n return null;\n }\n let key;\n try {\n key = await getExistingGuestKey();\n }\n catch (_a) {\n manager.clearSession();\n return null;\n }\n if (!key || session.address !== key.address) {\n manager.clearSession();\n return null;\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n async restoreSession() {\n return this.restoreSessionInternal(true);\n }\n /** @internal Reconcile an applied-yet-error guest mint before committing a switch. */\n async restoreSessionForProviderSwitch() {\n return this.restoreSessionInternal(false);\n }\n async logout() {\n // Clears the SESSION but keeps the device key, so logging back in returns the\n // SAME guest identity (and its data). Use forgetGuest() to wipe the key too.\n SessionManager().clearSession();\n setCurrentUser(null);\n }\n /** Wipe the device key — the next login() is a brand-new guest identity. */\n async forgetGuest() {\n SessionManager().clearSession();\n await clearGuestKey();\n setCurrentUser(null);\n }\n async signMessage(message) {\n const key = await getGuestKey();\n return key.sign(message);\n }\n // --- offchain guest: no Solana transaction surface -------------------------\n async runTransaction(_evm, _sol, _options) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signTransaction(_t) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signAndSubmitTransaction() {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async getNativeMethods() {\n return {};\n }\n}\n"],"names":["bs58","getPlatform","setAuthLoading","SessionManager","setCurrentUser","genAuthNonce","genSolanaMessage","createSessionWithSignature"],"mappings":"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"}
1
+ {"version":3,"file":"guest-auth-provider-DhN9PoAi.js","sources":["../.rollup-tmp/auth/providers/guest-keystore.js","../.rollup-tmp/auth/providers/guest-auth-provider.js"],"sourcesContent":["// guest-keystore.ts — durable per-device keypair for anonymous (\"guest\") auth.\n//\n// A guest is an ed25519 keypair generated on the device. Its public key is the\n// Bounded account address; it signs the auth challenge exactly like a wallet.\n//\n// Guest auth has one backend: WebCrypto Ed25519 + IndexedDB. The key is\n// NON-EXTRACTABLE: an XSS can ask it to sign but can never read the private\n// bytes. If WebCrypto or IndexedDB is unavailable, guest auth fails closed\n// instead of silently creating an extractable/stored-secret credential.\n//\n// The public output is a base58 address + a base64\n// detached signature, which is the format the session endpoint already accepts.\nimport bs58 from 'bs58';\nimport { getPlatform } from '../../platform';\nconst LEGACY_STORED_SECRET_KEY = 'bounded_guest_key_v1';\nconst IDB_NAME = 'bounded-guest';\nconst IDB_STORE = 'keys';\nconst IDB_KEY = 'ed25519';\nconst GUEST_KEY_REQUIREMENT = 'Guest auth requires non-extractable WebCrypto Ed25519 keys persisted in IndexedDB; ' +\n 'stored-secret guest credentials are disabled.';\nfunction toBase64(bytes) {\n let bin = '';\n for (let i = 0; i < bytes.length; i++)\n bin += String.fromCharCode(bytes[i]);\n // btoa exists in browsers + RN (Hermes) ; Buffer is the Node/SSR fallback.\n return typeof btoa !== 'undefined' ? btoa(bin) : Buffer.from(bytes).toString('base64');\n}\n// ----- WebCrypto (non-extractable) backend -----------------------------------\nfunction subtle() {\n const c = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto;\n return c && c.subtle ? c.subtle : null;\n}\nfunction idb() {\n return new Promise((resolve, reject) => {\n const req = globalThis.indexedDB.open(IDB_NAME, 1);\n req.onupgradeneeded = () => req.result.createObjectStore(IDB_STORE);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction idbGet(db, key) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readonly').objectStore(IDB_STORE).get(key);\n r.onsuccess = () => resolve(r.result);\n r.onerror = () => reject(r.error);\n });\n}\nfunction idbPut(db, key, val) {\n return new Promise((resolve, reject) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).put(val, key);\n r.onsuccess = () => resolve();\n r.onerror = () => reject(r.error);\n });\n}\nfunction guestKeyUnavailable(cause) {\n const detail = cause instanceof Error && cause.message ? ` Cause: ${cause.message}` : '';\n return new Error(`${GUEST_KEY_REQUIREMENT}${detail}`);\n}\nasync function webCryptoKey(createIfMissing) {\n const s = subtle();\n if (!s)\n throw guestKeyUnavailable(new Error('WebCrypto subtle crypto is unavailable.'));\n if (typeof globalThis.indexedDB === 'undefined') {\n throw guestKeyUnavailable(new Error('IndexedDB is unavailable.'));\n }\n try {\n const db = await idb();\n let pair = (await idbGet(db, IDB_KEY));\n if (!pair) {\n if (!createIfMissing)\n return null;\n // Probe Ed25519 support by generating (throws on unsupported engines).\n pair = (await s.generateKey({ name: 'Ed25519' }, /* extractable */ false, [\n 'sign',\n 'verify',\n ]));\n await idbPut(db, IDB_KEY, pair); // CryptoKey is structured-cloneable; bytes never exposed\n }\n const raw = new Uint8Array(await s.exportKey('raw', pair.publicKey)); // public is exportable\n const address = bs58.encode(raw);\n return {\n address,\n nonExtractable: true,\n async sign(message) {\n const data = new TextEncoder().encode(message);\n const sig = new Uint8Array(await s.sign({ name: 'Ed25519' }, pair.privateKey, data));\n return toBase64(sig);\n },\n };\n }\n catch (error) {\n throw guestKeyUnavailable(error);\n }\n}\nlet cached = null;\n/** Get (or create) this device's durable guest key. */\nexport async function getGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(true);\n if (!cached)\n throw guestKeyUnavailable(new Error('Guest key creation returned no key.'));\n return cached;\n}\n/** Read the existing durable guest key without ever minting a replacement. */\nexport async function getExistingGuestKey() {\n if (cached)\n return cached;\n cached = await webCryptoKey(false);\n return cached;\n}\n/** Forget the guest key on this device (a fresh signInAnonymously mints a new one). */\nexport async function clearGuestKey() {\n cached = null;\n try {\n getPlatform().storage.removeItem(LEGACY_STORED_SECRET_KEY);\n }\n catch (_a) { }\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n const db = await idb();\n await new Promise((res) => {\n const r = db.transaction(IDB_STORE, 'readwrite').objectStore(IDB_STORE).delete(IDB_KEY);\n r.onsuccess = () => res();\n r.onerror = () => res();\n });\n }\n }\n catch (_b) { }\n}\n","import { getActiveSessionManager as SessionManager, createSessionWithSignature, genAuthNonce, genSolanaMessage, } from '@bounded-sh/core';\nimport { getPlatform } from '../../platform';\nimport { setCurrentUser, setAuthLoading } from '../../global';\nimport { getGuestKey, getExistingGuestKey, clearGuestKey } from './guest-keystore';\nconst GUEST_TX_UNSUPPORTED = 'Guest (anonymous) auth is offchain-only — it cannot sign or submit Solana transactions. ' +\n 'Use a wallet provider for onchain actions.';\nexport class GuestAuthProvider {\n async loginInternal(commitGlobalState, manageLoading) {\n if (manageLoading)\n setAuthLoading(true);\n try {\n const key = await getGuestKey();\n // Reuse a still-valid session for this exact guest.\n const existing = await SessionManager().getSession();\n if (existing && existing.address === key.address) {\n if (!this.tokenIsGuest(SessionManager().getIdToken(), key.address)) {\n throw new Error('The active session for this device key is not anonymous. Sign out explicitly before starting a guest session.');\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n // Mint a fresh session: nonce -> canonical message -> local signature.\n const nonce = await genAuthNonce();\n const message = await genSolanaMessage(key.address, nonce);\n const signature = await key.sign(message); // base64 detached ed25519\n // Pass the discriminator explicitly. During a transactional switch the\n // shared core config intentionally remains on the previous provider until\n // this session is safely minted and persisted.\n const result = await createSessionWithSignature(key.address, message, signature, 'guest');\n if (!this.tokenIsGuest(result.idToken, key.address)) {\n throw new Error('Guest session issuer returned a non-anonymous or identity-mismatched token.');\n }\n await SessionManager().storeSession(key.address, result.accessToken, result.idToken, result.refreshToken);\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n finally {\n if (manageLoading)\n setAuthLoading(false);\n }\n }\n async login() {\n return this.loginInternal(true, true);\n }\n /** @internal Stage a guest session without exposing mixed provider/user state. */\n async loginForProviderSwitch() {\n return this.loginInternal(false, false);\n }\n tokenIsGuest(idToken, expectedAddress) {\n var _a;\n try {\n if (!idToken)\n return false;\n let b64 = (_a = idToken.split('.')[1]) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '+').replace(/_/g, '/');\n if (!b64)\n return false;\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n const claims = JSON.parse(getPlatform().atob(b64));\n if ((claims === null || claims === void 0 ? void 0 : claims.is_anonymous) !== true)\n return false;\n if (expectedAddress && (claims === null || claims === void 0 ? void 0 : claims['custom:walletAddress']) !== expectedAddress)\n return false;\n return true;\n }\n catch (_b) {\n return false;\n }\n }\n async restoreSessionInternal(commitGlobalState) {\n const manager = SessionManager();\n const session = await manager.getSession();\n if (!session)\n return null;\n // The marker/provider choice is not authority. A guest provider may only\n // continue with an issuer-stamped guest bearer whose persisted device key\n // still controls the exact same address. Anything else is an identity split\n // and must lose bearer authority immediately.\n if (!this.tokenIsGuest(manager.getIdToken(), session.address)) {\n manager.clearSession();\n return null;\n }\n let key;\n try {\n key = await getExistingGuestKey();\n }\n catch (_a) {\n manager.clearSession();\n return null;\n }\n if (!key || session.address !== key.address) {\n manager.clearSession();\n return null;\n }\n const user = { address: key.address, isAnonymous: true, provider: this };\n if (commitGlobalState)\n setCurrentUser(user);\n return user;\n }\n async restoreSession() {\n return this.restoreSessionInternal(true);\n }\n /** @internal Reconcile an applied-yet-error guest mint before committing a switch. */\n async restoreSessionForProviderSwitch() {\n return this.restoreSessionInternal(false);\n }\n async logout() {\n // Clears the SESSION but keeps the device key, so logging back in returns the\n // SAME guest identity (and its data). Use forgetGuest() to wipe the key too.\n SessionManager().clearSession();\n setCurrentUser(null);\n }\n /** Wipe the device key — the next login() is a brand-new guest identity. */\n async forgetGuest() {\n SessionManager().clearSession();\n await clearGuestKey();\n setCurrentUser(null);\n }\n async signMessage(message) {\n const key = await getGuestKey();\n return key.sign(message);\n }\n // --- offchain guest: no Solana transaction surface -------------------------\n async runTransaction(_evm, _sol, _options) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signTransaction(_t) {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async signAndSubmitTransaction() {\n throw new Error(GUEST_TX_UNSUPPORTED);\n }\n async getNativeMethods() {\n return {};\n }\n}\n"],"names":["bs58","getPlatform","setAuthLoading","SessionManager","setCurrentUser","genAuthNonce","genSolanaMessage","createSessionWithSignature"],"mappings":"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"}
@@ -4464,7 +4464,7 @@ async function getAuthProvider(config) {
4464
4464
  // manager as legacy email sessions. Human login should be started
4465
4465
  // with loginWithRedirect(); this provider is kept as the restore and
4466
4466
  // logout surface for those sessions.
4467
- currentAuthProvider = new (await Promise.resolve().then(function () { return require('./email-auth-provider-BQ-DTX3z.js'); })).EmailAuthProvider();
4467
+ currentAuthProvider = new (await Promise.resolve().then(function () { return require('./email-auth-provider-BaZceaov.js'); })).EmailAuthProvider();
4468
4468
  break;
4469
4469
  case "wallet":
4470
4470
  case "phantom": {
@@ -4483,7 +4483,7 @@ async function getAuthProvider(config) {
4483
4483
  if (!isWalletLoginEnabled(config)) {
4484
4484
  throw walletLoginNotEnabledError(authMethod);
4485
4485
  }
4486
- const { InjectedWalletProvider } = await Promise.resolve().then(function () { return require('./injected-wallet-provider-CfzCTdM5.js'); });
4486
+ const { InjectedWalletProvider } = await Promise.resolve().then(function () { return require('./injected-wallet-provider-Bic6GpDr.js'); });
4487
4487
  currentAuthProvider = new InjectedWalletProvider(resolveInjectedWalletConfig(config), rpcUrl, configuredNetwork);
4488
4488
  break;
4489
4489
  }
@@ -4496,7 +4496,7 @@ async function getAuthProvider(config) {
4496
4496
  // Selecting authMethod:'evm-wallet' IS the opt-in — pass evmWalletConfig
4497
4497
  // to point at a specific wallet or set chainId/domain.
4498
4498
  const evmWalletConfig = ((_a = config.evmWalletConfig) !== null && _a !== void 0 ? _a : {});
4499
- const { InjectedEvmWalletProvider } = await Promise.resolve().then(function () { return require('./injected-evm-wallet-provider-DCqeV702.js'); });
4499
+ const { InjectedEvmWalletProvider } = await Promise.resolve().then(function () { return require('./injected-evm-wallet-provider-CtrS-gLC.js'); });
4500
4500
  currentAuthProvider = new InjectedEvmWalletProvider(evmWalletConfig);
4501
4501
  break;
4502
4502
  }
@@ -4524,7 +4524,7 @@ async function getAuthProvider(config) {
4524
4524
  break;
4525
4525
  case "guest":
4526
4526
  // Anonymous auth: a device-local ed25519 keypair signs the challenge.
4527
- currentAuthProvider = new (await Promise.resolve().then(function () { return require('./guest-auth-provider-3cWfAi5V.js'); })).GuestAuthProvider();
4527
+ currentAuthProvider = new (await Promise.resolve().then(function () { return require('./guest-auth-provider-DTKczntw.js'); })).GuestAuthProvider();
4528
4528
  break;
4529
4529
  }
4530
4530
  if (!currentAuthProvider) {
@@ -4580,7 +4580,7 @@ async function signInAnonymously() {
4580
4580
  // Lazy-load the guest provider so its ed25519/web3 dependencies stay out of
4581
4581
  // the main bundle for data-only apps. Specifier is a static string literal
4582
4582
  // so bundle-splitting can see it.
4583
- const provider = new (await Promise.resolve().then(function () { return require('./guest-auth-provider-3cWfAi5V.js'); })).GuestAuthProvider();
4583
+ const provider = new (await Promise.resolve().then(function () { return require('./guest-auth-provider-DTKczntw.js'); })).GuestAuthProvider();
4584
4584
  setAuthLoading(true); // reflect "signing in…" while the guest keypair session is minted
4585
4585
  const commit = (user) => {
4586
4586
  // No await/interleaving inside this block: provider/method/config/marker
@@ -5695,14 +5695,32 @@ const builds = {
5695
5695
  };
5696
5696
 
5697
5697
  async function create(options = {}) {
5698
- const body = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (options.name !== undefined ? { name: options.name } : {})), (options.prompt !== undefined ? { prompt: options.prompt } : {})), (options.clientToken !== undefined ? { clientToken: options.clientToken } : {})), (options.intent !== undefined ? { intent: options.intent } : {})), (options.oapp === true ? { oapp: true } : {}));
5698
+ const body = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (options.name !== undefined ? { name: options.name } : {})), (options.prompt !== undefined ? { prompt: options.prompt } : {})), (options.idempotencyKey !== undefined ? { idempotencyKey: options.idempotencyKey } : {})), (options.intent !== undefined ? { intent: options.intent } : {})), (options.oapp === true ? { oapp: true } : {}));
5699
5699
  const app = await requestDevApi('/apps/new', {
5700
5700
  method: 'POST',
5701
5701
  body,
5702
5702
  });
5703
- return Object.assign(Object.assign({ appId: app.appId }, (typeof app.slug === 'string' && app.slug ? { slug: app.slug } : {})), { url: app.url,
5704
- // Fail closed against an older server response that omitted this field.
5705
- policySeeded: app.policySeeded === true });
5703
+ return Object.assign(Object.assign(Object.assign(Object.assign({ appId: app.appId }, (typeof app.slug === 'string' && app.slug ? { slug: app.slug } : {})), { url: app.url }), (typeof app.prompt === 'string' && app.prompt ? { prompt: app.prompt } : {})), (typeof app.handoff === 'string' && app.handoff ? { handoff: app.handoff } : {}));
5704
+ }
5705
+ /**
5706
+ * F-1200: build the create-flow redirect the owner is sent to after `create()`, with the
5707
+ * prompt and handoff carried in the URL FRAGMENT (never the query - fragments never reach
5708
+ * servers, logs, or Referer). Encoding is byte-exact so the widget's `URLSearchParams`
5709
+ * parse + `.trim()` reproduces the SAME prompt string dev-api hashed into the handoff;
5710
+ * getting this wrong would make the widget reject a genuine token and degrade to prefill.
5711
+ * Callers (bounded.sh, oapps.fun) should use this instead of hand-building the URL.
5712
+ *
5713
+ * Returns `${url}#bounded_prompt=<prompt>` with no `&bounded_handoff=` when the server
5714
+ * minted no handoff (HANDOFF_SECRET unset) - the widget then prefills without auto-running.
5715
+ */
5716
+ function buildCreateRedirectUrl(app) {
5717
+ const base = app.url;
5718
+ const prompt = typeof app.prompt === 'string' ? app.prompt.trim() : '';
5719
+ if (!prompt)
5720
+ return base;
5721
+ const params = `bounded_prompt=${encodeURIComponent(prompt)}`
5722
+ + (app.handoff ? `&bounded_handoff=${encodeURIComponent(app.handoff)}` : '');
5723
+ return `${base}#${params}`;
5706
5724
  }
5707
5725
  async function list() {
5708
5726
  // This legacy-compatible action shape is also used by oapps.fun listMyApps.
@@ -5723,8 +5741,11 @@ async function list() {
5723
5741
  const name = String((_d = row.name) !== null && _d !== void 0 ? _d : '').trim() || '(unnamed app)';
5724
5742
  const slug = typeof row.slug === 'string' && row.slug ? row.slug : undefined;
5725
5743
  const url = typeof row.url === 'string' && row.url.trim() ? row.url.trim() : undefined;
5726
- return Object.assign(Object.assign({ appId,
5727
- name }, (slug ? { slug } : {})), (url ? { url } : {}));
5744
+ const buildStatus = row.buildStatus === 'building' || row.buildStatus === 'build_failed'
5745
+ ? row.buildStatus
5746
+ : undefined;
5747
+ return Object.assign(Object.assign(Object.assign({ appId,
5748
+ name }, (slug ? { slug } : {})), (url ? { url } : {})), (buildStatus ? { buildStatus } : {}));
5728
5749
  })
5729
5750
  .filter((app) => app !== null);
5730
5751
  }
@@ -5732,7 +5753,7 @@ async function list() {
5732
5753
  * Platform first-party surfaces only (bounded.sh, oapps.fun, localhost) —
5733
5754
  * dev-api CORS blocks calls from generated-app origins. Server-side callers unaffected.
5734
5755
  */
5735
- const apps = { create, list };
5756
+ const apps = { create, list, buildCreateRedirectUrl };
5736
5757
 
5737
5758
  async function deserializeTransaction(tx) {
5738
5759
  // Literal specifier so bundlers can code-split the lazy chunk.
@@ -6263,4 +6284,4 @@ exports.signInAnonymously = signInAnonymously;
6263
6284
  exports.useAuth = useAuth;
6264
6285
  exports.useBuildRun = useBuildRun;
6265
6286
  exports.useQuery = useQuery;
6266
- //# sourceMappingURL=index-C6p_-77w.js.map
6287
+ //# sourceMappingURL=index-CXVwyR6_.js.map