@workos-inc/node 7.5.0-beta.node-compatibility → 7.6.0

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.
Files changed (55) hide show
  1. package/README.md +0 -4
  2. package/lib/common/interfaces/event.interface.d.ts +19 -3
  3. package/lib/common/interfaces/index.d.ts +0 -1
  4. package/lib/common/interfaces/index.js +0 -1
  5. package/lib/common/interfaces/workos-options.interface.d.ts +0 -1
  6. package/lib/common/serializers/event.serializer.js +4 -0
  7. package/lib/common/utils/fetch-client.d.ts +31 -0
  8. package/lib/common/utils/fetch-client.js +108 -0
  9. package/lib/user-management/fixtures/email_verification.json +10 -0
  10. package/lib/user-management/fixtures/invitation.json +1 -1
  11. package/lib/user-management/fixtures/list-invitations.json +1 -1
  12. package/lib/user-management/fixtures/password_reset.json +10 -0
  13. package/lib/user-management/interfaces/create-password-reset-options.interface.d.ts +6 -0
  14. package/lib/user-management/interfaces/email-verification.interface.d.ts +38 -0
  15. package/lib/user-management/interfaces/email-verification.interface.js +2 -0
  16. package/lib/user-management/interfaces/index.d.ts +3 -0
  17. package/lib/user-management/interfaces/index.js +3 -0
  18. package/lib/user-management/interfaces/password-reset.interface.d.ts +36 -0
  19. package/lib/user-management/interfaces/password-reset.interface.js +2 -0
  20. package/lib/user-management/serializers/create-password-reset-options.serializer.d.ts +2 -0
  21. package/lib/user-management/serializers/create-password-reset-options.serializer.js +7 -0
  22. package/lib/user-management/serializers/email-verification.serializer.d.ts +3 -0
  23. package/lib/user-management/serializers/email-verification.serializer.js +24 -0
  24. package/lib/user-management/serializers/index.d.ts +3 -0
  25. package/lib/user-management/serializers/index.js +3 -0
  26. package/lib/user-management/serializers/password-reset.serializer.d.ts +3 -0
  27. package/lib/user-management/serializers/password-reset.serializer.js +23 -0
  28. package/lib/user-management/user-management.d.ts +7 -1
  29. package/lib/user-management/user-management.js +21 -0
  30. package/lib/user-management/user-management.spec.js +57 -0
  31. package/lib/webhooks/webhooks.d.ts +2 -2
  32. package/lib/webhooks/webhooks.js +37 -11
  33. package/lib/webhooks/webhooks.spec.js +0 -29
  34. package/lib/workos.d.ts +1 -1
  35. package/lib/workos.js +12 -18
  36. package/lib/workos.spec.js +3 -56
  37. package/package.json +4 -3
  38. package/lib/common/crypto/CryptoProvider.d.ts +0 -32
  39. package/lib/common/crypto/CryptoProvider.js +0 -13
  40. package/lib/common/crypto/NodeCryptoProvider.d.ts +0 -12
  41. package/lib/common/crypto/NodeCryptoProvider.js +0 -73
  42. package/lib/common/crypto/SubtleCryptoProvider.d.ts +0 -15
  43. package/lib/common/crypto/SubtleCryptoProvider.js +0 -75
  44. package/lib/common/crypto/index.d.ts +0 -3
  45. package/lib/common/crypto/index.js +0 -19
  46. package/lib/common/interfaces/http-client.interface.d.ts +0 -20
  47. package/lib/common/net/fetch-client.d.ts +0 -22
  48. package/lib/common/net/fetch-client.js +0 -112
  49. package/lib/common/net/http-client.d.ts +0 -39
  50. package/lib/common/net/http-client.js +0 -76
  51. package/lib/common/net/index.d.ts +0 -5
  52. package/lib/common/net/index.js +0 -31
  53. package/lib/common/net/node-client.d.ts +0 -23
  54. package/lib/common/net/node-client.js +0 -155
  55. /package/lib/{common/interfaces/http-client.interface.js → user-management/interfaces/create-password-reset-options.interface.js} +0 -0
