{"mappings":"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","names":["talizenConfig","talizenConfigListeners","isShallowEqualConfig","a","b","keys","key","setTalizenConfig","config","merged","changed","listener","getTalizenConfig","subscribeTalizenConfig","resolveTalizenConfig","baseUrl","getDefaultBaseUrl","fetchImpl","getDefaultFetch","joinUrl","path","base","subPath","buildTalizenUrl","resolved","TalizenHttpError","status","statusText","body","bodyJson","request","formatTalizenRequestErrorMessage","requestJson","init","headers","value","requestUrl","normalizeRequestMethod","stripUrlQuery","response","text","parseTalizenErrorBody","requestRaw","stripUrlQuery","url","parsed","normalizeRequestMethod","method","formatTalizenRequestErrorMessage","status","statusText","body","request","getDefaultBaseUrl","getDefaultFetch","input","init","parseTalizenErrorBody","isTalizenErrorBody","value","record","code","message"],"sources":["../esm/npm/talizen@0.2.55/node_modules/talizen/core.js"],"sourcesContent":["let talizenConfig = {};\nconst talizenConfigListeners = new Set();\nfunction isShallowEqualConfig(a, b) {\n    const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n    for (const key of keys) {\n        if (!Object.is(a[key], b[key])) {\n            return false;\n        }\n    }\n    return true;\n}\nexport function setTalizenConfig(config) {\n    const merged = {\n        ...talizenConfig,\n        ...config,\n    };\n    // Only notify subscribers when the config actually changed. The render\n    // runtime may re-apply identical config repeatedly; without this guard each\n    // call would trigger a fresh auth refresh and other subscriber work.\n    const changed = !isShallowEqualConfig(talizenConfig, merged);\n    talizenConfig = merged;\n    if (changed) {\n        talizenConfigListeners.forEach(listener =\u003e listener());\n    }\n}\nexport function getTalizenConfig() {\n    return talizenConfig;\n}\nexport function subscribeTalizenConfig(listener) {\n    talizenConfigListeners.add(listener);\n    return () =\u003e {\n        talizenConfigListeners.delete(listener);\n    };\n}\nexport function resolveTalizenConfig(config) {\n    // globalThis is the global object in the browser and node.js\n    const globalTalizenConfig = typeof globalThis !== \"undefined\" ? globalThis.TalizenConfig : {};\n    const merged = {\n        ...globalTalizenConfig,\n        ...talizenConfig,\n        ...config,\n    };\n    const baseUrl = merged.baseUrl ?? getDefaultBaseUrl();\n    const fetchImpl = merged.fetch ?? getDefaultFetch();\n    return {\n        ...merged,\n        baseUrl,\n        fetch: fetchImpl,\n    };\n}\nfunction joinUrl(baseUrl, path) {\n    const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n    const subPath = path.startsWith(\"/\") ? path.slice(1) : path;\n    return `${base}/${subPath}`;\n}\nfunction buildTalizenUrl(path, config) {\n    const resolved = resolveTalizenConfig(config);\n    return joinUrl(resolved.baseUrl, path);\n}\nexport class TalizenHttpError extends Error {\n    status;\n    statusText;\n    body;\n    bodyJson;\n    method;\n    url;\n    constructor(status, statusText, body, bodyJson, request) {\n        super(formatTalizenRequestErrorMessage(status, statusText, body, request));\n        this.name = \"TalizenHttpError\";\n        this.status = status;\n        this.statusText = statusText;\n        this.body = body;\n        this.bodyJson = bodyJson;\n        this.method = request?.method;\n        this.url = request?.url;\n    }\n}\nexport async function requestJson(path, init, config) {\n    const resolved = resolveTalizenConfig(config);\n    const headers = new Headers(resolved.headers ?? {});\n    if (init?.headers) {\n        new Headers(init.headers).forEach((value, key) =\u003e {\n            headers.set(key, value);\n        });\n    }\n    if (init?.body != null \u0026\u0026 !headers.has(\"content-type\")) {\n        headers.set(\"content-type\", \"application/json\");\n    }\n    const requestUrl = buildTalizenUrl(path, resolved);\n    const request = {\n        method: normalizeRequestMethod(init?.method),\n        url: stripUrlQuery(requestUrl),\n    };\n    const response = await resolved.fetch(requestUrl, {\n        ...init,\n        headers,\n        signal: resolved.signal,\n    });\n    if (!response.ok) {\n        const text = await response.text();\n        const bodyJson = parseTalizenErrorBody(text);\n        throw new TalizenHttpError(response.status, response.statusText, text, bodyJson, request);\n    }\n    const text = await response.text();\n    if (text === \"\") {\n        return undefined;\n    }\n    return JSON.parse(text);\n}\n/**\n * Like requestJson but hands back the raw Response without reading or checking\n * it, for callers that consume a stream (SSE). The caller handles non-2xx.\n */\nexport async function requestRaw(path, init, config) {\n    const resolved = resolveTalizenConfig(config);\n    const headers = new Headers(resolved.headers ?? {});\n    if (init?.headers) {\n        new Headers(init.headers).forEach((value, key) =\u003e {\n            headers.set(key, value);\n        });\n    }\n    if (init?.body != null \u0026\u0026 !headers.has(\"content-type\")) {\n        headers.set(\"content-type\", \"application/json\");\n    }\n    const requestUrl = buildTalizenUrl(path, resolved);\n    const response = await resolved.fetch(requestUrl, {\n        ...init,\n        headers,\n        signal: resolved.signal,\n    });\n    return {\n        response,\n        request: { method: normalizeRequestMethod(init?.method), url: stripUrlQuery(requestUrl) },\n    };\n}\nexport { parseTalizenErrorBody };\nexport function stripUrlQuery(url) {\n    try {\n        const parsed = new URL(url);\n        parsed.search = \"\";\n        return parsed.toString();\n    }\n    catch {\n        return url.split(\"?\")[0] ?? url;\n    }\n}\nexport function normalizeRequestMethod(method) {\n    return (method ?? \"GET\").toUpperCase();\n}\nfunction formatTalizenRequestErrorMessage(status, statusText, body, request) {\n    const requestText = [request?.method, request?.url].filter(Boolean).join(\" \");\n    return `Talizen request failed: ${requestText} ${status} ${statusText} ${body}`.replace(/\\s+/g, \" \").trim();\n}\nfunction getDefaultBaseUrl() {\n    if (typeof window !== \"undefined\" \u0026\u0026 window.location?.origin) {\n        return window.location.origin;\n    }\n    throw new Error(\"Talizen baseUrl is required. set window.TalizenConfig = { baseUrl: 'https://example.com' } first.\");\n}\nfunction getDefaultFetch() {\n    if (typeof fetch === \"function\") {\n        return (input, init) =\u003e fetch(input, init);\n    }\n    throw new Error(\"Talizen fetch implementation is required in the current runtime.\");\n}\nfunction parseTalizenErrorBody(body) {\n    if (body === \"\") {\n        return undefined;\n    }\n    try {\n        const parsed = JSON.parse(body);\n        if (isTalizenErrorBody(parsed)) {\n            return parsed;\n        }\n    }\n    catch {\n        return undefined;\n    }\n    return undefined;\n}\nfunction isTalizenErrorBody(value) {\n    if (typeof value !== \"object\" || value == null) {\n        return false;\n    }\n    const record = value;\n    const code = record.code;\n    const message = record.message;\n    const isCodeValid = code === undefined || typeof code === \"number\" || typeof code === \"string\";\n    const isMessageValid = message === undefined || typeof message === \"string\";\n    return isCodeValid \u0026\u0026 isMessageValid;\n}\n"],"version":3}
