@pollar/core 0.9.0-rc.4 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:/freighterApi/webpack/universalModuleDefinition","webpack:/freighterApi/webpack/bootstrap","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/constants/services.ts","webpack:/freighterApi/webpack/runtime/define%20property%20getters","webpack:/freighterApi/webpack/runtime/hasOwnProperty%20shorthand","webpack:/freighterApi/webpack/runtime/make%20namespace%20object","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/api/helpers/extensionMessaging.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getPublicKey.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/api/external.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signTransaction.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signBlob.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signAuthEntry.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/isConnected.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getNetwork.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getNetworkDetails.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/isAllowed.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/setAllowed.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getUserInfo.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/requestAccess.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/index.ts","../src/keys/factory.ts","../src/lib/base64url.ts","../src/lib/sha256.ts","../src/lib/api-key-hash.ts","../src/keys/thumbprint.ts","../src/keys/web-crypto.ts","../../../node_modules/openapi-fetch/src/index.js","../src/api/client.ts","../src/api/endpoints/distribution.ts","../src/api/endpoints/kyc.ts","../src/api/endpoints/ramps.ts","../src/lib/random-uuid.ts","../src/dpop.ts","../src/lib/logger.ts","../src/storage/web.ts","../src/storage/autodetect.ts","../src/version.ts","../src/visibility/noop.ts","../src/visibility/web.ts","../src/visibility/autodetect.ts","../src/types.ts","../src/wallets/FreighterAdapter.ts","../src/wallets/types.ts","../src/wallets/AlbedoAdapter.ts","../src/client/session.ts","../src/lib/abort.ts","../src/client/stream.ts","../src/client/auth/authenticate.ts","../src/client/auth/deps.ts","../src/client/auth/emailFlow.ts","../src/client/auth/oauthFlow.ts","../src/client/auth/passkeyFlow.ts","../src/client/auth/walletFlow.ts","../src/client/client.ts","../src/stellar/StellarClient.ts","../src/index.ts"],"names":["root","factory","exports","module","define","amd","this","SERVICE_TYPES","EXTERNAL_SERVICE_TYPES","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","e","sendMessageToContentScript","msg","MESSAGE_ID","Date","now","Math","random","window","postMessage","source","messageId","location","origin","Promise","resolve","requestTimeout","type","REQUEST_CONNECTION_STATUS","REQUEST_PUBLIC_KEY","setTimeout","isConnected","publicKey","removeEventListener","messageListener","event","r","data","t","messagedId","clearTimeout","addEventListener","getPublicKey","isBrowser","async","response","error","console","requestPublicKey","signTransaction","transactionXdr","opts","accountToSign","network","_accountToSign","networkPassphrase","signedTransaction","SUBMIT_TRANSACTION","signBlob","blob","signedBlob","SUBMIT_BLOB","signAuthEntry","entryXdr","signedAuthEntry","SUBMIT_AUTH_ENTRY","freighter","requestConnectionStatus","getNetwork","REQUEST_NETWORK","requestNetwork","getNetworkDetails","networkDetails","networkName","networkUrl","sorobanRpcUrl","undefined","REQUEST_NETWORK_DETAILS","isAllowed","REQUEST_ALLOWED_STATUS","requestAllowedStatus","setAllowed","SET_ALLOWED_STATUS","setAllowedStatus","getUserInfo","userInfo","REQUEST_USER_INFO","requestUserInfo","REQUEST_ACCESS","requestAccess","nobleSha256","fetch","Request","final","joiner","WalletType","buildData"],"mappings":"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","file":"index.mjs","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"freighterApi\"] = factory();\n\telse\n\t\troot[\"freighterApi\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","export enum SERVICE_TYPES {\n CREATE_ACCOUNT = \"CREATE_ACCOUNT\",\n FUND_ACCOUNT = \"FUND_ACCOUNT\",\n ADD_ACCOUNT = \"ADD_ACCOUNT\",\n IMPORT_ACCOUNT = \"IMPORT_ACCOUNT\",\n IMPORT_HARDWARE_WALLET = \"IMPORT_HARDWARE_WALLET\",\n LOAD_ACCOUNT = \"LOAD_ACCOUNT\",\n MAKE_ACCOUNT_ACTIVE = \"MAKE_ACCOUNT_ACTIVE\",\n UPDATE_ACCOUNT_NAME = \"UPDATE_ACCOUNT_NAME\",\n GET_MNEMONIC_PHRASE = \"GET_MNEMONIC_PHRASE\",\n CONFIRM_MNEMONIC_PHRASE = \"CONFIRM_MNEMONIC_PHRASE\",\n CONFIRM_MIGRATED_MNEMONIC_PHRASE = \"CONFIRM_MIGRATED_MNEMONIC_PHRASE\",\n RECOVER_ACCOUNT = \"RECOVER_ACCOUNT\",\n CONFIRM_PASSWORD = \"CONFIRM_PASSWORD\",\n REJECT_ACCESS = \"REJECT_ACCESS\",\n GRANT_ACCESS = \"GRANT_ACCESS\",\n SIGN_TRANSACTION = \"SIGN_TRANSACTION\",\n SIGN_BLOB = \"SIGN_BLOB\",\n SIGN_AUTH_ENTRY = \"SIGN_AUTH_ENTRY\",\n HANDLE_SIGNED_HW_TRANSACTION = \"HANDLE_SIGNED_HW_TRANSACTION\",\n REJECT_TRANSACTION = \"REJECT_TRANSACTION\",\n SIGN_FREIGHTER_TRANSACTION = \"SIGN_FREIGHTER_TRANSACTION\",\n SIGN_FREIGHTER_SOROBAN_TRANSACTION = \"SIGN_FREIGHTER_SOROBAN_TRANSACTION\",\n ADD_RECENT_ADDRESS = \"ADD_RECENT_ADDRESS\",\n LOAD_RECENT_ADDRESSES = \"LOAD_RECENT_ADDRESSES\",\n SIGN_OUT = \"SIGN_OUT\",\n SHOW_BACKUP_PHRASE = \"SHOW_BACKUP_PHRASE\",\n SAVE_ALLOWLIST = \"SAVE_ALLOWLIST\",\n SAVE_SETTINGS = \"SAVE_SETTINGS\",\n LOAD_SETTINGS = \"LOAD_SETTINGS\",\n GET_CACHED_ASSET_ICON = \"GET_CACHED_ASSET_ICON\",\n CACHE_ASSET_ICON = \"CACHE_ASSET_ICON\",\n GET_CACHED_ASSET_DOMAIN = \"GET_CACHED_ASSET_DOMAIN\",\n CACHE_ASSET_DOMAIN = \"CACHE_ASSET_DOMAIN\",\n GET_BLOCKED_ACCOUNTS = \"GET_BLOCKED_ACCOUNTS\",\n GET_BLOCKED_DOMAINS = \"GET_BLOCKED_DOMAINS\",\n ADD_CUSTOM_NETWORK = \"ADD_CUSTOM_NETWORK\",\n CHANGE_NETWORK = \"CHANGE_NETWORK\",\n REMOVE_CUSTOM_NETWORK = \"REMOVE_CUSTOM_NETWORK\",\n EDIT_CUSTOM_NETWORK = \"EDIT_CUSTOM_NETWORK\",\n RESET_EXP_DATA = \"RESET_EXP_DATA\",\n ADD_TOKEN_ID = \"ADD_TOKEN_ID\",\n GET_TOKEN_IDS = \"GET_TOKEN_IDS\",\n REMOVE_TOKEN_ID = \"REMOVE_TOKEN_ID\",\n GET_MIGRATABLE_ACCOUNTS = \"GET_MIGRATABLE_ACCOUNTS\",\n GET_MIGRATED_MNEMONIC_PHRASE = \"GET_MIGRATED_MNEMONIC_PHRASE\",\n MIGRATE_ACCOUNTS = \"MIGRATE_ACCOUNTS\",\n}\n\nexport enum EXTERNAL_SERVICE_TYPES {\n REQUEST_ACCESS = \"REQUEST_ACCESS\",\n REQUEST_PUBLIC_KEY = \"REQUEST_PUBLIC_KEY\",\n SUBMIT_TRANSACTION = \"SUBMIT_TRANSACTION\",\n SUBMIT_BLOB = \"SUBMIT_BLOB\",\n SUBMIT_AUTH_ENTRY = \"SUBMIT_AUTH_ENTRY\",\n REQUEST_NETWORK = \"REQUEST_NETWORK\",\n REQUEST_NETWORK_DETAILS = \"REQUEST_NETWORK_DETAILS\",\n REQUEST_CONNECTION_STATUS = \"REQUEST_CONNECTION_STATUS\",\n REQUEST_ALLOWED_STATUS = \"REQUEST_ALLOWED_STATUS\",\n SET_ALLOWED_STATUS = \"SET_ALLOWED_STATUS\",\n REQUEST_USER_INFO = \"REQUEST_USER_INFO\",\n}\n\nexport const EXTERNAL_MSG_REQUEST = \"FREIGHTER_EXTERNAL_MSG_REQUEST\";\nexport const EXTERNAL_MSG_RESPONSE = \"FREIGHTER_EXTERNAL_MSG_RESPONSE\";\n\ndeclare const DEV_SERVER: string;\nconst _DEV_SERVER = DEV_SERVER;\nexport { _DEV_SERVER as DEV_SERVER };\n\ndeclare const DEV_EXTENSION: string;\nconst _DEV_EXTENSION = DEV_EXTENSION;\nexport { _DEV_EXTENSION as DEV_EXTENSION };\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import browser from \"webextension-polyfill\";\nimport {\n DEV_SERVER,\n EXTERNAL_MSG_RESPONSE,\n EXTERNAL_MSG_REQUEST,\n EXTERNAL_SERVICE_TYPES,\n SERVICE_TYPES,\n} from \"../../constants/services\";\nimport { Response } from \"../types\";\n\ninterface Msg {\n [key: string]: any;\n type: EXTERNAL_SERVICE_TYPES | SERVICE_TYPES;\n}\n\nexport const sendMessageToContentScript = (msg: Msg): Promise<Response> => {\n /* \n In the case of multiple calls coming in sequentially, we use this MESSAGE_ID to make sure we're responding to\n the appropriate message sender. Otherwise, we can run into race conditions where we simply resolve all \n sent messages with the first thing that comes back.\n */\n const MESSAGE_ID = Date.now() + Math.random();\n\n window.postMessage(\n { source: EXTERNAL_MSG_REQUEST, messageId: MESSAGE_ID, ...msg },\n window.location.origin,\n );\n return new Promise((resolve) => {\n let requestTimeout = 0;\n\n /* \n In the case that Freighter is not installed at all, any messages to \n background from freighter-api will hang forever and not respond in any way. \n This is especially a problem for the isConnected method, because this is \n likely to be called in a situation where Freighter isn't installed.\n To prevent this, we add a timeout to automatically resolve in the event \n Freighter doesn't respond in a timely fashion to this method.\n */\n if (\n msg.type === EXTERNAL_SERVICE_TYPES.REQUEST_CONNECTION_STATUS ||\n msg.type === EXTERNAL_SERVICE_TYPES.REQUEST_PUBLIC_KEY\n ) {\n requestTimeout = setTimeout(() => {\n resolve({\n isConnected: false,\n publicKey: \"\",\n } as Response);\n window.removeEventListener(\"message\", messageListener);\n }, 2000);\n }\n\n const messageListener = (event: { source: any; data: Response }) => {\n // We only accept messages from ourselves\n if (event.source !== window) return;\n // Only respond to messages tagged as being from our content script\n if (event?.data?.source !== EXTERNAL_MSG_RESPONSE) return;\n // Only respond to messages that this instance of sendMessageToContentScript sent\n if (event?.data?.messagedId !== MESSAGE_ID) return;\n\n resolve(event.data);\n window.removeEventListener(\"message\", messageListener);\n clearTimeout(requestTimeout);\n };\n window.addEventListener(\"message\", messageListener, false);\n });\n};\n\nexport const sendMessageToBackground = async (msg: Msg): Promise<Response> => {\n let res;\n if (DEV_SERVER) {\n // treat this as an external call because we're making the call from the browser, not the popup\n res = await sendMessageToContentScript(msg);\n } else {\n res = await browser.runtime.sendMessage(msg);\n }\n\n return res;\n};\n","import { requestPublicKey } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getPublicKey = (): Promise<string> =>\n isBrowser ? requestPublicKey() : Promise.resolve(\"\");\n","import { EXTERNAL_SERVICE_TYPES } from \"../constants/services\";\nimport { NetworkDetails } from \"../constants/stellar\";\nimport { sendMessageToContentScript } from \"./helpers/extensionMessaging\";\nimport { UserInfo } from \"./types\";\n\nexport const requestAccess = async (): Promise<string> => {\n let response = { publicKey: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_ACCESS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { publicKey, error } = response;\n\n if (error) {\n throw error;\n }\n return publicKey;\n};\n\nexport const requestPublicKey = async (): Promise<string> => {\n let response = { publicKey: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_PUBLIC_KEY,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { publicKey, error } = response;\n\n if (error) {\n throw error;\n }\n return publicKey;\n};\n\nexport const submitTransaction = async (\n transactionXdr: string,\n opts?:\n | string\n | {\n network?: string;\n accountToSign?: string;\n networkPassphrase?: string;\n },\n accountToSign?: string,\n): Promise<string> => {\n let network = \"\";\n let _accountToSign = \"\";\n let networkPassphrase = \"\";\n\n /* \n As of v1.3.0, this method now accepts an object as its second param. \n Previously, it accepted optional second and third string parameters.\n This logic maintains backwards compatibility for older versions\n */\n if (typeof opts === \"object\") {\n network = opts.network || \"\";\n _accountToSign = opts.accountToSign || \"\";\n networkPassphrase = opts.networkPassphrase || \"\";\n } else {\n network = opts || \"\";\n _accountToSign = accountToSign || \"\";\n }\n\n let response = { signedTransaction: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n transactionXdr,\n network,\n networkPassphrase,\n accountToSign: _accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_TRANSACTION,\n });\n } catch (e) {\n console.error(e);\n throw e;\n }\n const { signedTransaction, error } = response;\n\n if (error) {\n throw error;\n }\n return signedTransaction;\n};\n\nexport const submitBlob = async (\n blob: string,\n opts?: {\n accountToSign?: string;\n },\n): Promise<string> => {\n let response = { signedBlob: \"\", error: \"\" };\n const _opts = opts || {};\n const accountToSign = _opts.accountToSign || \"\";\n try {\n response = await sendMessageToContentScript({\n blob,\n accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_BLOB,\n });\n } catch (e) {\n console.error(e);\n throw e;\n }\n const { signedBlob, error } = response;\n\n if (error) {\n throw error;\n }\n return signedBlob;\n};\n\nexport const submitAuthEntry = async (\n entryXdr: string,\n opts?: {\n accountToSign?: string;\n },\n): Promise<string> => {\n let response = { signedAuthEntry: \"\", error: \"\" };\n const _opts = opts || {};\n const accountToSign = _opts.accountToSign || \"\";\n try {\n response = await sendMessageToContentScript({\n entryXdr,\n accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_AUTH_ENTRY,\n });\n } catch (e) {\n console.error(e);\n }\n const { signedAuthEntry, error } = response;\n\n if (error) {\n throw error;\n }\n return signedAuthEntry;\n};\n\nexport const requestNetwork = async (): Promise<string> => {\n let response = { network: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_NETWORK,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { network, error } = response;\n\n if (error) {\n throw error;\n }\n return network;\n};\n\nexport const requestNetworkDetails = async (): Promise<{\n network: string;\n networkUrl: string;\n networkPassphrase: string;\n sorobanRpcUrl?: string;\n}> => {\n let response = {\n networkDetails: {\n network: \"\",\n networkName: \"\",\n networkUrl: \"\",\n networkPassphrase: \"\",\n sorobanRpcUrl: undefined,\n } as NetworkDetails,\n error: \"\",\n };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_NETWORK_DETAILS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { networkDetails, error } = response;\n const {\n network,\n networkUrl,\n networkPassphrase,\n sorobanRpcUrl,\n } = networkDetails;\n\n if (error) {\n throw error;\n }\n return { network, networkUrl, networkPassphrase, sorobanRpcUrl };\n};\n\nexport const requestConnectionStatus = async (): Promise<boolean> => {\n let response = {\n isConnected: false,\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_CONNECTION_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n return response.isConnected;\n};\n\nexport const requestAllowedStatus = async (): Promise<boolean> => {\n let response = {\n isAllowed: false,\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_ALLOWED_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n return response.isAllowed;\n};\n\nexport const setAllowedStatus = async (): Promise<boolean> => {\n let response = {\n isAllowed: false,\n error: \"\",\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.SET_ALLOWED_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { isAllowed, error } = response;\n\n if (error) {\n throw error;\n }\n return isAllowed;\n};\n\nexport const requestUserInfo = async (): Promise<UserInfo> => {\n let response = { userInfo: { publicKey: \"\" }, error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_USER_INFO,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { userInfo, error } = response;\n\n if (error) {\n throw error;\n }\n return userInfo;\n};\n","import { submitTransaction } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signTransaction = (\n transactionXdr: string,\n opts?: {\n network?: string;\n networkPassphrase?: string;\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitTransaction(transactionXdr, opts) : Promise.resolve(\"\");\n","import { submitBlob } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signBlob = (\n blob: string,\n opts?: {\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitBlob(blob, opts) : Promise.resolve(\"\");\n","import { submitAuthEntry } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signAuthEntry = (\n entryXdr: string,\n opts?: {\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitAuthEntry(entryXdr, opts) : Promise.resolve(\"\");\n","import { requestConnectionStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const isConnected = (): Promise<boolean> => {\n if (!isBrowser) return Promise.resolve(false);\n\n if (window.freighter) {\n return Promise.resolve(window.freighter);\n }\n\n return requestConnectionStatus();\n};\n","import { requestNetwork } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getNetwork = (): Promise<string> =>\n isBrowser ? requestNetwork() : Promise.resolve(\"\");\n","import { requestNetworkDetails } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getNetworkDetails = (): Promise<{\n network: string;\n networkUrl: string;\n networkPassphrase: string;\n sorobanRpcUrl?: string;\n}> =>\n isBrowser\n ? requestNetworkDetails()\n : Promise.resolve({\n network: \"\",\n networkUrl: \"\",\n networkPassphrase: \"\",\n sorobanRpcUrl: \"\",\n });\n","import { requestAllowedStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const isAllowed = (): Promise<boolean> =>\n isBrowser ? requestAllowedStatus() : Promise.resolve(false);\n","import { setAllowedStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const setAllowed = (): Promise<boolean> =>\n isBrowser ? setAllowedStatus() : Promise.resolve(false);\n","import { requestUserInfo } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getUserInfo = (): Promise<{ publicKey: string }> =>\n isBrowser ? requestUserInfo() : Promise.resolve({ publicKey: \"\" });\n","import { requestAccess as requestAccessApi } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const requestAccess = (): Promise<string> =>\n isBrowser ? requestAccessApi() : Promise.resolve(\"\");\n","import { getPublicKey } from \"./getPublicKey\";\nimport { signTransaction } from \"./signTransaction\";\nimport { signBlob } from \"./signBlob\";\nimport { signAuthEntry } from \"./signAuthEntry\";\nimport { isConnected } from \"./isConnected\";\nimport { getNetwork } from \"./getNetwork\";\nimport { getNetworkDetails } from \"./getNetworkDetails\";\nimport { isAllowed } from \"./isAllowed\";\nimport { setAllowed } from \"./setAllowed\";\nimport { getUserInfo } from \"./getUserInfo\";\nimport { requestAccess } from \"./requestAccess\";\n\nexport const isBrowser = typeof window !== \"undefined\";\n\nexport {\n getPublicKey,\n signTransaction,\n signBlob,\n signAuthEntry,\n isConnected,\n getNetwork,\n getNetworkDetails,\n isAllowed,\n setAllowed,\n getUserInfo,\n requestAccess,\n};\nexport default {\n getPublicKey,\n signTransaction,\n signBlob,\n signAuthEntry,\n isConnected,\n getNetwork,\n getNetworkDetails,\n isAllowed,\n setAllowed,\n getUserInfo,\n requestAccess,\n};\n","import type { Storage } from '../storage/types';\nimport type { KeyManager } from './types';\n\n/**\n * Module-level registry for the platform-default `KeyManager` factory. Each\n * entry point (web `index.ts`, RN `index.rn.ts`) registers its own factory\n * at module-load time, so that `PollarClient` can resolve a default manager\n * without statically importing both implementations into every bundle.\n *\n * The split exists because `NobleKeyManager` pulls in `@noble/curves`, which\n * we don't want to ship to browser bundles when WebCrypto's ECDSA is\n * already available natively. Bundlers tree-shake the unused entry's noble\n * import; the RN entry keeps the pure-JS fallback.\n */\n\ntype KeyManagerFactory = (storage: Storage, apiKey: string) => KeyManager;\n\nlet _factory: KeyManagerFactory | null = null;\n\n/**\n * Register the platform-default factory. Called as a top-level side effect\n * from the entry-point module (`src/index.ts` or `src/index.rn.ts`).\n * Intentionally underscore-prefixed: not part of the public API.\n */\nexport function _setDefaultKeyManagerFactory(factory: KeyManagerFactory): void {\n _factory = factory;\n}\n\n/**\n * Construct the default `KeyManager` for the current runtime. Throws if no\n * factory has been registered — that only happens if `@pollar/core` was\n * imported in a way that bypassed the entry-point module (a bundler or\n * test setup bug).\n */\nexport function defaultKeyManager(storage: Storage, apiKey: string): KeyManager {\n if (!_factory) {\n throw new Error(\n '[PollarClient] No default KeyManager factory registered. ' +\n 'Did you import from \"@pollar/core\" via a non-standard path?',\n );\n }\n return _factory(storage, apiKey);\n}\n","/**\n * Base64url encoder/decoder (RFC 4648 §5), pure JS — no `btoa`, no `Buffer`.\n * Used everywhere we need to encode/decode JWS segments, JWK fields, hashes,\n * private scalars, etc. Output is unpadded (\"=\" stripped).\n */\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nconst REVERSE: ReadonlyMap<string, number> = (() => {\n const m = new Map<string, number>();\n for (let i = 0; i < ALPHABET.length; i++) m.set(ALPHABET[i] as string, i);\n return m;\n})();\n\n/** Encode raw bytes to base64url (no padding). */\nexport function base64urlEncode(bytes: Uint8Array): string {\n let result = '';\n let i = 0;\n for (; i + 2 < bytes.length; i += 3) {\n const b1 = bytes[i] as number;\n const b2 = bytes[i + 1] as number;\n const b3 = bytes[i + 2] as number;\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[((b1 & 0x03) << 4) | (b2 >> 4)];\n result += ALPHABET[((b2 & 0x0f) << 2) | (b3 >> 6)];\n result += ALPHABET[b3 & 0x3f];\n }\n if (i < bytes.length) {\n const b1 = bytes[i] as number;\n if (i + 1 === bytes.length) {\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[(b1 & 0x03) << 4];\n } else {\n const b2 = bytes[i + 1] as number;\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[((b1 & 0x03) << 4) | (b2 >> 4)];\n result += ALPHABET[(b2 & 0x0f) << 2];\n }\n }\n return result;\n}\n\n/** Decode a base64url string (with or without \"=\" padding) to raw bytes. */\nexport function base64urlDecode(input: string): Uint8Array {\n const clean = input.replace(/=+$/, '');\n const out = new Uint8Array(Math.floor((clean.length * 3) / 4));\n let byteIdx = 0;\n for (let i = 0; i < clean.length; i += 4) {\n const c1 = REVERSE.get(clean[i] as string);\n const c2 = REVERSE.get(clean[i + 1] as string);\n const c3 = i + 2 < clean.length ? REVERSE.get(clean[i + 2] as string) : undefined;\n const c4 = i + 3 < clean.length ? REVERSE.get(clean[i + 3] as string) : undefined;\n if (c1 === undefined || c2 === undefined) {\n throw new Error('[PollarClient] Invalid base64url input');\n }\n out[byteIdx++] = (c1 << 2) | (c2 >> 4);\n if (c3 !== undefined) {\n out[byteIdx++] = ((c2 & 0x0f) << 4) | (c3 >> 2);\n if (c4 !== undefined) {\n out[byteIdx++] = ((c3 & 0x03) << 6) | c4;\n }\n }\n }\n return out.slice(0, byteIdx);\n}\n\n/** Encode a UTF-8 string to base64url. */\nexport function base64urlEncodeString(s: string): string {\n return base64urlEncode(new TextEncoder().encode(s));\n}\n\n/** Decode base64url to a UTF-8 string. */\nexport function base64urlDecodeString(s: string): string {\n return new TextDecoder().decode(base64urlDecode(s));\n}\n","import { sha256 as nobleSha256 } from '@noble/hashes/sha2';\n\n/**\n * SHA-256 via `@noble/hashes` (pure JS). Returns the raw 32-byte digest as a\n * `Uint8Array`.\n *\n * We deliberately do NOT use `crypto.subtle.digest`: it is absent on React\n * Native / Hermes unless a native polyfill (`react-native-quick-crypto`, which\n * forces an Expo dev build) is installed. `@noble/hashes` runs everywhere with\n * no native module, and is already in the dependency tree via `@noble/curves`\n * (the `NobleKeyManager`). The inputs hashed here are tiny (API keys, access\n * tokens, JWK thumbprints), so the JS implementation is more than fast enough.\n *\n * Kept `async` (the digest itself is synchronous) so existing `await sha256(…)`\n * call sites — DPoP `ath`, API-key hashing, JWK thumbprints, `NobleKeyManager`\n * — need no change.\n */\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n return nobleSha256(data);\n}\n","import { sha256 } from './sha256';\n\n/**\n * Stable per-API-key namespace tag used to scope persisted storage keys and\n * keypairs. First 8 hex chars of SHA-256(apiKey) — short enough to read in\n * dev tools, long enough that two distinct keys collide with probability\n * ≈ 1/2^32 (acceptable for namespacing; not for security).\n *\n * Async only to match the `sha256` wrapper's signature — the underlying\n * `@noble/hashes` digest is synchronous. Compute once during client\n * initialization and cache.\n */\nexport async function hashApiKey(apiKey: string): Promise<string> {\n const digest = await sha256(new TextEncoder().encode(apiKey));\n let hex = '';\n for (let i = 0; i < 4; i++) hex += digest[i]!.toString(16).padStart(2, '0');\n return hex;\n}\n","import { base64urlEncode } from '../lib/base64url';\nimport { sha256 } from '../lib/sha256';\nimport type { PublicEcJwk } from './types';\n\n/**\n * Compute the RFC 7638 JWK thumbprint for an EC P-256 public JWK.\n *\n * Algorithm (RFC 7638 §3):\n * 1. Build a JSON object containing ONLY the required members of the JWK,\n * ordered lexicographically by member name (Unicode code point).\n * For EC keys, that's exactly {crv, kty, x, y}.\n * 2. Serialize to UTF-8 with no whitespace and no line breaks.\n * 3. Hash with SHA-256.\n * 4. Base64url-encode the hash (no padding).\n *\n * Common bugs guarded against:\n * - Including extra fields (`alg`, `use`, `kid`, `ext`, `key_ops`).\n * - Wrong member ordering (must be lex by Unicode code point).\n * - Padded base64 instead of base64url unpadded.\n * - Using `JSON.stringify(jwk)` of an arbitrary-key-order object — we build\n * a fresh literal in canonical order to make the order explicit and not\n * rely on V8's insertion-order semantics.\n */\nexport async function computeJwkThumbprint(jwk: PublicEcJwk): Promise<string> {\n if (jwk.kty !== 'EC' || jwk.crv !== 'P-256' || !jwk.x || !jwk.y) {\n throw new Error('[PollarClient:thumbprint] Expected EC P-256 JWK with x and y');\n }\n // Build the canonical string by hand so member order is unambiguous.\n // Lex order of EC required members: 'crv' < 'kty' < 'x' < 'y'.\n const canonical = `{\"crv\":\"${jwk.crv}\",\"kty\":\"${jwk.kty}\",\"x\":\"${jwk.x}\",\"y\":\"${jwk.y}\"}`;\n const digest = await sha256(new TextEncoder().encode(canonical));\n return base64urlEncode(digest);\n}\n\n/**\n * Normalize a base64 string to unpadded base64url. Web Crypto's\n * `exportKey('jwk')` is spec'd to return base64url, but some React Native\n * `crypto.subtle` polyfills diverge: standard base64 (`+`/`/`), `=` padding,\n * or — in the case of `react-native-quick-crypto` — a stray `.` in the\n * padding position (observed: `\"…dy_c.\"`). Any of those characters is invalid\n * in a JWK member: RFC 7638 thumbprinting and servers that validate `x`/`y`\n * as base64url (`^[A-Za-z0-9_-]+$`) reject them, and the `cnf.jkt` thumbprint\n * silently diverges from the server's. Real browsers already return base64url,\n * so this is a no-op there.\n *\n * We map `+`/`/` to their url-safe equivalents, then strip every remaining\n * character outside the base64url alphabet (`=` padding, `.`, whitespace).\n * Valid base64url never contains those, so a global strip can't corrupt a\n * well-formed value.\n */\nfunction toBase64url(value: string): string {\n return value.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/[^A-Za-z0-9_-]/g, '');\n}\n\n/**\n * Strip a JWK to only the four required EC public members and normalize the\n * coordinates to unpadded base64url. Useful when the input came from\n * `crypto.subtle.exportKey('jwk', publicKey)` which adds `ext` / `key_ops`\n * (and, under some RN polyfills, non-base64url coordinates). Returns a fresh\n * object — never mutates input.\n */\nexport function canonicalEcJwk(jwk: { kty?: string; crv?: string; x?: string; y?: string }): PublicEcJwk {\n if (jwk.kty !== 'EC' || jwk.crv !== 'P-256' || typeof jwk.x !== 'string' || typeof jwk.y !== 'string') {\n throw new Error('[PollarClient:thumbprint] Source JWK is not an EC P-256 public key');\n }\n return { kty: 'EC', crv: 'P-256', x: toBase64url(jwk.x), y: toBase64url(jwk.y) };\n}\n","import { base64urlEncode } from '../lib/base64url';\nimport { hashApiKey } from '../lib/api-key-hash';\nimport { canonicalEcJwk, computeJwkThumbprint } from './thumbprint';\nimport type { KeyManager, PublicEcJwk } from './types';\n\n/**\n * `KeyManager` backed by Web Crypto + IndexedDB. The ECDSA P-256 keypair is\n * generated with `extractable: false` for the private key — its bytes never\n * leave the browser's crypto subsystem. The `CryptoKeyPair` is persisted in\n * IndexedDB via structured clone (browsers serialize non-extractable keys\n * without exposing material).\n *\n * Per the W3C WebCrypto ECDSA spec, the public key is always extractable\n * regardless of the `extractable` argument, so `exportKey('jwk', publicKey)`\n * works for building the DPoP proof header.\n *\n * Residual XSS risk: an in-page script can still call `crypto.subtle.sign()`\n * on the same key handle to mint proofs. Non-extractable storage prevents\n * key exfiltration, not signing-oracle attacks. See SECURITY.md.\n */\n\nconst DB_NAME = 'pollar-keys';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'keys';\n\nfunction openDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n if (typeof indexedDB === 'undefined') {\n reject(new Error('[PollarClient:keys] IndexedDB not available'));\n return;\n }\n const req = indexedDB.open(DB_NAME, DB_VERSION);\n req.onerror = (): void => reject(req.error ?? new Error('[PollarClient:keys] IDB open failed'));\n req.onsuccess = (): void => resolve(req.result);\n req.onupgradeneeded = (): void => {\n const db = req.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME);\n }\n };\n });\n}\n\nfunction awaitTx<T>(req: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n req.onsuccess = (): void => resolve(req.result);\n req.onerror = (): void => reject(req.error ?? new Error('[PollarClient:keys] IDB request failed'));\n });\n}\n\nasync function dbGet<T>(key: string): Promise<T | undefined> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const result = (await awaitTx(tx.objectStore(STORE_NAME).get(key))) as T | undefined;\n return result;\n } finally {\n db.close();\n }\n}\n\nasync function dbPut(key: string, value: unknown): Promise<void> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n await awaitTx(tx.objectStore(STORE_NAME).put(value, key));\n } finally {\n db.close();\n }\n}\n\nasync function dbDelete(key: string): Promise<void> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n await awaitTx(tx.objectStore(STORE_NAME).delete(key));\n } finally {\n db.close();\n }\n}\n\nfunction isCryptoKeyPair(v: unknown): v is CryptoKeyPair {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as { privateKey?: unknown; publicKey?: unknown };\n return obj.privateKey !== undefined && obj.publicKey !== undefined;\n}\n\nexport class WebCryptoKeyManager implements KeyManager {\n private readonly apiKey: string;\n private apiKeyHash: string | null = null;\n private keyPair: CryptoKeyPair | null = null;\n private publicJwk: PublicEcJwk | null = null;\n private thumbprint: string | null = null;\n /**\n * Cached in-flight init. Lets `init()` be called concurrently (or implicitly\n * from `getPublicJwk` / `sign`) without doing the work twice. Cleared on\n * failure so callers can retry, and cleared on `reset()`.\n */\n private _initPromise: Promise<void> | null = null;\n\n constructor(apiKey: string) {\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\n throw new Error('[PollarClient:keys] SubtleCrypto is unavailable. DPoP requires a secure context (HTTPS or localhost).');\n }\n this.apiKey = apiKey;\n }\n\n /**\n * Idempotent and safe under concurrency. The first call kicks off the real\n * init; subsequent (and concurrent) calls return the same in-flight promise.\n * Other methods (`getPublicJwk`, `getThumbprint`, `sign`) auto-await this so\n * the manager is self-healing if `init()` was never explicitly invoked.\n */\n async init(): Promise<void> {\n if (this.keyPair) return;\n if (!this._initPromise) {\n this._initPromise = this._doInit().catch((err) => {\n // Clear the promise so the next call retries instead of permanently\n // returning a rejected promise. The error propagates to the caller —\n // `PollarClient` logs it through its configured logger, so we don't\n // double-log (raw, ungated) here.\n this._initPromise = null;\n throw err;\n });\n }\n return this._initPromise;\n }\n\n private async _doInit(): Promise<void> {\n if (!this.apiKeyHash) {\n this.apiKeyHash = await hashApiKey(this.apiKey);\n }\n\n let pair: CryptoKeyPair | undefined;\n try {\n pair = await dbGet<CryptoKeyPair>(this.apiKeyHash);\n if (pair && !isCryptoKeyPair(pair)) pair = undefined;\n } catch {\n // IDB unavailable (Safari private mode, sandboxed iframe, partitioned\n // storage in a 3rd-party iframe). Fall through to fresh keygen — we\n // lose persistence across reloads but the current session can sign.\n pair = undefined;\n }\n\n if (!pair) {\n pair = (await globalThis.crypto.subtle.generateKey(\n { name: 'ECDSA', namedCurve: 'P-256' },\n // false → private key non-extractable; per W3C ECDSA spec the public\n // key is always extractable regardless of this flag.\n false,\n ['sign', 'verify'],\n )) as CryptoKeyPair;\n try {\n await dbPut(this.apiKeyHash, pair);\n } catch {\n // Persistence failed but the in-memory pair still works for this session.\n }\n }\n\n this.keyPair = pair;\n this.publicJwk = await this._exportPublicJwk(pair.publicKey);\n this.thumbprint = await computeJwkThumbprint(this.publicJwk);\n }\n\n /**\n * Derive the public JWK from a `CryptoKey`. Prefers the `'raw'` export (the\n * 65-byte uncompressed point `0x04 || X(32) || Y(32)`) and base64url-encodes\n * the coordinates ourselves — that sidesteps polyfills whose `exportKey('jwk')`\n * emits non-base64url `x`/`y` (standard base64, `=` padding, or — as seen with\n * `react-native-quick-crypto` — a stray `.`). Real browsers and most polyfills\n * support `'raw'` for public EC keys.\n *\n * Falls back to the `'jwk'` export (normalized via `canonicalEcJwk`) if `'raw'`\n * is unsupported or returns an unexpected shape, so this can't regress on a\n * runtime that only implements the JWK path. Both routes yield identical\n * coordinate bytes, so the `cnf.jkt` thumbprint is unchanged either way.\n */\n private async _exportPublicJwk(publicKey: CryptoKey): Promise<PublicEcJwk> {\n try {\n const raw = new Uint8Array(await globalThis.crypto.subtle.exportKey('raw', publicKey));\n // Uncompressed P-256 point: 65 bytes, leading 0x04 tag.\n if (raw.length !== 65 || raw[0] !== 0x04) {\n throw new Error(`[PollarClient:keys] Unexpected raw EC point (len=${raw.length}, tag=${raw[0]})`);\n }\n return {\n kty: 'EC',\n crv: 'P-256',\n x: base64urlEncode(raw.slice(1, 33)),\n y: base64urlEncode(raw.slice(33, 65)),\n };\n } catch {\n // 'raw' unsupported (or odd) on this runtime — fall back to the JWK export\n // and normalize its coordinates to unpadded base64url.\n const jwk = (await globalThis.crypto.subtle.exportKey('jwk', publicKey)) as JsonWebKey;\n return canonicalEcJwk(jwk);\n }\n }\n\n async reset(): Promise<void> {\n try {\n if (this.apiKeyHash) await dbDelete(this.apiKeyHash);\n } catch {\n // Best-effort cleanup; if IDB is unavailable there's nothing persisted to clear.\n }\n this.keyPair = null;\n this.publicJwk = null;\n this.thumbprint = null;\n this._initPromise = null;\n }\n\n async getPublicJwk(): Promise<PublicEcJwk> {\n if (!this.publicJwk) await this.init();\n if (!this.publicJwk) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; getPublicJwk unavailable');\n }\n // Return a fresh copy so callers cannot mutate our cached state.\n return { kty: this.publicJwk.kty, crv: this.publicJwk.crv, x: this.publicJwk.x, y: this.publicJwk.y };\n }\n\n async getThumbprint(): Promise<string> {\n if (!this.thumbprint) await this.init();\n if (!this.thumbprint) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; getThumbprint unavailable');\n }\n return this.thumbprint;\n }\n\n async sign(payload: Uint8Array): Promise<Uint8Array> {\n if (!this.keyPair) await this.init();\n if (!this.keyPair) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; sign unavailable');\n }\n // Cast through BufferSource: TypeScript 5.7's strict typing distinguishes\n // Uint8Array<ArrayBuffer> from Uint8Array<SharedArrayBuffer>, but every\n // payload we pass here is regular-ArrayBuffer-backed.\n const sig = await globalThis.crypto.subtle.sign(\n { name: 'ECDSA', hash: 'SHA-256' },\n this.keyPair.privateKey,\n payload as unknown as BufferSource,\n );\n // For ECDSA P-256 with SHA-256, WebCrypto returns 64-byte raw r||s\n // (IEEE P1363 / JOSE format). No DER conversion needed.\n return new Uint8Array(sig);\n }\n}\n","// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import createClient from 'openapi-fetch';\nimport type { paths } from './schema';\n\nexport type PollarApiClient = ReturnType<typeof createApiClient>;\n\nexport function createApiClient(baseUrl: string) {\n return createClient<paths>({ baseUrl });\n}\n","import type { DistributionClaimBody, DistributionClaimContent, DistributionRule } from '../../types';\nimport type { PollarApiClient } from '../client';\n\n/**\n * GET /distribution/rules\n * Returns the distribution rules visible to the calling sdk-user, each\n * decorated with `claimable` and (when not claimable) a `reason` ErrorCode\n * the UI maps to a friendly message.\n */\nexport async function listDistributionRules(api: PollarApiClient): Promise<DistributionRule[]> {\n const { data, error } = await api.GET('/distribution/rules');\n if (!data?.content || error) {\n throw new Error(\n (error as { code?: string; error?: string } | undefined)?.code ??\n (error as { code?: string; error?: string } | undefined)?.error ??\n 'Failed to list distribution rules',\n );\n }\n return data.content.rules;\n}\n\n/**\n * POST /distribution/claim\n * Claims the given rule for the authenticated sdk-user. Returns the tx hash\n * once the payment is submitted to Stellar.\n */\nexport async function claimDistributionRule(\n api: PollarApiClient,\n body: DistributionClaimBody,\n): Promise<DistributionClaimContent> {\n const { data, error } = await api.POST('/distribution/claim', { body });\n if (!data?.content || error) {\n throw new Error(\n (error as { code?: string; error?: string } | undefined)?.code ??\n (error as { code?: string; error?: string } | undefined)?.error ??\n 'Failed to claim distribution rule',\n );\n }\n return data.content;\n}\n","import type { KycLevel, KycProvider, KycStartBody, KycStartResponse, KycStatus } from '../../types';\nimport type { PollarApiClient } from '../client';\n\n/**\n * GET /kyc/status\n * Returns the current user's KYC status for a given provider.\n * Requires a valid auth token in the API client.\n */\nexport async function getKycStatus(\n api: PollarApiClient,\n providerId?: string,\n): Promise<{ status: KycStatus; level?: KycLevel | undefined; providerId: string; expiresAt?: string }> {\n const { data, error } = await api.GET('/kyc/status', {\n params: { query: providerId ? { providerId } : {} },\n });\n if (!data?.content || error) {\n throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get KYC status');\n }\n return data.content;\n}\n\n/**\n * GET /kyc/providers\n * Returns available KYC providers for a given country.\n */\nexport async function getKycProviders(api: PollarApiClient, country: string): Promise<{ providers: KycProvider[] }> {\n const { data, error } = await api.GET('/kyc/providers', { params: { query: { country } } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get KYC providers');\n return data.content;\n}\n\n/**\n * POST /kyc/start\n * Starts a KYC session.\n * - flow=iframe/redirect: returns kycUrl to embed or redirect to\n * - flow=form: returns fields[] to render a custom form\n */\nexport async function startKyc(api: PollarApiClient, body: KycStartBody): Promise<KycStartResponse> {\n const { data, error } = await api.POST('/kyc/start', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to start KYC');\n return data.content;\n}\n\n/**\n * Orchestrates the full KYC resolution flow:\n * 1. Checks current status\n * 2. If already approved, returns early\n * 3. Otherwise starts KYC and returns the session (kycUrl or fields)\n */\nexport async function resolveKyc(\n api: PollarApiClient,\n providerId: string,\n level: KycLevel = 'basic',\n): Promise<{ alreadyApproved: boolean } & Partial<KycStartResponse>> {\n const { status } = await getKycStatus(api, providerId);\n if (status === 'approved') return { alreadyApproved: true };\n const started = await startKyc(api, { providerId, level });\n return { alreadyApproved: false, ...started };\n}\n\n/**\n * Polls GET /kyc/status every intervalMs until status is 'approved' or 'rejected'.\n * Throws if timeoutMs is exceeded.\n */\nexport async function pollKycStatus(\n api: PollarApiClient,\n providerId: string,\n { intervalMs = 3000, timeoutMs = 300_000 }: { intervalMs?: number; timeoutMs?: number } = {},\n): Promise<KycStatus> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const { status } = await getKycStatus(api, providerId);\n if (status === 'approved' || status === 'rejected') return status;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n throw new Error('KYC polling timed out');\n}\n","import type { PollarApiClient } from '../client';\nimport type {\n RampsOfframpBody,\n RampsOfframpResponse,\n RampsOnrampBody,\n RampsOnrampResponse,\n RampsQuoteQuery,\n RampsQuoteResponse,\n RampsTransactionResponse,\n RampTxStatus,\n} from '../../types';\n\n/**\n * GET /ramps/quote\n * Returns available quotes for an onramp or offramp.\n * The backend ranks providers by country, amount, fee and availability.\n * The first quote in the array is the recommended one.\n */\nexport async function getRampsQuote(api: PollarApiClient, query: RampsQuoteQuery): Promise<RampsQuoteResponse> {\n const { data, error } = await api.GET('/ramps/quote', { params: { query } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get ramp quotes');\n return data.content;\n}\n\n/**\n * POST /ramps/onramp\n * Creates an onramp transaction.\n * For custodial users: backend orchestrates the full SEP-24 flow and returns payment instructions.\n * For non-custodial: backend may return an unsigned XDR that the client must sign via a wallet adapter.\n */\nexport async function createOnRamp(api: PollarApiClient, body: RampsOnrampBody): Promise<RampsOnrampResponse> {\n const { data, error } = await api.POST('/ramps/onramp', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to create onramp');\n return data.content;\n}\n\n/**\n * POST /ramps/offramp\n * Creates an offramp transaction.\n * Backend initiates the bank transfer once the Stellar transaction is confirmed.\n */\nexport async function createOffRamp(api: PollarApiClient, body: RampsOfframpBody): Promise<RampsOfframpResponse> {\n const { data, error } = await api.POST('/ramps/offramp', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to create offramp');\n return data.content;\n}\n\n/**\n * GET /ramps/transaction/{txId}\n * Returns the current status of a ramp transaction.\n */\nexport async function getRampTransaction(api: PollarApiClient, txId: string): Promise<RampsTransactionResponse> {\n const { data, error } = await api.GET('/ramps/transaction/{txId}', { params: { path: { txId } } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get transaction');\n return data.content;\n}\n\n/**\n * Polls GET /ramps/transaction/{txId} every intervalMs until status is 'completed' or 'failed'.\n * Throws if timeoutMs is exceeded.\n */\nexport async function pollRampTransaction(\n api: PollarApiClient,\n txId: string,\n { intervalMs = 5000, timeoutMs = 600_000 }: { intervalMs?: number; timeoutMs?: number } = {},\n): Promise<RampTxStatus> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const { status } = await getRampTransaction(api, txId);\n if (status === 'completed' || status === 'failed') return status;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n throw new Error('Ramp transaction polling timed out');\n}\n","/**\n * Generate a RFC 4122 v4 UUID. Prefers the secure-context `crypto.randomUUID`\n * when available; falls back to a manual v4 build via `crypto.getRandomValues`\n * for environments where `randomUUID` is missing (older RN/Hermes — where the\n * `react-native-get-random-values` polyfill provides `getRandomValues` but not\n * `randomUUID` — and insecure HTTP origins).\n *\n * Throws only when no secure random source exists at all, in which case DPoP\n * (and the SDK) cannot operate anyway.\n */\nexport function randomUUID(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n if (c && typeof c.getRandomValues === 'function') {\n const bytes = new Uint8Array(16);\n c.getRandomValues(bytes);\n bytes[6] = ((bytes[6] as number) & 0x0f) | 0x40; // version 4\n bytes[8] = ((bytes[8] as number) & 0x3f) | 0x80; // RFC 4122 variant\n const hex: string[] = [];\n for (let i = 0; i < 16; i++) hex.push((bytes[i] as number).toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n }\n throw new Error(\n '[PollarClient] No secure random source available (crypto.randomUUID / crypto.getRandomValues). ' +\n 'DPoP requires a secure context (HTTPS) or, in React Native, the `react-native-get-random-values` polyfill.',\n );\n}","import { base64urlEncode, base64urlEncodeString } from './lib/base64url';\nimport { randomUUID } from './lib/random-uuid';\nimport { sha256 } from './lib/sha256';\nimport type { KeyManager, PublicEcJwk } from './keys/types';\n\n/**\n * RFC 9449 DPoP proof builder.\n *\n * Produces a compact JWS that the consumer attaches as the `DPoP` HTTP\n * header. The header `jwk` is the public part of the SDK's per-session\n * keypair; the server verifies the signature, validates the `htm` / `htu` /\n * `iat` / `jti` / optional `nonce` / optional `ath` claims, and matches the\n * proof's JWK thumbprint against the access token's `cnf.jkt` claim.\n *\n * Server-issued nonce flow (RFC 9449 §8/§9): the server may respond with\n * `WWW-Authenticate: DPoP ... error=\"use_dpop_nonce\"` plus a `DPoP-Nonce`\n * header. The client should re-build the proof with the new nonce and retry.\n * `buildProof` accepts an optional nonce; the SDK client tracks it across\n * requests and feeds it back here.\n *\n * The last seen `DPoP-Nonce` is stored verbatim and embedded in the next\n * proof. The server validates it as an HMAC token, so an attacker who\n * injects an arbitrary nonce cannot escalate — verification fails and the\n * server replies with a fresh nonce on the next request.\n */\n\nexport interface BuildProofArgs {\n /** HTTP method, e.g. `\"GET\"`. Will be uppercased before signing. */\n htm: string;\n /**\n * HTTP target URI. Will be normalized per RFC 3986 §6.2 (lowercase scheme\n * + host, default port elided, query+fragment+userinfo stripped, path\n * dot-segments resolved, trailing slash preserved exactly as provided).\n */\n htu: string;\n /**\n * Access token to bind the proof to (its base64url(SHA-256) goes in the\n * `ath` claim). Omit for proofs sent to the token endpoint per RFC 9449\n * §5 / §6.1 (those proofs MUST NOT include `ath`).\n */\n accessToken?: string;\n /**\n * Server-issued DPoP nonce, if the server has previously challenged this\n * client with `WWW-Authenticate: DPoP ... error=\"use_dpop_nonce\"`. RFC\n * 9449 §8.\n */\n nonce?: string;\n}\n\ninterface ProofHeader {\n typ: 'dpop+jwt';\n alg: 'ES256';\n jwk: PublicEcJwk;\n}\n\ninterface ProofPayload {\n jti: string;\n htm: string;\n htu: string;\n iat: number;\n ath?: string;\n nonce?: string;\n}\n\n/**\n * Build a DPoP proof JWS for the given request. Returns the compact-form\n * JWS string (`<header>.<payload>.<signature>`).\n */\nexport async function buildProof(args: BuildProofArgs, keyManager: KeyManager): Promise<string> {\n const jwk = await keyManager.getPublicJwk();\n\n const header: ProofHeader = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk,\n };\n\n const payload: ProofPayload = {\n jti: randomUUID(),\n htm: args.htm.toUpperCase(),\n htu: normalizeHtu(args.htu),\n iat: Math.floor(Date.now() / 1000),\n };\n\n if (args.accessToken !== undefined && args.accessToken !== '') {\n payload.ath = base64urlEncode(await sha256(new TextEncoder().encode(args.accessToken)));\n }\n if (args.nonce !== undefined && args.nonce !== '') {\n payload.nonce = args.nonce;\n }\n\n const encodedHeader = base64urlEncodeString(JSON.stringify(header));\n const encodedPayload = base64urlEncodeString(JSON.stringify(payload));\n const signingInput = `${encodedHeader}.${encodedPayload}`;\n\n const signature = await keyManager.sign(new TextEncoder().encode(signingInput));\n const encodedSignature = base64urlEncode(signature);\n\n return `${signingInput}.${encodedSignature}`;\n}\n\n/**\n * Normalize an HTTP URI for use as the `htu` claim.\n *\n * RFC 9449 §4.3 + RFC 3986 §6.2:\n * - lowercase scheme + host\n * - elide default port (`:443` for https, `:80` for http)\n * - strip userinfo (never appears in `htu`)\n * - strip query + fragment\n * - apply path dot-segment removal (handled by the URL constructor)\n * - **preserve trailing slash exactly** — `/foo` and `/foo/` are distinct\n * paths per RFC 3986 §6 and must round-trip identically.\n * - preserve IPv6 brackets in host\n *\n * Both client and server must apply the same normalization so the `htu`\n * claim matches deterministically.\n */\nexport function normalizeHtu(rawUrl: string): string {\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n // Defensive fallback: strip query + fragment but otherwise return\n // unchanged. A poorly-formed URL is the caller's bug.\n return rawUrl.split('#')[0]!.split('?')[0]!;\n }\n const scheme = url.protocol.toLowerCase(); // includes trailing ':'\n const host = url.hostname.toLowerCase(); // already includes brackets for IPv6\n let port = url.port;\n if ((scheme === 'https:' && port === '443') || (scheme === 'http:' && port === '80')) {\n port = '';\n }\n const portPart = port ? `:${port}` : '';\n return `${scheme}//${host}${portPart}${url.pathname}`;\n}\n","/**\n * Log levels in increasing verbosity. Setting a level emits that level and\n * every more-important one; `silent` disables all SDK logging.\n *\n * silent < error < warn < info < debug\n */\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * Sink the SDK writes logs to. The global `console` already satisfies this\n * shape, so it's the default. Inject your own (pino, Sentry breadcrumbs, a test\n * spy…) via `PollarClientConfig.logger` to route SDK logs wherever you want.\n */\nexport interface PollarLogger {\n error(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n info(...args: unknown[]): void;\n debug(...args: unknown[]): void;\n}\n\nconst RANK: Record<LogLevel, number> = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 };\n\n/**\n * Build a level-gated logger over a sink. The returned object has the same\n * method surface as {@link PollarLogger}; each call is silently dropped when its\n * level is more verbose than the configured `level`. Messages keep their own\n * `[PollarClient…]` prefixes, so this only adds filtering + sink routing.\n *\n * Defaults: `level = 'info'`, `sink = console`.\n */\nexport function createLogger(level: LogLevel = 'info', sink: PollarLogger = console): PollarLogger {\n const threshold = RANK[level];\n const gate =\n (lvl: Exclude<LogLevel, 'silent'>) =>\n (...args: unknown[]): void => {\n if (threshold >= RANK[lvl]) sink[lvl](...args);\n };\n return { error: gate('error'), warn: gate('warn'), info: gate('info'), debug: gate('debug') };\n}\n","import type { PollarLogger } from '../lib/logger';\nimport type { OnStorageDegrade, Storage, StorageDegradeReason } from './types';\n\nconst LOG_PREFIX = '[PollarClient:storage]';\n\n/**\n * In-memory storage backed by a `Map`. Always available, never throws.\n * Used as the default fallback for SSR, private browsing, sandboxed iframes\n * without `allow-same-origin`, or any environment where `localStorage` is\n * unusable.\n */\nexport function createMemoryAdapter(): Storage {\n const store = new Map<string, string>();\n\n return {\n async get(key) {\n const value = store.get(key);\n return value === undefined ? null : value;\n },\n async set(key, value) {\n store.set(key, value);\n },\n async remove(key) {\n store.delete(key);\n },\n };\n}\n\nexport interface LocalStorageAdapterOptions {\n /**\n * Optional callback invoked the first time the adapter degrades to its\n * in-memory fallback (e.g. quota exceeded, throwing `localStorage`).\n */\n onDegrade?: OnStorageDegrade;\n /**\n * Logger for the one-shot degrade warning. Defaults to the global `console`;\n * `PollarClient` passes its level-gated logger so `logLevel` applies here too.\n */\n logger?: PollarLogger;\n}\n\n/**\n * `localStorage`-backed adapter that wraps every operation in try/catch and\n * silently degrades to an in-memory fallback for the rest of the process\n * lifetime on any throw. A single warning is logged when the degrade happens.\n *\n * Why every op (not just the probe): Safari private mode and sandboxed iframes\n * may expose `localStorage` but throw `QuotaExceededError` / `SecurityError`\n * on the first write — a successful probe at construction time isn't enough.\n *\n * Tokens persisted here are DPoP-bound to a non-extractable WebCrypto\n * keypair, so XSS exposure is limited to a signing-oracle attack (the key\n * itself never leaves the browser's crypto subsystem). Consumers who need\n * stricter isolation can inject a custom `Storage` adapter — e.g. one that\n * proxies to an httpOnly cookie on a host origin.\n */\nexport function createLocalStorageAdapter(options: LocalStorageAdapterOptions = {}): Storage {\n const fallback = createMemoryAdapter();\n let degraded = false;\n\n function degrade(reason: StorageDegradeReason, error?: unknown): void {\n if (degraded) return;\n degraded = true;\n (options.logger ?? console).warn(`${LOG_PREFIX} localStorage unavailable (${reason}); degrading to in-memory storage`);\n options.onDegrade?.(reason, error);\n }\n\n return {\n async get(key) {\n if (degraded) return fallback.get(key);\n try {\n return globalThis.localStorage.getItem(key);\n } catch (error) {\n degrade('read-failed', error);\n return fallback.get(key);\n }\n },\n async set(key, value) {\n if (degraded) return fallback.set(key, value);\n try {\n globalThis.localStorage.setItem(key, value);\n } catch (error) {\n const reason: StorageDegradeReason = isQuotaError(error) ? 'quota-exceeded' : 'write-failed';\n degrade(reason, error);\n await fallback.set(key, value);\n }\n },\n async remove(key) {\n if (degraded) return fallback.remove(key);\n try {\n globalThis.localStorage.removeItem(key);\n } catch (error) {\n degrade('remove-failed', error);\n await fallback.remove(key);\n }\n },\n };\n}\n\nfunction isQuotaError(error: unknown): boolean {\n if (typeof error !== 'object' || error === null) return false;\n const name = (error as { name?: unknown }).name;\n const code = (error as { code?: unknown }).code;\n // Chrome/Edge: DOMException name 'QuotaExceededError' (code 22).\n // Firefox: 'NS_ERROR_DOM_QUOTA_REACHED' (code 1014).\n // Safari private mode: 'QuotaExceededError'.\n return name === 'QuotaExceededError' || name === 'NS_ERROR_DOM_QUOTA_REACHED' || code === 22 || code === 1014;\n}\n","import { createLocalStorageAdapter, createMemoryAdapter, type LocalStorageAdapterOptions } from './web';\nimport type { Storage } from './types';\n\nconst PROBE_KEY = '__pollar_storage_probe__';\n\n/**\n * Returns `localStorage`-backed storage when it works, otherwise an in-memory\n * fallback. The probe writes-reads-removes a sentinel; any throw, value\n * mismatch, or missing `localStorage` (SSR / disabled storage) falls back.\n *\n * Run-time degrade still happens inside `createLocalStorageAdapter` — see its\n * docstring for the rationale.\n */\nexport function defaultStorage(options: LocalStorageAdapterOptions = {}): Storage {\n if (typeof globalThis === 'undefined' || typeof globalThis.localStorage === 'undefined') {\n options.onDegrade?.('unavailable');\n return createMemoryAdapter();\n }\n\n try {\n const probeValue = String(Date.now());\n globalThis.localStorage.setItem(PROBE_KEY, probeValue);\n const read = globalThis.localStorage.getItem(PROBE_KEY);\n globalThis.localStorage.removeItem(PROBE_KEY);\n if (read !== probeValue) {\n options.onDegrade?.('probe-failed');\n return createMemoryAdapter();\n }\n } catch (error) {\n options.onDegrade?.('probe-failed', error);\n return createMemoryAdapter();\n }\n\n return createLocalStorageAdapter(options);\n}\n","// Injected at build time by tsup (`define`) from `package.json#version`.\n// `declare` so TypeScript knows the identifier; at runtime it is either\n// replaced with a string literal (bundled builds) or absent (running the\n// source unbundled — ts-node, vitest), which the `typeof` guard below handles.\ndeclare const __POLLAR_SDK_VERSION__: string;\n\n/**\n * Version of this `@pollar/core` build (e.g. `'0.8.2'`). Falls back to `'dev'`\n * when running unbundled.\n *\n * Named per-package on purpose: importing it alongside `@pollar/react`'s\n * `POLLAR_REACT_VERSION` never collides, so an app can report both versions in\n * a single bug-report / diagnostics line.\n */\nexport const POLLAR_CORE_VERSION: string = typeof __POLLAR_SDK_VERSION__ !== 'undefined' ? __POLLAR_SDK_VERSION__ : 'dev';\n","import type { VisibilityProvider } from './types';\n\n/**\n * Always-visible provider with no event subscriptions. Used for SSR / Node\n * contexts where the silent-refresh scheduler should not be gated by a\n * non-existent foreground signal. Also useful in tests.\n */\nexport function createNoopVisibilityProvider(): VisibilityProvider {\n return {\n isVisible: () => true,\n onChange: () => () => {},\n };\n}\n","import type { VisibilityProvider } from './types';\n\n/**\n * Browser-backed visibility signal.\n *\n * Listens to three event sources because no single one is reliable on every\n * browser:\n * - `visibilitychange` is the canonical signal but lags on Safari macOS\n * when switching between windows of the same app.\n * - `pageshow` / `pagehide` fire when the page enters/leaves BFCache on\n * iOS Safari — `visibilitychange` does not.\n * - `focus` / `blur` on window catch the macOS Safari multi-window case\n * and are also the most-likely-to-fire signal on older browsers.\n *\n * Duplicate notifications are filtered by comparing against the last\n * dispatched state — listeners only see real transitions.\n */\nexport function createWebVisibilityProvider(): VisibilityProvider {\n const isVisibleNow = (): boolean => typeof document === 'undefined' || document.visibilityState === 'visible';\n\n return {\n isVisible: isVisibleNow,\n onChange: (cb) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return () => {};\n }\n let last = isVisibleNow();\n const handler = (): void => {\n const next = isVisibleNow();\n if (next !== last) {\n last = next;\n cb(next);\n }\n };\n document.addEventListener('visibilitychange', handler);\n window.addEventListener('pageshow', handler);\n window.addEventListener('pagehide', handler);\n window.addEventListener('focus', handler);\n window.addEventListener('blur', handler);\n return () => {\n document.removeEventListener('visibilitychange', handler);\n window.removeEventListener('pageshow', handler);\n window.removeEventListener('pagehide', handler);\n window.removeEventListener('focus', handler);\n window.removeEventListener('blur', handler);\n };\n },\n };\n}\n","import { createNoopVisibilityProvider } from './noop';\nimport type { VisibilityProvider } from './types';\nimport { createWebVisibilityProvider } from './web';\n\n/**\n * Picks a `VisibilityProvider` based on the runtime: browser → web provider,\n * anything else → noop. React Native consumers should pass an `AppState`-\n * backed provider explicitly via `PollarClientConfig.visibilityProvider`\n * (use `createAppStateVisibilityProvider` from\n * `@pollar/core/adapters/react-native-appstate`).\n */\nexport function defaultVisibilityProvider(): VisibilityProvider {\n if (typeof document !== 'undefined' && typeof window !== 'undefined') {\n return createWebVisibilityProvider();\n }\n return createNoopVisibilityProvider();\n}\n","import { pollarPaths, StellarNetwork } from './index';\nimport type { KeyManager } from './keys/types';\nimport type { LogLevel, PollarLogger } from './lib/logger';\nimport type { OnStorageDegrade, Storage } from './storage/types';\nimport type { VisibilityProvider } from './visibility/types';\nimport { WalletAdapterResolver, WalletId } from './wallets';\n\nexport type PollarApplicationConfigResponse =\n pollarPaths['/auth/login']['post']['responses'][200]['content']['application/json'];\n/** Full `/auth/login` response shape — used in transit but NOT persisted. */\nexport type PollarApplicationConfigContent = PollarApplicationConfigResponse['content'];\n\n/**\n * What we actually write to `Storage`. Drops the PII subtree (`data.*`)\n * which is held in memory only on `PollarClient._profile` after auth.\n */\nexport interface PollarPersistedSession {\n clientSessionId: string;\n userId: string | null;\n status: string;\n token: { accessToken: string; refreshToken: string; expiresAt: number };\n user: { id?: string; ready: boolean };\n // The user's on-chain wallet, discriminated by `type`:\n // - 'internal' → platform-managed (custodial) Stellar account (G-address)\n // - 'smart' → Soroban smart-account / passkey (C-address)\n // - 'external' → user-connected wallet (Freighter/Albedo)\n // `address` is the on-chain address for every type (G-address for internal,\n // C-address for smart/passkey, the connected pubkey for external).\n wallet: {\n type: 'internal' | 'smart' | 'external';\n address: string | null;\n existsOnStellar?: boolean;\n // On-chain creation time (smart = deploy; internal = keypair creation).\n createdAt?: number;\n // When the wallet was first linked to Pollar (our DB record), not on-chain\n // creation. Used for external wallets.\n linkedAt?: number;\n network?: string;\n deployTxHash?: string | null;\n };\n}\n\n/** In-memory user profile (kept on `PollarClient`, never persisted). */\nexport interface PollarUserProfile {\n mail: string;\n first_name: string;\n last_name: string;\n avatar: string;\n providers: {\n email: { address: string } | null;\n google: { id: string } | null;\n github: { id: string } | null;\n wallet: { address: string } | null;\n };\n}\n\nexport interface PollarClientConfig {\n stellarNetwork?: StellarNetwork;\n baseUrl?: string;\n apiKey: string;\n /**\n * Pluggable storage. Defaults to `defaultStorage()` on web (localStorage\n * with memory fallback). On RN you must inject one of the adapters from\n * `@pollar/core/adapters/expo` or `@pollar/core/adapters/react-native-keychain`.\n */\n storage?: Storage;\n /**\n * Pluggable DPoP key manager. Defaults to `defaultKeyManager(storage,\n * apiKey)`: WebCrypto in browsers, `@noble/curves` in RN.\n */\n keyManager?: KeyManager;\n /**\n * Minimum severity the SDK logs. `silent` disables all SDK logging; the rest\n * emit that level and everything more important (`error` < `warn` < `info` <\n * `debug`). State-transition chatter (auth/tx/network) is at `debug`.\n * Defaults to `'info'`.\n */\n logLevel?: LogLevel;\n /**\n * Sink the SDK writes logs to. Defaults to the global `console`. Inject your\n * own (pino, Sentry breadcrumbs, a test spy…) to route SDK logs anywhere.\n * Filtering by `logLevel` still applies on top of whatever you pass.\n */\n logger?: PollarLogger;\n /**\n * Notified when persistent storage silently degrades to in-memory mode\n * (Safari private browsing quota errors, sandboxed iframes, etc.). Useful\n * for telemetry — the SDK keeps working but sessions won't survive reload.\n */\n onStorageDegrade?: OnStorageDegrade;\n /**\n * Resolves a {@link WalletAdapter} for a given wallet id. If omitted, the\n * SDK falls back to its built-in `FreighterAdapter` / `AlbedoAdapter`,\n * which only know `WalletType.FREIGHTER` and `WalletType.ALBEDO`. Inject\n * `@pollar/stellar-wallets-kit-adapter` (or your own resolver) to support\n * additional wallets without bundling those dependencies into `@pollar/core`.\n */\n walletAdapter?: WalletAdapterResolver;\n /**\n * Maximum time (ms) the SDK waits for a `walletAdapter` resolver to return.\n * Guards against a broken extension bridge (e.g. Freighter content-script\n * down) hanging the login flow forever. The resolver only constructs the\n * adapter object — it does NOT include the user-facing approval step — so\n * a few seconds is plenty. Defaults to 5000.\n */\n walletResolverTimeoutMs?: number;\n /**\n * Optional human-friendly label sent at /auth/login time and recorded on\n * the server-side refresh-token row so the user can identify it in the\n * \"active sessions\" UI (e.g. \"iPhone — Safari\", \"Mac — Chrome 126\").\n * If unset, the server-recorded `user_agent` header is the fallback.\n */\n deviceLabel?: string;\n /**\n * Foreground-detection signal for the silent-refresh scheduler. When the\n * app is hidden / backgrounded, scheduled refreshes are skipped (saves\n * network + sidesteps browser/RN background timer throttling); they run\n * the moment visibility comes back. Defaults to a web provider in the\n * browser (`visibilitychange` + BFCache + focus) and a noop elsewhere.\n * React Native consumers should inject an `AppState`-backed provider —\n * use `createAppStateVisibilityProvider` from\n * `@pollar/core/adapters/react-native-appstate`.\n */\n visibilityProvider?: VisibilityProvider;\n /**\n * If set, the silent-refresh scheduler stops issuing proactive refreshes\n * after this many milliseconds of no client-side HTTP activity. The\n * session is not cleared — the next user action triggers a request that\n * either reuses a still-valid access token or hits 401 → reactive\n * refresh (transparent if the RT is still valid). Defaults to\n * `undefined` = refresh forever as long as the app is visible.\n */\n maxIdleMs?: number;\n /**\n * Strategy for opening the hosted OAuth URL during\n * `login({ provider: 'google' | 'github' })`. Defaults to a browser popup\n * on web. React Native consumers MUST provide one (typically wrapping\n * `expo-web-browser`'s `openAuthSessionAsync`), since `window.open` does\n * not exist there. The SDK still drives the rest of the flow by polling the\n * auth-session status, so the opener only needs to surface the URL — it does\n * NOT need to capture the redirect payload.\n */\n openAuthUrl?: AuthUrlOpener;\n /**\n * Value sent to the backend as `redirect_uri` for hosted OAuth (where the\n * provider returns the user afterwards). Defaults to `window.location.origin`\n * on web. On React Native set this to your app's deep link / scheme — the\n * same URL you pass to `WebBrowser.openAuthSessionAsync`.\n */\n oauthRedirectUri?: string;\n /**\n * The passkey (WebAuthn) ceremony for \"Smart Wallet\" login, injected by the\n * runtime layer (`@pollar/react` implements it with `@simplewebauthn/browser`).\n * `@pollar/core` stays runtime-agnostic and never touches `navigator.credentials`\n * directly. Required to use `loginSmartWallet()`. Browser-only for now;\n * React Native needs a native passkey provider.\n */\n passkey?: PasskeyCeremony;\n /**\n * Signs smart-account (C-address) transactions with the user's passkey.\n * Required to send from a smart wallet. Injected by `@pollar/react`;\n * browser-only for now.\n */\n passkeySign?: PasskeySigner;\n}\n\n/**\n * Runs the device WebAuthn ceremony for a server-issued challenge and returns\n * the result to forward to the backend: a registration response for a new user\n * (`create()`) or an authentication assertion for a returning one (`get()`).\n * `mode` tells the ceremony which to run: `'login'` runs `get()` only (returning\n * user) and `'register'` runs `create()` only (new wallet) — the caller picks via\n * the \"Log in\" / \"Create wallet\" buttons, so there's no ambiguous autodetect that\n * could create a wallet when the user merely cancelled a login prompt. `response`\n * is the browser's PublicKeyCredential serialized to JSON — forwarded verbatim to\n * `/auth/passkey/{register,login}`.\n */\nexport type PasskeyMode = 'login' | 'register';\n\nexport type PasskeyCeremony = (ctx: {\n challenge: string;\n mode: PasskeyMode;\n}) => Promise<{ kind: 'login'; response: unknown } | { kind: 'register'; response: unknown }>;\n\n/**\n * Signs a smart-account transaction's auth digest with the user's passkey\n * (a WebAuthn `get()` whose challenge is the raw digest). Returns the PUBLIC\n * assertion fields (base64url) for the server to assemble into the Soroban auth\n * entry — no secret leaves the device. Injected by the runtime layer\n * (`@pollar/react`); `@pollar/core` never touches `navigator.credentials`.\n */\nexport type PasskeySigner = (ctx: {\n /** base64url WebAuthn credential id to sign with. */\n credentialId: string;\n /** hex-encoded auth digest to use as the WebAuthn challenge. */\n challenge: string;\n}) => Promise<{ authenticatorData: string; clientDataJSON: string; signature: string }>;\n\n/**\n * Strategy for opening the hosted OAuth URL. The SDK mints the per-login auth\n * session lazily inside `getUrl()` (call it once; the first call creates the\n * `clientSessionId` and returns the full URL, or `null` if session creation\n * failed). Open the resolved URL however the platform allows — a popup on web,\n * `WebBrowser.openAuthSessionAsync(url, redirectUri)` on React Native — and\n * resolve once the user-facing browser step is done or dismissed. You do NOT\n * need to capture the redirect payload: the SDK polls the auth-session status\n * until the backend marks it READY.\n */\nexport type AuthUrlOpener = (ctx: AuthOpenContext) => void | Promise<void>;\n\nexport interface AuthOpenContext {\n provider: 'google' | 'github';\n /**\n * Mints the auth session (once) and returns the full hosted-OAuth URL, or\n * `null` if session creation failed. On web, call it AFTER reserving the\n * popup window so popup blockers (which only honor `window.open` inside the\n * original user-gesture tick) don't swallow it.\n */\n getUrl: () => Promise<string | null>;\n /** The redirect target passed to the backend as `redirect_uri`. */\n redirectUri: string;\n signal: AbortSignal;\n}\n\n/**\n * One row in the active-sessions list (returned by `PollarClient.listSessions()`).\n * Mirrors the sdk-api `SessionsListContent` schema.\n */\nexport interface SessionInfo {\n familyId: string;\n createdAt: string;\n lastUsedAt: string | null;\n userAgent: string | null;\n ipHash: string | null;\n deviceLabel: string | null;\n current: boolean;\n expiresAt: string;\n}\n\n/**\n * Observable state for the active-sessions list. Lives on the client (like\n * {@link TxHistoryState} / {@link WalletBalanceState}) so UI layers can\n * subscribe via `onSessionsStateChange` and stay pure readers instead of\n * holding the loading state locally.\n */\nexport type SessionsState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; sessions: SessionInfo[] }\n | { step: 'error'; message: string };\n\nexport type TxBuildBody = NonNullable<pollarPaths['/tx/build']['post']['requestBody']>['content']['application/json'];\nexport type TxBuildResponse = pollarPaths['/tx/build']['post']['responses'][200]['content']['application/json'];\n\nexport type TxSignAndSendBody = NonNullable<\n pollarPaths['/tx/sign-and-send']['post']['requestBody']\n>['content']['application/json'];\nexport type TxSignSendResponse = pollarPaths['/tx/sign-and-send']['post']['responses'][200]['content']['application/json'];\n\n// ─── Split flow (new in v0.7.2) ───────────────────────────────────────────────\n\nexport type TxSignBody = NonNullable<pollarPaths['/tx/sign']['post']['requestBody']>['content']['application/json'];\nexport type TxSignResponse = pollarPaths['/tx/sign']['post']['responses'][200]['content']['application/json'];\nexport type TxSignContent = TxSignResponse['content'];\n\nexport type TxSubmitSignedBody = NonNullable<pollarPaths['/tx/submit']['post']['requestBody']>['content']['application/json'];\n\nexport type TxBuildSignSubmitBody = NonNullable<\n pollarPaths['/tx/build-sign-submit']['post']['requestBody']\n>['content']['application/json'];\nexport type TxBuildSignSubmitResponse =\n pollarPaths['/tx/build-sign-submit']['post']['responses'][200]['content']['application/json'];\nexport type TxBuildSignSubmitContent = TxBuildSignSubmitResponse['content'];\n\nexport type PollarLoginOptions =\n | { provider: 'google' }\n | { provider: 'github' }\n | { provider: 'email'; email: string }\n | { provider: 'wallet'; type: WalletId };\n\nexport type TxBuildContent = TxBuildResponse['content'];\n\n/**\n * Phases the SDK can be in across the build → sign → submit lifecycle.\n *\n * **Granular** steps (`building`, `signing`, `submitting`) are emitted when\n * the SDK can directly observe that phase — i.e. when each is a separate\n * client-driven call (`buildTx`, `signTx`, `submitTx`, external-wallet\n * `signAndSubmitTx`).\n *\n * **Compound** steps (`signing-submitting`, `building-signing-submitting`)\n * are emitted when multiple phases collapse into a single opaque backend\n * round-trip (`signAndSubmitTx` custodial → `/tx/sign-and-send`, and `runTx`\n * / `buildAndSignAndSubmitTx` custodial → `/tx/build-sign-submit`). The SDK\n * can't see when one phase ends and the next begins inside that request, so\n * it honestly reports a single fused state instead of fabricating\n * transitions.\n *\n * **Terminal states** (`success`, `error`) and the post-Horizon-ack pending\n * state (`submitted`) are shared across all paths.\n *\n * On `error`, the `phase` discriminator tells the consumer *where* the\n * failure happened so modal UIs can offer \"retry from this step\" buttons.\n */\nexport type TransactionState =\n | { step: 'idle' }\n // ─── Granular phases (observable per-call) ────────────────────────────\n | { step: 'building' }\n | { step: 'built'; buildData: TxBuildContent }\n | { step: 'signing'; buildData?: TxBuildContent }\n | { step: 'signed'; buildData?: TxBuildContent; signedXdr: string; submissionToken?: string }\n | { step: 'submitting'; buildData?: TxBuildContent; signedXdr?: string }\n // ─── Compound phases (custodial-only — backend swallows the boundaries) ──\n | { step: 'signing-submitting'; buildData?: TxBuildContent }\n | { step: 'building-signing-submitting' }\n // ─── Post-Horizon-ack, pre-ledger-confirm (shared) ────────────────────\n | { step: 'submitted'; buildData?: TxBuildContent; hash: string }\n // ─── Terminal success (shared) ────────────────────────────────────────\n | { step: 'success'; buildData?: TxBuildContent; hash: string }\n // ─── Terminal failure with phase context ──────────────────────────────\n | { step: 'error'; phase: TxErrorPhase; details?: string; buildData?: TxBuildContent; signedXdr?: string };\n\n/**\n * Identifies which phase failed when `TransactionState.step === 'error'`.\n * Compound phase names (`signing-submitting`, `building-signing-submitting`)\n * appear here when the failure happened inside an atomic backend call where\n * the SDK can't isolate the failing sub-phase.\n */\nexport type TxErrorPhase = 'building' | 'signing' | 'submitting' | 'signing-submitting' | 'building-signing-submitting';\n\n/**\n * Per-call outcomes returned by `buildTx`, `signTx`, `submitTx`,\n * `signAndSubmitTx`, and `buildAndSignAndSubmitTx`. These are additive to\n * `TransactionState` — the same operations still drive the state machine for\n * modal-style UIs, but headless callers can `await` the method and inspect\n * the returned outcome directly instead of subscribing to state changes.\n */\nexport type BuildOutcome = { status: 'built'; buildData: TxBuildContent } | { status: 'error'; details?: string };\n\nexport type SignOutcome =\n | { status: 'signed'; signedXdr: string; submissionToken?: string; expiresAt?: number }\n | { status: 'error'; details?: string };\n\nexport type SubmitOutcome =\n | { status: 'success'; hash: string; buildData?: TxBuildContent }\n | { status: 'pending'; hash: string; buildData?: TxBuildContent }\n | { status: 'error'; hash?: string; details?: string; resultCode?: string; buildData?: TxBuildContent };\n\n/**\n * Result of {@link PollarClient.setTrustline}. Like {@link SubmitOutcome} but the\n * `hash` is optional: the sponsored, server-orchestrated path completes without\n * surfacing a transaction hash to the client, whereas the self-paid path returns\n * the underlying submit outcome (hash included).\n */\nexport type TrustlineOutcome =\n | { status: 'success'; hash?: string }\n | { status: 'pending'; hash?: string }\n | { status: 'error'; details?: string };\n\nexport const AUTH_ERROR_CODES = {\n SESSION_CREATE_FAILED: 'SESSION_CREATE_FAILED',\n SESSION_EXPIRED: 'SESSION_EXPIRED',\n SESSION_INVALID: 'SESSION_INVALID',\n EMAIL_SEND_FAILED: 'EMAIL_SEND_FAILED',\n EMAIL_VERIFY_FAILED: 'EMAIL_VERIFY_FAILED',\n EMAIL_CODE_EXPIRED: 'EMAIL_CODE_EXPIRED',\n EMAIL_CODE_INVALID: 'EMAIL_CODE_INVALID',\n AUTH_FAILED: 'AUTH_FAILED',\n WALLET_CONNECT_FAILED: 'WALLET_CONNECT_FAILED',\n WALLET_AUTH_FAILED: 'WALLET_AUTH_FAILED',\n WALLET_RESOLVER_TIMEOUT: 'WALLET_RESOLVER_TIMEOUT',\n PASSKEY_FAILED: 'PASSKEY_FAILED',\n UNEXPECTED_ERROR: 'UNEXPECTED_ERROR',\n} as const;\n\nexport type AuthErrorCode = (typeof AUTH_ERROR_CODES)[keyof typeof AUTH_ERROR_CODES];\n\nexport type AuthState =\n | { step: 'idle' }\n | { step: 'creating_session' }\n | { step: 'entering_email'; clientSessionId: string }\n | { step: 'sending_email'; email: string }\n | { step: 'entering_code'; clientSessionId: string; email: string }\n | { step: 'verifying_email_code'; clientSessionId: string; email: string }\n | { step: 'opening_oauth'; provider: 'google' | 'github' }\n | { step: 'connecting_wallet'; walletType: WalletId }\n | { step: 'wallet_not_installed'; walletType: WalletId }\n | { step: 'authenticating_wallet' }\n // Passkey (Smart Wallet) login: device ceremony, then (new user) the\n // sponsored on-chain deploy of the C-address.\n | { step: 'creating_passkey' }\n | { step: 'deploying_smart_account' }\n | { step: 'authenticating' }\n | {\n step: 'authenticated';\n session: PollarPersistedSession;\n /**\n * `false` while the session is restored optimistically from storage and\n * not yet revalidated with the server; `true` after a fresh login/refresh\n * or a successful `/auth/session/resume`. Gate sensitive actions on this.\n */\n verified: boolean;\n }\n | {\n step: 'error';\n previousStep: string;\n message: string;\n errorCode: AuthErrorCode;\n clientSessionId?: string;\n email?: string;\n };\n\nexport type NetworkState = { step: 'idle' } | { step: 'connected'; network: StellarNetwork };\n\nexport class PollarFlowError extends Error {\n readonly code = 'INVALID_FLOW' as const;\n constructor(message: string) {\n super(message);\n this.name = 'PollarFlowError';\n }\n}\n\n// ─── Wallet balance types ─────────────────────────────────────────────────────\n\nexport type WalletBalanceContent =\n pollarPaths['/wallet/balance']['get']['responses'][200]['content']['application/json']['content'];\nexport type WalletBalanceRecord = WalletBalanceContent['balances'][number];\n\nexport type WalletBalanceState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; data: WalletBalanceContent }\n | { step: 'error'; message: string };\n\n// ─── Enabled-asset types ──────────────────────────────────────────────────────\n\nexport type WalletAssetsContent =\n pollarPaths['/wallet/assets']['get']['responses'][200]['content']['application/json']['content'];\nexport type EnabledAssetRecord = WalletAssetsContent['assets'][number];\n\nexport type EnabledAssetsState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; data: WalletAssetsContent }\n | { step: 'error'; message: string };\n\n// ─── Tx history types ─────────────────────────────────────────────────────────\n\nexport type TxHistoryRecord =\n pollarPaths['/tx/history']['get']['responses'][200]['content']['application/json']['content']['records'][number];\n\nexport type TxHistoryParams = NonNullable<pollarPaths['/tx/history']['get']['parameters']['query']>;\n\nexport type TxHistoryContent = pollarPaths['/tx/history']['get']['responses'][200]['content']['application/json']['content'];\n\nexport type TxHistoryState =\n | { step: 'idle' }\n | { step: 'loading'; params: TxHistoryParams }\n | { step: 'loaded'; params: TxHistoryParams; data: TxHistoryContent }\n | { step: 'error'; params: TxHistoryParams; message: string };\n\n// ─── KYC types ────────────────────────────────────────────────────────────────\n\nexport type KycLevel = 'basic' | 'intermediate' | 'enhanced';\nexport type KycStatus = 'none' | 'pending' | 'approved' | 'rejected';\nexport type KycFlow = 'iframe' | 'form' | 'redirect';\n\nexport type KycProvider =\n pollarPaths['/kyc/providers']['get']['responses'][200]['content']['application/json']['content']['providers'][number];\nexport type KycStartBody = NonNullable<pollarPaths['/kyc/start']['post']['requestBody']>['content']['application/json'];\nexport type KycStartResponse = pollarPaths['/kyc/start']['post']['responses'][200]['content']['application/json']['content'];\n\n// ─── Ramps types ──────────────────────────────────────────────────────────────\n\nexport type RampsQuoteQuery = NonNullable<pollarPaths['/ramps/quote']['get']['parameters']['query']>;\nexport type RampQuote =\n pollarPaths['/ramps/quote']['get']['responses'][200]['content']['application/json']['content']['quotes'][number];\nexport type RampsQuoteResponse = pollarPaths['/ramps/quote']['get']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsOnrampBody = NonNullable<pollarPaths['/ramps/onramp']['post']['requestBody']>['content']['application/json'];\nexport type RampsOnrampResponse =\n pollarPaths['/ramps/onramp']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsOfframpBody = NonNullable<pollarPaths['/ramps/offramp']['post']['requestBody']>['content']['application/json'];\nexport type RampsOfframpResponse =\n pollarPaths['/ramps/offramp']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsTransactionResponse =\n pollarPaths['/ramps/transaction/{txId}']['get']['responses'][200]['content']['application/json']['content'];\nexport type RampTxStatus = RampsTransactionResponse['status'];\nexport type RampDirection = RampsTransactionResponse['direction'];\nexport type PaymentInstructions = RampsOnrampResponse['paymentInstructions'];\n\n// ─── Distribution types ───────────────────────────────────────────────────────\n\nexport type DistributionRule =\n pollarPaths['/distribution/rules']['get']['responses'][200]['content']['application/json']['content']['rules'][number];\n\nexport type RulePeriod = DistributionRule['period'];\n\nexport type DistributionClaimBody = NonNullable<\n pollarPaths['/distribution/claim']['post']['requestBody']\n>['content']['application/json'];\n\nexport type DistributionClaimContent =\n pollarPaths['/distribution/claim']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type DistributionRulesState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; rules: DistributionRule[] }\n | { step: 'error'; message: string };\n\n// ─── Adapter types ────────────────────────────────────────────────────────────\n\nexport type AdapterFn<TParams = unknown> = (params: TParams) => Promise<{ unsignedTransaction: string }>;\n\nexport type PollarAdapter = Record<string, AdapterFn<any>>;\n\nexport interface PollarAdapters {\n [key: string]: PollarAdapter;\n}\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nimport {\n getNetwork,\n getUserInfo,\n isAllowed,\n isConnected,\n setAllowed,\n signAuthEntry,\n signTransaction,\n} from '@stellar/freighter-api';\n\nimport type {\n ConnectWalletResponse,\n SignAuthEntryOptions,\n SignAuthEntryResponse,\n SignTransactionOptions,\n SignTransactionResponse,\n WalletAdapter,\n} from './types';\nimport { WalletType } from './types';\n\nexport class FreighterAdapter implements WalletAdapter {\n readonly type = WalletType.FREIGHTER;\n\n async isAvailable(): Promise<boolean> {\n try {\n return await isConnected();\n } catch {\n return false;\n }\n }\n\n async connect(): Promise<ConnectWalletResponse> {\n const connected = await isConnected();\n if (!connected) {\n throw new Error('Freighter wallet is not installed');\n }\n\n const allowed = await isAllowed();\n if (!allowed) {\n await setAllowed();\n }\n\n const userInfo = await getUserInfo();\n if (!userInfo?.publicKey) {\n throw new Error('Failed to get user information from Freighter');\n }\n\n return { address: userInfo.publicKey };\n }\n\n async disconnect(): Promise<void> {\n // Freighter does not expose a programmatic disconnect\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const allowed = await isAllowed();\n if (!allowed) return null;\n const userInfo = await getUserInfo();\n return userInfo?.publicKey ?? null;\n } catch {\n return null;\n }\n }\n\n async getNetwork(): Promise<string> {\n return getNetwork();\n }\n\n async signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse> {\n const result = await signTransaction(xdr, {\n network: options?.network,\n networkPassphrase: options?.networkPassphrase,\n accountToSign: options?.accountToSign,\n });\n if (!result || typeof result !== 'string') {\n throw new Error('Invalid response from Freighter');\n }\n return { signedTxXdr: result };\n }\n\n async signAuthEntry(entryXdr: string, options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse> {\n const result = await signAuthEntry(entryXdr, { accountToSign: options?.accountToSign });\n if (!result || typeof result !== 'string') {\n throw new Error('Invalid response from Freighter');\n }\n return { signedAuthEntry: result };\n }\n}\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nexport enum WalletType {\n FREIGHTER = 'freighter',\n ALBEDO = 'albedo',\n}\n\n/**\n * A wallet identifier. Accepts the internal `WalletType` enum values\n * (`'freighter'`, `'albedo'`) plus any opaque string id used by external\n * adapter packages (e.g. Stellar Wallets Kit ids like `'xbull'`, `'lobstr'`).\n * The `(string & {})` keeps autocomplete on the enum values without rejecting\n * arbitrary strings.\n */\nexport type WalletId = WalletType | (string & {});\n\nexport interface ConnectWalletResponse {\n address: string;\n}\n\nexport interface SignTransactionOptions {\n network?: string;\n networkPassphrase?: string;\n accountToSign?: string;\n}\n\nexport interface SignAuthEntryOptions {\n accountToSign?: string;\n}\n\nexport interface SignTransactionResponse {\n signedTxXdr: string;\n}\n\nexport interface SignAuthEntryResponse {\n signedAuthEntry: string;\n}\n\nexport interface WalletAdapter {\n type: WalletId;\n isAvailable(): Promise<boolean>;\n connect(): Promise<ConnectWalletResponse>;\n disconnect(): Promise<void>;\n getPublicKey(): Promise<string | null>;\n signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse>;\n signAuthEntry(entryXdr: string, options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse>;\n}\n\n/**\n * Resolves a {@link WalletAdapter} for a given wallet id. Injected through\n * `PollarClientConfig.walletAdapter` so wallet implementations (Stellar\n * Wallets Kit, custom modules, etc.) can live outside `@pollar/core`.\n */\nexport type WalletAdapterResolver = (id: WalletId) => WalletAdapter | Promise<WalletAdapter>;\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nimport { WalletType } from './types';\nimport type {\n WalletAdapter,\n ConnectWalletResponse,\n SignTransactionOptions,\n SignTransactionResponse,\n SignAuthEntryOptions,\n SignAuthEntryResponse,\n} from './types';\n\n/** Albedo's own network vocabulary (it only understands these two values). */\ntype AlbedoNetwork = 'public' | 'testnet';\n\nconst PUBLIC_PASSPHRASE = 'Public Global Stellar Network ; September 2015';\nconst TESTNET_PASSPHRASE = 'Test SDF Network ; September 2015';\n\n/**\n * Resolve the Albedo network for a signing call. Prefers the per-call options\n * the SDK passes (`networkPassphrase`, then `network`) so the signature is\n * produced on the network configured on `PollarClient`; falls back to the\n * network the adapter was constructed with when options carry nothing.\n */\nfunction albedoNetwork(options: SignTransactionOptions | undefined, fallback: AlbedoNetwork): AlbedoNetwork {\n switch (options?.networkPassphrase) {\n case PUBLIC_PASSPHRASE:\n return 'public';\n case TESTNET_PASSPHRASE:\n return 'testnet';\n }\n if (options?.network === 'public' || options?.network === 'mainnet') return 'public';\n if (options?.network === 'testnet') return 'testnet';\n return fallback;\n}\n\nfunction openAlbedoPopup(url: string): Window {\n const popup = window.open(url, 'albedo', 'width=420,height=720,resizable=yes,scrollbars=yes');\n if (!popup) {\n throw new Error('Failed to open Albedo popup (blocked by browser)');\n }\n return popup;\n}\n\nfunction waitForAlbedoPopup(): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n // Detach before rejecting — otherwise the listener leaks for the page\n // lifetime and a late/duplicate ALBEDO_RESULT could resolve an\n // already-timed-out promise (and accumulate across retries).\n window.removeEventListener('message', handler);\n reject(new Error('Albedo response timeout'));\n }, 2 * 60 * 1000);\n\n function handler(event: MessageEvent) {\n if (event.origin !== window.location.origin || event.data?.type !== 'ALBEDO_RESULT') return;\n clearTimeout(timeout);\n window.removeEventListener('message', handler);\n resolve(event.data.payload as Record<string, string>);\n }\n\n window.addEventListener('message', handler);\n });\n}\n\nexport class AlbedoAdapter implements WalletAdapter {\n readonly type = WalletType.ALBEDO;\n\n /**\n * Network used for `connect` and `signAuthEntry` (which carry no per-call\n * network) and as the fallback for `signTransaction`. Defaults to `'testnet'`\n * to preserve the previous behavior when constructed with no argument.\n */\n constructor(private readonly network: AlbedoNetwork = 'testnet') {}\n\n async isAvailable(): Promise<boolean> {\n return typeof window !== 'undefined';\n }\n\n async connect(): Promise<ConnectWalletResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'public-key');\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', this.network);\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.pubkey) {\n throw new Error('Albedo connection rejected');\n }\n\n return { address: result.pubkey };\n }\n\n async disconnect(): Promise<void> {}\n\n async getPublicKey(): Promise<string | null> {\n return null; // Albedo does not support silent reconnect\n }\n\n async getNetwork(): Promise<string> {\n throw new Error('Albedo does not expose network');\n }\n\n async signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'tx');\n url.searchParams.set('xdr', xdr);\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', albedoNetwork(options, this.network));\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n // Popup + postMessage (same flow as `connect`). A top-level\n // `window.location.href` redirect would unload this document, destroying\n // the realm the returned promise lives in — it would never resolve.\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.signed_envelope_xdr) throw new Error('Albedo signing rejected');\n return { signedTxXdr: result.signed_envelope_xdr };\n }\n\n async signAuthEntry(entryXdr: string, _options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'sign-auth-entry');\n url.searchParams.set('xdr', entryXdr);\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', this.network);\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n // Popup + postMessage (see `signTransaction` — a redirect would unload the\n // page before the awaited promise could settle).\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.signed_xdr) throw new Error('Albedo auth entry signing rejected');\n return { signedAuthEntry: result.signed_xdr };\n }\n}\n","import type { PollarLogger } from '../lib/logger';\nimport type { Storage } from '../storage/types';\nimport type { PollarPersistedSession } from '../types';\n\n/**\n * Persisted session shape (stored via the injected `Storage` adapter).\n *\n * Compared to the full `/auth/login` response:\n * - `data.{mail,first_name,last_name,avatar,providers}` is dropped — that\n * PII is held in memory only on `PollarClient`, fetched from\n * `/applications/config` after auth.\n * - All string fields are length-bounded as defense-in-depth: even though\n * JWT/UUID/Stellar-pubkey shapes are bounded by their own grammars,\n * bounding here catches hostile or buggy inputs before they hit downstream.\n *\n * Storage keys are namespaced per-`apiKeyHash` so swapping API keys can't\n * cross-contaminate sessions.\n */\n\nconst SESSION_SUFFIX = ':session';\nconst WALLET_TYPE_SUFFIX = ':walletType';\n\nexport function sessionStorageKey(apiKeyHash: string): string {\n return `pollar:${apiKeyHash}${SESSION_SUFFIX}`;\n}\n\nexport function walletTypeStorageKey(apiKeyHash: string): string {\n return `pollar:${apiKeyHash}${WALLET_TYPE_SUFFIX}`;\n}\n\nconst MAX_ACCESS_TOKEN = 4096;\nconst MAX_REFRESH_TOKEN = 4096;\nconst MAX_USER_ID = 64;\nconst MAX_CLIENT_SESSION_ID = 64;\nconst MAX_STATUS = 64;\nconst MAX_WALLET_PUBLIC_KEY = 128;\nconst MAX_WALLET_TYPE = 32;\n\nfunction isBoundedString(v: unknown, max: number, allowEmpty = false): v is string {\n if (typeof v !== 'string') return false;\n if (!allowEmpty && v.length === 0) return false;\n return v.length <= max;\n}\n\nexport function isValidSession(value: unknown, logger: PollarLogger = console): value is PollarPersistedSession {\n if (typeof value !== 'object' || value === null) {\n logger.debug('[PollarClient:session] Invalid session — value is not an object');\n return false;\n }\n const s = value as Record<string, unknown>;\n\n if (!isBoundedString(s['clientSessionId'], MAX_CLIENT_SESSION_ID)) {\n logger.debug('[PollarClient:session] Invalid session — clientSessionId missing/empty/too long');\n return false;\n }\n if (s['userId'] !== null && !isBoundedString(s['userId'], MAX_USER_ID)) {\n logger.debug('[PollarClient:session] Invalid session — userId must be string|null');\n return false;\n }\n if (!isBoundedString(s['status'], MAX_STATUS)) {\n logger.debug('[PollarClient:session] Invalid session — status must be string');\n return false;\n }\n\n const token = s['token'];\n if (typeof token !== 'object' || token === null) {\n logger.debug('[PollarClient:session] Invalid session — token missing or not an object');\n return false;\n }\n const t = token as Record<string, unknown>;\n if (!isBoundedString(t['accessToken'], MAX_ACCESS_TOKEN)) {\n logger.debug('[PollarClient:session] Invalid session — token.accessToken missing/empty/too long');\n return false;\n }\n if (!isBoundedString(t['refreshToken'], MAX_REFRESH_TOKEN)) {\n logger.debug('[PollarClient:session] Invalid session — token.refreshToken missing/empty/too long');\n return false;\n }\n if (typeof t['expiresAt'] !== 'number' || !Number.isFinite(t['expiresAt'])) {\n logger.debug('[PollarClient:session] Invalid session — token.expiresAt must be a finite number');\n return false;\n }\n\n const user = s['user'];\n if (typeof user !== 'object' || user === null) {\n logger.debug('[PollarClient:session] Invalid session — user missing or not an object');\n return false;\n }\n const u = user as Record<string, unknown>;\n if (u['id'] !== undefined && !isBoundedString(u['id'], MAX_USER_ID)) {\n logger.debug('[PollarClient:session] Invalid session — user.id must be string if present');\n return false;\n }\n if (typeof u['ready'] !== 'boolean') {\n logger.debug('[PollarClient:session] Invalid session — user.ready must be boolean');\n return false;\n }\n\n // The wallet object is always present; `type` discriminates internal (G,\n // platform-custodied), smart/passkey (C), and external wallets. `address` is\n // the on-chain address for all types.\n //\n // This guard runs against BOTH the persisted shape (vocabulary `internal`)\n // and the raw `/auth/login` wire response (vocabulary `custodial`) — the login\n // flow validates the wire body here *before* `_storeSession` remaps\n // `custodial → internal`. So we tolerate `'custodial'` as the transitional\n // wire alias for `'internal'`; callers remap it (`_storeSession` on fresh\n // login, `readStorage` for legacy persisted sessions) before it reaches app\n // code. (Sessions persisted by older SDKs also carry a legacy `publicKey`\n // alias — `readStorage` backfills `address` from it before validation, so the\n // field is tolerated but no longer required.)\n const wallet = s['wallet'];\n if (typeof wallet !== 'object' || wallet === null) {\n logger.debug('[PollarClient:session] Invalid session — wallet missing or not an object');\n return false;\n }\n const w = wallet as Record<string, unknown>;\n if (w['type'] !== 'internal' && w['type'] !== 'smart' && w['type'] !== 'external' && w['type'] !== 'custodial') {\n logger.debug('[PollarClient:session] Invalid session — wallet.type must be internal|smart|external');\n return false;\n }\n if (w['address'] !== null && !isBoundedString(w['address'], MAX_WALLET_PUBLIC_KEY)) {\n logger.debug('[PollarClient:session] Invalid session — wallet.address must be string|null');\n return false;\n }\n if (w['existsOnStellar'] !== undefined && typeof w['existsOnStellar'] !== 'boolean') {\n logger.debug('[PollarClient:session] Invalid session — wallet.existsOnStellar must be boolean if present');\n return false;\n }\n if (w['createdAt'] !== undefined && (typeof w['createdAt'] !== 'number' || !Number.isFinite(w['createdAt']))) {\n logger.debug('[PollarClient:session] Invalid session — wallet.createdAt must be a finite number if present');\n return false;\n }\n if (w['linkedAt'] !== undefined && (typeof w['linkedAt'] !== 'number' || !Number.isFinite(w['linkedAt']))) {\n logger.debug('[PollarClient:session] Invalid session — wallet.linkedAt must be a finite number if present');\n return false;\n }\n\n return true;\n}\n\nexport async function readStorage(\n storage: Storage,\n apiKeyHash: string,\n logger: PollarLogger = console,\n): Promise<PollarPersistedSession | null> {\n const raw = await storage.get(sessionStorageKey(apiKeyHash));\n if (!raw) return null;\n\n try {\n const session = JSON.parse(raw) as unknown;\n // Migrate sessions persisted by older SDKs (≤0.8.x): they stored the wallet\n // address under the legacy `publicKey` key, and persisted the wire type\n // `'custodial'` (now remapped to `'internal'` at the client boundary).\n // Backfill `address` and remap the type so they pass validation and survive\n // the upgrade instead of forcing a re-login.\n if (typeof session === 'object' && session !== null) {\n const w = (session as { wallet?: Record<string, unknown> }).wallet;\n if (w && w['address'] == null && typeof w['publicKey'] === 'string') {\n w['address'] = w['publicKey'];\n }\n if (w && w['type'] === 'custodial') {\n w['type'] = 'internal';\n }\n }\n if (!isValidSession(session, logger)) {\n await storage.remove(sessionStorageKey(apiKeyHash));\n logger.warn('[PollarClient:session] Stored session is invalid — clearing storage');\n return null;\n }\n if (session.token.expiresAt * 1000 < Date.now()) {\n // AT expired — keep the session row so we can attempt /refresh; the\n // caller's refresh path will clear if refresh itself fails.\n return session;\n }\n return session;\n } catch (error) {\n logger.error('[PollarClient:session] Failed to parse session from storage', error);\n await storage.remove(sessionStorageKey(apiKeyHash));\n return null;\n }\n}\n\nexport async function writeStorage(storage: Storage, apiKeyHash: string, session: PollarPersistedSession): Promise<void> {\n await storage.set(sessionStorageKey(apiKeyHash), JSON.stringify(session));\n}\n\nexport async function removeStorage(storage: Storage, apiKeyHash: string): Promise<void> {\n await storage.remove(sessionStorageKey(apiKeyHash));\n await storage.remove(walletTypeStorageKey(apiKeyHash));\n}\n\nexport async function writeWalletType(storage: Storage, apiKeyHash: string, type: string): Promise<void> {\n if (type.length > MAX_WALLET_TYPE) {\n throw new Error(`[PollarClient:session] walletType too long: ${type.length} > ${MAX_WALLET_TYPE}`);\n }\n await storage.set(walletTypeStorageKey(apiKeyHash), type);\n}\n\nexport async function readWalletType(storage: Storage, apiKeyHash: string): Promise<string | null> {\n return storage.get(walletTypeStorageKey(apiKeyHash));\n}\n","/**\n * Abort helpers that don't assume a browser-grade runtime.\n *\n * Two primitives we rely on are missing or partial on some React Native /\n * Hermes builds:\n * - `DOMException` is not a global on Hermes, so `new DOMException(...)`\n * throws `ReferenceError` instead of producing an AbortError.\n * - `AbortSignal.prototype.throwIfAborted` is absent on older RN AbortSignal\n * polyfills, so calling it (even via optional chaining, which only guards a\n * null/undefined signal — not a missing method) throws `TypeError`.\n *\n * These shims keep the abort path working everywhere while preserving the\n * `error.name === 'AbortError'` contract the rest of the SDK checks against.\n */\n\n/**\n * Build an AbortError. Uses the native `DOMException` when present (browsers,\n * Node ≥17) and falls back to a plain `Error` tagged `name = 'AbortError'`\n * where `DOMException` is undefined (Hermes).\n */\nexport function abortError(): Error {\n if (typeof DOMException !== 'undefined') {\n return new DOMException('Aborted', 'AbortError');\n }\n const err = new Error('Aborted');\n err.name = 'AbortError';\n return err;\n}\n\n/**\n * Throw an AbortError if `signal` is already aborted. Replacement for\n * `signal.throwIfAborted()` that doesn't depend on the method existing on the\n * runtime's `AbortSignal`.\n */\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) throw abortError();\n}\n","import { PollarApiClient } from '../api/client';\nimport { abortError, throwIfAborted } from '../lib/abort';\nimport type { PollarLogger } from '../lib/logger';\n\n/** Terminal session-status conditions, surfaced identically by the SSE stream\n * (as `error` events) and the poll endpoint (as 404 / 410). When either occurs\n * the session can never become ready, so the wait stops and the auth flow\n * resets to an error state instead of retrying forever. */\nexport type SessionStatusErrorCode = 'INVALID_CLIENT_SESSION_ID' | 'EXPIRED_CLIENT_ID';\n\nexport class SessionStatusError extends Error {\n constructor(readonly code: SessionStatusErrorCode) {\n super(`[PollarClient] Session status terminal: ${code}`);\n this.name = 'SessionStatusError';\n }\n}\n\n/** Returns the terminal code if `parsed` is an SSE `error` event payload\n * (`{ error: '...' }`), otherwise null. */\nfunction terminalStatusCode(parsed: unknown): SessionStatusErrorCode | null {\n const err = (parsed as { error?: unknown } | null)?.error;\n if (err === 'INVALID_CLIENT_SESSION_ID' || err === 'EXPIRED_CLIENT_ID') return err;\n return null;\n}\n\nfunction abortableDelay(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const t = setTimeout(resolve, ms);\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(t);\n reject(abortError());\n },\n { once: true },\n );\n });\n}\n\nconst MAX_BACKOFF_MS = 5_000;\n\n/**\n * Poll the session-status SSE stream until `check` returns true.\n *\n * On consecutive failures the retry delay doubles up to a 5 s cap; any\n * received chunk resets it to the floor. The happy path is unchanged.\n */\nexport async function streamUntilFound(\n api: PollarApiClient,\n clientSessionId: string,\n check: (data: Record<string, unknown>) => boolean,\n retryDelayMs = 200,\n signal?: AbortSignal,\n logger: PollarLogger = console,\n): Promise<Record<string, unknown>> {\n let backoff = retryDelayMs;\n const sleep = async (ms: number): Promise<void> => {\n if (ms <= 0) return;\n if (signal) await abortableDelay(ms, signal);\n else await new Promise((r) => setTimeout(r, ms));\n };\n\n while (true) {\n throwIfAborted(signal);\n\n let data, error;\n try {\n ({ data, error } = await api.GET('/auth/session/status/{clientSessionId}', {\n params: { path: { clientSessionId } },\n parseAs: 'stream',\n signal: signal ?? null,\n }));\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n logger.debug('[PollarClient:stream] session-status request failed; will retry', e);\n }\n\n if (error || !data) {\n await sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n const reader = data.getReader();\n const decoder = new TextDecoder();\n let sawAnyChunk = false;\n\n try {\n while (true) {\n throwIfAborted(signal);\n const { done, value } = await reader.read();\n if (done) break;\n sawAnyChunk = true;\n\n const chunk = decoder.decode(value);\n for (const message of chunk.split('\\n\\n').filter(Boolean)) {\n const dataLine = message.split('\\n').find((l) => l.startsWith('data:'));\n if (!dataLine) continue;\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(dataLine.slice('data:'.length).trim());\n } catch {\n // partial chunk — keep reading\n continue;\n }\n // Terminal `error` event (invalid / expired session): stop and surface.\n const terminal = terminalStatusCode(parsed);\n if (terminal) throw new SessionStatusError(terminal);\n if (check(parsed)) {\n return parsed;\n }\n }\n }\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n if (e instanceof SessionStatusError) throw e;\n logger.debug('[PollarClient:stream] session-status stream read failed; will retry', e);\n } finally {\n reader.releaseLock();\n }\n\n // A connection that delivered real data resets the backoff; a stream\n // that opened and immediately closed counts as failure.\n if (sawAnyChunk) backoff = retryDelayMs;\n else backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n\n // Always wait the computed backoff before reconnecting. A data-bearing\n // close already reset it to the floor (retryDelayMs), so the happy-path\n // reconnect stays snappy; the failure paths — including a mid-stream read\n // error caught above — now back off instead of spinning in a tight\n // reconnect loop that hammers the server.\n await sleep(backoff);\n }\n}\n\n/** Success envelope shape of `GET /auth/session/status/{id}/poll`. */\ninterface StatusPollEnvelope {\n success?: boolean;\n code?: string;\n content?: Record<string, unknown>;\n}\n\n/**\n * Non-streaming counterpart to {@link streamUntilFound}. Repeatedly GETs the\n * one-shot `/auth/session/status/{clientSessionId}/poll` endpoint until `check`\n * returns true on the response `content`.\n *\n * Used on runtimes where `fetch` does not expose a readable `response.body`\n * (React Native / Hermes), so the SSE reader in `streamUntilFound` is\n * unavailable. Uses the global `fetch` directly (not `openapi-fetch`) because\n * the status endpoint is public/pre-auth and needs no DPoP middleware.\n *\n * Backoff matches the SSE path: the delay doubles on transient failures up to a\n * 5 s cap and resets to the floor after any successful response.\n */\nexport async function pollUntilFound(\n baseUrl: string,\n clientSessionId: string,\n check: (data: Record<string, unknown>) => boolean,\n intervalMs = 500,\n signal?: AbortSignal,\n logger: PollarLogger = console,\n): Promise<Record<string, unknown>> {\n const url = `${baseUrl}/auth/session/status/${encodeURIComponent(clientSessionId)}/poll`;\n let backoff = intervalMs;\n const sleep = async (ms: number): Promise<void> => {\n if (ms <= 0) return;\n if (signal) await abortableDelay(ms, signal);\n else await new Promise((r) => setTimeout(r, ms));\n };\n\n while (true) {\n throwIfAborted(signal);\n\n let envelope: StatusPollEnvelope | null = null;\n let httpStatus = 0;\n try {\n const response = await fetch(url, { headers: { accept: 'application/json' }, signal: signal ?? null });\n httpStatus = response.status;\n envelope = (await response.json().catch(() => null)) as StatusPollEnvelope | null;\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n logger.debug('[PollarClient:stream] session-status poll failed; will retry', e);\n }\n\n // Terminal: the session is gone (404 / INVALID) or expired (410 / EXPIRED).\n // It can never become ready, so stop and surface — the caller resets the\n // login to an error state. Mirrors the SSE stream's terminal `error` events.\n if (httpStatus === 404 || envelope?.code === 'INVALID_CLIENT_SESSION_ID') {\n throw new SessionStatusError('INVALID_CLIENT_SESSION_ID');\n }\n if (httpStatus === 410 || envelope?.code === 'EXPIRED_CLIENT_ID') {\n throw new SessionStatusError('EXPIRED_CLIENT_ID');\n }\n\n if (envelope?.success && envelope.content && check(envelope.content)) {\n return envelope.content;\n }\n\n // A response (even a transient non-terminal error) resets the backoff floor;\n // a network failure (no response) backs off up to the cap.\n if (envelope) backoff = intervalMs;\n else backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n await sleep(backoff);\n }\n}\n\n/**\n * Wait until the client session reaches a state where `check` passes, using the\n * transport appropriate to the runtime: the SSE stream on web (`useStreaming`),\n * or one-shot polling on React Native. Both resolve with the matched status\n * `content` payload; the calling auth flow does not care which transport ran.\n */\nexport function waitForSessionReady(args: {\n api: PollarApiClient;\n baseUrl: string;\n clientSessionId: string;\n check: (data: Record<string, unknown>) => boolean;\n useStreaming: boolean;\n retryDelayMs?: number;\n signal?: AbortSignal;\n logger?: PollarLogger;\n}): Promise<Record<string, unknown>> {\n const { api, baseUrl, clientSessionId, check, useStreaming, retryDelayMs, signal, logger = console } = args;\n return useStreaming\n ? streamUntilFound(api, clientSessionId, check, retryDelayMs ?? 200, signal, logger)\n : pollUntilFound(baseUrl, clientSessionId, check, retryDelayMs ?? 500, signal, logger);\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { isValidSession } from '../session';\nimport { SessionStatusError, waitForSessionReady } from '../stream';\nimport { FlowDeps } from './deps';\n\nexport async function authenticate(clientSessionId: string, deps: FlowDeps, expectedWallet?: string): Promise<void> {\n const { api, logger, basePath, useStreaming, signal, setAuthState, storeSession, clearSession } = deps;\n\n setAuthState({ step: 'authenticating' });\n\n try {\n await waitForSessionReady({\n api,\n baseUrl: basePath,\n clientSessionId,\n check: (data) => data?.status === 'READY',\n useStreaming,\n signal,\n logger,\n });\n } catch (err) {\n // Terminal session-status condition (invalid / expired). Reset to an error\n // state and clear any partial session so the user can start a fresh login.\n // Other errors (AbortError from cancelLogin, etc.) bubble to the flow's\n // generic handler unchanged.\n if (err instanceof SessionStatusError) {\n const expired = err.code === 'EXPIRED_CLIENT_ID';\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: expired ? 'Login session expired — please try again' : 'Login session is no longer valid — please try again',\n errorCode: expired ? AUTH_ERROR_CODES.SESSION_EXPIRED : AUTH_ERROR_CODES.SESSION_INVALID,\n });\n await clearSession();\n return;\n }\n throw err;\n }\n\n // Pass `dpopJwk` so the server mints DPoP-bound tokens (`cnf.jkt`).\n const dpopJwk = await deps.getPublicJwk();\n // HTTP-level `error` is not handled here; the `else` branch below catches\n // both \"request failed\" (data === undefined) and \"request OK but body\n // wasn't a valid session\" via the same generic path.\n const { data } = await api.POST('/auth/login', {\n body: {\n clientSessionId,\n dpopJwk,\n ...(deps.deviceLabel ? { deviceLabel: deps.deviceLabel } : {}),\n },\n signal,\n });\n\n if (data?.code === 'SDK_LOGIN_SUCCESS' && isValidSession(data?.content, logger)) {\n // `isValidSession` doesn't validate the `data` (PII) subtree, so reach into\n // it defensively — a contract-drifted response missing `data`/`providers`\n // should surface as a clean wallet-mismatch error, not a raw TypeError.\n const sessionWallet = data.content.data?.providers?.wallet?.address;\n if (expectedWallet && sessionWallet !== expectedWallet) {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: 'Wallet mismatch: session wallet does not match connected wallet',\n errorCode: AUTH_ERROR_CODES.WALLET_AUTH_FAILED,\n });\n await clearSession();\n return;\n }\n await storeSession(data.content);\n } else {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: 'Failed to load session',\n errorCode: AUTH_ERROR_CODES.AUTH_FAILED,\n });\n await clearSession();\n }\n}\n","import { PollarApiClient } from '../../api/client';\nimport type { PublicEcJwk } from '../../keys/types';\nimport type { PollarLogger } from '../../lib/logger';\nimport { AUTH_ERROR_CODES, AuthState, PasskeyCeremony, PollarApplicationConfigContent } from '../../types';\nimport { WalletAdapter, WalletId } from '../../wallets';\n\nexport type FlowDeps = {\n api: PollarApiClient;\n /** Level-gated logger from the owning `PollarClient`. */\n logger: PollarLogger;\n /** API origin + version prefix (e.g. `https://sdk.api.pollar.xyz/v1`). Used to\n * build the non-streaming status-poll URL on runtimes without fetch streaming. */\n basePath: string;\n /**\n * Whether the runtime supports `fetch` response-body streaming (web). When\n * `true` the SDK consumes the SSE status stream; when `false` (React Native,\n * whose `fetch` exposes no `response.body.getReader()`) it polls the\n * non-streaming `/auth/session/status/{id}/poll` endpoint instead.\n */\n useStreaming: boolean;\n signal: AbortSignal;\n setAuthState: (state: AuthState) => void;\n storeSession: (session: PollarApplicationConfigContent) => void | Promise<void>;\n clearSession: () => void | Promise<void>;\n /**\n * Resolves a wallet adapter for the requested id. Uses the consumer's\n * injected `walletAdapter` resolver when present and falls back to the\n * built-in Freighter/Albedo adapters otherwise.\n */\n resolveWalletAdapter: (id: WalletId) => Promise<WalletAdapter>;\n storeWalletAdapter: (adapter: WalletAdapter, id: WalletId) => void | Promise<void>;\n /**\n * The passkey (WebAuthn) ceremony for `loginSmartWallet()`, injected from the\n * client config. Undefined when the consumer didn't configure passkey support.\n */\n passkey?: PasskeyCeremony;\n /**\n * Returns the public JWK of the SDK's per-session DPoP keypair. Auth\n * completion calls (`/auth/login`) pass it as `dpopJwk` so the server\n * can mint DPoP-bound tokens (`cnf.jkt`).\n */\n getPublicJwk: () => Promise<PublicEcJwk>;\n /**\n * Optional UI label persisted on the server-side refresh-token row so the\n * sessions UI can show \"iPhone — Safari\" instead of a raw user-agent.\n */\n deviceLabel?: string;\n};\n\nexport async function createAuthSession(deps: FlowDeps): Promise<string | null> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'creating_session' });\n\n const { data, error } = await api.POST('/auth/session', { signal });\n\n if (error || !data?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'creating_session',\n message: 'Failed to create session',\n errorCode: AUTH_ERROR_CODES.SESSION_CREATE_FAILED,\n });\n return null;\n }\n\n return data.content.clientSessionId;\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\nexport async function initEmailSession(deps: FlowDeps): Promise<void> {\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n deps.setAuthState({ step: 'entering_email', clientSessionId });\n}\n\nexport async function sendEmailCode(email: string, clientSessionId: string, deps: FlowDeps): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'sending_email', email });\n\n const { data, error } = await api.POST('/auth/email', {\n body: { clientSessionId, email },\n signal,\n });\n\n if (error || !data?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'sending_email',\n message: 'Failed to send code',\n errorCode: AUTH_ERROR_CODES.EMAIL_SEND_FAILED,\n });\n return;\n }\n\n setAuthState({ step: 'entering_code', clientSessionId, email });\n}\n\nexport async function verifyAndAuthenticate(\n code: string,\n clientSessionId: string,\n email: string,\n deps: FlowDeps,\n): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'verifying_email_code', clientSessionId, email });\n\n const { data, error } = await api.POST('/auth/email/verify-code', {\n body: { clientSessionId, code },\n signal,\n });\n\n if (data?.code === 'SDK_EMAIL_CODE_VERIFIED') {\n await authenticate(clientSessionId, deps);\n return;\n }\n\n // Extract error code from either the 4xx error body or the 200 body\n const errCode =\n (error as unknown as { error?: string } | undefined)?.error ?? (data as unknown as { code?: string } | undefined)?.code;\n\n if (errCode === 'SDK_EMAIL_CODE_EXPIRED') {\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Code expired — request a new one',\n errorCode: AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED,\n clientSessionId,\n email,\n });\n return;\n }\n\n if (errCode === 'INVALID_EMAIL_CODE' || errCode === 'SDK_EMAIL_CODE_INVALID') {\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Invalid code — try again',\n errorCode: AUTH_ERROR_CODES.EMAIL_CODE_INVALID,\n clientSessionId,\n email,\n });\n return;\n }\n\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Failed to verify code — try again',\n errorCode: AUTH_ERROR_CODES.EMAIL_VERIFY_FAILED,\n });\n}\n","import type { AuthUrlOpener } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\ntype OAuthDeps = FlowDeps & {\n basePath: string;\n apiKey: string;\n /** Platform strategy for surfacing the hosted-OAuth URL (popup on web, in-app browser on RN). */\n openAuthUrl: AuthUrlOpener;\n /** Sent to the backend as `redirect_uri`; where the provider returns the user afterwards. */\n redirectUri: string;\n};\n\n/**\n * Break the popup's `window.opener` back-reference so the OAuth window\n * cannot navigate the parent. Best-effort — older browsers expose the\n * property as read-only.\n */\nfunction severOpener(popup: Window | null): void {\n if (!popup) return;\n try {\n popup.opener = null;\n } catch {\n // ignore\n }\n}\n\n/**\n * Default web opener: reserve a blank popup synchronously (before any await)\n * so popup blockers — which only honor `window.open` inside the original\n * user-gesture tick — don't swallow it, then navigate it to the OAuth URL.\n *\n * React Native consumers replace this via `PollarClientConfig.openAuthUrl`\n * (typically wrapping `expo-web-browser`'s `openAuthSessionAsync`).\n */\nexport const defaultWebOAuthOpener: AuthUrlOpener = async ({ getUrl }) => {\n const popup = typeof window !== 'undefined' ? window.open('about:blank', '_blank') : null;\n severOpener(popup);\n\n const url = await getUrl();\n if (!url) {\n popup?.close();\n return;\n }\n\n if (popup) {\n popup.location.href = url;\n severOpener(popup);\n } else if (typeof window !== 'undefined') {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n};\n\nexport async function loginOAuth(provider: 'google' | 'github', deps: OAuthDeps): Promise<void> {\n const { setAuthState, basePath, apiKey, openAuthUrl, redirectUri, signal } = deps;\n\n // The auth session is minted lazily inside `getUrl` so the web opener can\n // reserve its popup window *before* this async call runs. We capture the\n // resulting id here so `authenticate` can poll it once the opener returns.\n let clientSessionId: string | null = null;\n const getUrl = async (): Promise<string | null> => {\n clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return null;\n\n setAuthState({ step: 'opening_oauth', provider });\n\n const url = new URL(`${basePath}/auth/${provider}`);\n url.searchParams.set('api_key', apiKey);\n url.searchParams.set('client_session_id', clientSessionId);\n url.searchParams.set('redirect_uri', redirectUri);\n return url.toString();\n };\n\n await openAuthUrl({ provider, getUrl, redirectUri, signal });\n\n // Opener never called `getUrl`, or session creation failed — nothing to poll.\n if (!clientSessionId) return;\n\n await authenticate(clientSessionId, deps);\n}\n","import { AUTH_ERROR_CODES, PasskeyMode } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\n/**\n * \"Smart Wallet\" auth via passkey (WebAuthn).\n *\n * `mode` is chosen by the caller's button: `'login'` for a returning user\n * (`/auth/passkey/login`) and `'register'` for a brand-new wallet\n * (`/auth/passkey/register`, which also deploys the C-address server-side).\n *\n * 1. Create the auth session.\n * 2. Ask the server for a challenge bound to that session.\n * 3. Run the device ceremony (injected `deps.passkey`) in `mode`.\n * 4. Post the result to the matching endpoint.\n * 5. Hand off to `authenticate()` for the READY → `/auth/login` token exchange.\n */\nexport async function smartWalletFlow(deps: FlowDeps, mode: PasskeyMode): Promise<void> {\n const { api, signal, setAuthState, passkey } = deps;\n\n if (!passkey) {\n setAuthState({\n step: 'error',\n previousStep: 'creating_session',\n message: 'Passkey support is not configured',\n errorCode: AUTH_ERROR_CODES.PASSKEY_FAILED,\n });\n return;\n }\n\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n\n try {\n // 1. Server challenge.\n const { data: challengeData } = await api.POST('/auth/passkey/challenge', {\n body: { clientSessionId },\n signal,\n });\n const challenge = challengeData?.content?.challenge;\n if (!challengeData?.success || !challenge) {\n return failPasskey(setAuthState, 'Failed to start passkey');\n }\n\n // 2. Device ceremony (Touch ID / biometric) — runtime-injected.\n setAuthState({ step: 'creating_passkey' });\n const ceremony = await passkey({ challenge, mode });\n // openapi-fetch types the WebAuthn payload as a loose object; the browser\n // PublicKeyCredential JSON satisfies it.\n const response = ceremony.response as { [key: string]: unknown };\n\n // 3. New user → register (deploys the C-address); returning → login.\n if (ceremony.kind === 'register') {\n setAuthState({ step: 'deploying_smart_account' });\n const { data } = await api.POST('/auth/passkey/register', {\n body: { clientSessionId, response },\n signal,\n });\n if (!data?.success) return failPasskey(setAuthState, 'Passkey registration failed');\n } else {\n const { data } = await api.POST('/auth/passkey/login', {\n body: { clientSessionId, response },\n signal,\n });\n if (!data?.success) return failPasskey(setAuthState, 'Passkey authentication failed');\n }\n } catch {\n return failPasskey(setAuthState, 'Passkey login failed');\n }\n\n // 4. Session is READY → exchange for DPoP-bound tokens.\n await authenticate(clientSessionId, deps);\n}\n\nfunction failPasskey(setAuthState: FlowDeps['setAuthState'], message: string): void {\n setAuthState({ step: 'error', previousStep: 'creating_passkey', message, errorCode: AUTH_ERROR_CODES.PASSKEY_FAILED });\n}\n","import { abortError } from '../../lib/abort';\nimport { AUTH_ERROR_CODES } from '../../types';\nimport { WalletId } from '../../wallets';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\nfunction withSignal<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n return Promise.race([\n promise,\n new Promise<never>((_, reject) => {\n if (signal.aborted) {\n reject(abortError());\n return;\n }\n signal.addEventListener('abort', () => reject(abortError()), { once: true });\n }),\n ]);\n}\n\nexport async function loginWallet(type: WalletId, deps: FlowDeps): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n\n let connectedWallet: string;\n\n try {\n setAuthState({ step: 'connecting_wallet', walletType: type });\n // Wrap the resolver in `withSignal` so `cancelLogin()` exits the await\n // even if the consumer's resolver is hung (broken extension bridge,\n // network call, etc). The resolver itself may keep running in the\n // background — the 5s `walletResolverTimeoutMs` in `_resolveWalletAdapter`\n // bounds that — but the flow won't block waiting for it.\n const adapter = await withSignal(deps.resolveWalletAdapter(type), signal);\n\n const available = await withSignal(adapter.isAvailable(), signal);\n if (!available) {\n setAuthState({ step: 'wallet_not_installed', walletType: type });\n return;\n }\n\n const { address } = await withSignal(adapter.connect(), signal);\n connectedWallet = address;\n deps.storeWalletAdapter(adapter, type);\n setAuthState({ step: 'authenticating_wallet' });\n\n const { data: walletData, error: walletError } = await api.POST('/auth/wallet', {\n body: { clientSessionId, walletAddress: address },\n signal,\n });\n\n if (walletError || !walletData?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating_wallet',\n message: 'Wallet authentication failed',\n errorCode: AUTH_ERROR_CODES.WALLET_AUTH_FAILED,\n });\n return;\n }\n } catch {\n setAuthState({\n step: 'error',\n previousStep: 'connecting_wallet',\n message: 'Wallet connection failed',\n errorCode: AUTH_ERROR_CODES.WALLET_CONNECT_FAILED,\n });\n return;\n }\n\n await authenticate(clientSessionId, deps, connectedWallet);\n}\n","import { createApiClient, PollarApiClient } from '../api/client';\nimport { claimDistributionRule, listDistributionRules } from '../api/endpoints/distribution';\nimport { getKycProviders, getKycStatus, pollKycStatus, resolveKyc, startKyc } from '../api/endpoints/kyc';\nimport { createOffRamp, createOnRamp, getRampsQuote, getRampTransaction, pollRampTransaction } from '../api/endpoints/ramps';\nimport { buildProof } from '../dpop';\nimport { defaultKeyManager } from '../keys/factory';\nimport type { KeyManager } from '../keys/types';\nimport { hashApiKey } from '../lib/api-key-hash';\nimport { createLogger, type PollarLogger } from '../lib/logger';\nimport { randomUUID } from '../lib/random-uuid';\nimport { StellarNetwork } from '../stellar/StellarClient';\nimport { defaultStorage } from '../storage/autodetect';\nimport type { OnStorageDegrade, Storage, StorageDegradeReason } from '../storage/types';\nimport { POLLAR_CORE_VERSION } from '../version';\nimport { defaultVisibilityProvider } from '../visibility/autodetect';\nimport type { VisibilityProvider } from '../visibility/types';\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n AuthUrlOpener,\n BuildOutcome,\n DistributionClaimBody,\n DistributionClaimContent,\n DistributionRule,\n KycLevel,\n KycStartBody,\n KycStartResponse,\n KycStatus,\n NetworkState,\n PasskeyCeremony,\n PasskeySigner,\n PollarApplicationConfigContent,\n PollarClientConfig,\n PollarFlowError,\n PollarLoginOptions,\n PollarPersistedSession,\n PollarUserProfile,\n RampsOfframpBody,\n RampsOfframpResponse,\n RampsOnrampBody,\n RampsOnrampResponse,\n RampsQuoteQuery,\n RampsQuoteResponse,\n RampsTransactionResponse,\n RampTxStatus,\n SessionInfo,\n SessionsState,\n SignOutcome,\n SubmitOutcome,\n TrustlineOutcome,\n TransactionState,\n TxBuildBody,\n TxBuildContent,\n TxHistoryParams,\n TxHistoryState,\n TxSignAndSendBody,\n EnabledAssetsState,\n WalletBalanceContent,\n WalletBalanceState,\n} from '../types';\nimport { AlbedoAdapter, FreighterAdapter, WalletAdapter, WalletAdapterResolver, WalletId, WalletType } from '../wallets';\nimport { initEmailSession, sendEmailCode, verifyAndAuthenticate } from './auth/emailFlow';\nimport { defaultWebOAuthOpener, loginOAuth } from './auth/oauthFlow';\nimport { smartWalletFlow } from './auth/passkeyFlow';\nimport { loginWallet } from './auth/walletFlow';\nimport { readStorage, readWalletType, removeStorage, sessionStorageKey, writeStorage, writeWalletType } from './session';\n\nconst isBrowser = typeof window !== 'undefined' && typeof localStorage !== 'undefined';\n/** React Native runtime: `navigator.product === 'ReactNative'` (set by the RN runtime). */\nconst isReactNative = typeof navigator !== 'undefined' && (navigator as { product?: string }).product === 'ReactNative';\n/**\n * True wherever the SDK can persist state and do crypto — browser OR React\n * Native. False only in true server-side renders (Node/SSR) where there is no\n * client runtime. Gates everything that previously keyed off `isBrowser`; that\n * check alone wrongly treated RN (no `localStorage`) as server-side.\n */\nconst isClientRuntime = isBrowser || isReactNative;\n\n/** Renew the access token this many seconds before its `exp` to absorb clock skew + signing latency. */\nconst REFRESH_SKEW_SECONDS = 60;\n\nfunction warnServerSide(method: string): void {\n // Module-level (no client instance / logger yet) — and a misuse warning the\n // developer should always see, so it stays on the raw console.\n console.warn(\n `[PollarClient] ${method}() called server-side — browser APIs unavailable. Use PollarClient only in Client Components.`,\n );\n}\n\nexport class PollarClient {\n readonly apiKey: string;\n readonly id: string;\n readonly basePath: string;\n\n private readonly _api: PollarApiClient;\n private readonly _log: PollarLogger;\n private readonly _storage: Storage;\n private readonly _keyManager: KeyManager;\n /** Resolves once `keyManager.init()` and the initial session restore complete. */\n private readonly _initialized: Promise<void>;\n /**\n * Per-API-key storage namespace. Computed asynchronously inside\n * `_initialize()` because SHA-256 lives behind `crypto.subtle.digest`.\n * Accessing `apiKeyHash` before `await client.ready()` throws.\n */\n private _apiKeyHash: string | null = null;\n\n /**\n * Short SHA-256-derived namespace for this client's persisted state.\n * Available after `await client.ready()` (or any awaited method); throws\n * if read before initialization completes.\n */\n get apiKeyHash(): string {\n if (this._apiKeyHash === null) {\n throw new Error('[PollarClient] apiKeyHash is not available until client.ready() resolves');\n }\n return this._apiKeyHash;\n }\n\n private _session: PollarPersistedSession | null = null;\n private _profile: PollarUserProfile | null = null;\n /** Last `DPoP-Nonce` we saw from a server response. Carried into the next proof. */\n private _dpopNonce: string | null = null;\n /**\n * Snapshot of each in-flight request's body, taken in `onRequest` before\n * `fetch()` consumes the stream. Needed because `Request.clone()` throws\n * once the body is disturbed, so the auto-retry path (DPoP nonce challenge\n * / 401 refresh) must rebuild the request from scratch instead of cloning.\n */\n private _requestBodyCache = new WeakMap<Request, ArrayBuffer>();\n /** Singleton in-flight refresh — concurrent 401s coalesce into one /auth/refresh call. */\n private _refreshPromise: Promise<void> | null = null;\n private _storageEventHandler: ((e: StorageEvent) => void) | null = null;\n /** Optional UI label sent to the server at /auth/login so the sessions UI\n * can show a recognizable device name. Set via PollarClientConfig.deviceLabel. */\n private readonly _deviceLabel: string | undefined;\n private readonly _visibilityProvider: VisibilityProvider;\n private readonly _maxIdleMs: number | undefined;\n /** Updated by the request middleware. Read by the silent-refresh scheduler\n * to skip proactive refreshes after `maxIdleMs` of no HTTP activity. */\n private _lastRequestAt: number = Date.now();\n private _refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private _visibilityUnsubscribe: (() => void) | null = null;\n\n private _transactionState: TransactionState | null = null;\n private _transactionStateListeners = new Set<(state: TransactionState) => void>();\n private _txHistoryState: TxHistoryState = { step: 'idle' };\n private _txHistoryStateListeners = new Set<(state: TxHistoryState) => void>();\n private _sessionsState: SessionsState = { step: 'idle' };\n private _sessionsStateListeners = new Set<(state: SessionsState) => void>();\n private _walletBalanceState: WalletBalanceState = { step: 'idle' };\n private _walletBalanceStateListeners = new Set<(state: WalletBalanceState) => void>();\n private _enabledAssetsState: EnabledAssetsState = { step: 'idle' };\n private _enabledAssetsStateListeners = new Set<(state: EnabledAssetsState) => void>();\n private _authState: AuthState = { step: 'idle' };\n private _authStateListeners = new Set<(state: AuthState) => void>();\n private _networkState: NetworkState = { step: 'idle' };\n private _networkStateListeners = new Set<(state: NetworkState) => void>();\n /**\n * Latched once the storage adapter degrades. We dedupe (the adapter only\n * fires once anyway) and use it to replay state to late-subscribers — same\n * pattern as `onAuthStateChange` replaying `_authState` on subscribe.\n * Only populated when the SDK constructed the default storage adapter; if\n * the consumer passes `config.storage`, they own degradation notifications.\n */\n private _storageDegraded: { reason: StorageDegradeReason; error?: unknown } | null = null;\n private _storageDegradeListeners = new Set<OnStorageDegrade>();\n\n private _walletAdapter: WalletAdapter | null = null;\n private readonly _walletAdapterResolver: WalletAdapterResolver | null;\n private readonly _walletResolverTimeoutMs: number;\n private readonly _passkey: PasskeyCeremony | null;\n private readonly _passkeySign: PasskeySigner | null;\n private _loginController: AbortController | null = null;\n /** Aborts an in-flight `/auth/session/resume` on destroy() or re-trigger. */\n private _resumeController: AbortController | null = null;\n /** Platform strategy for opening the hosted-OAuth URL (popup on web; injected on RN). */\n private readonly _openAuthUrl: AuthUrlOpener;\n /** `redirect_uri` sent to the backend for hosted OAuth. */\n private readonly _oauthRedirectUri: string;\n\n constructor(config: PollarClientConfig) {\n this.apiKey = config.apiKey;\n this.id = randomUUID();\n this.basePath = `${config.baseUrl || 'https://sdk.api.pollar.xyz'}/v1`;\n this._log = createLogger(config.logLevel ?? 'info', config.logger);\n\n this._storage =\n config.storage ??\n defaultStorage({\n logger: this._log,\n onDegrade: (reason, error) => {\n // Forward to the legacy one-shot callback (back-compat) and to any\n // subscribers added via `client.onStorageDegrade(cb)`. Both fire\n // exactly once because the underlying adapter dedupes.\n config.onStorageDegrade?.(reason, error);\n this._dispatchStorageDegrade(reason, error);\n },\n });\n this._keyManager = config.keyManager ?? defaultKeyManager(this._storage, config.apiKey);\n this._walletAdapterResolver = config.walletAdapter ?? null;\n this._walletResolverTimeoutMs = config.walletResolverTimeoutMs ?? 5000;\n this._passkey = config.passkey ?? null;\n this._passkeySign = config.passkeySign ?? null;\n this._deviceLabel = config.deviceLabel;\n this._visibilityProvider = config.visibilityProvider ?? defaultVisibilityProvider();\n this._maxIdleMs = config.maxIdleMs;\n this._openAuthUrl = config.openAuthUrl ?? defaultWebOAuthOpener;\n // `window.location` can be absent even when `isBrowser` is true (some\n // webview/SSR shims expose a partial `window`); read it defensively so the\n // constructor never throws on a missing `.origin`.\n this._oauthRedirectUri = config.oauthRedirectUri ?? (isBrowser ? (window.location?.origin ?? '') : '');\n\n this._api = createApiClient(this.basePath);\n this._wireMiddlewares();\n\n this._networkState = { step: 'connected', network: config.stellarNetwork ?? 'testnet' };\n\n if (!isClientRuntime) {\n warnServerSide('constructor');\n this._initialized = Promise.resolve();\n return;\n }\n\n this._log.info(\n `[PollarClient] Initialized v${POLLAR_CORE_VERSION} — endpoint: ${this.basePath}, network: ${this._networkState.network}`,\n );\n\n this._initialized = this._initialize();\n }\n\n /** Awaitable handle for the initial keypair + session restore. */\n ready(): Promise<void> {\n return this._initialized;\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n\n private async _initialize(): Promise<void> {\n // Compute the storage namespace first — every subsequent storage op\n // (including the cross-tab listener below and `_restoreSession`) reads it.\n this._apiKeyHash = await hashApiKey(this.apiKey);\n\n // Cross-tab session sync. Browser-only — the `storage` event is a DOM\n // feature with no React Native equivalent (each RN process owns its\n // SecureStore/Keychain), so we gate on `isBrowser`, not `isClientRuntime`.\n if (isBrowser) {\n const sessionKey = sessionStorageKey(this._apiKeyHash);\n const handler = (e: StorageEvent): void => {\n if (e.key === sessionKey) {\n this._restoreSession().catch((err) => this._log.error('[PollarClient] Cross-tab restore failed', err));\n }\n };\n window.addEventListener('storage', handler);\n this._storageEventHandler = handler;\n }\n\n try {\n await this._keyManager.init();\n } catch (err) {\n this._log.warn('[PollarClient] KeyManager init failed; DPoP unavailable for this session', err);\n }\n await this._restoreSession();\n\n // Wire after restore so the first scheduled refresh — if any — is set up\n // by `_restoreSession` itself, and the visibility listener only fires\n // re-checks for transitions that happen from this point forward.\n this._visibilityUnsubscribe = this._visibilityProvider.onChange((visible) => {\n if (!visible) return;\n void this._maybeProactiveRefresh();\n // B5: if the session is still optimistic (e.g. the startup resume failed\n // offline), retry validation now that the app is foreground again.\n if (this._authState.step === 'authenticated' && !this._authState.verified) {\n void this._resume();\n }\n });\n }\n\n /** Detach the cross-tab storage listener and abort any in-flight login. */\n destroy(): void {\n if (this._storageEventHandler && isBrowser) {\n window.removeEventListener('storage', this._storageEventHandler);\n this._storageEventHandler = null;\n }\n this._loginController?.abort();\n this._loginController = null;\n this._resumeController?.abort();\n this._resumeController = null;\n this._clearRefreshTimer();\n if (this._visibilityUnsubscribe) {\n this._visibilityUnsubscribe();\n this._visibilityUnsubscribe = null;\n }\n }\n\n // ─── Middlewares (DPoP + auto-refresh) ────────────────────────────────────\n\n private _wireMiddlewares(): void {\n // Aliasing `this` is deliberate: every middleware callback below is an\n // arrow function so `this` would resolve correctly, but the file reads\n // significantly easier with one stable name across ~150 lines of\n // request/response/refresh interleaving. Don't refactor without\n // re-running the smoke tests for refresh coalescing + DPoP nonce flow.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this._api.use({\n onRequest: async ({ request }: { request: Request }) => {\n request.headers.set('x-pollar-api-key', self.apiKey);\n self._lastRequestAt = Date.now();\n await self._initialized;\n // Cache the body before fetch() disturbs the stream — retries can't\n // call request.clone() once the body is consumed. Guard on the method:\n // GET/HEAD carry no body, and in RN's fetch polyfill `request.body` is\n // `undefined` (not `null`) for them, so a bare `!== null` check would\n // snapshot an empty ArrayBuffer and later make a GET retry throw\n // \"Body not allowed for GET or HEAD requests\".\n const cacheMethod = request.method.toUpperCase();\n const cacheBodyAllowed = cacheMethod !== 'GET' && cacheMethod !== 'HEAD';\n if (cacheBodyAllowed && request.body != null) {\n try {\n self._requestBodyCache.set(request, await request.clone().arrayBuffer());\n } catch (err) {\n this._log.warn('[PollarClient] Could not snapshot request body for retry', err);\n }\n }\n // The refresh endpoint must not wait on its own in-flight refresh —\n // that would deadlock the singleton. Other requests wait so they\n // pick up the freshly-rotated token.\n const isRefresh = request.url.includes('/auth/refresh');\n if (!isRefresh && self._refreshPromise) await self._refreshPromise;\n\n if (isRefresh) {\n // RFC 9449 §5 / §6.1: token-endpoint proofs MUST NOT carry `ath`\n // and MUST NOT use the access token in the Authorization header.\n // The DPoP proof alone authenticates the request; the RT goes in\n // the body and binds via `cnf.jkt`.\n const refreshProof = await self._buildProofForRequest(request, undefined);\n if (refreshProof) request.headers.set('DPoP', refreshProof);\n return request;\n }\n\n const accessToken = self._session?.token?.accessToken;\n if (!accessToken) return request;\n\n const proof = await self._buildProofForRequest(request, accessToken);\n if (proof) {\n request.headers.set('Authorization', `DPoP ${accessToken}`);\n request.headers.set('DPoP', proof);\n } else {\n // DPoP unavailable (HTTP origin / SubtleCrypto missing). Fall back\n // to Bearer; the server will reject if the AT is DPoP-bound.\n request.headers.set('Authorization', `Bearer ${accessToken}`);\n }\n return request;\n },\n onResponse: async ({ request, response }: { request: Request; response: Response }) => {\n const newNonce = response.headers.get('DPoP-Nonce');\n if (newNonce) self._dpopNonce = newNonce;\n\n if (response.status !== 401) return response;\n\n const wwwAuth = response.headers.get('WWW-Authenticate') ?? '';\n const isNonceChallenge = wwwAuth.includes('use_dpop_nonce');\n\n // The refresh endpoint has special handling: don't recursively trigger\n // refresh from inside itself. But DO honor a nonce challenge — the\n // fresh `DPoP-Nonce` was already captured above, so a single retry\n // with the new nonce succeeds. Any other 401 (RT expired, reused,\n // invalid) propagates to `_doRefresh` which clears the session.\n if (request.url.includes('/auth/refresh')) {\n if (isNonceChallenge) return self._retryRequest(request);\n return response;\n }\n\n if (!isNonceChallenge) {\n try {\n await self.refresh();\n } catch {\n return response;\n }\n // Token-expired retries (post-refresh) are only safe for idempotent\n // methods. POST/PUT/DELETE/PATCH might have already executed\n // server-side before auth was rejected — replaying could duplicate\n // effects (double-create a transaction, etc.). The original 401\n // bubbles up so the caller decides; the access token is now fresh,\n // so a manual retry by the caller will succeed. Nonce-challenge\n // 401s don't go through this branch (server didn't process the\n // request), so any method retries safely above.\n const method = request.method.toUpperCase();\n if (method !== 'GET' && method !== 'HEAD') {\n return response;\n }\n }\n return self._retryRequest(request);\n },\n });\n }\n\n private async _buildProofForRequest(request: Request, accessToken: string | undefined): Promise<string | null> {\n try {\n const htu = request.url.split('?')[0]!.split('#')[0]!;\n return await buildProof(\n {\n htm: request.method,\n htu,\n ...(accessToken ? { accessToken } : {}),\n ...(this._dpopNonce !== null ? { nonce: this._dpopNonce } : {}),\n },\n this._keyManager,\n );\n } catch (err) {\n this._log.warn('[PollarClient] DPoP proof build failed', err);\n return null;\n }\n }\n\n private async _retryRequest(originalRequest: Request): Promise<Response> {\n // Rebuild instead of clone(): the original's body stream was consumed by\n // the first fetch() and clone() would throw `Request body is already used`.\n // openapi-fetch runs onResponse a single time per request, so no\n // RETRIED_HEADER guard is needed — the retry's response is returned to\n // the caller directly and never re-enters this middleware.\n const headers = new Headers(originalRequest.headers);\n const isRefresh = originalRequest.url.includes('/auth/refresh');\n\n if (isRefresh) {\n // Token-endpoint proof per RFC 9449 §5 / §6.1: NO `ath`, NO\n // Authorization header. Mirrors the initial-request branch in\n // `onRequest`. The DPoP header is rebuilt so it picks up the fresh\n // server-issued nonce captured in `onResponse`.\n const proof = await this._buildProofForRequest(originalRequest, undefined);\n headers.delete('Authorization');\n if (proof) headers.set('DPoP', proof);\n else headers.delete('DPoP');\n } else {\n const accessToken = this._session?.token?.accessToken;\n if (accessToken) {\n const proof = await this._buildProofForRequest(originalRequest, accessToken);\n if (proof) {\n headers.set('Authorization', `DPoP ${accessToken}`);\n headers.set('DPoP', proof);\n } else {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n }\n\n // Never attach a body to a GET/HEAD retry — the Fetch API (and RN's\n // polyfill) throws \"Body not allowed for GET or HEAD requests\". This is\n // the retry that the `/auth/session/resume` GET hits after a DPoP nonce\n // challenge.\n const retryMethod = originalRequest.method.toUpperCase();\n const retryBodyAllowed = retryMethod !== 'GET' && retryMethod !== 'HEAD';\n const cachedBody = retryBodyAllowed ? this._requestBodyCache.get(originalRequest) : undefined;\n const retried = new Request(originalRequest.url, {\n method: originalRequest.method,\n headers,\n body: cachedBody ?? null,\n credentials: originalRequest.credentials,\n mode: originalRequest.mode,\n redirect: originalRequest.redirect,\n referrer: originalRequest.referrer,\n integrity: originalRequest.integrity,\n });\n return fetch(retried);\n }\n\n // ─── Refresh (race-safe singleton) ───────────────────────────────────────\n\n /**\n * Coalesce concurrent refresh attempts. The first caller does the work;\n * everyone else awaits the same promise and sees the new tokens.\n */\n refresh(): Promise<void> {\n if (this._refreshPromise) return this._refreshPromise;\n this._refreshPromise = this._doRefresh().finally(() => {\n this._refreshPromise = null;\n });\n return this._refreshPromise;\n }\n\n private async _doRefresh(): Promise<void> {\n const refreshToken = this._session?.token?.refreshToken;\n if (!refreshToken) {\n this._log.warn('[PollarClient] Refresh skipped: no refresh token in session');\n await this._clearSession();\n throw new Error('No refresh token available');\n }\n\n let data: unknown;\n let error: unknown;\n try {\n const response = await this._api.POST('/auth/refresh', { body: { refreshToken } });\n data = response.data;\n error = response.error;\n } catch (err) {\n this._log.error('[PollarClient] /auth/refresh request threw', err);\n await this._clearSession();\n throw err;\n }\n\n if (error || !data) {\n this._log.error('[PollarClient] /auth/refresh returned error', { error });\n await this._clearSession();\n throw new Error('Refresh failed');\n }\n const successData = data as { success?: boolean; content?: { token?: PollarPersistedSession['token'] } };\n if (!successData.success || !successData.content?.token) {\n // Don't log `successData` — its `content.token` would write access/refresh\n // tokens to the console. Log only the non-sensitive shape.\n this._log.error('[PollarClient] /auth/refresh response malformed', {\n success: successData.success,\n hasToken: !!successData.content?.token,\n });\n await this._clearSession();\n throw new Error('Refresh response malformed');\n }\n\n const newToken = successData.content.token;\n if (\n typeof newToken.accessToken !== 'string' ||\n typeof newToken.refreshToken !== 'string' ||\n typeof newToken.expiresAt !== 'number'\n ) {\n // Log the field TYPES, never the token values themselves.\n this._log.error('[PollarClient] /auth/refresh token shape invalid', {\n accessToken: typeof newToken.accessToken,\n refreshToken: typeof newToken.refreshToken,\n expiresAt: typeof newToken.expiresAt,\n });\n await this._clearSession();\n throw new Error('Refresh response token shape invalid');\n }\n\n if (this._session) {\n try {\n this._session = { ...this._session, token: newToken };\n await writeStorage(this._storage, this.apiKeyHash, this._session);\n this._log.info('[PollarClient] Tokens refreshed');\n } catch (err) {\n this._log.error('[PollarClient] Failed to persist refreshed session', err);\n // In-memory state is still updated; the session works for this\n // process but won't survive reload. Don't clear — that'd surprise\n // the user with a logout for what's essentially a storage hiccup.\n }\n this._scheduleNextRefresh();\n }\n }\n\n // ─── Silent refresh scheduler ────────────────────────────────────────────────\n\n /**\n * Arm a single setTimeout to fire shortly before the current access token\n * expires. Idempotent — clearing any previous timer first. Safe to call\n * from any session-write site (initial login, restore-from-storage, after\n * a successful rotation). No-op if there's no session in memory.\n *\n * Browser/RN background-tab throttling makes long-running setTimeouts\n * unreliable on their own; the `visibilitychange` listener compensates by\n * re-invoking `_maybeProactiveRefresh` whenever the app comes back to the\n * foreground, catching any timer that fired late or never fired at all.\n */\n private _scheduleNextRefresh(): void {\n this._clearRefreshTimer();\n const expiresAt = this._session?.token?.expiresAt;\n if (typeof expiresAt !== 'number') return;\n const dueInMs = Math.max(0, (expiresAt - Math.floor(Date.now() / 1000) - REFRESH_SKEW_SECONDS) * 1000);\n this._refreshTimer = setTimeout(() => {\n void this._maybeProactiveRefresh();\n }, dueInMs);\n }\n\n /**\n * Decide whether to actually run a refresh right now. Called both from the\n * scheduler timer and from the visibility-change listener.\n *\n * Skip if:\n * - no session / no RT (nothing to refresh)\n * - app is hidden — wait for the visibility listener to re-trigger us\n * - `maxIdleMs` configured and no client request since that window — let\n * the next reactive 401-refresh handle it whenever the user comes back\n * - the AT still has more than `REFRESH_SKEW_SECONDS` of life — reschedule\n *\n * Otherwise call `refresh()`, which uses the existing in-flight singleton\n * so we never collide with a reactive 401-triggered refresh. On failure,\n * `_doRefresh` already calls `_clearSession`, so auth-state listeners see\n * `step:'idle'` — no extra event dispatch needed here.\n */\n private async _maybeProactiveRefresh(): Promise<void> {\n if (!this._session?.token?.refreshToken) return;\n if (!this._visibilityProvider.isVisible()) return;\n if (this._maxIdleMs !== undefined && Date.now() - this._lastRequestAt > this._maxIdleMs) return;\n const expiresAt = this._session.token.expiresAt;\n if (Math.floor(Date.now() / 1000) < expiresAt - REFRESH_SKEW_SECONDS) {\n this._scheduleNextRefresh();\n return;\n }\n try {\n await this.refresh();\n } catch (err) {\n this._log.warn('[PollarClient] Proactive refresh failed; session cleared', err);\n }\n }\n\n private _clearRefreshTimer(): void {\n if (this._refreshTimer !== null) {\n clearTimeout(this._refreshTimer);\n this._refreshTimer = null;\n }\n }\n\n // ─── Auth state ──────────────────────────────────────────────────────────────\n\n getAuthState(): AuthState {\n return this._authState;\n }\n\n onAuthStateChange(cb: (state: AuthState) => void): () => void {\n this._authStateListeners.add(cb);\n cb(this._authState);\n return () => this._authStateListeners.delete(cb);\n }\n\n /**\n * Subscribe to persistent-storage degradation (Safari private mode,\n * sandboxed iframes, quota errors, etc.). The SDK keeps running off\n * in-memory storage after degrade, but sessions won't survive reload — a\n * host UI typically wants to show \"your session won't be saved\" so the\n * user isn't blindsided after a refresh.\n *\n * Fires at most once per client lifetime (the underlying adapter dedupes).\n * Late subscribers receive the latched state synchronously on subscribe.\n *\n * Only fires when the SDK constructs the default storage adapter. If you\n * pass a custom `config.storage`, wire your own notification path through\n * that adapter's API — the SDK has no hook into it.\n */\n onStorageDegrade(cb: OnStorageDegrade): () => void {\n this._storageDegradeListeners.add(cb);\n if (this._storageDegraded) {\n cb(this._storageDegraded.reason, this._storageDegraded.error);\n }\n return () => this._storageDegradeListeners.delete(cb);\n }\n\n private _dispatchStorageDegrade(reason: StorageDegradeReason, error?: unknown): void {\n if (this._storageDegraded) return;\n this._storageDegraded = { reason, error };\n for (const cb of this._storageDegradeListeners) {\n try {\n cb(reason, error);\n } catch (err) {\n this._log.error('[PollarClient] onStorageDegrade listener threw', err);\n }\n }\n }\n\n /** PII (email, names, avatar, providers). Held in memory only — never persisted. */\n getUserProfile(): PollarUserProfile | null {\n return this._profile;\n }\n\n // ─── Login (unified entry point) ─────────────────────────────────────────\n\n login(options: PollarLoginOptions): void {\n if (!isClientRuntime) {\n warnServerSide('login');\n return;\n }\n if (options.provider === 'google' || options.provider === 'github' || options.provider === 'email') {\n const controller = this._newController();\n const deps = this._flowDeps(controller.signal);\n if (options.provider === 'google' || options.provider === 'github') {\n loginOAuth(options.provider, {\n ...deps,\n basePath: this.basePath,\n apiKey: this.apiKey,\n openAuthUrl: this._openAuthUrl,\n redirectUri: this._oauthRedirectUri,\n }).catch((err) => this._handleFlowError(err));\n } else if (options.provider === 'email') {\n const { email } = options;\n initEmailSession(deps)\n .then(() => {\n if (this._authState.step === 'entering_email') {\n return sendEmailCode(email, this._authState.clientSessionId, deps);\n }\n })\n .catch((err) => this._handleFlowError(err));\n }\n } else if (options.provider === 'wallet') {\n this.loginWallet(options.type);\n }\n }\n\n // ─── Email OTP flow (3 steps) ─────────────────────────────────────────────\n\n beginEmailLogin(): void {\n if (!isClientRuntime) {\n warnServerSide('beginEmailLogin');\n return;\n }\n const controller = this._newController();\n initEmailSession(this._flowDeps(controller.signal)).catch((err) => this._handleFlowError(err));\n }\n\n sendEmailCode(email: string): void {\n if (!isClientRuntime) {\n warnServerSide('sendEmailCode');\n return;\n }\n if (this._authState.step !== 'entering_email') {\n throw new PollarFlowError(`sendEmailCode() requires step 'entering_email', current step is '${this._authState.step}'`);\n }\n const { clientSessionId } = this._authState;\n const signal = this._loginController!.signal;\n sendEmailCode(email, clientSessionId, this._flowDeps(signal)).catch((err) => this._handleFlowError(err));\n }\n\n verifyEmailCode(code: string): void {\n if (!isClientRuntime) {\n warnServerSide('verifyEmailCode');\n return;\n }\n const isRetryableError =\n this._authState.step === 'error' &&\n this._authState.clientSessionId != null &&\n (this._authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID ||\n this._authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED);\n\n if (this._authState.step !== 'entering_code' && !isRetryableError) {\n throw new PollarFlowError(`verifyEmailCode() requires step 'entering_code', current step is '${this._authState.step}'`);\n }\n const state = this._authState;\n const clientSessionId =\n state.step === 'entering_code' ? state.clientSessionId : (state as { clientSessionId?: string }).clientSessionId!;\n const email = state.step === 'entering_code' ? state.email : ((state as { email?: string }).email ?? '');\n\n const controller = this._newController();\n verifyAndAuthenticate(code, clientSessionId, email, this._flowDeps(controller.signal)).catch((err) =>\n this._handleFlowError(err),\n );\n }\n\n // ─── Wallet flow (single call) ────────────────────────────────────────────\n\n loginWallet(type: WalletId): void {\n if (!isClientRuntime) {\n warnServerSide('loginWallet');\n return;\n }\n const controller = this._newController();\n loginWallet(type, this._flowDeps(controller.signal)).catch((err) => this._handleFlowError(err));\n }\n\n /**\n * \"Smart Wallet\" login: runs the passkey (WebAuthn) `get()` ceremony for a\n * returning user and signs them in. Use {@link createSmartWallet} for a new\n * user. Requires the `passkey` ceremony to be configured (e.g. via\n * `@pollar/react`).\n */\n loginSmartWallet(): void {\n if (!isClientRuntime) {\n warnServerSide('loginSmartWallet');\n return;\n }\n const controller = this._newController();\n smartWalletFlow(this._flowDeps(controller.signal), 'login').catch((err) => this._handleFlowError(err));\n }\n\n /**\n * \"Smart Wallet\" registration: runs the passkey (WebAuthn) `create()` ceremony\n * for a new user and deploys a sponsored smart-account C-address. Use\n * {@link loginSmartWallet} for a returning user. Requires the `passkey`\n * ceremony to be configured (e.g. via `@pollar/react`).\n */\n createSmartWallet(): void {\n if (!isClientRuntime) {\n warnServerSide('createSmartWallet');\n return;\n }\n const controller = this._newController();\n smartWalletFlow(this._flowDeps(controller.signal), 'register').catch((err) => this._handleFlowError(err));\n }\n\n // ─── Cancel ───────────────────────────────────────────────────────────────\n\n cancelLogin(): void {\n this._loginController?.abort();\n this._loginController = null;\n this._setAuthState({ step: 'idle' });\n }\n\n // ─── Logout ───────────────────────────────────────────────────────────────\n\n /**\n * Revoke the current session server-side, then clear local storage.\n *\n * Server revocation is best-effort: if the POST fails (offline, server\n * down), local state is wiped regardless. The orphan refresh token then\n * remains unused until its natural expiry. The in-flight access token\n * stays valid until its own TTL elapses (≤10 min for DPoP-bound tokens).\n *\n * Pass `everywhere: true` to revoke every active session for this user\n * across all devices.\n */\n async logout(options: { everywhere?: boolean } = {}): Promise<void> {\n if (!isClientRuntime) {\n warnServerSide('logout');\n return;\n }\n this._log.info('[PollarClient] Logout requested', { everywhere: !!options.everywhere });\n\n if (this._session?.token?.accessToken) {\n try {\n await this._api.POST('/auth/logout', {\n body: options.everywhere ? { everywhere: true } : {},\n });\n } catch (err) {\n this._log.warn('[PollarClient] Server logout failed (continuing with local clear)', err);\n }\n }\n\n try {\n await this._clearSession();\n } catch (err) {\n this._log.warn('[PollarClient] Local logout cleanup failed', err);\n }\n }\n\n /** Convenience: revoke every active session for this user (all devices). */\n logoutEverywhere(): Promise<void> {\n return this.logout({ everywhere: true });\n }\n\n /**\n * List active sessions for the authenticated user. Returns one entry per\n * refresh-token family with the metadata captured at issuance time. The\n * `current` flag identifies which entry corresponds to this client.\n */\n async listSessions(): Promise<SessionInfo[]> {\n if (!isClientRuntime) {\n warnServerSide('listSessions');\n return [];\n }\n if (!this._session?.token?.accessToken) {\n throw new Error('[PollarClient] listSessions requires an authenticated session');\n }\n const { data, error } = await this._api.GET('/auth/sessions');\n if (error || !data?.success) {\n throw new Error('[PollarClient] Failed to list sessions');\n }\n return data.content.sessions;\n }\n\n getSessionsState(): SessionsState {\n return this._sessionsState;\n }\n\n onSessionsStateChange(cb: (state: SessionsState) => void): () => void {\n this._sessionsStateListeners.add(cb);\n cb(this._sessionsState);\n return () => this._sessionsStateListeners.delete(cb);\n }\n\n /**\n * Fire-and-forget variant of {@link listSessions} that drives the observable\n * `SessionsState` store instead of returning the array. UI layers subscribe\n * via `onSessionsStateChange` and stay pure readers — mirrors `fetchTxHistory`.\n */\n async fetchSessions(): Promise<void> {\n this._setSessionsState({ step: 'loading' });\n try {\n const sessions = await this.listSessions();\n this._setSessionsState({ step: 'loaded', sessions });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load sessions';\n this._setSessionsState({ step: 'error', message });\n }\n }\n\n /**\n * Revoke a specific refresh-token family (a single device session). Use\n * `listSessions` to enumerate the familyIds. Revoking the current session\n * does NOT clear local state — call `logout()` for that case.\n */\n async revokeSession(familyId: string): Promise<void> {\n if (!isClientRuntime) {\n warnServerSide('revokeSession');\n return;\n }\n if (!this._session?.token?.accessToken) {\n throw new Error('[PollarClient] revokeSession requires an authenticated session');\n }\n const { error } = await this._api.DELETE('/auth/sessions/{familyId}', {\n params: { path: { familyId } },\n });\n if (error) {\n throw new Error('[PollarClient] Failed to revoke session');\n }\n }\n\n // ─── Network ──────────────────────────────────────────────────────────────\n\n getNetwork(): StellarNetwork {\n return this._networkState.step === 'connected' ? this._networkState.network : 'testnet';\n }\n\n getNetworkState(): NetworkState {\n return this._networkState;\n }\n\n /**\n * The client's level-gated logger (built from `logLevel` / `logger`). Exposed\n * so the runtime layer (`@pollar/react`) can route its own logs through the\n * same level and sink instead of calling `console` directly.\n */\n getLogger(): PollarLogger {\n return this._log;\n }\n\n setNetwork(network: StellarNetwork): void {\n this._setNetworkState({ step: 'connected', network });\n }\n\n onNetworkStateChange(cb: (state: NetworkState) => void): () => void {\n this._networkStateListeners.add(cb);\n cb(this._networkState);\n return () => this._networkStateListeners.delete(cb);\n }\n\n // ─── Transaction state ────────────────────────────────────────────────────\n\n getTransactionState(): TransactionState | null {\n return this._transactionState;\n }\n\n onTransactionStateChange(cb: (state: TransactionState) => void): () => void {\n this._transactionStateListeners.add(cb);\n if (this._transactionState) cb(this._transactionState);\n return () => this._transactionStateListeners.delete(cb);\n }\n\n // ─── Tx history ──────────────────────────────────────────────────────────\n\n getTxHistoryState(): TxHistoryState {\n return this._txHistoryState;\n }\n\n onTxHistoryStateChange(cb: (state: TxHistoryState) => void): () => void {\n this._txHistoryStateListeners.add(cb);\n cb(this._txHistoryState);\n return () => this._txHistoryStateListeners.delete(cb);\n }\n\n async fetchTxHistory(params: TxHistoryParams = {}): Promise<void> {\n this._setTxHistoryState({ step: 'loading', params });\n try {\n const { data, error } = await this._api.GET('/tx/history', { params: { query: params } });\n if (!error && data?.success && data.content) {\n this._setTxHistoryState({ step: 'loaded', params, data: data.content });\n } else {\n const message = (error as { message?: string } | undefined)?.message ?? 'Failed to load history';\n this._setTxHistoryState({ step: 'error', params, message });\n }\n } catch {\n this._setTxHistoryState({ step: 'error', params, message: 'Failed to load history' });\n }\n }\n\n // ─── Wallet balance ───────────────────────────────────────────────────────\n\n getWalletBalanceState(): WalletBalanceState {\n return this._walletBalanceState;\n }\n\n onWalletBalanceStateChange(cb: (state: WalletBalanceState) => void): () => void {\n this._walletBalanceStateListeners.add(cb);\n cb(this._walletBalanceState);\n return () => this._walletBalanceStateListeners.delete(cb);\n }\n\n /**\n * Refreshes the balances of the authenticated user's OWN wallet. The wallet\n * and network are resolved server-side from the session — no arguments. Drives\n * `walletBalanceState`. For an arbitrary wallet, use {@link getWalletBalance}.\n */\n async refreshBalance(): Promise<void> {\n if (!this._session?.wallet?.address) {\n this._setWalletBalanceState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setWalletBalanceState({ step: 'loading' });\n try {\n const { data, error } = await this._api.GET('/wallet/balance');\n if (!error && data?.success && data.content) {\n this._setWalletBalanceState({ step: 'loaded', data: data.content });\n } else {\n this._setWalletBalanceState({ step: 'error', message: 'Failed to load balance' });\n }\n } catch {\n this._setWalletBalanceState({ step: 'error', message: 'Failed to load balance' });\n }\n }\n\n /**\n * General-purpose balance lookup for ANY wallet on ANY network — not scoped\n * to this application. Enumerates the account's real on-chain holdings via\n * Horizon (server-side) and returns the data directly (no reactive state).\n * `network` defaults to the client's current network.\n */\n async getWalletBalance(publicKey: string, network?: StellarNetwork): Promise<WalletBalanceContent> {\n const { data, error } = await this._api.GET('/wallet/{publicKey}/balance', {\n params: { path: { publicKey }, query: { network: network ?? this.getNetwork() } },\n });\n if (error || !data?.success || !data.content) {\n throw new Error('[PollarClient] Failed to load wallet balance');\n }\n return data.content;\n }\n\n // ─── Enabled assets ───────────────────────────────────────────────────────\n\n getEnabledAssetsState(): EnabledAssetsState {\n return this._enabledAssetsState;\n }\n\n onEnabledAssetsStateChange(cb: (state: EnabledAssetsState) => void): () => void {\n this._enabledAssetsStateListeners.add(cb);\n cb(this._enabledAssetsState);\n return () => this._enabledAssetsStateListeners.delete(cb);\n }\n\n /**\n * Loads the application's enabled assets paired with the authenticated\n * wallet's on-chain trustline state — so the SDK knows which trustlines still\n * need to be added. Wallet and network are resolved server-side from the\n * session. Drives `enabledAssetsState`; mirrors {@link refreshBalance}.\n */\n async refreshAssets(): Promise<void> {\n if (!this._session?.wallet?.address) {\n this._setEnabledAssetsState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setEnabledAssetsState({ step: 'loading' });\n try {\n const { data, error } = await this._api.GET('/wallet/assets');\n if (!error && data?.success && data.content) {\n this._setEnabledAssetsState({ step: 'loaded', data: data.content });\n } else {\n this._setEnabledAssetsState({ step: 'error', message: 'Failed to load assets' });\n }\n } catch {\n this._setEnabledAssetsState({ step: 'error', message: 'Failed to load assets' });\n }\n }\n\n /**\n * Establishes (omit `limit`) or removes (`limit: '0'`) a trustline for an asset.\n *\n * Routing mirrors how the platform pays for the reserve:\n * - **Sponsored custodial** (`opts.sponsored` true, internal wallet) → the\n * server orchestrates a sponsored `changeTrust`: the app's wallets cover the\n * 0.5 XLM reserve and the fee, so the user pays nothing. Pass the asset's\n * `sponsored` flag (from {@link refreshAssets}) straight through.\n * - **Self-paid** (external/adapter wallet, sponsorship disabled, or a custom\n * asset not configured in the app) → a plain `change_trust` transaction the\n * user's own wallet signs and pays for, via {@link runTx}.\n *\n * Does not refresh on its own — callers should `refreshAssets()` afterwards.\n */\n async setTrustline(\n asset: { code: string; issuer: string },\n opts?: { limit?: string; sponsored?: boolean },\n ): Promise<TrustlineOutcome> {\n const limit = opts?.limit;\n const walletType = this._session?.wallet?.type;\n\n if (!this._session?.wallet?.address) {\n return { status: 'error', details: 'No wallet connected' };\n }\n if (walletType === 'smart') {\n // Passkey C-addresses hold SAC tokens — they don't use classic trustlines.\n return { status: 'error', details: 'Trustlines do not apply to smart wallets' };\n }\n\n // Sponsored custodial path: the platform co-signs and the app pays. Only an\n // app-configured asset on an internal (custodial) wallet qualifies — the\n // backend re-checks and 400s otherwise.\n if (opts?.sponsored && !this._walletAdapter && walletType === 'internal') {\n try {\n const { data, error } = await this._api.POST('/wallet/assets/trustline', {\n body: { code: asset.code, issuer: asset.issuer, ...(limit !== undefined && { limit }) },\n });\n if (!error && data?.success) {\n if (data.content) this._setEnabledAssetsState({ step: 'loaded', data: data.content });\n return { status: 'success' };\n }\n const details = (error as { details?: string; code?: string } | undefined)?.details ?? (error as { code?: string } | undefined)?.code;\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n // Self-paid path: the user's own wallet signs and covers the reserve + fee.\n // The backend's change_trust schema is a discriminated union on `type`, so\n // derive it from the code length (1–4 → alphanum4, 5–12 → alphanum12).\n return this.runTx('change_trust', {\n asset: {\n type: asset.code.length <= 4 ? 'credit_alphanum4' : 'credit_alphanum12',\n code: asset.code,\n issuer: asset.issuer,\n },\n ...(limit !== undefined && { limit }),\n } as TxBuildBody['params']);\n }\n\n // ─── Transactions ─────────────────────────────────────────────────────────\n\n /**\n * Builds an unsigned XDR. Drives `_setTransactionState` for modal-style UIs\n * AND returns a {@link BuildOutcome} so headless callers can `await` and\n * inspect the result without subscribing to state changes.\n */\n async buildTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<BuildOutcome> {\n if (!this._session?.wallet?.address) {\n const details = 'No wallet connected';\n this._setTransactionState({ step: 'error', phase: 'building', details });\n return { status: 'error', details };\n }\n\n const body = {\n network: this.getNetwork(),\n address: this._session.wallet.address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody;\n\n try {\n this._setTransactionState({ step: 'building' });\n const { data, error } = await this._api.POST('/tx/build', { body });\n if (!error && data?.success && data.content) {\n this._setTransactionState({ step: 'built', buildData: data.content });\n return { status: 'built', buildData: data.content };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', phase: 'building', ...(details && { details }) });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n this._log.error('[PollarClient] buildTx failed', err);\n this._setTransactionState({ step: 'error', phase: 'building' });\n return { status: 'error' };\n }\n }\n\n getWalletType(): WalletId | null {\n return this._walletAdapter?.type ?? null;\n }\n\n /**\n * Signs the given unsigned XDR and returns the signed XDR.\n *\n * - External wallets: signs locally via the wallet adapter.\n * - Custodial wallets: posts to `/tx/sign`. The backend signs (through\n * wallet-service or the app's customer-managed adapter) and returns the\n * signed XDR plus an `idempotencyKey` the caller should echo back to\n * `submitTx`.\n *\n * Drives `_setTransactionState`: emits `signing` while in flight and\n * `signed` on success (or `error[phase: 'signing']` on failure). `buildData`\n * is threaded through if the consumer previously called `buildTx`.\n */\n async signTx(unsignedXdr: string): Promise<SignOutcome> {\n const buildData = this._currentBuildData();\n this._setTransactionState({ step: 'signing', ...(buildData && { buildData }) });\n\n if (this._walletAdapter) {\n const accountToSign = this._session?.wallet?.address;\n const signOpts = accountToSign\n ? { networkPassphrase: this._networkPassphrase(), accountToSign }\n : { networkPassphrase: this._networkPassphrase() };\n try {\n const { signedTxXdr } = await this._walletAdapter.signTransaction(unsignedXdr, signOpts);\n this._setTransactionState({\n step: 'signed',\n signedXdr: signedTxXdr,\n ...(buildData && { buildData }),\n });\n return { status: 'signed', signedXdr: signedTxXdr };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n // Custodial path: backend signs and returns the XDR + idempotencyKey.\n const address = this._session?.wallet?.address ?? '';\n try {\n const { data, error } = await this._api.POST('/tx/sign', {\n body: { network: this.getNetwork(), address, unsignedXdr },\n });\n if (!error && data?.success && data.content?.signedXdr) {\n const { signedXdr, idempotencyKey } = data.content;\n this._setTransactionState({\n step: 'signed',\n signedXdr,\n submissionToken: idempotencyKey,\n ...(buildData && { buildData }),\n });\n return { status: 'signed', signedXdr, submissionToken: idempotencyKey };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n /**\n * Submits a signed XDR via `/tx/submit` regardless of wallet type\n * (custodial or external). Routing through sdk-api gives us:\n * - End-to-end tx_records persistence with full phase lifecycle so the\n * developer dashboard can show every tx (both custodial and external\n * wallet flows) at `/apps/:id/monitor/transactions`.\n * - Idempotency tracking via `submissionToken` (returned by `signTx`).\n * - A single response shape (SUCCESS / PENDING / FAILED) shared by both\n * flows — previously external wallets could only return SUCCESS or\n * error since the direct-to-Horizon path was synchronous.\n *\n * The extra hop adds ~50–150 ms vs. the legacy direct-Horizon path; the\n * persistence + observability win is worth it.\n *\n * Drives `_setTransactionState`: emits `submitting` while in flight,\n * `submitted` on Horizon ack (pending), `success` on ledger confirmation,\n * or `error[phase: 'submitting']` on failure.\n */\n async submitTx(signedXdr: string, opts?: { submissionToken?: string }): Promise<SubmitOutcome> {\n const buildData = this._currentBuildData();\n const outcomeExtra: { buildData?: TxBuildContent } = buildData ? { buildData } : {};\n this._setTransactionState({ step: 'submitting', signedXdr, ...(buildData && { buildData }) });\n\n const address = this._session?.wallet?.address ?? '';\n try {\n const { data, error } = await this._api.POST('/tx/submit', {\n body: {\n network: this.getNetwork(),\n address,\n signedXdr,\n ...(opts?.submissionToken && { idempotencyKey: opts.submissionToken }),\n },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, ...(buildData && { buildData }) });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, ...(buildData && { buildData }) });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(resultCode && { details: resultCode }),\n });\n return {\n status: 'error',\n hash,\n ...outcomeExtra,\n ...(resultCode && { details: resultCode, resultCode }),\n };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n /**\n * Signs and submits in one logical step. Returns a {@link SubmitOutcome}.\n *\n * - **External wallets**: composes `signTx` + `submitTx` client-side. State\n * machine sees the full granular sequence `signing → signed → submitting\n * → success` because the underlying methods each emit.\n * - **Custodial wallets**: atomic `/tx/sign-and-send` round-trip. State\n * machine emits the compound `signing-submitting` step (the SDK can't\n * observe when one phase ends and the next begins inside that single\n * backend call) and then transitions to `submitted` (Horizon ack only) or\n * `success` (ledger-confirmed), or `error[phase: 'signing-submitting']`.\n */\n async signAndSubmitTx(unsignedXdr?: string): Promise<SubmitOutcome> {\n // Smart wallet: there is no unsigned XDR — sign the prepared auth digest\n // with the passkey and submit, using the build already on the state machine.\n if (this._session?.wallet?.type === 'smart') {\n const buildData = this._currentBuildData();\n if (!buildData?.smart) {\n const details = 'no prepared smart transaction; call buildTx first';\n this._setTransactionState({ step: 'error', phase: 'signing', details });\n return { status: 'error', details };\n }\n return this._signSubmitSmart(buildData);\n }\n\n if (!unsignedXdr) {\n this._setTransactionState({ step: 'error', phase: 'signing', details: 'missing unsigned transaction' });\n return { status: 'error', details: 'missing unsigned transaction' };\n }\n\n if (this._walletAdapter) {\n // External — the composed signTx+submitTx already emit the granular\n // state-machine sequence. We just pass outcomes through.\n const signed = await this.signTx(unsignedXdr);\n if (signed.status === 'error') {\n const buildData = this._currentBuildData();\n return {\n status: 'error',\n ...(buildData && { buildData }),\n ...(signed.details && { details: signed.details }),\n };\n }\n return this.submitTx(signed.signedXdr);\n }\n\n // Custodial — atomic single backend call. Compound state.\n const buildData = this._currentBuildData();\n const outcomeExtra: { buildData?: TxBuildContent } = buildData ? { buildData } : {};\n\n this._setTransactionState({ step: 'signing-submitting', ...(buildData && { buildData }) });\n\n const body: TxSignAndSendBody = {\n network: this.getNetwork(),\n address: this._session?.wallet?.address ?? '',\n unsignedXdr,\n };\n try {\n const { data, error } = await this._api.POST('/tx/sign-and-send', { body });\n if (!error && data?.success && data.content?.hash) {\n const {\n hash,\n status: backendStatus,\n resultCode,\n } = data.content as {\n hash: string;\n status: 'SUCCESS' | 'FAILED' | 'PENDING';\n resultCode?: string;\n };\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, ...(buildData && { buildData }) });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, ...(buildData && { buildData }) });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n // backendStatus === 'FAILED'\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(resultCode && { details: resultCode }),\n });\n return {\n status: 'error',\n hash,\n ...outcomeExtra,\n ...(resultCode && { details: resultCode, resultCode }),\n };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n /**\n * One-shot: build → sign → submit, returning the final {@link SubmitOutcome}.\n *\n * - **External wallets**: composes `buildTx` + `signAndSubmitTx` client-side.\n * State machine sees the full granular sequence (`building → built →\n * signing → signed → submitting → success`) because each composed call\n * emits its own transitions.\n * - **Custodial wallets**: single round-trip to `/tx/build-sign-submit`. The\n * signed XDR never leaves the backend. State machine emits the compound\n * `building-signing-submitting` step (the SDK can't observe individual\n * phase boundaries inside one atomic call) and then transitions to\n * `submitted` / `success` / `error[phase: 'building-signing-submitting']`.\n *\n * If you need granular UI feedback for custodial flows (separate\n * \"Building…\", \"Signing…\", \"Submitting…\" indicators), call `buildTx`,\n * `signTx`, and `submitTx` separately instead.\n */\n async buildAndSignAndSubmitTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n // Smart wallet (passkey / C-address): build (prepare) → sign the auth digest\n // with the passkey → submit. The signed entry is assembled server-side.\n if (this._session?.wallet?.type === 'smart') {\n return this._runSmartTx(operation, params, options);\n }\n\n if (this._walletAdapter) {\n const built = await this.buildTx(operation, params, options);\n if (built.status === 'error') {\n return { status: 'error', ...(built.details && { details: built.details }) };\n }\n if (!built.buildData.unsignedXdr) {\n return { status: 'error', details: 'build returned no unsigned transaction' };\n }\n return this.signAndSubmitTx(built.buildData.unsignedXdr);\n }\n\n // Custodial path — single backend call, compound state-machine step.\n if (!this._session?.wallet?.address) {\n this._setTransactionState({ step: 'error', phase: 'building-signing-submitting', details: 'No wallet connected' });\n return { status: 'error', details: 'No wallet connected' };\n }\n this._setTransactionState({ step: 'building-signing-submitting' });\n try {\n const { data, error } = await this._api.POST('/tx/build-sign-submit', {\n body: {\n network: this.getNetwork(),\n address: this._session.wallet.address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody & { idempotencyKey?: string },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash });\n return { status: 'success', hash };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash });\n return { status: 'pending', hash };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(resultCode && { details: resultCode }),\n });\n return { status: 'error', hash, ...(resultCode && { details: resultCode, resultCode }) };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n /** Alias for {@link buildAndSignAndSubmitTx} — shorter \"just do the thing\" name. */\n async runTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n return this.buildAndSignAndSubmitTx(operation, params, options);\n }\n\n /**\n * Smart-wallet (passkey / C-address) transaction: build (server prepares the\n * SAC transfer + returns the auth digest) → sign the digest with the passkey\n * → submit (server assembles the signed auth entry and broadcasts; the\n * sponsor pays the fee). State machine: building → built → signing →\n * submitting → success.\n */\n private async _runSmartTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n const address = this._session?.wallet?.address;\n if (!address) {\n this._setTransactionState({ step: 'error', phase: 'building', details: 'No wallet connected' });\n return { status: 'error', details: 'No wallet connected' };\n }\n if (!this._passkeySign) {\n const details = 'Passkey signer not configured';\n this._setTransactionState({ step: 'error', phase: 'signing', details });\n return { status: 'error', details };\n }\n\n // 1. Build (prepare) — returns the auth digest to sign, not an unsigned XDR.\n this._setTransactionState({ step: 'building' });\n let buildData: TxBuildContent;\n try {\n const body = {\n network: this.getNetwork(),\n address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody;\n const { data, error } = await this._api.POST('/tx/build', { body });\n if (error || !data?.success || !data.content?.smart) {\n const details = (error as { details?: string } | undefined)?.details ?? 'Failed to build transaction';\n this._setTransactionState({ step: 'error', phase: 'building', details });\n return { status: 'error', details };\n }\n buildData = data.content;\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'building', ...(details && { details }) });\n return { status: 'error', ...(details && { details }) };\n }\n this._setTransactionState({ step: 'built', buildData });\n\n return this._signSubmitSmart(buildData);\n }\n\n /**\n * Steps 2–3 of the smart-wallet flow: sign the prepared auth digest with the\n * passkey, then submit. Shared by `_runSmartTx` (atomic) and `signAndSubmitTx`\n * (split flow, when a smart build is already on the state machine).\n */\n private async _signSubmitSmart(buildData: TxBuildContent): Promise<SubmitOutcome> {\n const address = this._session?.wallet?.address;\n const smart = buildData.smart;\n if (!address || !smart) {\n const details = 'no prepared smart transaction';\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, details });\n return { status: 'error', buildData, details };\n }\n if (!this._passkeySign) {\n const details = 'Passkey signer not configured';\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, details });\n return { status: 'error', buildData, details };\n }\n\n // 2. Sign the auth digest with the passkey (biometric prompt).\n this._setTransactionState({ step: 'signing', buildData });\n let assertion: Awaited<ReturnType<PasskeySigner>>;\n try {\n assertion = await this._passkeySign({ credentialId: smart.credentialId, challenge: smart.digest });\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, ...(details && { details }) });\n return { status: 'error', buildData, ...(details && { details }) };\n }\n\n // 3. Submit — server assembles the signed auth entry and broadcasts.\n this._setTransactionState({ step: 'submitting', buildData });\n const outcomeExtra: { buildData: TxBuildContent } = { buildData };\n try {\n const { data, error } = await this._api.POST('/tx/submit', {\n body: {\n network: this.getNetwork(),\n address,\n smart: { entryXdr: smart.entryXdr, funcXdr: smart.funcXdr, assertion },\n },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, buildData });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, buildData });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n buildData,\n ...(resultCode && { details: resultCode }),\n });\n return { status: 'error', hash, ...outcomeExtra, ...(resultCode && { details: resultCode, resultCode }) };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', phase: 'submitting', buildData, ...(details && { details }) });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'submitting', buildData, ...(details && { details }) });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n // ─── App config ───────────────────────────────────────────────────────────\n\n async getAppConfig(): Promise<unknown> {\n try {\n const { data, error } = await this._api.GET('/applications/config');\n if (!data || error) return null;\n return data.content;\n } catch {\n return null;\n }\n }\n\n // ─── KYC ──────────────────────────────────────────────────────────────────\n\n getKycStatus(providerId?: string) {\n return getKycStatus(this._api, providerId);\n }\n\n getKycProviders(country: string) {\n return getKycProviders(this._api, country);\n }\n\n startKyc(body: KycStartBody): Promise<KycStartResponse> {\n return startKyc(this._api, body);\n }\n\n resolveKyc(providerId: string, level?: KycLevel) {\n return resolveKyc(this._api, providerId, level);\n }\n\n pollKycStatus(providerId: string, opts?: { intervalMs?: number; timeoutMs?: number }): Promise<KycStatus> {\n return pollKycStatus(this._api, providerId, opts);\n }\n\n // ─── Ramps ────────────────────────────────────────────────────────────────\n\n getRampsQuote(query: RampsQuoteQuery): Promise<RampsQuoteResponse> {\n return getRampsQuote(this._api, query);\n }\n\n createOnRamp(body: RampsOnrampBody): Promise<RampsOnrampResponse> {\n return createOnRamp(this._api, body);\n }\n\n createOffRamp(body: RampsOfframpBody): Promise<RampsOfframpResponse> {\n return createOffRamp(this._api, body);\n }\n\n getRampTransaction(txId: string): Promise<RampsTransactionResponse> {\n return getRampTransaction(this._api, txId);\n }\n\n pollRampTransaction(txId: string, opts?: { intervalMs?: number; timeoutMs?: number }): Promise<RampTxStatus> {\n return pollRampTransaction(this._api, txId, opts);\n }\n\n // ─── Distribution ─────────────────────────────────────────────────────────\n\n listDistributionRules(): Promise<DistributionRule[]> {\n return listDistributionRules(this._api);\n }\n\n claimDistributionRule(body: DistributionClaimBody): Promise<DistributionClaimContent> {\n return claimDistributionRule(this._api, body);\n }\n\n private _setTxHistoryState(next: TxHistoryState): void {\n this._txHistoryState = next;\n for (const cb of this._txHistoryStateListeners) cb(next);\n }\n\n private _setSessionsState(next: SessionsState): void {\n this._sessionsState = next;\n for (const cb of this._sessionsStateListeners) cb(next);\n }\n\n private _setWalletBalanceState(next: WalletBalanceState): void {\n this._walletBalanceState = next;\n for (const cb of this._walletBalanceStateListeners) cb(next);\n }\n\n private _setEnabledAssetsState(next: EnabledAssetsState): void {\n this._enabledAssetsState = next;\n for (const cb of this._enabledAssetsStateListeners) cb(next);\n }\n\n // ─── Private ──────────────────────────────────────────────────────────────\n\n private _newController(): AbortController {\n this._loginController?.abort();\n this._loginController = new AbortController();\n return this._loginController;\n }\n\n private _flowDeps(signal: AbortSignal) {\n return {\n api: this._api,\n logger: this._log,\n basePath: this.basePath,\n // SSE status streaming works on web; React Native's `fetch` has no\n // readable `response.body`, so those clients poll the non-streaming\n // status endpoint instead. `isBrowser` is false in RN and SSR alike.\n useStreaming: isBrowser,\n signal,\n setAuthState: this._setAuthState.bind(this),\n storeSession: this._storeSession.bind(this),\n clearSession: this._clearSession.bind(this),\n getPublicJwk: () => this._keyManager.getPublicJwk(),\n resolveWalletAdapter: (id: WalletId) => this._resolveWalletAdapter(id),\n storeWalletAdapter: async (adapter: WalletAdapter, id: WalletId) => {\n this._walletAdapter = adapter;\n await writeWalletType(this._storage, this.apiKeyHash, id);\n },\n ...(this._passkey ? { passkey: this._passkey } : {}),\n ...(this._deviceLabel ? { deviceLabel: this._deviceLabel } : {}),\n };\n }\n\n /**\n * Resolves a wallet adapter for the requested id. Uses the consumer's\n * injected `walletAdapter` resolver when present; otherwise falls back to\n * the built-in `FreighterAdapter` / `AlbedoAdapter`. Throws if the id is\n * unknown and no resolver is configured.\n */\n private async _resolveWalletAdapter(id: WalletId): Promise<WalletAdapter> {\n if (this._walletAdapterResolver) {\n // Race the resolver against a timeout. A broken extension bridge can\n // leave `walletAdapterResolver()` pending forever; without this the\n // entire login flow would hang with no signal to the consumer. The\n // resolver only constructs the adapter object (not the user-facing\n // approval), so 5s is generous.\n const timeoutMs = this._walletResolverTimeoutMs;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n reject(\n Object.assign(new Error(`[PollarClient] Wallet adapter resolver for \"${id}\" timed out after ${timeoutMs}ms`), {\n code: AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT,\n }),\n );\n }, timeoutMs);\n });\n try {\n return await Promise.race([Promise.resolve(this._walletAdapterResolver(id)), timeoutPromise]);\n } finally {\n if (timeoutHandle !== undefined) clearTimeout(timeoutHandle);\n }\n }\n if (id === WalletType.FREIGHTER) return new FreighterAdapter();\n if (id === WalletType.ALBEDO) return new AlbedoAdapter(this.getNetwork() === 'mainnet' ? 'public' : 'testnet');\n throw new Error(\n `[PollarClient] No wallet adapter configured for \"${id}\". Pass a walletAdapter resolver in PollarClientConfig.`,\n );\n }\n\n private _handleFlowError(error: unknown): void {\n if (error instanceof Error && error.name === 'AbortError') {\n this._log.debug('[PollarClient] Login cancelled');\n this._setAuthState({ step: 'idle' });\n return;\n }\n if (error instanceof Error && (error as { code?: string }).code === AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT) {\n this._log.error('[PollarClient]', error.message);\n this._setAuthState({\n step: 'error',\n previousStep: this._authState.step,\n message: error.message,\n errorCode: AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT,\n });\n return;\n }\n this._log.error('[PollarClient] Unexpected error in auth flow', error);\n this._setAuthState({\n step: 'error',\n previousStep: this._authState.step,\n message: 'An unexpected error occurred',\n errorCode: AUTH_ERROR_CODES.UNEXPECTED_ERROR,\n });\n }\n\n private async _restoreSession(): Promise<void> {\n this._session = await readStorage(this._storage, this.apiKeyHash, this._log);\n if (this._session) {\n const storedType = await readWalletType(this._storage, this.apiKeyHash);\n if (storedType) {\n try {\n this._walletAdapter = await this._resolveWalletAdapter(storedType);\n } catch (err) {\n // No resolver knows this id (e.g. user removed the kit-adapter\n // package). Session stays valid; signing will fall back to the\n // server-side custodial path until the user reconnects a wallet.\n this._log.warn('[PollarClient] Could not restore wallet adapter for stored id', { id: storedType, err });\n }\n }\n this._log.info('[PollarClient] Session restored from storage');\n // Emit through the setter so listeners that subscribe after\n // _initialize() resolves still get notified. A direct assignment to\n // _authState would race past any onAuthStateChange subscription that\n // hasn't run yet (e.g. PollarProvider's useEffect).\n // Optimistic: storage is trusted enough to show `authenticated`, but the\n // server hasn't confirmed the session is still alive (it may have been\n // revoked elsewhere), so `verified: false`.\n this._setAuthState({ step: 'authenticated', session: this._session, verified: false });\n this._scheduleNextRefresh();\n // Fire-and-forget: revalidate + repopulate the profile in the background.\n // Deliberately NOT awaited so `_initialized` resolves immediately and the\n // UI never blocks on a network round-trip at startup.\n void this._resume();\n } else {\n this._log.info('[PollarClient] No session in storage');\n // Another tab (or this one) wiped the session key. If we were\n // authenticated, propagate the logout: tear down in-memory state, the\n // refresh timer and DPoP keys, and emit `idle`. Guarded so the cold-start\n // call (step already `idle`) is a no-op and we never recurse — the\n // `removeStorage` inside `_clearSession` targets an already-removed key.\n if (this._authState.step !== 'idle') {\n await this._clearSession();\n }\n }\n }\n\n /**\n * Validate the restored session against the server and repopulate the\n * in-memory profile (PII is never persisted, so it's null after a cold\n * reload). Goes through the normal authed client, so it coalesces with any\n * in-flight refresh (onRequest awaits `_refreshPromise`) and, being a GET,\n * is auto-retried after a 401-triggered refresh.\n *\n * - 200 → store profile, mark the session `verified`.\n * - 401 → the refresh-on-401 path already ran; if the family was\n * revoked, refresh failed and `_clearSession()` took us to\n * idle. Nothing to do here — don't double-handle.\n * - network error → stay optimistic (do NOT log out); revalidated later on\n * `visibilitychange` or first use.\n */\n private async _resume(): Promise<void> {\n if (!this._session) return;\n this._resumeController?.abort();\n const controller = new AbortController();\n this._resumeController = controller;\n try {\n const { data, error } = await this._api.GET('/auth/session/resume', { signal: controller.signal });\n if (error || !data) return;\n const content = (data as { content?: PollarUserProfile }).content;\n if (!content || !this._session) return;\n this._profile = { ...content };\n this._setAuthState({ step: 'authenticated', session: this._session, verified: true });\n } catch (err) {\n if ((err as { name?: string })?.name === 'AbortError') return;\n // Network failure — keep the optimistic (unverified) session and retry\n // when the app next becomes visible or on the next authed request.\n this._log.warn('[PollarClient] resume failed (network); will retry', err);\n } finally {\n if (this._resumeController === controller) this._resumeController = null;\n }\n }\n\n private async _storeSession(session: PollarApplicationConfigContent): Promise<void> {\n this._log.info('[PollarClient] Session stored');\n\n const w = session.wallet;\n const persisted: PollarPersistedSession = {\n clientSessionId: session.clientSessionId,\n userId: session.userId ?? null,\n status: session.status,\n token: session.token,\n user: session.user,\n // The wire response still carries the legacy `publicKey` alias (kept for\n // older SDKs); the persisted session standardizes on `address` only.\n // The wire also still emits the legacy type `'custodial'` (unchanged for\n // SDKs ≤0.8.x); we remap it to `'internal'` here so the SDK surface and\n // persisted session speak one vocabulary while the wire stays compatible.\n wallet: {\n type: w.type === 'custodial' ? 'internal' : w.type,\n address: w.address ?? w.publicKey ?? null,\n ...(w.existsOnStellar !== undefined ? { existsOnStellar: w.existsOnStellar } : {}),\n ...(w.createdAt !== undefined ? { createdAt: w.createdAt } : {}),\n ...(w.linkedAt !== undefined ? { linkedAt: w.linkedAt } : {}),\n ...(w.network !== undefined ? { network: w.network } : {}),\n ...(w.deployTxHash !== undefined ? { deployTxHash: w.deployTxHash } : {}),\n },\n };\n this._session = persisted;\n\n if (session.data) {\n this._profile = {\n mail: session.data.mail,\n first_name: session.data.first_name,\n last_name: session.data.last_name,\n avatar: session.data.avatar,\n providers: session.data.providers,\n };\n }\n\n await writeStorage(this._storage, this.apiKeyHash, persisted);\n // Fresh login/refresh response came straight from the server, so the\n // session is already server-validated → `verified: true`.\n this._setAuthState({ step: 'authenticated', session: persisted, verified: true });\n this._scheduleNextRefresh();\n }\n\n private async _clearSession(): Promise<void> {\n this._log.info('[PollarClient] Session cleared');\n this._clearRefreshTimer();\n this._session = null;\n this._profile = null;\n this._walletAdapter = null;\n this._dpopNonce = null;\n try {\n await this._keyManager.reset();\n } catch (err) {\n this._log.warn('[PollarClient] KeyManager reset failed during clearSession', err);\n }\n await removeStorage(this._storage, this.apiKeyHash);\n this._transactionState = null;\n this._setAuthState({ step: 'idle' });\n }\n\n private _networkPassphrase(): string {\n return this.getNetwork() === 'mainnet'\n ? 'Public Global Stellar Network ; September 2015'\n : 'Test SDF Network ; September 2015';\n }\n\n private _setNetworkState(next: NetworkState): void {\n this._networkState = next;\n const label = next.step === 'connected' ? next.network : next.step;\n this._log.debug(`[PollarClient] network:${label}`);\n for (const cb of this._networkStateListeners) cb(next);\n }\n\n private _setAuthState(next: AuthState): void {\n this._authState = next;\n this._log.debug(`[PollarClient] auth:${next.step}`);\n for (const cb of this._authStateListeners) cb(next);\n }\n\n private _setTransactionState(next: TransactionState): void {\n this._transactionState = next;\n this._log.debug(`[PollarClient] transaction:${next.step}`);\n for (const cb of this._transactionStateListeners) cb(next);\n }\n\n /**\n * Threads `buildData` through state transitions. When the user has already\n * called `buildTx`, every subsequent state (signing, signed, submitting,\n * submitted, success, error) should carry the build summary so modal UIs\n * can keep showing \"Send 5 USDC to G...\" through the whole flow.\n */\n private _currentBuildData(): TxBuildContent | undefined {\n const s = this._transactionState;\n if (!s) return undefined;\n if ('buildData' in s && s.buildData) return s.buildData;\n return undefined;\n }\n}\n","export type StellarNetwork = 'mainnet' | 'testnet';\n\nconst HORIZON_URLS: Record<StellarNetwork, string> = {\n mainnet: 'https://horizon.stellar.org',\n testnet: 'https://horizon-testnet.stellar.org',\n};\n\nexport type StellarClientConfig = StellarNetwork | { horizonUrl: string };\n\nexport interface StellarBalance {\n asset: string;\n balance: string;\n assetIssuer?: string;\n}\n\nexport class StellarClient {\n private readonly horizonUrl: string;\n\n constructor(config: StellarClientConfig) {\n this.horizonUrl = typeof config === 'string' ? HORIZON_URLS[config] : config.horizonUrl;\n }\n\n async submitTransaction(signedXdr: string): Promise<{ success: true; hash: string } | { success: false; errorCode: string }> {\n try {\n const response = await fetch(`${this.horizonUrl}/transactions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ tx: signedXdr }),\n });\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as { extras?: { result_codes?: { transaction?: string } } };\n return { success: false, errorCode: body.extras?.result_codes?.transaction ?? 'HORIZON_ERROR' };\n }\n const data = (await response.json()) as { hash: string };\n return { success: true, hash: data.hash };\n } catch {\n return { success: false, errorCode: 'NETWORK_ERROR' };\n }\n }\n}\n","// Web/Node/Workers entry point. Registers a `WebCryptoKeyManager`-only\n// factory at module load so `PollarClient` resolves the WebCrypto-backed\n// manager without importing `NobleKeyManager` (and transitively\n// `@noble/curves`). Bundlers targeting browsers pick this entry via the\n// default `\"import\"` / `\"require\"` conditions in `package.json#exports` and\n// produce a noble-free bundle.\n//\n// React Native applications resolve `index.rn.ts` instead via the\n// `\"react-native\"` condition.\n\nimport { _setDefaultKeyManagerFactory } from './keys/factory';\nimport { WebCryptoKeyManager } from './keys/web-crypto';\n\n_setDefaultKeyManagerFactory((_storage, apiKey) => new WebCryptoKeyManager(apiKey));\n\nexport * from './public';\n"]}
1
+ {"version":3,"sources":["webpack:/freighterApi/webpack/universalModuleDefinition","webpack:/freighterApi/webpack/bootstrap","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/constants/services.ts","webpack:/freighterApi/webpack/runtime/define%20property%20getters","webpack:/freighterApi/webpack/runtime/hasOwnProperty%20shorthand","webpack:/freighterApi/webpack/runtime/make%20namespace%20object","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/api/helpers/extensionMessaging.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getPublicKey.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@shared/api/external.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signTransaction.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signBlob.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/signAuthEntry.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/isConnected.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getNetwork.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getNetworkDetails.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/isAllowed.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/setAllowed.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/getUserInfo.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/requestAccess.ts","webpack:/freighterApi/src/Users/piyalbasu/Stellar/lyra/@stellar/freighter-api/src/index.ts","../src/keys/factory.ts","../src/lib/base64url.ts","../src/lib/sha256.ts","../src/lib/api-key-hash.ts","../src/keys/thumbprint.ts","../src/keys/web-crypto.ts","../../../node_modules/openapi-fetch/src/index.js","../src/api/client.ts","../src/api/endpoints/distribution.ts","../src/api/endpoints/kyc.ts","../src/api/endpoints/ramps.ts","../src/lib/random-uuid.ts","../src/dpop.ts","../src/lib/logger.ts","../src/storage/web.ts","../src/storage/autodetect.ts","../src/version.ts","../src/visibility/noop.ts","../src/visibility/web.ts","../src/visibility/autodetect.ts","../src/types.ts","../src/wallets/FreighterAdapter.ts","../src/wallets/types.ts","../src/wallets/AlbedoAdapter.ts","../src/client/session.ts","../src/lib/abort.ts","../src/client/stream.ts","../src/client/auth/authenticate.ts","../src/client/auth/deps.ts","../src/client/auth/emailFlow.ts","../src/client/auth/oauthFlow.ts","../src/client/auth/passkeyFlow.ts","../src/client/auth/walletFlow.ts","../src/client/client.ts","../src/stellar/StellarClient.ts","../src/index.ts"],"names":["root","factory","exports","module","define","amd","this","SERVICE_TYPES","EXTERNAL_SERVICE_TYPES","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","e","sendMessageToContentScript","msg","MESSAGE_ID","Date","now","Math","random","window","postMessage","source","messageId","location","origin","Promise","resolve","requestTimeout","type","REQUEST_CONNECTION_STATUS","REQUEST_PUBLIC_KEY","setTimeout","isConnected","publicKey","removeEventListener","messageListener","event","r","data","t","messagedId","clearTimeout","addEventListener","getPublicKey","isBrowser","async","response","error","console","requestPublicKey","signTransaction","transactionXdr","opts","accountToSign","network","_accountToSign","networkPassphrase","signedTransaction","SUBMIT_TRANSACTION","signBlob","blob","signedBlob","SUBMIT_BLOB","signAuthEntry","entryXdr","signedAuthEntry","SUBMIT_AUTH_ENTRY","freighter","requestConnectionStatus","getNetwork","REQUEST_NETWORK","requestNetwork","getNetworkDetails","networkDetails","networkName","networkUrl","sorobanRpcUrl","undefined","REQUEST_NETWORK_DETAILS","isAllowed","REQUEST_ALLOWED_STATUS","requestAllowedStatus","setAllowed","SET_ALLOWED_STATUS","setAllowedStatus","getUserInfo","userInfo","REQUEST_USER_INFO","requestUserInfo","REQUEST_ACCESS","requestAccess","nobleSha256","fetch","Request","final","joiner","WalletType","buildData"],"mappings":"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","file":"index.mjs","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"freighterApi\"] = factory();\n\telse\n\t\troot[\"freighterApi\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","export enum SERVICE_TYPES {\n CREATE_ACCOUNT = \"CREATE_ACCOUNT\",\n FUND_ACCOUNT = \"FUND_ACCOUNT\",\n ADD_ACCOUNT = \"ADD_ACCOUNT\",\n IMPORT_ACCOUNT = \"IMPORT_ACCOUNT\",\n IMPORT_HARDWARE_WALLET = \"IMPORT_HARDWARE_WALLET\",\n LOAD_ACCOUNT = \"LOAD_ACCOUNT\",\n MAKE_ACCOUNT_ACTIVE = \"MAKE_ACCOUNT_ACTIVE\",\n UPDATE_ACCOUNT_NAME = \"UPDATE_ACCOUNT_NAME\",\n GET_MNEMONIC_PHRASE = \"GET_MNEMONIC_PHRASE\",\n CONFIRM_MNEMONIC_PHRASE = \"CONFIRM_MNEMONIC_PHRASE\",\n CONFIRM_MIGRATED_MNEMONIC_PHRASE = \"CONFIRM_MIGRATED_MNEMONIC_PHRASE\",\n RECOVER_ACCOUNT = \"RECOVER_ACCOUNT\",\n CONFIRM_PASSWORD = \"CONFIRM_PASSWORD\",\n REJECT_ACCESS = \"REJECT_ACCESS\",\n GRANT_ACCESS = \"GRANT_ACCESS\",\n SIGN_TRANSACTION = \"SIGN_TRANSACTION\",\n SIGN_BLOB = \"SIGN_BLOB\",\n SIGN_AUTH_ENTRY = \"SIGN_AUTH_ENTRY\",\n HANDLE_SIGNED_HW_TRANSACTION = \"HANDLE_SIGNED_HW_TRANSACTION\",\n REJECT_TRANSACTION = \"REJECT_TRANSACTION\",\n SIGN_FREIGHTER_TRANSACTION = \"SIGN_FREIGHTER_TRANSACTION\",\n SIGN_FREIGHTER_SOROBAN_TRANSACTION = \"SIGN_FREIGHTER_SOROBAN_TRANSACTION\",\n ADD_RECENT_ADDRESS = \"ADD_RECENT_ADDRESS\",\n LOAD_RECENT_ADDRESSES = \"LOAD_RECENT_ADDRESSES\",\n SIGN_OUT = \"SIGN_OUT\",\n SHOW_BACKUP_PHRASE = \"SHOW_BACKUP_PHRASE\",\n SAVE_ALLOWLIST = \"SAVE_ALLOWLIST\",\n SAVE_SETTINGS = \"SAVE_SETTINGS\",\n LOAD_SETTINGS = \"LOAD_SETTINGS\",\n GET_CACHED_ASSET_ICON = \"GET_CACHED_ASSET_ICON\",\n CACHE_ASSET_ICON = \"CACHE_ASSET_ICON\",\n GET_CACHED_ASSET_DOMAIN = \"GET_CACHED_ASSET_DOMAIN\",\n CACHE_ASSET_DOMAIN = \"CACHE_ASSET_DOMAIN\",\n GET_BLOCKED_ACCOUNTS = \"GET_BLOCKED_ACCOUNTS\",\n GET_BLOCKED_DOMAINS = \"GET_BLOCKED_DOMAINS\",\n ADD_CUSTOM_NETWORK = \"ADD_CUSTOM_NETWORK\",\n CHANGE_NETWORK = \"CHANGE_NETWORK\",\n REMOVE_CUSTOM_NETWORK = \"REMOVE_CUSTOM_NETWORK\",\n EDIT_CUSTOM_NETWORK = \"EDIT_CUSTOM_NETWORK\",\n RESET_EXP_DATA = \"RESET_EXP_DATA\",\n ADD_TOKEN_ID = \"ADD_TOKEN_ID\",\n GET_TOKEN_IDS = \"GET_TOKEN_IDS\",\n REMOVE_TOKEN_ID = \"REMOVE_TOKEN_ID\",\n GET_MIGRATABLE_ACCOUNTS = \"GET_MIGRATABLE_ACCOUNTS\",\n GET_MIGRATED_MNEMONIC_PHRASE = \"GET_MIGRATED_MNEMONIC_PHRASE\",\n MIGRATE_ACCOUNTS = \"MIGRATE_ACCOUNTS\",\n}\n\nexport enum EXTERNAL_SERVICE_TYPES {\n REQUEST_ACCESS = \"REQUEST_ACCESS\",\n REQUEST_PUBLIC_KEY = \"REQUEST_PUBLIC_KEY\",\n SUBMIT_TRANSACTION = \"SUBMIT_TRANSACTION\",\n SUBMIT_BLOB = \"SUBMIT_BLOB\",\n SUBMIT_AUTH_ENTRY = \"SUBMIT_AUTH_ENTRY\",\n REQUEST_NETWORK = \"REQUEST_NETWORK\",\n REQUEST_NETWORK_DETAILS = \"REQUEST_NETWORK_DETAILS\",\n REQUEST_CONNECTION_STATUS = \"REQUEST_CONNECTION_STATUS\",\n REQUEST_ALLOWED_STATUS = \"REQUEST_ALLOWED_STATUS\",\n SET_ALLOWED_STATUS = \"SET_ALLOWED_STATUS\",\n REQUEST_USER_INFO = \"REQUEST_USER_INFO\",\n}\n\nexport const EXTERNAL_MSG_REQUEST = \"FREIGHTER_EXTERNAL_MSG_REQUEST\";\nexport const EXTERNAL_MSG_RESPONSE = \"FREIGHTER_EXTERNAL_MSG_RESPONSE\";\n\ndeclare const DEV_SERVER: string;\nconst _DEV_SERVER = DEV_SERVER;\nexport { _DEV_SERVER as DEV_SERVER };\n\ndeclare const DEV_EXTENSION: string;\nconst _DEV_EXTENSION = DEV_EXTENSION;\nexport { _DEV_EXTENSION as DEV_EXTENSION };\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import browser from \"webextension-polyfill\";\nimport {\n DEV_SERVER,\n EXTERNAL_MSG_RESPONSE,\n EXTERNAL_MSG_REQUEST,\n EXTERNAL_SERVICE_TYPES,\n SERVICE_TYPES,\n} from \"../../constants/services\";\nimport { Response } from \"../types\";\n\ninterface Msg {\n [key: string]: any;\n type: EXTERNAL_SERVICE_TYPES | SERVICE_TYPES;\n}\n\nexport const sendMessageToContentScript = (msg: Msg): Promise<Response> => {\n /* \n In the case of multiple calls coming in sequentially, we use this MESSAGE_ID to make sure we're responding to\n the appropriate message sender. Otherwise, we can run into race conditions where we simply resolve all \n sent messages with the first thing that comes back.\n */\n const MESSAGE_ID = Date.now() + Math.random();\n\n window.postMessage(\n { source: EXTERNAL_MSG_REQUEST, messageId: MESSAGE_ID, ...msg },\n window.location.origin,\n );\n return new Promise((resolve) => {\n let requestTimeout = 0;\n\n /* \n In the case that Freighter is not installed at all, any messages to \n background from freighter-api will hang forever and not respond in any way. \n This is especially a problem for the isConnected method, because this is \n likely to be called in a situation where Freighter isn't installed.\n To prevent this, we add a timeout to automatically resolve in the event \n Freighter doesn't respond in a timely fashion to this method.\n */\n if (\n msg.type === EXTERNAL_SERVICE_TYPES.REQUEST_CONNECTION_STATUS ||\n msg.type === EXTERNAL_SERVICE_TYPES.REQUEST_PUBLIC_KEY\n ) {\n requestTimeout = setTimeout(() => {\n resolve({\n isConnected: false,\n publicKey: \"\",\n } as Response);\n window.removeEventListener(\"message\", messageListener);\n }, 2000);\n }\n\n const messageListener = (event: { source: any; data: Response }) => {\n // We only accept messages from ourselves\n if (event.source !== window) return;\n // Only respond to messages tagged as being from our content script\n if (event?.data?.source !== EXTERNAL_MSG_RESPONSE) return;\n // Only respond to messages that this instance of sendMessageToContentScript sent\n if (event?.data?.messagedId !== MESSAGE_ID) return;\n\n resolve(event.data);\n window.removeEventListener(\"message\", messageListener);\n clearTimeout(requestTimeout);\n };\n window.addEventListener(\"message\", messageListener, false);\n });\n};\n\nexport const sendMessageToBackground = async (msg: Msg): Promise<Response> => {\n let res;\n if (DEV_SERVER) {\n // treat this as an external call because we're making the call from the browser, not the popup\n res = await sendMessageToContentScript(msg);\n } else {\n res = await browser.runtime.sendMessage(msg);\n }\n\n return res;\n};\n","import { requestPublicKey } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getPublicKey = (): Promise<string> =>\n isBrowser ? requestPublicKey() : Promise.resolve(\"\");\n","import { EXTERNAL_SERVICE_TYPES } from \"../constants/services\";\nimport { NetworkDetails } from \"../constants/stellar\";\nimport { sendMessageToContentScript } from \"./helpers/extensionMessaging\";\nimport { UserInfo } from \"./types\";\n\nexport const requestAccess = async (): Promise<string> => {\n let response = { publicKey: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_ACCESS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { publicKey, error } = response;\n\n if (error) {\n throw error;\n }\n return publicKey;\n};\n\nexport const requestPublicKey = async (): Promise<string> => {\n let response = { publicKey: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_PUBLIC_KEY,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { publicKey, error } = response;\n\n if (error) {\n throw error;\n }\n return publicKey;\n};\n\nexport const submitTransaction = async (\n transactionXdr: string,\n opts?:\n | string\n | {\n network?: string;\n accountToSign?: string;\n networkPassphrase?: string;\n },\n accountToSign?: string,\n): Promise<string> => {\n let network = \"\";\n let _accountToSign = \"\";\n let networkPassphrase = \"\";\n\n /* \n As of v1.3.0, this method now accepts an object as its second param. \n Previously, it accepted optional second and third string parameters.\n This logic maintains backwards compatibility for older versions\n */\n if (typeof opts === \"object\") {\n network = opts.network || \"\";\n _accountToSign = opts.accountToSign || \"\";\n networkPassphrase = opts.networkPassphrase || \"\";\n } else {\n network = opts || \"\";\n _accountToSign = accountToSign || \"\";\n }\n\n let response = { signedTransaction: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n transactionXdr,\n network,\n networkPassphrase,\n accountToSign: _accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_TRANSACTION,\n });\n } catch (e) {\n console.error(e);\n throw e;\n }\n const { signedTransaction, error } = response;\n\n if (error) {\n throw error;\n }\n return signedTransaction;\n};\n\nexport const submitBlob = async (\n blob: string,\n opts?: {\n accountToSign?: string;\n },\n): Promise<string> => {\n let response = { signedBlob: \"\", error: \"\" };\n const _opts = opts || {};\n const accountToSign = _opts.accountToSign || \"\";\n try {\n response = await sendMessageToContentScript({\n blob,\n accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_BLOB,\n });\n } catch (e) {\n console.error(e);\n throw e;\n }\n const { signedBlob, error } = response;\n\n if (error) {\n throw error;\n }\n return signedBlob;\n};\n\nexport const submitAuthEntry = async (\n entryXdr: string,\n opts?: {\n accountToSign?: string;\n },\n): Promise<string> => {\n let response = { signedAuthEntry: \"\", error: \"\" };\n const _opts = opts || {};\n const accountToSign = _opts.accountToSign || \"\";\n try {\n response = await sendMessageToContentScript({\n entryXdr,\n accountToSign,\n type: EXTERNAL_SERVICE_TYPES.SUBMIT_AUTH_ENTRY,\n });\n } catch (e) {\n console.error(e);\n }\n const { signedAuthEntry, error } = response;\n\n if (error) {\n throw error;\n }\n return signedAuthEntry;\n};\n\nexport const requestNetwork = async (): Promise<string> => {\n let response = { network: \"\", error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_NETWORK,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { network, error } = response;\n\n if (error) {\n throw error;\n }\n return network;\n};\n\nexport const requestNetworkDetails = async (): Promise<{\n network: string;\n networkUrl: string;\n networkPassphrase: string;\n sorobanRpcUrl?: string;\n}> => {\n let response = {\n networkDetails: {\n network: \"\",\n networkName: \"\",\n networkUrl: \"\",\n networkPassphrase: \"\",\n sorobanRpcUrl: undefined,\n } as NetworkDetails,\n error: \"\",\n };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_NETWORK_DETAILS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { networkDetails, error } = response;\n const {\n network,\n networkUrl,\n networkPassphrase,\n sorobanRpcUrl,\n } = networkDetails;\n\n if (error) {\n throw error;\n }\n return { network, networkUrl, networkPassphrase, sorobanRpcUrl };\n};\n\nexport const requestConnectionStatus = async (): Promise<boolean> => {\n let response = {\n isConnected: false,\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_CONNECTION_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n return response.isConnected;\n};\n\nexport const requestAllowedStatus = async (): Promise<boolean> => {\n let response = {\n isAllowed: false,\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_ALLOWED_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n return response.isAllowed;\n};\n\nexport const setAllowedStatus = async (): Promise<boolean> => {\n let response = {\n isAllowed: false,\n error: \"\",\n };\n\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.SET_ALLOWED_STATUS,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { isAllowed, error } = response;\n\n if (error) {\n throw error;\n }\n return isAllowed;\n};\n\nexport const requestUserInfo = async (): Promise<UserInfo> => {\n let response = { userInfo: { publicKey: \"\" }, error: \"\" };\n try {\n response = await sendMessageToContentScript({\n type: EXTERNAL_SERVICE_TYPES.REQUEST_USER_INFO,\n });\n } catch (e) {\n console.error(e);\n }\n\n const { userInfo, error } = response;\n\n if (error) {\n throw error;\n }\n return userInfo;\n};\n","import { submitTransaction } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signTransaction = (\n transactionXdr: string,\n opts?: {\n network?: string;\n networkPassphrase?: string;\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitTransaction(transactionXdr, opts) : Promise.resolve(\"\");\n","import { submitBlob } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signBlob = (\n blob: string,\n opts?: {\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitBlob(blob, opts) : Promise.resolve(\"\");\n","import { submitAuthEntry } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const signAuthEntry = (\n entryXdr: string,\n opts?: {\n accountToSign?: string;\n }\n): Promise<string> =>\n isBrowser ? submitAuthEntry(entryXdr, opts) : Promise.resolve(\"\");\n","import { requestConnectionStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const isConnected = (): Promise<boolean> => {\n if (!isBrowser) return Promise.resolve(false);\n\n if (window.freighter) {\n return Promise.resolve(window.freighter);\n }\n\n return requestConnectionStatus();\n};\n","import { requestNetwork } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getNetwork = (): Promise<string> =>\n isBrowser ? requestNetwork() : Promise.resolve(\"\");\n","import { requestNetworkDetails } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getNetworkDetails = (): Promise<{\n network: string;\n networkUrl: string;\n networkPassphrase: string;\n sorobanRpcUrl?: string;\n}> =>\n isBrowser\n ? requestNetworkDetails()\n : Promise.resolve({\n network: \"\",\n networkUrl: \"\",\n networkPassphrase: \"\",\n sorobanRpcUrl: \"\",\n });\n","import { requestAllowedStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const isAllowed = (): Promise<boolean> =>\n isBrowser ? requestAllowedStatus() : Promise.resolve(false);\n","import { setAllowedStatus } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const setAllowed = (): Promise<boolean> =>\n isBrowser ? setAllowedStatus() : Promise.resolve(false);\n","import { requestUserInfo } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const getUserInfo = (): Promise<{ publicKey: string }> =>\n isBrowser ? requestUserInfo() : Promise.resolve({ publicKey: \"\" });\n","import { requestAccess as requestAccessApi } from \"@shared/api/external\";\nimport { isBrowser } from \".\";\n\nexport const requestAccess = (): Promise<string> =>\n isBrowser ? requestAccessApi() : Promise.resolve(\"\");\n","import { getPublicKey } from \"./getPublicKey\";\nimport { signTransaction } from \"./signTransaction\";\nimport { signBlob } from \"./signBlob\";\nimport { signAuthEntry } from \"./signAuthEntry\";\nimport { isConnected } from \"./isConnected\";\nimport { getNetwork } from \"./getNetwork\";\nimport { getNetworkDetails } from \"./getNetworkDetails\";\nimport { isAllowed } from \"./isAllowed\";\nimport { setAllowed } from \"./setAllowed\";\nimport { getUserInfo } from \"./getUserInfo\";\nimport { requestAccess } from \"./requestAccess\";\n\nexport const isBrowser = typeof window !== \"undefined\";\n\nexport {\n getPublicKey,\n signTransaction,\n signBlob,\n signAuthEntry,\n isConnected,\n getNetwork,\n getNetworkDetails,\n isAllowed,\n setAllowed,\n getUserInfo,\n requestAccess,\n};\nexport default {\n getPublicKey,\n signTransaction,\n signBlob,\n signAuthEntry,\n isConnected,\n getNetwork,\n getNetworkDetails,\n isAllowed,\n setAllowed,\n getUserInfo,\n requestAccess,\n};\n","import type { Storage } from '../storage/types';\nimport type { KeyManager } from './types';\n\n/**\n * Module-level registry for the platform-default `KeyManager` factory. Each\n * entry point (web `index.ts`, RN `index.rn.ts`) registers its own factory\n * at module-load time, so that `PollarClient` can resolve a default manager\n * without statically importing both implementations into every bundle.\n *\n * The split exists because `NobleKeyManager` pulls in `@noble/curves`, which\n * we don't want to ship to browser bundles when WebCrypto's ECDSA is\n * already available natively. Bundlers tree-shake the unused entry's noble\n * import; the RN entry keeps the pure-JS fallback.\n */\n\ntype KeyManagerFactory = (storage: Storage, apiKey: string) => KeyManager;\n\nlet _factory: KeyManagerFactory | null = null;\n\n/**\n * Register the platform-default factory. Called as a top-level side effect\n * from the entry-point module (`src/index.ts` or `src/index.rn.ts`).\n * Intentionally underscore-prefixed: not part of the public API.\n */\nexport function _setDefaultKeyManagerFactory(factory: KeyManagerFactory): void {\n _factory = factory;\n}\n\n/**\n * Construct the default `KeyManager` for the current runtime. Throws if no\n * factory has been registered — that only happens if `@pollar/core` was\n * imported in a way that bypassed the entry-point module (a bundler or\n * test setup bug).\n */\nexport function defaultKeyManager(storage: Storage, apiKey: string): KeyManager {\n if (!_factory) {\n throw new Error(\n '[PollarClient] No default KeyManager factory registered. ' +\n 'Did you import from \"@pollar/core\" via a non-standard path?',\n );\n }\n return _factory(storage, apiKey);\n}\n","/**\n * Base64url encoder/decoder (RFC 4648 §5), pure JS — no `btoa`, no `Buffer`.\n * Used everywhere we need to encode/decode JWS segments, JWK fields, hashes,\n * private scalars, etc. Output is unpadded (\"=\" stripped).\n */\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nconst REVERSE: ReadonlyMap<string, number> = (() => {\n const m = new Map<string, number>();\n for (let i = 0; i < ALPHABET.length; i++) m.set(ALPHABET[i] as string, i);\n return m;\n})();\n\n/** Encode raw bytes to base64url (no padding). */\nexport function base64urlEncode(bytes: Uint8Array): string {\n let result = '';\n let i = 0;\n for (; i + 2 < bytes.length; i += 3) {\n const b1 = bytes[i] as number;\n const b2 = bytes[i + 1] as number;\n const b3 = bytes[i + 2] as number;\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[((b1 & 0x03) << 4) | (b2 >> 4)];\n result += ALPHABET[((b2 & 0x0f) << 2) | (b3 >> 6)];\n result += ALPHABET[b3 & 0x3f];\n }\n if (i < bytes.length) {\n const b1 = bytes[i] as number;\n if (i + 1 === bytes.length) {\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[(b1 & 0x03) << 4];\n } else {\n const b2 = bytes[i + 1] as number;\n result += ALPHABET[b1 >> 2];\n result += ALPHABET[((b1 & 0x03) << 4) | (b2 >> 4)];\n result += ALPHABET[(b2 & 0x0f) << 2];\n }\n }\n return result;\n}\n\n/** Decode a base64url string (with or without \"=\" padding) to raw bytes. */\nexport function base64urlDecode(input: string): Uint8Array {\n const clean = input.replace(/=+$/, '');\n const out = new Uint8Array(Math.floor((clean.length * 3) / 4));\n let byteIdx = 0;\n for (let i = 0; i < clean.length; i += 4) {\n const c1 = REVERSE.get(clean[i] as string);\n const c2 = REVERSE.get(clean[i + 1] as string);\n const c3 = i + 2 < clean.length ? REVERSE.get(clean[i + 2] as string) : undefined;\n const c4 = i + 3 < clean.length ? REVERSE.get(clean[i + 3] as string) : undefined;\n if (c1 === undefined || c2 === undefined) {\n throw new Error('[PollarClient] Invalid base64url input');\n }\n out[byteIdx++] = (c1 << 2) | (c2 >> 4);\n if (c3 !== undefined) {\n out[byteIdx++] = ((c2 & 0x0f) << 4) | (c3 >> 2);\n if (c4 !== undefined) {\n out[byteIdx++] = ((c3 & 0x03) << 6) | c4;\n }\n }\n }\n return out.slice(0, byteIdx);\n}\n\n/** Encode a UTF-8 string to base64url. */\nexport function base64urlEncodeString(s: string): string {\n return base64urlEncode(new TextEncoder().encode(s));\n}\n\n/** Decode base64url to a UTF-8 string. */\nexport function base64urlDecodeString(s: string): string {\n return new TextDecoder().decode(base64urlDecode(s));\n}\n","import { sha256 as nobleSha256 } from '@noble/hashes/sha2';\n\n/**\n * SHA-256 via `@noble/hashes` (pure JS). Returns the raw 32-byte digest as a\n * `Uint8Array`.\n *\n * We deliberately do NOT use `crypto.subtle.digest`: it is absent on React\n * Native / Hermes unless a native polyfill (`react-native-quick-crypto`, which\n * forces an Expo dev build) is installed. `@noble/hashes` runs everywhere with\n * no native module, and is already in the dependency tree via `@noble/curves`\n * (the `NobleKeyManager`). The inputs hashed here are tiny (API keys, access\n * tokens, JWK thumbprints), so the JS implementation is more than fast enough.\n *\n * Kept `async` (the digest itself is synchronous) so existing `await sha256(…)`\n * call sites — DPoP `ath`, API-key hashing, JWK thumbprints, `NobleKeyManager`\n * — need no change.\n */\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n return nobleSha256(data);\n}\n","import { sha256 } from './sha256';\n\n/**\n * Stable per-API-key namespace tag used to scope persisted storage keys and\n * keypairs. First 8 hex chars of SHA-256(apiKey) — short enough to read in\n * dev tools, long enough that two distinct keys collide with probability\n * ≈ 1/2^32 (acceptable for namespacing; not for security).\n *\n * Async only to match the `sha256` wrapper's signature — the underlying\n * `@noble/hashes` digest is synchronous. Compute once during client\n * initialization and cache.\n */\nexport async function hashApiKey(apiKey: string): Promise<string> {\n const digest = await sha256(new TextEncoder().encode(apiKey));\n let hex = '';\n for (let i = 0; i < 4; i++) hex += digest[i]!.toString(16).padStart(2, '0');\n return hex;\n}\n","import { base64urlEncode } from '../lib/base64url';\nimport { sha256 } from '../lib/sha256';\nimport type { PublicEcJwk } from './types';\n\n/**\n * Compute the RFC 7638 JWK thumbprint for an EC P-256 public JWK.\n *\n * Algorithm (RFC 7638 §3):\n * 1. Build a JSON object containing ONLY the required members of the JWK,\n * ordered lexicographically by member name (Unicode code point).\n * For EC keys, that's exactly {crv, kty, x, y}.\n * 2. Serialize to UTF-8 with no whitespace and no line breaks.\n * 3. Hash with SHA-256.\n * 4. Base64url-encode the hash (no padding).\n *\n * Common bugs guarded against:\n * - Including extra fields (`alg`, `use`, `kid`, `ext`, `key_ops`).\n * - Wrong member ordering (must be lex by Unicode code point).\n * - Padded base64 instead of base64url unpadded.\n * - Using `JSON.stringify(jwk)` of an arbitrary-key-order object — we build\n * a fresh literal in canonical order to make the order explicit and not\n * rely on V8's insertion-order semantics.\n */\nexport async function computeJwkThumbprint(jwk: PublicEcJwk): Promise<string> {\n if (jwk.kty !== 'EC' || jwk.crv !== 'P-256' || !jwk.x || !jwk.y) {\n throw new Error('[PollarClient:thumbprint] Expected EC P-256 JWK with x and y');\n }\n // Build the canonical string by hand so member order is unambiguous.\n // Lex order of EC required members: 'crv' < 'kty' < 'x' < 'y'.\n const canonical = `{\"crv\":\"${jwk.crv}\",\"kty\":\"${jwk.kty}\",\"x\":\"${jwk.x}\",\"y\":\"${jwk.y}\"}`;\n const digest = await sha256(new TextEncoder().encode(canonical));\n return base64urlEncode(digest);\n}\n\n/**\n * Normalize a base64 string to unpadded base64url. Web Crypto's\n * `exportKey('jwk')` is spec'd to return base64url, but some React Native\n * `crypto.subtle` polyfills diverge: standard base64 (`+`/`/`), `=` padding,\n * or — in the case of `react-native-quick-crypto` — a stray `.` in the\n * padding position (observed: `\"…dy_c.\"`). Any of those characters is invalid\n * in a JWK member: RFC 7638 thumbprinting and servers that validate `x`/`y`\n * as base64url (`^[A-Za-z0-9_-]+$`) reject them, and the `cnf.jkt` thumbprint\n * silently diverges from the server's. Real browsers already return base64url,\n * so this is a no-op there.\n *\n * We map `+`/`/` to their url-safe equivalents, then strip every remaining\n * character outside the base64url alphabet (`=` padding, `.`, whitespace).\n * Valid base64url never contains those, so a global strip can't corrupt a\n * well-formed value.\n */\nfunction toBase64url(value: string): string {\n return value.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/[^A-Za-z0-9_-]/g, '');\n}\n\n/**\n * Strip a JWK to only the four required EC public members and normalize the\n * coordinates to unpadded base64url. Useful when the input came from\n * `crypto.subtle.exportKey('jwk', publicKey)` which adds `ext` / `key_ops`\n * (and, under some RN polyfills, non-base64url coordinates). Returns a fresh\n * object — never mutates input.\n */\nexport function canonicalEcJwk(jwk: { kty?: string; crv?: string; x?: string; y?: string }): PublicEcJwk {\n if (jwk.kty !== 'EC' || jwk.crv !== 'P-256' || typeof jwk.x !== 'string' || typeof jwk.y !== 'string') {\n throw new Error('[PollarClient:thumbprint] Source JWK is not an EC P-256 public key');\n }\n return { kty: 'EC', crv: 'P-256', x: toBase64url(jwk.x), y: toBase64url(jwk.y) };\n}\n","import { base64urlEncode } from '../lib/base64url';\nimport { hashApiKey } from '../lib/api-key-hash';\nimport { canonicalEcJwk, computeJwkThumbprint } from './thumbprint';\nimport type { KeyManager, PublicEcJwk } from './types';\n\n/**\n * `KeyManager` backed by Web Crypto + IndexedDB. The ECDSA P-256 keypair is\n * generated with `extractable: false` for the private key — its bytes never\n * leave the browser's crypto subsystem. The `CryptoKeyPair` is persisted in\n * IndexedDB via structured clone (browsers serialize non-extractable keys\n * without exposing material).\n *\n * Per the W3C WebCrypto ECDSA spec, the public key is always extractable\n * regardless of the `extractable` argument, so `exportKey('jwk', publicKey)`\n * works for building the DPoP proof header.\n *\n * Residual XSS risk: an in-page script can still call `crypto.subtle.sign()`\n * on the same key handle to mint proofs. Non-extractable storage prevents\n * key exfiltration, not signing-oracle attacks. See SECURITY.md.\n */\n\nconst DB_NAME = 'pollar-keys';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'keys';\n\nfunction openDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n if (typeof indexedDB === 'undefined') {\n reject(new Error('[PollarClient:keys] IndexedDB not available'));\n return;\n }\n const req = indexedDB.open(DB_NAME, DB_VERSION);\n req.onerror = (): void => reject(req.error ?? new Error('[PollarClient:keys] IDB open failed'));\n req.onsuccess = (): void => resolve(req.result);\n req.onupgradeneeded = (): void => {\n const db = req.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME);\n }\n };\n });\n}\n\nfunction awaitTx<T>(req: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n req.onsuccess = (): void => resolve(req.result);\n req.onerror = (): void => reject(req.error ?? new Error('[PollarClient:keys] IDB request failed'));\n });\n}\n\nasync function dbGet<T>(key: string): Promise<T | undefined> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const result = (await awaitTx(tx.objectStore(STORE_NAME).get(key))) as T | undefined;\n return result;\n } finally {\n db.close();\n }\n}\n\nasync function dbPut(key: string, value: unknown): Promise<void> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n await awaitTx(tx.objectStore(STORE_NAME).put(value, key));\n } finally {\n db.close();\n }\n}\n\nasync function dbDelete(key: string): Promise<void> {\n const db = await openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n await awaitTx(tx.objectStore(STORE_NAME).delete(key));\n } finally {\n db.close();\n }\n}\n\nfunction isCryptoKeyPair(v: unknown): v is CryptoKeyPair {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as { privateKey?: unknown; publicKey?: unknown };\n return obj.privateKey !== undefined && obj.publicKey !== undefined;\n}\n\nexport class WebCryptoKeyManager implements KeyManager {\n private readonly apiKey: string;\n private apiKeyHash: string | null = null;\n private keyPair: CryptoKeyPair | null = null;\n private publicJwk: PublicEcJwk | null = null;\n private thumbprint: string | null = null;\n /**\n * Cached in-flight init. Lets `init()` be called concurrently (or implicitly\n * from `getPublicJwk` / `sign`) without doing the work twice. Cleared on\n * failure so callers can retry, and cleared on `reset()`.\n */\n private _initPromise: Promise<void> | null = null;\n\n constructor(apiKey: string) {\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\n throw new Error('[PollarClient:keys] SubtleCrypto is unavailable. DPoP requires a secure context (HTTPS or localhost).');\n }\n this.apiKey = apiKey;\n }\n\n /**\n * Idempotent and safe under concurrency. The first call kicks off the real\n * init; subsequent (and concurrent) calls return the same in-flight promise.\n * Other methods (`getPublicJwk`, `getThumbprint`, `sign`) auto-await this so\n * the manager is self-healing if `init()` was never explicitly invoked.\n */\n async init(): Promise<void> {\n if (this.keyPair) return;\n if (!this._initPromise) {\n this._initPromise = this._doInit().catch((err) => {\n // Clear the promise so the next call retries instead of permanently\n // returning a rejected promise. The error propagates to the caller —\n // `PollarClient` logs it through its configured logger, so we don't\n // double-log (raw, ungated) here.\n this._initPromise = null;\n throw err;\n });\n }\n return this._initPromise;\n }\n\n private async _doInit(): Promise<void> {\n if (!this.apiKeyHash) {\n this.apiKeyHash = await hashApiKey(this.apiKey);\n }\n\n let pair: CryptoKeyPair | undefined;\n try {\n pair = await dbGet<CryptoKeyPair>(this.apiKeyHash);\n if (pair && !isCryptoKeyPair(pair)) pair = undefined;\n } catch {\n // IDB unavailable (Safari private mode, sandboxed iframe, partitioned\n // storage in a 3rd-party iframe). Fall through to fresh keygen — we\n // lose persistence across reloads but the current session can sign.\n pair = undefined;\n }\n\n if (!pair) {\n pair = (await globalThis.crypto.subtle.generateKey(\n { name: 'ECDSA', namedCurve: 'P-256' },\n // false → private key non-extractable; per W3C ECDSA spec the public\n // key is always extractable regardless of this flag.\n false,\n ['sign', 'verify'],\n )) as CryptoKeyPair;\n try {\n await dbPut(this.apiKeyHash, pair);\n } catch {\n // Persistence failed but the in-memory pair still works for this session.\n }\n }\n\n this.keyPair = pair;\n this.publicJwk = await this._exportPublicJwk(pair.publicKey);\n this.thumbprint = await computeJwkThumbprint(this.publicJwk);\n }\n\n /**\n * Derive the public JWK from a `CryptoKey`. Prefers the `'raw'` export (the\n * 65-byte uncompressed point `0x04 || X(32) || Y(32)`) and base64url-encodes\n * the coordinates ourselves — that sidesteps polyfills whose `exportKey('jwk')`\n * emits non-base64url `x`/`y` (standard base64, `=` padding, or — as seen with\n * `react-native-quick-crypto` — a stray `.`). Real browsers and most polyfills\n * support `'raw'` for public EC keys.\n *\n * Falls back to the `'jwk'` export (normalized via `canonicalEcJwk`) if `'raw'`\n * is unsupported or returns an unexpected shape, so this can't regress on a\n * runtime that only implements the JWK path. Both routes yield identical\n * coordinate bytes, so the `cnf.jkt` thumbprint is unchanged either way.\n */\n private async _exportPublicJwk(publicKey: CryptoKey): Promise<PublicEcJwk> {\n try {\n const raw = new Uint8Array(await globalThis.crypto.subtle.exportKey('raw', publicKey));\n // Uncompressed P-256 point: 65 bytes, leading 0x04 tag.\n if (raw.length !== 65 || raw[0] !== 0x04) {\n throw new Error(`[PollarClient:keys] Unexpected raw EC point (len=${raw.length}, tag=${raw[0]})`);\n }\n return {\n kty: 'EC',\n crv: 'P-256',\n x: base64urlEncode(raw.slice(1, 33)),\n y: base64urlEncode(raw.slice(33, 65)),\n };\n } catch {\n // 'raw' unsupported (or odd) on this runtime — fall back to the JWK export\n // and normalize its coordinates to unpadded base64url.\n const jwk = (await globalThis.crypto.subtle.exportKey('jwk', publicKey)) as JsonWebKey;\n return canonicalEcJwk(jwk);\n }\n }\n\n async reset(): Promise<void> {\n try {\n if (this.apiKeyHash) await dbDelete(this.apiKeyHash);\n } catch {\n // Best-effort cleanup; if IDB is unavailable there's nothing persisted to clear.\n }\n this.keyPair = null;\n this.publicJwk = null;\n this.thumbprint = null;\n this._initPromise = null;\n }\n\n async getPublicJwk(): Promise<PublicEcJwk> {\n if (!this.publicJwk) await this.init();\n if (!this.publicJwk) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; getPublicJwk unavailable');\n }\n // Return a fresh copy so callers cannot mutate our cached state.\n return { kty: this.publicJwk.kty, crv: this.publicJwk.crv, x: this.publicJwk.x, y: this.publicJwk.y };\n }\n\n async getThumbprint(): Promise<string> {\n if (!this.thumbprint) await this.init();\n if (!this.thumbprint) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; getThumbprint unavailable');\n }\n return this.thumbprint;\n }\n\n async sign(payload: Uint8Array): Promise<Uint8Array> {\n if (!this.keyPair) await this.init();\n if (!this.keyPair) {\n throw new Error('[PollarClient:keys] Keypair initialization failed; sign unavailable');\n }\n // Cast through BufferSource: TypeScript 5.7's strict typing distinguishes\n // Uint8Array<ArrayBuffer> from Uint8Array<SharedArrayBuffer>, but every\n // payload we pass here is regular-ArrayBuffer-backed.\n const sig = await globalThis.crypto.subtle.sign(\n { name: 'ECDSA', hash: 'SHA-256' },\n this.keyPair.privateKey,\n payload as unknown as BufferSource,\n );\n // For ECDSA P-256 with SHA-256, WebCrypto returns 64-byte raw r||s\n // (IEEE P1363 / JOSE format). No DER conversion needed.\n return new Uint8Array(sig);\n }\n}\n","// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import createClient from 'openapi-fetch';\nimport type { paths } from './schema';\n\nexport type PollarApiClient = ReturnType<typeof createApiClient>;\n\nexport function createApiClient(baseUrl: string) {\n return createClient<paths>({ baseUrl });\n}\n","import type { DistributionClaimBody, DistributionClaimContent, DistributionRule } from '../../types';\nimport type { PollarApiClient } from '../client';\n\n/**\n * GET /distribution/rules\n * Returns the distribution rules visible to the calling sdk-user, each\n * decorated with `claimable` and (when not claimable) a `reason` ErrorCode\n * the UI maps to a friendly message.\n */\nexport async function listDistributionRules(api: PollarApiClient): Promise<DistributionRule[]> {\n const { data, error } = await api.GET('/distribution/rules');\n if (!data?.content || error) {\n throw new Error(\n (error as { code?: string; error?: string } | undefined)?.code ??\n (error as { code?: string; error?: string } | undefined)?.error ??\n 'Failed to list distribution rules',\n );\n }\n return data.content.rules;\n}\n\n/**\n * POST /distribution/claim\n * Claims the given rule for the authenticated sdk-user. Returns the tx hash\n * once the payment is submitted to Stellar.\n */\nexport async function claimDistributionRule(\n api: PollarApiClient,\n body: DistributionClaimBody,\n): Promise<DistributionClaimContent> {\n const { data, error } = await api.POST('/distribution/claim', { body });\n if (!data?.content || error) {\n throw new Error(\n (error as { code?: string; error?: string } | undefined)?.code ??\n (error as { code?: string; error?: string } | undefined)?.error ??\n 'Failed to claim distribution rule',\n );\n }\n return data.content;\n}\n","import type { KycLevel, KycProvider, KycStartBody, KycStartResponse, KycStatus } from '../../types';\nimport type { PollarApiClient } from '../client';\n\n/**\n * GET /kyc/status\n * Returns the current user's KYC status for a given provider.\n * Requires a valid auth token in the API client.\n */\nexport async function getKycStatus(\n api: PollarApiClient,\n providerId?: string,\n): Promise<{ status: KycStatus; level?: KycLevel | undefined; providerId: string; expiresAt?: string }> {\n const { data, error } = await api.GET('/kyc/status', {\n params: { query: providerId ? { providerId } : {} },\n });\n if (!data?.content || error) {\n throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get KYC status');\n }\n return data.content;\n}\n\n/**\n * GET /kyc/providers\n * Returns available KYC providers for a given country.\n */\nexport async function getKycProviders(api: PollarApiClient, country: string): Promise<{ providers: KycProvider[] }> {\n const { data, error } = await api.GET('/kyc/providers', { params: { query: { country } } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get KYC providers');\n return data.content;\n}\n\n/**\n * POST /kyc/start\n * Starts a KYC session.\n * - flow=iframe/redirect: returns kycUrl to embed or redirect to\n * - flow=form: returns fields[] to render a custom form\n */\nexport async function startKyc(api: PollarApiClient, body: KycStartBody): Promise<KycStartResponse> {\n const { data, error } = await api.POST('/kyc/start', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to start KYC');\n return data.content;\n}\n\n/**\n * Orchestrates the full KYC resolution flow:\n * 1. Checks current status\n * 2. If already approved, returns early\n * 3. Otherwise starts KYC and returns the session (kycUrl or fields)\n */\nexport async function resolveKyc(\n api: PollarApiClient,\n providerId: string,\n level: KycLevel = 'basic',\n): Promise<{ alreadyApproved: boolean } & Partial<KycStartResponse>> {\n const { status } = await getKycStatus(api, providerId);\n if (status === 'approved') return { alreadyApproved: true };\n const started = await startKyc(api, { providerId, level });\n return { alreadyApproved: false, ...started };\n}\n\n/**\n * Polls GET /kyc/status every intervalMs until status is 'approved' or 'rejected'.\n * Throws if timeoutMs is exceeded.\n */\nexport async function pollKycStatus(\n api: PollarApiClient,\n providerId: string,\n { intervalMs = 3000, timeoutMs = 300_000 }: { intervalMs?: number; timeoutMs?: number } = {},\n): Promise<KycStatus> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const { status } = await getKycStatus(api, providerId);\n if (status === 'approved' || status === 'rejected') return status;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n throw new Error('KYC polling timed out');\n}\n","import type { PollarApiClient } from '../client';\nimport type {\n RampsOfframpBody,\n RampsOfframpResponse,\n RampsOnrampBody,\n RampsOnrampResponse,\n RampsQuoteQuery,\n RampsQuoteResponse,\n RampsTransactionResponse,\n RampTxStatus,\n} from '../../types';\n\n/**\n * GET /ramps/quote\n * Returns available quotes for an onramp or offramp.\n * The backend ranks providers by country, amount, fee and availability.\n * The first quote in the array is the recommended one.\n */\nexport async function getRampsQuote(api: PollarApiClient, query: RampsQuoteQuery): Promise<RampsQuoteResponse> {\n const { data, error } = await api.GET('/ramps/quote', { params: { query } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get ramp quotes');\n return data.content;\n}\n\n/**\n * POST /ramps/onramp\n * Creates an onramp transaction.\n * For custodial users: backend orchestrates the full SEP-24 flow and returns payment instructions.\n * For non-custodial: backend may return an unsigned XDR that the client must sign via a wallet adapter.\n */\nexport async function createOnRamp(api: PollarApiClient, body: RampsOnrampBody): Promise<RampsOnrampResponse> {\n const { data, error } = await api.POST('/ramps/onramp', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to create onramp');\n return data.content;\n}\n\n/**\n * POST /ramps/offramp\n * Creates an offramp transaction.\n * Backend initiates the bank transfer once the Stellar transaction is confirmed.\n */\nexport async function createOffRamp(api: PollarApiClient, body: RampsOfframpBody): Promise<RampsOfframpResponse> {\n const { data, error } = await api.POST('/ramps/offramp', { body });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to create offramp');\n return data.content;\n}\n\n/**\n * GET /ramps/transaction/{txId}\n * Returns the current status of a ramp transaction.\n */\nexport async function getRampTransaction(api: PollarApiClient, txId: string): Promise<RampsTransactionResponse> {\n const { data, error } = await api.GET('/ramps/transaction/{txId}', { params: { path: { txId } } });\n if (!data?.content || error) throw new Error((error as any)?.code ?? (error as any)?.error ?? 'Failed to get transaction');\n return data.content;\n}\n\n/**\n * Polls GET /ramps/transaction/{txId} every intervalMs until status is 'completed' or 'failed'.\n * Throws if timeoutMs is exceeded.\n */\nexport async function pollRampTransaction(\n api: PollarApiClient,\n txId: string,\n { intervalMs = 5000, timeoutMs = 600_000 }: { intervalMs?: number; timeoutMs?: number } = {},\n): Promise<RampTxStatus> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const { status } = await getRampTransaction(api, txId);\n if (status === 'completed' || status === 'failed') return status;\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n throw new Error('Ramp transaction polling timed out');\n}\n","/**\n * Generate a RFC 4122 v4 UUID. Prefers the secure-context `crypto.randomUUID`\n * when available; falls back to a manual v4 build via `crypto.getRandomValues`\n * for environments where `randomUUID` is missing (older RN/Hermes — where the\n * `react-native-get-random-values` polyfill provides `getRandomValues` but not\n * `randomUUID` — and insecure HTTP origins).\n *\n * Throws only when no secure random source exists at all, in which case DPoP\n * (and the SDK) cannot operate anyway.\n */\nexport function randomUUID(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n if (c && typeof c.getRandomValues === 'function') {\n const bytes = new Uint8Array(16);\n c.getRandomValues(bytes);\n bytes[6] = ((bytes[6] as number) & 0x0f) | 0x40; // version 4\n bytes[8] = ((bytes[8] as number) & 0x3f) | 0x80; // RFC 4122 variant\n const hex: string[] = [];\n for (let i = 0; i < 16; i++) hex.push((bytes[i] as number).toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;\n }\n throw new Error(\n '[PollarClient] No secure random source available (crypto.randomUUID / crypto.getRandomValues). ' +\n 'DPoP requires a secure context (HTTPS) or, in React Native, the `react-native-get-random-values` polyfill.',\n );\n}","import { base64urlEncode, base64urlEncodeString } from './lib/base64url';\nimport { randomUUID } from './lib/random-uuid';\nimport { sha256 } from './lib/sha256';\nimport type { KeyManager, PublicEcJwk } from './keys/types';\n\n/**\n * RFC 9449 DPoP proof builder.\n *\n * Produces a compact JWS that the consumer attaches as the `DPoP` HTTP\n * header. The header `jwk` is the public part of the SDK's per-session\n * keypair; the server verifies the signature, validates the `htm` / `htu` /\n * `iat` / `jti` / optional `nonce` / optional `ath` claims, and matches the\n * proof's JWK thumbprint against the access token's `cnf.jkt` claim.\n *\n * Server-issued nonce flow (RFC 9449 §8/§9): the server may respond with\n * `WWW-Authenticate: DPoP ... error=\"use_dpop_nonce\"` plus a `DPoP-Nonce`\n * header. The client should re-build the proof with the new nonce and retry.\n * `buildProof` accepts an optional nonce; the SDK client tracks it across\n * requests and feeds it back here.\n *\n * The last seen `DPoP-Nonce` is stored verbatim and embedded in the next\n * proof. The server validates it as an HMAC token, so an attacker who\n * injects an arbitrary nonce cannot escalate — verification fails and the\n * server replies with a fresh nonce on the next request.\n */\n\nexport interface BuildProofArgs {\n /** HTTP method, e.g. `\"GET\"`. Will be uppercased before signing. */\n htm: string;\n /**\n * HTTP target URI. Will be normalized per RFC 3986 §6.2 (lowercase scheme\n * + host, default port elided, query+fragment+userinfo stripped, path\n * dot-segments resolved, trailing slash preserved exactly as provided).\n */\n htu: string;\n /**\n * Access token to bind the proof to (its base64url(SHA-256) goes in the\n * `ath` claim). Omit for proofs sent to the token endpoint per RFC 9449\n * §5 / §6.1 (those proofs MUST NOT include `ath`).\n */\n accessToken?: string;\n /**\n * Server-issued DPoP nonce, if the server has previously challenged this\n * client with `WWW-Authenticate: DPoP ... error=\"use_dpop_nonce\"`. RFC\n * 9449 §8.\n */\n nonce?: string;\n}\n\ninterface ProofHeader {\n typ: 'dpop+jwt';\n alg: 'ES256';\n jwk: PublicEcJwk;\n}\n\ninterface ProofPayload {\n jti: string;\n htm: string;\n htu: string;\n iat: number;\n ath?: string;\n nonce?: string;\n}\n\n/**\n * Build a DPoP proof JWS for the given request. Returns the compact-form\n * JWS string (`<header>.<payload>.<signature>`).\n */\nexport async function buildProof(args: BuildProofArgs, keyManager: KeyManager): Promise<string> {\n const jwk = await keyManager.getPublicJwk();\n\n const header: ProofHeader = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk,\n };\n\n const payload: ProofPayload = {\n jti: randomUUID(),\n htm: args.htm.toUpperCase(),\n htu: normalizeHtu(args.htu),\n iat: Math.floor(Date.now() / 1000),\n };\n\n if (args.accessToken !== undefined && args.accessToken !== '') {\n payload.ath = base64urlEncode(await sha256(new TextEncoder().encode(args.accessToken)));\n }\n if (args.nonce !== undefined && args.nonce !== '') {\n payload.nonce = args.nonce;\n }\n\n const encodedHeader = base64urlEncodeString(JSON.stringify(header));\n const encodedPayload = base64urlEncodeString(JSON.stringify(payload));\n const signingInput = `${encodedHeader}.${encodedPayload}`;\n\n const signature = await keyManager.sign(new TextEncoder().encode(signingInput));\n const encodedSignature = base64urlEncode(signature);\n\n return `${signingInput}.${encodedSignature}`;\n}\n\n/**\n * Normalize an HTTP URI for use as the `htu` claim.\n *\n * RFC 9449 §4.3 + RFC 3986 §6.2:\n * - lowercase scheme + host\n * - elide default port (`:443` for https, `:80` for http)\n * - strip userinfo (never appears in `htu`)\n * - strip query + fragment\n * - apply path dot-segment removal (handled by the URL constructor)\n * - **preserve trailing slash exactly** — `/foo` and `/foo/` are distinct\n * paths per RFC 3986 §6 and must round-trip identically.\n * - preserve IPv6 brackets in host\n *\n * Both client and server must apply the same normalization so the `htu`\n * claim matches deterministically.\n */\nexport function normalizeHtu(rawUrl: string): string {\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n // Defensive fallback: strip query + fragment but otherwise return\n // unchanged. A poorly-formed URL is the caller's bug.\n return rawUrl.split('#')[0]!.split('?')[0]!;\n }\n const scheme = url.protocol.toLowerCase(); // includes trailing ':'\n const host = url.hostname.toLowerCase(); // already includes brackets for IPv6\n let port = url.port;\n if ((scheme === 'https:' && port === '443') || (scheme === 'http:' && port === '80')) {\n port = '';\n }\n const portPart = port ? `:${port}` : '';\n return `${scheme}//${host}${portPart}${url.pathname}`;\n}\n","/**\n * Log levels in increasing verbosity. Setting a level emits that level and\n * every more-important one; `silent` disables all SDK logging.\n *\n * silent < error < warn < info < debug\n */\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';\n\n/**\n * Sink the SDK writes logs to. The global `console` already satisfies this\n * shape, so it's the default. Inject your own (pino, Sentry breadcrumbs, a test\n * spy…) via `PollarClientConfig.logger` to route SDK logs wherever you want.\n */\nexport interface PollarLogger {\n error(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n info(...args: unknown[]): void;\n debug(...args: unknown[]): void;\n}\n\nconst RANK: Record<LogLevel, number> = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 };\n\n/**\n * Build a level-gated logger over a sink. The returned object has the same\n * method surface as {@link PollarLogger}; each call is silently dropped when its\n * level is more verbose than the configured `level`. Messages keep their own\n * `[PollarClient…]` prefixes, so this only adds filtering + sink routing.\n *\n * Defaults: `level = 'info'`, `sink = console`.\n */\nexport function createLogger(level: LogLevel = 'info', sink: PollarLogger = console): PollarLogger {\n const threshold = RANK[level];\n const gate =\n (lvl: Exclude<LogLevel, 'silent'>) =>\n (...args: unknown[]): void => {\n if (threshold >= RANK[lvl]) sink[lvl](...args);\n };\n return { error: gate('error'), warn: gate('warn'), info: gate('info'), debug: gate('debug') };\n}\n","import type { PollarLogger } from '../lib/logger';\nimport type { OnStorageDegrade, Storage, StorageDegradeReason } from './types';\n\nconst LOG_PREFIX = '[PollarClient:storage]';\n\n/**\n * In-memory storage backed by a `Map`. Always available, never throws.\n * Used as the default fallback for SSR, private browsing, sandboxed iframes\n * without `allow-same-origin`, or any environment where `localStorage` is\n * unusable.\n */\nexport function createMemoryAdapter(): Storage {\n const store = new Map<string, string>();\n\n return {\n async get(key) {\n const value = store.get(key);\n return value === undefined ? null : value;\n },\n async set(key, value) {\n store.set(key, value);\n },\n async remove(key) {\n store.delete(key);\n },\n };\n}\n\nexport interface LocalStorageAdapterOptions {\n /**\n * Optional callback invoked the first time the adapter degrades to its\n * in-memory fallback (e.g. quota exceeded, throwing `localStorage`).\n */\n onDegrade?: OnStorageDegrade;\n /**\n * Logger for the one-shot degrade warning. Defaults to the global `console`;\n * `PollarClient` passes its level-gated logger so `logLevel` applies here too.\n */\n logger?: PollarLogger;\n}\n\n/**\n * `localStorage`-backed adapter that wraps every operation in try/catch and\n * silently degrades to an in-memory fallback for the rest of the process\n * lifetime on any throw. A single warning is logged when the degrade happens.\n *\n * Why every op (not just the probe): Safari private mode and sandboxed iframes\n * may expose `localStorage` but throw `QuotaExceededError` / `SecurityError`\n * on the first write — a successful probe at construction time isn't enough.\n *\n * Tokens persisted here are DPoP-bound to a non-extractable WebCrypto\n * keypair, so XSS exposure is limited to a signing-oracle attack (the key\n * itself never leaves the browser's crypto subsystem). Consumers who need\n * stricter isolation can inject a custom `Storage` adapter — e.g. one that\n * proxies to an httpOnly cookie on a host origin.\n */\nexport function createLocalStorageAdapter(options: LocalStorageAdapterOptions = {}): Storage {\n const fallback = createMemoryAdapter();\n let degraded = false;\n\n function degrade(reason: StorageDegradeReason, error?: unknown): void {\n if (degraded) return;\n degraded = true;\n (options.logger ?? console).warn(`${LOG_PREFIX} localStorage unavailable (${reason}); degrading to in-memory storage`);\n options.onDegrade?.(reason, error);\n }\n\n return {\n async get(key) {\n if (degraded) return fallback.get(key);\n try {\n return globalThis.localStorage.getItem(key);\n } catch (error) {\n degrade('read-failed', error);\n return fallback.get(key);\n }\n },\n async set(key, value) {\n if (degraded) return fallback.set(key, value);\n try {\n globalThis.localStorage.setItem(key, value);\n } catch (error) {\n const reason: StorageDegradeReason = isQuotaError(error) ? 'quota-exceeded' : 'write-failed';\n degrade(reason, error);\n await fallback.set(key, value);\n }\n },\n async remove(key) {\n if (degraded) return fallback.remove(key);\n try {\n globalThis.localStorage.removeItem(key);\n } catch (error) {\n degrade('remove-failed', error);\n await fallback.remove(key);\n }\n },\n };\n}\n\nfunction isQuotaError(error: unknown): boolean {\n if (typeof error !== 'object' || error === null) return false;\n const name = (error as { name?: unknown }).name;\n const code = (error as { code?: unknown }).code;\n // Chrome/Edge: DOMException name 'QuotaExceededError' (code 22).\n // Firefox: 'NS_ERROR_DOM_QUOTA_REACHED' (code 1014).\n // Safari private mode: 'QuotaExceededError'.\n return name === 'QuotaExceededError' || name === 'NS_ERROR_DOM_QUOTA_REACHED' || code === 22 || code === 1014;\n}\n","import { createLocalStorageAdapter, createMemoryAdapter, type LocalStorageAdapterOptions } from './web';\nimport type { Storage } from './types';\n\nconst PROBE_KEY = '__pollar_storage_probe__';\n\n/**\n * Returns `localStorage`-backed storage when it works, otherwise an in-memory\n * fallback. The probe writes-reads-removes a sentinel; any throw, value\n * mismatch, or missing `localStorage` (SSR / disabled storage) falls back.\n *\n * Run-time degrade still happens inside `createLocalStorageAdapter` — see its\n * docstring for the rationale.\n */\nexport function defaultStorage(options: LocalStorageAdapterOptions = {}): Storage {\n if (typeof globalThis === 'undefined' || typeof globalThis.localStorage === 'undefined') {\n options.onDegrade?.('unavailable');\n return createMemoryAdapter();\n }\n\n try {\n const probeValue = String(Date.now());\n globalThis.localStorage.setItem(PROBE_KEY, probeValue);\n const read = globalThis.localStorage.getItem(PROBE_KEY);\n globalThis.localStorage.removeItem(PROBE_KEY);\n if (read !== probeValue) {\n options.onDegrade?.('probe-failed');\n return createMemoryAdapter();\n }\n } catch (error) {\n options.onDegrade?.('probe-failed', error);\n return createMemoryAdapter();\n }\n\n return createLocalStorageAdapter(options);\n}\n","// Injected at build time by tsup (`define`) from `package.json#version`.\n// `declare` so TypeScript knows the identifier; at runtime it is either\n// replaced with a string literal (bundled builds) or absent (running the\n// source unbundled — ts-node, vitest), which the `typeof` guard below handles.\ndeclare const __POLLAR_SDK_VERSION__: string;\n\n/**\n * Version of this `@pollar/core` build (e.g. `'0.8.2'`). Falls back to `'dev'`\n * when running unbundled.\n *\n * Named per-package on purpose: importing it alongside `@pollar/react`'s\n * `POLLAR_REACT_VERSION` never collides, so an app can report both versions in\n * a single bug-report / diagnostics line.\n */\nexport const POLLAR_CORE_VERSION: string = typeof __POLLAR_SDK_VERSION__ !== 'undefined' ? __POLLAR_SDK_VERSION__ : 'dev';\n","import type { VisibilityProvider } from './types';\n\n/**\n * Always-visible provider with no event subscriptions. Used for SSR / Node\n * contexts where the silent-refresh scheduler should not be gated by a\n * non-existent foreground signal. Also useful in tests.\n */\nexport function createNoopVisibilityProvider(): VisibilityProvider {\n return {\n isVisible: () => true,\n onChange: () => () => {},\n };\n}\n","import type { VisibilityProvider } from './types';\n\n/**\n * Browser-backed visibility signal.\n *\n * Listens to three event sources because no single one is reliable on every\n * browser:\n * - `visibilitychange` is the canonical signal but lags on Safari macOS\n * when switching between windows of the same app.\n * - `pageshow` / `pagehide` fire when the page enters/leaves BFCache on\n * iOS Safari — `visibilitychange` does not.\n * - `focus` / `blur` on window catch the macOS Safari multi-window case\n * and are also the most-likely-to-fire signal on older browsers.\n *\n * Duplicate notifications are filtered by comparing against the last\n * dispatched state — listeners only see real transitions.\n */\nexport function createWebVisibilityProvider(): VisibilityProvider {\n const isVisibleNow = (): boolean => typeof document === 'undefined' || document.visibilityState === 'visible';\n\n return {\n isVisible: isVisibleNow,\n onChange: (cb) => {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return () => {};\n }\n let last = isVisibleNow();\n const handler = (): void => {\n const next = isVisibleNow();\n if (next !== last) {\n last = next;\n cb(next);\n }\n };\n document.addEventListener('visibilitychange', handler);\n window.addEventListener('pageshow', handler);\n window.addEventListener('pagehide', handler);\n window.addEventListener('focus', handler);\n window.addEventListener('blur', handler);\n return () => {\n document.removeEventListener('visibilitychange', handler);\n window.removeEventListener('pageshow', handler);\n window.removeEventListener('pagehide', handler);\n window.removeEventListener('focus', handler);\n window.removeEventListener('blur', handler);\n };\n },\n };\n}\n","import { createNoopVisibilityProvider } from './noop';\nimport type { VisibilityProvider } from './types';\nimport { createWebVisibilityProvider } from './web';\n\n/**\n * Picks a `VisibilityProvider` based on the runtime: browser → web provider,\n * anything else → noop. React Native consumers should pass an `AppState`-\n * backed provider explicitly via `PollarClientConfig.visibilityProvider`\n * (use `createAppStateVisibilityProvider` from\n * `@pollar/core/adapters/react-native-appstate`).\n */\nexport function defaultVisibilityProvider(): VisibilityProvider {\n if (typeof document !== 'undefined' && typeof window !== 'undefined') {\n return createWebVisibilityProvider();\n }\n return createNoopVisibilityProvider();\n}\n","import { pollarPaths, StellarNetwork } from './index';\nimport type { KeyManager } from './keys/types';\nimport type { LogLevel, PollarLogger } from './lib/logger';\nimport type { OnStorageDegrade, Storage } from './storage/types';\nimport type { VisibilityProvider } from './visibility/types';\nimport { WalletAdapterResolver, WalletId } from './wallets';\n\nexport type PollarApplicationConfigResponse =\n pollarPaths['/auth/login']['post']['responses'][200]['content']['application/json'];\n/** Full `/auth/login` response shape — used in transit but NOT persisted. */\nexport type PollarApplicationConfigContent = PollarApplicationConfigResponse['content'];\n\n/**\n * What we actually write to `Storage`. Drops the PII subtree (`data.*`)\n * which is held in memory only on `PollarClient._profile` after auth.\n */\nexport interface PollarPersistedSession {\n clientSessionId: string;\n userId: string | null;\n status: string;\n token: { accessToken: string; refreshToken: string; expiresAt: number };\n user: { id?: string; ready: boolean };\n // The user's on-chain wallet, discriminated by `type`:\n // - 'internal' → platform-managed (custodial) Stellar account (G-address)\n // - 'smart' → Soroban smart-account / passkey (C-address)\n // - 'external' → user-connected wallet (Freighter/Albedo)\n // `address` is the on-chain address for every type (G-address for internal,\n // C-address for smart/passkey, the connected pubkey for external).\n wallet: {\n type: 'internal' | 'smart' | 'external';\n address: string | null;\n existsOnStellar?: boolean;\n // On-chain creation time (smart = deploy; internal = keypair creation).\n createdAt?: number;\n // When the wallet was first linked to Pollar (our DB record), not on-chain\n // creation. Used for external wallets.\n linkedAt?: number;\n network?: string;\n deployTxHash?: string | null;\n };\n}\n\n/** In-memory user profile (kept on `PollarClient`, never persisted). */\nexport interface PollarUserProfile {\n mail: string;\n first_name: string;\n last_name: string;\n avatar: string;\n providers: {\n email: { address: string } | null;\n google: { id: string } | null;\n github: { id: string } | null;\n wallet: { address: string } | null;\n };\n}\n\nexport interface PollarClientConfig {\n stellarNetwork?: StellarNetwork;\n baseUrl?: string;\n apiKey: string;\n /**\n * Pluggable storage. Defaults to `defaultStorage()` on web (localStorage\n * with memory fallback). On RN you must inject one of the adapters from\n * `@pollar/core/adapters/expo` or `@pollar/core/adapters/react-native-keychain`.\n */\n storage?: Storage;\n /**\n * Pluggable DPoP key manager. Defaults to `defaultKeyManager(storage,\n * apiKey)`: WebCrypto in browsers, `@noble/curves` in RN.\n */\n keyManager?: KeyManager;\n /**\n * Minimum severity the SDK logs. `silent` disables all SDK logging; the rest\n * emit that level and everything more important (`error` < `warn` < `info` <\n * `debug`). State-transition chatter (auth/tx/network) is at `debug`.\n * Defaults to `'info'`.\n */\n logLevel?: LogLevel;\n /**\n * Sink the SDK writes logs to. Defaults to the global `console`. Inject your\n * own (pino, Sentry breadcrumbs, a test spy…) to route SDK logs anywhere.\n * Filtering by `logLevel` still applies on top of whatever you pass.\n */\n logger?: PollarLogger;\n /**\n * Notified when persistent storage silently degrades to in-memory mode\n * (Safari private browsing quota errors, sandboxed iframes, etc.). Useful\n * for telemetry — the SDK keeps working but sessions won't survive reload.\n */\n onStorageDegrade?: OnStorageDegrade;\n /**\n * Resolves a {@link WalletAdapter} for a given wallet id. If omitted, the\n * SDK falls back to its built-in `FreighterAdapter` / `AlbedoAdapter`,\n * which only know `WalletType.FREIGHTER` and `WalletType.ALBEDO`. Inject\n * `@pollar/stellar-wallets-kit-adapter` (or your own resolver) to support\n * additional wallets without bundling those dependencies into `@pollar/core`.\n */\n walletAdapter?: WalletAdapterResolver;\n /**\n * Maximum time (ms) the SDK waits for a `walletAdapter` resolver to return.\n * Guards against a broken extension bridge (e.g. Freighter content-script\n * down) hanging the login flow forever. The resolver only constructs the\n * adapter object — it does NOT include the user-facing approval step — so\n * a few seconds is plenty. Defaults to 5000.\n */\n walletResolverTimeoutMs?: number;\n /**\n * Optional human-friendly label sent at /auth/login time and recorded on\n * the server-side refresh-token row so the user can identify it in the\n * \"active sessions\" UI (e.g. \"iPhone — Safari\", \"Mac — Chrome 126\").\n * If unset, the server-recorded `user_agent` header is the fallback.\n */\n deviceLabel?: string;\n /**\n * Foreground-detection signal for the silent-refresh scheduler. When the\n * app is hidden / backgrounded, scheduled refreshes are skipped (saves\n * network + sidesteps browser/RN background timer throttling); they run\n * the moment visibility comes back. Defaults to a web provider in the\n * browser (`visibilitychange` + BFCache + focus) and a noop elsewhere.\n * React Native consumers should inject an `AppState`-backed provider —\n * use `createAppStateVisibilityProvider` from\n * `@pollar/core/adapters/react-native-appstate`.\n */\n visibilityProvider?: VisibilityProvider;\n /**\n * If set, the silent-refresh scheduler stops issuing proactive refreshes\n * after this many milliseconds of no client-side HTTP activity. The\n * session is not cleared — the next user action triggers a request that\n * either reuses a still-valid access token or hits 401 → reactive\n * refresh (transparent if the RT is still valid). Defaults to\n * `undefined` = refresh forever as long as the app is visible.\n */\n maxIdleMs?: number;\n /**\n * Strategy for opening the hosted OAuth URL during\n * `login({ provider: 'google' | 'github' })`. Defaults to a browser popup\n * on web. React Native consumers MUST provide one (typically wrapping\n * `expo-web-browser`'s `openAuthSessionAsync`), since `window.open` does\n * not exist there. The SDK still drives the rest of the flow by polling the\n * auth-session status, so the opener only needs to surface the URL — it does\n * NOT need to capture the redirect payload.\n */\n openAuthUrl?: AuthUrlOpener;\n /**\n * Value sent to the backend as `redirect_uri` for hosted OAuth (where the\n * provider returns the user afterwards). Defaults to `window.location.origin`\n * on web. On React Native set this to your app's deep link / scheme — the\n * same URL you pass to `WebBrowser.openAuthSessionAsync`.\n */\n oauthRedirectUri?: string;\n /**\n * The passkey (WebAuthn) ceremony for \"Smart Wallet\" login, injected by the\n * runtime layer (`@pollar/react` implements it with `@simplewebauthn/browser`).\n * `@pollar/core` stays runtime-agnostic and never touches `navigator.credentials`\n * directly. Required to use `loginSmartWallet()`. Browser-only for now;\n * React Native needs a native passkey provider.\n */\n passkey?: PasskeyCeremony;\n /**\n * Signs smart-account (C-address) transactions with the user's passkey.\n * Required to send from a smart wallet. Injected by `@pollar/react`;\n * browser-only for now.\n */\n passkeySign?: PasskeySigner;\n}\n\n/**\n * Runs the device WebAuthn ceremony for a server-issued challenge and returns\n * the result to forward to the backend: a registration response for a new user\n * (`create()`) or an authentication assertion for a returning one (`get()`).\n * `mode` tells the ceremony which to run: `'login'` runs `get()` only (returning\n * user) and `'register'` runs `create()` only (new wallet) — the caller picks via\n * the \"Log in\" / \"Create wallet\" buttons, so there's no ambiguous autodetect that\n * could create a wallet when the user merely cancelled a login prompt. `response`\n * is the browser's PublicKeyCredential serialized to JSON — forwarded verbatim to\n * `/auth/passkey/{register,login}`.\n */\nexport type PasskeyMode = 'login' | 'register';\n\nexport type PasskeyCeremony = (ctx: {\n challenge: string;\n mode: PasskeyMode;\n}) => Promise<{ kind: 'login'; response: unknown } | { kind: 'register'; response: unknown }>;\n\n/**\n * Signs a smart-account transaction's auth digest with the user's passkey\n * (a WebAuthn `get()` whose challenge is the raw digest). Returns the PUBLIC\n * assertion fields (base64url) for the server to assemble into the Soroban auth\n * entry — no secret leaves the device. Injected by the runtime layer\n * (`@pollar/react`); `@pollar/core` never touches `navigator.credentials`.\n */\nexport type PasskeySigner = (ctx: {\n /** base64url WebAuthn credential id to sign with. */\n credentialId: string;\n /** hex-encoded auth digest to use as the WebAuthn challenge. */\n challenge: string;\n}) => Promise<{ authenticatorData: string; clientDataJSON: string; signature: string }>;\n\n/**\n * Strategy for opening the hosted OAuth URL. The SDK mints the per-login auth\n * session lazily inside `getUrl()` (call it once; the first call creates the\n * `clientSessionId` and returns the full URL, or `null` if session creation\n * failed). Open the resolved URL however the platform allows — a popup on web,\n * `WebBrowser.openAuthSessionAsync(url, redirectUri)` on React Native — and\n * resolve once the user-facing browser step is done or dismissed. You do NOT\n * need to capture the redirect payload: the SDK polls the auth-session status\n * until the backend marks it READY.\n */\nexport type AuthUrlOpener = (ctx: AuthOpenContext) => void | Promise<void>;\n\nexport interface AuthOpenContext {\n provider: 'google' | 'github';\n /**\n * Mints the auth session (once) and returns the full hosted-OAuth URL, or\n * `null` if session creation failed. On web, call it AFTER reserving the\n * popup window so popup blockers (which only honor `window.open` inside the\n * original user-gesture tick) don't swallow it.\n */\n getUrl: () => Promise<string | null>;\n /** The redirect target passed to the backend as `redirect_uri`. */\n redirectUri: string;\n signal: AbortSignal;\n}\n\n/**\n * One row in the active-sessions list (returned by `PollarClient.listSessions()`).\n * Mirrors the sdk-api `SessionsListContent` schema.\n */\nexport interface SessionInfo {\n familyId: string;\n createdAt: string;\n lastUsedAt: string | null;\n userAgent: string | null;\n ipHash: string | null;\n deviceLabel: string | null;\n current: boolean;\n expiresAt: string;\n}\n\n/**\n * Observable state for the active-sessions list. Lives on the client (like\n * {@link TxHistoryState} / {@link WalletBalanceState}) so UI layers can\n * subscribe via `onSessionsStateChange` and stay pure readers instead of\n * holding the loading state locally.\n */\nexport type SessionsState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; sessions: SessionInfo[] }\n | { step: 'error'; message: string };\n\nexport type TxBuildBody = NonNullable<pollarPaths['/tx/build']['post']['requestBody']>['content']['application/json'];\nexport type TxBuildResponse = pollarPaths['/tx/build']['post']['responses'][200]['content']['application/json'];\n\nexport type TxSignAndSendBody = NonNullable<\n pollarPaths['/tx/sign-and-send']['post']['requestBody']\n>['content']['application/json'];\nexport type TxSignSendResponse = pollarPaths['/tx/sign-and-send']['post']['responses'][200]['content']['application/json'];\n\n// ─── Split flow (new in v0.7.2) ───────────────────────────────────────────────\n\nexport type TxSignBody = NonNullable<pollarPaths['/tx/sign']['post']['requestBody']>['content']['application/json'];\nexport type TxSignResponse = pollarPaths['/tx/sign']['post']['responses'][200]['content']['application/json'];\nexport type TxSignContent = TxSignResponse['content'];\n\nexport type TxSubmitSignedBody = NonNullable<pollarPaths['/tx/submit']['post']['requestBody']>['content']['application/json'];\n\nexport type TxBuildSignSubmitBody = NonNullable<\n pollarPaths['/tx/build-sign-submit']['post']['requestBody']\n>['content']['application/json'];\nexport type TxBuildSignSubmitResponse =\n pollarPaths['/tx/build-sign-submit']['post']['responses'][200]['content']['application/json'];\nexport type TxBuildSignSubmitContent = TxBuildSignSubmitResponse['content'];\n\nexport type PollarLoginOptions =\n | { provider: 'google' }\n | { provider: 'github' }\n | { provider: 'email'; email: string }\n | { provider: 'wallet'; type: WalletId };\n\nexport type TxBuildContent = TxBuildResponse['content'];\n\n/**\n * Phases the SDK can be in across the build → sign → submit lifecycle.\n *\n * **Granular** steps (`building`, `signing`, `submitting`) are emitted when\n * the SDK can directly observe that phase — i.e. when each is a separate\n * client-driven call (`buildTx`, `signTx`, `submitTx`, external-wallet\n * `signAndSubmitTx`).\n *\n * **Compound** steps (`signing-submitting`, `building-signing-submitting`)\n * are emitted when multiple phases collapse into a single opaque backend\n * round-trip (`signAndSubmitTx` custodial → `/tx/sign-and-send`, and `runTx`\n * / `buildAndSignAndSubmitTx` custodial → `/tx/build-sign-submit`). The SDK\n * can't see when one phase ends and the next begins inside that request, so\n * it honestly reports a single fused state instead of fabricating\n * transitions.\n *\n * **Terminal states** (`success`, `error`) and the post-Horizon-ack pending\n * state (`submitted`) are shared across all paths.\n *\n * On `error`, the `phase` discriminator tells the consumer *where* the\n * failure happened so modal UIs can offer \"retry from this step\" buttons.\n */\nexport type TransactionState =\n | { step: 'idle' }\n // ─── Granular phases (observable per-call) ────────────────────────────\n | { step: 'building' }\n | { step: 'built'; buildData: TxBuildContent }\n | { step: 'signing'; buildData?: TxBuildContent }\n | { step: 'signed'; buildData?: TxBuildContent; signedXdr: string; submissionToken?: string }\n | { step: 'submitting'; buildData?: TxBuildContent; signedXdr?: string }\n // ─── Compound phases (custodial-only — backend swallows the boundaries) ──\n | { step: 'signing-submitting'; buildData?: TxBuildContent }\n | { step: 'building-signing-submitting' }\n // ─── Post-Horizon-ack, pre-ledger-confirm (shared) ────────────────────\n | { step: 'submitted'; buildData?: TxBuildContent; hash: string }\n // ─── Terminal success (shared) ────────────────────────────────────────\n | { step: 'success'; buildData?: TxBuildContent; hash: string }\n // ─── Terminal failure with phase context ──────────────────────────────\n | { step: 'error'; phase: TxErrorPhase; details?: string; buildData?: TxBuildContent; signedXdr?: string };\n\n/**\n * Identifies which phase failed when `TransactionState.step === 'error'`.\n * Compound phase names (`signing-submitting`, `building-signing-submitting`)\n * appear here when the failure happened inside an atomic backend call where\n * the SDK can't isolate the failing sub-phase.\n */\nexport type TxErrorPhase = 'building' | 'signing' | 'submitting' | 'signing-submitting' | 'building-signing-submitting';\n\n/**\n * Per-call outcomes returned by `buildTx`, `signTx`, `submitTx`,\n * `signAndSubmitTx`, and `buildAndSignAndSubmitTx`. These are additive to\n * `TransactionState` — the same operations still drive the state machine for\n * modal-style UIs, but headless callers can `await` the method and inspect\n * the returned outcome directly instead of subscribing to state changes.\n */\nexport type BuildOutcome = { status: 'built'; buildData: TxBuildContent } | { status: 'error'; details?: string };\n\nexport type SignOutcome =\n | { status: 'signed'; signedXdr: string; submissionToken?: string; expiresAt?: number }\n | { status: 'error'; details?: string };\n\nexport type SubmitOutcome =\n | { status: 'success'; hash: string; buildData?: TxBuildContent }\n | { status: 'pending'; hash: string; buildData?: TxBuildContent }\n | { status: 'error'; hash?: string; details?: string; resultCode?: string; buildData?: TxBuildContent };\n\n/**\n * Result of {@link PollarClient.setTrustline}. Like {@link SubmitOutcome} but the\n * `hash` is optional: the sponsored, server-orchestrated path completes without\n * surfacing a transaction hash to the client, whereas the self-paid path returns\n * the underlying submit outcome (hash included).\n */\nexport type TrustlineOutcome =\n | { status: 'success'; hash?: string }\n | { status: 'pending'; hash?: string }\n | { status: 'error'; details?: string };\n\nexport const AUTH_ERROR_CODES = {\n SESSION_CREATE_FAILED: 'SESSION_CREATE_FAILED',\n SESSION_EXPIRED: 'SESSION_EXPIRED',\n SESSION_INVALID: 'SESSION_INVALID',\n EMAIL_SEND_FAILED: 'EMAIL_SEND_FAILED',\n EMAIL_VERIFY_FAILED: 'EMAIL_VERIFY_FAILED',\n EMAIL_CODE_EXPIRED: 'EMAIL_CODE_EXPIRED',\n EMAIL_CODE_INVALID: 'EMAIL_CODE_INVALID',\n AUTH_FAILED: 'AUTH_FAILED',\n WALLET_CONNECT_FAILED: 'WALLET_CONNECT_FAILED',\n WALLET_AUTH_FAILED: 'WALLET_AUTH_FAILED',\n WALLET_RESOLVER_TIMEOUT: 'WALLET_RESOLVER_TIMEOUT',\n PASSKEY_FAILED: 'PASSKEY_FAILED',\n UNEXPECTED_ERROR: 'UNEXPECTED_ERROR',\n} as const;\n\nexport type AuthErrorCode = (typeof AUTH_ERROR_CODES)[keyof typeof AUTH_ERROR_CODES];\n\nexport type AuthState =\n | { step: 'idle' }\n | { step: 'creating_session' }\n | { step: 'entering_email'; clientSessionId: string }\n | { step: 'sending_email'; email: string }\n | { step: 'entering_code'; clientSessionId: string; email: string }\n | { step: 'verifying_email_code'; clientSessionId: string; email: string }\n | { step: 'opening_oauth'; provider: 'google' | 'github' }\n | { step: 'connecting_wallet'; walletType: WalletId }\n | { step: 'wallet_not_installed'; walletType: WalletId }\n | { step: 'authenticating_wallet' }\n // Passkey (Smart Wallet) login: device ceremony, then (new user) the\n // sponsored on-chain deploy of the C-address.\n | { step: 'creating_passkey' }\n | { step: 'deploying_smart_account' }\n | { step: 'authenticating' }\n | {\n step: 'authenticated';\n session: PollarPersistedSession;\n /**\n * `false` while the session is restored optimistically from storage and\n * not yet revalidated with the server; `true` after a fresh login/refresh\n * or a successful `/auth/session/resume`. Gate sensitive actions on this.\n */\n verified: boolean;\n }\n | {\n step: 'error';\n previousStep: string;\n message: string;\n errorCode: AuthErrorCode;\n clientSessionId?: string;\n email?: string;\n };\n\nexport type NetworkState = { step: 'idle' } | { step: 'connected'; network: StellarNetwork };\n\nexport class PollarFlowError extends Error {\n readonly code = 'INVALID_FLOW' as const;\n constructor(message: string) {\n super(message);\n this.name = 'PollarFlowError';\n }\n}\n\n// ─── Wallet balance types ─────────────────────────────────────────────────────\n\nexport type WalletBalanceContent =\n pollarPaths['/wallet/balance']['get']['responses'][200]['content']['application/json']['content'];\nexport type WalletBalanceRecord = WalletBalanceContent['balances'][number];\n\nexport type WalletBalanceState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; data: WalletBalanceContent }\n | { step: 'error'; message: string };\n\n// ─── Enabled-asset types ──────────────────────────────────────────────────────\n\nexport type WalletAssetsContent =\n pollarPaths['/wallet/assets']['get']['responses'][200]['content']['application/json']['content'];\nexport type EnabledAssetRecord = WalletAssetsContent['assets'][number];\n\nexport type EnabledAssetsState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; data: WalletAssetsContent }\n | { step: 'error'; message: string };\n\n// ─── Tx history types ─────────────────────────────────────────────────────────\n\nexport type TxHistoryRecord =\n pollarPaths['/tx/history']['get']['responses'][200]['content']['application/json']['content']['records'][number];\n\nexport type TxHistoryParams = NonNullable<pollarPaths['/tx/history']['get']['parameters']['query']>;\n\nexport type TxHistoryContent = pollarPaths['/tx/history']['get']['responses'][200]['content']['application/json']['content'];\n\nexport type TxHistoryState =\n | { step: 'idle' }\n | { step: 'loading'; params: TxHistoryParams }\n | { step: 'loaded'; params: TxHistoryParams; data: TxHistoryContent }\n | { step: 'error'; params: TxHistoryParams; message: string };\n\n// ─── KYC types ────────────────────────────────────────────────────────────────\n\nexport type KycLevel = 'basic' | 'intermediate' | 'enhanced';\nexport type KycStatus = 'none' | 'pending' | 'approved' | 'rejected';\nexport type KycFlow = 'iframe' | 'form' | 'redirect';\n\nexport type KycProvider =\n pollarPaths['/kyc/providers']['get']['responses'][200]['content']['application/json']['content']['providers'][number];\nexport type KycStartBody = NonNullable<pollarPaths['/kyc/start']['post']['requestBody']>['content']['application/json'];\nexport type KycStartResponse = pollarPaths['/kyc/start']['post']['responses'][200]['content']['application/json']['content'];\n\n// ─── Ramps types ──────────────────────────────────────────────────────────────\n\nexport type RampsQuoteQuery = NonNullable<pollarPaths['/ramps/quote']['get']['parameters']['query']>;\nexport type RampQuote =\n pollarPaths['/ramps/quote']['get']['responses'][200]['content']['application/json']['content']['quotes'][number];\nexport type RampsQuoteResponse = pollarPaths['/ramps/quote']['get']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsOnrampBody = NonNullable<pollarPaths['/ramps/onramp']['post']['requestBody']>['content']['application/json'];\nexport type RampsOnrampResponse =\n pollarPaths['/ramps/onramp']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsOfframpBody = NonNullable<pollarPaths['/ramps/offramp']['post']['requestBody']>['content']['application/json'];\nexport type RampsOfframpResponse =\n pollarPaths['/ramps/offramp']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type RampsTransactionResponse =\n pollarPaths['/ramps/transaction/{txId}']['get']['responses'][200]['content']['application/json']['content'];\nexport type RampTxStatus = RampsTransactionResponse['status'];\nexport type RampDirection = RampsTransactionResponse['direction'];\nexport type PaymentInstructions = RampsOnrampResponse['paymentInstructions'];\n\n// ─── Distribution types ───────────────────────────────────────────────────────\n\nexport type DistributionRule =\n pollarPaths['/distribution/rules']['get']['responses'][200]['content']['application/json']['content']['rules'][number];\n\nexport type RulePeriod = DistributionRule['period'];\n\nexport type DistributionClaimBody = NonNullable<\n pollarPaths['/distribution/claim']['post']['requestBody']\n>['content']['application/json'];\n\nexport type DistributionClaimContent =\n pollarPaths['/distribution/claim']['post']['responses'][200]['content']['application/json']['content'];\n\nexport type DistributionRulesState =\n | { step: 'idle' }\n | { step: 'loading' }\n | { step: 'loaded'; rules: DistributionRule[] }\n | { step: 'error'; message: string };\n\n// ─── Adapter types ────────────────────────────────────────────────────────────\n\nexport type AdapterFn<TParams = unknown> = (params: TParams) => Promise<{ unsignedTransaction: string }>;\n\nexport type PollarAdapter = Record<string, AdapterFn<any>>;\n\nexport interface PollarAdapters {\n [key: string]: PollarAdapter;\n}\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nimport {\n getNetwork,\n getUserInfo,\n isAllowed,\n isConnected,\n setAllowed,\n signAuthEntry,\n signTransaction,\n} from '@stellar/freighter-api';\n\nimport type {\n ConnectWalletResponse,\n SignAuthEntryOptions,\n SignAuthEntryResponse,\n SignTransactionOptions,\n SignTransactionResponse,\n WalletAdapter,\n} from './types';\nimport { WalletType } from './types';\n\nexport class FreighterAdapter implements WalletAdapter {\n readonly type = WalletType.FREIGHTER;\n\n async isAvailable(): Promise<boolean> {\n try {\n return await isConnected();\n } catch {\n return false;\n }\n }\n\n async connect(): Promise<ConnectWalletResponse> {\n const connected = await isConnected();\n if (!connected) {\n throw new Error('Freighter wallet is not installed');\n }\n\n const allowed = await isAllowed();\n if (!allowed) {\n await setAllowed();\n }\n\n const userInfo = await getUserInfo();\n if (!userInfo?.publicKey) {\n throw new Error('Failed to get user information from Freighter');\n }\n\n return { address: userInfo.publicKey };\n }\n\n async disconnect(): Promise<void> {\n // Freighter does not expose a programmatic disconnect\n }\n\n async getPublicKey(): Promise<string | null> {\n try {\n const allowed = await isAllowed();\n if (!allowed) return null;\n const userInfo = await getUserInfo();\n return userInfo?.publicKey ?? null;\n } catch {\n return null;\n }\n }\n\n async getNetwork(): Promise<string> {\n return getNetwork();\n }\n\n async signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse> {\n const result = await signTransaction(xdr, {\n network: options?.network,\n networkPassphrase: options?.networkPassphrase,\n accountToSign: options?.accountToSign,\n });\n if (!result || typeof result !== 'string') {\n throw new Error('Invalid response from Freighter');\n }\n return { signedTxXdr: result };\n }\n\n async signAuthEntry(entryXdr: string, options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse> {\n const result = await signAuthEntry(entryXdr, { accountToSign: options?.accountToSign });\n if (!result || typeof result !== 'string') {\n throw new Error('Invalid response from Freighter');\n }\n return { signedAuthEntry: result };\n }\n}\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nexport enum WalletType {\n FREIGHTER = 'freighter',\n ALBEDO = 'albedo',\n}\n\n/**\n * A wallet identifier. Accepts the internal `WalletType` enum values\n * (`'freighter'`, `'albedo'`) plus any opaque string id used by external\n * adapter packages (e.g. Stellar Wallets Kit ids like `'xbull'`, `'lobstr'`).\n * The `(string & {})` keeps autocomplete on the enum values without rejecting\n * arbitrary strings.\n */\nexport type WalletId = WalletType | (string & {});\n\nexport interface ConnectWalletResponse {\n address: string;\n}\n\nexport interface SignTransactionOptions {\n network?: string;\n networkPassphrase?: string;\n accountToSign?: string;\n}\n\nexport interface SignAuthEntryOptions {\n accountToSign?: string;\n}\n\nexport interface SignTransactionResponse {\n signedTxXdr: string;\n}\n\nexport interface SignAuthEntryResponse {\n signedAuthEntry: string;\n}\n\nexport interface WalletAdapter {\n type: WalletId;\n isAvailable(): Promise<boolean>;\n connect(): Promise<ConnectWalletResponse>;\n disconnect(): Promise<void>;\n getPublicKey(): Promise<string | null>;\n signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse>;\n signAuthEntry(entryXdr: string, options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse>;\n}\n\n/**\n * Resolves a {@link WalletAdapter} for a given wallet id. Injected through\n * `PollarClientConfig.walletAdapter` so wallet implementations (Stellar\n * Wallets Kit, custom modules, etc.) can live outside `@pollar/core`.\n */\nexport type WalletAdapterResolver = (id: WalletId) => WalletAdapter | Promise<WalletAdapter>;\n","// Derived from stellar-wallet-kit by Tushar Pamnani (MIT)\n// https://github.com/tusharpamnani/stellar-wallet-kit\n\nimport { WalletType } from './types';\nimport type {\n WalletAdapter,\n ConnectWalletResponse,\n SignTransactionOptions,\n SignTransactionResponse,\n SignAuthEntryOptions,\n SignAuthEntryResponse,\n} from './types';\n\n/** Albedo's own network vocabulary (it only understands these two values). */\ntype AlbedoNetwork = 'public' | 'testnet';\n\nconst PUBLIC_PASSPHRASE = 'Public Global Stellar Network ; September 2015';\nconst TESTNET_PASSPHRASE = 'Test SDF Network ; September 2015';\n\n/**\n * Resolve the Albedo network for a signing call. Prefers the per-call options\n * the SDK passes (`networkPassphrase`, then `network`) so the signature is\n * produced on the network configured on `PollarClient`; falls back to the\n * network the adapter was constructed with when options carry nothing.\n */\nfunction albedoNetwork(options: SignTransactionOptions | undefined, fallback: AlbedoNetwork): AlbedoNetwork {\n switch (options?.networkPassphrase) {\n case PUBLIC_PASSPHRASE:\n return 'public';\n case TESTNET_PASSPHRASE:\n return 'testnet';\n }\n if (options?.network === 'public' || options?.network === 'mainnet') return 'public';\n if (options?.network === 'testnet') return 'testnet';\n return fallback;\n}\n\nfunction openAlbedoPopup(url: string): Window {\n const popup = window.open(url, 'albedo', 'width=420,height=720,resizable=yes,scrollbars=yes');\n if (!popup) {\n throw new Error('Failed to open Albedo popup (blocked by browser)');\n }\n return popup;\n}\n\nfunction waitForAlbedoPopup(): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n // Detach before rejecting — otherwise the listener leaks for the page\n // lifetime and a late/duplicate ALBEDO_RESULT could resolve an\n // already-timed-out promise (and accumulate across retries).\n window.removeEventListener('message', handler);\n reject(new Error('Albedo response timeout'));\n }, 2 * 60 * 1000);\n\n function handler(event: MessageEvent) {\n if (event.origin !== window.location.origin || event.data?.type !== 'ALBEDO_RESULT') return;\n clearTimeout(timeout);\n window.removeEventListener('message', handler);\n resolve(event.data.payload as Record<string, string>);\n }\n\n window.addEventListener('message', handler);\n });\n}\n\nexport class AlbedoAdapter implements WalletAdapter {\n readonly type = WalletType.ALBEDO;\n\n /**\n * Network used for `connect` and `signAuthEntry` (which carry no per-call\n * network) and as the fallback for `signTransaction`. Defaults to `'testnet'`\n * to preserve the previous behavior when constructed with no argument.\n */\n constructor(private readonly network: AlbedoNetwork = 'testnet') {}\n\n async isAvailable(): Promise<boolean> {\n return typeof window !== 'undefined';\n }\n\n async connect(): Promise<ConnectWalletResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'public-key');\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', this.network);\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.pubkey) {\n throw new Error('Albedo connection rejected');\n }\n\n return { address: result.pubkey };\n }\n\n async disconnect(): Promise<void> {}\n\n async getPublicKey(): Promise<string | null> {\n return null; // Albedo does not support silent reconnect\n }\n\n async getNetwork(): Promise<string> {\n throw new Error('Albedo does not expose network');\n }\n\n async signTransaction(xdr: string, options?: SignTransactionOptions): Promise<SignTransactionResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'tx');\n url.searchParams.set('xdr', xdr);\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', albedoNetwork(options, this.network));\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n // Popup + postMessage (same flow as `connect`). A top-level\n // `window.location.href` redirect would unload this document, destroying\n // the realm the returned promise lives in — it would never resolve.\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.signed_envelope_xdr) throw new Error('Albedo signing rejected');\n return { signedTxXdr: result.signed_envelope_xdr };\n }\n\n async signAuthEntry(entryXdr: string, _options?: SignAuthEntryOptions): Promise<SignAuthEntryResponse> {\n const url = new URL('https://albedo.link');\n url.searchParams.set('intent', 'sign-auth-entry');\n url.searchParams.set('xdr', entryXdr);\n url.searchParams.set('app_name', 'Pollar');\n url.searchParams.set('network', this.network);\n url.searchParams.set('callback', `${window.location.origin}/albedo-callback`);\n url.searchParams.set('origin', window.location.origin);\n\n // Popup + postMessage (see `signTransaction` — a redirect would unload the\n // page before the awaited promise could settle).\n openAlbedoPopup(url.toString());\n const result = await waitForAlbedoPopup();\n\n if (!result.signed_xdr) throw new Error('Albedo auth entry signing rejected');\n return { signedAuthEntry: result.signed_xdr };\n }\n}\n","import type { PollarLogger } from '../lib/logger';\nimport type { Storage } from '../storage/types';\nimport type { PollarPersistedSession } from '../types';\n\n/**\n * Persisted session shape (stored via the injected `Storage` adapter).\n *\n * Compared to the full `/auth/login` response:\n * - `data.{mail,first_name,last_name,avatar,providers}` is dropped — that\n * PII is held in memory only on `PollarClient`, fetched from\n * `/applications/config` after auth.\n * - All string fields are length-bounded as defense-in-depth: even though\n * JWT/UUID/Stellar-pubkey shapes are bounded by their own grammars,\n * bounding here catches hostile or buggy inputs before they hit downstream.\n *\n * Storage keys are namespaced per-`apiKeyHash` so swapping API keys can't\n * cross-contaminate sessions.\n */\n\nconst SESSION_SUFFIX = ':session';\nconst WALLET_TYPE_SUFFIX = ':walletType';\n\nexport function sessionStorageKey(apiKeyHash: string): string {\n return `pollar:${apiKeyHash}${SESSION_SUFFIX}`;\n}\n\nexport function walletTypeStorageKey(apiKeyHash: string): string {\n return `pollar:${apiKeyHash}${WALLET_TYPE_SUFFIX}`;\n}\n\nconst MAX_ACCESS_TOKEN = 4096;\nconst MAX_REFRESH_TOKEN = 4096;\nconst MAX_USER_ID = 64;\nconst MAX_CLIENT_SESSION_ID = 64;\nconst MAX_STATUS = 64;\nconst MAX_WALLET_PUBLIC_KEY = 128;\nconst MAX_WALLET_TYPE = 32;\n\nfunction isBoundedString(v: unknown, max: number, allowEmpty = false): v is string {\n if (typeof v !== 'string') return false;\n if (!allowEmpty && v.length === 0) return false;\n return v.length <= max;\n}\n\nexport function isValidSession(value: unknown, logger: PollarLogger = console): value is PollarPersistedSession {\n if (typeof value !== 'object' || value === null) {\n logger.debug('[PollarClient:session] Invalid session — value is not an object');\n return false;\n }\n const s = value as Record<string, unknown>;\n\n if (!isBoundedString(s['clientSessionId'], MAX_CLIENT_SESSION_ID)) {\n logger.debug('[PollarClient:session] Invalid session — clientSessionId missing/empty/too long');\n return false;\n }\n if (s['userId'] !== null && !isBoundedString(s['userId'], MAX_USER_ID)) {\n logger.debug('[PollarClient:session] Invalid session — userId must be string|null');\n return false;\n }\n if (!isBoundedString(s['status'], MAX_STATUS)) {\n logger.debug('[PollarClient:session] Invalid session — status must be string');\n return false;\n }\n\n const token = s['token'];\n if (typeof token !== 'object' || token === null) {\n logger.debug('[PollarClient:session] Invalid session — token missing or not an object');\n return false;\n }\n const t = token as Record<string, unknown>;\n if (!isBoundedString(t['accessToken'], MAX_ACCESS_TOKEN)) {\n logger.debug('[PollarClient:session] Invalid session — token.accessToken missing/empty/too long');\n return false;\n }\n if (!isBoundedString(t['refreshToken'], MAX_REFRESH_TOKEN)) {\n logger.debug('[PollarClient:session] Invalid session — token.refreshToken missing/empty/too long');\n return false;\n }\n if (typeof t['expiresAt'] !== 'number' || !Number.isFinite(t['expiresAt'])) {\n logger.debug('[PollarClient:session] Invalid session — token.expiresAt must be a finite number');\n return false;\n }\n\n const user = s['user'];\n if (typeof user !== 'object' || user === null) {\n logger.debug('[PollarClient:session] Invalid session — user missing or not an object');\n return false;\n }\n const u = user as Record<string, unknown>;\n if (u['id'] !== undefined && !isBoundedString(u['id'], MAX_USER_ID)) {\n logger.debug('[PollarClient:session] Invalid session — user.id must be string if present');\n return false;\n }\n if (typeof u['ready'] !== 'boolean') {\n logger.debug('[PollarClient:session] Invalid session — user.ready must be boolean');\n return false;\n }\n\n // The wallet object is always present; `type` discriminates internal (G,\n // platform-custodied), smart/passkey (C), and external wallets. `address` is\n // the on-chain address for all types.\n //\n // This guard runs against BOTH the persisted shape (vocabulary `internal`)\n // and the raw `/auth/login` wire response (vocabulary `custodial`) — the login\n // flow validates the wire body here *before* `_storeSession` remaps\n // `custodial → internal`. So we tolerate `'custodial'` as the transitional\n // wire alias for `'internal'`; callers remap it (`_storeSession` on fresh\n // login, `readStorage` for legacy persisted sessions) before it reaches app\n // code. (Sessions persisted by older SDKs also carry a legacy `publicKey`\n // alias — `readStorage` backfills `address` from it before validation, so the\n // field is tolerated but no longer required.)\n const wallet = s['wallet'];\n if (typeof wallet !== 'object' || wallet === null) {\n logger.debug('[PollarClient:session] Invalid session — wallet missing or not an object');\n return false;\n }\n const w = wallet as Record<string, unknown>;\n if (w['type'] !== 'internal' && w['type'] !== 'smart' && w['type'] !== 'external' && w['type'] !== 'custodial') {\n logger.debug('[PollarClient:session] Invalid session — wallet.type must be internal|smart|external');\n return false;\n }\n if (w['address'] !== null && !isBoundedString(w['address'], MAX_WALLET_PUBLIC_KEY)) {\n logger.debug('[PollarClient:session] Invalid session — wallet.address must be string|null');\n return false;\n }\n if (w['existsOnStellar'] !== undefined && typeof w['existsOnStellar'] !== 'boolean') {\n logger.debug('[PollarClient:session] Invalid session — wallet.existsOnStellar must be boolean if present');\n return false;\n }\n if (w['createdAt'] !== undefined && (typeof w['createdAt'] !== 'number' || !Number.isFinite(w['createdAt']))) {\n logger.debug('[PollarClient:session] Invalid session — wallet.createdAt must be a finite number if present');\n return false;\n }\n if (w['linkedAt'] !== undefined && (typeof w['linkedAt'] !== 'number' || !Number.isFinite(w['linkedAt']))) {\n logger.debug('[PollarClient:session] Invalid session — wallet.linkedAt must be a finite number if present');\n return false;\n }\n\n return true;\n}\n\nexport async function readStorage(\n storage: Storage,\n apiKeyHash: string,\n logger: PollarLogger = console,\n): Promise<PollarPersistedSession | null> {\n const raw = await storage.get(sessionStorageKey(apiKeyHash));\n if (!raw) return null;\n\n try {\n const session = JSON.parse(raw) as unknown;\n // Migrate sessions persisted by older SDKs (≤0.8.x): they stored the wallet\n // address under the legacy `publicKey` key, and persisted the wire type\n // `'custodial'` (now remapped to `'internal'` at the client boundary).\n // Backfill `address` and remap the type so they pass validation and survive\n // the upgrade instead of forcing a re-login.\n if (typeof session === 'object' && session !== null) {\n const w = (session as { wallet?: Record<string, unknown> }).wallet;\n if (w && w['address'] == null && typeof w['publicKey'] === 'string') {\n w['address'] = w['publicKey'];\n }\n if (w && w['type'] === 'custodial') {\n w['type'] = 'internal';\n }\n }\n if (!isValidSession(session, logger)) {\n await storage.remove(sessionStorageKey(apiKeyHash));\n logger.warn('[PollarClient:session] Stored session is invalid — clearing storage');\n return null;\n }\n if (session.token.expiresAt * 1000 < Date.now()) {\n // AT expired — keep the session row so we can attempt /refresh; the\n // caller's refresh path will clear if refresh itself fails.\n return session;\n }\n return session;\n } catch (error) {\n logger.error('[PollarClient:session] Failed to parse session from storage', error);\n await storage.remove(sessionStorageKey(apiKeyHash));\n return null;\n }\n}\n\nexport async function writeStorage(storage: Storage, apiKeyHash: string, session: PollarPersistedSession): Promise<void> {\n await storage.set(sessionStorageKey(apiKeyHash), JSON.stringify(session));\n}\n\nexport async function removeStorage(storage: Storage, apiKeyHash: string): Promise<void> {\n await storage.remove(sessionStorageKey(apiKeyHash));\n await storage.remove(walletTypeStorageKey(apiKeyHash));\n}\n\nexport async function writeWalletType(storage: Storage, apiKeyHash: string, type: string): Promise<void> {\n if (type.length > MAX_WALLET_TYPE) {\n throw new Error(`[PollarClient:session] walletType too long: ${type.length} > ${MAX_WALLET_TYPE}`);\n }\n await storage.set(walletTypeStorageKey(apiKeyHash), type);\n}\n\nexport async function readWalletType(storage: Storage, apiKeyHash: string): Promise<string | null> {\n return storage.get(walletTypeStorageKey(apiKeyHash));\n}\n","/**\n * Abort helpers that don't assume a browser-grade runtime.\n *\n * Two primitives we rely on are missing or partial on some React Native /\n * Hermes builds:\n * - `DOMException` is not a global on Hermes, so `new DOMException(...)`\n * throws `ReferenceError` instead of producing an AbortError.\n * - `AbortSignal.prototype.throwIfAborted` is absent on older RN AbortSignal\n * polyfills, so calling it (even via optional chaining, which only guards a\n * null/undefined signal — not a missing method) throws `TypeError`.\n *\n * These shims keep the abort path working everywhere while preserving the\n * `error.name === 'AbortError'` contract the rest of the SDK checks against.\n */\n\n/**\n * Build an AbortError. Uses the native `DOMException` when present (browsers,\n * Node ≥17) and falls back to a plain `Error` tagged `name = 'AbortError'`\n * where `DOMException` is undefined (Hermes).\n */\nexport function abortError(): Error {\n if (typeof DOMException !== 'undefined') {\n return new DOMException('Aborted', 'AbortError');\n }\n const err = new Error('Aborted');\n err.name = 'AbortError';\n return err;\n}\n\n/**\n * Throw an AbortError if `signal` is already aborted. Replacement for\n * `signal.throwIfAborted()` that doesn't depend on the method existing on the\n * runtime's `AbortSignal`.\n */\nexport function throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) throw abortError();\n}\n","import { PollarApiClient } from '../api/client';\nimport { abortError, throwIfAborted } from '../lib/abort';\nimport type { PollarLogger } from '../lib/logger';\n\n/** Terminal session-status conditions, surfaced identically by the SSE stream\n * (as `error` events) and the poll endpoint (as 404 / 410). When either occurs\n * the session can never become ready, so the wait stops and the auth flow\n * resets to an error state instead of retrying forever. */\nexport type SessionStatusErrorCode = 'INVALID_CLIENT_SESSION_ID' | 'EXPIRED_CLIENT_ID';\n\nexport class SessionStatusError extends Error {\n constructor(readonly code: SessionStatusErrorCode) {\n super(`[PollarClient] Session status terminal: ${code}`);\n this.name = 'SessionStatusError';\n }\n}\n\n/** Returns the terminal code if `parsed` is an SSE `error` event payload\n * (`{ error: '...' }`), otherwise null. */\nfunction terminalStatusCode(parsed: unknown): SessionStatusErrorCode | null {\n const err = (parsed as { error?: unknown } | null)?.error;\n if (err === 'INVALID_CLIENT_SESSION_ID' || err === 'EXPIRED_CLIENT_ID') return err;\n return null;\n}\n\nfunction abortableDelay(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const t = setTimeout(resolve, ms);\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(t);\n reject(abortError());\n },\n { once: true },\n );\n });\n}\n\nconst MAX_BACKOFF_MS = 5_000;\n\n/**\n * Poll the session-status SSE stream until `check` returns true.\n *\n * On consecutive failures the retry delay doubles up to a 5 s cap; any\n * received chunk resets it to the floor. The happy path is unchanged.\n */\nexport async function streamUntilFound(\n api: PollarApiClient,\n clientSessionId: string,\n check: (data: Record<string, unknown>) => boolean,\n retryDelayMs = 200,\n signal?: AbortSignal,\n logger: PollarLogger = console,\n): Promise<Record<string, unknown>> {\n let backoff = retryDelayMs;\n const sleep = async (ms: number): Promise<void> => {\n if (ms <= 0) return;\n if (signal) await abortableDelay(ms, signal);\n else await new Promise((r) => setTimeout(r, ms));\n };\n\n while (true) {\n throwIfAborted(signal);\n\n let data, error;\n try {\n ({ data, error } = await api.GET('/auth/session/status/{clientSessionId}', {\n params: { path: { clientSessionId } },\n parseAs: 'stream',\n signal: signal ?? null,\n }));\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n logger.debug('[PollarClient:stream] session-status request failed; will retry', e);\n }\n\n if (error || !data) {\n await sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n const reader = data.getReader();\n const decoder = new TextDecoder();\n let sawAnyChunk = false;\n\n try {\n while (true) {\n throwIfAborted(signal);\n const { done, value } = await reader.read();\n if (done) break;\n sawAnyChunk = true;\n\n const chunk = decoder.decode(value);\n for (const message of chunk.split('\\n\\n').filter(Boolean)) {\n const dataLine = message.split('\\n').find((l) => l.startsWith('data:'));\n if (!dataLine) continue;\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(dataLine.slice('data:'.length).trim());\n } catch {\n // partial chunk — keep reading\n continue;\n }\n // Terminal `error` event (invalid / expired session): stop and surface.\n const terminal = terminalStatusCode(parsed);\n if (terminal) throw new SessionStatusError(terminal);\n if (check(parsed)) {\n return parsed;\n }\n }\n }\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n if (e instanceof SessionStatusError) throw e;\n logger.debug('[PollarClient:stream] session-status stream read failed; will retry', e);\n } finally {\n reader.releaseLock();\n }\n\n // A connection that delivered real data resets the backoff; a stream\n // that opened and immediately closed counts as failure.\n if (sawAnyChunk) backoff = retryDelayMs;\n else backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n\n // Always wait the computed backoff before reconnecting. A data-bearing\n // close already reset it to the floor (retryDelayMs), so the happy-path\n // reconnect stays snappy; the failure paths — including a mid-stream read\n // error caught above — now back off instead of spinning in a tight\n // reconnect loop that hammers the server.\n await sleep(backoff);\n }\n}\n\n/** Success envelope shape of `GET /auth/session/status/{id}/poll`. */\ninterface StatusPollEnvelope {\n success?: boolean;\n code?: string;\n content?: Record<string, unknown>;\n}\n\n/**\n * Non-streaming counterpart to {@link streamUntilFound}. Repeatedly GETs the\n * one-shot `/auth/session/status/{clientSessionId}/poll` endpoint until `check`\n * returns true on the response `content`.\n *\n * Used on runtimes where `fetch` does not expose a readable `response.body`\n * (React Native / Hermes), so the SSE reader in `streamUntilFound` is\n * unavailable. Uses the global `fetch` directly (not `openapi-fetch`) because\n * the status endpoint is public/pre-auth and needs no DPoP middleware.\n *\n * Backoff matches the SSE path: the delay doubles on transient failures up to a\n * 5 s cap and resets to the floor after any successful response.\n */\nexport async function pollUntilFound(\n baseUrl: string,\n clientSessionId: string,\n check: (data: Record<string, unknown>) => boolean,\n intervalMs = 500,\n signal?: AbortSignal,\n logger: PollarLogger = console,\n): Promise<Record<string, unknown>> {\n const url = `${baseUrl}/auth/session/status/${encodeURIComponent(clientSessionId)}/poll`;\n let backoff = intervalMs;\n const sleep = async (ms: number): Promise<void> => {\n if (ms <= 0) return;\n if (signal) await abortableDelay(ms, signal);\n else await new Promise((r) => setTimeout(r, ms));\n };\n\n while (true) {\n throwIfAborted(signal);\n\n let envelope: StatusPollEnvelope | null = null;\n let httpStatus = 0;\n try {\n const response = await fetch(url, { headers: { accept: 'application/json' }, signal: signal ?? null });\n httpStatus = response.status;\n envelope = (await response.json().catch(() => null)) as StatusPollEnvelope | null;\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n logger.debug('[PollarClient:stream] session-status poll failed; will retry', e);\n }\n\n // Terminal: the session is gone (404 / INVALID) or expired (410 / EXPIRED).\n // It can never become ready, so stop and surface — the caller resets the\n // login to an error state. Mirrors the SSE stream's terminal `error` events.\n if (httpStatus === 404 || envelope?.code === 'INVALID_CLIENT_SESSION_ID') {\n throw new SessionStatusError('INVALID_CLIENT_SESSION_ID');\n }\n if (httpStatus === 410 || envelope?.code === 'EXPIRED_CLIENT_ID') {\n throw new SessionStatusError('EXPIRED_CLIENT_ID');\n }\n\n if (envelope?.success && envelope.content && check(envelope.content)) {\n return envelope.content;\n }\n\n // A response (even a transient non-terminal error) resets the backoff floor;\n // a network failure (no response) backs off up to the cap.\n if (envelope) backoff = intervalMs;\n else backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n await sleep(backoff);\n }\n}\n\n/**\n * Wait until the client session reaches a state where `check` passes, using the\n * transport appropriate to the runtime: the SSE stream on web (`useStreaming`),\n * or one-shot polling on React Native. Both resolve with the matched status\n * `content` payload; the calling auth flow does not care which transport ran.\n */\nexport function waitForSessionReady(args: {\n api: PollarApiClient;\n baseUrl: string;\n clientSessionId: string;\n check: (data: Record<string, unknown>) => boolean;\n useStreaming: boolean;\n retryDelayMs?: number;\n signal?: AbortSignal;\n logger?: PollarLogger;\n}): Promise<Record<string, unknown>> {\n const { api, baseUrl, clientSessionId, check, useStreaming, retryDelayMs, signal, logger = console } = args;\n return useStreaming\n ? streamUntilFound(api, clientSessionId, check, retryDelayMs ?? 200, signal, logger)\n : pollUntilFound(baseUrl, clientSessionId, check, retryDelayMs ?? 500, signal, logger);\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { isValidSession } from '../session';\nimport { SessionStatusError, waitForSessionReady } from '../stream';\nimport { FlowDeps } from './deps';\n\nexport async function authenticate(clientSessionId: string, deps: FlowDeps, expectedWallet?: string): Promise<void> {\n const { api, logger, basePath, useStreaming, signal, setAuthState, storeSession, clearSession } = deps;\n\n setAuthState({ step: 'authenticating' });\n\n try {\n await waitForSessionReady({\n api,\n baseUrl: basePath,\n clientSessionId,\n check: (data) => data?.status === 'READY',\n useStreaming,\n signal,\n logger,\n });\n } catch (err) {\n // Terminal session-status condition (invalid / expired). Reset to an error\n // state and clear any partial session so the user can start a fresh login.\n // Other errors (AbortError from cancelLogin, etc.) bubble to the flow's\n // generic handler unchanged.\n if (err instanceof SessionStatusError) {\n const expired = err.code === 'EXPIRED_CLIENT_ID';\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: expired ? 'Login session expired — please try again' : 'Login session is no longer valid — please try again',\n errorCode: expired ? AUTH_ERROR_CODES.SESSION_EXPIRED : AUTH_ERROR_CODES.SESSION_INVALID,\n });\n await clearSession();\n return;\n }\n throw err;\n }\n\n // Pass `dpopJwk` so the server mints DPoP-bound tokens (`cnf.jkt`).\n const dpopJwk = await deps.getPublicJwk();\n // HTTP-level `error` is not handled here; the `else` branch below catches\n // both \"request failed\" (data === undefined) and \"request OK but body\n // wasn't a valid session\" via the same generic path.\n const { data } = await api.POST('/auth/login', {\n body: {\n clientSessionId,\n dpopJwk,\n ...(deps.deviceLabel ? { deviceLabel: deps.deviceLabel } : {}),\n },\n signal,\n });\n\n if (data?.code === 'SDK_LOGIN_SUCCESS' && isValidSession(data?.content, logger)) {\n // `isValidSession` doesn't validate the `data` (PII) subtree, so reach into\n // it defensively — a contract-drifted response missing `data`/`providers`\n // should surface as a clean wallet-mismatch error, not a raw TypeError.\n const sessionWallet = data.content.data?.providers?.wallet?.address;\n if (expectedWallet && sessionWallet !== expectedWallet) {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: 'Wallet mismatch: session wallet does not match connected wallet',\n errorCode: AUTH_ERROR_CODES.WALLET_AUTH_FAILED,\n });\n await clearSession();\n return;\n }\n await storeSession(data.content);\n } else {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating',\n message: 'Failed to load session',\n errorCode: AUTH_ERROR_CODES.AUTH_FAILED,\n });\n await clearSession();\n }\n}\n","import { PollarApiClient } from '../../api/client';\nimport type { PublicEcJwk } from '../../keys/types';\nimport type { PollarLogger } from '../../lib/logger';\nimport { AUTH_ERROR_CODES, AuthState, PasskeyCeremony, PollarApplicationConfigContent } from '../../types';\nimport { WalletAdapter, WalletId } from '../../wallets';\n\nexport type FlowDeps = {\n api: PollarApiClient;\n /** Level-gated logger from the owning `PollarClient`. */\n logger: PollarLogger;\n /** API origin + version prefix (e.g. `https://sdk.api.pollar.xyz/v1`). Used to\n * build the non-streaming status-poll URL on runtimes without fetch streaming. */\n basePath: string;\n /**\n * Whether the runtime supports `fetch` response-body streaming (web). When\n * `true` the SDK consumes the SSE status stream; when `false` (React Native,\n * whose `fetch` exposes no `response.body.getReader()`) it polls the\n * non-streaming `/auth/session/status/{id}/poll` endpoint instead.\n */\n useStreaming: boolean;\n signal: AbortSignal;\n setAuthState: (state: AuthState) => void;\n storeSession: (session: PollarApplicationConfigContent) => void | Promise<void>;\n clearSession: () => void | Promise<void>;\n /**\n * Resolves a wallet adapter for the requested id. Uses the consumer's\n * injected `walletAdapter` resolver when present and falls back to the\n * built-in Freighter/Albedo adapters otherwise.\n */\n resolveWalletAdapter: (id: WalletId) => Promise<WalletAdapter>;\n storeWalletAdapter: (adapter: WalletAdapter, id: WalletId) => void | Promise<void>;\n /**\n * The passkey (WebAuthn) ceremony for `loginSmartWallet()`, injected from the\n * client config. Undefined when the consumer didn't configure passkey support.\n */\n passkey?: PasskeyCeremony;\n /**\n * Returns the public JWK of the SDK's per-session DPoP keypair. Auth\n * completion calls (`/auth/login`) pass it as `dpopJwk` so the server\n * can mint DPoP-bound tokens (`cnf.jkt`).\n */\n getPublicJwk: () => Promise<PublicEcJwk>;\n /**\n * Optional UI label persisted on the server-side refresh-token row so the\n * sessions UI can show \"iPhone — Safari\" instead of a raw user-agent.\n */\n deviceLabel?: string;\n};\n\nexport async function createAuthSession(deps: FlowDeps): Promise<string | null> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'creating_session' });\n\n const { data, error } = await api.POST('/auth/session', { signal });\n\n if (error || !data?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'creating_session',\n message: 'Failed to create session',\n errorCode: AUTH_ERROR_CODES.SESSION_CREATE_FAILED,\n });\n return null;\n }\n\n return data.content.clientSessionId;\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\nexport async function initEmailSession(deps: FlowDeps): Promise<void> {\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n deps.setAuthState({ step: 'entering_email', clientSessionId });\n}\n\nexport async function sendEmailCode(email: string, clientSessionId: string, deps: FlowDeps): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'sending_email', email });\n\n const { data, error } = await api.POST('/auth/email', {\n body: { clientSessionId, email },\n signal,\n });\n\n if (error || !data?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'sending_email',\n message: 'Failed to send code',\n errorCode: AUTH_ERROR_CODES.EMAIL_SEND_FAILED,\n });\n return;\n }\n\n setAuthState({ step: 'entering_code', clientSessionId, email });\n}\n\nexport async function verifyAndAuthenticate(\n code: string,\n clientSessionId: string,\n email: string,\n deps: FlowDeps,\n): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n setAuthState({ step: 'verifying_email_code', clientSessionId, email });\n\n const { data, error } = await api.POST('/auth/email/verify-code', {\n body: { clientSessionId, code },\n signal,\n });\n\n if (data?.code === 'SDK_EMAIL_CODE_VERIFIED') {\n await authenticate(clientSessionId, deps);\n return;\n }\n\n // Extract error code from either the 4xx error body or the 200 body\n const errCode =\n (error as unknown as { error?: string } | undefined)?.error ?? (data as unknown as { code?: string } | undefined)?.code;\n\n if (errCode === 'SDK_EMAIL_CODE_EXPIRED') {\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Code expired — request a new one',\n errorCode: AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED,\n clientSessionId,\n email,\n });\n return;\n }\n\n if (errCode === 'INVALID_EMAIL_CODE' || errCode === 'SDK_EMAIL_CODE_INVALID') {\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Invalid code — try again',\n errorCode: AUTH_ERROR_CODES.EMAIL_CODE_INVALID,\n clientSessionId,\n email,\n });\n return;\n }\n\n setAuthState({\n step: 'error',\n previousStep: 'verifying_email_code',\n message: 'Failed to verify code — try again',\n errorCode: AUTH_ERROR_CODES.EMAIL_VERIFY_FAILED,\n });\n}\n","import type { AuthUrlOpener } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\ntype OAuthDeps = FlowDeps & {\n basePath: string;\n apiKey: string;\n /** Platform strategy for surfacing the hosted-OAuth URL (popup on web, in-app browser on RN). */\n openAuthUrl: AuthUrlOpener;\n /** Sent to the backend as `redirect_uri`; where the provider returns the user afterwards. */\n redirectUri: string;\n};\n\n/**\n * Break the popup's `window.opener` back-reference so the OAuth window\n * cannot navigate the parent. Best-effort — older browsers expose the\n * property as read-only.\n */\nfunction severOpener(popup: Window | null): void {\n if (!popup) return;\n try {\n popup.opener = null;\n } catch {\n // ignore\n }\n}\n\n/**\n * Default web opener: reserve a blank popup synchronously (before any await)\n * so popup blockers — which only honor `window.open` inside the original\n * user-gesture tick — don't swallow it, then navigate it to the OAuth URL.\n *\n * React Native consumers replace this via `PollarClientConfig.openAuthUrl`\n * (typically wrapping `expo-web-browser`'s `openAuthSessionAsync`).\n */\nexport const defaultWebOAuthOpener: AuthUrlOpener = async ({ getUrl }) => {\n const popup = typeof window !== 'undefined' ? window.open('about:blank', '_blank') : null;\n severOpener(popup);\n\n const url = await getUrl();\n if (!url) {\n popup?.close();\n return;\n }\n\n if (popup) {\n popup.location.href = url;\n severOpener(popup);\n } else if (typeof window !== 'undefined') {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n};\n\nexport async function loginOAuth(provider: 'google' | 'github', deps: OAuthDeps): Promise<void> {\n const { setAuthState, basePath, apiKey, openAuthUrl, redirectUri, signal } = deps;\n\n // The auth session is minted lazily inside `getUrl` so the web opener can\n // reserve its popup window *before* this async call runs. We capture the\n // resulting id here so `authenticate` can poll it once the opener returns.\n let clientSessionId: string | null = null;\n const getUrl = async (): Promise<string | null> => {\n clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return null;\n\n setAuthState({ step: 'opening_oauth', provider });\n\n const url = new URL(`${basePath}/auth/${provider}`);\n url.searchParams.set('api_key', apiKey);\n url.searchParams.set('client_session_id', clientSessionId);\n url.searchParams.set('redirect_uri', redirectUri);\n return url.toString();\n };\n\n await openAuthUrl({ provider, getUrl, redirectUri, signal });\n\n // Opener never called `getUrl`, or session creation failed — nothing to poll.\n if (!clientSessionId) return;\n\n await authenticate(clientSessionId, deps);\n}\n","import { AUTH_ERROR_CODES, PasskeyMode } from '../../types';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\n/**\n * \"Smart Wallet\" auth via passkey (WebAuthn).\n *\n * `mode` is chosen by the caller's button: `'login'` for a returning user\n * (`/auth/passkey/login`) and `'register'` for a brand-new wallet\n * (`/auth/passkey/register`, which also deploys the C-address server-side).\n *\n * 1. Create the auth session.\n * 2. Ask the server for a challenge bound to that session.\n * 3. Run the device ceremony (injected `deps.passkey`) in `mode`.\n * 4. Post the result to the matching endpoint.\n * 5. Hand off to `authenticate()` for the READY → `/auth/login` token exchange.\n */\nexport async function smartWalletFlow(deps: FlowDeps, mode: PasskeyMode): Promise<void> {\n const { api, signal, setAuthState, passkey } = deps;\n\n if (!passkey) {\n setAuthState({\n step: 'error',\n previousStep: 'creating_session',\n message: 'Passkey support is not configured',\n errorCode: AUTH_ERROR_CODES.PASSKEY_FAILED,\n });\n return;\n }\n\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n\n try {\n // 1. Server challenge.\n const { data: challengeData } = await api.POST('/auth/passkey/challenge', {\n body: { clientSessionId },\n signal,\n });\n const challenge = challengeData?.content?.challenge;\n if (!challengeData?.success || !challenge) {\n return failPasskey(setAuthState, 'Failed to start passkey');\n }\n\n // 2. Device ceremony (Touch ID / biometric) — runtime-injected.\n setAuthState({ step: 'creating_passkey' });\n const ceremony = await passkey({ challenge, mode });\n // openapi-fetch types the WebAuthn payload as a loose object; the browser\n // PublicKeyCredential JSON satisfies it.\n const response = ceremony.response as { [key: string]: unknown };\n\n // 3. New user → register (deploys the C-address); returning → login.\n if (ceremony.kind === 'register') {\n setAuthState({ step: 'deploying_smart_account' });\n const { data } = await api.POST('/auth/passkey/register', {\n body: { clientSessionId, response },\n signal,\n });\n if (!data?.success) return failPasskey(setAuthState, 'Passkey registration failed');\n } else {\n const { data } = await api.POST('/auth/passkey/login', {\n body: { clientSessionId, response },\n signal,\n });\n if (!data?.success) return failPasskey(setAuthState, 'Passkey authentication failed');\n }\n } catch {\n return failPasskey(setAuthState, 'Passkey login failed');\n }\n\n // 4. Session is READY → exchange for DPoP-bound tokens.\n await authenticate(clientSessionId, deps);\n}\n\nfunction failPasskey(setAuthState: FlowDeps['setAuthState'], message: string): void {\n setAuthState({ step: 'error', previousStep: 'creating_passkey', message, errorCode: AUTH_ERROR_CODES.PASSKEY_FAILED });\n}\n","import { abortError } from '../../lib/abort';\nimport { AUTH_ERROR_CODES } from '../../types';\nimport { WalletId } from '../../wallets';\nimport { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\nfunction withSignal<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n return Promise.race([\n promise,\n new Promise<never>((_, reject) => {\n if (signal.aborted) {\n reject(abortError());\n return;\n }\n signal.addEventListener('abort', () => reject(abortError()), { once: true });\n }),\n ]);\n}\n\nexport async function loginWallet(type: WalletId, deps: FlowDeps): Promise<void> {\n const { api, signal, setAuthState } = deps;\n\n const clientSessionId = await createAuthSession(deps);\n if (!clientSessionId) return;\n\n let connectedWallet: string;\n\n try {\n setAuthState({ step: 'connecting_wallet', walletType: type });\n // Wrap the resolver in `withSignal` so `cancelLogin()` exits the await\n // even if the consumer's resolver is hung (broken extension bridge,\n // network call, etc). The resolver itself may keep running in the\n // background — the 5s `walletResolverTimeoutMs` in `_resolveWalletAdapter`\n // bounds that — but the flow won't block waiting for it.\n const adapter = await withSignal(deps.resolveWalletAdapter(type), signal);\n\n const available = await withSignal(adapter.isAvailable(), signal);\n if (!available) {\n setAuthState({ step: 'wallet_not_installed', walletType: type });\n return;\n }\n\n const { address } = await withSignal(adapter.connect(), signal);\n connectedWallet = address;\n deps.storeWalletAdapter(adapter, type);\n setAuthState({ step: 'authenticating_wallet' });\n\n const { data: walletData, error: walletError } = await api.POST('/auth/wallet', {\n body: { clientSessionId, walletAddress: address },\n signal,\n });\n\n if (walletError || !walletData?.success) {\n setAuthState({\n step: 'error',\n previousStep: 'authenticating_wallet',\n message: 'Wallet authentication failed',\n errorCode: AUTH_ERROR_CODES.WALLET_AUTH_FAILED,\n });\n return;\n }\n } catch {\n setAuthState({\n step: 'error',\n previousStep: 'connecting_wallet',\n message: 'Wallet connection failed',\n errorCode: AUTH_ERROR_CODES.WALLET_CONNECT_FAILED,\n });\n return;\n }\n\n await authenticate(clientSessionId, deps, connectedWallet);\n}\n","import { createApiClient, PollarApiClient } from '../api/client';\nimport { claimDistributionRule, listDistributionRules } from '../api/endpoints/distribution';\nimport { getKycProviders, getKycStatus, pollKycStatus, resolveKyc, startKyc } from '../api/endpoints/kyc';\nimport { createOffRamp, createOnRamp, getRampsQuote, getRampTransaction, pollRampTransaction } from '../api/endpoints/ramps';\nimport { buildProof } from '../dpop';\nimport { defaultKeyManager } from '../keys/factory';\nimport type { KeyManager } from '../keys/types';\nimport { hashApiKey } from '../lib/api-key-hash';\nimport { createLogger, type PollarLogger } from '../lib/logger';\nimport { randomUUID } from '../lib/random-uuid';\nimport { StellarNetwork } from '../stellar/StellarClient';\nimport { defaultStorage } from '../storage/autodetect';\nimport type { OnStorageDegrade, Storage, StorageDegradeReason } from '../storage/types';\nimport { POLLAR_CORE_VERSION } from '../version';\nimport { defaultVisibilityProvider } from '../visibility/autodetect';\nimport type { VisibilityProvider } from '../visibility/types';\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n AuthUrlOpener,\n BuildOutcome,\n DistributionClaimBody,\n DistributionClaimContent,\n DistributionRule,\n KycLevel,\n KycStartBody,\n KycStartResponse,\n KycStatus,\n NetworkState,\n PasskeyCeremony,\n PasskeySigner,\n PollarApplicationConfigContent,\n PollarClientConfig,\n PollarFlowError,\n PollarLoginOptions,\n PollarPersistedSession,\n PollarUserProfile,\n RampsOfframpBody,\n RampsOfframpResponse,\n RampsOnrampBody,\n RampsOnrampResponse,\n RampsQuoteQuery,\n RampsQuoteResponse,\n RampsTransactionResponse,\n RampTxStatus,\n SessionInfo,\n SessionsState,\n SignOutcome,\n SubmitOutcome,\n TrustlineOutcome,\n TransactionState,\n TxBuildBody,\n TxBuildContent,\n TxHistoryParams,\n TxHistoryState,\n TxSignAndSendBody,\n EnabledAssetsState,\n WalletBalanceContent,\n WalletBalanceState,\n} from '../types';\nimport { AlbedoAdapter, FreighterAdapter, WalletAdapter, WalletAdapterResolver, WalletId, WalletType } from '../wallets';\nimport { initEmailSession, sendEmailCode, verifyAndAuthenticate } from './auth/emailFlow';\nimport { defaultWebOAuthOpener, loginOAuth } from './auth/oauthFlow';\nimport { smartWalletFlow } from './auth/passkeyFlow';\nimport { loginWallet } from './auth/walletFlow';\nimport { readStorage, readWalletType, removeStorage, sessionStorageKey, writeStorage, writeWalletType } from './session';\n\nconst isBrowser = typeof window !== 'undefined' && typeof localStorage !== 'undefined';\n/** React Native runtime: `navigator.product === 'ReactNative'` (set by the RN runtime). */\nconst isReactNative = typeof navigator !== 'undefined' && (navigator as { product?: string }).product === 'ReactNative';\n/**\n * True wherever the SDK can persist state and do crypto — browser OR React\n * Native. False only in true server-side renders (Node/SSR) where there is no\n * client runtime. Gates everything that previously keyed off `isBrowser`; that\n * check alone wrongly treated RN (no `localStorage`) as server-side.\n */\nconst isClientRuntime = isBrowser || isReactNative;\n\n/** Renew the access token this many seconds before its `exp` to absorb clock skew + signing latency. */\nconst REFRESH_SKEW_SECONDS = 60;\n\nfunction warnServerSide(method: string): void {\n // Module-level (no client instance / logger yet) — and a misuse warning the\n // developer should always see, so it stays on the raw console.\n console.warn(\n `[PollarClient] ${method}() called server-side — browser APIs unavailable. Use PollarClient only in Client Components.`,\n );\n}\n\nexport class PollarClient {\n readonly apiKey: string;\n readonly id: string;\n readonly basePath: string;\n\n private readonly _api: PollarApiClient;\n private readonly _log: PollarLogger;\n private readonly _storage: Storage;\n private readonly _keyManager: KeyManager;\n /** Resolves once `keyManager.init()` and the initial session restore complete. */\n private readonly _initialized: Promise<void>;\n /**\n * Per-API-key storage namespace. Computed asynchronously inside\n * `_initialize()` because SHA-256 lives behind `crypto.subtle.digest`.\n * Accessing `apiKeyHash` before `await client.ready()` throws.\n */\n private _apiKeyHash: string | null = null;\n\n /**\n * Short SHA-256-derived namespace for this client's persisted state.\n * Available after `await client.ready()` (or any awaited method); throws\n * if read before initialization completes.\n */\n get apiKeyHash(): string {\n if (this._apiKeyHash === null) {\n throw new Error('[PollarClient] apiKeyHash is not available until client.ready() resolves');\n }\n return this._apiKeyHash;\n }\n\n private _session: PollarPersistedSession | null = null;\n private _profile: PollarUserProfile | null = null;\n /** Last `DPoP-Nonce` we saw from a server response. Carried into the next proof. */\n private _dpopNonce: string | null = null;\n /**\n * Snapshot of each in-flight request's body, taken in `onRequest` before\n * `fetch()` consumes the stream. Needed because `Request.clone()` throws\n * once the body is disturbed, so the auto-retry path (DPoP nonce challenge\n * / 401 refresh) must rebuild the request from scratch instead of cloning.\n */\n private _requestBodyCache = new WeakMap<Request, ArrayBuffer>();\n /** Singleton in-flight refresh — concurrent 401s coalesce into one /auth/refresh call. */\n private _refreshPromise: Promise<void> | null = null;\n private _storageEventHandler: ((e: StorageEvent) => void) | null = null;\n /** Optional UI label sent to the server at /auth/login so the sessions UI\n * can show a recognizable device name. Set via PollarClientConfig.deviceLabel. */\n private readonly _deviceLabel: string | undefined;\n private readonly _visibilityProvider: VisibilityProvider;\n private readonly _maxIdleMs: number | undefined;\n /** Updated by the request middleware. Read by the silent-refresh scheduler\n * to skip proactive refreshes after `maxIdleMs` of no HTTP activity. */\n private _lastRequestAt: number = Date.now();\n private _refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private _visibilityUnsubscribe: (() => void) | null = null;\n\n private _transactionState: TransactionState | null = null;\n private _transactionStateListeners = new Set<(state: TransactionState) => void>();\n private _txHistoryState: TxHistoryState = { step: 'idle' };\n private _txHistoryStateListeners = new Set<(state: TxHistoryState) => void>();\n private _sessionsState: SessionsState = { step: 'idle' };\n private _sessionsStateListeners = new Set<(state: SessionsState) => void>();\n private _walletBalanceState: WalletBalanceState = { step: 'idle' };\n private _walletBalanceStateListeners = new Set<(state: WalletBalanceState) => void>();\n private _enabledAssetsState: EnabledAssetsState = { step: 'idle' };\n private _enabledAssetsStateListeners = new Set<(state: EnabledAssetsState) => void>();\n private _authState: AuthState = { step: 'idle' };\n private _authStateListeners = new Set<(state: AuthState) => void>();\n private _networkState: NetworkState = { step: 'idle' };\n private _networkStateListeners = new Set<(state: NetworkState) => void>();\n /**\n * Latched once the storage adapter degrades. We dedupe (the adapter only\n * fires once anyway) and use it to replay state to late-subscribers — same\n * pattern as `onAuthStateChange` replaying `_authState` on subscribe.\n * Only populated when the SDK constructed the default storage adapter; if\n * the consumer passes `config.storage`, they own degradation notifications.\n */\n private _storageDegraded: { reason: StorageDegradeReason; error?: unknown } | null = null;\n private _storageDegradeListeners = new Set<OnStorageDegrade>();\n\n private _walletAdapter: WalletAdapter | null = null;\n private readonly _walletAdapterResolver: WalletAdapterResolver | null;\n private readonly _walletResolverTimeoutMs: number;\n private readonly _passkey: PasskeyCeremony | null;\n private readonly _passkeySign: PasskeySigner | null;\n private _loginController: AbortController | null = null;\n /** Aborts an in-flight `/auth/session/resume` on destroy() or re-trigger. */\n private _resumeController: AbortController | null = null;\n /** Platform strategy for opening the hosted-OAuth URL (popup on web; injected on RN). */\n private readonly _openAuthUrl: AuthUrlOpener;\n /** `redirect_uri` sent to the backend for hosted OAuth. */\n private readonly _oauthRedirectUri: string;\n\n constructor(config: PollarClientConfig) {\n this.apiKey = config.apiKey;\n this.id = randomUUID();\n this.basePath = `${config.baseUrl || 'https://sdk.api.pollar.xyz'}/v1`;\n this._log = createLogger(config.logLevel ?? 'info', config.logger);\n\n this._storage =\n config.storage ??\n defaultStorage({\n logger: this._log,\n onDegrade: (reason, error) => {\n // Forward to the legacy one-shot callback (back-compat) and to any\n // subscribers added via `client.onStorageDegrade(cb)`. Both fire\n // exactly once because the underlying adapter dedupes.\n config.onStorageDegrade?.(reason, error);\n this._dispatchStorageDegrade(reason, error);\n },\n });\n this._keyManager = config.keyManager ?? defaultKeyManager(this._storage, config.apiKey);\n this._walletAdapterResolver = config.walletAdapter ?? null;\n this._walletResolverTimeoutMs = config.walletResolverTimeoutMs ?? 5000;\n this._passkey = config.passkey ?? null;\n this._passkeySign = config.passkeySign ?? null;\n this._deviceLabel = config.deviceLabel;\n this._visibilityProvider = config.visibilityProvider ?? defaultVisibilityProvider();\n this._maxIdleMs = config.maxIdleMs;\n this._openAuthUrl = config.openAuthUrl ?? defaultWebOAuthOpener;\n // `window.location` can be absent even when `isBrowser` is true (some\n // webview/SSR shims expose a partial `window`); read it defensively so the\n // constructor never throws on a missing `.origin`.\n this._oauthRedirectUri = config.oauthRedirectUri ?? (isBrowser ? (window.location?.origin ?? '') : '');\n\n this._api = createApiClient(this.basePath);\n this._wireMiddlewares();\n\n this._networkState = { step: 'connected', network: config.stellarNetwork ?? 'testnet' };\n\n if (!isClientRuntime) {\n warnServerSide('constructor');\n this._initialized = Promise.resolve();\n return;\n }\n\n this._log.info(\n `[PollarClient] Initialized v${POLLAR_CORE_VERSION} — endpoint: ${this.basePath}, network: ${this._networkState.network}`,\n );\n\n this._initialized = this._initialize();\n }\n\n /** Awaitable handle for the initial keypair + session restore. */\n ready(): Promise<void> {\n return this._initialized;\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n\n private async _initialize(): Promise<void> {\n // Compute the storage namespace first — every subsequent storage op\n // (including the cross-tab listener below and `_restoreSession`) reads it.\n this._apiKeyHash = await hashApiKey(this.apiKey);\n\n // Cross-tab session sync. Browser-only — the `storage` event is a DOM\n // feature with no React Native equivalent (each RN process owns its\n // SecureStore/Keychain), so we gate on `isBrowser`, not `isClientRuntime`.\n if (isBrowser) {\n const sessionKey = sessionStorageKey(this._apiKeyHash);\n const handler = (e: StorageEvent): void => {\n if (e.key === sessionKey) {\n this._restoreSession().catch((err) => this._log.error('[PollarClient] Cross-tab restore failed', err));\n }\n };\n window.addEventListener('storage', handler);\n this._storageEventHandler = handler;\n }\n\n try {\n await this._keyManager.init();\n } catch (err) {\n this._log.warn('[PollarClient] KeyManager init failed; DPoP unavailable for this session', err);\n }\n await this._restoreSession();\n\n // Wire after restore so the first scheduled refresh — if any — is set up\n // by `_restoreSession` itself, and the visibility listener only fires\n // re-checks for transitions that happen from this point forward.\n this._visibilityUnsubscribe = this._visibilityProvider.onChange((visible) => {\n if (!visible) return;\n void this._maybeProactiveRefresh();\n // B5: if the session is still optimistic (e.g. the startup resume failed\n // offline), retry validation now that the app is foreground again.\n if (this._authState.step === 'authenticated' && !this._authState.verified) {\n void this._resume();\n }\n });\n }\n\n /** Detach the cross-tab storage listener and abort any in-flight login. */\n destroy(): void {\n if (this._storageEventHandler && isBrowser) {\n window.removeEventListener('storage', this._storageEventHandler);\n this._storageEventHandler = null;\n }\n this._loginController?.abort();\n this._loginController = null;\n this._resumeController?.abort();\n this._resumeController = null;\n this._clearRefreshTimer();\n if (this._visibilityUnsubscribe) {\n this._visibilityUnsubscribe();\n this._visibilityUnsubscribe = null;\n }\n }\n\n // ─── Middlewares (DPoP + auto-refresh) ────────────────────────────────────\n\n private _wireMiddlewares(): void {\n // Aliasing `this` is deliberate: every middleware callback below is an\n // arrow function so `this` would resolve correctly, but the file reads\n // significantly easier with one stable name across ~150 lines of\n // request/response/refresh interleaving. Don't refactor without\n // re-running the smoke tests for refresh coalescing + DPoP nonce flow.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this._api.use({\n onRequest: async ({ request }: { request: Request }) => {\n request.headers.set('x-pollar-api-key', self.apiKey);\n self._lastRequestAt = Date.now();\n await self._initialized;\n // Cache the body before fetch() disturbs the stream — retries can't\n // call request.clone() once the body is consumed. Guard on the method:\n // GET/HEAD carry no body, and in RN's fetch polyfill `request.body` is\n // `undefined` (not `null`) for them, so a bare `!== null` check would\n // snapshot an empty ArrayBuffer and later make a GET retry throw\n // \"Body not allowed for GET or HEAD requests\".\n const cacheMethod = request.method.toUpperCase();\n const cacheBodyAllowed = cacheMethod !== 'GET' && cacheMethod !== 'HEAD';\n if (cacheBodyAllowed && request.body != null) {\n try {\n self._requestBodyCache.set(request, await request.clone().arrayBuffer());\n } catch (err) {\n this._log.warn('[PollarClient] Could not snapshot request body for retry', err);\n }\n }\n // The refresh endpoint must not wait on its own in-flight refresh —\n // that would deadlock the singleton. Other requests wait so they\n // pick up the freshly-rotated token.\n const isRefresh = request.url.includes('/auth/refresh');\n if (!isRefresh && self._refreshPromise) await self._refreshPromise;\n\n if (isRefresh) {\n // RFC 9449 §5 / §6.1: token-endpoint proofs MUST NOT carry `ath`\n // and MUST NOT use the access token in the Authorization header.\n // The DPoP proof alone authenticates the request; the RT goes in\n // the body and binds via `cnf.jkt`.\n const refreshProof = await self._buildProofForRequest(request, undefined);\n if (refreshProof) request.headers.set('DPoP', refreshProof);\n return request;\n }\n\n const accessToken = self._session?.token?.accessToken;\n if (!accessToken) return request;\n\n const proof = await self._buildProofForRequest(request, accessToken);\n if (proof) {\n request.headers.set('Authorization', `DPoP ${accessToken}`);\n request.headers.set('DPoP', proof);\n } else {\n // DPoP unavailable (HTTP origin / SubtleCrypto missing). Fall back\n // to Bearer; the server will reject if the AT is DPoP-bound.\n request.headers.set('Authorization', `Bearer ${accessToken}`);\n }\n return request;\n },\n onResponse: async ({ request, response }: { request: Request; response: Response }) => {\n const newNonce = response.headers.get('DPoP-Nonce');\n if (newNonce) self._dpopNonce = newNonce;\n\n if (response.status !== 401) return response;\n\n const wwwAuth = response.headers.get('WWW-Authenticate') ?? '';\n const isNonceChallenge = wwwAuth.includes('use_dpop_nonce');\n\n // The refresh endpoint has special handling: don't recursively trigger\n // refresh from inside itself. But DO honor a nonce challenge — the\n // fresh `DPoP-Nonce` was already captured above, so a single retry\n // with the new nonce succeeds. Any other 401 (RT expired, reused,\n // invalid) propagates to `_doRefresh` which clears the session.\n if (request.url.includes('/auth/refresh')) {\n if (isNonceChallenge) return self._retryRequest(request);\n return response;\n }\n\n if (!isNonceChallenge) {\n try {\n await self.refresh();\n } catch {\n return response;\n }\n // Token-expired retries (post-refresh) are only safe for idempotent\n // methods. POST/PUT/DELETE/PATCH might have already executed\n // server-side before auth was rejected — replaying could duplicate\n // effects (double-create a transaction, etc.). The original 401\n // bubbles up so the caller decides; the access token is now fresh,\n // so a manual retry by the caller will succeed. Nonce-challenge\n // 401s don't go through this branch (server didn't process the\n // request), so any method retries safely above.\n const method = request.method.toUpperCase();\n if (method !== 'GET' && method !== 'HEAD') {\n return response;\n }\n }\n return self._retryRequest(request);\n },\n });\n }\n\n private async _buildProofForRequest(request: Request, accessToken: string | undefined): Promise<string | null> {\n try {\n const htu = request.url.split('?')[0]!.split('#')[0]!;\n return await buildProof(\n {\n htm: request.method,\n htu,\n ...(accessToken ? { accessToken } : {}),\n ...(this._dpopNonce !== null ? { nonce: this._dpopNonce } : {}),\n },\n this._keyManager,\n );\n } catch (err) {\n this._log.warn('[PollarClient] DPoP proof build failed', err);\n return null;\n }\n }\n\n private async _retryRequest(originalRequest: Request): Promise<Response> {\n // Rebuild instead of clone(): the original's body stream was consumed by\n // the first fetch() and clone() would throw `Request body is already used`.\n // openapi-fetch runs onResponse a single time per request, so no\n // RETRIED_HEADER guard is needed — the retry's response is returned to\n // the caller directly and never re-enters this middleware.\n const headers = new Headers(originalRequest.headers);\n const isRefresh = originalRequest.url.includes('/auth/refresh');\n\n if (isRefresh) {\n // Token-endpoint proof per RFC 9449 §5 / §6.1: NO `ath`, NO\n // Authorization header. Mirrors the initial-request branch in\n // `onRequest`. The DPoP header is rebuilt so it picks up the fresh\n // server-issued nonce captured in `onResponse`.\n const proof = await this._buildProofForRequest(originalRequest, undefined);\n headers.delete('Authorization');\n if (proof) headers.set('DPoP', proof);\n else headers.delete('DPoP');\n } else {\n const accessToken = this._session?.token?.accessToken;\n if (accessToken) {\n const proof = await this._buildProofForRequest(originalRequest, accessToken);\n if (proof) {\n headers.set('Authorization', `DPoP ${accessToken}`);\n headers.set('DPoP', proof);\n } else {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n }\n\n // Never attach a body to a GET/HEAD retry — the Fetch API (and RN's\n // polyfill) throws \"Body not allowed for GET or HEAD requests\". This is\n // the retry that the `/auth/session/resume` GET hits after a DPoP nonce\n // challenge.\n const retryMethod = originalRequest.method.toUpperCase();\n const retryBodyAllowed = retryMethod !== 'GET' && retryMethod !== 'HEAD';\n const cachedBody = retryBodyAllowed ? this._requestBodyCache.get(originalRequest) : undefined;\n const retried = new Request(originalRequest.url, {\n method: originalRequest.method,\n headers,\n body: cachedBody ?? null,\n credentials: originalRequest.credentials,\n mode: originalRequest.mode,\n redirect: originalRequest.redirect,\n referrer: originalRequest.referrer,\n integrity: originalRequest.integrity,\n });\n return fetch(retried);\n }\n\n // ─── Refresh (race-safe singleton) ───────────────────────────────────────\n\n /**\n * Coalesce concurrent refresh attempts. The first caller does the work;\n * everyone else awaits the same promise and sees the new tokens.\n */\n refresh(): Promise<void> {\n if (this._refreshPromise) return this._refreshPromise;\n this._refreshPromise = this._doRefresh().finally(() => {\n this._refreshPromise = null;\n });\n return this._refreshPromise;\n }\n\n private async _doRefresh(): Promise<void> {\n const refreshToken = this._session?.token?.refreshToken;\n if (!refreshToken) {\n this._log.warn('[PollarClient] Refresh skipped: no refresh token in session');\n await this._clearSession();\n throw new Error('No refresh token available');\n }\n\n let data: unknown;\n let error: unknown;\n try {\n const response = await this._api.POST('/auth/refresh', { body: { refreshToken } });\n data = response.data;\n error = response.error;\n } catch (err) {\n this._log.error('[PollarClient] /auth/refresh request threw', err);\n await this._clearSession();\n throw err;\n }\n\n if (error || !data) {\n this._log.error('[PollarClient] /auth/refresh returned error', { error });\n await this._clearSession();\n throw new Error('Refresh failed');\n }\n const successData = data as { success?: boolean; content?: { token?: PollarPersistedSession['token'] } };\n if (!successData.success || !successData.content?.token) {\n // Don't log `successData` — its `content.token` would write access/refresh\n // tokens to the console. Log only the non-sensitive shape.\n this._log.error('[PollarClient] /auth/refresh response malformed', {\n success: successData.success,\n hasToken: !!successData.content?.token,\n });\n await this._clearSession();\n throw new Error('Refresh response malformed');\n }\n\n const newToken = successData.content.token;\n if (\n typeof newToken.accessToken !== 'string' ||\n typeof newToken.refreshToken !== 'string' ||\n typeof newToken.expiresAt !== 'number'\n ) {\n // Log the field TYPES, never the token values themselves.\n this._log.error('[PollarClient] /auth/refresh token shape invalid', {\n accessToken: typeof newToken.accessToken,\n refreshToken: typeof newToken.refreshToken,\n expiresAt: typeof newToken.expiresAt,\n });\n await this._clearSession();\n throw new Error('Refresh response token shape invalid');\n }\n\n if (this._session) {\n try {\n this._session = { ...this._session, token: newToken };\n await writeStorage(this._storage, this.apiKeyHash, this._session);\n this._log.info('[PollarClient] Tokens refreshed');\n } catch (err) {\n this._log.error('[PollarClient] Failed to persist refreshed session', err);\n // In-memory state is still updated; the session works for this\n // process but won't survive reload. Don't clear — that'd surprise\n // the user with a logout for what's essentially a storage hiccup.\n }\n this._scheduleNextRefresh();\n }\n }\n\n // ─── Silent refresh scheduler ────────────────────────────────────────────────\n\n /**\n * Arm a single setTimeout to fire shortly before the current access token\n * expires. Idempotent — clearing any previous timer first. Safe to call\n * from any session-write site (initial login, restore-from-storage, after\n * a successful rotation). No-op if there's no session in memory.\n *\n * Browser/RN background-tab throttling makes long-running setTimeouts\n * unreliable on their own; the `visibilitychange` listener compensates by\n * re-invoking `_maybeProactiveRefresh` whenever the app comes back to the\n * foreground, catching any timer that fired late or never fired at all.\n */\n private _scheduleNextRefresh(): void {\n this._clearRefreshTimer();\n const expiresAt = this._session?.token?.expiresAt;\n if (typeof expiresAt !== 'number') return;\n const dueInMs = Math.max(0, (expiresAt - Math.floor(Date.now() / 1000) - REFRESH_SKEW_SECONDS) * 1000);\n this._refreshTimer = setTimeout(() => {\n void this._maybeProactiveRefresh();\n }, dueInMs);\n }\n\n /**\n * Decide whether to actually run a refresh right now. Called both from the\n * scheduler timer and from the visibility-change listener.\n *\n * Skip if:\n * - no session / no RT (nothing to refresh)\n * - app is hidden — wait for the visibility listener to re-trigger us\n * - `maxIdleMs` configured and no client request since that window — let\n * the next reactive 401-refresh handle it whenever the user comes back\n * - the AT still has more than `REFRESH_SKEW_SECONDS` of life — reschedule\n *\n * Otherwise call `refresh()`, which uses the existing in-flight singleton\n * so we never collide with a reactive 401-triggered refresh. On failure,\n * `_doRefresh` already calls `_clearSession`, so auth-state listeners see\n * `step:'idle'` — no extra event dispatch needed here.\n */\n private async _maybeProactiveRefresh(): Promise<void> {\n if (!this._session?.token?.refreshToken) return;\n if (!this._visibilityProvider.isVisible()) return;\n if (this._maxIdleMs !== undefined && Date.now() - this._lastRequestAt > this._maxIdleMs) return;\n const expiresAt = this._session.token.expiresAt;\n if (Math.floor(Date.now() / 1000) < expiresAt - REFRESH_SKEW_SECONDS) {\n this._scheduleNextRefresh();\n return;\n }\n try {\n await this.refresh();\n } catch (err) {\n this._log.warn('[PollarClient] Proactive refresh failed; session cleared', err);\n }\n }\n\n private _clearRefreshTimer(): void {\n if (this._refreshTimer !== null) {\n clearTimeout(this._refreshTimer);\n this._refreshTimer = null;\n }\n }\n\n // ─── Auth state ──────────────────────────────────────────────────────────────\n\n getAuthState(): AuthState {\n return this._authState;\n }\n\n onAuthStateChange(cb: (state: AuthState) => void): () => void {\n this._authStateListeners.add(cb);\n cb(this._authState);\n return () => this._authStateListeners.delete(cb);\n }\n\n /**\n * Subscribe to persistent-storage degradation (Safari private mode,\n * sandboxed iframes, quota errors, etc.). The SDK keeps running off\n * in-memory storage after degrade, but sessions won't survive reload — a\n * host UI typically wants to show \"your session won't be saved\" so the\n * user isn't blindsided after a refresh.\n *\n * Fires at most once per client lifetime (the underlying adapter dedupes).\n * Late subscribers receive the latched state synchronously on subscribe.\n *\n * Only fires when the SDK constructs the default storage adapter. If you\n * pass a custom `config.storage`, wire your own notification path through\n * that adapter's API — the SDK has no hook into it.\n */\n onStorageDegrade(cb: OnStorageDegrade): () => void {\n this._storageDegradeListeners.add(cb);\n if (this._storageDegraded) {\n cb(this._storageDegraded.reason, this._storageDegraded.error);\n }\n return () => this._storageDegradeListeners.delete(cb);\n }\n\n private _dispatchStorageDegrade(reason: StorageDegradeReason, error?: unknown): void {\n if (this._storageDegraded) return;\n this._storageDegraded = { reason, error };\n for (const cb of this._storageDegradeListeners) {\n try {\n cb(reason, error);\n } catch (err) {\n this._log.error('[PollarClient] onStorageDegrade listener threw', err);\n }\n }\n }\n\n /** PII (email, names, avatar, providers). Held in memory only — never persisted. */\n getUserProfile(): PollarUserProfile | null {\n return this._profile;\n }\n\n // ─── Login (unified entry point) ─────────────────────────────────────────\n\n login(options: PollarLoginOptions): void {\n if (!isClientRuntime) {\n warnServerSide('login');\n return;\n }\n if (options.provider === 'google' || options.provider === 'github' || options.provider === 'email') {\n const controller = this._newController();\n const deps = this._flowDeps(controller.signal);\n if (options.provider === 'google' || options.provider === 'github') {\n loginOAuth(options.provider, {\n ...deps,\n basePath: this.basePath,\n apiKey: this.apiKey,\n openAuthUrl: this._openAuthUrl,\n redirectUri: this._oauthRedirectUri,\n }).catch((err) => this._handleFlowError(err));\n } else if (options.provider === 'email') {\n const { email } = options;\n initEmailSession(deps)\n .then(() => {\n if (this._authState.step === 'entering_email') {\n return sendEmailCode(email, this._authState.clientSessionId, deps);\n }\n })\n .catch((err) => this._handleFlowError(err));\n }\n } else if (options.provider === 'wallet') {\n this.loginWallet(options.type);\n }\n }\n\n // ─── Email OTP flow (3 steps) ─────────────────────────────────────────────\n\n beginEmailLogin(): void {\n if (!isClientRuntime) {\n warnServerSide('beginEmailLogin');\n return;\n }\n const controller = this._newController();\n initEmailSession(this._flowDeps(controller.signal)).catch((err) => this._handleFlowError(err));\n }\n\n sendEmailCode(email: string): void {\n if (!isClientRuntime) {\n warnServerSide('sendEmailCode');\n return;\n }\n if (this._authState.step !== 'entering_email') {\n throw new PollarFlowError(`sendEmailCode() requires step 'entering_email', current step is '${this._authState.step}'`);\n }\n const { clientSessionId } = this._authState;\n const signal = this._loginController!.signal;\n sendEmailCode(email, clientSessionId, this._flowDeps(signal)).catch((err) => this._handleFlowError(err));\n }\n\n verifyEmailCode(code: string): void {\n if (!isClientRuntime) {\n warnServerSide('verifyEmailCode');\n return;\n }\n const isRetryableError =\n this._authState.step === 'error' &&\n this._authState.clientSessionId != null &&\n (this._authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_INVALID ||\n this._authState.errorCode === AUTH_ERROR_CODES.EMAIL_CODE_EXPIRED);\n\n if (this._authState.step !== 'entering_code' && !isRetryableError) {\n throw new PollarFlowError(`verifyEmailCode() requires step 'entering_code', current step is '${this._authState.step}'`);\n }\n const state = this._authState;\n const clientSessionId =\n state.step === 'entering_code' ? state.clientSessionId : (state as { clientSessionId?: string }).clientSessionId!;\n const email = state.step === 'entering_code' ? state.email : ((state as { email?: string }).email ?? '');\n\n const controller = this._newController();\n verifyAndAuthenticate(code, clientSessionId, email, this._flowDeps(controller.signal)).catch((err) =>\n this._handleFlowError(err),\n );\n }\n\n // ─── Wallet flow (single call) ────────────────────────────────────────────\n\n loginWallet(type: WalletId): void {\n if (!isClientRuntime) {\n warnServerSide('loginWallet');\n return;\n }\n const controller = this._newController();\n loginWallet(type, this._flowDeps(controller.signal)).catch((err) => this._handleFlowError(err));\n }\n\n /**\n * \"Smart Wallet\" login: runs the passkey (WebAuthn) `get()` ceremony for a\n * returning user and signs them in. Use {@link createSmartWallet} for a new\n * user. Requires the `passkey` ceremony to be configured (e.g. via\n * `@pollar/react`).\n */\n loginSmartWallet(): void {\n if (!isClientRuntime) {\n warnServerSide('loginSmartWallet');\n return;\n }\n const controller = this._newController();\n smartWalletFlow(this._flowDeps(controller.signal), 'login').catch((err) => this._handleFlowError(err));\n }\n\n /**\n * \"Smart Wallet\" registration: runs the passkey (WebAuthn) `create()` ceremony\n * for a new user and deploys a sponsored smart-account C-address. Use\n * {@link loginSmartWallet} for a returning user. Requires the `passkey`\n * ceremony to be configured (e.g. via `@pollar/react`).\n */\n createSmartWallet(): void {\n if (!isClientRuntime) {\n warnServerSide('createSmartWallet');\n return;\n }\n const controller = this._newController();\n smartWalletFlow(this._flowDeps(controller.signal), 'register').catch((err) => this._handleFlowError(err));\n }\n\n // ─── Cancel ───────────────────────────────────────────────────────────────\n\n cancelLogin(): void {\n this._loginController?.abort();\n this._loginController = null;\n this._setAuthState({ step: 'idle' });\n }\n\n // ─── Logout ───────────────────────────────────────────────────────────────\n\n /**\n * Revoke the current session server-side, then clear local storage.\n *\n * Server revocation is best-effort: if the POST fails (offline, server\n * down), local state is wiped regardless. The orphan refresh token then\n * remains unused until its natural expiry. The in-flight access token\n * stays valid until its own TTL elapses (≤10 min for DPoP-bound tokens).\n *\n * Pass `everywhere: true` to revoke every active session for this user\n * across all devices.\n */\n async logout(options: { everywhere?: boolean } = {}): Promise<void> {\n if (!isClientRuntime) {\n warnServerSide('logout');\n return;\n }\n this._log.info('[PollarClient] Logout requested', { everywhere: !!options.everywhere });\n\n if (this._session?.token?.accessToken) {\n try {\n await this._api.POST('/auth/logout', {\n body: options.everywhere ? { everywhere: true } : {},\n });\n } catch (err) {\n this._log.warn('[PollarClient] Server logout failed (continuing with local clear)', err);\n }\n }\n\n try {\n await this._clearSession();\n } catch (err) {\n this._log.warn('[PollarClient] Local logout cleanup failed', err);\n }\n }\n\n /** Convenience: revoke every active session for this user (all devices). */\n logoutEverywhere(): Promise<void> {\n return this.logout({ everywhere: true });\n }\n\n /**\n * List active sessions for the authenticated user. Returns one entry per\n * refresh-token family with the metadata captured at issuance time. The\n * `current` flag identifies which entry corresponds to this client.\n */\n async listSessions(): Promise<SessionInfo[]> {\n if (!isClientRuntime) {\n warnServerSide('listSessions');\n return [];\n }\n if (!this._session?.token?.accessToken) {\n throw new Error('[PollarClient] listSessions requires an authenticated session');\n }\n const { data, error } = await this._api.GET('/auth/sessions');\n if (error || !data?.success) {\n throw new Error('[PollarClient] Failed to list sessions');\n }\n return data.content.sessions;\n }\n\n getSessionsState(): SessionsState {\n return this._sessionsState;\n }\n\n onSessionsStateChange(cb: (state: SessionsState) => void): () => void {\n this._sessionsStateListeners.add(cb);\n cb(this._sessionsState);\n return () => this._sessionsStateListeners.delete(cb);\n }\n\n /**\n * Fire-and-forget variant of {@link listSessions} that drives the observable\n * `SessionsState` store instead of returning the array. UI layers subscribe\n * via `onSessionsStateChange` and stay pure readers — mirrors `fetchTxHistory`.\n */\n async fetchSessions(): Promise<void> {\n this._setSessionsState({ step: 'loading' });\n try {\n const sessions = await this.listSessions();\n this._setSessionsState({ step: 'loaded', sessions });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load sessions';\n this._setSessionsState({ step: 'error', message });\n }\n }\n\n /**\n * Revoke a specific refresh-token family (a single device session). Use\n * `listSessions` to enumerate the familyIds. Revoking the current session\n * does NOT clear local state — call `logout()` for that case.\n */\n async revokeSession(familyId: string): Promise<void> {\n if (!isClientRuntime) {\n warnServerSide('revokeSession');\n return;\n }\n if (!this._session?.token?.accessToken) {\n throw new Error('[PollarClient] revokeSession requires an authenticated session');\n }\n const { error } = await this._api.DELETE('/auth/sessions/{familyId}', {\n params: { path: { familyId } },\n });\n if (error) {\n throw new Error('[PollarClient] Failed to revoke session');\n }\n }\n\n // ─── Network ──────────────────────────────────────────────────────────────\n\n getNetwork(): StellarNetwork {\n return this._networkState.step === 'connected' ? this._networkState.network : 'testnet';\n }\n\n getNetworkState(): NetworkState {\n return this._networkState;\n }\n\n /**\n * The client's level-gated logger (built from `logLevel` / `logger`). Exposed\n * so the runtime layer (`@pollar/react`) can route its own logs through the\n * same level and sink instead of calling `console` directly.\n */\n getLogger(): PollarLogger {\n return this._log;\n }\n\n setNetwork(network: StellarNetwork): void {\n this._setNetworkState({ step: 'connected', network });\n }\n\n onNetworkStateChange(cb: (state: NetworkState) => void): () => void {\n this._networkStateListeners.add(cb);\n cb(this._networkState);\n return () => this._networkStateListeners.delete(cb);\n }\n\n // ─── Transaction state ────────────────────────────────────────────────────\n\n getTransactionState(): TransactionState | null {\n return this._transactionState;\n }\n\n onTransactionStateChange(cb: (state: TransactionState) => void): () => void {\n this._transactionStateListeners.add(cb);\n if (this._transactionState) cb(this._transactionState);\n return () => this._transactionStateListeners.delete(cb);\n }\n\n // ─── Tx history ──────────────────────────────────────────────────────────\n\n getTxHistoryState(): TxHistoryState {\n return this._txHistoryState;\n }\n\n onTxHistoryStateChange(cb: (state: TxHistoryState) => void): () => void {\n this._txHistoryStateListeners.add(cb);\n cb(this._txHistoryState);\n return () => this._txHistoryStateListeners.delete(cb);\n }\n\n async fetchTxHistory(params: TxHistoryParams = {}): Promise<void> {\n this._setTxHistoryState({ step: 'loading', params });\n try {\n const { data, error } = await this._api.GET('/tx/history', { params: { query: params } });\n if (!error && data?.success && data.content) {\n this._setTxHistoryState({ step: 'loaded', params, data: data.content });\n } else {\n const message = (error as { message?: string } | undefined)?.message ?? 'Failed to load history';\n this._setTxHistoryState({ step: 'error', params, message });\n }\n } catch {\n this._setTxHistoryState({ step: 'error', params, message: 'Failed to load history' });\n }\n }\n\n // ─── Wallet balance ───────────────────────────────────────────────────────\n\n getWalletBalanceState(): WalletBalanceState {\n return this._walletBalanceState;\n }\n\n onWalletBalanceStateChange(cb: (state: WalletBalanceState) => void): () => void {\n this._walletBalanceStateListeners.add(cb);\n cb(this._walletBalanceState);\n return () => this._walletBalanceStateListeners.delete(cb);\n }\n\n /**\n * Refreshes the balances of the authenticated user's OWN wallet. The wallet\n * and network are resolved server-side from the session — no arguments. Drives\n * `walletBalanceState`. For an arbitrary wallet, use {@link getWalletBalance}.\n */\n async refreshBalance(): Promise<void> {\n if (!this._session?.wallet?.address) {\n this._setWalletBalanceState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setWalletBalanceState({ step: 'loading' });\n try {\n const { data, error } = await this._api.GET('/wallet/balance');\n if (!error && data?.success && data.content) {\n this._setWalletBalanceState({ step: 'loaded', data: data.content });\n } else {\n this._setWalletBalanceState({ step: 'error', message: 'Failed to load balance' });\n }\n } catch {\n this._setWalletBalanceState({ step: 'error', message: 'Failed to load balance' });\n }\n }\n\n /**\n * General-purpose balance lookup for ANY wallet on ANY network — not scoped\n * to this application. Enumerates the account's real on-chain holdings via\n * Horizon (server-side) and returns the data directly (no reactive state).\n * `network` defaults to the client's current network.\n */\n async getWalletBalance(publicKey: string, network?: StellarNetwork): Promise<WalletBalanceContent> {\n const { data, error } = await this._api.GET('/wallet/{publicKey}/balance', {\n params: { path: { publicKey }, query: { network: network ?? this.getNetwork() } },\n });\n if (error || !data?.success || !data.content) {\n throw new Error('[PollarClient] Failed to load wallet balance');\n }\n return data.content;\n }\n\n // ─── Enabled assets ───────────────────────────────────────────────────────\n\n getEnabledAssetsState(): EnabledAssetsState {\n return this._enabledAssetsState;\n }\n\n onEnabledAssetsStateChange(cb: (state: EnabledAssetsState) => void): () => void {\n this._enabledAssetsStateListeners.add(cb);\n cb(this._enabledAssetsState);\n return () => this._enabledAssetsStateListeners.delete(cb);\n }\n\n /**\n * Loads the application's enabled assets paired with the authenticated\n * wallet's on-chain trustline state — so the SDK knows which trustlines still\n * need to be added. Wallet and network are resolved server-side from the\n * session. Drives `enabledAssetsState`; mirrors {@link refreshBalance}.\n */\n async refreshAssets(): Promise<void> {\n if (!this._session?.wallet?.address) {\n this._setEnabledAssetsState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setEnabledAssetsState({ step: 'loading' });\n try {\n const { data, error } = await this._api.GET('/wallet/assets');\n if (!error && data?.success && data.content) {\n this._setEnabledAssetsState({ step: 'loaded', data: data.content });\n } else {\n this._setEnabledAssetsState({ step: 'error', message: 'Failed to load assets' });\n }\n } catch {\n this._setEnabledAssetsState({ step: 'error', message: 'Failed to load assets' });\n }\n }\n\n /**\n * Establishes (omit `limit`) or removes (`limit: '0'`) a trustline for an asset.\n *\n * Routing mirrors how the platform pays for the reserve:\n * - **Sponsored custodial** (`opts.sponsored` true, internal wallet) → the\n * server orchestrates a sponsored `changeTrust`: the app's wallets cover the\n * 0.5 XLM reserve and the fee, so the user pays nothing. Pass the asset's\n * `sponsored` flag (from {@link refreshAssets}) straight through.\n * - **Self-paid** (external/adapter wallet, sponsorship disabled, or a custom\n * asset not configured in the app) → a plain `change_trust` transaction the\n * user's own wallet signs and pays for, via {@link runTx}.\n *\n * Does not refresh on its own — callers should `refreshAssets()` afterwards.\n */\n async setTrustline(\n asset: { code: string; issuer: string },\n opts?: { limit?: string; sponsored?: boolean },\n ): Promise<TrustlineOutcome> {\n const limit = opts?.limit;\n const walletType = this._session?.wallet?.type;\n\n if (!this._session?.wallet?.address) {\n return { status: 'error', details: 'No wallet connected' };\n }\n if (walletType === 'smart') {\n // Passkey C-addresses hold SAC tokens — they don't use classic trustlines.\n return { status: 'error', details: 'Trustlines do not apply to smart wallets' };\n }\n\n // Sponsored custodial path: the platform co-signs and the app pays. Only an\n // app-configured asset on an internal (custodial) wallet qualifies — the\n // backend re-checks and 400s otherwise.\n if (opts?.sponsored && !this._walletAdapter && walletType === 'internal') {\n try {\n const { data, error } = await this._api.POST('/wallet/assets/trustline', {\n body: { code: asset.code, issuer: asset.issuer, ...(limit !== undefined && { limit }) },\n });\n if (!error && data?.success) {\n if (data.content) this._setEnabledAssetsState({ step: 'loaded', data: data.content });\n return { status: 'success' };\n }\n const details = (error as { details?: string; code?: string } | undefined)?.details ?? (error as { code?: string } | undefined)?.code;\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n // Self-paid path: the user's own wallet signs and covers the reserve + fee.\n // The backend's change_trust schema is a discriminated union on `type`, so\n // derive it from the code length (1–4 → alphanum4, 5–12 → alphanum12).\n return this.runTx('change_trust', {\n asset: {\n type: asset.code.length <= 4 ? 'credit_alphanum4' : 'credit_alphanum12',\n code: asset.code,\n issuer: asset.issuer,\n },\n ...(limit !== undefined && { limit }),\n } as TxBuildBody['params']);\n }\n\n // ─── Transactions ─────────────────────────────────────────────────────────\n\n /**\n * Builds an unsigned XDR. Drives `_setTransactionState` for modal-style UIs\n * AND returns a {@link BuildOutcome} so headless callers can `await` and\n * inspect the result without subscribing to state changes.\n */\n async buildTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<BuildOutcome> {\n if (!this._session?.wallet?.address) {\n const details = 'No wallet connected';\n this._setTransactionState({ step: 'error', phase: 'building', details });\n return { status: 'error', details };\n }\n\n const body = {\n network: this.getNetwork(),\n address: this._session.wallet.address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody;\n\n try {\n this._setTransactionState({ step: 'building' });\n const { data, error } = await this._api.POST('/tx/build', { body });\n if (!error && data?.success && data.content) {\n this._setTransactionState({ step: 'built', buildData: data.content });\n return { status: 'built', buildData: data.content };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', phase: 'building', ...(details && { details }) });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n this._log.error('[PollarClient] buildTx failed', err);\n this._setTransactionState({ step: 'error', phase: 'building' });\n return { status: 'error' };\n }\n }\n\n getWalletType(): WalletId | null {\n return this._walletAdapter?.type ?? null;\n }\n\n /**\n * Signs the given unsigned XDR and returns the signed XDR.\n *\n * - External wallets: signs locally via the wallet adapter.\n * - Custodial wallets: posts to `/tx/sign`. The backend signs (through\n * wallet-service or the app's customer-managed adapter) and returns the\n * signed XDR plus an `idempotencyKey` the caller should echo back to\n * `submitTx`.\n *\n * Drives `_setTransactionState`: emits `signing` while in flight and\n * `signed` on success (or `error[phase: 'signing']` on failure). `buildData`\n * is threaded through if the consumer previously called `buildTx`.\n */\n async signTx(unsignedXdr: string): Promise<SignOutcome> {\n const buildData = this._currentBuildData();\n this._setTransactionState({ step: 'signing', ...(buildData && { buildData }) });\n\n if (this._walletAdapter) {\n const accountToSign = this._session?.wallet?.address;\n const signOpts = accountToSign\n ? { networkPassphrase: this._networkPassphrase(), accountToSign }\n : { networkPassphrase: this._networkPassphrase() };\n try {\n const { signedTxXdr } = await this._walletAdapter.signTransaction(unsignedXdr, signOpts);\n this._setTransactionState({\n step: 'signed',\n signedXdr: signedTxXdr,\n ...(buildData && { buildData }),\n });\n return { status: 'signed', signedXdr: signedTxXdr };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n // Custodial path: backend signs and returns the XDR + idempotencyKey.\n const address = this._session?.wallet?.address ?? '';\n try {\n const { data, error } = await this._api.POST('/tx/sign', {\n body: { network: this.getNetwork(), address, unsignedXdr },\n });\n if (!error && data?.success && data.content?.signedXdr) {\n const { signedXdr, idempotencyKey } = data.content;\n this._setTransactionState({\n step: 'signed',\n signedXdr,\n submissionToken: idempotencyKey,\n ...(buildData && { buildData }),\n });\n return { status: 'signed', signedXdr, submissionToken: idempotencyKey };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n /**\n * Submits a signed XDR via `/tx/submit` regardless of wallet type\n * (custodial or external). Routing through sdk-api gives us:\n * - End-to-end tx_records persistence with full phase lifecycle so the\n * developer dashboard can show every tx (both custodial and external\n * wallet flows) at `/apps/:id/monitor/transactions`.\n * - Idempotency tracking via `submissionToken` (returned by `signTx`).\n * - A single response shape (SUCCESS / PENDING / FAILED) shared by both\n * flows — previously external wallets could only return SUCCESS or\n * error since the direct-to-Horizon path was synchronous.\n *\n * The extra hop adds ~50–150 ms vs. the legacy direct-Horizon path; the\n * persistence + observability win is worth it.\n *\n * Drives `_setTransactionState`: emits `submitting` while in flight,\n * `submitted` on Horizon ack (pending), `success` on ledger confirmation,\n * or `error[phase: 'submitting']` on failure.\n */\n async submitTx(signedXdr: string, opts?: { submissionToken?: string }): Promise<SubmitOutcome> {\n const buildData = this._currentBuildData();\n const outcomeExtra: { buildData?: TxBuildContent } = buildData ? { buildData } : {};\n this._setTransactionState({ step: 'submitting', signedXdr, ...(buildData && { buildData }) });\n\n const address = this._session?.wallet?.address ?? '';\n try {\n const { data, error } = await this._api.POST('/tx/submit', {\n body: {\n network: this.getNetwork(),\n address,\n signedXdr,\n ...(opts?.submissionToken && { idempotencyKey: opts.submissionToken }),\n },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, ...(buildData && { buildData }) });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, ...(buildData && { buildData }) });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(resultCode && { details: resultCode }),\n });\n return {\n status: 'error',\n hash,\n ...outcomeExtra,\n ...(resultCode && { details: resultCode, resultCode }),\n };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n /**\n * Signs and submits in one logical step. Returns a {@link SubmitOutcome}.\n *\n * - **External wallets**: composes `signTx` + `submitTx` client-side. State\n * machine sees the full granular sequence `signing → signed → submitting\n * → success` because the underlying methods each emit.\n * - **Custodial wallets**: atomic `/tx/sign-and-send` round-trip. State\n * machine emits the compound `signing-submitting` step (the SDK can't\n * observe when one phase ends and the next begins inside that single\n * backend call) and then transitions to `submitted` (Horizon ack only) or\n * `success` (ledger-confirmed), or `error[phase: 'signing-submitting']`.\n */\n async signAndSubmitTx(unsignedXdr?: string): Promise<SubmitOutcome> {\n // Smart wallet: there is no unsigned XDR — sign the prepared auth digest\n // with the passkey and submit, using the build already on the state machine.\n if (this._session?.wallet?.type === 'smart') {\n const buildData = this._currentBuildData();\n if (!buildData?.smart) {\n const details = 'no prepared smart transaction; call buildTx first';\n this._setTransactionState({ step: 'error', phase: 'signing', details });\n return { status: 'error', details };\n }\n return this._signSubmitSmart(buildData);\n }\n\n if (!unsignedXdr) {\n this._setTransactionState({ step: 'error', phase: 'signing', details: 'missing unsigned transaction' });\n return { status: 'error', details: 'missing unsigned transaction' };\n }\n\n if (this._walletAdapter) {\n // External — the composed signTx+submitTx already emit the granular\n // state-machine sequence. We just pass outcomes through.\n const signed = await this.signTx(unsignedXdr);\n if (signed.status === 'error') {\n const buildData = this._currentBuildData();\n return {\n status: 'error',\n ...(buildData && { buildData }),\n ...(signed.details && { details: signed.details }),\n };\n }\n return this.submitTx(signed.signedXdr);\n }\n\n // Custodial — atomic single backend call. Compound state.\n const buildData = this._currentBuildData();\n const outcomeExtra: { buildData?: TxBuildContent } = buildData ? { buildData } : {};\n\n this._setTransactionState({ step: 'signing-submitting', ...(buildData && { buildData }) });\n\n const body: TxSignAndSendBody = {\n network: this.getNetwork(),\n address: this._session?.wallet?.address ?? '',\n unsignedXdr,\n };\n try {\n const { data, error } = await this._api.POST('/tx/sign-and-send', { body });\n if (!error && data?.success && data.content?.hash) {\n const {\n hash,\n status: backendStatus,\n resultCode,\n } = data.content as {\n hash: string;\n status: 'SUCCESS' | 'FAILED' | 'PENDING';\n resultCode?: string;\n };\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, ...(buildData && { buildData }) });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, ...(buildData && { buildData }) });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n // backendStatus === 'FAILED'\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(resultCode && { details: resultCode }),\n });\n return {\n status: 'error',\n hash,\n ...outcomeExtra,\n ...(resultCode && { details: resultCode, resultCode }),\n };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'signing-submitting',\n ...(buildData && { buildData }),\n ...(details && { details }),\n });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n /**\n * One-shot: build → sign → submit, returning the final {@link SubmitOutcome}.\n *\n * - **External wallets**: composes `buildTx` + `signAndSubmitTx` client-side.\n * State machine sees the full granular sequence (`building → built →\n * signing → signed → submitting → success`) because each composed call\n * emits its own transitions.\n * - **Custodial wallets**: single round-trip to `/tx/build-sign-submit`. The\n * signed XDR never leaves the backend. State machine emits the compound\n * `building-signing-submitting` step (the SDK can't observe individual\n * phase boundaries inside one atomic call) and then transitions to\n * `submitted` / `success` / `error[phase: 'building-signing-submitting']`.\n *\n * If you need granular UI feedback for custodial flows (separate\n * \"Building…\", \"Signing…\", \"Submitting…\" indicators), call `buildTx`,\n * `signTx`, and `submitTx` separately instead.\n */\n async buildAndSignAndSubmitTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n // Smart wallet (passkey / C-address): build (prepare) → sign the auth digest\n // with the passkey → submit. The signed entry is assembled server-side.\n if (this._session?.wallet?.type === 'smart') {\n return this._runSmartTx(operation, params, options);\n }\n\n if (this._walletAdapter) {\n const built = await this.buildTx(operation, params, options);\n if (built.status === 'error') {\n return { status: 'error', ...(built.details && { details: built.details }) };\n }\n if (!built.buildData.unsignedXdr) {\n return { status: 'error', details: 'build returned no unsigned transaction' };\n }\n return this.signAndSubmitTx(built.buildData.unsignedXdr);\n }\n\n // Custodial path — single backend call, compound state-machine step.\n if (!this._session?.wallet?.address) {\n this._setTransactionState({ step: 'error', phase: 'building-signing-submitting', details: 'No wallet connected' });\n return { status: 'error', details: 'No wallet connected' };\n }\n this._setTransactionState({ step: 'building-signing-submitting' });\n try {\n const { data, error } = await this._api.POST('/tx/build-sign-submit', {\n body: {\n network: this.getNetwork(),\n address: this._session.wallet.address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody & { idempotencyKey?: string },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash });\n return { status: 'success', hash };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash });\n return { status: 'pending', hash };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(resultCode && { details: resultCode }),\n });\n return { status: 'error', hash, ...(resultCode && { details: resultCode, resultCode }) };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({\n step: 'error',\n phase: 'building-signing-submitting',\n ...(details && { details }),\n });\n return { status: 'error', ...(details && { details }) };\n }\n }\n\n /** Alias for {@link buildAndSignAndSubmitTx} — shorter \"just do the thing\" name. */\n async runTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n return this.buildAndSignAndSubmitTx(operation, params, options);\n }\n\n /**\n * Smart-wallet (passkey / C-address) transaction: build (server prepares the\n * SAC transfer + returns the auth digest) → sign the digest with the passkey\n * → submit (server assembles the signed auth entry and broadcasts; the\n * sponsor pays the fee). State machine: building → built → signing →\n * submitting → success.\n */\n private async _runSmartTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<SubmitOutcome> {\n const address = this._session?.wallet?.address;\n if (!address) {\n this._setTransactionState({ step: 'error', phase: 'building', details: 'No wallet connected' });\n return { status: 'error', details: 'No wallet connected' };\n }\n if (!this._passkeySign) {\n const details = 'Passkey signer not configured';\n this._setTransactionState({ step: 'error', phase: 'signing', details });\n return { status: 'error', details };\n }\n\n // 1. Build (prepare) — returns the auth digest to sign, not an unsigned XDR.\n this._setTransactionState({ step: 'building' });\n let buildData: TxBuildContent;\n try {\n const body = {\n network: this.getNetwork(),\n address,\n operation,\n params,\n options: options ?? {},\n } as TxBuildBody;\n const { data, error } = await this._api.POST('/tx/build', { body });\n if (error || !data?.success || !data.content?.smart) {\n const details = (error as { details?: string } | undefined)?.details ?? 'Failed to build transaction';\n this._setTransactionState({ step: 'error', phase: 'building', details });\n return { status: 'error', details };\n }\n buildData = data.content;\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'building', ...(details && { details }) });\n return { status: 'error', ...(details && { details }) };\n }\n this._setTransactionState({ step: 'built', buildData });\n\n return this._signSubmitSmart(buildData);\n }\n\n /**\n * Steps 2–3 of the smart-wallet flow: sign the prepared auth digest with the\n * passkey, then submit. Shared by `_runSmartTx` (atomic) and `signAndSubmitTx`\n * (split flow, when a smart build is already on the state machine).\n */\n private async _signSubmitSmart(buildData: TxBuildContent): Promise<SubmitOutcome> {\n const address = this._session?.wallet?.address;\n const smart = buildData.smart;\n if (!address || !smart) {\n const details = 'no prepared smart transaction';\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, details });\n return { status: 'error', buildData, details };\n }\n if (!this._passkeySign) {\n const details = 'Passkey signer not configured';\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, details });\n return { status: 'error', buildData, details };\n }\n\n // 2. Sign the auth digest with the passkey (biometric prompt).\n this._setTransactionState({ step: 'signing', buildData });\n let assertion: Awaited<ReturnType<PasskeySigner>>;\n try {\n assertion = await this._passkeySign({ credentialId: smart.credentialId, challenge: smart.digest });\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'signing', buildData, ...(details && { details }) });\n return { status: 'error', buildData, ...(details && { details }) };\n }\n\n // 3. Submit — server assembles the signed auth entry and broadcasts.\n this._setTransactionState({ step: 'submitting', buildData });\n const outcomeExtra: { buildData: TxBuildContent } = { buildData };\n try {\n const { data, error } = await this._api.POST('/tx/submit', {\n body: {\n network: this.getNetwork(),\n address,\n smart: { entryXdr: smart.entryXdr, funcXdr: smart.funcXdr, assertion },\n },\n });\n if (!error && data?.success && data.content) {\n const { hash, status: backendStatus, resultCode } = data.content;\n if (backendStatus === 'SUCCESS') {\n this._setTransactionState({ step: 'success', hash, buildData });\n return { status: 'success', hash, ...outcomeExtra };\n }\n if (backendStatus === 'PENDING') {\n this._setTransactionState({ step: 'submitted', hash, buildData });\n return { status: 'pending', hash, ...outcomeExtra };\n }\n this._setTransactionState({\n step: 'error',\n phase: 'submitting',\n buildData,\n ...(resultCode && { details: resultCode }),\n });\n return { status: 'error', hash, ...outcomeExtra, ...(resultCode && { details: resultCode, resultCode }) };\n }\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', phase: 'submitting', buildData, ...(details && { details }) });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n } catch (err) {\n const details = err instanceof Error ? err.message : undefined;\n this._setTransactionState({ step: 'error', phase: 'submitting', buildData, ...(details && { details }) });\n return { status: 'error', ...outcomeExtra, ...(details && { details }) };\n }\n }\n\n // ─── App config ───────────────────────────────────────────────────────────\n\n async getAppConfig(): Promise<unknown> {\n try {\n const { data, error } = await this._api.GET('/applications/config');\n if (!data || error) return null;\n return data.content;\n } catch {\n return null;\n }\n }\n\n // ─── KYC ──────────────────────────────────────────────────────────────────\n\n getKycStatus(providerId?: string) {\n return getKycStatus(this._api, providerId);\n }\n\n getKycProviders(country: string) {\n return getKycProviders(this._api, country);\n }\n\n startKyc(body: KycStartBody): Promise<KycStartResponse> {\n return startKyc(this._api, body);\n }\n\n resolveKyc(providerId: string, level?: KycLevel) {\n return resolveKyc(this._api, providerId, level);\n }\n\n pollKycStatus(providerId: string, opts?: { intervalMs?: number; timeoutMs?: number }): Promise<KycStatus> {\n return pollKycStatus(this._api, providerId, opts);\n }\n\n // ─── Ramps ────────────────────────────────────────────────────────────────\n\n getRampsQuote(query: RampsQuoteQuery): Promise<RampsQuoteResponse> {\n return getRampsQuote(this._api, query);\n }\n\n createOnRamp(body: RampsOnrampBody): Promise<RampsOnrampResponse> {\n return createOnRamp(this._api, body);\n }\n\n createOffRamp(body: RampsOfframpBody): Promise<RampsOfframpResponse> {\n return createOffRamp(this._api, body);\n }\n\n getRampTransaction(txId: string): Promise<RampsTransactionResponse> {\n return getRampTransaction(this._api, txId);\n }\n\n pollRampTransaction(txId: string, opts?: { intervalMs?: number; timeoutMs?: number }): Promise<RampTxStatus> {\n return pollRampTransaction(this._api, txId, opts);\n }\n\n // ─── Distribution ─────────────────────────────────────────────────────────\n\n listDistributionRules(): Promise<DistributionRule[]> {\n return listDistributionRules(this._api);\n }\n\n claimDistributionRule(body: DistributionClaimBody): Promise<DistributionClaimContent> {\n return claimDistributionRule(this._api, body);\n }\n\n private _setTxHistoryState(next: TxHistoryState): void {\n this._txHistoryState = next;\n for (const cb of this._txHistoryStateListeners) cb(next);\n }\n\n private _setSessionsState(next: SessionsState): void {\n this._sessionsState = next;\n for (const cb of this._sessionsStateListeners) cb(next);\n }\n\n private _setWalletBalanceState(next: WalletBalanceState): void {\n this._walletBalanceState = next;\n for (const cb of this._walletBalanceStateListeners) cb(next);\n }\n\n private _setEnabledAssetsState(next: EnabledAssetsState): void {\n this._enabledAssetsState = next;\n for (const cb of this._enabledAssetsStateListeners) cb(next);\n }\n\n // ─── Private ──────────────────────────────────────────────────────────────\n\n private _newController(): AbortController {\n this._loginController?.abort();\n this._loginController = new AbortController();\n return this._loginController;\n }\n\n private _flowDeps(signal: AbortSignal) {\n return {\n api: this._api,\n logger: this._log,\n basePath: this.basePath,\n // SSE status streaming works on web; React Native's `fetch` has no\n // readable `response.body`, so those clients poll the non-streaming\n // status endpoint instead. `isBrowser` is false in RN and SSR alike.\n useStreaming: isBrowser,\n signal,\n setAuthState: this._setAuthState.bind(this),\n storeSession: this._storeSession.bind(this),\n clearSession: this._clearSession.bind(this),\n getPublicJwk: () => this._keyManager.getPublicJwk(),\n resolveWalletAdapter: (id: WalletId) => this._resolveWalletAdapter(id),\n storeWalletAdapter: async (adapter: WalletAdapter, id: WalletId) => {\n this._walletAdapter = adapter;\n await writeWalletType(this._storage, this.apiKeyHash, id);\n },\n ...(this._passkey ? { passkey: this._passkey } : {}),\n ...(this._deviceLabel ? { deviceLabel: this._deviceLabel } : {}),\n };\n }\n\n /**\n * Resolves a wallet adapter for the requested id. Uses the consumer's\n * injected `walletAdapter` resolver when present; otherwise falls back to\n * the built-in `FreighterAdapter` / `AlbedoAdapter`. Throws if the id is\n * unknown and no resolver is configured.\n */\n private async _resolveWalletAdapter(id: WalletId): Promise<WalletAdapter> {\n if (this._walletAdapterResolver) {\n // Race the resolver against a timeout. A broken extension bridge can\n // leave `walletAdapterResolver()` pending forever; without this the\n // entire login flow would hang with no signal to the consumer. The\n // resolver only constructs the adapter object (not the user-facing\n // approval), so 5s is generous.\n const timeoutMs = this._walletResolverTimeoutMs;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n reject(\n Object.assign(new Error(`[PollarClient] Wallet adapter resolver for \"${id}\" timed out after ${timeoutMs}ms`), {\n code: AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT,\n }),\n );\n }, timeoutMs);\n });\n try {\n return await Promise.race([Promise.resolve(this._walletAdapterResolver(id)), timeoutPromise]);\n } finally {\n if (timeoutHandle !== undefined) clearTimeout(timeoutHandle);\n }\n }\n if (id === WalletType.FREIGHTER) return new FreighterAdapter();\n if (id === WalletType.ALBEDO) return new AlbedoAdapter(this.getNetwork() === 'mainnet' ? 'public' : 'testnet');\n throw new Error(\n `[PollarClient] No wallet adapter configured for \"${id}\". Pass a walletAdapter resolver in PollarClientConfig.`,\n );\n }\n\n private _handleFlowError(error: unknown): void {\n if (error instanceof Error && error.name === 'AbortError') {\n this._log.debug('[PollarClient] Login cancelled');\n this._setAuthState({ step: 'idle' });\n return;\n }\n if (error instanceof Error && (error as { code?: string }).code === AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT) {\n this._log.error('[PollarClient]', error.message);\n this._setAuthState({\n step: 'error',\n previousStep: this._authState.step,\n message: error.message,\n errorCode: AUTH_ERROR_CODES.WALLET_RESOLVER_TIMEOUT,\n });\n return;\n }\n this._log.error('[PollarClient] Unexpected error in auth flow', error);\n this._setAuthState({\n step: 'error',\n previousStep: this._authState.step,\n message: 'An unexpected error occurred',\n errorCode: AUTH_ERROR_CODES.UNEXPECTED_ERROR,\n });\n }\n\n private async _restoreSession(): Promise<void> {\n this._session = await readStorage(this._storage, this.apiKeyHash, this._log);\n if (this._session) {\n const storedType = await readWalletType(this._storage, this.apiKeyHash);\n if (storedType) {\n try {\n this._walletAdapter = await this._resolveWalletAdapter(storedType);\n } catch (err) {\n // No resolver knows this id (e.g. user removed the kit-adapter\n // package). Session stays valid; signing will fall back to the\n // server-side custodial path until the user reconnects a wallet.\n this._log.warn('[PollarClient] Could not restore wallet adapter for stored id', { id: storedType, err });\n }\n }\n this._log.info('[PollarClient] Session restored from storage');\n // Emit through the setter so listeners that subscribe after\n // _initialize() resolves still get notified. A direct assignment to\n // _authState would race past any onAuthStateChange subscription that\n // hasn't run yet (e.g. PollarProvider's useEffect).\n // Optimistic: storage is trusted enough to show `authenticated`, but the\n // server hasn't confirmed the session is still alive (it may have been\n // revoked elsewhere), so `verified: false`.\n this._setAuthState({ step: 'authenticated', session: this._session, verified: false });\n this._scheduleNextRefresh();\n // Fire-and-forget: revalidate + repopulate the profile in the background.\n // Deliberately NOT awaited so `_initialized` resolves immediately and the\n // UI never blocks on a network round-trip at startup.\n void this._resume();\n } else {\n this._log.info('[PollarClient] No session in storage');\n // Another tab (or this one) wiped the session key. If we were\n // authenticated, propagate the logout: tear down in-memory state, the\n // refresh timer and DPoP keys, and emit `idle`. Guarded so the cold-start\n // call (step already `idle`) is a no-op and we never recurse — the\n // `removeStorage` inside `_clearSession` targets an already-removed key.\n if (this._authState.step !== 'idle') {\n await this._clearSession();\n }\n }\n }\n\n /**\n * Validate the restored session against the server and repopulate the\n * in-memory profile (PII is never persisted, so it's null after a cold\n * reload). Goes through the normal authed client, so it coalesces with any\n * in-flight refresh (onRequest awaits `_refreshPromise`) and, being a GET,\n * is auto-retried after a 401-triggered refresh.\n *\n * - 200 → store profile, mark the session `verified`.\n * - 401 → the refresh-on-401 path already ran; if the family was\n * revoked, refresh failed and `_clearSession()` took us to\n * idle. Nothing to do here — don't double-handle.\n * - network error → stay optimistic (do NOT log out); revalidated later on\n * `visibilitychange` or first use.\n */\n private async _resume(): Promise<void> {\n if (!this._session) return;\n this._resumeController?.abort();\n const controller = new AbortController();\n this._resumeController = controller;\n try {\n const { data, error } = await this._api.GET('/auth/session/resume', { signal: controller.signal });\n if (error || !data) return;\n const content = (data as { content?: PollarUserProfile }).content;\n if (!content || !this._session) return;\n this._profile = { ...content };\n this._setAuthState({ step: 'authenticated', session: this._session, verified: true });\n } catch (err) {\n if ((err as { name?: string })?.name === 'AbortError') return;\n // Network failure — keep the optimistic (unverified) session and retry\n // when the app next becomes visible or on the next authed request.\n this._log.warn('[PollarClient] resume failed (network); will retry', err);\n } finally {\n if (this._resumeController === controller) this._resumeController = null;\n }\n }\n\n private async _storeSession(session: PollarApplicationConfigContent): Promise<void> {\n this._log.info('[PollarClient] Session stored');\n\n const w = session.wallet;\n const persisted: PollarPersistedSession = {\n clientSessionId: session.clientSessionId,\n userId: session.userId ?? null,\n status: session.status,\n token: session.token,\n user: session.user,\n // The wire response still carries the legacy `publicKey` alias (kept for\n // older SDKs); the persisted session standardizes on `address` only.\n // The wire also still emits the legacy type `'custodial'` (unchanged for\n // SDKs ≤0.8.x); we remap it to `'internal'` here so the SDK surface and\n // persisted session speak one vocabulary while the wire stays compatible.\n wallet: {\n type: w.type === 'custodial' ? 'internal' : w.type,\n address: w.address ?? w.publicKey ?? null,\n ...(w.existsOnStellar !== undefined ? { existsOnStellar: w.existsOnStellar } : {}),\n ...(w.createdAt !== undefined ? { createdAt: w.createdAt } : {}),\n ...(w.linkedAt !== undefined ? { linkedAt: w.linkedAt } : {}),\n ...(w.network !== undefined ? { network: w.network } : {}),\n ...(w.deployTxHash !== undefined ? { deployTxHash: w.deployTxHash } : {}),\n },\n };\n this._session = persisted;\n\n if (session.data) {\n this._profile = {\n mail: session.data.mail,\n first_name: session.data.first_name,\n last_name: session.data.last_name,\n avatar: session.data.avatar,\n providers: session.data.providers,\n };\n }\n\n await writeStorage(this._storage, this.apiKeyHash, persisted);\n // Fresh login/refresh response came straight from the server, so the\n // session is already server-validated → `verified: true`.\n this._setAuthState({ step: 'authenticated', session: persisted, verified: true });\n this._scheduleNextRefresh();\n }\n\n private async _clearSession(): Promise<void> {\n this._log.info('[PollarClient] Session cleared');\n this._clearRefreshTimer();\n this._session = null;\n this._profile = null;\n this._walletAdapter = null;\n this._dpopNonce = null;\n try {\n await this._keyManager.reset();\n } catch (err) {\n this._log.warn('[PollarClient] KeyManager reset failed during clearSession', err);\n }\n await removeStorage(this._storage, this.apiKeyHash);\n this._transactionState = null;\n this._setAuthState({ step: 'idle' });\n }\n\n private _networkPassphrase(): string {\n return this.getNetwork() === 'mainnet'\n ? 'Public Global Stellar Network ; September 2015'\n : 'Test SDF Network ; September 2015';\n }\n\n private _setNetworkState(next: NetworkState): void {\n this._networkState = next;\n const label = next.step === 'connected' ? next.network : next.step;\n this._log.debug(`[PollarClient] network:${label}`);\n for (const cb of this._networkStateListeners) cb(next);\n }\n\n private _setAuthState(next: AuthState): void {\n this._authState = next;\n this._log.debug(`[PollarClient] auth:${next.step}`);\n for (const cb of this._authStateListeners) cb(next);\n }\n\n private _setTransactionState(next: TransactionState): void {\n this._transactionState = next;\n this._log.debug(`[PollarClient] transaction:${next.step}`);\n for (const cb of this._transactionStateListeners) cb(next);\n }\n\n /**\n * Threads `buildData` through state transitions. When the user has already\n * called `buildTx`, every subsequent state (signing, signed, submitting,\n * submitted, success, error) should carry the build summary so modal UIs\n * can keep showing \"Send 5 USDC to G...\" through the whole flow.\n */\n private _currentBuildData(): TxBuildContent | undefined {\n const s = this._transactionState;\n if (!s) return undefined;\n if ('buildData' in s && s.buildData) return s.buildData;\n return undefined;\n }\n}\n","export type StellarNetwork = 'mainnet' | 'testnet';\n\nconst HORIZON_URLS: Record<StellarNetwork, string> = {\n mainnet: 'https://horizon.stellar.org',\n testnet: 'https://horizon-testnet.stellar.org',\n};\n\nexport type StellarClientConfig = StellarNetwork | { horizonUrl: string };\n\nexport interface StellarBalance {\n asset: string;\n balance: string;\n assetIssuer?: string;\n}\n\nexport class StellarClient {\n private readonly horizonUrl: string;\n\n constructor(config: StellarClientConfig) {\n this.horizonUrl = typeof config === 'string' ? HORIZON_URLS[config] : config.horizonUrl;\n }\n\n async submitTransaction(signedXdr: string): Promise<{ success: true; hash: string } | { success: false; errorCode: string }> {\n try {\n const response = await fetch(`${this.horizonUrl}/transactions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ tx: signedXdr }),\n });\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as { extras?: { result_codes?: { transaction?: string } } };\n return { success: false, errorCode: body.extras?.result_codes?.transaction ?? 'HORIZON_ERROR' };\n }\n const data = (await response.json()) as { hash: string };\n return { success: true, hash: data.hash };\n } catch {\n return { success: false, errorCode: 'NETWORK_ERROR' };\n }\n }\n}\n","// Web/Node/Workers entry point. Registers a `WebCryptoKeyManager`-only\n// factory at module load so `PollarClient` resolves the WebCrypto-backed\n// manager without importing `NobleKeyManager` (and transitively\n// `@noble/curves`). Bundlers targeting browsers pick this entry via the\n// default `\"import\"` / `\"require\"` conditions in `package.json#exports` and\n// produce a noble-free bundle.\n//\n// React Native applications resolve `index.rn.ts` instead via the\n// `\"react-native\"` condition.\n\nimport { _setDefaultKeyManagerFactory } from './keys/factory';\nimport { WebCryptoKeyManager } from './keys/web-crypto';\n\n_setDefaultKeyManagerFactory((_storage, apiKey) => new WebCryptoKeyManager(apiKey));\n\nexport * from './public';\n"]}