shared-lib-angular 1.0.0 → 1.0.1
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.
- package/{dist/fesm2022 → fesm2022}/shared-lib-angular.mjs +3 -3
- package/{dist/fesm2022 → fesm2022}/shared-lib-angular.mjs.map +1 -1
- package/{dist/index.d.ts → index.d.ts} +3 -3
- package/package.json +19 -36
- package/.jest-cache/haste-map-9a3a3745ceefdbbde8dc96f3a11cb645-3313177a4f89a162d7e60aa270d6b5d6-d877677507d3d7567ce00a92135137ab +0 -0
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/00/appconfig_00660af3355c71a72b8aafc720c254bb +0 -2876
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/00/appconfig_00660af3355c71a72b8aafc720c254bb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/00/every_00ea673d9604654690cab843fc8d8314 +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/00/every_00ea673d9604654690cab843fc8d8314.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/01/signal_019d00f4a5bdafd54307cfe5834fe796 +0 -473
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/01/signal_019d00f4a5bdafd54307cfe5834fe796.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/02/exhaustAll_026083d1cce38f6911e761c16eef3d8a +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/02/exhaustAll_026083d1cce38f6911e761c16eef3d8a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/intervalProvider_039ba6649af0878c191dfc0232ba33bb +0 -52
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/intervalProvider_039ba6649af0878c191dfc0232ba33bb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/loginconfiginterface_032bcdb7ef7be7283c308534eb016055 +0 -106
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/loginconfiginterface_032bcdb7ef7be7283c308534eb016055.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/router_module_0320e629edfbb4fca0e75956de46b6d1 +0 -1097
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/router_module_0320e629edfbb4fca0e75956de46b6d1.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/windowCount_03de01b105e8b75219fbc733a8fedb95 +0 -79
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/03/windowCount_03de01b105e8b75219fbc733a8fedb95.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/05/browser_055ace85954b6943b58763b1108ccf12 +0 -447
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/05/browser_055ace85954b6943b58763b1108ccf12.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/05/skip_057d7b1b3d1f246b35050c7ccf270a63 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/05/skip_057d7b1b3d1f246b35050c7ccf270a63.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/06/schedulePromise_064651f3ace52a5a5d96f68314477e73 +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/06/schedulePromise_064651f3ace52a5a5d96f68314477e73.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/07/NotificationFactories_074c93396e1b1d62e7726ae8e260c235 +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/07/NotificationFactories_074c93396e1b1d62e7726ae8e260c235.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/07/testing_079979d81f362174b548c428f972337a +0 -2952
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/07/testing_079979d81f362174b548c428f972337a.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/08/expand_0834ec9bae8fdda9fdcf6f218c0aa977 +0 -17
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/08/expand_0834ec9bae8fdda9fdcf6f218c0aa977.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0a/authorizationservice_0a4bddc2811eebff94ab3084863255e6 +0 -2329
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0a/authorizationservice_0a4bddc2811eebff94ab3084863255e6.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0a/last_0a681bf522e482a763682ee8f10bf6c9 +0 -18
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0a/last_0a681bf522e482a763682ee8f10bf6c9.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0b/pairs_0bdbd8525961358b23ffad7d9789a968 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0b/pairs_0bdbd8525961358b23ffad7d9789a968.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0d/immediateProvider_0d7f5944f088c0dabae14a12eca2b9d8 +0 -51
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0d/immediateProvider_0d7f5944f088c0dabae14a12eca2b9d8.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0d/scan_0daefd10f43473197937af7f8452ec9d +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0d/scan_0daefd10f43473197937af7f8452ec9d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0e/retry_0e69e48fa2132882bdcdd05127f2ea7d +0 -76
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/0e/retry_0e69e48fa2132882bdcdd05127f2ea7d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/10/connect_105a8433fbea3cf741b136868b5951ba +0 -24
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/10/connect_105a8433fbea3cf741b136868b5951ba.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/11/configservice_116e7dcf57d3d950117a5aa042cc0276 +0 -902
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/11/configservice_116e7dcf57d3d950117a5aa042cc0276.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/AsyncSubject_120a173bd57e247e7f3ae18d0fd9b0fa +0 -59
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/AsyncSubject_120a173bd57e247e7f3ae18d0fd9b0fa.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/repeatWhen_12cbec784a31a01dab7e78fe5e785053 +0 -51
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/repeatWhen_12cbec784a31a01dab7e78fe5e785053.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/timeout_12ee70a93a9cd2707866c8eb02e10ad5 +0 -66
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/12/timeout_12ee70a93a9cd2707866c8eb02e10ad5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/14/count_149d69890a146cbacf66e6c02e77bd70 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/14/count_149d69890a146cbacf66e6c02e77bd70.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/17/concat_174ab4f709f4956224457d08efab3503 +0 -49
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/17/concat_174ab4f709f4956224457d08efab3503.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/17/throttle_17dfd679b2c59a6682f69508ee864ece +0 -50
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/17/throttle_17dfd679b2c59a6682f69508ee864ece.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/18/QueueAction_18ebd8a34d165e459d10416b5abb2871 +0 -59
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/18/QueueAction_18ebd8a34d165e459d10416b5abb2871.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/18/sequenceEqual_18018ebae3a1cc1813ae68980e76eff3 +0 -47
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/18/sequenceEqual_18018ebae3a1cc1813ae68980e76eff3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/19/delay_19f4d0866dea676d2bf43640461b8bfd +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/19/delay_19f4d0866dea676d2bf43640461b8bfd.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/19/throwUnobservableError_19baf3c85f87dad02f0536ca4e5cd60b +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/19/throwUnobservableError_19baf3c85f87dad02f0536ca4e5cd60b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1a/windowWhen_1ac92e99f6e696e8f4204c5e4ebccf14 +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1a/windowWhen_1ac92e99f6e696e8f4204c5e4ebccf14.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1b/publishBehavior_1bf352339730e38d34a5d5e153bf7ebb +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1b/publishBehavior_1bf352339730e38d34a5d5e153bf7ebb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1c/router_1c347a355ab0892e02fa5e69908d9080 +0 -128
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1c/router_1c347a355ab0892e02fa5e69908d9080.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1d/logincomponent_1d4d7655bd3ebd5415f5b3e5b7f940be +0 -2
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1e/isInteropObservable_1efea59365a17c9061ea4e21e7f2c6ae +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1e/isInteropObservable_1efea59365a17c9061ea4e21e7f2c6ae.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1e/sampleTime_1ed0a693b811e901145a88e55e6945d0 +0 -15
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1e/sampleTime_1ed0a693b811e901145a88e55e6945d0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1f/asap_1f8dd8afdbfd6d830ea655a48958de6e +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1f/asap_1f8dd8afdbfd6d830ea655a48958de6e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1f/authenticationservice_1f271b3e269ad8b2e94278f0b9e63c1e +0 -4527
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/1f/authenticationservice_1f271b3e269ad8b2e94278f0b9e63c1e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/21/fromSubscribable_218d9c2a708868b4ddcc33c959eb246d +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/21/fromSubscribable_218d9c2a708868b4ddcc33c959eb246d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/22/mergeAll_22eabe4111038330cd0354da75bfb831 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/22/mergeAll_22eabe4111038330cd0354da75bfb831.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/22/windowToggle_22ecc9529597f42519239efca8f4219f +0 -90
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/22/windowToggle_22ecc9529597f42519239efca8f4219f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/24/distinct_246654442158ec1661624139f1fcb40e +0 -23
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/24/distinct_246654442158ec1661624139f1fcb40e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/25/share_258b700a5bd9b287b2e67f4bf4bfa461 +0 -120
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/25/share_258b700a5bd9b287b2e67f4bf4bfa461.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/26/scheduled_2667ac0ca964dea582df7f61bfaa619c +0 -42
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/26/scheduled_2667ac0ca964dea582df7f61bfaa619c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/28/Subject_288efa25f7749b82e5c2f60ffe1a32cc +0 -202
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/28/Subject_288efa25f7749b82e5c2f60ffe1a32cc.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/28/testing_28adef3af187b963516380fd8076524a +0 -60
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/28/testing_28adef3af187b963516380fd8076524a.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/exhaust_2c83cc366daf6fab56f7b1ef66317120 +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/exhaust_2c83cc366daf6fab56f7b1ef66317120.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/innerFrom_2c13de9f6df211e5ae68d63f44bc7b62 +0 -272
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/innerFrom_2c13de9f6df211e5ae68d63f44bc7b62.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/mergeScan_2ca2d53a5d5527ac81b46bc4d0779542 +0 -19
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2c/mergeScan_2ca2d53a5d5527ac81b46bc4d0779542.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2d/EmptyError_2d0d787ec6b758e32091ea628b5fd1a9 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2d/EmptyError_2d0d787ec6b758e32091ea628b5fd1a9.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2d/concat_2d1fb893164794d1099ee55398b2485c +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2d/concat_2d1fb893164794d1099ee55398b2485c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2f/publish_2fdddf4dfd0b97382056cce93cc68bce +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2f/publish_2fdddf4dfd0b97382056cce93cc68bce.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2f/testing_2f48dda6406d9713aab2c6abc3f524d1 +0 -589
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/2f/testing_2f48dda6406d9713aab2c6abc3f524d1.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/combineLatestAll_32d3966d0993446ff932e08bac6446d1 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/combineLatestAll_32d3966d0993446ff932e08bac6446d1.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/dateTimestampProvider_322db52a6c79e9f9701dfb8c5d689ce5 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/dateTimestampProvider_322db52a6c79e9f9701dfb8c5d689ce5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/skipLast_32ebd97dc9255e3b917578177464899e +0 -33
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/32/skipLast_32ebd97dc9255e3b917578177464899e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/33/ReplaySubject_3311b511a16d8b0c3e23304eebb40d3e +0 -84
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/33/ReplaySubject_3311b511a16d8b0c3e23304eebb40d3e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/34/find_34c22ca010467918d87f33193ce95ff7 +0 -28
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/34/find_34c22ca010467918d87f33193ce95ff7.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/35/Subscriber_3541130fb10b4a537607b957f4251df0 +0 -204
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/35/Subscriber_3541130fb10b4a537607b957f4251df0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/36/OperatorSubscriber_362c0ba359aef05d6de98c8815507491 +0 -82
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/36/OperatorSubscriber_362c0ba359aef05d6de98c8815507491.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/38/common_38e0955cd641d1e06029b8851ecf3c8b +0 -1500
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/38/common_38e0955cd641d1e06029b8851ecf3c8b.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/38/isAsyncIterable_38a51f2abc798a774e04d8b7cac3fb18 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/38/isAsyncIterable_38a51f2abc798a774e04d8b7cac3fb18.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/NotFoundError_39e0e5a4d3fc380d4ca53dbc3f1d4f43 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/NotFoundError_39e0e5a4d3fc380d4ca53dbc3f1d4f43.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/appconfiginterface_39cbb9d9c321a775c3d6816280463653 +0 -60
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/appconfiginterface_39cbb9d9c321a775c3d6816280463653.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/firstValueFrom_391d26a44a60b3dc0c683f75416342ba +0 -29
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/firstValueFrom_391d26a44a60b3dc0c683f75416342ba.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/using_397c2ad02f41ed947243f0477e969be4 +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/39/using_397c2ad02f41ed947243f0477e969be4.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3a/takeWhile_3a9829a881228fdf558f9d71757646d0 +0 -21
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3a/takeWhile_3a9829a881228fdf558f9d71757646d0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3b/scheduleArray_3bdab1a240bd3c32636272eedf77cfad +0 -23
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3b/scheduleArray_3bdab1a240bd3c32636272eedf77cfad.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3c/max_3c0e0f730a77269602626ae8ef245a1e +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3c/max_3c0e0f730a77269602626ae8ef245a1e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3c/take_3c026b1f7917b04e5f2bbc4223289d9f +0 -25
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3c/take_3c026b1f7917b04e5f2bbc4223289d9f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3d/location_3def1246f95990cfebbab11e528ab266 +0 -497
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3d/location_3def1246f95990cfebbab11e528ab266.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3e/interval_3ea3b4a266fa372c186672ee3a7b5580 +0 -20
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3e/interval_3ea3b4a266fa372c186672ee3a7b5580.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3f/attribute_3f638223526a5452b11ee75dc0250648 +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3f/attribute_3f638223526a5452b11ee75dc0250648.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3f/combineLatest_3f0bf7600a0d2d0cf1141ac5af85a508 +0 -53
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/3f/combineLatest_3f0bf7600a0d2d0cf1141ac5af85a508.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/41/onErrorResumeNextWith_41672d4eb0d804acca50ecf1e4676c5b +0 -46
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/41/onErrorResumeNextWith_41672d4eb0d804acca50ecf1e4676c5b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/41/resource_41fe82c252d8f7625f81e4ed65f47b01 +0 -577
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/41/resource_41fe82c252d8f7625f81e4ed65f47b01.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/42/not_42d94d1e1986bd9f02192b58a49a4a10 +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/42/not_42d94d1e1986bd9f02192b58a49a4a10.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/43/combineAll_43bc2b5905cd2c6f74dc8b64523a6c0d +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/43/combineAll_43bc2b5905cd2c6f74dc8b64523a6c0d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/effect_45da71956a042b04e0c80617e1abea70 +0 -154
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/effect_45da71956a042b04e0c80617e1abea70.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/pluck_45d34d7b28cb92d486c5c549c829d4c7 +0 -30
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/pluck_45d34d7b28cb92d486c5c549c829d4c7.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/timeInterval_45fd794b2ec592d3ec1ec38cf56a5aba +0 -31
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/45/timeInterval_45fd794b2ec592d3ec1ec38cf56a5aba.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/46/animationFrames_46ea857479451d7367337bd511b12139 +0 -39
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/46/animationFrames_46ea857479451d7367337bd511b12139.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/46/scheduleIterable_46f97122ff229faf892b20877c5aa86c +0 -37
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/46/scheduleIterable_46f97122ff229faf892b20877c5aa86c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/47/platform_navigation_47d697bbddec9cce6b73383168a56d08 +0 -51
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/47/platform_navigation_47d697bbddec9cce6b73383168a56d08.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/47/queue_4709f99b0fc7a82058f6b3206d3b8e4e +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/47/queue_4709f99b0fc7a82058f6b3206d3b8e4e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/48/configservicespec_4885306385dc65c123e0824a1f58cb07 +0 -87
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/48/configservicespec_4885306385dc65c123e0824a1f58cb07.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/48/debounceTime_4809c90833e6a766aa133edf2ae49b83 +0 -51
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/48/debounceTime_4809c90833e6a766aa133edf2ae49b83.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/49/signals_49daedeaa3f1608b221e0e2b467fef8f +0 -256
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/49/signals_49daedeaa3f1608b221e0e2b467fef8f.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/49/startWith_490e5e430d82b7b008b7a1b600a9ab3c +0 -19
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/49/startWith_490e5e430d82b7b008b7a1b600a9ab3c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4a/debug_node_4aa7d0bfa7f2471539bc6e17f2118a47 +0 -20713
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4a/debug_node_4aa7d0bfa7f2471539bc6e17f2118a47.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4b/bindCallback_4b7735ffb109657480a3193b071be4af +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4b/bindCallback_4b7735ffb109657480a3193b071be4af.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4b/iterator_4b6f81592b9a6a91a1e032179adca692 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4b/iterator_4b6f81592b9a6a91a1e032179adca692.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4e/zip_4e4b1d528e64e46b2cf212e69c345b68 +0 -46
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/4e/zip_4e4b1d528e64e46b2cf212e69c345b68.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/50/flatMap_50ee03966593fc03915ea67e31223a61 +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/50/flatMap_50ee03966593fc03915ea67e31223a61.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/50/reduce_50207e757e7dd0895fbaacf449d409d1 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/50/reduce_50207e757e7dd0895fbaacf449d409d1.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/51/weak_ref_511653ddf85d364ebc878405e6282fc5 +0 -30
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/51/weak_ref_511653ddf85d364ebc878405e6282fc5.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/52/observeOn_52b18ee03b1120882b3e60875c787ab3 +0 -17
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/52/observeOn_52b18ee03b1120882b3e60875c787ab3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/53/dashboardcomponent_53c32631c99debadbc5a44e7b150fd72 +0 -2
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/53/fromEventPattern_539dbdf41c03ede2cfa34f62fbbc7d75 +0 -25
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/53/fromEventPattern_539dbdf41c03ede2cfa34f62fbbc7d75.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/53/groupBy_53bdc3415d8cb7d339b4770b31db1c9b +0 -68
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/53/groupBy_53bdc3415d8cb7d339b4770b31db1c9b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/54/AnimationFrameAction_5423f59105ed7d626abac6a69f07bfe4 +0 -60
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/54/AnimationFrameAction_5423f59105ed7d626abac6a69f07bfe4.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/54/scheduleReadableStreamLike_5475b804715c5be031baaec692002aab +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/54/scheduleReadableStreamLike_5475b804715c5be031baaec692002aab.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/55/animationFrame_55e052bcb509243da3536ac36e4aa83f +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/55/animationFrame_55e052bcb509243da3536ac36e4aa83f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/55/scheduleObservable_5569cfab2019142d0fcae5fc384a795c +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/55/scheduleObservable_5569cfab2019142d0fcae5fc384a795c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/angularoauth2oidc_5796eb8bb1f1dd6932dae6bb664d1cbb +0 -2766
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/angularoauth2oidc_5796eb8bb1f1dd6932dae6bb664d1cbb.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/endWith_57bd076f03a5529b5669a4bd386a0648 +0 -44
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/endWith_57bd076f03a5529b5669a4bd386a0648.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/isArrayLike_57dfd0465318da2cbc8fa3043aca76bc +0 -6
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/isArrayLike_57dfd0465318da2cbc8fa3043aca76bc.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/publishLast_574acb89597ecb7584a4d54a21ce7fd0 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/publishLast_574acb89597ecb7584a4d54a21ce7fd0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/switchScan_57759ec2c9148ae2f94dd997f963cc3f +0 -17
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/switchScan_57759ec2c9148ae2f94dd997f963cc3f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/windowTime_57deb9c95403419ebdedc01ee2643ce1 +0 -75
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/57/windowTime_57deb9c95403419ebdedc01ee2643ce1.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/59/BehaviorSubject_59c295137756816d9da8164415d41c40 +0 -56
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/59/BehaviorSubject_59c295137756816d9da8164415d41c40.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5a/switchMapTo_5a6dd9823852ccc95a49d9b77bd2561d +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5a/switchMapTo_5a6dd9823852ccc95a49d9b77bd2561d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5b/bufferTime_5bba3a4e339ab63d5ec157f2a2199900 +0 -101
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5b/bufferTime_5bba3a4e339ab63d5ec157f2a2199900.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5c/shareReplay_5c312953fc0f0439193e056e78510373 +0 -25
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5c/shareReplay_5c312953fc0f0439193e056e78510373.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5e/Action_5e72b25c73096e88490c6e9015ddb56c +0 -37
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5e/Action_5e72b25c73096e88490c6e9015ddb56c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5e/isIterable_5e80f397f8ed04a532027aa00c4eb453 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5e/isIterable_5e80f397f8ed04a532027aa00c4eb453.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5f/race_5f51258fb60a582ab1e6aca07b21655d +0 -38
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/5f/race_5f51258fb60a582ab1e6aca07b21655d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/60/race_60e460c803705be956c9ad1519f27ae9 +0 -44
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/60/race_60e460c803705be956c9ad1519f27ae9.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/61/authorizationinterface_61b3843bb141bda9133f897e585e0748 +0 -60
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/61/authorizationinterface_61b3843bb141bda9133f897e585e0748.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/61/testing_6176dd0db4a8ad21b8d3bc1d388053dc +0 -107
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/61/testing_6176dd0db4a8ad21b8d3bc1d388053dc.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/62/ArgumentOutOfRangeError_627b1a510e0d08fab12d924263c0d47f +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/62/ArgumentOutOfRangeError_627b1a510e0d08fab12d924263c0d47f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/63/dom_renderer_63272c78e0eb510569eae3d5b5f9aeee +0 -726
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/63/dom_renderer_63272c78e0eb510569eae3d5b5f9aeee.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/64/joinAllInternals_640e9d56539a3eec67d788a341b918ed +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/64/joinAllInternals_640e9d56539a3eec67d788a341b918ed.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/65/AsapScheduler_652b27b66e714bc12262aa7e97b1ef86 +0 -51
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/65/AsapScheduler_652b27b66e714bc12262aa7e97b1ef86.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/68/mapOneOrManyArgs_689e7d9385a707593cf83ee4082dc61e +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/68/mapOneOrManyArgs_689e7d9385a707593cf83ee4082dc61e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/68/partition_681d13cdb0b0bb3b0fe590ef7c5aa93c +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/68/partition_681d13cdb0b0bb3b0fe590ef7c5aa93c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/69/Scheduler_69ac465fc3a0f88a5564df13752f196f +0 -24
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/69/Scheduler_69ac465fc3a0f88a5564df13752f196f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/authenticationservicespec_6a31910a11f7a7d88de4428592b81b41 +0 -171
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/authenticationservicespec_6a31910a11f7a7d88de4428592b81b41.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/merge_6aeabbb04f67d52e04d5fb6bfe53c7ce +0 -50
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/merge_6aeabbb04f67d52e04d5fb6bfe53c7ce.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/skipUntil_6a1db23a8161437968c7fac8561325fd +0 -21
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/skipUntil_6a1db23a8161437968c7fac8561325fd.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/zipWith_6a11cd689b9f399f14e13a9589c1d30c +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6a/zipWith_6a11cd689b9f399f14e13a9589c1d30c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6e/partition_6ebe586335dfe0eb9f4b65dd7f912e38 +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6e/partition_6ebe586335dfe0eb9f4b65dd7f912e38.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6f/generate_6fa8af747ce58c570eb002b1c00430b3 +0 -123
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6f/generate_6fa8af747ce58c570eb002b1c00430b3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6f/of_6f039032237bc3616cd9f88de5b34572 +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/6f/of_6f039032237bc3616cd9f88de5b34572.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/70/takeLast_70f2caa4d21d5bde0732d9c218ff412d +0 -58
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/70/takeLast_70f2caa4d21d5bde0732d9c218ff412d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/72/module_726ab71b1f0164c527681100a65aad4a +0 -2332
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/72/module_726ab71b1f0164c527681100a65aad4a.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/73/lastValueFrom_737afa6f071e7d30fa42bdb86f84d107 +0 -32
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/73/lastValueFrom_737afa6f071e7d30fa42bdb86f84d107.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/75/createErrorClass_75905daf41c07df2a4ea17ba294cad8a +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/75/createErrorClass_75905daf41c07df2a4ea17ba294cad8a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/75/defer_75b01f8804d24bc81107cdfa51c9fd66 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/75/defer_75b01f8804d24bc81107cdfa51c9fd66.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/76/filter_76c22b02ab9a8b16a2ac23ad85243e5b +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/76/filter_76c22b02ab9a8b16a2ac23ad85243e5b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/76/version_76b048d35316951f4c8a9efb64028794 +0 -119
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/76/version_76b048d35316951f4c8a9efb64028794.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/79/iif_798ee878d80215441fd62f4c46aaac1e +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/79/iif_798ee878d80215441fd62f4c46aaac1e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7b/identity_7bdd4c23fb4e8612fe66d9d232584cb0 +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7b/identity_7bdd4c23fb4e8612fe66d9d232584cb0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/AsyncAction_7cf5bb2a2d938bec1cf31419bc641e68 +0 -116
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/AsyncAction_7cf5bb2a2d938bec1cf31419bc641e68.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/Subscription_7c102157fbcfac1c16274e713ebfafcb +0 -202
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/Subscription_7c102157fbcfac1c16274e713ebfafcb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/lift_7c74badd969dadc4de0ea5ff85e8bcfc +0 -26
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/lift_7c74badd969dadc4de0ea5ff85e8bcfc.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/pipe_7c13629329765dd61c3ac7addd741d3c +0 -26
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/pipe_7c13629329765dd61c3ac7addd741d3c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/throttleTime_7c8f3b9a09e3b2380c6f5a53e9e19d73 +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7c/throttleTime_7c8f3b9a09e3b2380c6f5a53e9e19d73.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7d/UnsubscriptionError_7d69546cdd3ee56a0c8196e6b7a3b93b +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/7d/UnsubscriptionError_7d69546cdd3ee56a0c8196e6b7a3b93b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/defaultIfEmpty_810b4e0604dba71c6021470672d75fe6 +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/defaultIfEmpty_810b4e0604dba71c6021470672d75fe6.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/pairwise_81b247ee51f59dd96b3009979157e4b9 +0 -20
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/pairwise_81b247ee51f59dd96b3009979157e4b9.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/repeat_810a7e7909eff9a4745b563969d1ee11 +0 -65
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/81/repeat_810a7e7909eff9a4745b563969d1ee11.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/82/authorizationguard_82de14e9b4958e2e99b8643cd395d629 +0 -530
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/82/authorizationguard_82de14e9b4958e2e99b8643cd395d629.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/83/dashboardcomponent_833bf6a5c3619c9adaced99312164a7a +0 -4149
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/83/dashboardcomponent_833bf6a5c3619c9adaced99312164a7a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/dashboardcomponentspec_8874d89d947ada3b2913b3d96a957478 +0 -219
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/dashboardcomponentspec_8874d89d947ada3b2913b3d96a957478.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/isFunction_880148731b92c4fdf7652bae9f17672c +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/isFunction_880148731b92c4fdf7652bae9f17672c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/window_889e36acc1694a6c6859a5c14694efc6 +0 -33
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/88/window_889e36acc1694a6c6859a5c14694efc6.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/89/core_899034079b505a592bba9a502120cfd8 +0 -3480
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/89/core_899034079b505a592bba9a502120cfd8.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8a/isScheduler_8a1f0e526117aed8f474344e8a337001 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8a/isScheduler_8a1f0e526117aed8f474344e8a337001.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8a/range_8aa1319af11190cf05b194c0eace5a96 +0 -40
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8a/range_8aa1319af11190cf05b194c0eace5a96.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8b/connectable_8bdc7b54bdc252caf076d2e924c9ccdc +0 -34
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8b/connectable_8bdc7b54bdc252caf076d2e924c9ccdc.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8c/debounce_8c4b06b5e96c9ce06d159c7167ad4df3 +0 -39
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8c/debounce_8c4b06b5e96c9ce06d159c7167ad4df3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8d/buffer_8da491f572a7ebd7fcc78973472dd554 +0 -27
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8d/buffer_8da491f572a7ebd7fcc78973472dd554.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8e/distinctUntilChanged_8ec9a7e6a213b0da14fef2a6287426ee +0 -30
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8e/distinctUntilChanged_8ec9a7e6a213b0da14fef2a6287426ee.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/animationFrameProvider_8f6b1fdd1805c32bd8a71158fe2d4f6e +0 -68
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/animationFrameProvider_8f6b1fdd1805c32bd8a71158fe2d4f6e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/skipWhile_8fbb2b1e98a876abf6cd45db4580345a +0 -15
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/skipWhile_8fbb2b1e98a876abf6cd45db4580345a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/timeoutProvider_8f5b211154fd0dfc69bcc93ffe1281d9 +0 -52
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/8f/timeoutProvider_8f5b211154fd0dfc69bcc93ffe1281d9.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/arrRemove_9007c7c90914e2c67a3c7c7f7f6ed63d +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/arrRemove_9007c7c90914e2c67a3c7c7f7f6ed63d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/takeUntil_90cbbe5d41852345c1c2d15693a91a4e +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/takeUntil_90cbbe5d41852345c1c2d15693a91a4e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/types_902cdea8f0917627cc8393a9aa52c916 +0 -4
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/90/types_902cdea8f0917627cc8393a9aa52c916.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/91/isPromise_91e79cccaa029e755a189ab94ff11d2a +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/91/isPromise_91e79cccaa029e755a189ab94ff11d2a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/92/timestamp_929befc00c12052926227dd07e014839 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/92/timestamp_929befc00c12052926227dd07e014839.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/93/mergeMap_9318b621967b6738c51ffd144f90fbe3 +0 -23
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/93/mergeMap_9318b621967b6738c51ffd144f90fbe3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/94/min_9467e39c730974505b268969ae4a9eef +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/94/min_9467e39c730974505b268969ae4a9eef.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/97/isEmpty_97e18cd152ec8cbf2572309d51321174 +0 -19
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/97/isEmpty_97e18cd152ec8cbf2572309d51321174.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/98/toArray_986fbe7e6566dab35c8bcf0e57c131d8 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/98/toArray_986fbe7e6566dab35c8bcf0e57c131d8.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/99/authorizationservicespec_99005e51e3fe0531de30cc3ebe182159 +0 -206
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/99/authorizationservicespec_99005e51e3fe0531de30cc3ebe182159.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9a/logincomponentspec_9a5d9162e7420f6e7bfd0ec192a0e7b3 +0 -126
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9a/logincomponentspec_9a5d9162e7420f6e7bfd0ec192a0e7b3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9b/di_9bb73d3d1d37e03ae545cb821a24d6e4 +0 -48
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9b/di_9bb73d3d1d37e03ae545cb821a24d6e4.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9b/single_9b7260fd4298ea61a3af48a06e07f955 +0 -35
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9b/single_9b7260fd4298ea61a3af48a06e07f955.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9c/distinctUntilKeyChanged_9c0e259a4e26342aa529522ab260b6e2 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9c/distinctUntilKeyChanged_9c0e259a4e26342aa529522ab260b6e2.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9c/reportUnhandledError_9c687bd943c7e3cb0cbe5ba362e47a57 +0 -19
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9c/reportUnhandledError_9c687bd943c7e3cb0cbe5ba362e47a57.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9e/audit_9ef009f5c290fa05db1f116ccc1dea15 +0 -42
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9e/audit_9ef009f5c290fa05db1f116ccc1dea15.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9f/Observable_9fa7fb170ab97af3339678f170c00580 +0 -106
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9f/Observable_9fa7fb170ab97af3339678f170c00580.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9f/timer_9f8a9fa0c2907acec47fd64413f88e1f +0 -45
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/9f/timer_9f8a9fa0c2907acec47fd64413f88e1f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a1/exhaustMap_a17113d2ae51f6049da7b9126fc2f3d0 +0 -34
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a1/exhaustMap_a17113d2ae51f6049da7b9126fc2f3d0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/catchError_a2a6d4194ebf9a7b737c5162e13f9e8f +0 -32
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/catchError_a2a6d4194ebf9a7b737c5162e13f9e8f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/concatMapTo_a28deb2bec5c1f5c41e1087788eccbba +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/concatMapTo_a28deb2bec5c1f5c41e1087788eccbba.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/mergeMapTo_a263600e2e57ffe7c35a1d079bbf423f +0 -20
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a2/mergeMapTo_a263600e2e57ffe7c35a1d079bbf423f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a3/not_found_a3e96f6eb61e4ec43431a235d6638f02 +0 -64
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/a3/not_found_a3e96f6eb61e4ec43431a235d6638f02.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/aa/concatMap_aa22e6b3212edabed548ee6fd704ac9b +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/aa/concatMap_aa22e6b3212edabed548ee6fd704ac9b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/aa/noop_aa193fc1a61ccf323a19e2acef78f9b8 +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/aa/noop_aa193fc1a61ccf323a19e2acef78f9b8.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ab/argsOrArgArray_abd5775c2214bbc9529e7f5536b4b9b5 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ab/argsOrArgArray_abd5775c2214bbc9529e7f5536b4b9b5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ab/forkJoin_ab79df1ea741b3921af56378f47ac083 +0 -52
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ab/forkJoin_ab79df1ea741b3921af56378f47ac083.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ae/scanInternals_ae3735574319bd024617b242f6f9f93b +0 -27
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ae/scanInternals_ae3735574319bd024617b242f6f9f93b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/af/withLatestFrom_af570814ca7c4209b836b726cd4d742c +0 -72
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/af/withLatestFrom_af570814ca7c4209b836b726cd4d742c.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/args_b0aa0cda6f64d81b5a3ce9a1f1b5a1af +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/args_b0aa0cda6f64d81b5a3ce9a1f1b5a1af.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/concatWith_b0ad49aa785dead5921f467fc5deff89 +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/concatWith_b0ad49aa785dead5921f467fc5deff89.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/fromEvent_b0a59cb0e063c290accf4e07083172f5 +0 -87
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b0/fromEvent_b0a59cb0e063c290accf4e07083172f5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b3/bufferToggle_b398140d6a113f822cd7e55a219389eb +0 -69
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b3/bufferToggle_b398140d6a113f822cd7e55a219389eb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b3/mapTo_b35eaa231d63d7632d124fd0c9491899 +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b3/mapTo_b35eaa231d63d7632d124fd0c9491899.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/AsyncScheduler_b48e6adc2337360d93bc438e30261c9b +0 -58
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/AsyncScheduler_b48e6adc2337360d93bc438e30261c9b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/Notification_b4734e58b4d2c8624cb7168a139a0f5e +0 -77
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/Notification_b4734e58b4d2c8624cb7168a139a0f5e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/dematerialize_b49e3c0f02f78e9b7754a2f14dd20dc4 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b4/dematerialize_b49e3c0f02f78e9b7754a2f14dd20dc4.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b5/errorContext_b5e662cfa00b7cb11e0375297f3e4bd0 +0 -34
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b5/errorContext_b5e662cfa00b7cb11e0375297f3e4bd0.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b5/isObservable_b567e287f5b7463f88bd1726e06f5a53 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b5/isObservable_b567e287f5b7463f88bd1726e06f5a53.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b6/bufferWhen_b600af3c63e2658f3ee46c1e2a5620db +0 -28
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b6/bufferWhen_b600af3c63e2658f3ee46c1e2a5620db.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b6/concatAll_b6bada65d21367fa443476add9a9bb8f +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b6/concatAll_b6bada65d21367fa443476add9a9bb8f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b7/eventdispatch_b7a6d5d3415dcade3b9c2dcbc1ec88cd +0 -1262
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b7/eventdispatch_b7a6d5d3415dcade3b9c2dcbc1ec88cd.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b7/map_b732b01a086bf2d802b5e5372ddb5374 +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b7/map_b732b01a086bf2d802b5e5372ddb5374.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b9/testing_b9c34b8f3a2cff6e967d44b496301057 +0 -330
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/b9/testing_b9c34b8f3a2cff6e967d44b496301057.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ba/delayWhen_ba0e6b593adde7fb970f5426d08ba7bd +0 -20
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ba/delayWhen_ba0e6b593adde7fb970f5426d08ba7bd.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/bb/from_bb50ad60e07cb6d360b7f208249429b2 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/bb/from_bb50ad60e07cb6d360b7f208249429b2.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/be/zip_be7b4ff5badc5c041b9ee29ad7fedde5 +0 -79
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/be/zip_be7b4ff5badc5c041b9ee29ad7fedde5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c0/platformbrowser_c024fceb1a0fe262d4fa22aeba203bf8 +0 -759
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c0/platformbrowser_c024fceb1a0fe262d4fa22aeba203bf8.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c2/platformbrowserdynamic_c293e204f07ffe93a61d7d2a97d63964 +0 -145
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c2/platformbrowserdynamic_c293e204f07ffe93a61d7d2a97d63964.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c3/Immediate_c3da4258074ed597ed071241b4c35bef +0 -34
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c3/Immediate_c3da4258074ed597ed071241b4c35bef.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c3/ignoreElements_c355b3624a679685bd1c25d33e6bde66 +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c3/ignoreElements_c355b3624a679685bd1c25d33e6bde66.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c5/findIndex_c534ebcb116500af4352aa6530e9041e +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c5/findIndex_c534ebcb116500af4352aa6530e9041e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c5/observable_c5f77f53d42172356a26ee7b5f9eb0fe +0 -6
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c5/observable_c5f77f53d42172356a26ee7b5f9eb0fe.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c7/async_c75f179ff8345a7facdf5722a76ce5eb +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c7/async_c75f179ff8345a7facdf5722a76ce5eb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c8/publishReplay_c8c843986a226c800553c50bf0d4986a +0 -16
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c8/publishReplay_c8c843986a226c800553c50bf0d4986a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/switchMap_c9a61e10418ff0d233e9f37ce2564722 +0 -29
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/switchMap_c9a61e10418ff0d233e9f37ce2564722.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/tap_c9701a92d0cb05c37b5e407d2612f461 +0 -45
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/tap_c9701a92d0cb05c37b5e407d2612f461.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/throwIfEmpty_c95930779baae066280851a904dbeb3b +0 -24
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/c9/throwIfEmpty_c95930779baae066280851a904dbeb3b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ca/performanceTimestampProvider_ca75d4b8a7737a06fe0103f57ecab207 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ca/performanceTimestampProvider_ca75d4b8a7737a06fe0103f57ecab207.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/cd/root_effect_scheduler_cd51ef0a8f200e1abf01dc277a3a5df9 +0 -2781
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/cd/root_effect_scheduler_cd51ef0a8f200e1abf01dc277a3a5df9.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ce/never_cee185710a6214c29143737c23fd4677 +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ce/never_cee185710a6214c29143737c23fd4677.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/cf/router2_cf9d43bf1bbddffad92ce6f986903a05 +0 -4525
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/cf/router2_cf9d43bf1bbddffad92ce6f986903a05.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d0/raceWith_d051c9b953c1fd2639013e156ba6ae19 +0 -49
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d0/raceWith_d051c9b953c1fd2639013e156ba6ae19.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d1/config_d1c9202c35f14e62ae850fe7743cae36 +0 -12
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d1/config_d1c9202c35f14e62ae850fe7743cae36.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d3/AsapAction_d39639bf5f6b225cc38dc8c74d1af9a6 +0 -62
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d3/AsapAction_d39639bf5f6b225cc38dc8c74d1af9a6.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d3/multicast_d36b647dfd33a398736534a046a02bf5 +0 -18
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d3/multicast_d36b647dfd33a398736534a046a02bf5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d4/index_d4a6e0403fbfbe6498f4f78f3d629738 +0 -233
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d4/index_d4a6e0403fbfbe6498f4f78f3d629738.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d4/materialize_d43175ee753b655d51140c88bce1a6be +0 -22
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d4/materialize_d43175ee753b655d51140c88bce1a6be.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d6/scheduleAsyncIterable_d6e81c64015c43541cba915cc3e31132 +0 -28
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d6/scheduleAsyncIterable_d6e81c64015c43541cba915cc3e31132.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d7/combineLatestWith_d70435aa71a1b44c2f0fd0e5ace5c855 +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d7/combineLatestWith_d70435aa71a1b44c2f0fd0e5ace5c855.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/ObjectUnsubscribedError_d863d8d7ba62753dd49ed11452bb49ad +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/ObjectUnsubscribedError_d863d8d7ba62753dd49ed11452bb49ad.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/isReadableStreamLike_d8ac776d715d309f9290381eb737db32 +0 -135
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/isReadableStreamLike_d8ac776d715d309f9290381eb737db32.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/mergeWith_d8c7619538423a1bf26f2b9af57b6d25 +0 -43
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/mergeWith_d8c7619538423a1bf26f2b9af57b6d25.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/xhr_d8832649622efe3fcd143809f0f87fd4 +0 -42
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/xhr_d8832649622efe3fcd143809f0f87fd4.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/zipAll_d804e1eccf146187e7358ac19aa173b3 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d8/zipAll_d804e1eccf146187e7358ac19aa173b3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d9/compiler_d92e4c0e6e7f4c5772f2508286502b68 +0 -30180
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d9/compiler_d92e4c0e6e7f4c5772f2508286502b68.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d9/elementAt_d986766ccbe2107bdc7f5e669337600e +0 -20
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/d9/elementAt_d986766ccbe2107bdc7f5e669337600e.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/db/executeSchedule_dbf7f93b0f5675ff5dd1cf6436806ec5 +0 -27
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/db/executeSchedule_dbf7f93b0f5675ff5dd1cf6436806ec5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/dc/bufferCount_dc0ef20dd5330da45bc2ce43a89e3e50 +0 -109
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/dc/bufferCount_dc0ef20dd5330da45bc2ce43a89e3e50.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/dd/combineLatest_ddac0381b2fcc357b2049905db6355f8 +0 -78
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/dd/combineLatest_ddac0381b2fcc357b2049905db6355f8.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/df/timeoutWith_df6ef9efc665a029df8ca430438b5e2f +0 -36
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/df/timeoutWith_df6ef9efc665a029df8ca430438b5e2f.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e1/mergeInternals_e19ab8fb8b32e55949601e89605352ec +0 -66
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e1/mergeInternals_e19ab8fb8b32e55949601e89605352ec.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e2/empty_e2792d620e14eba9bb559f5122b2c3cb +0 -14
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e2/empty_e2792d620e14eba9bb559f5122b2c3cb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e2/retryWhen_e2032835cf0c34e73ce7119acf419768 +0 -37
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e2/retryWhen_e2032835cf0c34e73ce7119acf419768.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e3/SequenceError_e36656846dc4f82f2b68577130e16686 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e3/SequenceError_e36656846dc4f82f2b68577130e16686.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/bindNodeCallback_e52282e47a455913b29058a2a317f57d +0 -10
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/bindNodeCallback_e52282e47a455913b29058a2a317f57d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/merge_e588ad7be7a101e8cd64100ee5ccd900 +0 -28
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/merge_e588ad7be7a101e8cd64100ee5ccd900.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/refCount_e59caf6d2da72ecc70af816bec0f59cf +0 -31
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e5/refCount_e59caf6d2da72ecc70af816bec0f59cf.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e6/authenticationconfig_e61ac491e3ffa80028d768cb76d35be4 +0 -241
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e6/authenticationconfig_e61ac491e3ffa80028d768cb76d35be4.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e7/finalize_e722a897efe5058701cb7bd1994377c5 +0 -17
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e7/finalize_e722a897efe5058701cb7bd1994377c5.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e9/common_module_e95b66602cfdfe1dc86f7d88b9daba39 +0 -2817
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/e9/common_module_e95b66602cfdfe1dc86f7d88b9daba39.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/eb/index_eb85d2667ebd581897f23dd840905668 +0 -363
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/eb/index_eb85d2667ebd581897f23dd840905668.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/eb/setupjest_eb921e8057ec61c0cb0a6b18b615e94d +0 -65
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/eb/setupjest_eb921e8057ec61c0cb0a6b18b615e94d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ec/http_ec606ed9a5da539b70c571c1db03c6c3 +0 -411
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ec/http_ec606ed9a5da539b70c571c1db03c6c3.map +0 -7
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ed/first_ed8d191ff8c8fcd5257867021e5d7644 +0 -18
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ed/first_ed8d191ff8c8fcd5257867021e5d7644.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ee/argsArgArrayOrObject_eee0e6f9213cd3248bb235a57c58fe9d +0 -27
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ee/argsArgArrayOrObject_eee0e6f9213cd3248bb235a57c58fe9d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f0/ConnectableObservable_f019284d46b19e0ac701f4e5f966877b +0 -83
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f0/ConnectableObservable_f019284d46b19e0ac701f4e5f966877b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f0/bindCallbackInternals_f09fffe73e1327185aa6b27297978a6b +0 -112
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f0/bindCallbackInternals_f09fffe73e1327185aa6b27297978a6b.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f1/VirtualTimeScheduler_f1e0966a6811c115d2e1b987a5bccbb1 +0 -136
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f1/VirtualTimeScheduler_f1e0966a6811c115d2e1b987a5bccbb1.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f1/auditTime_f1f81974926fcabf16721c844c492587 +0 -15
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f1/auditTime_f1f81974926fcabf16721c844c492587.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f3/switchAll_f36891bbdd859d95639bf39ea11871b3 +0 -11
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f3/switchAll_f36891bbdd859d95639bf39ea11871b3.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f5/isDate_f580e5e8dd37953d4077ccfd3d2f3238 +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f5/isDate_f580e5e8dd37953d4077ccfd3d2f3238.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f6/onErrorResumeNext_f67503f4ac86fb2327db7b977000463a +0 -40
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/f6/onErrorResumeNext_f67503f4ac86fb2327db7b977000463a.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fa/AnimationFrameScheduler_fa55eaf8d3b76acc48dc461757443954 +0 -57
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fa/AnimationFrameScheduler_fa55eaf8d3b76acc48dc461757443954.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fb/sample_fb860d84458eeb36b477dfa74a843530 +0 -28
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fb/sample_fb860d84458eeb36b477dfa74a843530.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fc/QueueScheduler_fc41cc77a1da1827c68511ec446c61cb +0 -31
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fc/QueueScheduler_fc41cc77a1da1827c68511ec446c61cb.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fc/logincomponent_fc5f1b609a4695ceb7718cf57818ef14 +0 -1951
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fc/logincomponent_fc5f1b609a4695ceb7718cf57818ef14.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fd/createObject_fd09005888b3a1482b913bc7416cf93d +0 -9
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/fd/createObject_fd09005888b3a1482b913bc7416cf93d.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ff/subscribeOn_ff90b699bad608d185d3faa4c04f1b20 +0 -15
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ff/subscribeOn_ff90b699bad608d185d3faa4c04f1b20.map +0 -1
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ff/throwError_ff75e4c919422c524c63fa2e532e31b5 +0 -13
- package/.jest-cache/jest-transform-cache-9a3a3745ceefdbbde8dc96f3a11cb645-79ef2876fae7ca75eedb2aa53dc48338/ff/throwError_ff75e4c919422c524c63fa2e532e31b5.map +0 -1
- package/.jest-cache/perf-cache-9a3a3745ceefdbbde8dc96f3a11cb645-da39a3ee5e6b4b0d3255bfef95601890 +0 -1
- package/.nx/nxw.js +0 -116
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -206
- package/coverage/junit.xml +0 -1540
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -206
- package/coverage/lcov-report/lib/components/dashboard/dashboard.component.ts.html +0 -943
- package/coverage/lcov-report/lib/components/dashboard/index.html +0 -116
- package/coverage/lcov-report/lib/components/login/index.html +0 -116
- package/coverage/lcov-report/lib/components/login/login.component.ts.html +0 -451
- package/coverage/lcov-report/lib/config/app.config.ts.html +0 -889
- package/coverage/lcov-report/lib/config/authentication.config.ts.html +0 -262
- package/coverage/lcov-report/lib/config/index.html +0 -131
- package/coverage/lcov-report/lib/guards/authorization.guard.ts.html +0 -178
- package/coverage/lcov-report/lib/guards/index.html +0 -116
- package/coverage/lcov-report/lib/index.html +0 -116
- package/coverage/lcov-report/lib/models/index.html +0 -116
- package/coverage/lcov-report/lib/models/login-config.interface.ts.html +0 -307
- package/coverage/lcov-report/lib/services/authentication.service.ts.html +0 -973
- package/coverage/lcov-report/lib/services/authorization.service.ts.html +0 -634
- package/coverage/lcov-report/lib/services/config.service.ts.html +0 -316
- package/coverage/lcov-report/lib/services/index.html +0 -146
- package/coverage/lcov-report/lib/version.ts.html +0 -148
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov.info +0 -1060
- package/coverage/lib/components/dashboard/dashboard.component.ts.html +0 -943
- package/coverage/lib/components/dashboard/index.html +0 -116
- package/coverage/lib/components/login/index.html +0 -116
- package/coverage/lib/components/login/login.component.ts.html +0 -451
- package/coverage/lib/config/app.config.ts.html +0 -889
- package/coverage/lib/config/authentication.config.ts.html +0 -262
- package/coverage/lib/config/index.html +0 -131
- package/coverage/lib/guards/authorization.guard.ts.html +0 -178
- package/coverage/lib/guards/index.html +0 -116
- package/coverage/lib/index.html +0 -116
- package/coverage/lib/models/index.html +0 -116
- package/coverage/lib/models/login-config.interface.ts.html +0 -307
- package/coverage/lib/services/authentication.service.ts.html +0 -973
- package/coverage/lib/services/authorization.service.ts.html +0 -634
- package/coverage/lib/services/config.service.ts.html +0 -316
- package/coverage/lib/services/index.html +0 -146
- package/coverage/lib/version.ts.html +0 -148
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/dist/README.md +0 -276
- package/dist/src/assets/logo-mh.png +0 -0
- package/dist/src/lib/styles/_auth.scss +0 -188
- package/dist/src/lib/styles/_dashboard.scss +0 -276
- package/dist/src/lib/styles/_index.scss +0 -12
- package/dist/src/lib/styles/_tokens.scss +0 -143
- package/jest.config.js +0 -99
- package/ng-package.json +0 -12
- package/nx +0 -5
- package/nx.bat +0 -10
- package/nx.json +0 -5
- package/scripts/sync-version.js +0 -54
- package/setup-jest.ts +0 -70
- package/sonar-project.properties +0 -33
- package/src/lib/components/dashboard/dashboard.component.html +0 -256
- package/src/lib/components/dashboard/dashboard.component.scss +0 -623
- package/src/lib/components/dashboard/dashboard.component.spec.ts +0 -255
- package/src/lib/components/dashboard/dashboard.component.ts +0 -286
- package/src/lib/components/index.ts +0 -2
- package/src/lib/components/login/login.component.html +0 -85
- package/src/lib/components/login/login.component.scss +0 -286
- package/src/lib/components/login/login.component.spec.ts +0 -144
- package/src/lib/components/login/login.component.ts +0 -122
- package/src/lib/config/app.config.ts +0 -320
- package/src/lib/config/authentication.config.ts +0 -59
- package/src/lib/config/index.ts +0 -2
- package/src/lib/guards/authorization.guard.ts +0 -31
- package/src/lib/guards/index.ts +0 -1
- package/src/lib/models/app-config.interface.ts +0 -61
- package/src/lib/models/authorization.interface.ts +0 -40
- package/src/lib/models/index.ts +0 -4
- package/src/lib/models/library-config.interface.ts +0 -104
- package/src/lib/models/login-config.interface.ts +0 -74
- package/src/lib/services/authentication.service.spec.ts +0 -201
- package/src/lib/services/authentication.service.ts +0 -296
- package/src/lib/services/authorization.service.spec.ts +0 -239
- package/src/lib/services/authorization.service.ts +0 -183
- package/src/lib/services/config.service.spec.ts +0 -99
- package/src/lib/services/config.service.ts +0 -77
- package/src/lib/services/index.ts +0 -3
- package/src/lib/version.ts +0 -21
- package/src/public-api.ts +0 -75
- package/tsconfig.json +0 -33
- package/tsconfig.spec.json +0 -16
|
@@ -1,2766 +0,0 @@
|
|
|
1
|
-
e71f1c592f81af9c049d8c28484f6dd5
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from2, except, desc) => {
|
|
13
|
-
if (from2 && typeof from2 === "object" || typeof from2 === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from2))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var __async = (__this, __arguments, generator) => {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
var fulfilled = (value) => {
|
|
32
|
-
try {
|
|
33
|
-
step(generator.next(value));
|
|
34
|
-
} catch (e) {
|
|
35
|
-
reject(e);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var rejected = (value) => {
|
|
39
|
-
try {
|
|
40
|
-
step(generator.throw(value));
|
|
41
|
-
} catch (e) {
|
|
42
|
-
reject(e);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
46
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
var angular_oauth2_oidc_exports = {};
|
|
50
|
-
__export(angular_oauth2_oidc_exports, {
|
|
51
|
-
AUTH_CONFIG: () => AUTH_CONFIG,
|
|
52
|
-
AbstractValidationHandler: () => AbstractValidationHandler,
|
|
53
|
-
AuthConfig: () => AuthConfig,
|
|
54
|
-
DateTimeProvider: () => DateTimeProvider,
|
|
55
|
-
DefaultHashHandler: () => DefaultHashHandler,
|
|
56
|
-
DefaultOAuthInterceptor: () => DefaultOAuthInterceptor,
|
|
57
|
-
HashHandler: () => HashHandler,
|
|
58
|
-
JwksValidationHandler: () => JwksValidationHandler,
|
|
59
|
-
LoginOptions: () => LoginOptions,
|
|
60
|
-
MemoryStorage: () => MemoryStorage,
|
|
61
|
-
NullValidationHandler: () => NullValidationHandler,
|
|
62
|
-
OAuthErrorEvent: () => OAuthErrorEvent,
|
|
63
|
-
OAuthEvent: () => OAuthEvent,
|
|
64
|
-
OAuthInfoEvent: () => OAuthInfoEvent,
|
|
65
|
-
OAuthLogger: () => OAuthLogger,
|
|
66
|
-
OAuthModule: () => OAuthModule,
|
|
67
|
-
OAuthModuleConfig: () => OAuthModuleConfig,
|
|
68
|
-
OAuthNoopResourceServerErrorHandler: () => OAuthNoopResourceServerErrorHandler,
|
|
69
|
-
OAuthResourceServerConfig: () => OAuthResourceServerConfig,
|
|
70
|
-
OAuthResourceServerErrorHandler: () => OAuthResourceServerErrorHandler,
|
|
71
|
-
OAuthService: () => OAuthService,
|
|
72
|
-
OAuthStorage: () => OAuthStorage,
|
|
73
|
-
OAuthSuccessEvent: () => OAuthSuccessEvent,
|
|
74
|
-
ReceivedTokens: () => ReceivedTokens,
|
|
75
|
-
SystemDateTimeProvider: () => SystemDateTimeProvider,
|
|
76
|
-
UrlHelperService: () => UrlHelperService,
|
|
77
|
-
ValidationHandler: () => ValidationHandler,
|
|
78
|
-
provideOAuthClient: () => provideOAuthClient
|
|
79
|
-
});
|
|
80
|
-
module.exports = __toCommonJS(angular_oauth2_oidc_exports);
|
|
81
|
-
var i0 = __toESM(require("@angular/core"), 1);
|
|
82
|
-
var import_core = require("@angular/core");
|
|
83
|
-
var import_common = require("@angular/common");
|
|
84
|
-
var i1 = __toESM(require("@angular/common/http"), 1);
|
|
85
|
-
var import_http = require("@angular/common/http");
|
|
86
|
-
var import_rxjs = require("rxjs");
|
|
87
|
-
var import_operators = require("rxjs/operators");
|
|
88
|
-
class NullValidationHandler {
|
|
89
|
-
validateSignature(validationParams) {
|
|
90
|
-
return Promise.resolve(null);
|
|
91
|
-
}
|
|
92
|
-
validateAtHash(validationParams) {
|
|
93
|
-
return Promise.resolve(true);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
class OAuthModuleConfig {
|
|
97
|
-
}
|
|
98
|
-
class OAuthResourceServerConfig {
|
|
99
|
-
}
|
|
100
|
-
class DateTimeProvider {
|
|
101
|
-
}
|
|
102
|
-
const _SystemDateTimeProvider = class _SystemDateTimeProvider extends DateTimeProvider {
|
|
103
|
-
now() {
|
|
104
|
-
return Date.now();
|
|
105
|
-
}
|
|
106
|
-
new() {
|
|
107
|
-
return /* @__PURE__ */ new Date();
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
_SystemDateTimeProvider.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _SystemDateTimeProvider, deps: null, target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
111
|
-
_SystemDateTimeProvider.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _SystemDateTimeProvider });
|
|
112
|
-
let SystemDateTimeProvider = _SystemDateTimeProvider;
|
|
113
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: SystemDateTimeProvider, decorators: [{
|
|
114
|
-
type: import_core.Injectable
|
|
115
|
-
}] });
|
|
116
|
-
class LoginOptions {
|
|
117
|
-
constructor() {
|
|
118
|
-
this.disableNonceCheck = false;
|
|
119
|
-
this.preventClearHashAfterLogin = false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
class OAuthLogger {
|
|
123
|
-
}
|
|
124
|
-
class OAuthStorage {
|
|
125
|
-
}
|
|
126
|
-
const _MemoryStorage = class _MemoryStorage {
|
|
127
|
-
constructor() {
|
|
128
|
-
this.data = /* @__PURE__ */ new Map();
|
|
129
|
-
}
|
|
130
|
-
getItem(key) {
|
|
131
|
-
return this.data.get(key);
|
|
132
|
-
}
|
|
133
|
-
removeItem(key) {
|
|
134
|
-
this.data.delete(key);
|
|
135
|
-
}
|
|
136
|
-
setItem(key, data) {
|
|
137
|
-
this.data.set(key, data);
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
_MemoryStorage.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _MemoryStorage, deps: [], target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
141
|
-
_MemoryStorage.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _MemoryStorage });
|
|
142
|
-
let MemoryStorage = _MemoryStorage;
|
|
143
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: MemoryStorage, decorators: [{
|
|
144
|
-
type: import_core.Injectable
|
|
145
|
-
}] });
|
|
146
|
-
class ReceivedTokens {
|
|
147
|
-
}
|
|
148
|
-
class OAuthEvent {
|
|
149
|
-
constructor(type) {
|
|
150
|
-
this.type = type;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
class OAuthSuccessEvent extends OAuthEvent {
|
|
154
|
-
constructor(type, info = null) {
|
|
155
|
-
super(type);
|
|
156
|
-
this.info = info;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
class OAuthInfoEvent extends OAuthEvent {
|
|
160
|
-
constructor(type, info = null) {
|
|
161
|
-
super(type);
|
|
162
|
-
this.info = info;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
class OAuthErrorEvent extends OAuthEvent {
|
|
166
|
-
constructor(type, reason, params = null) {
|
|
167
|
-
super(type);
|
|
168
|
-
this.reason = reason;
|
|
169
|
-
this.params = params;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
function b64DecodeUnicode(str) {
|
|
173
|
-
const base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
174
|
-
return decodeURIComponent(atob(base64).split("").map(function(c) {
|
|
175
|
-
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
|
|
176
|
-
}).join(""));
|
|
177
|
-
}
|
|
178
|
-
function base64UrlEncode(str) {
|
|
179
|
-
const base64 = btoa(str);
|
|
180
|
-
return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
181
|
-
}
|
|
182
|
-
class AuthConfig {
|
|
183
|
-
constructor(json) {
|
|
184
|
-
this.clientId = "";
|
|
185
|
-
this.redirectUri = "";
|
|
186
|
-
this.postLogoutRedirectUri = "";
|
|
187
|
-
this.redirectUriAsPostLogoutRedirectUriFallback = true;
|
|
188
|
-
this.loginUrl = "";
|
|
189
|
-
this.scope = "openid profile";
|
|
190
|
-
this.resource = "";
|
|
191
|
-
this.rngUrl = "";
|
|
192
|
-
this.oidc = true;
|
|
193
|
-
this.requestAccessToken = true;
|
|
194
|
-
this.options = null;
|
|
195
|
-
this.issuer = "";
|
|
196
|
-
this.logoutUrl = "";
|
|
197
|
-
this.clearHashAfterLogin = true;
|
|
198
|
-
this.tokenEndpoint = null;
|
|
199
|
-
this.revocationEndpoint = null;
|
|
200
|
-
this.customTokenParameters = [];
|
|
201
|
-
this.userinfoEndpoint = null;
|
|
202
|
-
this.responseType = "";
|
|
203
|
-
this.showDebugInformation = false;
|
|
204
|
-
this.silentRefreshRedirectUri = "";
|
|
205
|
-
this.silentRefreshMessagePrefix = "";
|
|
206
|
-
this.silentRefreshShowIFrame = false;
|
|
207
|
-
this.siletRefreshTimeout = 1e3 * 20;
|
|
208
|
-
this.silentRefreshTimeout = 1e3 * 20;
|
|
209
|
-
this.dummyClientSecret = "";
|
|
210
|
-
this.requireHttps = "remoteOnly";
|
|
211
|
-
this.strictDiscoveryDocumentValidation = true;
|
|
212
|
-
this.jwks = null;
|
|
213
|
-
this.customQueryParams = null;
|
|
214
|
-
this.silentRefreshIFrameName = "angular-oauth-oidc-silent-refresh-iframe";
|
|
215
|
-
this.timeoutFactor = 0.75;
|
|
216
|
-
this.sessionChecksEnabled = false;
|
|
217
|
-
this.sessionCheckIntervall = 3 * 1e3;
|
|
218
|
-
this.sessionCheckIFrameUrl = null;
|
|
219
|
-
this.sessionCheckIFrameName = "angular-oauth-oidc-check-session-iframe";
|
|
220
|
-
this.disableAtHashCheck = false;
|
|
221
|
-
this.skipSubjectCheck = false;
|
|
222
|
-
this.useIdTokenHintForSilentRefresh = false;
|
|
223
|
-
this.skipIssuerCheck = false;
|
|
224
|
-
this.nonceStateSeparator = ";";
|
|
225
|
-
this.useHttpBasicAuth = false;
|
|
226
|
-
this.decreaseExpirationBySec = 0;
|
|
227
|
-
this.waitForTokenInMsec = 0;
|
|
228
|
-
this.disablePKCE = false;
|
|
229
|
-
this.preserveRequestedRoute = false;
|
|
230
|
-
this.disableIdTokenTimer = false;
|
|
231
|
-
this.checkOrigin = false;
|
|
232
|
-
this.openUri = (uri) => {
|
|
233
|
-
location.href = uri;
|
|
234
|
-
};
|
|
235
|
-
if (json) {
|
|
236
|
-
Object.assign(this, json);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
class WebHttpUrlEncodingCodec {
|
|
241
|
-
encodeKey(k) {
|
|
242
|
-
return encodeURIComponent(k);
|
|
243
|
-
}
|
|
244
|
-
encodeValue(v) {
|
|
245
|
-
return encodeURIComponent(v);
|
|
246
|
-
}
|
|
247
|
-
decodeKey(k) {
|
|
248
|
-
return decodeURIComponent(k);
|
|
249
|
-
}
|
|
250
|
-
decodeValue(v) {
|
|
251
|
-
return decodeURIComponent(v);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
class ValidationHandler {
|
|
255
|
-
}
|
|
256
|
-
class AbstractValidationHandler {
|
|
257
|
-
/**
|
|
258
|
-
* Validates the at_hash in an id_token against the received access_token.
|
|
259
|
-
*/
|
|
260
|
-
validateAtHash(params) {
|
|
261
|
-
return __async(this, null, function* () {
|
|
262
|
-
const hashAlg = this.inferHashAlgorithm(params.idTokenHeader);
|
|
263
|
-
const tokenHash = yield this.calcHash(params.accessToken, hashAlg);
|
|
264
|
-
const leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);
|
|
265
|
-
const atHash = base64UrlEncode(leftMostHalf);
|
|
266
|
-
const claimsAtHash = params.idTokenClaims["at_hash"].replace(/=/g, "");
|
|
267
|
-
if (atHash !== claimsAtHash) {
|
|
268
|
-
console.error("exptected at_hash: " + atHash);
|
|
269
|
-
console.error("actual at_hash: " + claimsAtHash);
|
|
270
|
-
}
|
|
271
|
-
return atHash === claimsAtHash;
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Infers the name of the hash algorithm to use
|
|
276
|
-
* from the alg field of an id_token.
|
|
277
|
-
*
|
|
278
|
-
* @param jwtHeader the id_token's parsed header
|
|
279
|
-
*/
|
|
280
|
-
inferHashAlgorithm(jwtHeader) {
|
|
281
|
-
const alg = jwtHeader["alg"];
|
|
282
|
-
if (!alg.match(/^.S[0-9]{3}$/)) {
|
|
283
|
-
throw new Error("Algorithm not supported: " + alg);
|
|
284
|
-
}
|
|
285
|
-
return "sha-" + alg.substr(2);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
const _UrlHelperService = class _UrlHelperService {
|
|
289
|
-
getHashFragmentParams(customHashFragment) {
|
|
290
|
-
let hash2 = customHashFragment || window.location.hash;
|
|
291
|
-
hash2 = decodeURIComponent(hash2);
|
|
292
|
-
if (hash2.indexOf("#") !== 0) {
|
|
293
|
-
return {};
|
|
294
|
-
}
|
|
295
|
-
const questionMarkPosition = hash2.indexOf("?");
|
|
296
|
-
if (questionMarkPosition > -1) {
|
|
297
|
-
hash2 = hash2.substr(questionMarkPosition + 1);
|
|
298
|
-
} else {
|
|
299
|
-
hash2 = hash2.substr(1);
|
|
300
|
-
}
|
|
301
|
-
return this.parseQueryString(hash2);
|
|
302
|
-
}
|
|
303
|
-
parseQueryString(queryString) {
|
|
304
|
-
const data = {};
|
|
305
|
-
let pair, separatorIndex, escapedKey, escapedValue, key, value;
|
|
306
|
-
if (queryString === null) {
|
|
307
|
-
return data;
|
|
308
|
-
}
|
|
309
|
-
const pairs = queryString.split("&");
|
|
310
|
-
for (let i = 0; i < pairs.length; i++) {
|
|
311
|
-
pair = pairs[i];
|
|
312
|
-
separatorIndex = pair.indexOf("=");
|
|
313
|
-
if (separatorIndex === -1) {
|
|
314
|
-
escapedKey = pair;
|
|
315
|
-
escapedValue = null;
|
|
316
|
-
} else {
|
|
317
|
-
escapedKey = pair.substr(0, separatorIndex);
|
|
318
|
-
escapedValue = pair.substr(separatorIndex + 1);
|
|
319
|
-
}
|
|
320
|
-
key = decodeURIComponent(escapedKey);
|
|
321
|
-
value = decodeURIComponent(escapedValue);
|
|
322
|
-
if (key.substr(0, 1) === "/") {
|
|
323
|
-
key = key.substr(1);
|
|
324
|
-
}
|
|
325
|
-
data[key] = value;
|
|
326
|
-
}
|
|
327
|
-
return data;
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
_UrlHelperService.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _UrlHelperService, deps: [], target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
331
|
-
_UrlHelperService.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _UrlHelperService });
|
|
332
|
-
let UrlHelperService = _UrlHelperService;
|
|
333
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: UrlHelperService, decorators: [{
|
|
334
|
-
type: import_core.Injectable
|
|
335
|
-
}] });
|
|
336
|
-
const digestLength = 32;
|
|
337
|
-
const blockSize = 64;
|
|
338
|
-
const K = new Uint32Array([
|
|
339
|
-
1116352408,
|
|
340
|
-
1899447441,
|
|
341
|
-
3049323471,
|
|
342
|
-
3921009573,
|
|
343
|
-
961987163,
|
|
344
|
-
1508970993,
|
|
345
|
-
2453635748,
|
|
346
|
-
2870763221,
|
|
347
|
-
3624381080,
|
|
348
|
-
310598401,
|
|
349
|
-
607225278,
|
|
350
|
-
1426881987,
|
|
351
|
-
1925078388,
|
|
352
|
-
2162078206,
|
|
353
|
-
2614888103,
|
|
354
|
-
3248222580,
|
|
355
|
-
3835390401,
|
|
356
|
-
4022224774,
|
|
357
|
-
264347078,
|
|
358
|
-
604807628,
|
|
359
|
-
770255983,
|
|
360
|
-
1249150122,
|
|
361
|
-
1555081692,
|
|
362
|
-
1996064986,
|
|
363
|
-
2554220882,
|
|
364
|
-
2821834349,
|
|
365
|
-
2952996808,
|
|
366
|
-
3210313671,
|
|
367
|
-
3336571891,
|
|
368
|
-
3584528711,
|
|
369
|
-
113926993,
|
|
370
|
-
338241895,
|
|
371
|
-
666307205,
|
|
372
|
-
773529912,
|
|
373
|
-
1294757372,
|
|
374
|
-
1396182291,
|
|
375
|
-
1695183700,
|
|
376
|
-
1986661051,
|
|
377
|
-
2177026350,
|
|
378
|
-
2456956037,
|
|
379
|
-
2730485921,
|
|
380
|
-
2820302411,
|
|
381
|
-
3259730800,
|
|
382
|
-
3345764771,
|
|
383
|
-
3516065817,
|
|
384
|
-
3600352804,
|
|
385
|
-
4094571909,
|
|
386
|
-
275423344,
|
|
387
|
-
430227734,
|
|
388
|
-
506948616,
|
|
389
|
-
659060556,
|
|
390
|
-
883997877,
|
|
391
|
-
958139571,
|
|
392
|
-
1322822218,
|
|
393
|
-
1537002063,
|
|
394
|
-
1747873779,
|
|
395
|
-
1955562222,
|
|
396
|
-
2024104815,
|
|
397
|
-
2227730452,
|
|
398
|
-
2361852424,
|
|
399
|
-
2428436474,
|
|
400
|
-
2756734187,
|
|
401
|
-
3204031479,
|
|
402
|
-
3329325298
|
|
403
|
-
]);
|
|
404
|
-
function hashBlocks(w, v, p, pos, len) {
|
|
405
|
-
let a, b, c, d, e, f, g, h, u, i, j, t1, t2;
|
|
406
|
-
while (len >= 64) {
|
|
407
|
-
a = v[0];
|
|
408
|
-
b = v[1];
|
|
409
|
-
c = v[2];
|
|
410
|
-
d = v[3];
|
|
411
|
-
e = v[4];
|
|
412
|
-
f = v[5];
|
|
413
|
-
g = v[6];
|
|
414
|
-
h = v[7];
|
|
415
|
-
for (i = 0; i < 16; i++) {
|
|
416
|
-
j = pos + i * 4;
|
|
417
|
-
w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255;
|
|
418
|
-
}
|
|
419
|
-
for (i = 16; i < 64; i++) {
|
|
420
|
-
u = w[i - 2];
|
|
421
|
-
t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10;
|
|
422
|
-
u = w[i - 15];
|
|
423
|
-
t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3;
|
|
424
|
-
w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);
|
|
425
|
-
}
|
|
426
|
-
for (i = 0; i < 64; i++) {
|
|
427
|
-
t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0;
|
|
428
|
-
t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0;
|
|
429
|
-
h = g;
|
|
430
|
-
g = f;
|
|
431
|
-
f = e;
|
|
432
|
-
e = d + t1 | 0;
|
|
433
|
-
d = c;
|
|
434
|
-
c = b;
|
|
435
|
-
b = a;
|
|
436
|
-
a = t1 + t2 | 0;
|
|
437
|
-
}
|
|
438
|
-
v[0] += a;
|
|
439
|
-
v[1] += b;
|
|
440
|
-
v[2] += c;
|
|
441
|
-
v[3] += d;
|
|
442
|
-
v[4] += e;
|
|
443
|
-
v[5] += f;
|
|
444
|
-
v[6] += g;
|
|
445
|
-
v[7] += h;
|
|
446
|
-
pos += 64;
|
|
447
|
-
len -= 64;
|
|
448
|
-
}
|
|
449
|
-
return pos;
|
|
450
|
-
}
|
|
451
|
-
class Hash {
|
|
452
|
-
constructor() {
|
|
453
|
-
this.digestLength = digestLength;
|
|
454
|
-
this.blockSize = blockSize;
|
|
455
|
-
this.state = new Int32Array(8);
|
|
456
|
-
this.temp = new Int32Array(64);
|
|
457
|
-
this.buffer = new Uint8Array(128);
|
|
458
|
-
this.bufferLength = 0;
|
|
459
|
-
this.bytesHashed = 0;
|
|
460
|
-
this.finished = false;
|
|
461
|
-
this.reset();
|
|
462
|
-
}
|
|
463
|
-
// Resets hash state making it possible
|
|
464
|
-
// to re-use this instance to hash other data.
|
|
465
|
-
reset() {
|
|
466
|
-
this.state[0] = 1779033703;
|
|
467
|
-
this.state[1] = 3144134277;
|
|
468
|
-
this.state[2] = 1013904242;
|
|
469
|
-
this.state[3] = 2773480762;
|
|
470
|
-
this.state[4] = 1359893119;
|
|
471
|
-
this.state[5] = 2600822924;
|
|
472
|
-
this.state[6] = 528734635;
|
|
473
|
-
this.state[7] = 1541459225;
|
|
474
|
-
this.bufferLength = 0;
|
|
475
|
-
this.bytesHashed = 0;
|
|
476
|
-
this.finished = false;
|
|
477
|
-
return this;
|
|
478
|
-
}
|
|
479
|
-
// Cleans internal buffers and re-initializes hash state.
|
|
480
|
-
clean() {
|
|
481
|
-
for (let i = 0; i < this.buffer.length; i++) {
|
|
482
|
-
this.buffer[i] = 0;
|
|
483
|
-
}
|
|
484
|
-
for (let i = 0; i < this.temp.length; i++) {
|
|
485
|
-
this.temp[i] = 0;
|
|
486
|
-
}
|
|
487
|
-
this.reset();
|
|
488
|
-
}
|
|
489
|
-
// Updates hash state with the given data.
|
|
490
|
-
//
|
|
491
|
-
// Optionally, length of the data can be specified to hash
|
|
492
|
-
// fewer bytes than data.length.
|
|
493
|
-
//
|
|
494
|
-
// Throws error when trying to update already finalized hash:
|
|
495
|
-
// instance must be reset to use it again.
|
|
496
|
-
update(data, dataLength = data.length) {
|
|
497
|
-
if (this.finished) {
|
|
498
|
-
throw new Error("SHA256: can't update because hash was finished.");
|
|
499
|
-
}
|
|
500
|
-
let dataPos = 0;
|
|
501
|
-
this.bytesHashed += dataLength;
|
|
502
|
-
if (this.bufferLength > 0) {
|
|
503
|
-
while (this.bufferLength < 64 && dataLength > 0) {
|
|
504
|
-
this.buffer[this.bufferLength++] = data[dataPos++];
|
|
505
|
-
dataLength--;
|
|
506
|
-
}
|
|
507
|
-
if (this.bufferLength === 64) {
|
|
508
|
-
hashBlocks(this.temp, this.state, this.buffer, 0, 64);
|
|
509
|
-
this.bufferLength = 0;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
if (dataLength >= 64) {
|
|
513
|
-
dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);
|
|
514
|
-
dataLength %= 64;
|
|
515
|
-
}
|
|
516
|
-
while (dataLength > 0) {
|
|
517
|
-
this.buffer[this.bufferLength++] = data[dataPos++];
|
|
518
|
-
dataLength--;
|
|
519
|
-
}
|
|
520
|
-
return this;
|
|
521
|
-
}
|
|
522
|
-
// Finalizes hash state and puts hash into out.
|
|
523
|
-
//
|
|
524
|
-
// If hash was already finalized, puts the same value.
|
|
525
|
-
finish(out) {
|
|
526
|
-
if (!this.finished) {
|
|
527
|
-
const bytesHashed = this.bytesHashed;
|
|
528
|
-
const left = this.bufferLength;
|
|
529
|
-
const bitLenHi = bytesHashed / 536870912 | 0;
|
|
530
|
-
const bitLenLo = bytesHashed << 3;
|
|
531
|
-
const padLength = bytesHashed % 64 < 56 ? 64 : 128;
|
|
532
|
-
this.buffer[left] = 128;
|
|
533
|
-
for (let i = left + 1; i < padLength - 8; i++) {
|
|
534
|
-
this.buffer[i] = 0;
|
|
535
|
-
}
|
|
536
|
-
this.buffer[padLength - 8] = bitLenHi >>> 24 & 255;
|
|
537
|
-
this.buffer[padLength - 7] = bitLenHi >>> 16 & 255;
|
|
538
|
-
this.buffer[padLength - 6] = bitLenHi >>> 8 & 255;
|
|
539
|
-
this.buffer[padLength - 5] = bitLenHi >>> 0 & 255;
|
|
540
|
-
this.buffer[padLength - 4] = bitLenLo >>> 24 & 255;
|
|
541
|
-
this.buffer[padLength - 3] = bitLenLo >>> 16 & 255;
|
|
542
|
-
this.buffer[padLength - 2] = bitLenLo >>> 8 & 255;
|
|
543
|
-
this.buffer[padLength - 1] = bitLenLo >>> 0 & 255;
|
|
544
|
-
hashBlocks(this.temp, this.state, this.buffer, 0, padLength);
|
|
545
|
-
this.finished = true;
|
|
546
|
-
}
|
|
547
|
-
for (let i = 0; i < 8; i++) {
|
|
548
|
-
out[i * 4 + 0] = this.state[i] >>> 24 & 255;
|
|
549
|
-
out[i * 4 + 1] = this.state[i] >>> 16 & 255;
|
|
550
|
-
out[i * 4 + 2] = this.state[i] >>> 8 & 255;
|
|
551
|
-
out[i * 4 + 3] = this.state[i] >>> 0 & 255;
|
|
552
|
-
}
|
|
553
|
-
return this;
|
|
554
|
-
}
|
|
555
|
-
// Returns the final hash digest.
|
|
556
|
-
digest() {
|
|
557
|
-
const out = new Uint8Array(this.digestLength);
|
|
558
|
-
this.finish(out);
|
|
559
|
-
return out;
|
|
560
|
-
}
|
|
561
|
-
// Internal function for use in HMAC for optimization.
|
|
562
|
-
_saveState(out) {
|
|
563
|
-
for (let i = 0; i < this.state.length; i++) {
|
|
564
|
-
out[i] = this.state[i];
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
// Internal function for use in HMAC for optimization.
|
|
568
|
-
_restoreState(from2, bytesHashed) {
|
|
569
|
-
for (let i = 0; i < this.state.length; i++) {
|
|
570
|
-
this.state[i] = from2[i];
|
|
571
|
-
}
|
|
572
|
-
this.bytesHashed = bytesHashed;
|
|
573
|
-
this.finished = false;
|
|
574
|
-
this.bufferLength = 0;
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
class HMAC {
|
|
578
|
-
constructor(key) {
|
|
579
|
-
this.inner = new Hash();
|
|
580
|
-
this.outer = new Hash();
|
|
581
|
-
this.blockSize = this.inner.blockSize;
|
|
582
|
-
this.digestLength = this.inner.digestLength;
|
|
583
|
-
const pad = new Uint8Array(this.blockSize);
|
|
584
|
-
if (key.length > this.blockSize) {
|
|
585
|
-
new Hash().update(key).finish(pad).clean();
|
|
586
|
-
} else {
|
|
587
|
-
for (let i = 0; i < key.length; i++) {
|
|
588
|
-
pad[i] = key[i];
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
for (let i = 0; i < pad.length; i++) {
|
|
592
|
-
pad[i] ^= 54;
|
|
593
|
-
}
|
|
594
|
-
this.inner.update(pad);
|
|
595
|
-
for (let i = 0; i < pad.length; i++) {
|
|
596
|
-
pad[i] ^= 54 ^ 92;
|
|
597
|
-
}
|
|
598
|
-
this.outer.update(pad);
|
|
599
|
-
this.istate = new Uint32Array(8);
|
|
600
|
-
this.ostate = new Uint32Array(8);
|
|
601
|
-
this.inner._saveState(this.istate);
|
|
602
|
-
this.outer._saveState(this.ostate);
|
|
603
|
-
for (let i = 0; i < pad.length; i++) {
|
|
604
|
-
pad[i] = 0;
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
// Returns HMAC state to the state initialized with key
|
|
608
|
-
// to make it possible to run HMAC over the other data with the same
|
|
609
|
-
// key without creating a new instance.
|
|
610
|
-
reset() {
|
|
611
|
-
this.inner._restoreState(this.istate, this.inner.blockSize);
|
|
612
|
-
this.outer._restoreState(this.ostate, this.outer.blockSize);
|
|
613
|
-
return this;
|
|
614
|
-
}
|
|
615
|
-
// Cleans HMAC state.
|
|
616
|
-
clean() {
|
|
617
|
-
for (let i = 0; i < this.istate.length; i++) {
|
|
618
|
-
this.ostate[i] = this.istate[i] = 0;
|
|
619
|
-
}
|
|
620
|
-
this.inner.clean();
|
|
621
|
-
this.outer.clean();
|
|
622
|
-
}
|
|
623
|
-
// Updates state with provided data.
|
|
624
|
-
update(data) {
|
|
625
|
-
this.inner.update(data);
|
|
626
|
-
return this;
|
|
627
|
-
}
|
|
628
|
-
// Finalizes HMAC and puts the result in out.
|
|
629
|
-
finish(out) {
|
|
630
|
-
if (this.outer.finished) {
|
|
631
|
-
this.outer.finish(out);
|
|
632
|
-
} else {
|
|
633
|
-
this.inner.finish(out);
|
|
634
|
-
this.outer.update(out, this.digestLength).finish(out);
|
|
635
|
-
}
|
|
636
|
-
return this;
|
|
637
|
-
}
|
|
638
|
-
// Returns message authentication code.
|
|
639
|
-
digest() {
|
|
640
|
-
const out = new Uint8Array(this.digestLength);
|
|
641
|
-
this.finish(out);
|
|
642
|
-
return out;
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
function hash(data) {
|
|
646
|
-
const h = new Hash().update(data);
|
|
647
|
-
const digest = h.digest();
|
|
648
|
-
h.clean();
|
|
649
|
-
return digest;
|
|
650
|
-
}
|
|
651
|
-
function hmac(key, data) {
|
|
652
|
-
const h = new HMAC(key).update(data);
|
|
653
|
-
const digest = h.digest();
|
|
654
|
-
h.clean();
|
|
655
|
-
return digest;
|
|
656
|
-
}
|
|
657
|
-
function fillBuffer(buffer, hmac2, info, counter) {
|
|
658
|
-
const num = counter[0];
|
|
659
|
-
if (num === 0) {
|
|
660
|
-
throw new Error("hkdf: cannot expand more");
|
|
661
|
-
}
|
|
662
|
-
hmac2.reset();
|
|
663
|
-
if (num > 1) {
|
|
664
|
-
hmac2.update(buffer);
|
|
665
|
-
}
|
|
666
|
-
if (info) {
|
|
667
|
-
hmac2.update(info);
|
|
668
|
-
}
|
|
669
|
-
hmac2.update(counter);
|
|
670
|
-
hmac2.finish(buffer);
|
|
671
|
-
counter[0]++;
|
|
672
|
-
}
|
|
673
|
-
const hkdfSalt = new Uint8Array(digestLength);
|
|
674
|
-
function hkdf(key, salt = hkdfSalt, info, length = 32) {
|
|
675
|
-
const counter = new Uint8Array([1]);
|
|
676
|
-
const okm = hmac(salt, key);
|
|
677
|
-
const hmac_ = new HMAC(okm);
|
|
678
|
-
const buffer = new Uint8Array(hmac_.digestLength);
|
|
679
|
-
let bufpos = buffer.length;
|
|
680
|
-
const out = new Uint8Array(length);
|
|
681
|
-
for (let i = 0; i < length; i++) {
|
|
682
|
-
if (bufpos === buffer.length) {
|
|
683
|
-
fillBuffer(buffer, hmac_, info, counter);
|
|
684
|
-
bufpos = 0;
|
|
685
|
-
}
|
|
686
|
-
out[i] = buffer[bufpos++];
|
|
687
|
-
}
|
|
688
|
-
hmac_.clean();
|
|
689
|
-
buffer.fill(0);
|
|
690
|
-
counter.fill(0);
|
|
691
|
-
return out;
|
|
692
|
-
}
|
|
693
|
-
function pbkdf2(password, salt, iterations, dkLen) {
|
|
694
|
-
const prf = new HMAC(password);
|
|
695
|
-
const len = prf.digestLength;
|
|
696
|
-
const ctr = new Uint8Array(4);
|
|
697
|
-
const t = new Uint8Array(len);
|
|
698
|
-
const u = new Uint8Array(len);
|
|
699
|
-
const dk = new Uint8Array(dkLen);
|
|
700
|
-
for (let i = 0; i * len < dkLen; i++) {
|
|
701
|
-
const c = i + 1;
|
|
702
|
-
ctr[0] = c >>> 24 & 255;
|
|
703
|
-
ctr[1] = c >>> 16 & 255;
|
|
704
|
-
ctr[2] = c >>> 8 & 255;
|
|
705
|
-
ctr[3] = c >>> 0 & 255;
|
|
706
|
-
prf.reset();
|
|
707
|
-
prf.update(salt);
|
|
708
|
-
prf.update(ctr);
|
|
709
|
-
prf.finish(u);
|
|
710
|
-
for (let j = 0; j < len; j++) {
|
|
711
|
-
t[j] = u[j];
|
|
712
|
-
}
|
|
713
|
-
for (let j = 2; j <= iterations; j++) {
|
|
714
|
-
prf.reset();
|
|
715
|
-
prf.update(u).finish(u);
|
|
716
|
-
for (let k = 0; k < len; k++) {
|
|
717
|
-
t[k] ^= u[k];
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
for (let j = 0; j < len && i * len + j < dkLen; j++) {
|
|
721
|
-
dk[i * len + j] = t[j];
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
for (let i = 0; i < len; i++) {
|
|
725
|
-
t[i] = u[i] = 0;
|
|
726
|
-
}
|
|
727
|
-
for (let i = 0; i < 4; i++) {
|
|
728
|
-
ctr[i] = 0;
|
|
729
|
-
}
|
|
730
|
-
prf.clean();
|
|
731
|
-
return dk;
|
|
732
|
-
}
|
|
733
|
-
class HashHandler {
|
|
734
|
-
}
|
|
735
|
-
function decodeUTF8(s) {
|
|
736
|
-
if (typeof s !== "string")
|
|
737
|
-
throw new TypeError("expected string");
|
|
738
|
-
const d = s, b = new Uint8Array(d.length);
|
|
739
|
-
for (let i = 0; i < d.length; i++)
|
|
740
|
-
b[i] = d.charCodeAt(i);
|
|
741
|
-
return b;
|
|
742
|
-
}
|
|
743
|
-
function encodeUTF8(arr) {
|
|
744
|
-
const s = [];
|
|
745
|
-
for (let i = 0; i < arr.length; i++)
|
|
746
|
-
s.push(String.fromCharCode(arr[i]));
|
|
747
|
-
return s.join("");
|
|
748
|
-
}
|
|
749
|
-
const _DefaultHashHandler = class _DefaultHashHandler {
|
|
750
|
-
calcHash(valueToHash, algorithm) {
|
|
751
|
-
return __async(this, null, function* () {
|
|
752
|
-
const candHash = encodeUTF8(hash(decodeUTF8(valueToHash)));
|
|
753
|
-
return candHash;
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
toHashString2(byteArray) {
|
|
757
|
-
let result = "";
|
|
758
|
-
for (const e of byteArray) {
|
|
759
|
-
result += String.fromCharCode(e);
|
|
760
|
-
}
|
|
761
|
-
return result;
|
|
762
|
-
}
|
|
763
|
-
toHashString(buffer) {
|
|
764
|
-
const byteArray = new Uint8Array(buffer);
|
|
765
|
-
let result = "";
|
|
766
|
-
for (const e of byteArray) {
|
|
767
|
-
result += String.fromCharCode(e);
|
|
768
|
-
}
|
|
769
|
-
return result;
|
|
770
|
-
}
|
|
771
|
-
};
|
|
772
|
-
_DefaultHashHandler.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _DefaultHashHandler, deps: [], target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
773
|
-
_DefaultHashHandler.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _DefaultHashHandler });
|
|
774
|
-
let DefaultHashHandler = _DefaultHashHandler;
|
|
775
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: DefaultHashHandler, decorators: [{
|
|
776
|
-
type: import_core.Injectable
|
|
777
|
-
}] });
|
|
778
|
-
const _OAuthService = class _OAuthService extends AuthConfig {
|
|
779
|
-
constructor(ngZone, http, storage, tokenValidationHandler, config, urlHelper, logger, crypto, document, dateTimeService) {
|
|
780
|
-
var _a;
|
|
781
|
-
super();
|
|
782
|
-
this.ngZone = ngZone;
|
|
783
|
-
this.http = http;
|
|
784
|
-
this.config = config;
|
|
785
|
-
this.urlHelper = urlHelper;
|
|
786
|
-
this.logger = logger;
|
|
787
|
-
this.crypto = crypto;
|
|
788
|
-
this.dateTimeService = dateTimeService;
|
|
789
|
-
this.discoveryDocumentLoaded = false;
|
|
790
|
-
this.state = "";
|
|
791
|
-
this.eventsSubject = new import_rxjs.Subject();
|
|
792
|
-
this.discoveryDocumentLoadedSubject = new import_rxjs.Subject();
|
|
793
|
-
this.grantTypesSupported = [];
|
|
794
|
-
this.inImplicitFlow = false;
|
|
795
|
-
this.saveNoncesInLocalStorage = false;
|
|
796
|
-
this.debug("angular-oauth2-oidc v10");
|
|
797
|
-
this.document = document;
|
|
798
|
-
if (!config) {
|
|
799
|
-
config = {};
|
|
800
|
-
}
|
|
801
|
-
this.discoveryDocumentLoaded$ = this.discoveryDocumentLoadedSubject.asObservable();
|
|
802
|
-
this.events = this.eventsSubject.asObservable();
|
|
803
|
-
if (tokenValidationHandler) {
|
|
804
|
-
this.tokenValidationHandler = tokenValidationHandler;
|
|
805
|
-
}
|
|
806
|
-
if (config) {
|
|
807
|
-
this.configure(config);
|
|
808
|
-
}
|
|
809
|
-
try {
|
|
810
|
-
if (storage) {
|
|
811
|
-
this.setStorage(storage);
|
|
812
|
-
} else if (typeof sessionStorage !== "undefined") {
|
|
813
|
-
this.setStorage(sessionStorage);
|
|
814
|
-
}
|
|
815
|
-
} catch (e) {
|
|
816
|
-
console.error("No OAuthStorage provided and cannot access default (sessionStorage).Consider providing a custom OAuthStorage implementation in your module.", e);
|
|
817
|
-
}
|
|
818
|
-
if (this.checkLocalStorageAccessable()) {
|
|
819
|
-
const ua = (_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent;
|
|
820
|
-
const msie = (ua == null ? void 0 : ua.includes("MSIE ")) || (ua == null ? void 0 : ua.includes("Trident"));
|
|
821
|
-
if (msie) {
|
|
822
|
-
this.saveNoncesInLocalStorage = true;
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
this.setupRefreshTimer();
|
|
826
|
-
}
|
|
827
|
-
checkLocalStorageAccessable() {
|
|
828
|
-
if (typeof window === "undefined")
|
|
829
|
-
return false;
|
|
830
|
-
const test = "test";
|
|
831
|
-
try {
|
|
832
|
-
if (typeof window["localStorage"] === "undefined")
|
|
833
|
-
return false;
|
|
834
|
-
localStorage.setItem(test, test);
|
|
835
|
-
localStorage.removeItem(test);
|
|
836
|
-
return true;
|
|
837
|
-
} catch (e) {
|
|
838
|
-
return false;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
/**
|
|
842
|
-
* Use this method to configure the service
|
|
843
|
-
* @param config the configuration
|
|
844
|
-
*/
|
|
845
|
-
configure(config) {
|
|
846
|
-
Object.assign(this, new AuthConfig(), config);
|
|
847
|
-
this.config = Object.assign({}, new AuthConfig(), config);
|
|
848
|
-
if (this.sessionChecksEnabled) {
|
|
849
|
-
this.setupSessionCheck();
|
|
850
|
-
}
|
|
851
|
-
this.configChanged();
|
|
852
|
-
}
|
|
853
|
-
configChanged() {
|
|
854
|
-
this.setupRefreshTimer();
|
|
855
|
-
}
|
|
856
|
-
restartSessionChecksIfStillLoggedIn() {
|
|
857
|
-
if (this.hasValidIdToken()) {
|
|
858
|
-
this.initSessionCheck();
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
restartRefreshTimerIfStillLoggedIn() {
|
|
862
|
-
this.setupExpirationTimers();
|
|
863
|
-
}
|
|
864
|
-
setupSessionCheck() {
|
|
865
|
-
this.events.pipe((0, import_operators.filter)((e) => e.type === "token_received")).subscribe(() => {
|
|
866
|
-
this.initSessionCheck();
|
|
867
|
-
});
|
|
868
|
-
}
|
|
869
|
-
/**
|
|
870
|
-
* Will setup up silent refreshing for when the token is
|
|
871
|
-
* about to expire. When the user is logged out via this.logOut method, the
|
|
872
|
-
* silent refreshing will pause and not refresh the tokens until the user is
|
|
873
|
-
* logged back in via receiving a new token.
|
|
874
|
-
* @param params Additional parameter to pass
|
|
875
|
-
* @param listenTo Setup automatic refresh of a specific token type
|
|
876
|
-
*/
|
|
877
|
-
setupAutomaticSilentRefresh(params = {}, listenTo, noPrompt = true) {
|
|
878
|
-
let shouldRunSilentRefresh = true;
|
|
879
|
-
this.clearAutomaticRefreshTimer();
|
|
880
|
-
this.automaticRefreshSubscription = this.events.pipe((0, import_operators.tap)((e) => {
|
|
881
|
-
if (e.type === "token_received") {
|
|
882
|
-
shouldRunSilentRefresh = true;
|
|
883
|
-
} else if (e.type === "logout") {
|
|
884
|
-
shouldRunSilentRefresh = false;
|
|
885
|
-
}
|
|
886
|
-
}), (0, import_operators.filter)((e) => e.type === "token_expires" && (listenTo == null || listenTo === "any" || e.info === listenTo)), (0, import_operators.debounceTime)(1e3)).subscribe(() => {
|
|
887
|
-
if (shouldRunSilentRefresh) {
|
|
888
|
-
this.refreshInternal(params, noPrompt).catch(() => {
|
|
889
|
-
this.debug("Automatic silent refresh did not work");
|
|
890
|
-
});
|
|
891
|
-
}
|
|
892
|
-
});
|
|
893
|
-
this.restartRefreshTimerIfStillLoggedIn();
|
|
894
|
-
}
|
|
895
|
-
refreshInternal(params, noPrompt) {
|
|
896
|
-
if (!this.useSilentRefresh && this.responseType === "code") {
|
|
897
|
-
return this.refreshToken();
|
|
898
|
-
} else {
|
|
899
|
-
return this.silentRefresh(params, noPrompt);
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Convenience method that first calls `loadDiscoveryDocument(...)` and
|
|
904
|
-
* directly chains using the `then(...)` part of the promise to call
|
|
905
|
-
* the `tryLogin(...)` method.
|
|
906
|
-
*
|
|
907
|
-
* @param options LoginOptions to pass through to `tryLogin(...)`
|
|
908
|
-
*/
|
|
909
|
-
loadDiscoveryDocumentAndTryLogin(options = null) {
|
|
910
|
-
return this.loadDiscoveryDocument().then(() => {
|
|
911
|
-
return this.tryLogin(options);
|
|
912
|
-
});
|
|
913
|
-
}
|
|
914
|
-
/**
|
|
915
|
-
* Convenience method that first calls `loadDiscoveryDocumentAndTryLogin(...)`
|
|
916
|
-
* and if then chains to `initLoginFlow()`, but only if there is no valid
|
|
917
|
-
* IdToken or no valid AccessToken.
|
|
918
|
-
*
|
|
919
|
-
* @param options LoginOptions to pass through to `tryLogin(...)`
|
|
920
|
-
*/
|
|
921
|
-
loadDiscoveryDocumentAndLogin(options = null) {
|
|
922
|
-
options = options || {};
|
|
923
|
-
return this.loadDiscoveryDocumentAndTryLogin(options).then(() => {
|
|
924
|
-
if (!this.hasValidIdToken() || !this.hasValidAccessToken()) {
|
|
925
|
-
const state = typeof options.state === "string" ? options.state : "";
|
|
926
|
-
this.initLoginFlow(state);
|
|
927
|
-
return false;
|
|
928
|
-
} else {
|
|
929
|
-
return true;
|
|
930
|
-
}
|
|
931
|
-
});
|
|
932
|
-
}
|
|
933
|
-
debug(...args) {
|
|
934
|
-
if (this.showDebugInformation) {
|
|
935
|
-
this.logger.debug(...args);
|
|
936
|
-
}
|
|
937
|
-
}
|
|
938
|
-
validateUrlFromDiscoveryDocument(url) {
|
|
939
|
-
const errors = [];
|
|
940
|
-
const httpsCheck = this.validateUrlForHttps(url);
|
|
941
|
-
const issuerCheck = this.validateUrlAgainstIssuer(url);
|
|
942
|
-
if (!httpsCheck) {
|
|
943
|
-
errors.push("https for all urls required. Also for urls received by discovery.");
|
|
944
|
-
}
|
|
945
|
-
if (!issuerCheck) {
|
|
946
|
-
errors.push("Every url in discovery document has to start with the issuer url.Also see property strictDiscoveryDocumentValidation.");
|
|
947
|
-
}
|
|
948
|
-
return errors;
|
|
949
|
-
}
|
|
950
|
-
validateUrlForHttps(url) {
|
|
951
|
-
if (!url) {
|
|
952
|
-
return true;
|
|
953
|
-
}
|
|
954
|
-
const lcUrl = url.toLowerCase();
|
|
955
|
-
if (this.requireHttps === false) {
|
|
956
|
-
return true;
|
|
957
|
-
}
|
|
958
|
-
if ((lcUrl.match(/^http:\/\/localhost($|[:/])/) || lcUrl.match(/^http:\/\/localhost($|[:/])/)) && this.requireHttps === "remoteOnly") {
|
|
959
|
-
return true;
|
|
960
|
-
}
|
|
961
|
-
return lcUrl.startsWith("https://");
|
|
962
|
-
}
|
|
963
|
-
assertUrlNotNullAndCorrectProtocol(url, description) {
|
|
964
|
-
if (!url) {
|
|
965
|
-
throw new Error(`'${description}' should not be null`);
|
|
966
|
-
}
|
|
967
|
-
if (!this.validateUrlForHttps(url)) {
|
|
968
|
-
throw new Error(`'${description}' must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).`);
|
|
969
|
-
}
|
|
970
|
-
}
|
|
971
|
-
validateUrlAgainstIssuer(url) {
|
|
972
|
-
if (!this.strictDiscoveryDocumentValidation) {
|
|
973
|
-
return true;
|
|
974
|
-
}
|
|
975
|
-
if (!url) {
|
|
976
|
-
return true;
|
|
977
|
-
}
|
|
978
|
-
return url.toLowerCase().startsWith(this.issuer.toLowerCase());
|
|
979
|
-
}
|
|
980
|
-
setupRefreshTimer() {
|
|
981
|
-
if (typeof window === "undefined") {
|
|
982
|
-
this.debug("timer not supported on this plattform");
|
|
983
|
-
return;
|
|
984
|
-
}
|
|
985
|
-
if (this.hasValidIdToken() || this.hasValidAccessToken()) {
|
|
986
|
-
this.clearAccessTokenTimer();
|
|
987
|
-
this.clearIdTokenTimer();
|
|
988
|
-
this.setupExpirationTimers();
|
|
989
|
-
}
|
|
990
|
-
if (this.tokenReceivedSubscription)
|
|
991
|
-
this.tokenReceivedSubscription.unsubscribe();
|
|
992
|
-
this.tokenReceivedSubscription = this.events.pipe((0, import_operators.filter)((e) => e.type === "token_received")).subscribe(() => {
|
|
993
|
-
this.clearAccessTokenTimer();
|
|
994
|
-
this.clearIdTokenTimer();
|
|
995
|
-
this.setupExpirationTimers();
|
|
996
|
-
});
|
|
997
|
-
}
|
|
998
|
-
setupExpirationTimers() {
|
|
999
|
-
if (this.hasValidAccessToken()) {
|
|
1000
|
-
this.setupAccessTokenTimer();
|
|
1001
|
-
}
|
|
1002
|
-
if (!this.disableIdTokenTimer && this.hasValidIdToken()) {
|
|
1003
|
-
this.setupIdTokenTimer();
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
setupAccessTokenTimer() {
|
|
1007
|
-
const expiration = this.getAccessTokenExpiration();
|
|
1008
|
-
const storedAt = this.getAccessTokenStoredAt();
|
|
1009
|
-
const timeout2 = this.calcTimeout(storedAt, expiration);
|
|
1010
|
-
this.ngZone.runOutsideAngular(() => {
|
|
1011
|
-
this.accessTokenTimeoutSubscription = (0, import_rxjs.of)(new OAuthInfoEvent("token_expires", "access_token")).pipe((0, import_operators.delay)(timeout2)).subscribe((e) => {
|
|
1012
|
-
this.ngZone.run(() => {
|
|
1013
|
-
this.eventsSubject.next(e);
|
|
1014
|
-
});
|
|
1015
|
-
});
|
|
1016
|
-
});
|
|
1017
|
-
}
|
|
1018
|
-
setupIdTokenTimer() {
|
|
1019
|
-
const expiration = this.getIdTokenExpiration();
|
|
1020
|
-
const storedAt = this.getIdTokenStoredAt();
|
|
1021
|
-
const timeout2 = this.calcTimeout(storedAt, expiration);
|
|
1022
|
-
this.ngZone.runOutsideAngular(() => {
|
|
1023
|
-
this.idTokenTimeoutSubscription = (0, import_rxjs.of)(new OAuthInfoEvent("token_expires", "id_token")).pipe((0, import_operators.delay)(timeout2)).subscribe((e) => {
|
|
1024
|
-
this.ngZone.run(() => {
|
|
1025
|
-
this.eventsSubject.next(e);
|
|
1026
|
-
});
|
|
1027
|
-
});
|
|
1028
|
-
});
|
|
1029
|
-
}
|
|
1030
|
-
/**
|
|
1031
|
-
* Stops timers for automatic refresh.
|
|
1032
|
-
* To restart it, call setupAutomaticSilentRefresh again.
|
|
1033
|
-
*/
|
|
1034
|
-
stopAutomaticRefresh() {
|
|
1035
|
-
this.clearAccessTokenTimer();
|
|
1036
|
-
this.clearIdTokenTimer();
|
|
1037
|
-
this.clearAutomaticRefreshTimer();
|
|
1038
|
-
}
|
|
1039
|
-
clearAccessTokenTimer() {
|
|
1040
|
-
if (this.accessTokenTimeoutSubscription) {
|
|
1041
|
-
this.accessTokenTimeoutSubscription.unsubscribe();
|
|
1042
|
-
}
|
|
1043
|
-
}
|
|
1044
|
-
clearIdTokenTimer() {
|
|
1045
|
-
if (this.idTokenTimeoutSubscription) {
|
|
1046
|
-
this.idTokenTimeoutSubscription.unsubscribe();
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
clearAutomaticRefreshTimer() {
|
|
1050
|
-
if (this.automaticRefreshSubscription) {
|
|
1051
|
-
this.automaticRefreshSubscription.unsubscribe();
|
|
1052
|
-
}
|
|
1053
|
-
}
|
|
1054
|
-
calcTimeout(storedAt, expiration) {
|
|
1055
|
-
const now = this.dateTimeService.now();
|
|
1056
|
-
const delta = (expiration - storedAt) * this.timeoutFactor - (now - storedAt);
|
|
1057
|
-
const duration = Math.max(0, delta);
|
|
1058
|
-
const maxTimeoutValue = 2147483647;
|
|
1059
|
-
return duration > maxTimeoutValue ? maxTimeoutValue : duration;
|
|
1060
|
-
}
|
|
1061
|
-
/**
|
|
1062
|
-
* DEPRECATED. Use a provider for OAuthStorage instead:
|
|
1063
|
-
*
|
|
1064
|
-
* { provide: OAuthStorage, useFactory: oAuthStorageFactory }
|
|
1065
|
-
* export function oAuthStorageFactory(): OAuthStorage { return localStorage; }
|
|
1066
|
-
* Sets a custom storage used to store the received
|
|
1067
|
-
* tokens on client side. By default, the browser's
|
|
1068
|
-
* sessionStorage is used.
|
|
1069
|
-
* @ignore
|
|
1070
|
-
*
|
|
1071
|
-
* @param storage
|
|
1072
|
-
*/
|
|
1073
|
-
setStorage(storage) {
|
|
1074
|
-
this._storage = storage;
|
|
1075
|
-
this.configChanged();
|
|
1076
|
-
}
|
|
1077
|
-
/**
|
|
1078
|
-
* Loads the discovery document to configure most
|
|
1079
|
-
* properties of this service. The url of the discovery
|
|
1080
|
-
* document is infered from the issuer's url according
|
|
1081
|
-
* to the OpenId Connect spec. To use another url you
|
|
1082
|
-
* can pass it to to optional parameter fullUrl.
|
|
1083
|
-
*
|
|
1084
|
-
* @param fullUrl
|
|
1085
|
-
*/
|
|
1086
|
-
loadDiscoveryDocument(fullUrl = null) {
|
|
1087
|
-
return new Promise((resolve, reject) => {
|
|
1088
|
-
if (!fullUrl) {
|
|
1089
|
-
fullUrl = this.issuer || "";
|
|
1090
|
-
if (!fullUrl.endsWith("/")) {
|
|
1091
|
-
fullUrl += "/";
|
|
1092
|
-
}
|
|
1093
|
-
fullUrl += ".well-known/openid-configuration";
|
|
1094
|
-
}
|
|
1095
|
-
if (!this.validateUrlForHttps(fullUrl)) {
|
|
1096
|
-
reject("issuer must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
1097
|
-
return;
|
|
1098
|
-
}
|
|
1099
|
-
this.http.get(fullUrl).subscribe((doc) => {
|
|
1100
|
-
if (!this.validateDiscoveryDocument(doc)) {
|
|
1101
|
-
this.eventsSubject.next(new OAuthErrorEvent("discovery_document_validation_error", null));
|
|
1102
|
-
reject("discovery_document_validation_error");
|
|
1103
|
-
return;
|
|
1104
|
-
}
|
|
1105
|
-
this.loginUrl = doc.authorization_endpoint;
|
|
1106
|
-
this.logoutUrl = doc.end_session_endpoint || this.logoutUrl;
|
|
1107
|
-
this.grantTypesSupported = doc.grant_types_supported;
|
|
1108
|
-
this.issuer = doc.issuer;
|
|
1109
|
-
this.tokenEndpoint = doc.token_endpoint;
|
|
1110
|
-
this.userinfoEndpoint = doc.userinfo_endpoint || this.userinfoEndpoint;
|
|
1111
|
-
this.jwksUri = doc.jwks_uri;
|
|
1112
|
-
this.sessionCheckIFrameUrl = doc.check_session_iframe || this.sessionCheckIFrameUrl;
|
|
1113
|
-
this.discoveryDocumentLoaded = true;
|
|
1114
|
-
this.discoveryDocumentLoadedSubject.next(doc);
|
|
1115
|
-
this.revocationEndpoint = doc.revocation_endpoint || this.revocationEndpoint;
|
|
1116
|
-
if (this.sessionChecksEnabled) {
|
|
1117
|
-
this.restartSessionChecksIfStillLoggedIn();
|
|
1118
|
-
}
|
|
1119
|
-
this.loadJwks().then((jwks) => {
|
|
1120
|
-
const result = {
|
|
1121
|
-
discoveryDocument: doc,
|
|
1122
|
-
jwks
|
|
1123
|
-
};
|
|
1124
|
-
const event = new OAuthSuccessEvent("discovery_document_loaded", result);
|
|
1125
|
-
this.eventsSubject.next(event);
|
|
1126
|
-
resolve(event);
|
|
1127
|
-
return;
|
|
1128
|
-
}).catch((err2) => {
|
|
1129
|
-
this.eventsSubject.next(new OAuthErrorEvent("discovery_document_load_error", err2));
|
|
1130
|
-
reject(err2);
|
|
1131
|
-
return;
|
|
1132
|
-
});
|
|
1133
|
-
}, (err2) => {
|
|
1134
|
-
this.logger.error("error loading discovery document", err2);
|
|
1135
|
-
this.eventsSubject.next(new OAuthErrorEvent("discovery_document_load_error", err2));
|
|
1136
|
-
reject(err2);
|
|
1137
|
-
});
|
|
1138
|
-
});
|
|
1139
|
-
}
|
|
1140
|
-
loadJwks() {
|
|
1141
|
-
return new Promise((resolve, reject) => {
|
|
1142
|
-
if (this.jwksUri) {
|
|
1143
|
-
this.http.get(this.jwksUri).subscribe((jwks) => {
|
|
1144
|
-
this.jwks = jwks;
|
|
1145
|
-
resolve(jwks);
|
|
1146
|
-
}, (err2) => {
|
|
1147
|
-
this.logger.error("error loading jwks", err2);
|
|
1148
|
-
this.eventsSubject.next(new OAuthErrorEvent("jwks_load_error", err2));
|
|
1149
|
-
reject(err2);
|
|
1150
|
-
});
|
|
1151
|
-
} else {
|
|
1152
|
-
resolve(null);
|
|
1153
|
-
}
|
|
1154
|
-
});
|
|
1155
|
-
}
|
|
1156
|
-
validateDiscoveryDocument(doc) {
|
|
1157
|
-
let errors;
|
|
1158
|
-
if (!this.skipIssuerCheck && doc.issuer !== this.issuer) {
|
|
1159
|
-
this.logger.error("invalid issuer in discovery document", "expected: " + this.issuer, "current: " + doc.issuer);
|
|
1160
|
-
return false;
|
|
1161
|
-
}
|
|
1162
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.authorization_endpoint);
|
|
1163
|
-
if (errors.length > 0) {
|
|
1164
|
-
this.logger.error("error validating authorization_endpoint in discovery document", errors);
|
|
1165
|
-
return false;
|
|
1166
|
-
}
|
|
1167
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.end_session_endpoint);
|
|
1168
|
-
if (errors.length > 0) {
|
|
1169
|
-
this.logger.error("error validating end_session_endpoint in discovery document", errors);
|
|
1170
|
-
return false;
|
|
1171
|
-
}
|
|
1172
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.token_endpoint);
|
|
1173
|
-
if (errors.length > 0) {
|
|
1174
|
-
this.logger.error("error validating token_endpoint in discovery document", errors);
|
|
1175
|
-
}
|
|
1176
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.revocation_endpoint);
|
|
1177
|
-
if (errors.length > 0) {
|
|
1178
|
-
this.logger.error("error validating revocation_endpoint in discovery document", errors);
|
|
1179
|
-
}
|
|
1180
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.userinfo_endpoint);
|
|
1181
|
-
if (errors.length > 0) {
|
|
1182
|
-
this.logger.error("error validating userinfo_endpoint in discovery document", errors);
|
|
1183
|
-
return false;
|
|
1184
|
-
}
|
|
1185
|
-
errors = this.validateUrlFromDiscoveryDocument(doc.jwks_uri);
|
|
1186
|
-
if (errors.length > 0) {
|
|
1187
|
-
this.logger.error("error validating jwks_uri in discovery document", errors);
|
|
1188
|
-
return false;
|
|
1189
|
-
}
|
|
1190
|
-
if (this.sessionChecksEnabled && !doc.check_session_iframe) {
|
|
1191
|
-
this.logger.warn("sessionChecksEnabled is activated but discovery document does not contain a check_session_iframe field");
|
|
1192
|
-
}
|
|
1193
|
-
return true;
|
|
1194
|
-
}
|
|
1195
|
-
/**
|
|
1196
|
-
* Uses password flow to exchange userName and password for an
|
|
1197
|
-
* access_token. After receiving the access_token, this method
|
|
1198
|
-
* uses it to query the userinfo endpoint in order to get information
|
|
1199
|
-
* about the user in question.
|
|
1200
|
-
*
|
|
1201
|
-
* When using this, make sure that the property oidc is set to false.
|
|
1202
|
-
* Otherwise stricter validations take place that make this operation
|
|
1203
|
-
* fail.
|
|
1204
|
-
*
|
|
1205
|
-
* @param userName
|
|
1206
|
-
* @param password
|
|
1207
|
-
* @param headers Optional additional http-headers.
|
|
1208
|
-
*/
|
|
1209
|
-
fetchTokenUsingPasswordFlowAndLoadUserProfile(userName, password, headers = new import_http.HttpHeaders()) {
|
|
1210
|
-
return this.fetchTokenUsingPasswordFlow(userName, password, headers).then(() => this.loadUserProfile());
|
|
1211
|
-
}
|
|
1212
|
-
/**
|
|
1213
|
-
* Loads the user profile by accessing the user info endpoint defined by OpenId Connect.
|
|
1214
|
-
*
|
|
1215
|
-
* When using this with OAuth2 password flow, make sure that the property oidc is set to false.
|
|
1216
|
-
* Otherwise stricter validations take place that make this operation fail.
|
|
1217
|
-
*/
|
|
1218
|
-
loadUserProfile() {
|
|
1219
|
-
if (!this.hasValidAccessToken()) {
|
|
1220
|
-
throw new Error("Can not load User Profile without access_token");
|
|
1221
|
-
}
|
|
1222
|
-
if (!this.validateUrlForHttps(this.userinfoEndpoint)) {
|
|
1223
|
-
throw new Error("userinfoEndpoint must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
1224
|
-
}
|
|
1225
|
-
return new Promise((resolve, reject) => {
|
|
1226
|
-
const headers = new import_http.HttpHeaders().set("Authorization", "Bearer " + this.getAccessToken());
|
|
1227
|
-
this.http.get(this.userinfoEndpoint, {
|
|
1228
|
-
headers,
|
|
1229
|
-
observe: "response",
|
|
1230
|
-
responseType: "text"
|
|
1231
|
-
}).subscribe((response) => {
|
|
1232
|
-
this.debug("userinfo received", JSON.stringify(response));
|
|
1233
|
-
if (response.headers.get("content-type").startsWith("application/json")) {
|
|
1234
|
-
let info = JSON.parse(response.body);
|
|
1235
|
-
const existingClaims = this.getIdentityClaims() || {};
|
|
1236
|
-
if (!this.skipSubjectCheck) {
|
|
1237
|
-
if (this.oidc && (!existingClaims["sub"] || info.sub !== existingClaims["sub"])) {
|
|
1238
|
-
const err2 = "if property oidc is true, the received user-id (sub) has to be the user-id of the user that has logged in with oidc.\nif you are not using oidc but just oauth2 password flow set oidc to false";
|
|
1239
|
-
reject(err2);
|
|
1240
|
-
return;
|
|
1241
|
-
}
|
|
1242
|
-
}
|
|
1243
|
-
info = Object.assign({}, existingClaims, info);
|
|
1244
|
-
this._storage.setItem("id_token_claims_obj", JSON.stringify(info));
|
|
1245
|
-
this.eventsSubject.next(new OAuthSuccessEvent("user_profile_loaded"));
|
|
1246
|
-
resolve({ info });
|
|
1247
|
-
} else {
|
|
1248
|
-
this.debug("userinfo is not JSON, treating it as JWE/JWS");
|
|
1249
|
-
this.eventsSubject.next(new OAuthSuccessEvent("user_profile_loaded"));
|
|
1250
|
-
resolve(JSON.parse(response.body));
|
|
1251
|
-
}
|
|
1252
|
-
}, (err2) => {
|
|
1253
|
-
this.logger.error("error loading user info", err2);
|
|
1254
|
-
this.eventsSubject.next(new OAuthErrorEvent("user_profile_load_error", err2));
|
|
1255
|
-
reject(err2);
|
|
1256
|
-
});
|
|
1257
|
-
});
|
|
1258
|
-
}
|
|
1259
|
-
/**
|
|
1260
|
-
* Uses password flow to exchange userName and password for an access_token.
|
|
1261
|
-
* @param userName
|
|
1262
|
-
* @param password
|
|
1263
|
-
* @param headers Optional additional http-headers.
|
|
1264
|
-
*/
|
|
1265
|
-
fetchTokenUsingPasswordFlow(userName, password, headers = new import_http.HttpHeaders()) {
|
|
1266
|
-
const parameters = {
|
|
1267
|
-
username: userName,
|
|
1268
|
-
password
|
|
1269
|
-
};
|
|
1270
|
-
return this.fetchTokenUsingGrant("password", parameters, headers);
|
|
1271
|
-
}
|
|
1272
|
-
/**
|
|
1273
|
-
* Uses a custom grant type to retrieve tokens.
|
|
1274
|
-
* @param grantType Grant type.
|
|
1275
|
-
* @param parameters Parameters to pass.
|
|
1276
|
-
* @param headers Optional additional HTTP headers.
|
|
1277
|
-
*/
|
|
1278
|
-
fetchTokenUsingGrant(grantType, parameters, headers = new import_http.HttpHeaders()) {
|
|
1279
|
-
this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, "tokenEndpoint");
|
|
1280
|
-
let params = new import_http.HttpParams({ encoder: new WebHttpUrlEncodingCodec() }).set("grant_type", grantType).set("scope", this.scope);
|
|
1281
|
-
if (this.useHttpBasicAuth) {
|
|
1282
|
-
const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);
|
|
1283
|
-
headers = headers.set("Authorization", "Basic " + header);
|
|
1284
|
-
}
|
|
1285
|
-
if (!this.useHttpBasicAuth) {
|
|
1286
|
-
params = params.set("client_id", this.clientId);
|
|
1287
|
-
}
|
|
1288
|
-
if (!this.useHttpBasicAuth && this.dummyClientSecret) {
|
|
1289
|
-
params = params.set("client_secret", this.dummyClientSecret);
|
|
1290
|
-
}
|
|
1291
|
-
if (this.customQueryParams) {
|
|
1292
|
-
for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {
|
|
1293
|
-
params = params.set(key, this.customQueryParams[key]);
|
|
1294
|
-
}
|
|
1295
|
-
}
|
|
1296
|
-
for (const key of Object.keys(parameters)) {
|
|
1297
|
-
params = params.set(key, parameters[key]);
|
|
1298
|
-
}
|
|
1299
|
-
headers = headers.set("Content-Type", "application/x-www-form-urlencoded");
|
|
1300
|
-
return new Promise((resolve, reject) => {
|
|
1301
|
-
this.http.post(this.tokenEndpoint, params, { headers }).subscribe((tokenResponse) => {
|
|
1302
|
-
this.debug("tokenResponse", tokenResponse);
|
|
1303
|
-
this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));
|
|
1304
|
-
if (this.oidc && tokenResponse.id_token) {
|
|
1305
|
-
this.processIdToken(tokenResponse.id_token, tokenResponse.access_token).then((result) => {
|
|
1306
|
-
this.storeIdToken(result);
|
|
1307
|
-
resolve(tokenResponse);
|
|
1308
|
-
});
|
|
1309
|
-
}
|
|
1310
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
1311
|
-
resolve(tokenResponse);
|
|
1312
|
-
}, (err2) => {
|
|
1313
|
-
this.logger.error("Error performing ${grantType} flow", err2);
|
|
1314
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_error", err2));
|
|
1315
|
-
reject(err2);
|
|
1316
|
-
});
|
|
1317
|
-
});
|
|
1318
|
-
}
|
|
1319
|
-
/**
|
|
1320
|
-
* Refreshes the token using a refresh_token.
|
|
1321
|
-
* This does not work for implicit flow, b/c
|
|
1322
|
-
* there is no refresh_token in this flow.
|
|
1323
|
-
* A solution for this is provided by the
|
|
1324
|
-
* method silentRefresh.
|
|
1325
|
-
*/
|
|
1326
|
-
refreshToken() {
|
|
1327
|
-
this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, "tokenEndpoint");
|
|
1328
|
-
return new Promise((resolve, reject) => {
|
|
1329
|
-
let params = new import_http.HttpParams({ encoder: new WebHttpUrlEncodingCodec() }).set("grant_type", "refresh_token").set("scope", this.scope).set("refresh_token", this._storage.getItem("refresh_token"));
|
|
1330
|
-
let headers = new import_http.HttpHeaders().set("Content-Type", "application/x-www-form-urlencoded");
|
|
1331
|
-
if (this.useHttpBasicAuth) {
|
|
1332
|
-
const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);
|
|
1333
|
-
headers = headers.set("Authorization", "Basic " + header);
|
|
1334
|
-
}
|
|
1335
|
-
if (!this.useHttpBasicAuth) {
|
|
1336
|
-
params = params.set("client_id", this.clientId);
|
|
1337
|
-
}
|
|
1338
|
-
if (!this.useHttpBasicAuth && this.dummyClientSecret) {
|
|
1339
|
-
params = params.set("client_secret", this.dummyClientSecret);
|
|
1340
|
-
}
|
|
1341
|
-
if (this.customQueryParams) {
|
|
1342
|
-
for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {
|
|
1343
|
-
params = params.set(key, this.customQueryParams[key]);
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
this.http.post(this.tokenEndpoint, params, { headers }).pipe((0, import_operators.switchMap)((tokenResponse) => {
|
|
1347
|
-
if (this.oidc && tokenResponse.id_token) {
|
|
1348
|
-
return (0, import_rxjs.from)(this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, true)).pipe((0, import_operators.tap)((result) => this.storeIdToken(result)), (0, import_operators.map)(() => tokenResponse));
|
|
1349
|
-
} else {
|
|
1350
|
-
return (0, import_rxjs.of)(tokenResponse);
|
|
1351
|
-
}
|
|
1352
|
-
})).subscribe((tokenResponse) => {
|
|
1353
|
-
this.debug("refresh tokenResponse", tokenResponse);
|
|
1354
|
-
this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));
|
|
1355
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
1356
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_refreshed"));
|
|
1357
|
-
resolve(tokenResponse);
|
|
1358
|
-
}, (err2) => {
|
|
1359
|
-
this.logger.error("Error refreshing token", err2);
|
|
1360
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_refresh_error", err2));
|
|
1361
|
-
reject(err2);
|
|
1362
|
-
});
|
|
1363
|
-
});
|
|
1364
|
-
}
|
|
1365
|
-
removeSilentRefreshEventListener() {
|
|
1366
|
-
if (this.silentRefreshPostMessageEventListener) {
|
|
1367
|
-
window.removeEventListener("message", this.silentRefreshPostMessageEventListener);
|
|
1368
|
-
this.silentRefreshPostMessageEventListener = null;
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
setupSilentRefreshEventListener() {
|
|
1372
|
-
this.removeSilentRefreshEventListener();
|
|
1373
|
-
this.silentRefreshPostMessageEventListener = (e) => {
|
|
1374
|
-
const message = this.processMessageEventMessage(e);
|
|
1375
|
-
if (this.checkOrigin && e.origin !== location.origin) {
|
|
1376
|
-
console.error("wrong origin requested silent refresh!");
|
|
1377
|
-
}
|
|
1378
|
-
this.tryLogin({
|
|
1379
|
-
customHashFragment: message,
|
|
1380
|
-
preventClearHashAfterLogin: true,
|
|
1381
|
-
customRedirectUri: this.silentRefreshRedirectUri || this.redirectUri
|
|
1382
|
-
}).catch((err2) => this.debug("tryLogin during silent refresh failed", err2));
|
|
1383
|
-
};
|
|
1384
|
-
window.addEventListener("message", this.silentRefreshPostMessageEventListener);
|
|
1385
|
-
}
|
|
1386
|
-
/**
|
|
1387
|
-
* Performs a silent refresh for implicit flow.
|
|
1388
|
-
* Use this method to get new tokens when/before
|
|
1389
|
-
* the existing tokens expire.
|
|
1390
|
-
*/
|
|
1391
|
-
silentRefresh(params = {}, noPrompt = true) {
|
|
1392
|
-
const claims = this.getIdentityClaims() || {};
|
|
1393
|
-
if (this.useIdTokenHintForSilentRefresh && this.hasValidIdToken()) {
|
|
1394
|
-
params["id_token_hint"] = this.getIdToken();
|
|
1395
|
-
}
|
|
1396
|
-
if (!this.validateUrlForHttps(this.loginUrl)) {
|
|
1397
|
-
throw new Error("loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
1398
|
-
}
|
|
1399
|
-
if (typeof this.document === "undefined") {
|
|
1400
|
-
throw new Error("silent refresh is not supported on this platform");
|
|
1401
|
-
}
|
|
1402
|
-
const existingIframe = this.document.getElementById(this.silentRefreshIFrameName);
|
|
1403
|
-
if (existingIframe) {
|
|
1404
|
-
this.document.body.removeChild(existingIframe);
|
|
1405
|
-
}
|
|
1406
|
-
this.silentRefreshSubject = claims["sub"];
|
|
1407
|
-
const iframe = this.document.createElement("iframe");
|
|
1408
|
-
iframe.id = this.silentRefreshIFrameName;
|
|
1409
|
-
this.setupSilentRefreshEventListener();
|
|
1410
|
-
const redirectUri = this.silentRefreshRedirectUri || this.redirectUri;
|
|
1411
|
-
this.createLoginUrl(null, null, redirectUri, noPrompt, params).then((url) => {
|
|
1412
|
-
iframe.setAttribute("src", url);
|
|
1413
|
-
if (!this.silentRefreshShowIFrame) {
|
|
1414
|
-
iframe.style["display"] = "none";
|
|
1415
|
-
}
|
|
1416
|
-
this.document.body.appendChild(iframe);
|
|
1417
|
-
});
|
|
1418
|
-
const errors = this.events.pipe((0, import_operators.filter)((e) => e instanceof OAuthErrorEvent), (0, import_operators.first)());
|
|
1419
|
-
const success = this.events.pipe((0, import_operators.filter)((e) => e.type === "token_received"), (0, import_operators.first)());
|
|
1420
|
-
const timeout2 = (0, import_rxjs.of)(new OAuthErrorEvent("silent_refresh_timeout", null)).pipe((0, import_operators.delay)(this.silentRefreshTimeout));
|
|
1421
|
-
return (0, import_rxjs.race)([errors, success, timeout2]).pipe((0, import_operators.map)((e) => {
|
|
1422
|
-
if (e instanceof OAuthErrorEvent) {
|
|
1423
|
-
if (e.type === "silent_refresh_timeout") {
|
|
1424
|
-
this.eventsSubject.next(e);
|
|
1425
|
-
} else {
|
|
1426
|
-
e = new OAuthErrorEvent("silent_refresh_error", e);
|
|
1427
|
-
this.eventsSubject.next(e);
|
|
1428
|
-
}
|
|
1429
|
-
throw e;
|
|
1430
|
-
} else if (e.type === "token_received") {
|
|
1431
|
-
e = new OAuthSuccessEvent("silently_refreshed");
|
|
1432
|
-
this.eventsSubject.next(e);
|
|
1433
|
-
}
|
|
1434
|
-
return e;
|
|
1435
|
-
})).toPromise();
|
|
1436
|
-
}
|
|
1437
|
-
/**
|
|
1438
|
-
* This method exists for backwards compatibility.
|
|
1439
|
-
* {@link OAuthService#initLoginFlowInPopup} handles both code
|
|
1440
|
-
* and implicit flows.
|
|
1441
|
-
*/
|
|
1442
|
-
initImplicitFlowInPopup(options) {
|
|
1443
|
-
return this.initLoginFlowInPopup(options);
|
|
1444
|
-
}
|
|
1445
|
-
initLoginFlowInPopup(options) {
|
|
1446
|
-
options = options || {};
|
|
1447
|
-
return this.createLoginUrl(null, null, this.silentRefreshRedirectUri, false, {
|
|
1448
|
-
display: "popup"
|
|
1449
|
-
}).then((url) => {
|
|
1450
|
-
return new Promise((resolve, reject) => {
|
|
1451
|
-
const checkForPopupClosedInterval = 500;
|
|
1452
|
-
let windowRef = null;
|
|
1453
|
-
if (!options.windowRef) {
|
|
1454
|
-
windowRef = window.open(url, "ngx-oauth2-oidc-login", this.calculatePopupFeatures(options));
|
|
1455
|
-
} else if (options.windowRef && !options.windowRef.closed) {
|
|
1456
|
-
windowRef = options.windowRef;
|
|
1457
|
-
windowRef.location.href = url;
|
|
1458
|
-
}
|
|
1459
|
-
let checkForPopupClosedTimer;
|
|
1460
|
-
const tryLogin = (hash2) => {
|
|
1461
|
-
this.tryLogin({
|
|
1462
|
-
customHashFragment: hash2,
|
|
1463
|
-
preventClearHashAfterLogin: true,
|
|
1464
|
-
customRedirectUri: this.silentRefreshRedirectUri
|
|
1465
|
-
}).then(() => {
|
|
1466
|
-
cleanup();
|
|
1467
|
-
resolve(true);
|
|
1468
|
-
}, (err2) => {
|
|
1469
|
-
cleanup();
|
|
1470
|
-
reject(err2);
|
|
1471
|
-
});
|
|
1472
|
-
};
|
|
1473
|
-
const checkForPopupClosed = () => {
|
|
1474
|
-
if (!windowRef || windowRef.closed) {
|
|
1475
|
-
cleanup();
|
|
1476
|
-
reject(new OAuthErrorEvent("popup_closed", {}));
|
|
1477
|
-
}
|
|
1478
|
-
};
|
|
1479
|
-
if (!windowRef) {
|
|
1480
|
-
reject(new OAuthErrorEvent("popup_blocked", {}));
|
|
1481
|
-
} else {
|
|
1482
|
-
checkForPopupClosedTimer = window.setInterval(checkForPopupClosed, checkForPopupClosedInterval);
|
|
1483
|
-
}
|
|
1484
|
-
const cleanup = () => {
|
|
1485
|
-
window.clearInterval(checkForPopupClosedTimer);
|
|
1486
|
-
window.removeEventListener("storage", storageListener);
|
|
1487
|
-
window.removeEventListener("message", listener);
|
|
1488
|
-
if (windowRef !== null) {
|
|
1489
|
-
windowRef.close();
|
|
1490
|
-
}
|
|
1491
|
-
windowRef = null;
|
|
1492
|
-
};
|
|
1493
|
-
const listener = (e) => {
|
|
1494
|
-
const message = this.processMessageEventMessage(e);
|
|
1495
|
-
if (message && message !== null) {
|
|
1496
|
-
window.removeEventListener("storage", storageListener);
|
|
1497
|
-
tryLogin(message);
|
|
1498
|
-
} else {
|
|
1499
|
-
console.log("false event firing");
|
|
1500
|
-
}
|
|
1501
|
-
};
|
|
1502
|
-
const storageListener = (event) => {
|
|
1503
|
-
if (event.key === "auth_hash") {
|
|
1504
|
-
window.removeEventListener("message", listener);
|
|
1505
|
-
tryLogin(event.newValue);
|
|
1506
|
-
}
|
|
1507
|
-
};
|
|
1508
|
-
window.addEventListener("message", listener);
|
|
1509
|
-
window.addEventListener("storage", storageListener);
|
|
1510
|
-
});
|
|
1511
|
-
});
|
|
1512
|
-
}
|
|
1513
|
-
calculatePopupFeatures(options) {
|
|
1514
|
-
const height = options.height || 470;
|
|
1515
|
-
const width = options.width || 500;
|
|
1516
|
-
const left = window.screenLeft + (window.outerWidth - width) / 2;
|
|
1517
|
-
const top = window.screenTop + (window.outerHeight - height) / 2;
|
|
1518
|
-
return `location=no,toolbar=no,width=${width},height=${height},top=${top},left=${left}`;
|
|
1519
|
-
}
|
|
1520
|
-
processMessageEventMessage(e) {
|
|
1521
|
-
let expectedPrefix = "#";
|
|
1522
|
-
if (this.silentRefreshMessagePrefix) {
|
|
1523
|
-
expectedPrefix += this.silentRefreshMessagePrefix;
|
|
1524
|
-
}
|
|
1525
|
-
if (!e || !e.data || typeof e.data !== "string") {
|
|
1526
|
-
return;
|
|
1527
|
-
}
|
|
1528
|
-
const prefixedMessage = e.data;
|
|
1529
|
-
if (!prefixedMessage.startsWith(expectedPrefix)) {
|
|
1530
|
-
return;
|
|
1531
|
-
}
|
|
1532
|
-
return "#" + prefixedMessage.substr(expectedPrefix.length);
|
|
1533
|
-
}
|
|
1534
|
-
canPerformSessionCheck() {
|
|
1535
|
-
if (!this.sessionChecksEnabled) {
|
|
1536
|
-
return false;
|
|
1537
|
-
}
|
|
1538
|
-
if (!this.sessionCheckIFrameUrl) {
|
|
1539
|
-
console.warn("sessionChecksEnabled is activated but there is no sessionCheckIFrameUrl");
|
|
1540
|
-
return false;
|
|
1541
|
-
}
|
|
1542
|
-
const sessionState = this.getSessionState();
|
|
1543
|
-
if (!sessionState) {
|
|
1544
|
-
console.warn("sessionChecksEnabled is activated but there is no session_state");
|
|
1545
|
-
return false;
|
|
1546
|
-
}
|
|
1547
|
-
if (typeof this.document === "undefined") {
|
|
1548
|
-
return false;
|
|
1549
|
-
}
|
|
1550
|
-
return true;
|
|
1551
|
-
}
|
|
1552
|
-
setupSessionCheckEventListener() {
|
|
1553
|
-
this.removeSessionCheckEventListener();
|
|
1554
|
-
this.sessionCheckEventListener = (e) => {
|
|
1555
|
-
const origin = e.origin.toLowerCase();
|
|
1556
|
-
const issuer = this.issuer.toLowerCase();
|
|
1557
|
-
this.debug("sessionCheckEventListener");
|
|
1558
|
-
if (!issuer.startsWith(origin)) {
|
|
1559
|
-
this.debug("sessionCheckEventListener", "wrong origin", origin, "expected", issuer, "event", e);
|
|
1560
|
-
return;
|
|
1561
|
-
}
|
|
1562
|
-
switch (e.data) {
|
|
1563
|
-
case "unchanged":
|
|
1564
|
-
this.ngZone.run(() => {
|
|
1565
|
-
this.handleSessionUnchanged();
|
|
1566
|
-
});
|
|
1567
|
-
break;
|
|
1568
|
-
case "changed":
|
|
1569
|
-
this.ngZone.run(() => {
|
|
1570
|
-
this.handleSessionChange();
|
|
1571
|
-
});
|
|
1572
|
-
break;
|
|
1573
|
-
case "error":
|
|
1574
|
-
this.ngZone.run(() => {
|
|
1575
|
-
this.handleSessionError();
|
|
1576
|
-
});
|
|
1577
|
-
break;
|
|
1578
|
-
}
|
|
1579
|
-
this.debug("got info from session check inframe", e);
|
|
1580
|
-
};
|
|
1581
|
-
this.ngZone.runOutsideAngular(() => {
|
|
1582
|
-
window.addEventListener("message", this.sessionCheckEventListener);
|
|
1583
|
-
});
|
|
1584
|
-
}
|
|
1585
|
-
handleSessionUnchanged() {
|
|
1586
|
-
this.debug("session check", "session unchanged");
|
|
1587
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_unchanged"));
|
|
1588
|
-
}
|
|
1589
|
-
handleSessionChange() {
|
|
1590
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_changed"));
|
|
1591
|
-
this.stopSessionCheckTimer();
|
|
1592
|
-
if (!this.useSilentRefresh && this.responseType === "code") {
|
|
1593
|
-
this.refreshToken().then(() => {
|
|
1594
|
-
this.debug("token refresh after session change worked");
|
|
1595
|
-
}).catch(() => {
|
|
1596
|
-
this.debug("token refresh did not work after session changed");
|
|
1597
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_terminated"));
|
|
1598
|
-
this.logOut(true);
|
|
1599
|
-
});
|
|
1600
|
-
} else if (this.silentRefreshRedirectUri) {
|
|
1601
|
-
this.silentRefresh().catch(() => this.debug("silent refresh failed after session changed"));
|
|
1602
|
-
this.waitForSilentRefreshAfterSessionChange();
|
|
1603
|
-
} else {
|
|
1604
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_terminated"));
|
|
1605
|
-
this.logOut(true);
|
|
1606
|
-
}
|
|
1607
|
-
}
|
|
1608
|
-
waitForSilentRefreshAfterSessionChange() {
|
|
1609
|
-
this.events.pipe((0, import_operators.filter)((e) => e.type === "silently_refreshed" || e.type === "silent_refresh_timeout" || e.type === "silent_refresh_error"), (0, import_operators.first)()).subscribe((e) => {
|
|
1610
|
-
if (e.type !== "silently_refreshed") {
|
|
1611
|
-
this.debug("silent refresh did not work after session changed");
|
|
1612
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_terminated"));
|
|
1613
|
-
this.logOut(true);
|
|
1614
|
-
}
|
|
1615
|
-
});
|
|
1616
|
-
}
|
|
1617
|
-
handleSessionError() {
|
|
1618
|
-
this.stopSessionCheckTimer();
|
|
1619
|
-
this.eventsSubject.next(new OAuthInfoEvent("session_error"));
|
|
1620
|
-
}
|
|
1621
|
-
removeSessionCheckEventListener() {
|
|
1622
|
-
if (this.sessionCheckEventListener) {
|
|
1623
|
-
window.removeEventListener("message", this.sessionCheckEventListener);
|
|
1624
|
-
this.sessionCheckEventListener = null;
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
initSessionCheck() {
|
|
1628
|
-
if (!this.canPerformSessionCheck()) {
|
|
1629
|
-
return;
|
|
1630
|
-
}
|
|
1631
|
-
const existingIframe = this.document.getElementById(this.sessionCheckIFrameName);
|
|
1632
|
-
if (existingIframe) {
|
|
1633
|
-
this.document.body.removeChild(existingIframe);
|
|
1634
|
-
}
|
|
1635
|
-
const iframe = this.document.createElement("iframe");
|
|
1636
|
-
iframe.id = this.sessionCheckIFrameName;
|
|
1637
|
-
this.setupSessionCheckEventListener();
|
|
1638
|
-
const url = this.sessionCheckIFrameUrl;
|
|
1639
|
-
iframe.setAttribute("src", url);
|
|
1640
|
-
iframe.style.display = "none";
|
|
1641
|
-
this.document.body.appendChild(iframe);
|
|
1642
|
-
this.startSessionCheckTimer();
|
|
1643
|
-
}
|
|
1644
|
-
startSessionCheckTimer() {
|
|
1645
|
-
this.stopSessionCheckTimer();
|
|
1646
|
-
this.ngZone.runOutsideAngular(() => {
|
|
1647
|
-
this.sessionCheckTimer = setInterval(this.checkSession.bind(this), this.sessionCheckIntervall);
|
|
1648
|
-
});
|
|
1649
|
-
}
|
|
1650
|
-
stopSessionCheckTimer() {
|
|
1651
|
-
if (this.sessionCheckTimer) {
|
|
1652
|
-
clearInterval(this.sessionCheckTimer);
|
|
1653
|
-
this.sessionCheckTimer = null;
|
|
1654
|
-
}
|
|
1655
|
-
}
|
|
1656
|
-
checkSession() {
|
|
1657
|
-
const iframe = this.document.getElementById(this.sessionCheckIFrameName);
|
|
1658
|
-
if (!iframe) {
|
|
1659
|
-
this.logger.warn("checkSession did not find iframe", this.sessionCheckIFrameName);
|
|
1660
|
-
}
|
|
1661
|
-
const sessionState = this.getSessionState();
|
|
1662
|
-
if (!sessionState) {
|
|
1663
|
-
this.stopSessionCheckTimer();
|
|
1664
|
-
}
|
|
1665
|
-
const message = this.clientId + " " + sessionState;
|
|
1666
|
-
iframe.contentWindow.postMessage(message, this.issuer);
|
|
1667
|
-
}
|
|
1668
|
-
createLoginUrl() {
|
|
1669
|
-
return __async(this, arguments, function* (state = "", loginHint = "", customRedirectUri = "", noPrompt = false, params = {}) {
|
|
1670
|
-
const that = this;
|
|
1671
|
-
let redirectUri;
|
|
1672
|
-
if (customRedirectUri) {
|
|
1673
|
-
redirectUri = customRedirectUri;
|
|
1674
|
-
} else {
|
|
1675
|
-
redirectUri = this.redirectUri;
|
|
1676
|
-
}
|
|
1677
|
-
const nonce = yield this.createAndSaveNonce();
|
|
1678
|
-
if (state) {
|
|
1679
|
-
state = nonce + this.config.nonceStateSeparator + encodeURIComponent(state);
|
|
1680
|
-
} else {
|
|
1681
|
-
state = nonce;
|
|
1682
|
-
}
|
|
1683
|
-
if (!this.requestAccessToken && !this.oidc) {
|
|
1684
|
-
throw new Error("Either requestAccessToken or oidc or both must be true");
|
|
1685
|
-
}
|
|
1686
|
-
if (this.config.responseType) {
|
|
1687
|
-
this.responseType = this.config.responseType;
|
|
1688
|
-
} else {
|
|
1689
|
-
if (this.oidc && this.requestAccessToken) {
|
|
1690
|
-
this.responseType = "id_token token";
|
|
1691
|
-
} else if (this.oidc && !this.requestAccessToken) {
|
|
1692
|
-
this.responseType = "id_token";
|
|
1693
|
-
} else {
|
|
1694
|
-
this.responseType = "token";
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
const seperationChar = that.loginUrl.indexOf("?") > -1 ? "&" : "?";
|
|
1698
|
-
let scope = that.scope;
|
|
1699
|
-
if (this.oidc && !scope.match(/(^|\s)openid($|\s)/)) {
|
|
1700
|
-
scope = "openid " + scope;
|
|
1701
|
-
}
|
|
1702
|
-
let url = that.loginUrl + seperationChar + "response_type=" + encodeURIComponent(that.responseType) + "&client_id=" + encodeURIComponent(that.clientId) + "&state=" + encodeURIComponent(state) + "&redirect_uri=" + encodeURIComponent(redirectUri) + "&scope=" + encodeURIComponent(scope);
|
|
1703
|
-
if (this.responseType.includes("code") && !this.disablePKCE) {
|
|
1704
|
-
const [challenge, verifier] = yield this.createChallangeVerifierPairForPKCE();
|
|
1705
|
-
if (this.saveNoncesInLocalStorage && typeof window["localStorage"] !== "undefined") {
|
|
1706
|
-
localStorage.setItem("PKCE_verifier", verifier);
|
|
1707
|
-
} else {
|
|
1708
|
-
this._storage.setItem("PKCE_verifier", verifier);
|
|
1709
|
-
}
|
|
1710
|
-
url += "&code_challenge=" + challenge;
|
|
1711
|
-
url += "&code_challenge_method=S256";
|
|
1712
|
-
}
|
|
1713
|
-
if (loginHint) {
|
|
1714
|
-
url += "&login_hint=" + encodeURIComponent(loginHint);
|
|
1715
|
-
}
|
|
1716
|
-
if (that.resource) {
|
|
1717
|
-
url += "&resource=" + encodeURIComponent(that.resource);
|
|
1718
|
-
}
|
|
1719
|
-
if (that.oidc) {
|
|
1720
|
-
url += "&nonce=" + encodeURIComponent(nonce);
|
|
1721
|
-
}
|
|
1722
|
-
if (noPrompt) {
|
|
1723
|
-
url += "&prompt=none";
|
|
1724
|
-
}
|
|
1725
|
-
for (const key of Object.keys(params)) {
|
|
1726
|
-
url += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(params[key]);
|
|
1727
|
-
}
|
|
1728
|
-
if (this.customQueryParams) {
|
|
1729
|
-
for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {
|
|
1730
|
-
url += "&" + key + "=" + encodeURIComponent(this.customQueryParams[key]);
|
|
1731
|
-
}
|
|
1732
|
-
}
|
|
1733
|
-
return url;
|
|
1734
|
-
});
|
|
1735
|
-
}
|
|
1736
|
-
initImplicitFlowInternal(additionalState = "", params = "") {
|
|
1737
|
-
if (this.inImplicitFlow) {
|
|
1738
|
-
return;
|
|
1739
|
-
}
|
|
1740
|
-
this.inImplicitFlow = true;
|
|
1741
|
-
if (!this.validateUrlForHttps(this.loginUrl)) {
|
|
1742
|
-
throw new Error("loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
1743
|
-
}
|
|
1744
|
-
let addParams = {};
|
|
1745
|
-
let loginHint = null;
|
|
1746
|
-
if (typeof params === "string") {
|
|
1747
|
-
loginHint = params;
|
|
1748
|
-
} else if (typeof params === "object") {
|
|
1749
|
-
addParams = params;
|
|
1750
|
-
}
|
|
1751
|
-
this.createLoginUrl(additionalState, loginHint, null, false, addParams).then(this.config.openUri).catch((error) => {
|
|
1752
|
-
console.error("Error in initImplicitFlow", error);
|
|
1753
|
-
this.inImplicitFlow = false;
|
|
1754
|
-
});
|
|
1755
|
-
}
|
|
1756
|
-
/**
|
|
1757
|
-
* Starts the implicit flow and redirects to user to
|
|
1758
|
-
* the auth servers' login url.
|
|
1759
|
-
*
|
|
1760
|
-
* @param additionalState Optional state that is passed around.
|
|
1761
|
-
* You'll find this state in the property `state` after `tryLogin` logged in the user.
|
|
1762
|
-
* @param params Hash with additional parameter. If it is a string, it is used for the
|
|
1763
|
-
* parameter loginHint (for the sake of compatibility with former versions)
|
|
1764
|
-
*/
|
|
1765
|
-
initImplicitFlow(additionalState = "", params = "") {
|
|
1766
|
-
if (this.loginUrl !== "") {
|
|
1767
|
-
this.initImplicitFlowInternal(additionalState, params);
|
|
1768
|
-
} else {
|
|
1769
|
-
this.events.pipe((0, import_operators.filter)((e) => e.type === "discovery_document_loaded")).subscribe(() => this.initImplicitFlowInternal(additionalState, params));
|
|
1770
|
-
}
|
|
1771
|
-
}
|
|
1772
|
-
/**
|
|
1773
|
-
* Reset current implicit flow
|
|
1774
|
-
*
|
|
1775
|
-
* @description This method allows resetting the current implict flow in order to be initialized again.
|
|
1776
|
-
*/
|
|
1777
|
-
resetImplicitFlow() {
|
|
1778
|
-
this.inImplicitFlow = false;
|
|
1779
|
-
}
|
|
1780
|
-
callOnTokenReceivedIfExists(options) {
|
|
1781
|
-
const that = this;
|
|
1782
|
-
if (options.onTokenReceived) {
|
|
1783
|
-
const tokenParams = {
|
|
1784
|
-
idClaims: that.getIdentityClaims(),
|
|
1785
|
-
idToken: that.getIdToken(),
|
|
1786
|
-
accessToken: that.getAccessToken(),
|
|
1787
|
-
state: that.state
|
|
1788
|
-
};
|
|
1789
|
-
options.onTokenReceived(tokenParams);
|
|
1790
|
-
}
|
|
1791
|
-
}
|
|
1792
|
-
storeAccessTokenResponse(accessToken, refreshToken, expiresIn, grantedScopes, customParameters) {
|
|
1793
|
-
this._storage.setItem("access_token", accessToken);
|
|
1794
|
-
if (grantedScopes && !Array.isArray(grantedScopes)) {
|
|
1795
|
-
this._storage.setItem("granted_scopes", JSON.stringify(grantedScopes.split(" ")));
|
|
1796
|
-
} else if (grantedScopes && Array.isArray(grantedScopes)) {
|
|
1797
|
-
this._storage.setItem("granted_scopes", JSON.stringify(grantedScopes));
|
|
1798
|
-
}
|
|
1799
|
-
this._storage.setItem("access_token_stored_at", "" + this.dateTimeService.now());
|
|
1800
|
-
if (expiresIn) {
|
|
1801
|
-
const expiresInMilliSeconds = expiresIn * 1e3;
|
|
1802
|
-
const now = this.dateTimeService.new();
|
|
1803
|
-
const expiresAt = now.getTime() + expiresInMilliSeconds;
|
|
1804
|
-
this._storage.setItem("expires_at", "" + expiresAt);
|
|
1805
|
-
}
|
|
1806
|
-
if (refreshToken) {
|
|
1807
|
-
this._storage.setItem("refresh_token", refreshToken);
|
|
1808
|
-
}
|
|
1809
|
-
if (customParameters) {
|
|
1810
|
-
customParameters.forEach((value, key) => {
|
|
1811
|
-
this._storage.setItem(key, value);
|
|
1812
|
-
});
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
/**
|
|
1816
|
-
* Delegates to tryLoginImplicitFlow for the sake of competability
|
|
1817
|
-
* @param options Optional options.
|
|
1818
|
-
*/
|
|
1819
|
-
tryLogin(options = null) {
|
|
1820
|
-
if (this.config.responseType === "code") {
|
|
1821
|
-
return this.tryLoginCodeFlow(options).then(() => true);
|
|
1822
|
-
} else {
|
|
1823
|
-
return this.tryLoginImplicitFlow(options);
|
|
1824
|
-
}
|
|
1825
|
-
}
|
|
1826
|
-
parseQueryString(queryString) {
|
|
1827
|
-
if (!queryString || queryString.length === 0) {
|
|
1828
|
-
return {};
|
|
1829
|
-
}
|
|
1830
|
-
if (queryString.charAt(0) === "?") {
|
|
1831
|
-
queryString = queryString.substr(1);
|
|
1832
|
-
}
|
|
1833
|
-
return this.urlHelper.parseQueryString(queryString);
|
|
1834
|
-
}
|
|
1835
|
-
tryLoginCodeFlow(options = null) {
|
|
1836
|
-
return __async(this, null, function* () {
|
|
1837
|
-
options = options || {};
|
|
1838
|
-
const querySource = options.customHashFragment ? options.customHashFragment.substring(1) : window.location.search;
|
|
1839
|
-
const parts = this.getCodePartsFromUrl(querySource);
|
|
1840
|
-
const code = parts["code"];
|
|
1841
|
-
const state = parts["state"];
|
|
1842
|
-
const sessionState = parts["session_state"];
|
|
1843
|
-
if (!options.preventClearHashAfterLogin) {
|
|
1844
|
-
const href = location.origin + location.pathname + location.search.replace(/code=[^&$]*/, "").replace(/scope=[^&$]*/, "").replace(/state=[^&$]*/, "").replace(/session_state=[^&$]*/, "").replace(/^\?&/, "?").replace(/&$/, "").replace(/^\?$/, "").replace(/&+/g, "&").replace(/\?&/, "?").replace(/\?$/, "") + location.hash;
|
|
1845
|
-
history.replaceState(null, window.name, href);
|
|
1846
|
-
}
|
|
1847
|
-
const [nonceInState, userState] = this.parseState(state);
|
|
1848
|
-
this.state = userState;
|
|
1849
|
-
if (parts["error"]) {
|
|
1850
|
-
this.debug("error trying to login");
|
|
1851
|
-
this.handleLoginError(options, parts);
|
|
1852
|
-
const err2 = new OAuthErrorEvent("code_error", {}, parts);
|
|
1853
|
-
this.eventsSubject.next(err2);
|
|
1854
|
-
return Promise.reject(err2);
|
|
1855
|
-
}
|
|
1856
|
-
if (!options.disableNonceCheck) {
|
|
1857
|
-
if (!nonceInState) {
|
|
1858
|
-
this.saveRequestedRoute();
|
|
1859
|
-
return Promise.resolve();
|
|
1860
|
-
}
|
|
1861
|
-
if (!options.disableOAuth2StateCheck) {
|
|
1862
|
-
const success = this.validateNonce(nonceInState);
|
|
1863
|
-
if (!success) {
|
|
1864
|
-
const event = new OAuthErrorEvent("invalid_nonce_in_state", null);
|
|
1865
|
-
this.eventsSubject.next(event);
|
|
1866
|
-
return Promise.reject(event);
|
|
1867
|
-
}
|
|
1868
|
-
}
|
|
1869
|
-
}
|
|
1870
|
-
this.storeSessionState(sessionState);
|
|
1871
|
-
if (code) {
|
|
1872
|
-
yield this.getTokenFromCode(code, options);
|
|
1873
|
-
this.restoreRequestedRoute();
|
|
1874
|
-
return Promise.resolve();
|
|
1875
|
-
} else {
|
|
1876
|
-
return Promise.resolve();
|
|
1877
|
-
}
|
|
1878
|
-
});
|
|
1879
|
-
}
|
|
1880
|
-
saveRequestedRoute() {
|
|
1881
|
-
if (this.config.preserveRequestedRoute) {
|
|
1882
|
-
this._storage.setItem("requested_route", window.location.pathname + window.location.search);
|
|
1883
|
-
}
|
|
1884
|
-
}
|
|
1885
|
-
restoreRequestedRoute() {
|
|
1886
|
-
const requestedRoute = this._storage.getItem("requested_route");
|
|
1887
|
-
if (requestedRoute) {
|
|
1888
|
-
history.replaceState(null, "", window.location.origin + requestedRoute);
|
|
1889
|
-
}
|
|
1890
|
-
}
|
|
1891
|
-
/**
|
|
1892
|
-
* Retrieve the returned auth code from the redirect uri that has been called.
|
|
1893
|
-
* If required also check hash, as we could use hash location strategy.
|
|
1894
|
-
*/
|
|
1895
|
-
getCodePartsFromUrl(queryString) {
|
|
1896
|
-
if (!queryString || queryString.length === 0) {
|
|
1897
|
-
return this.urlHelper.getHashFragmentParams();
|
|
1898
|
-
}
|
|
1899
|
-
if (queryString.charAt(0) === "?") {
|
|
1900
|
-
queryString = queryString.substr(1);
|
|
1901
|
-
}
|
|
1902
|
-
return this.urlHelper.parseQueryString(queryString);
|
|
1903
|
-
}
|
|
1904
|
-
/**
|
|
1905
|
-
* Get token using an intermediate code. Works for the Authorization Code flow.
|
|
1906
|
-
*/
|
|
1907
|
-
getTokenFromCode(code, options) {
|
|
1908
|
-
let params = new import_http.HttpParams({ encoder: new WebHttpUrlEncodingCodec() }).set("grant_type", "authorization_code").set("code", code).set("redirect_uri", options.customRedirectUri || this.redirectUri);
|
|
1909
|
-
if (!this.disablePKCE) {
|
|
1910
|
-
let PKCEVerifier;
|
|
1911
|
-
if (this.saveNoncesInLocalStorage && typeof window["localStorage"] !== "undefined") {
|
|
1912
|
-
PKCEVerifier = localStorage.getItem("PKCE_verifier");
|
|
1913
|
-
} else {
|
|
1914
|
-
PKCEVerifier = this._storage.getItem("PKCE_verifier");
|
|
1915
|
-
}
|
|
1916
|
-
if (!PKCEVerifier) {
|
|
1917
|
-
console.warn("No PKCE verifier found in oauth storage!");
|
|
1918
|
-
} else {
|
|
1919
|
-
params = params.set("code_verifier", PKCEVerifier);
|
|
1920
|
-
}
|
|
1921
|
-
}
|
|
1922
|
-
return this.fetchAndProcessToken(params, options);
|
|
1923
|
-
}
|
|
1924
|
-
fetchAndProcessToken(params, options) {
|
|
1925
|
-
options = options || {};
|
|
1926
|
-
this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, "tokenEndpoint");
|
|
1927
|
-
let headers = new import_http.HttpHeaders().set("Content-Type", "application/x-www-form-urlencoded");
|
|
1928
|
-
if (this.useHttpBasicAuth) {
|
|
1929
|
-
const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);
|
|
1930
|
-
headers = headers.set("Authorization", "Basic " + header);
|
|
1931
|
-
}
|
|
1932
|
-
if (!this.useHttpBasicAuth) {
|
|
1933
|
-
params = params.set("client_id", this.clientId);
|
|
1934
|
-
}
|
|
1935
|
-
if (!this.useHttpBasicAuth && this.dummyClientSecret) {
|
|
1936
|
-
params = params.set("client_secret", this.dummyClientSecret);
|
|
1937
|
-
}
|
|
1938
|
-
return new Promise((resolve, reject) => {
|
|
1939
|
-
if (this.customQueryParams) {
|
|
1940
|
-
for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {
|
|
1941
|
-
params = params.set(key, this.customQueryParams[key]);
|
|
1942
|
-
}
|
|
1943
|
-
}
|
|
1944
|
-
this.http.post(this.tokenEndpoint, params, { headers }).subscribe((tokenResponse) => {
|
|
1945
|
-
this.debug("refresh tokenResponse", tokenResponse);
|
|
1946
|
-
this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec, tokenResponse.scope, this.extractRecognizedCustomParameters(tokenResponse));
|
|
1947
|
-
if (this.oidc && tokenResponse.id_token) {
|
|
1948
|
-
this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, options.disableNonceCheck).then((result) => {
|
|
1949
|
-
this.storeIdToken(result);
|
|
1950
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
1951
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_refreshed"));
|
|
1952
|
-
resolve(tokenResponse);
|
|
1953
|
-
}).catch((reason) => {
|
|
1954
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_validation_error", reason));
|
|
1955
|
-
console.error("Error validating tokens");
|
|
1956
|
-
console.error(reason);
|
|
1957
|
-
reject(reason);
|
|
1958
|
-
});
|
|
1959
|
-
} else {
|
|
1960
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
1961
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_refreshed"));
|
|
1962
|
-
resolve(tokenResponse);
|
|
1963
|
-
}
|
|
1964
|
-
}, (err2) => {
|
|
1965
|
-
console.error("Error getting token", err2);
|
|
1966
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_refresh_error", err2));
|
|
1967
|
-
reject(err2);
|
|
1968
|
-
});
|
|
1969
|
-
});
|
|
1970
|
-
}
|
|
1971
|
-
/**
|
|
1972
|
-
* Checks whether there are tokens in the hash fragment
|
|
1973
|
-
* as a result of the implicit flow. These tokens are
|
|
1974
|
-
* parsed, validated and used to sign the user in to the
|
|
1975
|
-
* current client.
|
|
1976
|
-
*
|
|
1977
|
-
* @param options Optional options.
|
|
1978
|
-
*/
|
|
1979
|
-
tryLoginImplicitFlow(options = null) {
|
|
1980
|
-
options = options || {};
|
|
1981
|
-
let parts;
|
|
1982
|
-
if (options.customHashFragment) {
|
|
1983
|
-
parts = this.urlHelper.getHashFragmentParams(options.customHashFragment);
|
|
1984
|
-
} else {
|
|
1985
|
-
parts = this.urlHelper.getHashFragmentParams();
|
|
1986
|
-
}
|
|
1987
|
-
this.debug("parsed url", parts);
|
|
1988
|
-
const state = parts["state"];
|
|
1989
|
-
const [nonceInState, userState] = this.parseState(state);
|
|
1990
|
-
this.state = userState;
|
|
1991
|
-
if (parts["error"]) {
|
|
1992
|
-
this.debug("error trying to login");
|
|
1993
|
-
this.handleLoginError(options, parts);
|
|
1994
|
-
const err2 = new OAuthErrorEvent("token_error", {}, parts);
|
|
1995
|
-
this.eventsSubject.next(err2);
|
|
1996
|
-
return Promise.reject(err2);
|
|
1997
|
-
}
|
|
1998
|
-
const accessToken = parts["access_token"];
|
|
1999
|
-
const idToken = parts["id_token"];
|
|
2000
|
-
const sessionState = parts["session_state"];
|
|
2001
|
-
const grantedScopes = parts["scope"];
|
|
2002
|
-
if (!this.requestAccessToken && !this.oidc) {
|
|
2003
|
-
return Promise.reject("Either requestAccessToken or oidc (or both) must be true.");
|
|
2004
|
-
}
|
|
2005
|
-
if (this.requestAccessToken && !accessToken) {
|
|
2006
|
-
return Promise.resolve(false);
|
|
2007
|
-
}
|
|
2008
|
-
if (this.requestAccessToken && !options.disableOAuth2StateCheck && !state) {
|
|
2009
|
-
return Promise.resolve(false);
|
|
2010
|
-
}
|
|
2011
|
-
if (this.oidc && !idToken) {
|
|
2012
|
-
return Promise.resolve(false);
|
|
2013
|
-
}
|
|
2014
|
-
if (this.sessionChecksEnabled && !sessionState) {
|
|
2015
|
-
this.logger.warn("session checks (Session Status Change Notification) were activated in the configuration but the id_token does not contain a session_state claim");
|
|
2016
|
-
}
|
|
2017
|
-
if (this.requestAccessToken && !options.disableNonceCheck) {
|
|
2018
|
-
const success = this.validateNonce(nonceInState);
|
|
2019
|
-
if (!success) {
|
|
2020
|
-
const event = new OAuthErrorEvent("invalid_nonce_in_state", null);
|
|
2021
|
-
this.eventsSubject.next(event);
|
|
2022
|
-
return Promise.reject(event);
|
|
2023
|
-
}
|
|
2024
|
-
}
|
|
2025
|
-
if (this.requestAccessToken) {
|
|
2026
|
-
this.storeAccessTokenResponse(accessToken, null, parts["expires_in"] || this.fallbackAccessTokenExpirationTimeInSec, grantedScopes);
|
|
2027
|
-
}
|
|
2028
|
-
if (!this.oidc) {
|
|
2029
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
2030
|
-
if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {
|
|
2031
|
-
this.clearLocationHash();
|
|
2032
|
-
}
|
|
2033
|
-
this.callOnTokenReceivedIfExists(options);
|
|
2034
|
-
return Promise.resolve(true);
|
|
2035
|
-
}
|
|
2036
|
-
return this.processIdToken(idToken, accessToken, options.disableNonceCheck).then((result) => {
|
|
2037
|
-
if (options.validationHandler) {
|
|
2038
|
-
return options.validationHandler({
|
|
2039
|
-
accessToken,
|
|
2040
|
-
idClaims: result.idTokenClaims,
|
|
2041
|
-
idToken: result.idToken,
|
|
2042
|
-
state
|
|
2043
|
-
}).then(() => result);
|
|
2044
|
-
}
|
|
2045
|
-
return result;
|
|
2046
|
-
}).then((result) => {
|
|
2047
|
-
this.storeIdToken(result);
|
|
2048
|
-
this.storeSessionState(sessionState);
|
|
2049
|
-
if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {
|
|
2050
|
-
this.clearLocationHash();
|
|
2051
|
-
}
|
|
2052
|
-
this.eventsSubject.next(new OAuthSuccessEvent("token_received"));
|
|
2053
|
-
this.callOnTokenReceivedIfExists(options);
|
|
2054
|
-
this.inImplicitFlow = false;
|
|
2055
|
-
return true;
|
|
2056
|
-
}).catch((reason) => {
|
|
2057
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_validation_error", reason));
|
|
2058
|
-
this.logger.error("Error validating tokens");
|
|
2059
|
-
this.logger.error(reason);
|
|
2060
|
-
return Promise.reject(reason);
|
|
2061
|
-
});
|
|
2062
|
-
}
|
|
2063
|
-
parseState(state) {
|
|
2064
|
-
let nonce = state;
|
|
2065
|
-
let userState = "";
|
|
2066
|
-
if (state) {
|
|
2067
|
-
const idx = state.indexOf(this.config.nonceStateSeparator);
|
|
2068
|
-
if (idx > -1) {
|
|
2069
|
-
nonce = state.substr(0, idx);
|
|
2070
|
-
userState = state.substr(idx + this.config.nonceStateSeparator.length);
|
|
2071
|
-
}
|
|
2072
|
-
}
|
|
2073
|
-
return [nonce, userState];
|
|
2074
|
-
}
|
|
2075
|
-
validateNonce(nonceInState) {
|
|
2076
|
-
let savedNonce;
|
|
2077
|
-
if (this.saveNoncesInLocalStorage && typeof window["localStorage"] !== "undefined") {
|
|
2078
|
-
savedNonce = localStorage.getItem("nonce");
|
|
2079
|
-
} else {
|
|
2080
|
-
savedNonce = this._storage.getItem("nonce");
|
|
2081
|
-
}
|
|
2082
|
-
if (savedNonce !== nonceInState) {
|
|
2083
|
-
const err2 = "Validating access_token failed, wrong state/nonce.";
|
|
2084
|
-
console.error(err2, savedNonce, nonceInState);
|
|
2085
|
-
return false;
|
|
2086
|
-
}
|
|
2087
|
-
return true;
|
|
2088
|
-
}
|
|
2089
|
-
storeIdToken(idToken) {
|
|
2090
|
-
this._storage.setItem("id_token", idToken.idToken);
|
|
2091
|
-
this._storage.setItem("id_token_claims_obj", idToken.idTokenClaimsJson);
|
|
2092
|
-
this._storage.setItem("id_token_expires_at", "" + idToken.idTokenExpiresAt);
|
|
2093
|
-
this._storage.setItem("id_token_stored_at", "" + this.dateTimeService.now());
|
|
2094
|
-
}
|
|
2095
|
-
storeSessionState(sessionState) {
|
|
2096
|
-
this._storage.setItem("session_state", sessionState);
|
|
2097
|
-
}
|
|
2098
|
-
getSessionState() {
|
|
2099
|
-
return this._storage.getItem("session_state");
|
|
2100
|
-
}
|
|
2101
|
-
handleLoginError(options, parts) {
|
|
2102
|
-
if (options.onLoginError) {
|
|
2103
|
-
options.onLoginError(parts);
|
|
2104
|
-
}
|
|
2105
|
-
if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {
|
|
2106
|
-
this.clearLocationHash();
|
|
2107
|
-
}
|
|
2108
|
-
}
|
|
2109
|
-
getClockSkewInMsec(defaultSkewMsc = 6e5) {
|
|
2110
|
-
if (!this.clockSkewInSec && this.clockSkewInSec !== 0) {
|
|
2111
|
-
return defaultSkewMsc;
|
|
2112
|
-
}
|
|
2113
|
-
return this.clockSkewInSec * 1e3;
|
|
2114
|
-
}
|
|
2115
|
-
/**
|
|
2116
|
-
* @ignore
|
|
2117
|
-
*/
|
|
2118
|
-
processIdToken(idToken, accessToken, skipNonceCheck = false) {
|
|
2119
|
-
const tokenParts = idToken.split(".");
|
|
2120
|
-
const headerBase64 = this.padBase64(tokenParts[0]);
|
|
2121
|
-
const headerJson = b64DecodeUnicode(headerBase64);
|
|
2122
|
-
const header = JSON.parse(headerJson);
|
|
2123
|
-
const claimsBase64 = this.padBase64(tokenParts[1]);
|
|
2124
|
-
const claimsJson = b64DecodeUnicode(claimsBase64);
|
|
2125
|
-
const claims = JSON.parse(claimsJson);
|
|
2126
|
-
let savedNonce;
|
|
2127
|
-
if (this.saveNoncesInLocalStorage && typeof window["localStorage"] !== "undefined") {
|
|
2128
|
-
savedNonce = localStorage.getItem("nonce");
|
|
2129
|
-
} else {
|
|
2130
|
-
savedNonce = this._storage.getItem("nonce");
|
|
2131
|
-
}
|
|
2132
|
-
if (Array.isArray(claims.aud)) {
|
|
2133
|
-
if (claims.aud.every((v) => v !== this.clientId)) {
|
|
2134
|
-
const err2 = "Wrong audience: " + claims.aud.join(",");
|
|
2135
|
-
this.logger.warn(err2);
|
|
2136
|
-
return Promise.reject(err2);
|
|
2137
|
-
}
|
|
2138
|
-
} else {
|
|
2139
|
-
if (claims.aud !== this.clientId) {
|
|
2140
|
-
const err2 = "Wrong audience: " + claims.aud;
|
|
2141
|
-
this.logger.warn(err2);
|
|
2142
|
-
return Promise.reject(err2);
|
|
2143
|
-
}
|
|
2144
|
-
}
|
|
2145
|
-
if (!claims.sub) {
|
|
2146
|
-
const err2 = "No sub claim in id_token";
|
|
2147
|
-
this.logger.warn(err2);
|
|
2148
|
-
return Promise.reject(err2);
|
|
2149
|
-
}
|
|
2150
|
-
if (this.sessionChecksEnabled && this.silentRefreshSubject && this.silentRefreshSubject !== claims["sub"]) {
|
|
2151
|
-
const err2 = `After refreshing, we got an id_token for another user (sub). Expected sub: ${this.silentRefreshSubject}, received sub: ${claims["sub"]}`;
|
|
2152
|
-
this.logger.warn(err2);
|
|
2153
|
-
return Promise.reject(err2);
|
|
2154
|
-
}
|
|
2155
|
-
if (!claims.iat) {
|
|
2156
|
-
const err2 = "No iat claim in id_token";
|
|
2157
|
-
this.logger.warn(err2);
|
|
2158
|
-
return Promise.reject(err2);
|
|
2159
|
-
}
|
|
2160
|
-
if (!this.skipIssuerCheck && claims.iss !== this.issuer) {
|
|
2161
|
-
const err2 = "Wrong issuer: " + claims.iss;
|
|
2162
|
-
this.logger.warn(err2);
|
|
2163
|
-
return Promise.reject(err2);
|
|
2164
|
-
}
|
|
2165
|
-
if (!skipNonceCheck && claims.nonce !== savedNonce) {
|
|
2166
|
-
const err2 = "Wrong nonce: " + claims.nonce;
|
|
2167
|
-
this.logger.warn(err2);
|
|
2168
|
-
return Promise.reject(err2);
|
|
2169
|
-
}
|
|
2170
|
-
if (Object.prototype.hasOwnProperty.call(this, "responseType") && (this.responseType === "code" || this.responseType === "id_token")) {
|
|
2171
|
-
this.disableAtHashCheck = true;
|
|
2172
|
-
}
|
|
2173
|
-
if (!this.disableAtHashCheck && this.requestAccessToken && !claims["at_hash"]) {
|
|
2174
|
-
const err2 = "An at_hash is needed!";
|
|
2175
|
-
this.logger.warn(err2);
|
|
2176
|
-
return Promise.reject(err2);
|
|
2177
|
-
}
|
|
2178
|
-
const now = this.dateTimeService.now();
|
|
2179
|
-
const issuedAtMSec = claims.iat * 1e3;
|
|
2180
|
-
const expiresAtMSec = claims.exp * 1e3;
|
|
2181
|
-
const clockSkewInMSec = this.getClockSkewInMsec();
|
|
2182
|
-
if (issuedAtMSec - clockSkewInMSec >= now || expiresAtMSec + clockSkewInMSec - this.decreaseExpirationBySec <= now) {
|
|
2183
|
-
const err2 = "Token has expired";
|
|
2184
|
-
console.error(err2);
|
|
2185
|
-
console.error({
|
|
2186
|
-
now,
|
|
2187
|
-
issuedAtMSec,
|
|
2188
|
-
expiresAtMSec
|
|
2189
|
-
});
|
|
2190
|
-
return Promise.reject(err2);
|
|
2191
|
-
}
|
|
2192
|
-
const validationParams = {
|
|
2193
|
-
accessToken,
|
|
2194
|
-
idToken,
|
|
2195
|
-
jwks: this.jwks,
|
|
2196
|
-
idTokenClaims: claims,
|
|
2197
|
-
idTokenHeader: header,
|
|
2198
|
-
loadKeys: () => this.loadJwks()
|
|
2199
|
-
};
|
|
2200
|
-
if (this.disableAtHashCheck) {
|
|
2201
|
-
return this.checkSignature(validationParams).then(() => {
|
|
2202
|
-
const result = {
|
|
2203
|
-
idToken,
|
|
2204
|
-
idTokenClaims: claims,
|
|
2205
|
-
idTokenClaimsJson: claimsJson,
|
|
2206
|
-
idTokenHeader: header,
|
|
2207
|
-
idTokenHeaderJson: headerJson,
|
|
2208
|
-
idTokenExpiresAt: expiresAtMSec
|
|
2209
|
-
};
|
|
2210
|
-
return result;
|
|
2211
|
-
});
|
|
2212
|
-
}
|
|
2213
|
-
return this.checkAtHash(validationParams).then((atHashValid) => {
|
|
2214
|
-
if (!this.disableAtHashCheck && this.requestAccessToken && !atHashValid) {
|
|
2215
|
-
const err2 = "Wrong at_hash";
|
|
2216
|
-
this.logger.warn(err2);
|
|
2217
|
-
return Promise.reject(err2);
|
|
2218
|
-
}
|
|
2219
|
-
return this.checkSignature(validationParams).then(() => {
|
|
2220
|
-
const atHashCheckEnabled = !this.disableAtHashCheck;
|
|
2221
|
-
const result = {
|
|
2222
|
-
idToken,
|
|
2223
|
-
idTokenClaims: claims,
|
|
2224
|
-
idTokenClaimsJson: claimsJson,
|
|
2225
|
-
idTokenHeader: header,
|
|
2226
|
-
idTokenHeaderJson: headerJson,
|
|
2227
|
-
idTokenExpiresAt: expiresAtMSec
|
|
2228
|
-
};
|
|
2229
|
-
if (atHashCheckEnabled) {
|
|
2230
|
-
return this.checkAtHash(validationParams).then((atHashValid2) => {
|
|
2231
|
-
if (this.requestAccessToken && !atHashValid2) {
|
|
2232
|
-
const err2 = "Wrong at_hash";
|
|
2233
|
-
this.logger.warn(err2);
|
|
2234
|
-
return Promise.reject(err2);
|
|
2235
|
-
} else {
|
|
2236
|
-
return result;
|
|
2237
|
-
}
|
|
2238
|
-
});
|
|
2239
|
-
} else {
|
|
2240
|
-
return result;
|
|
2241
|
-
}
|
|
2242
|
-
});
|
|
2243
|
-
});
|
|
2244
|
-
}
|
|
2245
|
-
/**
|
|
2246
|
-
* Returns the received claims about the user.
|
|
2247
|
-
*/
|
|
2248
|
-
getIdentityClaims() {
|
|
2249
|
-
const claims = this._storage.getItem("id_token_claims_obj");
|
|
2250
|
-
if (!claims) {
|
|
2251
|
-
return null;
|
|
2252
|
-
}
|
|
2253
|
-
return JSON.parse(claims);
|
|
2254
|
-
}
|
|
2255
|
-
/**
|
|
2256
|
-
* Returns the granted scopes from the server.
|
|
2257
|
-
*/
|
|
2258
|
-
getGrantedScopes() {
|
|
2259
|
-
const scopes = this._storage.getItem("granted_scopes");
|
|
2260
|
-
if (!scopes) {
|
|
2261
|
-
return null;
|
|
2262
|
-
}
|
|
2263
|
-
return JSON.parse(scopes);
|
|
2264
|
-
}
|
|
2265
|
-
/**
|
|
2266
|
-
* Returns the current id_token.
|
|
2267
|
-
*/
|
|
2268
|
-
getIdToken() {
|
|
2269
|
-
return this._storage ? this._storage.getItem("id_token") : null;
|
|
2270
|
-
}
|
|
2271
|
-
padBase64(base64data) {
|
|
2272
|
-
while (base64data.length % 4 !== 0) {
|
|
2273
|
-
base64data += "=";
|
|
2274
|
-
}
|
|
2275
|
-
return base64data;
|
|
2276
|
-
}
|
|
2277
|
-
/**
|
|
2278
|
-
* Returns the current access_token.
|
|
2279
|
-
*/
|
|
2280
|
-
getAccessToken() {
|
|
2281
|
-
return this._storage ? this._storage.getItem("access_token") : null;
|
|
2282
|
-
}
|
|
2283
|
-
getRefreshToken() {
|
|
2284
|
-
return this._storage ? this._storage.getItem("refresh_token") : null;
|
|
2285
|
-
}
|
|
2286
|
-
/**
|
|
2287
|
-
* Returns the expiration date of the access_token
|
|
2288
|
-
* as milliseconds since 1970.
|
|
2289
|
-
*/
|
|
2290
|
-
getAccessTokenExpiration() {
|
|
2291
|
-
if (!this._storage.getItem("expires_at")) {
|
|
2292
|
-
return null;
|
|
2293
|
-
}
|
|
2294
|
-
return parseInt(this._storage.getItem("expires_at"), 10);
|
|
2295
|
-
}
|
|
2296
|
-
getAccessTokenStoredAt() {
|
|
2297
|
-
return parseInt(this._storage.getItem("access_token_stored_at"), 10);
|
|
2298
|
-
}
|
|
2299
|
-
getIdTokenStoredAt() {
|
|
2300
|
-
return parseInt(this._storage.getItem("id_token_stored_at"), 10);
|
|
2301
|
-
}
|
|
2302
|
-
/**
|
|
2303
|
-
* Returns the expiration date of the id_token
|
|
2304
|
-
* as milliseconds since 1970.
|
|
2305
|
-
*/
|
|
2306
|
-
getIdTokenExpiration() {
|
|
2307
|
-
if (!this._storage.getItem("id_token_expires_at")) {
|
|
2308
|
-
return null;
|
|
2309
|
-
}
|
|
2310
|
-
return parseInt(this._storage.getItem("id_token_expires_at"), 10);
|
|
2311
|
-
}
|
|
2312
|
-
/**
|
|
2313
|
-
* Checkes, whether there is a valid access_token.
|
|
2314
|
-
*/
|
|
2315
|
-
hasValidAccessToken() {
|
|
2316
|
-
if (this.getAccessToken()) {
|
|
2317
|
-
const expiresAt = this._storage.getItem("expires_at");
|
|
2318
|
-
const now = this.dateTimeService.new();
|
|
2319
|
-
if (expiresAt && parseInt(expiresAt, 10) - this.decreaseExpirationBySec < now.getTime() - this.getClockSkewInMsec()) {
|
|
2320
|
-
return false;
|
|
2321
|
-
}
|
|
2322
|
-
return true;
|
|
2323
|
-
}
|
|
2324
|
-
return false;
|
|
2325
|
-
}
|
|
2326
|
-
/**
|
|
2327
|
-
* Checks whether there is a valid id_token.
|
|
2328
|
-
*/
|
|
2329
|
-
hasValidIdToken() {
|
|
2330
|
-
if (this.getIdToken()) {
|
|
2331
|
-
const expiresAt = this._storage.getItem("id_token_expires_at");
|
|
2332
|
-
const now = this.dateTimeService.new();
|
|
2333
|
-
if (expiresAt && parseInt(expiresAt, 10) - this.decreaseExpirationBySec < now.getTime() - this.getClockSkewInMsec()) {
|
|
2334
|
-
return false;
|
|
2335
|
-
}
|
|
2336
|
-
return true;
|
|
2337
|
-
}
|
|
2338
|
-
return false;
|
|
2339
|
-
}
|
|
2340
|
-
/**
|
|
2341
|
-
* Retrieve a saved custom property of the TokenReponse object. Only if predefined in authconfig.
|
|
2342
|
-
*/
|
|
2343
|
-
getCustomTokenResponseProperty(requestedProperty) {
|
|
2344
|
-
return this._storage && this.config.customTokenParameters && this.config.customTokenParameters.indexOf(requestedProperty) >= 0 && this._storage.getItem(requestedProperty) !== null ? JSON.parse(this._storage.getItem(requestedProperty)) : null;
|
|
2345
|
-
}
|
|
2346
|
-
/**
|
|
2347
|
-
* Returns the auth-header that can be used
|
|
2348
|
-
* to transmit the access_token to a service
|
|
2349
|
-
*/
|
|
2350
|
-
authorizationHeader() {
|
|
2351
|
-
return "Bearer " + this.getAccessToken();
|
|
2352
|
-
}
|
|
2353
|
-
logOut(customParameters = {}, state = "") {
|
|
2354
|
-
let noRedirectToLogoutUrl = false;
|
|
2355
|
-
if (typeof customParameters === "boolean") {
|
|
2356
|
-
noRedirectToLogoutUrl = customParameters;
|
|
2357
|
-
customParameters = {};
|
|
2358
|
-
}
|
|
2359
|
-
const id_token = this.getIdToken();
|
|
2360
|
-
this._storage.removeItem("access_token");
|
|
2361
|
-
this._storage.removeItem("id_token");
|
|
2362
|
-
this._storage.removeItem("refresh_token");
|
|
2363
|
-
if (this.saveNoncesInLocalStorage) {
|
|
2364
|
-
localStorage.removeItem("nonce");
|
|
2365
|
-
localStorage.removeItem("PKCE_verifier");
|
|
2366
|
-
} else {
|
|
2367
|
-
this._storage.removeItem("nonce");
|
|
2368
|
-
this._storage.removeItem("PKCE_verifier");
|
|
2369
|
-
}
|
|
2370
|
-
this._storage.removeItem("expires_at");
|
|
2371
|
-
this._storage.removeItem("id_token_claims_obj");
|
|
2372
|
-
this._storage.removeItem("id_token_expires_at");
|
|
2373
|
-
this._storage.removeItem("id_token_stored_at");
|
|
2374
|
-
this._storage.removeItem("access_token_stored_at");
|
|
2375
|
-
this._storage.removeItem("granted_scopes");
|
|
2376
|
-
this._storage.removeItem("session_state");
|
|
2377
|
-
if (this.config.customTokenParameters) {
|
|
2378
|
-
this.config.customTokenParameters.forEach((customParam) => this._storage.removeItem(customParam));
|
|
2379
|
-
}
|
|
2380
|
-
this.silentRefreshSubject = null;
|
|
2381
|
-
this.eventsSubject.next(new OAuthInfoEvent("logout"));
|
|
2382
|
-
if (!this.logoutUrl) {
|
|
2383
|
-
return;
|
|
2384
|
-
}
|
|
2385
|
-
if (noRedirectToLogoutUrl) {
|
|
2386
|
-
return;
|
|
2387
|
-
}
|
|
2388
|
-
let logoutUrl;
|
|
2389
|
-
if (!this.validateUrlForHttps(this.logoutUrl)) {
|
|
2390
|
-
throw new Error("logoutUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
2391
|
-
}
|
|
2392
|
-
if (this.logoutUrl.indexOf("{{") > -1) {
|
|
2393
|
-
logoutUrl = this.logoutUrl.replace(/\{\{id_token\}\}/, encodeURIComponent(id_token)).replace(/\{\{client_id\}\}/, encodeURIComponent(this.clientId));
|
|
2394
|
-
} else {
|
|
2395
|
-
let params = new import_http.HttpParams({ encoder: new WebHttpUrlEncodingCodec() });
|
|
2396
|
-
if (id_token) {
|
|
2397
|
-
params = params.set("id_token_hint", id_token);
|
|
2398
|
-
}
|
|
2399
|
-
const postLogoutUrl = this.postLogoutRedirectUri || this.redirectUriAsPostLogoutRedirectUriFallback && this.redirectUri || "";
|
|
2400
|
-
if (postLogoutUrl) {
|
|
2401
|
-
params = params.set("post_logout_redirect_uri", postLogoutUrl);
|
|
2402
|
-
if (state) {
|
|
2403
|
-
params = params.set("state", state);
|
|
2404
|
-
}
|
|
2405
|
-
}
|
|
2406
|
-
for (const key in customParameters) {
|
|
2407
|
-
params = params.set(key, customParameters[key]);
|
|
2408
|
-
}
|
|
2409
|
-
logoutUrl = this.logoutUrl + (this.logoutUrl.indexOf("?") > -1 ? "&" : "?") + params.toString();
|
|
2410
|
-
}
|
|
2411
|
-
this.config.openUri(logoutUrl);
|
|
2412
|
-
}
|
|
2413
|
-
/**
|
|
2414
|
-
* @ignore
|
|
2415
|
-
*/
|
|
2416
|
-
createAndSaveNonce() {
|
|
2417
|
-
const that = this;
|
|
2418
|
-
return this.createNonce().then(function(nonce) {
|
|
2419
|
-
if (that.saveNoncesInLocalStorage && typeof window["localStorage"] !== "undefined") {
|
|
2420
|
-
localStorage.setItem("nonce", nonce);
|
|
2421
|
-
} else {
|
|
2422
|
-
that._storage.setItem("nonce", nonce);
|
|
2423
|
-
}
|
|
2424
|
-
return nonce;
|
|
2425
|
-
});
|
|
2426
|
-
}
|
|
2427
|
-
/**
|
|
2428
|
-
* @ignore
|
|
2429
|
-
*/
|
|
2430
|
-
ngOnDestroy() {
|
|
2431
|
-
this.clearAccessTokenTimer();
|
|
2432
|
-
this.clearIdTokenTimer();
|
|
2433
|
-
this.removeSilentRefreshEventListener();
|
|
2434
|
-
const silentRefreshFrame = this.document.getElementById(this.silentRefreshIFrameName);
|
|
2435
|
-
if (silentRefreshFrame) {
|
|
2436
|
-
silentRefreshFrame.remove();
|
|
2437
|
-
}
|
|
2438
|
-
this.stopSessionCheckTimer();
|
|
2439
|
-
this.removeSessionCheckEventListener();
|
|
2440
|
-
const sessionCheckFrame = this.document.getElementById(this.sessionCheckIFrameName);
|
|
2441
|
-
if (sessionCheckFrame) {
|
|
2442
|
-
sessionCheckFrame.remove();
|
|
2443
|
-
}
|
|
2444
|
-
}
|
|
2445
|
-
createNonce() {
|
|
2446
|
-
return new Promise((resolve) => {
|
|
2447
|
-
if (this.rngUrl) {
|
|
2448
|
-
throw new Error("createNonce with rng-web-api has not been implemented so far");
|
|
2449
|
-
}
|
|
2450
|
-
const unreserved = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
|
|
2451
|
-
let size = 45;
|
|
2452
|
-
let id = "";
|
|
2453
|
-
const crypto = typeof self === "undefined" ? null : self.crypto || self["msCrypto"];
|
|
2454
|
-
if (crypto) {
|
|
2455
|
-
let bytes = new Uint8Array(size);
|
|
2456
|
-
crypto.getRandomValues(bytes);
|
|
2457
|
-
if (!bytes.map) {
|
|
2458
|
-
bytes.map = Array.prototype.map;
|
|
2459
|
-
}
|
|
2460
|
-
bytes = bytes.map((x) => unreserved.charCodeAt(x % unreserved.length));
|
|
2461
|
-
id = String.fromCharCode.apply(null, bytes);
|
|
2462
|
-
} else {
|
|
2463
|
-
while (0 < size--) {
|
|
2464
|
-
id += unreserved[Math.random() * unreserved.length | 0];
|
|
2465
|
-
}
|
|
2466
|
-
}
|
|
2467
|
-
resolve(base64UrlEncode(id));
|
|
2468
|
-
});
|
|
2469
|
-
}
|
|
2470
|
-
checkAtHash(params) {
|
|
2471
|
-
return __async(this, null, function* () {
|
|
2472
|
-
if (!this.tokenValidationHandler) {
|
|
2473
|
-
this.logger.warn("No tokenValidationHandler configured. Cannot check at_hash.");
|
|
2474
|
-
return true;
|
|
2475
|
-
}
|
|
2476
|
-
return this.tokenValidationHandler.validateAtHash(params);
|
|
2477
|
-
});
|
|
2478
|
-
}
|
|
2479
|
-
checkSignature(params) {
|
|
2480
|
-
if (!this.tokenValidationHandler) {
|
|
2481
|
-
this.logger.warn("No tokenValidationHandler configured. Cannot check signature.");
|
|
2482
|
-
return Promise.resolve(null);
|
|
2483
|
-
}
|
|
2484
|
-
return this.tokenValidationHandler.validateSignature(params);
|
|
2485
|
-
}
|
|
2486
|
-
/**
|
|
2487
|
-
* Start the implicit flow or the code flow,
|
|
2488
|
-
* depending on your configuration.
|
|
2489
|
-
*/
|
|
2490
|
-
initLoginFlow(additionalState = "", params = {}) {
|
|
2491
|
-
if (this.responseType === "code") {
|
|
2492
|
-
return this.initCodeFlow(additionalState, params);
|
|
2493
|
-
} else {
|
|
2494
|
-
return this.initImplicitFlow(additionalState, params);
|
|
2495
|
-
}
|
|
2496
|
-
}
|
|
2497
|
-
/**
|
|
2498
|
-
* Starts the authorization code flow and redirects to user to
|
|
2499
|
-
* the auth servers login url.
|
|
2500
|
-
*/
|
|
2501
|
-
initCodeFlow(additionalState = "", params = {}) {
|
|
2502
|
-
if (this.loginUrl !== "") {
|
|
2503
|
-
this.initCodeFlowInternal(additionalState, params);
|
|
2504
|
-
} else {
|
|
2505
|
-
this.events.pipe((0, import_operators.filter)((e) => e.type === "discovery_document_loaded")).subscribe(() => this.initCodeFlowInternal(additionalState, params));
|
|
2506
|
-
}
|
|
2507
|
-
}
|
|
2508
|
-
initCodeFlowInternal(additionalState = "", params = {}) {
|
|
2509
|
-
if (!this.validateUrlForHttps(this.loginUrl)) {
|
|
2510
|
-
throw new Error("loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).");
|
|
2511
|
-
}
|
|
2512
|
-
let addParams = {};
|
|
2513
|
-
let loginHint = null;
|
|
2514
|
-
if (typeof params === "string") {
|
|
2515
|
-
loginHint = params;
|
|
2516
|
-
} else if (typeof params === "object") {
|
|
2517
|
-
addParams = params;
|
|
2518
|
-
}
|
|
2519
|
-
this.createLoginUrl(additionalState, loginHint, null, false, addParams).then(this.config.openUri).catch((error) => {
|
|
2520
|
-
console.error("Error in initAuthorizationCodeFlow");
|
|
2521
|
-
console.error(error);
|
|
2522
|
-
});
|
|
2523
|
-
}
|
|
2524
|
-
createChallangeVerifierPairForPKCE() {
|
|
2525
|
-
return __async(this, null, function* () {
|
|
2526
|
-
if (!this.crypto) {
|
|
2527
|
-
throw new Error("PKCE support for code flow needs a CryptoHander. Did you import the OAuthModule using forRoot() ?");
|
|
2528
|
-
}
|
|
2529
|
-
const verifier = yield this.createNonce();
|
|
2530
|
-
const challengeRaw = yield this.crypto.calcHash(verifier, "sha-256");
|
|
2531
|
-
const challenge = base64UrlEncode(challengeRaw);
|
|
2532
|
-
return [challenge, verifier];
|
|
2533
|
-
});
|
|
2534
|
-
}
|
|
2535
|
-
extractRecognizedCustomParameters(tokenResponse) {
|
|
2536
|
-
const foundParameters = /* @__PURE__ */ new Map();
|
|
2537
|
-
if (!this.config.customTokenParameters) {
|
|
2538
|
-
return foundParameters;
|
|
2539
|
-
}
|
|
2540
|
-
this.config.customTokenParameters.forEach((recognizedParameter) => {
|
|
2541
|
-
if (tokenResponse[recognizedParameter]) {
|
|
2542
|
-
foundParameters.set(recognizedParameter, JSON.stringify(tokenResponse[recognizedParameter]));
|
|
2543
|
-
}
|
|
2544
|
-
});
|
|
2545
|
-
return foundParameters;
|
|
2546
|
-
}
|
|
2547
|
-
/**
|
|
2548
|
-
* Revokes the auth token to secure the vulnarability
|
|
2549
|
-
* of the token issued allowing the authorization server to clean
|
|
2550
|
-
* up any security credentials associated with the authorization
|
|
2551
|
-
*/
|
|
2552
|
-
revokeTokenAndLogout(customParameters = {}, ignoreCorsIssues = false) {
|
|
2553
|
-
const revokeEndpoint = this.revocationEndpoint;
|
|
2554
|
-
const accessToken = this.getAccessToken();
|
|
2555
|
-
const refreshToken = this.getRefreshToken();
|
|
2556
|
-
if (!accessToken) {
|
|
2557
|
-
return Promise.resolve();
|
|
2558
|
-
}
|
|
2559
|
-
let params = new import_http.HttpParams({ encoder: new WebHttpUrlEncodingCodec() });
|
|
2560
|
-
let headers = new import_http.HttpHeaders().set("Content-Type", "application/x-www-form-urlencoded");
|
|
2561
|
-
if (this.useHttpBasicAuth) {
|
|
2562
|
-
const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);
|
|
2563
|
-
headers = headers.set("Authorization", "Basic " + header);
|
|
2564
|
-
}
|
|
2565
|
-
if (!this.useHttpBasicAuth) {
|
|
2566
|
-
params = params.set("client_id", this.clientId);
|
|
2567
|
-
}
|
|
2568
|
-
if (!this.useHttpBasicAuth && this.dummyClientSecret) {
|
|
2569
|
-
params = params.set("client_secret", this.dummyClientSecret);
|
|
2570
|
-
}
|
|
2571
|
-
if (this.customQueryParams) {
|
|
2572
|
-
for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {
|
|
2573
|
-
params = params.set(key, this.customQueryParams[key]);
|
|
2574
|
-
}
|
|
2575
|
-
}
|
|
2576
|
-
return new Promise((resolve, reject) => {
|
|
2577
|
-
let revokeAccessToken;
|
|
2578
|
-
let revokeRefreshToken;
|
|
2579
|
-
if (accessToken) {
|
|
2580
|
-
const revokationParams = params.set("token", accessToken).set("token_type_hint", "access_token");
|
|
2581
|
-
revokeAccessToken = this.http.post(revokeEndpoint, revokationParams, { headers });
|
|
2582
|
-
} else {
|
|
2583
|
-
revokeAccessToken = (0, import_rxjs.of)(null);
|
|
2584
|
-
}
|
|
2585
|
-
if (refreshToken) {
|
|
2586
|
-
const revokationParams = params.set("token", refreshToken).set("token_type_hint", "refresh_token");
|
|
2587
|
-
revokeRefreshToken = this.http.post(revokeEndpoint, revokationParams, { headers });
|
|
2588
|
-
} else {
|
|
2589
|
-
revokeRefreshToken = (0, import_rxjs.of)(null);
|
|
2590
|
-
}
|
|
2591
|
-
if (ignoreCorsIssues) {
|
|
2592
|
-
revokeAccessToken = revokeAccessToken.pipe((0, import_operators.catchError)((err2) => {
|
|
2593
|
-
if (err2.status === 0) {
|
|
2594
|
-
return (0, import_rxjs.of)(null);
|
|
2595
|
-
}
|
|
2596
|
-
return (0, import_rxjs.throwError)(err2);
|
|
2597
|
-
}));
|
|
2598
|
-
revokeRefreshToken = revokeRefreshToken.pipe((0, import_operators.catchError)((err2) => {
|
|
2599
|
-
if (err2.status === 0) {
|
|
2600
|
-
return (0, import_rxjs.of)(null);
|
|
2601
|
-
}
|
|
2602
|
-
return (0, import_rxjs.throwError)(err2);
|
|
2603
|
-
}));
|
|
2604
|
-
}
|
|
2605
|
-
(0, import_rxjs.combineLatest)([revokeAccessToken, revokeRefreshToken]).subscribe((res) => {
|
|
2606
|
-
this.logOut(customParameters);
|
|
2607
|
-
resolve(res);
|
|
2608
|
-
this.logger.info("Token successfully revoked");
|
|
2609
|
-
}, (err2) => {
|
|
2610
|
-
this.logger.error("Error revoking token", err2);
|
|
2611
|
-
this.eventsSubject.next(new OAuthErrorEvent("token_revoke_error", err2));
|
|
2612
|
-
reject(err2);
|
|
2613
|
-
});
|
|
2614
|
-
});
|
|
2615
|
-
}
|
|
2616
|
-
/**
|
|
2617
|
-
* Clear location.hash if it's present
|
|
2618
|
-
*/
|
|
2619
|
-
clearLocationHash() {
|
|
2620
|
-
if (location.hash != "") {
|
|
2621
|
-
location.hash = "";
|
|
2622
|
-
}
|
|
2623
|
-
}
|
|
2624
|
-
};
|
|
2625
|
-
_OAuthService.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _OAuthService, deps: [{ token: i0.NgZone }, { token: i1.HttpClient }, { token: OAuthStorage, optional: true }, { token: ValidationHandler, optional: true }, { token: AuthConfig, optional: true }, { token: UrlHelperService }, { token: OAuthLogger }, { token: HashHandler, optional: true }, { token: import_common.DOCUMENT }, { token: DateTimeProvider }], target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
2626
|
-
_OAuthService.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _OAuthService });
|
|
2627
|
-
let OAuthService = _OAuthService;
|
|
2628
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: OAuthService, decorators: [{
|
|
2629
|
-
type: import_core.Injectable
|
|
2630
|
-
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.HttpClient }, { type: OAuthStorage, decorators: [{
|
|
2631
|
-
type: import_core.Optional
|
|
2632
|
-
}] }, { type: ValidationHandler, decorators: [{
|
|
2633
|
-
type: import_core.Optional
|
|
2634
|
-
}] }, { type: AuthConfig, decorators: [{
|
|
2635
|
-
type: import_core.Optional
|
|
2636
|
-
}] }, { type: UrlHelperService }, { type: OAuthLogger }, { type: HashHandler, decorators: [{
|
|
2637
|
-
type: import_core.Optional
|
|
2638
|
-
}] }, { type: Document, decorators: [{
|
|
2639
|
-
type: import_core.Inject,
|
|
2640
|
-
args: [import_common.DOCUMENT]
|
|
2641
|
-
}] }, { type: DateTimeProvider }] });
|
|
2642
|
-
class OAuthResourceServerErrorHandler {
|
|
2643
|
-
}
|
|
2644
|
-
class OAuthNoopResourceServerErrorHandler {
|
|
2645
|
-
handleError(err2) {
|
|
2646
|
-
return (0, import_rxjs.throwError)(err2);
|
|
2647
|
-
}
|
|
2648
|
-
}
|
|
2649
|
-
const _DefaultOAuthInterceptor = class _DefaultOAuthInterceptor {
|
|
2650
|
-
constructor(oAuthService, errorHandler, moduleConfig) {
|
|
2651
|
-
this.oAuthService = oAuthService;
|
|
2652
|
-
this.errorHandler = errorHandler;
|
|
2653
|
-
this.moduleConfig = moduleConfig;
|
|
2654
|
-
}
|
|
2655
|
-
checkUrl(url) {
|
|
2656
|
-
if (this.moduleConfig.resourceServer.customUrlValidation) {
|
|
2657
|
-
return this.moduleConfig.resourceServer.customUrlValidation(url);
|
|
2658
|
-
}
|
|
2659
|
-
if (this.moduleConfig.resourceServer.allowedUrls) {
|
|
2660
|
-
return !!this.moduleConfig.resourceServer.allowedUrls.find((u) => url.toLowerCase().startsWith(u.toLowerCase()));
|
|
2661
|
-
}
|
|
2662
|
-
return true;
|
|
2663
|
-
}
|
|
2664
|
-
intercept(req, next) {
|
|
2665
|
-
const url = req.url.toLowerCase();
|
|
2666
|
-
if (!this.moduleConfig || !this.moduleConfig.resourceServer || !this.checkUrl(url)) {
|
|
2667
|
-
return next.handle(req);
|
|
2668
|
-
}
|
|
2669
|
-
const sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;
|
|
2670
|
-
if (!sendAccessToken) {
|
|
2671
|
-
return next.handle(req).pipe((0, import_operators.catchError)((err2) => this.errorHandler.handleError(err2)));
|
|
2672
|
-
}
|
|
2673
|
-
return (0, import_rxjs.merge)((0, import_rxjs.of)(this.oAuthService.getAccessToken()).pipe((0, import_operators.filter)((token) => !!token)), this.oAuthService.events.pipe(
|
|
2674
|
-
(0, import_operators.filter)((e) => e.type === "token_received"),
|
|
2675
|
-
(0, import_operators.timeout)(this.oAuthService.waitForTokenInMsec || 0),
|
|
2676
|
-
(0, import_operators.catchError)(() => (0, import_rxjs.of)(null)),
|
|
2677
|
-
// timeout is not an error
|
|
2678
|
-
(0, import_operators.map)(() => this.oAuthService.getAccessToken())
|
|
2679
|
-
)).pipe((0, import_operators.take)(1), (0, import_operators.mergeMap)((token) => {
|
|
2680
|
-
if (token) {
|
|
2681
|
-
const header = "Bearer " + token;
|
|
2682
|
-
const headers = req.headers.set("Authorization", header);
|
|
2683
|
-
req = req.clone({ headers });
|
|
2684
|
-
}
|
|
2685
|
-
return next.handle(req).pipe((0, import_operators.catchError)((err2) => this.errorHandler.handleError(err2)));
|
|
2686
|
-
}));
|
|
2687
|
-
}
|
|
2688
|
-
};
|
|
2689
|
-
_DefaultOAuthInterceptor.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _DefaultOAuthInterceptor, deps: [{ token: OAuthService }, { token: OAuthResourceServerErrorHandler }, { token: OAuthModuleConfig, optional: true }], target: i0.\u0275\u0275FactoryTarget.Injectable });
|
|
2690
|
-
_DefaultOAuthInterceptor.\u0275prov = i0.\u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _DefaultOAuthInterceptor });
|
|
2691
|
-
let DefaultOAuthInterceptor = _DefaultOAuthInterceptor;
|
|
2692
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: DefaultOAuthInterceptor, decorators: [{
|
|
2693
|
-
type: import_core.Injectable
|
|
2694
|
-
}], ctorParameters: () => [{ type: OAuthService }, { type: OAuthResourceServerErrorHandler }, { type: OAuthModuleConfig, decorators: [{
|
|
2695
|
-
type: import_core.Optional
|
|
2696
|
-
}] }] });
|
|
2697
|
-
function createDefaultLogger() {
|
|
2698
|
-
return console;
|
|
2699
|
-
}
|
|
2700
|
-
function createDefaultStorage() {
|
|
2701
|
-
return typeof sessionStorage !== "undefined" ? sessionStorage : new MemoryStorage();
|
|
2702
|
-
}
|
|
2703
|
-
function provideOAuthClient(config = null, validationHandlerClass = NullValidationHandler) {
|
|
2704
|
-
return (0, import_core.makeEnvironmentProviders)([
|
|
2705
|
-
OAuthService,
|
|
2706
|
-
UrlHelperService,
|
|
2707
|
-
{ provide: OAuthLogger, useFactory: createDefaultLogger },
|
|
2708
|
-
{ provide: OAuthStorage, useFactory: createDefaultStorage },
|
|
2709
|
-
{ provide: ValidationHandler, useClass: validationHandlerClass },
|
|
2710
|
-
{ provide: HashHandler, useClass: DefaultHashHandler },
|
|
2711
|
-
{
|
|
2712
|
-
provide: OAuthResourceServerErrorHandler,
|
|
2713
|
-
useClass: OAuthNoopResourceServerErrorHandler
|
|
2714
|
-
},
|
|
2715
|
-
{ provide: OAuthModuleConfig, useValue: config },
|
|
2716
|
-
{
|
|
2717
|
-
provide: import_http.HTTP_INTERCEPTORS,
|
|
2718
|
-
useClass: DefaultOAuthInterceptor,
|
|
2719
|
-
multi: true
|
|
2720
|
-
},
|
|
2721
|
-
{ provide: DateTimeProvider, useClass: SystemDateTimeProvider }
|
|
2722
|
-
]);
|
|
2723
|
-
}
|
|
2724
|
-
const _OAuthModule = class _OAuthModule {
|
|
2725
|
-
static forRoot(config = null, validationHandlerClass = NullValidationHandler) {
|
|
2726
|
-
return {
|
|
2727
|
-
ngModule: _OAuthModule,
|
|
2728
|
-
providers: [provideOAuthClient(config, validationHandlerClass)]
|
|
2729
|
-
};
|
|
2730
|
-
}
|
|
2731
|
-
};
|
|
2732
|
-
_OAuthModule.\u0275fac = i0.\u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _OAuthModule, deps: [], target: i0.\u0275\u0275FactoryTarget.NgModule });
|
|
2733
|
-
_OAuthModule.\u0275mod = i0.\u0275\u0275ngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.1", ngImport: i0, type: _OAuthModule, imports: [import_common.CommonModule] });
|
|
2734
|
-
_OAuthModule.\u0275inj = i0.\u0275\u0275ngDeclareInjector({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: _OAuthModule, imports: [import_common.CommonModule] });
|
|
2735
|
-
let OAuthModule = _OAuthModule;
|
|
2736
|
-
i0.\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: OAuthModule, decorators: [{
|
|
2737
|
-
type: import_core.NgModule,
|
|
2738
|
-
args: [{
|
|
2739
|
-
imports: [import_common.CommonModule],
|
|
2740
|
-
declarations: [],
|
|
2741
|
-
exports: []
|
|
2742
|
-
}]
|
|
2743
|
-
}] });
|
|
2744
|
-
const err = `PLEASE READ THIS CAREFULLY:
|
|
2745
|
-
|
|
2746
|
-
Beginning with angular-oauth2-oidc version 9, the JwksValidationHandler
|
|
2747
|
-
has been moved to an library of its own. If you need it for implementing
|
|
2748
|
-
OAuth2/OIDC **implicit flow**, please install it using npm:
|
|
2749
|
-
|
|
2750
|
-
npm i angular-oauth2-oidc-jwks --save
|
|
2751
|
-
|
|
2752
|
-
After that, you can import it into your application:
|
|
2753
|
-
|
|
2754
|
-
import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';
|
|
2755
|
-
|
|
2756
|
-
Please note, that this dependency is not needed for the **code flow**,
|
|
2757
|
-
which is nowadays the **recommented** one for single page applications.
|
|
2758
|
-
This also results in smaller bundle sizes.
|
|
2759
|
-
`;
|
|
2760
|
-
class JwksValidationHandler extends NullValidationHandler {
|
|
2761
|
-
constructor() {
|
|
2762
|
-
super();
|
|
2763
|
-
console.error(err);
|
|
2764
|
-
}
|
|
2765
|
-
}
|
|
2766
|
-
const AUTH_CONFIG = new import_core.InjectionToken("AUTH_CONFIG");
|