oidc-auth-client 0.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -0
  3. package/dist/index.d.ts +21 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +21 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/auth/Client.d.ts +135 -0
  8. package/dist/src/auth/Client.d.ts.map +1 -0
  9. package/dist/src/auth/Client.js +734 -0
  10. package/dist/src/auth/Client.js.map +1 -0
  11. package/dist/src/auth/Events.d.ts +51 -0
  12. package/dist/src/auth/Events.d.ts.map +1 -0
  13. package/dist/src/auth/Events.js +139 -0
  14. package/dist/src/auth/Events.js.map +1 -0
  15. package/dist/src/auth/Session.d.ts +132 -0
  16. package/dist/src/auth/Session.d.ts.map +1 -0
  17. package/dist/src/auth/Session.js +355 -0
  18. package/dist/src/auth/Session.js.map +1 -0
  19. package/dist/src/auth/Settings.d.ts +178 -0
  20. package/dist/src/auth/Settings.d.ts.map +1 -0
  21. package/dist/src/auth/Settings.js +210 -0
  22. package/dist/src/auth/Settings.js.map +1 -0
  23. package/dist/src/crypto/Crypto.d.ts +14 -0
  24. package/dist/src/crypto/Crypto.d.ts.map +1 -0
  25. package/dist/src/crypto/Crypto.js +107 -0
  26. package/dist/src/crypto/Crypto.js.map +1 -0
  27. package/dist/src/models/User.d.ts +31 -0
  28. package/dist/src/models/User.d.ts.map +1 -0
  29. package/dist/src/models/User.js +57 -0
  30. package/dist/src/models/User.js.map +1 -0
  31. package/dist/src/navigation/Navigator.d.ts +106 -0
  32. package/dist/src/navigation/Navigator.d.ts.map +1 -0
  33. package/dist/src/navigation/Navigator.js +441 -0
  34. package/dist/src/navigation/Navigator.js.map +1 -0
  35. package/dist/src/protocol/Requests.d.ts +50 -0
  36. package/dist/src/protocol/Requests.d.ts.map +1 -0
  37. package/dist/src/protocol/Requests.js +109 -0
  38. package/dist/src/protocol/Requests.js.map +1 -0
  39. package/dist/src/protocol/ResponseValidator.d.ts +39 -0
  40. package/dist/src/protocol/ResponseValidator.d.ts.map +1 -0
  41. package/dist/src/protocol/ResponseValidator.js +366 -0
  42. package/dist/src/protocol/ResponseValidator.js.map +1 -0
  43. package/dist/src/protocol/Responses.d.ts +44 -0
  44. package/dist/src/protocol/Responses.d.ts.map +1 -0
  45. package/dist/src/protocol/Responses.js +77 -0
  46. package/dist/src/protocol/Responses.js.map +1 -0
  47. package/dist/src/protocol/TokenService.d.ts +38 -0
  48. package/dist/src/protocol/TokenService.d.ts.map +1 -0
  49. package/dist/src/protocol/TokenService.js +259 -0
  50. package/dist/src/protocol/TokenService.js.map +1 -0
  51. package/dist/src/services/Http.d.ts +55 -0
  52. package/dist/src/services/Http.d.ts.map +1 -0
  53. package/dist/src/services/Http.js +276 -0
  54. package/dist/src/services/Http.js.map +1 -0
  55. package/dist/src/services/Timer.d.ts +18 -0
  56. package/dist/src/services/Timer.d.ts.map +1 -0
  57. package/dist/src/services/Timer.js +56 -0
  58. package/dist/src/services/Timer.js.map +1 -0
  59. package/dist/src/storage/Storage.d.ts +23 -0
  60. package/dist/src/storage/Storage.d.ts.map +1 -0
  61. package/dist/src/storage/Storage.js +65 -0
  62. package/dist/src/storage/Storage.js.map +1 -0
  63. package/dist/src/types/crypto.d.ts +32 -0
  64. package/dist/src/types/crypto.d.ts.map +1 -0
  65. package/dist/src/types/crypto.js +3 -0
  66. package/dist/src/types/crypto.js.map +1 -0
  67. package/dist/src/types/navigator.d.ts +33 -0
  68. package/dist/src/types/navigator.d.ts.map +1 -0
  69. package/dist/src/types/navigator.js +3 -0
  70. package/dist/src/types/navigator.js.map +1 -0
  71. package/dist/src/types/storage.d.ts +7 -0
  72. package/dist/src/types/storage.d.ts.map +1 -0
  73. package/dist/src/types/storage.js +3 -0
  74. package/dist/src/types/storage.js.map +1 -0
  75. package/dist/src/types/user.d.ts +6 -0
  76. package/dist/src/types/user.d.ts.map +1 -0
  77. package/dist/src/types/user.js +3 -0
  78. package/dist/src/types/user.js.map +1 -0
  79. package/dist/src/utils/Event.d.ts +10 -0
  80. package/dist/src/utils/Event.d.ts.map +1 -0
  81. package/dist/src/utils/Event.js +24 -0
  82. package/dist/src/utils/Event.js.map +1 -0
  83. package/dist/src/utils/Global.d.ts +14 -0
  84. package/dist/src/utils/Global.d.ts.map +1 -0
  85. package/dist/src/utils/Global.js +50 -0
  86. package/dist/src/utils/Global.js.map +1 -0
  87. package/dist/src/utils/Log.d.ts +30 -0
  88. package/dist/src/utils/Log.d.ts.map +1 -0
  89. package/dist/src/utils/Log.js +68 -0
  90. package/dist/src/utils/Log.js.map +1 -0
  91. package/package.json +91 -0
