@redhat-cloud-services/frontend-components-config-utilities 2.0.0-beta.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/federated-modules.js +4 -2
- package/package.json +2 -1
- package/repos/insights-chrome-build/58231b16fdee45a03a4ee3cf94a9f2c3 +3 -6
- package/repos/insights-chrome-build/app.info.json +5 -5
- package/repos/insights-chrome-build/index.html +4 -4
- package/repos/insights-chrome-build/js/79c835ddc356c3ef.woff +0 -0
- package/repos/insights-chrome-build/js/8f3e80eba644e3ec.svg +33 -0
- package/repos/insights-chrome-build/js/{_e6c7-_c8e2-_e6f2-_f5f0-_baa3-_f5b3-_9609-_7327-_e64b-_1dc3-_5da5-_cf22-_9531-_be8c-_50cd-_d0-cdab65.c1dc7ccd468c8c55255f.js → _c74b-_e0c3-_9cf0-_3467-_8add-_2900-_a7bc-_70d9-_eea3-_8afc-_d73e-_1a3c-_2385-_85ca-_5c4f-_0f-35898c0.b3f9836f62184986.js} +95 -95
- package/repos/insights-chrome-build/js/_c74b-_e0c3-_9cf0-_3467-_8add-_2900-_a7bc-_70d9-_eea3-_8afc-_d73e-_1a3c-_2385-_85ca-_5c4f-_0f-35898c1.b3f9836f62184986.js +943 -0
- package/repos/insights-chrome-build/js/ajs-destination.b3f9836f62184986.js +594 -0
- package/repos/insights-chrome-build/js/{auto-track.c1dc7ccd468c8c55255f.js → auto-track.b3f9836f62184986.js} +3 -3
- package/repos/insights-chrome-build/js/cb827f53cc6d6dcf.woff2 +0 -0
- package/repos/insights-chrome-build/js/{chrome.c1dc7ccd468c8c55255f.js → chrome-root.b3f9836f62184986.js} +10486 -90
- package/repos/insights-chrome-build/js/{chrome-root.c1dc7ccd468c8c55255f.js → chrome.b3f9836f62184986.js} +112 -102
- package/repos/insights-chrome-build/js/fed-mods.json +7 -10
- package/repos/insights-chrome-build/js/{main.c1dc7ccd468c8c55255f.css → main.b3f9836f62184986.css} +841 -1094
- package/repos/insights-chrome-build/js/node_modules_hoist-non-react-statics_dist_hoist-non-react-statics_cjs_js.b3f9836f62184986.js +323 -0
- package/repos/insights-chrome-build/js/node_modules_lodash_isEqual_js.b3f9836f62184986.js +48 -0
- package/repos/insights-chrome-build/js/{node_modules_patternfly_react-icons_dist_js_icons_bars-icon_js-node_modules_patternfly_react--73ba53.c1dc7ccd468c8c55255f.js → node_modules_patternfly_react-icons_dist_js_icons_bars-icon_js-node_modules_patternfly_react--0a3495.b3f9836f62184986.js} +91 -7
- package/repos/insights-chrome-build/js/{queryString.c1dc7ccd468c8c55255f.js → queryString.b3f9836f62184986.js} +49 -5
- package/repos/insights-chrome-build/js/quick-start.b3f9836f62184986.js +47 -0
- package/repos/insights-chrome-build/js/{schemaFilter.c1dc7ccd468c8c55255f.js → schemaFilter.b3f9836f62184986.js} +4 -2
- package/repos/insights-chrome-build/js/src_bootstrap_tsx-src_moduleOverrides_unfetch_ts-node_modules_redhat-cloud-services_frontend--275e6e.b3f9836f62184986.css +27041 -0
- package/repos/insights-chrome-build/js/src_bootstrap_tsx-src_moduleOverrides_unfetch_ts-node_modules_redhat-cloud-services_frontend--275e6e.b3f9836f62184986.js +20468 -0
- package/repos/insights-chrome-build/js/src_components_Debugger_index_ts.b3f9836f62184986.css +52 -0
- package/repos/insights-chrome-build/js/src_components_Debugger_index_ts.b3f9836f62184986.js +512 -0
- package/repos/insights-chrome-build/js/src_components_FavoriteServices_EmptyState_tsx-src_hooks_useFavoritedServices_ts.b3f9836f62184986.css +8664 -0
- package/repos/insights-chrome-build/js/src_components_FavoriteServices_EmptyState_tsx-src_hooks_useFavoritedServices_ts.b3f9836f62184986.js +5098 -0
- package/repos/insights-chrome-build/js/src_components_FavoriteServices_LandingNavFavorites_tsx-src_utils_common_ts.b3f9836f62184986.css +8662 -0
- package/repos/insights-chrome-build/js/src_components_FavoriteServices_LandingNavFavorites_tsx-src_utils_common_ts.b3f9836f62184986.js +898 -0
- package/repos/insights-chrome-build/js/src_components_NotEntitledModal_index_tsx.b3f9836f62184986.css +30 -0
- package/repos/insights-chrome-build/js/src_components_NotEntitledModal_index_tsx.b3f9836f62184986.js +237 -0
- package/repos/insights-chrome-build/js/src_components_QuickstartsCatalogRoute_index_ts.b3f9836f62184986.js +106 -0
- package/repos/insights-chrome-build/js/{src_js_App_Stratosphere_ProductSelection_tsx.c1dc7ccd468c8c55255f.css → src_components_Stratosphere_ProductSelection_tsx.b3f9836f62184986.css} +105 -1375
- package/repos/insights-chrome-build/js/src_components_Stratosphere_ProductSelection_tsx.b3f9836f62184986.js +335 -0
- package/repos/insights-chrome-build/js/src_moduleOverrides_chart-utils-override_js-src_pdf_DownloadButton_tsx-webpack_sharing_consum-3a44a6.b3f9836f62184986.js +91 -0
- package/repos/insights-chrome-build/js/{ajs-destination.c1dc7ccd468c8c55255f.js → tsub-middleware.b3f9836f62184986.js} +800 -820
- package/repos/insights-chrome-build/js/vendors-node_modules_buffer_index_js-node_modules_lodash__baseFlatten_js-node_modules_lodash_-1de864.b3f9836f62184986.js +2552 -0
- package/repos/insights-chrome-build/js/vendors-node_modules_hoist-non-react-statics_dist_hoist-non-react-statics_cjs_js-node_modules-c053fb.b3f9836f62184986.js +1761 -0
- package/repos/insights-chrome-build/js/vendors-node_modules_inherits_inherits_browser_js-node_modules_lodash__baseMerge_js-node_modu-5ed1a1.b3f9836f62184986.js +1113 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_base64-js_index_js-node_modules_lodash__baseFlatten_js-node_modules_loda-c4069d.c1dc7ccd468c8c55255f.js → vendors-node_modules_lodash__baseForOwn_js-node_modules_lodash__baseIteratee_js-node_modules_-167437.b3f9836f62184986.js} +1 -425
- package/repos/insights-chrome-build/js/vendors-node_modules_openshift_dynamic-plugin-sdk_dist_index_js.b3f9836f62184986.js +17197 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_patternfly_quickstarts_dist_index_es_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_patternfly_quickstarts_dist_index_es_js.b3f9836f62184986.js} +220 -242
- package/repos/insights-chrome-build/js/{vendors-node_modules_redhat-cloud-services_frontend-components-pdf-generator_dist_esm_index_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_patternfly_react-charts_dist_esm_components_ChartUtils_chart-theme_js-no-998b15.b3f9836f62184986.js} +138718 -121207
- package/repos/insights-chrome-build/js/{vendors-node_modules_patternfly_react-core_dist_esm_components_Spinner_Spinner_js-node_module-1e699f.c1dc7ccd468c8c55255f.js → vendors-node_modules_patternfly_react-core_dist_esm_components_Button_Button_js-node_modules_-6763c7.b3f9836f62184986.js} +2130 -266
- package/repos/insights-chrome-build/js/{vendors-node_modules_patternfly_react-core_dist_esm_index_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_patternfly_react-core_dist_esm_index_js.b3f9836f62184986.js} +3266 -3190
- package/repos/insights-chrome-build/js/vendors-node_modules_patternfly_react-core_next_components_Select_Select_js-node_modules_patt-da466d.b3f9836f62184986.js +4946 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_patternfly_react-icons_dist_esm_icons_external-link-alt-icon_js-node_mod-b94988.c1dc7ccd468c8c55255f.js → vendors-node_modules_patternfly_react-icons_dist_esm_icons_bell-slash-icon_js-node_modules_pa-6de3ff.b3f9836f62184986.js} +66729 -43554
- package/repos/insights-chrome-build/js/vendors-node_modules_patternfly_react-icons_dist_esm_icons_star-icon_js-node_modules_axios_in-5a9fd5.b3f9836f62184986.js +2881 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_prop-types_index_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_prop-types_index_js.b3f9836f62184986.js} +0 -208
- package/repos/insights-chrome-build/js/{vendors-node_modules_react-redux_es_index_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_react-redux_es_index_js.b3f9836f62184986.js} +1131 -955
- package/repos/insights-chrome-build/js/vendors-node_modules_react-router-dom_dist_index_js.b3f9836f62184986.js +6691 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_classnames_index_js-node_modules_react_jsx-runtime_js-node_modules_babel-163bf5.c1dc7ccd468c8c55255f.js → vendors-node_modules_react_jsx-runtime_js.b3f9836f62184986.js} +3 -164
- package/repos/insights-chrome-build/js/vendors-node_modules_redhat-cloud-services_chrome_esm_index_js.b3f9836f62184986.js +708 -0
- package/repos/insights-chrome-build/js/vendors-node_modules_redhat-cloud-services_frontend-components-utilities_esm_interceptors_int-b5fffe.b3f9836f62184986.js +21636 -0
- package/repos/insights-chrome-build/js/vendors-node_modules_scalprum_core_dist_esm_index_js.b3f9836f62184986.js +363 -0
- package/repos/insights-chrome-build/js/{vendors-node_modules_scalprum_react-core_dist_esm_index_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_scalprum_react-core_dist_esm_index_js.b3f9836f62184986.js} +258 -442
- package/repos/insights-chrome-build/js/{vendors-node_modules_tslib_tslib_es6_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_tslib_tslib_es6_js.b3f9836f62184986.js} +16 -16
- package/repos/insights-chrome-build/js/{vendors-node_modules_unleash_proxy-client-react_dist_index_browser_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_unleash_proxy-client-react_dist_index_browser_js.b3f9836f62184986.js} +174 -123
- package/search-ignored-styles.js +26 -9
- package/repos/insights-chrome-build/js/0140846175072d73db39.woff +0 -0
- package/repos/insights-chrome-build/js/e888fa788db9794c334f.woff2 +0 -0
- package/repos/insights-chrome-build/js/middleware.c1dc7ccd468c8c55255f.js +0 -138
- package/repos/insights-chrome-build/js/node_modules_hoist-non-react-statics_dist_hoist-non-react-statics_cjs_js-node_modules_babel_r-4097d5.c1dc7ccd468c8c55255f.js +0 -195
- package/repos/insights-chrome-build/js/quick-start.c1dc7ccd468c8c55255f.js +0 -33
- package/repos/insights-chrome-build/js/src_js_App_Routes_QuickstartsCatalogRoute_js.c1dc7ccd468c8c55255f.js +0 -79
- package/repos/insights-chrome-build/js/src_js_App_Sidenav_LandingNav_js.c1dc7ccd468c8c55255f.css +0 -17
- package/repos/insights-chrome-build/js/src_js_App_Sidenav_LandingNav_js.c1dc7ccd468c8c55255f.js +0 -129
- package/repos/insights-chrome-build/js/src_js_App_Sidenav_Navigation_componentMapper_js.c1dc7ccd468c8c55255f.js +0 -750
- package/repos/insights-chrome-build/js/src_js_App_Sidenav_Navigation_index_js.c1dc7ccd468c8c55255f.js +0 -416
- package/repos/insights-chrome-build/js/src_js_App_Stratosphere_ProductSelection_tsx.c1dc7ccd468c8c55255f.js +0 -283
- package/repos/insights-chrome-build/js/src_js_bootstrap_js-src_js_unfetch_index_js-node_modules_redhat-cloud-services_frontend-compo-d86d1e.c1dc7ccd468c8c55255f.css +0 -921
- package/repos/insights-chrome-build/js/src_js_bootstrap_js-src_js_unfetch_index_js-node_modules_redhat-cloud-services_frontend-compo-d86d1e.c1dc7ccd468c8c55255f.js +0 -8466
- package/repos/insights-chrome-build/js/src_js_inventory_modules_AppInfo_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_inventory_modules_DetailWrapper_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryDetailHead_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryDetail_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryTable_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_inventory_modules_TagWithDialog_js.c1dc7ccd468c8c55255f.js +0 -182
- package/repos/insights-chrome-build/js/src_js_jwt_insights_offline_ts-src_js_jwt_jwt_ts.c1dc7ccd468c8c55255f.js +0 -1589
- package/repos/insights-chrome-build/js/src_js_jwt_modules_useChromeAuth_ts.c1dc7ccd468c8c55255f.js +0 -64
- package/repos/insights-chrome-build/js/src_js_overrides_chart-utils-override_js-src_js_pdf_DownloadButton_js-webpack_sharing_consume-5c7286.c1dc7ccd468c8c55255f.js +0 -119
- package/repos/insights-chrome-build/js/vendors-node_modules_babel_runtime_regenerator_index_js-node_modules_buffer_index_js-node_mod-aceb88.c1dc7ccd468c8c55255f.js +0 -5787
- package/repos/insights-chrome-build/js/vendors-node_modules_history_esm_history_js.c1dc7ccd468c8c55255f.js +0 -1148
- package/repos/insights-chrome-build/js/vendors-node_modules_patternfly_react-core_dist_esm_components_Button_Button_js-node_modules_-6fa0b5.c1dc7ccd468c8c55255f.js +0 -1346
- package/repos/insights-chrome-build/js/vendors-node_modules_react-router-dom_esm_react-router-dom_js.c1dc7ccd468c8c55255f.js +0 -360
- package/repos/insights-chrome-build/js/vendors-node_modules_react-router_esm_react-router_js.c1dc7ccd468c8c55255f.js +0 -1466
- package/repos/insights-chrome-build/js/vendors-node_modules_redhat-cloud-services_entitlements-client_dist_index_js-node_modules_red-0a1887.c1dc7ccd468c8c55255f.js +0 -27710
- /package/repos/insights-chrome-build/js/{4e58e730f447f9d6a422.woff2 → 00e10699d4604274.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{54b2e33870ba270ba774.woff2 → 03be9971fdd08ef3.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{ab4371a522c3fce8ad2d.woff2 → 05294d67f8e33aab.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{60cc25d4be2d99536ede.woff2 → 091b27e83c831713.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{164a0ab4c909b911c99b.woff → 0d54864d782470c6.woff} +0 -0
- /package/repos/insights-chrome-build/js/{65deba23a8337b21a451.woff2 → 0d5f5f4e3bbf47e1.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{732b5ddbe8d56f5462b6.woff → 1039d3d8000f2c4b.woff} +0 -0
- /package/repos/insights-chrome-build/js/{246cf166b6945bf1c584.woff2 → 13f6558f31b2ee0f.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{d6b6f0c7a2af826d139d.woff → 1412957e204a8a1a.woff} +0 -0
- /package/repos/insights-chrome-build/js/{0239b22511e2cbe0741a.woff → 17802e9fb8c2dd3c.woff} +0 -0
- /package/repos/insights-chrome-build/js/{23fc486b36786bafb3d3.woff → 1be1bd18c67d1ac8.woff} +0 -0
- /package/repos/insights-chrome-build/js/{cf06a52fa81e76cc6b01.woff2 → 26409b4397ab88cc.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{59058fe454d37a189fb9.woff2 → 278473d290fcbf3b.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{549231141115a61fa57d.woff → 2a96d5b208c56fa6.woff} +0 -0
- /package/repos/insights-chrome-build/js/{269ca6c83388f975ccfa.woff2 → 2baac3a5d7ab7a15.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{ac4ae66cc059959cf8b7.woff → 316d3d41de174f24.woff} +0 -0
- /package/repos/insights-chrome-build/js/{323f30b3399fdc516b30.woff2 → 3239d74dcb174610.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{1904b4e1c18b4fc19778.woff → 326f107b61d32769.woff} +0 -0
- /package/repos/insights-chrome-build/js/{69bf841bb989a0010972.woff2 → 49ee635c956449ea.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{e693bff1704e699eb7e2.woff2 → 4ace320f5eaa7ee9.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{44d0c66e3d5040be8378.woff2 → 4b0d8eeb01c2f27e.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{8192be77a1809074aa20.svg → 4df2ca3d94d759b3.svg} +0 -0
- /package/repos/insights-chrome-build/js/{4a43a00f1c0c63f396ee.woff2 → 52f482efb5487bba.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{9db3d5976ae23546bbec.woff2 → 64b9a14b3398824f.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{95fdf61ffc45f12737c2.woff2 → 66309a34eac8b284.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{7150021df2ae6bcf6c17.woff2 → 6e30b223886d1eef.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{9abd7afa35218a435d29.woff2 → 6fb4e4e104bb886f.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{7799d9401910e36d7bb2.woff → 703c721f27900006.woff} +0 -0
- /package/repos/insights-chrome-build/js/{e7bea4af7086ce0144fc.woff → 7a0809e40bf8e79a.woff} +0 -0
- /package/repos/insights-chrome-build/js/{09bac349bc9aa9b72bbe.woff2 → 7a9fb47c5b35e50d.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{77929aa7a8bd4b667229.woff → 7bb3ddb0583cc7a5.woff} +0 -0
- /package/repos/insights-chrome-build/js/{3cd11726d843ff40c40b.woff → 7bf300b28414f3ad.woff} +0 -0
- /package/repos/insights-chrome-build/js/{e3438b1458a26c814ae6.woff2 → 7d9b027229967149.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{e9d4a1e9285e4454ef7e.woff → 81245ab8c867ea09.woff} +0 -0
- /package/repos/insights-chrome-build/js/{800277ea3e98b616b60f.woff → 830dcb2cc707ae4c.woff} +0 -0
- /package/repos/insights-chrome-build/js/{c0276d79b017a9c2476b.woff → 835112a9ba0d676e.woff} +0 -0
- /package/repos/insights-chrome-build/js/{7b7bb91c0af148738090.woff2 → 8f765508913b945e.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{817d3df17057373e2c46.woff → 91bbac2b6e0eb739.woff} +0 -0
- /package/repos/insights-chrome-build/js/{89a09f63411d174b18ea.woff2 → 96971d99ef5f2ef7.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{8d723ad7cfca2dfffacb.woff → a14c79bac597c758.woff} +0 -0
- /package/repos/insights-chrome-build/js/{c2b7c03209f0d3558e85.woff2 → a86c2bca47a21ff0.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{db4223ab0faaec898da7.woff → ad4d1e278d4d13cb.woff} +0 -0
- /package/repos/insights-chrome-build/js/{2c5bc263ad288d815bd3.woff2 → b0ebda5f4f12f761.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{675eb11fb9e055cea6a4.woff2 → b97a3321aaf7e87a.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{11855d3f3f99709dfac5.woff2 → ba04b02b7da08f3d.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{99464515aba730eab16c.woff2 → bb85876a67d3e7e7.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{8aae586c8c4d72be50c1.woff → bbe18aee9c88166d.woff} +0 -0
- /package/repos/insights-chrome-build/js/{190776b0696119b93c71.woff2 → c3ab7be4146884a3.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{bc0502ffc24dc33b8c5a.woff → c49edc34d14553e4.woff} +0 -0
- /package/repos/insights-chrome-build/js/{3278ae4a3a97d92b639c.woff2 → c8b06bb52b20081e.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{ac78b4f2e64edfb5859a.woff → c99e50723fcf0166.woff} +0 -0
- /package/repos/insights-chrome-build/js/{0227c8bb038eaf0264f7.woff2 → cd1824ff99b9ef33.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{9ed5a0180961e3930d44.woff2 → ce63a8f6be94c7cd.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{8584d6d2426caac44a12.woff2 → d004dc9f8c955767.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{06037ca2cf8525d353a1.woff2 → d19c89c249d7f751.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{61142d93d0198cb3c160.woff2 → d2a095f5996e5014.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{88ade95ac9a035be7168.woff → d2ce043298f5c972.woff} +0 -0
- /package/repos/insights-chrome-build/js/{24515e9b56a0ccb45480.woff → d2cf7e795db09bc7.woff} +0 -0
- /package/repos/insights-chrome-build/js/{d7d2238f0d64e36cd533.svg → d6083bde9a964ab4.svg} +0 -0
- /package/repos/insights-chrome-build/js/{2aa8547fdf2f790c2cb9.woff2 → dd18fb6c0b7048e8.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{909a870fdb828007557f.woff2 → df8a52d2494e1e03.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{3be6f9a55c75aaa6f25a.woff2 → e5c7a27047a83d24.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{f32577e5a5f1d27244a3.woff2 → e693e4f9d9c75499.woff2} +0 -0
- /package/repos/insights-chrome-build/js/{35d01efdc213d0af0d00.woff → e8ec1c41a82bd354.woff} +0 -0
- /package/repos/insights-chrome-build/js/{81aade5a7b362566b199.woff → f66882bad34e5c9f.woff} +0 -0
- /package/repos/insights-chrome-build/js/{47a03d213b0b35080e32.woff → f830d4d01f5e4497.woff} +0 -0
- /package/repos/insights-chrome-build/js/{legacyVideos.c1dc7ccd468c8c55255f.js → legacyVideos.b3f9836f62184986.js} +0 -0
- /package/repos/insights-chrome-build/js/{remoteMiddleware.c1dc7ccd468c8c55255f.js → remoteMiddleware.b3f9836f62184986.js} +0 -0
- /package/repos/insights-chrome-build/js/{vendors-node_modules_lodash__baseIsEqual_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_lodash__baseIsEqual_js.b3f9836f62184986.js} +0 -0
- /package/repos/insights-chrome-build/js/{vendors-node_modules_segment_analytics_js-video-plugins_dist_index_umd_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_segment_analytics_js-video-plugins_dist_index_umd_js.b3f9836f62184986.js} +0 -0
|
@@ -1,1589 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
(self["webpackChunkinsights_chrome"] = self["webpackChunkinsights_chrome"] || []).push([["src_js_jwt_insights_offline_ts-src_js_jwt_jwt_ts"],{
|
|
3
|
-
|
|
4
|
-
/***/ "./src/js/App/FeatureFlags/FeatureFlagsProvider.tsx":
|
|
5
|
-
/*!**********************************************************!*\
|
|
6
|
-
!*** ./src/js/App/FeatureFlags/FeatureFlagsProvider.tsx ***!
|
|
7
|
-
\**********************************************************/
|
|
8
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
9
|
-
|
|
10
|
-
__webpack_require__.r(__webpack_exports__);
|
|
11
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
12
|
-
/* harmony export */ "UNLEASH_ERROR_KEY": () => (/* binding */ UNLEASH_ERROR_KEY),
|
|
13
|
-
/* harmony export */ "unleashClient": () => (/* binding */ unleashClient),
|
|
14
|
-
/* harmony export */ "getFeatureFlagsError": () => (/* binding */ getFeatureFlagsError),
|
|
15
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
16
|
-
/* harmony export */ });
|
|
17
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react/react?474c");
|
|
18
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
19
|
-
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
20
|
-
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
|
|
21
|
-
/* harmony import */ var _unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @unleash/proxy-client-react */ "webpack/sharing/consume/default/@unleash/proxy-client-react/@unleash/proxy-client-react");
|
|
22
|
-
/* harmony import */ var _unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1__);
|
|
23
|
-
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "webpack/sharing/consume/default/react-redux/react-redux");
|
|
24
|
-
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const config = {
|
|
30
|
-
url: `${document.location.origin}/api/featureflags/v0`,
|
|
31
|
-
clientKey: 'proxy-123',
|
|
32
|
-
appName: 'web',
|
|
33
|
-
headerName: 'X-Unleash-Auth',
|
|
34
|
-
refreshInterval: 60000,
|
|
35
|
-
metrcisInterval: 120000,
|
|
36
|
-
};
|
|
37
|
-
const UNLEASH_ERROR_KEY = 'chrome:feature-flags:error';
|
|
38
|
-
/**
|
|
39
|
-
* Clear error localstorage flag before initialization
|
|
40
|
-
*/
|
|
41
|
-
localStorage.setItem(UNLEASH_ERROR_KEY, 'false');
|
|
42
|
-
let unleashClient;
|
|
43
|
-
const getFeatureFlagsError = () => localStorage.getItem(UNLEASH_ERROR_KEY) === 'true';
|
|
44
|
-
const FeatureFlagsProvider = ({ children }) => {
|
|
45
|
-
const user = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)((state) => state.chrome.user);
|
|
46
|
-
const unleashClientInternal = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
|
|
47
|
-
// create the unleash client only after the user object is avaiable
|
|
48
|
-
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
49
|
-
if (user && !unleashClientInternal.current) {
|
|
50
|
-
unleashClientInternal.current = new _unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1__.UnleashClient({
|
|
51
|
-
...config,
|
|
52
|
-
context: {
|
|
53
|
-
properties: {
|
|
54
|
-
account_number: user.identity.account_number,
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
unleashClient = unleashClientInternal.current;
|
|
59
|
-
unleashClient.on('error', () => {
|
|
60
|
-
localStorage.setItem(UNLEASH_ERROR_KEY, 'true');
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}, [user]);
|
|
64
|
-
// fallback to render the chrome withouth the feature flags if the provider is not initialized properly
|
|
65
|
-
if (getFeatureFlagsError() || !unleashClientInternal.current) {
|
|
66
|
-
// Fallback to handle errored client. The default flags provides has silent error handling if the client fails to initialize
|
|
67
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1__.FlagProvider, { config: config }, children);
|
|
68
|
-
}
|
|
69
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((_unleash_proxy_client_react__WEBPACK_IMPORTED_MODULE_1___default()), { unleashClient: unleashClientInternal.current }, children);
|
|
70
|
-
};
|
|
71
|
-
FeatureFlagsProvider.propTypes = {
|
|
72
|
-
children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node.isRequired),
|
|
73
|
-
};
|
|
74
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FeatureFlagsProvider);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/***/ }),
|
|
78
|
-
|
|
79
|
-
/***/ "./src/js/consts.ts":
|
|
80
|
-
/*!**************************!*\
|
|
81
|
-
!*** ./src/js/consts.ts ***!
|
|
82
|
-
\**************************/
|
|
83
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
84
|
-
|
|
85
|
-
__webpack_require__.r(__webpack_exports__);
|
|
86
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
87
|
-
/* harmony export */ "HYDRA_ENDPOINT": () => (/* binding */ HYDRA_ENDPOINT),
|
|
88
|
-
/* harmony export */ "REQUESTS_COUNT": () => (/* binding */ REQUESTS_COUNT),
|
|
89
|
-
/* harmony export */ "REQUESTS_DATA": () => (/* binding */ REQUESTS_DATA),
|
|
90
|
-
/* harmony export */ "ACTIVE_ACCOUNT_SWITCH_NOTIFICATION": () => (/* binding */ ACTIVE_ACCOUNT_SWITCH_NOTIFICATION),
|
|
91
|
-
/* harmony export */ "ACCOUNT_REQUEST_TIMEOUT": () => (/* binding */ ACCOUNT_REQUEST_TIMEOUT),
|
|
92
|
-
/* harmony export */ "CROSS_ACCESS_ACCOUNT_NUMBER": () => (/* binding */ CROSS_ACCESS_ACCOUNT_NUMBER),
|
|
93
|
-
/* harmony export */ "ACTIVE_REMOTE_REQUEST": () => (/* binding */ ACTIVE_REMOTE_REQUEST),
|
|
94
|
-
/* harmony export */ "CROSS_ACCESS_ORG_ID": () => (/* binding */ CROSS_ACCESS_ORG_ID),
|
|
95
|
-
/* harmony export */ "visibilityFunctions": () => (/* binding */ visibilityFunctions),
|
|
96
|
-
/* harmony export */ "isVisible": () => (/* binding */ isVisible),
|
|
97
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
98
|
-
/* harmony export */ "activationRequestURLs": () => (/* binding */ activationRequestURLs)
|
|
99
|
-
/* harmony export */ });
|
|
100
|
-
/* harmony import */ var _redhat_cloud_services_frontend_components_utilities_interceptors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @redhat-cloud-services/frontend-components-utilities/interceptors */ "./node_modules/@redhat-cloud-services/frontend-components-utilities/esm/interceptors/interceptors.js");
|
|
101
|
-
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
|
|
102
|
-
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
|
|
103
|
-
/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ "./node_modules/lodash/isEmpty.js");
|
|
104
|
-
/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);
|
|
105
|
-
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! js-cookie */ "./node_modules/js-cookie/dist/js.cookie.mjs");
|
|
106
|
-
/* harmony import */ var _App_FeatureFlags_FeatureFlagsProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App/FeatureFlags/FeatureFlagsProvider */ "./src/js/App/FeatureFlags/FeatureFlagsProvider.tsx");
|
|
107
|
-
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ "./src/js/utils.ts");
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const obj = {
|
|
115
|
-
noAuthParam: 'noauth',
|
|
116
|
-
offlineToken: '2402500adeacc30eb5c5a8a5e2e0ec1f',
|
|
117
|
-
};
|
|
118
|
-
const HYDRA_ENDPOINT = '/hydra/rest/se/sessions';
|
|
119
|
-
/**
|
|
120
|
-
* Keys for storing acess reqeusts data
|
|
121
|
-
*/
|
|
122
|
-
const REQUESTS_COUNT = 'chrome:cross-account-requests:pending:count';
|
|
123
|
-
const REQUESTS_DATA = 'chrome:cross-account-requests:pending:data';
|
|
124
|
-
const ACTIVE_ACCOUNT_SWITCH_NOTIFICATION = 'chrome:cross-account-requests:active-notification';
|
|
125
|
-
const ACCOUNT_REQUEST_TIMEOUT = 'chrome:cross-account-requests:request-timeout';
|
|
126
|
-
const CROSS_ACCESS_ACCOUNT_NUMBER = 'cross_access_account_number';
|
|
127
|
-
const ACTIVE_REMOTE_REQUEST = 'chrome/active-remote-request';
|
|
128
|
-
const CROSS_ACCESS_ORG_ID = 'cross_access_org_id';
|
|
129
|
-
const matcherMapper = {
|
|
130
|
-
isEmpty: (lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()),
|
|
131
|
-
isNotEmpty: (value) => !lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(value),
|
|
132
|
-
};
|
|
133
|
-
const matchValue = (value, matcher) => {
|
|
134
|
-
const match = matcherMapper[matcher];
|
|
135
|
-
return typeof match === 'function' ? match(value) : value;
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* Check if is permitted to see navigation link
|
|
139
|
-
* @param {array} permissions array checked user permissions
|
|
140
|
-
* @param {every|some} require type of permissions requirement
|
|
141
|
-
* @returns {boolean}
|
|
142
|
-
*/
|
|
143
|
-
const checkPermissions = async (permissions = [], require = 'every') => {
|
|
144
|
-
const userPermissions = await window.insights.chrome.getUserPermissions();
|
|
145
|
-
return userPermissions && permissions[require]((item) => userPermissions.find(({ permission }) => permission === item));
|
|
146
|
-
};
|
|
147
|
-
const visibilityFunctions = {
|
|
148
|
-
isOrgAdmin: async () => {
|
|
149
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
150
|
-
try {
|
|
151
|
-
return !!data.identity.user?.is_org_admin;
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
isActive: async () => {
|
|
158
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
159
|
-
try {
|
|
160
|
-
return !!data.identity.user?.is_active;
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
isInternal: async () => {
|
|
167
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
168
|
-
try {
|
|
169
|
-
return !!data.identity.user?.is_internal;
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
isEntitled: async (appName) => {
|
|
176
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
177
|
-
const { entitlements } = data || {};
|
|
178
|
-
return data.entitlements && appName
|
|
179
|
-
? Boolean(entitlements[appName] && entitlements[appName].is_entitled)
|
|
180
|
-
: // eslint-disable-next-line camelcase
|
|
181
|
-
Object.entries(entitlements || {}).reduce((acc, [key, { is_entitled }]) => ({ ...acc, [key]: is_entitled }), {});
|
|
182
|
-
},
|
|
183
|
-
isProd: () => (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isProd)(),
|
|
184
|
-
isBeta: () => (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isBeta)(),
|
|
185
|
-
isHidden: () => true,
|
|
186
|
-
withEmail: async (...toHave) => {
|
|
187
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
188
|
-
const { identity: { user }, } = data || {};
|
|
189
|
-
return toHave?.some((item) => user?.email?.includes(item));
|
|
190
|
-
},
|
|
191
|
-
loosePermissions: (permissions) => checkPermissions(permissions, 'some'),
|
|
192
|
-
hasPermissions: checkPermissions,
|
|
193
|
-
hasLocalStorage: (key, value) => localStorage.get(key) === value,
|
|
194
|
-
hasCookie: (cookieKey, cookieValue) => js_cookie__WEBPACK_IMPORTED_MODULE_2__.default.get(cookieKey) === cookieValue,
|
|
195
|
-
apiRequest: async ({ url, method = 'GET', accessor, matcher, ...options }) => {
|
|
196
|
-
const data = await window.insights.chrome.auth.getUser();
|
|
197
|
-
// this will log a bunch of 403s if the account number isn't present
|
|
198
|
-
if (data.identity.account_number) {
|
|
199
|
-
return (0,_redhat_cloud_services_frontend_components_utilities_interceptors__WEBPACK_IMPORTED_MODULE_5__.default)({
|
|
200
|
-
url,
|
|
201
|
-
method,
|
|
202
|
-
...options,
|
|
203
|
-
})
|
|
204
|
-
.then((response) => matchValue(accessor ? lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(response || {}, accessor) : response, matcher))
|
|
205
|
-
.catch(() => {
|
|
206
|
-
console.log('Unable to retrieve visibility result', { visibilityMethod: 'apiRequest', method, url });
|
|
207
|
-
return false;
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
console.log('Unable to call API, no account number');
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
featureFlag: (flagName, expectedValue) => (0,_App_FeatureFlags_FeatureFlagsProvider__WEBPACK_IMPORTED_MODULE_3__.getFeatureFlagsError)() !== true && _App_FeatureFlags_FeatureFlagsProvider__WEBPACK_IMPORTED_MODULE_3__.unleashClient.isEnabled(flagName) === expectedValue,
|
|
216
|
-
};
|
|
217
|
-
const isVisible = (limitedApps, app, visibility) => {
|
|
218
|
-
if (limitedApps && app && limitedApps.includes(app)) {
|
|
219
|
-
if (visibility instanceof Object) {
|
|
220
|
-
return Boolean(visibility[app]);
|
|
221
|
-
}
|
|
222
|
-
return visibility;
|
|
223
|
-
}
|
|
224
|
-
return true;
|
|
225
|
-
};
|
|
226
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Object.freeze(obj));
|
|
227
|
-
const activationRequestURLs = [
|
|
228
|
-
'azure-openshift-activation',
|
|
229
|
-
'azure-ocp-activation',
|
|
230
|
-
'azure-oke-activation',
|
|
231
|
-
'azure-opp-activation',
|
|
232
|
-
'azure-ansible-activation',
|
|
233
|
-
'aws-openshift-activation',
|
|
234
|
-
'aws-ocp-activation',
|
|
235
|
-
'aws-oke-activation',
|
|
236
|
-
'aws-opp-activation',
|
|
237
|
-
'gcp-opp-activation',
|
|
238
|
-
'gcp-oke-activation',
|
|
239
|
-
'gcp-ocp-activation',
|
|
240
|
-
];
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
/***/ }),
|
|
244
|
-
|
|
245
|
-
/***/ "./src/js/jwt/Priv.ts":
|
|
246
|
-
/*!****************************!*\
|
|
247
|
-
!*** ./src/js/jwt/Priv.ts ***!
|
|
248
|
-
\****************************/
|
|
249
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
250
|
-
|
|
251
|
-
__webpack_require__.r(__webpack_exports__);
|
|
252
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
253
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
254
|
-
/* harmony export */ });
|
|
255
|
-
/* harmony import */ var keycloak_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! keycloak-js */ "./node_modules/keycloak-js/dist/keycloak.mjs");
|
|
256
|
-
|
|
257
|
-
class Priv {
|
|
258
|
-
_cookie;
|
|
259
|
-
_keycloak;
|
|
260
|
-
cookie;
|
|
261
|
-
logoutDelay;
|
|
262
|
-
logoutTimeout;
|
|
263
|
-
constructor() {
|
|
264
|
-
this._cookie;
|
|
265
|
-
this._keycloak = {};
|
|
266
|
-
this.logoutDelay = 3 * 60 * 60 * 1000; // 3 hours in MS
|
|
267
|
-
}
|
|
268
|
-
setCookie(cookie) {
|
|
269
|
-
this.cookie = cookie;
|
|
270
|
-
}
|
|
271
|
-
setKeycloak(options, onTokenExpired, onAuthSuccess, onAuthRefreshSuccess) {
|
|
272
|
-
this._keycloak = new keycloak_js__WEBPACK_IMPORTED_MODULE_0__.default(options);
|
|
273
|
-
this._keycloak.onTokenExpired = onTokenExpired;
|
|
274
|
-
this._keycloak.onAuthSuccess = onAuthSuccess;
|
|
275
|
-
this._keycloak.onAuthRefreshSuccess = onAuthRefreshSuccess;
|
|
276
|
-
}
|
|
277
|
-
initializeKeycloak(options) {
|
|
278
|
-
this._keycloak?.init(options);
|
|
279
|
-
}
|
|
280
|
-
setToken(token) {
|
|
281
|
-
this._keycloak.authenticated = true;
|
|
282
|
-
this._keycloak.token = token;
|
|
283
|
-
}
|
|
284
|
-
initialize(options) {
|
|
285
|
-
return this._keycloak.init(options);
|
|
286
|
-
}
|
|
287
|
-
setTokenParsed(tokenParsed) {
|
|
288
|
-
this._keycloak.tokenParsed = tokenParsed;
|
|
289
|
-
}
|
|
290
|
-
getTokenParsed() {
|
|
291
|
-
return this._keycloak.tokenParsed;
|
|
292
|
-
}
|
|
293
|
-
getToken() {
|
|
294
|
-
return this._keycloak.token;
|
|
295
|
-
}
|
|
296
|
-
getRefershToken() {
|
|
297
|
-
return this._keycloak.refreshToken;
|
|
298
|
-
}
|
|
299
|
-
login(options) {
|
|
300
|
-
return this._keycloak.login(options).then((resp) => {
|
|
301
|
-
if (this.logoutTimeout) {
|
|
302
|
-
clearTimeout(this.logoutTimeout);
|
|
303
|
-
}
|
|
304
|
-
this.logoutTimeout = setTimeout(() => {
|
|
305
|
-
this.logout();
|
|
306
|
-
}, this.logoutDelay);
|
|
307
|
-
return resp;
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
clearToken() {
|
|
311
|
-
this._keycloak.clearToken();
|
|
312
|
-
}
|
|
313
|
-
getCookie() {
|
|
314
|
-
return this.cookie;
|
|
315
|
-
}
|
|
316
|
-
logout(options = {}) {
|
|
317
|
-
return this._keycloak.logout(options);
|
|
318
|
-
}
|
|
319
|
-
getAuthenticated() {
|
|
320
|
-
return this._keycloak.authenticated;
|
|
321
|
-
}
|
|
322
|
-
updateToken() {
|
|
323
|
-
// 5 is default KC value, min validaty is required by KC byt then has a default value for some reason
|
|
324
|
-
return this._keycloak.updateToken(5);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Priv);
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
/***/ }),
|
|
331
|
-
|
|
332
|
-
/***/ "./src/js/jwt/constants.ts":
|
|
333
|
-
/*!*********************************!*\
|
|
334
|
-
!*** ./src/js/jwt/constants.ts ***!
|
|
335
|
-
\*********************************/
|
|
336
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
337
|
-
|
|
338
|
-
__webpack_require__.r(__webpack_exports__);
|
|
339
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
340
|
-
/* harmony export */ "DEFAULT_ROUTES": () => (/* binding */ DEFAULT_ROUTES),
|
|
341
|
-
/* harmony export */ "options": () => (/* binding */ options),
|
|
342
|
-
/* harmony export */ "noAuthParam": () => (/* binding */ noAuthParam),
|
|
343
|
-
/* harmony export */ "offlineToken": () => (/* binding */ offlineToken)
|
|
344
|
-
/* harmony export */ });
|
|
345
|
-
// Global Defaults
|
|
346
|
-
const DEFAULT_ROUTES = {
|
|
347
|
-
prod: {
|
|
348
|
-
url: ['access.redhat.com', 'prod.foo.redhat.com', 'cloud.redhat.com', 'console.redhat.com'],
|
|
349
|
-
sso: 'https://sso.redhat.com/auth',
|
|
350
|
-
portal: 'https://access.redhat.com',
|
|
351
|
-
},
|
|
352
|
-
qa: {
|
|
353
|
-
url: ['qa.foo.redhat.com', 'qa.cloud.redhat.com', 'qa.console.redhat.com'],
|
|
354
|
-
sso: 'https://sso.qa.redhat.com/auth',
|
|
355
|
-
portal: 'https://access.qa.redhat.com',
|
|
356
|
-
},
|
|
357
|
-
ci: {
|
|
358
|
-
url: ['ci.foo.redhat.com', 'ci.cloud.redhat.com', 'ci.console.redhat.com'],
|
|
359
|
-
sso: 'https://sso.qa.redhat.com/auth',
|
|
360
|
-
portal: 'https://access.qa.redhat.com',
|
|
361
|
-
},
|
|
362
|
-
qaprodauth: {
|
|
363
|
-
url: ['qaprodauth.foo.redhat.com', 'qaprodauth.cloud.redhat.com', 'qaprodauth.console.redhat.com'],
|
|
364
|
-
sso: 'https://sso.redhat.com/auth',
|
|
365
|
-
portal: 'https://access.redhat.com',
|
|
366
|
-
},
|
|
367
|
-
stage: {
|
|
368
|
-
url: ['stage.foo.redhat.com', 'cloud.stage.redhat.com', 'console.stage.redhat.com', 'fetest.stage.redhat.com'],
|
|
369
|
-
sso: 'https://sso.stage.redhat.com/auth',
|
|
370
|
-
portal: 'https://access.stage.redhat.com',
|
|
371
|
-
},
|
|
372
|
-
gov: {
|
|
373
|
-
url: ['gov.cloud.redhat.com', 'gov.console.redhat.com'],
|
|
374
|
-
sso: 'https://sso.redhat.com/auth',
|
|
375
|
-
portal: 'https://access.redhat.com',
|
|
376
|
-
},
|
|
377
|
-
govStage: {
|
|
378
|
-
url: ['gov.cloud.stage.redhat.com', 'gov.console.stage.redhat.com'],
|
|
379
|
-
sso: 'https://sso.stage.redhat.com/auth',
|
|
380
|
-
portal: 'https://access.redhat.com',
|
|
381
|
-
},
|
|
382
|
-
dev: {
|
|
383
|
-
url: ['console.dev.redhat.com'],
|
|
384
|
-
sso: 'https://sso.redhat.com/auth',
|
|
385
|
-
portal: 'https://access.redhat.com',
|
|
386
|
-
},
|
|
387
|
-
};
|
|
388
|
-
const options = {
|
|
389
|
-
realm: 'redhat-external',
|
|
390
|
-
clientId: 'cloud-services',
|
|
391
|
-
cookieName: 'cs_jwt',
|
|
392
|
-
};
|
|
393
|
-
const noAuthParam = 'noauth';
|
|
394
|
-
const offlineToken = '2402500adeacc30eb5c5a8a5e2e0ec1f';
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
/***/ }),
|
|
398
|
-
|
|
399
|
-
/***/ "./src/js/jwt/insights/entitlements.ts":
|
|
400
|
-
/*!*********************************************!*\
|
|
401
|
-
!*** ./src/js/jwt/insights/entitlements.ts ***!
|
|
402
|
-
\*********************************************/
|
|
403
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
404
|
-
|
|
405
|
-
__webpack_require__.r(__webpack_exports__);
|
|
406
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
407
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
408
|
-
/* harmony export */ });
|
|
409
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
|
|
410
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
|
|
411
|
-
/* harmony import */ var _redhat_cloud_services_entitlements_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @redhat-cloud-services/entitlements-client */ "./node_modules/@redhat-cloud-services/entitlements-client/dist/index.js");
|
|
412
|
-
/* harmony import */ var _redhat_cloud_services_entitlements_client__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_redhat_cloud_services_entitlements_client__WEBPACK_IMPORTED_MODULE_1__);
|
|
413
|
-
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils */ "./src/js/utils.ts");
|
|
414
|
-
/* harmony import */ var _utils_cache__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/cache */ "./src/js/utils/cache.ts");
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
const BASE_PATH = '/api/entitlements/v1';
|
|
420
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((cachePrefix) => {
|
|
421
|
-
const cache = (0,_utils_cache__WEBPACK_IMPORTED_MODULE_3__.bootstrapCache)(BASE_PATH, `${cachePrefix}-entitlements`);
|
|
422
|
-
const instance = axios__WEBPACK_IMPORTED_MODULE_0___default().create({ adapter: cache.adapter });
|
|
423
|
-
instance.interceptors.response.use((response) => {
|
|
424
|
-
if (response && response.request && response.request.fromCache !== true) {
|
|
425
|
-
const last = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.lastActive)('/api/entitlements/v1/services', 'fallback');
|
|
426
|
-
const keys = Object.keys(localStorage).filter((key) => key.endsWith('/api/entitlements/v1/services') && key !== last);
|
|
427
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteLocalStorageItems)(keys);
|
|
428
|
-
}
|
|
429
|
-
return response.data || response;
|
|
430
|
-
});
|
|
431
|
-
return new _redhat_cloud_services_entitlements_client__WEBPACK_IMPORTED_MODULE_1__.ServicesApi(undefined, BASE_PATH, instance);
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
/***/ }),
|
|
436
|
-
|
|
437
|
-
/***/ "./src/js/jwt/insights/offline.ts":
|
|
438
|
-
/*!****************************************!*\
|
|
439
|
-
!*** ./src/js/jwt/insights/offline.ts ***!
|
|
440
|
-
\****************************************/
|
|
441
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
442
|
-
|
|
443
|
-
__webpack_require__.r(__webpack_exports__);
|
|
444
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
445
|
-
/* harmony export */ "wipePostbackParamsThatAreNotForUs": () => (/* binding */ wipePostbackParamsThatAreNotForUs),
|
|
446
|
-
/* harmony export */ "getOfflineToken": () => (/* binding */ getOfflineToken),
|
|
447
|
-
/* harmony export */ "getWindow": () => (/* binding */ getWindow),
|
|
448
|
-
/* harmony export */ "getPostbackUrl": () => (/* binding */ getPostbackUrl),
|
|
449
|
-
/* harmony export */ "getPostDataObject": () => (/* binding */ getPostDataObject),
|
|
450
|
-
/* harmony export */ "parseHashString": () => (/* binding */ parseHashString)
|
|
451
|
-
/* harmony export */ });
|
|
452
|
-
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../consts */ "./src/js/consts.ts");
|
|
453
|
-
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants */ "./src/js/jwt/constants.ts");
|
|
454
|
-
/* harmony import */ var _url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./url */ "./src/js/jwt/insights/url.ts");
|
|
455
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
|
|
456
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_3__);
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
const priv = {};
|
|
462
|
-
// note this function is not exposed
|
|
463
|
-
// it is a run everytime and produce some side affect thing
|
|
464
|
-
// if a special condition is encountered
|
|
465
|
-
//
|
|
466
|
-
// it would be great to not have this behave this way
|
|
467
|
-
// but the order that this needs to run in is very specific
|
|
468
|
-
// so that is somewhat difficult
|
|
469
|
-
function wipePostbackParamsThatAreNotForUs() {
|
|
470
|
-
if (getWindow().location.href.indexOf(_consts__WEBPACK_IMPORTED_MODULE_0__.default.offlineToken) !== -1) {
|
|
471
|
-
const { hash, search, origin, pathname } = getWindow().location;
|
|
472
|
-
const noAuthParam = new URLSearchParams(search).get(_consts__WEBPACK_IMPORTED_MODULE_0__.default.noAuthParam);
|
|
473
|
-
// this is a UHC offline token postback
|
|
474
|
-
// we need to not let the JWT lib see this
|
|
475
|
-
// and try to use it
|
|
476
|
-
priv.postbackUrl = `${origin}${pathname}?${_consts__WEBPACK_IMPORTED_MODULE_0__.default.noAuthParam}=${noAuthParam}${hash}`;
|
|
477
|
-
// we do this because keycloak.js looks at the hash for its parameters
|
|
478
|
-
// and if found uses the params for its own use
|
|
479
|
-
//
|
|
480
|
-
// in the UHC offline post back case we *dont*
|
|
481
|
-
// want the params to be used by keycloak.js
|
|
482
|
-
// so we have to destroy this stuff and let regular auth routines happen
|
|
483
|
-
getWindow().location.hash = '';
|
|
484
|
-
// nuke the params so that people dont see the ugly
|
|
485
|
-
const url = new URL(getWindow().location.href);
|
|
486
|
-
url.searchParams.delete(_consts__WEBPACK_IMPORTED_MODULE_0__.default.noAuthParam);
|
|
487
|
-
getWindow().history.pushState('offlinePostback', '', url.toString());
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
async function getOfflineToken(realm, clientId, configSsoUrl) {
|
|
491
|
-
const postbackUrl = getPostbackUrl();
|
|
492
|
-
if (priv.response) {
|
|
493
|
-
return Promise.resolve(priv.response);
|
|
494
|
-
}
|
|
495
|
-
if (!postbackUrl) {
|
|
496
|
-
// we need this postback URL because it contains parameters needed to
|
|
497
|
-
// call KC for the actual offline token
|
|
498
|
-
// thus we cant continue if it is missing
|
|
499
|
-
return Promise.reject('not available');
|
|
500
|
-
}
|
|
501
|
-
const ssoUrl = await (0,_url__WEBPACK_IMPORTED_MODULE_2__.default)(_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ROUTES, configSsoUrl);
|
|
502
|
-
const tokenURL = `${ssoUrl}/realms/${realm}/protocol/openid-connect/token`;
|
|
503
|
-
const params = parseHashString(postbackUrl);
|
|
504
|
-
return axios__WEBPACK_IMPORTED_MODULE_3___default().post(tokenURL, getPostDataString(getPostDataObject(postbackUrl, clientId, params.code)), {
|
|
505
|
-
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
506
|
-
})
|
|
507
|
-
.then((response) => {
|
|
508
|
-
priv.response = response;
|
|
509
|
-
return response;
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
function getWindow() {
|
|
513
|
-
return window;
|
|
514
|
-
}
|
|
515
|
-
function getPostbackUrl() {
|
|
516
|
-
// let folks only do this once
|
|
517
|
-
const ret = priv.postbackUrl;
|
|
518
|
-
delete priv.postbackUrl;
|
|
519
|
-
return ret;
|
|
520
|
-
}
|
|
521
|
-
function getPostDataObject(url, clientId, code) {
|
|
522
|
-
return {
|
|
523
|
-
code: code,
|
|
524
|
-
grant_type: 'authorization_code',
|
|
525
|
-
client_id: clientId,
|
|
526
|
-
redirect_uri: encodeURIComponent(url.split('#')[0]), // eslint-disable-line camelcase
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
function parseHashString(str) {
|
|
530
|
-
return str
|
|
531
|
-
.split('#')[1]
|
|
532
|
-
.split('&')
|
|
533
|
-
.reduce((result, item) => {
|
|
534
|
-
const parts = item.split('=');
|
|
535
|
-
result[parts[0]] = parts[1];
|
|
536
|
-
return result;
|
|
537
|
-
}, {});
|
|
538
|
-
}
|
|
539
|
-
function getPostDataString(obj) {
|
|
540
|
-
return Object.entries(obj)
|
|
541
|
-
.map((entry) => {
|
|
542
|
-
return `${entry[0]}=${entry[1]}`;
|
|
543
|
-
})
|
|
544
|
-
.join('&');
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
/***/ }),
|
|
549
|
-
|
|
550
|
-
/***/ "./src/js/jwt/insights/url.ts":
|
|
551
|
-
/*!************************************!*\
|
|
552
|
-
!*** ./src/js/jwt/insights/url.ts ***!
|
|
553
|
-
\************************************/
|
|
554
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
555
|
-
|
|
556
|
-
__webpack_require__.r(__webpack_exports__);
|
|
557
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
558
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
559
|
-
/* harmony export */ });
|
|
560
|
-
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger */ "./src/js/jwt/logger.ts");
|
|
561
|
-
|
|
562
|
-
const log = (0,_logger__WEBPACK_IMPORTED_MODULE_0__.default)('insights/url.js');
|
|
563
|
-
// Parse through keycloak options routes
|
|
564
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (env, configSsoUrl) => {
|
|
565
|
-
if (configSsoUrl) {
|
|
566
|
-
return configSsoUrl;
|
|
567
|
-
}
|
|
568
|
-
const ssoEnv = Object.entries(env).find(([, { url }]) => url.includes(location.hostname));
|
|
569
|
-
if (ssoEnv) {
|
|
570
|
-
log(`SSO Url: ${ssoEnv?.[1].sso}`);
|
|
571
|
-
log(`Current env: ${ssoEnv?.[0]}`);
|
|
572
|
-
return ssoEnv?.[1].sso;
|
|
573
|
-
}
|
|
574
|
-
else {
|
|
575
|
-
log('SSO url: not found, defaulting to qa');
|
|
576
|
-
log('Current env: not found, defaultint to qa');
|
|
577
|
-
return 'https://sso.qa.redhat.com/auth';
|
|
578
|
-
}
|
|
579
|
-
});
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
/***/ }),
|
|
583
|
-
|
|
584
|
-
/***/ "./src/js/jwt/insights/user.ts":
|
|
585
|
-
/*!*************************************!*\
|
|
586
|
-
!*** ./src/js/jwt/insights/user.ts ***!
|
|
587
|
-
\*************************************/
|
|
588
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
589
|
-
|
|
590
|
-
__webpack_require__.r(__webpack_exports__);
|
|
591
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
592
|
-
/* harmony export */ "buildUser": () => (/* binding */ buildUser),
|
|
593
|
-
/* harmony export */ "tryBounceIfUnentitled": () => (/* binding */ tryBounceIfUnentitled),
|
|
594
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
595
|
-
/* harmony export */ });
|
|
596
|
-
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils */ "./src/js/utils.ts");
|
|
597
|
-
/* harmony import */ var _entitlements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entitlements */ "./src/js/jwt/insights/entitlements.ts");
|
|
598
|
-
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../logger */ "./src/js/jwt/logger.ts");
|
|
599
|
-
/* harmony import */ var _utils_isAnsibleTrialFlagActive__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/isAnsibleTrialFlagActive */ "./src/js/utils/isAnsibleTrialFlagActive.ts");
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
const log = (0,_logger__WEBPACK_IMPORTED_MODULE_2__.default)('insights/user.js');
|
|
605
|
-
const pathMapper = {
|
|
606
|
-
'cost-management': 'cost_management',
|
|
607
|
-
insights: 'insights',
|
|
608
|
-
openshift: 'openshift',
|
|
609
|
-
migrations: 'migrations',
|
|
610
|
-
ansible: 'ansible',
|
|
611
|
-
subscriptions: 'subscriptions',
|
|
612
|
-
settings: 'settings',
|
|
613
|
-
'user-preferences': 'user_preferences',
|
|
614
|
-
internal: 'internal',
|
|
615
|
-
};
|
|
616
|
-
const REDIRECT_BASE = `${document.location.origin}${(0,_utils__WEBPACK_IMPORTED_MODULE_0__.isBeta)() ? '/beta/' : '/'}`;
|
|
617
|
-
const unentitledPathMapper = (section, service, expired = false) => ({
|
|
618
|
-
ansible: `${REDIRECT_BASE}ansible/ansible-dashboard/${expired ? 'trial/expired' : 'trial'}`,
|
|
619
|
-
}[section] || `${REDIRECT_BASE}?not_entitled=${service}`);
|
|
620
|
-
function getWindow() {
|
|
621
|
-
return window;
|
|
622
|
-
}
|
|
623
|
-
/* eslint-disable camelcase */
|
|
624
|
-
function buildUser(token) {
|
|
625
|
-
const user = token
|
|
626
|
-
? {
|
|
627
|
-
identity: {
|
|
628
|
-
account_number: token.account_number,
|
|
629
|
-
org_id: token.org_id,
|
|
630
|
-
type: token.type,
|
|
631
|
-
...(token.idp && { idp: token.idp }),
|
|
632
|
-
user: {
|
|
633
|
-
username: token.username,
|
|
634
|
-
email: token.email,
|
|
635
|
-
first_name: token.first_name,
|
|
636
|
-
last_name: token.last_name,
|
|
637
|
-
is_active: token.is_active,
|
|
638
|
-
is_org_admin: token.is_org_admin,
|
|
639
|
-
is_internal: token.is_internal,
|
|
640
|
-
locale: token.locale,
|
|
641
|
-
},
|
|
642
|
-
internal: {
|
|
643
|
-
org_id: token.org_id,
|
|
644
|
-
account_id: token.account_id,
|
|
645
|
-
},
|
|
646
|
-
},
|
|
647
|
-
}
|
|
648
|
-
: null;
|
|
649
|
-
return user;
|
|
650
|
-
}
|
|
651
|
-
/* eslint-enable camelcase */
|
|
652
|
-
function tryBounceIfUnentitled(data, section) {
|
|
653
|
-
// only test this on the apps that are in valid sections
|
|
654
|
-
// we need to keep /apps and other things functional
|
|
655
|
-
if (section !== 'insights' &&
|
|
656
|
-
section !== 'openshift' &&
|
|
657
|
-
section !== 'cost-management' &&
|
|
658
|
-
section !== 'migrations' &&
|
|
659
|
-
section !== 'ansible' &&
|
|
660
|
-
section !== 'subscriptions' &&
|
|
661
|
-
section !== 'settings' &&
|
|
662
|
-
section !== 'user-preferences' &&
|
|
663
|
-
section !== 'internal') {
|
|
664
|
-
return;
|
|
665
|
-
}
|
|
666
|
-
const ansibleActive = (0,_utils_isAnsibleTrialFlagActive__WEBPACK_IMPORTED_MODULE_3__.isAnsibleTrialFlagActive)();
|
|
667
|
-
// test temporary ansible trial flag
|
|
668
|
-
if (section === 'ansible' && ansibleActive) {
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
const service = pathMapper[section];
|
|
672
|
-
// ansibleActive can be true/false/undefined
|
|
673
|
-
const redirectAddress = unentitledPathMapper(section, service, ansibleActive === false);
|
|
674
|
-
if (data === true) {
|
|
675
|
-
// this is a force bounce scenario!
|
|
676
|
-
getWindow().location.replace(redirectAddress);
|
|
677
|
-
}
|
|
678
|
-
if (section && typeof data === 'object') {
|
|
679
|
-
if (data?.[service]?.is_entitled) {
|
|
680
|
-
log(`Entitled to: ${service}`);
|
|
681
|
-
}
|
|
682
|
-
else {
|
|
683
|
-
log(`Not entitled to: ${service}`);
|
|
684
|
-
getWindow().location.replace(redirectAddress);
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (token) => {
|
|
689
|
-
const user = buildUser(token);
|
|
690
|
-
const pathName = getWindow().location.pathname.split('/');
|
|
691
|
-
pathName.shift();
|
|
692
|
-
if (pathName[0] === 'beta') {
|
|
693
|
-
pathName.shift();
|
|
694
|
-
}
|
|
695
|
-
if (pathName?.[1] === 'subscriptions' || pathName?.[1] === 'cost-management') {
|
|
696
|
-
pathName.shift();
|
|
697
|
-
}
|
|
698
|
-
if (user) {
|
|
699
|
-
log(`Account Number: ${user.identity.account_number}`);
|
|
700
|
-
let data = {};
|
|
701
|
-
try {
|
|
702
|
-
if (user.identity.account_number) {
|
|
703
|
-
data = (await (0,_entitlements__WEBPACK_IMPORTED_MODULE_1__.default)(token.jti).servicesGet());
|
|
704
|
-
}
|
|
705
|
-
else {
|
|
706
|
-
console.log('Cannot call entitlements API, no account number');
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
catch {
|
|
710
|
-
// let's swallow error from services API
|
|
711
|
-
}
|
|
712
|
-
// NOTE: Openshift supports Users with Account Number of -1
|
|
713
|
-
// thus we need to bypass here
|
|
714
|
-
// call entitlements on / /beta /openshift or /beta/openshift,
|
|
715
|
-
// but swallow error
|
|
716
|
-
//
|
|
717
|
-
// Landing Page *does* support accounts with -1
|
|
718
|
-
// it has to
|
|
719
|
-
if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.pageAllowsUnentitled)()) {
|
|
720
|
-
return {
|
|
721
|
-
...user,
|
|
722
|
-
entitlements: data,
|
|
723
|
-
};
|
|
724
|
-
}
|
|
725
|
-
// Important this has to come after the above -1 allow checks
|
|
726
|
-
// Otherwise we get bounced on those paths
|
|
727
|
-
//
|
|
728
|
-
// It also needs to not go int he servicesApi call
|
|
729
|
-
// because 3scale 403s if the Account number is -1
|
|
730
|
-
//
|
|
731
|
-
// we "force" a bounce here because the entitlements API
|
|
732
|
-
// was never called
|
|
733
|
-
if (!(0,_utils__WEBPACK_IMPORTED_MODULE_0__.isValidAccountNumber)(user.identity.account_number)) {
|
|
734
|
-
tryBounceIfUnentitled(true, pathName[0]);
|
|
735
|
-
return;
|
|
736
|
-
}
|
|
737
|
-
tryBounceIfUnentitled(data, pathName[0]);
|
|
738
|
-
return {
|
|
739
|
-
...user,
|
|
740
|
-
entitlements: data,
|
|
741
|
-
};
|
|
742
|
-
}
|
|
743
|
-
else {
|
|
744
|
-
log('User not ready');
|
|
745
|
-
}
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
/***/ }),
|
|
750
|
-
|
|
751
|
-
/***/ "./src/js/jwt/jwt.ts":
|
|
752
|
-
/*!***************************!*\
|
|
753
|
-
!*** ./src/js/jwt/jwt.ts ***!
|
|
754
|
-
\***************************/
|
|
755
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
756
|
-
|
|
757
|
-
__webpack_require__.r(__webpack_exports__);
|
|
758
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
759
|
-
/* harmony export */ "GLOBAL_FILTER_KEY": () => (/* binding */ GLOBAL_FILTER_KEY),
|
|
760
|
-
/* harmony export */ "decodeToken": () => (/* binding */ decodeToken),
|
|
761
|
-
/* harmony export */ "doOffline": () => (/* binding */ doOffline),
|
|
762
|
-
/* harmony export */ "init": () => (/* binding */ init),
|
|
763
|
-
/* harmony export */ "isExistingValid": () => (/* binding */ isExistingValid),
|
|
764
|
-
/* harmony export */ "initSuccess": () => (/* binding */ initSuccess),
|
|
765
|
-
/* harmony export */ "initError": () => (/* binding */ initError),
|
|
766
|
-
/* harmony export */ "login": () => (/* binding */ login),
|
|
767
|
-
/* harmony export */ "logout": () => (/* binding */ logout),
|
|
768
|
-
/* harmony export */ "logoutAllTabs": () => (/* binding */ logoutAllTabs),
|
|
769
|
-
/* harmony export */ "getUserInfo": () => (/* binding */ getUserInfo),
|
|
770
|
-
/* harmony export */ "isAuthenticated": () => (/* binding */ isAuthenticated),
|
|
771
|
-
/* harmony export */ "expiredToken": () => (/* binding */ expiredToken),
|
|
772
|
-
/* harmony export */ "updateToken": () => (/* binding */ updateToken),
|
|
773
|
-
/* harmony export */ "getCookieExpires": () => (/* binding */ getCookieExpires),
|
|
774
|
-
/* harmony export */ "setCookie": () => (/* binding */ setCookie),
|
|
775
|
-
/* harmony export */ "setCookieWrapper": () => (/* binding */ setCookieWrapper),
|
|
776
|
-
/* harmony export */ "getEncodedToken": () => (/* binding */ getEncodedToken),
|
|
777
|
-
/* harmony export */ "getUrl": () => (/* binding */ getUrl)
|
|
778
|
-
/* harmony export */ });
|
|
779
|
-
/* harmony import */ var keycloak_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! keycloak-js */ "./node_modules/keycloak-js/dist/keycloak.mjs");
|
|
780
|
-
/* harmony import */ var broadcast_channel__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! broadcast-channel */ "./node_modules/broadcast-channel/dist/esbrowser/broadcast-channel.js");
|
|
781
|
-
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-cookie */ "./node_modules/js-cookie/dist/js.cookie.mjs");
|
|
782
|
-
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/js/utils.ts");
|
|
783
|
-
/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @sentry/react */ "./node_modules/@sentry/core/esm/exports.js");
|
|
784
|
-
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ "./src/js/jwt/logger.ts");
|
|
785
|
-
/* harmony import */ var _insights_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./insights/url */ "./src/js/jwt/insights/url.ts");
|
|
786
|
-
/* harmony import */ var _insights_user__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./insights/user */ "./src/js/jwt/insights/user.ts");
|
|
787
|
-
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! urijs */ "./node_modules/urijs/src/URI.js");
|
|
788
|
-
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(urijs__WEBPACK_IMPORTED_MODULE_6__);
|
|
789
|
-
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constants */ "./src/js/jwt/constants.ts");
|
|
790
|
-
/* harmony import */ var _Priv__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Priv */ "./src/js/jwt/Priv.ts");
|
|
791
|
-
// Imports
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
// Insights Specific
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
const GLOBAL_FILTER_KEY = 'chrome:global-filter';
|
|
805
|
-
const log = (0,_logger__WEBPACK_IMPORTED_MODULE_3__.default)('jwt.js');
|
|
806
|
-
const DEFAULT_COOKIE_NAME = 'cs_jwt';
|
|
807
|
-
const priv = new _Priv__WEBPACK_IMPORTED_MODULE_8__.default();
|
|
808
|
-
// Broadcast Channel
|
|
809
|
-
const authChannel = new broadcast_channel__WEBPACK_IMPORTED_MODULE_9__.BroadcastChannel('auth');
|
|
810
|
-
authChannel.onmessage = (e) => {
|
|
811
|
-
if (e && e.data && e.data.type) {
|
|
812
|
-
log(`BroadcastChannel, Received event : ${e.data.type}`);
|
|
813
|
-
switch (e.data.type) {
|
|
814
|
-
case 'logout':
|
|
815
|
-
return logout();
|
|
816
|
-
case 'login':
|
|
817
|
-
return login();
|
|
818
|
-
case 'refresh':
|
|
819
|
-
return updateToken();
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
};
|
|
823
|
-
function getPartnerScope(pathname) {
|
|
824
|
-
// replace beta and leading "/"
|
|
825
|
-
const sanitizedPathname = pathname.replace(/^\/beta\//, '/').replace(/^\//, '');
|
|
826
|
-
// check if the pathname is connect/:partner
|
|
827
|
-
if (sanitizedPathname.match(/^connect\/.+/)) {
|
|
828
|
-
// return :partner param
|
|
829
|
-
return `api.partner_link.${sanitizedPathname.split('/')[1]}`;
|
|
830
|
-
}
|
|
831
|
-
return undefined;
|
|
832
|
-
}
|
|
833
|
-
function decodeToken(str) {
|
|
834
|
-
str = str.split('.')[1];
|
|
835
|
-
str = str.replace('/-/g', '+');
|
|
836
|
-
str = str.replace('/_/g', '/');
|
|
837
|
-
switch (str.length % 4) {
|
|
838
|
-
case 0:
|
|
839
|
-
break;
|
|
840
|
-
case 2:
|
|
841
|
-
str += '==';
|
|
842
|
-
break;
|
|
843
|
-
case 3:
|
|
844
|
-
str += '=';
|
|
845
|
-
break;
|
|
846
|
-
default:
|
|
847
|
-
throw 'Invalid token';
|
|
848
|
-
}
|
|
849
|
-
str = (str + '===').slice(0, str.length + (str.length % 4));
|
|
850
|
-
str = str.replace(/-/g, '+').replace(/_/g, '/');
|
|
851
|
-
str = decodeURIComponent(escape(atob(str)));
|
|
852
|
-
const res = JSON.parse(str);
|
|
853
|
-
return res;
|
|
854
|
-
}
|
|
855
|
-
const doOffline = (key, val, configSsoUrl) => {
|
|
856
|
-
const url = urijs__WEBPACK_IMPORTED_MODULE_6___default()(window.location.href);
|
|
857
|
-
url.removeSearch(key);
|
|
858
|
-
url.addSearch(key, val);
|
|
859
|
-
Promise.resolve((0,_insights_url__WEBPACK_IMPORTED_MODULE_4__.default)(_constants__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_ROUTES, configSsoUrl)).then(async (ssoUrl) => {
|
|
860
|
-
const options = {
|
|
861
|
-
..._constants__WEBPACK_IMPORTED_MODULE_7__.options,
|
|
862
|
-
promiseType: 'native',
|
|
863
|
-
redirectUri: url.toString(),
|
|
864
|
-
url: ssoUrl,
|
|
865
|
-
};
|
|
866
|
-
const kc = new keycloak_js__WEBPACK_IMPORTED_MODULE_0__.default(options);
|
|
867
|
-
await kc.init(options);
|
|
868
|
-
const partnerScope = getPartnerScope(window.location.pathname);
|
|
869
|
-
kc.login({
|
|
870
|
-
scope: `offline_access${partnerScope ? ` ${partnerScope}` : ''}`,
|
|
871
|
-
});
|
|
872
|
-
});
|
|
873
|
-
};
|
|
874
|
-
/*** Initialization ***/
|
|
875
|
-
const init = (options, configSsoUrl) => {
|
|
876
|
-
log('Initializing');
|
|
877
|
-
const cookieName = options.cookieName ? options.cookieName : DEFAULT_COOKIE_NAME;
|
|
878
|
-
priv.setCookie({ cookieName });
|
|
879
|
-
return Promise.resolve((0,_insights_url__WEBPACK_IMPORTED_MODULE_4__.default)(options.routes ? options.routes : _constants__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_ROUTES, configSsoUrl)).then((ssoUrl) => {
|
|
880
|
-
//constructor for new Keycloak Object?
|
|
881
|
-
options.url = ssoUrl;
|
|
882
|
-
options.clientId = 'cloud-services';
|
|
883
|
-
options.realm = 'redhat-external';
|
|
884
|
-
//options for keycloak.init method
|
|
885
|
-
options.promiseType = 'native';
|
|
886
|
-
options.onLoad = 'check-sso';
|
|
887
|
-
options.checkLoginIframe = false;
|
|
888
|
-
const isBeta = window.location.pathname.split('/')[1] === 'beta' ? '/beta' : '';
|
|
889
|
-
options.silentCheckSsoRedirectUri = `https://${window.location.host}${isBeta}/apps/chrome/silent-check-sso.html`;
|
|
890
|
-
if (window.localStorage && window.localStorage.getItem('chrome:jwt:shortSession') === 'true') {
|
|
891
|
-
options.realm = 'short-session';
|
|
892
|
-
}
|
|
893
|
-
//priv.keycloak = Keycloak(options);
|
|
894
|
-
priv.setKeycloak(options, updateToken, loginAllTabs, refreshTokens);
|
|
895
|
-
if (options.token) {
|
|
896
|
-
if (isExistingValid(options.token)) {
|
|
897
|
-
// we still need to init async
|
|
898
|
-
// so that the renewal times and such fire
|
|
899
|
-
priv.initializeKeycloak(options);
|
|
900
|
-
// Here we have an existing key
|
|
901
|
-
// We need to set up some of the keycloak state
|
|
902
|
-
// so that the reset of the methods that Chrome uses
|
|
903
|
-
// to check if things are good get faked out
|
|
904
|
-
// TODO reafctor the direct access to priv.keycloak
|
|
905
|
-
// away from the users
|
|
906
|
-
priv.setToken(options.token);
|
|
907
|
-
return Promise.resolve();
|
|
908
|
-
// return new Promise((resolve) => {
|
|
909
|
-
// resolve();
|
|
910
|
-
// });
|
|
911
|
-
}
|
|
912
|
-
else {
|
|
913
|
-
delete options.token;
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
return priv.initialize(options).then(initSuccess).catch(initError);
|
|
917
|
-
});
|
|
918
|
-
};
|
|
919
|
-
function isExistingValid(token) {
|
|
920
|
-
log('Checking validity of existing JWT');
|
|
921
|
-
try {
|
|
922
|
-
if (!token) {
|
|
923
|
-
return false;
|
|
924
|
-
}
|
|
925
|
-
const parsed = decodeToken(token);
|
|
926
|
-
if (!parsed.exp) {
|
|
927
|
-
return false;
|
|
928
|
-
}
|
|
929
|
-
// Date.now() has extra precision...
|
|
930
|
-
// it includes milis
|
|
931
|
-
// we need to trim it down to valid seconds from epoch
|
|
932
|
-
// because we compare to KC's exp which is seconds from epoch
|
|
933
|
-
const now = Date.now().toString().substr(0, 10);
|
|
934
|
-
const exp = parsed.exp - parseInt(now);
|
|
935
|
-
log(`Token expires in ${exp}`);
|
|
936
|
-
// We want to invalidate tokens if they are getting close
|
|
937
|
-
// to the expiry time
|
|
938
|
-
// So that we can be someone safe from time skew
|
|
939
|
-
// issues on our APIs
|
|
940
|
-
// i.e. the client could have a slight time skew
|
|
941
|
-
// and the API is true (because NTP) and we could send down
|
|
942
|
-
// a JWT that is actually exipred
|
|
943
|
-
if (exp > 90) {
|
|
944
|
-
priv.setTokenParsed(parsed);
|
|
945
|
-
return true;
|
|
946
|
-
}
|
|
947
|
-
else {
|
|
948
|
-
if (exp > 0) {
|
|
949
|
-
log('token is expiring in < 90 seconds');
|
|
950
|
-
}
|
|
951
|
-
else {
|
|
952
|
-
log('token is expired');
|
|
953
|
-
}
|
|
954
|
-
return false;
|
|
955
|
-
}
|
|
956
|
-
}
|
|
957
|
-
catch (e) {
|
|
958
|
-
log(e);
|
|
959
|
-
return false;
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
// keycloak init successful
|
|
963
|
-
function initSuccess() {
|
|
964
|
-
log('JWT Initialized');
|
|
965
|
-
setCookie(priv.getToken());
|
|
966
|
-
}
|
|
967
|
-
// keycloak init failed
|
|
968
|
-
function initError() {
|
|
969
|
-
log('JWT init error');
|
|
970
|
-
logout();
|
|
971
|
-
}
|
|
972
|
-
/*** Login/Logout ***/
|
|
973
|
-
function login() {
|
|
974
|
-
log('Logging in');
|
|
975
|
-
// Redirect to login
|
|
976
|
-
js_cookie__WEBPACK_IMPORTED_MODULE_1__.default.set('cs_loggedOut', 'false');
|
|
977
|
-
return priv.login({ redirectUri: location.href, scope: getPartnerScope(window.location.pathname) });
|
|
978
|
-
}
|
|
979
|
-
function logout(bounce) {
|
|
980
|
-
log('Logging out');
|
|
981
|
-
const cookieName = priv.getCookie()?.cookieName;
|
|
982
|
-
if (cookieName) {
|
|
983
|
-
js_cookie__WEBPACK_IMPORTED_MODULE_1__.default.remove(cookieName);
|
|
984
|
-
}
|
|
985
|
-
js_cookie__WEBPACK_IMPORTED_MODULE_1__.default.remove('cs_demo');
|
|
986
|
-
const isBeta = window.location.pathname.split('/')[1] === 'beta' ? '/beta' : '';
|
|
987
|
-
const keys = Object.keys(localStorage).filter((key) => key.endsWith('/api/entitlements/v1/services') ||
|
|
988
|
-
key.endsWith('/chrome') ||
|
|
989
|
-
key.endsWith('/chrome-store') ||
|
|
990
|
-
key.startsWith('kc-callback') ||
|
|
991
|
-
key.startsWith(GLOBAL_FILTER_KEY));
|
|
992
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteLocalStorageItems)(keys);
|
|
993
|
-
// Redirect to logout
|
|
994
|
-
if (bounce) {
|
|
995
|
-
const eightSeconds = new Date(new Date().getTime() + 8 * 1000);
|
|
996
|
-
js_cookie__WEBPACK_IMPORTED_MODULE_1__.default.set('cs_loggedOut', 'true', {
|
|
997
|
-
expires: eightSeconds,
|
|
998
|
-
});
|
|
999
|
-
priv.logout({
|
|
1000
|
-
redirectUri: `https://${window.location.host}${isBeta}`,
|
|
1001
|
-
});
|
|
1002
|
-
// Clear cookies and tokens
|
|
1003
|
-
priv.clearToken();
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
const logoutAllTabs = (bounce) => {
|
|
1007
|
-
authChannel.postMessage({ type: 'logout' });
|
|
1008
|
-
logout(bounce);
|
|
1009
|
-
};
|
|
1010
|
-
function loginAllTabs() {
|
|
1011
|
-
authChannel.postMessage({ type: 'login' });
|
|
1012
|
-
}
|
|
1013
|
-
/*** User Functions ***/
|
|
1014
|
-
// Get user information
|
|
1015
|
-
const getUserInfo = () => {
|
|
1016
|
-
log('Getting User Information');
|
|
1017
|
-
const jwtCookie = js_cookie__WEBPACK_IMPORTED_MODULE_1__.default.get(DEFAULT_COOKIE_NAME);
|
|
1018
|
-
if (jwtCookie && isExistingValid(jwtCookie) && isExistingValid(priv.getToken())) {
|
|
1019
|
-
return (0,_insights_user__WEBPACK_IMPORTED_MODULE_5__.default)(priv.getTokenParsed());
|
|
1020
|
-
}
|
|
1021
|
-
return updateToken()
|
|
1022
|
-
.then(() => {
|
|
1023
|
-
log('Successfully updated token');
|
|
1024
|
-
return (0,_insights_user__WEBPACK_IMPORTED_MODULE_5__.default)(priv.getTokenParsed());
|
|
1025
|
-
})
|
|
1026
|
-
.catch(() => {
|
|
1027
|
-
if ((0,_utils__WEBPACK_IMPORTED_MODULE_2__.pageRequiresAuthentication)()) {
|
|
1028
|
-
log('Trying to log in user to refresh token');
|
|
1029
|
-
return login();
|
|
1030
|
-
}
|
|
1031
|
-
});
|
|
1032
|
-
};
|
|
1033
|
-
// Check to see if the user is loaded, this is what API calls should wait on
|
|
1034
|
-
const isAuthenticated = () => {
|
|
1035
|
-
log(`User Ready: ${priv.getAuthenticated()}`);
|
|
1036
|
-
return priv.getAuthenticated();
|
|
1037
|
-
};
|
|
1038
|
-
/*** Check Token Status ***/
|
|
1039
|
-
// If a token is expired, logout of all tabs
|
|
1040
|
-
const expiredToken = () => {
|
|
1041
|
-
log('Token has expired, trying to log out');
|
|
1042
|
-
logout();
|
|
1043
|
-
};
|
|
1044
|
-
// Broadcast message to refresh tokens across tabs
|
|
1045
|
-
function refreshTokens() {
|
|
1046
|
-
setCookie(priv.getToken());
|
|
1047
|
-
authChannel.postMessage({ type: 'refresh' });
|
|
1048
|
-
}
|
|
1049
|
-
// Actually update the token
|
|
1050
|
-
function updateToken() {
|
|
1051
|
-
return Promise.resolve(priv?.updateToken?.())
|
|
1052
|
-
.then((refreshed) => {
|
|
1053
|
-
// Important! after we update the token
|
|
1054
|
-
// we have to again populate the Cookie!
|
|
1055
|
-
// Otherwise we just update and dont send
|
|
1056
|
-
// the updated token down stream... and things 401
|
|
1057
|
-
setCookie(priv.getToken());
|
|
1058
|
-
log('Attempting to update token');
|
|
1059
|
-
if (refreshed) {
|
|
1060
|
-
log('Token was successfully refreshed');
|
|
1061
|
-
}
|
|
1062
|
-
else {
|
|
1063
|
-
log('Token is still valid, not updating');
|
|
1064
|
-
}
|
|
1065
|
-
})
|
|
1066
|
-
.catch((err) => {
|
|
1067
|
-
log(err);
|
|
1068
|
-
_sentry_react__WEBPACK_IMPORTED_MODULE_10__.captureException(err);
|
|
1069
|
-
log('Token updated failed, trying to reauth');
|
|
1070
|
-
login();
|
|
1071
|
-
});
|
|
1072
|
-
}
|
|
1073
|
-
function getCookieExpires(exp) {
|
|
1074
|
-
// we want the cookie to expire at the same time as the JWT session
|
|
1075
|
-
// so we take the exp and get a new GTMString from that
|
|
1076
|
-
const date = new Date(0);
|
|
1077
|
-
date.setUTCSeconds(exp);
|
|
1078
|
-
return date.toUTCString();
|
|
1079
|
-
}
|
|
1080
|
-
// Set the cookie for 3scale
|
|
1081
|
-
function setCookie(token) {
|
|
1082
|
-
log('Setting the cs_jwt cookie');
|
|
1083
|
-
if (token && token.length > 10) {
|
|
1084
|
-
const cookieName = priv.getCookie()?.cookieName;
|
|
1085
|
-
if (cookieName) {
|
|
1086
|
-
setCookieWrapper(`${cookieName}=${token};` + `path=/api;` + `secure=true;` + `expires=${getCookieExpires(decodeToken(token).exp)}`);
|
|
1087
|
-
}
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
// do this so we can mock out for test
|
|
1091
|
-
function setCookieWrapper(str) {
|
|
1092
|
-
window.document.cookie = str;
|
|
1093
|
-
}
|
|
1094
|
-
// Encoded WIP
|
|
1095
|
-
const getEncodedToken = () => {
|
|
1096
|
-
log('Trying to get the encoded token');
|
|
1097
|
-
if (!isExistingValid(priv.getToken())) {
|
|
1098
|
-
log('Failed to get encoded token, trying to update');
|
|
1099
|
-
updateToken();
|
|
1100
|
-
}
|
|
1101
|
-
return priv.getToken();
|
|
1102
|
-
};
|
|
1103
|
-
// Keycloak server URL
|
|
1104
|
-
const getUrl = (ssoUrl) => {
|
|
1105
|
-
return (0,_insights_url__WEBPACK_IMPORTED_MODULE_4__.default)(_constants__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_ROUTES, ssoUrl);
|
|
1106
|
-
};
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
/***/ }),
|
|
1110
|
-
|
|
1111
|
-
/***/ "./src/js/jwt/logger.ts":
|
|
1112
|
-
/*!******************************!*\
|
|
1113
|
-
!*** ./src/js/jwt/logger.ts ***!
|
|
1114
|
-
\******************************/
|
|
1115
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1116
|
-
|
|
1117
|
-
__webpack_require__.r(__webpack_exports__);
|
|
1118
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1119
|
-
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1120
|
-
/* harmony export */ });
|
|
1121
|
-
// const pub = {};
|
|
1122
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((fileName) => {
|
|
1123
|
-
return (msg) => {
|
|
1124
|
-
if (window.console) {
|
|
1125
|
-
if (window.localStorage && window.localStorage.getItem('chrome:jwt:debug')) {
|
|
1126
|
-
window.console.log(`[JWT][${fileName}] ${msg}`);
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
};
|
|
1130
|
-
});
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
/***/ }),
|
|
1134
|
-
|
|
1135
|
-
/***/ "./src/js/utils.ts":
|
|
1136
|
-
/*!*************************!*\
|
|
1137
|
-
!*** ./src/js/utils.ts ***!
|
|
1138
|
-
\*************************/
|
|
1139
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1140
|
-
|
|
1141
|
-
__webpack_require__.r(__webpack_exports__);
|
|
1142
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1143
|
-
/* harmony export */ "getWindow": () => (/* binding */ getWindow),
|
|
1144
|
-
/* harmony export */ "isValidAccountNumber": () => (/* binding */ isValidAccountNumber),
|
|
1145
|
-
/* harmony export */ "getSection": () => (/* binding */ getSection),
|
|
1146
|
-
/* harmony export */ "pageAllowsUnentitled": () => (/* binding */ pageAllowsUnentitled),
|
|
1147
|
-
/* harmony export */ "pageRequiresAuthentication": () => (/* binding */ pageRequiresAuthentication),
|
|
1148
|
-
/* harmony export */ "createReduxListener": () => (/* binding */ createReduxListener),
|
|
1149
|
-
/* harmony export */ "deleteLocalStorageItems": () => (/* binding */ deleteLocalStorageItems),
|
|
1150
|
-
/* harmony export */ "lastActive": () => (/* binding */ lastActive),
|
|
1151
|
-
/* harmony export */ "isAnsible": () => (/* binding */ isAnsible),
|
|
1152
|
-
/* harmony export */ "getUrl": () => (/* binding */ getUrl),
|
|
1153
|
-
/* harmony export */ "getEnv": () => (/* binding */ getEnv),
|
|
1154
|
-
/* harmony export */ "getEnvDetails": () => (/* binding */ getEnvDetails),
|
|
1155
|
-
/* harmony export */ "isProd": () => (/* binding */ isProd),
|
|
1156
|
-
/* harmony export */ "isBeta": () => (/* binding */ isBeta),
|
|
1157
|
-
/* harmony export */ "isFedRamp": () => (/* binding */ isFedRamp),
|
|
1158
|
-
/* harmony export */ "updateDocumentTitle": () => (/* binding */ updateDocumentTitle),
|
|
1159
|
-
/* harmony export */ "highlightItems": () => (/* binding */ highlightItems),
|
|
1160
|
-
/* harmony export */ "levelArray": () => (/* binding */ levelArray),
|
|
1161
|
-
/* harmony export */ "noop": () => (/* binding */ noop),
|
|
1162
|
-
/* harmony export */ "trustarcScriptSetup": () => (/* binding */ trustarcScriptSetup),
|
|
1163
|
-
/* harmony export */ "loadFedModules": () => (/* binding */ loadFedModules),
|
|
1164
|
-
/* harmony export */ "generateRoutesList": () => (/* binding */ generateRoutesList)
|
|
1165
|
-
/* harmony export */ });
|
|
1166
|
-
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
|
|
1167
|
-
/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
|
|
1168
|
-
/* harmony import */ var _jwt_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jwt/constants */ "./src/js/jwt/constants.ts");
|
|
1169
|
-
/* harmony import */ var lodash_flatMap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/flatMap */ "./node_modules/lodash/flatMap.js");
|
|
1170
|
-
/* harmony import */ var lodash_flatMap__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_flatMap__WEBPACK_IMPORTED_MODULE_2__);
|
|
1171
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
|
|
1172
|
-
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_3__);
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
function getWindow() {
|
|
1178
|
-
return window;
|
|
1179
|
-
}
|
|
1180
|
-
function isValidAccountNumber(num) {
|
|
1181
|
-
if (!num)
|
|
1182
|
-
return false;
|
|
1183
|
-
if (num === -1)
|
|
1184
|
-
return false;
|
|
1185
|
-
if (num === '-1')
|
|
1186
|
-
return false;
|
|
1187
|
-
return Number.isInteger(Number(num));
|
|
1188
|
-
}
|
|
1189
|
-
function getSection() {
|
|
1190
|
-
const sections = getWindow().location.pathname.split('/');
|
|
1191
|
-
if (sections[1] === 'beta') {
|
|
1192
|
-
return sections[2] || '';
|
|
1193
|
-
}
|
|
1194
|
-
return sections[1];
|
|
1195
|
-
}
|
|
1196
|
-
function pageAllowsUnentitled() {
|
|
1197
|
-
const pathname = getWindow().location.pathname;
|
|
1198
|
-
if (pathname === '/' ||
|
|
1199
|
-
pathname === '/beta' ||
|
|
1200
|
-
pathname === '/beta/' ||
|
|
1201
|
-
pathname.indexOf('/openshift') === 0 ||
|
|
1202
|
-
pathname.indexOf('/beta/openshift') === 0 ||
|
|
1203
|
-
pathname.indexOf('/security') === 0 ||
|
|
1204
|
-
pathname.indexOf('/beta/security') === 0 ||
|
|
1205
|
-
pathname.indexOf('/application-services') === 0 ||
|
|
1206
|
-
pathname.indexOf('/beta/application-services') === 0 ||
|
|
1207
|
-
pathname.indexOf('/hac') === 0 ||
|
|
1208
|
-
pathname.indexOf('/beta/hac') === 0 ||
|
|
1209
|
-
pathname.indexOf('/ansible/ansible-dashboard/trial') === 0 ||
|
|
1210
|
-
pathname.indexOf('/beta/ansible/ansible-dashboard/trial') === 0) {
|
|
1211
|
-
return true;
|
|
1212
|
-
}
|
|
1213
|
-
return false;
|
|
1214
|
-
}
|
|
1215
|
-
function pageRequiresAuthentication() {
|
|
1216
|
-
const section = getSection();
|
|
1217
|
-
if (section === 'insights' ||
|
|
1218
|
-
section === 'cost-management' ||
|
|
1219
|
-
section === 'apps' ||
|
|
1220
|
-
section === 'ansible' ||
|
|
1221
|
-
section === 'migrations' ||
|
|
1222
|
-
section === 'subscriptions' ||
|
|
1223
|
-
section === 'openshift' ||
|
|
1224
|
-
section === 'settings' ||
|
|
1225
|
-
section === 'user-preferences' ||
|
|
1226
|
-
section === 'internal' ||
|
|
1227
|
-
section === 'application-services') {
|
|
1228
|
-
return true;
|
|
1229
|
-
}
|
|
1230
|
-
return false;
|
|
1231
|
-
}
|
|
1232
|
-
/**
|
|
1233
|
-
* Creates a redux listener that watches the state on given path (e.g. chrome.appNav) and calls
|
|
1234
|
-
* the given function when the state on the given path changes.
|
|
1235
|
-
*
|
|
1236
|
-
* The function is called with two parameters: current state value on the path, store reference
|
|
1237
|
-
*/
|
|
1238
|
-
function createReduxListener(store, path, fn) {
|
|
1239
|
-
let previous = undefined;
|
|
1240
|
-
return () => {
|
|
1241
|
-
const state = store.getState();
|
|
1242
|
-
const current = lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(state, path);
|
|
1243
|
-
if (current !== previous) {
|
|
1244
|
-
previous = current;
|
|
1245
|
-
fn(current, store);
|
|
1246
|
-
}
|
|
1247
|
-
};
|
|
1248
|
-
}
|
|
1249
|
-
function deleteLocalStorageItems(keys) {
|
|
1250
|
-
keys.map((key) => localStorage.removeItem(key));
|
|
1251
|
-
}
|
|
1252
|
-
function lastActive(searchString, fallback) {
|
|
1253
|
-
return Object.keys(localStorage).reduce((acc, curr) => {
|
|
1254
|
-
if (curr.includes(searchString)) {
|
|
1255
|
-
try {
|
|
1256
|
-
let accDate;
|
|
1257
|
-
try {
|
|
1258
|
-
const localStorageDate = localStorage.getItem(acc);
|
|
1259
|
-
accDate = localStorageDate ? new Date(JSON.parse(localStorageDate)?.expires) : new Date();
|
|
1260
|
-
}
|
|
1261
|
-
catch {
|
|
1262
|
-
accDate = new Date();
|
|
1263
|
-
}
|
|
1264
|
-
const currObj = JSON.parse(localStorage.getItem(curr) || '');
|
|
1265
|
-
return accDate >= new Date(currObj.expires) ? acc : curr;
|
|
1266
|
-
}
|
|
1267
|
-
catch (e) {
|
|
1268
|
-
return acc;
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
return acc;
|
|
1272
|
-
}, fallback);
|
|
1273
|
-
}
|
|
1274
|
-
const isAnsible = (sections) => (sections.includes('ansible') && sections.includes('insights') ? 1 : 0);
|
|
1275
|
-
function getUrl(type) {
|
|
1276
|
-
if (window.location.pathname === '/beta/' || window.location.pathname === '/') {
|
|
1277
|
-
return 'landing';
|
|
1278
|
-
}
|
|
1279
|
-
const sections = window.location.pathname.split('/');
|
|
1280
|
-
if (sections[1] === 'beta') {
|
|
1281
|
-
return type === 'bundle' ? sections[2] : sections[3 + isAnsible(sections)];
|
|
1282
|
-
}
|
|
1283
|
-
return type === 'bundle' ? sections[1] : sections[2 + isAnsible(sections)];
|
|
1284
|
-
}
|
|
1285
|
-
function getEnv() {
|
|
1286
|
-
return Object.entries(_jwt_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ROUTES).find(([, { url }]) => url.includes(location.hostname))?.[0] || 'qa';
|
|
1287
|
-
}
|
|
1288
|
-
function getEnvDetails() {
|
|
1289
|
-
return Object.entries(_jwt_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ROUTES).find(([, { url }]) => url.includes(location.hostname))?.[1];
|
|
1290
|
-
}
|
|
1291
|
-
function isProd() {
|
|
1292
|
-
return location.host === 'cloud.redhat.com' || location.host === 'console.redhat.com' || location.host.includes('prod.foo.redhat.com');
|
|
1293
|
-
}
|
|
1294
|
-
function isBeta() {
|
|
1295
|
-
return window.location.pathname.split('/')[1] === 'beta' ? true : false;
|
|
1296
|
-
}
|
|
1297
|
-
function isFedRamp() {
|
|
1298
|
-
return getEnv() === 'gov';
|
|
1299
|
-
}
|
|
1300
|
-
function updateDocumentTitle(title, noSuffix = false) {
|
|
1301
|
-
const titleSuffix = '| console.redhat.com';
|
|
1302
|
-
if (typeof title === 'undefined') {
|
|
1303
|
-
return;
|
|
1304
|
-
}
|
|
1305
|
-
if (typeof title === 'string') {
|
|
1306
|
-
document.title = title.includes(titleSuffix) || noSuffix ? title : `${title} ${titleSuffix}`;
|
|
1307
|
-
}
|
|
1308
|
-
else {
|
|
1309
|
-
console.warn(`Title is not a string. Got ${typeof title} instead.`);
|
|
1310
|
-
}
|
|
1311
|
-
}
|
|
1312
|
-
const activateChild = (hrefMatch, childRoutes) => {
|
|
1313
|
-
let hasActiveChild = false;
|
|
1314
|
-
const routes = childRoutes.map((item) => {
|
|
1315
|
-
const active = item.href === hrefMatch;
|
|
1316
|
-
if (active) {
|
|
1317
|
-
hasActiveChild = true;
|
|
1318
|
-
}
|
|
1319
|
-
return {
|
|
1320
|
-
...item,
|
|
1321
|
-
active,
|
|
1322
|
-
};
|
|
1323
|
-
});
|
|
1324
|
-
return {
|
|
1325
|
-
active: hasActiveChild,
|
|
1326
|
-
routes,
|
|
1327
|
-
};
|
|
1328
|
-
};
|
|
1329
|
-
function mutateSchema(hrefMatch, navItems) {
|
|
1330
|
-
return navItems.map((item) => {
|
|
1331
|
-
const { href, routes, navItems } = item;
|
|
1332
|
-
if (!href && navItems) {
|
|
1333
|
-
return {
|
|
1334
|
-
...item,
|
|
1335
|
-
navItems: mutateSchema(hrefMatch, navItems),
|
|
1336
|
-
};
|
|
1337
|
-
}
|
|
1338
|
-
if (!href && routes) {
|
|
1339
|
-
return {
|
|
1340
|
-
...item,
|
|
1341
|
-
...activateChild(hrefMatch, routes),
|
|
1342
|
-
};
|
|
1343
|
-
}
|
|
1344
|
-
if (href) {
|
|
1345
|
-
return {
|
|
1346
|
-
...item,
|
|
1347
|
-
active: item.href === hrefMatch,
|
|
1348
|
-
};
|
|
1349
|
-
}
|
|
1350
|
-
return item;
|
|
1351
|
-
});
|
|
1352
|
-
}
|
|
1353
|
-
const highlightItems = (pathname, navItems, sortedLinks) => {
|
|
1354
|
-
const cleanPathname = pathname.replace(/\/$/, '');
|
|
1355
|
-
const segmentsCount = cleanPathname.split('/').length + 1;
|
|
1356
|
-
const matchedLink = sortedLinks.find((href) => {
|
|
1357
|
-
const segmentedHref = href.replace(/\/$/, '').split('/').slice(0, segmentsCount).join('/');
|
|
1358
|
-
return cleanPathname.includes(segmentedHref);
|
|
1359
|
-
});
|
|
1360
|
-
return mutateSchema(matchedLink?.replace(/\/$/, '') || '', navItems);
|
|
1361
|
-
};
|
|
1362
|
-
const levelArray = (navItems) => {
|
|
1363
|
-
return lodash_flatMap__WEBPACK_IMPORTED_MODULE_2___default()(navItems, ({ href, routes, navItems }) => {
|
|
1364
|
-
if (!href && navItems) {
|
|
1365
|
-
return levelArray(navItems);
|
|
1366
|
-
}
|
|
1367
|
-
if (!href && routes) {
|
|
1368
|
-
return levelArray(routes);
|
|
1369
|
-
}
|
|
1370
|
-
if (href) {
|
|
1371
|
-
return [href];
|
|
1372
|
-
}
|
|
1373
|
-
return [];
|
|
1374
|
-
});
|
|
1375
|
-
};
|
|
1376
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
1377
|
-
function noop() { }
|
|
1378
|
-
const trustarcScriptSetup = () => {
|
|
1379
|
-
const trustarcScript = document.createElement('script');
|
|
1380
|
-
trustarcScript.id = 'trustarc';
|
|
1381
|
-
if (location.host === 'console.redhat.com') {
|
|
1382
|
-
trustarcScript.src = '//static.redhat.com/libs/redhat/marketing/latest/trustarc/trustarc.js';
|
|
1383
|
-
}
|
|
1384
|
-
else {
|
|
1385
|
-
trustarcScript.src = '//static.redhat.com/libs/redhat/marketing/latest/trustarc/trustarc.stage.js';
|
|
1386
|
-
}
|
|
1387
|
-
document.body.appendChild(trustarcScript);
|
|
1388
|
-
};
|
|
1389
|
-
const loadFedModules = () => axios__WEBPACK_IMPORTED_MODULE_3___default().get(`${window.location.origin}${isBeta() ? '/beta' : ''}/config/chrome/fed-modules.json?ts=${Date.now()}`, {
|
|
1390
|
-
headers: {
|
|
1391
|
-
'Cache-Control': 'no-cache',
|
|
1392
|
-
Pragma: 'no-cache',
|
|
1393
|
-
Expires: '0',
|
|
1394
|
-
},
|
|
1395
|
-
});
|
|
1396
|
-
const generateRoutesList = (modules) => Object.entries(modules)
|
|
1397
|
-
.reduce((acc, [scope, { dynamic, manifestLocation, isFedramp, modules = [] }]) => [
|
|
1398
|
-
...acc,
|
|
1399
|
-
...modules
|
|
1400
|
-
.map(({ module, routes }) =>
|
|
1401
|
-
/**Clean up this map function */
|
|
1402
|
-
routes.map((route) => ({
|
|
1403
|
-
scope,
|
|
1404
|
-
module,
|
|
1405
|
-
isFedramp: typeof route === 'string' ? isFedramp : route.isFedramp,
|
|
1406
|
-
path: typeof route === 'string' ? route : route.pathname,
|
|
1407
|
-
manifestLocation,
|
|
1408
|
-
dynamic: typeof dynamic === 'boolean' ? dynamic : typeof route === 'string' ? true : route.dynamic,
|
|
1409
|
-
exact: typeof route === 'string' ? false : route.exact,
|
|
1410
|
-
})))
|
|
1411
|
-
.flat(),
|
|
1412
|
-
], [])
|
|
1413
|
-
.sort((a, b) => (a.path.length < b.path.length ? 1 : -1));
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
/***/ }),
|
|
1417
|
-
|
|
1418
|
-
/***/ "./src/js/utils/cache.ts":
|
|
1419
|
-
/*!*******************************!*\
|
|
1420
|
-
!*** ./src/js/utils/cache.ts ***!
|
|
1421
|
-
\*******************************/
|
|
1422
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1423
|
-
|
|
1424
|
-
__webpack_require__.r(__webpack_exports__);
|
|
1425
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1426
|
-
/* harmony export */ "createCacheStore": () => (/* binding */ createCacheStore),
|
|
1427
|
-
/* harmony export */ "bootstrapCache": () => (/* binding */ bootstrapCache),
|
|
1428
|
-
/* harmony export */ "CacheAdapter": () => (/* binding */ CacheAdapter)
|
|
1429
|
-
/* harmony export */ });
|
|
1430
|
-
/* harmony import */ var axios_cache_adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios-cache-adapter */ "./node_modules/axios-cache-adapter/dist/cache.js");
|
|
1431
|
-
/* harmony import */ var axios_cache_adapter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios_cache_adapter__WEBPACK_IMPORTED_MODULE_0__);
|
|
1432
|
-
/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! localforage */ "./node_modules/localforage/dist/localforage.js");
|
|
1433
|
-
/* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_1__);
|
|
1434
|
-
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/js/utils.ts");
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
const createCacheStore = (endpoint, cacheKey) => {
|
|
1439
|
-
const name = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.lastActive)(endpoint, cacheKey);
|
|
1440
|
-
return localforage__WEBPACK_IMPORTED_MODULE_1___default().createInstance({
|
|
1441
|
-
driver: [(localforage__WEBPACK_IMPORTED_MODULE_1___default().LOCALSTORAGE)],
|
|
1442
|
-
name: typeof name === 'string' ? name?.split('/')[0] : name.expires.split('/')[0],
|
|
1443
|
-
});
|
|
1444
|
-
};
|
|
1445
|
-
function bootstrapCache(endpoint, cacheKey) {
|
|
1446
|
-
const store = createCacheStore(endpoint, cacheKey);
|
|
1447
|
-
return (0,axios_cache_adapter__WEBPACK_IMPORTED_MODULE_0__.setupCache)({
|
|
1448
|
-
store,
|
|
1449
|
-
maxAge: 10 * 60 * 1000, // 10 minutes
|
|
1450
|
-
});
|
|
1451
|
-
}
|
|
1452
|
-
let store;
|
|
1453
|
-
/**
|
|
1454
|
-
* Check if the app has switched between beta/non-beta envs.
|
|
1455
|
-
* If it did, we clean the existing chrome cache to prevent stale cache entry.
|
|
1456
|
-
* This issue may occur when the user switches between envs without logging out and in.
|
|
1457
|
-
*/
|
|
1458
|
-
const envSwap = () => {
|
|
1459
|
-
const currentEnv = window.insights.chrome.isBeta() ? 'beta' : 'non-beta';
|
|
1460
|
-
const prevEnv = localStorage.getItem('chrome:prevEnv');
|
|
1461
|
-
if (prevEnv && currentEnv !== prevEnv) {
|
|
1462
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteLocalStorageItems)(Object.keys(localStorage).filter((item) => item.endsWith('/chrome-store')));
|
|
1463
|
-
}
|
|
1464
|
-
localStorage.setItem('chrome:prevEnv', currentEnv);
|
|
1465
|
-
};
|
|
1466
|
-
class CacheAdapter {
|
|
1467
|
-
maxAge;
|
|
1468
|
-
expires;
|
|
1469
|
-
name;
|
|
1470
|
-
endpoint;
|
|
1471
|
-
cacheKey;
|
|
1472
|
-
constructor(endpoint, cacheKey, maxAge = 10 * 60 * 1000) {
|
|
1473
|
-
this.maxAge = maxAge;
|
|
1474
|
-
this.expires = new Date().getTime() + this.maxAge;
|
|
1475
|
-
envSwap();
|
|
1476
|
-
if (!store) {
|
|
1477
|
-
const name = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.lastActive)(endpoint, cacheKey);
|
|
1478
|
-
let cached;
|
|
1479
|
-
const cacheId = typeof name === 'string' ? name : name.expires;
|
|
1480
|
-
try {
|
|
1481
|
-
cached = JSON.parse(localStorage.getItem(cacheId) || '');
|
|
1482
|
-
}
|
|
1483
|
-
catch (e) {
|
|
1484
|
-
cached = localStorage.getItem(cacheId);
|
|
1485
|
-
}
|
|
1486
|
-
this.name = cacheId;
|
|
1487
|
-
this.endpoint = endpoint;
|
|
1488
|
-
this.cacheKey = cacheKey;
|
|
1489
|
-
store = createCacheStore(endpoint, cacheKey);
|
|
1490
|
-
if (new Date(parseInt(cached?.expires, 10)) >= new Date()) {
|
|
1491
|
-
this.setCache(parseInt(cached?.expires, 10), cached?.data);
|
|
1492
|
-
}
|
|
1493
|
-
else {
|
|
1494
|
-
const cacheTime = new Date().getTime() + this.maxAge;
|
|
1495
|
-
this.setCache(cacheTime, {});
|
|
1496
|
-
}
|
|
1497
|
-
}
|
|
1498
|
-
}
|
|
1499
|
-
async setCache(expires, data) {
|
|
1500
|
-
this.expires = expires;
|
|
1501
|
-
if (this.endpoint) {
|
|
1502
|
-
await store.setItem(this.endpoint, {
|
|
1503
|
-
data,
|
|
1504
|
-
expires,
|
|
1505
|
-
});
|
|
1506
|
-
}
|
|
1507
|
-
}
|
|
1508
|
-
async invalidateStore() {
|
|
1509
|
-
if (new Date(this.expires) <= new Date()) {
|
|
1510
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteLocalStorageItems)(Object.keys(localStorage).filter((item) => item.endsWith('/chrome')));
|
|
1511
|
-
await localforage__WEBPACK_IMPORTED_MODULE_1___default().dropInstance();
|
|
1512
|
-
if (this.endpoint && this.cacheKey) {
|
|
1513
|
-
store = createCacheStore(this.endpoint, this.cacheKey);
|
|
1514
|
-
const cacheTime = new Date().getTime() + this.maxAge;
|
|
1515
|
-
await this.setCache(cacheTime, {});
|
|
1516
|
-
}
|
|
1517
|
-
}
|
|
1518
|
-
}
|
|
1519
|
-
async setItem(key, data) {
|
|
1520
|
-
await this.invalidateStore();
|
|
1521
|
-
if (this.endpoint) {
|
|
1522
|
-
const cachedData = await store.getItem(this.endpoint);
|
|
1523
|
-
if (cachedData != null) {
|
|
1524
|
-
cachedData.data = {
|
|
1525
|
-
...cachedData?.data,
|
|
1526
|
-
[key]: data,
|
|
1527
|
-
};
|
|
1528
|
-
}
|
|
1529
|
-
await store.setItem(this.endpoint, cachedData);
|
|
1530
|
-
}
|
|
1531
|
-
}
|
|
1532
|
-
async getItem(key) {
|
|
1533
|
-
await this.invalidateStore();
|
|
1534
|
-
if (this.endpoint) {
|
|
1535
|
-
const cachedData = await store.getItem(this.endpoint);
|
|
1536
|
-
return cachedData?.data?.[key];
|
|
1537
|
-
}
|
|
1538
|
-
return Promise.resolve();
|
|
1539
|
-
}
|
|
1540
|
-
}
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
/***/ }),
|
|
1544
|
-
|
|
1545
|
-
/***/ "./src/js/utils/isAnsibleTrialFlagActive.ts":
|
|
1546
|
-
/*!**************************************************!*\
|
|
1547
|
-
!*** ./src/js/utils/isAnsibleTrialFlagActive.ts ***!
|
|
1548
|
-
\**************************************************/
|
|
1549
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1550
|
-
|
|
1551
|
-
__webpack_require__.r(__webpack_exports__);
|
|
1552
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1553
|
-
/* harmony export */ "ANSIBLE_TRIAL_FLAG": () => (/* binding */ ANSIBLE_TRIAL_FLAG),
|
|
1554
|
-
/* harmony export */ "isAnsibleTrialFlagActive": () => (/* binding */ isAnsibleTrialFlagActive),
|
|
1555
|
-
/* harmony export */ "setAnsibleTrialFlag": () => (/* binding */ setAnsibleTrialFlag),
|
|
1556
|
-
/* harmony export */ "clearAnsibleTrialFlag": () => (/* binding */ clearAnsibleTrialFlag)
|
|
1557
|
-
/* harmony export */ });
|
|
1558
|
-
/* harmony import */ var _jwt_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jwt/logger */ "./src/js/jwt/logger.ts");
|
|
1559
|
-
|
|
1560
|
-
const ANSIBLE_TRIAL_FLAG = 'chrome.ansible.trial';
|
|
1561
|
-
const TRIAL_DURATION = 10 * 60 * 1000; // 10 minutes
|
|
1562
|
-
const log = (0,_jwt_logger__WEBPACK_IMPORTED_MODULE_0__.default)('Ansible trial invalidation');
|
|
1563
|
-
const isAnsibleTrialFlagActive = () => {
|
|
1564
|
-
let expiration = localStorage.getItem(ANSIBLE_TRIAL_FLAG);
|
|
1565
|
-
if (expiration) {
|
|
1566
|
-
try {
|
|
1567
|
-
expiration = parseInt(expiration);
|
|
1568
|
-
if (isNaN(expiration)) {
|
|
1569
|
-
// expiration is not a valid number
|
|
1570
|
-
return false;
|
|
1571
|
-
}
|
|
1572
|
-
return expiration + TRIAL_DURATION > Date.now();
|
|
1573
|
-
}
|
|
1574
|
-
catch (error) {
|
|
1575
|
-
log(`Enable to parse ansible trial flag expiration: ${error}`);
|
|
1576
|
-
}
|
|
1577
|
-
}
|
|
1578
|
-
};
|
|
1579
|
-
const setAnsibleTrialFlag = () => {
|
|
1580
|
-
localStorage.setItem(ANSIBLE_TRIAL_FLAG, Date.now().toString());
|
|
1581
|
-
};
|
|
1582
|
-
const clearAnsibleTrialFlag = () => {
|
|
1583
|
-
localStorage.removeItem(ANSIBLE_TRIAL_FLAG);
|
|
1584
|
-
};
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
/***/ })
|
|
1588
|
-
|
|
1589
|
-
}]);
|