unleash-server 7.4.1 → 7.4.3

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 (478) hide show
  1. package/README.md +6 -1
  2. package/dist/lib/addons/feature-event-formatter-md.d.ts.map +1 -1
  3. package/dist/lib/addons/feature-event-formatter-md.js +1 -0
  4. package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
  5. package/dist/lib/addons/feature-event-formatter-md.test.js +45 -2
  6. package/dist/lib/addons/feature-event-formatter-md.test.js.map +1 -1
  7. package/dist/lib/create-config.d.ts.map +1 -1
  8. package/dist/lib/create-config.js +6 -1
  9. package/dist/lib/create-config.js.map +1 -1
  10. package/dist/lib/db/feature-environment-store.d.ts.map +1 -1
  11. package/dist/lib/db/feature-environment-store.js.map +1 -1
  12. package/dist/lib/db/index.d.ts.map +1 -1
  13. package/dist/lib/db/index.js +5 -2
  14. package/dist/lib/db/index.js.map +1 -1
  15. package/dist/lib/{routes/admin-api/constraints.d.ts → features/constraints/constraints-controller.d.ts} +5 -5
  16. package/dist/lib/features/constraints/constraints-controller.d.ts.map +1 -0
  17. package/dist/lib/{routes/admin-api/constraints.js → features/constraints/constraints-controller.js} +6 -6
  18. package/dist/lib/features/constraints/constraints-controller.js.map +1 -0
  19. package/dist/lib/features/constraints/constraints-read-model-type.d.ts +6 -0
  20. package/dist/lib/features/constraints/constraints-read-model-type.d.ts.map +1 -0
  21. package/dist/lib/features/constraints/constraints-read-model-type.js +2 -0
  22. package/dist/lib/features/constraints/constraints-read-model-type.js.map +1 -0
  23. package/dist/lib/features/constraints/constraints-read-model.d.ts +11 -0
  24. package/dist/lib/features/constraints/constraints-read-model.d.ts.map +1 -0
  25. package/dist/lib/features/constraints/constraints-read-model.js +55 -0
  26. package/dist/lib/features/constraints/constraints-read-model.js.map +1 -0
  27. package/dist/lib/features/constraints/constraints-read-model.test.d.ts +2 -0
  28. package/dist/lib/features/constraints/constraints-read-model.test.d.ts.map +1 -0
  29. package/dist/lib/features/constraints/constraints-read-model.test.js +388 -0
  30. package/dist/lib/features/constraints/constraints-read-model.test.js.map +1 -0
  31. package/dist/lib/features/constraints/constraints.e2e.test.d.ts.map +1 -0
  32. package/dist/{test/e2e/api/admin → lib/features/constraints}/constraints.e2e.test.js +4 -4
  33. package/dist/lib/features/constraints/constraints.e2e.test.js.map +1 -0
  34. package/dist/lib/features/constraints/createConstraintsReadModel.d.ts +5 -0
  35. package/dist/lib/features/constraints/createConstraintsReadModel.d.ts.map +1 -0
  36. package/dist/lib/features/constraints/createConstraintsReadModel.js +9 -0
  37. package/dist/lib/features/constraints/createConstraintsReadModel.js.map +1 -0
  38. package/dist/lib/features/constraints/fake-constraints-read-model.d.ts +7 -0
  39. package/dist/lib/features/constraints/fake-constraints-read-model.d.ts.map +1 -0
  40. package/dist/lib/features/constraints/fake-constraints-read-model.js +11 -0
  41. package/dist/lib/features/constraints/fake-constraints-read-model.js.map +1 -0
  42. package/dist/lib/features/context/context.d.ts.map +1 -1
  43. package/dist/lib/features/context/context.js +16 -10
  44. package/dist/lib/features/context/context.js.map +1 -1
  45. package/dist/lib/features/context/createContextService.js +1 -1
  46. package/dist/lib/features/context/createContextService.js.map +1 -1
  47. package/dist/lib/features/dependent-features/dependent-features-controller.d.ts.map +1 -1
  48. package/dist/lib/features/dependent-features/dependent-features-controller.js +0 -1
  49. package/dist/lib/features/dependent-features/dependent-features-controller.js.map +1 -1
  50. package/dist/lib/features/edgetokens/edge-hmac-verifier.d.ts +4 -0
  51. package/dist/lib/features/edgetokens/edge-hmac-verifier.d.ts.map +1 -0
  52. package/dist/lib/features/edgetokens/edge-hmac-verifier.js +83 -0
  53. package/dist/lib/features/edgetokens/edge-hmac-verifier.js.map +1 -0
  54. package/dist/lib/features/edgetokens/edge-token-store.d.ts +16 -0
  55. package/dist/lib/features/edgetokens/edge-token-store.d.ts.map +1 -0
  56. package/dist/lib/features/edgetokens/edge-token-store.js +101 -0
  57. package/dist/lib/features/edgetokens/edge-token-store.js.map +1 -0
  58. package/dist/lib/features/edgetokens/edge-tokens.d.ts +2 -0
  59. package/dist/lib/features/edgetokens/edge-tokens.d.ts.map +1 -0
  60. package/dist/lib/features/edgetokens/edge-tokens.js +16 -0
  61. package/dist/lib/features/edgetokens/edge-tokens.js.map +1 -0
  62. package/dist/lib/features/edgetokens/edge-tokens.test.d.ts +2 -0
  63. package/dist/lib/features/edgetokens/edge-tokens.test.d.ts.map +1 -0
  64. package/dist/lib/features/edgetokens/edge-tokens.test.js +22 -0
  65. package/dist/lib/features/edgetokens/edge-tokens.test.js.map +1 -0
  66. package/dist/lib/features/edgetokens/edge-verification.d.ts +3 -0
  67. package/dist/lib/features/edgetokens/edge-verification.d.ts.map +1 -0
  68. package/dist/lib/features/edgetokens/edge-verification.js +25 -0
  69. package/dist/lib/features/edgetokens/edge-verification.js.map +1 -0
  70. package/dist/lib/features/edgetokens/edge-verification.test.d.ts +2 -0
  71. package/dist/lib/features/edgetokens/edge-verification.test.d.ts.map +1 -0
  72. package/dist/lib/features/edgetokens/edge-verification.test.js +18 -0
  73. package/dist/lib/features/edgetokens/edge-verification.test.js.map +1 -0
  74. package/dist/lib/features/edgetokens/fake-edge-token-store.d.ts +11 -0
  75. package/dist/lib/features/edgetokens/fake-edge-token-store.d.ts.map +1 -0
  76. package/dist/lib/features/edgetokens/fake-edge-token-store.js +21 -0
  77. package/dist/lib/features/edgetokens/fake-edge-token-store.js.map +1 -0
  78. package/dist/lib/features/feature-lifecycle/feature-lifecycle-controller.d.ts.map +1 -1
  79. package/dist/lib/features/feature-lifecycle/feature-lifecycle-controller.js +6 -3
  80. package/dist/lib/features/feature-lifecycle/feature-lifecycle-controller.js.map +1 -1
  81. package/dist/lib/features/feature-lifecycle/feature-lifecycle-count-controller.d.ts.map +1 -1
  82. package/dist/lib/features/feature-lifecycle/feature-lifecycle-count-controller.js +2 -1
  83. package/dist/lib/features/feature-lifecycle/feature-lifecycle-count-controller.js.map +1 -1
  84. package/dist/lib/features/feature-links/feature-link-controller.d.ts.map +1 -1
  85. package/dist/lib/features/feature-links/feature-link-controller.js +6 -3
  86. package/dist/lib/features/feature-links/feature-link-controller.js.map +1 -1
  87. package/dist/lib/features/feature-search/feature.search.e2e.test.js +3 -3
  88. package/dist/lib/features/feature-search/feature.search.e2e.test.js.map +1 -1
  89. package/dist/lib/features/feature-toggle/converters/feature-toggle-row-converter.d.ts +1 -1
  90. package/dist/lib/features/feature-toggle/createFeatureToggleService.d.ts +2 -0
  91. package/dist/lib/features/feature-toggle/createFeatureToggleService.d.ts.map +1 -1
  92. package/dist/lib/features/feature-toggle/createFeatureToggleService.js +8 -2
  93. package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
  94. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +6 -6
  95. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  96. package/dist/lib/features/feature-toggle/feature-toggle-service.js +6 -44
  97. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  98. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  99. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +6 -0
  100. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  101. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.constraint-validation.test.d.ts +2 -0
  102. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.constraint-validation.test.d.ts.map +1 -0
  103. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.constraint-validation.test.js +185 -0
  104. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.constraint-validation.test.js.map +1 -0
  105. package/dist/lib/features/frontend-api/createFrontendApiService.d.ts.map +1 -1
  106. package/dist/lib/features/frontend-api/createFrontendApiService.js +2 -0
  107. package/dist/lib/features/frontend-api/createFrontendApiService.js.map +1 -1
  108. package/dist/lib/features/index.d.ts +2 -0
  109. package/dist/lib/features/index.d.ts.map +1 -1
  110. package/dist/lib/features/index.js +2 -0
  111. package/dist/lib/features/index.js.map +1 -1
  112. package/dist/lib/features/instance-stats/createInstanceStatsService.d.ts.map +1 -1
  113. package/dist/lib/features/instance-stats/createInstanceStatsService.js +0 -1
  114. package/dist/lib/features/instance-stats/createInstanceStatsService.js.map +1 -1
  115. package/dist/lib/features/metrics/last-seen/tests/last-seen-service.test.js +2 -2
  116. package/dist/lib/features/metrics/last-seen/tests/last-seen-service.test.js.map +1 -1
  117. package/dist/lib/features/metrics/shared/schema.d.ts.map +1 -1
  118. package/dist/lib/features/metrics/shared/schema.js +10 -2
  119. package/dist/lib/features/metrics/shared/schema.js.map +1 -1
  120. package/dist/lib/features/metrics/shared/schema.test.js +18 -0
  121. package/dist/lib/features/metrics/shared/schema.test.js.map +1 -1
  122. package/dist/lib/features/pat/createPatService.d.ts +6 -0
  123. package/dist/lib/features/pat/createPatService.d.ts.map +1 -0
  124. package/dist/lib/features/pat/createPatService.js +15 -0
  125. package/dist/lib/features/pat/createPatService.js.map +1 -0
  126. package/dist/lib/features/pat/fake-pat-store.d.ts +18 -0
  127. package/dist/lib/features/pat/fake-pat-store.d.ts.map +1 -0
  128. package/dist/lib/features/pat/fake-pat-store.js +52 -0
  129. package/dist/lib/features/pat/fake-pat-store.js.map +1 -0
  130. package/dist/lib/{services → features/pat}/pat-service.d.ts +3 -3
  131. package/dist/lib/features/pat/pat-service.d.ts.map +1 -0
  132. package/dist/lib/{services → features/pat}/pat-service.js +5 -5
  133. package/dist/lib/features/pat/pat-service.js.map +1 -0
  134. package/dist/lib/{types/stores/pat-store.d.ts → features/pat/pat-store-type.d.ts} +2 -2
  135. package/dist/lib/features/pat/pat-store-type.d.ts.map +1 -0
  136. package/dist/lib/features/pat/pat-store-type.js +2 -0
  137. package/dist/lib/features/pat/pat-store-type.js.map +1 -0
  138. package/dist/lib/{db → features/pat}/pat-store.d.ts +4 -4
  139. package/dist/lib/features/pat/pat-store.d.ts.map +1 -0
  140. package/dist/lib/{db → features/pat}/pat-store.js +1 -1
  141. package/dist/lib/features/pat/pat-store.js.map +1 -0
  142. package/dist/lib/features/personal-dashboard/personal-dashboard-controller.d.ts.map +1 -1
  143. package/dist/lib/features/personal-dashboard/personal-dashboard-controller.js +4 -2
  144. package/dist/lib/features/personal-dashboard/personal-dashboard-controller.js.map +1 -1
  145. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts +2 -1
  146. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts.map +1 -1
  147. package/dist/lib/features/playground/feature-evaluator/constraint.js +18 -0
  148. package/dist/lib/features/playground/feature-evaluator/constraint.js.map +1 -1
  149. package/dist/lib/features/playground/offline-unleash-client.test.js +105 -0
  150. package/dist/lib/features/playground/offline-unleash-client.test.js.map +1 -1
  151. package/dist/lib/features/project-status/project-status-controller.d.ts.map +1 -1
  152. package/dist/lib/features/project-status/project-status-controller.js +2 -1
  153. package/dist/lib/features/project-status/project-status-controller.js.map +1 -1
  154. package/dist/lib/features/release-plans/createReleasePlanMilestoneStrategyService.d.ts +12 -0
  155. package/dist/lib/features/release-plans/createReleasePlanMilestoneStrategyService.d.ts.map +1 -0
  156. package/dist/lib/features/release-plans/createReleasePlanMilestoneStrategyService.js +26 -0
  157. package/dist/lib/features/release-plans/createReleasePlanMilestoneStrategyService.js.map +1 -0
  158. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.d.ts +20 -0
  159. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.d.ts.map +1 -0
  160. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.js +37 -0
  161. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.js.map +1 -0
  162. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.test.d.ts +2 -0
  163. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.test.d.ts.map +1 -0
  164. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.test.js +69 -0
  165. package/dist/lib/features/release-plans/release-plan-milestone-strategy-service.test.js.map +1 -0
  166. package/dist/lib/features/release-plans/release-plan-milestone-strategy-store.d.ts +10 -2
  167. package/dist/lib/features/release-plans/release-plan-milestone-strategy-store.d.ts.map +1 -1
  168. package/dist/lib/features/release-plans/release-plan-milestone-strategy-store.js +0 -1
  169. package/dist/lib/features/release-plans/release-plan-milestone-strategy-store.js.map +1 -1
  170. package/dist/lib/features/scheduler/schedule-services.d.ts.map +1 -1
  171. package/dist/lib/features/scheduler/schedule-services.js +3 -2
  172. package/dist/lib/features/scheduler/schedule-services.js.map +1 -1
  173. package/dist/lib/features/segment/admin-segment.e2e.test.js +117 -0
  174. package/dist/lib/features/segment/admin-segment.e2e.test.js.map +1 -1
  175. package/dist/lib/features/segment/createSegmentService.d.ts.map +1 -1
  176. package/dist/lib/features/segment/createSegmentService.js +7 -2
  177. package/dist/lib/features/segment/createSegmentService.js.map +1 -1
  178. package/dist/lib/features/segment/segment-controller.d.ts.map +1 -1
  179. package/dist/lib/features/segment/segment-controller.js +1 -1
  180. package/dist/lib/features/segment/segment-controller.js.map +1 -1
  181. package/dist/lib/features/segment/segment-service.d.ts +3 -1
  182. package/dist/lib/features/segment/segment-service.d.ts.map +1 -1
  183. package/dist/lib/features/segment/segment-service.js +4 -1
  184. package/dist/lib/features/segment/segment-service.js.map +1 -1
  185. package/dist/lib/features/users/user-store.d.ts.map +1 -1
  186. package/dist/lib/features/users/user-store.js +6 -0
  187. package/dist/lib/features/users/user-store.js.map +1 -1
  188. package/dist/lib/features/users/user-updates-read-model.d.ts +2 -0
  189. package/dist/lib/features/users/user-updates-read-model.d.ts.map +1 -1
  190. package/dist/lib/features/users/user-updates-read-model.js +2 -0
  191. package/dist/lib/features/users/user-updates-read-model.js.map +1 -1
  192. package/dist/lib/middleware/conditional-middleware.d.ts +1 -1
  193. package/dist/lib/middleware/conditional-middleware.d.ts.map +1 -1
  194. package/dist/lib/middleware/response-time-metrics.test.js +4 -0
  195. package/dist/lib/middleware/response-time-metrics.test.js.map +1 -1
  196. package/dist/lib/openapi/spec/admin-segment-schema.d.ts +1 -1
  197. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +4 -4
  198. package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +8 -8
  199. package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +17 -17
  200. package/dist/lib/openapi/spec/client-feature-schema.d.ts +2 -2
  201. package/dist/lib/openapi/spec/client-features-delta-schema.d.ts +5 -5
  202. package/dist/lib/openapi/spec/client-features-schema.d.ts +5 -5
  203. package/dist/lib/openapi/spec/client-features-schema.test.js +12 -0
  204. package/dist/lib/openapi/spec/client-features-schema.test.js.map +1 -1
  205. package/dist/lib/openapi/spec/client-metrics-schema.d.ts +1 -0
  206. package/dist/lib/openapi/spec/client-metrics-schema.d.ts.map +1 -1
  207. package/dist/lib/openapi/spec/client-metrics-schema.js +1 -0
  208. package/dist/lib/openapi/spec/client-metrics-schema.js.map +1 -1
  209. package/dist/lib/openapi/spec/client-segment-schema.d.ts +1 -1
  210. package/dist/lib/openapi/spec/constraint-schema.d.ts +2 -2
  211. package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +1 -1
  212. package/dist/lib/openapi/spec/create-user-response-schema.d.ts +12 -0
  213. package/dist/lib/openapi/spec/create-user-response-schema.d.ts.map +1 -1
  214. package/dist/lib/openapi/spec/edge-environment-projects-list-schema.d.ts +41 -0
  215. package/dist/lib/openapi/spec/edge-environment-projects-list-schema.d.ts.map +1 -0
  216. package/dist/lib/openapi/spec/edge-environment-projects-list-schema.js +39 -0
  217. package/dist/lib/openapi/spec/edge-environment-projects-list-schema.js.map +1 -0
  218. package/dist/lib/openapi/spec/edge-token-schema.d.ts +6 -1
  219. package/dist/lib/openapi/spec/edge-token-schema.d.ts.map +1 -1
  220. package/dist/lib/openapi/spec/edge-token-schema.js +6 -1
  221. package/dist/lib/openapi/spec/edge-token-schema.js.map +1 -1
  222. package/dist/lib/openapi/spec/environment-project-schema.d.ts +2 -2
  223. package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
  224. package/dist/lib/openapi/spec/export-result-schema.d.ts +68 -68
  225. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +17 -17
  226. package/dist/lib/openapi/spec/feature-schema.d.ts +34 -34
  227. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +34 -34
  228. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +36 -36
  229. package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +1 -1
  230. package/dist/lib/openapi/spec/group-schema.d.ts +24 -0
  231. package/dist/lib/openapi/spec/group-schema.d.ts.map +1 -1
  232. package/dist/lib/openapi/spec/group-user-model-schema.d.ts +12 -0
  233. package/dist/lib/openapi/spec/group-user-model-schema.d.ts.map +1 -1
  234. package/dist/lib/openapi/spec/groups-schema.d.ts +48 -0
  235. package/dist/lib/openapi/spec/groups-schema.d.ts.map +1 -1
  236. package/dist/lib/openapi/spec/health-overview-schema.d.ts +69 -69
  237. package/dist/lib/openapi/spec/health-report-schema.d.ts +69 -69
  238. package/dist/lib/openapi/spec/index.d.ts +3 -0
  239. package/dist/lib/openapi/spec/index.d.ts.map +1 -1
  240. package/dist/lib/openapi/spec/index.js +3 -0
  241. package/dist/lib/openapi/spec/index.js.map +1 -1
  242. package/dist/lib/openapi/spec/me-schema.d.ts +12 -0
  243. package/dist/lib/openapi/spec/me-schema.d.ts.map +1 -1
  244. package/dist/lib/openapi/spec/playground-constraint-schema.d.ts +1 -1
  245. package/dist/lib/openapi/spec/playground-feature-schema.d.ts +4 -4
  246. package/dist/lib/openapi/spec/playground-response-schema.d.ts +9 -9
  247. package/dist/lib/openapi/spec/playground-segment-schema.d.ts +1 -1
  248. package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +2 -2
  249. package/dist/lib/openapi/spec/profile-schema.d.ts +34 -34
  250. package/dist/lib/openapi/spec/project-environment-schema.d.ts +1 -1
  251. package/dist/lib/openapi/spec/project-overview-schema.d.ts +69 -69
  252. package/dist/lib/openapi/spec/public-signup-token-schema.d.ts +12 -0
  253. package/dist/lib/openapi/spec/public-signup-token-schema.d.ts.map +1 -1
  254. package/dist/lib/openapi/spec/public-signup-tokens-schema.d.ts +24 -0
  255. package/dist/lib/openapi/spec/public-signup-tokens-schema.d.ts.map +1 -1
  256. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +4 -4
  257. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +2 -2
  258. package/dist/lib/openapi/spec/release-plan-schema.d.ts +8 -8
  259. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +8 -8
  260. package/dist/lib/openapi/spec/search-features-schema.d.ts +72 -72
  261. package/dist/lib/openapi/spec/segment-schema.d.ts +1 -1
  262. package/dist/lib/openapi/spec/segments-schema.d.ts +2 -2
  263. package/dist/lib/openapi/spec/signup-data-schema.d.ts +42 -0
  264. package/dist/lib/openapi/spec/signup-data-schema.d.ts.map +1 -0
  265. package/dist/lib/openapi/spec/signup-data-schema.js +40 -0
  266. package/dist/lib/openapi/spec/signup-data-schema.js.map +1 -0
  267. package/dist/lib/openapi/spec/submit-signup-data-schema.d.ts +50 -0
  268. package/dist/lib/openapi/spec/submit-signup-data-schema.d.ts.map +1 -0
  269. package/dist/lib/openapi/spec/submit-signup-data-schema.js +26 -0
  270. package/dist/lib/openapi/spec/submit-signup-data-schema.js.map +1 -0
  271. package/dist/lib/openapi/spec/ui-config-schema.d.ts +5 -0
  272. package/dist/lib/openapi/spec/ui-config-schema.d.ts.map +1 -1
  273. package/dist/lib/openapi/spec/ui-config-schema.js +5 -0
  274. package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
  275. package/dist/lib/openapi/spec/update-feature-schema.d.ts +1 -1
  276. package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts +18 -2
  277. package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts.map +1 -1
  278. package/dist/lib/openapi/spec/update-feature-strategy-schema.js +17 -1
  279. package/dist/lib/openapi/spec/update-feature-strategy-schema.js.map +1 -1
  280. package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +1 -1
  281. package/dist/lib/openapi/spec/user-access-overview-schema.d.ts +12 -0
  282. package/dist/lib/openapi/spec/user-access-overview-schema.d.ts.map +1 -1
  283. package/dist/lib/openapi/spec/user-schema.d.ts +12 -0
  284. package/dist/lib/openapi/spec/user-schema.d.ts.map +1 -1
  285. package/dist/lib/openapi/spec/user-schema.js +12 -0
  286. package/dist/lib/openapi/spec/user-schema.js.map +1 -1
  287. package/dist/lib/openapi/spec/users-groups-base-schema.d.ts +48 -0
  288. package/dist/lib/openapi/spec/users-groups-base-schema.d.ts.map +1 -1
  289. package/dist/lib/openapi/spec/users-schema.d.ts +12 -0
  290. package/dist/lib/openapi/spec/users-schema.d.ts.map +1 -1
  291. package/dist/lib/openapi/spec/users-search-schema.d.ts +12 -0
  292. package/dist/lib/openapi/spec/users-search-schema.d.ts.map +1 -1
  293. package/dist/lib/openapi/spec/validated-edge-tokens-schema.d.ts +6 -1
  294. package/dist/lib/openapi/spec/validated-edge-tokens-schema.d.ts.map +1 -1
  295. package/dist/lib/openapi/util/api-operation.d.ts +23 -3
  296. package/dist/lib/openapi/util/api-operation.d.ts.map +1 -1
  297. package/dist/lib/openapi/util/api-stability.d.ts +3 -0
  298. package/dist/lib/openapi/util/api-stability.d.ts.map +1 -0
  299. package/dist/lib/openapi/util/api-stability.js +49 -0
  300. package/dist/lib/openapi/util/api-stability.js.map +1 -0
  301. package/dist/lib/openapi/util/api-stability.test.d.ts +2 -0
  302. package/dist/lib/openapi/util/api-stability.test.d.ts.map +1 -0
  303. package/dist/lib/openapi/util/api-stability.test.js +140 -0
  304. package/dist/lib/openapi/util/api-stability.test.js.map +1 -0
  305. package/dist/lib/openapi/util/openapi-tags.d.ts +6 -6
  306. package/dist/lib/openapi/util/openapi-tags.d.ts.map +1 -1
  307. package/dist/lib/openapi/util/openapi-tags.js +4 -4
  308. package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
  309. package/dist/lib/routes/admin-api/index.js +1 -1
  310. package/dist/lib/routes/admin-api/index.js.map +1 -1
  311. package/dist/lib/routes/admin-api/project/variants.d.ts.map +1 -1
  312. package/dist/lib/routes/admin-api/project/variants.js +5 -1
  313. package/dist/lib/routes/admin-api/project/variants.js.map +1 -1
  314. package/dist/lib/routes/admin-api/user/user.d.ts +1 -0
  315. package/dist/lib/routes/admin-api/user/user.d.ts.map +1 -1
  316. package/dist/lib/routes/admin-api/user/user.js +12 -1
  317. package/dist/lib/routes/admin-api/user/user.js.map +1 -1
  318. package/dist/lib/routes/admin-api/user-admin.d.ts.map +1 -1
  319. package/dist/lib/routes/admin-api/user-admin.js +4 -4
  320. package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
  321. package/dist/lib/routes/edge-api/index.d.ts +4 -3
  322. package/dist/lib/routes/edge-api/index.d.ts.map +1 -1
  323. package/dist/lib/routes/edge-api/index.js +39 -7
  324. package/dist/lib/routes/edge-api/index.js.map +1 -1
  325. package/dist/lib/schema/feature-schema.test.js +1 -1
  326. package/dist/lib/schema/feature-schema.test.js.map +1 -1
  327. package/dist/lib/server-impl.d.ts +5 -4
  328. package/dist/lib/server-impl.d.ts.map +1 -1
  329. package/dist/lib/server-impl.js +6 -3
  330. package/dist/lib/server-impl.js.map +1 -1
  331. package/dist/lib/services/api-token-service.d.ts.map +1 -1
  332. package/dist/lib/services/api-token-service.js.map +1 -1
  333. package/dist/lib/services/edge-service.d.ts +22 -7
  334. package/dist/lib/services/edge-service.d.ts.map +1 -1
  335. package/dist/lib/services/edge-service.js +87 -9
  336. package/dist/lib/services/edge-service.js.map +1 -1
  337. package/dist/lib/services/index.d.ts +8 -3
  338. package/dist/lib/services/index.d.ts.map +1 -1
  339. package/dist/lib/services/index.js +23 -6
  340. package/dist/lib/services/index.js.map +1 -1
  341. package/dist/lib/services/openapi-service.d.ts +8 -2
  342. package/dist/lib/services/openapi-service.d.ts.map +1 -1
  343. package/dist/lib/services/openapi-service.js +49 -7
  344. package/dist/lib/services/openapi-service.js.map +1 -1
  345. package/dist/lib/services/openapi-service.test.d.ts +2 -0
  346. package/dist/lib/services/openapi-service.test.d.ts.map +1 -0
  347. package/dist/lib/services/openapi-service.test.js +41 -0
  348. package/dist/lib/services/openapi-service.test.js.map +1 -0
  349. package/dist/lib/services/user-service.d.ts +3 -1
  350. package/dist/lib/services/user-service.d.ts.map +1 -1
  351. package/dist/lib/services/user-service.js +7 -2
  352. package/dist/lib/services/user-service.js.map +1 -1
  353. package/dist/lib/services/user-service.test.js +4 -28
  354. package/dist/lib/services/user-service.test.js.map +1 -1
  355. package/dist/lib/types/experimental.d.ts +1 -1
  356. package/dist/lib/types/experimental.d.ts.map +1 -1
  357. package/dist/lib/types/experimental.js +6 -0
  358. package/dist/lib/types/experimental.js.map +1 -1
  359. package/dist/lib/types/model.d.ts +4 -0
  360. package/dist/lib/types/model.d.ts.map +1 -1
  361. package/dist/lib/types/model.js.map +1 -1
  362. package/dist/lib/types/option.d.ts +5 -0
  363. package/dist/lib/types/option.d.ts.map +1 -1
  364. package/dist/lib/types/stores/edge-store.d.ts +14 -0
  365. package/dist/lib/types/stores/edge-store.d.ts.map +1 -0
  366. package/dist/lib/types/stores/edge-store.js +2 -0
  367. package/dist/lib/types/stores/edge-store.js.map +1 -0
  368. package/dist/lib/types/stores/user-store.d.ts +4 -0
  369. package/dist/lib/types/stores/user-store.d.ts.map +1 -1
  370. package/dist/lib/types/stores.d.ts +6 -4
  371. package/dist/lib/types/stores.d.ts.map +1 -1
  372. package/dist/lib/types/stores.js +1 -1
  373. package/dist/lib/types/stores.js.map +1 -1
  374. package/dist/lib/types/user.d.ts +8 -1
  375. package/dist/lib/types/user.d.ts.map +1 -1
  376. package/dist/lib/types/user.js +3 -1
  377. package/dist/lib/types/user.js.map +1 -1
  378. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
  379. package/dist/lib/ui-config/ui-config-service.js +1 -0
  380. package/dist/lib/ui-config/ui-config-service.js.map +1 -1
  381. package/dist/lib/ui-config/ui-config.test.js +5 -1
  382. package/dist/lib/ui-config/ui-config.test.js.map +1 -1
  383. package/dist/lib/util/constants.d.ts +2 -1
  384. package/dist/lib/util/constants.d.ts.map +1 -1
  385. package/dist/lib/util/constants.js +2 -0
  386. package/dist/lib/util/constants.js.map +1 -1
  387. package/dist/lib/util/validators/constraint-types.d.ts +1 -0
  388. package/dist/lib/util/validators/constraint-types.d.ts.map +1 -1
  389. package/dist/lib/util/validators/constraint-types.js +12 -0
  390. package/dist/lib/util/validators/constraint-types.js.map +1 -1
  391. package/dist/lib/util/validators/constraint-types.test.js +25 -1
  392. package/dist/lib/util/validators/constraint-types.test.js.map +1 -1
  393. package/dist/mailtemplates/getting-started/getting-started.html.mustache +7 -2
  394. package/dist/mailtemplates/getting-started/getting-started.plain.mustache +6 -1
  395. package/dist/migrations/20260204150900-add-edge-hmac-verification-tables.d.ts +3 -0
  396. package/dist/migrations/20260204150900-add-edge-hmac-verification-tables.d.ts.map +1 -0
  397. package/dist/migrations/20260204150900-add-edge-hmac-verification-tables.js +39 -0
  398. package/dist/migrations/20260204150900-add-edge-hmac-verification-tables.js.map +1 -0
  399. package/dist/migrations/20260213095258-users-company-role-and-email-consent.d.ts +3 -0
  400. package/dist/migrations/20260213095258-users-company-role-and-email-consent.d.ts.map +1 -0
  401. package/dist/migrations/20260213095258-users-company-role-and-email-consent.js +12 -0
  402. package/dist/migrations/20260213095258-users-company-role-and-email-consent.js.map +1 -0
  403. package/dist/server-dev.js +3 -0
  404. package/dist/server-dev.js.map +1 -1
  405. package/dist/test/arbitraries.test.d.ts.map +1 -1
  406. package/dist/test/arbitraries.test.js +3 -9
  407. package/dist/test/arbitraries.test.js.map +1 -1
  408. package/dist/test/e2e/api/admin/context.e2e.test.js +1 -1
  409. package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
  410. package/dist/test/e2e/api/admin/project/variants.e2e.test.js +19 -0
  411. package/dist/test/e2e/api/admin/project/variants.e2e.test.js.map +1 -1
  412. package/dist/test/e2e/api/edge/create-token-request.test.d.ts +2 -0
  413. package/dist/test/e2e/api/edge/create-token-request.test.d.ts.map +1 -0
  414. package/dist/test/e2e/api/edge/create-token-request.test.js +215 -0
  415. package/dist/test/e2e/api/edge/create-token-request.test.js.map +1 -0
  416. package/dist/test/e2e/services/edge-service.e2e.test.js +106 -3
  417. package/dist/test/e2e/services/edge-service.e2e.test.js.map +1 -1
  418. package/dist/test/fixtures/fake-release-plan-milestone-strategy-store.d.ts +17 -0
  419. package/dist/test/fixtures/fake-release-plan-milestone-strategy-store.d.ts.map +1 -0
  420. package/dist/test/fixtures/fake-release-plan-milestone-strategy-store.js +44 -0
  421. package/dist/test/fixtures/fake-release-plan-milestone-strategy-store.js.map +1 -0
  422. package/dist/test/fixtures/store.d.ts.map +1 -1
  423. package/dist/test/fixtures/store.js +5 -2
  424. package/dist/test/fixtures/store.js.map +1 -1
  425. package/frontend/build/index.html +1 -1
  426. package/frontend/build/static/{AdvancedPlayground-B70Djk8B.js → AdvancedPlayground-BVQjoHnr.js} +2 -2
  427. package/frontend/build/static/BackendConnections-bRvUo06H.js +1 -0
  428. package/frontend/build/static/{CreateProject-Dnggz6io.js → CreateProject-z7K5-k8g.js} +1 -1
  429. package/frontend/build/static/{EnterpriseEdge-Dnk6MbDj.js → EnterpriseEdge-CAkbmuGs.js} +2 -2
  430. package/frontend/build/static/{FeatureMetricsChart-CFEixeGp.js → FeatureMetricsChart-TPw8l2qi.js} +2 -2
  431. package/frontend/build/static/FeatureStaleDialog-DwV5Mzh6.js +7 -0
  432. package/frontend/build/static/{FeatureViewLazyExport-CUnXEEwm.js → FeatureViewLazyExport-CBpSqVMU.js} +3 -3
  433. package/frontend/build/static/{FlagMetricsChart-ujKp_v58.js → FlagMetricsChart-DLcy8CzE.js} +2 -2
  434. package/frontend/build/static/FrontendNetworkTrafficUsage-CYJZFmkc.js +1 -0
  435. package/frontend/build/static/{GridLayoutWrapper-Cg_xypvQ.js → GridLayoutWrapper-CixVvIgD.js} +1 -1
  436. package/frontend/build/static/{ImpactMetricsPage-ZRSvDBg4.js → ImpactMetricsPage-AS6DHn5C.js} +1 -1
  437. package/frontend/build/static/{LazyAdminExport-B8GV3V8t.js → LazyAdminExport-dyqU9IvB.js} +14 -14
  438. package/frontend/build/static/{LazyProjectExport-B9SJl4_L.js → LazyProjectExport-B1vRaljX.js} +19 -19
  439. package/frontend/build/static/{LifecycleChartComponent-DulnIgCV.js → LifecycleChartComponent-BGuUP9oF.js} +3 -3
  440. package/frontend/build/static/{LineChartComponent-BVdLj0q6.js → LineChartComponent-DA6kG8Ei.js} +1 -1
  441. package/frontend/build/static/{MarkCompletedDialogue-Cu7y0hRZ.js → MarkCompletedDialogue-D2TM3HgS.js} +1 -1
  442. package/frontend/build/static/{NetworkOverview-CUmX-taY.js → NetworkOverview-aNdwr7xF.js} +1 -1
  443. package/frontend/build/static/{NetworkPrometheusAPIWarning-BwnVz0CY.js → NetworkPrometheusAPIWarning-f1m-ZHgX.js} +1 -1
  444. package/frontend/build/static/{NetworkTraffic-DCMn8UWo.js → NetworkTraffic-CzH9_YqS.js} +1 -1
  445. package/frontend/build/static/{NetworkTrafficUsage-DSZK447X.js → NetworkTrafficUsage-BqpcQ4JO.js} +1 -1
  446. package/frontend/build/static/{PercentageDonut-B2OwM0Er.js → PercentageDonut-cKg6eF-p.js} +1 -1
  447. package/frontend/build/static/{ReactJSONEditor-BPlzE1Zx.js → ReactJSONEditor-BH7GX57b.js} +1 -1
  448. package/frontend/build/static/RoleCell-D01N1lHV.js +1 -0
  449. package/frontend/build/static/{aggregateFeatureMetrics-Bcfo39hn.js → aggregateFeatureMetrics-DJ_IwcyH.js} +1 -1
  450. package/frontend/build/static/{formatTickValue-CqTJlzJZ.js → formatTickValue-ClJtK_xN.js} +2 -2
  451. package/frontend/build/static/index-Cz4lAJ3Y.js +568 -0
  452. package/frontend/build/static/{networkTrafficUsageHighlightPlugin-Dmm54dMG.js → networkTrafficUsageHighlightPlugin-Ce-A3Xr6.js} +1 -1
  453. package/frontend/build/static/unleash_logo_dark_no_label-DHgOj_XN.svg +6 -0
  454. package/frontend/build/static/unleash_logo_white_no_label-BazgWvcx.svg +6 -0
  455. package/frontend/build/static/{useApiTokens-D1XvAIIA.js → useApiTokens-Dx2wjhgw.js} +1 -1
  456. package/frontend/package.json +9 -7
  457. package/package.json +16 -13
  458. package/dist/lib/db/pat-store.d.ts.map +0 -1
  459. package/dist/lib/db/pat-store.js.map +0 -1
  460. package/dist/lib/routes/admin-api/constraints.d.ts.map +0 -1
  461. package/dist/lib/routes/admin-api/constraints.js.map +0 -1
  462. package/dist/lib/services/pat-service.d.ts.map +0 -1
  463. package/dist/lib/services/pat-service.js.map +0 -1
  464. package/dist/lib/types/stores/pat-store.d.ts.map +0 -1
  465. package/dist/lib/types/stores/pat-store.js +0 -2
  466. package/dist/lib/types/stores/pat-store.js.map +0 -1
  467. package/dist/test/e2e/api/admin/constraints.e2e.test.d.ts.map +0 -1
  468. package/dist/test/e2e/api/admin/constraints.e2e.test.js.map +0 -1
  469. package/dist/test/fixtures/fake-pat-store.d.ts +0 -16
  470. package/dist/test/fixtures/fake-pat-store.d.ts.map +0 -1
  471. package/dist/test/fixtures/fake-pat-store.js +0 -35
  472. package/dist/test/fixtures/fake-pat-store.js.map +0 -1
  473. package/frontend/build/static/BackendConnections-mlK6EAYQ.js +0 -1
  474. package/frontend/build/static/FeatureStaleDialog-DZoiwwdR.js +0 -7
  475. package/frontend/build/static/FrontendNetworkTrafficUsage-Dq8wwaXR.js +0 -1
  476. package/frontend/build/static/RoleCell-D5skjCJn.js +0 -1
  477. package/frontend/build/static/index-g9pKMnOR.js +0 -542
  478. /package/dist/{test/e2e/api/admin → lib/features/constraints}/constraints.e2e.test.d.ts +0 -0
