@pollar/core 0.5.3 → 0.7.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","../../../node_modules/openapi-fetch/src/index.js","../src/api/client.ts","../src/api/endpoints/kyc.ts","../src/api/endpoints/ramps.ts","../src/stellar/StellarClient.ts","../src/types.ts","../src/wallets/FreighterAdapter.ts","../src/wallets/types.ts","../src/wallets/AlbedoAdapter.ts","../src/client/session.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/walletFlow.ts","../src/client/client.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","fetch","final","joiner","WalletType"],"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","// 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}","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)?.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)?.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)?.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)?.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)?.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)?.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)?.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","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","import { pollarPaths, StellarNetwork } from './index';\nimport { WalletType } from './wallets';\n\nexport type PollarApplicationConfigResponse =\n pollarPaths['/auth/login']['post']['responses'][200]['content']['application/json'];\nexport type PollarApplicationConfigContent = PollarApplicationConfigResponse['content'];\n\nexport interface PollarClientConfig {\n stellarNetwork?: StellarNetwork;\n baseUrl?: string;\n apiKey: string;\n}\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\nexport type PollarLoginOptions =\n | { provider: 'google' }\n | { provider: 'github' }\n | { provider: 'email'; email: string }\n | { provider: 'wallet'; type: WalletType };\n\nexport type TxBuildContent = TxBuildResponse['content'];\n\nexport type TransactionState =\n | { step: 'idle' }\n | { step: 'building' }\n | { step: 'built'; buildData: TxBuildContent }\n | { step: 'signing'; buildData?: TxBuildContent; external?: true }\n | { step: 'success'; buildData?: TxBuildContent; hash: string; external?: true }\n | { step: 'error'; details?: string; buildData?: TxBuildContent; external?: true };\n\nexport const AUTH_ERROR_CODES = {\n SESSION_CREATE_FAILED: 'SESSION_CREATE_FAILED',\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 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: WalletType }\n | { step: 'wallet_not_installed'; walletType: WalletType }\n | { step: 'authenticating_wallet' }\n | { step: 'authenticating' }\n | { step: 'authenticated'; session: PollarApplicationConfigContent }\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// ─── 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 =\n 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// ─── Adapter types ────────────────────────────────────────────────────────────\n\nexport type EscrowFn<TParams = unknown> = (params: TParams) => Promise<{ unsignedTransaction: string }>;\n\nexport type EscrowAdapter = Record<string, EscrowFn<any>>;\n\nexport interface PollarAdapters {\n [key: string]: EscrowAdapter;\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, publicKey: 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\nexport interface ConnectWalletResponse {\n address: string;\n publicKey: 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: WalletType;\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","// 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\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(() => reject(new Error('Albedo response timeout')), 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\nfunction waitForAlbedoResult(): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Albedo response timeout')), 2 * 60 * 1000);\n\n const parseResult = () => {\n const params = new URLSearchParams(window.location.search);\n if (!params.has('pubkey') && !params.has('signed_envelope_xdr') && !params.has('signed_xdr')) return;\n\n clearTimeout(timeout);\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n window.history.replaceState({}, document.title, window.location.pathname);\n resolve(result);\n };\n\n parseResult();\n window.addEventListener('popstate', parseResult);\n });\n}\n\nexport class AlbedoAdapter implements WalletAdapter {\n readonly type = WalletType.ALBEDO;\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', 'testnet');\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, publicKey: 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', 'testnet');\n url.searchParams.set('callback', window.location.href);\n url.searchParams.set('origin', window.location.origin);\n\n window.location.href = url.toString();\n const result = await waitForAlbedoResult();\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', 'testnet');\n url.searchParams.set('callback', window.location.href);\n url.searchParams.set('origin', window.location.origin);\n\n window.location.href = url.toString();\n const result = await waitForAlbedoResult();\n\n if (!result.signed_xdr) throw new Error('Albedo auth entry signing rejected');\n return { signedAuthEntry: result.signed_xdr };\n }\n}","import { PollarApplicationConfigContent } from '../types';\n\nexport const STORAGE_KEY = 'pollar:session';\nexport const WALLET_TYPE_KEY = 'pollar:walletType';\n\nexport function isValidSession(value: unknown): value is PollarApplicationConfigContent {\n if (typeof value !== 'object' || value === null) {\n console.warn('[PollarClient:session] Invalid session — value is not an object');\n return false;\n }\n\n const s = value as Record<string, unknown>;\n\n // clientSessionId: string\n if (typeof s['clientSessionId'] !== 'string' || s['clientSessionId'] === '') {\n console.warn('[PollarClient:session] Invalid session — clientSessionId missing or empty');\n return false;\n }\n\n // userId: string | null (required, explicitly null or string)\n if (s['userId'] !== null && typeof s['userId'] !== 'string') {\n console.warn('[PollarClient:session] Invalid session — userId must be string or null, got:', typeof s['userId']);\n return false;\n }\n\n // status: string\n if (typeof s['status'] !== 'string') {\n console.warn('[PollarClient:session] Invalid session — status must be string, got:', typeof s['status']);\n return false;\n }\n\n // token: { accessToken: string, refreshToken: string, expiresAt: number }\n const token = s['token'];\n if (typeof token !== 'object' || token === null) {\n console.warn('[PollarClient:session] Invalid session — token missing or not an object');\n return false;\n }\n const t = token as Record<string, unknown>;\n if (typeof t['accessToken'] !== 'string' || t['accessToken'] === '') {\n console.warn('[PollarClient:session] Invalid session — token.accessToken missing or empty');\n return false;\n }\n if (typeof t['refreshToken'] !== 'string' || t['refreshToken'] === '') {\n console.warn('[PollarClient:session] Invalid session — token.refreshToken missing or empty');\n return false;\n }\n if (typeof t['expiresAt'] !== 'number' || !Number.isFinite(t['expiresAt'])) {\n console.warn('[PollarClient:session] Invalid session — token.expiresAt must be a finite number');\n return false;\n }\n\n // user: { id?: string, ready: boolean }\n const user = s['user'];\n if (typeof user !== 'object' || user === null) {\n console.warn('[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 && typeof u['id'] !== 'string') {\n console.warn('[PollarClient:session] Invalid session — user.id must be string if present, got:', typeof u['id']);\n return false;\n }\n if (typeof u['ready'] !== 'boolean') {\n console.warn('[PollarClient:session] Invalid session — user.ready must be boolean, got:', typeof u['ready']);\n return false;\n }\n\n // wallet: { publicKey: string | null, existsOnStellar?: boolean, createdAt?: number }\n const wallet = s['wallet'];\n if (typeof wallet !== 'object' || wallet === null) {\n console.warn('[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['publicKey'] !== null && typeof w['publicKey'] !== 'string') {\n console.warn(\n '[PollarClient:session] Invalid session — wallet.publicKey must be string or null, got:',\n typeof w['publicKey'],\n );\n return false;\n }\n if (w['existsOnStellar'] !== undefined && typeof w['existsOnStellar'] !== 'boolean') {\n console.warn('[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 console.warn('[PollarClient:session] Invalid session — wallet.createdAt must be a finite number if present');\n return false;\n }\n\n // data: { mail, first_name, last_name, avatar: string, providers: {...} }\n const data = s['data'];\n if (typeof data !== 'object' || data === null) {\n console.warn('[PollarClient:session] Invalid session — data missing or not an object');\n return false;\n }\n const d = data as Record<string, unknown>;\n\n for (const field of ['mail', 'first_name', 'last_name', 'avatar'] as const) {\n if (typeof d[field] !== 'string') {\n console.warn(`[PollarClient:session] Invalid session — data.${field} must be string, got:`, typeof d[field]);\n return false;\n }\n }\n\n // providers: { email: {address:string}|null, google: {id:string}|null, github: {id:string}|null, wallet: {address:string}|null }\n const providers = d['providers'];\n if (typeof providers !== 'object' || providers === null) {\n console.warn('[PollarClient:session] Invalid session — data.providers missing or not an object');\n return false;\n }\n const p = providers as Record<string, unknown>;\n\n const providerInnerField = { email: 'address', google: 'id', github: 'id', wallet: 'address' } as const;\n\n for (const [field, innerField] of Object.entries(providerInnerField) as [keyof typeof providerInnerField, string][]) {\n const v = p[field];\n if (v === null) continue;\n if (typeof v !== 'object') {\n console.warn(`[PollarClient:session] Invalid session — data.providers.${field} must be object or null, got:`, typeof v);\n return false;\n }\n const vObj = v as Record<string, unknown>;\n if (typeof vObj[innerField] !== 'string' || vObj[innerField] === '') {\n console.warn(`[PollarClient:session] Invalid session — data.providers.${field}.${innerField} must be a non-empty string`);\n return false;\n }\n }\n\n return true;\n}\n\nexport function readStorage(): PollarApplicationConfigContent | null {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) {\n return null;\n }\n\n try {\n const session = JSON.parse(raw) as unknown;\n\n if (!isValidSession(session)) {\n localStorage.removeItem(STORAGE_KEY);\n console.warn('[PollarClient:session] Stored session is invalid — clearing storage');\n return null;\n }\n\n if (session.token.expiresAt * 1000 < Date.now()) {\n localStorage.removeItem(STORAGE_KEY);\n console.warn('[PollarClient:session] Session token has expired — clearing storage');\n return null;\n }\n\n return session;\n } catch (error) {\n console.error('[PollarClient:session] Failed to parse session from storage', error);\n localStorage.removeItem(STORAGE_KEY);\n return null;\n }\n}\n\nexport function writeStorage(session: PollarApplicationConfigContent): void {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(session));\n console.info('[PollarClient:session] Session written to storage');\n}\n\nexport function removeStorage(): void {\n localStorage.removeItem(STORAGE_KEY);\n localStorage.removeItem(WALLET_TYPE_KEY);\n console.info('[PollarClient:session] Session removed from storage');\n}\n\nexport function writeWalletType(type: string): void {\n localStorage.setItem(WALLET_TYPE_KEY, type);\n}\n\nexport function readWalletType(): string | null {\n return localStorage.getItem(WALLET_TYPE_KEY);\n}\n","import { PollarApiClient } from '../api/client';\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(new DOMException('Aborted', 'AbortError'));\n },\n { once: true },\n );\n });\n}\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): Promise<Record<string, unknown>> {\n while (true) {\n signal?.throwIfAborted();\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 console.warn(e);\n }\n\n if (error || !data) {\n if (signal) await abortableDelay(retryDelayMs, signal);\n else await new Promise((r) => setTimeout(r, retryDelayMs));\n continue;\n }\n\n const reader = data.getReader();\n const decoder = new TextDecoder();\n let streamDone = false;\n\n try {\n while (true) {\n signal?.throwIfAborted();\n const { done, value } = await reader.read();\n if (done) {\n streamDone = true;\n break;\n }\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 try {\n const parsed = JSON.parse(dataLine.slice('data:'.length).trim());\n if (check(parsed)) {\n return parsed;\n }\n } catch {\n // chunk parcial, ignorar\n }\n }\n }\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n console.warn(e);\n } finally {\n reader.releaseLock();\n }\n\n // stream cerrado sin encontrar el valor → reintenta\n const delay = streamDone ? retryDelayMs : 0;\n if (delay) {\n if (signal) await abortableDelay(delay, signal);\n else await new Promise((r) => setTimeout(r, delay));\n }\n }\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { isValidSession } from '../session';\nimport { streamUntilFound } from '../stream';\nimport { FlowDeps } from './deps';\n\nexport async function authenticate(\n clientSessionId: string,\n deps: FlowDeps,\n expectedWallet?: string,\n): Promise<void> {\n const { api, signal, setAuthState, storeSession, clearSession } = deps;\n\n setAuthState({ step: 'authenticating' });\n\n await streamUntilFound(api, clientSessionId, (data) => data?.status === 'READY', 200, signal);\n\n const { data, error } = await api.POST('/auth/login', {\n body: { clientSessionId },\n signal,\n });\n\n if (data?.code === 'SDK_LOGIN_SUCCESS' && isValidSession(data?.content)) {\n if (expectedWallet && data.content.data.providers.wallet?.address !== 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 clearSession();\n return;\n }\n 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 clearSession();\n }\n}\n","import { PollarApiClient } from '../../api/client';\nimport { AUTH_ERROR_CODES, AuthState, PollarApplicationConfigContent } from '../../types';\nimport { WalletAdapter, WalletType } from '../../wallets';\n\nexport type FlowDeps = {\n api: PollarApiClient;\n signal: AbortSignal;\n setAuthState: (state: AuthState) => void;\n storeSession: (session: PollarApplicationConfigContent) => void;\n clearSession: () => void;\n storeWalletAdapter: (adapter: WalletAdapter, type: WalletType) => void;\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 { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\ntype OAuthDeps = FlowDeps & { basePath: string; apiKey: string };\n\nexport async function loginOAuth(provider: 'google' | 'github', deps: OAuthDeps): Promise<void> {\n const { setAuthState, basePath, apiKey } = deps;\n\n // Must open popup before any await — browsers block popups opened after async calls\n const popup = window.open('about:blank', '_blank');\n\n const clientSessionId = await createAuthSession(deps);\n\n if (!clientSessionId) {\n popup?.close();\n return;\n }\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', window.location.origin);\n\n if (popup) {\n popup.location.href = url.toString();\n } else {\n window.open(url.toString(), '_blank');\n }\n\n await authenticate(clientSessionId, deps);\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { AlbedoAdapter, FreighterAdapter, WalletType } 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(new DOMException('Aborted', 'AbortError'));\n return;\n }\n signal.addEventListener('abort', () => reject(new DOMException('Aborted', 'AbortError')), { once: true });\n }),\n ]);\n}\n\nexport async function loginWallet(type: WalletType, 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 const adapter = type === WalletType.FREIGHTER ? new FreighterAdapter() : new AlbedoAdapter();\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 { publicKey } = await withSignal(adapter.connect(), signal);\n connectedWallet = publicKey;\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: publicKey },\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 { getKycProviders, getKycStatus, pollKycStatus, resolveKyc, startKyc } from '../api/endpoints/kyc';\nimport {\n createOffRamp,\n createOnRamp,\n getRampsQuote,\n getRampTransaction,\n pollRampTransaction\n} from '../api/endpoints/ramps';\nimport { StellarClient, StellarNetwork } from '../stellar/StellarClient';\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n KycLevel,\n KycStartBody,\n KycStartResponse,\n KycStatus,\n NetworkState,\n PollarApplicationConfigContent,\n PollarClientConfig,\n PollarFlowError,\n PollarLoginOptions,\n RampsOfframpBody,\n RampsOfframpResponse,\n RampsOnrampBody,\n RampsOnrampResponse,\n RampsQuoteQuery,\n RampsQuoteResponse,\n RampsTransactionResponse,\n RampTxStatus,\n TransactionState,\n TxBuildBody,\n TxHistoryParams,\n TxHistoryState,\n TxBuildContent,\n TxSignAndSendBody,\n WalletBalanceState,\n} from '../types';\nimport { AlbedoAdapter, FreighterAdapter, WalletAdapter, WalletType } from '../wallets';\nimport { initEmailSession, sendEmailCode, verifyAndAuthenticate } from './auth/emailFlow';\nimport { loginOAuth } from './auth/oauthFlow';\nimport { loginWallet } from './auth/walletFlow';\nimport { readStorage, readWalletType, removeStorage, STORAGE_KEY, writeStorage, writeWalletType } from './session';\n\nconst isBrowser = typeof window !== 'undefined' && typeof localStorage !== 'undefined';\n\nfunction warnServerSide(method: string): void {\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\n private _session: PollarApplicationConfigContent | 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 _walletBalanceState: WalletBalanceState = { step: 'idle' };\n private _walletBalanceStateListeners = new Set<(state: WalletBalanceState) => 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 private _walletAdapter: WalletAdapter | null = null;\n private _loginController: AbortController | null = null;\n\n constructor(config: PollarClientConfig) {\n this.apiKey = config.apiKey;\n this.id = crypto.randomUUID();\n this.basePath = `${config.baseUrl || 'https://sdk.api.pollar.xyz'}/v1`;\n this._api = createApiClient(this.basePath);\n const self = this;\n this._api.use({\n onRequest({ request }: { request: Request }) {\n request.headers.set('x-pollar-api-key', config.apiKey);\n const accessToken = self._session?.token?.accessToken;\n if (accessToken) {\n request.headers.set('Authorization', `Bearer ${accessToken}`);\n }\n return request;\n },\n });\n\n this._networkState = { step: 'connected', network: config.stellarNetwork ?? 'testnet' };\n\n if (!isBrowser) {\n warnServerSide('constructor');\n this._session = null;\n return;\n }\n\n console.info(`[PollarClient] Initialized — endpoint: ${this.basePath}, network: ${this._networkState.network}`);\n\n this._restoreSession();\n\n window.addEventListener('storage', (e: StorageEvent) => {\n if (e.key === STORAGE_KEY) {\n const prev = this._session;\n console.info(`[PollarClient] Storage event — session ${this._session ? 'updated' : prev ? 'cleared' : 'unchanged'}`);\n this._restoreSession();\n }\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 // ─── Login (unified entry point) ─────────────────────────────────────────\n\n login(options: PollarLoginOptions): void {\n if (!isBrowser) {\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 }).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 (!isBrowser) {\n warnServerSide('beginEmailLogin');\n return;\n }\n\n const controller = this._newController();\n\n initEmailSession(this._flowDeps(controller.signal)).catch((err) => this._handleFlowError(err));\n }\n\n sendEmailCode(email: string): void {\n if (!isBrowser) {\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\n const { clientSessionId } = this._authState;\n const signal = this._loginController!.signal;\n\n sendEmailCode(email, clientSessionId, this._flowDeps(signal)).catch((err) => this._handleFlowError(err));\n }\n\n verifyEmailCode(code: string): void {\n if (!isBrowser) {\n warnServerSide('verifyEmailCode');\n return;\n }\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\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\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: WalletType): void {\n if (!isBrowser) {\n warnServerSide('loginWallet');\n return;\n }\n\n const controller = this._newController();\n\n loginWallet(type, this._flowDeps(controller.signal)).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 logout(): void {\n if (!isBrowser) {\n warnServerSide('logout');\n return;\n }\n console.info('[PollarClient] Logout requested');\n this._clearSession();\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 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 async refreshBalance(publicKey?: string): Promise<void> {\n const pk = publicKey ?? this._session?.wallet?.publicKey;\n if (!pk) {\n this._setWalletBalanceState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setWalletBalanceState({ step: 'loading' });\n try {\n const network = this.getNetwork();\n const { data, error } = await this._api.GET('/wallet/balance', { params: { query: { publicKey: pk, network } } });\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 // ─── Transactions ─────────────────────────────────────────────────────────\n\n async buildTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<void> {\n if (!this._session?.wallet?.publicKey) {\n this._setTransactionState({ step: 'error', details: 'No wallet connected' });\n return;\n }\n\n const body = {\n network: this.getNetwork(),\n publicKey: this._session.wallet.publicKey,\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 } else {\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', ...(details && { details }) });\n }\n } catch {\n this._setTransactionState({ step: 'error' });\n }\n }\n\n getWalletType(): WalletType | null {\n return this._walletAdapter?.type ?? null;\n }\n\n async signAndSubmitTx(unsignedXdr: string): Promise<void> {\n const state = this._transactionState;\n const buildData =\n state?.step === 'built' ? state.buildData :\n state?.step === 'error' ? state.buildData :\n undefined;\n const isBuiltFlow = !!buildData;\n const stateExtra: { buildData?: TxBuildContent; external?: true } = buildData ? { buildData } : { external: true };\n\n this._setTransactionState({ step: 'signing', ...stateExtra });\n\n const accountToSign = isBuiltFlow\n ? this._session?.wallet?.publicKey\n : (this._session?.data?.providers?.wallet?.address ?? this._session?.wallet?.publicKey);\n\n if (this._walletAdapter) {\n // External wallet (Freighter/Albedo): sign client-side, submit directly to Horizon\n try {\n const signOpts = accountToSign\n ? { networkPassphrase: this._networkPassphrase(), accountToSign }\n : { networkPassphrase: this._networkPassphrase() };\n const { signedTxXdr } = await this._walletAdapter.signTransaction(unsignedXdr, signOpts);\n const stellarClient = new StellarClient(this.getNetwork());\n const result = await stellarClient.submitTransaction(signedTxXdr);\n if (result.success) {\n this._setTransactionState({ step: 'success', ...stateExtra, hash: result.hash });\n } else {\n this._setTransactionState({ step: 'error', ...stateExtra, details: result.errorCode });\n }\n } catch {\n this._setTransactionState({ step: 'error', ...stateExtra });\n }\n return;\n }\n\n // Custodial wallet (social/email login): Pollar signs and submits server-side\n const body: TxSignAndSendBody = {\n network: this.getNetwork(),\n publicKey: this._session?.wallet?.publicKey ?? '',\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 this._setTransactionState({ step: 'success', ...stateExtra, hash: data.content.hash });\n } else {\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', ...stateExtra, ...(details && { details }) });\n }\n } catch {\n this._setTransactionState({ step: 'error', ...stateExtra });\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 private _setTxHistoryState(next: TxHistoryState): void {\n this._txHistoryState = next;\n for (const cb of this._txHistoryStateListeners) 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 ──────────────────────────────────────────────────────────────\n\n /** Creates a new AbortController, cancelling any existing flow first. */\n private _newController(): AbortController {\n this._loginController?.abort();\n this._loginController = new AbortController();\n return this._loginController;\n }\n\n /** Builds the deps object passed to flow functions via bind pattern. */\n private _flowDeps(signal: AbortSignal) {\n return {\n api: this._api,\n signal,\n setAuthState: this._setAuthState.bind(this),\n storeSession: this._storeSession.bind(this),\n clearSession: this._clearSession.bind(this),\n storeWalletAdapter: (adapter: WalletAdapter, type: WalletType) => {\n this._walletAdapter = adapter;\n writeWalletType(type);\n },\n };\n }\n\n private _handleFlowError(error: unknown): void {\n if (error instanceof Error && error.name === 'AbortError') {\n console.info('[PollarClient] Login cancelled');\n this._setAuthState({ step: 'idle' });\n return;\n }\n console.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 _restoreSession(): void {\n this._session = readStorage();\n if (this._session) {\n this._authState = { step: 'authenticated', session: this._session };\n // Re-instantiate external wallet adapter if user logged in with one\n if (this._session.data?.providers?.wallet?.address) {\n const storedType = readWalletType();\n if (storedType === WalletType.FREIGHTER) {\n this._walletAdapter = new FreighterAdapter();\n } else if (storedType === WalletType.ALBEDO) {\n this._walletAdapter = new AlbedoAdapter();\n }\n }\n console.info('[PollarClient] Session restored from storage');\n } else {\n console.info('[PollarClient] No session in storage');\n }\n }\n\n private _storeSession(session: PollarApplicationConfigContent): void {\n console.info(`[PollarClient] Session stored — user: ${session.userId ?? 'anonymous'}`);\n this._session = session;\n writeStorage(session);\n this._setAuthState({ step: 'authenticated', session });\n }\n\n private _clearSession(): void {\n console.info('[PollarClient] Session cleared');\n this._session = null;\n this._walletAdapter = null;\n removeStorage();\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 console.info(`[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 console.info(`[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 console.info(`[PollarClient] transaction:${next.step}`);\n for (const cb of this._transactionStateListeners) cb(next);\n }\n}\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/sha256.ts","../src/lib/api-key-hash.ts","../src/lib/base64url.ts","../src/keys/thumbprint.ts","../src/keys/web-crypto.ts","../../../node_modules/openapi-fetch/src/index.js","../src/api/client.ts","../src/api/endpoints/kyc.ts","../src/api/endpoints/ramps.ts","../src/dpop.ts","../src/stellar/StellarClient.ts","../src/storage/web.ts","../src/storage/autodetect.ts","../src/types.ts","../src/wallets/FreighterAdapter.ts","../src/wallets/types.ts","../src/wallets/AlbedoAdapter.ts","../src/client/session.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/walletFlow.ts","../src/client/client.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","fetch","final","joiner","WalletType"],"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 * SHA-256 via WebCrypto. Returns the raw 32-byte digest as a `Uint8Array`.\n *\n * Async because `crypto.subtle.digest` is the only SHA-256 primitive guaranteed\n * to exist in every target runtime (browser, Node ≥20, RN ≥0.74, Workers, Deno,\n * Bun) without pulling in a JS-only crypto library. Older RN environments may\n * need a `crypto.subtle` polyfill (e.g. `react-native-quick-crypto`).\n */\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n const buf = await crypto.subtle.digest('SHA-256', data as unknown as BufferSource);\n return new Uint8Array(buf);\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 because the underlying SHA-256 primitive is WebCrypto's\n * `crypto.subtle.digest`. Compute once during client 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 * 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 { 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 * Strip a JWK to only the four required EC public members. Useful when the\n * input came from `crypto.subtle.exportKey('jwk', publicKey)` which adds\n * `ext` / `key_ops`. Returns a fresh 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: jwk.x, y: jwk.y };\n}\n","import { 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('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('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(\n '[PollarClient:keys] SubtleCrypto is unavailable. DPoP requires a secure context (HTTPS or localhost).',\n );\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 // Loud log so init failures don't masquerade as cryptic \"publicJwk is\n // null\" downstream errors. Clear the promise so the next call retries\n // instead of permanently returning a rejected promise.\n console.error('[PollarClient:keys] WebCryptoKeyManager init failed', err);\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 const exported = (await globalThis.crypto.subtle.exportKey('jwk', pair.publicKey)) as JsonWebKey;\n this.publicJwk = canonicalEcJwk(exported);\n this.thumbprint = await computeJwkThumbprint(this.publicJwk);\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}","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)?.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)?.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)?.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)?.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)?.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)?.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)?.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","import { base64urlEncode, base64urlEncodeString } from './lib/base64url';\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: generateJti(),\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/**\n * Generate a UUIDv4 for use as the `jti` claim. Prefers the secure-context\n * `crypto.randomUUID` when available; falls back to a manual v4 build via\n * `crypto.getRandomValues` for environments where `randomUUID` is missing\n * (older RN, insecure HTTP origins).\n */\nfunction generateJti(): 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:dpop] 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}\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","import 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\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 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","import type { KeyManager } from './keys/types';\nimport type { OnStorageDegrade, Storage } from './storage/types';\nimport { pollarPaths, StellarNetwork } from './index';\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 wallet: { publicKey: string | null; existsOnStellar?: boolean; createdAt?: number };\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 * apiKeyHash)`: WebCrypto in browsers, `@noble/curves` in RN.\n */\n keyManager?: KeyManager;\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 * 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\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\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\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\nexport type TransactionState =\n | { step: 'idle' }\n | { step: 'building' }\n | { step: 'built'; buildData: TxBuildContent }\n | { step: 'signing'; buildData?: TxBuildContent; external?: true }\n | { step: 'success'; buildData?: TxBuildContent; hash: string; external?: true }\n | { step: 'error'; details?: string; buildData?: TxBuildContent; external?: true };\n\nexport const AUTH_ERROR_CODES = {\n SESSION_CREATE_FAILED: 'SESSION_CREATE_FAILED',\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 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 | { step: 'authenticating' }\n | { step: 'authenticated'; session: PollarPersistedSession }\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// ─── 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 =\n 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// ─── 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, publicKey: 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 publicKey: 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>;","// 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\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(() => reject(new Error('Albedo response timeout')), 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\nfunction waitForAlbedoResult(): Promise<Record<string, string>> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Albedo response timeout')), 2 * 60 * 1000);\n\n const parseResult = () => {\n const params = new URLSearchParams(window.location.search);\n if (!params.has('pubkey') && !params.has('signed_envelope_xdr') && !params.has('signed_xdr')) return;\n\n clearTimeout(timeout);\n const result: Record<string, string> = {};\n params.forEach((value, key) => { result[key] = value; });\n window.history.replaceState({}, document.title, window.location.pathname);\n resolve(result);\n };\n\n parseResult();\n window.addEventListener('popstate', parseResult);\n });\n}\n\nexport class AlbedoAdapter implements WalletAdapter {\n readonly type = WalletType.ALBEDO;\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', 'testnet');\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, publicKey: 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', 'testnet');\n url.searchParams.set('callback', window.location.href);\n url.searchParams.set('origin', window.location.origin);\n\n window.location.href = url.toString();\n const result = await waitForAlbedoResult();\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', 'testnet');\n url.searchParams.set('callback', window.location.href);\n url.searchParams.set('origin', window.location.origin);\n\n window.location.href = url.toString();\n const result = await waitForAlbedoResult();\n\n if (!result.signed_xdr) throw new Error('Albedo auth entry signing rejected');\n return { signedAuthEntry: result.signed_xdr };\n }\n}","import 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): value is PollarPersistedSession {\n if (typeof value !== 'object' || value === null) {\n console.warn('[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 console.warn('[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 console.warn('[PollarClient:session] Invalid session — userId must be string|null');\n return false;\n }\n if (!isBoundedString(s['status'], MAX_STATUS)) {\n console.warn('[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 console.warn('[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 console.warn('[PollarClient:session] Invalid session — token.accessToken missing/empty/too long');\n return false;\n }\n if (!isBoundedString(t['refreshToken'], MAX_REFRESH_TOKEN)) {\n console.warn('[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 console.warn('[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 console.warn('[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 console.warn('[PollarClient:session] Invalid session — user.id must be string if present');\n return false;\n }\n if (typeof u['ready'] !== 'boolean') {\n console.warn('[PollarClient:session] Invalid session — user.ready must be boolean');\n return false;\n }\n\n const wallet = s['wallet'];\n if (typeof wallet !== 'object' || wallet === null) {\n console.warn('[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['publicKey'] !== null && !isBoundedString(w['publicKey'], MAX_WALLET_PUBLIC_KEY)) {\n console.warn('[PollarClient:session] Invalid session — wallet.publicKey must be string|null');\n return false;\n }\n if (w['existsOnStellar'] !== undefined && typeof w['existsOnStellar'] !== 'boolean') {\n console.warn('[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 console.warn('[PollarClient:session] Invalid session — wallet.createdAt must be a finite number if present');\n return false;\n }\n\n return true;\n}\n\nexport async function readStorage(storage: Storage, apiKeyHash: string): 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 if (!isValidSession(session)) {\n await storage.remove(sessionStorageKey(apiKeyHash));\n console.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 console.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(\n storage: Storage,\n apiKeyHash: string,\n session: PollarPersistedSession,\n): 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}","import { PollarApiClient } from '../api/client';\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(new DOMException('Aborted', '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): 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 signal?.throwIfAborted();\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 console.warn(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 streamDone = false;\n let sawAnyChunk = false;\n\n try {\n while (true) {\n signal?.throwIfAborted();\n const { done, value } = await reader.read();\n if (done) {\n streamDone = true;\n break;\n }\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 try {\n const parsed = JSON.parse(dataLine.slice('data:'.length).trim());\n if (check(parsed)) {\n return parsed;\n }\n } catch {\n // partial chunk — keep reading\n }\n }\n }\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError') throw e;\n console.warn(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 const delay = streamDone ? backoff : 0;\n if (delay) await sleep(delay);\n }\n}\n","import { AUTH_ERROR_CODES } from '../../types';\nimport { isValidSession } from '../session';\nimport { streamUntilFound } from '../stream';\nimport { FlowDeps } from './deps';\n\nexport async function authenticate(\n clientSessionId: string,\n deps: FlowDeps,\n expectedWallet?: string,\n): Promise<void> {\n const { api, signal, setAuthState, storeSession, clearSession } = deps;\n\n setAuthState({ step: 'authenticating' });\n\n await streamUntilFound(api, clientSessionId, (data) => data?.status === 'READY', 200, signal);\n\n // Pass `dpopJwk` so the server mints DPoP-bound tokens (`cnf.jkt`).\n const dpopJwk = await deps.getPublicJwk();\n const { data, error } = 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)) {\n if (expectedWallet && data.content.data.providers.wallet?.address !== 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 clearSession();\n return;\n }\n 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 clearSession();\n }\n}\n","import { PollarApiClient } from '../../api/client';\nimport type { PublicEcJwk } from '../../keys/types';\nimport { AUTH_ERROR_CODES, AuthState, PollarApplicationConfigContent } from '../../types';\nimport { WalletAdapter, WalletId } from '../../wallets';\n\nexport type FlowDeps = {\n api: PollarApiClient;\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 * 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 { authenticate } from './authenticate';\nimport { createAuthSession, FlowDeps } from './deps';\n\ntype OAuthDeps = FlowDeps & { basePath: string; apiKey: string };\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\nexport async function loginOAuth(provider: 'google' | 'github', deps: OAuthDeps): Promise<void> {\n const { setAuthState, basePath, apiKey } = deps;\n\n // Must open popup before any await — browsers block popups opened after async calls\n const popup = window.open('about:blank', '_blank');\n severOpener(popup);\n\n const clientSessionId = await createAuthSession(deps);\n\n if (!clientSessionId) {\n popup?.close();\n return;\n }\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', window.location.origin);\n\n if (popup) {\n popup.location.href = url.toString();\n severOpener(popup);\n } else {\n window.open(url.toString(), '_blank', 'noopener,noreferrer');\n }\n\n await authenticate(clientSessionId, deps);\n}\n","import { 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(new DOMException('Aborted', 'AbortError'));\n return;\n }\n signal.addEventListener('abort', () => reject(new DOMException('Aborted', '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 const adapter = await deps.resolveWalletAdapter(type);\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 { publicKey } = await withSignal(adapter.connect(), signal);\n connectedWallet = publicKey;\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: publicKey },\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 { getKycProviders, getKycStatus, pollKycStatus, resolveKyc, startKyc } from '../api/endpoints/kyc';\nimport {\n createOffRamp,\n createOnRamp,\n getRampsQuote,\n getRampTransaction,\n pollRampTransaction\n} 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 { StellarClient, StellarNetwork } from '../stellar/StellarClient';\nimport { defaultStorage } from '../storage/autodetect';\nimport type { Storage } from '../storage/types';\nimport {\n AUTH_ERROR_CODES,\n AuthState,\n KycLevel,\n KycStartBody,\n KycStartResponse,\n KycStatus,\n NetworkState,\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 TransactionState,\n TxBuildBody,\n TxBuildContent,\n TxHistoryParams,\n TxHistoryState,\n TxSignAndSendBody,\n WalletBalanceState,\n} from '../types';\nimport { AlbedoAdapter, FreighterAdapter, WalletAdapter, WalletAdapterResolver, WalletId, WalletType } from '../wallets';\nimport { initEmailSession, sendEmailCode, verifyAndAuthenticate } from './auth/emailFlow';\nimport { loginOAuth } from './auth/oauthFlow';\nimport { loginWallet } from './auth/walletFlow';\nimport {\n readStorage,\n readWalletType,\n removeStorage,\n sessionStorageKey,\n writeStorage,\n writeWalletType\n} from './session';\n\nconst isBrowser = typeof window !== 'undefined' && typeof localStorage !== 'undefined';\n\n/** Header marker so retried requests don't loop on persistent 401s. */\nconst RETRIED_HEADER = 'X-Pollar-Retried';\n\nfunction warnServerSide(method: string): void {\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 _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 /** 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\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 _walletBalanceState: WalletBalanceState = { step: 'idle' };\n private _walletBalanceStateListeners = new Set<(state: WalletBalanceState) => 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 private _walletAdapter: WalletAdapter | null = null;\n private readonly _walletAdapterResolver: WalletAdapterResolver | null;\n private _loginController: AbortController | null = null;\n\n constructor(config: PollarClientConfig) {\n this.apiKey = config.apiKey;\n this.id = crypto.randomUUID();\n this.basePath = `${config.baseUrl || 'https://sdk.api.pollar.xyz'}/v1`;\n\n this._storage =\n config.storage ?? defaultStorage(config.onStorageDegrade ? { onDegrade: config.onStorageDegrade } : undefined);\n this._keyManager = config.keyManager ?? defaultKeyManager(this._storage, config.apiKey);\n this._walletAdapterResolver = config.walletAdapter ?? null;\n this._deviceLabel = config.deviceLabel;\n\n this._api = createApiClient(this.basePath);\n this._wireMiddlewares();\n\n this._networkState = { step: 'connected', network: config.stellarNetwork ?? 'testnet' };\n\n if (!isBrowser) {\n warnServerSide('constructor');\n this._initialized = Promise.resolve();\n return;\n }\n\n console.info(`[PollarClient] Initialized — endpoint: ${this.basePath}, network: ${this._networkState.network}`);\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. Fires only for localStorage-backed storage; for\n // non-DOM adapters the listener is harmless (events never arrive).\n if (typeof window !== 'undefined') {\n const sessionKey = sessionStorageKey(this._apiKeyHash);\n const handler = (e: StorageEvent): void => {\n if (e.key === sessionKey) {\n this._restoreSession().catch((err) => console.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 console.warn('[PollarClient] KeyManager init failed; DPoP unavailable for this session', err);\n }\n await this._restoreSession();\n }\n\n /** Detach the cross-tab storage listener and abort any in-flight login. */\n destroy(): void {\n if (this._storageEventHandler && typeof window !== 'undefined') {\n window.removeEventListener('storage', this._storageEventHandler);\n this._storageEventHandler = null;\n }\n this._loginController?.abort();\n this._loginController = null;\n }\n\n // ─── Middlewares (DPoP + auto-refresh) ────────────────────────────────────\n\n private _wireMiddlewares(): void {\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 await self._initialized;\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 if (request.headers.get(RETRIED_HEADER)) return response;\n // Don't trigger refresh from inside the refresh endpoint itself.\n if (request.url.includes('/auth/refresh')) return response;\n\n const wwwAuth = response.headers.get('WWW-Authenticate') ?? '';\n const isNonceChallenge = wwwAuth.includes('use_dpop_nonce');\n\n if (!isNonceChallenge) {\n try {\n await self.refresh();\n } catch {\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 console.warn('[PollarClient] DPoP proof build failed', err);\n return null;\n }\n }\n\n private async _retryRequest(originalRequest: Request): Promise<Response> {\n const clone = originalRequest.clone();\n clone.headers.set(RETRIED_HEADER, '1');\n const accessToken = this._session?.token?.accessToken;\n if (accessToken) {\n const proof = await this._buildProofForRequest(clone, accessToken);\n if (proof) {\n clone.headers.set('Authorization', `DPoP ${accessToken}`);\n clone.headers.set('DPoP', proof);\n } else {\n clone.headers.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n return fetch(clone);\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 console.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 console.error('[PollarClient] /auth/refresh request threw', err);\n await this._clearSession();\n throw err;\n }\n\n if (error || !data) {\n console.warn('[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 console.warn('[PollarClient] /auth/refresh response malformed', successData);\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 console.warn('[PollarClient] /auth/refresh token shape invalid', newToken);\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 console.info('[PollarClient] Tokens refreshed');\n } catch (err) {\n console.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 }\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 /** 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 (!isBrowser) {\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 }).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 (!isBrowser) {\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 (!isBrowser) {\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 (!isBrowser) {\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 (!isBrowser) {\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 // ─── 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 (!isBrowser) {\n warnServerSide('logout');\n return;\n }\n console.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 console.warn('[PollarClient] Server logout failed (continuing with local clear)', err);\n }\n }\n\n try {\n await this._clearSession();\n } catch (err) {\n console.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 (!isBrowser) {\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 /**\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 (!isBrowser) {\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 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 async refreshBalance(publicKey?: string): Promise<void> {\n const pk = publicKey ?? this._session?.wallet?.publicKey;\n if (!pk) {\n this._setWalletBalanceState({ step: 'error', message: 'No wallet connected' });\n return;\n }\n this._setWalletBalanceState({ step: 'loading' });\n try {\n const network = this.getNetwork();\n const { data, error } = await this._api.GET('/wallet/balance', { params: { query: { publicKey: pk, network } } });\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 // ─── Transactions ─────────────────────────────────────────────────────────\n\n async buildTx(\n operation: TxBuildBody['operation'],\n params: TxBuildBody['params'],\n options?: TxBuildBody['options'],\n ): Promise<void> {\n if (!this._session?.wallet?.publicKey) {\n this._setTransactionState({ step: 'error', details: 'No wallet connected' });\n return;\n }\n\n const body = {\n network: this.getNetwork(),\n publicKey: this._session.wallet.publicKey,\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 } else {\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', ...(details && { details }) });\n }\n } catch {\n this._setTransactionState({ step: 'error' });\n }\n }\n\n getWalletType(): WalletId | null {\n return this._walletAdapter?.type ?? null;\n }\n\n async signAndSubmitTx(unsignedXdr: string): Promise<void> {\n const state = this._transactionState;\n const buildData = state?.step === 'built' ? state.buildData : state?.step === 'error' ? state.buildData : undefined;\n const isBuiltFlow = !!buildData;\n const stateExtra: { buildData?: TxBuildContent; external?: true } = buildData ? { buildData } : { external: true };\n\n this._setTransactionState({ step: 'signing', ...stateExtra });\n\n // For both external + custodial wallets, the public key in `_session.wallet`\n // IS the address we want to sign for. The previous code branched on\n // `data.providers.wallet.address` but that's the same value (the wallet\n // address from login becomes wallet.publicKey).\n const accountToSign = this._session?.wallet?.publicKey;\n\n if (this._walletAdapter) {\n try {\n const signOpts = accountToSign\n ? { networkPassphrase: this._networkPassphrase(), accountToSign }\n : { networkPassphrase: this._networkPassphrase() };\n const { signedTxXdr } = await this._walletAdapter.signTransaction(unsignedXdr, signOpts);\n const stellarClient = new StellarClient(this.getNetwork());\n const result = await stellarClient.submitTransaction(signedTxXdr);\n if (result.success) {\n this._setTransactionState({ step: 'success', ...stateExtra, hash: result.hash });\n } else {\n this._setTransactionState({ step: 'error', ...stateExtra, details: result.errorCode });\n }\n } catch {\n this._setTransactionState({ step: 'error', ...stateExtra });\n }\n return;\n }\n\n const body: TxSignAndSendBody = {\n network: this.getNetwork(),\n publicKey: this._session?.wallet?.publicKey ?? '',\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 this._setTransactionState({ step: 'success', ...stateExtra, hash: data.content.hash });\n } else {\n const details = (error as { details?: string } | undefined)?.details;\n this._setTransactionState({ step: 'error', ...stateExtra, ...(details && { details }) });\n }\n } catch {\n this._setTransactionState({ step: 'error', ...stateExtra });\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 private _setTxHistoryState(next: TxHistoryState): void {\n this._txHistoryState = next;\n for (const cb of this._txHistoryStateListeners) 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 ──────────────────────────────────────────────────────────────\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 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._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 return Promise.resolve(this._walletAdapterResolver(id));\n }\n if (id === WalletType.FREIGHTER) return new FreighterAdapter();\n if (id === WalletType.ALBEDO) return new AlbedoAdapter();\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 console.info('[PollarClient] Login cancelled');\n this._setAuthState({ step: 'idle' });\n return;\n }\n console.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);\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 console.warn('[PollarClient] Could not restore wallet adapter for stored id', { id: storedType, err });\n }\n }\n console.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 this._setAuthState({ step: 'authenticated', session: this._session });\n } else {\n console.info('[PollarClient] No session in storage');\n }\n }\n\n private async _storeSession(session: PollarApplicationConfigContent): Promise<void> {\n // Drop the userId log — leaks user identity to console.\n console.info('[PollarClient] Session stored');\n\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 wallet: session.wallet,\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 this._setAuthState({ step: 'authenticated', session: persisted });\n }\n\n private async _clearSession(): Promise<void> {\n console.info('[PollarClient] Session cleared');\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 console.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 console.info(`[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 console.info(`[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 console.info(`[PollarClient] transaction:${next.step}`);\n for (const cb of this._transactionStateListeners) cb(next);\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"]}