UNPKG

@mindconnect/mindconnect-nodejs

Version:

NodeJS Library for Siemens Insights Hub Connectivity - TypeScript SDK for Insights Hub and Industrial IoT - Command Line Interface - Insights Hub Development Proxy (Siemens Insights Hub was formerly known as MindSphere)

155 lines 6.87 kB
"use strict"; 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.MindConnectBase = exports.isTokenRotation = void 0; const cross_fetch_1 = require("cross-fetch"); const debug = require("debug"); const https_proxy_agent_1 = require("https-proxy-agent"); const version_1 = require("../version"); const utils_1 = require("./utils"); const log = debug("mindconnect"); function isTokenRotation(obj) { const tr = obj; return (tr.GetGateway !== undefined && tr.GetTenant !== undefined && tr.GetToken !== undefined && tr.RenewToken !== undefined && tr instanceof Object && typeof tr.GetGateway === "function" && typeof tr.GetTenant === "function" && typeof tr.GetToken === "function" && typeof tr.RenewToken === "function"); } exports.isTokenRotation = isTokenRotation; /** * Base class for mindconnect agent (and setup) which provides headers and proxy handling. * * @export * @abstract * @class MindConnectBase */ class MindConnectBase { /** * perform http action * * @param {({ * verb: "GET" | "POST" | "PATCH" | "PUT" | "DELETE"; * gateway: string; * baseUrl: string; * authorization: string; * body?: Object; * message?: string; * octetStream?: boolean; * multiPartFormData?: boolean; * additionalHeaders?: Object; * noResponse?: boolean; * rawResponse?: boolean; * returnHeaders?: boolean; * ignoreCodes?: number[]; * })} { * verb, * gateway, * baseUrl, * authorization, * body, * message, * octetStream, * multiPartFormData, * additionalHeaders, * noResponse, * rawResponse, * returnHeaders, * ignoreCodes, * } * @returns {Promise<Object>} * * @memberOf MindConnectBase */ HttpAction(_a) { return __awaiter(this, arguments, void 0, function* ({ verb, gateway, baseUrl, authorization, body, message, octetStream, multiPartFormData, additionalHeaders, noResponse, rawResponse, returnHeaders, ignoreCodes, }) { additionalHeaders = additionalHeaders || {}; let apiheaders = octetStream ? this._octetStreamHeaders : this._apiHeaders; apiheaders = multiPartFormData ? this._multipartFormData : apiheaders; ignoreCodes = ignoreCodes || []; let headers = Object.assign(Object.assign({}, apiheaders), { Authorization: `Bearer ${authorization}` }); if (verb === "GET" || verb === "DELETE") { delete headers["Content-Type"]; } headers = (0, utils_1.removeUndefined)(Object.assign(Object.assign({}, headers), additionalHeaders)); const url = (0, utils_1.removeTrailingSlash)(`${gateway}${baseUrl}`); log(`${message} Headers ${JSON.stringify(headers)} Url ${url}`); try { const request = { method: verb, headers: headers, agent: this._proxyHttpAgent }; if (verb !== "GET" && verb !== "DELETE") { request.body = octetStream || multiPartFormData ? body : JSON.stringify(body); } const response = yield (0, cross_fetch_1.default)(url, request); const codeIgnored = ignoreCodes.indexOf(response.status) >= 0; !codeIgnored && !response.ok && (0, utils_1.throwError)(`${response.statusText} ${yield response.text()}`); !codeIgnored && (response.status < 200 || response.status > 299) && (0, utils_1.throwError)(`invalid response ${JSON.stringify(response)}`); if (codeIgnored) return undefined; if (rawResponse) return response; if (noResponse) { if (returnHeaders) { return response.headers; } return {}; } const json = yield response.json(); log(`${message} Response ${JSON.stringify(json)}`); return json; } catch (err) { log(err); throw new Error(`Network error occured ${err.message}`); } }); } constructor() { this._headers = { Accept: "*/*", "X-Powered-By": "meowz", "User-Agent": `${version_1.MC_NAME} (${version_1.MC_VERSION})`, }; /** * Http headers used for /exchange endpoint handling. * * @protected * @memberof MindConnectBase */ this._multipartHeaders = Object.assign(Object.assign({}, this._headers), { "Content-Type": "multipart/mixed; boundary=mindspheremessage" }); this._multipartFormData = Object.assign(Object.assign({}, this._headers), { "Content-Type": "multipart/form-data; boundary=--mindsphere" }); /** * Http headers used for onboarding message. * * @protected * @memberof MindConnectBase */ this._apiHeaders = Object.assign(Object.assign({}, this._headers), { "Content-Type": "application/json" }); this._octetStreamHeaders = Object.assign(Object.assign({}, this._headers), { "Content-Type": "application/octet-stream" }); /** * Http headers used to register the client assertion and acquire the /exchange token. * * @protected * @memberof MindConnectBase */ this._urlEncodedHeaders = Object.assign(Object.assign({}, this._headers), { "Content-Type": "application/x-www-form-urlencoded" }); const proxy = process.env.http_proxy || process.env.HTTP_PROXY; log(`Proxy: ${proxy}`); this._proxyHttpAgent = proxy ? new https_proxy_agent_1.HttpsProxyAgent(proxy) : null; } } exports.MindConnectBase = MindConnectBase; //# sourceMappingURL=mindconnect-base.js.map