@mcp-abap-adt/auth-providers 0.2.10 → 1.0.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 (63) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +89 -0
  3. package/dist/__tests__/helpers/netHelpers.d.ts +3 -0
  4. package/dist/__tests__/helpers/netHelpers.d.ts.map +1 -0
  5. package/dist/__tests__/helpers/netHelpers.js +63 -0
  6. package/dist/auth/manualInput.d.ts +5 -0
  7. package/dist/auth/manualInput.d.ts.map +1 -0
  8. package/dist/auth/manualInput.js +19 -0
  9. package/dist/auth/oidcBrowserAuth.d.ts +9 -0
  10. package/dist/auth/oidcBrowserAuth.d.ts.map +1 -0
  11. package/dist/auth/oidcBrowserAuth.js +144 -0
  12. package/dist/auth/oidcDiscovery.d.ts +14 -0
  13. package/dist/auth/oidcDiscovery.d.ts.map +1 -0
  14. package/dist/auth/oidcDiscovery.js +33 -0
  15. package/dist/auth/oidcPkce.d.ts +6 -0
  16. package/dist/auth/oidcPkce.d.ts.map +1 -0
  17. package/dist/auth/oidcPkce.js +22 -0
  18. package/dist/auth/oidcToken.d.ts +26 -0
  19. package/dist/auth/oidcToken.d.ts.map +1 -0
  20. package/dist/auth/oidcToken.js +165 -0
  21. package/dist/auth/saml2Auth.d.ts +15 -0
  22. package/dist/auth/saml2Auth.d.ts.map +1 -0
  23. package/dist/auth/saml2Auth.js +205 -0
  24. package/dist/auth/saml2TokenExchange.d.ts +12 -0
  25. package/dist/auth/saml2TokenExchange.d.ts.map +1 -0
  26. package/dist/auth/saml2TokenExchange.js +39 -0
  27. package/dist/index.d.ts +4 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -1
  30. package/dist/providers/BaseTokenProvider.d.ts +1 -0
  31. package/dist/providers/BaseTokenProvider.d.ts.map +1 -1
  32. package/dist/providers/BaseTokenProvider.js +28 -2
  33. package/dist/providers/OidcBrowserProvider.d.ts +24 -0
  34. package/dist/providers/OidcBrowserProvider.d.ts.map +1 -0
  35. package/dist/providers/OidcBrowserProvider.js +76 -0
  36. package/dist/providers/OidcDeviceFlowProvider.d.ts +22 -0
  37. package/dist/providers/OidcDeviceFlowProvider.d.ts.map +1 -0
  38. package/dist/providers/OidcDeviceFlowProvider.js +68 -0
  39. package/dist/providers/OidcPasswordProvider.d.ts +24 -0
  40. package/dist/providers/OidcPasswordProvider.d.ts.map +1 -0
  41. package/dist/providers/OidcPasswordProvider.js +55 -0
  42. package/dist/providers/OidcTokenExchangeProvider.d.ts +27 -0
  43. package/dist/providers/OidcTokenExchangeProvider.d.ts.map +1 -0
  44. package/dist/providers/OidcTokenExchangeProvider.js +43 -0
  45. package/dist/providers/Saml2BearerProvider.d.ts +21 -0
  46. package/dist/providers/Saml2BearerProvider.d.ts.map +1 -0
  47. package/dist/providers/Saml2BearerProvider.js +49 -0
  48. package/dist/providers/Saml2PureProvider.d.ts +20 -0
  49. package/dist/providers/Saml2PureProvider.d.ts.map +1 -0
  50. package/dist/providers/Saml2PureProvider.js +39 -0
  51. package/dist/providers/index.d.ts +12 -0
  52. package/dist/providers/index.d.ts.map +1 -1
  53. package/dist/providers/index.js +13 -1
  54. package/dist/providers/saml2Utils.d.ts +30 -0
  55. package/dist/providers/saml2Utils.d.ts.map +1 -0
  56. package/dist/providers/saml2Utils.js +49 -0
  57. package/dist/sso/SsoProviderFactory.d.ts +6 -0
  58. package/dist/sso/SsoProviderFactory.d.ts.map +1 -0
  59. package/dist/sso/SsoProviderFactory.js +37 -0
  60. package/dist/sso/types.d.ts +34 -0
  61. package/dist/sso/types.d.ts.map +1 -0
  62. package/dist/sso/types.js +2 -0
  63. package/package.json +3 -3
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SAML 2.0 auth helpers
3
+ */
4
+ import type { ILogger } from '@mcp-abap-adt/interfaces';
5
+ export interface Saml2AuthConfig {
6
+ idpSsoUrl: string;
7
+ spEntityId: string;
8
+ acsUrl: string;
9
+ relayState?: string;
10
+ authorizationUrl?: string;
11
+ }
12
+ export declare function buildSamlAuthorizationUrl(config: Saml2AuthConfig): string;
13
+ export declare function startSamlBrowserAuth(config: Saml2AuthConfig, browser: string, logger?: ILogger, port?: number): Promise<string>;
14
+ export declare function parseSamlNotOnOrAfter(samlResponse: string): number | undefined;
15
+ //# sourceMappingURL=saml2Auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saml2Auth.d.ts","sourceRoot":"","sources":["../../src/auth/saml2Auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA8CD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAazE;AA+CD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,EAChB,IAAI,GAAE,MAAa,GAClB,OAAO,CAAC,MAAM,CAAC,CA4DjB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAYpB"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * SAML 2.0 auth helpers
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.buildSamlAuthorizationUrl = buildSamlAuthorizationUrl;
43
+ exports.startSamlBrowserAuth = startSamlBrowserAuth;
44
+ exports.parseSamlNotOnOrAfter = parseSamlNotOnOrAfter;
45
+ const node_crypto_1 = require("node:crypto");
46
+ const http = __importStar(require("node:http"));
47
+ const net = __importStar(require("node:net"));
48
+ const node_zlib_1 = require("node:zlib");
49
+ const express_1 = __importDefault(require("express"));
50
+ const BROWSER_MAP = {
51
+ chrome: 'chrome',
52
+ edge: 'msedge',
53
+ firefox: 'firefox',
54
+ system: undefined,
55
+ auto: undefined,
56
+ headless: null,
57
+ none: null,
58
+ };
59
+ function isPortAvailable(port) {
60
+ return new Promise((resolve) => {
61
+ const server = net.createServer();
62
+ server.listen(port, () => {
63
+ server.once('close', () => resolve(true));
64
+ server.close();
65
+ });
66
+ server.on('error', () => resolve(false));
67
+ });
68
+ }
69
+ function base64Encode(input) {
70
+ return Buffer.isBuffer(input)
71
+ ? input.toString('base64')
72
+ : Buffer.from(input, 'utf8').toString('base64');
73
+ }
74
+ function buildAuthnRequestXml(spEntityId, acsUrl) {
75
+ const issueInstant = new Date().toISOString();
76
+ const id = `_${(0, node_crypto_1.randomUUID)()}`;
77
+ return [
78
+ '<?xml version="1.0" encoding="UTF-8"?>',
79
+ '<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"',
80
+ ' xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"',
81
+ ` ID="${id}"`,
82
+ ' Version="2.0"',
83
+ ` IssueInstant="${issueInstant}"`,
84
+ ` ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"`,
85
+ ` AssertionConsumerServiceURL="${acsUrl}">`,
86
+ `<saml:Issuer>${spEntityId}</saml:Issuer>`,
87
+ '</samlp:AuthnRequest>',
88
+ ].join('');
89
+ }
90
+ function buildSamlAuthorizationUrl(config) {
91
+ if (config.authorizationUrl) {
92
+ return config.authorizationUrl;
93
+ }
94
+ const xml = buildAuthnRequestXml(config.spEntityId, config.acsUrl);
95
+ const deflated = (0, node_zlib_1.deflateRawSync)(Buffer.from(xml, 'utf8'));
96
+ const samlRequest = encodeURIComponent(base64Encode(deflated));
97
+ const relayState = config.relayState
98
+ ? `&RelayState=${encodeURIComponent(config.relayState)}`
99
+ : '';
100
+ return `${config.idpSsoUrl}?SAMLRequest=${samlRequest}${relayState}`;
101
+ }
102
+ async function openBrowserUrl(authorizationUrl, browser, logger) {
103
+ const browserApp = BROWSER_MAP[browser];
104
+ if (browserApp === null) {
105
+ logger?.info('[SAML] Browser suppressed, open URL manually', {
106
+ authorizationUrl,
107
+ });
108
+ return;
109
+ }
110
+ if (browser === 'auto') {
111
+ try {
112
+ const openModule = await Promise.resolve().then(() => __importStar(require('open')));
113
+ const open = openModule.default;
114
+ await open(authorizationUrl);
115
+ logger?.info('[SAML] Browser opened');
116
+ return;
117
+ }
118
+ catch (error) {
119
+ logger?.warn('[SAML] Failed to open browser automatically', {
120
+ error: error instanceof Error ? error.message : String(error),
121
+ });
122
+ logger?.info('[SAML] Open URL manually', { authorizationUrl });
123
+ return;
124
+ }
125
+ }
126
+ try {
127
+ const openModule = await Promise.resolve().then(() => __importStar(require('open')));
128
+ const open = openModule.default;
129
+ if (browserApp) {
130
+ await open(authorizationUrl, { app: { name: browserApp } });
131
+ }
132
+ else {
133
+ await open(authorizationUrl);
134
+ }
135
+ }
136
+ catch (error) {
137
+ logger?.warn('[SAML] Failed to open browser', {
138
+ error: error instanceof Error ? error.message : String(error),
139
+ });
140
+ logger?.info('[SAML] Open URL manually', { authorizationUrl });
141
+ }
142
+ }
143
+ async function startSamlBrowserAuth(config, browser, logger, port = 3001) {
144
+ const portAvailable = await isPortAvailable(port);
145
+ if (!portAvailable) {
146
+ throw new Error(`Port ${port} is already in use. Please specify a different port or free the port.`);
147
+ }
148
+ const authorizationUrl = buildSamlAuthorizationUrl(config);
149
+ return new Promise((resolve, reject) => {
150
+ const app = (0, express_1.default)();
151
+ app.use(express_1.default.urlencoded({ extended: false, limit: '5mb' }));
152
+ const server = http.createServer(app);
153
+ server.keepAliveTimeout = 0;
154
+ server.headersTimeout = 0;
155
+ const PORT = port;
156
+ let resolved = false;
157
+ const cleanup = () => {
158
+ if (resolved)
159
+ return;
160
+ resolved = true;
161
+ server.close();
162
+ };
163
+ const handleResponse = (samlResponse) => {
164
+ if (!samlResponse) {
165
+ cleanup();
166
+ reject(new Error('Missing SAMLResponse'));
167
+ return;
168
+ }
169
+ cleanup();
170
+ resolve(samlResponse);
171
+ };
172
+ app.post('/callback', (req, res) => {
173
+ const samlResponse = req.body?.SAMLResponse;
174
+ res
175
+ .status(200)
176
+ .send('SAML authentication complete. You can close this window.');
177
+ handleResponse(typeof samlResponse === 'string' ? samlResponse : undefined);
178
+ });
179
+ app.get('/callback', (req, res) => {
180
+ const samlResponse = req.query.SAMLResponse;
181
+ res
182
+ .status(200)
183
+ .send('SAML authentication complete. You can close this window.');
184
+ handleResponse(typeof samlResponse === 'string' ? samlResponse : undefined);
185
+ });
186
+ server.listen(PORT, async () => {
187
+ logger?.info('[SAML] Callback server listening', { port: PORT });
188
+ await openBrowserUrl(authorizationUrl, browser, logger);
189
+ });
190
+ });
191
+ }
192
+ function parseSamlNotOnOrAfter(samlResponse) {
193
+ try {
194
+ const decoded = Buffer.from(samlResponse, 'base64').toString('utf8');
195
+ const match = decoded.match(/NotOnOrAfter="([^"]+)"/);
196
+ if (!match) {
197
+ return undefined;
198
+ }
199
+ const date = Date.parse(match[1]);
200
+ return Number.isNaN(date) ? undefined : date;
201
+ }
202
+ catch {
203
+ return undefined;
204
+ }
205
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SAML 2.0 bearer assertion exchange
3
+ */
4
+ import type { ILogger } from '@mcp-abap-adt/interfaces';
5
+ export interface Saml2TokenExchangeResponse {
6
+ accessToken: string;
7
+ refreshToken?: string;
8
+ expiresIn?: number;
9
+ tokenType?: string;
10
+ }
11
+ export declare function exchangeSamlAssertion(samlResponse: string, tokenUrl: string, clientId: string | undefined, clientSecret: string | undefined, logger?: ILogger): Promise<Saml2TokenExchangeResponse>;
12
+ //# sourceMappingURL=saml2TokenExchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saml2TokenExchange.d.ts","sourceRoot":"","sources":["../../src/auth/saml2TokenExchange.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGxD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,0BAA0B,CAAC,CA6BrC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * SAML 2.0 bearer assertion exchange
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.exchangeSamlAssertion = exchangeSamlAssertion;
10
+ const axios_1 = __importDefault(require("axios"));
11
+ function toBasicAuth(clientId, clientSecret) {
12
+ return Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
13
+ }
14
+ async function exchangeSamlAssertion(samlResponse, tokenUrl, clientId, clientSecret, logger) {
15
+ const params = new URLSearchParams();
16
+ params.append('grant_type', 'urn:ietf:params:oauth:grant-type:saml2-bearer');
17
+ params.append('assertion', samlResponse);
18
+ if (clientId) {
19
+ params.append('client_id', clientId);
20
+ }
21
+ logger?.info('[SAML] Exchanging assertion for token', { tokenUrl });
22
+ const headers = {
23
+ 'Content-Type': 'application/x-www-form-urlencoded',
24
+ };
25
+ if (clientId && clientSecret) {
26
+ headers.Authorization = `Basic ${toBasicAuth(clientId, clientSecret)}`;
27
+ }
28
+ const response = await axios_1.default.post(tokenUrl, params.toString(), { headers });
29
+ const data = response.data;
30
+ if (!data?.access_token) {
31
+ throw new Error('Token response missing access_token');
32
+ }
33
+ return {
34
+ accessToken: data.access_token,
35
+ refreshToken: data.refresh_token,
36
+ expiresIn: data.expires_in,
37
+ tokenType: data.token_type,
38
+ };
39
+ }
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  * Provides token providers
6
6
  */
