UNPKG

fetch-aws4

Version:

Fetch wrap to add AWS v4 signature to the request

32 lines 1.18 kB
import aws4 from 'aws4'; const normalizeHeaders = (signedOptions) => { const normalizedHeaders = {}; for (const key in signedOptions?.headers) { normalizedHeaders[key] = String(signedOptions?.headers[key]); } return normalizedHeaders; }; export const wrapper = (fetch) => { return async (url, init) => { if (!init?.awsCredentials && !process.env.AWS_ACCESS_KEY_ID && !process.env.AWS_SECRET_ACCESS_KEY) { throw new Error('Credentials not defined.'); } const parsedUrl = new URL(url.toString()); const match = /([^.]+)\.(?:([^.]*)\.)?amazonaws\.com(\.cn)?$/.exec(parsedUrl.host); let options = { ...init, host: parsedUrl.host, path: parsedUrl.pathname + parsedUrl.search, }; if (!init?.service && !match) { options = { ...options, service: 'execute-api' }; } const signedOptions = aws4.sign(options, init?.awsCredentials); return fetch(url, { ...signedOptions, headers: normalizeHeaders(signedOptions), }); }; }; export default wrapper(fetch); //# sourceMappingURL=fetch.js.map