From fac1199cd61e069b1a144d2548477a2c3b3b94b0 Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Thu, 4 Jun 2026 15:14:52 +0100 Subject: [PATCH] http: adds actions.js file to interface JS -> PHP --- http/public/scripts/contact/actions.js | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 http/public/scripts/contact/actions.js diff --git a/http/public/scripts/contact/actions.js b/http/public/scripts/contact/actions.js new file mode 100644 index 0000000..5a7e32a --- /dev/null +++ b/http/public/scripts/contact/actions.js @@ -0,0 +1,60 @@ +export const actions = { + /** + * @param {{type: 'email', name: string, email: string}} + * @returns {Promise} + */ + sendOtp: async ({ type, name, email }) => { + const url = "/do/send_otp.php"; + const req = new Request(url, { + method: "POST", + body: JSON.stringify({ type, name, email }), + }); + const res = await fetch(req); + if (!res.ok) { + throw new Error( + `Request to ${url} failed: ${res.status} ${res.statusText} ${await res.text()}`, + ); + } + }, + + /** + * @param {{guess: string, lenient?: bool, userId: string}} + * @returns {Promise} + */ + verifyOtp: async ({ guess, lenient, userId }) => { + const url = "/do/verify_otp.php"; + const req = new Request(url, { + method: "POST", + body: JSON.stringify({ guess, lenient, userId }), + }); + const res = await fetch(req); + + if (res.status === 400) { + return false; + } else if (!res.ok) { + throw new Error( + `Request to ${url} failed: ${res.status} ${res.statusText} ${await res.text()}`, + ); + } + + return res.text(); + }, + + /** + * @param {{email: string, message: string, name: string, userId: string, token: string}} + * @returns {Promise} + */ + sendEmail: async ({ email, message, name, userId, token }) => { + const url = "/do/send_email.php"; + const req = new Request(url, { + method: "POST", + body: JSON.stringify({ email, message, name, userId, token }), + }); + const res = await fetch(req); + if (!res.ok) { + throw new Error( + `Request to ${url} failed: ${res.status} ${res.statusText} ${await res.text()}`, + ); + } + }, +};