@@ -0,0 +1,441 @@
1
+ // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
2
+ import { Log } from '../utils/Log.js';
3
+ import { UrlUtility } from '../services/Http.js';
4
+ //=============================================================================
5
+ // RedirectNavigator - Full page redirect navigation
6
+ //=============================================================================
7
+ export class RedirectNavigator {
8
+ prepare() {
9
+ return Promise.resolve(this);
10
+ }
11
+ navigate(params) {
12
+ if (params.useReplaceToNavigate) {
13
+ window.location.replace(params.url);
14
+ }
15
+ else {
16
+ window.location.href = params.url;
17
+ }
18
+ // Page navigates away; resolve immediately so callers in the redirect
19
+ // path (which never read the result) still get a typed promise.
20
+ return Promise.resolve({ url: params.url });
21
+ }
22
+ get url() {
23
+ return window.location.href;
24
+ }
25
+ }
26
+ //=============================================================================
27
+ // PopupWindow - Browser popup window management
28
+ //=============================================================================
29
+ const CheckForPopupClosedInterval = 500;
30
+ const DefaultPopupFeatures = 'location=no,toolbar=no,width=500,height=500,left=100,top=100;';
31
+ const DefaultPopupTarget = '_blank';
32
+ export class PopupWindow {
33
+ constructor(params) {
34
+ this._checkForPopupClosedTimer = null;
35
+ this._promise = new Promise((resolve, reject) => {
36
+ this._resolve = resolve;
37
+ this._reject = reject;
38
+ });
39
+ const target = params.popupWindowTarget || DefaultPopupTarget;
40
+ const features = params.popupWindowFeatures || DefaultPopupFeatures;
41
+ this._popup = window.open('', target, features);
42
+ if (this._popup) {
43
+ Log.debug('PopupWindow.ctor: popup successfully created');
44
+ this._checkForPopupClosedTimer = window.setInterval(this._checkForPopupClosed.bind(this), CheckForPopupClosedInterval);
45
+ }
46
+ }
47
+ get promise() {
48
+ return this._promise;
49
+ }
50
+ navigate(params) {
51
+ if (!this._popup) {
52
+ this._error('PopupWindow.navigate: Error opening popup window');
53
+ }
54
+ else if (!params.url) {
55
+ this._error('PopupWindow.navigate: no url provided');
56
+ }
57
+ else {
58
+ Log.debug('PopupWindow.navigate: Setting URL in popup');
59
+ this._id = params.id;
60
+ if (this._id) {
61
+ window[`popupCallback_${this._id}`] = this._callback.bind(this);
62
+ }
63
+ this._popup.focus();
64
+ this._popup.location.href = params.url;
65
+ }
66
+ return this.promise;
67
+ }
68
+ _success(data) {
69
+ Log.debug('PopupWindow.callback: Successful response from popup window');
70
+ this._cleanup();
71
+ this._resolve(data);
72
+ }
73
+ _error(message) {
74
+ Log.error('PopupWindow.error: ', message);
75
+ this._cleanup();
76
+ this._reject(new Error(message));
77
+ }
78
+ close() {
79
+ this._cleanup(false);
80
+ }
81
+ _cleanup(keepOpen) {
82
+ Log.debug('PopupWindow.cleanup');
83
+ if (this._checkForPopupClosedTimer !== null) {
84
+ window.clearInterval(this._checkForPopupClosedTimer);
85
+ this._checkForPopupClosedTimer = null;
86
+ }
87
+ delete window[`popupCallback_${this._id}`];
88
+ if (this._popup && !keepOpen) {
89
+ this._popup.close();
90
+ }
91
+ this._popup = null;
92
+ }
93
+ _checkForPopupClosed() {
94
+ if (!this._popup || this._popup.closed) {
95
+ this._error('Popup window closed');
96
+ }
97
+ }
98
+ _callback(url, keepOpen) {
99
+ this._cleanup(keepOpen);
100
+ if (url) {
101
+ Log.debug('PopupWindow.callback success');
102
+ this._success({ url });
103
+ }
104
+ else {
105
+ Log.debug('PopupWindow.callback: Invalid response from popup');
106
+ this._error('Invalid response from popup');
107
+ }
108
+ }
109
+ static notifyOpener(url, keepOpen, delimiter) {
110
+ if (window.opener) {
111
+ url = url || window.location.href;
112
+ if (url) {
113
+ const data = UrlUtility.parseUrlFragment(url, delimiter);
114
+ if (data.state) {
115
+ const name = `popupCallback_${data.state}`;
116
+ const callback = window.opener[name];
117
+ if (callback) {
118
+ Log.debug('PopupWindow.notifyOpener: passing url message to opener');
119
+ callback(url, keepOpen ?? false);
120
+ }
121
+ else {
122
+ Log.warn('PopupWindow.notifyOpener: no matching callback found on opener');
123
+ }
124
+ }
125
+ else {
126
+ Log.warn('PopupWindow.notifyOpener: no state found in response url');
127
+ }
128
+ }
129
+ }
130
+ else {
131
+ Log.warn("PopupWindow.notifyOpener: no window.opener. Can't complete notification.");
132
+ }
133
+ }
134
+ }
135
+ //=============================================================================
136
+ // PopupNavigator - Popup-based navigation
137
+ //=============================================================================
138
+ export class PopupNavigator {
139
+ prepare(params) {
140
+ const popup = new PopupWindow(params);
141
+ return Promise.resolve(popup);
142
+ }
143
+ callback(url, keepOpen, delimiter) {
144
+ Log.debug('PopupNavigator.callback');
145
+ try {
146
+ PopupWindow.notifyOpener(url, keepOpen, delimiter);
147
+ return Promise.resolve();
148
+ }
149
+ catch (e) {
150
+ return Promise.reject(e);
151
+ }
152
+ }
153
+ }
154
+ //=============================================================================
155
+ // IFrameWindow - Hidden iframe window management
156
+ //=============================================================================
157
+ const DefaultTimeout = 10000;
158
+ export class IFrameWindow {
159
+ constructor(_params) {
160
+ this._timer = null;
161
+ this._promise = new Promise((resolve, reject) => {
162
+ this._resolve = resolve;
163
+ this._reject = reject;
164
+ });
165
+ this._boundMessageEvent = this._message.bind(this);
166
+ window.addEventListener('message', this._boundMessageEvent, false);
167
+ this._frame = window.document.createElement('iframe');
168
+ // shotgun approach
169
+ this._frame.style.visibility = 'hidden';
170
+ this._frame.style.position = 'absolute';
171
+ this._frame.width = '0';
172
+ this._frame.height = '0';
173
+ window.document.body.appendChild(this._frame);
174
+ }
175
+ navigate(params) {
176
+ const timeout = params.silentRequestTimeout || DefaultTimeout;
177
+ Log.debug('IFrameWindow.navigate: Using timeout of:', timeout);
178
+ this._timer = window.setTimeout(this._timeout.bind(this), timeout);
179
+ this._frame.src = params.url;
180
+ return this.promise;
181
+ }
182
+ get promise() {
183
+ return this._promise;
184
+ }
185
+ _success(data) {
186
+ this._cleanup();
187
+ Log.debug('IFrameWindow: Successful response from frame window');
188
+ this._resolve(data);
189
+ }
190
+ _error(message) {
191
+ this._cleanup();
192
+ Log.error(message);
193
+ this._reject(new Error(message));
194
+ }
195
+ close() {
196
+ this._cleanup();
197
+ }
198
+ _cleanup() {
199
+ if (this._frame) {
200
+ Log.debug('IFrameWindow: cleanup');
201
+ window.removeEventListener('message', this._boundMessageEvent, false);
202
+ if (this._timer !== null)
203
+ window.clearTimeout(this._timer);
204
+ window.document.body.removeChild(this._frame);
205
+ this._timer = null;
206
+ this._frame = null;
207
+ this._boundMessageEvent = null;
208
+ }
209
+ }
210
+ _timeout() {
211
+ Log.debug('IFrameWindow.timeout');
212
+ this._error('Frame window timed out');
213
+ }
214
+ _message(e) {
215
+ Log.debug('IFrameWindow.message');
216
+ if (this._timer &&
217
+ e.origin === this._origin &&
218
+ this._frame &&
219
+ e.source === this._frame.contentWindow &&
220
+ typeof e.data === 'string' &&
221
+ (e.data.startsWith('http://') || e.data.startsWith('https://'))) {
222
+ const url = e.data;
223
+ if (url) {
224
+ this._success({ url });
225
+ }
226
+ else {
227
+ this._error('Invalid response from frame');
228
+ }
229
+ }
230
+ }
231
+ get _origin() {
232
+ return location.protocol + '//' + location.host;
233
+ }
234
+ static notifyParent(url) {
235
+ Log.debug('IFrameWindow.notifyParent');
236
+ url = url || window.location.href;
237
+ if (url) {
238
+ Log.debug('IFrameWindow.notifyParent: posting url message to parent');
239
+ window.parent.postMessage(url, location.protocol + '//' + location.host);
240
+ }
241
+ }
242
+ }
243
+ //=============================================================================
244
+ // IFrameNavigator - IFrame-based navigation
245
+ //=============================================================================
246
+ export class IFrameNavigator {
247
+ prepare(params) {
248
+ const frame = new IFrameWindow(params);
249
+ return Promise.resolve(frame);
250
+ }
251
+ callback(url) {
252
+ Log.debug('IFrameNavigator.callback');
253
+ try {
254
+ IFrameWindow.notifyParent(url);
255
+ return Promise.resolve();
256
+ }
257
+ catch (e) {
258
+ return Promise.reject(e);
259
+ }
260
+ }
261
+ }
262
+ //=============================================================================
263
+ // CheckSessionIFrame - Session state monitoring iframe
264
+ //=============================================================================
265
+ const DefaultInterval = 2000;
266
+ export class CheckSessionIFrame {
267
+ constructor(callback, client_id, url, interval, stopOnError = true) {
268
+ this._timer = null;
269
+ this._session_state = null;
270
+ this._callback = callback;
271
+ this._client_id = client_id;
272
+ this._url = url;
273
+ this._interval = interval || DefaultInterval;
274
+ this._stopOnError = stopOnError;
275
+ const idx = url.indexOf('/', url.indexOf('//') + 2);
276
+ this._frame_origin = url.substring(0, idx);
277
+ this._frame = window.document.createElement('iframe');
278
+ // shotgun approach
279
+ this._frame.style.visibility = 'hidden';
280
+ this._frame.style.position = 'absolute';
281
+ this._frame.style.display = 'none';
282
+ this._frame.width = '0';
283
+ this._frame.height = '0';
284
+ this._frame.src = url;
285
+ }
286
+ load() {
287
+ return new Promise(resolve => {
288
+ this._frame.onload = () => {
289
+ resolve();
290
+ };
291
+ window.document.body.appendChild(this._frame);
292
+ this._boundMessageEvent = this._message.bind(this);
293
+ window.addEventListener('message', this._boundMessageEvent, false);
294
+ });
295
+ }
296
+ _message(e) {
297
+ if (e.origin === this._frame_origin &&
298
+ e.source === this._frame.contentWindow) {
299
+ if (e.data === 'error') {
300
+ Log.error('CheckSessionIFrame: error message from check session op iframe');
301
+ if (this._stopOnError) {
302
+ this.stop();
303
+ }
304
+ }
305
+ else if (e.data === 'changed') {
306
+ Log.debug('CheckSessionIFrame: changed message from check session op iframe');
307
+ this.stop();
308
+ this._callback();
309
+ }
310
+ else {
311
+ Log.debug('CheckSessionIFrame: ' + e.data + ' message from check session op iframe');
312
+ }
313
+ }
314
+ }
315
+ start(session_state) {
316
+ if (this._session_state !== session_state) {
317
+ Log.debug('CheckSessionIFrame.start');
318
+ this.stop();
319
+ this._session_state = session_state;
320
+ const send = () => {
321
+ this._frame.contentWindow.postMessage(this._client_id + ' ' + this._session_state, this._frame_origin);
322
+ };
323
+ // trigger now
324
+ send();
325
+ // and setup timer
326
+ this._timer = window.setInterval(send, this._interval);
327
+ }
328
+ }
329
+ stop() {
330
+ this._session_state = null;
331
+ if (this._timer) {
332
+ Log.debug('CheckSessionIFrame.stop');
333
+ window.clearInterval(this._timer);
334
+ this._timer = null;
335
+ }
336
+ }
337
+ }
338
+ //=============================================================================
339
+ // CordovaPopupWindow - Cordova InAppBrowser popup window
340
+ //=============================================================================
341
+ const DefaultCordovaPopupFeatures = 'location=no,toolbar=no,zoom=no';
342
+ const DefaultCordovaPopupTarget = '_blank';
343
+ export class CordovaPopupWindow {
344
+ constructor(params) {
345
+ this._popup = null;
346
+ this._promise = new Promise((resolve, reject) => {
347
+ this._resolve = resolve;
348
+ this._reject = reject;
349
+ });
350
+ this.features = params.popupWindowFeatures || DefaultCordovaPopupFeatures;
351
+ this.target = params.popupWindowTarget || DefaultCordovaPopupTarget;
352
+ this.redirect_uri = params.startUrl;
353
+ Log.debug('CordovaPopupWindow.ctor: redirect_uri: ' + this.redirect_uri);
354
+ }
355
+ _isInAppBrowserInstalled(cordovaMetadata) {
356
+ return [
357
+ 'cordova-plugin-inappbrowser',
358
+ 'cordova-plugin-inappbrowser.inappbrowser',
359
+ 'org.apache.cordova.inappbrowser',
360
+ ].some(name => Object.prototype.hasOwnProperty.call(cordovaMetadata, name));
361
+ }
362
+ navigate(params) {
363
+ const win = window;
364
+ if (!win.cordova) {
365
+ return this._errorAndReturn('cordova is undefined');
366
+ }
367
+ const cordovaMetadata = win.cordova.require('cordova/plugin_list').metadata;
368
+ if (!this._isInAppBrowserInstalled(cordovaMetadata)) {
369
+ return this._errorAndReturn('InAppBrowser plugin not found');
370
+ }
371
+ this._popup = win.cordova.InAppBrowser.open(params.url, this.target, this.features);
372
+ if (this._popup) {
373
+ Log.debug('CordovaPopupWindow.navigate: popup successfully created');
374
+ this._exitCallbackEvent = this._exitCallback.bind(this);
375
+ this._loadStartCallbackEvent = this._loadStartCallback.bind(this);
376
+ this._popup.addEventListener('exit', this._exitCallbackEvent, false);
377
+ this._popup.addEventListener('loadstart', this._loadStartCallbackEvent, false);
378
+ }
379
+ else {
380
+ this._error('Error opening popup window');
381
+ }
382
+ return this.promise;
383
+ }
384
+ get promise() {
385
+ return this._promise;
386
+ }
387
+ _loadStartCallback(event) {
388
+ if (this.redirect_uri && event.url.indexOf(this.redirect_uri) === 0) {
389
+ this._success({ url: event.url });
390
+ }
391
+ }
392
+ _exitCallback(_event) {
393
+ this._error('Popup closed');
394
+ }
395
+ _success(data) {
396
+ this._cleanup();
397
+ Log.debug('CordovaPopupWindow: Successful response from cordova popup window');
398
+ this._resolve(data);
399
+ }
400
+ _error(message) {
401
+ this._cleanup();
402
+ Log.error(message);
403
+ this._reject(new Error(message));
404
+ }
405
+ _errorAndReturn(message) {
406
+ this._error(message);
407
+ return this.promise;
408
+ }
409
+ close() {
410
+ this._cleanup();
411
+ }
412
+ _cleanup() {
413
+ if (this._popup) {
414
+ Log.debug('CordovaPopupWindow: cleaning up popup');
415
+ this._popup.removeEventListener('exit', this._exitCallbackEvent, false);
416
+ this._popup.removeEventListener('loadstart', this._loadStartCallbackEvent, false);
417
+ this._popup.close();
418
+ }
419
+ this._popup = null;
420
+ }
421
+ }
422
+ //=============================================================================
423
+ // CordovaPopupNavigator - Cordova popup navigation
424
+ //=============================================================================
425
+ export class CordovaPopupNavigator {
426
+ prepare(params) {
427
+ const popup = new CordovaPopupWindow(params);
428
+ return Promise.resolve(popup);
429
+ }
430
+ }
431
+ //=============================================================================
432
+ // CordovaIFrameNavigator - Cordova hidden popup navigation
433
+ //=============================================================================
434
+ export class CordovaIFrameNavigator {
435
+ prepare(params) {
436
+ params.popupWindowFeatures = 'hidden=yes';
437
+ const popup = new CordovaPopupWindow(params);
438
+ return Promise.resolve(popup);
439
+ }
440
+ }
441
+ //# sourceMappingURL=Navigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../../src/navigation/Navigator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { SigninState, State } from '../auth/Session.js';
2
+ export interface SigninRequestArgs {
3
+ url: string;
4
+ client_id: string;
5
+ redirect_uri: string;
6
+ response_type: string;
7
+ scope: string;
8
+ authority: string;
9
+ data?: unknown;
10
+ prompt?: string;
11
+ display?: string;
12
+ max_age?: number;
13
+ ui_locales?: string;
14
+ id_token_hint?: string;
15
+ login_hint?: string;
16
+ acr_values?: string;
17
+ resource?: string;
18
+ response_mode?: string | null;
19
+ request?: string;
20
+ request_uri?: string;
21
+ extraQueryParams?: Record<string, string>;
22
+ request_type?: string;
23
+ client_secret?: string;
24
+ extraTokenParams?: Record<string, unknown>;
25
+ skipUserInfo?: boolean;
26
+ code_verifier?: string;
27
+ code_challenge?: string;
28
+ }
29
+ export declare class SigninRequest {
30
+ url: string;
31
+ state: InstanceType<typeof SigninState>;
32
+ constructor(args: SigninRequestArgs);
33
+ static isOidc(response_type: string): boolean;
34
+ static isOAuth(response_type: string): boolean;
35
+ static isCode(response_type: string): boolean;
36
+ }
37
+ export interface SignoutRequestArgs {
38
+ url: string;
39
+ id_token_hint?: string;
40
+ post_logout_redirect_uri?: string;
41
+ data?: unknown;
42
+ extraQueryParams?: Record<string, string>;
43
+ request_type?: string;
44
+ }
45
+ export declare class SignoutRequest {
46
+ url: string;
47
+ state: InstanceType<typeof State> | undefined;
48
+ constructor({ url: rawUrl, id_token_hint, post_logout_redirect_uri, data, extraQueryParams, request_type }: SignoutRequestArgs);
49
+ }
50
+ //# sourceMappingURL=Requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Requests.d.ts","sourceRoot":"","sources":["../../../src/protocol/Requests.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMxD,MAAM,WAAW,iBAAiB;IAEhC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;gBAE5B,IAAI,EAAE,iBAAiB;IAgEnC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAI7C,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAI9C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;CAG9C;AAMD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC,OAAO,KAAK,CAAC,GAAG,SAAS,CAAC;gBAElC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,wBAAwB,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,kBAAkB;CAqB/H"}
@@ -0,0 +1,109 @@
1
+ // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
2
+ import { Log } from '../utils/Log.js';
3
+ import { UrlUtility } from '../services/Http.js';
4
+ import { SigninState, State } from '../auth/Session.js';
5
+ export class SigninRequest {
6
+ constructor(args) {
7
+ const { url: rawUrl, client_id, redirect_uri, response_type, scope, authority, data, prompt, display, max_age, ui_locales, id_token_hint, login_hint, acr_values, resource, request, request_uri, extraQueryParams, request_type, client_secret, extraTokenParams, skipUserInfo, code_verifier, code_challenge, } = args;
8
+ if (!rawUrl) {
9
+ Log.error('SigninRequest.ctor: No url passed');
10
+ throw new Error('url');
11
+ }
12
+ if (!client_id) {
13
+ Log.error('SigninRequest.ctor: No client_id passed');
14
+ throw new Error('client_id');
15
+ }
16
+ if (!redirect_uri) {
17
+ Log.error('SigninRequest.ctor: No redirect_uri passed');
18
+ throw new Error('redirect_uri');
19
+ }
20
+ if (!response_type) {
21
+ Log.error('SigninRequest.ctor: No response_type passed');
22
+ throw new Error('response_type');
23
+ }
24
+ if (!scope) {
25
+ Log.error('SigninRequest.ctor: No scope passed');
26
+ throw new Error('scope');
27
+ }
28
+ if (!authority) {
29
+ Log.error('SigninRequest.ctor: No authority passed');
30
+ throw new Error('authority');
31
+ }
32
+ const oidc = SigninRequest.isOidc(response_type);
33
+ const code = SigninRequest.isCode(response_type);
34
+ const response_mode_resolved = args.response_mode ?? (code ? 'query' : null);
35
+ this.state = new SigninState({
36
+ nonce: oidc,
37
+ data,
38
+ client_id,
39
+ authority,
40
+ redirect_uri,
41
+ code_verifier: code_verifier || code,
42
+ code_challenge,
43
+ request_type,
44
+ response_mode: response_mode_resolved,
45
+ client_secret,
46
+ scope,
47
+ extraTokenParams,
48
+ skipUserInfo,
49
+ });
50
+ let url = UrlUtility.addQueryParam(rawUrl, 'client_id', client_id);
51
+ url = UrlUtility.addQueryParam(url, 'redirect_uri', redirect_uri);
52
+ url = UrlUtility.addQueryParam(url, 'response_type', response_type);
53
+ url = UrlUtility.addQueryParam(url, 'scope', scope);
54
+ url = UrlUtility.addQueryParam(url, 'state', this.state.id);
55
+ if (oidc) {
56
+ url = UrlUtility.addQueryParam(url, 'nonce', this.state.nonce);
57
+ }
58
+ if (code) {
59
+ url = UrlUtility.addQueryParam(url, 'code_challenge', this.state.code_challenge);
60
+ url = UrlUtility.addQueryParam(url, 'code_challenge_method', 'S256');
61
+ }
62
+ const optional = {
63
+ prompt, display, max_age, ui_locales, id_token_hint,
64
+ login_hint, acr_values, resource, request, request_uri,
65
+ response_mode: response_mode_resolved,
66
+ };
67
+ for (const key in optional) {
68
+ if (optional[key])
69
+ url = UrlUtility.addQueryParam(url, key, optional[key]);
70
+ }
71
+ for (const key in extraQueryParams) {
72
+ url = UrlUtility.addQueryParam(url, key, extraQueryParams[key]);
73
+ }
74
+ this.url = url;
75
+ }
76
+ static isOidc(response_type) {
77
+ return response_type.split(/\s+/g).includes('id_token');
78
+ }
79
+ static isOAuth(response_type) {
80
+ return response_type.split(/\s+/g).includes('token');
81
+ }
82
+ static isCode(response_type) {
83
+ return response_type.split(/\s+/g).includes('code');
84
+ }
85
+ }
86
+ export class SignoutRequest {
87
+ constructor({ url: rawUrl, id_token_hint, post_logout_redirect_uri, data, extraQueryParams, request_type }) {
88
+ if (!rawUrl) {
89
+ Log.error('SignoutRequest.ctor: No url passed');
90
+ throw new Error('url');
91
+ }
92
+ let url = rawUrl;
93
+ if (id_token_hint) {
94
+ url = UrlUtility.addQueryParam(url, 'id_token_hint', id_token_hint);
95
+ }
96
+ if (post_logout_redirect_uri) {
97
+ url = UrlUtility.addQueryParam(url, 'post_logout_redirect_uri', post_logout_redirect_uri);
98
+ if (data) {
99
+ this.state = new State({ data, request_type });
100
+ url = UrlUtility.addQueryParam(url, 'state', this.state.id);
101
+ }
102
+ }
103
+ for (const key in extraQueryParams) {
104
+ url = UrlUtility.addQueryParam(url, key, extraQueryParams[key]);
105
+ }
106
+ this.url = url;
107
+ }
108
+ }
109
+ //# sourceMappingURL=Requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Requests.js","sourceRoot":"","sources":["../../../src/protocol/Requests.ts"],"names":[],"mappings":"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"}