@sap-ux/axios-extension 0.4.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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.adoc +61 -0
  3. package/dist/abap/abap-service-provider.d.ts +64 -0
  4. package/dist/abap/abap-service-provider.d.ts.map +1 -0
  5. package/dist/abap/abap-service-provider.js +133 -0
  6. package/dist/abap/abap-service-provider.js.map +1 -0
  7. package/dist/abap/app-index-service.d.ts +26 -0
  8. package/dist/abap/app-index-service.d.ts.map +1 -0
  9. package/dist/abap/app-index-service.js +38 -0
  10. package/dist/abap/app-index-service.js.map +1 -0
  11. package/dist/abap/ato.d.ts +25 -0
  12. package/dist/abap/ato.d.ts.map +1 -0
  13. package/dist/abap/ato.js +35 -0
  14. package/dist/abap/ato.js.map +1 -0
  15. package/dist/abap/catalog/base.d.ts +44 -0
  16. package/dist/abap/catalog/base.d.ts.map +1 -0
  17. package/dist/abap/catalog/base.js +33 -0
  18. package/dist/abap/catalog/base.js.map +1 -0
  19. package/dist/abap/catalog/index.d.ts +4 -0
  20. package/dist/abap/catalog/index.d.ts.map +1 -0
  21. package/dist/abap/catalog/index.js +16 -0
  22. package/dist/abap/catalog/index.js.map +1 -0
  23. package/dist/abap/catalog/v2-catalog-service.d.ts +66 -0
  24. package/dist/abap/catalog/v2-catalog-service.d.ts.map +1 -0
  25. package/dist/abap/catalog/v2-catalog-service.js +175 -0
  26. package/dist/abap/catalog/v2-catalog-service.js.map +1 -0
  27. package/dist/abap/catalog/v4-catalog-service.d.ts +49 -0
  28. package/dist/abap/catalog/v4-catalog-service.d.ts.map +1 -0
  29. package/dist/abap/catalog/v4-catalog-service.js +88 -0
  30. package/dist/abap/catalog/v4-catalog-service.js.map +1 -0
  31. package/dist/abap/index.d.ts +7 -0
  32. package/dist/abap/index.d.ts.map +1 -0
  33. package/dist/abap/index.js +24 -0
  34. package/dist/abap/index.js.map +1 -0
  35. package/dist/abap/message.d.ts +69 -0
  36. package/dist/abap/message.d.ts.map +1 -0
  37. package/dist/abap/message.js +82 -0
  38. package/dist/abap/message.js.map +1 -0
  39. package/dist/abap/ui5-abap-repository-service.d.ts +109 -0
  40. package/dist/abap/ui5-abap-repository-service.d.ts.map +1 -0
  41. package/dist/abap/ui5-abap-repository-service.js +264 -0
  42. package/dist/abap/ui5-abap-repository-service.js.map +1 -0
  43. package/dist/auth/connection.d.ts +40 -0
  44. package/dist/auth/connection.d.ts.map +1 -0
  45. package/dist/auth/connection.js +194 -0
  46. package/dist/auth/connection.js.map +1 -0
  47. package/dist/auth/error.d.ts +28 -0
  48. package/dist/auth/error.d.ts.map +1 -0
  49. package/dist/auth/error.js +37 -0
  50. package/dist/auth/error.js.map +1 -0
  51. package/dist/auth/index.d.ts +19 -0
  52. package/dist/auth/index.d.ts.map +1 -0
  53. package/dist/auth/index.js +64 -0
  54. package/dist/auth/index.js.map +1 -0
  55. package/dist/auth/redirect.d.ts +20 -0
  56. package/dist/auth/redirect.d.ts.map +1 -0
  57. package/dist/auth/redirect.js +27 -0
  58. package/dist/auth/redirect.js.map +1 -0
  59. package/dist/auth/static.d.ts +2 -0
  60. package/dist/auth/static.d.ts.map +1 -0
  61. package/dist/auth/static.js +129 -0
  62. package/dist/auth/static.js.map +1 -0
  63. package/dist/auth/uaa.d.ts +107 -0
  64. package/dist/auth/uaa.d.ts.map +1 -0
  65. package/dist/auth/uaa.js +258 -0
  66. package/dist/auth/uaa.js.map +1 -0
  67. package/dist/base/odata-service.d.ts +49 -0
  68. package/dist/base/odata-service.d.ts.map +1 -0
  69. package/dist/base/odata-service.js +119 -0
  70. package/dist/base/odata-service.js.map +1 -0
  71. package/dist/base/service-provider.d.ts +50 -0
  72. package/dist/base/service-provider.d.ts.map +1 -0
  73. package/dist/base/service-provider.js +56 -0
  74. package/dist/base/service-provider.js.map +1 -0
  75. package/dist/factory.d.ts +48 -0
  76. package/dist/factory.d.ts.map +1 -0
  77. package/dist/factory.js +136 -0
  78. package/dist/factory.js.map +1 -0
  79. package/dist/index.d.ts +6 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +18 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +51 -0
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.attachConnectionHandler = exports.Cookies = exports.CSRF = void 0;
7
+ const error_1 = require("./error");
8
+ const detect_content_type_1 = __importDefault(require("detect-content-type"));
9
+ var CSRF;
10
+ (function (CSRF) {
11
+ CSRF["RequestHeaderName"] = "X-Csrf-Token";
12
+ CSRF["RequestHeaderValue"] = "Fetch";
13
+ CSRF["ResponseHeaderName"] = "x-csrf-token";
14
+ })(CSRF = exports.CSRF || (exports.CSRF = {}));
15
+ /**
16
+ * Helper class for managing cookies.
17
+ */
18
+ class Cookies {
19
+ constructor() {
20
+ this.cookies = {};
21
+ }
22
+ /**
23
+ * Update the cookies based on 'set-cookie' headers of a response.
24
+ *
25
+ * @param response http response containing a headers object
26
+ * @returns cookies object
27
+ */
28
+ setCookies(response) {
29
+ if (response.headers && response.headers['set-cookie']) {
30
+ response.headers['set-cookie'].forEach((cookieString) => this.addCookie(cookieString));
31
+ }
32
+ return this;
33
+ }
34
+ /**
35
+ * Update cookies based on a string representing a cookie.
36
+ *
37
+ * @param cookieString string representing a cookie
38
+ * @returns cookies object
39
+ */
40
+ addCookie(cookieString) {
41
+ var _a;
42
+ const cookie = cookieString.split(';');
43
+ const [key, ...values] = (_a = cookie[0]) === null || _a === void 0 ? void 0 : _a.split('=');
44
+ const value = values === null || values === void 0 ? void 0 : values.join('='); // Account for embedded '=' in the value
45
+ if (key && cookieString.indexOf('Max-Age=0') >= 0) {
46
+ delete this.cookies[key];
47
+ }
48
+ else if (key && value) {
49
+ this.cookies[key] = value;
50
+ }
51
+ return this;
52
+ }
53
+ /**
54
+ * Serialize all cookies as string formatted for the 'Cookie' header.
55
+ *
56
+ * @returns serialized cookies
57
+ */
58
+ toString() {
59
+ const cookies = [];
60
+ Object.keys(this.cookies).forEach((key) => {
61
+ cookies.push(`${key}=${this.cookies[key]}`);
62
+ });
63
+ return cookies.join('; ');
64
+ }
65
+ }
66
+ exports.Cookies = Cookies;
67
+ /**
68
+ * Check the response if SAML is required.
69
+ *
70
+ * @param response response from the backend
71
+ * @returns true if SAML is required
72
+ */
73
+ function isSamlLogonNeeded(response) {
74
+ return ((response === null || response === void 0 ? void 0 : response.status) === 200 &&
75
+ isHtmlResponse(response) &&
76
+ typeof response.data === 'string' &&
77
+ !!response.data.match(/saml/i));
78
+ }
79
+ /**
80
+ * SAP systems can choose to respond with a 200 and an HTML login page that the module cannot handle, therefore, convert it into a 401.
81
+ *
82
+ * @param response response from the backend
83
+ * @throws an error with status 401 if an HTML form is returned
84
+ */
85
+ function throwIfHtmlLoginForm(response) {
86
+ if ((response === null || response === void 0 ? void 0 : response.status) !== 200) {
87
+ return;
88
+ }
89
+ if (response.headers['sap-err-id'] === 'ICFLOGONREQUIRED' || isHtmlLoginForm(response)) {
90
+ const err = new Error();
91
+ err.response = { status: 401 };
92
+ err.isAxiosError = true;
93
+ err.toJSON = () => {
94
+ return { status: 401 };
95
+ };
96
+ throw err;
97
+ }
98
+ }
99
+ /**
100
+ * @param response
101
+ * @returns true if the contents are determined to be HTML
102
+ */
103
+ function isHtmlResponse(response) {
104
+ return getContentType(response.headers['content-type'], response.data).startsWith('text/html');
105
+ }
106
+ /**
107
+ * @param response
108
+ * @returns true if we get an HTML login form
109
+ */
110
+ function isHtmlLoginForm(response) {
111
+ return isHtmlResponse(response) && typeof response.data === 'string' && !!response.data.match(/log[io]n/i);
112
+ }
113
+ /**
114
+ * @param contentTypeHeader
115
+ * @param responseData
116
+ * @returns content type
117
+ */
118
+ function getContentType(contentTypeHeader, responseData) {
119
+ var _a, _b;
120
+ if (contentTypeHeader) {
121
+ return contentTypeHeader.toLowerCase();
122
+ }
123
+ else if (typeof responseData === 'string') {
124
+ // Try to infer it from the data
125
+ return (_b = (_a = detect_content_type_1.default(Buffer.from(responseData))) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';
126
+ }
127
+ else {
128
+ return '';
129
+ }
130
+ }
131
+ /**
132
+ * Attach a connection handler to the given service provider.
133
+ *
134
+ * @param provider any service provider
135
+ */
136
+ function attachConnectionHandler(provider) {
137
+ // fetch xsrf token with the first request
138
+ const oneTimeReqInterceptorId = provider.interceptors.request.use((request) => {
139
+ var _a;
140
+ request.headers = (_a = request.headers) !== null && _a !== void 0 ? _a : {};
141
+ request.headers[CSRF.RequestHeaderName] = CSRF.RequestHeaderValue;
142
+ provider.interceptors.request.eject(oneTimeReqInterceptorId);
143
+ return request;
144
+ });
145
+ // throw error on connection issues and remove interceptor if successfully connected
146
+ const oneTimeRespInterceptorId = provider.interceptors.response.use((response) => {
147
+ var _a, _b, _c, _d;
148
+ if (response.status >= 400) {
149
+ throw new error_1.ConnectionError(response.statusText, response);
150
+ }
151
+ else {
152
+ // if a redirect to a SAML login page happened try again with disable saml param
153
+ if (isSamlLogonNeeded(response) && ((_a = provider.defaults.params) === null || _a === void 0 ? void 0 : _a.saml2) !== 'disabled') {
154
+ provider.defaults.params = (_b = provider.defaults.params) !== null && _b !== void 0 ? _b : {};
155
+ provider.defaults.params.saml2 = 'disabled';
156
+ return provider.request(response.config);
157
+ }
158
+ else {
159
+ throwIfHtmlLoginForm(response);
160
+ // remember xsrf token
161
+ if ((_c = response.headers) === null || _c === void 0 ? void 0 : _c[CSRF.ResponseHeaderName]) {
162
+ provider.defaults.headers = (_d = provider.defaults.headers) !== null && _d !== void 0 ? _d : {
163
+ common: {},
164
+ // eslint-disable-next-line quote-props
165
+ delete: {},
166
+ put: {},
167
+ get: {},
168
+ post: {},
169
+ head: {},
170
+ patch: {}
171
+ };
172
+ provider.defaults.headers.common[CSRF.RequestHeaderName] =
173
+ response.headers[CSRF.ResponseHeaderName];
174
+ }
175
+ provider.interceptors.response.eject(oneTimeRespInterceptorId);
176
+ return response;
177
+ }
178
+ }
179
+ });
180
+ // always add cookies to outgoing requests
181
+ provider.interceptors.request.use((request) => {
182
+ var _a;
183
+ request.headers = (_a = request.headers) !== null && _a !== void 0 ? _a : {};
184
+ request.headers.cookie = provider.cookies.toString();
185
+ return request;
186
+ });
187
+ // remember new cookies from each new response
188
+ provider.interceptors.response.use((response) => {
189
+ provider.cookies.setCookies(response);
190
+ return response;
191
+ });
192
+ }
193
+ exports.attachConnectionHandler = attachConnectionHandler;
194
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/auth/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AxiosResponse } from 'axios';
2
+ /** Wraps `Error`. Used as base class for other specific errors */
3
+ export declare abstract class BaseError<T> extends Error {
4
+ readonly cause: T;
5
+ /**
6
+ * Constructor taking a message and any object.
7
+ *
8
+ * @param message human readable error message
9
+ * @param cause object causing the issue
10
+ */
11
+ constructor(message: string, cause?: T);
12
+ }
13
+ /**
14
+ * Error representing a connection problem.
15
+ */
16
+ export declare class ConnectionError extends BaseError<AxiosResponse> {
17
+ }
18
+ /**
19
+ * Error representing a timeout.
20
+ */
21
+ export declare class TimeoutError extends BaseError<Error> {
22
+ }
23
+ /**
24
+ * Error representing a timeout from a UAA service.
25
+ */
26
+ export declare class UAATimeoutError extends TimeoutError {
27
+ }
28
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/auth/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,kEAAkE;AAClE,8BAAsB,SAAS,CAAC,CAAC,CAAE,SAAQ,KAAK;IAC5C,SAAgB,KAAK,EAAE,CAAC,CAAC;IAEzB;;;;;OAKG;gBACS,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;CAKzC;AACD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS,CAAC,aAAa,CAAC;CAAG;AAEhE;;GAEG;AACH,qBAAa,YAAa,SAAQ,SAAS,CAAC,KAAK,CAAC;CAAG;AAErD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;CAAG"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UAATimeoutError = exports.TimeoutError = exports.ConnectionError = exports.BaseError = void 0;
4
+ /** Wraps `Error`. Used as base class for other specific errors */
5
+ class BaseError extends Error {
6
+ /**
7
+ * Constructor taking a message and any object.
8
+ *
9
+ * @param message human readable error message
10
+ * @param cause object causing the issue
11
+ */
12
+ constructor(message, cause) {
13
+ super(message);
14
+ this.cause = cause;
15
+ this.name = this.constructor.name;
16
+ }
17
+ }
18
+ exports.BaseError = BaseError;
19
+ /**
20
+ * Error representing a connection problem.
21
+ */
22
+ class ConnectionError extends BaseError {
23
+ }
24
+ exports.ConnectionError = ConnectionError;
25
+ /**
26
+ * Error representing a timeout.
27
+ */
28
+ class TimeoutError extends BaseError {
29
+ }
30
+ exports.TimeoutError = TimeoutError;
31
+ /**
32
+ * Error representing a timeout from a UAA service.
33
+ */
34
+ class UAATimeoutError extends TimeoutError {
35
+ }
36
+ exports.UAATimeoutError = UAATimeoutError;
37
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/auth/error.ts"],"names":[],"mappings":";;;AAEA,kEAAkE;AAClE,MAAsB,SAAa,SAAQ,KAAK;IAG5C;;;;;OAKG;IACH,YAAY,OAAe,EAAE,KAAS;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAdD,8BAcC;AACD;;GAEG;AACH,MAAa,eAAgB,SAAQ,SAAwB;CAAG;AAAhE,0CAAgE;AAEhE;;GAEG;AACH,MAAa,YAAa,SAAQ,SAAgB;CAAG;AAArD,oCAAqD;AAErD;;GAEG;AACH,MAAa,eAAgB,SAAQ,YAAY;CAAG;AAApD,0CAAoD"}
@@ -0,0 +1,19 @@
1
+ import { ServiceInfo } from '@sap-ux/btp-utils';
2
+ import type { Axios } from 'axios';
3
+ import type { AbapServiceProvider } from '../abap';
4
+ import { RefreshTokenChanged, Uaa } from './uaa';
5
+ export * from './connection';
6
+ export * from './error';
7
+ export { ServiceInfo, RefreshTokenChanged, Uaa };
8
+ /**
9
+ * @param provider
10
+ */
11
+ export declare function attachBasicAuthInterceptor(provider: Axios): void;
12
+ /**
13
+ * @param provider
14
+ * @param service
15
+ * @param refreshToken
16
+ * @param refreshTokenUpdateCb
17
+ */
18
+ export declare function attachUaaAuthInterceptor(provider: AbapServiceProvider, service: ServiceInfo, refreshToken?: string, refreshTokenUpdateCb?: RefreshTokenChanged): void;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAqC,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjD,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;AAEjD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,WAAW,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,oBAAoB,CAAC,EAAE,mBAAmB,GAC3C,IAAI,CAkBN"}
@@ -0,0 +1,64 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.attachUaaAuthInterceptor = exports.attachBasicAuthInterceptor = exports.Uaa = void 0;
23
+ const uaa_1 = require("./uaa");
24
+ Object.defineProperty(exports, "Uaa", { enumerable: true, get: function () { return uaa_1.Uaa; } });
25
+ __exportStar(require("./connection"), exports);
26
+ __exportStar(require("./error"), exports);
27
+ /**
28
+ * @param provider
29
+ */
30
+ function attachBasicAuthInterceptor(provider) {
31
+ const oneTimeInterceptorId = provider.interceptors.response.use((response) => {
32
+ delete provider.defaults.auth;
33
+ provider.interceptors.response.eject(oneTimeInterceptorId);
34
+ return response;
35
+ });
36
+ }
37
+ exports.attachBasicAuthInterceptor = attachBasicAuthInterceptor;
38
+ /**
39
+ * @param provider
40
+ * @param service
41
+ * @param refreshToken
42
+ * @param refreshTokenUpdateCb
43
+ */
44
+ function attachUaaAuthInterceptor(provider, service, refreshToken, refreshTokenUpdateCb) {
45
+ const uaa = new uaa_1.Uaa(service, provider.log);
46
+ let token;
47
+ // provide function to fetch user infos from UAA if needed
48
+ provider.user = () => __awaiter(this, void 0, void 0, function* () {
49
+ token = token !== null && token !== void 0 ? token : (yield uaa.getAccessToken(refreshToken, refreshTokenUpdateCb));
50
+ return uaa.getUserInfo(token);
51
+ });
52
+ const oneTimeInterceptorId = provider.interceptors.request.use((request) => __awaiter(this, void 0, void 0, function* () {
53
+ var _a;
54
+ token = token !== null && token !== void 0 ? token : (yield uaa.getAccessToken(refreshToken, refreshTokenUpdateCb));
55
+ // add token as auth header
56
+ request.headers = (_a = request.headers) !== null && _a !== void 0 ? _a : {};
57
+ request.headers.authorization = `bearer ${token}`;
58
+ // remove this interceptor since it is not needed anymore
59
+ provider.interceptors.request.eject(oneTimeInterceptorId);
60
+ return request;
61
+ }));
62
+ }
63
+ exports.attachUaaAuthInterceptor = attachUaaAuthInterceptor;
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAGA,+BAAiD;AAKN,oFALb,SAAG,OAKa;AAH9C,+CAA6B;AAC7B,0CAAwB;AAIxB;;GAEG;AACH,SAAgB,0BAA0B,CAAC,QAAe;IACtD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAuB,EAAE,EAAE;QACxF,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAND,gEAMC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CACpC,QAA6B,EAC7B,OAAoB,EACpB,YAAqB,EACrB,oBAA0C;IAE1C,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,KAAa,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,GAAG,GAAS,EAAE;QACvB,KAAK,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAA,CAAC;IAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAO,OAA2B,EAAE,EAAE;;QACjG,KAAK,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAChF,2BAA2B;QAC3B,OAAO,CAAC,OAAO,SAAG,OAAO,CAAC,OAAO,mCAAI,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;QAClD,yDAAyD;QACzD,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACnB,CAAC,CAAA,CAAC,CAAC;AACP,CAAC;AAvBD,4DAuBC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Class representing a local OAuth redirect listener.
3
+ */
4
+ export declare class Redirect {
5
+ static readonly path = "/oauth/client/redirect";
6
+ private readonly port;
7
+ /**
8
+ * Constructor with a port number.
9
+ *
10
+ * @param port port on which the redirect service is listening.
11
+ */
12
+ constructor(port: number);
13
+ /**
14
+ * Get the url for the redirect service.
15
+ *
16
+ * @returns a string representing the redirect url.
17
+ */
18
+ url(): string;
19
+ }
20
+ //# sourceMappingURL=redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/auth/redirect.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ;IACjB,gBAAuB,IAAI,4BAA4B;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B;;;;OAIG;gBACS,IAAI,EAAE,MAAM;IAIxB;;;;OAIG;IACI,GAAG,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Redirect = void 0;
4
+ /**
5
+ * Class representing a local OAuth redirect listener.
6
+ */
7
+ class Redirect {
8
+ /**
9
+ * Constructor with a port number.
10
+ *
11
+ * @param port port on which the redirect service is listening.
12
+ */
13
+ constructor(port) {
14
+ this.port = port;
15
+ }
16
+ /**
17
+ * Get the url for the redirect service.
18
+ *
19
+ * @returns a string representing the redirect url.
20
+ */
21
+ url() {
22
+ return `http://localhost:${this.port}${Redirect.path}`;
23
+ }
24
+ }
25
+ exports.Redirect = Redirect;
26
+ Redirect.path = '/oauth/client/redirect';
27
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/auth/redirect.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAQ;IAIjB;;;;OAIG;IACH,YAAY,IAAY;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACI,GAAG;QACN,OAAO,oBAAoB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3D,CAAC;;AApBL,4BAqBC;AApB0B,aAAI,GAAG,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const redirectSuccessHtml: (logoutUrl?: string, systemId?: string) => string;
2
+ //# sourceMappingURL=static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/auth/static.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,eAAgB,MAAM,aAAa,MAAM,KAAG,MA8H3E,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirectSuccessHtml = void 0;
4
+ exports.redirectSuccessHtml = (logoutUrl, systemId) => `
5
+ <html>
6
+
7
+ <head>
8
+ <meta http-equiv="content-type" content="text/html; charset=windows-1252">
9
+ <title>${systemId ? systemId + ': ' : ''}Authentication Successful</title>
10
+ <style>
11
+ body {
12
+ background: #ffffff;
13
+ text-align: center;
14
+ width: 100%;
15
+ height: 100%;
16
+ overflow: hidden;
17
+ }
18
+
19
+ .content {
20
+ display: table;
21
+ position: absolute;
22
+ width: 100%;
23
+ height: 80%;
24
+ }
25
+
26
+ .valigned {
27
+ display: table-cell;
28
+ vertical-align: middle;
29
+ }
30
+
31
+ .lowerCenter {
32
+ display: table-cell;
33
+ vertical-align: bottom;
34
+ }
35
+
36
+ .footer {
37
+ position: absolute;
38
+ bottom: 0;
39
+ left: 0;
40
+ width: 100%;
41
+ z-index: -1;
42
+ }
43
+
44
+ .footerLeft {
45
+ float: left;
46
+ margin-left: 20px;
47
+ }
48
+
49
+ .footerRight {
50
+ float: right;
51
+ margin-right: 20px;
52
+ position: absolute;
53
+ bottom: 0px;
54
+ right: 0px;
55
+ }
56
+
57
+ .centerText {
58
+ font-style: normal;
59
+ font-family: Arial;
60
+ font-size: 26px;
61
+ color: #444444;
62
+ z-index: 1;
63
+ }
64
+ .centerLink {
65
+ font-style: normal;
66
+ font-family: Arial, Helvetica, sans-serif;
67
+ font-size: 18px;
68
+ text-decoration: none;
69
+ color: #224679;
70
+ }
71
+
72
+ .errorTextHeader {
73
+ font-style: normal;
74
+ font-family: Arial;
75
+ font-size: 40px;
76
+ color: #444444;
77
+ }
78
+
79
+ .bottomText {
80
+ align: center;
81
+ font-style: normal;
82
+ font-family: Arial;
83
+ font-size: 14px;
84
+ color: #444444;
85
+ }
86
+
87
+ .biggerBottomText {
88
+ align: center;
89
+ font-style: normal;
90
+ font-family: Arial;
91
+ font-size: 16px;
92
+ color: #444444;
93
+ }
94
+
95
+ .detailTable {
96
+ align: bottom;
97
+ vertical-align: middle;
98
+ margin-left: auto;
99
+ margin-right: auto;
100
+ font-style: normal;
101
+ font-family: Arial;
102
+ font-size: 16px;
103
+ color: #444444;
104
+ }
105
+ </style>
106
+ </head>
107
+
108
+ <body>
109
+ <div class="content">
110
+ <div class="valigned">
111
+ <p class="centerText"><span class="errorTextHeader">You can close this tab now.</span></p>
112
+ ${logoutUrl
113
+ ? '<a class="centerLink" href="' + logoutUrl + '">(Click here to log off the current user)</a>'
114
+ : ''}
115
+ </div>
116
+ </div>
117
+ <div class="footer">
118
+ <div class="footerLeft"><img width='150' height='80' title='' alt='SAP logo'
119
+ src='data:image/png;base64,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'>
120
+ </div>
121
+ <div class="footerRight">
122
+ <p class="bottomText"><span class="biggerBottomText">&copy;</span>2020 SAP SE, All rights reserved.</p>
123
+ </div>
124
+ </div>
125
+ </body>
126
+
127
+ </html>
128
+ `;
129
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/auth/static.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,CAAC,SAAkB,EAAE,QAAiB,EAAU,EAAE,CAAC;;;;;aAKzE,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwG5B,SAAS;IACL,CAAC,CAAC,8BAA8B,GAAG,SAAS,GAAG,gDAAgD;IAC/F,CAAC,CAAC,EACV;;;;;;;;;;;;;;CAcX,CAAC"}