unleash-server 7.6.2 → 7.6.4

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 (316) hide show
  1. package/dist/lib/db/client-applications-store.d.ts.map +1 -1
  2. package/dist/lib/db/client-applications-store.js +1 -0
  3. package/dist/lib/db/client-applications-store.js.map +1 -1
  4. package/dist/lib/db/client-applications-store.test.d.ts +2 -0
  5. package/dist/lib/db/client-applications-store.test.d.ts.map +1 -0
  6. package/dist/lib/db/client-applications-store.test.js +134 -0
  7. package/dist/lib/db/client-applications-store.test.js.map +1 -0
  8. package/dist/lib/db/index.js +2 -2
  9. package/dist/lib/db/index.js.map +1 -1
  10. package/dist/lib/events/index.d.ts +2 -1
  11. package/dist/lib/events/index.d.ts.map +1 -1
  12. package/dist/lib/events/index.js +2 -0
  13. package/dist/lib/events/index.js.map +1 -1
  14. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-types.d.ts +1 -1
  15. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-types.d.ts.map +1 -1
  16. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-types.js +2 -3
  17. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta-types.js.map +1 -1
  18. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.d.ts +3 -3
  19. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.d.ts.map +1 -1
  20. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.js +77 -27
  21. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.js.map +1 -1
  22. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.js +566 -20
  23. package/dist/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.js.map +1 -1
  24. package/dist/lib/features/client-feature-toggles/delta/visible-revision.d.ts +3 -1
  25. package/dist/lib/features/client-feature-toggles/delta/visible-revision.d.ts.map +1 -1
  26. package/dist/lib/features/client-feature-toggles/delta/visible-revision.js +26 -3
  27. package/dist/lib/features/client-feature-toggles/delta/visible-revision.js.map +1 -1
  28. package/dist/lib/features/client-feature-toggles/delta/visible-revision.test.js +9 -1
  29. package/dist/lib/features/client-feature-toggles/delta/visible-revision.test.js.map +1 -1
  30. package/dist/lib/features/events/event-store.d.ts +1 -1
  31. package/dist/lib/features/events/event-store.d.ts.map +1 -1
  32. package/dist/lib/features/events/event-store.js +26 -4
  33. package/dist/lib/features/events/event-store.js.map +1 -1
  34. package/dist/lib/features/frontend-api/createFrontendApiService.d.ts.map +1 -1
  35. package/dist/lib/features/frontend-api/createFrontendApiService.js +3 -10
  36. package/dist/lib/features/frontend-api/createFrontendApiService.js.map +1 -1
  37. package/dist/lib/features/index.d.ts +1 -0
  38. package/dist/lib/features/index.d.ts.map +1 -1
  39. package/dist/lib/features/index.js +1 -0
  40. package/dist/lib/features/index.js.map +1 -1
  41. package/dist/lib/features/instance-stats/createInstanceStatsService.js +2 -2
  42. package/dist/lib/features/instance-stats/createInstanceStatsService.js.map +1 -1
  43. package/dist/lib/features/maintenance/maintenance-service.d.ts +1 -1
  44. package/dist/lib/features/maintenance/maintenance-service.d.ts.map +1 -1
  45. package/dist/lib/features/maintenance/maintenance-service.test.js +2 -2
  46. package/dist/lib/features/maintenance/maintenance-service.test.js.map +1 -1
  47. package/dist/lib/features/onboarding/createOnboardingReadModel.d.ts +2 -3
  48. package/dist/lib/features/onboarding/createOnboardingReadModel.d.ts.map +1 -1
  49. package/dist/lib/features/onboarding/createOnboardingReadModel.js +2 -2
  50. package/dist/lib/features/onboarding/createOnboardingReadModel.js.map +1 -1
  51. package/dist/lib/features/onboarding/onboarding-read-model.d.ts +3 -1
  52. package/dist/lib/features/onboarding/onboarding-read-model.d.ts.map +1 -1
  53. package/dist/lib/features/onboarding/onboarding-read-model.js +17 -2
  54. package/dist/lib/features/onboarding/onboarding-read-model.js.map +1 -1
  55. package/dist/lib/features/personal-dashboard/createPersonalDashboardService.js +1 -1
  56. package/dist/lib/features/personal-dashboard/createPersonalDashboardService.js.map +1 -1
  57. package/dist/lib/features/project/createProjectService.js +1 -1
  58. package/dist/lib/features/project/createProjectService.js.map +1 -1
  59. package/dist/lib/features/project/projects.e2e.test.js +48 -0
  60. package/dist/lib/features/project/projects.e2e.test.js.map +1 -1
  61. package/dist/lib/features/scheduler/scheduler-service.test.js +2 -2
  62. package/dist/lib/features/scheduler/scheduler-service.test.js.map +1 -1
  63. package/dist/lib/features/settings/createSettingService.d.ts +6 -0
  64. package/dist/lib/features/settings/createSettingService.d.ts.map +1 -0
  65. package/dist/lib/features/settings/createSettingService.js +15 -0
  66. package/dist/lib/features/settings/createSettingService.js.map +1 -0
  67. package/dist/{test/fixtures → lib/features/settings}/fake-setting-store.d.ts +1 -1
  68. package/dist/lib/features/settings/fake-setting-store.d.ts.map +1 -0
  69. package/dist/lib/features/settings/fake-setting-store.js.map +1 -0
  70. package/dist/lib/{services → features/settings}/setting-service.d.ts +4 -4
  71. package/dist/lib/features/settings/setting-service.d.ts.map +1 -0
  72. package/dist/lib/features/settings/setting-service.e2e.test.d.ts +2 -0
  73. package/dist/lib/features/settings/setting-service.e2e.test.d.ts.map +1 -0
  74. package/dist/{test/e2e/services/setting-service.test.js → lib/features/settings/setting-service.e2e.test.js} +7 -7
  75. package/dist/lib/features/settings/setting-service.e2e.test.js.map +1 -0
  76. package/dist/lib/{services → features/settings}/setting-service.js +2 -2
  77. package/dist/lib/features/settings/setting-service.js.map +1 -0
  78. package/dist/lib/{db → features/settings}/setting-store.d.ts +3 -3
  79. package/dist/lib/features/settings/setting-store.d.ts.map +1 -0
  80. package/dist/lib/features/settings/setting-store.e2e.test.d.ts.map +1 -0
  81. package/dist/{test/e2e/stores → lib/features/settings}/setting-store.e2e.test.js +2 -2
  82. package/dist/lib/features/settings/setting-store.e2e.test.js.map +1 -0
  83. package/dist/lib/features/settings/setting-store.js.map +1 -0
  84. package/dist/lib/{types/stores/settings-store.d.ts → features/settings/settings-store-type.d.ts} +2 -2
  85. package/dist/lib/features/settings/settings-store-type.d.ts.map +1 -0
  86. package/dist/lib/features/settings/settings-store-type.js +2 -0
  87. package/dist/lib/features/settings/settings-store-type.js.map +1 -0
  88. package/dist/lib/features/users/createUserService.d.ts.map +1 -1
  89. package/dist/lib/features/users/createUserService.js +3 -4
  90. package/dist/lib/features/users/createUserService.js.map +1 -1
  91. package/dist/lib/middleware/cors-origin-middleware.test.js +1 -1
  92. package/dist/lib/middleware/cors-origin-middleware.test.js.map +1 -1
  93. package/dist/lib/openapi/spec/context-query-parameters.d.ts +1 -1
  94. package/dist/lib/openapi/spec/context-query-parameters.d.ts.map +1 -1
  95. package/dist/lib/openapi/spec/event-schema.d.ts +1 -1
  96. package/dist/lib/openapi/spec/event-search-response-schema.d.ts +1 -1
  97. package/dist/lib/openapi/spec/events-schema.d.ts +1 -1
  98. package/dist/lib/openapi/spec/feature-events-schema.d.ts +1 -1
  99. package/dist/lib/openapi/spec/integration-event-schema.d.ts +1 -1
  100. package/dist/lib/openapi/spec/integration-events-schema.d.ts +2 -2
  101. package/dist/lib/openapi/spec/personal-dashboard-project-details-schema.d.ts +1 -1
  102. package/dist/lib/openapi/spec/project-overview-schema.d.ts +1 -1
  103. package/dist/lib/openapi/spec/project-overview-schema.d.ts.map +1 -1
  104. package/dist/lib/openapi/spec/project-overview-schema.js +5 -1
  105. package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
  106. package/dist/lib/server-impl.d.ts +4 -4
  107. package/dist/lib/server-impl.d.ts.map +1 -1
  108. package/dist/lib/server-impl.js +2 -2
  109. package/dist/lib/server-impl.js.map +1 -1
  110. package/dist/lib/services/index.d.ts +1 -1
  111. package/dist/lib/services/index.d.ts.map +1 -1
  112. package/dist/lib/services/index.js +1 -1
  113. package/dist/lib/services/index.js.map +1 -1
  114. package/dist/lib/services/scheduler-service.test.js +2 -2
  115. package/dist/lib/services/scheduler-service.test.js.map +1 -1
  116. package/dist/lib/services/user-service.d.ts +1 -1
  117. package/dist/lib/services/user-service.d.ts.map +1 -1
  118. package/dist/lib/services/user-service.test.js +2 -2
  119. package/dist/lib/services/user-service.test.js.map +1 -1
  120. package/dist/lib/types/experimental.d.ts +1 -1
  121. package/dist/lib/types/experimental.d.ts.map +1 -1
  122. package/dist/lib/types/experimental.js +4 -3
  123. package/dist/lib/types/experimental.js.map +1 -1
  124. package/dist/lib/types/model.d.ts +1 -1
  125. package/dist/lib/types/model.d.ts.map +1 -1
  126. package/dist/lib/types/stores/client-applications-store.d.ts +1 -0
  127. package/dist/lib/types/stores/client-applications-store.d.ts.map +1 -1
  128. package/dist/lib/types/stores/event-store.d.ts +3 -2
  129. package/dist/lib/types/stores/event-store.d.ts.map +1 -1
  130. package/dist/lib/types/stores.d.ts +1 -1
  131. package/dist/lib/types/stores.d.ts.map +1 -1
  132. package/dist/lib/util/postgres-version-checker.test.js +1 -1
  133. package/dist/lib/util/postgres-version-checker.test.js.map +1 -1
  134. package/dist/server-dev.js +1 -1
  135. package/dist/server-dev.js.map +1 -1
  136. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js +2 -2
  137. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js.map +1 -1
  138. package/dist/test/e2e/api/auth/simple-password-provider.e2e.test.js +1 -1
  139. package/dist/test/e2e/api/auth/simple-password-provider.e2e.test.js.map +1 -1
  140. package/dist/test/e2e/services/reset-token-service.e2e.test.js +2 -2
  141. package/dist/test/e2e/services/reset-token-service.e2e.test.js.map +1 -1
  142. package/dist/test/e2e/services/user-service.e2e.test.js +1 -1
  143. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  144. package/dist/test/e2e/stores/event-store.e2e.test.js +28 -4
  145. package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
  146. package/dist/test/e2e/users/inactive/inactive-users-service.test.js +1 -1
  147. package/dist/test/e2e/users/inactive/inactive-users-service.test.js.map +1 -1
  148. package/dist/test/fixtures/fake-client-applications-store.d.ts +1 -0
  149. package/dist/test/fixtures/fake-client-applications-store.d.ts.map +1 -1
  150. package/dist/test/fixtures/fake-client-applications-store.js +3 -0
  151. package/dist/test/fixtures/fake-client-applications-store.js.map +1 -1
  152. package/dist/test/fixtures/fake-event-store.d.ts +3 -2
  153. package/dist/test/fixtures/fake-event-store.d.ts.map +1 -1
  154. package/dist/test/fixtures/fake-event-store.js +3 -2
  155. package/dist/test/fixtures/fake-event-store.js.map +1 -1
  156. package/dist/test/fixtures/fake-impact-metrics.d.ts +2 -7
  157. package/dist/test/fixtures/fake-impact-metrics.d.ts.map +1 -1
  158. package/dist/test/fixtures/fake-impact-metrics.js.map +1 -1
  159. package/dist/test/fixtures/store.js +1 -1
  160. package/dist/test/fixtures/store.js.map +1 -1
  161. package/dist/test-setup.d.ts.map +1 -1
  162. package/dist/test-setup.js +3 -1
  163. package/dist/test-setup.js.map +1 -1
  164. package/frontend/build/index.html +2 -2
  165. package/frontend/build/static/AdvancedPlayground-V8umnmfG.js +3 -0
  166. package/frontend/build/static/BackendConnections-Cnrrjtsn.js +1 -0
  167. package/frontend/build/static/CreateProject-e6oazDvk.js +1 -0
  168. package/frontend/build/static/EnterpriseEdge-DBAPcWwZ.js +6 -0
  169. package/frontend/build/static/FeatureMetricsChart-CKOQrO5t.js +2 -0
  170. package/frontend/build/static/FeatureStaleDialog-BfIPQAKa.js +689 -0
  171. package/frontend/build/static/FeatureViewLazyExport-TYU7Gf7Q.js +11 -0
  172. package/frontend/build/static/FlagMetricsChart-D1Fksr08.js +2 -0
  173. package/frontend/build/static/FrontendNetworkTrafficUsage-NjIKHiwN.js +1 -0
  174. package/frontend/build/static/GridLayoutWrapper-CN2Zeusb.js +3 -0
  175. package/frontend/build/static/ImpactMetricsPage-PU6tVGs8.js +1 -0
  176. package/frontend/build/static/LazyAdminExport-7jFrQoFr.js +38 -0
  177. package/frontend/build/static/LazyProjectExport-DUuBB2EA.js +46 -0
  178. package/frontend/build/static/LifecycleChartComponent-LoQvj2mM.js +2 -0
  179. package/frontend/build/static/LineChartComponent-C2nacZSy.js +1 -0
  180. package/frontend/build/static/MarkCompletedDialogue-x4B5vgpn.js +1 -0
  181. package/frontend/build/static/NetworkOverview-DRDwkRie.js +1 -0
  182. package/frontend/build/static/NetworkPrometheusAPIWarning-DxrGyF-4.js +1 -0
  183. package/frontend/build/static/NetworkTraffic-DBNI6tQ4.js +1 -0
  184. package/frontend/build/static/NetworkTrafficUsage-Cp7LXHBW.js +1 -0
  185. package/frontend/build/static/PercentageDonut-DxYx2sDT.js +1 -0
  186. package/frontend/build/static/ReactJSONEditor-EiPmcfsb.js +3846 -0
  187. package/frontend/build/static/RoleCell-DPCs9tBq.js +1 -0
  188. package/frontend/build/static/Safeguard-B2SRkWlK.js +1 -0
  189. package/frontend/build/static/aggregateFeatureMetrics-B--WhUm6.js +1 -0
  190. package/frontend/build/static/chart-BMc0j_v5.js +3 -0
  191. package/frontend/build/static/chartjs-plugin-annotation.esm-CII-nIyK.js +1 -0
  192. package/frontend/build/static/daysOrHours-CWsdHL8Z.js +1 -0
  193. package/frontend/build/static/dist-CYYjHgCS.js +12 -0
  194. package/frontend/build/static/enterpriseEdgeCloud-DI6o2DkU.js +1 -0
  195. package/frontend/build/static/formatTickValue-DHdXPo89.js +1 -0
  196. package/frontend/build/static/helpers-Dz6x6iMP.js +1 -0
  197. package/frontend/build/static/index-B0RbDPtk.js +403 -0
  198. package/frontend/build/static/jsx-runtime-ButemYzH.js +1 -0
  199. package/frontend/build/static/networkTrafficUsageHighlightPlugin-ecHJHisK.js +1 -0
  200. package/frontend/build/static/objectId-D7ukzTLu.js +1 -0
  201. package/frontend/build/static/style-D9DNbuD5.css +2 -0
  202. package/frontend/build/static/toDate-zSA17Csy.js +1 -0
  203. package/frontend/build/static/unknownify-D1gvOkgV.js +1 -0
  204. package/frontend/build/static/useApiTokens-Cl4y9yhp.js +1 -0
  205. package/frontend/build/static/useInstanceTrafficMetrics--5pof2Er.js +1 -0
  206. package/frontend/build/static/vanilla-picker-DhahMYgI.js +2 -0
  207. package/frontend/package.json +18 -15
  208. package/package.json +9 -9
  209. package/dist/lib/db/setting-store.d.ts.map +0 -1
  210. package/dist/lib/db/setting-store.js.map +0 -1
  211. package/dist/lib/services/setting-service.d.ts.map +0 -1
  212. package/dist/lib/services/setting-service.js.map +0 -1
  213. package/dist/lib/types/stores/settings-store.d.ts.map +0 -1
  214. package/dist/lib/types/stores/settings-store.js +0 -2
  215. package/dist/lib/types/stores/settings-store.js.map +0 -1
  216. package/dist/test/e2e/services/setting-service.test.d.ts +0 -2
  217. package/dist/test/e2e/services/setting-service.test.d.ts.map +0 -1
  218. package/dist/test/e2e/services/setting-service.test.js.map +0 -1
  219. package/dist/test/e2e/stores/setting-store.e2e.test.d.ts.map +0 -1
  220. package/dist/test/e2e/stores/setting-store.e2e.test.js.map +0 -1
  221. package/dist/test/fixtures/fake-setting-store.d.ts.map +0 -1
  222. package/dist/test/fixtures/fake-setting-store.js.map +0 -1
  223. package/frontend/build/static/24_Text format off-fTw1GZh5.svg +0 -3
  224. package/frontend/build/static/24_Text format-CsA8QQJI.svg +0 -3
  225. package/frontend/build/static/AdvancedPlayground-BTPrG6RW.js +0 -3
  226. package/frontend/build/static/BackendConnections-CRh8Vxoe.js +0 -1
  227. package/frontend/build/static/CreateProject-DEMalH1j.js +0 -1
  228. package/frontend/build/static/EnterpriseEdge-Cp-pGMa0.js +0 -6
  229. package/frontend/build/static/FeatureMetricsChart-DQOE71LA.js +0 -2
  230. package/frontend/build/static/FeatureStaleDialog-B6BfnDiQ.js +0 -689
  231. package/frontend/build/static/FeatureViewLazyExport-BkNTNFqK.js +0 -10
  232. package/frontend/build/static/FlagMetricsChart-zYDF9bet.js +0 -2
  233. package/frontend/build/static/FrontendNetworkTrafficUsage-CbxdFXH7.js +0 -1
  234. package/frontend/build/static/GridLayoutWrapper-Cq6Bzm36.js +0 -3
  235. package/frontend/build/static/ImpactMetricsPage-CFYXYXPb.js +0 -1
  236. package/frontend/build/static/LazyAdminExport-ByTh4iFa.js +0 -38
  237. package/frontend/build/static/LazyProjectExport-K12Xy3w9.js +0 -46
  238. package/frontend/build/static/LifecycleChartComponent-DHvlFNd2.js +0 -7
  239. package/frontend/build/static/LineChartComponent-BlhKm3cw.js +0 -1
  240. package/frontend/build/static/MarkCompletedDialogue-apmlFjVY.js +0 -1
  241. package/frontend/build/static/NetworkOverview-BiLOuQ4c.js +0 -1
  242. package/frontend/build/static/NetworkPrometheusAPIWarning-CYo3j2Tj.js +0 -1
  243. package/frontend/build/static/NetworkTraffic-DONL5oIx.js +0 -1
  244. package/frontend/build/static/NetworkTrafficUsage-DjQiYq0S.js +0 -1
  245. package/frontend/build/static/PercentageDonut-CA9hYg3v.js +0 -1
  246. package/frontend/build/static/ReactJSONEditor-9cJL1vJY.js +0 -3864
  247. package/frontend/build/static/RoleCell-ZzU5Oqy8.js +0 -1
  248. package/frontend/build/static/Safeguard-DY1N4aPz.js +0 -1
  249. package/frontend/build/static/aggregateFeatureMetrics-D6bHft_C.js +0 -1
  250. package/frontend/build/static/arrowLeft-CLDXfK18.svg +0 -10
  251. package/frontend/build/static/arrowRight-CPIADLBv.svg +0 -10
  252. package/frontend/build/static/case-insensitive-CuU5weZd.svg +0 -1
  253. package/frontend/build/static/case-sensitive-D19NntKP.svg +0 -1
  254. package/frontend/build/static/changeRequestProcessWithSchedule-BmvIIWQK.svg +0 -1
  255. package/frontend/build/static/constraint-equals-giGu3HWQ.svg +0 -1
  256. package/frontend/build/static/constraint-not-equals-CJGG9pRv.svg +0 -1
  257. package/frontend/build/static/docker-HG7DQx-Z.svg +0 -5
  258. package/frontend/build/static/email-D1NVbpvG.svg +0 -17
  259. package/frontend/build/static/enterpriseEdgeCloud-DzRtm8v6.svg +0 -58
  260. package/frontend/build/static/enterpriseEdgeSelfHosted-4bnmOQVF.svg +0 -44
  261. package/frontend/build/static/formatTickValue-BcLsqREh.js +0 -6
  262. package/frontend/build/static/heart-FRDdnX3J.svg +0 -3
  263. package/frontend/build/static/impact-metrics-icon-a6_57VN1.svg +0 -9
  264. package/frontend/build/static/import-zkumD9Zv.svg +0 -3
  265. package/frontend/build/static/index-B87DWXbl.js +0 -12
  266. package/frontend/build/static/index-CoLhlfXP.js +0 -565
  267. package/frontend/build/static/instance-health-BtMrnXEj.svg +0 -5
  268. package/frontend/build/static/isenabled-false-Bx8bRzGD.svg +0 -5
  269. package/frontend/build/static/isenabled-true-BARsh3fa.svg +0 -5
  270. package/frontend/build/static/lenovo-DIzNtfrT.svg +0 -3
  271. package/frontend/build/static/lloyds-DxlC9g3t.svg +0 -10
  272. package/frontend/build/static/logo-BpeRJ1SV.svg +0 -7
  273. package/frontend/build/static/logoBg-DDUbF9lh.svg +0 -1
  274. package/frontend/build/static/logoDark-CknUTJYV.svg +0 -1
  275. package/frontend/build/static/logoDarkWithText-D0ImZCxR.svg +0 -1
  276. package/frontend/build/static/logoWhiteBg-CwoWCg7m.svg +0 -1
  277. package/frontend/build/static/logoWhiteTransparentHorizontal-5xxVCWh8.svg +0 -1
  278. package/frontend/build/static/logoWithWhiteText-Dz7VvON3.svg +0 -1
  279. package/frontend/build/static/milestone-C0FnRl9y.svg +0 -3
  280. package/frontend/build/static/mobileGuidanceBg-D9dRgnhs.svg +0 -3
  281. package/frontend/build/static/networkTrafficUsageHighlightPlugin-CqEM-cK_.js +0 -1
  282. package/frontend/build/static/new-feature-badge-FwMmHlwT.svg +0 -7
  283. package/frontend/build/static/not_operator_selected-jLHDQXLO.svg +0 -5
  284. package/frontend/build/static/not_operator_unselected-C-130FKT.svg +0 -3
  285. package/frontend/build/static/pro-enterprise-feature-badge-PZ3Bfajk.svg +0 -7
  286. package/frontend/build/static/pro-enterprise-feature-badge-light-k8Z592E8.svg +0 -6
  287. package/frontend/build/static/projectIconSmall-USf1kO_6.svg +0 -5
  288. package/frontend/build/static/projectStatus-BQym9o3t.svg +0 -3
  289. package/frontend/build/static/releaseTemplates-GIHEC4g-.svg +0 -39
  290. package/frontend/build/static/rollout-DAvS9K1l.svg +0 -4
  291. package/frontend/build/static/samsung-DOytOsnV.svg +0 -10
  292. package/frontend/build/static/signals-Bg0cQEqp.svg +0 -21
  293. package/frontend/build/static/stage-archived-DVpSnWM_.svg +0 -12
  294. package/frontend/build/static/stage-completed-BqA7cOHN.svg +0 -10
  295. package/frontend/build/static/stage-created-IXXGyXPL.svg +0 -5
  296. package/frontend/build/static/stage-live-CnCQFmyK.svg +0 -9
  297. package/frontend/build/static/stage-prelive-BLsuhDY7.svg +0 -7
  298. package/frontend/build/static/stars-C5lq_xha.svg +0 -9
  299. package/frontend/build/static/strategyCustom-Db-ZtYWl.svg +0 -23
  300. package/frontend/build/static/strategyDefault-LnSyH2eZ.svg +0 -17
  301. package/frontend/build/static/strategyGradual-oCA99tj3.svg +0 -18
  302. package/frontend/build/static/strategyHosts-4lVYC2Bf.svg +0 -23
  303. package/frontend/build/static/strategyIPs-BHaXsOYV.svg +0 -24
  304. package/frontend/build/static/strategyOn-CX-xL0oK.svg +0 -18
  305. package/frontend/build/static/style-BfdqROT6.css +0 -1
  306. package/frontend/build/static/unknownify-B7hmSXnj.js +0 -1
  307. package/frontend/build/static/unleashHoliday-CQEG77-1.svg +0 -33
  308. package/frontend/build/static/unleashHolidayDark-B9sYfzSK.svg +0 -33
  309. package/frontend/build/static/usage-line-BHicDx-Y.svg +0 -3
  310. package/frontend/build/static/usage-rate-DnXQhqDI.svg +0 -3
  311. package/frontend/build/static/useApiTokens-ClWvohC9.js +0 -1
  312. package/frontend/build/static/vanilla-picker-B6E6ObS_.js +0 -8
  313. package/frontend/build/static/visa-CkneNM2O.svg +0 -10
  314. /package/dist/{test/fixtures → lib/features/settings}/fake-setting-store.js +0 -0
  315. /package/dist/{test/e2e/stores → lib/features/settings}/setting-store.e2e.test.d.ts +0 -0
  316. /package/dist/lib/{db → features/settings}/setting-store.js +0 -0
