@scrypted/auth-fetch 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/auth-fetch/src/index.d.ts +2 -1
- package/dist/packages/auth-fetch/src/index.js +5 -3
- package/dist/packages/auth-fetch/src/index.js.map +1 -1
- package/dist/server/src/fetch/index.js +1 -1
- package/dist/server/src/fetch/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +4 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
|
-
import type { Readable } from "stream";
|
|
5
4
|
import type { IncomingMessage } from "http";
|
|
5
|
+
import type { Readable } from "stream";
|
|
6
|
+
export { httpFetch } from '../../../server/src/fetch/http-fetch';
|
|
6
7
|
export declare const authFetch: <T extends import("../../../server/src/fetch").HttpFetchOptions<Readable>>(options: T & import("./auth-fetch").AuthFetchOptions) => Promise<import("../../../server/src/fetch").HttpFetchResponse<T extends import("../../../server/src/fetch").HttpFetchBufferOptions<Readable> ? Buffer : T extends import("../../../server/src/fetch").HttpFetchTextOptions<Readable> ? string : T extends import("../../../server/src/fetch").HttpFetchReadableOptions<Readable> ? IncomingMessage : T extends import("../../../server/src/fetch").HttpFetchJsonOptions<Readable> ? any : Buffer>>;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.authFetch = void 0;
|
|
4
|
-
const auth_fetch_1 = require("./auth-fetch");
|
|
5
|
-
const http_fetch_1 = require("../../../server/src/fetch/http-fetch");
|
|
3
|
+
exports.authFetch = exports.httpFetch = void 0;
|
|
6
4
|
const fetch_1 = require("../../../server/src/fetch");
|
|
5
|
+
const http_fetch_1 = require("../../../server/src/fetch/http-fetch");
|
|
6
|
+
const auth_fetch_1 = require("./auth-fetch");
|
|
7
|
+
var http_fetch_2 = require("../../../server/src/fetch/http-fetch");
|
|
8
|
+
Object.defineProperty(exports, "httpFetch", { enumerable: true, get: function () { return http_fetch_2.httpFetch; } });
|
|
7
9
|
function init() {
|
|
8
10
|
try {
|
|
9
11
|
require('net');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";;;AAEA,qDAAmF;AACnF,qEAAgG;AAChG,6CAA+C;AAC/C,mEAAiE;AAAxD,uGAAA,SAAS,OAAA;AAElB,SAAS,IAAI;IACT,IAAI,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAA,4BAAe,EAA4B,sBAAS,EAAE,0CAA6B,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;IACX,CAAC;IAED,OAAO,IAAA,4BAAe,EAAqB,gBAAQ,EAAE,oCAA4B,CAAC,CAAC;AACvF,CAAC;AAEY,QAAA,SAAS,GAAG,IAAI,EAAE,CAAC","sourcesContent":["import type { IncomingMessage } from \"http\";\nimport type { Readable } from \"stream\";\nimport { domFetch, domFetchParseIncomingMessage } from \"../../../server/src/fetch\";\nimport { httpFetch, httpFetchParseIncomingMessage } from '../../../server/src/fetch/http-fetch';\nimport { createAuthFetch } from \"./auth-fetch\";\nexport { httpFetch } from '../../../server/src/fetch/http-fetch';\n\nfunction init() {\n try {\n require('net');\n require('events');\n return createAuthFetch<Readable, IncomingMessage>(httpFetch, httpFetchParseIncomingMessage);\n }\n catch (e) {\n }\n\n return createAuthFetch<BodyInit, Response>(domFetch, domFetchParseIncomingMessage);\n}\n\nexport const authFetch = init();\n"]}
|
|
@@ -82,7 +82,7 @@ exports.createHeadersArray = createHeadersArray;
|
|
|
82
82
|
*/
|
|
83
83
|
function createStringOrBufferBody(headers, body) {
|
|
84
84
|
let contentType;
|
|
85
|
-
if (typeof body === 'object') {
|
|
85
|
+
if (typeof body === 'object' && !ArrayBuffer.isView(body)) {
|
|
86
86
|
body = JSON.stringify(body);
|
|
87
87
|
contentType = 'application/json';
|
|
88
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../server/src/fetch/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type HttpFetchResponseType = 'json' | 'text' | 'buffer' | 'readable';\nexport interface HttpFetchOptionsBase<B> {\n url: string | URL;\n family?: 4 | 6;\n method?: string;\n headers?: HeadersInit;\n signal?: AbortSignal,\n timeout?: number;\n rejectUnauthorized?: boolean;\n /**\n * Checks the status code. Defaults to true.\n */\n checkStatusCode?: boolean | ((statusCode: number) => boolean);\n body?: B | string | ArrayBufferView | any;\n withCredentials?: boolean;\n}\n\nexport interface HttpFetchJsonOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'json';\n}\n\nexport interface HttpFetchBufferOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'buffer';\n}\n\nexport interface HttpFetchDefaultOptions<B> extends HttpFetchOptionsBase<B> {\n responseType?: undefined;\n}\n\nexport interface HttpFetchTextOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'text';\n}\nexport interface HttpFetchReadableOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'readable';\n}\n\nexport type HttpFetchOptions<B> = HttpFetchJsonOptions<B> | HttpFetchBufferOptions<B> | HttpFetchDefaultOptions<B> | HttpFetchTextOptions<B> | HttpFetchReadableOptions<B>;\n\nexport function fetchStatusCodeOk(statusCode: number) {\n return statusCode >= 200 && statusCode <= 299;\n}\n\nexport function checkStatus(statusCode: number) {\n if (!fetchStatusCodeOk(statusCode))\n throw new Error(`http response statusCode ${statusCode}`);\n return true;\n}\n\nexport function getFetchMethod(options: HttpFetchOptions<any>) {\n const method = options.method || (options.body ? 'POST' : 'GET');\n return method;\n}\n\nexport interface HttpFetchResponse<T> {\n statusCode: number;\n headers: Headers;\n body: T;\n}\n\nexport type fetcher<B, M> = <T extends HttpFetchOptions<B>>(options: T) => Promise<HttpFetchResponse<\n // first one serves as default.\n T extends HttpFetchBufferOptions<B> ? Buffer\n : T extends HttpFetchTextOptions<B> ? string\n : T extends HttpFetchReadableOptions<B> ? M\n : T extends HttpFetchJsonOptions<B> ? any : Buffer\n>>;\n\n\nexport function getHttpFetchAccept(responseType: HttpFetchResponseType | undefined) {\n switch (responseType) {\n case 'json':\n return 'application/json';\n case 'text':\n return 'text/plain';\n }\n return;\n}\n\nexport function hasHeader(headers: [string, string][], key: string) {\n key = key.toLowerCase();\n return headers.find(([k]) => k.toLowerCase() === key);\n}\n\nexport function removeHeader(headers: [string, string][], key: string) {\n key = key.toLowerCase();\n const filteredHeaders = headers.filter(([headerKey, _]) => headerKey.toLowerCase() !== key);\n headers.length = 0;\n filteredHeaders.forEach(header => headers.push(header));\n}\n\nexport function setHeader(headers: [string, string][], key: string, value: string) {\n removeHeader(headers, key);\n headers.push([key, value]);\n}\n\nexport function setDefaultHttpFetchAccept(headers: [string, string][], responseType: HttpFetchResponseType | undefined) {\n if (hasHeader(headers, 'Accept'))\n return;\n const accept = getHttpFetchAccept(responseType);\n if (accept)\n setHeader(headers, 'Accept', accept);\n}\n\nexport function createHeadersArray(headers: HeadersInit | undefined): [string, string][] {\n const headersArray: [string, string][] = [];\n if (!headers)\n return headersArray;\n if (headers instanceof Headers) {\n for (const [k, v] of headers.entries()) {\n headersArray.push([k, v]);\n }\n return headersArray;\n }\n\n if (headers instanceof Array) {\n for (const [k, v] of headers) {\n headersArray.push([k, v]);\n }\n return headersArray;\n }\n\n for (const k of Object.keys(headers)) {\n const v = headers[k];\n headersArray.push([k, v]);\n }\n\n return headersArray;\n}\n\n/**\n *\n * @param headers\n * @param body\n * @returns Returns the body and Content-Type header that was set.\n */\nexport function createStringOrBufferBody(headers: [string, string][], body: any) {\n let contentType: string | undefined;\n if (typeof body === 'object') {\n body = JSON.stringify(body);\n contentType = 'application/json';\n }\n else if (typeof body === 'string') {\n contentType = 'text/plain';\n }\n\n if (contentType && !hasHeader(headers, 'Content-Type'))\n setHeader(headers, 'Content-Type', contentType);\n\n if (!hasHeader(headers, 'Content-Length')) {\n body = Buffer.from(body);\n setHeader(headers, 'Content-Length', body.length.toString());\n }\n return body;\n}\n\nexport async function domFetchParseIncomingMessage(response: Response, responseType: HttpFetchResponseType | undefined) {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'text':\n return response.text();\n case 'readable':\n return response;\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport async function domFetch<T extends HttpFetchOptions<BodyInit>>(options: T): Promise<HttpFetchResponse<\n // first one serves as default.\n T extends HttpFetchBufferOptions<BodyInit> ? Buffer\n : T extends HttpFetchTextOptions<BodyInit> ? string\n : T extends HttpFetchReadableOptions<BodyInit> ? Response\n : T extends HttpFetchJsonOptions<BodyInit> ? any : Buffer\n>> {\n const headers = createHeadersArray(options.headers);\n setDefaultHttpFetchAccept(headers, options.responseType);\n\n let { body } = options;\n if (body && !(body instanceof ReadableStream)) {\n body = createStringOrBufferBody(headers, body);\n }\n\n let controller: AbortController | undefined;\n let timeout: NodeJS.Timeout;\n if (options.timeout) {\n controller = new AbortController();\n timeout = setTimeout(() => controller!.abort(), options.timeout);\n\n options.signal?.addEventListener('abort', () => controller!.abort(options.signal?.reason));\n }\n\n try {\n const { url } = options;\n const response = await fetch(url, {\n method: getFetchMethod(options),\n credentials: options.withCredentials ? 'include' : undefined,\n headers,\n signal: controller?.signal || options.signal,\n body,\n });\n\n if (options?.checkStatusCode === undefined || options?.checkStatusCode) {\n try {\n const checker = typeof options?.checkStatusCode === 'function' ? options.checkStatusCode : checkStatus;\n if (!checker(response.status))\n throw new Error(`http response statusCode ${response.status}`);\n }\n catch (e) {\n response.arrayBuffer().catch(() => { });\n throw e;\n }\n }\n\n return {\n statusCode: response.status,\n headers: response.headers,\n body: await domFetchParseIncomingMessage(response, options.responseType),\n };\n }\n finally {\n clearTimeout(timeout!);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../server/src/fetch/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type HttpFetchResponseType = 'json' | 'text' | 'buffer' | 'readable';\nexport interface HttpFetchOptionsBase<B> {\n url: string | URL;\n family?: 4 | 6;\n method?: string;\n headers?: HeadersInit;\n signal?: AbortSignal,\n timeout?: number;\n rejectUnauthorized?: boolean;\n /**\n * Checks the status code. Defaults to true.\n */\n checkStatusCode?: boolean | ((statusCode: number) => boolean);\n body?: B | string | ArrayBufferView | any;\n withCredentials?: boolean;\n}\n\nexport interface HttpFetchJsonOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'json';\n}\n\nexport interface HttpFetchBufferOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'buffer';\n}\n\nexport interface HttpFetchDefaultOptions<B> extends HttpFetchOptionsBase<B> {\n responseType?: undefined;\n}\n\nexport interface HttpFetchTextOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'text';\n}\nexport interface HttpFetchReadableOptions<B> extends HttpFetchOptionsBase<B> {\n responseType: 'readable';\n}\n\nexport type HttpFetchOptions<B> = HttpFetchJsonOptions<B> | HttpFetchBufferOptions<B> | HttpFetchDefaultOptions<B> | HttpFetchTextOptions<B> | HttpFetchReadableOptions<B>;\n\nexport function fetchStatusCodeOk(statusCode: number) {\n return statusCode >= 200 && statusCode <= 299;\n}\n\nexport function checkStatus(statusCode: number) {\n if (!fetchStatusCodeOk(statusCode))\n throw new Error(`http response statusCode ${statusCode}`);\n return true;\n}\n\nexport function getFetchMethod(options: HttpFetchOptions<any>) {\n const method = options.method || (options.body ? 'POST' : 'GET');\n return method;\n}\n\nexport interface HttpFetchResponse<T> {\n statusCode: number;\n headers: Headers;\n body: T;\n}\n\nexport type fetcher<B, M> = <T extends HttpFetchOptions<B>>(options: T) => Promise<HttpFetchResponse<\n // first one serves as default.\n T extends HttpFetchBufferOptions<B> ? Buffer\n : T extends HttpFetchTextOptions<B> ? string\n : T extends HttpFetchReadableOptions<B> ? M\n : T extends HttpFetchJsonOptions<B> ? any : Buffer\n>>;\n\n\nexport function getHttpFetchAccept(responseType: HttpFetchResponseType | undefined) {\n switch (responseType) {\n case 'json':\n return 'application/json';\n case 'text':\n return 'text/plain';\n }\n return;\n}\n\nexport function hasHeader(headers: [string, string][], key: string) {\n key = key.toLowerCase();\n return headers.find(([k]) => k.toLowerCase() === key);\n}\n\nexport function removeHeader(headers: [string, string][], key: string) {\n key = key.toLowerCase();\n const filteredHeaders = headers.filter(([headerKey, _]) => headerKey.toLowerCase() !== key);\n headers.length = 0;\n filteredHeaders.forEach(header => headers.push(header));\n}\n\nexport function setHeader(headers: [string, string][], key: string, value: string) {\n removeHeader(headers, key);\n headers.push([key, value]);\n}\n\nexport function setDefaultHttpFetchAccept(headers: [string, string][], responseType: HttpFetchResponseType | undefined) {\n if (hasHeader(headers, 'Accept'))\n return;\n const accept = getHttpFetchAccept(responseType);\n if (accept)\n setHeader(headers, 'Accept', accept);\n}\n\nexport function createHeadersArray(headers: HeadersInit | undefined): [string, string][] {\n const headersArray: [string, string][] = [];\n if (!headers)\n return headersArray;\n if (headers instanceof Headers) {\n for (const [k, v] of headers.entries()) {\n headersArray.push([k, v]);\n }\n return headersArray;\n }\n\n if (headers instanceof Array) {\n for (const [k, v] of headers) {\n headersArray.push([k, v]);\n }\n return headersArray;\n }\n\n for (const k of Object.keys(headers)) {\n const v = headers[k];\n headersArray.push([k, v]);\n }\n\n return headersArray;\n}\n\n/**\n *\n * @param headers\n * @param body\n * @returns Returns the body and Content-Type header that was set.\n */\nexport function createStringOrBufferBody(headers: [string, string][], body: any) {\n let contentType: string | undefined;\n if (typeof body === 'object' && !ArrayBuffer.isView(body)) {\n body = JSON.stringify(body);\n contentType = 'application/json';\n }\n else if (typeof body === 'string') {\n contentType = 'text/plain';\n }\n\n if (contentType && !hasHeader(headers, 'Content-Type'))\n setHeader(headers, 'Content-Type', contentType);\n\n if (!hasHeader(headers, 'Content-Length')) {\n body = Buffer.from(body);\n setHeader(headers, 'Content-Length', body.length.toString());\n }\n return body;\n}\n\nexport async function domFetchParseIncomingMessage(response: Response, responseType: HttpFetchResponseType | undefined) {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'text':\n return response.text();\n case 'readable':\n return response;\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport async function domFetch<T extends HttpFetchOptions<BodyInit>>(options: T): Promise<HttpFetchResponse<\n // first one serves as default.\n T extends HttpFetchBufferOptions<BodyInit> ? Buffer\n : T extends HttpFetchTextOptions<BodyInit> ? string\n : T extends HttpFetchReadableOptions<BodyInit> ? Response\n : T extends HttpFetchJsonOptions<BodyInit> ? any : Buffer\n>> {\n const headers = createHeadersArray(options.headers);\n setDefaultHttpFetchAccept(headers, options.responseType);\n\n let { body } = options;\n if (body && !(body instanceof ReadableStream)) {\n body = createStringOrBufferBody(headers, body);\n }\n\n let controller: AbortController | undefined;\n let timeout: NodeJS.Timeout;\n if (options.timeout) {\n controller = new AbortController();\n timeout = setTimeout(() => controller!.abort(), options.timeout);\n\n options.signal?.addEventListener('abort', () => controller!.abort(options.signal?.reason));\n }\n\n try {\n const { url } = options;\n const response = await fetch(url, {\n method: getFetchMethod(options),\n credentials: options.withCredentials ? 'include' : undefined,\n headers,\n signal: controller?.signal || options.signal,\n body,\n });\n\n if (options?.checkStatusCode === undefined || options?.checkStatusCode) {\n try {\n const checker = typeof options?.checkStatusCode === 'function' ? options.checkStatusCode : checkStatus;\n if (!checker(response.status))\n throw new Error(`http response statusCode ${response.status}`);\n }\n catch (e) {\n response.arrayBuffer().catch(() => { });\n throw e;\n }\n }\n\n return {\n statusCode: response.status,\n headers: response.headers,\n body: await domFetchParseIncomingMessage(response, options.responseType),\n };\n }\n finally {\n clearTimeout(timeout!);\n }\n}\n"]}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { createAuthFetch } from "./auth-fetch";
|
|
2
|
-
import { httpFetch, httpFetchParseIncomingMessage } from '../../../server/src/fetch/http-fetch';
|
|
3
|
-
import type { Readable } from "stream";
|
|
4
1
|
import type { IncomingMessage } from "http";
|
|
2
|
+
import type { Readable } from "stream";
|
|
5
3
|
import { domFetch, domFetchParseIncomingMessage } from "../../../server/src/fetch";
|
|
4
|
+
import { httpFetch, httpFetchParseIncomingMessage } from '../../../server/src/fetch/http-fetch';
|
|
5
|
+
import { createAuthFetch } from "./auth-fetch";
|
|
6
|
+
export { httpFetch } from '../../../server/src/fetch/http-fetch';
|
|
6
7
|
|
|
7
8
|
function init() {
|
|
8
9
|
try {
|