7
7
  export { BrowserAuthError, RefreshError, ServiceKeyError, SessionDataError, TokenProviderError, ValidationError, } from './errors/TokenProviderErrors';
8
- export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig, DeviceFlowProviderConfig, } from './providers';
9
- export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider, DeviceFlowProvider, } from './providers';
8
+ export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig, DeviceFlowProviderConfig, OidcBrowserProviderConfig, OidcDeviceFlowProviderConfig, OidcPasswordProviderConfig, OidcTokenExchangeProviderConfig, Saml2BearerProviderConfig, Saml2PureProviderConfig, } from './providers';
9
+ export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider, DeviceFlowProvider, OidcBrowserProvider, OidcDeviceFlowProvider, OidcPasswordProvider, OidcTokenExchangeProvider, Saml2BearerProvider, Saml2PureProvider, } from './providers';
10
+ export { SsoProviderFactory } from './sso/SsoProviderFactory';
11
+ export type { SsoProviderConfig, SsoProviderInstance } from './sso/types';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * Provides token providers
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.DeviceFlowProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = exports.ValidationError = exports.TokenProviderError = exports.SessionDataError = exports.ServiceKeyError = exports.RefreshError = exports.BrowserAuthError = void 0;
9
+ exports.SsoProviderFactory = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.DeviceFlowProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = exports.ValidationError = exports.TokenProviderError = exports.SessionDataError = exports.ServiceKeyError = exports.RefreshError = exports.BrowserAuthError = void 0;
10
10
  // Errors
