1 | "use strict";
|
2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3 | if (k2 === undefined) k2 = k;
|
4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5 | }) : (function(o, m, k, k2) {
|
6 | if (k2 === undefined) k2 = k;
|
7 | o[k2] = m[k];
|
8 | }));
|
9 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11 | }) : function(o, v) {
|
12 | o["default"] = v;
|
13 | });
|
14 | var __importStar = (this && this.__importStar) || function (mod) {
|
15 | if (mod && mod.__esModule) return mod;
|
16 | var result = {};
|
17 | if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18 | __setModuleDefault(result, mod);
|
19 | return result;
|
20 | };
|
21 | var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
22 | for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
23 | to[j] = from[i];
|
24 | return to;
|
25 | };
|
26 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
27 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
28 | };
|
29 | Object.defineProperty(exports, "__esModule", { value: true });
|
30 | exports.getUserToken = exports.getClientCredentialsToken = exports.getSubdomainAndZoneId = void 0;
|
31 | var xssec = __importStar(require("@sap/xssec"));
|
32 | var opossum_1 = __importDefault(require("opossum"));
|
33 | var subdomain_replacer_1 = require("./subdomain-replacer");
|
34 | var jwt_1 = require("./jwt");
|
35 | var resilience_options_1 = require("./resilience-options");
|
36 | var environment_accessor_1 = require("./environment-accessor");
|
37 | var circuitBreaker;
|
38 | function executeFunction(fn) {
|
39 | var parameters = [];
|
40 | for (var _i = 1; _i < arguments.length; _i++) {
|
41 | parameters[_i - 1] = arguments[_i];
|
42 | }
|
43 | return fn.apply(void 0, parameters);
|
44 | }
|
45 | function getCircuitBreaker() {
|
46 | if (!circuitBreaker) {
|
47 | circuitBreaker = new opossum_1.default(executeFunction, resilience_options_1.circuitBreakerDefaultOptions);
|
48 | }
|
49 | return circuitBreaker;
|
50 | }
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | function wrapInCircuitBreaker(fn) {
|
64 | return function () {
|
65 | var _a;
|
66 | var parameters = [];
|
67 | for (var _i = 0; _i < arguments.length; _i++) {
|
68 | parameters[_i] = arguments[_i];
|
69 | }
|
70 | return (_a = getCircuitBreaker()).fire.apply(_a, __spreadArray(__spreadArray([fn], parameters), [{
|
71 | enableCircuitBreaker: false
|
72 | }]));
|
73 | };
|
74 | }
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 |
|
81 | function getSubdomainAndZoneId(jwt) {
|
82 | var subdomain = null;
|
83 | var zoneId = null;
|
84 | if (jwt) {
|
85 | var jwtPayload = typeof jwt === 'string' ? jwt_1.decodeJwt(jwt) : jwt;
|
86 | if (jwtPayload.iss) {
|
87 | subdomain = subdomain_replacer_1.parseSubdomain(jwtPayload.iss);
|
88 | }
|
89 | if (jwtPayload.zid) {
|
90 | zoneId = jwtPayload.zid;
|
91 | }
|
92 | }
|
93 | return { subdomain: subdomain, zoneId: zoneId };
|
94 | }
|
95 | exports.getSubdomainAndZoneId = getSubdomainAndZoneId;
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 | function getClientCredentialsToken(service, userJwt, options) {
|
105 | if (options === void 0) { options = { enableCircuitBreaker: true }; }
|
106 | if (options.enableCircuitBreaker) {
|
107 | return wrapInCircuitBreaker(getClientCredentialsToken)(service, userJwt);
|
108 | }
|
109 | var serviceCredentials = environment_accessor_1.resolveService(service).credentials;
|
110 | var subdomainAndZoneId = getSubdomainAndZoneId(userJwt);
|
111 | return new Promise(function (resolve, reject) {
|
112 | xssec.requests.requestClientCredentialsToken(subdomainAndZoneId.subdomain, serviceCredentials, null, subdomainAndZoneId.zoneId, function (err, token, tokenResponse) {
|
113 | return err ? reject(err) : resolve(tokenResponse);
|
114 | });
|
115 | });
|
116 | }
|
117 | exports.getClientCredentialsToken = getClientCredentialsToken;
|
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 | function getUserToken(service, userJwt, options) {
|
127 | if (options === void 0) { options = { enableCircuitBreaker: true }; }
|
128 | if (options.enableCircuitBreaker) {
|
129 | return wrapInCircuitBreaker(getUserToken)(service, userJwt);
|
130 | }
|
131 | var subdomainAndZoneId = getSubdomainAndZoneId(userJwt);
|
132 | return new Promise(function (resolve, reject) {
|
133 | return xssec.requests.requestUserToken(userJwt, service.credentials, null, null, subdomainAndZoneId.subdomain, subdomainAndZoneId.zoneId, function (err, token) { return (err ? reject(err) : resolve(token)); });
|
134 | });
|
135 | }
|
136 | exports.getUserToken = getUserToken;
|
137 |
|
\ | No newline at end of file |