@@ -1 +1 @@
1
- import{F as _,H as z,j as i,ee as w,jT as k,ec as N,s as u,k as W,J,r as d,eb as P,B as H,hh as G,jU as O,jV as D,jW as V,fW as K,ef as R,cm as B,b7 as L,b9 as T,e9 as Y,eg as Q,da as X,b as Z,bq as tt,jK as et}from"./index-g9pKMnOR.js";import{a as p,f as b,T as ot,p as f,b as g,d as at,c as rt,u as nt,e as st,g as lt,h as ct}from"./LazyAdminExport-B8GV3V8t.js";import{f as it}from"./formatTickValue-CqTJlzJZ.js";var y={},ut=z;Object.defineProperty(y,"__esModule",{value:!0});var q=y.default=void 0,dt=ut(_()),pt=i,gt=(0,dt.default)((0,pt.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");q=y.default=gt;const M=(t,e,r=!0)=>{const o=t.getFullYear(),a=t.getMonth(),s=b(t),n=N(t);return{key:s,year:o,month:a,dayCount:n,shortLabel:t.toLocaleString("en-US",{month:"short"}),label:e||t.toLocaleString("en-US",{month:"long",year:"numeric"}),selectable:r}},ht=t=>{const e=[M(t,"Current month")],r=w(t);for(let o=1;o<12;o++){const a=k(r,o);e.push(M(a,void 0,a>=ot))}return e},C=ht(p),mt=Object.fromEntries(C.map(t=>[t.key,t])),I="15rem",x=t=>t.spacing(3),$=u("button",{shouldForwardProp:t=>t!=="selected"})(({theme:t,selected:e})=>({cursor:"pointer",border:"none",backgroundColor:e?t.palette.secondary.light:"inherit",fontSize:t.typography.body1.fontSize,padding:t.spacing(.5),borderRadius:t.shape.borderRadius,color:t.palette.text.primary,transition:"background-color 0.2s ease",":focus-visible":{outline:`2px solid ${t.palette.primary.main}`},":hover:not(:disabled)":{backgroundColor:t.palette.action.hover}})),bt=u($)(({theme:t})=>({":disabled":{cursor:"default",color:t.palette.text.disabled}})),ft=u($)(({theme:t})=>({width:"100%",paddingBlock:t.spacing(1),textAlign:"left",borderRadius:0,paddingInline:x(t)})),yt=u(W)(({theme:t})=>({whiteSpace:"nowrap",width:I,justifyContent:"space-between",fontWeight:"normal",color:t.palette.text.primary,borderColor:t.palette.divider,":focus-within":{borderColor:t.palette.primary.main},":hover":{borderColor:t.palette.text.disabled,backgroundColor:"inherit"},transition:"border-color 0.1s ease"})),Ct=u("article")(({theme:t})=>({width:I,paddingBlock:t.spacing(2),display:"flex",flexFlow:"column",gap:t.spacing(2)})),xt=u("article")(({theme:t})=>({paddingInline:x(t)})),St=u("hgroup")(({theme:t})=>({h3:{margin:0,fontSize:t.typography.h3.fontSize},p:{color:t.palette.text.secondary,fontSize:t.typography.body2.fontSize}})),vt=u("ul")(({theme:t})=>({listStyle:"none",padding:0,display:"grid",gridTemplateColumns:"repeat(4, 1fr)",rowGap:t.spacing(1)})),Dt=u("article")(({theme:t})=>({display:"flex",width:"100%",flexFlow:"column",gap:t.spacing(.5)})),Rt=u("p")(({theme:t})=>({paddingInline:x(t),fontSize:t.typography.body2.fontSize,margin:0,color:t.palette.text.secondary,fontWeight:"bold"})),Mt=u("ul")(({theme:t})=>({listStyle:"none",margin:0,padding:0,width:"100%",li:{width:"100%"}})),jt=u(J)(({theme:t})=>({"& .MuiPaper-root":{borderRadius:t.shape.borderRadiusLarge,border:`1px solid ${t.palette.divider}`}})),_t=({selectedPeriod:t,setPeriod:e})=>{const r=[3,6,12].map(l=>({value:l,label:`Last ${l} months`})),[o,a]=d.useState(!1),s=d.useRef(null),n=l=>{e(l),a(!1)},c=t.grouping==="daily"?t.month===P(new Date,"yyyy-MM")?"Current month":f(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"}):`Last ${t.monthsBack} months`;return i.jsxs(H,{ref:s,children:[i.jsx(yt,{endIcon:o?i.jsx(q,{}):i.jsx(G,{}),variant:"outlined",disableRipple:!0,onClick:()=>a(!0),children:c}),i.jsxs(jt,{open:o,anchorEl:s.current,onClose:()=>a(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:[i.jsxs(Ct,{children:[i.jsxs(xt,{children:[i.jsxs(St,{children:[i.jsx("h3",{children:"Select month"}),i.jsx("p",{children:"Last 12 months"})]}),i.jsx(vt,{children:C.map(l=>i.jsx("li",{children:i.jsx(bt,{selected:t.grouping==="daily"&&l.key===t.month,disabled:!l.selectable,onClick:()=>{n({grouping:"daily",month:l.key})},children:l.shortLabel})},l.label))})]}),i.jsxs(Dt,{children:[i.jsx(Rt,{children:"Range"}),i.jsx(Mt,{children:r.map(l=>i.jsx("li",{children:i.jsxs(ft,{selected:t.grouping==="monthly"&&l.value===t.monthsBack,type:"button",onClick:()=>{n({grouping:"monthly",monthsBack:l.value})},children:["Last ",l.value," months"]})},l.label))})]})]})," "]})]})},h={"/api/admin":{label:"Admin",color:"#6D66D9",order:1},"/api/frontend":{label:"Frontend",color:"#A39EFF",order:2},"/api/client":{label:"Server",color:"#D8D6FF",order:3}},wt=(t,e)=>{const{newRecord:r,labels:o}=S(t);return{datasets:t.apiData.filter(s=>!0).sort((s,n)=>h[s.apiPath].order-h[n.apiPath].order).map(s=>{const n=r();for(const l of Object.values(s.dataPoints))n[l.period]=l.trafficTypes[0].count;const c=h[s.apiPath];return{label:c.label,data:Object.values(n),backgroundColor:c.color,hoverBackgroundColor:c.color}}),labels:o}},kt=t=>{const{newRecord:e,labels:r}=S(t);return{datasets:t.apiData.map(a=>{const s=e();for(const c of Object.values(a.dataPoints)){const l=c.connections;s[c.period]=l}const n={label:"Connections",color:"#6D66D9",order:1};return{label:n.label,data:Object.values(s),backgroundColor:n.color,hoverBackgroundColor:n.color}}),labels:r}},Pt=t=>{const{newRecord:e,labels:r}=S(t);return{datasets:t.apiData.map(a=>{const s=e();for(const c of Object.values(a.dataPoints)){const l=c.requests;s[c.period]=l}const n={label:"Frontend requests",color:"#A39EFF",order:1};return{label:n.label,data:Object.values(s),backgroundColor:n.color,hoverBackgroundColor:n.color}}),labels:r}},S=t=>{if(t.grouping==="monthly"){const e=g(t.dateRange.from),r=g(t.dateRange.to),o=Math.abs(O(r,e))+1,a={};for(let n=0;n<o;n++)a[b(D(e,n))]=0;const s=Array.from({length:o}).map((n,c)=>c===o-1?"Current month":b(D(e,c)));return{newRecord:()=>({...a}),labels:s}}else{const e=g(t.dateRange.from),r=g(t.dateRange.to),o=Math.abs(V(r,e))+1,a={};for(let n=0;n<o;n++)a[at(K(e,n))]=0;const s=Array.from({length:o}).map((n,c)=>(c+1).toString());return{newRecord:()=>({...a}),labels:s}}},[Ot,...Bt]=Object.values(h).map(t=>t.label.toLowerCase()).toReversed(),j=`${Bt.toReversed().join(", ")}, and ${Ot}`,zt=t=>t.grouping==="daily"?`A bar chart showing daily traffic usage for ${new Date(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"})}. Each date shows ${j} requests.`:`A bar chart showing monthly total traffic usage for the current month and the preceding ${t.monthsBack} months. Each month shows ${j} requests.`,v=(t,e=new Date)=>{const r=o=>P(o,"yyyy-MM-dd");if(t.grouping==="daily"){const o=f(t.month),a=r(o),s=r(R(o));return{from:a,to:s}}else{const o=r(w(k(e,t.monthsBack))),a=r(R(e));return{from:o,to:a}}},Lt=t=>{if(t.grouping==="daily")return 0;const e=Math.abs(O(new Date(t.dateRange.to),new Date(t.dateRange.from))),r=t.apiData.map(o=>o.dataPoints.filter(({period:a})=>a!==rt).reduce((a,s)=>a+s.trafficTypes[0].count,0)).reduce((o,a)=>o+a,0);return Math.round(r/e)},Tt=(t,{from:e,to:r})=>{const o=`api/admin/metrics/connection?grouping=${t}&from=${e}&to=${r}`,{data:a,error:s,mutate:n}=B(L(o),qt);return d.useMemo(()=>({refetch:()=>n(),result:a?{state:"success",data:a}:s?{state:"error",error:s}:{state:"loading"}}),[a,s,n])},qt=t=>fetch(t).then(T("Metered Connections Metrics")).then(e=>e.json()),It=(t,{from:e,to:r})=>{const o=`api/admin/metrics/request?grouping=${t}&from=${e}&to=${r}`,{data:a,error:s,mutate:n}=B(L(o),$t);return d.useMemo(()=>({refetch:()=>n(),result:a?{state:"success",data:a}:s?{state:"error",error:s}:{state:"loading"}}),[a,s,n])},$t=t=>fetch(t).then(T("Consumption Requests Metrics")).then(e=>e.json()),Nt=(t,e,r)=>{const{result:o}=nt(e.grouping,v(e,p)),{instanceStatus:a}=Y(),{instancePrices:s}=Q(),n=(a==null?void 0:a.billing)==="pay-as-you-go"?s.payg.traffic:s.pro.traffic;return d.useMemo(()=>{if(o.state!=="success")return{chartData:{datasets:[],labels:[]},usageTotal:0,overageCost:0,estimatedMonthlyCost:0,requestSummaryUsage:0};const l=o.data,A=wt(l),m=st(l),F=lt(m,t,n),E=ct(l.apiData,t,p,n),U=e.grouping==="daily"?m:Lt(l);return{chartData:A,usageTotal:m,overageCost:F,estimatedMonthlyCost:E,requestSummaryUsage:U}},[JSON.stringify(o),t,JSON.stringify(e),n])},Wt=t=>{const{result:e}=Tt(t.grouping,v(t,p));return d.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:kt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Jt=t=>{const{result:e}=It(t.grouping,v(t,p));return d.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:Pt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Ht=u(X)(({theme:t})=>({display:"grid",gap:t.spacing(5)})),Gt=u("div")(({theme:t})=>({display:"flex",flexFlow:"row wrap",justifyContent:"space-between",gap:t.spacing(2,4),alignItems:"start"})),Vt=u("span")(({theme:t})=>({fontWeight:"bold"})),At=(t,e,r,o)=>({plugins:{annotation:{clip:!1,annotations:{line:{type:"line",borderDash:[5,5],yMin:r?r/30:0,yMax:r?r/30:0,borderColor:"gray",borderWidth:1,display:!!r&&!!o,label:{backgroundColor:"rgba(192, 192, 192, 0.8)",color:"black",padding:{top:10,bottom:10,left:10,right:10},content:"Average daily requests included in your plan",display:!!r}}}},legend:{position:"bottom",labels:{color:t.palette.text.primary,pointStyle:"circle",usePointStyle:!0,boxHeight:6,padding:15,boxPadding:5}},tooltip:{backgroundColor:t.palette.background.paper,titleColor:t.palette.text.primary,bodyColor:t.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:"rgba(0, 0, 0, 0.05)",borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{title:e}}},responsive:!0,scales:{x:{stacked:!0,ticks:{color:t.palette.text.secondary},grid:{display:!1}},y:{stacked:!0,ticks:{color:t.palette.text.secondary,maxTicksLimit:5,callback:it},grid:{drawBorder:!1}}},elements:{bar:{borderRadius:5}},interaction:{mode:"index",intersect:!1}}),Kt=t=>{const e=Z(),{locationSettings:r}=tt(),[o,a]=d.useState({grouping:"daily",month:C[0].key}),s=d.useMemo(()=>At(e,n=>{if(o.grouping==="daily"){const c=mt[o.month];return new Date(c.year,c.month,Number.parseInt(n[0].label,10)).toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",day:"numeric",year:"numeric"})}else{const c=f(n[0].label);return Number.isNaN(c.getTime())?"Current month to date":c.toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",year:"numeric"})}},t,o.grouping==="daily"),[e,o,t]);return{chartDataSelection:o,setChartDataSelection:a,options:s}},Yt=et({bottomOverflow:34});export{Vt as B,_t as P,Ht as S,Gt as T,Nt as a,Wt as b,Jt as c,zt as g,Yt as n,Kt as u};
1
+ import{F as _,H as z,j as i,ee as w,jW as k,ec as N,s as u,k as W,J,r as d,eb as P,B as H,hh as G,jX as O,jY as D,jZ as Y,fW as V,ef as R,cm as B,b7 as L,b9 as T,e9 as X,eg as Z,da as K,b as Q,bq as tt,jN as et}from"./index-Cz4lAJ3Y.js";import{a as p,f as b,T as ot,p as f,b as g,d as at,c as rt,u as nt,e as st,g as lt,h as ct}from"./LazyAdminExport-dyqU9IvB.js";import{f as it}from"./formatTickValue-ClJtK_xN.js";var y={},ut=z;Object.defineProperty(y,"__esModule",{value:!0});var q=y.default=void 0,dt=ut(_()),pt=i,gt=(0,dt.default)((0,pt.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");q=y.default=gt;const M=(t,e,r=!0)=>{const o=t.getFullYear(),a=t.getMonth(),s=b(t),n=N(t);return{key:s,year:o,month:a,dayCount:n,shortLabel:t.toLocaleString("en-US",{month:"short"}),label:e||t.toLocaleString("en-US",{month:"long",year:"numeric"}),selectable:r}},ht=t=>{const e=[M(t,"Current month")],r=w(t);for(let o=1;o<12;o++){const a=k(r,o);e.push(M(a,void 0,a>=ot))}return e},C=ht(p),mt=Object.fromEntries(C.map(t=>[t.key,t])),I="15rem",x=t=>t.spacing(3),$=u("button",{shouldForwardProp:t=>t!=="selected"})(({theme:t,selected:e})=>({cursor:"pointer",border:"none",backgroundColor:e?t.palette.secondary.light:"inherit",fontSize:t.typography.body1.fontSize,padding:t.spacing(.5),borderRadius:t.shape.borderRadius,color:t.palette.text.primary,transition:"background-color 0.2s ease",":focus-visible":{outline:`2px solid ${t.palette.primary.main}`},":hover:not(:disabled)":{backgroundColor:t.palette.action.hover}})),bt=u($)(({theme:t})=>({":disabled":{cursor:"default",color:t.palette.text.disabled}})),ft=u($)(({theme:t})=>({width:"100%",paddingBlock:t.spacing(1),textAlign:"left",borderRadius:0,paddingInline:x(t)})),yt=u(W)(({theme:t})=>({whiteSpace:"nowrap",width:I,justifyContent:"space-between",fontWeight:"normal",color:t.palette.text.primary,borderColor:t.palette.divider,":focus-within":{borderColor:t.palette.primary.main},":hover":{borderColor:t.palette.text.disabled,backgroundColor:"inherit"},transition:"border-color 0.1s ease"})),Ct=u("article")(({theme:t})=>({width:I,paddingBlock:t.spacing(2),display:"flex",flexFlow:"column",gap:t.spacing(2)})),xt=u("article")(({theme:t})=>({paddingInline:x(t)})),St=u("hgroup")(({theme:t})=>({h3:{margin:0,fontSize:t.typography.h3.fontSize},p:{color:t.palette.text.secondary,fontSize:t.typography.body2.fontSize}})),vt=u("ul")(({theme:t})=>({listStyle:"none",padding:0,display:"grid",gridTemplateColumns:"repeat(4, 1fr)",rowGap:t.spacing(1)})),Dt=u("article")(({theme:t})=>({display:"flex",width:"100%",flexFlow:"column",gap:t.spacing(.5)})),Rt=u("p")(({theme:t})=>({paddingInline:x(t),fontSize:t.typography.body2.fontSize,margin:0,color:t.palette.text.secondary,fontWeight:"bold"})),Mt=u("ul")(({theme:t})=>({listStyle:"none",margin:0,padding:0,width:"100%",li:{width:"100%"}})),jt=u(J)(({theme:t})=>({"& .MuiPaper-root":{borderRadius:t.shape.borderRadiusLarge,border:`1px solid ${t.palette.divider}`}})),_t=({selectedPeriod:t,setPeriod:e})=>{const r=[3,6,12].map(l=>({value:l,label:`Last ${l} months`})),[o,a]=d.useState(!1),s=d.useRef(null),n=l=>{e(l),a(!1)},c=t.grouping==="daily"?t.month===P(new Date,"yyyy-MM")?"Current month":f(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"}):`Last ${t.monthsBack} months`;return i.jsxs(H,{ref:s,children:[i.jsx(yt,{endIcon:o?i.jsx(q,{}):i.jsx(G,{}),variant:"outlined",disableRipple:!0,onClick:()=>a(!0),children:c}),i.jsxs(jt,{open:o,anchorEl:s.current,onClose:()=>a(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:[i.jsxs(Ct,{children:[i.jsxs(xt,{children:[i.jsxs(St,{children:[i.jsx("h3",{children:"Select month"}),i.jsx("p",{children:"Last 12 months"})]}),i.jsx(vt,{children:C.map(l=>i.jsx("li",{children:i.jsx(bt,{selected:t.grouping==="daily"&&l.key===t.month,disabled:!l.selectable,onClick:()=>{n({grouping:"daily",month:l.key})},children:l.shortLabel})},l.label))})]}),i.jsxs(Dt,{children:[i.jsx(Rt,{children:"Range"}),i.jsx(Mt,{children:r.map(l=>i.jsx("li",{children:i.jsxs(ft,{selected:t.grouping==="monthly"&&l.value===t.monthsBack,type:"button",onClick:()=>{n({grouping:"monthly",monthsBack:l.value})},children:["Last ",l.value," months"]})},l.label))})]})]})," "]})]})},h={"/api/admin":{label:"Admin",color:"#6D66D9",order:1},"/api/frontend":{label:"Frontend",color:"#A39EFF",order:2},"/api/client":{label:"Server",color:"#D8D6FF",order:3}},wt=(t,e)=>{const{newRecord:r,labels:o}=S(t);return{datasets:t.apiData.filter(s=>!0).sort((s,n)=>h[s.apiPath].order-h[n.apiPath].order).map(s=>{const n=r();for(const l of Object.values(s.dataPoints))n[l.period]=l.trafficTypes[0].count;const c=h[s.apiPath];return{label:c.label,data:Object.values(n),backgroundColor:c.color,hoverBackgroundColor:c.color}}),labels:o}},kt=t=>{const{newRecord:e,labels:r}=S(t);return{datasets:t.apiData.map(a=>{const s=e();for(const c of Object.values(a.dataPoints)){const l=c.connections;s[c.period]=l}const n={label:"Connections",color:"#6D66D9",order:1};return{label:n.label,data:Object.values(s),backgroundColor:n.color,hoverBackgroundColor:n.color}}),labels:r}},Pt=t=>{const{newRecord:e,labels:r}=S(t);return{datasets:t.apiData.map(a=>{const s=e();for(const c of Object.values(a.dataPoints)){const l=c.requests;s[c.period]=l}const n={label:"Frontend requests",color:"#A39EFF",order:1};return{label:n.label,data:Object.values(s),backgroundColor:n.color,hoverBackgroundColor:n.color}}),labels:r}},S=t=>{if(t.grouping==="monthly"){const e=g(t.dateRange.from),r=g(t.dateRange.to),o=Math.abs(O(r,e))+1,a={};for(let n=0;n<o;n++)a[b(D(e,n))]=0;const s=Array.from({length:o}).map((n,c)=>c===o-1?"Current month":b(D(e,c)));return{newRecord:()=>({...a}),labels:s}}else{const e=g(t.dateRange.from),r=g(t.dateRange.to),o=Math.abs(Y(r,e))+1,a={};for(let n=0;n<o;n++)a[at(V(e,n))]=0;const s=Array.from({length:o}).map((n,c)=>(c+1).toString());return{newRecord:()=>({...a}),labels:s}}},[Ot,...Bt]=Object.values(h).map(t=>t.label.toLowerCase()).toReversed(),j=`${Bt.toReversed().join(", ")}, and ${Ot}`,zt=t=>t.grouping==="daily"?`A bar chart showing daily traffic usage for ${new Date(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"})}. Each date shows ${j} requests.`:`A bar chart showing monthly total traffic usage for the current month and the preceding ${t.monthsBack} months. Each month shows ${j} requests.`,v=(t,e=new Date)=>{const r=o=>P(o,"yyyy-MM-dd");if(t.grouping==="daily"){const o=f(t.month),a=r(o),s=r(R(o));return{from:a,to:s}}else{const o=r(w(k(e,t.monthsBack))),a=r(R(e));return{from:o,to:a}}},Lt=t=>{if(t.grouping==="daily")return 0;const e=Math.abs(O(new Date(t.dateRange.to),new Date(t.dateRange.from))),r=t.apiData.map(o=>o.dataPoints.filter(({period:a})=>a!==rt).reduce((a,s)=>a+s.trafficTypes[0].count,0)).reduce((o,a)=>o+a,0);return Math.round(r/e)},Tt=(t,{from:e,to:r})=>{const o=`api/admin/metrics/connection?grouping=${t}&from=${e}&to=${r}`,{data:a,error:s,mutate:n}=B(L(o),qt);return d.useMemo(()=>({refetch:()=>n(),result:a?{state:"success",data:a}:s?{state:"error",error:s}:{state:"loading"}}),[a,s,n])},qt=t=>fetch(t).then(T("Metered Connections Metrics")).then(e=>e.json()),It=(t,{from:e,to:r})=>{const o=`api/admin/metrics/request?grouping=${t}&from=${e}&to=${r}`,{data:a,error:s,mutate:n}=B(L(o),$t);return d.useMemo(()=>({refetch:()=>n(),result:a?{state:"success",data:a}:s?{state:"error",error:s}:{state:"loading"}}),[a,s,n])},$t=t=>fetch(t).then(T("Consumption Requests Metrics")).then(e=>e.json()),Nt=(t,e,r)=>{const{result:o}=nt(e.grouping,v(e,p)),{instanceStatus:a}=X(),{instancePrices:s}=Z(),n=(a==null?void 0:a.billing)==="pay-as-you-go"?s.payg.traffic:s.pro.traffic;return d.useMemo(()=>{if(o.state!=="success")return{chartData:{datasets:[],labels:[]},usageTotal:0,overageCost:0,estimatedMonthlyCost:0,requestSummaryUsage:0};const l=o.data,A=wt(l),m=st(l),F=lt(m,t,n),E=ct(l.apiData,t,p,n),U=e.grouping==="daily"?m:Lt(l);return{chartData:A,usageTotal:m,overageCost:F,estimatedMonthlyCost:E,requestSummaryUsage:U}},[JSON.stringify(o),t,JSON.stringify(e),n])},Wt=t=>{const{result:e}=Tt(t.grouping,v(t,p));return d.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:kt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Jt=t=>{const{result:e}=It(t.grouping,v(t,p));return d.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:Pt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Ht=u(K)(({theme:t})=>({display:"grid",gap:t.spacing(5)})),Gt=u("div")(({theme:t})=>({display:"flex",flexFlow:"row wrap",justifyContent:"space-between",gap:t.spacing(2,4),alignItems:"start"})),Yt=u("span")(({theme:t})=>({fontWeight:"bold"})),At=(t,e,r,o)=>({plugins:{annotation:{clip:!1,annotations:{line:{type:"line",borderDash:[5,5],yMin:r?r/30:0,yMax:r?r/30:0,borderColor:"gray",borderWidth:1,display:!!r&&!!o,label:{backgroundColor:"rgba(192, 192, 192, 0.8)",color:"black",padding:{top:10,bottom:10,left:10,right:10},content:"Average daily requests included in your plan",display:!!r}}}},legend:{position:"bottom",labels:{color:t.palette.text.primary,pointStyle:"circle",usePointStyle:!0,boxHeight:6,padding:15,boxPadding:5}},tooltip:{backgroundColor:t.palette.background.paper,titleColor:t.palette.text.primary,bodyColor:t.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:"rgba(0, 0, 0, 0.05)",borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{title:e}}},responsive:!0,scales:{x:{stacked:!0,ticks:{color:t.palette.text.secondary},grid:{display:!1}},y:{stacked:!0,ticks:{color:t.palette.text.secondary,maxTicksLimit:5,callback:it},grid:{drawBorder:!1}}},elements:{bar:{borderRadius:5}},interaction:{mode:"index",intersect:!1}}),Vt=t=>{const e=Q(),{locationSettings:r}=tt(),[o,a]=d.useState({grouping:"daily",month:C[0].key}),s=d.useMemo(()=>At(e,n=>{if(o.grouping==="daily"){const c=mt[o.month];return new Date(c.year,c.month,Number.parseInt(n[0].label,10)).toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",day:"numeric",year:"numeric"})}else{const c=f(n[0].label);return Number.isNaN(c.getTime())?"Current month to date":c.toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",year:"numeric"})}},t,o.grouping==="daily"),[e,o,t]);return{chartDataSelection:o,setChartDataSelection:a,options:s}},Xt=et({bottomOverflow:34});export{Yt as B,_t as P,Ht as S,Gt as T,Nt as a,Wt as b,Jt as c,zt as g,Xt as n,Vt as u};
@@ -0,0 +1,6 @@
1
+ <svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M80 160C124.183 160 160 124.183 160 80C160 35.8172 124.183 0 80 0C35.8172 0 0 35.8172 0 80C0 124.183 35.8172 160 80 160Z" fill="#1A4049"/>
3
+ <path d="M91.43 45.71V91.43H114.28V45.71H91.43ZM68.57 68.57V45.71H45.71V114.28H91.43V91.43H68.57V68.57Z" fill="white"/>
4
+ <path d="M91.43 45.71V91.43H114.28V45.71H91.43ZM68.57 68.57V45.71H45.71V114.28H91.43V91.43H68.57V68.57Z" fill="white"/>
5
+ <path d="M91.4299 91.43H114.29V114.29H91.4299V91.43Z" fill="#817AFE"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="161" height="161" viewBox="0 0 161 161" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M80.6201 160.62C124.803 160.62 160.62 124.803 160.62 80.62C160.62 36.4372 124.803 0.619995 80.6201 0.619995C36.4373 0.619995 0.620117 36.4372 0.620117 80.62C0.620117 124.803 36.4373 160.62 80.6201 160.62Z" fill="white"/>
3
+ <path d="M92.0501 46.33V92.05H114.9V46.33H92.0501ZM69.1901 69.19V46.33H46.3301V114.9H92.0501V92.05H69.1901V69.19Z" fill="white"/>
4
+ <path d="M92.0501 46.33V92.05H114.9V46.33H92.0501ZM69.1901 69.19V46.33H46.3301V114.9H92.0501V92.05H69.1901V69.19Z" fill="#1A4049"/>
5
+ <path d="M92.05 92.05H114.91V114.91H92.05V92.05Z" fill="#817AFE"/>
6
+ </svg>
@@ -1 +1 @@
1
- import{b7 as i,cm as p,r as n,b9 as u}from"./index-g9pKMnOR.js";const d=(s={})=>{const a=i("api/admin/api-tokens"),{data:t,error:e,mutate:o}=p(a,h,s),r=n.useMemo(()=>t??[],[t]),c=n.useCallback(()=>{o().catch(console.warn)},[o]);return{tokens:r,error:e,loading:!e&&!t,refetch:c}},h=async s=>(await(await fetch(s).then(u("Api tokens"))).json()).tokens;export{d as u};
1
+ import{b7 as i,cm as p,r as n,b9 as u}from"./index-Cz4lAJ3Y.js";const d=(s={})=>{const a=i("api/admin/api-tokens"),{data:t,error:e,mutate:o}=p(a,h,s),r=n.useMemo(()=>t??[],[t]),c=n.useCallback(()=>{o().catch(console.warn)},[o]);return{tokens:r,error:e,loading:!e&&!t,refetch:c}},h=async s=>(await(await fetch(s).then(u("Api tokens"))).json()).tokens;export{d as u};
@@ -11,6 +11,7 @@
11
11
  },