11
11
  var TokenProviderErrors_1 = require("./errors/TokenProviderErrors");
12
12
  Object.defineProperty(exports, "BrowserAuthError", { enumerable: true, get: function () { return TokenProviderErrors_1.BrowserAuthError; } });
@@ -21,3 +21,12 @@ Object.defineProperty(exports, "AuthorizationCodeProvider", { enumerable: true,
21
21
  Object.defineProperty(exports, "BaseTokenProvider", { enumerable: true, get: function () { return providers_1.BaseTokenProvider; } });
22
22
  Object.defineProperty(exports, "ClientCredentialsProvider", { enumerable: true, get: function () { return providers_1.ClientCredentialsProvider; } });
23
23
  Object.defineProperty(exports, "DeviceFlowProvider", { enumerable: true, get: function () { return providers_1.DeviceFlowProvider; } });
24
+ Object.defineProperty(exports, "OidcBrowserProvider", { enumerable: true, get: function () { return providers_1.OidcBrowserProvider; } });
25
+ Object.defineProperty(exports, "OidcDeviceFlowProvider", { enumerable: true, get: function () { return providers_1.OidcDeviceFlowProvider; } });
26
+ Object.defineProperty(exports, "OidcPasswordProvider", { enumerable: true, get: function () { return providers_1.OidcPasswordProvider; } });
27
+ Object.defineProperty(exports, "OidcTokenExchangeProvider", { enumerable: true, get: function () { return providers_1.OidcTokenExchangeProvider; } });
28
+ Object.defineProperty(exports, "Saml2BearerProvider", { enumerable: true, get: function () { return providers_1.Saml2BearerProvider; } });
29
+ Object.defineProperty(exports, "Saml2PureProvider", { enumerable: true, get: function () { return providers_1.Saml2PureProvider; } });
30
+ // SSO factory
31
+ var SsoProviderFactory_1 = require("./sso/SsoProviderFactory");
32
+ Object.defineProperty(exports, "SsoProviderFactory", { enumerable: true, get: function () { return SsoProviderFactory_1.SsoProviderFactory; } });
@@ -21,6 +21,7 @@ export declare abstract class BaseTokenProvider implements ITokenProvider {
21
21
  protected authorizationToken?: string;
22
22
  protected refreshToken?: string;
23
23
  protected expiresAt?: number;
24
+ protected tokenType?: 'jwt' | 'saml' | 'opaque';
24
25
  protected logger?: ILogger;
25
26
  /**
26
27
  * Format timestamp to readable date/time string
@@ -1 +1 @@
1
- {"version":3,"file":"BaseTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BaseTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;GAQG;AACH,8BAAsB,iBAAkB,YAAW,cAAc;IAC/D,SAAS,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAWzD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMzD;;;OAGG;IACH,SAAS,CAAC,YAAY,IAAI,OAAO;IAyBjC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAExD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;IAE1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,eAAe;IAEjD;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAuElC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3E;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAoBlD;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA0BnE;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAShE"}
1
+ {"version":3,"file":"BaseTokenProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BaseTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;GAQG;AACH,8BAAsB,iBAAkB,YAAW,cAAc;IAC/D,SAAS,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAWzD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMzD;;;OAGG;IACH,SAAS,CAAC,YAAY,IAAI,OAAO;IAyBjC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAExD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;IAE1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,eAAe;IAEjD;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAyElC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC3E;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IA0BlD;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA0BnE;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAShE"}
@@ -23,6 +23,7 @@ class BaseTokenProvider {
23
23
  authorizationToken;
24
24
  refreshToken;
25
25
  expiresAt; // timestamp in milliseconds
26
+ tokenType;
26
27
  logger;
27
28
  /**
28
29
  * Format timestamp to readable date/time string
@@ -107,6 +108,8 @@ class BaseTokenProvider {
107
108
  authorizationToken,
108
109
  refreshToken: this.refreshToken,
109
110
  authType: this.getAuthType(),
111
+ tokenType: this.tokenType ?? 'jwt',
112
+ expiresAt: this.expiresAt,
110
113
  expiresIn: this.expiresAt
111
114
  ? Math.floor((this.expiresAt - Date.now()) / 1000)
112
115
  : undefined,
@@ -149,6 +152,21 @@ class BaseTokenProvider {
149
152
  }
150
153
  async validateToken(_token, _serviceUrl) {
151
154
  this.logger?.debug('[BaseTokenProvider] Validating token');
155
+ if (this.tokenType && this.tokenType !== 'jwt') {
156
+ if (!this.expiresAt) {
157
+ this.logger?.warn('[BaseTokenProvider] Token validation failed: missing expiresAt for non-JWT token');
158
+ return false;
159
+ }
160
+ const bufferMs = 60 * 1000;
161
+ const isValid = Date.now() < this.expiresAt - bufferMs;
162
+ this.logger?.info('[BaseTokenProvider] Token validation result', {
163
+ isValid,
164
+ tokenType: this.tokenType,
165
+ expiresAt: this.formatExpirationDate(this.expiresAt),
166
+ expiresIn: Math.floor((this.expiresAt - Date.now()) / 1000),
167
+ });
168
+ return isValid;
169
+ }
152
170
  const expiresAt = this.parseExpirationFromJWT(_token);
153
171
  if (!expiresAt) {
154
172
  this.logger?.warn('[BaseTokenProvider] Token validation failed: cannot parse expiration');
@@ -171,17 +189,25 @@ class BaseTokenProvider {
171
189
  const oldToken = this.formatToken(this.authorizationToken);
172
190
  this.authorizationToken = result.authorizationToken;
173
191
  this.refreshToken = result.refreshToken;
174
- if (result.expiresIn) {
192
+ this.tokenType = result.tokenType ?? 'jwt';
193
+ if (result.expiresAt) {
194
+ this.expiresAt = result.expiresAt;
195
+ }
196
+ else if (result.expiresIn) {
175
197
  this.expiresAt = Date.now() + result.expiresIn * 1000;
176
198
  }
177
- else {
199
+ else if (this.tokenType === 'jwt') {
178
200
  // Try to parse expiration from JWT if expiresIn not provided
179
201
  this.expiresAt = this.parseExpirationFromJWT(result.authorizationToken);
180
202
  }
203
+ else {
204
+ this.expiresAt = undefined;
205
+ }
181
206
  this.logger?.info('[BaseTokenProvider] Tokens updated', {
182
207
  oldToken,
183
208
  newToken: this.formatToken(result.authorizationToken),
184
209
  newRefreshToken: this.formatToken(result.refreshToken),
210
+ tokenType: this.tokenType,
185
211
  expiresAt: this.expiresAt
186
212
  ? this.formatExpirationDate(this.expiresAt)
187
213
  : undefined,
@@ -0,0 +1,24 @@
1
+ /**
2
+ * OIDC Authorization Code Provider (with PKCE)
3
+ */
4
+ import type { ILogger, ITokenResult, OAuth2GrantType } from '@mcp-abap-adt/interfaces';
5
+ import { BaseTokenProvider } from './BaseTokenProvider';
6
+ export interface OidcBrowserProviderConfig {
7
+ issuerUrl: string;
8
+ clientId: string;
9
+ clientSecret?: string;
10
+ scopes?: string[];
11
+ browser?: string;
12
+ redirectPort?: number;
13
+ accessToken?: string;
14
+ refreshToken?: string;
15
+ logger?: ILogger;
16
+ }
17
+ export declare class OidcBrowserProvider extends BaseTokenProvider {
18
+ private config;
19
+ constructor(config: OidcBrowserProviderConfig);
20
+ protected getAuthType(): OAuth2GrantType;
21
+ protected performLogin(): Promise<ITokenResult>;
22
+ protected performRefresh(): Promise<ITokenResult>;
23
+ }
24
+ //# sourceMappingURL=OidcBrowserProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OidcBrowserProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OidcBrowserProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,EAAE,yBAAyB;IAc7C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cAsDrC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAsBxD"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * OIDC Authorization Code Provider (with PKCE)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OidcBrowserProvider = void 0;
7
+ const interfaces_1 = require("@mcp-abap-adt/interfaces");
8
+ const oidcBrowserAuth_1 = require("../auth/oidcBrowserAuth");
9
+ const oidcDiscovery_1 = require("../auth/oidcDiscovery");
10
+ const oidcPkce_1 = require("../auth/oidcPkce");
11
+ const oidcToken_1 = require("../auth/oidcToken");
12
+ const BaseTokenProvider_1 = require("./BaseTokenProvider");
13
+ class OidcBrowserProvider extends BaseTokenProvider_1.BaseTokenProvider {
14
+ config;
15
+ constructor(config) {
16
+ super();
17
+ this.config = config;
18
+ this.logger = config.logger;
19
+ if (config.accessToken) {
20
+ this.authorizationToken = config.accessToken;
21
+ this.expiresAt = this.parseExpirationFromJWT(config.accessToken);
22
+ }
23
+ if (config.refreshToken) {
24
+ this.refreshToken = config.refreshToken;
25
+ }
26
+ }
27
+ getAuthType() {
28
+ return interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE_PKCE;
29
+ }
30
+ async performLogin() {
31
+ const discovery = await (0, oidcDiscovery_1.discoverOidc)(this.config.issuerUrl, this.logger);
32
+ if (!discovery.authorization_endpoint) {
33
+ throw new Error('OIDC discovery missing authorization_endpoint');
34
+ }
35
+ const redirectPort = this.config.redirectPort || 3001;
36
+ const redirectUri = `http://localhost:${redirectPort}/callback`;
37
+ const scope = (this.config.scopes && this.config.scopes.length > 0
38
+ ? this.config.scopes
39
+ : ['openid', 'profile', 'email']).join(' ');
40
+ const verifier = (0, oidcPkce_1.generatePkceVerifier)();
41
+ const challenge = (0, oidcPkce_1.generatePkceChallenge)(verifier);
42
+ const params = new URLSearchParams();
43
+ params.append('response_type', 'code');
44
+ params.append('client_id', this.config.clientId);
45
+ params.append('redirect_uri', redirectUri);
46
+ params.append('scope', scope);
47
+ params.append('code_challenge', challenge);
48
+ params.append('code_challenge_method', 'S256');
49
+ const authorizationUrl = `${discovery.authorization_endpoint}?${params.toString()}`;
50
+ const browser = this.config.browser || 'auto';
51
+ const { code } = await (0, oidcBrowserAuth_1.startOidcBrowserAuth)(authorizationUrl, browser, this.logger, redirectPort);
52
+ const tokens = await (0, oidcToken_1.exchangeAuthorizationCode)(discovery.token_endpoint, this.config.clientId, this.config.clientSecret, code, redirectUri, verifier, this.logger);
53
+ return {
54
+ authorizationToken: tokens.accessToken,
55
+ refreshToken: tokens.refreshToken,
56
+ authType: interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE_PKCE,
57
+ expiresIn: tokens.expiresIn,
58
+ tokenType: 'jwt',
59
+ };
60
+ }
61
+ async performRefresh() {
62
+ if (!this.refreshToken) {
63
+ return this.performLogin();
64
+ }
65
+ const discovery = await (0, oidcDiscovery_1.discoverOidc)(this.config.issuerUrl, this.logger);
66
+ const tokens = await (0, oidcToken_1.refreshOidcToken)(discovery.token_endpoint, this.config.clientId, this.config.clientSecret, this.refreshToken, this.logger);
67
+ return {
68
+ authorizationToken: tokens.accessToken,
69
+ refreshToken: tokens.refreshToken || this.refreshToken,
70
+ authType: interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE_PKCE,
71
+ expiresIn: tokens.expiresIn,
72
+ tokenType: 'jwt',
73
+ };
74
+ }
75
+ }
76
+ exports.OidcBrowserProvider = OidcBrowserProvider;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * OIDC Device Flow Provider
3
+ */
4
+ import type { ILogger, ITokenResult, OAuth2GrantType } from '@mcp-abap-adt/interfaces';
5
+ import { BaseTokenProvider } from './BaseTokenProvider';
6
+ export interface OidcDeviceFlowProviderConfig {
7
+ issuerUrl: string;
8
+ clientId: string;
9
+ clientSecret?: string;
10
+ scopes?: string[];
11
+ accessToken?: string;
12
+ refreshToken?: string;
13
+ logger?: ILogger;
14
+ }
15
+ export declare class OidcDeviceFlowProvider extends BaseTokenProvider {
16
+ private config;
17
+ constructor(config: OidcDeviceFlowProviderConfig);
18
+ protected getAuthType(): OAuth2GrantType;
19
+ protected performLogin(): Promise<ITokenResult>;
20
+ protected performRefresh(): Promise<ITokenResult>;
21
+ }
22
+ //# sourceMappingURL=OidcDeviceFlowProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OidcDeviceFlowProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OidcDeviceFlowProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,OAAO,CAAC,MAAM,CAA+B;gBAEjC,MAAM,EAAE,4BAA4B;IAchD,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cA0CrC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAqBxD"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * OIDC Device Flow Provider
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OidcDeviceFlowProvider = void 0;
7
+ const interfaces_1 = require("@mcp-abap-adt/interfaces");
8
+ const oidcDiscovery_1 = require("../auth/oidcDiscovery");
9
+ const oidcToken_1 = require("../auth/oidcToken");
10
+ const BaseTokenProvider_1 = require("./BaseTokenProvider");
11
+ class OidcDeviceFlowProvider extends BaseTokenProvider_1.BaseTokenProvider {
12
+ config;
13
+ constructor(config) {
14
+ super();
15
+ this.config = config;
16
+ this.logger = config.logger;
17
+ if (config.accessToken) {
18
+ this.authorizationToken = config.accessToken;
19
+ this.expiresAt = this.parseExpirationFromJWT(config.accessToken);
20
+ }
21
+ if (config.refreshToken) {
22
+ this.refreshToken = config.refreshToken;
23
+ }
24
+ }
25
+ getAuthType() {
26
+ return interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE;
27
+ }
28
+ async performLogin() {
29
+ const discovery = await (0, oidcDiscovery_1.discoverOidc)(this.config.issuerUrl, this.logger);
30
+ if (!discovery.device_authorization_endpoint) {
31
+ throw new Error('OIDC discovery missing device_authorization_endpoint');
32
+ }
33
+ const scope = this.config.scopes?.join(' ');
34
+ const deviceFlow = await (0, oidcToken_1.initiateDeviceAuthorization)(discovery.device_authorization_endpoint, this.config.clientId, scope, this.logger);
35
+ // Manual user guidance
36
+ console.log('');
37
+ console.log('OIDC device authorization');
38
+ console.log('Go to:', deviceFlow.verificationUri);
39
+ if (deviceFlow.verificationUriComplete) {
40
+ console.log('Or use:', deviceFlow.verificationUriComplete);
41
+ }
42
+ console.log('Enter code:', deviceFlow.userCode);
43
+ console.log('');
44
+ const tokens = await (0, oidcToken_1.pollDeviceTokens)(discovery.token_endpoint, this.config.clientId, this.config.clientSecret, deviceFlow.deviceCode, deviceFlow.interval || 5, this.logger);
45
+ return {
46
+ authorizationToken: tokens.accessToken,
47
+ refreshToken: tokens.refreshToken,
48
+ authType: interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE,
49
+ expiresIn: tokens.expiresIn,
50
+ tokenType: 'jwt',
51
+ };
52
+ }
53
+ async performRefresh() {
54
+ if (!this.refreshToken) {
55
+ return this.performLogin();
56
+ }
57
+ const discovery = await (0, oidcDiscovery_1.discoverOidc)(this.config.issuerUrl, this.logger);
58
+ const tokens = await (0, oidcToken_1.refreshOidcToken)(discovery.token_endpoint, this.config.clientId, this.config.clientSecret, this.refreshToken, this.logger);
59
+ return {
60
+ authorizationToken: tokens.accessToken,
61
+ refreshToken: tokens.refreshToken || this.refreshToken,
62
+ authType: interfaces_1.AUTH_TYPE_AUTHORIZATION_CODE,
63
+ expiresIn: tokens.expiresIn,
64
+ tokenType: 'jwt',
65
+ };
66
+ }
67
+ }
68
+ exports.OidcDeviceFlowProvider = OidcDeviceFlowProvider;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * OIDC Password Grant Provider
3
+ */
4
+ import type { ILogger, ITokenResult, OAuth2GrantType } from '@mcp-abap-adt/interfaces';
5
+ import { BaseTokenProvider } from './BaseTokenProvider';
6
+ export interface OidcPasswordProviderConfig {
7
+ issuerUrl: string;
8
+ clientId: string;
9
+ clientSecret?: string;
10
+ username: string;
11
+ password: string;
12
+ scopes?: string[];
13
+ accessToken?: string;
14
+ refreshToken?: string;
15
+ logger?: ILogger;
16
+ }
17
+ export declare class OidcPasswordProvider extends BaseTokenProvider {
18
+ private config;
19
+ constructor(config: OidcPasswordProviderConfig);
20
+ protected getAuthType(): OAuth2GrantType;
21
+ protected performLogin(): Promise<ITokenResult>;
22
+ protected performRefresh(): Promise<ITokenResult>;
23
+ }
24
+ //# sourceMappingURL=OidcPasswordProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OidcPasswordProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OidcPasswordProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,0BAA0B;IAc9C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cAsBrC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAsBxD"}