@lusc/fastmail-masked-email
Version:
A library for creating, deleting, and updating Fastmail masked emails
39 lines • 1.59 kB
JavaScript
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