12
12
  "type": "module",
13
13
  "scripts": {
14
+ "ci": "yarn fmt && yarn lint && yarn ts:check && yarn build --logLevel=error && yarn test --reporter=dot",
14
15
  "build": "yarn run lint:material:icons && vite build",
15
16
  "dev": "vite",
16
17
  "start": "vite",
@@ -23,10 +24,10 @@
23
24
  "test:snapshot": "NODE_OPTIONS=\"${NODE_OPTIONS:-0} --no-experimental-fetch\" yarn test -u",
24
25
  "test:watch": "NODE_OPTIONS=\"${NODE_OPTIONS:-0} --no-experimental-fetch\" vitest watch",
25
26
  "lint:material:icons": "./check-imports.rc",
26
- "lint": "biome lint src --write",
27
- "lint:check": "biome check src",
28
- "fmt": "biome format src --write",
29
- "fmt:check": "biome check src",
27
+ "lint": "biome lint src --write --error-on-warnings",
28
+ "lint:check": "biome check src --error-on-warnings",
29
+ "fmt": "biome format src --write --error-on-warnings",
30
+ "fmt:check": "biome check src --error-on-warnings",
30
31
  "ts:check": "tsc",
31
32
  "e2e": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --no-experimental-fetch\" yarn run cypress open --config baseUrl='http://localhost:3000' --env AUTH_USER=admin,AUTH_PASSWORD=unleash4all",
32
33
  "e2e:oss": "yarn --cwd frontend run cypress run --spec \"cypress/oss/**/*.spec.ts\" --config baseUrl=\"http://localhost:${EXPOSED_PORT:-4242}\" --env AUTH_USER=admin,AUTH_PASSWORD=unleash4all",
@@ -36,7 +37,7 @@
36
37
  "gen:api:clean": "yarn gen:api && rm -rf src/openapi/apis && sed -i.bak '1q' src/openapi/index.ts && rm src/openapi/index.ts.bak"
37
38
  },
