UNPKG

@lusc/fastmail-masked-email

Version:

A library for creating, deleting, and updating Fastmail masked emails

39 lines 1.59 kB
import { array as zArray, literal as zLiteral, object as zObject, tuple as zTuple, } from 'zod'; const successStatusCodes = new Set([200]); export async function httpRequest({ url, headers, schema, action, body, }) { headers = new Headers(headers); const requestOptions = { headers, }; if (body) { requestOptions.body = JSON.stringify(body); requestOptions.method = 'POST'; headers.set('Content-Type', 'application/json'); } const response = await fetch(url, requestOptions); if (!successStatusCodes.has(response.status)) { const body = await response.text(); const errorMessage = `${action} failed with status code ${response.status}: ${response.statusText}. ${body}`; throw new Error(errorMessage); } return schema.promise().parseAsync(response.json()); } export async function apiRequest({ session, method, body, schema, action, }) { const { apiUrl, apiToken } = session; const methodId = Math.random().toString(36).slice(2); const responseBody = await httpRequest({ url: apiUrl, headers: new Headers({ authorization: `Bearer ${apiToken}` }), schema: zObject({ methodResponses: zArray(zTuple([zLiteral(method), schema, zLiteral(methodId)])), }), action, body: { using: session.capabilities, methodCalls: [[method, body, methodId]], }, }); // eslint-disable-next-line @typescript-eslint/no-unsafe-return return responseBody.methodResponses[0][1]; } //# sourceMappingURL=http.js.map