@@ -1,75 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SubtleCryptoProvider = void 0;
13
- const CryptoProvider_1 = require("./CryptoProvider");
14
- /**
15
- * `CryptoProvider which uses the SubtleCrypto interface of the Web Crypto API.
16
- *
17
- * This only supports asynchronous operations.
18
- */
19
- class SubtleCryptoProvider extends CryptoProvider_1.CryptoProvider {
20
- constructor(subtleCrypto) {
21
- super();
22
- // If no subtle crypto is interface, default to the global namespace. This
23
- // is to allow custom interfaces (eg. using the Node webcrypto interface in
24
- // tests).
25
- this.subtleCrypto = subtleCrypto || crypto.subtle;
26
- }
27
- computeHMACSignature(_payload, _secret) {
28
- throw new Error('SubleCryptoProvider cannot be used in a synchronous context.');
29
- }
30
- /** @override */
31
- computeHMACSignatureAsync(payload, secret) {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- const encoder = new TextEncoder();
34
- const key = yield this.subtleCrypto.importKey('raw', encoder.encode(secret), {
35
- name: 'HMAC',
36
- hash: { name: 'SHA-256' },
37
- }, false, ['sign']);
38
- const signatureBuffer = yield this.subtleCrypto.sign('hmac', key, encoder.encode(payload));
39
- // crypto.subtle returns the signature in base64 format. This must be
40
- // encoded in hex to match the CryptoProvider contract. We map each byte in
41
- // the buffer to its corresponding hex octet and then combine into a string.
42
- const signatureBytes = new Uint8Array(signatureBuffer);
43
- const signatureHexCodes = new Array(signatureBytes.length);
44
- for (let i = 0; i < signatureBytes.length; i++) {
45
- signatureHexCodes[i] = byteHexMapping[signatureBytes[i]];
46
- }
47
- return signatureHexCodes.join('');
48
- });
49
- }
50
- /** @override */
51
- secureCompare(stringA, stringB) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- const bufferA = this.encoder.encode(stringA);
54
- const bufferB = this.encoder.encode(stringB);
55
- if (bufferA.length !== bufferB.length) {
56
- return false;
57
- }
58
- const algorithm = { name: 'HMAC', hash: 'SHA-256' };
59
- const key = (yield crypto.subtle.generateKey(algorithm, false, [
60
- 'sign',
61
- 'verify',
62
- ]));
63
- const hmac = yield crypto.subtle.sign(algorithm, key, bufferA);
64
- const equal = yield crypto.subtle.verify(algorithm, key, hmac, bufferB);
65
- return equal;
66
- });
67
- }
68
- }
69
- exports.SubtleCryptoProvider = SubtleCryptoProvider;
70
- // Cached mapping of byte to hex representation. We do this once to avoid re-
71
- // computing every time we need to convert the result of a signature to hex.
72
- const byteHexMapping = new Array(256);
73
- for (let i = 0; i < byteHexMapping.length; i++) {
74
- byteHexMapping[i] = i.toString(16).padStart(2, '0');
75
- }
@@ -1,3 +0,0 @@
1
- export * from './NodeCryptoProvider';
2
- export * from './SubtleCryptoProvider';
3
- export * from './CryptoProvider';
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./NodeCryptoProvider"), exports);
18
- __exportStar(require("./SubtleCryptoProvider"), exports);
19
- __exportStar(require("./CryptoProvider"), exports);
@@ -1,20 +0,0 @@
1
- export type RequestHeaders = Record<string, string | number | string[]>;
2
- export type RequestOptions = {
3
- params?: Record<string, any>;
4
- headers?: RequestHeaders;
5
- };
6
- export type ResponseHeaderValue = string | string[];
7
- export type ResponseHeaders = Record<string, ResponseHeaderValue>;
8
- export interface HttpClientInterface {
9
- getClientName: () => string;
10
- get(path: string, options: RequestOptions): any;
11
- post<Entity = any>(path: string, entity: Entity, options: RequestOptions): any;
12
- put<Entity = any>(path: string, entity: Entity, options: RequestOptions): any;
13
- delete(path: string, options: RequestOptions): any;
14
- }
15
- export interface HttpClientResponseInterface {
16
- getStatusCode: () => number;
17
- getHeaders: () => ResponseHeaders;
18
- getRawResponse: () => unknown;
19
- toJSON: () => Promise<any> | null;
20
- }
@@ -1,22 +0,0 @@
1
- import { HttpClientInterface, HttpClientResponseInterface, RequestOptions, ResponseHeaders } from '../interfaces/http-client.interface';
2
- import { HttpClient, HttpClientResponse } from './http-client';
3
- export declare class FetchHttpClient extends HttpClient implements HttpClientInterface {
4
- readonly baseURL: string;
5
- readonly options?: RequestInit | undefined;
6
- private readonly _fetchFn;
7
- constructor(baseURL: string, options?: RequestInit | undefined, fetchFn?: typeof fetch);
8
- /** @override */
9
- getClientName(): string;
10
- get(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
11
- post<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
12
- put<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
13
- delete(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
14
- private fetchRequest;
15
- }
16
- export declare class FetchHttpClientResponse extends HttpClientResponse implements HttpClientResponseInterface {
17
- _res: Response;
18
- constructor(res: Response);
19
- getRawResponse(): Response;
20
- toJSON(): Promise<any> | null;
21
- static _transformHeadersToObject(headers: Headers): ResponseHeaders;
22
- }
@@ -1,112 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.FetchHttpClientResponse = exports.FetchHttpClient = void 0;
13
- const http_client_1 = require("./http-client");
14
- class FetchHttpClient extends http_client_1.HttpClient {
15
- constructor(baseURL, options, fetchFn) {
16
- super(baseURL, options);
17
- this.baseURL = baseURL;
18
- this.options = options;
19
- // Default to global fetch if available
20
- if (!fetchFn) {
21
- if (!globalThis.fetch) {
22
- throw new Error('Fetch function not defined in the global scope and no replacement was provided.');
23
- }
24
- fetchFn = globalThis.fetch;
25
- }
26
- this._fetchFn = fetchFn;
27
- }
28
- /** @override */
29
- getClientName() {
30
- return 'fetch';
31
- }
32
- get(path, options) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
35
- return yield this.fetchRequest(resourceURL, 'GET', null, options.headers);
36
- });
37
- }
38
- post(path, entity, options) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
41
- return yield this.fetchRequest(resourceURL, 'POST', http_client_1.HttpClient.getBody(entity), Object.assign(Object.assign({}, http_client_1.HttpClient.getContentTypeHeader(entity)), options.headers));
42
- });
43
- }
44
- put(path, entity, options) {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
47
- return yield this.fetchRequest(resourceURL, 'PUT', http_client_1.HttpClient.getBody(entity), Object.assign(Object.assign({}, http_client_1.HttpClient.getContentTypeHeader(entity)), options.headers));
48
- });
49
- }
50
- delete(path, options) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
53
- return yield this.fetchRequest(resourceURL, 'DELETE', null, options.headers);
54
- });
55
- }
56
- fetchRequest(url, method, body, headers) {
57
- var _a, _b;
58
- return __awaiter(this, void 0, void 0, function* () {
59
- // For methods which expect payloads, we should always pass a body value
60
- // even when it is empty. Without this, some JS runtimes (eg. Deno) will
61
- // inject a second Content-Length header.
62
- const methodHasPayload = method === 'POST' || method === 'PUT' || method === 'PATCH';
63
- const requestBody = body || (methodHasPayload ? '' : undefined);
64
- const { 'User-Agent': userAgent } = (_a = this.options) === null || _a === void 0 ? void 0 : _a.headers;
65
- const res = yield this._fetchFn(url, {
66
- method,
67
- headers: Object.assign(Object.assign(Object.assign({ Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, (_b = this.options) === null || _b === void 0 ? void 0 : _b.headers), headers), { 'User-Agent': this.addClientToUserAgent(userAgent.toString()) }),
68
- body: requestBody,
69
- });
70
- if (!res.ok) {
71
- throw new http_client_1.HttpClientError({
72
- message: res.statusText,
73
- response: {
74
- status: res.status,
75
- headers: res.headers,
76
- data: yield res.json(),
77
- },
78
- });
79
- }
80
- return new FetchHttpClientResponse(res);
81
- });
82
- }
83
- }
84
- exports.FetchHttpClient = FetchHttpClient;
85
- // tslint:disable-next-line
86
- class FetchHttpClientResponse extends http_client_1.HttpClientResponse {
87
- constructor(res) {
88
- super(res.status, FetchHttpClientResponse._transformHeadersToObject(res.headers));
89
- this._res = res;
90
- }
91
- getRawResponse() {
92
- return this._res;
93
- }
94
- toJSON() {
95
- const contentType = this._res.headers.get('content-type');
96
- const isJsonResponse = contentType === null || contentType === void 0 ? void 0 : contentType.includes('application/json');
97
- return isJsonResponse ? this._res.json() : null;
98
- }
99
- static _transformHeadersToObject(headers) {
100
- // Fetch uses a Headers instance so this must be converted to a barebones
101
- // JS object to meet the HttpClient interface.
102
- const headersObj = {};
103
- for (const entry of Object.entries(headers)) {
104
- if (!Array.isArray(entry) || entry.length !== 2) {
105
- throw new Error('Response objects produced by the fetch function given to FetchHttpClient do not have an iterable headers map. Response#headers should be an iterable object.');
106
- }
107
- headersObj[entry[0]] = entry[1];
108
- }
109
- return headersObj;
110
- }
111
- }
112
- exports.FetchHttpClientResponse = FetchHttpClientResponse;
@@ -1,39 +0,0 @@
1
- import { HttpClientInterface, HttpClientResponseInterface, RequestHeaders, RequestOptions, ResponseHeaders } from '../interfaces/http-client.interface';
2
- export declare abstract class HttpClient implements HttpClientInterface {
3
- readonly baseURL: string;
4
- readonly options?: RequestInit | undefined;
5
- constructor(baseURL: string, options?: RequestInit | undefined);
6
- /** The HTTP client name used for diagnotics */
7
- getClientName(): string;
8
- abstract get(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
9
- abstract post<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
10
- abstract put<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
11
- abstract delete(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
12
- addClientToUserAgent(userAgent: string): string;
13
- static getResourceURL(baseURL: string, path: string, params?: Record<string, any>): string;
14
- static getQueryString(queryObj?: Record<string, any>): string | undefined;
15
- static getContentTypeHeader(entity: any): RequestHeaders | undefined;
16
- static getBody(entity: any): BodyInit | null | undefined;
17
- }
18
- export declare abstract class HttpClientResponse implements HttpClientResponseInterface {
19
- _statusCode: number;
20
- _headers: ResponseHeaders;
21
- constructor(statusCode: number, headers: ResponseHeaders);
22
- getStatusCode(): number;
23
- getHeaders(): ResponseHeaders;
24
- abstract getRawResponse(): unknown;
25
- abstract toJSON(): any | null;
26
- }
27
- export declare class HttpClientError<T> extends Error {
28
- readonly name: string;
29
- readonly message: string;
30
- readonly response: {
31
- status: number;
32
- headers: any;
33
- data: T;
34
- };
35
- constructor({ message, response, }: {
36
- message: string;
37
- readonly response: HttpClientError<T>['response'];
38
- });
39
- }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HttpClientError = exports.HttpClientResponse = exports.HttpClient = void 0;
4
- class HttpClient {
5
- constructor(baseURL, options) {
6
- this.baseURL = baseURL;
7
- this.options = options;
8
- }
9
- /** The HTTP client name used for diagnotics */
10
- getClientName() {
11
- throw new Error('getClientName not implemented');
12
- }
13
- addClientToUserAgent(userAgent) {
14
- if (userAgent.indexOf(' ') > -1) {
15
- return userAgent.replace(/\b\s/, `/${this.getClientName()} `);
16
- }
17
- else {
18
- return (userAgent += `/${this.getClientName()}`);
19
- }
20
- }
21
- static getResourceURL(baseURL, path, params) {
22
- const queryString = HttpClient.getQueryString(params);
23
- const url = new URL([path, queryString].filter(Boolean).join('?'), baseURL);
24
- return url.toString();
25
- }
26
- static getQueryString(queryObj) {
27
- if (!queryObj)
28
- return undefined;
29
- const sanitizedQueryObj = {};
30
- Object.entries(queryObj).forEach(([param, value]) => {
31
- if (value !== '' && value !== undefined)
32
- sanitizedQueryObj[param] = value;
33
- });
34
- return new URLSearchParams(sanitizedQueryObj).toString();
35
- }
36
- static getContentTypeHeader(entity) {
37
- if (entity instanceof URLSearchParams) {
38
- return {
39
- 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
40
- };
41
- }
42
- return undefined;
43
- }
44
- static getBody(entity) {
45
- if (entity === null || entity instanceof URLSearchParams) {
46
- return entity;
47
- }
48
- return JSON.stringify(entity);
49
- }
50
- }
51
- exports.HttpClient = HttpClient;
52
- // tslint:disable-next-line
53
- class HttpClientResponse {
54
- constructor(statusCode, headers) {
55
- this._statusCode = statusCode;
56
- this._headers = headers;
57
- }
58
- getStatusCode() {
59
- return this._statusCode;
60
- }
61
- getHeaders() {
62
- return this._headers;
63
- }
64
- }
65
- exports.HttpClientResponse = HttpClientResponse;
66
- // tslint:disable-next-line
67
- class HttpClientError extends Error {
68
- constructor({ message, response, }) {
69
- super(message);
70
- this.name = 'HttpClientError';
71
- this.message = 'The request could not be completed.';
72
- this.message = message;
73
- this.response = response;
74
- }
75
- }
76
- exports.HttpClientError = HttpClientError;
@@ -1,5 +0,0 @@
1
- import { HttpClient } from './http-client';
2
- export declare function createHttpClient(baseURL: string, options: RequestInit, fetchFn?: typeof fetch): HttpClient;
3
- export * from './fetch-client';
4
- export * from './node-client';
5
- export * from './http-client';
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.createHttpClient = void 0;
18
- const fetch_client_1 = require("./fetch-client");
19
- const node_client_1 = require("./node-client");
20
- function createHttpClient(baseURL, options, fetchFn) {
21
- if (typeof fetch !== 'undefined' || typeof fetchFn !== 'undefined') {
22
- return new fetch_client_1.FetchHttpClient(baseURL, options, fetchFn);
23
- }
24
- else {
25
- return new node_client_1.NodeHttpClient(baseURL, options);
26
- }
27
- }
28
- exports.createHttpClient = createHttpClient;
29
- __exportStar(require("./fetch-client"), exports);
30
- __exportStar(require("./node-client"), exports);
31
- __exportStar(require("./http-client"), exports);
@@ -1,23 +0,0 @@
1
- /// <reference types="node" />
2
- import { HttpClient, HttpClientResponse } from './http-client';
3
- import { HttpClientInterface, HttpClientResponseInterface, RequestOptions } from '../interfaces/http-client.interface';
4
- import * as http_ from 'http';
5
- export declare class NodeHttpClient extends HttpClient implements HttpClientInterface {
6
- readonly baseURL: string;
7
- readonly options?: RequestInit | undefined;
8
- private httpAgent;
9
- private httpsAgent;
10
- constructor(baseURL: string, options?: RequestInit | undefined);
11
- getClientName(): string;
12
- get(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
13
- post<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
14
- put<Entity = any>(path: string, entity: Entity, options: RequestOptions): Promise<HttpClientResponseInterface>;
15
- delete(path: string, options: RequestOptions): Promise<HttpClientResponseInterface>;
16
- private nodeRequest;
17
- }
18
- export declare class NodeHttpClientResponse extends HttpClientResponse implements HttpClientResponseInterface {
19
- _res: http_.IncomingMessage;
20
- constructor(res: http_.IncomingMessage);
21
- getRawResponse(): http_.IncomingMessage;
22
- toJSON(): Promise<any> | any;
23
- }
@@ -1,155 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.NodeHttpClientResponse = exports.NodeHttpClient = void 0;
36
- const http_client_1 = require("./http-client");
37
- const http_ = __importStar(require("http"));
38
- const https_ = __importStar(require("https"));
39
- // `import * as http_ from 'http'` creates a "Module Namespace Exotic Object"
40
- // which is immune to monkey-patching, whereas http_.default (in an ES Module context)
41
- // will resolve to the same thing as require('http'), which is
42
- // monkey-patchable. We care about this because users in their test
43
- // suites might be using a library like "nock" which relies on the ability
44
- // to monkey-patch and intercept calls to http.request.
45
- const http = http_.default || http_;
46
- const https = https_.default || https_;
47
- class NodeHttpClient extends http_client_1.HttpClient {
48
- constructor(baseURL, options) {
49
- super(baseURL, options);
50
- this.baseURL = baseURL;
51
- this.options = options;
52
- this.httpAgent = new http.Agent({ keepAlive: true });
53
- this.httpsAgent = new https.Agent({ keepAlive: true });
54
- }
55
- getClientName() {
56
- return 'node';
57
- }
58
- get(path, options) {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
61
- return yield this.nodeRequest(resourceURL, 'GET', null, options.headers);
62
- });
63
- }
64
- post(path, entity, options) {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
67
- return yield this.nodeRequest(resourceURL, 'POST', http_client_1.HttpClient.getBody(entity), Object.assign(Object.assign({}, http_client_1.HttpClient.getContentTypeHeader(entity)), options.headers));
68
- });
69
- }
70
- put(path, entity, options) {
71
- return __awaiter(this, void 0, void 0, function* () {
72
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
73
- return yield this.nodeRequest(resourceURL, 'PUT', http_client_1.HttpClient.getBody(entity), Object.assign(Object.assign({}, http_client_1.HttpClient.getContentTypeHeader(entity)), options.headers));
74
- });
75
- }
76
- delete(path, options) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- const resourceURL = http_client_1.HttpClient.getResourceURL(this.baseURL, path, options.params);
79
- return yield this.nodeRequest(resourceURL, 'DELETE', null, options.headers);
80
- });
81
- }
82
- nodeRequest(url, method, body, headers) {
83
- return __awaiter(this, void 0, void 0, function* () {
84
- return new Promise((resolve, reject) => {
85
- var _a, _b;
86
- const isSecureConnection = url.startsWith('https');
87
- const agent = isSecureConnection ? this.httpsAgent : this.httpAgent;
88
- const lib = isSecureConnection ? https : http;
89
- const { 'User-Agent': userAgent } = (_a = this.options) === null || _a === void 0 ? void 0 : _a.headers;
90
- const options = {
91
- method,
92
- headers: Object.assign(Object.assign(Object.assign({ Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, (_b = this.options) === null || _b === void 0 ? void 0 : _b.headers), headers), { 'User-Agent': this.addClientToUserAgent(userAgent.toString()) }),
93
- agent,
94
- };
95
- const req = lib.request(url, options, (res) => __awaiter(this, void 0, void 0, function* () {
96
- const clientResponse = new NodeHttpClientResponse(res);
97
- if (res.statusCode && (res.statusCode < 200 || res.statusCode > 299)) {
98
- reject(new http_client_1.HttpClientError({
99
- message: res.statusMessage,
100
- response: {
101
- status: res.statusCode,
102
- headers: res.headers,
103
- data: yield clientResponse.toJSON(),
104
- },
105
- }));
106
- }
107
- resolve(clientResponse);
108
- }));
109
- req.on('error', (err) => {
110
- reject(new Error(err.message));
111
- });
112
- if (body) {
113
- req.setHeader('Content-Length', Buffer.byteLength(body));
114
- req.write(body);
115
- }
116
- req.end();
117
- });
118
- });
119
- }
120
- }
121
- exports.NodeHttpClient = NodeHttpClient;
122
- // tslint:disable-next-line
123
- class NodeHttpClientResponse extends http_client_1.HttpClientResponse {
124
- constructor(res) {
125
- // @ts-ignore
126
- super(res.statusCode, res.headers || {});
127
- this._res = res;
128
- }
129
- getRawResponse() {
130
- return this._res;
131
- }
132
- toJSON() {
133
- return new Promise((resolve, reject) => {
134
- const contentType = this._res.headers['content-type'];
135
- const isJsonResponse = contentType === null || contentType === void 0 ? void 0 : contentType.includes('application/json');
136
- if (!isJsonResponse) {
137
- resolve(null);
138
- }
139
- let response = '';
140
- this._res.setEncoding('utf8');
141
- this._res.on('data', (chunk) => {
142
- response += chunk;
143
- });
144
- this._res.once('end', () => {
145
- try {
146
- resolve(JSON.parse(response));
147
- }
148
- catch (e) {
149
- reject(e);
150
- }
151
- });
152
- });
153
- }
154
- }
155
- exports.NodeHttpClientResponse = NodeHttpClientResponse;