Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@lifeomic/axios-fetch

Package Overview
Dependencies
Maintainers
2
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lifeomic/axios-fetch - npm Package Compare versions

Comparing version 2.0.6-pr-99-1374004398-1634941034.0 to 3.0.1-pr-102-1462920668-1636990839.0

src/axios-types.d.ts

36

package.json
{
"name": "@lifeomic/axios-fetch",
"version": "2.0.6-pr-99-1374004398-1634941034.0",
"version": "3.0.1-pr-102-1462920668-1636990839.0",
"description": "A WebAPI Fetch implementation backed by an Axios client",

@@ -12,3 +12,4 @@ "main": "src/index.js",

"test": "nyc ava",
"lint": "eslint . --ext .js,.ts -f codeframe && tsc --noEmit",
"lint": "eslint . --ext .js,.ts -f codeframe",
"postlint": "yarn tsc --noEmit",
"pretest": "yarn lint",

@@ -41,23 +42,20 @@ "coverage": "nyc report --reporter=text-lcov > ./.nyc_output/lcov.info",

"@lifeomic/eslint-plugin-node": "^2.0.1",
"@types/sinon": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^4.22.0",
"@typescript-eslint/parser": "^4.22.0",
"@types/sinon": "^10.0.4",
"@typescript-eslint/eslint-plugin": "^5.1.0",
"@typescript-eslint/parser": "^5.1.0",
"ava": "^3.15.0",
"axios": "^0.21.4",
"coveralls": "^3.1.0",
"eslint": "^6.0.0",
"nock": "^11.3.3",
"nyc": "^15.0.0",
"sinon": "^10.0.1",
"ts-node": "^9.1.1",
"typescript": "^4.2.4"
"axios": "^0.24.0",
"coveralls": "^3.1.1",
"eslint": "^7.32.0",
"form-data": "^4.0.0",
"nock": "^13.1.4",
"node-fetch": "^2.6.1",
"nyc": "^15.1.0",
"sinon": "^11.1.2",
"ts-node": "^10.3.0",
"typescript": "^4.4.4"
},
"dependencies": {
"@types/node-fetch": "^2.5.10",
"form-data": "^2.5.0",
"node-fetch": "^2.6.1"
"@types/node-fetch": "^2.5.10"
},
"eslintConfig": {
"extends": "plugin:@lifeomic/node/recommended"
},
"nyc": {

@@ -64,0 +62,0 @@ "check-coverage": true,

# Axios-Fetch
[![Greenkeeper badge](https://badges.greenkeeper.io/lifeomic/axios-fetch.svg)](https://greenkeeper.io/)
[![Build Status](https://travis-ci.org/lifeomic/axios-fetch.svg?branch=master)](https://travis-ci.org/lifeomic/axios-fetch)
[![npm](https://img.shields.io/npm/v/@lifeomic/axios-fetch.svg)](https://www.npmjs.com/package/@lifeomic/axios-fetch)
[![Build Status](https://github.com/lifeomic/axios-fetch/actions/workflows/release.yaml/badge.svg)](https://github.com/lifeomic/axios-fetch/actions/workflows/release.yaml)
[![Coverage Status](https://coveralls.io/repos/github/lifeomic/axios-fetch/badge.svg?branch=master)](https://coveralls.io/github/lifeomic/axios-fetch?branch=master)
![Dependabot Badge](https://flat.badgen.net/dependabot/lifeomic/axios-fetch?icon=dependabot)
This library exposes a Fetch WebAPI implementation backed by a Axios client
This library exposes a Fetch WebAPI implementation backed by an Axios client
instance. This allows a bridge between projects that have pre-configured Axios
clients already to other libraries that require Fetch implementations.
## Global Response object
It is expected that the global Response object will be available. For testing we use the [node-fetch
](https://www.npmjs.com/package/node-fetch) library.
```typescript
import { Response } from 'node-fetch';
// @ts-expect-error node-fetch doesn't exactly match the Response object, but close enough.
global.Response = Response;
```
## Example
One library that wants a Fetch implementation is the [Apollo Link

@@ -20,3 +34,3 @@ HTTP](https://www.apollographql.com/docs/link/links/http.html) library. If your

const link = createHttpLink({
uri: "/graphql"
uri: "/graphql",
fetch: buildAxiosFetch(yourAxiosInstance)

@@ -40,3 +54,3 @@ });

## Support for IE11
## Support for IE11

@@ -43,0 +57,0 @@ To Support IE11 add following dependencies

@@ -1,12 +0,3 @@

import { Response } from 'node-fetch';
import FormData from 'form-data';
import { AxiosInstance, AxiosRequestConfig } from './types';
export interface FetchInit extends Record<string, any> {
headers?: Record<string, string>;
method?: AxiosRequestConfig['method'];
body?: FormData | any;
extra?: any;
}
export declare type AxiosTransformer = (config: AxiosRequestConfig, input: string | undefined, init: FetchInit) => AxiosRequestConfig;
export declare type AxiosFetch = (input?: string, init?: FetchInit) => Promise<Response>;
export declare function buildAxiosFetch(axios: AxiosInstance, transformer?: AxiosTransformer): AxiosFetch;
import { AxiosInstance, AxiosRequestConfig } from './axios-types';
export declare type AxiosTransformer<Init extends RequestInit = RequestInit> = (config: AxiosRequestConfig, input: RequestInfo, init?: Init) => AxiosRequestConfig;
export declare const buildAxiosFetch: <Init extends RequestInit = RequestInit>(axios: AxiosInstance, transformer?: AxiosTransformer<Init> | undefined) => (input: RequestInfo, init?: Init | undefined) => Promise<Response>;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildAxiosFetch = void 0;
const node_fetch_1 = require("node-fetch");
const form_data_1 = __importDefault(require("form-data"));
const typeUtils_1 = require("./typeUtils");
/**
* A Fetch WebAPI implementation based on the Axios client
*/
async function axiosFetch(axios,
const axiosFetch = (axios,
// Convert the `fetch` style arguments into a Axios style config
transformer, input, init = {}) {
const rawHeaders = init.headers || {};
const lowerCasedHeaders = Object.keys(rawHeaders).filter(key => key && rawHeaders[key])
.reduce((acc, key) => {
acc[key.toLowerCase()] = rawHeaders[key];
return acc;
}, {});
transformer = (config) => config) => async (input, init) => {
const rawHeaders = (0, typeUtils_1.createAxiosHeaders)(init === null || init === void 0 ? void 0 : init.headers);
const lowerCasedHeaders = {};
Object.entries(rawHeaders).forEach(([name, value]) => {
lowerCasedHeaders[name.toLowerCase()] = value;
});
if (!('content-type' in lowerCasedHeaders)) {

@@ -25,5 +20,5 @@ lowerCasedHeaders['content-type'] = 'text/plain;charset=UTF-8';

const rawConfig = {
url: input,
method: init.method || 'GET',
data: typeof init.body === 'undefined' || init.body instanceof form_data_1.default ? init.body : String(init.body),
url: (0, typeUtils_1.getUrl)(input),
method: (init === null || init === void 0 ? void 0 : init.method) || 'GET',
data: init === null || init === void 0 ? void 0 : init.body,
headers: lowerCasedHeaders,

@@ -36,3 +31,3 @@ // Force the response to an arraybuffer type. Without this, the Response

};
const config = transformer ? transformer(rawConfig, input, init) : rawConfig;
const config = transformer(rawConfig, input, init);
let result;

@@ -50,13 +45,10 @@ try {

}
const fetchHeaders = new node_fetch_1.Headers(result.headers);
return new node_fetch_1.Response(result.data, {
return new Response(result.data, {
status: result.status,
statusText: result.statusText,
headers: fetchHeaders
headers: (0, typeUtils_1.createFetchHeaders)(result.headers)
});
}
function buildAxiosFetch(axios, transformer) {
return axiosFetch.bind(undefined, axios, transformer);
}
};
const buildAxiosFetch = (axios, transformer) => axiosFetch(axios, transformer);
exports.buildAxiosFetch = buildAxiosFetch;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQ0FBK0Q7QUFDL0QsMERBQWlDO0FBY2pDOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFVBQVUsQ0FDdkIsS0FBb0I7QUFDcEIsZ0VBQWdFO0FBQ2hFLFdBQThCLEVBQzlCLEtBQWMsRUFDZCxPQUFrQixFQUFFO0lBRXBCLE1BQU0sVUFBVSxHQUEyQixJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUM5RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwRixNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDWCxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBVyxDQUFDO1FBQ25ELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBRUosSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLGlCQUFpQixDQUFDLEVBQUU7UUFDMUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7S0FDaEU7SUFFRCxNQUFNLFNBQVMsR0FBdUI7UUFDcEMsR0FBRyxFQUFFLEtBQUs7UUFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLO1FBQzVCLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLFlBQVksbUJBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkcsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQix3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLGdCQUFnQjtRQUNoQixxRUFBcUU7UUFDckUsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUU3RSxJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUk7UUFDRixNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDO0lBQUMsT0FBTyxHQUFRLEVBQUU7UUFDakIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxNQUFNLEdBQUcsQ0FBQztTQUNYO0tBQ0Y7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLG9CQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRELE9BQU8sSUFBSSxxQkFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDL0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixPQUFPLEVBQUUsWUFBWTtLQUN0QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFFLEtBQW9CLEVBQUUsV0FBOEI7SUFDbkYsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUZELDBDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzcG9uc2UsIEhlYWRlcnMgYXMgRmV0Y2hIZWFkZXJzIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoSW5pdCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbWV0aG9kPzogQXhpb3NSZXF1ZXN0Q29uZmlnWydtZXRob2QnXTtcbiAgYm9keT86IEZvcm1EYXRhIHwgYW55O1xuICBleHRyYT86IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgQXhpb3NUcmFuc2Zvcm1lciA9IChjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZywgaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW5pdDogRmV0Y2hJbml0KSA9PiBBeGlvc1JlcXVlc3RDb25maWc7XG5cbmV4cG9ydCB0eXBlIEF4aW9zRmV0Y2ggPSAoaW5wdXQ/OiBzdHJpbmcsIGluaXQ/OiBGZXRjaEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+O1xuXG4vKipcbiAqIEEgRmV0Y2ggV2ViQVBJIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBBeGlvcyBjbGllbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXhpb3NGZXRjaCAoXG4gIGF4aW9zOiBBeGlvc0luc3RhbmNlLFxuICAvLyBDb252ZXJ0IHRoZSBgZmV0Y2hgIHN0eWxlIGFyZ3VtZW50cyBpbnRvIGEgQXhpb3Mgc3R5bGUgY29uZmlnXG4gIHRyYW5zZm9ybWVyPzogQXhpb3NUcmFuc2Zvcm1lcixcbiAgaW5wdXQ/OiBzdHJpbmcsXG4gIGluaXQ6IEZldGNoSW5pdCA9IHt9XG4pIHtcbiAgY29uc3QgcmF3SGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGluaXQuaGVhZGVycyB8fCB7fTtcbiAgY29uc3QgbG93ZXJDYXNlZEhlYWRlcnMgPSBPYmplY3Qua2V5cyhyYXdIZWFkZXJzKS5maWx0ZXIoa2V5ID0+IGtleSAmJiByYXdIZWFkZXJzW2tleV0pXG4gICAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICAgIChhY2MsIGtleSkgPT4ge1xuICAgICAgICBhY2Nba2V5LnRvTG93ZXJDYXNlKCldID0gcmF3SGVhZGVyc1trZXldIGFzIHN0cmluZztcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG5cbiAgaWYgKCEoJ2NvbnRlbnQtdHlwZScgaW4gbG93ZXJDYXNlZEhlYWRlcnMpKSB7XG4gICAgbG93ZXJDYXNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCc7XG4gIH1cblxuICBjb25zdCByYXdDb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICB1cmw6IGlucHV0LFxuICAgIG1ldGhvZDogaW5pdC5tZXRob2QgfHwgJ0dFVCcsXG4gICAgZGF0YTogdHlwZW9mIGluaXQuYm9keSA9PT0gJ3VuZGVmaW5lZCcgfHwgaW5pdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEgPyBpbml0LmJvZHkgOiBTdHJpbmcoaW5pdC5ib2R5KSxcbiAgICBoZWFkZXJzOiBsb3dlckNhc2VkSGVhZGVycyxcbiAgICAvLyBGb3JjZSB0aGUgcmVzcG9uc2UgdG8gYW4gYXJyYXlidWZmZXIgdHlwZS4gV2l0aG91dCB0aGlzLCB0aGUgUmVzcG9uc2VcbiAgICAvLyBvYmplY3Qgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBhbmQgYWRkIGhlYWRlcnMgdGhhdCB3ZXJlbid0IGluXG4gICAgLy8gdGhlIHJlc3BvbnNlLlxuICAgIC8vIE5PVEU6IERvbid0IHVzZSAnc3RyZWFtJyBiZWNhdXNlIGl0J3Mgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3NlclxuICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9IHRyYW5zZm9ybWVyID8gdHJhbnNmb3JtZXIocmF3Q29uZmlnLCBpbnB1dCwgaW5pdCkgOiByYXdDb25maWc7XG5cbiAgbGV0IHJlc3VsdDtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBhd2FpdCBheGlvcy5yZXF1ZXN0KGNvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgcmVzdWx0ID0gZXJyLnJlc3BvbnNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmV0Y2hIZWFkZXJzID0gbmV3IEZldGNoSGVhZGVycyhyZXN1bHQuaGVhZGVycyk7XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXN1bHQuZGF0YSwge1xuICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiByZXN1bHQuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBmZXRjaEhlYWRlcnNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEF4aW9zRmV0Y2ggKGF4aW9zOiBBeGlvc0luc3RhbmNlLCB0cmFuc2Zvcm1lcj86IEF4aW9zVHJhbnNmb3JtZXIpOiBBeGlvc0ZldGNoIHtcbiAgcmV0dXJuIGF4aW9zRmV0Y2guYmluZCh1bmRlZmluZWQsIGF4aW9zLCB0cmFuc2Zvcm1lcik7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FJcUI7QUFNckI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUNqQixLQUFvQjtBQUNwQixnRUFBZ0U7QUFDaEUsY0FBc0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFDeEQsRUFBRSxDQUFDLEtBQUssRUFDTixLQUFrQixFQUNsQixJQUFXLEVBQ1gsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLElBQUEsOEJBQWtCLEVBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0saUJBQWlCLEdBQTJCLEVBQUUsQ0FBQztJQUNyRCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDbkQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLGlCQUFpQixDQUFDLEVBQUU7UUFDMUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7S0FDaEU7SUFFRCxNQUFNLFNBQVMsR0FBdUI7UUFDcEMsR0FBRyxFQUFFLElBQUEsa0JBQU0sRUFBQyxLQUFLLENBQUM7UUFDbEIsTUFBTSxFQUFFLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQXVDLEtBQUksS0FBSztRQUMvRCxJQUFJLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUk7UUFDaEIsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQix3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLGdCQUFnQjtRQUNoQixxRUFBcUU7UUFDckUsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRW5ELElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSTtRQUNGLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEM7SUFBQyxPQUFPLEdBQVEsRUFBRTtRQUNqQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDdkI7YUFBTTtZQUNMLE1BQU0sR0FBRyxDQUFDO1NBQ1g7S0FDRjtJQUVELE9BQU8sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtRQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLE9BQU8sRUFBRSxJQUFBLDhCQUFrQixFQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDNUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUcsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsS0FBb0IsRUFDcEIsV0FBb0MsRUFDcEMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFIdkIsUUFBQSxlQUFlLG1CQUdRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlQXhpb3NIZWFkZXJzLFxuICBjcmVhdGVGZXRjaEhlYWRlcnMsXG4gIGdldFVybFxufSBmcm9tICcuL3R5cGVVdGlscyc7XG5pbXBvcnQgeyBBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICcuL2F4aW9zLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgQXhpb3NUcmFuc2Zvcm1lcjxJbml0IGV4dGVuZHMgUmVxdWVzdEluaXQgPSBSZXF1ZXN0SW5pdD4gPVxuICAoY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcsIGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdD86IEluaXQpID0+IEF4aW9zUmVxdWVzdENvbmZpZztcblxuLyoqXG4gKiBBIEZldGNoIFdlYkFQSSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgQXhpb3MgY2xpZW50XG4gKi9cbmNvbnN0IGF4aW9zRmV0Y2ggPSA8SW5pdCBleHRlbmRzIFJlcXVlc3RJbml0ID0gUmVxdWVzdEluaXQ+KFxuICBheGlvczogQXhpb3NJbnN0YW5jZSxcbiAgLy8gQ29udmVydCB0aGUgYGZldGNoYCBzdHlsZSBhcmd1bWVudHMgaW50byBhIEF4aW9zIHN0eWxlIGNvbmZpZ1xuICB0cmFuc2Zvcm1lcjogQXhpb3NUcmFuc2Zvcm1lcjxJbml0PiA9IChjb25maWcpID0+IGNvbmZpZ1xuKSA9PiBhc3luYyAoXG4gICAgaW5wdXQ6IFJlcXVlc3RJbmZvLFxuICAgIGluaXQ/OiBJbml0XG4gICkgPT4ge1xuICAgIGNvbnN0IHJhd0hlYWRlcnMgPSBjcmVhdGVBeGlvc0hlYWRlcnMoaW5pdD8uaGVhZGVycyk7XG4gICAgY29uc3QgbG93ZXJDYXNlZEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhyYXdIZWFkZXJzKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICBsb3dlckNhc2VkSGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICBpZiAoISgnY29udGVudC10eXBlJyBpbiBsb3dlckNhc2VkSGVhZGVycykpIHtcbiAgICAgIGxvd2VyQ2FzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd0NvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgdXJsOiBnZXRVcmwoaW5wdXQpLFxuICAgICAgbWV0aG9kOiAoaW5pdD8ubWV0aG9kIGFzIEF4aW9zUmVxdWVzdENvbmZpZ1snbWV0aG9kJ10pIHx8ICdHRVQnLFxuICAgICAgZGF0YTogaW5pdD8uYm9keSxcbiAgICAgIGhlYWRlcnM6IGxvd2VyQ2FzZWRIZWFkZXJzLFxuICAgICAgLy8gRm9yY2UgdGhlIHJlc3BvbnNlIHRvIGFuIGFycmF5YnVmZmVyIHR5cGUuIFdpdGhvdXQgdGhpcywgdGhlIFJlc3BvbnNlXG4gICAgICAvLyBvYmplY3Qgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBhbmQgYWRkIGhlYWRlcnMgdGhhdCB3ZXJlbid0IGluXG4gICAgICAvLyB0aGUgcmVzcG9uc2UuXG4gICAgICAvLyBOT1RFOiBEb24ndCB1c2UgJ3N0cmVhbScgYmVjYXVzZSBpdCdzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICAgIH07XG5cbiAgICBjb25zdCBjb25maWcgPSB0cmFuc2Zvcm1lcihyYXdDb25maWcsIGlucHV0LCBpbml0KTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGF4aW9zLnJlcXVlc3QoY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICByZXN1bHQgPSBlcnIucmVzcG9uc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXN1bHQuZGF0YSwge1xuICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogcmVzdWx0LnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiBjcmVhdGVGZXRjaEhlYWRlcnMocmVzdWx0LmhlYWRlcnMpXG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBidWlsZEF4aW9zRmV0Y2ggPSA8SW5pdCBleHRlbmRzIFJlcXVlc3RJbml0ID0gUmVxdWVzdEluaXQ+IChcbiAgYXhpb3M6IEF4aW9zSW5zdGFuY2UsXG4gIHRyYW5zZm9ybWVyPzogQXhpb3NUcmFuc2Zvcm1lcjxJbml0PlxuKSA9PiBheGlvc0ZldGNoKGF4aW9zLCB0cmFuc2Zvcm1lcik7XG4iXX0=

@@ -1,76 +0,67 @@

import { Response, Headers as FetchHeaders } from 'node-fetch';
import FormData from 'form-data';
import { AxiosInstance, AxiosRequestConfig } from './types';
import {
createAxiosHeaders,
createFetchHeaders,
getUrl
} from './typeUtils';
import { AxiosInstance, AxiosRequestConfig } from './axios-types';
export interface FetchInit extends Record<string, any> {
headers?: Record<string, string>;
method?: AxiosRequestConfig['method'];
body?: FormData | any;
extra?: any;
}
export type AxiosTransformer<Init extends RequestInit = RequestInit> =
(config: AxiosRequestConfig, input: RequestInfo, init?: Init) => AxiosRequestConfig;
export type AxiosTransformer = (config: AxiosRequestConfig, input: string | undefined, init: FetchInit) => AxiosRequestConfig;
export type AxiosFetch = (input?: string, init?: FetchInit) => Promise<Response>;
/**
* A Fetch WebAPI implementation based on the Axios client
*/
async function axiosFetch (
const axiosFetch = <Init extends RequestInit = RequestInit>(
axios: AxiosInstance,
// Convert the `fetch` style arguments into a Axios style config
transformer?: AxiosTransformer,
input?: string,
init: FetchInit = {}
) {
const rawHeaders: Record<string, string> = init.headers || {};
const lowerCasedHeaders = Object.keys(rawHeaders).filter(key => key && rawHeaders[key])
.reduce<Record<string, string>>(
(acc, key) => {
acc[key.toLowerCase()] = rawHeaders[key] as string;
return acc;
},
{}
);
transformer: AxiosTransformer<Init> = (config) => config
) => async (
input: RequestInfo,
init?: Init
) => {
const rawHeaders = createAxiosHeaders(init?.headers);
const lowerCasedHeaders: Record<string, string> = {};
Object.entries(rawHeaders).forEach(([name, value]) => {
lowerCasedHeaders[name.toLowerCase()] = value;
});
if (!('content-type' in lowerCasedHeaders)) {
lowerCasedHeaders['content-type'] = 'text/plain;charset=UTF-8';
}
if (!('content-type' in lowerCasedHeaders)) {
lowerCasedHeaders['content-type'] = 'text/plain;charset=UTF-8';
}
const rawConfig: AxiosRequestConfig = {
url: input,
method: init.method || 'GET',
data: typeof init.body === 'undefined' || init.body instanceof FormData ? init.body : String(init.body),
headers: lowerCasedHeaders,
// Force the response to an arraybuffer type. Without this, the Response
// object will try to guess the content type and add headers that weren't in
// the response.
// NOTE: Don't use 'stream' because it's not supported in the browser
responseType: 'arraybuffer'
};
const rawConfig: AxiosRequestConfig = {
url: getUrl(input),
method: (init?.method as AxiosRequestConfig['method']) || 'GET',
data: init?.body,
headers: lowerCasedHeaders,
// Force the response to an arraybuffer type. Without this, the Response
// object will try to guess the content type and add headers that weren't in
// the response.
// NOTE: Don't use 'stream' because it's not supported in the browser
responseType: 'arraybuffer'
};
const config = transformer ? transformer(rawConfig, input, init) : rawConfig;
const config = transformer(rawConfig, input, init);
let result;
try {
result = await axios.request(config);
} catch (err: any) {
if (err.response) {
result = err.response;
} else {
throw err;
let result;
try {
result = await axios.request(config);
} catch (err: any) {
if (err.response) {
result = err.response;
} else {
throw err;
}
}
}
const fetchHeaders = new FetchHeaders(result.headers);
return new Response(result.data, {
status: result.status,
statusText: result.statusText,
headers: createFetchHeaders(result.headers)
});
};
return new Response(result.data, {
status: result.status,
statusText: result.statusText,
headers: fetchHeaders
});
}
export function buildAxiosFetch (axios: AxiosInstance, transformer?: AxiosTransformer): AxiosFetch {
return axiosFetch.bind(undefined, axios, transformer);
}
export const buildAxiosFetch = <Init extends RequestInit = RequestInit> (
axios: AxiosInstance,
transformer?: AxiosTransformer<Init>
) => axiosFetch(axios, transformer);
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc