{"mappings":"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","names":["buildCaptchaAnswer","runCaptchaVerification","shouldRetryCaptchaSubmit","requestJson","TalizenHttpError","uploadWithSignedUrl","submitForm","keyOrToken","payload","options","formKey","getFormKey","data","replaceFiles","submitFormRequest","error","shouldShowCaptcha","getFormCaptcha","item","result","isCaptchaRequiredError","isCaptchaRequiredCode","code","value","path","isFile","uploadFile","index","joinPath","isPlainObject","entries","key","fieldKey","file","parent"],"sources":["../esm/npm/talizen@0.2.55/node_modules/talizen/form.js"],"sourcesContent":["import { buildCaptchaAnswer, runCaptchaVerification, shouldRetryCaptchaSubmit, } from \"./captcha-ui.js\";\nimport { requestJson, TalizenHttpError, } from \"./core.js\";\nimport { uploadWithSignedUrl } from \"./signed-upload.js\";\nexport async function submitForm(keyOrToken, payload, options) {\n    const formKey = getFormKey(keyOrToken);\n    const data = await replaceFiles(formKey, payload, \"\", options);\n    try {\n        return await submitFormRequest(formKey, data, options);\n    }\n    catch (error) {\n        if (!shouldShowCaptcha(error, options)) {\n            throw error;\n        }\n    }\n    return runCaptchaVerification({\n        initialCaptcha: await getFormCaptcha(formKey, options),\n        signal: options?.signal,\n        theme: options?.captchaUiTheme,\n        refreshCaptcha: () =\u003e getFormCaptcha(formKey, options),\n        shouldRetry: (error) =\u003e shouldRetryCaptchaSubmit(error, (item) =\u003e shouldShowCaptcha(item, options)),\n        verify: (result) =\u003e submitFormRequest(formKey, data, {\n            ...options,\n            captchaToken: result.token,\n            captchaAnswer: buildCaptchaAnswer(result.x, result.y),\n            captchaX: result.x,\n            captchaY: result.y,\n        }),\n    });\n}\nfunction submitFormRequest(formKey, data, options) {\n    return requestJson(`/form/${formKey}/submit`, {\n        method: \"POST\",\n        body: JSON.stringify({\n            data,\n            captcha_token: options?.captchaToken,\n            captcha_answer: options?.captchaAnswer,\n            captcha_x: options?.captchaX,\n            captcha_y: options?.captchaY,\n        }),\n    }, options);\n}\nexport async function getFormCaptcha(keyOrToken, options) {\n    const formKey = getFormKey(keyOrToken);\n    return requestJson(`/form/${formKey}/captcha`, {\n        method: \"GET\",\n    }, options);\n}\nfunction shouldShowCaptcha(error, options) {\n    return (options?.shouldTriggerCaptcha ?? isCaptchaRequiredError)(error);\n}\nfunction isCaptchaRequiredError(error) {\n    return error instanceof TalizenHttpError \u0026\u0026 isCaptchaRequiredCode(error.bodyJson?.code);\n}\nfunction isCaptchaRequiredCode(code) {\n    return code === 428 || code === \"428\";\n}\nfunction getFormKey(keyOrToken) {\n    if (keyOrToken == null || keyOrToken === \"\") {\n        throw new Error(\"Talizen form key is required.\");\n    }\n    return keyOrToken;\n}\nasync function replaceFiles(formKey, value, path, options) {\n    if (isFile(value)) {\n        return uploadFile(formKey, path || value.name, value, options);\n    }\n    if (Array.isArray(value)) {\n        return Promise.all(value.map((item, index) =\u003e replaceFiles(formKey, item, joinPath(path, String(index)), options)));\n    }\n    if (isPlainObject(value)) {\n        const entries = await Promise.all(Object.entries(value).map(async ([key, item]) =\u003e [key, await replaceFiles(formKey, item, joinPath(path, key), options)]));\n        return Object.fromEntries(entries);\n    }\n    return value;\n}\nasync function uploadFile(formKey, fieldKey, file, options) {\n    const target = await uploadWithSignedUrl(`/form/${formKey}/file/preupload`, file, file.name, fieldKey, options);\n    return target.fileUrl;\n}\nfunction joinPath(parent, key) {\n    return parent === \"\" ? key : `${parent}.${key}`;\n}\nfunction isFile(value) {\n    return typeof File === \"function\" \u0026\u0026 value instanceof File;\n}\nfunction isPlainObject(value) {\n    return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n"],"version":3}
