{"mappings":"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","names":["parseTalizenErrorBody","requestJson","requestRaw","TalizenHttpError","TalizenFuncError","key","method","message","logs","status","invoke","name","input","options","target","parseInvokeName","runFunc","normalizedKey","normalizeFuncKey","normalizeFuncMethod","timeoutMS","normalizeTimeoutMS","path","encodeFuncKey","runFuncStream","response","error","funcHttpErrorMessage","onEvent","request","text","payload","reader","decoder","buffer","value","done","boundary","block","event","parseSSEBlock","data","id","line","colon","field","raw","parsed","normalized","lastSlash","lastDot"],"sources":["../esm/npm/talizen@0.2.55/node_modules/talizen/func.js"],"sourcesContent":["import { parseTalizenErrorBody, requestJson, requestRaw, TalizenHttpError, } from \"./core.js\";\nexport class TalizenFuncError extends Error {\n    key;\n    method;\n    logs;\n    status;\n    constructor(key, method, message, logs, status = 200) {\n        super(message);\n        this.name = \"TalizenFuncError\";\n        this.key = key;\n        this.method = method;\n        this.logs = logs ?? [];\n        this.status = status;\n    }\n}\nexport async function invoke(name, input, options) {\n    const target = parseInvokeName(name);\n    return runFunc(target.key, input, {\n        ...options,\n        method: target.method,\n    });\n}\nexport async function runFunc(key, input, options) {\n    const normalizedKey = normalizeFuncKey(key);\n    const method = normalizeFuncMethod(options?.method);\n    const timeoutMS = normalizeTimeoutMS(options?.timeoutMS ?? options?.timeoutMs);\n    const path = `/func/${encodeFuncKey(normalizedKey)}${method === \"main\" ? \"\" : `.${encodeURIComponent(method)}`}${timeoutMS ? `?timeout_ms=${timeoutMS}` : \"\"}`;\n    if (options?.onEvent) {\n        return runFuncStream(path, normalizedKey, method, input, options.onEvent, options);\n    }\n    let response;\n    try {\n        response = await requestJson(path, {\n            method: \"POST\",\n            body: JSON.stringify(input ?? {}),\n        }, options);\n    }\n    catch (error) {\n        if (error instanceof TalizenHttpError) {\n            throw new TalizenFuncError(normalizedKey, method, funcHttpErrorMessage(error), undefined, error.status);\n        }\n        throw error;\n    }\n    if (response.error) {\n        throw new TalizenFuncError(normalizedKey, method, response.error || \"Talizen func failed.\", response.logs);\n    }\n    return response.result;\n}\nasync function runFuncStream(path, key, method, input, onEvent, options) {\n    const { response, request } = await requestRaw(path, {\n        method: \"POST\",\n        body: JSON.stringify(input ?? {}),\n        headers: { accept: \"text/event-stream\" },\n    }, options);\n    const contentType = response.headers.get(\"content-type\") ?? \"\";\n    if (!contentType.includes(\"text/event-stream\") || !response.body) {\n        // Failed before the stream started (quota, not found…): same errors as a normal call.\n        const text = await response.text();\n        if (!response.ok) {\n            const error = new TalizenHttpError(response.status, response.statusText, text, parseTalizenErrorBody(text), request);\n            throw new TalizenFuncError(key, method, funcHttpErrorMessage(error), undefined, response.status);\n        }\n        const payload = (text ? JSON.parse(text) : {});\n        if (payload.error) {\n            throw new TalizenFuncError(key, method, payload.error, payload.logs, response.status);\n        }\n        return payload.result;\n    }\n    const reader = response.body.getReader();\n    const decoder = new TextDecoder();\n    let buffer = \"\";\n    for (;;) {\n        const { value, done } = await reader.read();\n        buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done });\n        let boundary;\n        while ((boundary = buffer.search(/\\r?\\n\\r?\\n/)) \u003e= 0) {\n            const block = buffer.slice(0, boundary);\n            buffer = buffer.slice(boundary).replace(/^\\r?\\n\\r?\\n/, \"\");\n            const event = parseSSEBlock(block);\n            if (!event)\n                continue;\n            if (event.event === \"done\") {\n                void reader.cancel().catch(() =\u003e { });\n                return event.data?.result;\n            }\n            if (event.event === \"error\") {\n                void reader.cancel().catch(() =\u003e { });\n                const data = event.data;\n                const message = typeof data === \"string\" ? data : data?.error || \"Talizen func failed.\";\n                throw new TalizenFuncError(key, method, message, typeof data === \"string\" ? undefined : data?.logs, response.status);\n            }\n            try {\n                onEvent(event);\n            }\n            catch {\n                // A failing progress handler must not lose the result.\n            }\n        }\n        if (done)\n            break;\n    }\n    throw new TalizenFuncError(key, method, \"The func stream ended before a result arrived.\", undefined, response.status);\n}\nfunction parseSSEBlock(block) {\n    let event = \"message\";\n    let id;\n    const data = [];\n    for (const line of block.split(/\\r?\\n/)) {\n        if (line === \"\" || line.startsWith(\":\"))\n            continue;\n        const colon = line.indexOf(\":\");\n        const field = colon \u003c 0 ? line : line.slice(0, colon);\n        const value = colon \u003c 0 ? \"\" : line.slice(colon + 1).replace(/^ /, \"\");\n        if (field === \"event\")\n            event = value;\n        else if (field === \"data\")\n            data.push(value);\n        else if (field === \"id\")\n            id = value;\n    }\n    if (data.length === 0 \u0026\u0026 event === \"message\")\n        return null;\n    const raw = data.join(\"\\n\");\n    let parsed = raw;\n    try {\n        parsed = JSON.parse(raw);\n    }\n    catch {\n        // Not JSON: keep the string.\n    }\n    return { event, data: parsed, id };\n}\nfunction funcHttpErrorMessage(error) {\n    try {\n        const payload = JSON.parse(error.body);\n        if (typeof payload.error === \"string\") {\n            return payload.error;\n        }\n        if (payload.error \u0026\u0026 typeof payload.error === \"object\") {\n            const message = payload.error.message;\n            if (typeof message === \"string\") {\n                return message;\n            }\n        }\n    }\n    catch {\n        // Fall through to the HTTP error body.\n    }\n    return error.body || error.message || \"Talizen func failed.\";\n}\nexport function parseInvokeName(name) {\n    const normalized = normalizeFuncKey(name);\n    const lastSlash = normalized.lastIndexOf(\"/\");\n    const lastDot = normalized.lastIndexOf(\".\");\n    if (lastDot \u003c= lastSlash) {\n        return { key: normalized, method: \"main\" };\n    }\n    const key = normalized.slice(0, lastDot);\n    const method = normalized.slice(lastDot + 1);\n    return {\n        key: normalizeFuncKey(key),\n        method: normalizeFuncMethod(method),\n    };\n}\nfunction normalizeFuncKey(key) {\n    const normalized = key.trim().replace(/^\\/+|\\/+$/g, \"\");\n    if (normalized === \"\") {\n        throw new Error(\"Talizen func key is required.\");\n    }\n    if (normalized.includes(\"..\") || normalized.includes(\"\\0\")) {\n        throw new Error(`Invalid Talizen func key: ${key}`);\n    }\n    return normalized;\n}\nfunction normalizeFuncMethod(method) {\n    const normalized = (method ?? \"main\").trim();\n    if (normalized === \"\") {\n        return \"main\";\n    }\n    if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(normalized)) {\n        throw new Error(`Invalid Talizen func method: ${method}`);\n    }\n    return normalized;\n}\nfunction encodeFuncKey(key) {\n    return key.split(\"/\").map(encodeURIComponent).join(\"/\");\n}\nfunction normalizeTimeoutMS(timeoutMS) {\n    if (timeoutMS == null) {\n        return undefined;\n    }\n    if (!Number.isFinite(timeoutMS) || timeoutMS \u003c= 0) {\n        throw new Error(`Invalid Talizen func timeoutMS: ${timeoutMS}`);\n    }\n    return Math.floor(timeoutMS);\n}\n"],"version":3}