38
39
  "devDependencies": {
39
- "@biomejs/biome": "2.3.8",
40
+ "@biomejs/biome": "2.4.4",
40
41
  "@codemirror/lang-json": "6.0.2",
41
42
  "@emotion/react": "11.11.4",
42
43
  "@emotion/styled": "11.11.5",
@@ -95,7 +96,7 @@
95
96
  "lodash.omit": "4.5.0",
96
97
  "millify": "^6.0.0",
97
98
  "msw": "2.7.3",
98
- "orval": "^7.9.0",
99
+ "orval": "^7.21.0",
99
100
  "pkginfo": "0.4.1",
100
101
  "plausible-tracker": "0.3.9",
101
102
  "prop-types": "15.8.1",
@@ -162,6 +163,7 @@
162
163
  "dependencies": {
163
164
  "chartjs-plugin-datalabels": "^2.2.0",
164
165
  "json-2-csv": "^5.5.5",
165
- "json-diff-react": "^1.0.1"
166
+ "json-diff-react": "^1.0.1",
167
+ "re2js": "^1.2.2"
166
168
  }
167
169
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "unleash-server",
3
3
  "type": "module",
4
4
  "description": "Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.",
5
- "version": "7.4.1",
5
+ "version": "7.4.3",
6
6
  "keywords": [
7
7
  "unleash",
8
8
  "feature flag",
@@ -33,22 +33,24 @@
33
33
  "license": "Apache-2.0",
34
34
  "exports": "./dist/lib/server-impl.js",
35
35
  "scripts": {
36
+ "ci": "yarn lint:fix && yarn build:backend --logLevel=error && yarn test --reporter=dot",
36
37
  "start": "TZ=UTC node ./dist/server.js",
37
- "copy-templates": "copyfiles-fixed -u 1 src/mailtemplates/**/* dist/",
38
- "build:backend": "tsc --pretty && copyfiles-fixed -u 2 src/migrations/package.json dist/migrations",
38
+ "copy-templates": "mkdir -p dist && cp -r src/mailtemplates dist/",
39
+ "build:backend": "tsc --pretty && mkdir -p dist/migrations && cp src/migrations/package.json dist/migrations/",
39
40
  "build:frontend": "yarn --cwd ./frontend run build",
40
41
  "build:frontend:if-needed": "./scripts/build-frontend-if-needed.sh",
41
42
  "build": "yarn run clean && concurrently \"yarn:copy-templates\" \"yarn:build:frontend\" \"yarn:build:backend\"",
42
43
  "dev:vite": "TZ=UTC NODE_ENV=development vite-node src/server-dev.ts",
43
- "dev:backend": "TZ=UTC NODE_ENV=${NODE_ENV:-development} tsc-watch --onEmit \"copyfiles-fixed -u 2 src/migrations/package.json dist/migrations\" --onSuccess \"node dist/server-dev.js\"",
44
+ "dev:backend": "TZ=UTC NODE_ENV=${NODE_ENV:-development} tsc-watch --onEmit \"mkdir -p dist/migrations && cp src/migrations/package.json dist/migrations/\" --onSuccess \"node dist/server-dev.js\"",
44
45
  "dev:frontend": "wait-on tcp:4242 && yarn --cwd ./frontend run dev",
45
46
  "dev:frontend:cloud": "UNLEASH_BASE_PATH=/demo/ yarn run dev:frontend",
46
47
  "dev": "concurrently \"yarn:dev:backend\" \"yarn:dev:frontend\"",
47
48
  "prepare:backend": "concurrently \"yarn:copy-templates\" \"yarn:build:backend\"",
48
49
  "start:dev": "yarn run clean && yarn dev:backend",
49
50
  "db-migrate": "db-migrate --migrations-dir ./src/migrations",
50
- "lint": "biome check .",
51
- "lint:fix": "biome check . --write",
51
+ "lint": "biome check . --error-on-warnings",
52
+ "lint:fix": "biome check . --write --error-on-warnings",
53
+ "lint:fix:unsafe": "biome check . --write --error-on-warnings --unsafe",
52
54
  "local:package": "del-cli --force build && mkdir build && cp -r dist CHANGELOG.md LICENSE README.md package.json build",
53
55
  "build:watch": "tsc -w",
54
56
  "prepare": "husky && yarn --cwd ./frontend install && if [ ! -d ./dist ]; then yarn build; fi",
@@ -61,6 +63,7 @@
61
63
  "test:coverage": "PORT=4243 vitest run --coverage --outputFile=\"coverage/report.json\"",
62
64
  "test:updateSnapshot": "PORT=4243 vitest run -u",
63
65
  "test:ui": "vitest --ui",
66
+ "test:trace": "NODE_OPTIONS=--trace-warnings yarn test --no-file-parallelism",
64
67
  "seed:setup": "ts-node src/test/e2e/seed/segment.seed.ts",
65
68
  "seed:serve": "UNLEASH_DATABASE_NAME=unleash_test UNLEASH_DATABASE_SCHEMA=seed yarn run start:dev",
66
69
  "clean": "del-cli --force dist",
@@ -69,7 +72,7 @@
69
72
  },
70
73
  "dependencies": {
71
74
  "@json2csv/plainjs": "^7.0.6",
72
- "@slack/web-api": "^7.13.0",
75
+ "@slack/web-api": "^7.14.1",
73
76
  "@wesleytodd/openapi": "^1.1.0",
74
77
  "ajv": "^8.17.1",
75
78
  "ajv-formats": "^3.0.1",
@@ -119,6 +122,7 @@
119
122
  "pg-connection-string": "^2.5.0",
120
123
  "pkginfo": "^0.4.1",
121
124
  "prom-client": "^15.0.0",
125
+ "re2js": "^1.2.2",
122
126
  "sanitize-filename": "^1.6.3",
123
127
  "semver": "^7.7.3",
124
128
  "serve-favicon": "^2.5.0",
@@ -128,11 +132,11 @@
128
132
  "ts-toolbelt": "^9.6.0",
129
133
  "type-is": "^2.0.0",
130
134
  "ulidx": "^2.4.1",
131
- "unleash-client": "^6.9.0"
135
+ "unleash-client": "^6.9.7-beta.0"
132
136
  },
133
137
  "devDependencies": {
134
138
  "@apidevtools/swagger-parser": "12.1.0",
135
- "@biomejs/biome": "^2.3.8",
139
+ "@biomejs/biome": "^2.4.4",
136
140
  "@cyclonedx/yarn-plugin-cyclonedx": "^3.2.1",
137
141
  "@faker-js/faker": "^10.1.0",
138
142
  "@fast-check/vitest": "^0.2.4",
@@ -147,7 +151,7 @@
147
151
  "@types/murmurhash3js": "^3.0.7",
148
152
  "@types/mustache": "^4.2.5",
149
153
  "@types/node": "22.15.35",
150
- "@types/nodemailer": "6.4.21",
154
+ "@types/nodemailer": "^7.0.11",
151
155
  "@types/owasp-password-strength-test": "1.3.2",
152
156
  "@types/pg": "8.15.6",
153
157
  "@types/semver": "7.7.1",
@@ -158,7 +162,6 @@
158
162
  "@vitest/coverage-v8": "^4.0.15",
159
163
  "@vitest/ui": "^4.0.15",
160
164
  "concurrently": "^9.0.0",
161
- "copyfiles-fixed": "2.4.3",
162
165
  "del-cli": "6.0.0",
163
166
  "fast-check": "4.4.0",
164
167
  "fetch-mock": "^12.6.0",
@@ -175,7 +178,7 @@
175
178
  "typescript": "5.9.3",
176
179
  "vite-node": "^5.2.0",
177
180
  "vitest": "^4.0.15",
178
- "wait-on": "^8.0.0"
181
+ "wait-on": "^9.0.4"
179
182
  },
180
183
  "resolutions": {
181
184
  "glob": "^10.5.0",
@@ -187,7 +190,7 @@
187
190
  "ssh2": "^1.4.0",
188
191
  "json-schema": "^0.4.0",
189
192
  "ip": "^2.0.1",
190
- "tar": "7.5.7",
193
+ "tar": "7.5.8",
191
194
  "semver": "^7.7.3",
192
195
  "tough-cookie": "4.1.4",
193
196
  "brace-expansion": "2.0.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-store.d.ts","sourceRoot":"","sources":["../../../src/lib/db/pat-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAkCtE,MAAM,CAAC,OAAO,OAAO,QAAS,YAAW,SAAS;IAC9C,OAAO,CAAC,EAAE,CAAK;IAEf,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW;IAKpC,MAAM,CACR,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC;IAOf,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;IAET,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpC,2BAA2B,CAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IASb,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAQnC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAO3D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-store.js","sourceRoot":"","sources":["../../../src/lib/db/pat-store.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,4BAA4B,CAAC;AAIvD,MAAM,KAAK,GAAG,wBAAwB,CAAC;AAEvC,MAAM,kBAAkB,GAAG;IACvB,IAAI;IACJ,aAAa;IACb,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,SAAS;CACZ,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EACd,EAAE,EACF,WAAW,EACX,UAAU,EACV,OAAO,EACP,UAAU,EACV,OAAO,GACV,EAAa,EAAE,CAAC,CAAC;IACd,EAAE;IACF,WAAW;IACX,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,OAAO;CAClB,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,EAAE,WAAW,EAAE,SAAS,EAAmB,EAAE,EAAE,CAAC,CAAC;IAC/D,WAAW;IACX,UAAU,EAAE,SAAS;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAKzB,YAAY,EAAM,EAAE,SAAsB;QACtC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CACR,GAAoB,EACpB,MAAc,EACd,MAAc;QAEd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;aAC5B,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aACrD,SAAS,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,MAAc;QAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,KAAU,CAAC;IAElB,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAC5B,+BAA+B,KAAK,2BAA2B,EAC/D,CAAC,EAAE,CAAC,CACP,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC7B,WAAmB,EACnB,MAAc;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAC5B,+BAA+B,KAAK,oDAAoD,EACxF,CAAC,WAAW,EAAE,MAAM,CAAC,CACxB,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAC5B,iCAAiC,KAAK,oBAAoB,EAC1D,CAAC,MAAM,CAAC,CACX,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE;aACrB,MAAM,CAAC,kBAAkB,CAAC;aAC1B,IAAI,CAAC,KAAK,CAAC;aACX,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/constraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAI1C,OAAO,EACH,KAAK,gBAAgB,EAExB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU;IACxD,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAG5B,MAAM,EAAE,cAAc,EACtB,EACI,oBAAoB,EACpB,cAAc,GACjB,EAAE,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,gBAAgB,CAAC;IA6BlE,kBAAkB,CACpB,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAC1C,GAAG,EAAE,QAAQ,GACd,OAAO,CAAC,IAAI,CAAC;CAInB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/constraints.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAEH,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU;IAOxD,YACI,MAAsB,EACtB,EACI,oBAAoB,EACpB,cAAc,GACkD;QAEpE,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC;YACP,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,IAAI,CAAC,kBAAkB;YAChC,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACR,cAAc,CAAC,SAAS,CAAC;oBACrB,IAAI,EAAE,CAAC,UAAU,CAAC;oBAClB,WAAW,EAAE,oBAAoB;oBACjC,WAAW,EAAE,mBAAmB,CAAC,kBAAkB,CAAC;oBACpD,OAAO,EAAE,qBAAqB;oBAC9B,WAAW,EACP,kNAAkN;oBACtN,SAAS,EAAE;wBACP,GAAG,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE;wBAC/C,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;qBAC9C;iBACJ,CAAC;aACL;SACJ,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,GAA0C,EAC1C,GAAa;QAEb,MAAM,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;CACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/pat-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EAGtB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,KAAK,YAAY,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,YAAY,CAAe;gBAG/B,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EAC9C,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,YAAY;IAQxB,SAAS,CACX,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,UAAU,GACtB,OAAO,CAAC,SAAS,CAAC;IAgBf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI5C,SAAS,CACX,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,UAAU,GACtB,OAAO,CAAC,IAAI,CAAC;IAaV,WAAW,CACb,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,eAAe,EAC3C,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAsBhB,OAAO,CAAC,iBAAiB;CAI5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-service.js","sourceRoot":"","sources":["../../../src/lib/services/pat-service.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-store.d.ts","sourceRoot":"","sources":["../../../../src/lib/types/stores/pat-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACvD,MAAM,CACF,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC,CAAC;IACtB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,2BAA2B,CACvB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pat-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pat-store.js","sourceRoot":"","sources":["../../../../src/lib/types/stores/pat-store.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints.e2e.test.d.ts","sourceRoot":"","sources":["../../../../../src/test/e2e/api/admin/constraints.e2e.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints.e2e.test.js","sourceRoot":"","sources":["../../../../../src/test/e2e/api/admin/constraints.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwB,MAAM,gCAAgC,CAAC;AACtE,OAAO,SAAS,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAEH,wBAAwB,GAC3B,MAAM,8BAA8B,CAAC;AAEtC,IAAI,GAAiB,CAAC;AACtB,IAAI,EAAW,CAAC;AAEhB,MAAM,IAAI,GAAG,iCAAiC,CAAC;AAE/C,SAAS,CAAC,KAAK,IAAI,EAAE;IACjB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC5C,GAAG,GAAG,MAAM,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC5C,YAAY,EAAE;YACV,KAAK,EAAE;gBACH,sBAAsB,EAAE,IAAI;aAC/B;SACJ;KACJ,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;IAChB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;IAC/C,MAAM,GAAG,CAAC,OAAO;SACZ,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAClE,MAAM,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,GAAG,CAAC,OAAO;SACZ,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;SACnE,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;IAC1E,MAAM,GAAG,CAAC,OAAO;SACZ,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CAAC;QACF,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,CAAC;KACX,CAAC;SACD,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC5E,MAAM,GAAG,CAAC,OAAO;SACZ,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,CAAC;QACF,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC;KACX,CAAC;SACD,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { IPatStore } from '../../lib/types/stores/pat-store.js';
2
- import type { CreatePatSchema, PatSchema } from '../../lib/openapi/index.js';
3
- export default class FakePatStore implements IPatStore {
4
- create(_pat: CreatePatSchema, _secret: string, _userId: number): Promise<PatSchema>;
5
- delete(_key: number): Promise<void>;
6
- deleteAll(): Promise<void>;
7
- destroy(): void;
8
- exists(_key: number): Promise<boolean>;
9
- existsWithDescriptionByUser(_description: string, _userId: number): Promise<boolean>;
10
- countByUser(_userId: number): Promise<number>;
11
- get(_key: number): Promise<PatSchema>;
12
- getAll(_query?: Object): Promise<PatSchema[]>;
13
- getAllByUser(_userId: number): Promise<PatSchema[]>;
14
- deleteForUser(_id: number, _userId: number): Promise<void>;
15
- }
16
- //# sourceMappingURL=fake-pat-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-pat-store.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/fake-pat-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,SAAS;IAClD,MAAM,CACF,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAIrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,OAAO,IAAI,IAAI;IAEf,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,2BAA2B,CACvB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAInB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAInD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7D"}
@@ -1,35 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- export default class FakePatStore {
3
- create(_pat, _secret, _userId) {
4
- throw new Error('Method not implemented.');
5
- }
6
- delete(_key) {
7
- throw new Error('Method not implemented.');
8
- }
9
- deleteAll() {
10
- throw new Error('Method not implemented.');
11
- }
12
- destroy() { }
13
- exists(_key) {
14
- throw new Error('Method not implemented.');
15
- }
16
- existsWithDescriptionByUser(_description, _userId) {
17
- throw new Error('Method not implemented.');
18
- }
19
- countByUser(_userId) {
20
- throw new Error('Method not implemented.');
21
- }
22
- get(_key) {
23
- throw new Error('Method not implemented.');
24
- }
25
- getAll(_query) {
26
- throw new Error('Method not implemented.');
27
- }
28
- getAllByUser(_userId) {
29
- throw new Error('Method not implemented.');
30
- }
31
- deleteForUser(_id, _userId) {
32
- throw new Error('Method not implemented.');
33
- }
34
- }
35
- //# sourceMappingURL=fake-pat-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-pat-store.js","sourceRoot":"","sources":["../../../src/test/fixtures/fake-pat-store.ts"],"names":[],"mappings":"AAEA,sDAAsD;AACtD,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CACF,IAAqB,EACrB,OAAe,EACf,OAAe;QAEf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,IAAY;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAU,CAAC;IAElB,MAAM,CAAC,IAAY;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,2BAA2B,CACvB,YAAoB,EACpB,OAAe;QAEf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,OAAe;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAe;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,OAAe;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,OAAe;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;CACJ"}
@@ -1 +0,0 @@
1
- import{s as l,B as n,cV as c,ba as d,j as e,C as p,R as t,T as j,y as g,fL as h,jp as u,ji as x,jj as m,jk as y,jl as f,jm as C,jn as S,jo as B}from"./index-g9pKMnOR.js";import{u as T,b,S as k,T as v,P as w,n as P,g as D}from"./networkTrafficUsageHighlightPlugin-Dmm54dMG.js";import{a as q}from"./formatTickValue-CqTJlzJZ.js";import"./LazyAdminExport-B8GV3V8t.js";import"./RoleCell-D5skjCJn.js";import"./useApiTokens-D1XvAIIA.js";import"./PercentageDonut-B2OwM0Er.js";const R=l(n)(({theme:s})=>({display:"flex",alignItems:"center",gap:s.spacing(.5)})),H=()=>{c("Network - Backend Connections");const{isOss:s}=d(),{chartDataSelection:a,setChartDataSelection:o,options:i}=T(),{chartData:r}=b(a);return e.jsx(p,{condition:s(),show:e.jsx(t,{severity:"warning",children:"Not enabled."}),elseShow:e.jsx(e.Fragment,{children:e.jsxs(k,{children:[e.jsxs(v,{children:[e.jsx(n,{children:e.jsx(t,{severity:"info",icon:!1,children:e.jsxs(R,{children:[e.jsx(j,{children:"1 connection = 7200 backend SDK requests per day"}),e.jsx(g,{title:"1 connection involves polling every 15 seconds and sending metrics every 60 seconds. This translates to 5 requests per minute, 300 requests per hour, and 7200 requests per day.",children:e.jsx(h,{})})]})})}),e.jsx(w,{selectedPeriod:a,setPeriod:o})]}),e.jsx(u,{data:r,plugins:[P],options:i,"aria-label":D(a)})]})})})};x.register(q,m,y,f,C,S,B);export{H as BackendConnections,H as default};
@@ -1,7 +0,0 @@
1
- import{F as H,H as W,j as t,A as G,m as J,C as I,bf as le,n as ce,q as de,iN as ue,o as pe,s as D,b as K,T as E,u as he,b8 as me,r as v,b7 as Q,b9 as X,bb as ge,aq as Z,c7 as fe,d8 as ve,iO as be,d2 as xe,d7 as M,b3 as V,iP as Se,d6 as Te,d5 as je,iQ as ye,cw as Ee,bC as ee,br as te,ba as se,iR as Ce,iS as Re,iT as Ae,iU as we,hY as ke,hO as ae,iV as De,k as Ie,iW as Oe,c3 as ne,aO as N,bz as Pe,fY as _e,f as $,bD as Fe,bB as Ve,bI as $e,c8 as qe,c6 as Ne,iX as Ue,i as F,cm as Be,aR as Le,aS as re,aV as U,R as Me,d9 as ze,aP as Ye,bg as z,bd as oe,iY as He,iZ as We,B as Ge,ao as Je,hN as Ke,i_ as Qe,cN as Xe,i$ as Ze,fW as et}from"./index-g9pKMnOR.js";var B={},tt=W;Object.defineProperty(B,"__esModule",{value:!0});var ie=B.default=void 0,st=tt(H()),at=t,nt=(0,st.default)((0,at.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");ie=B.default=nt;const rt=ue(),Vt=({options:e,selectedOptions:r,indeterminateOptions:a,tagType:d,existingTags:o,disabled:l=!1,onChange:s})=>{const i=t.jsx(pe,{fontSize:"small"}),u=p=>p.inputValue?p.inputValue:p.title,g=({key:p,...h},n,{selected:m})=>{const S=(a==null?void 0:a.some(x=>x.title===n.title))??!1;return t.jsxs("li",{...h,children:[t.jsx(I,{condition:!!n.inputValue,show:t.jsx(le,{sx:{mr:x=>x.spacing(.5)}}),elseShow:t.jsx(ce,{icon:i,checkedIcon:t.jsx(de,{fontSize:"small"}),indeterminateIcon:t.jsx(ie,{fontSize:"small"}),sx:{mr:x=>x.spacing(.5)},checked:m&&!S,indeterminate:S})}),n.title]},p)},f=(p,h)=>{const n=h.inputValue.trim(),m=rt(p,{...h,inputValue:n}),S=p.some(x=>n===x.title);return n.length>=2&&!S&&m.push({inputValue:n,title:`Create new value "${n}"`}),m};return t.jsx(G,{multiple:!0,id:"checkboxes-tag",sx:{marginTop:p=>p.spacing(2),width:500},disableCloseOnSelect:!0,options:e,value:r,isOptionEqualToValue:(p,h)=>h.inputValue&&h.inputValue!==""?p.title===h.inputValue:p.title===h.title,getOptionLabel:u,renderOption:g,filterOptions:f,ListboxProps:{style:{maxHeight:200,overflow:"auto"}},onChange:s,renderInput:p=>t.jsx(J,{...p,label:"Select values",placeholder:"Select values"}),disabled:l})},ot=D("li")({flexDirection:"column"}),$t=({options:e,value:r,disabled:a=!1,onChange:d})=>{const o=K();return t.jsx(G,{disablePortal:!0,disabled:a,id:"tag-type-select",sx:{marginTop:l=>l.spacing(2),width:500},options:e,disableClearable:!0,value:r,getOptionLabel:l=>l.name,renderOption:({key:l,...s},i)=>t.jsxs(ot,{...s,style:{alignItems:"flex-start",gap:o.spacing(.5)},children:[t.jsx(E,{variant:"body1",children:i.name}),t.jsx(E,{variant:"caption",children:i.description})]},l),renderInput:l=>t.jsx(J,{...l,label:"Tag type",value:r}),onChange:d,ListboxProps:{style:{maxHeight:200,overflow:"auto"}}})},qt=()=>{const{makeRequest:e,createRequest:r,errors:a,loading:d}=he({propagateErrors:!0});return{createTag:async s=>{const u=r("api/admin/tags",{method:"POST",body:JSON.stringify(s)});return e(u.caller,u.id)},bulkUpdateTags:async(s,i)=>{const u=`api/admin/projects/${i}/tags`,g=r(u,{method:"PUT",body:JSON.stringify(s)});return e(g.caller,g.id)},errors:a,loading:d}},Nt=(e,r={})=>{const a=async()=>{const g=Q(`api/admin/tags/${e}`);return(await fetch(g,{method:"GET"}).then(X("Tags"))).json()},d=`api/admin/tags/${e}`,{data:o,error:l}=me(!!e,{tags:[]},d,a,r),[s,i]=v.useState(!l&&!o),u=()=>{ge(d)};return v.useEffect(()=>{i(!l&&!o)},[o,l]),{tags:(o==null?void 0:o.tags)||[],error:l,loading:s,refetch:u}},it=D("div")({display:"flex",flexDirection:"column"}),lt=({strategy:e,setStrategy:r,projectId:a,environment:d,editable:o,permission:l=Te})=>{const{trackEvent:s}=Z(),[i,u]=v.useState([]),g=K(),f=e!=null&&e.parameters&&"stickiness"in(e==null?void 0:e.parameters)?String(e.parameters.stickiness):"default";v.useEffect(()=>{u((e.variants||[]).map(n=>({...n,new:o||!1,isValid:!0,id:crypto.randomUUID(),overrides:[]})))},[]),v.useEffect(()=>{r(n=>({...n,variants:i.map(m=>({stickiness:f,name:m.name,weight:m.weight,payload:m.payload,weightType:m.weightType}))}))},[f,JSON.stringify(i)]);const p=(n,m)=>{u(S=>M(S.map(x=>x.id===m?n:x),1e3))},h=()=>{const n=crypto.randomUUID();u(m=>[...m,{name:"",weightType:je.VARIABLE,weight:0,stickiness:f,new:!0,isValid:!1,id:n}]),s("strategy-variants",{props:{eventType:"variant added"}})};return t.jsxs(t.Fragment,{children:[t.jsxs(E,{component:"h3",sx:{m:0,display:"flex",gap:"1ch"},variant:"h3",children:["Variants",t.jsx(fe,{htmlTooltip:!0,tooltip:t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"Variants allow to attach one or more values to this strategy. Variants at the strategy level override variants at the feature level."}),t.jsx(ve,{target:"_blank",href:"https://docs.getunleash.io/concepts/strategy-variants",children:"Learn more"})]})})]}),t.jsxs(it,{children:[t.jsx(be,{}),i.map((n,m)=>t.jsx(xe,{disableOverrides:!0,variant:n,variants:i,updateVariant:S=>p(S,n.id),removeVariant:()=>u(S=>M(S.filter(x=>x.id!==n.id),1e3)),decorationColor:g.palette.variants[m%g.palette.variants.length]},n.id))]}),t.jsx(V,{onClick:h,variant:"outlined",permission:l,projectId:a,environmentId:d,"data-testid":"ADD_STRATEGY_VARIANT_BUTTON",children:"Add variant"}),t.jsx(Se,{variants:i})]})},ct=D("form")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),Y=D("hr")(({theme:e})=>({width:"100%",height:"1px",margin:e.spacing(2,0),border:"none",background:e.palette.background.elevation2})),dt=D("div")(({theme:e})=>({display:"flex",justifyContent:"end",gap:e.spacing(2),paddingBottom:e.spacing(10)})),ut=({projectId:e,environmentId:r,permission:a,onSubmit:d,onCancel:o,loading:l,strategy:s,setStrategy:i,segments:u,setSegments:g,errors:f})=>{const p=ye(s.constraints),h=Ee(a,e,r),{strategyDefinition:n}=ee(s==null?void 0:s.name),m=te(),{uiConfig:S,error:x,loading:O}=se();if(x)throw x;if(O||!n)return null;const P=T=>n.parameters.find(y=>y.name===T),C=(T,y)=>{const R=P(T);if(T!=="groupId"){const k=Oe(R,y);return k?(f.setFormError(T,k),!1):(f.removeFormError(T),!0)}return!0},c=()=>n.parameters.map(T=>T.name).map(T=>{var y;return C(T,(y=s.parameters)==null?void 0:y[T])}).every(Boolean),w=()=>{m(`/projects/${e}/settings/default-strategy`)},_=async T=>{if(T.preventDefault(),c())d();else return};return t.jsxs(ct,{onSubmit:_,children:[t.jsx(Ce,{title:s.title||"",setTitle:T=>{i(y=>({...y,title:T}))}}),t.jsx(Re,{segments:u,setSegments:g,projectId:e}),t.jsx(Ae,{projectId:e,environmentId:r,strategy:s,setStrategy:i}),t.jsx(Y,{}),t.jsx(we,{strategy:s,strategyDefinition:n,setStrategy:i,validateParameter:C,errors:f,hasAccess:h}),t.jsx(I,{condition:s.parameters!=null&&"stickiness"in s.parameters,show:t.jsx(lt,{strategy:s,setStrategy:i,environment:r,projectId:e,permission:[ke,ae]})}),t.jsx(Y,{}),t.jsxs(dt,{children:[t.jsx(V,{permission:a,projectId:e,environmentId:r,variant:"contained",color:"primary",type:"submit",disabled:l||!p||f.hasFormErrors(),"data-testid":De,children:"Save strategy"}),t.jsx(Ie,{type:"button",color:"primary",onClick:o||w,disabled:l,children:"Cancel"})]})]})},pt=(e,r)=>{var s,i;const{project:a,refetch:d}=ne(e),o={name:"flexibleRollout",constraints:[],parameters:{rollout:"100",stickiness:a.defaultStickiness||"default",groupId:""}},l=(i=(s=a.environments)==null?void 0:s.find(u=>u.environment===r))==null?void 0:i.defaultStrategy;return{defaultStrategyFallback:o,strategy:l,refetch:d}},Ut=()=>{const e=N("projectId"),r=Pe("environmentId"),{refetch:a}=ne(e),{defaultStrategyFallback:d,strategy:o,refetch:l}=pt(e,r),[s,i]=v.useState(o||d),[u,g]=v.useState([]),{updateDefaultStrategy:f,loading:p}=_e(),{strategyDefinition:h}=ee(s==null?void 0:s.name),{setToastData:n,setToastApiError:m}=$(),S=Fe(),{uiConfig:x}=se(),{unleashUrl:O}=x,P=te(),{trackEvent:C}=Z(),{segments:c,refetchSegments:w}=Ve();v.useEffect(()=>{if(c&&(o!=null&&o.segments)){const R=[];for(const k of o==null?void 0:o.segments)R.push(...c.filter(j=>j.id===k));g(R)}},[JSON.stringify(c),JSON.stringify(o==null?void 0:o.segments)]);const _=ht(s,u),T=async R=>{await f(e,r,R),C("default_strategy",{props:{action:"edit",hasTitle:!!R.title}}),w(),a(),n({text:"Default Strategy updated",type:"success"})},y=async()=>{const R=`/projects/${e}/settings/default-strategy`;try{await T(_),await l(),P(R)}catch(k){m(F(k))}};return!h||!s?null:t.jsx($e,{modal:!0,title:qe((s==null?void 0:s.name)??""),description:gt,documentationLink:ft,documentationLinkLabel:vt,formatApiCode:()=>mt(e,r,_,h,O),children:t.jsx(ut,{projectId:e,strategy:s,setStrategy:i,segments:u,setSegments:g,environmentId:r,onSubmit:y,loading:p,permission:[Ne,ae],errors:S,isChangeRequest:!1})})},ht=(e,r)=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:e.parameters??{},variants:e.variants??[],segments:r.map(a=>a.id),disabled:e.disabled??!1}),mt=(e,r,a,d,o)=>{if(!o)return"";const l={...a,parameters:Ue(a.parameters??{},d)},s=`${o}/api/admin/projects/${e}/environments/${r}/default-strategy}`,i=JSON.stringify(l,void 0,2);return`curl --location --request PUT '${s}' \\
2
- --header 'Authorization: INSERT_API_KEY' \\
3
- --header 'Content-Type: application/json' \\
4
- --data-raw '${i}'`},gt=`
5
- An activation strategy will only run when a feature flag is enabled and provides a way to control who will get access to the feature.
6
- If any of a feature flag's activation strategies returns true, the user will get access.
7
- `,ft="https://docs.getunleash.io/concepts/projects#project-default-strategy",vt="Default strategy documentation",Bt=e=>{const{data:r,error:a,mutate:d}=Be(Q(`api/admin/environments/project/${e}`),bt),o=v.useMemo(()=>r||[],[r]),l=v.useCallback(async()=>{await d()},[d]);return{environments:o,refetchEnvironments:l,loading:!a&&!r,error:a}},bt=async e=>(await fetch(e).then(X("Environments")).then(a=>a.json())).environments.sort((a,d)=>a.sortOrder-d.sortOrder),xt=e=>{const{setToastData:r,setToastApiError:a}=$(),{addChange:d}=Le(),{refetch:o}=re(e),[l,s]=v.useState(!1),[i,u]=v.useState({isOpen:!1}),g=v.useCallback((h,n,m,S)=>{u({featureName:h,environment:n,enabled:m,shouldActivateDisabledStrategies:S,isOpen:!0})},[]),f=v.useCallback(()=>{u(h=>({...h,isOpen:!1}))},[]),p=v.useCallback(async()=>{try{s(!0),await d(e,i.environment,{feature:i.featureName,action:"updateEnabled",payload:{enabled:!!i.enabled,shouldActivateDisabledStrategies:!!i.shouldActivateDisabledStrategies}}),o(),u(h=>({...h,isOpen:!1})),r({type:"success",text:"Changes added to draft"})}catch(h){a(F(h)),u(n=>({...n,isOpen:!1}))}finally{s(!1)}},[d]);return{pending:l,onChangeRequestToggle:g,onChangeRequestToggleClose:f,onChangeRequestToggleConfirm:p,changeRequestDialogDetails:i}},St=({enabled:e,featureName:r,environment:a})=>t.jsxs(E,{"data-testid":"update-enabled-message",children:[t.jsx("strong",{children:e?"Enable":"Disable"})," feature flag"," ",t.jsx("strong",{children:r})," in ",t.jsx("strong",{children:a})]}),Tt=({isOpen:e,disabled:r=!1,onConfirm:a,onClose:d,showBanner:o,environment:l,messageComponent:s})=>{const i=N("projectId"),{data:u}=re(i),{changeRequestInReviewOrApproved:g,alert:f}=ze(u),p=g(l||""),h=p?"Add to existing change request":"Add suggestion to draft";return t.jsxs(U,{open:e,primaryButtonText:h,secondaryButtonText:"Cancel",disabledPrimaryButton:r,onClick:a,onClose:d,title:"Request changes",fullWidth:!0,children:[t.jsx(I,{condition:p,show:f}),t.jsx(I,{condition:!!o,show:t.jsxs(Me,{severity:"info",sx:{mb:2},children:["Change requests feature is enabled for ",l,". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})}),t.jsx(E,{variant:"body2",color:"text.secondary",children:"Your suggestion:"}),s]})},jt=D("ul")(({theme:e})=>({margin:e.spacing(1),paddingLeft:e.spacing(2)})),yt=({isOpen:e,onAddDefaultStrategy:r,onActivateDisabledStrategies:a,onClose:d,environment:o,featureId:l})=>{var f,p,h;const s=N("projectId"),{feature:i}=Ye(s,l),u=(h=(p=(f=i.environments)==null?void 0:f.find(({name:n})=>n===o))==null?void 0:p.strategies)==null?void 0:h.filter(({disabled:n})=>n).length,g=u?u===1?"1 disabled strategy":`${u} disabled strategies`:"disabled strategies";return t.jsxs(U,{open:e,secondaryButtonText:"Cancel",permissionButton:t.jsxs(t.Fragment,{children:[t.jsx(V,{type:"button",variant:"outlined",permission:z,projectId:s,environmentId:o,onClick:r,children:"Add default strategy"}),t.jsx(V,{type:"button",variant:"outlined",permission:z,projectId:s,environmentId:o,onClick:a,children:"Enable all strategies"})]}),onClose:d,title:`Enable feature flag in ${o}`,fullWidth:!0,children:[t.jsx(E,{sx:{mb:n=>n.spacing(3)},children:"A feature flag cannot be enabled without an enabled strategy."}),t.jsx(E,{children:"To enable this feature flag you can choose to:"}),t.jsxs(jt,{children:[t.jsx("li",{children:t.jsx(E,{children:t.jsx("strong",{children:"Add the default strategy"})})}),t.jsx("li",{children:t.jsxs(E,{children:[t.jsx("strong",{children:"Enable all the disabled strategies"})," ","(this feature flag has ",g,")"]})})]})]})},Et=e=>{const r=a=>{a<e.length&&e[a](()=>r(a+1))};r(0)},Lt=e=>{const{toggleFeatureEnvironmentOn:r,toggleFeatureEnvironmentOff:a}=oe(),{setToastData:d,setToastApiError:o}=$(),[l,s]=v.useState({open:!1,label:"",loading:!1,onClose:()=>{},onClick:()=>{}}),[i,u]=v.useState({isOpen:!1,environment:"",featureId:"",onClose:()=>{},onActivateDisabledStrategies:()=>{},onAddDefaultStrategy:()=>{}}),{pending:g,onChangeRequestToggle:f,onChangeRequestToggleClose:p,onChangeRequestToggleConfirm:h,changeRequestDialogDetails:n}=xt(e),[m,S]=v.useState(),x=v.useCallback(async(C,c)=>{let w=!1;return Et([j=>{if(c.isChangeRequestEnabled||!We(c.environmentType||""))return j();s({open:!0,label:`${C?"Enable":"Disable"} Environment`,loading:!1,onClose:()=>{var b;s(A=>({...A,open:!1})),(b=c.onRollback)==null||b.call(c)},onClick:()=>{s(b=>({...b,open:!1,loading:!0})),j()}})},j=>{if(C===!1||!c.hasStrategies||c.hasEnabledStrategies||c.hasReleasePlans)return j();u({isOpen:!0,environment:c.environmentName,featureId:c.featureId,onClose:()=>{var b;u(A=>({...A,isOpen:!1})),(b=c.onRollback)==null||b.call(c)},onActivateDisabledStrategies:()=>{u(b=>({...b,isOpen:!1})),w=!0,j()},onAddDefaultStrategy:()=>{u(b=>({...b,isOpen:!1})),j()}})},j=>{if(!c.isChangeRequestEnabled)return j();S(()=>{var b;S(void 0),(b=c.onRollback)==null||b.call(c)}),f(c.featureId,c.environmentName,C,w)},async j=>{var b,A;if(C!==!1)return j();try{await a(c.projectId,c.featureId,c.environmentName),d({type:"success",text:`Disabled in ${c.environmentName}`}),(b=c.onSuccess)==null||b.call(c)}catch(q){o(F(q)),(A=c.onRollback)==null||A.call(c)}},async j=>{var b,A;if(C!==!0)return j();try{await r(c.projectId,c.featureId,c.environmentName,w),d({type:"success",text:`Enabled in ${c.environmentName}`}),(b=c.onSuccess)==null||b.call(c)}catch(q){o(F(q)),(A=c.onRollback)==null||A.call(c)}}])},[s]),O=i.featureId.length!==0,P=t.jsxs(t.Fragment,{children:[t.jsx(He,{...l}),t.jsx(I,{condition:O,show:t.jsx(yt,{...i})}),t.jsx(Tt,{isOpen:n.isOpen,onClose:()=>{m==null||m(),p()},environment:n==null?void 0:n.environment,disabled:g,onConfirm:()=>{m==null||m(),h()},messageComponent:t.jsx(St,{enabled:n==null?void 0:n.enabled,featureName:n==null?void 0:n.featureName,environment:n.environment})})]});return{onToggle:x,modals:P}},Ct=e=>{const[r,a]=v.useState(e),d=v.useCallback(()=>a(e),[e]);return v.useEffect(()=>{a(e)},[e]),[r,a,d]},Rt=D(Ge)(()=>({mx:"auto",...Je})),Mt=({projectId:e,featureId:r,environmentName:a,value:d,onToggle:o})=>{const[l,s,i]=Ct(d),u=()=>{s(!l),requestAnimationFrame(()=>{o(!l,i)})},g=`${r}-${a}`;return t.jsx(t.Fragment,{children:t.jsx(Rt,{"data-testid":`TOGGLE-${g}`,children:t.jsx(Ke,{tooltip:l?`Disable flag in ${a}`:`Enable flag in ${a}`,checked:d,environmentId:a,projectId:e,permission:Qe,inputProps:{"aria-label":a},onClick:u,"data-testid":"permission-switch",disabled:d!==l})},g)})};var L={},At=W;Object.defineProperty(L,"__esModule",{value:!0});var wt=L.default=void 0,kt=At(H()),Dt=t,It=(0,kt.default)((0,Dt.jsx)("path",{d:"M16 11h-1V3c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v8H8c-2.76 0-5 2.24-5 5v7h18v-7c0-2.76-2.24-5-5-5zm3 10h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H9v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H5v-5c0-1.65 1.35-3 3-3h8c1.65 0 3 1.35 3 3v5z"}),"CleaningServices");wt=L.default=It;const Ot="flag-reminders:v1",Pt=50,_t=7,zt=({days:e=_t,maxReminders:r=Pt}={})=>{const[a,d]=Xe(Ot,{});return{shouldShowReminder:s=>{const i=a[s];return!i||Ze(new Date,new Date(i))},snoozeReminder:(s,i=e)=>{const u=et(new Date,i).getTime();d(g=>{const f={...g,[s]:u},p=Object.entries(f);if(p.length>r){p.sort((n,m)=>n[1]-m[1]);const h=p.slice(p.length-r);return Object.fromEntries(h)}return f})}}},Yt=({isStale:e,isOpen:r,projectId:a,featureId:d,onClose:o})=>{const{setToastData:l,setToastApiError:s}=$(),{patchFeatureToggle:i}=oe(),u=t.jsx(E,{children:"Setting a flag to stale marks it for cleanup"}),g=t.jsx(E,{children:"Setting a flag to active marks it as in active use"}),f=e?"active":"stale",p=async h=>{h.stopPropagation();try{await i(a,d,[{op:"replace",path:"/stale",value:!e}]),o()}catch(n){s(F(n))}l(e?{type:"success",text:"The flag is no longer marked as stale"}:{type:"success",text:"The flag has been marked as stale"})};return t.jsx(U,{open:r,secondaryButtonText:"Cancel",primaryButtonText:`Flip to ${f}`,title:`Set feature state to ${f}`,onClick:p,onClose:o,children:t.jsx(I,{condition:e,show:g,elseShow:u})})};export{Tt as C,Ut as E,Mt as F,$t as T,Nt as a,Vt as b,pt as c,Bt as d,Lt as e,zt as f,wt as g,Yt as h,qt as u};
@@ -1 +0,0 @@
1
- import{cV as n,ba as l,j as e,C as c,R as a,B as d,jp as j,ji as g,jj as h,jk as p,jl as f,jm as m,jn as u,jo as x}from"./index-g9pKMnOR.js";import{a as S}from"./formatTickValue-CqTJlzJZ.js";import{u as C,c as w,S as P,T as y,P as T,n as b,g as B}from"./networkTrafficUsageHighlightPlugin-Dmm54dMG.js";import"./LazyAdminExport-B8GV3V8t.js";import"./RoleCell-D5skjCJn.js";import"./useApiTokens-D1XvAIIA.js";import"./PercentageDonut-B2OwM0Er.js";const q=()=>{n("Network - Frontend Traffic Usage");const{isOss:s}=l(),{chartDataSelection:t,setChartDataSelection:r,options:i}=C(),{chartData:o}=w(t);return e.jsx(c,{condition:s(),show:e.jsx(a,{severity:"warning",children:"Not enabled."}),elseShow:e.jsx(e.Fragment,{children:e.jsxs(P,{children:[e.jsxs(y,{children:[e.jsx(d,{children:e.jsx(a,{severity:"info",icon:!1,children:"Frontend traffic is determined by the total SDK requests to the Frontend API"})}),e.jsx(T,{selectedPeriod:t,setPeriod:r})]}),e.jsx(j,{data:o,plugins:[b],options:i,"aria-label":B(t)})]})})})};g.register(S,h,p,f,m,u,x);export{q as default};
@@ -1 +0,0 @@
1
- import{s as c,ba as k,f as D,j as e,R as L,y as M,D as $,fR as S,B as f,dj as z,aj as ne,du as se,am as oe,C as b,ax as re,an as ae,aw as G,d8 as P,br as ie,eH as le,bf as ce,j0 as de,L as q,ex as ue,ai as A,cc as I,r as d,ey as E,at as he,F as pe,H as xe,ah as K,fu as me,al as N,el as je,eO as ge,aa as C,ab as fe,cG as V,b1 as ye,aV as Y,i as be,I as ke,G as Te,k as Ce,ay as Q,c1 as w,hT as Ae,dO as ve,dN as Ee,T as R,e5 as Ne,e1 as we,fg as Se,d$ as Ie,fh as Re,gT as De,cm as Le,b7 as X,b9 as J,b8 as Pe,b6 as Be,b2 as _e,dX as Fe}from"./index-g9pKMnOR.js";import{u as Oe}from"./useApiTokens-D1XvAIIA.js";const Ue=c("div")(({theme:t})=>({display:"grid",gridTemplateColumns:"auto auto 1fr",gridAutoRows:"min-content",alignItems:"center",gap:t.spacing(1),marginTop:t.spacing(1.5)})),g=f,He=()=>{const{uiConfig:t}=k(),{setToastData:n}=D(),s=a=>()=>{z(a),n({type:"success",text:"Copied to clipboard"})},o=`${t.unleashUrl}/api/`,r=`${t.unleashUrl}/api/frontend/`;return e.jsxs(L,{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."]}),e.jsxs(Ue,{children:[e.jsx(g,{children:e.jsx("strong",{children:"CLIENT API URL: "})}),e.jsx(g,{children:e.jsx("pre",{style:{display:"inline"},children:o})}),e.jsx(g,{children:e.jsx(M,{title:"Copy URL",arrow:!0,children:e.jsx($,{onClick:s(o),size:"small",children:e.jsx(S,{})})})}),e.jsx(g,{children:e.jsx("strong",{children:"FRONTEND API URL: "})}),e.jsx(g,{children:e.jsx("pre",{style:{display:"inline"},children:r})}),e.jsx(g,{children:e.jsx(M,{title:"Copy URL",arrow:!0,children:e.jsx($,{onClick:s(r),size:"small",children:e.jsx(S,{})})})})]})]})},Me=["Icon","createdAt","seenAt"],$e=["Icon","project","seenAt"],ft=({compact:t=!1,setHiddenColumns:n,columns:s,loading:o,rows:r,headerGroups:a,globalFilter:i,prepareRow:p})=>{const u=ne(se.breakpoints.down("xl"));return oe([{condition:u,columns:Me},{condition:t,columns:$e}],n,s),e.jsxs(e.Fragment,{children:[e.jsx(b,{condition:r.length>0,show:e.jsx(f,{sx:{mb:4},children:e.jsx(He,{})})}),e.jsx(f,{sx:{overflowX:"auto"},children:e.jsx(re,{value:i,children:e.jsx(ae,{rows:r,headerGroups:a,prepareRow:p})})}),e.jsx(b,{condition:r.length===0&&!o,show:e.jsx(b,{condition:(i==null?void 0:i.length)>0,show:e.jsxs(G,{children:["No tokens found matching “",i,"”"]}),elseShow:e.jsx(G,{children:e.jsxs("span",{children:["No tokens available. Read ",e.jsx(P,{href:"https://docs.getunleash.io/api-overview",target:"_blank",rel:"noreferrer",children:"API How-to guides"})," "," to learn more."]})})})})]})},Ge=(t,n)=>{const s=n>=t;return{limitReached:s,limitMessage:s?`You have reached the limit of ${t} API tokens`:void 0}},yt=({path:t,permission:n,project:s})=>{const o=ie(),{tokens:r,loading:a}=Oe(),{uiConfig:i}=k(),{limitReached:p,limitMessage:u}=Ge(i.resourceLimits.apiTokens,r.length);return e.jsx(le,{Icon:ce,onClick:()=>o(t),"data-testid":de,permission:n,projectId:s,maxWidth:"700px",disabled:a||p,tooltipProps:{title:u},children:"New API token"})},Ke=c(q)(({theme:t})=>({textDecoration:"none",color:t.palette.links,"&:hover, &:focus":{textDecoration:"underline"}})),We=c("div")({display:"flex",alignItems:"center"}),ze=({projects:t,project:n})=>{const{searchQuery:s}=ue(),o=t&&Array.isArray(t)&&t.length>1?t:[];if(o.length>0)return e.jsx(A,{children:e.jsx(I,{title:o.map((r,a)=>e.jsxs(d.Fragment,{children:[a>0&&", ",!r||r==="*"?e.jsx(E,{search:s,children:"*"}):e.jsx(Ke,{to:`/projects/${r}`,children:e.jsx(E,{search:s,children:r})})]},r)),placement:"bottom-start",arrow:!0,tabIndex:0,children:e.jsxs("span",{children:[`${o.length}`," projects"]})})});if(o.length===1&&o[0]!=="*"||n&&n!=="*"){const r=n||o[0];return e.jsx(he,{to:`/projects/${r}`,title:r})}return e.jsx(A,{children:e.jsx(I,{title:"ALL current and future projects.",placement:"bottom",arrow:!0,children:e.jsx(We,{children:e.jsx(E,{search:s,children:"*"})})})})};var B={},qe=xe;Object.defineProperty(B,"__esModule",{value:!0});var Z=B.default=void 0,Ve=qe(pe()),Ye=e,Qe=(0,Ve.default)((0,Ye.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");Z=B.default=Qe;const Xe=({secret:t,project:n,projects:s})=>{const o=t!=null&&t.includes(":")?"v2":"v1",r=t==null?void 0:t.startsWith("*:"),a=s&&(s==null?void 0:s.length)>1||(s==null?void 0:s.length)===1&&s[0]!=="*"||n&&n!=="*";return o==="v2"&&!r&&!a},Je=({...t})=>Xe(t)?e.jsx(K,{icon:e.jsx(I,{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(P,{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(me,{"aria-label":"Orphaned token",color:"warning","data-testid":"orphaned-token-icon"})})}):e.jsx(K,{icon:e.jsx(Z,{color:"disabled"})}),bt=(t,n)=>{const s=d.useMemo(()=>({sortBy:[{id:"createdAt",desc:!0}]}),[]),o=d.useMemo(()=>[{id:"Icon",Cell:h=>e.jsx(Je,{secret:h.row.original.secret,project:h.row.original.project,projects:h.row.original.projects}),disableSortBy:!0,disableGlobalFilter:!0,width:50},{Header:"Token name",accessor:"tokenName",Cell:N,minWidth:35},{Header:"Type",accessor:"type",Cell:({value:h})=>e.jsx(N,{value:W[h.toLowerCase()].label,subtitle:W[h.toLowerCase()].title,subtitleTooltip:!0}),width:180},{Header:"Project",accessor:"project",Cell:h=>e.jsx(ze,{project:h.row.original.project,projects:h.row.original.projects}),width:160},{Header:"Environment",accessor:"environment",Cell:N,width:120},{Header:"Created",accessor:"createdAt",Cell:je,width:150,disableGlobalFilter:!0},{Header:"Last seen",accessor:"seenAt",Cell:ge,width:140,disableGlobalFilter:!0},{Header:"Actions",width:120,id:"Actions",align:"center",disableSortBy:!0,disableGlobalFilter:!0,Cell:n}],[]),{getTableProps:r,getTableBodyProps:a,headerGroups:i,rows:p,prepareRow:u,state:j,setGlobalFilter:m,setHiddenColumns:y}=C.useTable({columns:o,data:t,initialState:s,sortTypes:fe,autoResetHiddenColumns:!1,disableSortRemove:!0},C.useGlobalFilter,C.useSortBy,C.useFlexLayout);return{getTableProps:r,getTableBodyProps:a,headerGroups:i,rows:p,prepareRow:u,state:j,setGlobalFilter:m,setHiddenColumns:y,columns:o}},W={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"}},kt=({token:t,project:n,permission:s,track:o})=>{const{setToastData:r}=D(),a=i=>{z(i)&&(r({type:"success",text:"Token copied to clipboard"}),o&&typeof o=="function"&&o())};return e.jsx(V,{permission:s,projectId:n,tooltipProps:{title:"Copy token",arrow:!0},onClick:()=>a(t.secret),size:"large",children:e.jsx(S,{})})},Ze=c("ul")({marginBottom:0}),Tt=({token:t,permission:n,onRemove:s,project:o})=>{const[r,a]=d.useState(!1),{setToastData:i,setToastApiError:p}=D(),u=async()=>{try{await s(),a(!1),i({type:"success",text:"API token removed"})}catch(j){p(be(j))}};return e.jsxs(e.Fragment,{children:[e.jsx(V,{permission:n,projectId:o,tooltipProps:{title:"Delete token",arrow:!0},onClick:()=>a(!0),size:"large",children:e.jsx(ye,{})}),e.jsx(Y,{open:r,onClick:u,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(Ze,{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})]})]})]})})]})},et=c("div")(()=>({maxWidth:"400px"})),tt=c("form")(()=>({display:"flex",flexDirection:"column",height:"100%"})),nt=c(ke)(({theme:t})=>({width:"100%",marginBottom:t.spacing(2)})),st=c(Te)(({theme:t})=>({marginBottom:t.spacing(2),minWidth:"400px",[t.breakpoints.down("sm")]:{minWidth:"379px"}})),ee=c("p")(({theme:t})=>({marginBottom:t.spacing(1)})),ot=c("label")(({theme:t})=>({marginBottom:t.spacing(1)})),rt=c(Ce)(({theme:t})=>({marginLeft:t.spacing(3)})),at=c(f)({marginTop:"auto",display:"flex",justifyContent:"flex-end"}),Ct=({children:t,actions:n,handleSubmit:s,handleCancel:o})=>{var i;const{uiConfig:r}=k(),a=!!((i=r==null?void 0:r.flags)!=null&&i.UNLEASH_CLOUD);return e.jsxs(tt,{onSubmit:s,children:[e.jsx(b,{condition:a,show:e.jsxs(L,{severity:"info",sx:{mb:4},children:["Please be aware of our"," ",e.jsx(P,{href:"https://www.getunleash.io/fair-use-policy",children:"fair use policy"}),"."]})}),t,e.jsxs(at,{children:[n,e.jsx(rt,{onClick:o,children:"Cancel"})]})]})};var x=(t=>(t.ADMIN="ADMIN",t.CLIENT="CLIENT",t.FRONTEND="FRONTEND",t))(x||{});const At=t=>{var O,U;const{environments:n}=Q(),s=(O=n==null?void 0:n.find(l=>l.enabled))==null?void 0:O.name,o=w(Ae,t),r=[{key:x.CLIENT,label:"Backend SDK",title:"Creates a backend token to connect a backend SDK or Unleash Edge",enabled:w(ve)||o},{key:x.FRONTEND,label:"Frontend SDK",title:"Creates a frontend token to connect a frontend SDK",enabled:w(Ee)||o}],a=(U=r.find(l=>l.enabled))==null?void 0:U.key,[i,p]=d.useState(""),[u,j]=d.useState(a||x.CLIENT),[m,y]=d.useState([t||"*"]),[h,te]=d.useState(m),[_,T]=d.useState(),[F,v]=d.useState({});return d.useEffect(()=>{T(u==="ADMIN"?"*":s)},[u,s]),{tokenName:i,type:u,apiTokenTypes:r,projects:m,environment:_,setTokenName:p,setTokenType:l=>{l==="ADMIN"?(j(x.ADMIN),te(m),y(["*"]),T("*")):(j(l),y(h),T(s))},setProjects:y,setEnvironment:T,getApiTokenPayload:()=>({tokenName:i,type:u,environment:_,projects:m}),isValid:()=>{const l={};return i||(l.tokenName="Token name is required"),m.length===0&&(l.projects="At least one project is required"),v(l),Object.keys(l).length===0},clearErrors:l=>{if(l){const H={...F};delete H[l],v(H)}else v({})},errors:F}},vt=({open:t,setOpen:n,closeConfirm:s,token:o,type:r})=>e.jsxs(Y,{open:t,setOpen:n,onClick:s,primaryButtonText:"Close",title:"New token created",children:[e.jsx(R,{variant:"body1",children:"Your new token has been created successfully."}),e.jsx(Ne,{token:o}),e.jsx(b,{condition:r===x.FRONTEND,show:e.jsxs(L,{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(q,{to:"/admin/cors",target:"_blank",rel:"noreferrer",children:"CORS origins configuration page"}),"."]})})]}),Et=({tokenName:t,setTokenName:n,errors:s,clearErrors:o})=>e.jsxs(e.Fragment,{children:[e.jsx(ee,{children:"What would you like to call this token?"}),e.jsx(nt,{value:t,name:"tokenName",onChange:r=>n(r.target.value),label:"Token name",error:s.tokenName!==void 0,errorText:s.tokenName,onFocus:()=>o("tokenName"),autoFocus:!0})]}),Nt=({type:t,setType:n,apiTokenTypes:s})=>e.jsx(et,{children:e.jsxs(we,{sx:{mb:2,width:"100%"},children:[e.jsx(ot,{id:"token-type",children:"What do you want to connect?"}),e.jsx(Se,{"aria-labelledby":"token-type",defaultValue:"CLIENT",name:"radio-buttons-group",value:t,onChange:(o,r)=>n(r),children:s.map(({key:o,label:r,title:a,enabled:i})=>e.jsx(Ie,{value:o,sx:{mb:1},disabled:!i,control:e.jsx(Re,{sx:{ml:.75,alignSelf:"flex-start"}}),label:e.jsx(f,{children:e.jsxs(f,{children:[e.jsx(R,{children:r}),e.jsx(R,{variant:"body2",color:"text.secondary",children:a})]})})},o))})]})}),wt=({type:t,environment:n,setEnvironment:s})=>{const{environments:o}=Q(),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(ee,{children:"Which environment should the token have access to?"}),e.jsx(st,{disabled:t===x.ADMIN,options:r,value:n,onChange:s,label:"Environment",id:"api_key_environment",name:"environment",IconComponent:De,fullWidth:!0})]})},it=t=>t.map(n=>({...n.user,joinedAt:new Date(n.joinedAt),createdBy:n.createdBy})),St=t=>{const{data:n,error:s,mutate:o}=Le(X(`api/admin/groups/${t}`),lt);return d.useMemo(()=>({group:n&&{...n,users:it((n==null?void 0:n.users)??[])},loading:!s&&!n,refetchGroup:()=>o(),error:s}),[n,s,o])},lt=t=>fetch(t).then(J("Group")).then(n=>n.json()),It=()=>{const{isEnterprise:t}=k(),{data:n,error:s,mutate:o}=Pe(t(),{serviceAccounts:[],rootRoles:[]},X("api/admin/service-account"),ct);return d.useMemo(()=>({serviceAccounts:(n==null?void 0:n.serviceAccounts)??[],roles:(n==null?void 0:n.rootRoles)??[],loading:!s&&!n,refetch:()=>o(),error:s}),[n,s,o])},ct=t=>fetch(t).then(J("Service Accounts")).then(n=>n.json()),dt=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)}})),ut=c(Be)(()=>({display:"block"})),Rt=({role:t,roles:n,value:s})=>{const{isEnterprise:o}=k();if(o()){const r=n||[t];return e.jsx(A,{children:e.jsx(_e,{tooltip:e.jsx(dt,{children:r.map(a=>e.jsx(Fe,{roleId:a,tooltip:!0},a))}),children:e.jsx(ut,{children:s})})})}return e.jsx(A,{children:s})};export{ft as A,yt as C,wt as E,Tt as R,ee as S,x as T,kt as a,At as b,Ct as c,Et as d,Nt as e,vt as f,It as g,St as h,Rt as i,Z as j,it as m,bt as u};