@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.
Files changed (158) hide show
  1. package/federated-modules.js +4 -2
  2. package/package.json +2 -1
  3. package/repos/insights-chrome-build/58231b16fdee45a03a4ee3cf94a9f2c3 +3 -6
  4. package/repos/insights-chrome-build/app.info.json +5 -5
  5. package/repos/insights-chrome-build/index.html +4 -4
  6. package/repos/insights-chrome-build/js/79c835ddc356c3ef.woff +0 -0
  7. package/repos/insights-chrome-build/js/8f3e80eba644e3ec.svg +33 -0
  8. 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
  9. 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
  10. package/repos/insights-chrome-build/js/ajs-destination.b3f9836f62184986.js +594 -0
  11. package/repos/insights-chrome-build/js/{auto-track.c1dc7ccd468c8c55255f.js → auto-track.b3f9836f62184986.js} +3 -3
  12. package/repos/insights-chrome-build/js/cb827f53cc6d6dcf.woff2 +0 -0
  13. package/repos/insights-chrome-build/js/{chrome.c1dc7ccd468c8c55255f.js → chrome-root.b3f9836f62184986.js} +10486 -90
  14. package/repos/insights-chrome-build/js/{chrome-root.c1dc7ccd468c8c55255f.js → chrome.b3f9836f62184986.js} +112 -102
  15. package/repos/insights-chrome-build/js/fed-mods.json +7 -10
  16. package/repos/insights-chrome-build/js/{main.c1dc7ccd468c8c55255f.css → main.b3f9836f62184986.css} +841 -1094
  17. package/repos/insights-chrome-build/js/node_modules_hoist-non-react-statics_dist_hoist-non-react-statics_cjs_js.b3f9836f62184986.js +323 -0
  18. package/repos/insights-chrome-build/js/node_modules_lodash_isEqual_js.b3f9836f62184986.js +48 -0
  19. 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
  20. package/repos/insights-chrome-build/js/{queryString.c1dc7ccd468c8c55255f.js → queryString.b3f9836f62184986.js} +49 -5
  21. package/repos/insights-chrome-build/js/quick-start.b3f9836f62184986.js +47 -0
  22. package/repos/insights-chrome-build/js/{schemaFilter.c1dc7ccd468c8c55255f.js → schemaFilter.b3f9836f62184986.js} +4 -2
  23. package/repos/insights-chrome-build/js/src_bootstrap_tsx-src_moduleOverrides_unfetch_ts-node_modules_redhat-cloud-services_frontend--275e6e.b3f9836f62184986.css +27041 -0
  24. package/repos/insights-chrome-build/js/src_bootstrap_tsx-src_moduleOverrides_unfetch_ts-node_modules_redhat-cloud-services_frontend--275e6e.b3f9836f62184986.js +20468 -0
  25. package/repos/insights-chrome-build/js/src_components_Debugger_index_ts.b3f9836f62184986.css +52 -0
  26. package/repos/insights-chrome-build/js/src_components_Debugger_index_ts.b3f9836f62184986.js +512 -0
  27. package/repos/insights-chrome-build/js/src_components_FavoriteServices_EmptyState_tsx-src_hooks_useFavoritedServices_ts.b3f9836f62184986.css +8664 -0
  28. package/repos/insights-chrome-build/js/src_components_FavoriteServices_EmptyState_tsx-src_hooks_useFavoritedServices_ts.b3f9836f62184986.js +5098 -0
  29. package/repos/insights-chrome-build/js/src_components_FavoriteServices_LandingNavFavorites_tsx-src_utils_common_ts.b3f9836f62184986.css +8662 -0
  30. package/repos/insights-chrome-build/js/src_components_FavoriteServices_LandingNavFavorites_tsx-src_utils_common_ts.b3f9836f62184986.js +898 -0
  31. package/repos/insights-chrome-build/js/src_components_NotEntitledModal_index_tsx.b3f9836f62184986.css +30 -0
  32. package/repos/insights-chrome-build/js/src_components_NotEntitledModal_index_tsx.b3f9836f62184986.js +237 -0
  33. package/repos/insights-chrome-build/js/src_components_QuickstartsCatalogRoute_index_ts.b3f9836f62184986.js +106 -0
  34. package/repos/insights-chrome-build/js/{src_js_App_Stratosphere_ProductSelection_tsx.c1dc7ccd468c8c55255f.css → src_components_Stratosphere_ProductSelection_tsx.b3f9836f62184986.css} +105 -1375
  35. package/repos/insights-chrome-build/js/src_components_Stratosphere_ProductSelection_tsx.b3f9836f62184986.js +335 -0
  36. package/repos/insights-chrome-build/js/src_moduleOverrides_chart-utils-override_js-src_pdf_DownloadButton_tsx-webpack_sharing_consum-3a44a6.b3f9836f62184986.js +91 -0
  37. package/repos/insights-chrome-build/js/{ajs-destination.c1dc7ccd468c8c55255f.js → tsub-middleware.b3f9836f62184986.js} +800 -820
  38. 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
  39. 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
  40. 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
  41. 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
  42. package/repos/insights-chrome-build/js/vendors-node_modules_openshift_dynamic-plugin-sdk_dist_index_js.b3f9836f62184986.js +17197 -0
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. package/repos/insights-chrome-build/js/vendors-node_modules_react-router-dom_dist_index_js.b3f9836f62184986.js +6691 -0
  53. 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
  54. package/repos/insights-chrome-build/js/vendors-node_modules_redhat-cloud-services_chrome_esm_index_js.b3f9836f62184986.js +708 -0
  55. package/repos/insights-chrome-build/js/vendors-node_modules_redhat-cloud-services_frontend-components-utilities_esm_interceptors_int-b5fffe.b3f9836f62184986.js +21636 -0
  56. package/repos/insights-chrome-build/js/vendors-node_modules_scalprum_core_dist_esm_index_js.b3f9836f62184986.js +363 -0
  57. 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
  58. 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
  59. 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
  60. package/search-ignored-styles.js +26 -9
  61. package/repos/insights-chrome-build/js/0140846175072d73db39.woff +0 -0
  62. package/repos/insights-chrome-build/js/e888fa788db9794c334f.woff2 +0 -0
  63. package/repos/insights-chrome-build/js/middleware.c1dc7ccd468c8c55255f.js +0 -138
  64. 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
  65. package/repos/insights-chrome-build/js/quick-start.c1dc7ccd468c8c55255f.js +0 -33
  66. package/repos/insights-chrome-build/js/src_js_App_Routes_QuickstartsCatalogRoute_js.c1dc7ccd468c8c55255f.js +0 -79
  67. package/repos/insights-chrome-build/js/src_js_App_Sidenav_LandingNav_js.c1dc7ccd468c8c55255f.css +0 -17
  68. package/repos/insights-chrome-build/js/src_js_App_Sidenav_LandingNav_js.c1dc7ccd468c8c55255f.js +0 -129
  69. package/repos/insights-chrome-build/js/src_js_App_Sidenav_Navigation_componentMapper_js.c1dc7ccd468c8c55255f.js +0 -750
  70. package/repos/insights-chrome-build/js/src_js_App_Sidenav_Navigation_index_js.c1dc7ccd468c8c55255f.js +0 -416
  71. package/repos/insights-chrome-build/js/src_js_App_Stratosphere_ProductSelection_tsx.c1dc7ccd468c8c55255f.js +0 -283
  72. 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
  73. 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
  74. package/repos/insights-chrome-build/js/src_js_inventory_modules_AppInfo_js.c1dc7ccd468c8c55255f.js +0 -182
  75. package/repos/insights-chrome-build/js/src_js_inventory_modules_DetailWrapper_js.c1dc7ccd468c8c55255f.js +0 -182
  76. package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryDetailHead_js.c1dc7ccd468c8c55255f.js +0 -182
  77. package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryDetail_js.c1dc7ccd468c8c55255f.js +0 -182
  78. package/repos/insights-chrome-build/js/src_js_inventory_modules_InventoryTable_js.c1dc7ccd468c8c55255f.js +0 -182
  79. package/repos/insights-chrome-build/js/src_js_inventory_modules_TagWithDialog_js.c1dc7ccd468c8c55255f.js +0 -182
  80. package/repos/insights-chrome-build/js/src_js_jwt_insights_offline_ts-src_js_jwt_jwt_ts.c1dc7ccd468c8c55255f.js +0 -1589
  81. package/repos/insights-chrome-build/js/src_js_jwt_modules_useChromeAuth_ts.c1dc7ccd468c8c55255f.js +0 -64
  82. 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
  83. 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
  84. package/repos/insights-chrome-build/js/vendors-node_modules_history_esm_history_js.c1dc7ccd468c8c55255f.js +0 -1148
  85. 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
  86. package/repos/insights-chrome-build/js/vendors-node_modules_react-router-dom_esm_react-router-dom_js.c1dc7ccd468c8c55255f.js +0 -360
  87. package/repos/insights-chrome-build/js/vendors-node_modules_react-router_esm_react-router_js.c1dc7ccd468c8c55255f.js +0 -1466
  88. 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
  89. /package/repos/insights-chrome-build/js/{4e58e730f447f9d6a422.woff2 → 00e10699d4604274.woff2} +0 -0
  90. /package/repos/insights-chrome-build/js/{54b2e33870ba270ba774.woff2 → 03be9971fdd08ef3.woff2} +0 -0
  91. /package/repos/insights-chrome-build/js/{ab4371a522c3fce8ad2d.woff2 → 05294d67f8e33aab.woff2} +0 -0
  92. /package/repos/insights-chrome-build/js/{60cc25d4be2d99536ede.woff2 → 091b27e83c831713.woff2} +0 -0
  93. /package/repos/insights-chrome-build/js/{164a0ab4c909b911c99b.woff → 0d54864d782470c6.woff} +0 -0
  94. /package/repos/insights-chrome-build/js/{65deba23a8337b21a451.woff2 → 0d5f5f4e3bbf47e1.woff2} +0 -0
  95. /package/repos/insights-chrome-build/js/{732b5ddbe8d56f5462b6.woff → 1039d3d8000f2c4b.woff} +0 -0
  96. /package/repos/insights-chrome-build/js/{246cf166b6945bf1c584.woff2 → 13f6558f31b2ee0f.woff2} +0 -0
  97. /package/repos/insights-chrome-build/js/{d6b6f0c7a2af826d139d.woff → 1412957e204a8a1a.woff} +0 -0
  98. /package/repos/insights-chrome-build/js/{0239b22511e2cbe0741a.woff → 17802e9fb8c2dd3c.woff} +0 -0
  99. /package/repos/insights-chrome-build/js/{23fc486b36786bafb3d3.woff → 1be1bd18c67d1ac8.woff} +0 -0
  100. /package/repos/insights-chrome-build/js/{cf06a52fa81e76cc6b01.woff2 → 26409b4397ab88cc.woff2} +0 -0
  101. /package/repos/insights-chrome-build/js/{59058fe454d37a189fb9.woff2 → 278473d290fcbf3b.woff2} +0 -0
  102. /package/repos/insights-chrome-build/js/{549231141115a61fa57d.woff → 2a96d5b208c56fa6.woff} +0 -0
  103. /package/repos/insights-chrome-build/js/{269ca6c83388f975ccfa.woff2 → 2baac3a5d7ab7a15.woff2} +0 -0
  104. /package/repos/insights-chrome-build/js/{ac4ae66cc059959cf8b7.woff → 316d3d41de174f24.woff} +0 -0
  105. /package/repos/insights-chrome-build/js/{323f30b3399fdc516b30.woff2 → 3239d74dcb174610.woff2} +0 -0
  106. /package/repos/insights-chrome-build/js/{1904b4e1c18b4fc19778.woff → 326f107b61d32769.woff} +0 -0
  107. /package/repos/insights-chrome-build/js/{69bf841bb989a0010972.woff2 → 49ee635c956449ea.woff2} +0 -0
  108. /package/repos/insights-chrome-build/js/{e693bff1704e699eb7e2.woff2 → 4ace320f5eaa7ee9.woff2} +0 -0
  109. /package/repos/insights-chrome-build/js/{44d0c66e3d5040be8378.woff2 → 4b0d8eeb01c2f27e.woff2} +0 -0
  110. /package/repos/insights-chrome-build/js/{8192be77a1809074aa20.svg → 4df2ca3d94d759b3.svg} +0 -0
  111. /package/repos/insights-chrome-build/js/{4a43a00f1c0c63f396ee.woff2 → 52f482efb5487bba.woff2} +0 -0
  112. /package/repos/insights-chrome-build/js/{9db3d5976ae23546bbec.woff2 → 64b9a14b3398824f.woff2} +0 -0
  113. /package/repos/insights-chrome-build/js/{95fdf61ffc45f12737c2.woff2 → 66309a34eac8b284.woff2} +0 -0
  114. /package/repos/insights-chrome-build/js/{7150021df2ae6bcf6c17.woff2 → 6e30b223886d1eef.woff2} +0 -0
  115. /package/repos/insights-chrome-build/js/{9abd7afa35218a435d29.woff2 → 6fb4e4e104bb886f.woff2} +0 -0
  116. /package/repos/insights-chrome-build/js/{7799d9401910e36d7bb2.woff → 703c721f27900006.woff} +0 -0
  117. /package/repos/insights-chrome-build/js/{e7bea4af7086ce0144fc.woff → 7a0809e40bf8e79a.woff} +0 -0
  118. /package/repos/insights-chrome-build/js/{09bac349bc9aa9b72bbe.woff2 → 7a9fb47c5b35e50d.woff2} +0 -0
  119. /package/repos/insights-chrome-build/js/{77929aa7a8bd4b667229.woff → 7bb3ddb0583cc7a5.woff} +0 -0
  120. /package/repos/insights-chrome-build/js/{3cd11726d843ff40c40b.woff → 7bf300b28414f3ad.woff} +0 -0
  121. /package/repos/insights-chrome-build/js/{e3438b1458a26c814ae6.woff2 → 7d9b027229967149.woff2} +0 -0
  122. /package/repos/insights-chrome-build/js/{e9d4a1e9285e4454ef7e.woff → 81245ab8c867ea09.woff} +0 -0
  123. /package/repos/insights-chrome-build/js/{800277ea3e98b616b60f.woff → 830dcb2cc707ae4c.woff} +0 -0
  124. /package/repos/insights-chrome-build/js/{c0276d79b017a9c2476b.woff → 835112a9ba0d676e.woff} +0 -0
  125. /package/repos/insights-chrome-build/js/{7b7bb91c0af148738090.woff2 → 8f765508913b945e.woff2} +0 -0
  126. /package/repos/insights-chrome-build/js/{817d3df17057373e2c46.woff → 91bbac2b6e0eb739.woff} +0 -0
  127. /package/repos/insights-chrome-build/js/{89a09f63411d174b18ea.woff2 → 96971d99ef5f2ef7.woff2} +0 -0
  128. /package/repos/insights-chrome-build/js/{8d723ad7cfca2dfffacb.woff → a14c79bac597c758.woff} +0 -0
  129. /package/repos/insights-chrome-build/js/{c2b7c03209f0d3558e85.woff2 → a86c2bca47a21ff0.woff2} +0 -0
  130. /package/repos/insights-chrome-build/js/{db4223ab0faaec898da7.woff → ad4d1e278d4d13cb.woff} +0 -0
  131. /package/repos/insights-chrome-build/js/{2c5bc263ad288d815bd3.woff2 → b0ebda5f4f12f761.woff2} +0 -0
  132. /package/repos/insights-chrome-build/js/{675eb11fb9e055cea6a4.woff2 → b97a3321aaf7e87a.woff2} +0 -0
  133. /package/repos/insights-chrome-build/js/{11855d3f3f99709dfac5.woff2 → ba04b02b7da08f3d.woff2} +0 -0
  134. /package/repos/insights-chrome-build/js/{99464515aba730eab16c.woff2 → bb85876a67d3e7e7.woff2} +0 -0
  135. /package/repos/insights-chrome-build/js/{8aae586c8c4d72be50c1.woff → bbe18aee9c88166d.woff} +0 -0
  136. /package/repos/insights-chrome-build/js/{190776b0696119b93c71.woff2 → c3ab7be4146884a3.woff2} +0 -0
  137. /package/repos/insights-chrome-build/js/{bc0502ffc24dc33b8c5a.woff → c49edc34d14553e4.woff} +0 -0
  138. /package/repos/insights-chrome-build/js/{3278ae4a3a97d92b639c.woff2 → c8b06bb52b20081e.woff2} +0 -0
  139. /package/repos/insights-chrome-build/js/{ac78b4f2e64edfb5859a.woff → c99e50723fcf0166.woff} +0 -0
  140. /package/repos/insights-chrome-build/js/{0227c8bb038eaf0264f7.woff2 → cd1824ff99b9ef33.woff2} +0 -0
  141. /package/repos/insights-chrome-build/js/{9ed5a0180961e3930d44.woff2 → ce63a8f6be94c7cd.woff2} +0 -0
  142. /package/repos/insights-chrome-build/js/{8584d6d2426caac44a12.woff2 → d004dc9f8c955767.woff2} +0 -0
  143. /package/repos/insights-chrome-build/js/{06037ca2cf8525d353a1.woff2 → d19c89c249d7f751.woff2} +0 -0
  144. /package/repos/insights-chrome-build/js/{61142d93d0198cb3c160.woff2 → d2a095f5996e5014.woff2} +0 -0
  145. /package/repos/insights-chrome-build/js/{88ade95ac9a035be7168.woff → d2ce043298f5c972.woff} +0 -0
  146. /package/repos/insights-chrome-build/js/{24515e9b56a0ccb45480.woff → d2cf7e795db09bc7.woff} +0 -0
  147. /package/repos/insights-chrome-build/js/{d7d2238f0d64e36cd533.svg → d6083bde9a964ab4.svg} +0 -0
  148. /package/repos/insights-chrome-build/js/{2aa8547fdf2f790c2cb9.woff2 → dd18fb6c0b7048e8.woff2} +0 -0
  149. /package/repos/insights-chrome-build/js/{909a870fdb828007557f.woff2 → df8a52d2494e1e03.woff2} +0 -0
  150. /package/repos/insights-chrome-build/js/{3be6f9a55c75aaa6f25a.woff2 → e5c7a27047a83d24.woff2} +0 -0
  151. /package/repos/insights-chrome-build/js/{f32577e5a5f1d27244a3.woff2 → e693e4f9d9c75499.woff2} +0 -0
  152. /package/repos/insights-chrome-build/js/{35d01efdc213d0af0d00.woff → e8ec1c41a82bd354.woff} +0 -0
  153. /package/repos/insights-chrome-build/js/{81aade5a7b362566b199.woff → f66882bad34e5c9f.woff} +0 -0
  154. /package/repos/insights-chrome-build/js/{47a03d213b0b35080e32.woff → f830d4d01f5e4497.woff} +0 -0
  155. /package/repos/insights-chrome-build/js/{legacyVideos.c1dc7ccd468c8c55255f.js → legacyVideos.b3f9836f62184986.js} +0 -0
  156. /package/repos/insights-chrome-build/js/{remoteMiddleware.c1dc7ccd468c8c55255f.js → remoteMiddleware.b3f9836f62184986.js} +0 -0
  157. /package/repos/insights-chrome-build/js/{vendors-node_modules_lodash__baseIsEqual_js.c1dc7ccd468c8c55255f.js → vendors-node_modules_lodash__baseIsEqual_js.b3f9836f62184986.js} +0 -0
  158. /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
- }]);