// ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ╚══╗ ╔══╝║ ╔╗ ╔╗ ║║ ╔═══╗ ║║ ╔═══╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ╔═════╝ // ║ ║ ║ ║║ ║║ ║║ ╚═══╝ ║║ ║ ║ ║║ ╚═══╝ ║ ║ ║ ║ ╚═════╗ // ║ ║ ║ ║║ ║║ ║║ ╔═════╝║ ║ ║ ║║ ╔═╗ ╔═╝ ║ ║ ╚═════╗ ║ // ╔══╝ ╚══╗║ ║║ ║║ ║║ ║ ║ ╚═══╝ ║║ ║ ║ ╚═╗ ║ ║ ╔═════╝ ║ // ╚═══════╝╚═╝╚═╝╚═╝╚═╝ ╚═══════╝╚═╝ ╚═══╝ ╚═╝ ╚═══════╝ import * as requestValidators from '../validators/request-validators.js'; import * as requestTypings from '../typings/request-typings.js'; import fetch from 'node-fetch'; // ╔═╗ ╔═╗╔═══════╗╔═╗ ╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ║ ║ ║ ║║ ╔═════╝║ ║ ║ ╔═══╗ ║║ ╔═════╝║ ╔═══╗ ║║ ╔═════╝ // ║ ╚═══╝ ║║ ╚═════╗║ ║ ║ ╚═══╝ ║║ ╚═════╗║ ╚═══╝ ║║ ╚═════╗ // ║ ╔═══╗ ║║ ╔═════╝║ ║ ║ ╔═════╝║ ╔═════╝║ ╔═╗ ╔═╝╚═════╗ ║ // ║ ║ ║ ║║ ╚═════╗║ ╚═════╗║ ║ ║ ╚═════╗║ ║ ║ ╚═╗╔═════╝ ║ // ╚═╝ ╚═╝╚═══════╝╚═══════╝╚═╝ ╚═══════╝╚═╝ ╚═══╝╚═══════╝ function standardizeRequestContent( requestContent: requestTypings.RequestContent, ) { requestValidators.validateRequestContent(requestContent); if (!requestContent?.method) requestContent.method = 'GET'; if (!requestContent?.headers) requestContent.headers = {}; if (requestContent?.method?.toUpperCase() === 'GET') { requestContent.body = undefined; } return requestContent; } function standardizeRequestContext( requestContext: requestTypings.RequestContext, ) { requestValidators.validateRequestContext(requestContext); return requestContext; } // ╔═══════╗╔═══════╗╔════╗╔═╗╔═══════╗ // ║ ╔═════╝║ ╔═════╝║ ╔╗ ║║ ║╚╗ ╔══╗ ║ // ║ ╚═════╗║ ╚═════╗║ ║║ ║║ ║ ║ ║ ║ ║ // ╚═════╗ ║║ ╔═════╝║ ║║ ║║ ║ ║ ║ ║ ║ // ╔═════╝ ║║ ╚═════╗║ ║║ ╚╝ ║╔╝ ╚══╝ ║ // ╚═══════╝╚═══════╝╚═╝╚════╝╚═══════╝ export async function sendRequest( requestContent: requestTypings.RequestContent, requestContext: requestTypings.RequestContext, ) { requestContent = standardizeRequestContent(requestContent); requestContext = standardizeRequestContext(requestContext); const url = `https://${requestContext.hostname}/${requestContent.endpoint}`; return await fetch(url, { method: requestContent.method, headers: { ...requestContent.headers, 'Content-Type': 'application/json', 'Authorization': requestContext.token, 'x-api-key': requestContext.privateKey, }, body: requestContent.body ? JSON.stringify(requestContent.body) : null, }); }