@@ -1 +0,0 @@
1
- import{aD as ae,aE as le,r as d,aH as ie,_ as ce,a as $,j as e,aI as de,aK as ue,s as c,Q as U,f as L,ae as q,et as v,w as he,x as pe,hL as V,d3 as X,b9 as y,er as xe,es as me,ad as je,i as Q,ai as ge,dd as be,al as fe,C as f,B as g,au as ye,am as Te,av as K,cL as B,T as A,bq as Ce,eI as ke,kO as ve,bf as Ae,ey as we,ah as w,c9 as D,ez as E,ar as Se,L as Y,E as Ee,F as Ne,ag as G,fv as Ie,aj as N,eh as Re,eP as De,a9 as C,aa as Ue,cX as J,a$ as Le,aU as Z,h as Be,y as Pe,G as _e,ax as ee,b_ as I,jw as Fe,dK as Me,dJ as Oe,e1 as He,dZ as $e,fh as Ke,dX as Ge,fi as We,iu as ze,cp as qe,b6 as te,b8 as se,b7 as Ve,b0 as Xe,dT as Qe,b4 as Ye}from"./index-CoLhlfXP.js";import{u as Je}from"./useApiTokens-ClWvohC9.js";function Ze(t){return ae("MuiTableContainer",t)}le("MuiTableContainer",["root"]);const et=["className","component"],tt=t=>{const{classes:s}=t;return ue({root:["root"]},Ze,s)},st=c("div",{name:"MuiTableContainer",slot:"Root",overridesResolver:(t,s)=>s.root})({width:"100%",overflowX:"auto"}),nt=d.forwardRef(function(s,n){const o=ie({props:s,name:"MuiTableContainer"}),{className:r,component:a="div"}=o,l=ce(o,et),u=$({},o,{component:a}),i=tt(u);return e.jsx(st,$({ref:n,as:a,className:de(i.root,r),ownerState:u},l))}),ot=()=>e.jsx(U,{severity:"info",children:e.jsxs("p",{children:["Read the"," ",e.jsx("a",{href:"https://docs.getunleash.io/sdks",target:"_blank",rel:"noreferrer",children:"SDK overview"})," ","to connect Unleash to your application. Please note it can take up to ",e.jsx("strong",{children:"1 minute"})," before a new API key is activated."]})}),k=({title:t,url:s})=>{const{setToastData:n}=L(),o=r=>()=>{X(r),n({type:"success",text:"Copied to clipboard"})};return e.jsxs(q,{children:[e.jsx(v,{component:"th",scope:"row",children:t}),e.jsx(v,{children:e.jsx("pre",{style:{display:"inline"},children:s})}),e.jsx(v,{align:"center",children:e.jsx(he,{title:"Copy URL",arrow:!0,children:e.jsx(pe,{onClick:o(s),size:"small","aria-label":`Copy ${t} to clipboard`,children:e.jsx(V,{})})})})]})},R=c(v)(({theme:t})=>({color:t.palette.text.secondary})),rt=({compact:t})=>{const{uiConfig:s}=y(),[n,o]=d.useState(!t),r=s.unleashUrl&&(n||!s.edgeUrl),a=t&&s.edgeUrl&&s.unleashUrl,l=s.edgeUrl?{edgeUrl:`${s.edgeUrl}/api/`,edgeFrontendUrl:`${s.edgeUrl}/api/frontend/`}:void 0,u=`${s.unleashUrl}/api/`,i=`${s.unleashUrl}/api/frontend/`;return e.jsxs(nt,{role:"region","aria-live":"polite",children:[e.jsxs(xe,{"aria-label":"API URLs",id:"api-urls-table",children:[e.jsx(me,{children:e.jsxs(q,{children:[e.jsx(R,{children:"Type"}),e.jsx(R,{children:"URL"}),e.jsx(R,{align:"center",children:"Actions"})]})}),e.jsxs(je,{children:[l&&e.jsxs(e.Fragment,{children:[e.jsx(k,{title:"Edge Backend",url:l.edgeUrl}),e.jsx(k,{title:"Edge Frontend",url:l.edgeFrontendUrl})]}),r&&e.jsxs(e.Fragment,{children:[e.jsx(k,{title:"Backend",url:u}),e.jsx(k,{title:"Frontend",url:i})]})]})]}),a&&e.jsx(Q,{sx:{mt:1,marginInline:1.5},variant:"text",size:"small","aria-expanded":n,"aria-controls":"api-urls-table",onClick:()=>o(!n),children:n?"Show less":"Show all"})]})},at=["Icon","createdAt","seenAt"],lt=["Icon","project","seenAt"],W=c(A)(({theme:t})=>({margin:0,marginBottom:t.spacing(1.5),fontSize:t.fontSizes.smallBody,color:t.palette.text.primary})),_t=({compact:t=!1,setHiddenColumns:s,columns:n,loading:o,rows:r,headerGroups:a,globalFilter:l,prepareRow:u})=>{const i=ge(be.breakpoints.down("xl"));return fe([{condition:i,columns:at},{condition:t,columns:lt}],s,n),e.jsxs(e.Fragment,{children:[e.jsx(f,{condition:r.length>0,show:e.jsxs(g,{sx:{mb:4},children:[e.jsx(ot,{}),e.jsxs(g,{sx:{marginBlock:4},children:[e.jsx(W,{variant:"h2",children:"API URLs"}),e.jsx(rt,{compact:t})]})]})}),e.jsxs(g,{sx:{overflowX:"auto"},children:[e.jsx(W,{variant:"h2",children:"API Tokens"}),e.jsx(ye,{value:l,children:e.jsx(Te,{rows:r,headerGroups:a,prepareRow:u})})]}),e.jsx(f,{condition:r.length===0&&!o,show:e.jsx(f,{condition:(l==null?void 0:l.length)>0,show:e.jsxs(K,{children:["No tokens found matching “",l,"”"]}),elseShow:e.jsx(K,{children:e.jsxs("span",{children:["No tokens available. Read ",e.jsx(B,{href:"https://docs.getunleash.io/api-overview",target:"_blank",rel:"noreferrer",children:"API How-to guides"})," "," to learn more."]})})})})]})},it=(t,s)=>{const n=s>=t;return{limitReached:n,limitMessage:n?`You have reached the limit of ${t} API tokens`:void 0}},Ft=({path:t,permission:s,project:n})=>{const o=Ce(),{tokens:r,loading:a}=Je(),{uiConfig:l}=y(),{limitReached:u,limitMessage:i}=it(l.resourceLimits.apiTokens,r.length);return e.jsx(ke,{Icon:Ae,onClick:()=>o(t),"data-testid":ve,permission:s,projectId:n,maxWidth:"700px",disabled:a||u,tooltipProps:{title:i},children:"New API token"})},ct=c(Y)(({theme:t})=>({textDecoration:"none",color:t.palette.links,"&:hover, &:focus":{textDecoration:"underline"}})),dt=c("div")({display:"flex",alignItems:"center"}),ut=({projects:t,project:s})=>{const{searchQuery:n}=we(),o=t&&Array.isArray(t)&&t.length>1?t:[];if(o.length>0)return e.jsx(w,{children:e.jsx(D,{title:o.map((r,a)=>e.jsxs(d.Fragment,{children:[a>0&&", ",!r||r==="*"?e.jsx(E,{search:n,children:"*"}):e.jsx(ct,{to:`/projects/${r}`,children:e.jsx(E,{search:n,children:r})})]},r)),placement:"bottom-start",arrow:!0,tabIndex:0,children:e.jsxs("span",{children:[`${o.length}`," projects"]})})});if(o.length===1&&o[0]!=="*"||s&&s!=="*"){const r=s||o[0];return e.jsx(Se,{to:`/projects/${r}`,title:r})}return e.jsx(w,{children:e.jsx(D,{title:"ALL current and future projects.",placement:"bottom",arrow:!0,children:e.jsx(dt,{children:e.jsx(E,{search:n,children:"*"})})})})};var P={},ht=Ne;Object.defineProperty(P,"__esModule",{value:!0});var ne=P.default=void 0,pt=ht(Ee()),xt=e,mt=(0,pt.default)((0,xt.jsx)("path",{d:"M21 10h-8.35C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H13l2 2 2-2 2 2 4-4.04L21 10zM7 15c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z"}),"Key");ne=P.default=mt;const jt=({secret:t,project:s,projects:n})=>{const o=t!=null&&t.includes(":")?"v2":"v1",r=t==null?void 0:t.startsWith("*:"),a=n&&(n==null?void 0:n.length)>1||(n==null?void 0:n.length)===1&&n[0]!=="*"||s&&s!=="*";return o==="v2"&&!r&&!a},gt=({...t})=>jt(t)?e.jsx(G,{icon:e.jsx(D,{title:e.jsxs("p",{children:["This is an orphaned token. All of its original projects have been deleted and it now has access to all current and future projects. You should stop using this token and delete it. Read more in"," ",e.jsx(B,{target:"_blank",rel:"noopener noreferrer",href:"https://github.com/Unleash/unleash/releases/tag/v6.1.0",children:"release notes"}),"."]}),placement:"bottom-start",arrow:!0,children:e.jsx(Ie,{"aria-label":"Orphaned token",color:"warning","data-testid":"orphaned-token-icon"})})}):e.jsx(G,{icon:e.jsx(ne,{color:"disabled"})}),Mt=(t,s)=>{const n=d.useMemo(()=>({sortBy:[{id:"createdAt",desc:!0}]}),[]),o=d.useMemo(()=>[{id:"Icon",Cell:p=>e.jsx(gt,{secret:p.row.original.secret,project:p.row.original.project,projects:p.row.original.projects}),disableSortBy:!0,disableGlobalFilter:!0,width:50},{Header:"Token name",accessor:"tokenName",Cell:N,minWidth:35},{Header:"Type",accessor:"type",Cell:({value:p})=>e.jsx(N,{value:z[p.toLowerCase()].label,subtitle:z[p.toLowerCase()].title,subtitleTooltip:!0}),width:180},{Header:"Project",accessor:"project",Cell:p=>e.jsx(ut,{project:p.row.original.project,projects:p.row.original.projects}),width:160},{Header:"Environment",accessor:"environment",Cell:N,width:120},{Header:"Created",accessor:"createdAt",Cell:Re,width:150,disableGlobalFilter:!0},{Header:"Last seen",accessor:"seenAt",Cell:De,width:140,disableGlobalFilter:!0},{Header:"Actions",width:120,id:"Actions",align:"center",disableSortBy:!0,disableGlobalFilter:!0,Cell:s}],[]),{getTableProps:r,getTableBodyProps:a,headerGroups:l,rows:u,prepareRow:i,state:j,setGlobalFilter:m,setHiddenColumns:b}=C.useTable({columns:o,data:t,initialState:n,sortTypes:Ue,autoResetHiddenColumns:!1,disableSortRemove:!0},C.useGlobalFilter,C.useSortBy,C.useFlexLayout);return{getTableProps:r,getTableBodyProps:a,headerGroups:l,rows:u,prepareRow:i,state:j,setGlobalFilter:m,setHiddenColumns:b,columns:o}},z={client:{label:"BACKEND",title:"Connect backend SDK or Unleash Edge"},backend:{label:"BACKEND",title:"Connect backend SDK or Unleash Edge"},frontend:{label:"FRONTEND",title:"Connect frontend SDK"},admin:{label:"ADMIN",title:"Full access for managing Unleash"}},Ot=({token:t,project:s,permission:n,track:o})=>{const{setToastData:r}=L(),a=l=>{X(l)&&(r({type:"success",text:"Token copied to clipboard"}),o&&typeof o=="function"&&o())};return e.jsx(J,{permission:n,projectId:s,tooltipProps:{title:"Copy token",arrow:!0},onClick:()=>a(t.secret),size:"large",children:e.jsx(V,{})})},bt=c("ul")({marginBottom:0}),Ht=({token:t,permission:s,onRemove:n,project:o})=>{const[r,a]=d.useState(!1),{setToastData:l,setToastApiError:u}=L(),i=async()=>{try{await n(),a(!1),l({type:"success",text:"API token removed"})}catch(j){u(Be(j))}};return e.jsxs(e.Fragment,{children:[e.jsx(J,{permission:s,projectId:o,tooltipProps:{title:"Delete token",arrow:!0},onClick:()=>a(!0),size:"large",children:e.jsx(Le,{})}),e.jsx(Z,{open:r,onClick:i,onClose:()=>a(!1),title:"Confirm deletion",children:e.jsxs("div",{children:["Are you sure you want to delete the following API token?",e.jsx("br",{}),e.jsxs(bt,{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"name"}),":"," ",e.jsx("code",{children:t.tokenName})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"type"}),": ",e.jsx("code",{children:t.type})]}),e.jsxs("li",{children:[e.jsx("strong",{children:"environment"}),":"," ",e.jsx("code",{children:t.environment})]})]})]})})]})},ft=c("div")(()=>({maxWidth:"400px"})),yt=c("form")(()=>({display:"flex",flexDirection:"column",height:"100%"})),Tt=c(Pe)(({theme:t})=>({width:"100%",marginBottom:t.spacing(2)})),Ct=c(_e)(({theme:t})=>({marginBottom:t.spacing(2),minWidth:"400px",[t.breakpoints.down("sm")]:{minWidth:"379px"}})),oe=c("p")(({theme:t})=>({marginBottom:t.spacing(1)})),kt=c("label")(({theme:t})=>({marginBottom:t.spacing(1)})),vt=c(Q)(({theme:t})=>({marginLeft:t.spacing(3)})),At=c(g)({marginTop:"auto",display:"flex",justifyContent:"flex-end"}),$t=({children:t,actions:s,handleSubmit:n,handleCancel:o})=>{var l;const{uiConfig:r}=y(),a=!!((l=r==null?void 0:r.flags)!=null&&l.UNLEASH_CLOUD);return e.jsxs(yt,{onSubmit:n,children:[e.jsx(f,{condition:a,show:e.jsxs(U,{severity:"info",sx:{mb:4},children:["Please be aware of our"," ",e.jsx(B,{href:"https://www.getunleash.io/fair-use-policy",children:"fair use policy"}),"."]})}),t,e.jsxs(At,{children:[s,e.jsx(vt,{onClick:o,children:"Cancel"})]})]})};var x=(t=>(t.ADMIN="ADMIN",t.CLIENT="CLIENT",t.FRONTEND="FRONTEND",t))(x||{});const Kt=t=>{var M,O;const{environments:s}=ee(),n=(M=s==null?void 0:s.find(h=>h.enabled))==null?void 0:M.name,o=I(Fe,t),r=[{key:x.CLIENT,label:"Backend SDK",title:"Creates a backend token to connect a backend SDK or Unleash Edge",enabled:I(Me)||o},{key:x.FRONTEND,label:"Frontend SDK",title:"Creates a frontend token to connect a frontend SDK",enabled:I(Oe)||o}],a=(O=r.find(h=>h.enabled))==null?void 0:O.key,[l,u]=d.useState(""),[i,j]=d.useState(a||x.CLIENT),[m,b]=d.useState([t||"*"]),[p,re]=d.useState(m),[_,T]=d.useState(),[F,S]=d.useState({});return d.useEffect(()=>{T(i==="ADMIN"?"*":n)},[i,n]),{tokenName:l,type:i,apiTokenTypes:r,projects:m,environment:_,setTokenName:u,setTokenType:h=>{h==="ADMIN"?(j(x.ADMIN),re(m),b(["*"]),T("*")):(j(h),b(p),T(n))},setProjects:b,setEnvironment:T,getApiTokenPayload:()=>({tokenName:l,type:i,environment:_,projects:m}),isValid:()=>{const h={};return l||(h.tokenName="Token name is required"),m.length===0&&(h.projects="At least one project is required"),S(h),Object.keys(h).length===0},clearErrors:h=>{if(h){const H={...F};delete H[h],S(H)}else S({})},errors:F}},Gt=({open:t,setOpen:s,closeConfirm:n,token:o,type:r})=>e.jsxs(Z,{open:t,setOpen:s,onClick:n,primaryButtonText:"Close",title:"New token created",children:[e.jsx(A,{variant:"body1",children:"Your new token has been created successfully."}),e.jsx(He,{token:o}),e.jsx(f,{condition:r===x.FRONTEND,show:e.jsxs(U,{sx:{mt:2},severity:"info",children:["By default, all ",x.FRONTEND," tokens may be used from any CORS origin. If you'd like to configure a strict set of origins, please use the"," ",e.jsx(Y,{to:"/admin/cors",target:"_blank",rel:"noreferrer",children:"CORS origins configuration page"}),"."]})})]}),Wt=({tokenName:t,setTokenName:s,errors:n,clearErrors:o})=>e.jsxs(e.Fragment,{children:[e.jsx(oe,{children:"What would you like to call this token?"}),e.jsx(Tt,{value:t,name:"tokenName",onChange:r=>s(r.target.value),label:"Token name",error:n.tokenName!==void 0,errorText:n.tokenName,onFocus:()=>o("tokenName"),autoFocus:!0})]}),zt=({type:t,setType:s,apiTokenTypes:n})=>e.jsx(ft,{children:e.jsxs($e,{sx:{mb:2,width:"100%"},children:[e.jsx(kt,{id:"token-type",children:"What do you want to connect?"}),e.jsx(Ke,{"aria-labelledby":"token-type",defaultValue:"CLIENT",name:"radio-buttons-group",value:t,onChange:(o,r)=>s(r),children:n.map(({key:o,label:r,title:a,enabled:l})=>e.jsx(Ge,{value:o,sx:{mb:1},disabled:!l,control:e.jsx(We,{sx:{ml:.75,alignSelf:"flex-start"}}),label:e.jsx(g,{children:e.jsxs(g,{children:[e.jsx(A,{children:r}),e.jsx(A,{variant:"body2",color:"text.secondary",children:a})]})})},o))})]})}),qt=({type:t,environment:s,setEnvironment:n})=>{const{environments:o}=ee(),r=t===x.ADMIN?[{key:"*",label:"ALL"}]:o.map(a=>({key:a.name,label:`${a.name.concat(a.enabled?"":" - deprecated")}`,title:a.name,disabled:!1}));return e.jsxs(e.Fragment,{children:[e.jsx(oe,{children:"Which environment should the token have access to?"}),e.jsx(Ct,{disabled:t===x.ADMIN,options:r,value:s,onChange:n,label:"Environment",id:"api_key_environment",name:"environment",IconComponent:ze,fullWidth:!0})]})},wt=t=>t.map(s=>({...s.user,joinedAt:new Date(s.joinedAt),createdBy:s.createdBy})),Vt=t=>{const{data:s,error:n,mutate:o}=qe(te(`api/admin/groups/${t}`),St);return d.useMemo(()=>({group:s&&{...s,users:wt((s==null?void 0:s.users)??[])},loading:!n&&!s,refetchGroup:()=>o(),error:n}),[s,n,o])},St=t=>fetch(t).then(se("Group")).then(s=>s.json()),Xt=()=>{const{isEnterprise:t}=y(),{data:s,error:n,mutate:o}=Ve(t(),{serviceAccounts:[],rootRoles:[]},te("api/admin/service-account"),Et);return d.useMemo(()=>({serviceAccounts:(s==null?void 0:s.serviceAccounts)??[],roles:(s==null?void 0:s.rootRoles)??[],loading:!n&&!s,refetch:()=>o(),error:n}),[s,n,o])},Et=t=>fetch(t).then(se("Service Accounts")).then(s=>s.json()),Nt=c("div")(({theme:t})=>({display:"flex",flexDirection:"column",gap:t.spacing(.5),"& > *:not(:last-child)":{borderBottom:`1px solid ${t.palette.divider}`,paddingBottom:t.spacing(1)}})),It=c(Ye)(()=>({display:"block"})),Qt=({role:t,roles:s,value:n})=>{const{isEnterprise:o}=y();if(o()){const r=s||[t];return e.jsx(w,{children:e.jsx(Xe,{tooltip:e.jsx(Nt,{children:r.map(a=>e.jsx(Qe,{roleId:a,tooltip:!0},a))}),children:e.jsx(It,{children:n})})})}return e.jsx(w,{children:n})};export{_t as A,Ft as C,qt as E,Ht as R,oe as S,x as T,Ot as a,Kt as b,$t as c,Wt as d,zt as e,Gt as f,Xt as g,Vt as h,Qt as i,ne as j,wt as m,Mt as u};
@@ -1 +0,0 @@
1
- import{j as e,aU as O,i as I,u as N,r as C,ao as P,lr as ee,bf as te,cU as ae,aX as U,w as ne,s as M,cj as se,aN as re,ls as oe,f as ie,aQ as de,aT as ue,aR as le,K as k,h as q}from"./index-CoLhlfXP.js";const ce=({isOpen:t,onConfirm:a,onClose:n,safeguardData:r,mode:s,safeguardType:d})=>{const{metricName:p}=r.impactMetric,g=d==="featureEnvironment"?"disables the environment":"pauses automation";return e.jsx(O,{title:"Request changes",open:t,secondaryButtonText:"Cancel",onClose:n,customButton:e.jsx(I,{color:"primary",variant:"contained",onClick:a,autoFocus:!0,children:"Add suggestion to draft"}),children:e.jsxs("p",{children:[s==="create"?"Add":"Update"," safeguard that an"," ",g," based on ",e.jsx("strong",{children:p})]})})},ge=()=>{const{makeRequest:t,createRequest:a,errors:n,loading:r}=N({propagateErrors:!0});return{createOrUpdateReleasePlanSafeguard:async({projectId:u,featureName:h,environment:i,planId:f,body:l})=>{const c="createOrUpdateReleasePlanSafeguard",m=`api/admin/projects/${u}/features/${h}/environments/${i}/release-plans/${f}/safeguards`,x=a(m,{method:"PUT",body:JSON.stringify(l)},c);await t(x.caller,x.id)},createOrUpdateFeatureEnvironmentSafeguard:async({projectId:u,featureName:h,environment:i,body:f})=>{const l="createOrUpdateFeatureEnvironmentSafeguard",c=`api/admin/projects/${u}/features/${h}/environments/${i}/safeguards`,m=a(c,{method:"PUT",body:JSON.stringify(f)},l);await t(m.caller,m.id)},deleteReleasePlanSafeguard:async({projectId:u,featureName:h,environment:i,planId:f,safeguardId:l})=>{const c="deleteReleasePlanSafeguard",m=`api/admin/projects/${u}/features/${h}/environments/${i}/release-plans/${f}/safeguards/${l}`,x=a(m,{method:"DELETE"},c);await t(x.caller,x.id)},deleteFeatureEnvironmentSafeguard:async({projectId:u,featureName:h,environment:i,safeguardId:f})=>{const l="deleteFeatureEnvironmentSafeguard",c=`api/admin/projects/${u}/features/${h}/environments/${i}/safeguards/${f}`,m=a(c,{method:"DELETE"},l);await t(m.caller,m.id)},errors:n,loading:r}},fe=({open:t,onClose:a,onConfirm:n,isDeleting:r=!1})=>e.jsxs(O,{title:"Remove safeguard?",open:t,primaryButtonText:r?"Removing...":"Remove safeguard",secondaryButtonText:"Cancel",onClick:n,onClose:a,disabledPrimaryButton:r,children:[e.jsx("p",{children:"You are about to remove the safeguard that pauses automation when conditions are met."}),e.jsx("br",{}),e.jsx("p",{children:"This action cannot be undone."})]}),R=M("div")(({theme:t})=>({display:"flex",padding:t.spacing(.25,.25),backgroundColor:se(t),borderTop:`1px solid ${t.palette.divider}`,borderBottom:`1px solid ${t.palette.divider}`,"& > form":{borderRadius:0,border:"none"}})),pe=M("div")(({theme:t})=>({display:"flex",alignItems:"center",gap:t.spacing(1),justifyContent:"space-between",width:"100%",paddingRight:t.spacing(2)})),he=({onSelect:t,releasePlan:a})=>{const[n,r]=C.useState(null),{trackEvent:s}=P();return e.jsxs(R,{children:[e.jsx(pe,{children:e.jsx(ee,{onClick:d=>{s("safeguards",{props:{eventType:"choose safeguard opened"}}),r(d.currentTarget)},color:"primary",startIcon:e.jsx(te,{}),sx:{m:2},children:"Add safeguard"})}),e.jsxs(ae,{anchorEl:n,open:!!n,onClose:()=>r(null),children:[e.jsx(U,{onClick:()=>{s("safeguards",{props:{eventType:"form opened",safeguardType:"featureEnvironment"}}),t("featureEnvironment"),r(null)},children:"Disable environment"}),e.jsx(ne,{title:a?"":"Add a release plan to use this safeguard",placement:"right",arrow:!0,children:e.jsx("span",{children:e.jsx(U,{disabled:!a,onClick:()=>{s("safeguards",{props:{eventType:"form opened",safeguardType:"releasePlan"}}),t("releasePlan"),r(null)},children:"Pause automation"})})})]})]})},me=({projectId:t,featureId:a,environmentName:n,safeguardType:r,releasePlan:s,safeguard:d,onSafeguardChange:p})=>{const{setToastData:g,setToastApiError:u}=ie(),{trackEvent:h}=P(),{addChange:i}=de(),{isChangeRequestConfigured:f}=ue(t),{data:l,refetch:c}=le(t),{createOrUpdateReleasePlanSafeguard:m,deleteReleasePlanSafeguard:x,createOrUpdateFeatureEnvironmentSafeguard:T,deleteFeatureEnvironmentSafeguard:L}=ge(),[J,A]=C.useState(!1),[K,F]=C.useState(!1),[Q,w]=C.useState(!1),[j,$]=C.useState(null),[y,E]=C.useState(!1),B=f(n),X=r==="releasePlan"&&s?o=>m({projectId:t,featureName:a,environment:n,planId:s.id,body:o}):o=>T({projectId:t,featureName:a,environment:n,body:o}),Y=r==="releasePlan"&&s?o=>x({projectId:t,featureName:a,environment:n,planId:s.id,safeguardId:o}):o=>L({projectId:t,featureName:a,environment:n,safeguardId:o}),_=async o=>{if(h("safeguards",{props:{eventType:"safeguard submitted",safeguardType:r}}),B){$(o),w(!0);return}try{await X(o),g({type:"success",text:"Safeguard added successfully"}),p()}catch(S){u(q(S))}},z=async()=>{if(j)try{if(r==="featureEnvironment")await i(t,n,{feature:a,action:"changeFeatureEnvSafeguard",payload:{safeguard:j}});else{if(!s)return;await i(t,n,{feature:a,action:"changeReleasePlanSafeguard",payload:{planId:s.id,safeguard:j}})}await c(),g({type:"success",text:"Added to draft"}),p()}catch(o){u(q(o))}finally{w(!1),$(null)}},G=()=>{d&&(B?F(!0):A(!0))},H=async()=>{if(!(!d||y)){E(!0);try{await Y(d.id),g({type:"success",text:"Safeguard deleted successfully"}),p()}catch(o){u(q(o))}finally{E(!1),A(!1)}}},V=async()=>{if(!(!d||y)){E(!0);try{if(r==="featureEnvironment")await i(t,n,{feature:a,action:"deleteFeatureEnvSafeguard",payload:{safeguardId:d.id}});else{if(!s)return;await i(t,n,{feature:a,action:"deleteReleasePlanSafeguard",payload:{planId:s.id,safeguardId:d.id}})}await c(),g({type:"success",text:"Added to draft"}),p()}catch(o){u(q(o))}finally{E(!1),F(!1)}}},W=o=>{var b;const S=(o.action==="changeReleasePlanSafeguard"||o.action==="deleteReleasePlanSafeguard")&&!!s&&((b=o.payload)==null?void 0:b.planId)===s.id,v=o.action==="changeFeatureEnvSafeguard"||o.action==="deleteFeatureEnvSafeguard";return S||v},Z=C.useMemo(()=>{if(!l)return null;for(const o of l){if(o.environment!==n)continue;const S=o.features.find(b=>b.name===a);if(!S)continue;const v=S.changes.find(W);if(v)return v.action}return null},[l,n,a,s==null?void 0:s.id]);return{handleSubmit:_,handleDeleteRequest:G,pendingSafeguardAction:Z,deleteDialog:{open:J,isDeleting:y,onConfirm:H,onClose:()=>{y||A(!1)}},deleteChangeRequestDialog:{open:K,isDeleting:y,onConfirm:V,onClose:()=>F(!1)},submitChangeRequestDialog:{open:Q,data:j,onConfirm:z,onClose:()=>{w(!1),$(null)}}}},D=({safeguardType:t,releasePlan:a,safeguard:n,environmentName:r,featureId:s,onSafeguardChange:d,onCancel:p})=>{const g=re("projectId"),{handleSubmit:u,handleDeleteRequest:h,pendingSafeguardAction:i,deleteDialog:f,deleteChangeRequestDialog:l,submitChangeRequestDialog:c}=me({projectId:g,featureId:s,environmentName:r,safeguardType:t,releasePlan:a,safeguard:n,onSafeguardChange:d}),T=i==="deleteReleasePlanSafeguard"||i==="deleteFeatureEnvSafeguard"?e.jsx(k,{color:"error",children:"Deleted in draft"}):i==="changeReleasePlanSafeguard"||i==="changeFeatureEnvSafeguard"?e.jsx(k,{color:"warning",children:"Modified in draft"}):void 0;return e.jsxs(e.Fragment,{children:[e.jsx(oe,{safeguard:n,onSubmit:u,onCancel:p,onDelete:n?h:void 0,environment:r,featureId:s,badge:T,safeguardType:t}),c.data&&e.jsx(ce,{isOpen:c.open,onConfirm:c.onConfirm,onClose:()=>{c.onClose(),p()},safeguardData:c.data,environment:r,mode:n?"edit":"create",safeguardType:t}),n&&e.jsx(fe,{open:f.open,onClose:f.onClose,onConfirm:f.onConfirm,isDeleting:f.isDeleting}),n&&e.jsx(O,{title:"Request changes",open:l.open,secondaryButtonText:"Cancel",onClose:l.onClose,primaryButtonText:"Add suggestion to draft",onClick:l.onConfirm,disabledPrimaryButton:l.isDeleting,children:e.jsxs("p",{children:[e.jsx("strong",{children:"Remove"})," safeguard",a&&e.jsxs(e.Fragment,{children:[" ","from release plan"," ",e.jsx("strong",{children:a.name})]})," ","for ",e.jsx("strong",{children:s})," in"," ",e.jsx("strong",{children:r})]})})]})},Ce=({featureEnvSafeguard:t,releasePlan:a,environmentName:n,featureId:r,onSafeguardChange:s})=>{var i;const d=(i=a==null?void 0:a.safeguards)==null?void 0:i[0],[p,g]=C.useState(null),u=()=>{g(null),s()};return t||d?e.jsxs(e.Fragment,{children:[t&&e.jsx(R,{children:e.jsx(D,{safeguardType:"featureEnvironment",safeguard:t,environmentName:n,featureId:r,onSafeguardChange:u,onCancel:()=>{}})}),d&&e.jsx(R,{children:e.jsx(D,{safeguardType:"releasePlan",releasePlan:a,safeguard:d,environmentName:n,featureId:r,onSafeguardChange:u,onCancel:()=>{}})})]}):p==="featureEnvironment"?e.jsx(R,{children:e.jsx(D,{safeguardType:"featureEnvironment",environmentName:n,featureId:r,onSafeguardChange:s,onCancel:()=>g(null)})}):p==="releasePlan"&&a?e.jsx(R,{children:e.jsx(D,{safeguardType:"releasePlan",releasePlan:a,environmentName:n,featureId:r,onSafeguardChange:s,onCancel:()=>g(null)})}):e.jsx(he,{onSelect:g,releasePlan:a})};export{he as AddSafeguard,Ce as Safeguard,Ce as default};
@@ -1 +0,0 @@
1
- import{j as n,aU as f,s as g,L as m,b6 as d,cp as y,r as p,ba as v,b8 as x,ao as b,b9 as k,cg as E,G as F}from"./index-CoLhlfXP.js";const M=g(m)(({theme:a})=>({textDecoration:"none",color:a.palette.primary.main,fontWeight:a.fontWeight.bold})),U=({isOpen:a,onClose:s,features:e,project:t})=>n.jsxs(f,{title:"You can't archive a feature that other features depend on",open:a,primaryButtonText:"OK",onClick:s,children:[n.jsx("p",{children:"The following features depend on your feature:"}),n.jsx("ul",{children:e.map(r=>n.jsx("li",{children:n.jsx(M,{to:`/projects/${t}/features/${r}`,target:"_blank",rel:"noopener noreferrer",children:r})},r))})]}),L=d("api/admin/client-metrics/features"),j=(a,s)=>{const e=d(`api/admin/client-metrics/features/${a}/raw?hoursBack=${s}`),{data:t,error:r}=y(e,()=>R(e)),i=p.useCallback(()=>{v(L).catch(console.warn)},[]);return{featureMetrics:t==null?void 0:t.data,loading:!r&&!t,refetchFeatureMetrics:i,error:r}},R=a=>fetch(a).then(x("Features")).then(s=>s.json()).then(),w=48,$=({hoursBack:a,setHoursBack:s,label:e="Period"})=>{const{trackEvent:t}=b(),r=o=>{s(Number.parseInt(o,10)),t("feature-metrics",{props:{eventType:"change-period",hoursBack:o}})},{isEnterprise:i}=k(),h=E("extendedUsageMetrics"),l=i()&&h?[...u,...A]:u,c=l.map(o=>Number(o.key)).includes(a)?a:w;return p.useEffect(()=>{a!==c&&s(c)},[a]),n.jsx("div",{children:n.jsx(F,{name:"feature-metrics-period",label:e,id:"feature-metrics-period",options:l,value:String(c),onChange:r,fullWidth:!0})})},u=[{key:"1",label:"Last hour"},{key:"24",label:"Last 24 hours"},{key:"48",label:"Last 48 hours"}],A=[{key:`${7*24}`,label:"Last 7 days"},{key:`${30*24}`,label:"Last 30 days"},{key:`${90*24}`,label:"Last 90 days"}],C=a=>{const s=new Map;return a.forEach(e=>{let t=s.get(e.timestamp);if(t||(t={...e,yes:0,no:0,variants:{}},s.set(e.timestamp,t)),t.yes+=e.yes,t.no+=e.no,e.variants){t.variants=t.variants||{};for(const[r,i]of Object.entries(e.variants))t.variants[r]=(t.variants[r]||0)+i}}),Array.from(s.values()).map(e=>({...e,variants:e.variants&&Object.keys(e.variants).length===0?void 0:e.variants}))};export{U as F,w as a,C as b,$ as c,j as u};
@@ -1,10 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <g clip-path="url(#clip0_18717_114578)" transform="rotate(180, 12, 12)">
3
- <path d="M9.00539 8.41445L12.8854 12.2945L9.00539 16.1745C8.61539 16.5645 8.61539 17.1945 9.00539 17.5845C9.39539 17.9745 10.0254 17.9745 10.4154 17.5845L15.0054 12.9945C15.3954 12.6045 15.3954 11.9745 15.0054 11.5845L10.4154 6.99445C10.0254 6.60445 9.39539 6.60445 9.00539 6.99445C8.62539 7.38445 8.61539 8.02445 9.00539 8.41445Z" fill="#6C65E5"/>
4
- </g>
5
- <defs>
6
- <clipPath id="clip0_18717_114578">
7
- <rect width="24" height="24" fill="white"/>
8
- </clipPath>
9
- </defs>
10
- </svg>
@@ -1,10 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <g clip-path="url(#clip0_18717_114578)">
3
- <path d="M9.00539 8.41445L12.8854 12.2945L9.00539 16.1745C8.61539 16.5645 8.61539 17.1945 9.00539 17.5845C9.39539 17.9745 10.0254 17.9745 10.4154 17.5845L15.0054 12.9945C15.3954 12.6045 15.3954 11.9745 15.0054 11.5845L10.4154 6.99445C10.0254 6.60445 9.39539 6.60445 9.00539 6.99445C8.62539 7.38445 8.61539 8.02445 9.00539 8.41445Z" fill="#6C65E5"/>
4
- </g>
5
- <defs>
6
- <clipPath id="clip0_18717_114578">
7
- <rect width="24" height="24" fill="white"/>
8
- </clipPath>
9
- </defs>
10
- </svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"><path fill="#9F9FA1" d="m6.324 14.25-.739 1.971a.68.68 0 0 1-.28.378.816.816 0 0 1-.458.133.814.814 0 0 1-.688-.34.713.713 0 0 1-.102-.73l3.21-8.127a.89.89 0 0 1 .305-.389A.809.809 0 0 1 8.056 7h.662c.187 0 .348.049.484.146a.89.89 0 0 1 .305.39l3.21 8.15a.705.705 0 0 1-.09.718.79.79 0 0 1-.675.328.809.809 0 0 1-.484-.146.89.89 0 0 1-.305-.389l-.713-1.946H6.324Zm.535-1.41h3.056L8.438 8.8h-.102l-1.477 4.04ZM16.256 17c-.832 0-1.485-.207-1.96-.62-.476-.414-.714-.978-.714-1.691 0-.682.276-1.237.828-1.667.552-.43 1.26-.645 2.126-.645.39 0 .752.028 1.083.085.33.057.615.15.853.28v-.34c0-.438-.157-.787-.471-1.047-.314-.26-.743-.39-1.286-.39a2.377 2.377 0 0 0-1.35.415.981.981 0 0 1-.51.194.723.723 0 0 1-.509-.146.636.636 0 0 1-.267-.426.494.494 0 0 1 .165-.45 3.474 3.474 0 0 1 1.095-.632 4.141 4.141 0 0 1 1.401-.22c1.053 0 1.86.24 2.42.719.56.478.84 1.171.84 2.08v3.698c0 .195-.072.361-.216.499a.729.729 0 0 1-.523.207.75.75 0 0 1-.534-.22.686.686 0 0 1-.23-.51v-.22h-.076c-.22.325-.518.58-.891.767-.374.187-.798.28-1.274.28Zm.255-1.216c.543 0 1.006-.183 1.388-.548.382-.365.573-.807.573-1.326a2.985 2.985 0 0 0-.815-.292 4.071 4.071 0 0 0-.84-.097c-.544 0-.96.101-1.248.304-.289.203-.433.49-.433.864 0 .324.127.588.382.79.254.203.585.305.993.305Z"/><rect width="1" height="15.9" x="15.442" y="5" fill="#6E6E70" rx=".5" transform="rotate(32.071 15.442 5)"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="#6C65E5" d="m6.324 14.25-.739 1.971a.68.68 0 0 1-.28.378.816.816 0 0 1-.458.133.814.814 0 0 1-.688-.34.713.713 0 0 1-.102-.73l3.21-8.127a.89.89 0 0 1 .305-.389A.809.809 0 0 1 8.056 7h.662c.187 0 .348.049.484.146a.89.89 0 0 1 .305.39l3.21 8.15a.705.705 0 0 1-.09.718.79.79 0 0 1-.675.328.809.809 0 0 1-.484-.146.89.89 0 0 1-.305-.389l-.713-1.946H6.324Zm.535-1.41h3.056L8.438 8.8h-.102l-1.477 4.04ZM16.256 17c-.832 0-1.485-.207-1.96-.62-.476-.414-.714-.978-.714-1.691 0-.682.276-1.237.828-1.667.552-.43 1.26-.645 2.126-.645.39 0 .752.028 1.083.085.33.057.615.15.853.28v-.34c0-.438-.157-.787-.471-1.047-.314-.26-.743-.39-1.286-.39a2.377 2.377 0 0 0-1.35.415.981.981 0 0 1-.51.194.723.723 0 0 1-.509-.146.636.636 0 0 1-.267-.426.494.494 0 0 1 .165-.45 3.474 3.474 0 0 1 1.095-.632 4.141 4.141 0 0 1 1.401-.22c1.053 0 1.86.24 2.42.719.56.478.84 1.171.84 2.08v3.698c0 .195-.072.361-.216.499a.729.729 0 0 1-.523.207.75.75 0 0 1-.534-.22.686.686 0 0 1-.23-.51v-.22h-.076c-.22.325-.518.58-.891.767-.374.187-.798.28-1.274.28Zm.255-1.216c.543 0 1.006-.183 1.388-.548.382-.365.573-.807.573-1.326a2.985 2.985 0 0 0-.815-.292 4.071 4.071 0 0 0-.84-.097c-.544 0-.96.101-1.248.304-.289.203-.433.49-.433.864 0 .324.127.588.382.79.254.203.585.305.993.305Z"/></svg>