UNPKG

kaltura-node-typescript-client

Version:
136 lines (134 loc) 21.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCancelableAction = exports.safeJsonParse = exports.prepareParameters = exports.getHeaders = exports.buildQuerystring = exports.createClientTag = exports.buildUrl = exports.createEndpoint = void 0; var tslib_1 = require("tslib"); var cancelable_action_1 = require("../cancelable-action"); var kaltura_client_exception_1 = require("../api/kaltura-client-exception"); var environment_1 = require("../environment"); var got_1 = require("got"); var kaltura_logger_1 = require("../api/kaltura-logger"); function createEndpoint(request, options, service, action, additionalQueryParams) { var endpoint = options.endpointUrl; var clientTag = createClientTag(request, options); var url = endpoint + "/api_v3/service/" + service; if (action) { url += "/action/" + action; } var queryParams = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (additionalQueryParams || {})), (clientTag ? { clientTag: clientTag } : {})); return buildUrl(url, queryParams); } exports.createEndpoint = createEndpoint; function buildUrl(url, querystring) { var formattedUrl = (url).trim(); if (!querystring) { return formattedUrl; } var urlHasQuerystring = formattedUrl.indexOf('?') !== -1; var formattedQuerystring = _buildQuerystring(querystring); return "" + formattedUrl + (urlHasQuerystring ? '&' : '?') + formattedQuerystring; } exports.buildUrl = buildUrl; function _buildQuerystring(data, prefix) { var str = [], p; for (p in data) { if (data.hasOwnProperty(p)) { var k = prefix ? prefix + "[" + p + "]" : p, v = data[p]; str.push((v !== null && typeof v === "object") ? _buildQuerystring(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v)); } } return str.join("&"); } function createClientTag(request, options) { var networkTag = (request.getNetworkTag() || "").trim(); var clientTag = (options.clientTag || "").trim() || "ng-app"; if (networkTag && networkTag.length) { return clientTag + "_" + networkTag; } else { return clientTag; } } exports.createClientTag = createClientTag; function buildQuerystring(data, prefix) { var str = [], p; for (p in data) { if (data.hasOwnProperty(p)) { var k = prefix ? prefix + "[" + p + "]" : p, v = data[p]; str.push((v !== null && typeof v === "object") ? buildQuerystring(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v)); } } return str.join("&"); } exports.buildQuerystring = buildQuerystring; function getHeaders(customHeaders) { if (customHeaders === void 0) { customHeaders = {}; } var headers = (0, tslib_1.__assign)({ "Accept": "application/json", "Content-Type": "application/json" }, customHeaders); return headers; } exports.getHeaders = getHeaders; function prepareParameters(request, options, defaultRequestOptions) { return Object.assign({}, request.buildRequest(defaultRequestOptions), { apiVersion: environment_1.environment.request.apiVersion, format: 1 }); } exports.prepareParameters = prepareParameters; function safeJsonParse(obj) { try { return JSON.parse(obj); } catch (e) { /* noop */ } } exports.safeJsonParse = safeJsonParse; function createCancelableAction(data, responseType) { var _a, _b; if (responseType === void 0) { responseType = 'json'; } var endPoint = (data === null || data === void 0 ? void 0 : data.endpoint) || ''; var service = ((_a = endPoint === null || endPoint === void 0 ? void 0 : endPoint.match('service/([^\/]+)')) === null || _a === void 0 ? void 0 : _a[1]) || ''; var action = ((_b = endPoint === null || endPoint === void 0 ? void 0 : endPoint.match('action/([^\?]+)')) === null || _b === void 0 ? void 0 : _b[1]) || ''; var result = new cancelable_action_1.CancelableAction(function (resolve, reject) { var cancelableRequest = got_1.default.post(data.endpoint, { json: data.body, headers: data.headers, }); var xMe, xKalturaSession; cancelableRequest.then(function (response) { var _a, _b; xMe = ((_a = response === null || response === void 0 ? void 0 : response.headers) === null || _a === void 0 ? void 0 : _a['x-me']) || ''; xKalturaSession = ((_b = response === null || response === void 0 ? void 0 : response.headers) === null || _b === void 0 ? void 0 : _b['x-kaltura-session']) || ''; kaltura_logger_1.Logger.debug("Kaltura response completed for: " + service + "/" + action + ", x-me: " + xMe + ", x-kaltura-session: " + xKalturaSession + ", url: " + endPoint); }).catch(function (e) { var _a, _b, _c, _d; xMe = ((_b = (_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? void 0 : _b['x-me']) || ''; xKalturaSession = ((_d = (_c = e === null || e === void 0 ? void 0 : e.response) === null || _c === void 0 ? void 0 : _c.headers) === null || _d === void 0 ? void 0 : _d['x-kaltura-session']) || ''; }); cancelableRequest[responseType]() .then(function (response) { if (typeof response === 'string' && response.includes('KalturaAPIException')) { response = safeJsonParse(response) || response; } if ((response === null || response === void 0 ? void 0 : response.objectType) === 'KalturaAPIException') { kaltura_logger_1.Logger.error("Kaltura API Exception: '" + (response.message || '') + "', for: " + service + "/" + action + ", x-me: " + xMe + ", x-kaltura-session: " + xKalturaSession + ", url: " + endPoint); } return response; }) .then(resolve) .catch(function (e) { var _a, _b, _c; kaltura_logger_1.Logger.error("Kaltura Error: '" + e.message + "', for: " + service + "/" + action + ", x-me: " + xMe + ", x-kaltura-session: " + xKalturaSession + ", url: " + endPoint); var args = xMe || xKalturaSession ? { xMe: xMe, xKalturaSession: xKalturaSession } : undefined; var error = ((_a = e.response) === null || _a === void 0 ? void 0 : _a.statusCode) === 200 ? new Error((_b = e.response) === null || _b === void 0 ? void 0 : _b.body) : new kaltura_client_exception_1.KalturaClientException('client::failure', ((_c = e.response) === null || _c === void 0 ? void 0 : _c.body) || e.message || 'failed to transmit request', args); reject(error); }); return function () { return cancelableRequest.cancel(); }; }); return result; } exports.createCancelableAction = createCancelableAction; //# sourceMappingURL=data:application/json;charset=utf8;base64,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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2FsdHVyYVJlcXVlc3RCYXNlIH0gZnJvbSAnLi4vYXBpL2thbHR1cmEtcmVxdWVzdC1iYXNlJztcbmltcG9ydCB7IEthbHR1cmFDbGllbnRPcHRpb25zIH0gZnJvbSAnLi4va2FsdHVyYS1jbGllbnQtb3B0aW9ucyc7XG5pbXBvcnQgeyBLYWx0dXJhUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9hcGkva2FsdHVyYS1yZXF1ZXN0LW9wdGlvbnMnO1xuaW1wb3J0IHsgS2FsdHVyYU11bHRpUmVxdWVzdCB9IGZyb20gJy4uL2FwaS9rYWx0dXJhLW11bHRpLXJlcXVlc3QnO1xuaW1wb3J0IHsgS2FsdHVyYVJlcXVlc3QgfSBmcm9tICcuLi9hcGkva2FsdHVyYS1yZXF1ZXN0JztcbmltcG9ydCB7IEthbHR1cmFGaWxlUmVxdWVzdCB9IGZyb20gJy4uL2FwaS9rYWx0dXJhLWZpbGUtcmVxdWVzdCc7XG5pbXBvcnQgeyBDYW5jZWxhYmxlQWN0aW9uLCBSZXNvbHZlRm4gfSBmcm9tICcuLi9jYW5jZWxhYmxlLWFjdGlvbic7XG5pbXBvcnQgeyBLYWx0dXJhQ2xpZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vYXBpL2thbHR1cmEtY2xpZW50LWV4Y2VwdGlvbic7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCBnb3QgZnJvbSAnZ290JztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gXCIuLi9hcGkva2FsdHVyYS1sb2dnZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVuZHBvaW50KHJlcXVlc3Q6IEthbHR1cmFSZXF1ZXN0QmFzZSwgb3B0aW9uczogS2FsdHVyYUNsaWVudE9wdGlvbnMsIHNlcnZpY2U6IHN0cmluZywgYWN0aW9uPzogc3RyaW5nLCBhZGRpdGlvbmFsUXVlcnlQYXJhbXM/OiB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludFVybDtcbiAgY29uc3QgY2xpZW50VGFnID0gY3JlYXRlQ2xpZW50VGFnKHJlcXVlc3QsIG9wdGlvbnMpO1xuICBsZXQgdXJsID0gYCR7ZW5kcG9pbnR9L2FwaV92My9zZXJ2aWNlLyR7c2VydmljZX1gO1xuXG4gIGlmIChhY3Rpb24pIHtcbiAgICB1cmwgKz0gYC9hY3Rpb24vJHthY3Rpb259YDtcbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgIC4uLihhZGRpdGlvbmFsUXVlcnlQYXJhbXMgfHwge30pLFxuICAgIC4uLihjbGllbnRUYWcgPyB7IGNsaWVudFRhZyB9IDoge30pXG4gIH07XG5cbiAgcmV0dXJuIGJ1aWxkVXJsKHVybCwgcXVlcnlQYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVcmwodXJsOiBzdHJpbmcsIHF1ZXJ5c3RyaW5nPzoge30pIHtcbiAgbGV0IGZvcm1hdHRlZFVybCA9ICh1cmwpLnRyaW0oKTtcbiAgaWYgKCFxdWVyeXN0cmluZykge1xuICAgIHJldHVybiBmb3JtYXR0ZWRVcmw7XG4gIH1cbiAgY29uc3QgdXJsSGFzUXVlcnlzdHJpbmcgPSBmb3JtYXR0ZWRVcmwuaW5kZXhPZignPycpICE9PSAtMTtcbiAgY29uc3QgZm9ybWF0dGVkUXVlcnlzdHJpbmcgPSBfYnVpbGRRdWVyeXN0cmluZyhxdWVyeXN0cmluZyk7XG4gIHJldHVybiBgJHtmb3JtYXR0ZWRVcmx9JHt1cmxIYXNRdWVyeXN0cmluZyA/ICcmJyA6ICc/J30ke2Zvcm1hdHRlZFF1ZXJ5c3RyaW5nfWA7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFF1ZXJ5c3RyaW5nKGRhdGE6IHt9LCBwcmVmaXg/OiBzdHJpbmcpIHtcbiAgbGV0IHN0ciA9IFtdLCBwO1xuICBmb3IgKHAgaW4gZGF0YSkge1xuICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICBsZXQgayA9IHByZWZpeCA/IHByZWZpeCArIFwiW1wiICsgcCArIFwiXVwiIDogcCwgdiA9IGRhdGFbcF07XG4gICAgICBzdHIucHVzaCgodiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIikgP1xuICAgICAgICBfYnVpbGRRdWVyeXN0cmluZyh2LCBrKSA6XG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChrKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHYpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0ci5qb2luKFwiJlwiKTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50VGFnKHJlcXVlc3Q6IEthbHR1cmFSZXF1ZXN0QmFzZSwgb3B0aW9uczogS2FsdHVyYUNsaWVudE9wdGlvbnMpIHtcbiAgY29uc3QgbmV0d29ya1RhZyA9IChyZXF1ZXN0LmdldE5ldHdvcmtUYWcoKSB8fCBcIlwiKS50cmltKCk7XG4gIGNvbnN0IGNsaWVudFRhZyA9IChvcHRpb25zLmNsaWVudFRhZyB8fCBcIlwiKS50cmltKCkgfHwgXCJuZy1hcHBcIjtcblxuICBpZiAobmV0d29ya1RhZyAmJiBuZXR3b3JrVGFnLmxlbmd0aCkge1xuICAgIHJldHVybiBgJHtjbGllbnRUYWd9XyR7bmV0d29ya1RhZ31gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjbGllbnRUYWc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUXVlcnlzdHJpbmcoZGF0YToge30sIHByZWZpeD86IHN0cmluZykge1xuICBsZXQgc3RyID0gW10sIHA7XG4gIGZvciAocCBpbiBkYXRhKSB7XG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocCkpIHtcbiAgICAgIGxldCBrID0gcHJlZml4ID8gcHJlZml4ICsgXCJbXCIgKyBwICsgXCJdXCIgOiBwLCB2ID0gZGF0YVtwXTtcbiAgICAgIHN0ci5wdXNoKCh2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiKSA/XG4gICAgICAgIGJ1aWxkUXVlcnlzdHJpbmcodiwgaykgOlxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoaykgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHIuam9pbihcIiZcIik7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlcnMoY3VzdG9tSGVhZGVycyA9IHt9KTogYW55IHtcbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAuLi5jdXN0b21IZWFkZXJzXG4gIH07XG4gIHJldHVybiBoZWFkZXJzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFyYW1ldGVycyhyZXF1ZXN0OiBLYWx0dXJhUmVxdWVzdDxhbnk+IHwgS2FsdHVyYU11bHRpUmVxdWVzdCB8IEthbHR1cmFGaWxlUmVxdWVzdCwgb3B0aW9uczogS2FsdHVyYUNsaWVudE9wdGlvbnMsIGRlZmF1bHRSZXF1ZXN0T3B0aW9uczogS2FsdHVyYVJlcXVlc3RPcHRpb25zKTogYW55IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge30sXG4gICAgcmVxdWVzdC5idWlsZFJlcXVlc3QoZGVmYXVsdFJlcXVlc3RPcHRpb25zKSxcbiAgICB7XG4gICAgICBhcGlWZXJzaW9uOiBlbnZpcm9ubWVudC5yZXF1ZXN0LmFwaVZlcnNpb24sXG4gICAgICBmb3JtYXQ6IDFcbiAgICB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlSnNvblBhcnNlKG9iajogc3RyaW5nKTogb2JqZWN0IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShvYmopXG4gIH0gY2F0Y2ggKGUpIHsvKiBub29wICovfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FuY2VsYWJsZUFjdGlvbjxUPihcbiAgZGF0YTogeyBlbmRwb2ludDogc3RyaW5nLCBoZWFkZXJzOiBhbnksIGJvZHk6IGFueSB9LFxuICByZXNwb25zZVR5cGU6ICdqc29uJ3wndGV4dCcgPSAnanNvbidcbik6IENhbmNlbGFibGVBY3Rpb248VD4ge1xuICBjb25zdCBlbmRQb2ludCA9IGRhdGE/LmVuZHBvaW50IHx8ICcnXG4gIGNvbnN0IHNlcnZpY2UgPSBlbmRQb2ludD8ubWF0Y2goJ3NlcnZpY2UvKFteXFwvXSspJyk/LlsxXSB8fCAnJ1xuICBjb25zdCBhY3Rpb24gPSBlbmRQb2ludD8ubWF0Y2goJ2FjdGlvbi8oW15cXD9dKyknKT8uWzFdIHx8ICcnXG5cbiAgY29uc3QgcmVzdWx0ID0gbmV3IENhbmNlbGFibGVBY3Rpb248VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNhbmNlbGFibGVSZXF1ZXN0ID0gZ290LnBvc3QoZGF0YS5lbmRwb2ludCwge1xuICAgICAganNvbjogZGF0YS5ib2R5LFxuICAgICAgaGVhZGVyczogZGF0YS5oZWFkZXJzLFxuICAgIH0pXG5cbiAgICBsZXQgeE1lLCB4S2FsdHVyYVNlc3Npb25cbiAgICBjYW5jZWxhYmxlUmVxdWVzdC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgeE1lID0gcmVzcG9uc2U/LmhlYWRlcnM/LlsneC1tZSddIHx8ICcnXG4gICAgICB4S2FsdHVyYVNlc3Npb24gPSByZXNwb25zZT8uaGVhZGVycz8uWyd4LWthbHR1cmEtc2Vzc2lvbiddIHx8ICcnXG4gICAgICBMb2dnZXIuZGVidWcoYEthbHR1cmEgcmVzcG9uc2UgY29tcGxldGVkIGZvcjogJHtzZXJ2aWNlfS8ke2FjdGlvbn0sIHgtbWU6ICR7eE1lfSwgeC1rYWx0dXJhLXNlc3Npb246ICR7eEthbHR1cmFTZXNzaW9ufSwgdXJsOiAke2VuZFBvaW50fWApXG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB4TWUgPSBlPy5yZXNwb25zZT8uaGVhZGVycz8uWyd4LW1lJ10gfHwgJydcbiAgICAgIHhLYWx0dXJhU2Vzc2lvbiA9IGU/LnJlc3BvbnNlPy5oZWFkZXJzPy5bJ3gta2FsdHVyYS1zZXNzaW9uJ10gfHwgJydcbiAgICB9KVxuXG4gICAgY2FuY2VsYWJsZVJlcXVlc3RbcmVzcG9uc2VUeXBlXSgpXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgJiYgcmVzcG9uc2UuaW5jbHVkZXMoJ0thbHR1cmFBUElFeGNlcHRpb24nKSkge1xuICAgICAgICAgIHJlc3BvbnNlID0gc2FmZUpzb25QYXJzZShyZXNwb25zZSkgfHwgcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2U/Lm9iamVjdFR5cGUgPT09ICdLYWx0dXJhQVBJRXhjZXB0aW9uJykge1xuICAgICAgICAgIExvZ2dlci5lcnJvcihgS2FsdHVyYSBBUEkgRXhjZXB0aW9uOiAnJHtyZXNwb25zZS5tZXNzYWdlIHx8ICcnfScsIGZvcjogJHtzZXJ2aWNlfS8ke2FjdGlvbn0sIHgtbWU6ICR7eE1lfSwgeC1rYWx0dXJhLXNlc3Npb246ICR7eEthbHR1cmFTZXNzaW9ufSwgdXJsOiAke2VuZFBvaW50fWApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9KVxuICAgICAgLnRoZW4oPFJlc29sdmVGbjxhbnk+PnJlc29sdmUpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIExvZ2dlci5lcnJvcihgS2FsdHVyYSBFcnJvcjogJyR7ZS5tZXNzYWdlfScsIGZvcjogJHtzZXJ2aWNlfS8ke2FjdGlvbn0sIHgtbWU6ICR7eE1lfSwgeC1rYWx0dXJhLXNlc3Npb246ICR7eEthbHR1cmFTZXNzaW9ufSwgdXJsOiAke2VuZFBvaW50fWApXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB4TWUgfHwgeEthbHR1cmFTZXNzaW9uID8geyB4TWUsIHhLYWx0dXJhU2Vzc2lvbiB9IDogdW5kZWZpbmVkIFxuICAgICAgICBjb25zdCBlcnJvciA9IGUucmVzcG9uc2U/LnN0YXR1c0NvZGUgPT09IDIwMFxuICAgICAgICAgID8gbmV3IEVycm9yKGUucmVzcG9uc2U/LmJvZHkpXG4gICAgICAgICAgOiBuZXcgS2FsdHVyYUNsaWVudEV4Y2VwdGlvbignY2xpZW50OjpmYWlsdXJlJywgZS5yZXNwb25zZT8uYm9keSB8fCBlLm1lc3NhZ2UgfHwgJ2ZhaWxlZCB0byB0cmFuc21pdCByZXF1ZXN0JywgYXJncyk7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0pXG4gICAgcmV0dXJuICgpID0+IGNhbmNlbGFibGVSZXF1ZXN0LmNhbmNlbCgpXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19