{"mappings":"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","names":["normalizeRequestMethod","requestJson","resolveTalizenConfig","stripUrlQuery","IMMUTABLE_CACHE_CONTROL","uploadWithSignedUrl","preuploadPath","file","fileName","progressKey","options","resolved","notifyUploadProcess","hash","sha256","preupload","target","normalizePreuploadResponse","putToSignedUrl","response","hashExist","uploadUrl","getString","fileUrl","uploadWithXhr","headers","request","text","formatUploadError","resolve","reject","xhr","signal","event","cleanup","createAbortError","abort","detail","subtle","digest","value","key","process","error"],"sources":["../esm/npm/talizen@0.2.55/node_modules/talizen/signed-upload.js"],"sourcesContent":["import { normalizeRequestMethod, requestJson, resolveTalizenConfig, stripUrlQuery, } from \"./core.js\";\nconst IMMUTABLE_CACHE_CONTROL = \"public, max-age=31536000, immutable\";\nexport async function uploadWithSignedUrl(preuploadPath, file, fileName, progressKey, options) {\n    const resolved = resolveTalizenConfig(options);\n    notifyUploadProcess(resolved, progressKey, 0);\n    const hash = await sha256(file);\n    const preupload = await requestJson(preuploadPath, {\n        method: \"POST\",\n        body: JSON.stringify({\n            file_name: fileName,\n            hash,\n            mimetype: file.type || \"application/octet-stream\",\n            file_size: file.size,\n        }),\n    }, options);\n    const target = normalizePreuploadResponse(preupload, hash);\n    await putToSignedUrl(target, file, progressKey, resolved);\n    notifyUploadProcess(resolved, progressKey, 1);\n    return target;\n}\nfunction normalizePreuploadResponse(response, hash) {\n    const hashExist = response.hash_exist === true;\n    const uploadUrl = getString(response.presigned_url);\n    const fileUrl = getString(response.file_url);\n    if (fileUrl == null) {\n        throw new Error(\"Talizen preupload response is missing file_url.\");\n    }\n    if (!hashExist \u0026\u0026 uploadUrl == null) {\n        throw new Error(\"Talizen preupload response is missing presigned_url.\");\n    }\n    return {\n        hashExist,\n        uploadUrl,\n        fileUrl,\n        filePath: getString(response.file_path),\n        id: typeof response.id === \"number\" \u0026\u0026 response.id \u003e 0 ? response.id : undefined,\n        hash,\n    };\n}\nasync function putToSignedUrl(target, file, progressKey, options) {\n    if (target.hashExist || target.uploadUrl == null)\n        return;\n    if (typeof XMLHttpRequest === \"function\") {\n        await uploadWithXhr(target, file, progressKey, options);\n        return;\n    }\n    const resolved = resolveTalizenConfig(options);\n    const headers = new Headers();\n    const request = {\n        method: normalizeRequestMethod(\"PUT\"),\n        url: stripUrlQuery(target.uploadUrl),\n    };\n    if (file.type)\n        headers.set(\"content-type\", file.type);\n    headers.set(\"cache-control\", IMMUTABLE_CACHE_CONTROL);\n    const response = await resolved.fetch(target.uploadUrl, {\n        method: \"PUT\",\n        headers,\n        body: file,\n        signal: resolved.signal,\n    });\n    if (!response.ok) {\n        const text = await response.text();\n        throw new Error(formatUploadError(request, `${response.status} ${response.statusText} ${text}`));\n    }\n}\nfunction uploadWithXhr(target, file, progressKey, options) {\n    return new Promise((resolve, reject) =\u003e {\n        const xhr = new XMLHttpRequest();\n        const signal = options.signal;\n        const request = {\n            method: normalizeRequestMethod(\"PUT\"),\n            url: stripUrlQuery(target.uploadUrl ?? \"\"),\n        };\n        xhr.open(\"PUT\", target.uploadUrl ?? \"\");\n        if (file.type)\n            xhr.setRequestHeader(\"content-type\", file.type);\n        xhr.setRequestHeader(\"cache-control\", IMMUTABLE_CACHE_CONTROL);\n        xhr.upload.onprogress = (event) =\u003e {\n            if (event.lengthComputable) {\n                notifyUploadProcess(options, progressKey, event.loaded / event.total);\n            }\n        };\n        xhr.onload = () =\u003e {\n            cleanup();\n            if (xhr.status \u003e= 200 \u0026\u0026 xhr.status \u003c 300) {\n                resolve();\n                return;\n            }\n            reject(new Error(formatUploadError(request, `${xhr.status} ${xhr.statusText} ${xhr.responseText}`)));\n        };\n        xhr.onerror = () =\u003e {\n            cleanup();\n            reject(new Error(formatUploadError(request, \"network error\")));\n        };\n        xhr.onabort = () =\u003e {\n            cleanup();\n            reject(createAbortError());\n        };\n        const abort = () =\u003e xhr.abort();\n        const cleanup = () =\u003e signal?.removeEventListener(\"abort\", abort);\n        signal?.addEventListener(\"abort\", abort, { once: true });\n        xhr.send(file);\n    });\n}\nfunction formatUploadError(request, detail) {\n    return `Talizen file upload failed: ${request.method} ${request.url} ${detail}`.replace(/\\s+/g, \" \").trim();\n}\nasync function sha256(file) {\n    const subtle = globalThis.crypto?.subtle;\n    if (subtle == null) {\n        throw new Error(\"Talizen file upload requires Web Crypto support.\");\n    }\n    const digest = await subtle.digest(\"SHA-256\", await file.arrayBuffer());\n    return Array.from(new Uint8Array(digest), value =\u003e value.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction notifyUploadProcess(options, key, process) {\n    options?.onFileUploadProcess?.(key, Math.min(1, Math.max(0, process)));\n}\nfunction getString(value) {\n    return typeof value === \"string\" \u0026\u0026 value !== \"\" ? value : undefined;\n}\nfunction createAbortError() {\n    if (typeof DOMException === \"function\") {\n        return new DOMException(\"The operation was aborted.\", \"AbortError\");\n    }\n    const error = new Error(\"The operation was aborted.\");\n    error.name = \"AbortError\";\n    return error;\n}\n"],"version":3}
