{"version":3,"file":"index-DW5yMQwV.mjs","sources":["../.rollup-tmp/client/config.js","../node_modules/is-retry-allowed/index.js","../node_modules/axios-retry/dist/esm/index.js","../.rollup-tmp/utils/auth-api.js","../.rollup-tmp/utils/refresh-error.js","../.rollup-tmp/utils/session-binding.js","../.rollup-tmp/utils/session-events.js","../.rollup-tmp/utils/session-mutation.js","../.rollup-tmp/utils/web-session-manager.js","../.rollup-tmp/utils/rn-session-manager.js","../.rollup-tmp/utils/session-manager.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../.rollup-tmp/utils/server-session-manager.js","../.rollup-tmp/utils/core-platform.js","../.rollup-tmp/utils/evm/evm-utils.js","../.rollup-tmp/utils/auth-token-freshness.js","../.rollup-tmp/utils/utils.js","../.rollup-tmp/client/decline.js","../.rollup-tmp/utils/api.js","../.rollup-tmp/client/client-transaction-versions.js","../.rollup-tmp/client/subscription-v2.js","../.rollup-tmp/client/operations.js","../.rollup-tmp/client/solana-transaction-read.js","../.rollup-tmp/client/reconcile.js","../.rollup-tmp/client/subscription.js","../.rollup-tmp/client/create-client.js","../.rollup-tmp/client/subscribe-query.js","../.rollup-tmp/client/field-values.js","../.rollup-tmp/time.js","../.rollup-tmp/utils/sol/sol-accessors.js","../.rollup-tmp/utils/sol/solana-sign-in-message.js","../.rollup-tmp/client/functions.js","../.rollup-tmp/client/live.js","../.rollup-tmp/client/live-effects.js"],"sourcesContent":["// The pristine default config. `clientConfig` (the module global) starts as a\n// copy of this and is mutated by init(); createClient() resolves fresh scoped\n// configs from this pristine template so a scoped instance never inherits a\n// prior init()'s state.\nexport const DEFAULT_CLIENT_CONFIG = {\n    // User configured settings\n    name: '',\n    logoUrl: '',\n    // Bounded production is the endpoint default. Apps still choose one explicit\n    // auth method at init time. Pass `network: 'bounded-staging'` to target staging.\n    network: 'bounded-production',\n    wsApiUrl: 'wss://realtime.bounded.sh',\n    apiUrl: 'https://realtime.bounded.sh',\n    authApiUrl: 'https://wallet-auth.bounded.sh',\n    humanAuthApiUrl: 'https://auth.bounded.sh',\n    functionsUrl: 'https://functions.bounded.sh',\n    devApiUrl: 'https://dev-api.bounded.sh',\n    appId: '',\n    // No hidden modal fallback: browser clients start hosted Bounded Auth with\n    // loginWithRedirect/loginWithPopup. For crypto/onchain wallet login use\n    // authMethod:'phantom' (Solana / Phantom), and use signInAnonymously() for\n    // zero-friction guest accounts. ('wallet' and 'mobile-wallet-adapter' are\n    // accepted spellings of the same lane and canonicalize to 'phantom'.)\n    authMethod: 'none',\n    chain: '',\n    rpcUrl: '',\n    skipBackendInit: true,\n    authProvider: null,\n    isServer: false,\n};\nexport let clientConfig = Object.assign({}, DEFAULT_CLIENT_CONFIG);\nlet isInitialized = false;\n// Callers awaiting getConfig() before init() completes. Resolved synchronously\n// by init() — the previous 50ms setInterval poll added up to 50ms of latency\n// to the first SDK operation after init for no reason.\nlet initWaiters = [];\nexport const BOUNDED_NETWORKS = {\n    'bounded-staging': {\n        wsApiUrl: 'wss://realtime-staging.bounded.sh',\n        apiUrl: 'https://realtime-staging.bounded.sh',\n        authApiUrl: 'https://wallet-auth-staging.bounded.sh',\n        humanAuthApiUrl: 'https://auth-staging.bounded.sh',\n        functionsUrl: 'https://functions-staging.bounded.sh',\n        devApiUrl: 'https://dev-api-staging.bounded.sh',\n    },\n    'bounded-production': {\n        // All on bounded.sh custom domains. authApiUrl = WALLET/SIWS issuer\n        // (wallet + guest providers); humanAuthApiUrl = human email-OTP issuer\n        // (the 'email' provider). realtime.bounded.sh fronts the realtime worker.\n        wsApiUrl: 'wss://realtime.bounded.sh',\n        apiUrl: 'https://realtime.bounded.sh',\n        authApiUrl: 'https://wallet-auth.bounded.sh',\n        humanAuthApiUrl: 'https://auth.bounded.sh',\n        functionsUrl: 'https://functions.bounded.sh',\n        devApiUrl: 'https://dev-api.bounded.sh',\n    },\n};\n// `network: 'bounded'` is an alias for the current GA target.\nBOUNDED_NETWORKS['bounded'] = BOUNDED_NETWORKS['bounded-production'];\n/**\n * The hosted `/.well-known/bounded-webhook-keys.json` URL for the configured\n * Bounded network, or `undefined` when no Bounded network is set. Used by\n * `verifyWebhook` so a staging receiver that did `init({ network:\n * 'bounded-staging' })` verifies against the STAGING signing keys instead of\n * the production default. Synchronous and non-blocking on purpose: a pure\n * webhook receiver may never call `init()`, so we read the already-applied\n * config rather than awaiting `getConfig()` (which blocks on initialization).\n * Returns `undefined` when the network is unknown so the caller keeps its\n * fail-closed production default (audit SDK LOW-7).\n */\nexport function getWebhookKeysUrl() {\n    const net = clientConfig.network;\n    const preset = net ? BOUNDED_NETWORKS[net] : undefined;\n    const host = preset === null || preset === void 0 ? void 0 : preset.apiUrl;\n    if (!host)\n        return undefined;\n    return host.replace(/\\/$/, '') + '/.well-known/bounded-webhook-keys.json';\n}\n/**\n * The app id configured via `init({ appId })`, or `undefined` when none has been set.\n * Synchronous + non-blocking on purpose (mirrors {@link getWebhookKeysUrl}): a pure webhook\n * receiver may never call `init()`, and `getConfig()` would block on initialization. Used by\n * `verifyWebhook` to bind a webhook to THIS app by default (#072) rather than trusting any\n * app's shared-key-signed delivery.\n */\nexport function getConfiguredSessionNamespace() {\n    return JSON.stringify([(clientConfig.humanAuthApiUrl || \"https://auth.bounded.sh\").replace(/\\/$/, \"\"), clientConfig.appId]);\n}\nexport function getConfiguredAppId() {\n    return clientConfig.appId || undefined;\n}\n/**\n * True when init() configured a Bounded network (the Cloudflare-native stack).\n * Synchronous + non-blocking. Used to route reads/writes that behave differently\n * on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on\n * Bounded must use the deterministic server aggregation, not the legacy AI query).\n */\nexport function isBoundedNetwork() {\n    return isBoundedNetworkConfig(clientConfig);\n}\n/**\n * Config-scoped variant of {@link isBoundedNetwork}: reports whether a SPECIFIC\n * config (e.g. a scoped `createClient()` instance's) targets a Bounded network,\n * rather than the module global. Used so a scoped client routes count/aggregate\n * by its OWN network, not the global one.\n */\nexport function isBoundedNetworkConfig(config) {\n    const net = config.network;\n    return typeof net === 'string' && net in BOUNDED_NETWORKS;\n}\n/**\n * Merge a partial config over a base config, applying the Bounded endpoint\n * precedence rule used everywhere: defaults (or `base`) < network preset <\n * explicit fields. Pure - never touches module state. Shared by `init` (base =\n * the current global) and `createClient` (base = the pristine defaults) so both\n * resolve endpoints identically. Throws on an unsupported `network`.\n */\nexport function resolveClientConfig(base, newConfig) {\n    if (newConfig.network !== undefined && !(newConfig.network in BOUNDED_NETWORKS)) {\n        throw new Error(`Unsupported Bounded network \"${String(newConfig.network)}\". Expected bounded, bounded-staging, or bounded-production.`);\n    }\n    const preset = newConfig.network ? BOUNDED_NETWORKS[newConfig.network] : {};\n    return Object.assign(Object.assign(Object.assign({}, base), preset), newConfig);\n}\nexport function init(newConfig) {\n    return new Promise((resolve, reject) => {\n        if (!newConfig.appId) {\n            reject(new Error('No app ID provided.'));\n            return;\n        }\n        // Bounded is client-driven: defaults are Bounded production, `network`\n        // switches the whole endpoint set (e.g. 'bounded-staging'), and anything\n        // passed explicitly wins. No `/config` round-trip; browser SDKs still pass\n        // one explicit authMethod so there is no hidden auth-provider fallback.\n        //   defaults (bounded-production) < network preset < explicit newConfig\n        let resolved;\n        try {\n            resolved = resolveClientConfig(clientConfig, newConfig);\n        }\n        catch (error) {\n            reject(error instanceof Error ? error : new Error(String(error)));\n            return;\n        }\n        clientConfig = resolved;\n        isInitialized = true;\n        const waiters = initWaiters;\n        initWaiters = [];\n        for (const wake of waiters)\n            wake();\n        resolve();\n    });\n}\nfunction waitForInitialization() {\n    if (isInitialized)\n        return Promise.resolve();\n    return new Promise((resolve) => { initWaiters.push(resolve); });\n}\nexport async function getConfig() {\n    await waitForInitialization();\n    return clientConfig;\n}\n","'use strict';\n\nconst denyList = new Set([\n\t'ENOTFOUND',\n\t'ENETUNREACH',\n\n\t// SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328\n\t'UNABLE_TO_GET_ISSUER_CERT',\n\t'UNABLE_TO_GET_CRL',\n\t'UNABLE_TO_DECRYPT_CERT_SIGNATURE',\n\t'UNABLE_TO_DECRYPT_CRL_SIGNATURE',\n\t'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY',\n\t'CERT_SIGNATURE_FAILURE',\n\t'CRL_SIGNATURE_FAILURE',\n\t'CERT_NOT_YET_VALID',\n\t'CERT_HAS_EXPIRED',\n\t'CRL_NOT_YET_VALID',\n\t'CRL_HAS_EXPIRED',\n\t'ERROR_IN_CERT_NOT_BEFORE_FIELD',\n\t'ERROR_IN_CERT_NOT_AFTER_FIELD',\n\t'ERROR_IN_CRL_LAST_UPDATE_FIELD',\n\t'ERROR_IN_CRL_NEXT_UPDATE_FIELD',\n\t'OUT_OF_MEM',\n\t'DEPTH_ZERO_SELF_SIGNED_CERT',\n\t'SELF_SIGNED_CERT_IN_CHAIN',\n\t'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',\n\t'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n\t'CERT_CHAIN_TOO_LONG',\n\t'CERT_REVOKED',\n\t'INVALID_CA',\n\t'PATH_LENGTH_EXCEEDED',\n\t'INVALID_PURPOSE',\n\t'CERT_UNTRUSTED',\n\t'CERT_REJECTED',\n\t'HOSTNAME_MISMATCH'\n]);\n\n// TODO: Use `error?.code` when targeting Node.js 14\nmodule.exports = error => !denyList.has(error && error.code);\n","import isRetryAllowed from 'is-retry-allowed';\nexport const namespace = 'axios-retry';\nexport function isNetworkError(error) {\n    const CODE_EXCLUDE_LIST = ['ERR_CANCELED', 'ECONNABORTED'];\n    if (error.response) {\n        return false;\n    }\n    if (!error.code) {\n        return false;\n    }\n    // Prevents retrying timed out & cancelled requests\n    if (CODE_EXCLUDE_LIST.includes(error.code)) {\n        return false;\n    }\n    // Prevents retrying unsafe errors\n    return isRetryAllowed(error);\n}\nconst SAFE_HTTP_METHODS = ['get', 'head', 'options'];\nconst IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);\nexport function isRetryableError(error) {\n    return (error.code !== 'ECONNABORTED' &&\n        (!error.response ||\n            error.response.status === 429 ||\n            (error.response.status >= 500 && error.response.status <= 599)));\n}\nexport function isSafeRequestError(error) {\n    if (!error.config?.method) {\n        // Cannot determine if the request can be retried\n        return false;\n    }\n    return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isIdempotentRequestError(error) {\n    if (!error.config?.method) {\n        // Cannot determine if the request can be retried\n        return false;\n    }\n    return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isNetworkOrIdempotentRequestError(error) {\n    return isNetworkError(error) || isIdempotentRequestError(error);\n}\nexport function retryAfter(error = undefined) {\n    const retryAfterHeader = error?.response?.headers['retry-after'];\n    if (!retryAfterHeader) {\n        return 0;\n    }\n    // if the retry after header is a number, convert it to milliseconds\n    let retryAfterMs = (Number(retryAfterHeader) || 0) * 1000;\n    // If the retry after header is a date, get the number of milliseconds until that date\n    if (retryAfterMs === 0) {\n        retryAfterMs = (new Date(retryAfterHeader).valueOf() || 0) - Date.now();\n    }\n    return Math.max(0, retryAfterMs);\n}\nfunction noDelay(_retryNumber = 0, error = undefined) {\n    return Math.max(0, retryAfter(error));\n}\nexport function exponentialDelay(retryNumber = 0, error = undefined, delayFactor = 100) {\n    const calculatedDelay = 2 ** retryNumber * delayFactor;\n    const delay = Math.max(calculatedDelay, retryAfter(error));\n    const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay\n    return delay + randomSum;\n}\n/**\n * Linear delay\n * @param {number | undefined} delayFactor - delay factor in milliseconds (default: 100)\n * @returns {function} (retryNumber: number, error: AxiosError | undefined) => number\n */\nexport function linearDelay(delayFactor = 100) {\n    return (retryNumber = 0, error = undefined) => {\n        const delay = retryNumber * delayFactor;\n        return Math.max(delay, retryAfter(error));\n    };\n}\nexport const DEFAULT_OPTIONS = {\n    retries: 3,\n    retryCondition: isNetworkOrIdempotentRequestError,\n    retryDelay: noDelay,\n    shouldResetTimeout: false,\n    onRetry: () => { },\n    onMaxRetryTimesExceeded: () => { },\n    validateResponse: null\n};\nfunction getRequestOptions(config, defaultOptions) {\n    return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config[namespace] };\n}\nfunction setCurrentState(config, defaultOptions, resetLastRequestTime = false) {\n    const currentState = getRequestOptions(config, defaultOptions || {});\n    currentState.retryCount = currentState.retryCount || 0;\n    if (!currentState.lastRequestTime || resetLastRequestTime) {\n        currentState.lastRequestTime = Date.now();\n    }\n    config[namespace] = currentState;\n    return currentState;\n}\nfunction fixConfig(axiosInstance, config) {\n    // @ts-ignore\n    if (axiosInstance.defaults.agent === config.agent) {\n        // @ts-ignore\n        delete config.agent;\n    }\n    if (axiosInstance.defaults.httpAgent === config.httpAgent) {\n        delete config.httpAgent;\n    }\n    if (axiosInstance.defaults.httpsAgent === config.httpsAgent) {\n        delete config.httpsAgent;\n    }\n}\nasync function shouldRetry(currentState, error) {\n    const { retries, retryCondition } = currentState;\n    const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error);\n    // This could be a promise\n    if (typeof shouldRetryOrPromise === 'object') {\n        try {\n            const shouldRetryPromiseResult = await shouldRetryOrPromise;\n            // keep return true unless shouldRetryPromiseResult return false for compatibility\n            return shouldRetryPromiseResult !== false;\n        }\n        catch (_err) {\n            return false;\n        }\n    }\n    return shouldRetryOrPromise;\n}\nasync function handleRetry(axiosInstance, currentState, error, config) {\n    currentState.retryCount += 1;\n    const { retryDelay, shouldResetTimeout, onRetry } = currentState;\n    const delay = retryDelay(currentState.retryCount, error);\n    // Axios fails merging this configuration to the default configuration because it has an issue\n    // with circular structures: https://github.com/mzabriskie/axios/issues/370\n    fixConfig(axiosInstance, config);\n    if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {\n        const lastRequestDuration = Date.now() - currentState.lastRequestTime;\n        const timeout = config.timeout - lastRequestDuration - delay;\n        if (timeout <= 0) {\n            return Promise.reject(error);\n        }\n        config.timeout = timeout;\n    }\n    config.transformRequest = [(data) => data];\n    await onRetry(currentState.retryCount, error, config);\n    if (config.signal?.aborted) {\n        return Promise.resolve(axiosInstance(config));\n    }\n    return new Promise((resolve) => {\n        const abortListener = () => {\n            clearTimeout(timeout);\n            resolve(axiosInstance(config));\n        };\n        const timeout = setTimeout(() => {\n            resolve(axiosInstance(config));\n            if (config.signal?.removeEventListener) {\n                config.signal.removeEventListener('abort', abortListener);\n            }\n        }, delay);\n        if (config.signal?.addEventListener) {\n            config.signal.addEventListener('abort', abortListener, { once: true });\n        }\n    });\n}\nasync function handleMaxRetryTimesExceeded(currentState, error) {\n    if (currentState.retryCount >= currentState.retries)\n        await currentState.onMaxRetryTimesExceeded(error, currentState.retryCount);\n}\nconst axiosRetry = (axiosInstance, defaultOptions) => {\n    const requestInterceptorId = axiosInstance.interceptors.request.use((config) => {\n        setCurrentState(config, defaultOptions, true);\n        if (config[namespace]?.validateResponse) {\n            // by setting this, all HTTP responses will be go through the error interceptor first\n            config.validateStatus = () => false;\n        }\n        return config;\n    });\n    const responseInterceptorId = axiosInstance.interceptors.response.use(null, async (error) => {\n        const { config } = error;\n        // If we have no information to retry the request\n        if (!config) {\n            return Promise.reject(error);\n        }\n        const currentState = setCurrentState(config, defaultOptions);\n        if (error.response && currentState.validateResponse?.(error.response)) {\n            // no issue with response\n            return error.response;\n        }\n        if (await shouldRetry(currentState, error)) {\n            return handleRetry(axiosInstance, currentState, error, config);\n        }\n        await handleMaxRetryTimesExceeded(currentState, error);\n        return Promise.reject(error);\n    });\n    return { requestInterceptorId, responseInterceptorId };\n};\n// Compatibility with CommonJS\naxiosRetry.isNetworkError = isNetworkError;\naxiosRetry.isSafeRequestError = isSafeRequestError;\naxiosRetry.isIdempotentRequestError = isIdempotentRequestError;\naxiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;\naxiosRetry.exponentialDelay = exponentialDelay;\naxiosRetry.linearDelay = linearDelay;\naxiosRetry.isRetryableError = isRetryableError;\nexport default axiosRetry;\n","import axios from 'axios';\nimport { getConfig } from '../client/config';\n/**\n * Resolve the refresh/revoke base URL to a CONFIGURED issuer only. The session's\n * `issuer` is persisted in client storage; if that storage is tampered (e.g. XSS)\n * a raw value could redirect the refresh token to an attacker host. So we accept the\n * stored issuer only when it exactly matches a configured allowlisted issuer\n * (authApiUrl / humanAuthApiUrl); otherwise we fall back to authApiUrl. The refresh\n * token is therefore never POSTed anywhere except a Bounded-configured origin.\n */\nfunction resolveIssuerBase(issuer, cfg) {\n    const norm = (u) => (u || '').replace(/\\/$/, '');\n    const allow = [norm(cfg.authApiUrl), norm(cfg.humanAuthApiUrl)].filter(Boolean);\n    const want = norm(issuer);\n    if (want && allow.includes(want))\n        return want;\n    return norm(cfg.authApiUrl);\n}\n// #062: key the auth client by its baseURL. The old single memoized client froze the FIRST\n// environment's authApiUrl, so after re-initializing the SDK to a different issuer (staging->\n// prod, or a custom issuer) the mint calls (/nonce, /auth/nonce, /session) kept hitting the\n// original address forever - a \"works only after a full reload\" login bug, and in a multi-tenant\n// process one config's address could leak into another's. refresh/revoke already resolve per\n// call via resolveIssuerBase; this makes minting do the same while still caching per URL.\nconst axiosClientsByUrl = new Map();\nasync function getAxiosAuthClient(baseURLOverride) {\n    // A wallet client passes its snapshotted issuer so the mint never follows the\n    // mutable global; the default path reads the current global config.\n    const baseURL = baseURLOverride || (await getConfig()).authApiUrl || '';\n    let client = axiosClientsByUrl.get(baseURL);\n    if (!client) {\n        client = axios.create({\n            baseURL,\n            headers: {\n                'Content-Type': 'application/json',\n            },\n            timeout: 30000, // 30s timeout, matching makeApiRequest\n        });\n        axiosClientsByUrl.set(baseURL, client);\n    }\n    return client;\n}\nexport async function genNonce() {\n    const client = await getAxiosAuthClient();\n    const response = await client.post('/nonce');\n    return response.data;\n}\nexport async function genAuthNonce(sessionConfig) {\n    // Bind the nonce to the snapshotted app+issuer when a wallet client supplies\n    // one; otherwise resolve from the mutable global config (unchanged default).\n    const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n    const client = await getAxiosAuthClient(config.authApiUrl);\n    const appId = config.appId;\n    const response = await client.post('/auth/nonce', {\n        appId\n    });\n    return response.data.nonce;\n}\n// authMethods that the /session issuer treats as a Solana wallet-signature flow.\n// createSessionWithSignature ALWAYS exchanges an Ed25519 signature over the\n// canonical genSolanaMessage prompt (server keypair, Phantom, mobile wallet,\n// guest device key), so the method it reports must be a wallet method — never a\n// human-login method like 'email' (the SDK default). Both issuers reject a\n// signature carrying a non-wallet authMethod: the bounded-auth worker returns\n// 501 (\"email-OTP not yet enabled\") and the legacy session-management server\n// returns 400 (\"EVM/SIWE auth is no longer supported\"). See routes.ts /session.\n// Wallet/signature methods whose authMethod is forwarded verbatim to the /session\n// issuer. 'guest' is included so anonymous (device-keypair) logins arrive as\n// authMethod:\"guest\" — the issuer gates them on the app's anonymous opt-in and\n// stamps an is_anonymous claim. Without this a guest would be indistinguishable\n// from 'phantom' and couldn't be gated or flagged.\nconst SIGNATURE_AUTH_METHODS = new Set(['phantom', 'mobile-wallet-adapter', 'guest']);\n// DS2-0110: header a SERVER-SIDE caller (Node: the @bounded-sh/server keypair SDK, the CLI, an\n// agent) presents so the wallet issuer's origin gate admits its ORIGIN-LESS /session mint. A\n// non-browser client sends no Origin, and the issuer (AS-03) no longer treats a missing Origin as\n// \"server, allow\"; the origin-less path is reserved for callers that PROVE a server-client\n// credential via X-Bounded-Server-Auth, matched against the worker's SERVER_CLIENT_SECRET. We read\n// it from the SAME env var Bind injects on the worker side (BOUNDED_SERVER_CLIENT_SECRET). Guarded\n// for non-Node hosts - browsers never carry it and don't need it (they authenticate by Origin) -\n// mirroring genSolanaMessage's process guard. Absent/empty => no header => the browser path is\n// unchanged.\nfunction serverAuthHeaders() {\n    var _a;\n    const secret = (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.BOUNDED_SERVER_CLIENT_SECRET)) || '';\n    return secret ? { 'X-Bounded-Server-Auth': secret } : {};\n}\n// Maps a client authMethod to the /session issuer's signature discriminator when\n// they differ. EVM WALLET LOGIN (config.authMethod 'evm-wallet') exchanges a SIWE\n// (EIP-4361 personal_sign, secp256k1) signature, which the bounded-auth issuer\n// routes on authMethod:\"siwe\" (index.ts /session → parseSiweMessage/recoverSiweSigner)\n// and mints under custom:evmWalletAddress. The EVM provider also passes 'siwe'\n// explicitly (authMethodOverride), so this map is the belt-and-suspenders path.\nconst SESSION_METHOD_ALIASES = { 'evm-wallet': 'siwe' };\n/**\n * Exchange a wallet signature for a Bounded session at the /session issuer.\n *\n * @param authMethodOverride the exact /session discriminator to send (e.g. 'siwe'\n *   for the SIWE/EVM path). When omitted the method is derived from config: an\n *   aliased method (evm-wallet → siwe) maps through SESSION_METHOD_ALIASES, a\n *   Solana wallet/guest method passes through verbatim, and anything else\n *   defaults to the canonical 'phantom' the issuer accepts for a signature.\n */\nexport async function createSessionWithSignature(address, message, signature, authMethodOverride, sessionConfig) {\n    var _a, _b, _c;\n    // Bind the /session mint to the snapshotted app+issuer when a wallet client\n    // supplies one; otherwise resolve from the mutable global (unchanged default).\n    const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n    const client = await getAxiosAuthClient(config.authApiUrl);\n    const appId = config.appId;\n    // Preserve a wallet authMethod when one is configured (so the backend records\n    // the real method, e.g. mobile-wallet-adapter); otherwise default to the\n    // canonical Solana wallet method 'phantom' that every /session issuer accepts\n    // for a signature exchange. This is what makes the server SDK + guest device\n    // keypair work under the email-default config.\n    const authMethod = (_a = authMethodOverride !== null && authMethodOverride !== void 0 ? authMethodOverride : SESSION_METHOD_ALIASES[config.authMethod]) !== null && _a !== void 0 ? _a : (SIGNATURE_AUTH_METHODS.has(config.authMethod) ? config.authMethod : 'phantom');\n    try {\n        const response = await client.post('/session', {\n            appId,\n            address,\n            message,\n            signature,\n            authMethod\n        }, { headers: serverAuthHeaders() });\n        return response.data;\n    }\n    catch (err) {\n        // Surface the issuer's actionable message (e.g. \"Anonymous auth is not enabled for\n        // this app. Add \\\"auth\\\": { \\\"anonymous\\\": true } to policy.json and redeploy.\")\n        // instead of axios's generic \"Request failed with status code 403\".\n        const d = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data;\n        if (d && (d.message || d.error)) {\n            const e = new Error(String(d.message || d.error));\n            e.code = d.error;\n            e.status = (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n            e.hint = d.hint;\n            throw e;\n        }\n        throw err;\n    }\n}\n// Deduplicate concurrent refreshSession calls to prevent multiple code paths\n// (WebSocket reconnection, periodic refresh, API 401 retry) from all hitting\n// /session/refresh simultaneously.\n//\n// Keyed PER (issuer, token) in a Map, not one global slot (DS2-0373): the rotating\n// refresh token is single-use, so two concurrent refreshes of the SAME token must\n// share one in-flight request. A single global slot could hold only one token at a\n// time, so an interleaved refresh of a DIFFERENT session's token evicted the first\n// token's in-flight promise; a later second refresh of the first token then missed\n// its own in-flight request and re-POSTed the already-spent token - the issuer sees\n// reuse and revokes the whole family. Keying by token lets unrelated sessions\n// coalesce independently.\n// Note: module-level state is shared across requests in SSR/Node - acceptable since\n// each key is bound to a specific session's token (same pattern as api.ts).\nconst refreshInFlightByToken = new Map();\nexport async function refreshSession(refreshToken, issuer) {\n    const dedupeKey = `${issuer || ''}::${refreshToken}`;\n    const existing = refreshInFlightByToken.get(dedupeKey);\n    if (existing)\n        return existing;\n    let currentFlight;\n    currentFlight = (async () => {\n        try {\n            const config = await getConfig();\n            const appId = config.appId;\n            // Route to the issuer that MINTED this session (email/social ->\n            // humanAuthApiUrl, wallet/guest -> authApiUrl), validated against the\n            // configured allowlist so a tampered stored issuer can't exfiltrate the token.\n            const base = resolveIssuerBase(issuer, config);\n            const response = await axios.post(`${base}/session/refresh`, {\n                refreshToken,\n                appId\n            }, { headers: { 'Content-Type': 'application/json' }, timeout: 30000 });\n            return response.data;\n        }\n        finally {\n            // Only remove our own entry, and only if it is still the active flight\n            // for this token (a later refresh of the same token cannot have replaced\n            // it while we were in flight, but this stays correct if that ever changes).\n            if (refreshInFlightByToken.get(dedupeKey) === currentFlight) {\n                refreshInFlightByToken.delete(dedupeKey);\n            }\n        }\n    })();\n    refreshInFlightByToken.set(dedupeKey, currentFlight);\n    return currentFlight;\n}\nexport class SessionRevokeError extends Error {\n    constructor(message, cause) {\n        super(message);\n        this.name = 'SessionRevokeError';\n        this.cause = cause;\n    }\n}\nfunction revokeFailureMessage(err) {\n    var _a, _b;\n    const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n    const statusText = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.statusText;\n    const suffix = typeof status === 'number'\n        ? ` (HTTP ${status}${statusText ? ` ${statusText}` : ''})`\n        : '';\n    return `Failed to revoke refresh token server-side${suffix}. The refresh-token family may still be active.`;\n}\n/**\n * Revoke a session's refresh-token family server-side (logout). Routes to the\n * minting issuer and rejects if the revoke request fails.\n */\nexport async function revokeSession(refreshToken, issuer) {\n    if (!refreshToken)\n        return;\n    try {\n        const config = await getConfig();\n        const base = resolveIssuerBase(issuer, config);\n        await axios.post(`${base}/session/revoke`, {\n            refreshToken,\n            appId: config.appId,\n        }, {\n            headers: { 'Content-Type': 'application/json' },\n            timeout: 15000,\n            // Preserve the transport error for programmatic diagnostics while\n            // ensuring AxiosError.toJSON() cannot serialize the live token body\n            // into logs, telemetry, UI state, or crash reports.\n            redact: ['data'],\n        });\n    }\n    catch (err) {\n        throw new SessionRevokeError(revokeFailureMessage(err), err);\n    }\n}\nexport async function signSessionCreateMessage(_signMessageFunction) {\n}\n","// Classify a session-refresh failure as a DEFINITIVE rejection of the credential\n// vs a TRANSPORT failure (DS4-0054).\n//\n// The restore path refreshes an expired token at boot. The old code destroyed the\n// local session on ANY refresh failure, so a network blip - common on mobile -\n// signed the user out. Only a real HTTP rejection of the refresh token proves the\n// session is invalid; anything else is unknown, and the safe move is to RETAIN local\n// state and retry. Keeping a genuinely dead session locally is harmless: every\n// request still fails closed server-side, and the next refresh that reaches the\n// server clears it. Destroying a live session on a blip is user-visible damage.\n//\n// `/session/refresh` answers 401 (session_revoked / invalid_grant) when the token is\n// dead. 400 (bad request), 408/429 (transient), and 5xx are NOT proof the session is\n// invalid, and a network/DNS/timeout error carries no HTTP response at all.\n//\n// This is the single classifier for every refresh path: the per-request freshness\n// check (auth-token-freshness) and the boot-time restore paths (web + RN session\n// managers) all import it, so \"definitive\" means the same thing everywhere. It lives\n// in this leaf module to avoid an import cycle between those consumers.\nexport function isDefinitiveRejection(err) {\n    var _a;\n    const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n    return status === 401 || status === 403;\n}\n// How long past the id token's own `exp` a session may survive purely on\n// transport failures.\n//\n// \"Retain on a blip\" must not become \"retain forever\". A statusless failure is\n// unknown, so the first ones are absorbed - but a revoked session, or a gateway\n// that rewrites the issuer's 401 into a 502, would otherwise keep\n// isAuthenticated() reporting a signed-in user for as long as the device never\n// reaches the issuer again. One day covers an offline flight or a bad-network day\n// while making the retention finite: past it, an unrefreshable session is cleared\n// and the user is asked to sign in again.\nexport const TRANSPORT_RETENTION_GRACE_MS = 24 * 60 * 60 * 1000;\n/**\n * May a session whose refresh failed WITHOUT a definitive rejection be kept?\n *\n * `expSeconds` is the id token's `exp` claim. Fails closed: a missing or\n * non-numeric expiry is not a usable bound, so such a session is never retained.\n */\nexport function mayRetainAfterTransportFailure(expSeconds, now = Date.now()) {\n    if (typeof expSeconds !== 'number' || !Number.isFinite(expSeconds))\n        return false;\n    return now <= expSeconds * 1000 + TRANSPORT_RETENTION_GRACE_MS;\n}\n","// Shared session-binding guard for the web + React Native session managers, so\n// the cross-principal refresh guard (#220 / #221) lives in ONE place and the two\n// managers can't drift apart. Base64url decoding differs by platform (browser\n// atob vs a configured decoder), so the caller passes its own decoder in.\n/**\n * Extract the `custom:walletAddress` claim from a JWT idToken. Returns undefined\n * when the token has no wallet claim or cannot be decoded.\n */\nexport function idTokenWalletAddress(idToken, decodeBase64Url) {\n    try {\n        const payloadB64 = idToken.split(\".\")[1];\n        if (!payloadB64)\n            return undefined;\n        const wallet = JSON.parse(decodeBase64Url(payloadB64))[\"custom:walletAddress\"];\n        return typeof wallet === \"string\" && wallet.length > 0 ? wallet : undefined;\n    }\n    catch (_a) {\n        return undefined;\n    }\n}\n/**\n * Whether a refreshed idToken may be grafted onto the CURRENTLY-stored session.\n *\n * A silent refresh started for user A can complete after storage was replaced\n * with user B (a login, guest→wallet upgrade, or a cross-tab login). Overwriting\n * B's tokens with A's — the app-id matches, so the old guard let it through —\n * installs a genuine-but-WRONG session: the UI shows B while the app authenticates\n * as A (#220 / #221). Refuse the write when the refreshed token binds to a\n * DIFFERENT wallet than the one currently stored. A tokenless/addressless session\n * (guest / opaque) preserves the prior behavior (returns true).\n */\nexport function refreshedTokenMayReplaceStored(newIdToken, storedAddress, decodeBase64Url) {\n    const tokenWallet = idTokenWalletAddress(newIdToken, decodeBase64Url);\n    if (!tokenWallet || !storedAddress)\n        return true;\n    return tokenWallet === storedAddress;\n}\n","/**\n * The one signal core sends upward when a stored session stops existing.\n *\n * `tarobase-core` cannot import `js-sdk` (that would be a cycle), and core has no\n * event bus, so a session dying inside a session manager used to be invisible to\n * the SDK: `setCurrentUser(null)` was only ever called by `logout()` and `init()`.\n * The result was a UI that kept showing a connected wallet long after the session\n * it was showing had been wiped, which is exactly what let a wallet-review UI\n * freeze a review against a wallet the server no longer knew about.\n *\n * `js-sdk` registers a handler at init; core fires it ONLY when storage was\n * actually cleared, never on a failed-but-preserved refresh. Firing on a\n * preserved session would log people out on a transient network blip.\n */\nlet handlers = [];\n/**\n * Register a listener for \"the stored session is gone\".\n * Returns an unsubscribe function.\n */\nexport function onSessionCleared(handler) {\n    handlers.push(handler);\n    return () => {\n        handlers = handlers.filter((h) => h !== handler);\n    };\n}\n/**\n * Announce that session storage was cleared.\n *\n * Call this ONLY after a removal actually happened. Handlers are best-effort: a\n * throwing listener must not turn a successful clear into a failed one, because\n * the storage mutation has already committed by this point.\n */\nexport function notifySessionCleared() {\n    for (const handler of handlers) {\n        try {\n            handler();\n        }\n        catch (_a) {\n            // A listener's failure cannot un-clear storage; keep notifying the rest.\n        }\n    }\n}\n/** Test seam: drop every registered handler. */\nexport function resetSessionClearedHandlers() {\n    handlers = [];\n}\n","/**\n * The one protocol every session-storage mutation goes through.\n *\n * WHY THIS EXISTS\n *\n * `localStorage` is shared by every tab on an origin but offers no atomic\n * compare-and-set spanning a read and a write, and each tab is a separate JS\n * realm, so an in-memory guard cannot serialize them. The old code relied on\n * doing its read → check → write inside one synchronous turn, which is only\n * atomic *within* a realm.\n *\n * That is not a theoretical gap. `REFRESH_REUSE_GRACE_MS` on the issuer is 60s,\n * so two tabs presenting the same refresh token inside that window BOTH succeed\n * and BOTH receive the same successor refresh token — while each response mints\n * its own distinct idToken. Concurrent cross-tab commits are a designed-for\n * occurrence, not an edge case.\n *\n * Two failures follow from an unlocked read-then-write, and both are closed here:\n *\n *   1. Lost update / resurrection. Tab A reads, tab B logs in (or logs out), tab A\n *      writes its stale blob back. B's login is silently replaced, or a logged-out\n *      session comes back to life.\n *   2. Spurious \"the user changed\". Tab B's commit finds tab A's blob, which\n *      matches neither B's snapshot nor B's own result because the idTokens\n *      differ — even though it is the same user and the same login.\n *\n * THE CRITICAL SECTION IS THE COMMIT, NOT THE NETWORK CALL\n *\n * The lock covers read → compare → write only. The refresh POST happens outside\n * it: holding a cross-tab lock across a 30s network call would serialize every\n * tab behind the slowest one. This is safe because the snapshot captured before\n * the network call is used only for COMPARISON. What actually gets written is\n * decided against storage re-read inside the lock, so a login or logout that lands\n * during the network call is always observed.\n *\n * NO BEST-EFFORT FALLBACK\n *\n * A `localStorage` lease was considered and rejected: its own acquire sequence is\n * a non-atomic read-then-write across realms, and a backgrounded tab can be frozen\n * past any lease timeout and then resume and write. Both leave exactly the windows\n * this module exists to close, so a browser without Web Locks fails closed instead.\n * Absence of `navigator.locks` does NOT imply a single realm — such a browser still\n * has tabs. Single realm is determined by the absence of `localStorage`.\n */\nconst SESSION_LOCK_NAME = \"bounded_session_mutation\";\nexport const UNSUPPORTED_ENVIRONMENT_CODE = \"unsupported_environment\";\n/**\n * Thrown when authenticated session work is attempted in a browser that shares\n * `localStorage` across tabs but cannot serialize access to it. Reads and\n * anonymous requests are unaffected; only session mutation is refused.\n */\nexport class SessionEnvironmentError extends Error {\n    constructor(message) {\n        super(message);\n        this.code = UNSUPPORTED_ENVIRONMENT_CODE;\n        this.name = \"SessionEnvironmentError\";\n    }\n}\n/**\n * True when nothing outside this realm can touch session storage.\n *\n * Keyed on `localStorage`, not on `window`: React Native defines `window` but\n * stores sessions through a per-process StorageAdapter, and Node/SSR has neither.\n * A browser is the only multi-realm case, and `localStorage` is what makes it one.\n */\nfunction isSingleRealm() {\n    return typeof localStorage === \"undefined\";\n}\nfunction hasWebLocks() {\n    var _a;\n    return typeof navigator !== \"undefined\"\n        && typeof ((_a = navigator.locks) === null || _a === void 0 ? void 0 : _a.request) === \"function\";\n}\n/**\n * Run `fn` with exclusive access to session storage across every tab on this origin.\n *\n * Single-realm runtimes execute directly. Browsers serialize through Web Locks.\n * A browser without Web Locks throws rather than running unserialized.\n */\nexport async function withSessionLock(fn) {\n    if (isSingleRealm()) {\n        return await fn();\n    }\n    if (!hasWebLocks()) {\n        throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n            \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n            \"anonymous reads still work.\");\n    }\n    return await navigator.locks.request(SESSION_LOCK_NAME, { mode: \"exclusive\" }, async () => await fn());\n}\n/** Throws if this environment cannot safely mutate a session. Cheap pre-flight. */\nexport function assertSessionMutationSupported() {\n    if (isSingleRealm() || hasWebLocks())\n        return;\n    throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n        \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n        \"anonymous reads still work.\");\n}\n/**\n * Opaque per-login identifier stamped into the stored session.\n *\n * Minted on every `storeSession` (login, guest upgrade, wallet switch) and\n * PRESERVED across refresh commits. That is the whole point: it is what makes\n * \"S1 refreshed into S1'\" provable and distinguishable from \"someone logged in\n * again\", which token equality and address equality both get wrong — token\n * equality rejects a valid post-refresh retry, and address equality accepts a\n * same-wallet re-login as if it were the same session.\n *\n * The issuer has a server-side `familyId` that would serve, but `/session/refresh`\n * does not return it, so this is client-side.\n */\nexport function mintSessionGeneration() {\n    const c = typeof crypto !== \"undefined\" ? crypto : undefined;\n    if (typeof (c === null || c === void 0 ? void 0 : c.randomUUID) === \"function\")\n        return c.randomUUID();\n    if (typeof (c === null || c === void 0 ? void 0 : c.getRandomValues) === \"function\") {\n        const bytes = c.getRandomValues(new Uint8Array(16));\n        return Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n    }\n    // Last resort only; every runtime the SDK targets provides one of the above.\n    return `g${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n/**\n * Decide a commit against what storage ACTUALLY holds right now.\n *\n * Must be called inside `withSessionLock`, with `current` read inside that same\n * critical section — comparing against a value read before the network call is\n * exactly the race this exists to prevent.\n */\nexport function decideCommit(current, expected, next) {\n    var _a;\n    // Absence is SUPERSEDED, never \"free to write\". A logout that lands between a\n    // refresh's read and its write must not be undone by that write. This is the\n    // backstop that makes session resurrection impossible.\n    if (!current)\n        return \"superseded\";\n    // A caller with no captured generation cannot prove lineage, so it must not\n    // write. Reads mint a generation for legacy sessions before returning them, so\n    // in practice this only catches a request that was in flight across that\n    // upgrade. Fail closed: the caller retries and gets a provable session.\n    if (expected.generation === null)\n        return \"superseded\";\n    // A different generation means a different LOGIN, which the address-based guard\n    // cannot see when the same wallet signs in again.\n    if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== expected.generation) {\n        return \"superseded\";\n    }\n    if (current.idToken === next.idToken && current.refreshToken === next.refreshToken) {\n        return \"already-equal\";\n    }\n    // Storage is exactly what this caller read before it went to the network, so\n    // nothing has moved underneath and this write is the legitimate one.\n    if (expected.idToken === undefined || current.idToken === expected.idToken) {\n        return \"applied\";\n    }\n    // Same login, but storage has moved on: another caller's refresh of this same\n    // session already landed. Theirs is the current truth — its rotated refresh\n    // token is the live one — so defer rather than overwrite. Reporting a principal\n    // change here would fail ordinary concurrent requests at expiry, which is the\n    // common case, not a rare one.\n    return \"same-generation-winner\";\n}\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig, getConfiguredSessionNamespace } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nexport class WebSessionManager {\n    static scopedStorageKey() {\n        return 'bounded_session_storage:v2:' + getConfiguredSessionNamespace();\n    }\n    static get BOUNDED_SESSION_STORAGE_KEY() {\n        const scoped = this.scopedStorageKey();\n        return localStorage.getItem(scoped + ':scope') === 'app' || localStorage.getItem(scoped) !== null\n            ? scoped : 'bounded_session_storage';\n    }\n    static logoutKey() { return this.scopedStorageKey() + ':logout'; }\n    /** Capture before login's network work; checked under the session mutation lock. */\n    static captureSessionEstablishment() {\n        var _a, _b;\n        const namespace = getConfiguredSessionNamespace();\n        const epoch = this.establishmentEpoch;\n        const generation = (_b = (_a = this.readRaw()) === null || _a === void 0 ? void 0 : _a.sessionGeneration) !== null && _b !== void 0 ? _b : null;\n        const logout = localStorage.getItem(this.logoutKey());\n        return () => {\n            var _a, _b;\n            if (namespace !== getConfiguredSessionNamespace() || epoch !== this.establishmentEpoch\n                || generation !== ((_b = (_a = this.readRaw()) === null || _a === void 0 ? void 0 : _a.sessionGeneration) !== null && _b !== void 0 ? _b : null)\n                || logout !== localStorage.getItem(this.logoutKey()))\n                throw new Error('session_establishment_superseded');\n        };\n    }\n    /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n    static readRaw() {\n        if (typeof window === \"undefined\")\n            return null;\n        const raw = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n        if (!raw)\n            return null;\n        try {\n            return JSON.parse(raw);\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    static writeRaw(sessionObj) {\n        localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n    }\n    /**\n     * Read the session, stamping a `sessionGeneration` if it predates them.\n     *\n     * Sessions written before generations existed have no lineage marker, so a\n     * later refresh could not prove it descended from them. Minting on read\n     * upgrades them in place; a request already in flight across that mint carries\n     * no generation and fails closed at commit rather than writing unprovably.\n     */\n    static async readSessionWithGeneration() {\n        const existing = this.readRaw();\n        if (!existing)\n            return null;\n        if (existing.sessionGeneration)\n            return existing;\n        return await withSessionLock(() => {\n            // Re-read inside the lock: another tab may have minted one already.\n            const current = this.readRaw();\n            if (!current)\n                return null;\n            if (current.sessionGeneration)\n                return current;\n            const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n            this.writeRaw(upgraded);\n            return upgraded;\n        });\n    }\n    /**\n     * Decode a base64url-encoded string (used by JWT payloads).\n     * Normalises base64url → standard base64 before calling browser atob().\n     */\n    static decodeBase64Url(input) {\n        let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n        const pad = b64.length % 4;\n        if (pad === 2)\n            b64 += '==';\n        else if (pad === 3)\n            b64 += '=';\n        return atob(b64);\n    }\n    /* ------------------------------------------------------------------ */\n    /* STORE                                                              */\n    /* ------------------------------------------------------------------ */\n    static async storeSession(address, accessToken, idToken, refreshToken, issuer, beforeCommit) {\n        var _a;\n        if (typeof window === \"undefined\")\n            return;\n        let appScoped = false;\n        // JWT-wallet binding: refuse to store a session whose idToken is bound\n        // to a different wallet than `address`. Prevents races that would otherwise\n        // leave localStorage with mismatched address/token state.\n        try {\n            const payloadB64 = idToken.split(\".\")[1];\n            if (payloadB64) {\n                const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n                appScoped = payload[\"custom:walletScope\"] === \"app\";\n                const tokenWallet = payload[\"custom:walletAddress\"];\n                if (tokenWallet && tokenWallet !== address) {\n                    throw new Error(`[WebSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n                }\n                if (!tokenWallet) {\n                    console.warn(\"[WebSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n                }\n            }\n        }\n        catch (err) {\n            if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n                throw err;\n            }\n            console.warn(\"[WebSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n        }\n        const config = await getConfig();\n        const currentAppId = config.appId;\n        const namespace = getConfiguredSessionNamespace();\n        const storageKey = appScoped || localStorage.getItem(this.scopedStorageKey() + \":scope\") === \"app\"\n            ? this.scopedStorageKey() : \"bounded_session_storage\";\n        // The auth issuer base that minted this session, so silent refresh POSTs to\n        // the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all\n        // wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).\n        const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n        // A login always starts a NEW generation. Refresh commits preserve it, so\n        // \"same generation\" means \"same login\", which is what lets a post-refresh\n        // retry be told apart from a re-login by the same wallet.\n        const generation = mintSessionGeneration();\n        await withSessionLock(() => {\n            beforeCommit === null || beforeCommit === void 0 ? void 0 : beforeCommit();\n            if (namespace !== getConfiguredSessionNamespace())\n                throw new Error(\"session_establishment_superseded\");\n            ++this.establishmentEpoch;\n            if (appScoped)\n                localStorage.setItem(this.scopedStorageKey() + \":scope\", \"app\");\n            localStorage.setItem(storageKey, JSON.stringify(Object.assign({ address,\n                accessToken,\n                idToken,\n                refreshToken, appId: currentAppId, sessionGeneration: generation }, (sessionIssuer ? { issuer: sessionIssuer } : {}))));\n        });\n        // Adoption can fail after persistence (for example, logout while the\n        // provider is loading). Remove only this incomplete login, even if the\n        // caller has since switched app configuration or another tab signed in.\n        return async () => {\n            const removed = await withSessionLock(() => {\n                const raw = localStorage.getItem(storageKey);\n                if (!raw || JSON.parse(raw).sessionGeneration !== generation)\n                    return false;\n                localStorage.removeItem(storageKey);\n                return true;\n            });\n            if (removed)\n                notifySessionCleared();\n        };\n    }\n    /* ------------------------------------------------------------------ */\n    /* GET                                                                */\n    /* ------------------------------------------------------------------ */\n    static async getSession() {\n        var _a;\n        if (typeof window === \"undefined\")\n            return null;\n        const sessionObj = await this.readSessionWithGeneration();\n        if (!sessionObj)\n            return null;\n        const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n        /* ---------- validate app-id ---------- */\n        const config = await getConfig();\n        if (sessionObj.appId && sessionObj.appId !== config.appId) {\n            await this.clearSessionIfGeneration(generation);\n            return null;\n        }\n        /* ---------- check JWT expiration ---------- */\n        // Deliberately NO skew buffer here, unlike the per-request freshness helper.\n        // This is the restore path: at boot a token already past `exp` is unusable\n        // either way, so clearing it is honest. Preserving it would only make\n        // isAuthenticated() lie about a session that cannot authenticate anything.\n        try {\n            // Check expiry on the ID TOKEN — it is ALWAYS a JWT. The OIDC access_token for\n            // email/social (hosted) logins is an OPAQUE string (not a JWT), so decoding IT\n            // here threw and the catch below wiped a perfectly valid session — breaking\n            // hosted login. The idToken carries the canonical identity (@user.id) + exp.\n            const { idToken } = sessionObj;\n            const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n            // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n            // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n            // so a forged or malformed token with no usable expiry would otherwise be\n            // accepted as valid forever.\n            const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n            if (expired) {\n                const { refreshToken } = sessionObj;\n                // Expired token with no way to refresh — clear the stale session\n                // (mirrors the refresh-failed branch below) so isAuthenticated()\n                // does not stay true and every request does not 401 + retry forever.\n                if (!refreshToken) {\n                    await this.clearSessionIfGeneration(generation);\n                    return null;\n                }\n                let refreshed;\n                try {\n                    refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n                }\n                catch (refreshErr) {\n                    // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n                    // refresh token is dead. A transport failure - offline, DNS, timeout,\n                    // 5xx - is unknown, not proof the session is invalid. Destroying local\n                    // state here signs the user out on a network blip (common on mobile),\n                    // so RETAIN it and return the existing session; the next request will\n                    // retry the refresh. The retention is BOUNDED by the token's own\n                    // expiry plus a grace window, so a revoked session - or an issuer 401\n                    // a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n                    // forever on a device that never reaches the issuer again.\n                    if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n                        await this.clearSessionIfGeneration(generation);\n                        return null;\n                    }\n                    return { address: sessionObj.address, session: sessionObj };\n                }\n                if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n                    const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, \n                    // Persist the ROTATED refresh token — the old one is now\n                    // single-use spent; reusing it would revoke the family.\n                    refreshed.refreshToken);\n                    // Superseded means a login or logout landed while we were on the\n                    // network. Returning our own stale null here would sign the UI out\n                    // of a session that is now perfectly valid, because init() applies\n                    // whatever restoreSession() returns. Re-read once and report THAT.\n                    if (committed.outcome === \"superseded\") {\n                        const current = this.readRaw();\n                        if (!current)\n                            return null;\n                        return { address: current.address, session: current };\n                    }\n                    const newObj = committed.session;\n                    if (!newObj)\n                        return null;\n                    return { address: newObj.address, session: newObj };\n                }\n                // The server answered but issued no usable tokens - a definitive refusal,\n                // not a transport failure - so clear the stale session to stop retry loops,\n                // but only if it is still the session we set out to refresh.\n                await this.clearSessionIfGeneration(generation);\n                return null;\n            }\n        }\n        catch (err) {\n            // Token decode or refresh failed — clear stale session to prevent retry loops\n            await this.clearSessionIfGeneration(generation);\n            return null;\n        }\n        return { address: sessionObj.address, session: sessionObj };\n    }\n    /* ------------------------------------------------------------------ */\n    /* CLEAR                                                              */\n    /* ------------------------------------------------------------------ */\n    /**\n     * Remove the session unconditionally (logout, app-id mismatch, dead refresh).\n     *\n     * ASYNC AND LOCKED, and callers MUST await it. Two failure modes hang on this:\n     *\n     *  - Removing outside the lock lets a refresh that read before the logout write\n     *    the session back afterwards, resurrecting a logged-out session.\n     *  - Not awaiting lets `logout()` return while the credential is still in\n     *    storage, so the very next request authenticates as the user who just left.\n     */\n    static async clearSession() {\n        if (typeof window === \"undefined\")\n            return;\n        ++this.establishmentEpoch;\n        const key = this.BOUNDED_SESSION_STORAGE_KEY;\n        const logoutKey = this.logoutKey();\n        const removed = await withSessionLock(() => {\n            localStorage.setItem(logoutKey, mintSessionGeneration());\n            if (localStorage.getItem(key) === null)\n                return false;\n            localStorage.removeItem(key);\n            return true;\n        });\n        // Only announce a clear that actually happened, so a no-op cannot sign out\n        // a UI that was already signed out.\n        if (removed)\n            notifySessionCleared();\n    }\n    /**\n     * Remove the session only if it is still the one identified by `generation`.\n     *\n     * Used by every failure path that wants to drop a dead session without\n     * trampling a newer login that landed while the failure was in flight.\n     */\n    static async clearSessionIfGeneration(generation) {\n        if (typeof window === \"undefined\")\n            return;\n        const removed = await withSessionLock(() => {\n            var _a;\n            const current = this.readRaw();\n            if (!current)\n                return false;\n            // No captured generation means no proof this is the session we meant to\n            // drop. Leave it alone rather than risk removing a replacement.\n            if (generation === null)\n                return false;\n            if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n                return false;\n            localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return true;\n        });\n        if (removed)\n            notifySessionCleared();\n    }\n    /* ------------------------------------------------------------------ */\n    /* IS-AUTH                                                            */\n    /* ------------------------------------------------------------------ */\n    static isAuthenticated() {\n        // NOTE: this remains synchronous to stay backward compatible\n        return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n    }\n    /* ------------------------------------------------------------------ */\n    /* TOKEN HELPERS                                                      */\n    /* ------------------------------------------------------------------ */\n    // These reads are DEFENSIVE (try/catch -> treat a corrupt blob as absent).\n    // logout() reads the refresh token + issuer BEFORE the session is cleared; if a\n    // corrupt (non-JSON) blob threw out of the read, logout would abort with the\n    // credential still in storage while isAuthenticated() kept reporting true, so\n    // sign-out could never complete. A corrupt blob is unusable either way, so\n    // reporting \"no token\" lets the clear path proceed and finish the sign-out.\n    static getIdToken() {\n        if (typeof window === \"undefined\")\n            return null;\n        try {\n            const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? JSON.parse(session).idToken : null;\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    static getRefreshToken() {\n        if (typeof window === \"undefined\")\n            return null;\n        try {\n            const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? JSON.parse(session).refreshToken : null;\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    /** The issuer base that minted this session (for routing silent refresh). */\n    static getIssuer() {\n        var _a;\n        if (typeof window === \"undefined\")\n            return null;\n        try {\n            const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n        }\n        catch (_b) {\n            return null;\n        }\n    }\n    /* ------------------------------------------------------------------ */\n    /* UPDATE TOKENS                                                      */\n    /* ------------------------------------------------------------------ */\n    /**\n     * Commit refreshed tokens, bound to the session generation they were minted for.\n     *\n     * Returns WHICH of the four outcomes happened, and the session the caller must\n     * actually use. The old version returned void and silently dropped a refused\n     * write, so `getFreshAuthToken` handed back the refreshed token regardless — a\n     * request could then execute as the previous user while storage and the UI had\n     * already moved to a new one.\n     *\n     * Never hand back `idToken` directly: use `result.session`.\n     */\n    static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n        if (typeof window === \"undefined\")\n            return { outcome: \"superseded\", session: null };\n        // Resolve config BEFORE taking the lock: no awaits are allowed inside the\n        // critical section, or another realm could interleave between read and write.\n        const config = await getConfig();\n        const result = await withSessionLock(() => {\n            var _a;\n            // Read INSIDE the lock. The snapshot the caller captured before its\n            // network refresh is only a comparison key; what gets written is decided\n            // against what storage holds right now.\n            const current = this.readRaw();\n            /* ---------- app-id guard ---------- */\n            if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n                localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n                return { outcome: \"superseded\", session: null, cleared: true };\n            }\n            const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n                accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n                ? { refreshToken }\n                : {}));\n            const outcome = decideCommit(current, expected, next);\n            if (outcome === \"superseded\")\n                return { outcome, session: null };\n            // Another caller's refresh of this same login already landed. Theirs is\n            // the truth; reporting a principal change here would fail every ordinary\n            // concurrent request at expiry, which is the common case.\n            if (outcome === \"same-generation-winner\")\n                return { outcome, session: current };\n            if (outcome === \"already-equal\")\n                return { outcome, session: current };\n            /* ---------- cross-principal guard (#221) ---------- */\n            // Belt-and-braces alongside the generation check: refuse to graft a\n            // refreshed token onto a DIFFERENT wallet's stored session. Generations\n            // catch a same-wallet re-login, which this address check cannot.\n            if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n                console.warn(\"[WebSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n                return { outcome: \"superseded\", session: null };\n            }\n            (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n            this.writeRaw(next);\n            return { outcome, session: next };\n        });\n        if (result.cleared)\n            notifySessionCleared();\n        return { outcome: result.outcome, session: result.session };\n    }\n}\nWebSessionManager.establishmentEpoch = 0;\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nlet _config = null;\nexport class ReactNativeSessionManager {\n    /**\n     * Must be called once before any other method.\n     *\n     * SECURITY: the persisted blob includes the long-lived refresh token, so the\n     * `storage` adapter MUST encrypt at rest. The supported pattern is MMKV with an\n     * `encryptionKey` held in the OS keystore (Keychain on iOS / Keystore on Android)\n     * via react-native-keychain - NOT a keyless MMKV instance, and NEVER a hardcoded key.\n     *\n     * ```ts\n     * import { ReactNativeSessionManager } from '@bounded-sh/core';\n     * import { MMKV } from 'react-native-mmkv';\n     * import * as Keychain from 'react-native-keychain';\n     * import { decode } from 'base-64';\n     *\n     * // Fetch (or lazily mint) a random 256-bit key stored in the OS keystore.\n     * // The keystore - not the app bundle - is the root of trust for the key.\n     * async function getMmkvEncryptionKey(): Promise<string> {\n     *   const service = 'sh.bounded.session.mmkv';\n     *   const existing = await Keychain.getGenericPassword({ service });\n     *   if (existing) return existing.password;\n     *   const bytes = crypto.getRandomValues(new Uint8Array(32));\n     *   const key = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n     *   await Keychain.setGenericPassword('bounded', key, { service });\n     *   return key;\n     * }\n     *\n     * const encryptionKey = await getMmkvEncryptionKey();\n     * const mmkv = new MMKV({ id: 'bounded-session', encryptionKey });\n     * ReactNativeSessionManager.configure({\n     *   storage: {\n     *     getItem: (k) => mmkv.getString(k) ?? null,\n     *     setItem: (k, v) => mmkv.set(k, v),\n     *     removeItem: (k) => mmkv.delete(k),\n     *   },\n     *   atob: decode,\n     * });\n     * ```\n     *\n     * Unencrypted adapters (bare MMKV, AsyncStorage) are a credential-theft risk and\n     * require an explicit opt-in - the manager cannot verify encryption for you:\n     *\n     * ```ts\n     * // Development only: acknowledge that tokens are stored in plaintext.\n     * ReactNativeSessionManager.configure({ storage, atob: decode, allowUnsafePlaintext: true });\n     * ```\n     */\n    static configure(cfg) {\n        if (cfg.allowUnsafePlaintext === true) {\n            // The developer explicitly opted into a plaintext store. Make it loud so it is\n            // never a silent production default. (We cannot detect plaintext for the\n            // non-opted-in case, hence the required, documented acknowledgment flag.)\n            console.warn(\"[ReactNativeSessionManager] configure(): allowUnsafePlaintext=true - the session \" +\n                \"(including the long-lived refresh token) is being stored UNENCRYPTED. Use an \" +\n                \"encrypted backend (MMKV with a Keychain-held encryptionKey / expo-secure-store) \" +\n                \"before shipping; plaintext tokens are readable from a rooted device or a backup.\");\n        }\n        _config = cfg;\n    }\n    /**\n     * Whether configure() has been called. This is the canonical \"are we on\n     * React Native?\" signal used by getActiveSessionManager(): RN consumers MUST\n     * call configure() at startup, while web/Node never do. Far more reliable\n     * than sniffing `typeof window` (React Native defines a global `window`, so\n     * that test misclassifies RN as web and routes session writes to a\n     * non-existent localStorage).\n     */\n    static isConfigured() {\n        return _config !== null;\n    }\n    static getStorage() {\n        if (!_config) {\n            throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n        }\n        return _config.storage;\n    }\n    static decodeBase64(input) {\n        if (!_config) {\n            throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n        }\n        return _config.atob(input);\n    }\n    /**\n     * Decode a base64url-encoded string (used by JWT payloads).\n     * Normalises base64url → standard base64 before decoding.\n     */\n    static decodeBase64Url(input) {\n        let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n        const pad = b64.length % 4;\n        if (pad === 2)\n            b64 += '==';\n        else if (pad === 3)\n            b64 += '=';\n        return this.decodeBase64(b64);\n    }\n    /* ------------------------------------------------------------------ */\n    /* STORE                                                              */\n    /* ------------------------------------------------------------------ */\n    static async storeSession(address, accessToken, idToken, refreshToken, issuer) {\n        var _a;\n        // JWT-wallet binding: refuse to store a session whose idToken is bound\n        // to a different wallet than `address`. Prevents races that would otherwise\n        // leave storage with mismatched address/token state.\n        try {\n            const payloadB64 = idToken.split(\".\")[1];\n            if (payloadB64) {\n                const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n                const tokenWallet = payload[\"custom:walletAddress\"];\n                if (tokenWallet && tokenWallet !== address) {\n                    throw new Error(`[ReactNativeSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n                }\n                if (!tokenWallet) {\n                    console.warn(\"[ReactNativeSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n                }\n            }\n        }\n        catch (err) {\n            if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n                throw err;\n            }\n            console.warn(\"[ReactNativeSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n        }\n        const config = await getConfig();\n        const currentAppId = config.appId;\n        // Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/\n        // guest default to authApiUrl). See WebSessionManager for the rationale.\n        const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n        // A login always starts a NEW generation; refresh commits preserve it.\n        // See WebSessionManager for why lineage cannot be inferred from tokens or\n        // address. RN is single-realm, so the lock resolves to direct execution.\n        await withSessionLock(() => {\n            this.writeRaw(Object.assign({ address,\n                accessToken,\n                idToken,\n                refreshToken, appId: currentAppId, sessionGeneration: mintSessionGeneration() }, (sessionIssuer ? { issuer: sessionIssuer } : {})));\n        });\n    }\n    /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n    static readRaw() {\n        try {\n            const raw = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return raw ? JSON.parse(raw) : null;\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    static writeRaw(sessionObj) {\n        this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n    }\n    /** Mirror of WebSessionManager.readSessionWithGeneration. */\n    static async readSessionWithGeneration() {\n        const existing = this.readRaw();\n        if (!existing)\n            return null;\n        if (existing.sessionGeneration)\n            return existing;\n        return await withSessionLock(() => {\n            const current = this.readRaw();\n            if (!current)\n                return null;\n            if (current.sessionGeneration)\n                return current;\n            const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n            this.writeRaw(upgraded);\n            return upgraded;\n        });\n    }\n    /* ------------------------------------------------------------------ */\n    /* GET                                                                */\n    /* ------------------------------------------------------------------ */\n    static async getSession() {\n        var _a;\n        const sessionObj = await this.readSessionWithGeneration();\n        if (!sessionObj)\n            return null;\n        const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n        /* ---------- validate app-id ---------- */\n        const config = await getConfig();\n        if (sessionObj.appId && sessionObj.appId !== config.appId) {\n            await this.clearSessionIfGeneration(generation);\n            return null;\n        }\n        /* ---------- check JWT expiration ---------- */\n        // No skew buffer, deliberately: this is the restore path, and at boot a token\n        // already past `exp` cannot authenticate anything. See WebSessionManager.\n        try {\n            // Expiry on the ID TOKEN (always a JWT). The OIDC access_token for email/social\n            // logins is opaque, so decoding it threw → the catch wiped a valid session.\n            const { idToken } = sessionObj;\n            const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n            // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n            // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n            // so a forged or malformed token with no usable expiry would otherwise be\n            // accepted as valid forever.\n            const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n            if (expired) {\n                const { refreshToken } = sessionObj;\n                // Expired token with no way to refresh — clear the stale session\n                // (mirrors the refresh-failed branch below) so isAuthenticated()\n                // does not stay true and every request does not 401 + retry forever.\n                if (!refreshToken) {\n                    await this.clearSessionIfGeneration(generation);\n                    return null;\n                }\n                let refreshed;\n                try {\n                    refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n                }\n                catch (refreshErr) {\n                    // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n                    // refresh token is dead. A transport failure - offline, DNS, timeout,\n                    // 5xx - is unknown, not proof the session is invalid. On mobile these\n                    // blips are common, so destroying local state here signs the user out\n                    // on a bad network. RETAIN it and return the existing session; the next\n                    // request retries the refresh. The retention is BOUNDED by the token's\n                    // own expiry plus a grace window, so a revoked session - or an issuer\n                    // 401 a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n                    // forever on a device that never reaches the issuer again.\n                    if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n                        await this.clearSessionIfGeneration(generation);\n                        return null;\n                    }\n                    return { address: sessionObj.address, session: sessionObj };\n                }\n                if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n                    const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n                    // Superseded means a login or logout landed mid-refresh. Returning\n                    // our stale null would sign the UI out of a session that is now\n                    // valid, since init() applies whatever restoreSession() returns.\n                    if (committed.outcome === \"superseded\") {\n                        const current = this.readRaw();\n                        if (!current)\n                            return null;\n                        return { address: current.address, session: current };\n                    }\n                    const newObj = committed.session;\n                    if (!newObj)\n                        return null;\n                    return { address: newObj.address, session: newObj };\n                }\n                // The server answered but issued no usable tokens - a definitive refusal,\n                // not a transport failure - so clear the stale session to stop retry loops,\n                // but only if it is still the session we set out to refresh.\n                await this.clearSessionIfGeneration(generation);\n                return null;\n            }\n        }\n        catch (err) {\n            // Token decode or refresh failed — clear stale session to prevent retry loops\n            await this.clearSessionIfGeneration(generation);\n            return null;\n        }\n        return { address: sessionObj.address, session: sessionObj };\n    }\n    /* ------------------------------------------------------------------ */\n    /* CLEAR                                                              */\n    /* ------------------------------------------------------------------ */\n    /**\n     * Remove the session unconditionally. Async and awaited for the same reason as\n     * the web manager: a caller that does not await lets logout() return while the\n     * credential is still readable.\n     */\n    static async clearSession() {\n        const removed = await withSessionLock(() => {\n            if (this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY) === null)\n                return false;\n            this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return true;\n        });\n        if (removed)\n            notifySessionCleared();\n    }\n    /** Remove only if the stored session is still the one identified by `generation`. */\n    static async clearSessionIfGeneration(generation) {\n        const removed = await withSessionLock(() => {\n            var _a;\n            const current = this.readRaw();\n            if (!current)\n                return false;\n            if (generation === null)\n                return false;\n            if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n                return false;\n            this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return true;\n        });\n        if (removed)\n            notifySessionCleared();\n    }\n    /* ------------------------------------------------------------------ */\n    /* IS-AUTH                                                            */\n    /* ------------------------------------------------------------------ */\n    static isAuthenticated() {\n        return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n    }\n    /* ------------------------------------------------------------------ */\n    /* TOKEN HELPERS                                                      */\n    /* ------------------------------------------------------------------ */\n    static getIdToken() {\n        try {\n            const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? JSON.parse(session).idToken : null;\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    /** The issuer base that minted this session (for routing silent refresh). */\n    static getIssuer() {\n        var _a;\n        try {\n            const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n        }\n        catch (_b) {\n            return null;\n        }\n    }\n    static getRefreshToken() {\n        try {\n            const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n            return session ? JSON.parse(session).refreshToken : null;\n        }\n        catch (_a) {\n            return null;\n        }\n    }\n    /* ------------------------------------------------------------------ */\n    /* UPDATE TOKENS                                                      */\n    /* ------------------------------------------------------------------ */\n    /**\n     * Commit refreshed tokens bound to the generation they were minted for.\n     * Mirror of WebSessionManager.commitRefreshedTokens; see it for the rationale.\n     */\n    static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n        // Resolve config BEFORE the lock: no awaits inside the critical section.\n        const config = await getConfig();\n        const result = await withSessionLock(() => {\n            var _a;\n            const current = this.readRaw();\n            /* ---------- app-id guard ---------- */\n            if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n                this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n                return { outcome: \"superseded\", session: null, cleared: true };\n            }\n            const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n                accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n                ? { refreshToken }\n                : {}));\n            const outcome = decideCommit(current, expected, next);\n            if (outcome === \"superseded\")\n                return { outcome, session: null };\n            if (outcome === \"same-generation-winner\")\n                return { outcome, session: current };\n            if (outcome === \"already-equal\")\n                return { outcome, session: current };\n            /* ---------- cross-principal guard (#220) ---------- */\n            if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n                console.warn(\"[ReactNativeSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n                return { outcome: \"superseded\", session: null };\n            }\n            (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n            this.writeRaw(next);\n            return { outcome, session: next };\n        });\n        if (result.cleared)\n            notifySessionCleared();\n        return { outcome: result.outcome, session: result.session };\n    }\n}\nReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = \"bounded_session_storage\";\n","import { WebSessionManager } from './web-session-manager';\nimport { ReactNativeSessionManager } from './rn-session-manager';\n/**\n * Return the active CLIENT session manager for the current runtime.\n *\n * This is the single source of truth for \"which store holds the session token\"\n * and MUST be used everywhere the client reads/writes the session (login,\n * restore, logout, and — critically — the per-request auth-header path in\n * utils.ts). Previously this decision was made ad-hoc with\n * `typeof window !== 'undefined' ? WebSessionManager : ReactNativeSessionManager`,\n * which is wrong on React Native: RN defines a global `window`, so that test\n * picked WebSessionManager and then hit a non-existent `localStorage` — the\n * session was silently dropped (or threw), so every authenticated request 403'd.\n *\n * Decision rule: if a consumer configured the React Native session manager\n * (ReactNativeSessionManager.configure(), which RN apps call once at startup and\n * web/Node never do), we're on RN — use it. Otherwise use the localStorage-backed\n * WebSessionManager (which itself no-ops gracefully in Node/SSR where there is no\n * `window`). This changes ONLY React Native behavior; web and Node are unchanged.\n *\n * NOTE: this intentionally does NOT cover the SERVER (keypair) path — callers that\n * branch on `isServer` keep using ServerSessionManager and only fall through to\n * getActiveSessionManager() for the browser/RN client case.\n */\nexport function getActiveSessionManager() {\n    return ReactNativeSessionManager.isConfigured()\n        ? ReactNativeSessionManager\n        : WebSessionManager;\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer';\nimport nacl from \"tweetnacl\";\nimport { createSessionWithSignature, genAuthNonce } from \"./auth-api\";\nconst NO_AMBIENT_SERVER_SESSION = \"Server sessions are not process-global. Use createWalletClient({ keypair }) and call that wallet client's methods.\";\n/* A create that a concurrent clearSession()/setSession() invalidated must fail\n * closed rather than hand its stale, generation-mismatched session back to the\n * caller; the caller re-requests and gets a session for the current generation. */\nconst STALE_SESSION_CREATE = \"Server session create was superseded by a concurrent clearSession()/setSession(); retry to obtain a fresh session.\";\n/* ------------------------------------------------------------------ */\n/* SESSION MANAGER                                                     */\n/* ------------------------------------------------------------------ */\nexport class ServerSessionManager {\n    constructor(keypair, sessionFactory, sessionConfig) {\n        /* Private cache (lives for the life of the instance) */\n        this.session = null;\n        /* Coalesce concurrent getSession() calls into a single in-flight request */\n        this.pendingSession = null;\n        /* Monotonic generation, bumped on clear/set. An in-flight createSession() only\n         * commits its result to the cache if the generation still matches the value it\n         * captured when it started - so a clearSession()/setSession() that happens WHILE\n         * a create is in flight deterministically wins, and the late result can't\n         * silently re-install a session the caller just cleared/replaced (#259). */\n        this.generation = 0;\n        this.keypair = keypair !== null && keypair !== void 0 ? keypair : null;\n        this.sessionFactory = sessionFactory !== null && sessionFactory !== void 0 ? sessionFactory : null;\n        this.sessionConfig = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : null;\n    }\n    /**\n     * Create a session manager for a specific keypair.\n     * Each instance has its own independent session cache.\n     *\n     * `sessionConfig` (optional) pins the app+issuer the keypair signs/mints\n     * against, so re-signing after expiry never follows a later global init().\n     */\n    static forKeypair(keypair, sessionConfig) {\n        return new ServerSessionManager(keypair, undefined, sessionConfig);\n    }\n    /**\n     * Create an isolated server session manager for a non-Solana signer (currently\n     * EVM/SIWE). The factory must perform the signature exchange and return the\n     * canonical signer address with its tokens; no signer state becomes global.\n     */\n    static forSessionFactory(factory) {\n        if (typeof factory !== 'function')\n            throw new Error('A server session factory is required');\n        return new ServerSessionManager(undefined, factory);\n    }\n    /* ---------------------------------------------- *\n     * Session creation (instance method)\n     * ---------------------------------------------- */\n    async createSession() {\n        var _a;\n        if (this.sessionFactory) {\n            const session = await this.sessionFactory();\n            if (!session || typeof session.address !== 'string' || !session.address ||\n                typeof session.idToken !== 'string' || !session.idToken ||\n                typeof session.accessToken !== 'string' || !session.accessToken ||\n                typeof session.refreshToken !== 'string' || !session.refreshToken) {\n                throw new Error('Server signer session factory returned an invalid session');\n            }\n            return session;\n        }\n        if (!this.keypair) {\n            throw new Error(NO_AMBIENT_SERVER_SESSION);\n        }\n        const kp = this.keypair;\n        const address = kp.publicKey.toBase58();\n        const sessionConfig = (_a = this.sessionConfig) !== null && _a !== void 0 ? _a : undefined;\n        /* fetch nonce from auth API (bound to the snapshotted app+issuer) */\n        const nonce = await genAuthNonce(sessionConfig);\n        const { genSolanaMessage } = await import(\"./sol/solana-message\");\n        const message = await genSolanaMessage(address, nonce, sessionConfig === null || sessionConfig === void 0 ? void 0 : sessionConfig.appId);\n        /* sign the message */\n        const sigBytes = nacl.sign.detached(new TextEncoder().encode(message), kp.secretKey);\n        const signature = Buffer.from(sigBytes).toString(\"base64\");\n        /* call auth API (bound to the snapshotted app+issuer) */\n        const { accessToken, idToken, refreshToken, } = await createSessionWithSignature(address, message, signature, undefined, sessionConfig);\n        return { address, accessToken, idToken, refreshToken };\n    }\n    /* ---------------------------------------------- *\n     * GET (lazy-fetch)\n     * ---------------------------------------------- */\n    async getSession() {\n        if (this.session !== null) {\n            return this.session;\n        }\n        // If a session creation is already in-flight, reuse that promise\n        // instead of firing a second concurrent request.\n        if (this.pendingSession !== null) {\n            return this.pendingSession;\n        }\n        const startedGeneration = this.generation;\n        // Capture the composed promise so BOTH the cache commit and the in-flight\n        // pointer reset can verify this create is still the active one. A\n        // clearSession()/setSession() during the create may have started a NEWER\n        // create that now owns `pendingSession`; neither the commit nor the reset may\n        // touch state that no longer belongs to this create.\n        const pending = this.createSession()\n            .then((session) => {\n            if (this.generation !== startedGeneration) {\n                // A clear/set won the race while this create was in flight. Do NOT\n                // cache the now-invalidated session and do NOT return it to the\n                // caller - fail closed so the caller re-requests against the current\n                // generation instead of using a stale token.\n                throw new Error(STALE_SESSION_CREATE);\n            }\n            this.session = session;\n            return session;\n        })\n            .finally(() => {\n            // Release the in-flight pointer ONLY if it still refers to THIS create.\n            // A concurrent clearSession() nulled it and a newer create may already\n            // own it; clearing unconditionally would erase that create's coalescing\n            // and force later callers to redo the nonce/signature/session mint.\n            if (this.pendingSession === pending) {\n                this.pendingSession = null;\n            }\n        });\n        this.pendingSession = pending;\n        return pending;\n    }\n    /* ---------------------------------------------- *\n     * STORE  (overwrites the cached value)\n     * ---------------------------------------------- */\n    setSession(session) {\n        this.generation++;\n        this.session = session;\n    }\n    /* ---------------------------------------------- *\n     * CLEAR  (e.g. after explicit logout)\n     * ---------------------------------------------- */\n    clearSession() {\n        this.generation++;\n        this.session = null;\n        this.pendingSession = null;\n    }\n    /* ---------------------------------------------- *\n     * QUICK helpers\n     * ---------------------------------------------- */\n    isAuthenticated() {\n        return this.session !== null;\n    }\n    getIdToken() {\n        var _a, _b;\n        return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null;\n    }\n    getRefreshToken() {\n        var _a, _b;\n        return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.refreshToken) !== null && _b !== void 0 ? _b : null;\n    }\n}\n/* The default singleton exists only so top-level server calls fail closed. */\nServerSessionManager.instance = new ServerSessionManager();\n","/**\n * Safe base64 helpers for bounded-core.\n *\n * Uses the global atob/btoa when available (browser, RN with polyfill),\n * falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).\n *\n * These are used instead of bare `atob()`/`btoa()` so the core package\n * works in React Native without requiring the consumer to polyfill globals.\n *\n * Both directions are UTF-8-safe: bare btoa / Buffer('binary') are LATIN-1 and\n * throw (surrogate-pair emoji) or silently mangle (accents, CJK) any code point\n * > 0xFF, corrupting user text - e.g. an AI-query `prompt` - before it is sent.\n * safeBtoa base64s the UTF-8 bytes; safeAtob is its exact inverse, and the\n * realtime worker decodes the same bytes as UTF-8 (src/utf8-base64.ts). ASCII is\n * byte-identical either way, so JWT (decodeBase64Url) decoding is unaffected.\n */\nimport { Buffer } from 'buffer';\nexport function safeAtob(input) {\n    if (typeof globalThis.atob === 'function') {\n        const binary = globalThis.atob(input);\n        const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n        return new TextDecoder().decode(bytes);\n    }\n    return Buffer.from(input, 'base64').toString('utf-8');\n}\nexport function safeBtoa(input) {\n    const bytes = new TextEncoder().encode(input);\n    if (typeof globalThis.btoa === 'function') {\n        let binary = '';\n        for (let i = 0; i < bytes.length; i++)\n            binary += String.fromCharCode(bytes[i]);\n        return globalThis.btoa(binary);\n    }\n    return Buffer.from(bytes).toString('base64');\n}\n/**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before decoding.\n */\nexport function decodeBase64Url(input) {\n    let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n    const pad = b64.length % 4;\n    if (pad === 2)\n        b64 += '==';\n    else if (pad === 3)\n        b64 += '=';\n    return safeAtob(b64);\n}\n","// evm-utils.ts — the EVM twin of sol/sol-utils.ts's genSolanaMessage. It builds\n// the canonical EIP-4361 (Sign-In with Ethereum, SIWE) prompt the bounded-auth\n// issuer verifies, and normalizes EVM addresses to the single canonical form the\n// identity layer matches on.\n//\n// The SIWE message MUST match bounded-auth's parser byte-for-byte\n// (packages/cdk/cloudflare/bounded-auth/src/verify-siwe.ts → parseSiweMessage):\n//   <domain> wants you to sign in with your Ethereum account:\n//   <address>\n//   <blank>\n//   <statement>\n//   <blank>\n//   URI: <uri>\n//   Version: 1\n//   Chain ID: <chainId>\n//   Nonce: <nonce>\n//   Issued At: <ISO8601>\n//   Expiration Time: <ISO8601>\n//   Resources:\n//   - bounded:app:<appId>\n//\n// Bindings the verifier enforces (so we produce them exactly): the address is\n// lowercased (identity match is case-sensitive, so lowercase-at-boundary is\n// mandatory), the single `bounded:app:<appId>` resource binds the signature to\n// THIS app (a signature for one app must not mint a session for another — the\n// SIWE analog of genSolanaMessage's `App ID:` line), and Expiration Time is\n// REQUIRED and must fall within the issuer's 10-minute max validity window.\n/** Default statement — kept identical to genSolanaMessage's for a consistent prompt. */\nconst DEFAULT_STATEMENT = 'Sign this message to authenticate with our application.';\n/** Match bounded-auth's MAX_AUTH_WINDOW_MS (10 min); we default to a 5-min window. */\nconst DEFAULT_VALIDITY_MS = 5 * 60 * 1000;\n/**\n * Build the canonical EIP-4361 SIWE message the bounded-auth issuer verifies.\n *\n * @param address  the connected EVM account (lowercased into the prompt).\n * @param nonce    single-use nonce from genAuthNonce().\n * @param appId    the target app id (bound as the sole `bounded:app:<appId>` resource).\n * @param domain   RFC-3986 authority of the requesting site (e.g. window.location.host).\n * @param uri      the requesting URI; its origin is bound to the domain and actual browser Origin.\n */\nexport function genSiweMessage(address, nonce, appId, domain, uri, options = {}) {\n    var _a, _b, _c, _d, _e;\n    const addr = normalizeEvmAddress(address);\n    if (!addr)\n        throw new Error('SIWE address must be a 20-byte 0x-prefixed EVM address');\n    const statement = (_a = options.statement) !== null && _a !== void 0 ? _a : DEFAULT_STATEMENT;\n    const version = (_b = options.version) !== null && _b !== void 0 ? _b : '1';\n    const chainId = (_c = options.chainId) !== null && _c !== void 0 ? _c : 1;\n    if (statement !== DEFAULT_STATEMENT)\n        throw new Error('SIWE statement must use the canonical Bounded authentication text');\n    if (version !== '1')\n        throw new Error('SIWE version must be 1');\n    if (!Number.isSafeInteger(chainId) || chainId <= 0)\n        throw new Error('SIWE chainId must be a positive safe integer');\n    if (!/^[A-Za-z0-9]{8,}$/.test(nonce))\n        throw new Error('SIWE nonce must be at least 8 alphanumeric characters');\n    if (!appId || /[\\r\\n]/.test(appId))\n        throw new Error('SIWE appId is required and must be single-line');\n    if (!domain || domain !== domain.trim() || /[\\s/@?#\\\\]/.test(domain))\n        throw new Error('SIWE domain must be an RFC-3986 authority');\n    try {\n        const parsedAuthority = new URL(`https://${domain}`);\n        if (parsedAuthority.username || parsedAuthority.password || parsedAuthority.pathname !== '/' ||\n            parsedAuthority.search || parsedAuthority.hash || parsedAuthority.host.toLowerCase() !== domain) {\n            throw new Error('non-canonical authority');\n        }\n    }\n    catch (_f) {\n        throw new Error('SIWE domain must be a canonical lowercase RFC-3986 authority');\n    }\n    let parsedUri;\n    try {\n        parsedUri = new URL(uri);\n    }\n    catch (_g) {\n        throw new Error('SIWE URI must be an absolute URL');\n    }\n    const local = parsedUri.hostname === 'localhost' || parsedUri.hostname === '127.0.0.1' || parsedUri.hostname === '[::1]';\n    if (parsedUri.protocol !== 'https:' && !(local && parsedUri.protocol === 'http:')) {\n        throw new Error('SIWE URI must use HTTPS (HTTP is allowed only for localhost)');\n    }\n    if (parsedUri.username || parsedUri.password || parsedUri.hash || parsedUri.host.toLowerCase() !== domain.toLowerCase()) {\n        throw new Error('SIWE URI authority must match the SIWE domain');\n    }\n    const issuedAtDate = (_d = options.issuedAt) !== null && _d !== void 0 ? _d : new Date();\n    const expirationDate = (_e = options.expirationTime) !== null && _e !== void 0 ? _e : new Date(issuedAtDate.getTime() + DEFAULT_VALIDITY_MS);\n    if (!Number.isFinite(issuedAtDate.getTime()) || !Number.isFinite(expirationDate.getTime()) || expirationDate <= issuedAtDate) {\n        throw new Error('SIWE validity window is invalid');\n    }\n    if (expirationDate.getTime() - issuedAtDate.getTime() > 10 * 60 * 1000) {\n        throw new Error('SIWE validity window exceeds 10 minutes');\n    }\n    const issuedAt = issuedAtDate.toISOString();\n    const expirationTime = expirationDate.toISOString();\n    return (`${domain} wants you to sign in with your Ethereum account:\\n${addr}\\n\\n` +\n        `${statement}\\n\\n` +\n        `URI: ${parsedUri.toString()}\\n` +\n        `Version: ${version}\\n` +\n        `Chain ID: ${chainId}\\n` +\n        `Nonce: ${nonce}\\n` +\n        `Issued At: ${issuedAt}\\n` +\n        `Expiration Time: ${expirationTime}\\n` +\n        `Resources:\\n` +\n        `- bounded:app:${appId}`);\n}\n/**\n * Lowercase an EVM address to the canonical identity form. EVM addresses are\n * case-insensitive on-chain but the identity layer (@user.evmAddress) matches\n * case-sensitively, so every boundary normalizes to lowercase. Does not validate\n * shape — use normalizeEvmAddress() when the input is untrusted.\n */\nexport function toLowerEvmAddress(address) {\n    return address.trim().toLowerCase();\n}\n/**\n * Normalize an untrusted EVM address to canonical lowercase 0x-hex, or null when\n * it isn't a well-formed 20-byte hex address. Mirrors the realtime-worker's\n * normalizeEvmAddress (auth.ts) EXACTLY so a client-derived @user.evmAddress and\n * the server-authenticated one are byte-identical (fail-closed on malformed).\n */\nexport function normalizeEvmAddress(raw) {\n    if (typeof raw !== 'string')\n        return null;\n    const v = raw.trim().toLowerCase();\n    return /^0x[0-9a-f]{40}$/.test(v) ? v : null;\n}\n","/**\n * The one place a caller turns \"I need a credential\" into a usable token.\n *\n * Both transports go through this. The WebSocket path grew a good version of this\n * logic first; the HTTP path had none at all and simply sent whatever was in\n * storage, which is what let an expired token reach the server and come back as a\n * misleading policy denial.\n *\n * THE CONTRACT, which callers depend on:\n *\n *   returns null  -> there is no session. Send the request anonymously; public\n *                    reads must keep working for logged-out visitors.\n *   returns token -> use exactly this token.\n *   throws        -> there IS a session and it is unusable. NEVER fall back to an\n *                    anonymous request, or the caller lands in policy as an\n *                    anonymous user and gets the same misleading 403 this whole\n *                    change exists to remove.\n *\n * Four corrections over the WebSocket original, each of which was a real defect:\n *\n *   - No sticky module-global failure. The original latched any refresh failure\n *     into `ambientAuthFailure` and rethrew it on every later call, so ONE\n *     transient network blip disabled refresh until an unrelated auth-state\n *     change reset it.\n *   - \"Expiring soon\" and \"already expired\" are different. The original collapsed\n *     both behind a 60s buffer, so a transient refresh failure threw away a token\n *     that was still valid for another 59 seconds.\n *   - A missing or non-numeric `exp` is unusable, not fresh. `payload.exp * 1000`\n *     is NaN, and `now > NaN` is false, so such a token read as perfectly fresh.\n *   - Storage is cleared only on a DEFINITIVE rejection, never on a transient one.\n */\nimport { getConfig } from '../client/config';\nimport { decodeBase64Url } from './core-platform';\nimport { refreshSession } from './auth-api';\nimport { isDefinitiveRejection } from './refresh-error';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\n/**\n * Stable machine code for \"there is a session and it cannot be used\".\n *\n * The VALUE is deliberately unchanged from when this lived in subscription-v2 as\n * `WS_AUTH_EXPIRED_CODE`: it is public surface that consumers branch on\n * (`e.code === 'auth_expired'`), so renaming it would break them for no gain. Only\n * the identifier lost its `WS_` prefix, now that HTTP raises it too.\n *\n * The realtime worker's 401 body uses `invalid_or_expired_session` for the same\n * condition on the wire; this is the client-side counterpart.\n */\nexport const AUTH_EXPIRED_CODE = 'auth_expired';\n/** The principal changed under a request that was already in flight. */\nexport const AUTH_CHANGED_CODE = 'auth_changed';\nexport function makeAuthExpiredError(message, status) {\n    const err = new Error(`${AUTH_EXPIRED_CODE}: ${message}`);\n    err.code = AUTH_EXPIRED_CODE;\n    if (status !== undefined)\n        err.status = status;\n    return err;\n}\nexport function makeAuthChangedError(message) {\n    const err = new Error(`${AUTH_CHANGED_CODE}: ${message}`);\n    err.code = AUTH_CHANGED_CODE;\n    return err;\n}\nexport function isAuthExpiredError(error) {\n    const code = error === null || error === void 0 ? void 0 : error.code;\n    return !!error && typeof error === 'object'\n        && (code === AUTH_EXPIRED_CODE || code === AUTH_CHANGED_CODE);\n}\nexport function normalizeAuthExpiredError(error, fallbackMessage) {\n    var _a, _b;\n    if (isAuthExpiredError(error))\n        return error;\n    const status = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code;\n    return makeAuthExpiredError(fallbackMessage, status);\n}\n/** Refresh this many ms before `exp`, so a token cannot die mid-flight. */\nexport const TOKEN_EXPIRY_SKEW_MS = 60000;\nexport function classifyToken(token, nowMs = Date.now()) {\n    let exp;\n    try {\n        const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n        exp = payload === null || payload === void 0 ? void 0 : payload.exp;\n    }\n    catch (_a) {\n        return 'unusable';\n    }\n    // A token with no numeric exp used to compare against NaN and read as fresh.\n    if (typeof exp !== 'number' || !Number.isFinite(exp))\n        return 'unusable';\n    const expiresAtMs = exp * 1000;\n    if (nowMs >= expiresAtMs)\n        return 'expired';\n    if (nowMs >= expiresAtMs - TOKEN_EXPIRY_SKEW_MS)\n        return 'expiring-soon';\n    return 'fresh';\n}\n/** Short, non-secret fingerprint used only to key the in-flight map. Never logged. */\nexport function tokenFingerprint(token) {\n    let h = 5381;\n    for (let i = 0; i < token.length; i++)\n        h = ((h << 5) + h + token.charCodeAt(i)) >>> 0;\n    return h.toString(16);\n}\n/**\n * In-flight refresh TRANSACTIONS, keyed by the session they act on.\n *\n * The issuer-level dedupe in `refreshSession` shares only the network response;\n * each caller then commits independently. With a generation check that means the\n * first commit wins and every other caller sees storage it does not recognise —\n * so a burst of ordinary requests at expiry would all fail as \"the user changed\".\n * Deduping the WHOLE snapshot -> refresh -> commit makes them share one outcome.\n *\n * Keyed by generation as well as app, so a caller that arrives after a re-login\n * starts its own transaction instead of joining a stale one.\n */\nconst refreshTransactions = new Map();\nfunction transactionKey(scope, appId, generation, refreshToken) {\n    return `${scope}:${appId}:${generation !== null && generation !== void 0 ? generation : 'none'}:${tokenFingerprint(refreshToken)}`;\n}\nasync function readSessionParts(isServer) {\n    var _a, _b, _c, _d, _e, _f;\n    if (isServer) {\n        const session = await ServerSessionManager.instance.getSession();\n        return {\n            idToken: (_a = session === null || session === void 0 ? void 0 : session.idToken) !== null && _a !== void 0 ? _a : null,\n            refreshToken: (_b = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _b !== void 0 ? _b : null,\n            issuer: undefined,\n            generation: null,\n        };\n    }\n    const mgr = getActiveSessionManager();\n    const session = await mgr.readSessionWithGeneration();\n    return {\n        idToken: (_c = session === null || session === void 0 ? void 0 : session.idToken) !== null && _c !== void 0 ? _c : null,\n        refreshToken: (_d = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _d !== void 0 ? _d : null,\n        issuer: (_e = session === null || session === void 0 ? void 0 : session.issuer) !== null && _e !== void 0 ? _e : undefined,\n        generation: (_f = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _f !== void 0 ? _f : null,\n    };\n}\nasync function commit(isServer, expected, refreshed) {\n    var _a, _b;\n    if (isServer) {\n        const mgr = ServerSessionManager.instance;\n        const session = await mgr.getSession();\n        if (!session)\n            return { outcome: 'superseded', token: null };\n        const next = Object.assign(Object.assign(Object.assign({}, session), { idToken: refreshed.idToken, accessToken: refreshed.accessToken }), (refreshed.refreshToken ? { refreshToken: refreshed.refreshToken } : {}));\n        mgr.setSession(next);\n        return { outcome: 'applied', token: next.idToken };\n    }\n    const result = await getActiveSessionManager().commitRefreshedTokens(expected, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n    // NEVER return refreshed.idToken directly. When the commit is refused or lost,\n    // that token was not stored, and using it would authenticate the request as\n    // whoever the refresh was for rather than whoever the session now belongs to.\n    return { outcome: result.outcome, token: (_b = (_a = result.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null };\n}\n/**\n * Get a token that is safe to send right now, refreshing if needed.\n *\n * `null` means anonymous is fine. A throw means there is a session that cannot be\n * used; the caller must surface it rather than downgrade to anonymous.\n */\nexport async function getFreshAuthToken(isServer = false, options = {}) {\n    const { idToken, refreshToken, issuer, generation } = await readSessionParts(isServer);\n    // No session at all: anonymous is legitimate.\n    if (!idToken)\n        return null;\n    const force = options.force === true;\n    const freshness = classifyToken(idToken);\n    if (!force && freshness === 'fresh')\n        return idToken;\n    // Still valid for a little longer, so a failed refresh can fall back to it —\n    // but never when forced, since the server has already refused this exact token.\n    const stillUsable = !force && freshness === 'expiring-soon';\n    if (!refreshToken) {\n        if (stillUsable)\n            return idToken;\n        // Nothing can revive this session. Drop it so isAuthenticated() stops lying\n        // and the UI is told, then fail loudly instead of going anonymous.\n        await clearDeadSession(isServer, generation);\n        throw makeAuthExpiredError('Authentication expired and no refresh token is available');\n    }\n    const config = await getConfig();\n    const key = transactionKey(isServer ? 'server' : 'web', config.appId, generation, refreshToken);\n    const existing = refreshTransactions.get(key);\n    if (existing)\n        return await existing;\n    const transaction = (async () => {\n        var _a, _b, _c;\n        try {\n            const refreshed = await refreshSession(refreshToken, issuer);\n            if (!(refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) || !(refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n                throw makeAuthExpiredError('Authentication refresh returned an incomplete session');\n            }\n            const { outcome, token } = await commit(isServer, { generation, idToken }, refreshed);\n            if (outcome === 'superseded') {\n                // A login or logout landed while we were on the network. Refuse rather\n                // than authenticate this request as the principal that just left.\n                throw makeAuthChangedError('The signed-in account changed while this request was in flight');\n            }\n            // applied / already-equal / same-generation-winner are all successes: the\n            // stored session is valid for this same login either way.\n            if (!token) {\n                throw makeAuthExpiredError('Authentication refresh produced no usable token');\n            }\n            return token;\n        }\n        catch (error) {\n            if (isAuthExpiredError(error))\n                throw error;\n            // Log the STATUS only: the axios error carries config.data, which holds\n            // the refresh token, and must never reach a console or log sink.\n            const status = (_c = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code) !== null && _c !== void 0 ? _c : 'unknown';\n            if (isDefinitiveRejection(error)) {\n                // The issuer says this refresh token is dead. Drop the session.\n                await clearDeadSession(isServer, generation);\n                throw makeAuthExpiredError('Authentication expired and refresh was rejected', status);\n            }\n            // TRANSIENT: network blip, 5xx, timeout. Keep the session — it may well\n            // work in a moment. If the access token is still inside its skew window\n            // it is valid right now, so use it rather than failing the request.\n            if (stillUsable)\n                return idToken;\n            throw makeAuthExpiredError('Authentication expired and refresh failed', status);\n        }\n        finally {\n            refreshTransactions.delete(key);\n        }\n    })();\n    refreshTransactions.set(key, transaction);\n    return await transaction;\n}\nasync function clearDeadSession(isServer, generation) {\n    if (isServer) {\n        try {\n            ServerSessionManager.instance.clearSession();\n        }\n        catch ( /* best effort */_a) { /* best effort */ }\n        return;\n    }\n    try {\n        // Conditional: never remove a session that a concurrent login already replaced.\n        await getActiveSessionManager().clearSessionIfGeneration(generation);\n    }\n    catch ( /* a clear failure must not mask the auth error we are about to throw */_b) { /* a clear failure must not mask the auth error we are about to throw */ }\n}\n/** Test seam: drop any in-flight refresh transactions. */\nexport function resetRefreshTransactions() {\n    refreshTransactions.clear();\n}\n","import { getConfig } from '../client/config';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\nimport { decodeBase64Url } from './core-platform';\nimport { normalizeEvmAddress } from './evm/evm-utils';\nimport { getFreshAuthToken } from './auth-token-freshness';\nexport async function getMessageStatement() {\n    const config = await getConfig();\n    return `Authenticating to Bounded App With ID ${config.appId}`;\n}\nasync function createBearerToken(isServer) {\n    // Both branches go through the freshness helper now. The web branch used to read\n    // localStorage synchronously and send whatever was there, so an expired token was\n    // handed to the server on every request and only recovered from AFTER a 401 —\n    // and until the worker started returning 401 for a rejected bearer, never.\n    //\n    // A throw here is deliberate and must propagate: it means a session exists but\n    // cannot be used. Swallowing it and sending the request anonymously would put\n    // the caller back in policy as an anonymous user, which is the original bug.\n    const idToken = await getFreshAuthToken(isServer);\n    if (!idToken) {\n        return null;\n    }\n    return `Bearer ${idToken}`;\n}\nexport async function createAuthHeader(isServer) {\n    const bearerToken = await createBearerToken(isServer);\n    if (!bearerToken) {\n        return null;\n    }\n    return {\n        Authorization: bearerToken\n    };\n}\nexport async function getUserInfo(isServer) {\n    const idToken = await getIdToken(isServer);\n    if (!idToken) {\n        return null;\n    }\n    // Decode the JWT to get user info (base64url-safe)\n    const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n    return payload;\n}\n;\n/**\n * Derive { id, address, email } from an idToken's claims.\n *\n * Mirrors the realtime-worker auth.ts identity resolution so the client-side\n * `user` object matches what the backend authenticates as:\n *   - id  = custom:userId only.\n *   - address = custom:walletAddress only (a REAL wallet). NEVER falls back to the\n *           identity: an opaque id is not a spendable onchain address. null for\n *           email-only sessions.\n *   - email = the token's `email` claim, lowercased to match the canonical form\n *           policy equality compares against. null when absent (wallet/SIWS).\n *\n * Returns all-null when the token can't be decoded (caller treats as no identity).\n */\nexport function deriveUserIdentityFromIdToken(idToken) {\n    const empty = { id: null, address: null, email: null, evmAddress: null };\n    if (!idToken)\n        return empty;\n    try {\n        const parts = idToken.split('.');\n        if (parts.length < 2)\n            return empty;\n        const payload = JSON.parse(decodeBase64Url(parts[1]));\n        const walletClaim = payload['custom:walletAddress'];\n        const address = (typeof walletClaim === 'string' && walletClaim.length > 0)\n            ? walletClaim\n            : null;\n        const userIdClaim = payload['custom:userId'];\n        let id = (typeof userIdClaim === 'string' && userIdClaim.length > 0)\n            ? userIdClaim\n            : null;\n        const emailClaim = payload['email'];\n        const email = (typeof emailClaim === 'string' && emailClaim.length > 0)\n            ? emailClaim.toLowerCase()\n            : null;\n        // EVM wallet — carried on the `custom:evmWalletAddress` claim (an EVM login\n        // OMITS custom:walletAddress). Normalized to canonical lowercase 0x-hex the\n        // SAME way the realtime-worker does, so the client @user.evmAddress and the\n        // server-authenticated one are byte-identical (fail-closed on malformed).\n        const evmAddress = normalizeEvmAddress(payload['custom:evmWalletAddress']);\n        // A SIWE identity uses its EVM address as custom:userId. Normalize legacy\n        // mixed-case tokens at this boundary too so the principal and\n        // @user.evmAddress cannot diverge solely by hex casing. Opaque human-login\n        // ids remain byte-for-byte unchanged even when they have a linked wallet.\n        if (evmAddress && id && normalizeEvmAddress(id) === evmAddress)\n            id = evmAddress;\n        return { id, address, email, evmAddress };\n    }\n    catch (_a) {\n        return empty;\n    }\n}\nexport async function getIdToken(isServer) {\n    if (isServer) {\n        const sessionMgr = ServerSessionManager.instance;\n        const session = await sessionMgr.getSession();\n        return session === null || session === void 0 ? void 0 : session.idToken;\n    }\n    return getActiveSessionManager().getIdToken();\n}\nexport async function getRefreshToken(isServer) {\n    if (isServer) {\n        const sessionMgr = ServerSessionManager.instance;\n        const session = await sessionMgr.getSession();\n        return session === null || session === void 0 ? void 0 : session.refreshToken;\n    }\n    return getActiveSessionManager().getRefreshToken();\n}\n/** The auth issuer base that minted the active client session, so a refresh POSTs\n *  to the right /session/refresh. Undefined on the server (keypair, no refresh). */\nexport function getSessionIssuer(isServer) {\n    var _a;\n    if (isServer)\n        return undefined;\n    return (_a = getActiveSessionManager().getIssuer()) !== null && _a !== void 0 ? _a : undefined;\n}\n/**\n * Read the active session's generation, minting one for a pre-generation session.\n *\n * The server manager is a single in-memory session per process, so it has no\n * cross-realm lineage problem and reports null.\n */\nexport async function getSessionGeneration(isServer = false) {\n    var _a;\n    if (isServer)\n        return null;\n    const session = await getActiveSessionManager().readSessionWithGeneration();\n    return (_a = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n}\n/**\n * Commit refreshed tokens, bound to the generation they were minted for.\n *\n * Replaces the old void-returning `updateIdTokenAndAccessToken`. That version\n * silently dropped a write its cross-principal guard refused, so callers went on\n * to use a token that had NOT been stored — letting a request execute as the\n * previous user while storage and the UI already showed a new one. Callers must\n * branch on the outcome and use `session`, never the token they passed in.\n */\nexport async function commitRefreshedTokens(expected, idToken, accessToken, isServer = false, refreshToken) {\n    if (isServer) {\n        const sessionMgr = ServerSessionManager.instance;\n        // Ensure we have a session to update; if missing, let lazy creation happen on next request.\n        let session = null;\n        try {\n            session = await sessionMgr.getSession();\n        }\n        catch (_a) {\n            return { outcome: \"superseded\", session: null };\n        }\n        if (!session) {\n            return { outcome: \"superseded\", session: null };\n        }\n        const next = Object.assign(Object.assign(Object.assign({}, session), { idToken,\n            accessToken }), (refreshToken ? { refreshToken } : {}));\n        sessionMgr.setSession(next);\n        return { outcome: \"applied\", session: next };\n    }\n    return await getActiveSessionManager().commitRefreshedTokens(expected, idToken, accessToken, refreshToken);\n}\n","// ---------------------------------------------------------------------------\n// decline.ts -- the structured \"declined write\" surface.\n//\n// When a data-plane write violates a proven policy rule or invariant, the\n// realtime backend rejects it: HTTP 403 { verdict:'declined', reason:'rule' }\n// or 409 { verdict:'declined', reason:'invariant', invariant } on the request\n// path, or a coded error frame over the room socket. This module turns those\n// rejections into a first-class, share-worthy decline:\n//\n//   - `BoundedDeclineError` -- the thrown error. Keeps every legacy field apps\n//     already catch (code/status/statusCode/requestId/...), and adds `.decline`\n//     (the structured object below) plus a stable `.isBoundedDecline` flag.\n//   - `deriveDecline(body, status)` -- normalizes a server rejection body into a\n//     `BoundedDecline`, trusting a backend-sent `decline` object when present\n//     and synthesizing a minimal one from legacy fields otherwise. Returns\n//     `null` when the rejection is not a policy/invariant decline.\n//   - `dispatchDeclineEvent(decline, appId?)` -- in a browser, fires the\n//     `bounded:decline` CustomEvent the hosted widget listens to. Fire-and-\n//     forget: guarded for non-browser/SSR, never throws, never delays the throw.\n// ---------------------------------------------------------------------------\nconst RULE_DEFAULT_MESSAGE = 'This write is not allowed by policy.';\nconst INVARIANT_DEFAULT_MESSAGE = 'This write would violate a proven invariant.';\n/** The window event the hosted widget listens to for rendering a decline card. */\nexport const DECLINE_EVENT_NAME = 'bounded:decline';\n/**\n * Normalize a server rejection body into a structured `BoundedDecline`, or\n * `null` when the rejection is not a policy/invariant decline.\n *\n * Prefers a backend-sent `decline` object verbatim; otherwise synthesizes a\n * minimal `{ verdict, reason, invariant?, message }` from the legacy envelope\n * (`verdict` / `reason` / `code` / `invariant`). Only strong signals count —\n * a bare 403/409 with no policy marker is left alone (returns `null`).\n */\nexport function deriveDecline(body, status) {\n    if (!body || typeof body !== 'object')\n        return null;\n    // Trust a backend-sent structured decline verbatim.\n    const provided = body.decline;\n    if (provided && typeof provided === 'object' && provided.verdict === 'declined') {\n        return provided;\n    }\n    const rawReason = body.reason;\n    const code = body.code;\n    const hasInvariant = body.invariant != null;\n    let reason = rawReason === 'rule' || rawReason === 'invariant' ? rawReason : undefined;\n    if (!reason) {\n        if (code === 'invariant_violation' || hasInvariant)\n            reason = 'invariant';\n        else if (code === 'policy_denied')\n            reason = 'rule';\n    }\n    const isDecline = body.verdict === 'declined' || reason === 'rule' || reason === 'invariant';\n    if (!isDecline)\n        return null;\n    const resolvedReason = reason !== null && reason !== void 0 ? reason : (status === 409 ? 'invariant' : 'rule');\n    const rawMessage = body.message;\n    const message = typeof rawMessage === 'string' && rawMessage.length > 0\n        ? rawMessage\n        : resolvedReason === 'invariant'\n            ? INVARIANT_DEFAULT_MESSAGE\n            : RULE_DEFAULT_MESSAGE;\n    const decline = { verdict: 'declined', reason: resolvedReason, message };\n    if (hasInvariant)\n        decline.invariant = body.invariant;\n    if (typeof body.collection === 'string')\n        decline.collection = body.collection;\n    if (typeof body.op === 'string')\n        decline.op = body.op;\n    if (body.boundary && typeof body.boundary === 'object')\n        decline.boundary = body.boundary;\n    if (typeof body.provenAtDeploy === 'boolean')\n        decline.provenAtDeploy = body.provenAtDeploy;\n    return decline;\n}\n/**\n * In a browser, dispatch a `bounded:decline` CustomEvent for the surfaced\n * decline. Fire-and-forget: guarded for non-browser/SSR (no `window`/\n * `CustomEvent`), never throws, and never delays the rejection it accompanies.\n */\nexport function dispatchDeclineEvent(decline, appId) {\n    try {\n        if (typeof window === 'undefined')\n            return;\n        const Ctor = globalThis.CustomEvent;\n        if (typeof Ctor !== 'function')\n            return;\n        const detail = Object.assign({}, decline);\n        if (appId)\n            detail.appId = appId;\n        detail.at = Date.now();\n        window.dispatchEvent(new Ctor(DECLINE_EVENT_NAME, { detail }));\n    }\n    catch (_a) {\n        // Fire-and-forget: a widget/telemetry hiccup must never mask the decline.\n    }\n}\n/**\n * A rejected write that violated a proven policy rule or invariant. Thrown by\n * the data-plane write paths (set/setMany/update/delete) in place of a bare\n * Error, and attached (as `.decline`) to live-intent rejections.\n *\n * Back-compatible: the full server envelope (code/status/statusCode/requestId/\n * ...) is copied onto the instance, so existing `catch` handlers keep working;\n * new code reads `.decline`. Detect it with `err.name === 'BoundedDeclineError'`\n * or the bundle-copy-safe `err.isBoundedDecline === true`.\n */\nexport class BoundedDeclineError extends Error {\n    constructor(decline, envelope) {\n        super(`Declined: ${decline.message}`);\n        // Copy the legacy envelope FIRST, then re-assert our own fields so a\n        // stray envelope key can never clobber name/message/decline/flag.\n        if (envelope && typeof envelope === 'object')\n            Object.assign(this, envelope);\n        this.name = 'BoundedDeclineError';\n        this.message = `Declined: ${decline.message}`;\n        this.decline = decline;\n        this.isBoundedDecline = true;\n    }\n}\n","import axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport { getConfig } from \"../client/config\";\nimport { createAuthHeader, getSessionGeneration, } from \"../utils/utils\";\nimport { getFreshAuthToken } from \"../utils/auth-token-freshness\";\nimport { deriveDecline, dispatchDeclineEvent, BoundedDeclineError } from \"../client/decline\";\nconst apiClient = axios.create();\nconst TRANSIENT_GET_STATUSES = new Set([500, 502, 503, 504]);\nconst RATE_LIMIT_RETRY_BASE_DELAY_MS = 100;\n/** The window event emitted when the API responds with HTTP 429. */\nexport const RATE_LIMIT_EVENT_NAME = 'bounded:ratelimit';\n/** Dispatch a rate-limit event without affecting request error handling. */\nexport function dispatchRateLimitEvent(detail) {\n    try {\n        if (typeof window === 'undefined')\n            return;\n        const Ctor = globalThis.CustomEvent;\n        if (typeof Ctor !== 'function')\n            return;\n        window.dispatchEvent(new Ctor(RATE_LIMIT_EVENT_NAME, {\n            detail: Object.assign(Object.assign({}, detail), { at: Date.now() }),\n        }));\n    }\n    catch (_a) {\n        // Fire-and-forget: event consumers must never delay or mask the request.\n    }\n}\nfunction getRateLimitEventDetail(error, attempt, willRetry) {\n    var _a, _b;\n    const endpoint = typeof ((_a = error.config) === null || _a === void 0 ? void 0 : _a.url) === 'string' ? error.config.url : '';\n    let path = endpoint;\n    try {\n        const parsed = new URL(endpoint);\n        path = `${parsed.pathname}${parsed.search}`;\n    }\n    catch (_c) {\n        // Keep a relative or otherwise non-standard endpoint as-is.\n    }\n    const responseBody = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data;\n    const body = responseBody && typeof responseBody === 'object' && !Array.isArray(responseBody)\n        ? responseBody\n        : responseBody == null\n            ? {}\n            : { message: String(responseBody) };\n    return Object.assign(Object.assign({}, body), { endpoint,\n        path, status: 429, attempt,\n        willRetry });\n}\nfunction getRateLimitAttempt(error) {\n    var _a, _b;\n    const retryCount = (_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a['axios-retry']) === null || _b === void 0 ? void 0 : _b.retryCount;\n    return typeof retryCount === 'number' ? retryCount + 1 : 1;\n}\naxiosRetry(apiClient, {\n    retries: 2,\n    retryCondition: (error) => {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        // A caller cancellation is final. In particular, never turn a route\n        // unmount into a fresh GET after its AbortSignal has fired.\n        const canceled = axios.isCancel(error)\n            || error.code === 'ERR_CANCELED'\n            || ((_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.aborted);\n        if (canceled) {\n            if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 429) {\n                dispatchRateLimitEvent(getRateLimitEventDetail(error, getRateLimitAttempt(error), false));\n            }\n            return false;\n        }\n        // A 429 means the server did not execute the request, so retrying is\n        // safe for every method, including POST requests to the queries API.\n        if (((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) === 429)\n            return true;\n        // Only retry idempotent GETs. Network failures and the small set of\n        // conventional transient gateway/runtime statuses get two bounded\n        // retries; auth, policy, invariant, and other terminal responses stay final.\n        // Writes are never retried because the server may already have applied\n        // them before the response was lost.\n        if (((_f = (_e = error.config) === null || _e === void 0 ? void 0 : _e.method) === null || _f === void 0 ? void 0 : _f.toLowerCase()) !== 'get')\n            return false;\n        return axiosRetry.isNetworkError(error)\n            || TRANSIENT_GET_STATUSES.has((_h = (_g = error.response) === null || _g === void 0 ? void 0 : _g.status) !== null && _h !== void 0 ? _h : 0);\n    },\n    retryDelay: (retryCount, error) => {\n        var _a;\n        if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n            const exponentialCap = RATE_LIMIT_RETRY_BASE_DELAY_MS * (2 ** retryCount);\n            return Math.floor(Math.random() * exponentialCap);\n        }\n        return axiosRetry.exponentialDelay(retryCount, error);\n    },\n    shouldResetTimeout: true,\n    onRetry: (retryCount, error, requestConfig) => {\n        var _a, _b, _c;\n        if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n            dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount, !((_b = requestConfig.signal) === null || _b === void 0 ? void 0 : _b.aborted)));\n        }\n        console.warn(`[bounded-sdk] retry ${retryCount} for ${(_c = requestConfig.method) === null || _c === void 0 ? void 0 : _c.toUpperCase()} ${requestConfig.url} - ${error.code || error.message}`);\n    },\n    onMaxRetryTimesExceeded: (error, retryCount) => {\n        var _a;\n        if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n            dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount + 1, false));\n        }\n    },\n});\n/**\n * Recover from a 401, bound to the session that authenticated the ORIGINAL attempt.\n *\n * The dedupe, rotation and conditional-clear all live in `getFreshAuthToken` now;\n * this only adds the principal binding a reactive retry needs.\n *\n * Why the binding matters: `createAuthHeader` is acquired inside `executeRequest`,\n * so a retry re-reads whatever session is current at retry time. If B logs in while\n * A's request is in flight, A's 401 handler used to refresh B's session and replay\n * A's exact request as B — writing data under the wrong principal. Making a rejected\n * bearer return 401 turned that from a near-impossible race into the normal recovery\n * path, so it has to be closed here.\n *\n * Returns true only when the retry may proceed under the SAME login.\n */\nasync function refreshAuthSessionOnce(capturedGeneration, isServer) {\n    try {\n        // force: the server just rejected the stored token, so a locally-fresh-looking\n        // one is not evidence of anything. Without this, a 401 caused by anything the\n        // client cannot see (revoked family, app mismatch, key rotation) would be\n        // \"recovered\" by replaying the exact same credential.\n        const token = await getFreshAuthToken(isServer, { force: true });\n        if (!token)\n            return false;\n        // Equal generation covers both \"unchanged\" and \"refreshed descendant\": a\n        // refresh preserves the generation, a re-login mints a new one. Comparing\n        // tokens instead would reject a perfectly good retry whenever a concurrent\n        // request refreshed first, which at expiry is the common case.\n        const currentGeneration = await getSessionGeneration(isServer);\n        if (currentGeneration !== capturedGeneration)\n            return false;\n        return true;\n    }\n    catch (_a) {\n        // Includes auth_changed and a definitively rejected refresh. Either way the\n        // retry must not proceed; the caller surfaces the original 401.\n        return false;\n    }\n}\nexport async function makeApiRequest(method, urlPath, data, _overrides) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    // A scoped createClient() instance passes its own resolved config; otherwise\n    // fall back to the module-global init() config.\n    const config = (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n    const readOnly = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._readOnly) === true;\n    // CREDENTIAL PROVENANCE.\n    //\n    // Only a MANAGED credential — one this SDK minted from the global session — may\n    // trigger global-session recovery. A caller that supplies its own Authorization\n    // (via `_overrides.headers` or a wallet client's `_getAuthHeaders`) owns that\n    // token; refreshing or clearing the global session because THAT token got a 401\n    // would sign out an unrelated user. Rare before, because a rejected bearer used\n    // to come back as 403; routine now that it is a 401.\n    const usesOverrideAuthHeader = !!(_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers)\n        && Object.keys(_overrides.headers).some((name) => name.toLowerCase() === \"authorization\");\n    const isManagedCredential = !readOnly\n        && !(_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n        && !usesOverrideAuthHeader;\n    // The session that authenticated the FIRST attempt. 401 recovery is bound to it\n    // so a retry can never execute under a principal that replaced it mid-flight.\n    const capturedGeneration = isManagedCredential\n        ? await getSessionGeneration(config.isServer)\n        : null;\n    async function executeRequest() {\n        var _a;\n        // When _getAuthHeaders is provided (wallet client), use it as the sole auth source.\n        // A read-only scoped instance omits auth entirely. Otherwise use the\n        // global createAuthHeader (default path).\n        const authHeader = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n            ? await _overrides._getAuthHeaders()\n            : readOnly\n                ? {}\n                : await createAuthHeader(config.isServer);\n        const headers = Object.assign({ \"Content-Type\": \"application/json\", \"X-App-Id\": config.appId }, authHeader);\n        // Apply custom headers from _overrides. #022/#023: HTTP header names are\n        // case-insensitive, so normalize any override `authorization` (in any casing) onto the\n        // single canonical `Authorization` key - never send two differently-cased Authorization\n        // headers, and keep the credential the request sends identical to the one the read\n        // cache key is derived from.\n        if (_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers) {\n            for (const [name, value] of Object.entries(_overrides.headers)) {\n                if (name.toLowerCase() === \"authorization\") {\n                    delete headers[\"authorization\"];\n                    headers[\"Authorization\"] = value;\n                }\n                else {\n                    headers[name] = value;\n                }\n            }\n        }\n        // Writes (PUT/POST/DELETE) can take significantly longer than reads —\n        // server-side they may trigger ad-hoc LUT creation (create + extend +\n        // wait-for-finalization, ~15-30s on mainnet). Use a larger default for\n        // non-GET so the SDK doesn't time out before client-api responds.\n        const isRead = method.toUpperCase() === \"GET\";\n        const defaultTimeout = isRead ? 30000 : 90000;\n        const requestConfig = {\n            method,\n            url: `${config.apiUrl}${urlPath.startsWith(\"/\") ? urlPath : `/${urlPath}`}`,\n            headers,\n            timeout: (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides.timeout) !== null && _a !== void 0 ? _a : defaultTimeout,\n            signal: _overrides === null || _overrides === void 0 ? void 0 : _overrides.signal,\n        };\n        if (method !== \"GET\" && method !== \"get\") {\n            requestConfig.data = data ? JSON.stringify(data) : {};\n        }\n        const response = await apiClient(requestConfig);\n        return { data: response.data, status: response.status, headers: response.headers };\n    }\n    try {\n        return await executeRequest();\n    }\n    catch (initialError) {\n        // The error that ultimately gets normalized below. A retry REPLACES it, so a\n        // genuine post-refresh policy denial surfaces as itself.\n        //\n        // Both retry paths used to `return await executeRequest()` from inside this\n        // catch, which meant a retry that failed skipped the whole normalization\n        // block further down. The default path additionally swallowed the retry error\n        // and rethrew the ORIGINAL 401 — so `401 -> refresh succeeds -> retry is\n        // genuinely denied 403` reached the caller as a 401, contradicting the point\n        // of returning 401 for expired credentials in the first place.\n        let error = initialError;\n        if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {\n            // Read-only scoped instance: it holds no session, so there is nothing\n            // to refresh. Surface the 401 without touching the global session.\n            if (readOnly) {\n                throw error;\n            }\n            if (_overrides === null || _overrides === void 0 ? void 0 : _overrides._clearAuth) {\n                // Wallet client path: client-specific retry, never the global session.\n                await _overrides._clearAuth();\n                try {\n                    return await executeRequest();\n                }\n                catch (retryError) {\n                    // Normalize the RETRY's own failure. Still no global auth touched.\n                    error = retryError;\n                }\n            }\n            else if (isManagedCredential) {\n                // Default path: recover the global session, bound to the principal\n                // that authenticated the first attempt.\n                const recovered = await refreshAuthSessionOnce(capturedGeneration, config.isServer);\n                if (recovered) {\n                    try {\n                        return await executeRequest();\n                    }\n                    catch (retryError) {\n                        error = retryError;\n                    }\n                }\n                // Not recovered: keep the original 401 for normalization below.\n            }\n            // Unmanaged credential (caller-supplied Authorization): its 401 is the\n            // caller's to handle. Never refresh or clear the global session for it.\n        }\n        if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) == 404) {\n            return { data: null, status: 404 };\n        }\n        if ((_d = error.response) === null || _d === void 0 ? void 0 : _d.data) {\n            const responseData = typeof error.response.data === 'object'\n                ? error.response.data\n                : { message: String(error.response.data) };\n            const httpStatus = (_e = error.response) === null || _e === void 0 ? void 0 : _e.status;\n            // A policy/invariant denial (403 rule / 409 invariant) is surfaced as\n            // a first-class BoundedDeclineError carrying `.decline`; every other\n            // failure stays a bare enriched Error (unchanged behavior).\n            const decline = deriveDecline(responseData, httpStatus);\n            const apiError = decline\n                ? new BoundedDeclineError(decline)\n                : new Error(responseData.message || error.message || 'Request failed');\n            Object.assign(apiError, responseData);\n            apiError.statusCode = httpStatus;\n            // Surface the structured error envelope { code, status, requestId } so\n            // callers can branch on the stable category (e.g.\n            // `if (e.code === 'invariant_violation')`) without parsing the message.\n            // `code` is a stable category ('policy_denied' | 'invariant_violation');\n            // `status` is the HTTP status; `requestId` correlates with the decision log.\n            apiError.code = (_f = responseData.code) !== null && _f !== void 0 ? _f : apiError.code;\n            apiError.status = httpStatus !== null && httpStatus !== void 0 ? httpStatus : responseData.status;\n            apiError.requestId = (_g = responseData.requestId) !== null && _g !== void 0 ? _g : apiError.requestId;\n            if (decline) {\n                // Re-assert decline-owned fields after the envelope copy, then\n                // notify the browser widget. Fire-and-forget: never delays or\n                // masks the throw.\n                apiError.decline = decline;\n                apiError.name = 'BoundedDeclineError';\n                apiError.isBoundedDecline = true;\n                apiError.message = `Declined: ${decline.message}`;\n                dispatchDeclineEvent(decline, config.appId);\n            }\n            throw apiError;\n        }\n        throw error;\n    }\n}\n","export async function resolveClientTransactionVersions(authProvider) {\n    if (!authProvider)\n        return ['legacy', 0];\n    if (typeof authProvider.supportedTransactionVersions === 'function') {\n        try {\n            const declared = await authProvider.supportedTransactionVersions();\n            const versions = declared.filter((v) => v === 'legacy' || v === 0 || v === 1);\n            // v1 needs a v1 signer no matter what the provider claims.\n            return versions.filter((v) => v !== 1 || typeof authProvider.signTransactionV1 === 'function');\n        }\n        catch (_a) {\n            return ['legacy', 0];\n        }\n    }\n    return typeof authProvider.signTransactionV1 === 'function' ? ['legacy', 0, 1] : ['legacy', 0];\n}\n","/**\n * WebSocket v2 Subscription Manager\n *\n * This module implements multiplexed subscriptions over a single WebSocket connection.\n * It maintains the same external API as v1 but uses the new v2 protocol internally.\n */\nimport { getConfig } from './config';\nimport { getIdToken } from '../utils/utils';\nimport { AUTH_CHANGED_CODE, getFreshAuthToken, makeAuthExpiredError, normalizeAuthExpiredError, } from '../utils/auth-token-freshness';\nimport { decodeBase64Url, safeBtoa } from '../utils/core-platform';\nimport { docId } from './operations';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\n// ============ Global State ============\n// One connection per routing target (appId, or appId#room#<collection>/<roomId>)\nconst connections = new Map();\n// Coalesce concurrent first-use/auth-preflight calls for the same routing target.\n// React commonly mounts several subscriptions in one render; without this map,\n// every call can pass the empty `connections` check, await auth, and create an\n// orphan ReconnectingWebSocket before the first call publishes its connection.\n// Keyed by the identity-bucket lease key (see connectionLeaseKey) so two distinct\n// wallet tokens never share one in-flight socket even under a compact-hash collision.\nconst connectionFlights = new Map();\n// A subscriber holds a routing-target lease from connection acquisition until\n// its callback/subscription is registered. The last old-route unsubscribe must\n// not close a connection already captured by a new route awaiting auth. Keyed by\n// the same identity-bucket lease key as connectionFlights.\nconst connectionAcquisitions = new Map();\n// Compact identity hashes remain useful bounded-size indexes, but collisions\n// share a bucket instead of sharing authority. Each exact bearer keeps its own\n// cache entry so collision isolation does not evict another principal's cache.\nconst responseCache = new Map();\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst TOKEN_REFRESH_BUFFER = 10 * 60 * 1000; // Refresh token 10 minutes before expiry\nconst TOKEN_CHECK_INTERVAL = 5 * 60 * 1000; // Check token freshness every 5 minutes\nfunction getResponseCacheEntry(cacheKey, identityToken) {\n    var _a;\n    return (_a = responseCache.get(cacheKey)) === null || _a === void 0 ? void 0 : _a.find(entry => entry.identityToken === identityToken);\n}\nfunction setResponseCacheEntry(cacheKey, identityToken, data) {\n    var _a;\n    const now = Date.now();\n    const bucket = (_a = responseCache.get(cacheKey)) !== null && _a !== void 0 ? _a : [];\n    const reusableEntries = bucket.filter(entry => (entry.identityToken !== identityToken && now - entry.timestamp < CACHE_TTL));\n    reusableEntries.push({ data, timestamp: now, identityToken });\n    responseCache.set(cacheKey, reusableEntries);\n}\n// ============ WebSocket Config ============\nconst BASE_MIN_RECONNECT_DELAY_MS = 1000;\nconst MIN_RECONNECT_DELAY_JITTER_MS = 1000;\nconst MAX_RECONNECT_DELAY_MS = 300000;\nconst RECONNECT_DELAY_GROW_FACTOR = 1.8;\nconst MIN_BROWSER_RECONNECT_INTERVAL_MS = 5000;\nconst WS_AUTH_EXPIRED_CODE = 'auth_expired';\n// React runs old-route effect cleanup before new-route effects. Keep an\n// otherwise-idle socket for one short handoff window so the new route can\n// cancel teardown and reuse it; genuinely idle sockets still close promptly.\nconst IDLE_CONNECTION_CLOSE_GRACE_MS = 5000;\nconst SUBSCRIPTION_CONFIRM_TIMEOUT_MS = 10000;\nconst WS_CONFIG = {\n    // Keep retrying indefinitely so long outages recover without page refresh.\n    maxRetries: Infinity,\n    // Conservative starting delay with jitter spreads reconnects across clients.\n    minReconnectionDelay: BASE_MIN_RECONNECT_DELAY_MS + Math.floor(Math.random() * MIN_RECONNECT_DELAY_JITTER_MS),\n    // Stretch backoff to 5 minutes during prolonged outages to protect backend pools.\n    maxReconnectionDelay: MAX_RECONNECT_DELAY_MS,\n    // Moderate growth to avoid rapid retry bursts while still converging to max delay.\n    reconnectionDelayGrowFactor: RECONNECT_DELAY_GROW_FACTOR,\n    // Give handshakes more time before considering the attempt failed.\n    connectionTimeout: 10000,\n};\nconst WS_V2_PATH = '/ws/v2';\nlet browserReconnectHooksAttached = false;\nlet lastBrowserTriggeredReconnectAt = 0;\nlet reconnectInProgress = null;\n// ============ Helper Functions ============\nfunction generateSubscriptionId() {\n    return `sub_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\nfunction hashForKey(value) {\n    let h = 5381;\n    for (let i = 0; i < value.length; i++) {\n        h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n    }\n    return h.toString(36);\n}\n/**\n * SECURITY (H1): Response-cache keys must be scoped to the caller's identity, not\n * just the path/filter/shape. The compact `identity` prefix selects a bucket;\n * exact opaque bearer equality is required inside it before reuse. Together they\n * keep a private snapshot from being delivered to a different user with the same\n * options (shared process / SSR worker / browser login-switch; this cache has a\n * 5-minute TTL). Callers must opt in before entries are read or written; no-auth\n * subscriptions never populate an implicit anonymous cache bucket.\n */\nfunction getCacheKey(path, prompt, shape, limit, cursor, filter, identity) {\n    const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n    const shapeKey = shape && Object.keys(shape).length > 0 ? JSON.stringify(shape) : '';\n    const limitKey = limit !== undefined ? `:l${limit}` : '';\n    const cursorKey = cursor ? `:c${hashForKey(cursor)}` : '';\n    const filterKey = filter && Object.keys(filter).length > 0 ? `:f${hashForKey(JSON.stringify(filter))}` : '';\n    return `${identity}|${normalizedPath}:${prompt || 'default'}:${shapeKey}${limitKey}${cursorKey}${filterKey}`;\n}\n/**\n * Derive an opaque identity string for the bearer material a subscription sends.\n * JWT payloads are deliberately not trusted here: cache isolation must happen\n * before the server has verified any claims.\n */\nfunction principalFromIdToken(idToken) {\n    return idToken ? `t${hashForKey(idToken)}` : null;\n}\nfunction livePrincipalFromIdToken(idToken) {\n    if (!idToken)\n        return null;\n    try {\n        const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n        const userId = payload['custom:userId'];\n        if (typeof userId === 'string' && userId.length > 0)\n            return userId;\n        const walletAddress = payload['custom:walletAddress'];\n        if (typeof walletAddress === 'string' && walletAddress.length > 0)\n            return walletAddress;\n        const subject = payload.sub;\n        return typeof subject === 'string' && subject.length > 0 ? subject : null;\n    }\n    catch (_a) {\n        return null;\n    }\n}\nfunction authSnapshotFromToken(idToken) {\n    return {\n        tokenValue: idToken !== null && idToken !== void 0 ? idToken : null,\n        principal: livePrincipalFromIdToken(idToken),\n    };\n}\nfunction connectionMatchesAuthToken(connection, idToken) {\n    const current = authSnapshotFromToken(idToken);\n    if (!current.tokenValue) {\n        return connection.authTokenValue === null && connection.authPrincipal === null;\n    }\n    if (connection.authTokenValue && connection.authTokenValue === current.tokenValue) {\n        return true;\n    }\n    return !!connection.authPrincipal && !!current.principal && connection.authPrincipal === current.principal;\n}\nasync function canSendAuthenticatedLiveIntent(connection, isServer) {\n    const currentToken = await getIdToken(isServer);\n    if (!currentToken)\n        return false;\n    if (!connection.authTokenValue && !connection.authPrincipal)\n        return false;\n    return connectionMatchesAuthToken(connection, currentToken);\n}\nasync function getSubscriptionIdentity(effectiveAppId, isServer, overrides, anonymous) {\n    // A read-only scoped instance is unauthenticated by construction. Key it as\n    // anonymous and never read the ambient global session (a different app's).\n    if (anonymous) {\n        return { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n    }\n    // Per-subscription wallet override (server WalletClient.subscribe): key by\n    // the wallet's own opaque token material, mirroring getReadPrincipalKey. Do\n    // not trust decoded claims or the unverified _walletAddress hint.\n    if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n        try {\n            const bearer = bearerFromAuthHeaders(await overrides._getAuthHeaders());\n            const principal = principalFromIdToken(bearer);\n            return principal\n                ? { key: `${effectiveAppId}:o${principal}`, cacheable: true, token: bearer }\n                : { key: `${effectiveAppId}:oanon`, cacheable: false, token: null };\n        }\n        catch (_a) {\n            // Couldn't resolve the override identity — do not use response cache.\n            return { key: `${effectiveAppId}:o-uncacheable-${safeBtoa(String(connectionEpoch++))}`, cacheable: false, token: null };\n        }\n    }\n    const idToken = await getIdToken(isServer);\n    const principal = principalFromIdToken(idToken);\n    return principal\n        ? { key: `${effectiveAppId}:${principal}`, cacheable: true, token: idToken !== null && idToken !== void 0 ? idToken : null }\n        : { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n}\n/** Extract the bare bearer token from a `{ Authorization: 'Bearer <jwt>' }` map. */\nfunction bearerFromAuthHeaders(headers) {\n    const auth = (headers === null || headers === void 0 ? void 0 : headers.Authorization) || (headers === null || headers === void 0 ? void 0 : headers.authorization) || '';\n    return auth.startsWith('Bearer ') ? auth.slice('Bearer '.length) : auth;\n}\n// Monotonic counter for unique-ish fallback identity keys (no Date.now in some envs).\nlet connectionEpoch = 0;\n// isTokenExpired / makeAuthExpiredError / isAuthExpiredError /\n// normalizeAuthExpiredError now live in utils/auth-token-freshness so the HTTP and\n// WebSocket paths cannot drift apart. `classifyToken` replaces the old boolean,\n// which collapsed \"expiring soon\" and \"already expired\" into one answer and read a\n// token with no numeric `exp` as fresh.\nfunction getTokenExpirationTime(token) {\n    try {\n        const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n        return payload.exp ? payload.exp * 1000 : null;\n    }\n    catch (_a) {\n        return null;\n    }\n}\nfunction failConnectionAuth(connection, error) {\n    connection.authFailure = error;\n    connection.pendingAuthToken = null;\n    connection.pendingAuthSnapshot = null;\n    connection.authTokenValue = null;\n    connection.authPrincipal = null;\n    connection.isConnecting = false;\n    connection.isConnected = false;\n    connection.isAuthenticating = false;\n    for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n        rejectPendingSubscriptionConfirmation(connection, subscriptionId, error);\n    }\n    for (const subscription of connection.subscriptions.values()) {\n        notifyErrorCallbacks(subscription, error);\n        rejectSubscriptionRefresh(subscription, error);\n    }\n}\nfunction scheduleTokenRefresh(connection, isServer) {\n    // Clear any existing timer\n    if (connection.tokenRefreshTimer) {\n        clearInterval(connection.tokenRefreshTimer);\n        connection.tokenRefreshTimer = null;\n    }\n    // Periodic check: every TOKEN_CHECK_INTERVAL, check if the token needs refreshing.\n    // This replaces the old single setTimeout approach which was unreliable for long\n    // delays (browsers throttle/suspend timers in background tabs).\n    connection.tokenRefreshTimer = setInterval(async () => {\n        var _a, _b, _c, _d, _e;\n        try {\n            const currentToken = await getIdToken(isServer);\n            if (!currentToken)\n                return; // Unauthenticated, nothing to refresh\n            const expirationTime = getTokenExpirationTime(currentToken);\n            if (!expirationTime)\n                return;\n            const timeUntilExpiry = expirationTime - Date.now();\n            if (timeUntilExpiry <= TOKEN_REFRESH_BUFFER) {\n                console.info('[WS v2] Token expiring soon, proactively refreshing');\n                // Refresh the token and store it. Do NOT reconnect — the server only\n                // verifies JWT at $connect time, so the existing connection continues\n                // working. The fresh token is picked up by urlProvider the next time\n                // a reconnect naturally happens (network drop, keepalive timeout, etc.).\n                //\n                // Routed through the shared transaction. This used to read a refresh\n                // token, call refreshSession, and write the result with nothing binding\n                // it to the session it started from — so a timer that fired for S1 and\n                // completed after a same-wallet re-login could overwrite S2's rotated\n                // token, and the next refresh would trip the issuer's reuse detection\n                // and revoke the whole family.\n                try {\n                    await getFreshAuthToken(isServer);\n                    console.info('[WS v2] Token refreshed successfully, stored for next connection');\n                }\n                catch (refreshError) {\n                    const definitive = (refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) === AUTH_CHANGED_CODE\n                        || !await getIdToken(isServer);\n                    if (definitive) {\n                        // The session is dead or belongs to someone else now. The shared\n                        // helper has already cleared storage and notified auth-state\n                        // listeners, so the UI stops showing a connection that is gone —\n                        // this branch used to just stop the timer and leave the UI\n                        // claiming to be connected.\n                        console.warn('[WS v2] Session no longer usable, stopping periodic refresh');\n                        if (connection.tokenRefreshTimer) {\n                            clearInterval(connection.tokenRefreshTimer);\n                            connection.tokenRefreshTimer = null;\n                        }\n                        return;\n                    }\n                    // Transient: keep the session and try again next interval.\n                    // Status only — the raw axios error carries config.data (the refresh\n                    // token) and must never hit the console / log sinks.\n                    console.warn('[WS v2] Proactive token refresh failed, will retry next interval. status:', (_b = (_a = refreshError === null || refreshError === void 0 ? void 0 : refreshError.status) !== null && _a !== void 0 ? _a : refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) !== null && _b !== void 0 ? _b : 'unknown');\n                }\n            }\n        }\n        catch (error) {\n            console.error('[WS v2] Error in periodic token check. status:', (_e = (_d = (_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status) !== null && _d !== void 0 ? _d : error === null || error === void 0 ? void 0 : error.code) !== null && _e !== void 0 ? _e : 'unknown');\n        }\n    }, TOKEN_CHECK_INTERVAL);\n}\n/**\n * WS-local wrapper around the shared freshness helper.\n *\n * The shared helper owns expiry classification, the deduplicated\n * snapshot -> refresh -> commit transaction, and conditional clearing. A transient\n * failure must remain retryable; reconnect backoff bounds automatic attempts.\n */\nasync function getWsAuthToken(isServer) {\n    var _a, _b;\n    try {\n        return await getFreshAuthToken(isServer);\n    }\n    catch (error) {\n        // Status only — the raw axios error carries config.data (the refresh token)\n        // and must never reach a console or log sink.\n        console.error('[WS v2] Error acquiring auth token. status:', (_b = (_a = error === null || error === void 0 ? void 0 : error.status) !== null && _a !== void 0 ? _a : error === null || error === void 0 ? void 0 : error.code) !== null && _b !== void 0 ? _b : 'unknown');\n        throw normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n    }\n}\n/**\n * The server refused the token sent on the auth frame: its error frame arrives\n * while the auth ack is still pending, just before the 1008 close. Local expiry\n * had vouched for that exact token (unexpired but invalid - e.g. a rotated\n * issuer key), so re-sending it would only be refused again. Force a genuinely\n * new one: a definitive issuer rejection clears the session inside the shared\n * helper (firing notifySessionCleared, which signs the UI out), a successful\n * refresh commits a new token - and the ordinary reconnect loop picks up either\n * outcome on its own. Fresh token: authenticates. No token: connects\n * anonymously and public reads replay instead of erroring forever.\n */\nasync function recoverFromServerAuthRejection(connection) {\n    const rejected = connection.pendingAuthToken;\n    if (!rejected)\n        return;\n    // Share an in-flight attempt and stop retrying a definitively refused token.\n    // Transient failures may retry on the next socket reconnect, with its backoff.\n    if (connection.serverRejectedAuthToken === rejected)\n        return;\n    connection.serverRejectedAuthToken = rejected;\n    try {\n        await getFreshAuthToken(connection.isServer, { force: true });\n    }\n    catch (error) {\n        if ((error === null || error === void 0 ? void 0 : error.code) !== AUTH_CHANGED_CODE && (error === null || error === void 0 ? void 0 : error.status) !== 401 && (error === null || error === void 0 ? void 0 : error.status) !== 403\n            && connection.serverRejectedAuthToken === rejected) {\n            connection.serverRejectedAuthToken = null;\n        }\n        // The shared helper clears definitively rejected sessions and preserves\n        // transient failures. Never reuse the failed result as a credential.\n    }\n}\nasync function getConnectionAuthToken(isServer, authTokenProvider, anonymous) {\n    // A read-only scoped instance connects anonymously: no auth frame, and it\n    // must never read (or refresh) the ambient global session - that session\n    // belongs to a different app and would be rejected by this app's worker.\n    if (anonymous) {\n        return null;\n    }\n    if (!authTokenProvider) {\n        return getWsAuthToken(isServer);\n    }\n    try {\n        const token = await authTokenProvider();\n        if (token)\n            return token;\n        throw makeAuthExpiredError('Authenticated websocket token provider returned no token');\n    }\n    catch (error) {\n        throw normalizeAuthExpiredError(error, 'Authenticated websocket token provider failed');\n    }\n}\nfunction hasDisconnectedActiveConnections() {\n    for (const connection of connections.values()) {\n        if (!connection.ws) {\n            continue;\n        }\n        // Only nudge reconnection when socket is fully closed.\n        // If ReconnectingWebSocket is already in CONNECTING/backoff state, don't interfere.\n        if (connection.ws.readyState === WS_READY_STATE_CLOSED) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction maybeReconnectFromBrowserSignal() {\n    const now = Date.now();\n    if (now - lastBrowserTriggeredReconnectAt < MIN_BROWSER_RECONNECT_INTERVAL_MS) {\n        return;\n    }\n    if (!hasDisconnectedActiveConnections()) {\n        return;\n    }\n    lastBrowserTriggeredReconnectAt = now;\n    reconnectWithNewAuthV2().catch((error) => {\n        console.error('[WS v2] Browser-triggered reconnect failed:', error);\n    });\n}\nfunction attachBrowserReconnectHooksOnce() {\n    if (browserReconnectHooksAttached) {\n        return;\n    }\n    if (typeof window === 'undefined') {\n        return;\n    }\n    browserReconnectHooksAttached = true;\n    window.addEventListener('online', () => {\n        maybeReconnectFromBrowserSignal();\n    });\n    if (typeof document !== 'undefined') {\n        document.addEventListener('visibilitychange', () => {\n            if (document.visibilityState === 'visible') {\n                maybeReconnectFromBrowserSignal();\n            }\n        });\n    }\n}\n// ============ Connection Management ============\n/**\n * Derive the stable `<collection>/<roomId>` room key from a routePath hint.\n * Returns null when the hint isn't a room path (fewer than 2 segments).\n */\nfunction roomKeyFromRoutePath(routePath) {\n    if (!routePath)\n        return null;\n    const segs = routePath.replace(/^\\/+/, '').split('/').filter(Boolean);\n    if (segs.length < 2)\n        return null;\n    return `${segs[0]}/${segs[1]}`;\n}\nfunction replaySubscriptions(connection) {\n    for (const sub of connection.subscriptions.values()) {\n        sub.lastData = undefined;\n        if (!connection.pendingSubscriptions.has(sub.subscriptionId)) {\n            registerDetachedReplayConfirmation(connection, sub);\n        }\n        sendSubscribeWithConfirmation(connection, sub);\n    }\n}\n/**\n * Derive the stable identity-bucket lease key used to coalesce (singleflight)\n * and refcount (acquisition / idle-close) connection use. Ambient app/room\n * connections key by their routing target; wallet-scoped connections pin the\n * exact bearer so two distinct tokens never share a flight or a lease, even\n * when their compact `#id#<principalKey>` hashes collide.\n */\nfunction connectionLeaseKey(appId, routePath, principalKey, principalToken, anonymous) {\n    const roomKey = roomKeyFromRoutePath(routePath);\n    // A read-only scoped instance is anonymous and must never share a socket with\n    // the authenticated global path even when it targets the same appId.\n    const appKey = anonymous ? `${appId}#ro` : appId;\n    const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n    if (!principalKey)\n        return base;\n    const bucket = `${base}#id#${principalKey}`;\n    return principalToken ? `${bucket}#tok#${principalToken}` : bucket;\n}\nfunction cancelIdleConnectionClose(connection) {\n    if (!connection.idleCloseTimer)\n        return;\n    clearTimeout(connection.idleCloseTimer);\n    connection.idleCloseTimer = null;\n}\nfunction closeConnectionNow(connection) {\n    var _a;\n    if (connections.get(connection.key) !== connection)\n        return;\n    if (!connection.ws)\n        return;\n    cancelIdleConnectionClose(connection);\n    (_a = connection.authRetryWake) === null || _a === void 0 ? void 0 : _a.call(connection);\n    if (connection.tokenRefreshTimer) {\n        clearInterval(connection.tokenRefreshTimer);\n        connection.tokenRefreshTimer = null;\n    }\n    const ws = connection.ws;\n    connection.ws = null;\n    connection.isConnecting = false;\n    connection.isConnected = false;\n    connection.isAuthenticating = false;\n    const closeError = new Error('WebSocket connection closed');\n    for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n        rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n    }\n    for (const subscription of connection.subscriptions.values()) {\n        rejectSubscriptionRefresh(subscription, closeError);\n    }\n    connections.delete(connection.key);\n    try {\n        ws.close();\n    }\n    catch ( /* already closing */_b) { /* already closing */ }\n}\nfunction scheduleConnectionCloseIfIdle(connection) {\n    var _a;\n    if (connections.get(connection.key) !== connection)\n        return;\n    if (connection.subscriptions.size > 0)\n        return;\n    if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n        return;\n    if (!connection.ws || connection.idleCloseTimer)\n        return;\n    connection.idleCloseTimer = setTimeout(() => {\n        var _a;\n        connection.idleCloseTimer = null;\n        if (connection.subscriptions.size > 0)\n            return;\n        if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n            return;\n        closeConnectionNow(connection);\n    }, IDLE_CONNECTION_CLOSE_GRACE_MS);\n}\n/**\n * Acquire a connection under a routing-target lease. The lease is refcounted on\n * the identity-bucket key and held across the caller's auth preflight so a\n * concurrent old-route teardown cannot close a socket a new route is about to\n * reuse. The lease is released once the caller has registered its\n * subscription/callback.\n */\nasync function acquireConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n    var _a;\n    const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n    connectionAcquisitions.set(leaseKey, ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 0) + 1);\n    let released = false;\n    let releaseTimer = null;\n    const release = (connection) => {\n        var _a;\n        if (released)\n            return;\n        released = true;\n        if (releaseTimer) {\n            clearTimeout(releaseTimer);\n            releaseTimer = null;\n        }\n        const remaining = ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 1) - 1;\n        if (remaining > 0)\n            connectionAcquisitions.set(leaseKey, remaining);\n        else\n            connectionAcquisitions.delete(leaseKey);\n        if (connection)\n            scheduleConnectionCloseIfIdle(connection);\n    };\n    try {\n        const connection = await getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source);\n        const releaseConnection = () => release(connection);\n        // Registration is synchronous after the caller's await. This fail-safe\n        // releases on the next task even if an option getter/callback throws\n        // before subscribeV2 reaches its explicit release path.\n        releaseTimer = setTimeout(releaseConnection, 0);\n        return { connection, release: releaseConnection };\n    }\n    catch (error) {\n        release();\n        throw error;\n    }\n}\nasync function getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n    // Singleflight: concurrent first-use of the same routing target shares one\n    // in-flight connection rather than each creating an orphan socket. Keyed by\n    // the identity-bucket lease key so distinct wallet tokens never coalesce.\n    const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n    const activeFlight = connectionFlights.get(leaseKey);\n    if (activeFlight)\n        return activeFlight;\n    const flight = getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source);\n    connectionFlights.set(leaseKey, flight);\n    try {\n        return await flight;\n    }\n    finally {\n        if (connectionFlights.get(leaseKey) === flight) {\n            connectionFlights.delete(leaseKey);\n        }\n    }\n}\nasync function getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source) {\n    var _a, _b;\n    attachBrowserReconnectHooksOnce();\n    const anonymous = (source === null || source === void 0 ? void 0 : source.anonymous) === true;\n    // A per-room subscription gets its OWN connection routed to the room DO; all\n    // other subscriptions share the app-level connection (project DO). The worker\n    // derives the room from the `?path=` we attach below and is the final routing\n    // authority — `routePath` is only a hint.\n    const roomKey = roomKeyFromRoutePath(routePath);\n    // A wallet-scoped subscription (server WalletClient) gets its OWN connection\n    // keyed by the wallet identity, so its WS authenticates as that wallet and\n    // never shares a connection (or token) with any top-level server caller. A\n    // read-only scoped (anonymous) instance is likewise isolated by an `#ro`\n    // marker so it never shares the authenticated global socket on the same appId.\n    const appKey = anonymous ? `${appId}#ro` : appId;\n    const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n    const identityBucketKey = principalKey\n        ? `${base}#id#${principalKey}`\n        : base;\n    let connKey = identityBucketKey;\n    let connection;\n    if (principalKey && principalToken) {\n        // The 31-bit hash selects a small bucket only. Exact token equality is\n        // authoritative, and a rare collision gets an independent map slot.\n        for (const [candidateKey, candidate] of connections) {\n            if ((candidateKey === identityBucketKey || candidateKey.startsWith(`${identityBucketKey}#collision#`)) &&\n                candidate.connectionIdentityToken === principalToken) {\n                connKey = candidateKey;\n                connection = candidate;\n                break;\n            }\n        }\n        if (!connection && connections.has(connKey)) {\n            let collisionIndex = 1;\n            while (connections.has(`${identityBucketKey}#collision#${collisionIndex}`))\n                collisionIndex += 1;\n            connKey = `${identityBucketKey}#collision#${collisionIndex}`;\n        }\n    }\n    else {\n        connection = connections.get(connKey);\n    }\n    if (connection && connection.ws) {\n        // We may reuse this connection; cancel any pending idle-close so it is\n        // not torn down during the auth preflight below. The held acquisition\n        // lease also guards this window, but cancelling here avoids a needless\n        // grace-timer round-trip on the common reuse path.\n        cancelIdleConnectionClose(connection);\n        let currentAuthToken;\n        try {\n            currentAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n        }\n        catch (error) {\n            const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n            failConnectionAuth(connection, authError);\n            throw authError;\n        }\n        if (connection.authFailure) {\n            // The preflight recovered, but failConnectionAuth invalidated this\n            // socket's auth state. Authenticate again before replaying any reads.\n            connection.authFailure = null;\n            (_a = connection.authRetryWake) === null || _a === void 0 ? void 0 : _a.call(connection);\n            connection.ws.reconnect();\n            return connection;\n        }\n        if (connection.isConnected &&\n            !connection.isAuthenticating &&\n            !connectionMatchesAuthToken(connection, currentAuthToken)) {\n            closeConnectionNow(connection);\n        }\n        else {\n            connection.authFailure = null;\n            return connection;\n        }\n        connection.authFailure = null;\n    }\n    let initialAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n    // Create new connection\n    connection = {\n        ws: null,\n        subscriptions: new Map(),\n        pendingSubscriptions: new Map(),\n        pendingUnsubscriptions: new Map(),\n        pendingRequests: new Map(),\n        isConnecting: false,\n        isConnected: false,\n        isAuthenticating: false,\n        appId,\n        key: connKey,\n        acquisitionKey: leaseKey,\n        routePath: roomKey ? routePath : undefined,\n        authTokenProvider,\n        connectionIdentityToken: principalToken !== null && principalToken !== void 0 ? principalToken : null,\n        pendingAuthToken: null,\n        pendingAuthSnapshot: null,\n        authTokenValue: null,\n        authPrincipal: null,\n        socketGeneration: 0,\n        tokenRefreshTimer: null,\n        idleCloseTimer: null,\n        consecutiveAuthFailures: 0,\n        authFailure: null,\n        source,\n        anonymous,\n        isServer,\n        serverRejectedAuthToken: null,\n    };\n    // Resolve configuration before handing control to reconnecting-websocket.\n    // Its 4.4.0 URL-provider promise has no rejection handler and a rejected\n    // provider permanently holds _connectLock. Credential failures therefore\n    // stay inside this bounded, cancellable acquisition loop.\n    const wsApiUrl = (_b = source === null || source === void 0 ? void 0 : source.wsApiUrl) !== null && _b !== void 0 ? _b : (await getConfig()).wsApiUrl;\n    const wsUrl = new URL(wsApiUrl);\n    wsUrl.pathname = WS_V2_PATH;\n    wsUrl.searchParams.append('appId', appId || (await getConfig()).appId);\n    if (connection.routePath)\n        wsUrl.searchParams.append('routePath', connection.routePath);\n    connections.set(connKey, connection);\n    const urlProvider = async () => {\n        let retryDelay = WS_CONFIG.minReconnectionDelay;\n        while (connections.get(connKey) === connection) {\n            let authToken;\n            try {\n                authToken = initialAuthToken !== undefined\n                    ? initialAuthToken\n                    : await getConnectionAuthToken(isServer, connection.authTokenProvider, connection.anonymous);\n                initialAuthToken = undefined;\n            }\n            catch (error) {\n                if (connections.get(connKey) !== connection)\n                    break;\n                const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n                failConnectionAuth(connection, authError);\n                // An error callback may synchronously tear down or replace this\n                // connection. Do not install a retry after its cleanup completed.\n                if (connections.get(connKey) !== connection)\n                    break;\n                await new Promise((resolve) => {\n                    const wake = () => {\n                        clearTimeout(timer);\n                        if (connection.authRetryWake === wake)\n                            connection.authRetryWake = undefined;\n                        resolve();\n                    };\n                    const timer = setTimeout(wake, retryDelay);\n                    connection.authRetryWake = wake;\n                });\n                retryDelay = Math.min(MAX_RECONNECT_DELAY_MS, retryDelay * RECONNECT_DELAY_GROW_FACTOR);\n                continue;\n            }\n            if (connections.get(connKey) !== connection)\n                break;\n            connection.pendingAuthToken = authToken || null;\n            connection.pendingAuthSnapshot = authSnapshotFromToken(authToken);\n            connection.consecutiveAuthFailures = 0;\n            connection.authFailure = null;\n            return wsUrl.toString();\n        }\n        // Teardown has called close() on the wrapper, which prevents creation\n        // of a native socket when this abandoned provider resolves.\n        return wsUrl.toString();\n    };\n    // Create WebSocket connection\n    connection.isConnecting = true;\n    const ws = new ReconnectingWebSocket(urlProvider, [], Object.assign(Object.assign({}, WS_CONFIG), { debug: false }));\n    connection.ws = ws;\n    // Handle connection open\n    ws.addEventListener('open', () => {\n        var _a, _b;\n        connection.socketGeneration += 1;\n        connection.isConnecting = false;\n        connection.isConnected = true;\n        // NOTE: Do NOT reset consecutiveAuthFailures here. It is reset when a\n        // fresh auth token is actually obtained or on an explicit auth change.\n        // Schedule periodic token freshness checks. An anonymous (read-only\n        // scoped) connection holds no token and must never poll or refresh the\n        // ambient global session, so it is skipped.\n        if (!connection.anonymous) {\n            scheduleTokenRefresh(connection, isServer);\n        }\n        if (connection.pendingAuthToken) {\n            connection.isAuthenticating = true;\n            try {\n                (_a = connection.ws) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify({ type: 'auth', token: connection.pendingAuthToken }));\n            }\n            catch (error) {\n                connection.isAuthenticating = false;\n                connection.isConnected = false;\n                console.error('[WS v2] Error sending auth message:', error);\n                try {\n                    (_b = connection.ws) === null || _b === void 0 ? void 0 : _b.close(1008, 'Authentication send failed');\n                }\n                catch (_c) {\n                    // Already closed.\n                }\n            }\n        }\n        else {\n            connection.isAuthenticating = false;\n            connection.authTokenValue = null;\n            connection.authPrincipal = null;\n            replaySubscriptions(connection);\n        }\n    });\n    // Handle incoming messages\n    ws.addEventListener('message', (event) => {\n        try {\n            const message = JSON.parse(event.data);\n            handleServerMessage(connection, message);\n        }\n        catch (error) {\n            console.error('[WS v2] Error parsing message:', error);\n        }\n    });\n    // Handle errors\n    ws.addEventListener('error', (event) => {\n        console.error('[WS v2] WebSocket error:', event);\n        const wsError = new Error('WebSocket error');\n        for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, wsError);\n        }\n        for (const subscription of connection.subscriptions.values()) {\n            rejectSubscriptionRefresh(subscription, wsError);\n        }\n    });\n    // Handle close\n    ws.addEventListener('close', () => {\n        connection.isConnected = false;\n        connection.isAuthenticating = false;\n        const disconnectError = new Error('WebSocket disconnected');\n        for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, disconnectError);\n        }\n        if (connection.tokenRefreshTimer) {\n            clearInterval(connection.tokenRefreshTimer);\n            connection.tokenRefreshTimer = null;\n        }\n        // Reject all pending WS CRUD requests on disconnect (fail fast)\n        for (const [id, pending] of connection.pendingRequests) {\n            clearTimeout(pending.timer);\n            pending.reject(disconnectError);\n        }\n        connection.pendingRequests.clear();\n    });\n    return connection;\n}\nfunction handleServerMessage(connection, message) {\n    var _a, _b, _c, _d, _e, _f;\n    switch (message.type) {\n        case 'authenticated': {\n            connection.isAuthenticating = false;\n            connection.authTokenValue = (_b = (_a = connection.pendingAuthSnapshot) === null || _a === void 0 ? void 0 : _a.tokenValue) !== null && _b !== void 0 ? _b : null;\n            connection.authPrincipal = (_d = (_c = connection.pendingAuthSnapshot) === null || _c === void 0 ? void 0 : _c.principal) !== null && _d !== void 0 ? _d : null;\n            // Record server-advertised capabilities (v2 socket query transport).\n            connection.capabilities = (_e = message.capabilities) !== null && _e !== void 0 ? _e : null;\n            replaySubscriptions(connection);\n            break;\n        }\n        case 'subscribed': {\n            const subscription = connection.subscriptions.get(message.subscriptionId);\n            if (subscription) {\n                const refresh = subscription.refresh;\n                // A data update can race ahead of subscribed during reconnect.\n                // If we already received data for this subscription, treat subscribed\n                // as an ack only and avoid regressing to an older snapshot.\n                if (refresh) {\n                    const hadBaseline = subscription.lastData !== undefined;\n                    if (subscription.dataRevision === refresh.dataRevisionAtStart) {\n                        if (subscription.cache) {\n                            const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n                            setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n                        }\n                        subscription.lastData = message.data;\n                        subscription.dataRevision += 1;\n                        if (hadBaseline) {\n                            const callbacks = Array.from(refresh.callbacks)\n                                .filter((callback) => subscription.callbacks.includes(callback));\n                            notifyCallbackOptions(callbacks, message.data);\n                        }\n                        else {\n                            // The refresh joined an original registration or a\n                            // reconnect replay before its first baseline arrived.\n                            // Every active callback needs that initial snapshot.\n                            notifyCallbacks(subscription, message.data);\n                        }\n                    }\n                    else if (refresh.callbacks.size > 0 && subscription.lastData !== undefined) {\n                        // A newer authorized data frame arrived after this refresh\n                        // began. Do not regress lastData to the older subscribed\n                        // snapshot; use that newer frame for callbacks that joined\n                        // after it was broadcast.\n                        const callbacks = Array.from(refresh.callbacks)\n                            .filter((callback) => subscription.callbacks.includes(callback));\n                        notifyCallbackOptions(callbacks, subscription.lastData);\n                    }\n                    resolveSubscriptionRefresh(subscription);\n                }\n                else if (subscription.lastData === undefined) {\n                    if (subscription.cache) {\n                        const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n                        setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n                    }\n                    subscription.lastData = message.data;\n                    subscription.dataRevision += 1;\n                    notifyCallbacks(subscription, message.data);\n                }\n            }\n            // Resolve pending subscription promise\n            const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n            if (pending) {\n                resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n            }\n            break;\n        }\n        case 'unsubscribed': {\n            // Resolve pending unsubscription promise\n            const pending = connection.pendingUnsubscriptions.get(message.subscriptionId);\n            if (pending) {\n                pending.resolve();\n                connection.pendingUnsubscriptions.delete(message.subscriptionId);\n            }\n            break;\n        }\n        case 'data': {\n            const subscription = connection.subscriptions.get(message.subscriptionId);\n            if (subscription) {\n                // Update cache\n                if (subscription.cache) {\n                    const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n                    setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n                }\n                // Store last data\n                subscription.lastData = message.data;\n                subscription.dataRevision += 1;\n                // Notify callbacks\n                notifyCallbacks(subscription, message.data);\n                // A data frame is itself a full, freshly authorized snapshot.\n                // It satisfies every joined callback even if the duplicate\n                // subscribed ACK was lost; resolving here prevents a false\n                // refresh timeout ten seconds after the UI already rendered.\n                if (subscription.refresh) {\n                    resolveSubscriptionRefresh(subscription);\n                }\n            }\n            // A data frame is a full, authorized snapshot and therefore also\n            // confirms an initial registration when its `subscribed` ACK was\n            // lost. Resolve the originating promise without duplicating state.\n            resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n            break;\n        }\n        case 'response': {\n            const pendingReq = connection.pendingRequests.get(message.requestId);\n            if (pendingReq) {\n                connection.pendingRequests.delete(message.requestId);\n                clearTimeout(pendingReq.timer);\n                if (message.status >= 400) {\n                    pendingReq.reject(new Error(`Request failed with status ${message.status}`));\n                }\n                else {\n                    pendingReq.resolve(message.data);\n                }\n            }\n            break;\n        }\n        case 'setResponse': {\n            const pendingSet = connection.pendingRequests.get(message.requestId);\n            if (pendingSet) {\n                connection.pendingRequests.delete(message.requestId);\n                clearTimeout(pendingSet.timer);\n                if (message.statusCode >= 400) {\n                    pendingSet.reject(new Error(((_f = message.body) === null || _f === void 0 ? void 0 : _f.message) || `Set failed with status ${message.statusCode}`));\n                }\n                else {\n                    pendingSet.resolve(message.body);\n                }\n            }\n            break;\n        }\n        case 'error': {\n            console.error('[WS v2] Server error:', message.code, message.message);\n            // The auth frame was just refused: while the auth ack is pending the\n            // server sends no other error frame, and this one is immediately\n            // followed by its 1008 close. Kick the forced-refresh recovery - the\n            // ordinary reconnect loop then re-auths with a fresh token or, once a\n            // definitively dead session is cleared, connects anonymously so\n            // public reads still replay. Ambient connections only: wallet-scoped\n            // connections refresh through their own provider.\n            if (connection.isAuthenticating && connection.pendingAuthToken && !connection.authTokenProvider && !connection.anonymous) {\n                void recoverFromServerAuthRejection(connection);\n            }\n            // Build an Error that ALSO carries the stable `code` as a structured\n            // field (not just string-interpolated into the message) so callers can\n            // branch on it — e.g. `catch (e) { if (e.code === 'invariant_violation') }`\n            // — symmetric with the HTTP path in utils/api.ts. requestId (CRUD) /\n            // subscriptionId are attached for correlation with the decision log.\n            const buildWsError = () => {\n                const err = new Error(`${message.code}: ${message.message}`);\n                err.code = message.code;\n                if (message.requestId)\n                    err.requestId = message.requestId;\n                if (message.subscriptionId)\n                    err.subscriptionId = message.subscriptionId;\n                // A policy/invariant denial over the socket carries the same\n                // structured decline as the HTTP path (live-intent acks, WS\n                // writes). Mirror `.decline` and notify the browser widget.\n                const declineBody = message.decline\n                    ? { decline: message.decline }\n                    : {\n                        code: message.code,\n                        message: message.message,\n                        reason: message.reason,\n                        invariant: message.invariant,\n                        verdict: message.verdict,\n                    };\n                const decline = deriveDecline(declineBody);\n                if (decline) {\n                    err.decline = decline;\n                    err.isBoundedDecline = true;\n                    dispatchDeclineEvent(decline, connection.appId);\n                }\n                return err;\n            };\n            const wsError = buildWsError();\n            // Handle CRUD request errors (requestId present)\n            if (message.requestId) {\n                const pendingReq = connection.pendingRequests.get(message.requestId);\n                if (pendingReq) {\n                    connection.pendingRequests.delete(message.requestId);\n                    clearTimeout(pendingReq.timer);\n                    pendingReq.reject(wsError);\n                }\n            }\n            if (message.subscriptionId) {\n                // Reject pending subscription if this is a subscription error\n                const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n                if (pending) {\n                    rejectPendingSubscriptionConfirmation(connection, message.subscriptionId, wsError);\n                }\n                // Notify error callbacks for this subscription\n                const subscription = connection.subscriptions.get(message.subscriptionId);\n                if (subscription) {\n                    notifyErrorCallbacks(subscription, wsError);\n                    rejectSubscriptionRefresh(subscription, wsError);\n                }\n            }\n            break;\n        }\n    }\n}\n/**\n * Additively attach the bare `id` (leaf doc key) to a subscription row (Bug 1).\n * Rows carry `_id`/`pathId` = the full document path; this leaves those as-is and\n * adds `id` = the last path segment so `row.id` is the doc key apps expect. No-ops\n * for non-objects and rows that already define `id`.\n */\nfunction withSubscriptionId(row) {\n    var _a, _b, _c;\n    if (!row || typeof row !== 'object' || Array.isArray(row))\n        return row;\n    if ('id' in row)\n        return row;\n    const source = (_c = (_b = (_a = row._id) !== null && _a !== void 0 ? _a : row.pathId) !== null && _b !== void 0 ? _b : row.relativePath) !== null && _c !== void 0 ? _c : row.absolutePath;\n    if (typeof source !== 'string' || source.length === 0)\n        return row;\n    const leaf = docId(source);\n    if (!leaf)\n        return row;\n    return Object.assign(Object.assign({}, row), { id: leaf });\n}\n/**\n * The `onData` payload follows the path: a collection delivers a bare array of\n * rows, a single-doc path delivers the document (or null). Attach the bare `id`\n * to each returned row in either case, additive (Bug 1).\n */\nfunction addIdsToSubscriptionData(data) {\n    if (Array.isArray(data))\n        return data.map(withSubscriptionId);\n    return withSubscriptionId(data);\n}\nfunction notifyCallbackOptions(callbacks, data) {\n    var _a;\n    // Attach the bare `id` (leaf doc key) to every delivered row (Bug 1).\n    const decorated = addIdsToSubscriptionData(data);\n    for (const callback of callbacks) {\n        try {\n            (_a = callback.onData) === null || _a === void 0 ? void 0 : _a.call(callback, decorated);\n        }\n        catch (error) {\n            console.error('[WS v2] Error in subscription callback:', error);\n        }\n    }\n}\nfunction notifyCallbacks(subscription, data) {\n    // Snapshot the callbacks array so that unsubscriptions during\n    // notification don't cause callbacks to be skipped.\n    notifyCallbackOptions(subscription.callbacks.slice(), data);\n}\nfunction notifyErrorCallback(callback, error) {\n    let delivered = false;\n    try {\n        const onError = callback.onError;\n        if (!onError)\n            return false;\n        onError(error);\n        delivered = true;\n    }\n    catch (callbackError) {\n        console.error('[WS v2] Error in subscription error callback:', callbackError);\n    }\n    return delivered;\n}\nfunction notifyErrorCallbacks(subscription, error) {\n    let delivered = false;\n    const callbacks = subscription.callbacks.slice();\n    for (const callback of callbacks) {\n        delivered = notifyErrorCallback(callback, error) || delivered;\n    }\n    if (delivered)\n        error.__boundedDeliveredToOnError = true;\n    return delivered;\n}\n// WebSocket readyState constants\nconst WS_READY_STATE_OPEN = 1;\nconst WS_READY_STATE_CLOSED = 3;\nfunction sendSubscribe(connection, subscription) {\n    if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n        return;\n    }\n    const message = {\n        type: 'subscribe',\n        subscriptionId: subscription.subscriptionId,\n        path: subscription.path,\n        filter: subscription.filter,\n        sort: subscription.sort,\n        prompt: subscription.prompt ? safeBtoa(subscription.prompt) : undefined,\n        includeSubPaths: subscription.includeSubPaths,\n        shape: subscription.shape && Object.keys(subscription.shape).length > 0\n            ? subscription.shape\n            : undefined,\n        limit: subscription.limit,\n        cursor: subscription.cursor,\n    };\n    try {\n        connection.ws.send(JSON.stringify(message));\n    }\n    catch (error) {\n        console.error('[WS v2] Error sending subscribe message:', error);\n    }\n}\nfunction resolvePendingSubscriptionConfirmation(connection, subscriptionId) {\n    const pending = connection.pendingSubscriptions.get(subscriptionId);\n    if (!pending)\n        return false;\n    connection.pendingSubscriptions.delete(subscriptionId);\n    if (pending.timer) {\n        clearTimeout(pending.timer);\n        pending.timer = null;\n    }\n    pending.resolve();\n    return true;\n}\nfunction rejectPendingSubscriptionConfirmation(connection, subscriptionId, error) {\n    const pending = connection.pendingSubscriptions.get(subscriptionId);\n    if (!pending)\n        return false;\n    connection.pendingSubscriptions.delete(subscriptionId);\n    if (pending.timer) {\n        clearTimeout(pending.timer);\n        pending.timer = null;\n    }\n    pending.reject(error);\n    return true;\n}\nfunction armSubscriptionConfirmationTimeout(connection, subscription, pending) {\n    pending.timer = setTimeout(() => {\n        if (connection.pendingSubscriptions.get(subscription.subscriptionId) !== pending)\n            return;\n        pending.timer = null;\n        const sameReadySocket = connection.ws === pending.socket &&\n            connection.socketGeneration === pending.socketGeneration &&\n            connection.authTokenValue === pending.authTokenValue &&\n            connection.authPrincipal === pending.authPrincipal &&\n            connection.isConnected &&\n            !connection.isAuthenticating &&\n            pending.socket.readyState === WS_READY_STATE_OPEN;\n        const sameRegistration = connection.subscriptions.get(subscription.subscriptionId) === subscription;\n        if (!pending.retrySent && sameReadySocket && sameRegistration) {\n            pending.retrySent = true;\n            // Arm the terminal timeout before sending: browser/test transports\n            // may synchronously dispatch the acknowledgement from send().\n            armSubscriptionConfirmationTimeout(connection, subscription, pending);\n            sendSubscribe(connection, subscription);\n            return;\n        }\n        rejectPendingSubscriptionConfirmation(connection, subscription.subscriptionId, new Error('Subscription timeout'));\n    }, SUBSCRIPTION_CONFIRM_TIMEOUT_MS);\n}\n/**\n * Bind an existing confirmation promise to the exact socket session that is\n * about to carry its subscribe frame. Cold-start registrations create the\n * promise before the socket opens; replay uses this helper to move the timeout\n * from the connection wait onto the authenticated socket without allocating a\n * second promise or leaving the original timer behind.\n */\nfunction sendSubscribeWithConfirmation(connection, subscription) {\n    const pending = connection.pendingSubscriptions.get(subscription.subscriptionId);\n    const socket = connection.ws;\n    if (pending && socket && socket.readyState === WS_READY_STATE_OPEN) {\n        if (pending.timer) {\n            clearTimeout(pending.timer);\n            pending.timer = null;\n        }\n        pending.socket = socket;\n        pending.socketGeneration = connection.socketGeneration;\n        pending.authTokenValue = connection.authTokenValue;\n        pending.authPrincipal = connection.authPrincipal;\n        // Arm before send: browser/test transports may synchronously dispatch\n        // the subscribed/data/error response from send().\n        armSubscriptionConfirmationTimeout(connection, subscription, pending);\n    }\n    sendSubscribe(connection, subscription);\n}\n/**\n * A reconnect replay has no caller awaiting subscribeV2 anymore, but it still\n * needs the same bounded confirmation/retry guarantee. Attach the rejection\n * handler immediately so this recovery record can never become an unhandled\n * promise. Structured server errors are delivered by handleServerMessage;\n * terminal local timeouts are surfaced here exactly once to active callbacks.\n */\nfunction registerDetachedReplayConfirmation(connection, subscription) {\n    const socket = connection.ws;\n    if (!socket || connection.pendingSubscriptions.has(subscription.subscriptionId))\n        return;\n    let resolve;\n    let reject;\n    const promise = new Promise((resolvePromise, rejectPromise) => {\n        resolve = resolvePromise;\n        reject = rejectPromise;\n    });\n    const pending = {\n        resolve,\n        reject,\n        timer: null,\n        retrySent: false,\n        socket,\n        socketGeneration: connection.socketGeneration,\n        authTokenValue: connection.authTokenValue,\n        authPrincipal: connection.authPrincipal,\n    };\n    connection.pendingSubscriptions.set(subscription.subscriptionId, pending);\n    void promise.catch((error) => {\n        if (error.__boundedDeliveredToOnError)\n            return;\n        if (connection.subscriptions.get(subscription.subscriptionId) !== subscription)\n            return;\n        // Ordinary socket/auth-change close paths will replay again and did not\n        // historically poison every established callback. Only a healthy socket\n        // exhausting its bounded confirmation retry is a new terminal condition.\n        if (error.message === 'Subscription timeout') {\n            const delivered = notifyErrorCallbacks(subscription, error);\n            if (!delivered) {\n                console.warn('[WS v2] Replayed subscription confirmation timed out:', subscription.path);\n            }\n        }\n    });\n}\nfunction resolveSubscriptionRefresh(subscription) {\n    const refresh = subscription.refresh;\n    if (!refresh)\n        return;\n    subscription.refresh = null;\n    if (refresh.timer)\n        clearTimeout(refresh.timer);\n    refresh.callbacks.clear();\n    refresh.resolve();\n}\nfunction rejectSubscriptionRefresh(subscription, error) {\n    const refresh = subscription.refresh;\n    if (!refresh)\n        return;\n    subscription.refresh = null;\n    if (refresh.timer)\n        clearTimeout(refresh.timer);\n    refresh.callbacks.clear();\n    refresh.reject(error);\n}\n/**\n * A callback joining an already-registered non-cache subscription cannot be\n * seeded from `lastData`: that snapshot may predate the callback's auth\n * preflight. Re-send the same subscription id so the server re-runs read auth\n * and returns a fresh baseline, without allocating another websocket or\n * replacing the logical client subscription.\n */\nfunction requestFreshSubscriptionSnapshot(connection, subscription, callback) {\n    let refresh = subscription.refresh;\n    if (!refresh) {\n        let resolve;\n        let reject;\n        const promise = new Promise((resolvePromise, rejectPromise) => {\n            resolve = resolvePromise;\n            reject = rejectPromise;\n        });\n        refresh = {\n            promise,\n            resolve,\n            reject,\n            timer: null,\n            callbacks: new Set(),\n            dataRevisionAtStart: subscription.dataRevision,\n        };\n        subscription.refresh = refresh;\n        refresh.timer = setTimeout(() => {\n            if (subscription.refresh !== refresh)\n                return;\n            rejectSubscriptionRefresh(subscription, new Error('Subscription timeout'));\n        }, 10000);\n    }\n    // Register before sendSubscribe: test/browser transports may synchronously\n    // dispatch the subscribed response from send().\n    refresh.callbacks.add(callback);\n    // Every newly joined callback gets an idempotent same-id resend when the\n    // authenticated socket is ready. Do not suppress this because an initial\n    // confirmation or an earlier refresh is pending: that pending frame may\n    // have been lost or displaced, and sharing it is exactly how an entire\n    // route remount can inherit one doomed timeout. When connecting or\n    // authenticating, replaySubscriptions will send after auth completes.\n    if (connection.isConnected && !connection.isAuthenticating) {\n        sendSubscribe(connection, subscription);\n    }\n    return refresh.promise;\n}\nfunction sendUnsubscribe(connection, subscriptionId) {\n    if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n        return;\n    }\n    const message = {\n        type: 'unsubscribe',\n        subscriptionId,\n    };\n    try {\n        connection.ws.send(JSON.stringify(message));\n    }\n    catch (error) {\n        console.error('[WS v2] Error sending unsubscribe message:', error);\n    }\n}\n// ============ Public API ============\n/**\n * Subscribe to data at a path using WebSocket v2.\n * Returns an unsubscribe function.\n */\n/**\n * @param roomRoutePath INTERNAL ONLY. A `<sessionCollection>/<roomId>` room path\n *   used by `live.subscribeView` to route this subscription's connection to the\n *   per-room DO (where live view fan-out lives). It is NOT part of the public\n *   subscribe API — app code never passes routing; the worker remains the\n *   authority on the destination DO (it derives the room from the `?path=` we\n *   attach). This argument only tells the client which connection to multiplex\n *   the subscription onto, since a WS connection routes to a single DO.\n */\nexport async function subscribeV2(path, subscriptionOptions, roomRoutePath) {\n    var _a, _b, _c, _d, _e, _f;\n    const overrides = subscriptionOptions._overrides;\n    // A scoped createClient() instance passes its own resolved config; the\n    // default path reads the module-global init() config.\n    const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n    const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n    // A read-only scoped instance connects anonymously to its own realtime\n    // endpoint - never sharing a socket, token, or the ambient session with the\n    // global (default) app.\n    const anonymous = (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) === true;\n    const source = (overrides === null || overrides === void 0 ? void 0 : overrides._config)\n        ? { wsApiUrl: overrides._config.wsApiUrl, anonymous }\n        : undefined;\n    // Use explicit appId override if provided, otherwise fall back to config\n    const effectiveAppId = subscriptionOptions.appId || config.appId;\n    // H1: scope the response cache to the caller's identity so a private snapshot\n    // cached for one principal is never delivered to a different principal who\n    // subscribes with identical options (shared process / SSR / login-switch).\n    // Per-subscription wallet override (server WalletClient.subscribe). When set,\n    // the connection authenticates + caches under the wallet's identity instead of\n    // any top-level server caller — so a `createWalletClient` caller can\n    // subscribe through its explicit wallet session. A read-only scoped instance\n    // is anonymous, so it never carries an auth-token provider.\n    const authTokenProvider = (!anonymous && (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders))\n        ? async () => bearerFromAuthHeaders(await overrides._getAuthHeaders()) || null\n        : undefined;\n    const identityInfo = await getSubscriptionIdentity(effectiveAppId, config.isServer, overrides, anonymous);\n    const identity = identityInfo.key;\n    const identityToken = identityInfo.token;\n    const responseCacheEnabled = subscriptionOptions.cache === true && identityInfo.cacheable;\n    // Preserve the existing compact connection-key shape, but use the exact\n    // token as a secondary in-memory equality check within that hash bucket.\n    const principalKey = authTokenProvider ? identity : undefined;\n    const principalToken = authTokenProvider\n        ? (identityToken !== null && identityToken !== void 0 ? identityToken : identity)\n        : undefined;\n    const cacheKey = responseCacheEnabled\n        ? getCacheKey(normalizedPath, subscriptionOptions.prompt, subscriptionOptions.shape, subscriptionOptions.limit, subscriptionOptions.cursor, subscriptionOptions.filter, identity)\n        : null;\n    // Acquire a connection for this routing target (room-scoped when a room route\n    // is supplied by the live helper, else the app-level connection). The lease is\n    // held across auth preflight and released once this call registers below, so a\n    // concurrent old-route teardown cannot close a socket we are about to reuse.\n    let connection;\n    let releaseConnection;\n    try {\n        const acquisition = await acquireConnection(effectiveAppId, config.isServer, roomRoutePath, authTokenProvider, principalKey, principalToken, source);\n        connection = acquisition.connection;\n        releaseConnection = acquisition.release;\n    }\n    catch (error) {\n        const err = error instanceof Error ? error : new Error(String(error));\n        if (subscriptionOptions.onError) {\n            subscriptionOptions.onError(err);\n            return async () => { };\n        }\n        throw err;\n    }\n    const cachedEntry = cacheKey ? getResponseCacheEntry(cacheKey, identityToken) : undefined;\n    // Check if we already have a subscription for this path+prompt+shape+limit+cursor+filter+sort\n    let existingSubscription;\n    let specKey = '';\n    try {\n        // Stringify THIS call's specs once; existing subscriptions carry their\n        // precomputed specKey, so the scan is a string compare per entry\n        // (previously each new subscribe re-stringified every existing\n        // subscription's shape/filter/sort — O(N²) with many live hooks).\n        specKey = JSON.stringify([\n            (_b = subscriptionOptions.shape) !== null && _b !== void 0 ? _b : null,\n            (_c = subscriptionOptions.filter) !== null && _c !== void 0 ? _c : null,\n            (_d = subscriptionOptions.sort) !== null && _d !== void 0 ? _d : null,\n        ]);\n        for (const sub of connection.subscriptions.values()) {\n            // H1: also require the same principal identity (compact hash AND exact\n            // token) — a different logged-in user must not piggy-back on (and\n            // inherit lastData from) another user's existing subscription, even\n            // with identical path/prompt/shape/filter/sort.\n            if (sub.identity === identity && sub.identityToken === identityToken && sub.path === normalizedPath && sub.prompt === subscriptionOptions.prompt && sub.specKey === specKey && sub.includeSubPaths === ((_e = subscriptionOptions.includeSubPaths) !== null && _e !== void 0 ? _e : false) && sub.limit === subscriptionOptions.limit && sub.cursor === subscriptionOptions.cursor) {\n                existingSubscription = sub;\n                break;\n            }\n        }\n    }\n    catch (error) {\n        releaseConnection();\n        throw error;\n    }\n    if (existingSubscription) {\n        let replayData = undefined;\n        let replayOnData;\n        if (responseCacheEnabled) {\n            // Read callback getters before mutating the shared subscription. If\n            // a caller supplied a throwing getter, the acquisition fail-safe can\n            // release cleanly without leaving a ghost callback behind.\n            replayOnData = subscriptionOptions.onData;\n            replayData = existingSubscription.lastData !== undefined\n                ? existingSubscription.lastData\n                : cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL\n                    ? cachedEntry.data\n                    : undefined;\n        }\n        if (responseCacheEnabled) {\n            existingSubscription.cache = true;\n        }\n        // Add callback to existing subscription\n        existingSubscription.callbacks.push(subscriptionOptions);\n        let refreshPromise = null;\n        if (responseCacheEnabled) {\n            // Explicit, principal-bound cache opt-in may replay exactly one\n            // snapshot. Prefer the active subscription's lastData, falling back\n            // to the short-lived response cache while a reconnect is in flight.\n            if (replayData !== undefined && replayOnData) {\n                setTimeout(() => {\n                    replayOnData === null || replayOnData === void 0 ? void 0 : replayOnData(addIdsToSubscriptionData(replayData));\n                }, 0);\n            }\n        }\n        else {\n            // Default (non-cache) subscriptions require a fresh authorized\n            // baseline for every newly joined callback. Reuse the same logical\n            // subscription id and socket, but make the server re-run the read.\n            refreshPromise = requestFreshSubscriptionSnapshot(connection, existingSubscription, subscriptionOptions);\n        }\n        releaseConnection();\n        if (refreshPromise) {\n            try {\n                await refreshPromise;\n            }\n            catch (error) {\n                const err = error instanceof Error ? error : new Error(String(error));\n                let deliveredLocally = false;\n                if (!err.__boundedDeliveredToOnError) {\n                    deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n                }\n                if (!subscriptionOptions.onError) {\n                    await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n                    throw err;\n                }\n                if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n                    console.warn('[WS v2] Subscription refresh failed, keeping for reconnect recovery:', error);\n                }\n            }\n        }\n        return async () => {\n            await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n        };\n    }\n    // Deliver cached data immediately for a new logical subscription, but only\n    // after connection auth preflight has succeeded. An expired authenticated\n    // session must receive an auth error, not a stale private snapshot followed\n    // by a failed connect.\n    if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL && subscriptionOptions.onData) {\n        setTimeout(() => {\n            var _a;\n            (_a = subscriptionOptions.onData) === null || _a === void 0 ? void 0 : _a.call(subscriptionOptions, addIdsToSubscriptionData(cachedEntry.data));\n        }, 0);\n    }\n    // Create new subscription\n    const subscriptionId = generateSubscriptionId();\n    let subscription;\n    try {\n        subscription = {\n            subscriptionId,\n            path: normalizedPath,\n            filter: subscriptionOptions.filter,\n            sort: subscriptionOptions.sort,\n            prompt: subscriptionOptions.prompt,\n            shape: subscriptionOptions.shape,\n            limit: subscriptionOptions.limit,\n            cursor: subscriptionOptions.cursor,\n            includeSubPaths: (_f = subscriptionOptions.includeSubPaths) !== null && _f !== void 0 ? _f : false,\n            callbacks: [subscriptionOptions],\n            lastData: undefined,\n            dataRevision: 0,\n            refresh: null,\n            cache: responseCacheEnabled,\n            identity,\n            identityToken,\n            specKey,\n        };\n        connection.subscriptions.set(subscriptionId, subscription);\n    }\n    catch (error) {\n        releaseConnection();\n        throw error;\n    }\n    releaseConnection();\n    // Register the confirmation before any possible synchronous send/ACK. This\n    // includes the first subscription on a cold socket: replaySubscriptions()\n    // will bind this same pending record to the authenticated socket and send it.\n    const subscriptionPromise = new Promise((resolve, reject) => {\n        const socket = connection.ws;\n        if (!socket) {\n            reject(new Error('WebSocket disconnected'));\n            return;\n        }\n        const pending = {\n            resolve,\n            reject,\n            timer: null,\n            retrySent: false,\n            socket,\n            socketGeneration: connection.socketGeneration,\n            authTokenValue: connection.authTokenValue,\n            authPrincipal: connection.authPrincipal,\n        };\n        connection.pendingSubscriptions.set(subscriptionId, pending);\n        // A fast auth refusal can open and close the socket before the first\n        // caller finishes acquiring it. Keep this subscription for recovery,\n        // but report the already observed disconnect without a timeout delay.\n        if (pending.socketGeneration > 0 && socket.readyState === WS_READY_STATE_CLOSED) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, new Error('WebSocket disconnected'));\n            return;\n        }\n        // Bound a cold connection/auth wait as well. Once the socket becomes\n        // ready, sendSubscribeWithConfirmation() replaces this timer with a\n        // fresh per-socket confirmation window.\n        armSubscriptionConfirmationTimeout(connection, subscription, pending);\n    });\n    if (connection.isConnected && !connection.isAuthenticating) {\n        sendSubscribeWithConfirmation(connection, subscription);\n    }\n    try {\n        await subscriptionPromise;\n    }\n    catch (error) {\n        const err = error instanceof Error ? error : new Error(String(error));\n        let deliveredLocally = false;\n        if (!err.__boundedDeliveredToOnError) {\n            // A local confirmation timeout belongs to the caller that\n            // originated it. Joined callbacks may already have a viable\n            // same-id refresh and must not be poisoned by that old attempt.\n            deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n        }\n        if (!subscriptionOptions.onError) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, err);\n            // This registration may have acquired joined callbacks while\n            // its confirmation was pending. Remove only the originating\n            // callback; deleting the whole logical subscription would\n            // orphan those remounted consumers and their refresh flight.\n            await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n            throw err;\n        }\n        if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n            console.warn('[WS v2] Subscription confirmation failed, keeping for reconnect recovery:', error);\n        }\n    }\n    // Return unsubscribe function\n    return async () => {\n        await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n    };\n}\nasync function removeCallbackFromSubscription(connection, subscriptionId, callback) {\n    var _a;\n    const subscription = connection.subscriptions.get(subscriptionId);\n    if (!subscription) {\n        return;\n    }\n    // Remove this callback\n    subscription.callbacks = subscription.callbacks.filter(cb => cb !== callback);\n    (_a = subscription.refresh) === null || _a === void 0 ? void 0 : _a.callbacks.delete(callback);\n    // If there are still callbacks, don't unsubscribe\n    if (subscription.callbacks.length > 0) {\n        return;\n    }\n    // No more callbacks, unsubscribe from server\n    connection.subscriptions.delete(subscriptionId);\n    rejectPendingSubscriptionConfirmation(connection, subscriptionId, new Error('Subscription unsubscribed'));\n    if (connection.isConnected && !connection.isAuthenticating) {\n        // Create a promise to wait for unsubscription confirmation\n        const unsubscribePromise = new Promise((resolve, reject) => {\n            connection.pendingUnsubscriptions.set(subscriptionId, { resolve, reject });\n            // Timeout after 5 seconds\n            setTimeout(() => {\n                if (connection.pendingUnsubscriptions.has(subscriptionId)) {\n                    connection.pendingUnsubscriptions.delete(subscriptionId);\n                    resolve(); // Don't throw on unsubscribe timeout\n                }\n            }, 5000);\n        });\n        sendUnsubscribe(connection, subscriptionId);\n        await unsubscribePromise;\n    }\n    // If no more subscriptions, let the connection close after a short idle\n    // grace so an immediately-following route remount can reclaim the socket.\n    scheduleConnectionCloseIfIdle(connection);\n}\n/**\n * Close all v2 subscriptions.\n */\nexport async function closeAllSubscriptionsV2() {\n    var _a;\n    const closePromises = [];\n    for (const [appId, connection] of connections) {\n        cancelIdleConnectionClose(connection);\n        const closeError = new Error('Subscriptions closed');\n        for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n        }\n        for (const subscription of connection.subscriptions.values()) {\n            rejectSubscriptionRefresh(subscription, closeError);\n        }\n        if (connection.tokenRefreshTimer) {\n            clearInterval(connection.tokenRefreshTimer);\n            connection.tokenRefreshTimer = null;\n        }\n        if (connection.ws) {\n            const ws = connection.ws;\n            connection.ws = null;\n            connection.isConnected = false;\n            if (ws.readyState !== WS_READY_STATE_CLOSED) {\n                closePromises.push(new Promise((resolve) => {\n                    ws.addEventListener('close', () => {\n                        resolve();\n                    });\n                    ws.close();\n                }));\n            }\n            else {\n                // CLOSED may mean a URL/auth acquisition is still pending.\n                // close() also disables the wrapper's future native socket.\n                ws.close();\n            }\n        }\n        connections.delete(appId);\n        (_a = connection.authRetryWake) === null || _a === void 0 ? void 0 : _a.call(connection);\n    }\n    connectionAcquisitions.clear();\n    await Promise.all(closePromises);\n}\n/**\n * Clear the v2 cache.\n */\nexport function clearCacheV2(path) {\n    if (path) {\n        const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n        // Clear all cache entries for this path across ALL identities. Keys are\n        // now `<identity>|<path>:...` (H1 principal-scoping), so match the path\n        // portion AFTER the identity prefix — otherwise this is a silent no-op.\n        for (const key of responseCache.keys()) {\n            const sep = key.indexOf('|');\n            const pathPart = sep >= 0 ? key.slice(sep + 1) : key;\n            if (pathPart.startsWith(normalizedPath)) {\n                responseCache.delete(key);\n            }\n        }\n    }\n    else {\n        responseCache.clear();\n    }\n}\n/**\n * Get cached data for a path (v2).\n */\nexport function getCachedDataV2(path, prompt) {\n    const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n    // H1: response caches are identity-scoped (`<identity>|<path>:...`) and\n    // opt-in. Resolve the caller's identity from an active cache-enabled\n    // subscription for this path. No matching sub → null (safe).\n    let identity;\n    let identityToken;\n    outer: for (const connection of connections.values()) {\n        for (const sub of connection.subscriptions.values()) {\n            if (sub.cache && sub.path === normalizedPath && sub.prompt === prompt) {\n                identity = sub.identity;\n                identityToken = sub.identityToken;\n                break outer;\n            }\n        }\n    }\n    if (!identity) {\n        return null;\n    }\n    const cacheKey = getCacheKey(path, prompt, undefined, undefined, undefined, undefined, identity);\n    const cachedEntry = getResponseCacheEntry(cacheKey, identityToken !== null && identityToken !== void 0 ? identityToken : null);\n    if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL) {\n        return cachedEntry.data;\n    }\n    return null;\n}\n/**\n * Reconnect all v2 WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Note: Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuthV2() {\n    if (reconnectInProgress) {\n        return reconnectInProgress;\n    }\n    reconnectInProgress = doReconnectWithNewAuth();\n    try {\n        await reconnectInProgress;\n    }\n    finally {\n        reconnectInProgress = null;\n    }\n}\nasync function doReconnectWithNewAuth() {\n    var _a;\n    // SECURITY (H1): the logged-in identity is changing (login / logout / switch).\n    // Wipe ALL principal-scoped read caches so the new identity can never observe\n    // data cached for the previous one. Clear both the WS response cache and the\n    // HTTP get() cache (the latter lives in operations.ts — imported dynamically\n    // to avoid a static import cycle).\n    responseCache.clear();\n    // Drop in-memory per-subscription snapshots so they are not redelivered as the\n    // previous identity's data after the socket reconnects under new auth.\n    for (const connection of connections.values()) {\n        for (const sub of connection.subscriptions.values()) {\n            sub.lastData = undefined;\n        }\n    }\n    try {\n        const { clearReadCacheForAuthChange } = await import('./operations');\n        clearReadCacheForAuthChange();\n    }\n    catch (error) {\n        console.warn('[WS v2] Failed to clear HTTP read cache on auth change:', error);\n    }\n    try {\n        const { reconnectRealtimeStoreWithNewAuth } = await import('./realtime-store');\n        await reconnectRealtimeStoreWithNewAuth();\n    }\n    catch (error) {\n        console.warn('[WS v2] Failed to reset legacy realtime store on auth change:', error);\n    }\n    for (const [appId, connection] of connections) {\n        if (!connection.ws) {\n            continue;\n        }\n        cancelIdleConnectionClose(connection);\n        const reconnectError = new Error('Connection reconnecting due to auth change');\n        for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n            rejectPendingSubscriptionConfirmation(connection, subscriptionId, reconnectError);\n        }\n        for (const subscription of connection.subscriptions.values()) {\n            rejectSubscriptionRefresh(subscription, reconnectError);\n        }\n        for (const [, pending] of connection.pendingUnsubscriptions) {\n            pending.resolve();\n        }\n        connection.pendingUnsubscriptions.clear();\n        // Reset auth failure counter — this is a proactive reconnect (login, token refresh)\n        connection.consecutiveAuthFailures = 0;\n        connection.authFailure = null;\n        (_a = connection.authRetryWake) === null || _a === void 0 ? void 0 : _a.call(connection);\n        // Close the WebSocket (this triggers reconnection in ReconnectingWebSocket)\n        // We use reconnect() which will close and re-open with fresh URL (including new token)\n        try {\n            connection.ws.reconnect();\n        }\n        catch (error) {\n            console.error('[WS v2] Error reconnecting:', error);\n        }\n    }\n}\n/**\n * Force close and reconnect all connections.\n * This is more aggressive than reconnectWithNewAuthV2() and ensures\n * a complete teardown and rebuild of connections.\n */\nexport async function forceReconnectV2() {\n    var _a;\n    const reconnectPromises = [];\n    const isServer = (await getConfig()).isServer;\n    for (const [appId, connection] of connections) {\n        if (!connection.ws) {\n            continue;\n        }\n        cancelIdleConnectionClose(connection);\n        // Store subscriptions to restore\n        const subscriptionsToRestore = Array.from(connection.subscriptions.values());\n        // Close the connection\n        connection.ws.close();\n        connection.ws = null;\n        connection.isConnected = false;\n        connections.delete(appId);\n        (_a = connection.authRetryWake) === null || _a === void 0 ? void 0 : _a.call(connection);\n        // If there were active subscriptions, re-establish connection\n        if (subscriptionsToRestore.length > 0) {\n            const reconnectPromise = (async () => {\n                // Get fresh connection\n                const newConnection = await getOrCreateConnection(appId, isServer);\n                // Re-register all subscriptions\n                for (const sub of subscriptionsToRestore) {\n                    newConnection.subscriptions.set(sub.subscriptionId, sub);\n                }\n                // Wait for connection to be ready, then re-subscribe\n                // The 'open' handler in getOrCreateConnection will send subscribe messages\n            })();\n            reconnectPromises.push(reconnectPromise);\n        }\n    }\n    await Promise.all(reconnectPromises);\n}\n// ============ WebSocket request helpers ============\nconst WS_REQUEST_TIMEOUT_MS = 30000;\nfunction generateRequestId() {\n    return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\n/**\n * Returns true if there is an active v2 WebSocket connection open.\n */\nexport function hasActiveConnection() {\n    for (const connection of connections.values()) {\n        if (connection.ws && connection.isConnected && !connection.isAuthenticating) {\n            return true;\n        }\n    }\n    return false;\n}\n/** WS frame byte ceiling for a runQuery batch. The server's raw message gate is\n *  65536 bytes and rejects an oversized frame pre-parse with an UNCORRELATED error\n *  (no requestId to fall back on), so the client keeps larger batches on HTTP\n *  (which accepts up to 1MB). Headroom left below the hard limit. */\nconst WS_RUNQUERY_MAX_FRAME_BYTES = 60000;\n/**\n * v2 socket-when-warm transport for named/computed query polls (subscribeQuery /\n * runQuery). Runs `queries` over the ambient per-app authenticated socket instead\n * of HTTP `POST /queries`, but ONLY when that is observably safe and identity-correct:\n *   - a warm, OPEN, non-authenticating app socket already exists (never opens one);\n *   - the server advertised `capabilities.runQuery` on the authenticated ack;\n *   - the socket's authenticated principal matches the caller's CURRENT identity\n *     (else read rules would evaluate for the wrong user) - reuses the same gate as\n *     reliable live intents;\n *   - the serialized frame fits the WS message limit.\n * Returns the per-row array on a clean socket success; returns null - meaning\n * \"fall back to HTTP\" - for every miss/refusal (no socket, no capability, identity\n * skew, oversized batch, the server's own `{ useHttp: true }` deferral, or any\n * timeout / disconnect / error frame). The rows are byte-identical to POST /queries,\n * so the caller is transport-agnostic and never observes which transport won.\n */\nexport async function runNamedQueriesOverSocket(appId, queries, isServer) {\n    var _a;\n    const connection = connections.get(appId);\n    if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n        return null; // no warm socket -> HTTP (never open one just for queries)\n    }\n    if (!((_a = connection.capabilities) === null || _a === void 0 ? void 0 : _a.runQuery)) {\n        return null; // server did not advertise the capability -> HTTP\n    }\n    if (!(await canSendAuthenticatedLiveIntent(connection, isServer).catch(() => false))) {\n        return null; // identity skew / mid-refresh -> HTTP runs under the current token\n    }\n    const requestId = generateRequestId();\n    const frame = JSON.stringify({ type: 'runQuery', requestId, queries });\n    if (frame.length > WS_RUNQUERY_MAX_FRAME_BYTES) {\n        return null; // oversized -> HTTP (see WS_RUNQUERY_MAX_FRAME_BYTES)\n    }\n    let data;\n    try {\n        data = await new Promise((resolve, reject) => {\n            const timer = setTimeout(() => {\n                connection.pendingRequests.delete(requestId);\n                reject(new Error(`runQuery ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n            }, WS_REQUEST_TIMEOUT_MS);\n            connection.pendingRequests.set(requestId, { resolve, reject, timer });\n            try {\n                connection.ws.send(frame);\n            }\n            catch (e) {\n                connection.pendingRequests.delete(requestId);\n                clearTimeout(timer);\n                reject(e);\n            }\n        });\n    }\n    catch (_b) {\n        return null; // timeout / disconnect / server error frame -> HTTP re-runs authoritatively\n    }\n    if ((data === null || data === void 0 ? void 0 : data.useHttp) === true)\n        return null; // server deferred (onchain, cross-room, malformed)\n    if (Array.isArray(data === null || data === void 0 ? void 0 : data.queries))\n        return data.queries;\n    return null; // unexpected shape -> HTTP\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket (fire-and-forget).\n * Returns true if it was sent over an open connection, false if there is no\n * live socket for this room yet (caller falls back to HTTP). The worker is the\n * room authority — the connection is already routed to the room DO, so the\n * client never names a destination.\n */\nexport async function wsIntent(appId, roomRoutePath, intent, isServer) {\n    const roomKey = roomKeyFromRoutePath(roomRoutePath);\n    const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n    const connection = connections.get(connKey);\n    if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n        return false;\n    }\n    // Identity-aware send gate. The server attributes intents to the\n    // CONNECTION's authenticated principal, so the only correct reasons to\n    // refuse the socket are identity ones:\n    //   - the socket is anonymous while the user is now authenticated, or\n    //   - the current principal DIFFERS from the socket principal.\n    // A mere token rotation for the SAME principal, or a transiently-null\n    // token mid-refresh, must NOT reroute a 30Hz command stream to\n    // per-command HTTP — that collapses delivery rate and unbounds the game's\n    // ack lag (field-debugged: server 500+ commands behind).\n    const currentToken = await getIdToken(isServer).catch(() => null);\n    if (!currentToken) {\n        // Mid-refresh: the socket principal still governs server-side.\n        if (!connection.authTokenValue && !connection.authPrincipal)\n            return false;\n    }\n    else if (!connection.authTokenValue && !connection.authPrincipal) {\n        // Anonymous socket + authenticated user: do not attribute this user's\n        // input to the anon principal. Reauth the socket; caller may fall back.\n        void maybeReauthRoomConnection(connection, isServer);\n        return false;\n    }\n    else if (!connectionMatchesAuthToken(connection, currentToken)) {\n        // Different principal (identity switch): never send as the old user.\n        void maybeReauthRoomConnection(connection, isServer);\n        return false;\n    }\n    try {\n        connection.ws.send(JSON.stringify({ type: 'intent', intent }));\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\n// Debounced background reauth: when the client's current token no longer\n// matches the connection's authenticated identity (token rotation), refresh the\n// socket auth ONCE rather than degrading every subsequent send.\nconst reauthInFlight = new WeakSet();\nasync function maybeReauthRoomConnection(connection, isServer) {\n    try {\n        if (reauthInFlight.has(connection))\n            return;\n        reauthInFlight.add(connection);\n        try {\n            await reconnectWithNewAuthV2();\n        }\n        finally {\n            reauthInFlight.delete(connection);\n        }\n    }\n    catch (_a) {\n        // Best-effort: the next send retries; the server still enforces auth.\n    }\n}\n/** True when an OPEN room socket exists for this room path. */\nexport function hasOpenRoomConnection(appId, roomRoutePath) {\n    const roomKey = roomKeyFromRoutePath(roomRoutePath);\n    const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n    const connection = connections.get(connKey);\n    return !!(connection && connection.ws && connection.ws.readyState === WS_READY_STATE_OPEN);\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket and AWAIT the server\n * ack — so a policy/auth denial (401/403/404/503) REJECTS instead of being\n * silently dropped (the fire-and-forget `wsIntent` discards request-less error\n * frames). Use for semantically important intents (join/ready/leave). Returns a\n * Promise that resolves on ack / rejects on error, or `undefined` if no live\n * socket exists yet (caller falls back to HTTP, which also surfaces errors).\n */\nexport async function wsIntentReliable(appId, roomRoutePath, intent, isServer) {\n    const roomKey = roomKeyFromRoutePath(roomRoutePath);\n    const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n    const connection = connections.get(connKey);\n    if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n        return undefined;\n    }\n    if (!(await canSendAuthenticatedLiveIntent(connection, isServer))) {\n        return undefined;\n    }\n    const requestId = generateRequestId();\n    return new Promise((resolve, reject) => {\n        const timer = setTimeout(() => {\n            connection.pendingRequests.delete(requestId);\n            reject(new Error(`Live intent ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n        }, WS_REQUEST_TIMEOUT_MS);\n        connection.pendingRequests.set(requestId, {\n            resolve: (data) => resolve((data !== null && data !== void 0 ? data : { ok: true })),\n            reject,\n            timer,\n        });\n        try {\n            connection.ws.send(JSON.stringify({ type: 'intent', requestId, intent }));\n        }\n        catch (e) {\n            connection.pendingRequests.delete(requestId);\n            clearTimeout(timer);\n            reject(e);\n        }\n    });\n}\n","import { makeApiRequest } from '../utils/api';\nimport { resolveClientTransactionVersions } from './client-transaction-versions';\nimport { getConfig, isBoundedNetwork, isBoundedNetworkConfig } from './config';\nimport { runNamedQueriesOverSocket } from './subscription-v2';\nimport { getIdToken } from '../utils/utils';\nimport { safeBtoa } from '../utils/core-platform';\n/**\n * Thrown when a user's wallet doesn't have enough SOL to cover the transaction.\n * Apps can catch this to trigger an onramp/funding flow.\n */\nexport class InsufficientBalanceError extends Error {\n    constructor(address, balanceLamports, estimatedCostLamports, deficitLamports, deficitSol) {\n        super(`Insufficient balance: wallet ${address} needs ~${deficitSol.toFixed(6)} SOL more to complete this transaction.`);\n        this.name = 'InsufficientBalanceError';\n        this.address = address;\n        this.balanceLamports = balanceLamports;\n        this.estimatedCostLamports = estimatedCostLamports;\n        this.deficitLamports = deficitLamports;\n        this.deficitSol = deficitSol;\n    }\n}\nconst getCache = {};\nconst pendingRequests = {};\n// Default cache TTL (500ms = 0.5 seconds)\nconst GET_CACHE_TTL = 500; // Adjust this value as needed (in milliseconds)\nfunction getReadCacheEntry(cacheKey, principalValue) {\n    var _a;\n    return (_a = getCache[cacheKey]) === null || _a === void 0 ? void 0 : _a.find(entry => entry.principalValue === principalValue);\n}\nfunction setReadCacheEntry(cacheKey, principalValue, data, expiresAt) {\n    var _a;\n    const bucket = (_a = getCache[cacheKey]) !== null && _a !== void 0 ? _a : [];\n    const reusableEntries = bucket.filter(entry => (entry.principalValue !== principalValue && entry.expiresAt >= Date.now()));\n    reusableEntries.push({ data, expiresAt, principalValue });\n    getCache[cacheKey] = reusableEntries;\n}\n// Last time we cleaned up the cache\nlet lastCacheCleanup = Date.now();\nlet uncacheableReadKeyCounter = 0;\n/**\n * Return the leaf document key (last path segment) for a document path.\n *\n * Bounded rows carry `_id` (and `pathId`) set to the FULL document path\n * (e.g. `\"rooms/r1/prompts/8rd49se3sg\"`). Apps that build a child path from a\n * row naturally want the bare doc key, not the whole path — using the full path\n * doubles it (`rooms/r1/prompts/rooms/r1/prompts/8rd.../votes/...`) → 403/404.\n * `docId` extracts that leaf key. Tolerates leading slashes and a trailing `*`.\n *\n * @example docId(\"rooms/r1/prompts/8rd49se3sg\") // \"8rd49se3sg\"\n */\nexport function docId(path) {\n    if (typeof path !== 'string')\n        return '';\n    let p = path.startsWith('/') ? path.slice(1) : path;\n    if (p.endsWith('*') && p.length > 1)\n        p = p.slice(0, -1);\n    if (p.endsWith('/'))\n        p = p.slice(0, -1);\n    const segments = p.split('/').filter(Boolean);\n    return segments.length ? segments[segments.length - 1] : '';\n}\n/**\n * Additively attach a convenience bare `id` (the leaf doc key) to a returned row.\n *\n * Rows already carry `_id`/`pathId` = the full document path; this leaves those\n * untouched and adds `id` = the last path segment so `row.id` is the doc key apps\n * expect. No-ops for non-objects, arrays, and rows that already define `id`\n * (never clobber a user field named `id`). Source for the leaf is `_id` (falling\n * back to `pathId`/`relativePath`/`absolutePath`).\n */\nfunction withBareId(row) {\n    var _a, _b, _c;\n    if (!row || typeof row !== 'object' || Array.isArray(row))\n        return row;\n    const r = row;\n    if ('id' in r)\n        return row; // don't clobber an explicit user field\n    const source = (_c = (_b = (_a = r._id) !== null && _a !== void 0 ? _a : r.pathId) !== null && _b !== void 0 ? _b : r.relativePath) !== null && _c !== void 0 ? _c : r.absolutePath;\n    if (typeof source !== 'string' || source.length === 0)\n        return row;\n    const leaf = docId(source);\n    if (!leaf)\n        return row;\n    return Object.assign(Object.assign({}, r), { id: leaf });\n}\n/**\n * Normalize a raw read response from the worker into the SDK's stable shape and\n * attach the bare `id` to every returned row (Bug 1 + Bug 2).\n *\n * - Single-document path: returns EXACTLY ONE shape — the resolved document, or\n *   `null` if missing (Firebase/Mongo convention). Unwraps the ambiguous\n *   `{ data, status }` envelope the worker sometimes emits for a single doc so a\n *   single-doc `get` never sometimes-returns the doc and sometimes the envelope.\n * - Collection path: preserves the `{ data, nextCursor, ... }` envelope and maps\n *   the bare `id` onto each row in `data`.\n */\nfunction normalizeReadResult(responseData, pathIsDocument) {\n    if (pathIsDocument) {\n        let doc = responseData;\n        // Unwrap the single-doc envelope `{ data, status }` (Bug 2). A real document\n        // never has the exact shape `{ data, status }` with nothing else meaningful,\n        // so detect the envelope by `data` + numeric `status` AND the absence of a\n        // top-level `_id` (a real stored doc always carries `_id`/`pathId` from the\n        // worker; the envelope wrapper does not). This avoids unwrapping a genuine\n        // document that merely happens to own `data`/`status` fields.\n        if (doc && typeof doc === 'object' && !Array.isArray(doc) &&\n            'data' in doc && 'status' in doc && typeof doc.status === 'number' &&\n            !('_id' in doc) && !('pathId' in doc)) {\n            doc = doc.data;\n        }\n        if (doc === undefined || doc === null)\n            return null;\n        return withBareId(doc);\n    }\n    // Collection read. The worker body is `{ data: rows[], nextCursor?, status? }`.\n    if (responseData && typeof responseData === 'object' && !Array.isArray(responseData) && Array.isArray(responseData.data)) {\n        return Object.assign(Object.assign({}, responseData), { data: responseData.data.map((row) => withBareId(row)) });\n    }\n    // Some paths return a bare array of rows — map id onto each.\n    if (Array.isArray(responseData)) {\n        return responseData.map((row) => withBareId(row));\n    }\n    return responseData;\n}\nfunction hashForKey(value) {\n    let h = 5381;\n    for (let i = 0; i < value.length; i++) {\n        h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n    }\n    return h.toString(36);\n}\n// Memoize the compact principal hash per exact credential string. Every read\n// hashed the entire (~1KB) bearer/idToken on every call; a session presents\n// the same handful of credentials for its lifetime. Bounded size — a rotation\n// simply inserts the new token and stale entries fall off on clear.\nconst principalHashCache = new Map();\nfunction hashForKeyCached(value) {\n    const hit = principalHashCache.get(value);\n    if (hit !== undefined)\n        return hit;\n    const h = hashForKey(value);\n    if (principalHashCache.size >= 50)\n        principalHashCache.clear();\n    principalHashCache.set(value, h);\n    return h;\n}\n// #022: HTTP header names are case-insensitive on the wire, so recognize `authorization`\n// in ANY casing when deriving the per-user cache key. Otherwise a caller-supplied\n// `AUTHORIZATION: <token B>` rides into the request while the cache key is computed from\n// the ambient token A - filing B's data under A's identity. The cache key must always be\n// derived from the same credential the request authenticates with.\nfunction authHeaderEntry(headers) {\n    if (!headers)\n        return undefined;\n    for (const name of Object.keys(headers)) {\n        if (name.toLowerCase() === 'authorization')\n            return headers[name];\n    }\n    return undefined;\n}\nfunction hasAuthHeader(headers) {\n    return authHeaderEntry(headers) !== undefined;\n}\nfunction authValueFromHeaders(headers) {\n    return authHeaderEntry(headers) || '';\n}\nfunction principalFromAuthValue(authValue) {\n    return authValue ? `h${hashForKeyCached(authValue)}` : null;\n}\nfunction principalFromIdToken(idToken) {\n    return idToken ? `t${hashForKeyCached(idToken)}` : null;\n}\nfunction uncacheableReadKey(appId, scope) {\n    uncacheableReadKeyCounter += 1;\n    return `${appId}:${scope}-uncacheable-${uncacheableReadKeyCounter}`;\n}\n/**\n * SECURITY (H1): Read caches must be keyed by the caller's principal, not just\n * by path/filter/shape. In a shared process / SSR worker / browser login-switch,\n * keying by path alone lets User B receive User A's cached private read before\n * any server read rule runs. This returns `appId:<principal>` for the opaque\n * auth material a given read will actually authenticate with. No-auth reads are\n * deliberately marked uncacheable instead of sharing an implicit `anon` bucket.\n * JWTs are intentionally treated as opaque unverified bearer material — never\n * decoded claims and never caller identity hints such as `_walletAddress`.\n */\nasync function getReadPrincipalKey(overrides) {\n    var _a;\n    const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n    const appId = config.appId || '';\n    // A scoped read-only instance sends no auth and must never consult the ambient\n    // global session for a principal - its reads are always uncacheable (no\n    // per-user cache reuse, but also no cross-app/cross-user leak).\n    if (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) {\n        return { key: uncacheableReadKey(appId, 'ro'), cacheable: false, principalValue: null };\n    }\n    // makeApiRequest applies overrides.headers AFTER its computed auth header, so\n    // caller-supplied Authorization is the real request auth when present.\n    if (hasAuthHeader(overrides === null || overrides === void 0 ? void 0 : overrides.headers)) {\n        const authValue = authValueFromHeaders(overrides === null || overrides === void 0 ? void 0 : overrides.headers);\n        const principal = principalFromAuthValue(authValue);\n        return principal\n            ? { key: `${appId}:${principal}`, cacheable: true, principalValue: authValue }\n            : { key: uncacheableReadKey(appId, 'h'), cacheable: false, principalValue: null };\n    }\n    // Per-request auth-header override (wallet client). Key by the exact opaque\n    // header it produces, not decoded claims or the unverified _walletAddress hint.\n    if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n        try {\n            const headers = await overrides._getAuthHeaders();\n            const authValue = authValueFromHeaders(headers);\n            const principal = principalFromAuthValue(authValue);\n            return principal\n                ? { key: `${appId}:o${principal}`, cacheable: true, principalValue: authValue }\n                : { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n        }\n        catch (_b) {\n            // If we can't resolve the override identity, do not read/write cache.\n            return { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n        }\n    }\n    // Ambient session principal.\n    const idToken = await getIdToken(config.isServer);\n    const principal = principalFromIdToken(idToken);\n    return principal\n        ? { key: `${appId}:${principal}`, cacheable: true, principalValue: idToken !== null && idToken !== void 0 ? idToken : null }\n        : { key: uncacheableReadKey(appId, 'a'), cacheable: false, principalValue: null };\n}\n/**\n * Validates that a field name is a safe identifier (alphanumeric, underscores, dots for nested paths).\n * Prevents prompt injection via crafted field names.\n */\nfunction validateFieldName(field) {\n    if (!/^[a-zA-Z0-9_.]+$/.test(field)) {\n        throw new Error(`Invalid field name \"${field}\". Field names must only contain letters, numbers, underscores, and dots.`);\n    }\n}\n/**\n * Parses a raw aggregation result (e.g. [{ count: 42 }] or [{ _id: null, total: 100 }])\n * into a single numeric value.\n */\nfunction parseAggregateValue(result) {\n    if (typeof result === 'number')\n        return result;\n    if (Array.isArray(result)) {\n        if (result.length === 0)\n            return 0;\n        // Multiple elements — not a collapsed aggregate result\n        if (result.length > 1) {\n            throw new Error(`Unexpected aggregate result: got array with ${result.length} elements. The AI may have returned full documents instead of an aggregation.`);\n        }\n        const first = result[0];\n        if (typeof first === 'number')\n            return first;\n        if (first && typeof first === 'object') {\n            // $count stage returns { count: N }\n            if (typeof first.count === 'number')\n                return first.count;\n            // $group stage returns { _id: null, result: N } — expect _id + one numeric field\n            const numericEntries = Object.entries(first).filter(([key, val]) => key !== '_id' && typeof val === 'number');\n            if (numericEntries.length === 1)\n                return numericEntries[0][1];\n        }\n        // Avoid leaking document contents into error messages\n        const shape = first && typeof first === 'object' ? `{${Object.keys(first).join(', ')}}` : String(first);\n        throw new Error(`Unexpected aggregate result shape: ${shape}. Expected {count: N} or {_id: null, <field>: N}.`);\n    }\n    if (result && typeof result === 'object' && typeof result.count === 'number') {\n        return result.count;\n    }\n    throw new Error(`Unexpected aggregate result type: ${typeof result}. Expected a number, array, or object with a count field.`);\n}\n/**\n * Count items in a collection path. Returns a numeric result.\n *\n * This uses the AI query engine with a count-specific prompt prefix,\n * so Bounded will generate a $count aggregation pipeline and return\n * just the count rather than full documents.\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate counts cannot be performed without pulling all\n * documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param opts - Optional filter prompt and overrides\n * @returns AggregateResult with the count value\n */\n/** Whether these opts target a Bounded network - honoring a scoped instance's\n *  own config (`_overrides._config`) rather than the module global. */\nfunction optsTargetBounded(overrides) {\n    return (overrides === null || overrides === void 0 ? void 0 : overrides._config) ? isBoundedNetworkConfig(overrides._config) : isBoundedNetwork();\n}\nexport async function count(path, opts = {}) {\n    var _a, _b;\n    // On Bounded, the worker has no AI query engine — a prompt-based count returns\n    // the raw documents, not an aggregation. Use the deterministic server\n    // aggregation (queryAggregate) instead.\n    if (optsTargetBounded(opts._overrides)) {\n        const rows = await queryAggregate(path, { count: true }, { filter: opts.filter, _overrides: opts._overrides });\n        return { value: (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0 };\n    }\n    const prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n    const fullPrompt = opts.prompt\n        ? `${prefix} Filter: ${opts.prompt}`\n        : prefix;\n    const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n    return { value: parseAggregateValue(result) };\n}\n/**\n * Bounded-native implementation of `aggregate`: map the single-scalar operation\n * onto the deterministic `queryAggregate` server aggregation and pull the value\n * out of the (single, ungrouped) result row. Empty collection → 0.\n */\nasync function boundedAggregate(path, operation, opts) {\n    var _a, _b, _c;\n    const qopts = { filter: opts.filter, _overrides: opts._overrides };\n    if (operation === 'count') {\n        const rows = await queryAggregate(path, { count: true }, qopts);\n        return (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0;\n    }\n    if (!opts.field)\n        throw new Error(`aggregate \"${operation}\" requires a field option`);\n    validateFieldName(opts.field);\n    if (operation === 'uniqueCount') {\n        // distinct values = number of groups when grouping by the field.\n        const rows = await queryAggregate(path, { groupBy: [opts.field] }, qopts);\n        return rows.length;\n    }\n    // sum / avg / min / max → one bucket keyed by the field on the single row.\n    const rows = await queryAggregate(path, { [operation]: [opts.field] }, qopts);\n    const bucket = (_c = rows[0]) === null || _c === void 0 ? void 0 : _c[operation];\n    const v = bucket === null || bucket === void 0 ? void 0 : bucket[opts.field];\n    return typeof v === 'number' ? v : 0;\n}\n/**\n * Run an aggregate operation on a collection path. Returns a numeric result.\n *\n * Supported operations:\n * - count: Total number of documents\n * - uniqueCount: Number of distinct values for a field\n * - sum: Sum of a numeric field\n * - avg: Average of a numeric field\n * - min: Minimum value of a numeric field\n * - max: Maximum value of a numeric field\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate operations cannot be performed without pulling\n * all documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param operation - The aggregate operation to perform\n * @param opts - Options including optional filter prompt and field name\n * @returns AggregateResult with the computed numeric value\n */\nexport async function aggregate(path, operation, opts = {}) {\n    // On Bounded, route through the deterministic server aggregation — the legacy\n    // AI-prompt path returns raw documents on the worker (no AI query engine).\n    if (optsTargetBounded(opts._overrides)) {\n        return { value: await boundedAggregate(path, operation, opts) };\n    }\n    let prefix;\n    switch (operation) {\n        case 'count':\n            prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n            break;\n        case 'uniqueCount':\n            if (!opts.field)\n                throw new Error('aggregate \"uniqueCount\" requires a field option');\n            validateFieldName(opts.field);\n            prefix = `Return ONLY the count of unique/distinct values of the \"${opts.field}\" field. Use $group with _id set to \"$${opts.field}\" then $count to produce a field named \"count\". Do NOT return the documents themselves.`;\n            break;\n        case 'sum':\n            if (!opts.field)\n                throw new Error('aggregate \"sum\" requires a field option');\n            validateFieldName(opts.field);\n            prefix = `Return ONLY the sum of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $sum: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n            break;\n        case 'avg':\n            if (!opts.field)\n                throw new Error('aggregate \"avg\" requires a field option');\n            validateFieldName(opts.field);\n            prefix = `Return ONLY the average of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $avg: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n            break;\n        case 'min':\n            if (!opts.field)\n                throw new Error('aggregate \"min\" requires a field option');\n            validateFieldName(opts.field);\n            prefix = `Return ONLY the minimum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $min: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n            break;\n        case 'max':\n            if (!opts.field)\n                throw new Error('aggregate \"max\" requires a field option');\n            validateFieldName(opts.field);\n            prefix = `Return ONLY the maximum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $max: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n            break;\n        default:\n            throw new Error(`Unsupported aggregate operation: ${operation}`);\n    }\n    const fullPrompt = opts.prompt\n        ? `${prefix} Filter: ${opts.prompt}`\n        : prefix;\n    const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n    // For uniqueCount, the AI may return $group results without the final $count\n    // stage, producing [{_id: \"val1\"}, {_id: \"val2\"}, ...]. Verify elements look\n    // like $group output (only _id key) before using array length as the count.\n    if (operation === 'uniqueCount' && Array.isArray(result) && result.length > 1) {\n        const looksLikeGroupOutput = result.every((el) => el && typeof el === 'object' && Object.keys(el).length === 1 && '_id' in el);\n        if (looksLikeGroupOutput) {\n            return { value: result.length };\n        }\n        throw new Error(`Unexpected uniqueCount result: got ${result.length} elements that don't match $group output shape.`);\n    }\n    return { value: parseAggregateValue(result) };\n}\n/**\n * Structured, grouped aggregation over a collection. Returns one row per group\n * (or a single row when `spec.groupBy` is omitted). Read rules are enforced — the\n * aggregation only sees documents the caller can read.\n *\n * ```ts\n * const byCat = await queryAggregate(\"spend\", { groupBy: [\"category\"], count: true, sum: [\"amount\"] });\n * // [{ group: { category: \"food\" }, count: 2, sum: { amount: 70 } }, ...]\n * ```\n */\nexport async function queryAggregate(path, spec, opts = {}) {\n    var _a, _b, _c, _d, _e;\n    let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n    if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n        normalizedPath = normalizedPath.slice(0, -1);\n    }\n    if (!normalizedPath || normalizedPath.length === 0) {\n        throw new Error(\"Invalid path provided.\");\n    }\n    // Validate every referenced field name to prevent injection via crafted keys.\n    // Each of these takes an ARRAY of field names — catch the common mistake of\n    // passing an object/string (e.g. `sum: { field: \"n\" }`) with a clear error\n    // instead of a cryptic \"list is not iterable\" from the for-of below.\n    for (const key of ['groupBy', 'sum', 'avg', 'min', 'max']) {\n        const list = spec[key];\n        if (list == null)\n            continue;\n        if (!Array.isArray(list)) {\n            throw new Error(`queryAggregate: spec.${key} must be an array of field names ` +\n                `(e.g. ${key}: [\"amount\"]), got ${typeof list}`);\n        }\n        for (const f of list)\n            validateFieldName(f);\n    }\n    const cleanSpec = {};\n    if ((_a = spec.groupBy) === null || _a === void 0 ? void 0 : _a.length)\n        cleanSpec.groupBy = spec.groupBy;\n    if (spec.count)\n        cleanSpec.count = true;\n    if ((_b = spec.sum) === null || _b === void 0 ? void 0 : _b.length)\n        cleanSpec.sum = spec.sum;\n    if ((_c = spec.avg) === null || _c === void 0 ? void 0 : _c.length)\n        cleanSpec.avg = spec.avg;\n    if ((_d = spec.min) === null || _d === void 0 ? void 0 : _d.length)\n        cleanSpec.min = spec.min;\n    if ((_e = spec.max) === null || _e === void 0 ? void 0 : _e.length)\n        cleanSpec.max = spec.max;\n    const aggParam = `&aggregate=${encodeURIComponent(JSON.stringify(cleanSpec))}`;\n    const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n    const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${aggParam}${filterParam}`;\n    const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n    const body = response.data;\n    // Worker returns { data: AggregateRow[], nextCursor, status } for aggregate queries.\n    if (Array.isArray(body))\n        return body;\n    if (body && Array.isArray(body.data))\n        return body.data;\n    return [];\n}\n/**\n * Full-text search a collection declared with `search: { fields: [...] }`.\n *\n * The match runs over the collection's indexed fields (or the subset passed in\n * `opts.fields`) and respects each document's `read` rule — results the caller\n * cannot read are omitted. Returns the matching documents (optionally paged via\n * `opts.limit`/`opts.cursor`).\n *\n * @param path  Collection path, e.g. \"orgs/o1/docs\"\n * @param query Free-text query string (non-empty)\n */\nexport async function search(path, query, opts = {}) {\n    let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n    if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n        normalizedPath = normalizedPath.slice(0, -1);\n    }\n    if (!normalizedPath || normalizedPath.length === 0) {\n        throw new Error(\"Invalid path provided.\");\n    }\n    if (typeof query !== \"string\" || query.trim().length === 0) {\n        throw new Error(\"search query must be a non-empty string\");\n    }\n    if (opts.fields) {\n        for (const f of opts.fields)\n            validateFieldName(f);\n    }\n    const spec = { query };\n    if (opts.fields && opts.fields.length > 0)\n        spec.fields = opts.fields;\n    const searchParam = `&search=${encodeURIComponent(JSON.stringify(spec))}`;\n    const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n    const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n    const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${searchParam}${limitParam}${cursorParam}`;\n    const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n    return response.data;\n}\nexport async function get(path, opts = {}) {\n    var _a, _b, _c;\n    try {\n        let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n        // Remove last '*' if it exists in the path\n        if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n            normalizedPath = normalizedPath.slice(0, -1);\n        }\n        if (!normalizedPath || normalizedPath.length === 0) {\n            throw new Error(\"Invalid path provided.\");\n        }\n        // Create cache key combining path, prompt, filter, sort, includeSubPaths,\n        // shape, limit, cursor — and (H1) the caller's appId + compact principal\n        // bucket. Exact opaque credential equality is checked inside that bucket,\n        // so a private read cached for one user is never served to another in a\n        // shared process / SSR worker / browser login-switch. The cache is opt-in\n        // and disabled for no-auth reads, which get an uncacheable unique key.\n        const shapeKey = opts.shape ? JSON.stringify(opts.shape) : '';\n        const includeSubPathsKey = opts.includeSubPaths ? ':subpaths' : '';\n        const limitKey = opts.limit !== undefined ? `:l${opts.limit}` : '';\n        const cursorKey = opts.cursor ? `:c${hashForKey(opts.cursor)}` : '';\n        const filterKey = opts.filter ? `:f${hashForKey(JSON.stringify(opts.filter))}` : '';\n        const sortKey = opts.sort ? `:s${hashForKey(JSON.stringify(opts.sort))}` : '';\n        const principalKey = await getReadPrincipalKey(opts._overrides);\n        const cacheKey = `${principalKey.key}|${normalizedPath}:${opts.prompt || ''}${filterKey}${sortKey}${includeSubPathsKey}:${shapeKey}${limitKey}${cursorKey}`;\n        const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n        const now = Date.now();\n        // Check for valid cache entry when the caller explicitly opted in.\n        const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n        if (cacheEnabled &&\n            cachedEntry &&\n            now < cachedEntry.expiresAt) {\n            return cachedEntry.data;\n        }\n        // If we're bypassing cache, we should still coalesce identical requests\n        // but need a different key to avoid interfering with regular requests.\n        // Abortable calls are deliberately never coalesced: sharing one Axios\n        // promise would let an old route's AbortSignal cancel a newer consumer of\n        // the same path, or make the newer consumer inherit the old cancellation.\n        const requestKey = opts.bypassCache ? `bypass:${cacheKey}` : cacheKey;\n        const shouldCoalesce = !((_a = opts._overrides) === null || _a === void 0 ? void 0 : _a.signal);\n        // The compact principal hash is only an index bucket. Coalesce only when\n        // the exact opaque credential also matches, so collisions stay isolated.\n        const existingPending = shouldCoalesce\n            ? (_b = pendingRequests[requestKey]) === null || _b === void 0 ? void 0 : _b.find(entry => entry.principalValue === principalKey.principalValue)\n            : undefined;\n        if (existingPending) {\n            return existingPending.promise;\n        }\n        // Create a new request promise and store it\n        let requestPromise;\n        requestPromise = (async () => {\n            var _a;\n            try {\n                const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n                // Cache miss or bypass - proceed with HTTP API request\n                let response;\n                // Build common query params\n                const includeSubPathsParam = opts.includeSubPaths ? '&includeSubPaths=true' : '';\n                const shapeParam = opts.shape ? `&shape=${encodeURIComponent(JSON.stringify(opts.shape))}` : '';\n                const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n                const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n                const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n                const sortParam = opts.sort ? `&sort=${encodeURIComponent(JSON.stringify(opts.sort))}` : '';\n                if (pathIsDocument) {\n                    const itemId = encodeURIComponent(normalizedPath);\n                    const queryParams = [includeSubPathsParam, shapeParam].filter(p => p).join('');\n                    const apiPath = queryParams ? `items/${itemId}?${queryParams.substring(1)}` : `items/${itemId}`;\n                    response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n                }\n                else {\n                    const path = encodeURIComponent(normalizedPath);\n                    // encodeURIComponent the base64: safeBtoa emits standard base64 (with '+' '/' '='),\n                    // and a raw '+' in a query string decodes to a space on the server\n                    // (url.searchParams.get), corrupting the exact non-ASCII prompts DS2-0463 fixed. The\n                    // server percent-decodes back to the original base64 before decodeUtf8Base64. (DS2-0463)\n                    const promptQueryParam = (opts === null || opts === void 0 ? void 0 : opts.prompt) ? `&prompt=${encodeURIComponent(safeBtoa(opts.prompt))}` : \"\";\n                    const apiPath = `items?path=${path}${promptQueryParam}${filterParam}${sortParam}${includeSubPathsParam}${shapeParam}${limitParam}${cursorParam}`;\n                    response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n                }\n                // Normalize the worker's raw body into the SDK's stable shape:\n                //   - single-doc path → the resolved document or null (Bug 2), and\n                //   - collection path → `{ data, nextCursor }` preserved,\n                // with the bare `id` (leaf doc key) attached to every returned row (Bug 1).\n                const responseData = normalizeReadResult(response.data, pathIsDocument);\n                // Cache the response only when explicitly requested and principal-bound.\n                if (cacheEnabled) {\n                    setReadCacheEntry(cacheKey, principalKey.principalValue, responseData, now + GET_CACHE_TTL);\n                    // Periodically clean up expired cache entries (every 5 seconds)\n                    if (now - lastCacheCleanup > 5000) {\n                        cleanupExpiredCache();\n                        lastCacheCleanup = now;\n                    }\n                }\n                // Return the data from the response\n                return responseData;\n            }\n            finally {\n                // Remove only this exact request. A colliding principal can legitimately\n                // have another request in the same compact-hash bucket.\n                if (shouldCoalesce) {\n                    const bucket = pendingRequests[requestKey];\n                    const index = (_a = bucket === null || bucket === void 0 ? void 0 : bucket.findIndex(entry => entry.promise === requestPromise)) !== null && _a !== void 0 ? _a : -1;\n                    if (index >= 0)\n                        bucket.splice(index, 1);\n                    if ((bucket === null || bucket === void 0 ? void 0 : bucket.length) === 0)\n                        delete pendingRequests[requestKey];\n                }\n            }\n        })();\n        // Store the promise so only callers with the exact same credential join it.\n        if (shouldCoalesce) {\n            ((_c = pendingRequests[requestKey]) !== null && _c !== void 0 ? _c : (pendingRequests[requestKey] = [])).push({\n                principalValue: principalKey.principalValue,\n                promise: requestPromise,\n            });\n        }\n        // Return the promise\n        return requestPromise;\n    }\n    catch (error) {\n        throw error;\n    }\n}\n// Helper to clean up expired cache entries\nfunction cleanupExpiredCache() {\n    const now = Date.now();\n    Object.keys(getCache).forEach(key => {\n        var _a, _b;\n        const activeEntries = (_b = (_a = getCache[key]) === null || _a === void 0 ? void 0 : _a.filter(entry => entry.expiresAt >= now)) !== null && _b !== void 0 ? _b : [];\n        if (activeEntries.length > 0)\n            getCache[key] = activeEntries;\n        else\n            delete getCache[key];\n    });\n    lastCacheCleanup = now;\n}\nfunction classifyGetManyBatchError(error) {\n    var _a, _b, _c;\n    const err = error;\n    const status = (_b = (_a = err === null || err === void 0 ? void 0 : err.status) !== null && _a !== void 0 ? _a : err === null || err === void 0 ? void 0 : err.statusCode) !== null && _b !== void 0 ? _b : (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n    const message = error instanceof Error\n        ? error.message\n        : typeof (err === null || err === void 0 ? void 0 : err.message) === 'string'\n            ? err.message\n            : 'Unknown error';\n    if (status === 401 || status === 403) {\n        return { code: 'UNAUTHORIZED', message };\n    }\n    if (status === 400) {\n        return { code: 'INVALID_PATH', message };\n    }\n    return { code: 'REQUEST_FAILED', message };\n}\nexport async function getMany(paths, opts = {}) {\n    var _a, _b, _c, _d, _e;\n    if (paths.length === 0) {\n        return [];\n    }\n    if (paths.length > 30) {\n        throw new Error('Cannot fetch more than 30 documents at once');\n    }\n    const normalizedPaths = [];\n    for (const path of paths) {\n        let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n        if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n            normalizedPath = normalizedPath.slice(0, -1);\n        }\n        if (!normalizedPath || normalizedPath.length === 0) {\n            throw new Error(`Invalid path provided: ${path}`);\n        }\n        const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n        if (!pathIsDocument) {\n            throw new Error(`Path must point to a document (even number of segments): ${path}`);\n        }\n        normalizedPaths.push(normalizedPath);\n    }\n    const now = Date.now();\n    // H1: principal-scope getMany cache keys so one user's batch reads are never\n    // served to another. Same `<appId:principal>|<path>:` shape used by get().\n    const principalKey = await getReadPrincipalKey(opts._overrides);\n    const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n    const results = new Array(paths.length);\n    const uncachedIndices = [];\n    const uncachedPaths = [];\n    for (let i = 0; i < normalizedPaths.length; i++) {\n        const normalizedPath = normalizedPaths[i];\n        const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n        const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n        if (cacheEnabled &&\n            cachedEntry &&\n            now < cachedEntry.expiresAt) {\n            results[i] = { path: normalizedPath, data: cachedEntry.data };\n        }\n        else {\n            uncachedIndices.push(i);\n            uncachedPaths.push(normalizedPath);\n        }\n    }\n    if (uncachedPaths.length > 0) {\n        try {\n            const response = await makeApiRequest('POST', 'items/batch', { paths: uncachedPaths }, opts._overrides);\n            if (response.status === 404 && response.data == null) {\n                const endpointError = new Error('Batch read endpoint returned 404');\n                endpointError.status = 404;\n                throw endpointError;\n            }\n            // makeApiRequest returns `{ data: <httpBody> }`, and the worker's items/batch\n            // httpBody is `{ data: { results: [...] }, status }` — so the results are\n            // double-nested at response.data.data.results. (Reading response.data.results\n            // here is undefined → \"serverResults is not iterable\".) Tolerate both shapes.\n            const serverResults = (_e = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.results) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.results) !== null && _e !== void 0 ? _e : [];\n            const serverResultsMap = new Map();\n            for (const result of serverResults) {\n                serverResultsMap.set(result.path, result);\n            }\n            for (let i = 0; i < uncachedIndices.length; i++) {\n                const originalIndex = uncachedIndices[i];\n                const normalizedPath = uncachedPaths[i];\n                const serverResult = serverResultsMap.get(normalizedPath);\n                if (serverResult) {\n                    // getMany batches single-doc paths — attach the bare `id` (leaf doc\n                    // key) to each returned doc, additive (Bug 1), matching get().\n                    const normalizedResult = serverResult.error\n                        ? serverResult\n                        : Object.assign(Object.assign({}, serverResult), { data: withBareId(serverResult.data) });\n                    results[originalIndex] = normalizedResult;\n                    if (!normalizedResult.error && cacheEnabled) {\n                        const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n                        setReadCacheEntry(cacheKey, principalKey.principalValue, normalizedResult.data, now + GET_CACHE_TTL);\n                    }\n                }\n                else {\n                    results[originalIndex] = {\n                        path: normalizedPath,\n                        data: null,\n                        error: { code: 'NOT_FOUND', message: `No result returned for path ${normalizedPath}` }\n                    };\n                }\n            }\n            if (cacheEnabled && now - lastCacheCleanup > 5000) {\n                cleanupExpiredCache();\n                lastCacheCleanup = now;\n            }\n        }\n        catch (error) {\n            const batchError = classifyGetManyBatchError(error);\n            for (const originalIndex of uncachedIndices) {\n                results[originalIndex] = {\n                    path: normalizedPaths[originalIndex],\n                    data: null,\n                    error: batchError,\n                };\n            }\n        }\n    }\n    return results;\n}\nconst MAX_RUN_QUERIES_PER_POST = 10;\nlet pendingRunQueries = [];\nlet runQueryFlushScheduled = false;\nfunction unwrapRunQueryRow(row, entry) {\n    var _a;\n    // The worker disambiguates a computed null from a failed/undeclared query\n    // with a per-row `error` string, so surface it instead of returning undefined.\n    if ((row === null || row === void 0 ? void 0 : row.error) != null) {\n        const err = new Error(String(row.error));\n        err.isQueryError = true;\n        err.queryName = entry.queryName;\n        err.path = entry.absolutePath;\n        throw err;\n    }\n    return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null;\n}\nfunction flushPendingRunQueries() {\n    const pending = pendingRunQueries;\n    pendingRunQueries = [];\n    runQueryFlushScheduled = false;\n    // Calls with any request overrides bypass this buffer, so every entry here\n    // belongs to the same default-overrides identity bucket.\n    for (let offset = 0; offset < pending.length; offset += MAX_RUN_QUERIES_PER_POST) {\n        const chunk = pending.slice(offset, offset + MAX_RUN_QUERIES_PER_POST);\n        void runQueryManyRows(chunk.map(({ entry }) => entry)).then((rows) => {\n            chunk.forEach((caller, index) => {\n                try {\n                    caller.resolve(unwrapRunQueryRow(rows[index], caller.entry));\n                }\n                catch (error) {\n                    caller.reject(error);\n                }\n            });\n        }, (error) => {\n            chunk.forEach(({ reject }) => reject(error));\n        });\n    }\n}\nexport async function runQuery(absolutePath, queryName, queryArgs, opts) {\n    const entry = { absolutePath, queryName, queryArgs };\n    // Auth, custom headers, timeout, and signal overrides must remain local to\n    // one request, so any override-bearing call deliberately bypasses coalescing.\n    if ((opts === null || opts === void 0 ? void 0 : opts._overrides) != null) {\n        const rows = await runQueryManyRows([entry], opts);\n        return unwrapRunQueryRow(rows[0], entry);\n    }\n    return new Promise((resolve, reject) => {\n        pendingRunQueries.push({ entry, resolve, reject });\n        if (!runQueryFlushScheduled) {\n            runQueryFlushScheduled = true;\n            queueMicrotask(flushPendingRunQueries);\n        }\n    });\n}\nexport async function runQueryMany(many, opts) {\n    // Batch shape stays an array of result values (errored rows map to null) so\n    // existing callers keep working; use runQuery for per-row error surfacing.\n    const rows = await runQueryManyRows(many, opts);\n    return rows.map((row) => { var _a; return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null; });\n}\nasync function runQueryManyRows(many, opts) {\n    var _a, _b, _c, _d;\n    try {\n        let queries = [];\n        for (const { absolutePath, queryName, queryArgs } of many) {\n            const normalizedPath = absolutePath.startsWith(\"/\") ? absolutePath.slice(1) : absolutePath;\n            const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n            if (!pathIsDocument) {\n                throw new Error(`Invalid path provided make sure it is pointing to a document: ${absolutePath}`);\n            }\n            queries.push({ path: normalizedPath, queryName, queryArgs });\n        }\n        // v2 socket-when-warm transport: when a warm, identity-matched app socket\n        // already exists and the server advertised the runQuery capability, run this\n        // batch over the socket instead of a fresh HTTP POST. Default-identity calls\n        // only - per-request overrides (a distinct identity) always use HTTP. Any\n        // miss/failure returns null and falls through to the identical HTTP call below,\n        // so the result is byte-identical either way. Never opens a socket just to query.\n        if ((opts === null || opts === void 0 ? void 0 : opts._overrides) == null) {\n            const cfg = await getConfig();\n            const socketRows = await runNamedQueriesOverSocket(cfg.appId, queries, cfg.isServer).catch(() => null);\n            if (socketRows != null) {\n                return socketRows;\n            }\n        }\n        const response = await makeApiRequest('POST', 'queries', { queries }, opts === null || opts === void 0 ? void 0 : opts._overrides);\n        // makeApiRequest returns `{ data: <httpBody> }`, and the worker's httpBody\n        // is `{ data: { queries: [...] }, status }` — so the rows are double-nested\n        // at response.data.data.queries. (Reading response.data.queries here is\n        // undefined → \"Cannot read properties of undefined\".) Tolerate both shapes,\n        // same as getMany does for items/batch.\n        const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n        if (!Array.isArray(rows)) {\n            throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n        }\n        return rows;\n    }\n    catch (error) {\n        throw error;\n    }\n}\n// NEW: Ad-hoc expression execution - first-class feature\nexport async function runExpression(expression, queryArgs, options) {\n    const results = await runExpressionMany([Object.assign({ expression, queryArgs }, options)]);\n    return results[0];\n}\nexport async function runExpressionMany(many) {\n    var _a, _b, _c, _d;\n    try {\n        let queries = [];\n        let firstCredential = undefined;\n        let credentialSeen = false;\n        for (const { expression, queryArgs, returnType, _overrides } of many) {\n            // All batched queries ride ONE request, so they must run under ONE credential.\n            // \"Ambient\" (no _overrides = the logged-in user) is a DISTINCT credential, not\n            // a wildcard any override may satisfy: capture the FIRST entry's credential\n            // state (including undefined/ambient) and reject any later entry whose\n            // credential differs. Silently running the whole batch under the first\n            // override found would evaluate a query meant for user B - or an ambient\n            // end-user row under its restrictive policy - as whoever supplied an override\n            // (e.g. an admin), a cross-principal authorization confusion the caller can't\n            // detect (#103, DS2-0085). Split the batch by credential to run under\n            // different identities.\n            if (!credentialSeen) {\n                firstCredential = _overrides;\n                credentialSeen = true;\n            }\n            else if (_overrides !== firstCredential) {\n                throw new Error(\"[bounded-sdk] runExpressionMany: batched queries carry different _overrides; all queries in one batch share a single request and credential. Split the batch so each request uses one credential.\");\n            }\n            queries.push({ queryArgs, expression, returnType });\n        }\n        const response = await makeApiRequest('POST', 'queries', { queries }, firstCredential);\n        // Same double-nesting as runQueryMany: the worker's httpBody is\n        // { data: { queries: [...] }, status } under makeApiRequest's own\n        // { data: <httpBody> } wrapper. Tolerate both shapes.\n        const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n        if (!Array.isArray(rows)) {\n            throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n        }\n        // Map results - trace is automatically included by server for non-mainnet networks\n        return rows.map((queryResult) => {\n            const result = { result: queryResult.result };\n            // Include trace if present (server includes it for non-mainnet networks)\n            if (queryResult.trace) {\n                result.trace = queryResult.trace;\n            }\n            // Pass through the server's per-row failure so callers can distinguish\n            // a computed null from a failed row.\n            if (queryResult.error != null) {\n                result.error = String(queryResult.error);\n            }\n            return result;\n        });\n    }\n    catch (error) {\n        throw error;\n    }\n}\n/* ===================== WRITE RECEIPT HELPERS (W4) ======================== */\n/**\n * Settle delay before the best-effort mirror read on an on-chain write. It is\n * an optimization, not a correctness guarantee: the receipt is captured first\n * and returned regardless of what the mirror read reports.\n */\nconst MIRROR_SYNC_SETTLE_MS = 1500;\nconst SOLANA_CHAIN_TAGS = new Set(['solana_devnet', 'solana_mainnet']);\n/**\n * Read the execution-lane tag the WORKER reported. The SDK never infers it: a\n * batch touching only unflagged collections in a `realtime_devnet` app commits\n * offchain, so the app's protocol is not the lane. Several field names are\n * accepted (batch-level receipt first, then the per-transaction Solana\n * `network` tag that predates it), but no value is ever manufactured.\n */\nfunction readWorkerChainTag(...sources) {\n    for (const source of sources) {\n        if (!source || typeof source !== 'object')\n            continue;\n        for (const key of ['chain', 'executionChain', 'network']) {\n            const value = source[key];\n            if (typeof value === 'string' && value.trim().length > 0)\n                return value.trim();\n        }\n    }\n    return null;\n}\n/** Path-keyed echo of what the caller asked for. NEVER authoritative state. */\nfunction buildRequestedDocuments(documents) {\n    return documents.map(entry => {\n        var _a;\n        return ({\n            path: entry.destinationPath,\n            document: ((_a = entry.document) !== null && _a !== void 0 ? _a : null),\n        });\n    });\n}\n/** Look a concrete path up in a path-keyed map, tolerating a leading slash. */\nfunction pickPathDocument(source, path) {\n    if (Object.prototype.hasOwnProperty.call(source, path))\n        return source[path];\n    const withSlash = path.startsWith('/') ? path : `/${path}`;\n    if (Object.prototype.hasOwnProperty.call(source, withSlash))\n        return source[withSlash];\n    const withoutSlash = path.startsWith('/') ? path.slice(1) : path;\n    if (Object.prototype.hasOwnProperty.call(source, withoutSlash))\n        return source[withoutSlash];\n    return undefined;\n}\n/**\n * `observed: true` only when EVERY requested concrete path was read back as a\n * real document. The sync endpoint answers `null` for a document that is\n * absent, lagging, or read-denied, and a deleted path reads back as `null` too\n * — none of those are evidence of synchronization.\n */\nfunction validatePathKeyedDocuments(paths, source) {\n    if (!source || typeof source !== 'object' || Array.isArray(source)) {\n        return { observed: false, reason: 'the synchronization response was not a path-keyed document map' };\n    }\n    const map = source;\n    const documents = [];\n    const unobserved = [];\n    for (const path of paths) {\n        const document = pickPathDocument(map, path);\n        if (document == null || typeof document !== 'object' || Array.isArray(document)) {\n            unobserved.push(path);\n            documents.push({ path, document: null });\n            continue;\n        }\n        documents.push({ path, document: document });\n    }\n    if (unobserved.length > 0) {\n        return {\n            observed: false,\n            reason: `no readable document was returned for ${unobserved.join(', ')} ` +\n                '(absent, deleted, lagging, read-denied, or a passthrough write)',\n        };\n    }\n    return { observed: true, documents };\n}\n/**\n * Best-effort mirror read. A confirmed transaction must NEVER be lost to a\n * synchronization failure, so this reports its outcome in `mirrorSync` and\n * never rejects. It reads the CONCRETE destination paths, so a collection\n * insert with a generated id syncs the path that actually exists.\n */\nexport async function attemptMirrorSync(paths, options, settleMs = MIRROR_SYNC_SETTLE_MS) {\n    try {\n        if (settleMs > 0)\n            await new Promise(resolve => setTimeout(resolve, settleMs));\n        const synced = await syncItems(paths, options);\n        // The sync endpoint answers `{ data: <path-keyed map>, status }`; a document\n        // path always contains a `/`, so a top-level `data` key is never one.\n        const map = (synced && typeof synced === 'object' && !Array.isArray(synced) && 'data' in synced)\n            ? synced.data\n            : synced;\n        return validatePathKeyedDocuments(paths, map);\n    }\n    catch (error) {\n        const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n        return { observed: false, reason: `mirror synchronization failed: ${message}` };\n    }\n}\nfunction normalizePathKey(path) {\n    return path.startsWith('/') ? path.slice(1) : path;\n}\n/**\n * Post-hook observation for a DIRECT commit, taken from the worker's own batch\n * receipt. The worker is the only party that can read every concrete path back\n * AFTER hooks have run, so when it reports nothing we say so rather than\n * echoing the request as if it were server state.\n *\n * Unlike the mirror read, a `null` document here IS authoritative: the worker\n * read its own store, so a deleted path genuinely is absent. The worker's\n * `observed` verdict is still re-validated against the requested paths — a\n * receipt that skips one of them cannot be treated as complete.\n */\nfunction observationFromDirectCommit(paths, observation) {\n    var _a;\n    if (!observation || typeof observation !== 'object' || Array.isArray(observation)) {\n        return { observed: false, reason: 'the write receipt carried no post-hook observation' };\n    }\n    const entries = Array.isArray(observation.documents) ? observation.documents : null;\n    if (!entries) {\n        return { observed: false, reason: 'the write receipt carried no path-keyed post-hook documents' };\n    }\n    const byPath = new Map();\n    for (const entry of entries) {\n        if (!entry || typeof entry.path !== 'string')\n            continue;\n        const document = entry.document;\n        byPath.set(normalizePathKey(entry.path), (document && typeof document === 'object' && !Array.isArray(document))\n            ? document\n            : null);\n    }\n    const documents = [];\n    const missing = [];\n    for (const path of paths) {\n        const key = normalizePathKey(path);\n        if (!byPath.has(key)) {\n            missing.push(path);\n            documents.push({ path, document: null });\n            continue;\n        }\n        documents.push({ path, document: (_a = byPath.get(key)) !== null && _a !== void 0 ? _a : null });\n    }\n    if (observation.observed !== true || missing.length > 0) {\n        const unobserved = Array.isArray(observation.unobserved) ? observation.unobserved : [];\n        const reasons = [\n            ...unobserved\n                .filter((entry) => entry && typeof entry.path === 'string')\n                .map((entry) => { var _a; return `${entry.path}: ${(_a = entry.reason) !== null && _a !== void 0 ? _a : 'not observable'}`; }),\n            ...missing.map(path => `${path}: no entry in the receipt observation`),\n        ];\n        return {\n            observed: false,\n            reason: reasons.length > 0\n                ? reasons.join('; ')\n                : 'the worker could not read every requested path back after hooks',\n        };\n    }\n    return { observed: true, documents };\n}\n/**\n * Write a document at `path`. Sugar for a one-element {@link setMany}.\n *\n * **Delete:** pass `null` as the document to delete it — `set(path, null)` is\n * the delete (there is no separate `del`/`remove`). It is routed through the\n * collection's policy `delete` rule and broadcasts a delete to subscribers, and\n * the deleted entry surfaces as a `null` document under its path.\n *\n * Resolves to a discriminated {@link SetResult}; discriminate on `status`.\n */\nexport async function set(path, document, options) {\n    // setMany already invalidates the read cache for the affected document and\n    // collection paths — no second sweep needed here.\n    return setMany([{ path, document }], options);\n}\n/**\n * Atomically write (or delete, with a `null` document) a batch of documents.\n *\n * Resolves to a discriminated {@link SetResult}:\n * - `committed` — the worker applied the batch directly.\n * - `confirmed` — a client-signed chain transaction landed successfully.\n * - `submitted` — broadcast happened but the outcome is unknown. NEVER\n *   resubmit; call `reconcileSetResult`/`waitForSetResult` on the receipt.\n * - `expired_not_landed` — Solana only, and the one retry-safe terminal state.\n * - `signed` — `shouldSubmitTx: false`; signed and deliberately not sent.\n *\n * `requestedDocuments` is always the caller's own echo; authoritative server\n * state appears only under `observation`/`mirrorSync` once actually observed.\n */\nexport async function setMany(many, options) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n    // Returns the data that was set, or undefined if the document was already set.\n    try {\n        // A server WalletClient threads its immutable config snapshot; the default\n        // path reads the mutable process-global init() config. This keeps the app-id\n        // bound into an on-chain 202 write (Solana/offchain) on the wallet\n        // client's original app after a later global init() (CTA-05).\n        const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n        const authProvider = (_d = (_c = options === null || options === void 0 ? void 0 : options._overrides) === null || _c === void 0 ? void 0 : _c.authProvider) !== null && _d !== void 0 ? _d : config.authProvider;\n        if (!authProvider) {\n            throw new Error('Auth provider not initialized');\n        }\n        let documents = [];\n        const pathsToInvalidate = new Set();\n        for (const { path, document: documentWithReservedFields } of many) {\n            // for setting, we should remove any pieces of the document that start with '_' as they are internal and shouldn't be updated. The API would block it if it is one of the reserved ones\n            let document = documentWithReservedFields;\n            if (documentWithReservedFields) {\n                document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));\n            }\n            const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n            pathsToInvalidate.add(normalizedPath);\n            const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n            let curItemId = \"\";\n            if (pathIsDocument) {\n                curItemId = normalizedPath.split(\"/\").pop() ? normalizedPath.split(\"/\").pop() : \"\";\n            }\n            else {\n                curItemId = Math.random().toString(36).slice(2).substring(0, 12);\n            }\n            // if the path is a document, we need to append the document id to the path\n            const collectionPath = pathIsDocument ? normalizedPath.split(\"/\").slice(0, -1).join(\"/\") : normalizedPath;\n            pathsToInvalidate.add(collectionPath);\n            let destinationPath = collectionPath;\n            if (curItemId && curItemId.length > 0) {\n                destinationPath = `${destinationPath}/${curItemId}`;\n            }\n            documents.push({ destinationPath, document });\n        }\n        let setResponse;\n        try {\n            // SIMD-0385: tell the worker which Solana transaction formats this client\n            // can sign, so it builds v1 only for a client that can complete it.\n            const clientTransactionVersions = await resolveClientTransactionVersions(authProvider);\n            setResponse = await makeApiRequest('PUT', `items`, { documents, clientTransactionVersions }, options === null || options === void 0 ? void 0 : options._overrides);\n        }\n        catch (error) {\n            if ((error === null || error === void 0 ? void 0 : error.statusCode) === 402 && (error === null || error === void 0 ? void 0 : error.error) === 'INSUFFICIENT_BALANCE') {\n                const deficitLamports = Number((_e = error.deficitLamports) !== null && _e !== void 0 ? _e : 0);\n                const deficitSol = Number((_f = error.deficitSol) !== null && _f !== void 0 ? _f : deficitLamports / 1000000000);\n                throw new InsufficientBalanceError(String((_g = error.address) !== null && _g !== void 0 ? _g : ''), Number((_h = error.balanceLamports) !== null && _h !== void 0 ? _h : 0), Number((_j = error.estimatedCostLamports) !== null && _j !== void 0 ? _j : 0), deficitLamports, deficitSol);\n            }\n            throw error;\n        }\n        // Invalidate caches and pending requests for affected paths\n        pathsToInvalidate.forEach(path => {\n            clearCacheByPrefix(path);\n        });\n        if (setResponse.status === 202) {\n            // This means that the document needs to be set on-chain (or signed for offchain),\n            // the API did nothing and gave us the required info to run this transaction.\n            const { transactions, offchainTransaction } = setResponse.data;\n            // Handle offchain transaction flow (for 'offchain' protocol apps)\n            if (offchainTransaction && Array.isArray(transactions) && transactions.length > 0) {\n                throw new Error('Ambiguous write response mixes offchain and onchain transaction targets');\n            }\n            if (offchainTransaction) {\n                // Offchain signing is retired: no server mints this envelope any more\n                // (the realtime worker commits poofnet writes directly). Fail loudly\n                // rather than silently ignoring a payload the caller was asked to sign.\n                throw new Error('Unsupported 202 transaction shape: offchain signing is retired');\n            }\n            // Handle Solana on-chain transaction flow\n            if (!Array.isArray(transactions) || transactions.length !== 1) {\n                throw new Error(`Expected exactly one on-chain transaction, received ${Array.isArray(transactions) ? transactions.length : 0}`);\n            }\n            const curTx = transactions[0];\n            // The EVM onchain data plane is retired: no worker mints an EVM 202 any\n            // more. A payload that still carries one is an unexpected response and\n            // fails loudly BEFORE anything is signed - never silently ignored.\n            if ((curTx === null || curTx === void 0 ? void 0 : curTx.evmTransaction) != null) {\n                throw new Error('Unsupported 202 transaction shape: the write response carried an evmTransaction, ' +\n                    'but EVM onchain writes are no longer supported. Nothing was signed or submitted.');\n            }\n            const hasSerializedSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.serializedTransaction) != null;\n            const hasBuiltSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.transactionArgs) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.remainingAccounts) != null ||\n                (curTx === null || curTx === void 0 ? void 0 : curTx.idl) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.txData) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.preInstructions) != null;\n            if (hasSerializedSolanaTarget && hasBuiltSolanaTarget) {\n                throw new Error('Ambiguous on-chain write response mixes Solana transaction target formats');\n            }\n            // All requested paths (writes AND deletes), in request order. Used for the\n            // post-confirm mirror read-back, which correlates every requested path.\n            // The pre-sign validation derives its own full expected intent from\n            // `documents` (see below) and needs nothing from this list.\n            const requestedPaths = documents.map(d => d.destinationPath);\n            const requestedDocuments = buildRequestedDocuments(documents);\n            const appId = config.appId;\n            // The lane comes verbatim from the worker, and is read BEFORE anything is\n            // signed or submitted: a missing tag fails closed while nothing has been\n            // broadcast, instead of stranding a landed transaction with no receipt.\n            const workerChain = readWorkerChainTag((_k = setResponse.data) === null || _k === void 0 ? void 0 : _k.receipt, setResponse.data, curTx);\n            if (!workerChain) {\n                throw new Error('The write response carried no execution-chain tag, so this receipt could not state where the write ran. ' +\n                    'Nothing was signed or submitted.');\n            }\n            if (curTx.serializedTransaction) {\n                if (!SOLANA_CHAIN_TAGS.has(workerChain)) {\n                    throw new Error(`The write response reported execution chain \"${workerChain}\" for a Solana transaction. ` +\n                        'Nothing was signed or submitted.');\n                }\n                const solanaChain = workerChain;\n                const { handlePreBuiltTransaction, buildExpectedWriteIntent } = await import('./solana-operations');\n                // OA-0001: derive the expected intent from OUR OWN request (the one\n                // ground truth a tampered builder response cannot change) so the\n                // validator can reject any transaction whose operation semantics\n                // diverge from it BEFORE the wallet is asked to sign.\n                const expectedIntent = buildExpectedWriteIntent(documents);\n                const solanaOutcome = await handlePreBuiltTransaction(curTx, authProvider, options, expectedIntent);\n                // `shouldSubmitTx: false` signed WITHOUT sending — no signature exists,\n                // and there is nothing to mirror, so no synchronization is attempted.\n                if (solanaOutcome.outcome === 'signed') {\n                    return {\n                        status: 'signed', appId, requestedDocuments, chain: solanaChain,\n                        transactionId: null,\n                        signedTransaction: solanaOutcome.signedTransaction,\n                        fence: solanaOutcome.fence,\n                    };\n                }\n                if (solanaOutcome.outcome === 'submitted') {\n                    return {\n                        status: 'submitted', appId, requestedDocuments, chain: solanaChain,\n                        transactionId: solanaOutcome.transactionSignature,\n                        signedTransaction: solanaOutcome.signedTransaction,\n                        fence: solanaOutcome.fence,\n                        confirmation: { state: 'unknown', reason: solanaOutcome.reason },\n                    };\n                }\n                // Confirmed: the receipt is already complete, so the mirror read is a\n                // best-effort enrichment reported in `mirrorSync`, never a rejection.\n                const mirrorSync = await attemptMirrorSync(requestedPaths, options);\n                return {\n                    status: 'confirmed', appId, requestedDocuments, chain: solanaChain,\n                    transactionId: solanaOutcome.transactionSignature,\n                    signedTransaction: solanaOutcome.signedTransaction,\n                    fence: solanaOutcome.fence,\n                    confirmationContextSlot: solanaOutcome.confirmationContextSlot,\n                    mirrorSync,\n                };\n            }\n            else {\n                throw new Error('Unsupported 202 transaction shape: expected serializedTransaction');\n            }\n        }\n        else if (setResponse.status === 200) {\n            // Direct commit: the worker applied the batch itself. The receipt is\n            // batch-level — `transactionId` comes from the worker's own receipt and is\n            // NEVER lifted out of a result document (a delete returns the PREVIOUS\n            // document, so its stale `_transaction_hash` would misreport the delete).\n            const body = (setResponse.data && typeof setResponse.data === 'object' && !Array.isArray(setResponse.data))\n                ? setResponse.data\n                : null;\n            const receipt = ((body === null || body === void 0 ? void 0 : body.receipt) && typeof body.receipt === 'object' && !Array.isArray(body.receipt))\n                ? body.receipt\n                : null;\n            const rawTransactionId = receipt === null || receipt === void 0 ? void 0 : receipt.transactionId;\n            return {\n                status: 'committed',\n                requestedDocuments: buildRequestedDocuments(documents),\n                observation: observationFromDirectCommit(documents.map(d => d.destinationPath), receipt === null || receipt === void 0 ? void 0 : receipt.observation),\n                // A worker predating the batch receipt reports no lane. Say so rather\n                // than inventing one — and never discard a committed write's receipt.\n                chain: ((_l = readWorkerChainTag(receipt)) !== null && _l !== void 0 ? _l : 'unknown'),\n                transactionId: typeof rawTransactionId === 'string' && rawTransactionId.length > 0 ? rawTransactionId : null,\n            };\n        }\n        else {\n            throw new Error(`Failed to set document: ${setResponse}`);\n        }\n    }\n    catch (error) {\n        throw error;\n    }\n}\n/**\n * Extract the document/collection path from a cache key. Keys are\n * `<appId:principal>|<path>:<...>` (H1 principal-scoped) — strip the principal\n * prefix (everything up to and including the first `|`, if present) before\n * splitting off the path segment.\n */\nfunction pathFromCacheKey(key) {\n    const barIdx = key.indexOf('|');\n    const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n    return afterPrincipal.split(':')[0];\n}\n// Helper to clear cache entries by prefix (across ALL principals — a write\n// invalidates every cached read of that path regardless of which user cached it)\nfunction clearCacheByPrefix(prefix) {\n    // Fixed: Use prefix instead of undefined 'path' variable\n    const normalizedPrefix = prefix.startsWith(\"/\") ? prefix.slice(1) : prefix;\n    // Clear cache entries\n    Object.keys(getCache).forEach(key => {\n        const path = pathFromCacheKey(key);\n        if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n            delete getCache[key];\n        }\n    });\n    // Cancel pending requests for this path\n    Object.keys(pendingRequests).forEach(key => {\n        // Skip bypass-specific requests which have a different format\n        const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n        const path = pathFromCacheKey(lookupKey);\n        if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n            // We don't actually abort the fetch (we could with AbortController),\n            // but we remove it from pending so new requests won't coalesce with it\n            delete pendingRequests[key];\n        }\n    });\n}\n// Utility functions for cache management\nexport function clearCache(path, opts) {\n    if (path) {\n        // Clear cache entries for this path across ALL principals. Keys are now\n        // principal-scoped (`<appId:principal>|<path>:<...>`), so we can't compute a\n        // single deterministic key — match by the path segment instead. When a\n        // prompt is supplied, only drop entries for that exact prompt.\n        const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n        const prompt = (opts === null || opts === void 0 ? void 0 : opts.prompt) || '';\n        const matches = (key) => {\n            const barIdx = key.indexOf('|');\n            const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n            const colonIdx = afterPrincipal.indexOf(':');\n            if (colonIdx < 0)\n                return false;\n            const keyPath = afterPrincipal.slice(0, colonIdx);\n            if (keyPath !== normalizedPath)\n                return false;\n            if (!(opts === null || opts === void 0 ? void 0 : opts.prompt))\n                return true;\n            // The prompt is the segment immediately after the path's first colon.\n            const rest = afterPrincipal.slice(colonIdx + 1);\n            return rest === prompt || rest.startsWith(`${prompt}:`) || rest.startsWith(prompt);\n        };\n        Object.keys(getCache).forEach(key => { if (matches(key))\n            delete getCache[key]; });\n        Object.keys(pendingRequests).forEach(key => {\n            const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n            if (matches(lookupKey))\n                delete pendingRequests[key];\n        });\n    }\n    else {\n        // Clear entire cache\n        Object.keys(getCache).forEach(key => delete getCache[key]);\n        Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n    }\n}\n/**\n * Listeners notified after an identity change wipes the read caches. Registered\n * via `onReadCacheAuthChange` so downstream modules (e.g. the subscribeQuery poll\n * manager) can re-key/drop stale in-flight work WITHOUT operations.ts importing\n * them (avoids a static cycle; keeps the coalesce test bundle lean).\n */\nconst authChangeListeners = new Set();\n/** Register a callback invoked after `clearReadCacheForAuthChange`. Returns an unregister fn. */\nexport function onReadCacheAuthChange(listener) {\n    authChangeListeners.add(listener);\n    return () => { authChangeListeners.delete(listener); };\n}\n/**\n * SECURITY (H1): Wipe ALL HTTP read caches + in-flight reads. Call this whenever\n * the logged-in identity changes (login / logout / switch identity) so a freshly\n * authenticated principal can never observe data cached for the previous one.\n * This is invoked from the WS auth-change path (reconnectWithNewAuthV2).\n */\nexport function clearReadCacheForAuthChange() {\n    Object.keys(getCache).forEach(key => delete getCache[key]);\n    Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n    authChangeListeners.forEach(fn => {\n        try {\n            fn();\n        }\n        catch ( /* a listener throwing must not abort the cache wipe */_a) { /* a listener throwing must not abort the cache wipe */ }\n    });\n}\nexport async function getFiles(path, options) {\n    try {\n        const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n        if (!normalizedPath || normalizedPath.length === 0) {\n            throw new Error(\"Invalid path provided.\");\n        }\n        const apiPath = `storage?path=${encodeURIComponent(normalizedPath)}`;\n        const response = await makeApiRequest('GET', apiPath, null, options === null || options === void 0 ? void 0 : options._overrides);\n        return response.data;\n    }\n    catch (error) {\n        throw error;\n    }\n}\n/** Pull the worker's concrete object path (`token.pathId`) out of a response body. */\nfunction readWorkerFilePath(source) {\n    if (!source || typeof source !== 'object')\n        return null;\n    for (const key of ['pathId', 'path', 'destinationPath']) {\n        const value = source[key];\n        if (typeof value === 'string' && value.trim().length > 0)\n            return value.trim();\n    }\n    return null;\n}\nfunction readFileVisibility(source) {\n    const value = (source && typeof source === 'object') ? source.visibility : undefined;\n    if (value === 'public' || value === 'private' || value === 'unknown')\n        return value;\n    // The worker did not state it, so neither do we. `unknown` never means the\n    // object is private — it means the read-rule evaluation was not reported.\n    return 'unknown';\n}\nexport async function setFile(path, file, options) {\n    var _a, _b, _c, _d;\n    // 1) Get the presigned URL from your backend\n    const requestBody = {\n        destinationPath: path,\n        operation: file ? 'upload' : 'delete',\n    };\n    // Send file size so the server can enforce upload limits before issuing a presigned URL\n    if (file) {\n        requestBody.contentLength = file.size;\n        requestBody.contentType = file.type || undefined;\n        // Declared metadata fields set atomically with the create (server validates\n        // them against the storage collection's `fields` and applies the CREATE rule).\n        if (options === null || options === void 0 ? void 0 : options.metadata) {\n            requestBody.metadata = options.metadata;\n        }\n    }\n    const response = await makeApiRequest('POST', 'storage/url', requestBody, options === null || options === void 0 ? void 0 : options._overrides);\n    const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n    if (file == null) {\n        // A deletion is acknowledged only by a non-404 response. `makeApiRequest`\n        // normalizes 404 into `{ data: null, status: 404 }` rather than throwing, so\n        // the status has to be inspected.\n        const deletePath = (_a = readWorkerFilePath(response === null || response === void 0 ? void 0 : response.data)) !== null && _a !== void 0 ? _a : normalizedPath;\n        if ((response === null || response === void 0 ? void 0 : response.status) === 404) {\n            return { path: deletePath, deleted: false, alreadyAbsent: true };\n        }\n        return { path: deletePath, deleted: true };\n    }\n    if (!((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.s3Url)) {\n        throw new Error(\"No s3Url in response\");\n    }\n    // Client-side size guard using the limit returned by the server\n    const maxFileSize = response.data.maxFileSize;\n    if (maxFileSize && file.size > maxFileSize) {\n        throw new Error(`File size ${(file.size / (1024 * 1024)).toFixed(2)} MB exceeds the maximum upload size of ${(maxFileSize / (1024 * 1024)).toFixed(0)} MB.`);\n    }\n    const presignedUrl = response.data.s3Url;\n    // Retain the CONCRETE path BEFORE the PUT. Storage generates a collection\n    // upload's id server-side, so `setFile(\"metadata\", file)` creates\n    // `metadata/<generated-id>`; if the commit succeeds and only its response is\n    // lost, this is the only identifier the object has.\n    const retainedPath = (_c = readWorkerFilePath(response.data)) !== null && _c !== void 0 ? _c : normalizedPath;\n    // 2) Upload the file directly to storage with a PUT request\n    let uploadResponse;\n    try {\n        uploadResponse = await fetch(presignedUrl, {\n            method: 'PUT',\n            headers: {\n                'Content-Type': file.type,\n            },\n            body: file\n        });\n    }\n    catch (error) {\n        // The transport itself failed, so we do not know whether the object\n        // committed. This is NOT a definite failure and NOT retry-safe.\n        const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n        return {\n            status: 'unknown',\n            path: retainedPath,\n            reason: `the upload response was lost before it could be read: ${message}`,\n            retrySafe: false,\n        };\n    }\n    // 3) A non-2xx answer is a definite, unambiguous failure — keep throwing.\n    if (!uploadResponse.ok) {\n        await uploadResponse.text().catch(() => '');\n        throw new Error(`Upload failed with status: ${uploadResponse.status}`);\n    }\n    // 4) The PUT response IS the finalize response: it carries the durable URL\n    //    and the anonymous-read verdict, inside the worker's `{ data, status }`\n    //    envelope.\n    let finalizeBody = null;\n    try {\n        const parsed = await uploadResponse.json();\n        finalizeBody = (parsed && typeof parsed === 'object' && parsed.data && typeof parsed.data === 'object')\n            ? parsed.data\n            : parsed;\n    }\n    catch (_e) {\n        // A worker predating the URL-carrying finalize response answers with\n        // something we cannot parse. The object still committed.\n        finalizeBody = null;\n    }\n    const url = (finalizeBody && typeof finalizeBody.url === 'string' && finalizeBody.url.length > 0)\n        ? finalizeBody.url\n        : null;\n    return {\n        status: 'uploaded',\n        path: (_d = readWorkerFilePath(finalizeBody)) !== null && _d !== void 0 ? _d : retainedPath,\n        url,\n        visibility: readFileVisibility(finalizeBody),\n    };\n}\nexport async function signMessage(message) {\n    const config = await getConfig();\n    if (!config.authProvider) {\n        throw new Error('Auth provider not initialized. Please call init() first.');\n    }\n    return config.authProvider.signMessage(message);\n}\nexport async function signTransaction(transaction) {\n    const config = await getConfig();\n    if (!config.authProvider) {\n        throw new Error('Auth provider not initialized. Please call init() first.');\n    }\n    return config.authProvider.signTransaction(transaction);\n}\nexport async function signAndSubmitTransaction(transaction, feePayer) {\n    const config = await getConfig();\n    if (!config.authProvider) {\n        throw new Error('Auth provider not initialized. Please call init() first.');\n    }\n    return config.authProvider.signAndSubmitTransaction(transaction, feePayer);\n}\nexport async function syncItems(paths, options) {\n    try {\n        const response = await makeApiRequest('PUT', 'items/sync', { paths }, options === null || options === void 0 ? void 0 : options._overrides);\n        return response.data;\n    }\n    catch (error) {\n        throw error;\n    }\n}\n","/** The highest Solana transaction version this SDK reads back (SIMD-0385 v1). */\nexport const SOLANA_MAX_SUPPORTED_TRANSACTION_VERSION = 1;\n/**\n * getTransaction that survives a SIMD-0385 v1 response. @solana/web3.js 1.98.x\n * validates `version` against `0 | 'legacy'` and THROWS on 1 even when the request\n * raised the ceiling, so a real `Connection` (which exposes `rpcEndpoint`) is read\n * as raw JSON-RPC instead. An injected double without an endpoint goes through its\n * own `getTransaction` with the ceiling raised. Returns the RPC `result` (null when\n * the signature is unknown); RPC and transport failures throw so callers keep\n * treating a failed lookup as inconclusive rather than as absence.\n */\nexport async function getTransactionJson(rpc, signature, commitment = 'confirmed') {\n    var _a;\n    const endpoint = typeof (rpc === null || rpc === void 0 ? void 0 : rpc.rpcEndpoint) === 'string' ? rpc.rpcEndpoint.trim() : '';\n    if (!endpoint) {\n        return rpc.getTransaction(signature, {\n            maxSupportedTransactionVersion: SOLANA_MAX_SUPPORTED_TRANSACTION_VERSION,\n            commitment,\n        });\n    }\n    const response = await fetch(endpoint, {\n        method: 'POST',\n        headers: { 'content-type': 'application/json' },\n        body: JSON.stringify({\n            jsonrpc: '2.0',\n            id: 1,\n            method: 'getTransaction',\n            params: [signature, {\n                    commitment,\n                    encoding: 'json',\n                    maxSupportedTransactionVersion: SOLANA_MAX_SUPPORTED_TRANSACTION_VERSION,\n                }],\n        }),\n    });\n    if (!response.ok)\n        throw new Error(`getTransaction http ${response.status}`);\n    const body = await response.json();\n    if (body === null || body === void 0 ? void 0 : body.error)\n        throw new Error(`getTransaction rpc error ${body.error.code}: ${body.error.message}`);\n    return (_a = body === null || body === void 0 ? void 0 : body.result) !== null && _a !== void 0 ? _a : null;\n}\n","import { getConfig } from './config';\nimport { getTransactionJson } from './solana-transaction-read';\nimport { attemptMirrorSync } from './operations';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_ATTEMPTS = 20;\nconst DEFAULT_POLL_INTERVAL_MS = 3000;\n/** Mirror read after a late confirmation. No settle delay: the tx already landed. */\nconst RECONCILE_MIRROR_SETTLE_MS = 0;\nfunction errorText(error) {\n    const message = error === null || error === void 0 ? void 0 : error.message;\n    return typeof message === 'string' && message.length > 0 ? message : String(error);\n}\nfunction isSolanaSubmitted(receipt) {\n    return receipt.status === 'submitted' && 'signedTransaction' in receipt;\n}\n/**\n * The Solana execution lane a client config REQUIRES, or `null` when the config\n * carries no constraint. Only a positive contradiction rejects a receipt — an\n * unmapped or unset `chain` is not evidence of a mismatch.\n */\nfunction requiredSolanaChain(config) {\n    switch (config.chain) {\n        case 'realtime_devnet':\n        case 'solana_devnet':\n            return 'solana_devnet';\n        case 'realtime_mainnet':\n        case 'realtime_mainnet_preview':\n        case 'solana_mainnet':\n            return 'solana_mainnet';\n        default:\n            return null;\n    }\n}\n/**\n * Bind the receipt to the app + chain it was issued for BEFORE any RPC or\n * mirror request. Writes bind to an immutable config, so a bare reconcile after\n * a global re-`init()` could otherwise poll the wrong app's endpoints entirely.\n */\nfunction assertReceiptMatchesContext(receipt, config) {\n    if (!receipt.appId || typeof receipt.appId !== 'string') {\n        throw new Error('This write receipt carries no appId and cannot be reconciled.');\n    }\n    if (receipt.appId !== config.appId) {\n        throw new Error(`This write receipt was issued for app \"${receipt.appId}\" but the bound client targets \"${config.appId}\". ` +\n            'Reconcile it through the client it came from.');\n    }\n    if (isSolanaSubmitted(receipt)) {\n        const required = requiredSolanaChain(config);\n        if (required && required !== receipt.chain) {\n            throw new Error(`This write receipt ran on \"${receipt.chain}\" but the bound client targets \"${required}\".`);\n        }\n    }\n}\nfunction stillSubmitted(receipt, reason) {\n    return Object.assign(Object.assign({}, receipt), { confirmation: Object.assign(Object.assign({}, receipt.confirmation), { reason }) });\n}\nasync function mirrorFor(receipt, options) {\n    const paths = receipt.requestedDocuments.map(entry => entry.path);\n    if (paths.length === 0)\n        return { observed: false, reason: 'the receipt carried no requested paths' };\n    const setOptions = (options === null || options === void 0 ? void 0 : options._overrides) ? { _overrides: options._overrides } : undefined;\n    return attemptMirrorSync(paths, setOptions, RECONCILE_MIRROR_SETTLE_MS);\n}\nasync function resolveSolanaRpc(config, options) {\n    var _a, _b;\n    const injected = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._solanaRpc;\n    if (injected)\n        return injected;\n    const rpcUrl = (_b = config.rpcUrl) === null || _b === void 0 ? void 0 : _b.trim();\n    if (!rpcUrl) {\n        throw new Error('Reconciling a Solana write receipt requires init({ rpcUrl }).');\n    }\n    const { Connection } = await import('@solana/web3.js');\n    return new Connection(rpcUrl, 'confirmed');\n}\n/**\n * Solana reconciliation NEVER broadcasts. It reaches `expired_not_landed` only\n * after the fence is observed expired AND history successfully proves the\n * signature is absent; a failed or inconclusive lookup stays `submitted`.\n */\nasync function reconcileSolana(receipt, config, options) {\n    var _a, _b, _c, _d;\n    const rpc = await resolveSolanaRpc(config, options);\n    let statusValue = null;\n    let contextSlot;\n    try {\n        if (typeof rpc.getSignatureStatuses !== 'function') {\n            return stillSubmitted(receipt, 'the configured Solana RPC cannot report signature statuses');\n        }\n        const statuses = await rpc.getSignatureStatuses([receipt.transactionId]);\n        statusValue = (_b = (_a = statuses === null || statuses === void 0 ? void 0 : statuses.value) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;\n        contextSlot = (_c = statuses === null || statuses === void 0 ? void 0 : statuses.context) === null || _c === void 0 ? void 0 : _c.slot;\n    }\n    catch (error) {\n        return stillSubmitted(receipt, `signature status lookup failed: ${errorText(error)}`);\n    }\n    if (statusValue) {\n        // Landed. A landed-but-failed transaction is a genuine failure, not `submitted`.\n        if (statusValue.err) {\n            throw new Error(`Transaction failed: ${JSON.stringify(statusValue.err)}`);\n        }\n        const confirmed = {\n            status: 'confirmed',\n            appId: receipt.appId,\n            requestedDocuments: receipt.requestedDocuments,\n            chain: receipt.chain,\n            transactionId: receipt.transactionId,\n            signedTransaction: receipt.signedTransaction,\n            fence: receipt.fence,\n            confirmationContextSlot: contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0,\n            mirrorSync: await mirrorFor(receipt, options),\n        };\n        return confirmed;\n    }\n    // Absent from the status window. Expiry has to be OBSERVED before absence can\n    // mean anything: before the fence expires the transaction may still land.\n    let blockHeight;\n    try {\n        blockHeight = typeof rpc.getBlockHeight === 'function' ? await rpc.getBlockHeight('confirmed') : undefined;\n    }\n    catch (error) {\n        return stillSubmitted(receipt, `block height lookup failed: ${errorText(error)}`);\n    }\n    if (typeof blockHeight !== 'number') {\n        return stillSubmitted(receipt, 'expiry could not be observed: the RPC reported no block height');\n    }\n    if (blockHeight <= receipt.fence.lastValidBlockHeight) {\n        return stillSubmitted(receipt, `not yet expired: block height ${blockHeight} is within the fence (lastValidBlockHeight ${receipt.fence.lastValidBlockHeight})`);\n    }\n    // Expired. Prove absence from history before declaring the write retry-safe.\n    let history;\n    try {\n        history = await getTransactionJson(rpc, receipt.transactionId, 'confirmed');\n    }\n    catch (error) {\n        return stillSubmitted(receipt, `history lookup failed after expiry: ${errorText(error)}`);\n    }\n    if (history) {\n        if ((_d = history === null || history === void 0 ? void 0 : history.meta) === null || _d === void 0 ? void 0 : _d.err) {\n            throw new Error(`Transaction failed: ${JSON.stringify(history.meta.err)}`);\n        }\n        const confirmed = {\n            status: 'confirmed',\n            appId: receipt.appId,\n            requestedDocuments: receipt.requestedDocuments,\n            chain: receipt.chain,\n            transactionId: receipt.transactionId,\n            signedTransaction: receipt.signedTransaction,\n            fence: receipt.fence,\n            confirmationContextSlot: typeof history.slot === 'number' ? history.slot : (contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0),\n            mirrorSync: await mirrorFor(receipt, options),\n        };\n        return confirmed;\n    }\n    return {\n        status: 'expired_not_landed',\n        appId: receipt.appId,\n        requestedDocuments: receipt.requestedDocuments,\n        chain: receipt.chain,\n        transactionId: receipt.transactionId,\n        fence: receipt.fence,\n    };\n}\n/**\n * Poll the SAME signature a `submitted` receipt carries and return the\n * resulting `SetResult`.\n *\n * - Terminal receipts (`committed`, `confirmed`, `expired_not_landed`,\n *   `signed`) are returned unchanged; nothing was left open.\n * - A `submitted` receipt with no transaction identifier (`transactionId:\n *   null`) is rejected immediately: no identifier exists to poll.\n * - A transaction that landed and FAILED throws, exactly as it would have on\n *   the original write.\n */\nexport async function reconcileSetResult(receipt, options) {\n    var _a, _b;\n    if (!receipt || typeof receipt !== 'object' || typeof receipt.status !== 'string') {\n        throw new Error('reconcileSetResult requires a write receipt returned by set/setMany.');\n    }\n    if (receipt.status !== 'submitted')\n        return receipt;\n    if (receipt.transactionId === null) {\n        throw new Error('This receipt is explicitly irreconcilable: the wallet send response was lost, so no transaction hash exists to poll. ' +\n            'Resolve it out of band — resubmitting could execute the write twice.');\n    }\n    const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n    // Validation happens BEFORE any RPC or mirror request.\n    assertReceiptMatchesContext(receipt, config);\n    if (isSolanaSubmitted(receipt)) {\n        return reconcileSolana(receipt, config, options);\n    }\n    // Anything else (e.g. a legacy serialized receipt from a retired lane) has no\n    // reconciliation transport any more; say so rather than guessing.\n    return stillSubmitted(receipt, 'this receipt shape has no reconciliation lane');\n}\n/**\n * Reconcile repeatedly until the receipt leaves `submitted` or the bound is hit.\n *\n * The bound is mandatory, because some states are permanently non-terminal by\n * design: an RPC that can never observe the signature or the expiry never\n * resolves. On exhaustion (or abort) this returns the LATEST `submitted`\n * receipt with its identifier intact rather than hanging or throwing the\n * identifier away.\n */\nexport async function waitForSetResult(receipt, options) {\n    var _a, _b, _c, _d;\n    if (receipt && typeof receipt === 'object' && receipt.status === 'submitted' && receipt.transactionId === null) {\n        // Rejected immediately rather than polled: there is nothing to poll.\n        return reconcileSetResult(receipt, options);\n    }\n    const timeoutMs = (_a = options === null || options === void 0 ? void 0 : options.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS;\n    const maxAttempts = (_b = options === null || options === void 0 ? void 0 : options.maxAttempts) !== null && _b !== void 0 ? _b : DEFAULT_MAX_ATTEMPTS;\n    const pollIntervalMs = (_c = options === null || options === void 0 ? void 0 : options.pollIntervalMs) !== null && _c !== void 0 ? _c : DEFAULT_POLL_INTERVAL_MS;\n    const startedAt = Date.now();\n    let current = receipt;\n    let attempts = 0;\n    while (attempts < maxAttempts && Date.now() - startedAt < timeoutMs) {\n        if ((_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.aborted)\n            return current;\n        attempts++;\n        current = await reconcileSetResult(current, options);\n        if (current.status !== 'submitted')\n            return current;\n        if (attempts >= maxAttempts)\n            break;\n        const remaining = timeoutMs - (Date.now() - startedAt);\n        if (remaining <= 0)\n            break;\n        const slept = await sleepUnlessAborted(Math.min(pollIntervalMs, remaining), options === null || options === void 0 ? void 0 : options.signal);\n        if (!slept)\n            return current;\n    }\n    return current;\n}\n/** Resolves `false` when the signal aborted during (or before) the sleep. */\nfunction sleepUnlessAborted(ms, signal) {\n    if (signal === null || signal === void 0 ? void 0 : signal.aborted)\n        return Promise.resolve(false);\n    if (!signal)\n        return new Promise(resolve => setTimeout(() => resolve(true), ms));\n    return new Promise(resolve => {\n        const timer = setTimeout(() => {\n            signal.removeEventListener('abort', onAbort);\n            resolve(true);\n        }, ms);\n        const onAbort = () => {\n            clearTimeout(timer);\n            resolve(false);\n        };\n        signal.addEventListener('abort', onAbort, { once: true });\n    });\n}\n","/**\n * WebSocket Subscription Module\n *\n * This module provides real-time data subscriptions using WebSocket v2 protocol\n * with multiplexed connections (one connection per client, multiple subscriptions).\n *\n * The external API remains unchanged - just use subscribe(path, options) as before.\n */\nimport { subscribeV2, closeAllSubscriptionsV2, clearCacheV2, getCachedDataV2, reconnectWithNewAuthV2, } from './subscription-v2';\n/**\n * Subscribe to real-time updates for a path.\n *\n * @param path - The path to subscribe to (e.g., 'users/123' or 'posts')\n * @param subscriptionOptions - Options including onData and onError callbacks\n * @returns A function to unsubscribe\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribe('users/123', {\n *   onData: (data) => console.log('User updated:', data),\n *   onError: (error) => console.error('Subscription error:', error),\n * });\n *\n * // Later, to unsubscribe:\n * await unsubscribe();\n * ```\n */\nexport async function subscribe(path, subscriptionOptions) {\n    // Forgive the most natural mistake: `subscribe(path, (data) => ...)`. Without\n    // this, a bare callback is taken as the options object, `.onData` is undefined,\n    // and the subscription silently never fires (no error) — it just looks broken.\n    // Coerce a function into `{ onData }` so the natural form works.\n    const opts = typeof subscriptionOptions === 'function'\n        ? { onData: subscriptionOptions }\n        : subscriptionOptions;\n    return subscribeV2(path, opts);\n}\n/**\n * Close all active subscriptions.\n * Call this when cleaning up (e.g., on logout or component unmount).\n */\nexport async function closeAllSubscriptions() {\n    return closeAllSubscriptionsV2();\n}\n/**\n * Clear the subscription cache.\n *\n * @param path - Optional path to clear. If not provided, clears all cached data.\n */\nexport function clearCache(path) {\n    clearCacheV2(path);\n}\n/**\n * Get cached data for a path without making a network request.\n *\n * @param path - The path to get cached data for\n * @param prompt - Optional prompt that was used for the subscription\n * @returns The cached data, or null if not cached or expired\n */\nexport function getCachedData(path, prompt) {\n    return getCachedDataV2(path, prompt);\n}\n/**\n * Reconnect all WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuth() {\n    return reconnectWithNewAuthV2();\n}\n","/**\n * Scoped multi-app client factory.\n *\n * `createClient()` returns an isolated, READ-ONLY client bound to one Bounded\n * app, independent of the module-global `init()` client. It exists so a single\n * frontend can hold its normal authenticated client for its own app AND a\n * read-only client for a SECOND Bounded app (e.g. a shared steward/runtime app),\n * with live subscriptions on both and zero interference between them.\n *\n * Each instance carries its OWN fully-resolved config (endpoints + appId) and\n * routes through the SAME shared transport/subscription implementation as the\n * global path - it never forks that code. Isolation comes from threading the\n * instance config (and a read-only marker) through the existing per-request /\n * per-subscription override channel, plus the websocket layer already keying\n * connections by appId.\n *\n * ## v1 scope: read-only, unauthenticated\n *\n * A scoped instance is UNAUTHENTICATED. It sends no auth, never reads or\n * refreshes the global session, and connects to its app's realtime endpoint\n * anonymously. It is therefore only useful against collections a Bounded app\n * exposes with a public read rule (`read: true`) - private/per-user reads will\n * be denied by the target app's policy, exactly as an anonymous caller would be.\n *\n * Writes and any auth-requiring surface are NOT supported on a scoped instance\n * and throw a clear error. Per-instance authentication is a planned follow-up.\n */\nimport { get, getMany, search, queryAggregate, count, aggregate, runQuery, runQueryMany, } from './operations';\nimport { subscribe } from './subscription';\nimport { DEFAULT_CLIENT_CONFIG, resolveClientConfig } from './config';\n/** Error thrown when an unsupported (write / auth-requiring) call is made on a\n *  read-only scoped client. */\nexport class ScopedClientReadOnlyError extends Error {\n    constructor(operation) {\n        super(`createClient() instances are read-only in v1: \"${operation}\" is not supported. ` +\n            `Use the global init() client for authenticated writes, or read only public ` +\n            `(read: true) collections on this scoped instance.`);\n        this.name = 'ScopedClientReadOnlyError';\n    }\n}\n/**\n * Create a read-only client scoped to a single Bounded app.\n *\n * @example\n * ```ts\n * // Global client stays the venue's own authenticated app:\n * await init({ appId: VENUE_APP, network: 'bounded-production', authMethod: 'email' });\n *\n * // A second, read-only client for the steward runtime app:\n * const steward = createClient({ appId: STEWARD_APP, network: 'bounded-production' });\n * const state = await steward.get('runtime/current');\n * const stop = await steward.subscribe('runtime/current', (d) => render(d));\n * ```\n */\nexport function createClient(config) {\n    if (!config || !config.appId) {\n        throw new Error('createClient requires an appId.');\n    }\n    // Resolve from the PRISTINE defaults (never the mutated global) so a scoped\n    // instance is fully independent of any prior init(). Same precedence as init:\n    // defaults < network preset < explicit fields.\n    const resolved = resolveClientConfig(DEFAULT_CLIENT_CONFIG, config);\n    // The override channel that carries this instance's identity through the\n    // shared transport and subscription code. `_config` retargets endpoints +\n    // appId; `_readOnly` omits auth and blocks ambient-session/global-cache reads.\n    const instanceOverrides = () => ({ _config: resolved, _readOnly: true });\n    // Merge caller-supplied opts with the instance overrides. The instance\n    // `_config`/`_readOnly` are applied LAST so app code can never override the\n    // routing/identity of a scoped call (but may still pass e.g. an AbortSignal).\n    const withOverrides = (opts) => {\n        var _a;\n        const base = (opts !== null && opts !== void 0 ? opts : {});\n        return Object.assign(Object.assign({}, base), { _overrides: Object.assign(Object.assign({}, ((_a = base._overrides) !== null && _a !== void 0 ? _a : {})), instanceOverrides()) });\n    };\n    return {\n        appId: resolved.appId,\n        getConfig: () => (Object.assign({}, resolved)),\n        get: (path, opts) => get(path, withOverrides(opts)),\n        getMany: (paths, opts) => getMany(paths, withOverrides(opts)),\n        search: (path, query, opts) => search(path, query, withOverrides(opts)),\n        queryAggregate: (path, spec, opts) => queryAggregate(path, spec, withOverrides(opts)),\n        count: (path, opts) => count(path, withOverrides(opts)),\n        aggregate: (path, operation, opts) => aggregate(path, operation, withOverrides(opts)),\n        runQuery: (absolutePath, queryName, queryArgs, opts) => runQuery(absolutePath, queryName, queryArgs, withOverrides(opts)),\n        runQueryMany: (many, opts) => runQueryMany(many, withOverrides(opts)),\n        subscribe: (path, options) => {\n            var _a;\n            const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n            // Force this instance's scoped, read-only routing onto the subscription.\n            opts._overrides = Object.assign(Object.assign({}, ((_a = opts._overrides) !== null && _a !== void 0 ? _a : {})), { _config: resolved, _readOnly: true });\n            return subscribe(path, opts);\n        },\n        set: () => { throw new ScopedClientReadOnlyError('set'); },\n        setMany: () => { throw new ScopedClientReadOnlyError('setMany'); },\n    };\n}\n","/**\n * Live named-query subscriptions (subscribeQuery) - HTTP client poller (v1).\n *\n * A standardized client-side poller for a policy's computed/named queries. Same\n * callback contract as `subscribe()` (onData/onError), but instead of a socket it\n * polls `runQuery` on an interval. It exists to replace ad-hoc app-side polling\n * with one controlled, deduped, backoff-aware poller.\n *\n * v1 is HTTP-only and requires ZERO server change: it rides the existing\n * `runQuery` microtask coalescer (operations.ts), which batches due keys into\n * <=10-per-POST chunks, surfaces per-row errors, and (via utils/api) does a\n * bounded in-request 429 retry. The websocket transport and true server-push are\n * deferred; see LIVE-QUERIES-SDK-PLAN.md section 9. The public contract here is\n * pinned so either upgrade stays transparent.\n *\n * Design notes that are load-bearing (do not \"simplify\" away):\n *  - The coalescer does NOT dedupe; the manager's refcount dedupe below is the\n *    ONLY dedupe, so it is load-bearing for billed-read correctness.\n *  - There is no durable transport backoff: `utils/api` retries twice then\n *    rejects. Steady-state backoff on a rejected poll is owned HERE.\n *  - A transport rejection (429/network/chunk) must NOT reach onError - it would\n *    blast the whole up-to-10-key chunk every interval and rebuild the exact 429\n *    noise this feature removes. Only a genuine per-row query error / policy\n *    decline reaches onError.\n */\nimport { runQuery, onReadCacheAuthChange } from './operations';\nimport { clientConfig } from './config';\nimport { getIdToken } from '../utils/utils';\n/** Default poll cadence. Sits on the hot named-query cadence oapps already runs. */\nexport const DEFAULT_QUERY_POLL_INTERVAL_MS = 5000;\n/** Hard lower clamp so an app cannot rebuild the 429 storm. */\nexport const MIN_QUERY_POLL_INTERVAL_MS = 1000;\n/** Ceiling for the manager-owned exponential backoff on a rejected poll. */\nconst QUERY_POLL_BACKOFF_CAP_MS = 60000;\n/** Max extra delay sprinkled on a visibility-resume refresh so N keys don't burst-sync. */\nconst RESUME_JITTER_MS = 250;\n/** Retry cadence for a re-key that could not (re-)attach - so a live query is never\n * silently orphaned by a transient auth failure during an identity change. */\nconst REATTACH_RETRY_MS = 3000;\n/**\n * Server sentinel for a query that cannot be polled (e.g. onchain/EVM live-call).\n * Absorbed internally: keep polling, never surface. Pin it to the design-of-record\n * `unsupported` frame.\n */\nconst UNSUPPORTED_QUERY_SENTINEL = 'unsupported';\nconst registry = new Map();\n/**\n * Every live subscriber, INCLUDING ones momentarily detached from the registry\n * mid-re-key (see reattach). Teardown walks this - not just the registry - so a\n * pending re-key retry can never revive polling after closeAllQuerySubscriptions.\n */\nconst liveSubscribers = new Set();\n/** Poll ticks pause while the document is hidden (env-guarded / test-injectable). */\nlet hidden = false;\n// ---------------------------------------------------------------------------\n// Canonicalization (shared with a future server group key).\n// ---------------------------------------------------------------------------\nfunction sortDeep(value) {\n    if (Array.isArray(value))\n        return value.map(sortDeep);\n    if (value && typeof value === 'object') {\n        const out = {};\n        for (const k of Object.keys(value).sort())\n            out[k] = sortDeep(value[k]);\n        return out;\n    }\n    return value;\n}\n/**\n * Key-sorted deep copy that mirrors the JSON wire form byte-for-byte. Unlike\n * `sortDeep`, it assigns into NULL-PROTOTYPE objects so an own `__proto__` key is\n * kept as an ordinary JSON property instead of being swallowed by\n * `Object.prototype`'s `__proto__` setter (which would mutate the prototype and\n * drop the property, diverging from what `JSON.stringify` actually emits).\n */\nfunction sortDeepWire(value) {\n    if (Array.isArray(value))\n        return value.map(sortDeepWire);\n    if (value && typeof value === 'object') {\n        const out = Object.create(null);\n        for (const k of Object.keys(value).sort())\n            out[k] = sortDeepWire(value[k]);\n        return out;\n    }\n    return value;\n}\n/**\n * Deterministic key-sorted serialization of query args, canonicalizing the EXACT\n * JSON wire representation the request serializer sends. Args are first projected\n * through `JSON.parse(JSON.stringify(...))` so `toJSON` runs (a `Date` becomes its\n * ISO string, not `{}`) and functions/`undefined` are dropped exactly as the wire\n * does, then key-sorted with null-prototype objects so an own `__proto__` key\n * round-trips as a property. This makes the dedupe key match what the server\n * actually receives, so two subscriptions can share a poller only when their wire\n * inputs are identical. Cyclic structures and other values the wire cannot\n * serialize (e.g. `BigInt`) are rejected by `JSON.stringify` here, exactly as they\n * would be on the wire.\n */\nexport function canonicalizeArgs(args) {\n    var _a;\n    const wire = JSON.parse((_a = JSON.stringify(args !== null && args !== void 0 ? args : null)) !== null && _a !== void 0 ? _a : 'null');\n    return JSON.stringify(sortDeepWire(wire));\n}\n/**\n * Deterministic key-sorted serialization of a query RESULT for change detection.\n * Robust to shuffled object key order and the JSON-wire shapes the endpoint\n * yields (string u64, ISO-date string). BigInt/Date OBJECTS never cross the HTTP\n * boundary, so they are intentionally not handled here.\n */\nexport function canonicalizeResult(result) {\n    return JSON.stringify(sortDeep(result === undefined ? null : result));\n}\n// ---------------------------------------------------------------------------\n// Identity (two-part: compact bucket + exact bearer, mirroring subscribe()'s H1).\n// ---------------------------------------------------------------------------\nfunction hashToken(value) {\n    let h = 5381;\n    for (let i = 0; i < value.length; i++)\n        h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n    return h.toString(36);\n}\nasync function currentIdentity(appId) {\n    const token = await getIdToken(clientConfig.isServer);\n    return token ? { bucket: `${appId}:t${hashToken(token)}`, token } : { bucket: `${appId}:anon`, token: null };\n}\nfunction makeKey(appId, path, queryName, args, identity) {\n    var _a;\n    return [appId, path, queryName, canonicalizeArgs(args), identity.bucket, (_a = identity.token) !== null && _a !== void 0 ? _a : ''].join('\\u0000');\n}\n// ---------------------------------------------------------------------------\n// Error classification.\n// ---------------------------------------------------------------------------\n/** A genuine query-level error (surfaced to onError), as opposed to transport. */\nfunction isQueryLevelError(error) {\n    return (error === null || error === void 0 ? void 0 : error.isQueryError) === true || (error === null || error === void 0 ? void 0 : error.isBoundedDecline) === true || (error === null || error === void 0 ? void 0 : error.decline) != null;\n}\n/**\n * A RECOGNIZED transient transport failure that a retry might clear (HTTP 408/429/5xx, a\n * network/abort error). These back off SILENTLY - surfacing them per-poll would rebuild the\n * 429 noise. Anything else (a bad path 404, a permission/config 401/403, a malformed request\n * 400 - things a retry won't fix) is NOT transient, so it gets surfaced once to onError\n * instead of a silently-dead subscription.\n */\nfunction isTransientTransportError(error) {\n    if (error == null)\n        return true; // unknown - be conservative and keep retrying\n    // #060: classify by the actual status, not merely by \"has a status\". Almost every HTTP\n    // failure carries a status, including the TERMINAL ones (400/401/403/404); the old\n    // `typeof status === 'number'` check lumped them all into \"transient\" and retried them\n    // forever with no onError - the exact silently-dead subscription this is meant to avoid.\n    const status = typeof error.status === 'number' ? error.status\n        : typeof error.statusCode === 'number' ? error.statusCode\n            : undefined;\n    if (status !== undefined) {\n        return status === 408 || status === 429 || status >= 500;\n    }\n    const code = error.code;\n    if (code === 'ECONNABORTED' || code === 'ERR_NETWORK' || code === 'ETIMEDOUT' || code === 'ERR_CANCELED')\n        return true;\n    if (error.name === 'AbortError' || error.name === 'CanceledError')\n        return true;\n    if (error.request && !error.response)\n        return true; // request sent, no response - network\n    return false;\n}\nfunction enrichError(error, phase, willRetry) {\n    var _a;\n    const err = error instanceof Error ? error : new Error(String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));\n    try {\n        err.phase = phase;\n        err.willRetry = willRetry;\n    }\n    catch (_b) {\n        /* frozen error object - deliver as-is */\n    }\n    return err;\n}\n// ---------------------------------------------------------------------------\n// Interval / scheduling.\n// ---------------------------------------------------------------------------\nfunction clampInterval(value) {\n    const n = typeof value === 'number' && isFinite(value) ? value : DEFAULT_QUERY_POLL_INTERVAL_MS;\n    return Math.max(MIN_QUERY_POLL_INTERVAL_MS, n);\n}\nfunction recomputeInterval(entry) {\n    let min = Infinity;\n    for (const s of entry.subscribers)\n        if (s.intervalMs < min)\n            min = s.intervalMs;\n    const next = isFinite(min) ? min : DEFAULT_QUERY_POLL_INTERVAL_MS;\n    const changed = next !== entry.effectiveInterval;\n    entry.effectiveInterval = next;\n    // Realign a pending (not in-flight) timer to the new cadence so a newly-joined\n    // faster subscriber does not wait out a slower subscriber's interval (and a\n    // departed fast subscriber relaxes the survivors back to their own cadence).\n    // But NEVER while backing off - realigning to the (shorter) steady cadence would\n    // discard the backoff and re-hit a still-failing transport (the 429 storm).\n    if (changed && entry.timer && !entry.inFlight && entry.consecutiveFailures === 0) {\n        scheduleNext(entry, entry.effectiveInterval);\n    }\n}\nfunction clearTimer(entry) {\n    if (entry.timer) {\n        clearTimeout(entry.timer);\n        entry.timer = null;\n    }\n}\nfunction backoffDelay(entry) {\n    const base = Math.min(QUERY_POLL_BACKOFF_CAP_MS, entry.effectiveInterval * 2 ** entry.consecutiveFailures);\n    // Full jitter over the capped exponential, floored at the base interval so a\n    // backed-off key never polls FASTER than its steady cadence.\n    return entry.effectiveInterval + Math.floor(Math.random() * Math.max(0, base - entry.effectiveInterval));\n}\nfunction scheduleNext(entry, delayMs) {\n    clearTimer(entry);\n    if (entry.subscribers.size === 0)\n        return;\n    if (hidden)\n        return; // paused; resume reschedules\n    entry.timer = setTimeout(() => {\n        entry.timer = null;\n        void pollEntry(entry);\n    }, delayMs);\n}\n// ---------------------------------------------------------------------------\n// Polling.\n// ---------------------------------------------------------------------------\nfunction pollEntry(entry) {\n    if (entry.inFlight)\n        return Promise.resolve(); // single-flight\n    if (entry.subscribers.size === 0)\n        return Promise.resolve();\n    entry.inFlight = true;\n    const gen = entry.generation;\n    return runQuery(entry.path, entry.queryName, entry.args).then((value) => onPollResult(entry, gen, value, undefined), (error) => onPollResult(entry, gen, undefined, error));\n}\n// Staleness is caught by the per-entry generation (bumped on teardown/re-key) and\n// the registry identity check (the entry was removed/replaced) - so an old\n// principal's late result can never reach a re-keyed subscriber. No global epoch\n// is needed, which is why a plain reconnect (identity unchanged) is a no-op.\nfunction onPollResult(entry, gen, value, error) {\n    var _a;\n    entry.inFlight = false;\n    const stale = gen !== entry.generation || registry.get(entry.key) !== entry;\n    if (error !== undefined) {\n        if (isQueryLevelError(error)) {\n            // Query executed but this row errored (or was declined): transport is\n            // healthy, so keep the steady cadence and reset backoff.\n            entry.consecutiveFailures = 0;\n            if (!stale) {\n                if (!((error === null || error === void 0 ? void 0 : error.isQueryError) === true && (error === null || error === void 0 ? void 0 : error.message) === UNSUPPORTED_QUERY_SENTINEL)) {\n                    const phase = entry.hasValue ? 'refresh' : 'initial';\n                    // De-dupe: a permanently-broken query must not toast onError every\n                    // interval - fire only when the error (phase + message) changes.\n                    const sig = `${phase}\\x00${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n                    if (entry.lastErrorSig !== sig) {\n                        entry.lastErrorSig = sig;\n                        const enriched = enrichError(error, phase, true);\n                        entry.lastError = enriched; // remembered so a late joiner learns it's broken (F6)\n                        for (const s of entry.subscribers)\n                            safeCall(s.onError, enriched);\n                    }\n                }\n                scheduleNext(entry, entry.effectiveInterval);\n            }\n            return;\n        }\n        // Transport-level rejection: back off. A RECOGNIZED transient (429/5xx/network/abort)\n        // stays SILENT (surfacing it per-poll would rebuild the 429 noise); an UNRECOGNIZED\n        // rejection (a bad path, a malformed response - things a retry won't fix) is surfaced\n        // ONCE so the subscription is never silently dead. Both keep backing off in case it\n        // was misclassified / recovers.\n        entry.consecutiveFailures += 1;\n        if (!stale) {\n            if (!isTransientTransportError(error)) {\n                fireEntryError(entry, error, entry.hasValue ? 'refresh' : 'initial', true);\n            }\n            scheduleNext(entry, backoffDelay(entry));\n        }\n        return;\n    }\n    entry.consecutiveFailures = 0;\n    if (!stale) {\n        entry.lastErrorSig = null; // a good result clears the error-dedup latch...\n        entry.lastError = undefined; // ...and the remembered error (joiners no longer replay it)\n        deliver(entry, value);\n        scheduleNext(entry, entry.effectiveInterval);\n    }\n}\n/**\n * Fire onError to all current subscribers, de-duped (a persistently-broken query must not\n * toast every interval) and REMEMBER the error so a late joiner with no value yet can learn\n * the query is broken instead of spinning forever (F6).\n */\nfunction fireEntryError(entry, error, phase, willRetry) {\n    var _a;\n    const sig = `${phase} ${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n    if (entry.lastErrorSig === sig)\n        return;\n    entry.lastErrorSig = sig;\n    const enriched = enrichError(error, phase, willRetry);\n    entry.lastError = enriched;\n    for (const s of entry.subscribers)\n        safeCall(s.onError, enriched);\n}\nfunction deliver(entry, value) {\n    const canonical = canonicalizeResult(value);\n    if (entry.hasValue && entry.lastCanonical === canonical)\n        return; // no change\n    entry.hasValue = true;\n    entry.lastValue = value;\n    entry.lastCanonical = canonical;\n    for (const s of entry.subscribers)\n        safeCall(s.onData, value);\n}\nfunction safeCall(fn, arg) {\n    if (!fn)\n        return;\n    try {\n        fn(arg);\n    }\n    catch (_a) {\n        /* an app callback throwing must not break the fan-out loop */\n    }\n}\n// ---------------------------------------------------------------------------\n// Attach / detach.\n// ---------------------------------------------------------------------------\nfunction createEntry(key, sub, identity) {\n    return {\n        key,\n        appId: sub.appId,\n        path: sub.path,\n        queryName: sub.queryName,\n        args: sub.args,\n        identity,\n        subscribers: new Set(),\n        generation: 0,\n        lastErrorSig: null,\n        lastError: undefined,\n        effectiveInterval: sub.intervalMs,\n        timer: null,\n        inFlight: false,\n        consecutiveFailures: 0,\n        hasValue: false,\n        lastValue: undefined,\n        lastCanonical: '',\n        readyPromise: Promise.resolve(),\n    };\n}\n/** Register (or re-register, on identity change) a subscriber under its current identity. */\nasync function attach(sub) {\n    const identity = await currentIdentity(sub.appId);\n    // The sub may have been unsubscribed / torn down WHILE we awaited identity. The\n    // registry+generation staleness guards can't catch this because the entry would be\n    // created fresh inside the race, so re-check here before touching the registry.\n    if (sub.detached)\n        return;\n    const key = makeKey(sub.appId, sub.path, sub.queryName, sub.args, identity);\n    let entry = registry.get(key);\n    let created = false;\n    if (!entry) {\n        entry = createEntry(key, sub, identity);\n        registry.set(key, entry);\n        created = true;\n    }\n    entry.subscribers.add(sub);\n    sub.entry = entry;\n    recomputeInterval(entry);\n    if (created) {\n        // Eager initial fetch: do NOT wait a tick. The returned promise resolves\n        // after the first fetch settles; an initial failure surfaces via onError\n        // (phase 'initial') and still resolves - never leaves the sub in limbo.\n        // While hidden, do NOT poll - stay registered so visibility-resume schedules\n        // it (covers fresh-subscribe, reconcile re-key, and reattach-retry uniformly).\n        if (hidden) {\n            entry.readyPromise = Promise.resolve();\n            return;\n        }\n        entry.readyPromise = pollEntry(entry);\n        await entry.readyPromise;\n        return;\n    }\n    if (entry.hasValue) {\n        // Joiner of an established key gets the last good value immediately.\n        safeCall(sub.onData, entry.lastValue);\n        return;\n    }\n    if (entry.lastError) {\n        // Joiner of a key that has NO value yet but is in a latched error state: replay the\n        // error so a late-mounting component learns the query is broken instead of spinning\n        // forever with neither data nor error (F6).\n        safeCall(sub.onError, entry.lastError);\n    }\n    // Joined during the first in-flight fetch: piggyback it (deliver fans out to us).\n    await entry.readyPromise;\n}\nfunction detach(sub) {\n    const entry = sub.entry;\n    if (!entry || !entry.subscribers.has(sub))\n        return; // idempotent\n    entry.subscribers.delete(sub);\n    sub.entry = null;\n    if (entry.subscribers.size === 0) {\n        entry.generation += 1; // drop any in-flight result\n        clearTimer(entry);\n        if (registry.get(entry.key) === entry)\n            registry.delete(entry.key);\n    }\n    else {\n        recomputeInterval(entry);\n    }\n}\n// ---------------------------------------------------------------------------\n// Public API.\n// ---------------------------------------------------------------------------\n/**\n * Subscribe to the live value of a named (computed) query.\n *\n * @param path - The document path the query is declared on (e.g. 'market/mytoken').\n * @param queryName - The named query to run (e.g. 'tokensForOneSol').\n * @param args - Query arguments (canonicalized; drives the dedupe key).\n * @param options - onData/onError callbacks and optional intervalMs; a bare\n *   function is coerced to `{ onData }` (mirrors subscribe()).\n * @returns An async unsubscribe function.\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribeQuery('market/mytoken', 'tokensForOneSol', {}, {\n *   onData: (price) => setPrice(price),\n *   onError: (err) => { if (err.phase === 'initial') showSpinnerError(); },\n * });\n * await unsubscribe();\n * ```\n */\nexport async function subscribeQuery(path, queryName, args, options) {\n    const opts = typeof options === 'function' ? { onData: options } : (options !== null && options !== void 0 ? options : {});\n    const sub = {\n        onData: opts.onData,\n        onError: opts.onError,\n        intervalMs: clampInterval(opts.intervalMs),\n        appId: clientConfig.appId, // v1 single-app: see QuerySubscriptionOptions\n        path,\n        queryName,\n        args,\n        entry: null,\n        detached: false,\n        reattachTimer: null,\n    };\n    liveSubscribers.add(sub);\n    try {\n        await attach(sub);\n    }\n    catch (error) {\n        // Initial identity resolution threw (auth flux) - do not leak the sub into\n        // liveSubscribers (it holds the app's callbacks). The caller gets the rejection\n        // and no unsubscribe handle, so retire it here. (reattach tolerates this on the\n        // re-key path; the initial path must too.)\n        stopSubscriber(sub);\n        throw error;\n    }\n    return async () => {\n        stopSubscriber(sub); // mark detached + cancel any pending re-key retry\n        detach(sub);\n    };\n}\n/** Permanently retire a subscriber: no future re-key retry can revive it. */\nfunction stopSubscriber(sub) {\n    sub.detached = true;\n    if (sub.reattachTimer) {\n        clearTimeout(sub.reattachTimer);\n        sub.reattachTimer = null;\n    }\n    liveSubscribers.delete(sub);\n}\n/**\n * Wired to the SDK's auth-change chokepoint (operations.clearReadCacheForAuthChange,\n * driven by reconnectWithNewAuth). That chokepoint fires on ANY reconnect - including\n * a transient browser `online` nudge - not only on a real identity change, so this\n * MUST be idempotent when the principal is unchanged: it re-resolves identity per\n * key and re-keys ONLY the entries whose principal actually changed, preserving the\n * timer and backoff of every unchanged entry (otherwise a flaky connection would\n * rebuild the exact 429 re-poll storm this feature removes).\n */\nexport function notifyQueryAuthChanged() {\n    void reconcileIdentity();\n}\nasync function reconcileIdentity() {\n    var _a;\n    const resolvedByApp = new Map();\n    for (const entry of [...registry.values()]) {\n        // The entry may have been torn down while we awaited a prior identity.\n        if (registry.get(entry.key) !== entry || entry.subscribers.size === 0)\n            continue;\n        let current = (_a = resolvedByApp.get(entry.appId)) !== null && _a !== void 0 ? _a : null;\n        if (!current) {\n            try {\n                current = await currentIdentity(entry.appId);\n                resolvedByApp.set(entry.appId, current);\n            }\n            catch (_b) {\n                // Could not resolve the current identity (e.g. getIdToken threw during\n                // an auth-state flux). Treat identity as UNKNOWN and re-key\n                // conservatively below - reattach() retries until it resolves, so we\n                // neither leak the previous principal's data nor freeze the sub.\n                current = null;\n            }\n        }\n        if (registry.get(entry.key) !== entry)\n            continue; // re-check across the await\n        if (current && current.bucket === entry.identity.bucket && current.token === entry.identity.token) {\n            continue; // identity unchanged - keep the entry, its timer, and its backoff\n        }\n        // Identity changed (or is momentarily unresolvable): drop the entry (its in-flight\n        // result is caught by the generation + registry staleness checks) and re-key its\n        // subscribers under the new principal. reattach() owns the eager fetch AND a retry,\n        // so a transient failure here can never silently orphan a live subscription.\n        const subs = [...entry.subscribers].filter((s) => s.entry === entry);\n        entry.generation += 1;\n        clearTimer(entry);\n        // Only delete if THIS entry still owns the key - a replacement entry may have taken\n        // it over while we awaited identity (line 499 guards the same window; mirror the\n        // check at the delete site so it stays correct if code is inserted between them).\n        if (registry.get(entry.key) === entry)\n            registry.delete(entry.key);\n        for (const s of subs) {\n            s.entry = null;\n            reattach(s);\n        }\n    }\n}\n/**\n * Re-register a re-keyed subscriber under its current identity, retrying on failure.\n * A re-keyed subscriber has already been removed from the registry, so if attach()\n * fails there is no other path that would ever bring it back - reattach() IS that\n * path. It stops only when the subscriber re-attaches or the caller unsubscribes.\n */\nfunction reattach(sub) {\n    sub.reattachTimer = null; // this run consumes any scheduled retry\n    if (sub.detached)\n        return;\n    attach(sub).then(() => {\n        // The caller may have unsubscribed (or the manager been torn down) while this\n        // attach was in flight; if so, tear the freshly-revived entry back down instead\n        // of leaving a zombie poll.\n        if (sub.detached)\n            detach(sub);\n    }, () => {\n        if (sub.detached)\n            return;\n        sub.reattachTimer = setTimeout(() => reattach(sub), REATTACH_RETRY_MS);\n    });\n}\n/** Tear down every query subscription: cancel timers, clear the registry. */\nexport function closeAllQuerySubscriptions() {\n    // Retire EVERY live subscriber first (including any detached mid-re-key and waiting\n    // on a retry) so a pending reattach can never revive polling after teardown.\n    for (const sub of [...liveSubscribers])\n        stopSubscriber(sub);\n    liveSubscribers.clear();\n    for (const entry of registry.values()) {\n        entry.generation += 1;\n        clearTimer(entry);\n        entry.subscribers.clear();\n    }\n    registry.clear();\n}\n// ---------------------------------------------------------------------------\n// Visibility (pause polling while hidden; single realigned refresh on resume).\n// ---------------------------------------------------------------------------\nfunction setHidden(next) {\n    if (next === hidden)\n        return;\n    hidden = next;\n    if (hidden) {\n        for (const entry of registry.values())\n            clearTimer(entry);\n        return;\n    }\n    // Resume: one refresh per key at a small jitter so N keys don't burst-sync;\n    // single-flight collapses it with any still-outstanding poll, and the recurring\n    // tick is (re)scheduled by that poll's completion - so exactly one POST resumes.\n    // A key that was BACKING OFF resumes on its remaining backoff, not the jitter, so a\n    // hide/resume can't be used to bypass 429 throttling.\n    for (const entry of registry.values()) {\n        const delay = entry.consecutiveFailures > 0\n            ? backoffDelay(entry)\n            : Math.floor(Math.random() * RESUME_JITTER_MS);\n        scheduleNext(entry, delay);\n    }\n}\nif (typeof document !== 'undefined' && typeof document.addEventListener === 'function') {\n    hidden = !!document.hidden;\n    document.addEventListener('visibilitychange', () => {\n        setHidden(!!document.hidden);\n    });\n}\n// Auto-wire the identity-change signal to the SDK's existing chokepoint.\nonReadCacheAuthChange(notifyQueryAuthChanged);\n// ---------------------------------------------------------------------------\n// Test-only hooks (never part of the public surface).\n// ---------------------------------------------------------------------------\n/** @internal Reset all manager state between test scenarios. */\nexport function __resetForTest() {\n    closeAllQuerySubscriptions();\n    hidden = false;\n}\n/** @internal Force an out-of-band tick on a key (single-flight assertions). Returns whether a matching entry was found. */\nexport function __pollNowForTest(appId, path, queryName, args, identity) {\n    const entry = registry.get(makeKey(appId, path, queryName, args, identity));\n    if (!entry)\n        return false;\n    void pollEntry(entry);\n    return true;\n}\n/** @internal Drive visibility without a DOM. */\nexport function __setVisibilityForTest(nextHidden) {\n    setHidden(nextHidden);\n}\n/** @internal Snapshot registry state for assertions. */\nexport function __inspectForTest() {\n    return { keys: [...registry.keys()], hidden, liveSubscribers: liveSubscribers.size };\n}\n","// ---------------------------------------------------------------------------\n// field-values.ts -- Server-resolved field-value operations for set()/setMany().\n//\n// A field in a write payload may be a plain value OR an \"operation object\" that\n// the server resolves atomically when the write commits:\n//\n//   set(\"counters/likes\", { n: increment(1) })          // atomic server-side +1\n//   set(\"posts/p1\", { createdAt: serverTimestamp() })   // server unix-seconds clock\n//\n// The Durable Object serializes writes per room, so concurrent increments never\n// lose updates (verified: 20 concurrent +1 -> exactly 20). These helpers just\n// construct the operation objects the worker's resolveOperationFields understands\n// (and which the optimistic store mirrors locally), so prefer them over writing\n// `{ operation: \"increment\", value: 1 }` by hand.\n// ---------------------------------------------------------------------------\n/**\n * Atomically add `value` to a numeric field when the write commits, server-side.\n * Use a negative `value` to decrement. The field starts from 0 if the document\n * (or field) does not exist yet. Concurrent increments are race-free.\n *\n *   await set(\"counters/likes\", { n: increment(1) });\n *   await set(\"scores/p1\", { points: increment(-5) });\n */\nexport function increment(value) {\n    return { operation: 'increment', value };\n}\n/**\n * Stamp a field with the server's clock (Unix seconds) when the write commits —\n * the trustworthy \"when did this happen\" you can't get from a client clock.\n *\n *   await set(\"posts/p1\", { createdAt: serverTimestamp() });\n */\nexport function serverTimestamp() {\n    return { operation: 'time', value: 'now' };\n}\n","/**\n * Time units in Bounded — read this once and never get a 1000× timestamp bug.\n *\n * **Bounded's policy/proof layer is Unix SECONDS.** `@time.now` in a rule,\n * `rollingSum` `windowSeconds`, `scheduledAt`, and any timestamp *field your\n * policy compares against `@time.now`* are all **seconds**. (This is also what\n * the chain uses — Solana's on-chain clock is `unix_timestamp` in seconds — so a\n * single seconds unit works for both onchain and offchain rules.)\n *\n * **JavaScript is MILLISECONDS.** `Date.now()`, `new Date().getTime()`, and the\n * auto-stamped system fields `_createdAt` / `_updatedAt` are all **ms**.\n *\n * Comparing across the two (e.g. `@time.now - myField` where `myField` was set\n * from `Date.now()`) is 1000× off, so a freshness / TTL check silently treats\n * every row as ancient (or far-future) and drops it — which reads as \"realtime\n * isn't delivering\" when the data is actually fine.\n *\n * **The rules:**\n * - To **write** a timestamp a policy will read, prefer **`serverTimestamp()`**\n *   (from this package) — the *server* stamps it in seconds, so it matches\n *   `@time.now` AND can't be forged by the client (use it for TTLs, rate windows,\n *   anti-cheat). Use `now()` only when you need the value in client code before\n *   the write.\n * - To **compare** timestamps in client/render code, use `now()` (seconds), not\n *   `Date.now()` (ms), and `toSeconds()` to convert the ms system fields\n *   (`_createdAt`/`_updatedAt`) or any `Date.now()` value first.\n */\n/**\n * Current time as a **Unix timestamp in seconds** — the unit Bounded policy rules\n * use (`@time.now`). Use this (not `Date.now()`) when you need a timestamp in\n * client code (e.g. a freshness check). For a value you *store* and a policy\n * reads, prefer the server-authoritative {@link serverTimestamp} instead.\n *\n * ```ts\n * // stale if >15s old — seconds vs seconds ✓\n * if (now() - doc.lastSeenSeconds > 15) renderStale();\n * ```\n */\nexport function now() {\n    return Math.floor(Date.now() / 1000);\n}\n/**\n * Convert a JavaScript millisecond timestamp to Bounded's **seconds**. Accepts a\n * `Date`, or an ms number such as `Date.now()` or a doc's `_createdAt` /\n * `_updatedAt` system field.\n *\n * ```ts\n * // doc is >15s old (compare the ms system field in seconds):\n * if (now() - toSeconds(doc._updatedAt) > 15) renderStale();\n * ```\n */\nexport function toSeconds(msOrDate) {\n    const ms = msOrDate instanceof Date ? msOrDate.getTime() : msOrDate;\n    return Math.floor(ms / 1000);\n}\n/**\n * Convert a Bounded **seconds** timestamp back to JavaScript **milliseconds** —\n * e.g. to build a `Date` or do client-side date math/formatting.\n *\n * ```ts\n * new Date(toMillis(doc.createdAtSeconds)).toLocaleString();\n * ```\n */\nexport function toMillis(seconds) {\n    return seconds * 1000;\n}\n","/** SIWS message creation is async already, so its onchain module can be lazy. */\nexport async function genSolanaMessage(address, nonce) {\n    const implementation = await import(\"./solana-message\");\n    return implementation.genSolanaMessage(address, nonce);\n}\n","import { getConfig } from \"../../client/config\";\n// solana-sign-in-message.ts - the Sign In With Solana (SIWS) text the BROWSER lane signs.\n//\n// The legacy genSolanaMessage text stamps `Domain: server` / `Origin: server`, so a\n// signature over it proves who owns the wallet and nothing about which page asked. The\n// issuer used to compensate with the request's Origin header, which any non-browser client\n// can forge (SEC-01): an attacker's backend relayed a signature phished on a fake page with\n// `Origin: https://auth.bounded.sh` and minted the victim's session. The standard SIWS text\n// carries the requesting page's host in its first line. Bounded leaves that host unset, so a\n// wallet implementing the Wallet Standard `solana:signIn` feature fills it from the page that\n// asked (spec-following wallets bind a page-supplied one to that page too), and the issuer\n// refuses any other host for the request's Origin, so a fake page cannot obtain a signature\n// that mints for another site. The issuer now\n// requires this format on every request that carries an Origin header and checks the signed\n// domain against that header; the legacy text stays for the origin-less lane (CLI keypairs,\n// the server SDK, React Native, realtime agents).\n//\n// The layout is the SIWS ABNF exactly as @solana/wallet-standard-util 1.1.3 emits it\n// (lib/esm/signIn.js createSignInMessageText, lines 116-175): the domain line, the address,\n// a blank line, the statement, a blank line, then the present fields in the fixed order\n// URI, Version, Chain ID, Nonce, Issued At, Expiration Time, Not Before, Request ID,\n// Resources. A wallet rendering our sign-in request and a guest device key rendering it here\n// therefore sign byte-identical text for the same fields, and the issuer parses one grammar.\nexport const SOLANA_SIGN_IN_STATEMENT = \"Sign in to this Bounded app with your Solana wallet.\";\nexport const SOLANA_SIGN_IN_VERSION = \"1\";\nexport const SOLANA_SIGN_IN_VALIDITY_MS = 5 * 60 * 1000;\nexport function createSolanaSignInRequest(appId, nonce, now = Date.now()) {\n    return {\n        statement: SOLANA_SIGN_IN_STATEMENT,\n        version: SOLANA_SIGN_IN_VERSION,\n        nonce,\n        issuedAt: new Date(now).toISOString(),\n        expirationTime: new Date(now + SOLANA_SIGN_IN_VALIDITY_MS).toISOString(),\n        requestId: appId,\n    };\n}\n/**\n * The sign-in request for the app the SDK is configured for. Reads the SAME global config\n * appId as genAuthNonce and createSessionWithSignature, so the signed app id equals the app\n * the session is minted for; a snapshotted appIdOverride binds a wallet client created\n * against another app (the same contract genSolanaMessage keeps).\n */\nexport async function genSolanaSignInRequest(nonce, appIdOverride) {\n    const appId = appIdOverride !== null && appIdOverride !== void 0 ? appIdOverride : (await getConfig()).appId;\n    return createSolanaSignInRequest(appId, nonce);\n}\nexport function createSolanaSignInMessageText(fields) {\n    return `${fields.domain} wants you to sign in with your Solana account:\\n${fields.address}\\n\\n` +\n        `${fields.statement}\\n\\n` +\n        `Version: ${fields.version}\\n` +\n        `Nonce: ${fields.nonce}\\n` +\n        `Issued At: ${fields.issuedAt}\\n` +\n        `Expiration Time: ${fields.expirationTime}\\n` +\n        `Request ID: ${fields.requestId}`;\n}\n/**\n * The full sign-in text for a signer that is not a wallet (a browser guest device key),\n * which therefore stamps the page host itself.\n */\nexport async function genSolanaSignInMessage(address, nonce, domain, appIdOverride) {\n    return createSolanaSignInMessageText(Object.assign(Object.assign({}, (await genSolanaSignInRequest(nonce, appIdOverride))), { domain, address }));\n}\n/**\n * The host a browser page signs in as: `location.host`, the hostname plus any non-default\n * port, which is exactly what the issuer compares the Origin header's host against. Null\n * off-browser (Node, React Native), where the caller stays on the origin-less legacy lane.\n */\nexport function browserSignInDomain() {\n    var _a;\n    if (typeof window === \"undefined\")\n        return null;\n    const host = (_a = window.location) === null || _a === void 0 ? void 0 : _a.host;\n    return typeof host === \"string\" && host ? host : null;\n}\n","// ---------------------------------------------------------------------------\n// functions.ts -- Bounded Functions client (the imperative escape hatch).\n//\n// `bounded.functions.invoke(name, args, opts?)` POSTs to the dispatcher's\n// /invoke endpoint, attaching the caller's session token AUTOMATICALLY (the\n// exact same token the SDK uses for data reads/writes). Works client + server.\n// The dispatcher verifies the token, evaluates the function's `auth` policy\n// rule, and dispatches to the function — returning its JSON, or throwing on\n// 403 / error.\n// ---------------------------------------------------------------------------\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { getConfig } from './config';\nimport { createAuthHeader } from '../utils/utils';\n/** Prod functions dispatcher; overridable via init({ functionsUrl }) or network preset. */\nconst DEFAULT_FUNCTIONS_URL = 'https://functions.bounded.sh';\nexport class FunctionInvokeError extends Error {\n    constructor(message, statusCode, details) {\n        super(message);\n        this.statusCode = statusCode;\n        this.details = details;\n        this.name = 'FunctionInvokeError';\n    }\n}\nfunction stripAuthHeaders(headers) {\n    if (!headers)\n        return undefined;\n    const { Authorization, authorization } = headers, rest = __rest(headers, [\"Authorization\", \"authorization\"]);\n    return Object.keys(rest).length > 0 ? rest : undefined;\n}\n/**\n * Invoke a deployed Bounded Function by name. Returns the function's JSON.\n *\n *   const res = await bounded.functions.invoke('syncStripe', { customerId });\n *\n * Throws FunctionInvokeError on 401 (not logged in / bad token), 403 (the\n * function's auth policy rule denied this caller), 404 (unknown function),\n * 503 (Workers for Platforms not configured), or any non-2xx / transport error.\n */\nexport async function invoke(name, args = {}, opts = {}) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    if (!name || typeof name !== 'string') {\n        throw new FunctionInvokeError('A function name is required');\n    }\n    // A server WalletClient passes its immutable config snapshot; the default path\n    // (browser + top-level server) reads the mutable process-global init() config.\n    const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n    const base = (config.functionsUrl || DEFAULT_FUNCTIONS_URL).replace(/\\/$/, '');\n    // Attach the caller's session token automatically (same token as data calls).\n    // A wallet-scoped call (server WalletClient.invoke) resolves the token from the\n    // wallet's own session; browser calls use the active web session. Top-level\n    // server calls fail closed because there is no ambient server signer.\n    const authHeader = ((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders)\n        ? await opts._overrides._getAuthHeaders()\n        : await createAuthHeader(config.isServer);\n    const headers = Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, ((_d = stripAuthHeaders(opts.headers)) !== null && _d !== void 0 ? _d : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n    const controller = new AbortController();\n    const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    // `fetch` resolves as soon as the response HEADERS arrive, not when the body\n    // has been received, so the abort timer must stay armed across `res.text()`\n    // too. Clearing it in a `finally` that covers both the fetch AND the body read\n    // means a dispatcher/network that returns headers then stalls (or drip-feeds)\n    // the body is torn down at `timeoutMs` instead of leaving `invoke` pending\n    // forever and accumulating open connections (DS3-0432).\n    let res;\n    let text;\n    try {\n        res = await fetch(`${base}/invoke`, {\n            method: 'POST',\n            headers,\n            body: JSON.stringify({ appId: config.appId, functionName: name, args }),\n            signal: controller.signal,\n        });\n        text = await res.text();\n    }\n    catch (err) {\n        if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n            throw new FunctionInvokeError(`Function \"${name}\" invocation timed out after ${timeoutMs}ms`);\n        }\n        throw new FunctionInvokeError(`Failed to reach the functions dispatcher: ${(_f = err === null || err === void 0 ? void 0 : err.message) !== null && _f !== void 0 ? _f : String(err)}`);\n    }\n    finally {\n        clearTimeout(timer);\n    }\n    let body = null;\n    if (text) {\n        try {\n            body = JSON.parse(text);\n        }\n        catch (_j) {\n            body = { raw: text };\n        }\n    }\n    if (!res.ok) {\n        const message = (_h = (_g = body === null || body === void 0 ? void 0 : body.error) !== null && _g !== void 0 ? _g : body === null || body === void 0 ? void 0 : body.message) !== null && _h !== void 0 ? _h : `Function \"${name}\" failed with HTTP ${res.status}`;\n        throw new FunctionInvokeError(message, res.status, body);\n    }\n    // The dispatcher returns the function's JSON directly.\n    return body;\n}\n/** The `bounded.functions` namespace surface. */\nexport const functions = { invoke };\n","// ---------------------------------------------------------------------------\n// live.ts -- Bounded Live client (drive a server-authoritative room).\n//\n// A Bounded \"live\" room is a native module (init/tick/views) loaded into an\n// isolated Durable Object facet inside the per-room DO. The worker runs tick\n// ~30Hz server-authoritatively and fans per-player views out on an ephemeral\n// collection. This file is the consumer surface around that runtime:\n//\n//   bounded.live.intent(roomPath, intent)  -> POST {realtime}/live/intent\n//   bounded.live.status(roomPath)          -> GET  {realtime}/live/status\n//\n// It mirrors `functions.invoke` exactly: it attaches the caller's session token\n// AUTOMATICALLY (the same token the SDK uses for data reads/writes), and throws\n// a typed error on any non-2xx / transport / timeout.\n//\n// The runtime serves any server-authoritative realtime room (Figma clones,\n// editors, dashboards, multiplayer games, ...). Games remain a valid use case;\n// the primitive itself is just \"live\".\n//\n// Addressing: clients address rooms BY PATH (the `path` field in the body). The\n// worker derives the roomId from `body.path` and sets X-Room-Id internally;\n// clients NEVER set X-Room-Id. The caller's address is taken server-side from\n// the Authorization header (auth.userId/userAddress) — it is NOT sent in the\n// body.\n//\n// Subscribing to your view: a per-player view doc lives at\n// `<roomPath>/view/<myUserId>` (the policy declares\n// `rooms/$roomId/view/$userId` ephemeral with `read: $userId == @user.id`).\n// View paths key only by @user.id; wallet-address aliases are intentionally not\n// accepted by this helper.\n// ---------------------------------------------------------------------------\nimport { getConfig } from './config';\nimport { createAuthHeader, getUserInfo } from '../utils/utils';\nimport { subscribeV2, wsIntent, wsIntentReliable } from './subscription-v2';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nexport class LiveIntentError extends Error {\n    constructor(message, statusCode, details) {\n        super(message);\n        this.statusCode = statusCode;\n        this.details = details;\n        this.name = 'LiveIntentError';\n    }\n}\n/**\n * Derive the realtime worker's HTTP base from the configured WS API URL.\n * The realtime worker serves both WS and HTTP on the same host, so we reuse\n * `config.wsApiUrl` (wss:// -> https://, ws:// -> http://). The data API\n * (`config.apiUrl`) is a DIFFERENT host and must NOT be used for /live/*.\n */\nfunction realtimeHttpBase(wsApiUrl) {\n    const url = new URL(wsApiUrl);\n    if (url.protocol === 'wss:')\n        url.protocol = 'https:';\n    else if (url.protocol === 'ws:')\n        url.protocol = 'http:';\n    // Strip trailing slash from the resulting origin+path.\n    return url.toString().replace(/\\/$/, '');\n}\nfunction withoutAuthorization(headers) {\n    if (!headers)\n        return undefined;\n    const clean = {};\n    for (const [key, value] of Object.entries(headers)) {\n        if (key.toLowerCase() === 'authorization')\n            continue;\n        clean[key] = value;\n    }\n    return Object.keys(clean).length > 0 ? clean : undefined;\n}\nfunction hasAuthorization(headers) {\n    if (!headers)\n        return false;\n    return Object.entries(headers).some(([key, value]) => key.toLowerCase() === 'authorization' &&\n        typeof value === 'string' &&\n        /^Bearer\\s+\\S+$/i.test(value.trim()));\n}\nasync function liveAuthHeader(configIsServer, overrides) {\n    if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n        return overrides._getAuthHeaders();\n    }\n    return createAuthHeader(configIsServer);\n}\n/**\n * Send a player intent to a running live room. Returns `{ ok: true }`.\n *\n *   await bounded.live.intent('rooms/abc', { type: 'move', dir: 'up' });\n *\n * `roomPath` is the document path of the room (e.g. `rooms/abc`). The worker\n * derives the room from this path and reads `intent` as the opaque per-tick\n * input. The caller's address is taken from the attached session token.\n *\n * Throws LiveIntentError on 401 (not logged in / bad token), 404 (room has no\n * live module), 503 (live runtime/module unavailable), or any non-2xx /\n * transport error / timeout.\n */\nexport async function intent(roomPath, intent, opts = {}) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    if (!roomPath || typeof roomPath !== 'string') {\n        throw new LiveIntentError('A room path is required');\n    }\n    // A server WalletClient passes its immutable config snapshot; the default path\n    // reads the mutable process-global init() config. This keeps a wallet client's\n    // live intents on its original app/realtime endpoint after a later global\n    // init() (CTA-05).\n    const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n    const initialAuthHeader = await liveAuthHeader(config.isServer, opts._overrides);\n    if (!hasAuthorization(initialAuthHeader)) {\n        if (opts.fireAndForget)\n            return { ok: true };\n        throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n    }\n    // Ride the already-open per-room socket instead of a fresh HTTP POST per\n    // intent. That is what makes high-frequency input (~20-30Hz) cheap — one\n    // persistent connection, no per-intent TCP/TLS or connection-pool contention\n    // (which was head-of-line-blocking the view stream). The worker is the room\n    // authority (the connection is routed to the room DO), so we pass no\n    // destination.\n    //\n    //   - fireAndForget: send and return immediately (lowest latency for inputs).\n    //   - default: send WITH a requestId and AWAIT the ack, so a policy/auth deny\n    //     (401/403/404/503) REJECTS — important intents (join/ready) must not\n    //     silently \"succeed\".\n    //\n    // Either way we fall back to HTTP below only when no live socket exists yet\n    // (e.g. the first join before subscribeView's WS connects) — HTTP also throws\n    // on a non-2xx, so errors are surfaced there too.\n    const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n    const hasAuthOverride = !!((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders);\n    if (!hasAuthOverride) {\n        if (opts.fireAndForget) {\n            if (await wsIntent(config.appId, normalizedRoomPath, intent, config.isServer))\n                return { ok: true };\n        }\n        else {\n            const ack = await wsIntentReliable(config.appId, normalizedRoomPath, intent, config.isServer);\n            if (ack)\n                return ack;\n        }\n    }\n    const base = realtimeHttpBase(config.wsApiUrl);\n    const extraHeaders = withoutAuthorization(opts.headers);\n    const overrideHeaders = withoutAuthorization((_d = opts._overrides) === null || _d === void 0 ? void 0 : _d.headers);\n    const buildHeaders = async () => {\n        const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n        if (!hasAuthorization(authHeader)) {\n            throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n        }\n        return Object.assign(Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n    };\n    const controller = new AbortController();\n    const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    let res;\n    try {\n        const send = async () => fetch(`${base}/live/intent`, {\n            method: 'POST',\n            headers: await buildHeaders(),\n            body: JSON.stringify({ path: normalizedRoomPath, intent }),\n            signal: controller.signal,\n        });\n        res = await send();\n        if (res.status === 401 && ((_f = opts._overrides) === null || _f === void 0 ? void 0 : _f._clearAuth)) {\n            await opts._overrides._clearAuth();\n            res = await send();\n        }\n    }\n    catch (err) {\n        clearTimeout(timer);\n        if (err instanceof LiveIntentError)\n            throw err;\n        if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n            throw new LiveIntentError(`Live intent to \"${roomPath}\" timed out after ${timeoutMs}ms`);\n        }\n        throw new LiveIntentError(`Failed to reach the realtime worker: ${(_g = err === null || err === void 0 ? void 0 : err.message) !== null && _g !== void 0 ? _g : String(err)}`);\n    }\n    clearTimeout(timer);\n    let body = null;\n    const text = await res.text();\n    if (text) {\n        try {\n            body = JSON.parse(text);\n        }\n        catch (_k) {\n            body = { raw: text };\n        }\n    }\n    if (!res.ok) {\n        const message = (_j = (_h = body === null || body === void 0 ? void 0 : body.error) !== null && _h !== void 0 ? _h : body === null || body === void 0 ? void 0 : body.message) !== null && _j !== void 0 ? _j : `Live intent failed with HTTP ${res.status}`;\n        const liveError = new LiveIntentError(message, res.status, body);\n        // A policy/invariant denial of a live intent carries the same structured\n        // decline as the data-write path. Mirror `.decline` onto the LiveIntentError\n        // (its name/contract is unchanged) and notify the browser widget.\n        const decline = deriveDecline(body, res.status);\n        if (decline) {\n            liveError.decline = decline;\n            liveError.isBoundedDecline = true;\n            dispatchDeclineEvent(decline, config.appId);\n        }\n        throw liveError;\n    }\n    return (body !== null && body !== void 0 ? body : { ok: true });\n}\n/**\n * Fetch the runtime status for a live room.\n *\n *   const s = await bounded.live.status('rooms/abc');\n *   console.log(s.running, s.stopReason, s.generation, s.etag);\n *\n * This is diagnostic/ops surface. It reports whether the room facet exists,\n * whether it is currently ticking, why it last stopped, which module etag is\n * loaded, and the current generation used after terminal restarts.\n *\n * Auth: status attaches the caller's session token WHEN ONE EXISTS (mirroring\n * `intent`), but does NOT require it. The server gates the DETAILED body on the\n * room's read rule — an authenticated caller who can read the room gets full\n * telemetry; an anonymous / unauthorized caller gets only the slim liveness\n * shape `{available, started, module}` (#102). The caller's own `opts.headers`\n * may never smuggle in Authorization: only the derived session token sets it.\n */\nexport async function status(roomPath, opts = {}) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    if (!roomPath || typeof roomPath !== 'string') {\n        throw new LiveIntentError('A room path is required');\n    }\n    const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n    // Honor a wallet client's immutable config snapshot (CTA-05); otherwise read\n    // the mutable process-global init() config.\n    const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n    const base = realtimeHttpBase(config.wsApiUrl);\n    const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n    const extraHeaders = withoutAuthorization(opts.headers);\n    const overrideHeaders = withoutAuthorization((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c.headers);\n    const headers = Object.assign(Object.assign(Object.assign({ 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (hasAuthorization(authHeader) ? authHeader : {}));\n    const controller = new AbortController();\n    const timeoutMs = (_d = opts.timeoutMs) !== null && _d !== void 0 ? _d : 15000;\n    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    let res;\n    try {\n        res = await fetch(`${base}/live/status?path=${encodeURIComponent(normalizedRoomPath)}`, {\n            method: 'GET',\n            headers,\n            signal: controller.signal,\n        });\n    }\n    catch (err) {\n        clearTimeout(timer);\n        if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n            throw new LiveIntentError(`Live status for \"${normalizedRoomPath}\" timed out after ${timeoutMs}ms`);\n        }\n        throw new LiveIntentError(`Failed to reach the realtime worker: ${(_e = err === null || err === void 0 ? void 0 : err.message) !== null && _e !== void 0 ? _e : String(err)}`);\n    }\n    clearTimeout(timer);\n    let body = null;\n    const text = await res.text();\n    if (text) {\n        try {\n            body = JSON.parse(text);\n        }\n        catch (_h) {\n            body = { raw: text };\n        }\n    }\n    if (!res.ok) {\n        const message = (_g = (_f = body === null || body === void 0 ? void 0 : body.error) !== null && _f !== void 0 ? _f : body === null || body === void 0 ? void 0 : body.message) !== null && _g !== void 0 ? _g : `Live status failed with HTTP ${res.status}`;\n        throw new LiveIntentError(message, res.status, body);\n    }\n    return body;\n}\n/**\n * Subscribe to YOUR per-player view of a room. Thin sugar over:\n *\n *   subscribe('<roomPath>/view/<myUserId>', { onData, onError })\n *\n * The view id defaults to the logged-in user's @user.id (from the session token\n * claims); pass `opts.userId` to override. Returns the unsubscribe function\n * (a Promise<() => Promise<void>>, same as `subscribe`).\n *\n * Server/agent consumers: use `WalletClient.live.subscribeView` (it supplies\n * the wallet session + view id); browser apps just call this directly.\n */\nexport async function subscribeView(roomPath, opts) {\n    if (!roomPath || typeof roomPath !== 'string') {\n        throw new LiveIntentError('A room path is required');\n    }\n    if (!opts || typeof opts.onData !== 'function') {\n        throw new LiveIntentError('subscribeView requires an onData callback');\n    }\n    let viewUserId = opts.userId;\n    if (!viewUserId) {\n        const config = await getConfig();\n        const info = await getUserInfo(config.isServer);\n        // getUserInfo returns the RAW idToken payload. The universal live view key\n        // is @user.id (`custom:userId`); wallet-address keyed compatibility aliases\n        // are intentionally not accepted.\n        viewUserId = info === null || info === void 0 ? void 0 : info['custom:userId'];\n    }\n    if (!viewUserId || typeof viewUserId !== 'string') {\n        throw new LiveIntentError('Could not resolve a player view id for subscribeView; pass opts.userId or log in first');\n    }\n    const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n    const viewPath = `${normalizedRoomPath}/view/${viewUserId}`;\n    // This is a LIVE/room subscription by construction (the caller hands us the\n    // room path), so we route its connection to the per-room DO where the live\n    // view fan-out runs. App code passes NO routing — the room path is the helper's\n    // own argument, and the worker stays the authority on the destination DO (it\n    // derives the room from the `?path=` the connection carries). Without this the\n    // subscription lands on the app-level project DO and never sees the room's\n    // ephemeral view writes.\n    return subscribeV2(viewPath, { onData: opts.onData, onError: opts.onError, _overrides: opts._overrides }, normalizedRoomPath);\n}\n/** The `bounded.live` namespace surface. */\nexport const live = { intent, status, subscribeView };\n","// ---------------------------------------------------------------------------\n// live-effects.ts -- AUTHOR-facing types + helpers for writing a Bounded live\n// module that emits EFFECTS (call an LLM for an AI NPC, run a function, settle a\n// transaction, write authoritative data) from its otherwise-pure tick.\n//\n// The tick stays a PURE, synchronous reducer: it cannot call out. Instead it\n// EMITS effects as data alongside the next state; the platform runs them off the\n// deterministic loop and re-injects each result as a recorded `@effect` intent on\n// a later tick — so replay stays bit-identical (it reads the recorded result and\n// never re-executes/re-charges). See BOUNDED-LIVE-EFFECTS-SPEC.md §3/§9.\n//\n// SOURCE OF TRUTH for these contracts is the runtime core\n// (realtime-worker/src/effects-core.ts). This module mirrors the AUTHOR-facing\n// subset for the SDK (the two are kept structurally identical by the shared spec).\n// ---------------------------------------------------------------------------\n/** Reserved intent address an effect result arrives on. */\nexport const EFFECT_INTENT_ADDRESS = \"@effect\";\n// ---------------------------------------------------------------------------\n// Ergonomic helpers\n// ---------------------------------------------------------------------------\n/**\n * Build the `{ state, effects }` tick return. Always include this (even with an\n * empty list) when you intend the wrapper, so the runtime never has to guess\n * whether your state object happens to look like the wrapper.\n *\n *   return withEffects(next, [{ kind: \"ai\", id: `npc:${id}:${next.turn}`, model, input }]);\n */\nexport function withEffects(state, effects = []) {\n    return { state, effects };\n}\n/**\n * Narrow an incoming intent to an effect result inside your tick:\n *\n *   for (const i of intents) {\n *     if (i.address === EFFECT_INTENT_ADDRESS && isEffectResult(i.intent)) {\n *       applyResult(state, i.intent); // i.intent.effectId / .ok / .result / .error\n *     } else { applyPlayerIntent(state, i); }\n *   }\n */\nexport function isEffectResult(intent) {\n    return (!!intent &&\n        typeof intent === \"object\" &&\n        intent.__effect === true &&\n        typeof intent.effectId === \"string\" &&\n        typeof intent.ok === \"boolean\");\n}\n/** Identity helper purely for type inference when authoring a module. */\nexport function defineLiveModule(mod) {\n    return mod;\n}\n"],"names":["isRetryAllowed","require$$0","require$$1","exports","Buffer","hashForKey","principalFromIdToken","this"],"mappings":"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","x_google_ignoreList":[1,2,11,12,13]}