@superfaceai/one-sdk
Advanced tools
Comparing version 2.0.0 to 2.1.0-rc.0
@@ -9,3 +9,10 @@ # Changelog | ||
## [Unreleased] | ||
### Fixed | ||
- Do not set `Accept` and `Content-Type` header when defined in [HTTP request headers](https://spec.superface.dev/latest/map-spec.html#HTTPHeaders) - [#264](https://github.com/superfaceai/one-sdk-js/issues/264) | ||
- Replaced `isomorphic-form-data` with `form-data` package to fix `FormData` serialization - [#291](https://github.com/superfaceai/one-sdk-js/issues/291) | ||
- Create valid `headersInit` shape in `NodeFetch.fetch` | ||
### Added | ||
- `multipart/form-data` supports array values to define duplicate fields | ||
## [2.0.0] - 2022-08-15 | ||
@@ -12,0 +19,0 @@ ### Added |
@@ -210,3 +210,6 @@ "use strict"; | ||
else if (parameters.contentType === interfaces_1.FORMDATA_CONTENT) { | ||
finalBody = interfaces_1.formDataBody(lib_1.variablesToStrings(parameters.body)); | ||
var body = lib_1.castToNonPrimitive(parameters.body); | ||
if (body) { | ||
finalBody = interfaces_1.formDataBody(body); | ||
} | ||
} | ||
@@ -262,12 +265,12 @@ else if (parameters.contentType !== undefined && | ||
var headersFilter = function (_a) { | ||
var _b, _c, _d, _e, _f, _g; | ||
var _b, _c, _d; | ||
var parameters = _a.parameters, request = _a.request, response = _a.response; | ||
var headers = parameters.headers || {}; | ||
headers['accept'] = (_b = parameters.accept) !== null && _b !== void 0 ? _b : '*/*'; | ||
(_c = headers['user-agent']) !== null && _c !== void 0 ? _c : (headers['user-agent'] = user_agent_1.USER_AGENT); | ||
var headers = (_b = parameters.headers) !== null && _b !== void 0 ? _b : {}; | ||
utils_1.setHeader(headers, 'user-agent', user_agent_1.USER_AGENT); | ||
utils_1.setHeader(headers, 'accept', (_c = parameters.accept) !== null && _c !== void 0 ? _c : '*/*'); | ||
if (parameters.contentType === interfaces_1.JSON_CONTENT) { | ||
(_d = headers['content-type']) !== null && _d !== void 0 ? _d : (headers['content-type'] = interfaces_1.JSON_CONTENT); | ||
utils_1.setHeader(headers, 'content-type', interfaces_1.JSON_CONTENT); | ||
} | ||
else if (parameters.contentType === interfaces_1.URLENCODED_CONTENT) { | ||
(_e = headers['content-type']) !== null && _e !== void 0 ? _e : (headers['content-type'] = interfaces_1.URLENCODED_CONTENT); | ||
utils_1.setHeader(headers, 'content-type', interfaces_1.URLENCODED_CONTENT); | ||
} | ||
@@ -279,3 +282,3 @@ else if (parameters.contentType === interfaces_1.FORMDATA_CONTENT) { | ||
interfaces_1.BINARY_CONTENT_REGEXP.test(parameters.contentType)) { | ||
(_f = headers['Content-Type']) !== null && _f !== void 0 ? _f : (headers['Content-Type'] = parameters.contentType); | ||
utils_1.setHeader(headers, 'content-type', parameters.contentType); | ||
} | ||
@@ -289,3 +292,3 @@ else { | ||
], __read(interfaces_1.BINARY_CONTENT_TYPES)); | ||
throw errors_1.unsupportedContentType((_g = parameters.contentType) !== null && _g !== void 0 ? _g : '', supportedTypes); | ||
throw errors_1.unsupportedContentType((_d = parameters.contentType) !== null && _d !== void 0 ? _d : '', supportedTypes); | ||
} | ||
@@ -292,0 +295,0 @@ } |
@@ -8,3 +8,3 @@ /// <reference types="node" /> | ||
_type: 'formdata'; | ||
data: Record<string, string>; | ||
data: Record<string, unknown>; | ||
}; | ||
@@ -20,3 +20,3 @@ declare type BinaryBody = { | ||
export declare const stringBody: (data: string) => StringBody; | ||
export declare const formDataBody: (data: Record<string, string>) => FormDataBody; | ||
export declare const formDataBody: (data: Record<string, unknown>) => FormDataBody; | ||
export declare const urlSearchParamsBody: (data: Record<string, string>) => URLSearchParamsBody; | ||
@@ -23,0 +23,0 @@ export declare const binaryBody: (data: Buffer) => BinaryBody; |
@@ -12,1 +12,14 @@ import type { ILogger } from '../../../interfaces'; | ||
export declare function fetchRequest(fetchInstance: IFetch, request: HttpRequest, logger?: ILogger): Promise<HttpResponse>; | ||
/** | ||
* Get header value. For duplicate headers all delimited by `,` are returned | ||
*/ | ||
export declare function getHeader(headers: NonPrimitive, headerName: string): string; | ||
/** | ||
* Checks in case-insensitive way if the given header is present | ||
*/ | ||
export declare function hasHeader(headers: NonPrimitive, headerName: string): boolean; | ||
export declare function setHeader(headers: NonPrimitive, headerName: string, value: string): void; | ||
/** | ||
* Deletes header | ||
*/ | ||
export declare function deleteHeader(headers: NonPrimitive, headerName: string): void; |
@@ -66,3 +66,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.fetchRequest = exports.createUrl = void 0; | ||
exports.deleteHeader = exports.setHeader = exports.hasHeader = exports.getHeader = exports.fetchRequest = exports.createUrl = void 0; | ||
var lib_1 = require("../../../lib"); | ||
@@ -185,2 +185,40 @@ var errors_1 = require("../../errors"); | ||
exports.fetchRequest = fetchRequest; | ||
/** | ||
* Get header value. For duplicate headers all delimited by `,` are returned | ||
*/ | ||
function getHeader(headers, headerName) { | ||
var values = Object.entries(headers).flatMap(function (_a) { | ||
var _b = __read(_a, 2), key = _b[0], value = _b[1]; | ||
if (key.toLowerCase() === headerName.toLowerCase()) { | ||
return value; | ||
} | ||
return undefined; | ||
}).filter(function (value) { return value !== undefined; }); | ||
return values.join(', '); | ||
} | ||
exports.getHeader = getHeader; | ||
/** | ||
* Checks in case-insensitive way if the given header is present | ||
*/ | ||
function hasHeader(headers, headerName) { | ||
return Object.keys(headers).some(function (header) { return header.toLowerCase() === headerName.toLowerCase(); }); | ||
} | ||
exports.hasHeader = hasHeader; | ||
function setHeader(headers, headerName, value) { | ||
if (!hasHeader(headers, headerName)) { | ||
headers[headerName] = value; | ||
} | ||
} | ||
exports.setHeader = setHeader; | ||
/** | ||
* Deletes header | ||
*/ | ||
function deleteHeader(headers, headerName) { | ||
Object.keys(headers).forEach(function (header) { | ||
if (header.toLowerCase() === headerName.toLowerCase()) { | ||
delete headers[header]; | ||
} | ||
}); | ||
} | ||
exports.deleteHeader = deleteHeader; | ||
//# sourceMappingURL=utils.js.map |
@@ -276,3 +276,2 @@ "use strict"; | ||
}); | ||
accept = ''; | ||
if (responseHandlers.some(function (_a) { | ||
@@ -279,0 +278,0 @@ var _b = __read(_a, 2), accept = _b[1]; |
@@ -1,2 +0,1 @@ | ||
import 'isomorphic-form-data'; | ||
import type { AuthCache, Events, FetchResponse, IFetch, Interceptable, InterceptableMetadata, ITimers } from '../../core'; | ||
@@ -19,2 +18,3 @@ import { FetchParameters } from '../../core'; | ||
private isBinaryContent; | ||
private prepareHeadersInit; | ||
} |
@@ -93,7 +93,2 @@ "use strict"; | ||
}; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
}; | ||
var __values = (this && this.__values) || function(o) { | ||
@@ -110,7 +105,10 @@ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.NodeFetch = void 0; | ||
require("isomorphic-form-data"); | ||
var abort_controller_1 = require("abort-controller"); | ||
var cross_fetch_1 = __importStar(require("cross-fetch")); | ||
var form_data_1 = __importDefault(require("form-data")); | ||
var core_1 = require("../../core"); | ||
@@ -130,13 +128,8 @@ var events_1 = require("../../core/events/events"); | ||
case 0: | ||
headersInit = parameters.headers | ||
? Object.entries(parameters.headers).map(function (_a) { | ||
var _b = __read(_a, 2), key = _b[0], value = _b[1]; | ||
return __spreadArray([ | ||
key | ||
], __read((Array.isArray(value) ? value : [value]))); | ||
}) | ||
: undefined; | ||
headersInit = this.prepareHeadersInit(parameters.headers); | ||
request = { | ||
headers: new cross_fetch_1.Headers(headersInit), | ||
method: parameters.method, | ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
// @ts-ignore https://github.com/form-data/form-data/issues/513 | ||
body: this.body(parameters.body), | ||
@@ -261,7 +254,12 @@ }; | ||
NodeFetch.prototype.formData = function (data) { | ||
var formData = new FormData(); | ||
var formData = new form_data_1.default(); | ||
if (data) { | ||
Object.entries(data).forEach(function (_a) { | ||
var _b = __read(_a, 2), key = _b[0], value = _b[1]; | ||
return formData.append(key, value); | ||
if (Array.isArray(value)) { | ||
value.forEach(function (item) { return formData.append(key, item); }); | ||
} | ||
else { | ||
formData.append(key, value); | ||
} | ||
}); | ||
@@ -305,2 +303,18 @@ } | ||
}; | ||
NodeFetch.prototype.prepareHeadersInit = function (data) { | ||
if (data === undefined) { | ||
return []; | ||
} | ||
var headers = []; | ||
Object.entries(data).forEach(function (_a) { | ||
var _b = __read(_a, 2), key = _b[0], value = _b[1]; | ||
if (Array.isArray(value)) { | ||
value.forEach(function (val) { return headers.push([key, val]); }); | ||
} | ||
else { | ||
headers.push([key, value]); | ||
} | ||
}); | ||
return headers; | ||
}; | ||
__decorate([ | ||
@@ -307,0 +321,0 @@ events_1.eventInterceptor({ |
{ | ||
"name": "@superfaceai/one-sdk", | ||
"version": "2.0.0", | ||
"version": "2.1.0-rc.0", | ||
"description": "OneSDK is a universal API client which provides an unparalleled developer experience for every HTTP API", | ||
@@ -73,5 +73,5 @@ "license": "MIT", | ||
"debug": "^4.3.2", | ||
"isomorphic-form-data": "^2.0.0", | ||
"form-data": "^4.0.0", | ||
"vm2": "^3.9.7" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
959588
14394
1
+ Addedform-data@^4.0.0
+ Addedform-data@4.0.2(transitive)
- Removedisomorphic-form-data@^2.0.0
- Removedform-data@2.5.3(transitive)
- Removedisomorphic-form-data@2.0.0(transitive)
- Removedsafe-buffer@5.2.1(transitive)