UNPKG

auth0

Version:

Auth0 Node.js SDK for the Management API v2.

223 lines (222 loc) 9.61 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.COLLECTION_FORMATS = exports.BaseAPI = void 0; exports.validateRequiredRequestParams = validateRequiredRequestParams; exports.applyQueryParams = applyQueryParams; exports.parseFormParam = parseFormParam; const retry_js_1 = require("./retry.js"); const errors_js_1 = require("./errors.js"); __exportStar(require("./models.js"), exports); /** * @private * This is the base class for all generated API classes. */ class BaseAPI { constructor(configuration) { this.configuration = configuration; this.fetchWithTimeout = (url, init) => __awaiter(this, void 0, void 0, function* () { const controller = new AbortController(); const timeout = setTimeout(() => { controller.abort(); }, this.timeoutDuration); try { return yield this.fetchApi(url, Object.assign({ signal: controller.signal }, init)); } catch (e) { if (e.name === "AbortError") { throw new errors_js_1.TimeoutError(); } throw e; } finally { clearTimeout(timeout); } }); this.fetch = (url, init) => __awaiter(this, void 0, void 0, function* () { var _a; let fetchParams = { url, init }; for (const middleware of this.middleware) { if (middleware.pre) { fetchParams = (yield middleware.pre(Object.assign({ fetch: this.fetchWithTimeout }, fetchParams))) || fetchParams; } } let response = undefined; let error = undefined; try { response = ((_a = this.configuration.retry) === null || _a === void 0 ? void 0 : _a.enabled) !== false ? yield (0, retry_js_1.retry)(() => this.fetchWithTimeout(fetchParams.url, fetchParams.init), Object.assign({}, this.configuration.retry)) : yield this.fetchWithTimeout(fetchParams.url, fetchParams.init); } catch (e) { error = e; } if (error || !response.ok) { for (const middleware of this.middleware) { if (middleware.onError) { response = (yield middleware.onError(Object.assign(Object.assign({ fetch: this.fetchWithTimeout }, fetchParams), { error, response: response ? response.clone() : undefined }))) || response; } } if (response === undefined) { throw new errors_js_1.FetchError(error, "The request failed and the interceptors did not return an alternative response"); } } else { for (const middleware of this.middleware) { if (middleware.post) { response = (yield middleware.post(Object.assign(Object.assign({ fetch: this.fetchApi }, fetchParams), { response: response.clone() }))) || response; } } } return response; }); if (configuration.baseUrl === null || configuration.baseUrl === undefined) { throw new Error("Must provide a base URL for the API"); } if ("string" !== typeof configuration.baseUrl || configuration.baseUrl.length === 0) { throw new Error("The provided base URL is invalid"); } this.middleware = configuration.middleware || []; this.fetchApi = configuration.fetch || globalThis.fetch.bind(globalThis); this.parseError = configuration.parseError; this.timeoutDuration = typeof configuration.timeoutDuration === "number" ? configuration.timeoutDuration : 10000; } request(context, initOverrides) { return __awaiter(this, void 0, void 0, function* () { const { url, init } = yield this.createFetchParams(context, initOverrides); const response = yield this.fetch(url, init); if (response && response.status >= 200 && response.status < 300) { return response; } const error = yield this.parseError(response); throw error; }); } createFetchParams(context, initOverrides) { return __awaiter(this, void 0, void 0, function* () { let url = this.configuration.baseUrl + context.path; if (context.query !== undefined && Object.keys(context.query).length !== 0) { // only add the querystring to the URL if there are query parameters. // this is done to avoid urls ending with a "?" character which buggy webservers // do not handle correctly sometimes. url += `?${querystring(context.query)}`; } const headers = Object.assign({}, this.configuration.headers, context.headers); Object.keys(headers).forEach((key) => (headers[key] === undefined ? delete headers[key] : {})); const initOverrideFn = typeof initOverrides === "function" ? initOverrides : () => __awaiter(this, void 0, void 0, function* () { return initOverrides; }); const initParams = { method: context.method, headers, body: context.body, dispatcher: this.configuration.agent, }; const overriddenInit = Object.assign(Object.assign({}, initParams), (yield initOverrideFn({ init: initParams, context, }))); const init = Object.assign(Object.assign({}, overriddenInit), { body: overriddenInit.body instanceof FormData || overriddenInit.body instanceof URLSearchParams || overriddenInit.body instanceof Blob ? overriddenInit.body : JSON.stringify(overriddenInit.body) }); return { url, init }; }); } } exports.BaseAPI = BaseAPI; /** * @private */ exports.COLLECTION_FORMATS = { csv: ",", ssv: " ", tsv: "\t", pipes: "|", }; /** * @private */ function querystring(params) { return Object.keys(params) .map((key) => querystringSingleKey(key, params[key])) .filter((part) => part.length > 0) .join("&"); } function querystringSingleKey(key, value) { if (value instanceof Array) { const multiValue = value .map((singleValue) => encodeURIComponent(String(singleValue))) .join(`&${encodeURIComponent(key)}=`); return `${encodeURIComponent(key)}=${multiValue}`; } return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; } /** * @private */ function validateRequiredRequestParams(requestParameters, keys) { keys.forEach((key) => { if (requestParameters[key] === null || requestParameters[key] === undefined) { throw new errors_js_1.RequiredError(key, `Required parameter requestParameters.${key} was null or undefined.`); } }); } /** * @private */ function applyQueryParams(requestParameters, keys) { return keys.reduce((acc, { key, config, }) => { let value; if (config.isArray) { if (config.isCollectionFormatMulti) { value = requestParameters[key]; } else { value = requestParameters[key].join(exports.COLLECTION_FORMATS[config.collectionFormat]); } } else { if (requestParameters[key] !== undefined) { value = requestParameters[key]; } } return value !== undefined ? Object.assign(Object.assign({}, acc), { [key]: value }) : acc; }, {}); } /** * @private */ function parseFormParam(originalValue) { return __awaiter(this, void 0, void 0, function* () { let value = originalValue; value = typeof value == "number" || typeof value == "boolean" ? "" + value : value; return value; }); }