unleash-server 5.4.3 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (586) hide show
  1. package/README.md +5 -3
  2. package/dist/lib/addons/addon-schema.js +2 -1
  3. package/dist/lib/addons/addon-schema.js.map +1 -1
  4. package/dist/lib/addons/datadog-definition.js +22 -7
  5. package/dist/lib/addons/datadog-definition.js.map +1 -1
  6. package/dist/lib/addons/datadog.d.ts +7 -1
  7. package/dist/lib/addons/datadog.js +16 -3
  8. package/dist/lib/addons/datadog.js.map +1 -1
  9. package/dist/lib/addons/datadog.test.js +62 -0
  10. package/dist/lib/addons/datadog.test.js.map +1 -1
  11. package/dist/lib/addons/index.js +3 -11
  12. package/dist/lib/addons/index.js.map +1 -1
  13. package/dist/lib/addons/slack-app-definition.js +5 -24
  14. package/dist/lib/addons/slack-app-definition.js.map +1 -1
  15. package/dist/lib/addons/slack-app.d.ts +0 -1
  16. package/dist/lib/addons/slack-app.js +5 -17
  17. package/dist/lib/addons/slack-app.js.map +1 -1
  18. package/dist/lib/addons/slack-app.test.js +39 -25
  19. package/dist/lib/addons/slack-app.test.js.map +1 -1
  20. package/dist/lib/addons/slack-definition.js +11 -4
  21. package/dist/lib/addons/slack-definition.js.map +1 -1
  22. package/dist/lib/addons/teams-definition.js +5 -4
  23. package/dist/lib/addons/teams-definition.js.map +1 -1
  24. package/dist/lib/addons/webhook-definition.js +10 -12
  25. package/dist/lib/addons/webhook-definition.js.map +1 -1
  26. package/dist/lib/create-config.js +13 -1
  27. package/dist/lib/create-config.js.map +1 -1
  28. package/dist/lib/create-config.test.js +14 -0
  29. package/dist/lib/create-config.test.js.map +1 -1
  30. package/dist/lib/db/access-store.d.ts +23 -5
  31. package/dist/lib/db/access-store.js +263 -17
  32. package/dist/lib/db/access-store.js.map +1 -1
  33. package/dist/lib/db/access-store.test.js +83 -0
  34. package/dist/lib/db/access-store.test.js.map +1 -0
  35. package/dist/lib/db/client-applications-store.d.ts +1 -3
  36. package/dist/lib/db/client-applications-store.js +13 -24
  37. package/dist/lib/db/client-applications-store.js.map +1 -1
  38. package/dist/lib/db/event-store.js +1 -0
  39. package/dist/lib/db/event-store.js.map +1 -1
  40. package/dist/lib/db/feature-toggle-client-store.js +17 -4
  41. package/dist/lib/db/feature-toggle-client-store.js.map +1 -1
  42. package/dist/lib/db/feature-toggle-store.js +1 -1
  43. package/dist/lib/db/feature-toggle-store.js.map +1 -1
  44. package/dist/lib/db/group-store.d.ts +4 -2
  45. package/dist/lib/db/group-store.js +24 -0
  46. package/dist/lib/db/group-store.js.map +1 -1
  47. package/dist/lib/db/index.d.ts +1 -2
  48. package/dist/lib/db/index.js +5 -1
  49. package/dist/lib/db/index.js.map +1 -1
  50. package/dist/lib/db/project-stats-store.d.ts +2 -0
  51. package/dist/lib/db/project-stats-store.js +27 -0
  52. package/dist/lib/db/project-stats-store.js.map +1 -1
  53. package/dist/lib/db/project-store.d.ts +7 -1
  54. package/dist/lib/db/project-store.js +34 -1
  55. package/dist/lib/db/project-store.js.map +1 -1
  56. package/dist/lib/error/bad-data-error.d.ts +1 -1
  57. package/dist/lib/error/index.d.ts +2 -1
  58. package/dist/lib/error/index.js +3 -1
  59. package/dist/lib/error/index.js.map +1 -1
  60. package/dist/lib/error/pattern-error.d.ts +10 -0
  61. package/dist/lib/error/pattern-error.js +20 -0
  62. package/dist/lib/error/pattern-error.js.map +1 -0
  63. package/dist/lib/features/dependent-features/createDependentFeaturesService.d.ts +3 -0
  64. package/dist/lib/features/dependent-features/createDependentFeaturesService.js +11 -0
  65. package/dist/lib/features/dependent-features/createDependentFeaturesService.js.map +1 -0
  66. package/dist/lib/features/dependent-features/dependent-features-controller.d.ts +28 -0
  67. package/dist/lib/features/dependent-features/dependent-features-controller.js +151 -0
  68. package/dist/lib/features/dependent-features/dependent-features-controller.js.map +1 -0
  69. package/dist/lib/features/dependent-features/dependent-features-service.d.ts +11 -0
  70. package/dist/lib/features/dependent-features/dependent-features-service.js +40 -0
  71. package/dist/lib/features/dependent-features/dependent-features-service.js.map +1 -0
  72. package/dist/lib/features/dependent-features/dependent-features-store-type.d.ts +8 -0
  73. package/dist/lib/features/dependent-features/dependent-features-store-type.js +3 -0
  74. package/dist/lib/features/dependent-features/dependent-features-store-type.js.map +1 -0
  75. package/dist/lib/features/dependent-features/dependent-features-store.d.ts +12 -0
  76. package/dist/lib/features/dependent-features/dependent-features-store.js +56 -0
  77. package/dist/lib/features/dependent-features/dependent-features-store.js.map +1 -0
  78. package/dist/lib/features/dependent-features/dependent-features.d.ts +14 -0
  79. package/dist/lib/features/dependent-features/dependent-features.js +3 -0
  80. package/dist/lib/features/dependent-features/dependent-features.js.map +1 -0
  81. package/dist/lib/features/dependent-features/dependent.features.e2e.test.d.ts +1 -0
  82. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js +82 -0
  83. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js.map +1 -0
  84. package/dist/lib/features/dependent-features/fake-dependent-features-store.d.ts +8 -0
  85. package/dist/lib/features/dependent-features/fake-dependent-features-store.js +22 -0
  86. package/dist/lib/features/dependent-features/fake-dependent-features-store.js.map +1 -0
  87. package/dist/lib/features/export-import-toggles/createExportImportService.js +6 -3
  88. package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
  89. package/dist/lib/features/export-import-toggles/export-import-service.d.ts +9 -3
  90. package/dist/lib/features/export-import-toggles/export-import-service.js +51 -21
  91. package/dist/lib/features/export-import-toggles/export-import-service.js.map +1 -1
  92. package/dist/lib/features/export-import-toggles/export-import.e2e.test.js +120 -50
  93. package/dist/lib/features/export-import-toggles/export-import.e2e.test.js.map +1 -1
  94. package/dist/lib/features/export-import-toggles/import-permissions-service.d.ts +1 -2
  95. package/dist/lib/features/export-import-toggles/import-toggles-store-type.d.ts +6 -0
  96. package/dist/lib/features/export-import-toggles/import-toggles-store.d.ts +2 -1
  97. package/dist/lib/features/export-import-toggles/import-toggles-store.js +25 -0
  98. package/dist/lib/features/export-import-toggles/import-toggles-store.js.map +1 -1
  99. package/dist/lib/features/export-import-toggles/import-validation-messages.d.ts +18 -2
  100. package/dist/lib/features/export-import-toggles/import-validation-messages.js +27 -11
  101. package/dist/lib/features/export-import-toggles/import-validation-messages.js.map +1 -1
  102. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.d.ts +14 -0
  103. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js +46 -0
  104. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js.map +1 -0
  105. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.d.ts +1 -0
  106. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js +116 -0
  107. package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js.map +1 -0
  108. package/dist/lib/features/feature-toggle/createFeatureToggleService.js +11 -2
  109. package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
  110. package/dist/lib/features/instance-stats/getActiveUsers.d.ts +9 -0
  111. package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.d.ts +1 -0
  112. package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js +141 -0
  113. package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js.map +1 -0
  114. package/dist/lib/features/instance-stats/getActiveUsers.js +33 -0
  115. package/dist/lib/features/instance-stats/getActiveUsers.js.map +1 -0
  116. package/dist/lib/{services → features/instance-stats}/instance-stats-service.d.ts +13 -7
  117. package/dist/lib/{services → features/instance-stats}/instance-stats-service.js +16 -7
  118. package/dist/lib/features/instance-stats/instance-stats-service.js.map +1 -0
  119. package/dist/lib/features/instance-stats/instance-stats-service.test.d.ts +1 -0
  120. package/dist/lib/{services → features/instance-stats}/instance-stats-service.test.js +6 -5
  121. package/dist/lib/features/instance-stats/instance-stats-service.test.js.map +1 -0
  122. package/dist/lib/features/playground/advanced-playground.test.js +2 -3
  123. package/dist/lib/features/playground/advanced-playground.test.js.map +1 -1
  124. package/dist/lib/features/playground/feature-evaluator/variant.d.ts +1 -1
  125. package/dist/lib/features/playground/generateObjectCombinations.d.ts +1 -1
  126. package/dist/lib/features/playground/generateObjectCombinations.js +14 -4
  127. package/dist/lib/features/playground/generateObjectCombinations.js.map +1 -1
  128. package/dist/lib/features/playground/generateObjectCombinations.test.js +21 -0
  129. package/dist/lib/features/playground/generateObjectCombinations.test.js.map +1 -1
  130. package/dist/lib/features/playground/playground-service.d.ts +5 -3
  131. package/dist/lib/features/playground/playground-service.js +18 -3
  132. package/dist/lib/features/playground/playground-service.js.map +1 -1
  133. package/dist/lib/features/playground/playground.d.ts +2 -1
  134. package/dist/lib/features/playground/playground.js +2 -1
  135. package/dist/lib/features/playground/playground.js.map +1 -1
  136. package/dist/lib/features/private-project/createPrivateProjectChecker.d.ts +5 -0
  137. package/dist/lib/features/private-project/createPrivateProjectChecker.js +22 -0
  138. package/dist/lib/features/private-project/createPrivateProjectChecker.js.map +1 -0
  139. package/dist/lib/features/private-project/fakePrivateProjectChecker.d.ts +7 -0
  140. package/dist/lib/features/private-project/fakePrivateProjectChecker.js +15 -0
  141. package/dist/lib/features/private-project/fakePrivateProjectChecker.js.map +1 -0
  142. package/dist/lib/features/private-project/privateProjectChecker.d.ts +10 -0
  143. package/dist/lib/features/private-project/privateProjectChecker.js +22 -0
  144. package/dist/lib/features/private-project/privateProjectChecker.js.map +1 -0
  145. package/dist/lib/features/private-project/privateProjectCheckerType.d.ts +5 -0
  146. package/dist/lib/features/private-project/privateProjectCheckerType.js +3 -0
  147. package/dist/lib/features/private-project/privateProjectCheckerType.js.map +1 -0
  148. package/dist/lib/features/private-project/privateProjectStore.d.ts +18 -0
  149. package/dist/lib/features/private-project/privateProjectStore.js +70 -0
  150. package/dist/lib/features/private-project/privateProjectStore.js.map +1 -0
  151. package/dist/lib/features/private-project/privateProjectStoreType.d.ts +4 -0
  152. package/dist/lib/features/private-project/privateProjectStoreType.js +3 -0
  153. package/dist/lib/features/private-project/privateProjectStoreType.js.map +1 -0
  154. package/dist/lib/features/project/createProjectService.js +5 -8
  155. package/dist/lib/features/project/createProjectService.js.map +1 -1
  156. package/dist/lib/features/segment/createSegmentService.js +5 -2
  157. package/dist/lib/features/segment/createSegmentService.js.map +1 -1
  158. package/dist/lib/features/segment/segment-controller.d.ts +39 -0
  159. package/dist/lib/features/segment/segment-controller.js +291 -0
  160. package/dist/lib/features/segment/segment-controller.js.map +1 -0
  161. package/dist/lib/metrics.d.ts +1 -1
  162. package/dist/lib/metrics.js +30 -1
  163. package/dist/lib/metrics.js.map +1 -1
  164. package/dist/lib/metrics.test.js +3 -2
  165. package/dist/lib/metrics.test.js.map +1 -1
  166. package/dist/lib/middleware/rbac-middleware.d.ts +2 -0
  167. package/dist/lib/middleware/rbac-middleware.js +2 -0
  168. package/dist/lib/middleware/rbac-middleware.js.map +1 -1
  169. package/dist/lib/middleware/secure-headers.js +18 -0
  170. package/dist/lib/middleware/secure-headers.js.map +1 -1
  171. package/dist/lib/openapi/index.js +13 -0
  172. package/dist/lib/openapi/index.js.map +1 -1
  173. package/dist/lib/openapi/meta-schema-rules.test.js +14 -4
  174. package/dist/lib/openapi/meta-schema-rules.test.js.map +1 -1
  175. package/dist/lib/openapi/spec/addon-type-schema.d.ts +6 -1
  176. package/dist/lib/openapi/spec/addon-type-schema.js +6 -1
  177. package/dist/lib/openapi/spec/addon-type-schema.js.map +1 -1
  178. package/dist/lib/openapi/spec/addons-schema.d.ts +8 -3
  179. package/dist/lib/openapi/spec/addons-schema.js +8 -3
  180. package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
  181. package/dist/lib/openapi/spec/admin-segment-schema.d.ts +115 -0
  182. package/dist/lib/openapi/spec/admin-segment-schema.js +75 -0
  183. package/dist/lib/openapi/spec/admin-segment-schema.js.map +1 -0
  184. package/dist/lib/openapi/spec/admin-segment-schema.test.d.ts +1 -0
  185. package/dist/lib/openapi/spec/admin-segment-schema.test.js +39 -0
  186. package/dist/lib/openapi/spec/admin-segment-schema.test.js.map +1 -0
  187. package/dist/lib/openapi/spec/admin-strategies-schema.d.ts +46 -0
  188. package/dist/lib/openapi/spec/admin-strategies-schema.js +54 -0
  189. package/dist/lib/openapi/spec/admin-strategies-schema.js.map +1 -0
  190. package/dist/lib/openapi/spec/admin-strategies-schema.test.d.ts +1 -0
  191. package/dist/lib/openapi/spec/admin-strategies-schema.test.js +40 -0
  192. package/dist/lib/openapi/spec/admin-strategies-schema.test.js.map +1 -0
  193. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +51 -6
  194. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js +3 -1
  195. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js.map +1 -1
  196. package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +101 -11
  197. package/dist/lib/openapi/spec/advanced-playground-feature-schema.js +2 -0
  198. package/dist/lib/openapi/spec/advanced-playground-feature-schema.js.map +1 -1
  199. package/dist/lib/openapi/spec/advanced-playground-request-schema.d.ts +1 -0
  200. package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +203 -22
  201. package/dist/lib/openapi/spec/advanced-playground-response-schema.js +2 -0
  202. package/dist/lib/openapi/spec/advanced-playground-response-schema.js.map +1 -1
  203. package/dist/lib/openapi/spec/client-feature-schema.d.ts +41 -6
  204. package/dist/lib/openapi/spec/client-feature-schema.js +9 -0
  205. package/dist/lib/openapi/spec/client-feature-schema.js.map +1 -1
  206. package/dist/lib/openapi/spec/client-features-schema.d.ts +75 -12
  207. package/dist/lib/openapi/spec/client-features-schema.js +2 -0
  208. package/dist/lib/openapi/spec/client-features-schema.js.map +1 -1
  209. package/dist/lib/openapi/spec/context-field-strategies-schema.d.ts +1 -1
  210. package/dist/lib/openapi/spec/context-field-strategies-schema.js +1 -1
  211. package/dist/lib/openapi/spec/context-field-strategies-schema.js.map +1 -1
  212. package/dist/lib/openapi/spec/create-api-token-schema.d.ts +1 -139
  213. package/dist/lib/openapi/spec/create-api-token-schema.js +16 -20
  214. package/dist/lib/openapi/spec/create-api-token-schema.js.map +1 -1
  215. package/dist/lib/openapi/spec/create-dependent-feature-schema.d.ts +29 -0
  216. package/dist/lib/openapi/spec/create-dependent-feature-schema.js +31 -0
  217. package/dist/lib/openapi/spec/create-dependent-feature-schema.js.map +1 -0
  218. package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.d.ts +29 -0
  219. package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js +33 -0
  220. package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js.map +1 -0
  221. package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +2 -2
  222. package/dist/lib/openapi/spec/create-strategy-schema.d.ts +15 -0
  223. package/dist/lib/openapi/spec/create-strategy-schema.js +15 -0
  224. package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -1
  225. package/dist/lib/openapi/spec/create-strategy-variant-schema.d.ts +2 -2
  226. package/dist/lib/openapi/spec/create-strategy-variant-schema.js +2 -2
  227. package/dist/lib/openapi/spec/create-strategy-variant-schema.js.map +1 -1
  228. package/dist/lib/openapi/spec/dependent-feature-schema.d.ts +30 -0
  229. package/dist/lib/openapi/spec/dependent-feature-schema.js +14 -0
  230. package/dist/lib/openapi/spec/dependent-feature-schema.js.map +1 -0
  231. package/dist/lib/openapi/spec/dora-features-schema.d.ts +20 -0
  232. package/dist/lib/openapi/spec/dora-features-schema.js +22 -0
  233. package/dist/lib/openapi/spec/dora-features-schema.js.map +1 -0
  234. package/dist/lib/openapi/spec/environment-project-schema.d.ts +4 -4
  235. package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
  236. package/dist/lib/openapi/spec/event-schema.d.ts +3 -3
  237. package/dist/lib/openapi/spec/events-schema.d.ts +3 -3
  238. package/dist/lib/openapi/spec/export-query-schema.d.ts +22 -15
  239. package/dist/lib/openapi/spec/export-query-schema.js +16 -15
  240. package/dist/lib/openapi/spec/export-query-schema.js.map +1 -1
  241. package/dist/lib/openapi/spec/export-result-schema.d.ts +26 -26
  242. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +6 -6
  243. package/dist/lib/openapi/spec/feature-events-schema.d.ts +3 -3
  244. package/dist/lib/openapi/spec/feature-schema.d.ts +12 -12
  245. package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +2 -2
  246. package/dist/lib/openapi/spec/feature-variants-schema.d.ts +2 -2
  247. package/dist/lib/openapi/spec/features-schema.d.ts +24 -24
  248. package/dist/lib/openapi/spec/health-overview-schema.d.ts +63 -33
  249. package/dist/lib/openapi/spec/health-overview-schema.js +6 -1
  250. package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
  251. package/dist/lib/openapi/spec/health-report-schema.d.ts +63 -33
  252. package/dist/lib/openapi/spec/import-toggles-schema.d.ts +52 -52
  253. package/dist/lib/openapi/spec/index.d.ts +9 -0
  254. package/dist/lib/openapi/spec/index.js +9 -0
  255. package/dist/lib/openapi/spec/index.js.map +1 -1
  256. package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts +42 -0
  257. package/dist/lib/openapi/spec/instance-admin-stats-schema.js +42 -0
  258. package/dist/lib/openapi/spec/instance-admin-stats-schema.js.map +1 -1
  259. package/dist/lib/openapi/spec/parent-feature-options-schema.d.ts +11 -0
  260. package/dist/lib/openapi/spec/parent-feature-options-schema.js +13 -0
  261. package/dist/lib/openapi/spec/parent-feature-options-schema.js.map +1 -0
  262. package/dist/lib/openapi/spec/playground-feature-schema.d.ts +5 -5
  263. package/dist/lib/openapi/spec/playground-request-schema.d.ts +1 -0
  264. package/dist/lib/openapi/spec/playground-response-schema.d.ts +12 -10
  265. package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +4 -4
  266. package/dist/lib/openapi/spec/playground-strategy-schema.js +1 -1
  267. package/dist/lib/openapi/spec/playground-strategy-schema.js.map +1 -1
  268. package/dist/lib/openapi/spec/profile-schema.d.ts +12 -12
  269. package/dist/lib/openapi/spec/project-dora-metrics-schema.d.ts +44 -0
  270. package/dist/lib/openapi/spec/project-dora-metrics-schema.js +28 -0
  271. package/dist/lib/openapi/spec/project-dora-metrics-schema.js.map +1 -0
  272. package/dist/lib/openapi/spec/project-environment-schema.d.ts +4 -4
  273. package/dist/lib/openapi/spec/project-overview-schema.d.ts +63 -33
  274. package/dist/lib/openapi/spec/project-overview-schema.js +6 -1
  275. package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
  276. package/dist/lib/openapi/spec/project-schema.d.ts +1 -1
  277. package/dist/lib/openapi/spec/project-schema.js +1 -1
  278. package/dist/lib/openapi/spec/project-schema.js.map +1 -1
  279. package/dist/lib/openapi/spec/projects-schema.d.ts +1 -1
  280. package/dist/lib/openapi/spec/push-variants-schema.d.ts +2 -2
  281. package/dist/lib/openapi/spec/sdk-context-schema.d.ts +1 -0
  282. package/dist/lib/openapi/spec/sdk-context-schema.js +1 -0
  283. package/dist/lib/openapi/spec/sdk-context-schema.js.map +1 -1
  284. package/dist/lib/openapi/spec/sdk-flat-context-schema.d.ts +46 -0
  285. package/dist/lib/openapi/spec/sdk-flat-context-schema.js +15 -0
  286. package/dist/lib/openapi/spec/sdk-flat-context-schema.js.map +1 -0
  287. package/dist/lib/openapi/spec/search-events-schema.d.ts +1 -1
  288. package/dist/lib/openapi/spec/segments-schema.d.ts +177 -0
  289. package/dist/lib/openapi/spec/segments-schema.js +26 -0
  290. package/dist/lib/openapi/spec/segments-schema.js.map +1 -0
  291. package/dist/lib/openapi/spec/segments-schema.test.d.ts +1 -0
  292. package/dist/lib/openapi/spec/segments-schema.test.js +16 -0
  293. package/dist/lib/openapi/spec/segments-schema.test.js.map +1 -0
  294. package/dist/lib/openapi/spec/state-schema.d.ts +23 -23
  295. package/dist/lib/openapi/spec/strategy-variant-schema.d.ts +2 -2
  296. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.d.ts +35 -0
  297. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js +37 -0
  298. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js.map +1 -0
  299. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.d.ts +1 -0
  300. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js +19 -0
  301. package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js.map +1 -0
  302. package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +8 -15
  303. package/dist/lib/openapi/spec/upsert-segment-schema.js +8 -17
  304. package/dist/lib/openapi/spec/upsert-segment-schema.js.map +1 -1
  305. package/dist/lib/openapi/spec/upsert-segment-schema.test.d.ts +1 -0
  306. package/dist/lib/openapi/spec/upsert-segment-schema.test.js +35 -0
  307. package/dist/lib/openapi/spec/upsert-segment-schema.test.js.map +1 -0
  308. package/dist/lib/openapi/spec/validate-feature-schema.d.ts +6 -0
  309. package/dist/lib/openapi/spec/validate-feature-schema.js +6 -0
  310. package/dist/lib/openapi/spec/validate-feature-schema.js.map +1 -1
  311. package/dist/lib/openapi/spec/variant-schema.d.ts +2 -2
  312. package/dist/lib/openapi/spec/variant-schema.js +2 -2
  313. package/dist/lib/openapi/spec/variant-schema.js.map +1 -1
  314. package/dist/lib/openapi/spec/variants-schema.d.ts +2 -2
  315. package/dist/lib/openapi/util/all-of.d.ts +3 -0
  316. package/dist/lib/openapi/util/all-of.js +34 -0
  317. package/dist/lib/openapi/util/all-of.js.map +1 -0
  318. package/dist/lib/openapi/util/openapi-tags.d.ts +46 -58
  319. package/dist/lib/openapi/util/openapi-tags.js +27 -34
  320. package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
  321. package/dist/lib/openapi/util/openapi-tags.test.d.ts +1 -0
  322. package/dist/lib/openapi/util/openapi-tags.test.js +15 -0
  323. package/dist/lib/openapi/util/openapi-tags.test.js.map +1 -0
  324. package/dist/lib/openapi/validate.js +0 -1
  325. package/dist/lib/openapi/validate.js.map +1 -1
  326. package/dist/lib/routes/admin-api/archive.d.ts +1 -1
  327. package/dist/lib/routes/admin-api/archive.js +3 -2
  328. package/dist/lib/routes/admin-api/archive.js.map +1 -1
  329. package/dist/lib/routes/admin-api/context.js +2 -1
  330. package/dist/lib/routes/admin-api/context.js.map +1 -1
  331. package/dist/lib/routes/admin-api/feature.js +2 -1
  332. package/dist/lib/routes/admin-api/feature.js.map +1 -1
  333. package/dist/lib/routes/admin-api/index.js +2 -0
  334. package/dist/lib/routes/admin-api/index.js.map +1 -1
  335. package/dist/lib/routes/admin-api/instance-admin.d.ts +2 -2
  336. package/dist/lib/routes/admin-api/instance-admin.js +7 -1
  337. package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
  338. package/dist/lib/routes/admin-api/metrics.d.ts +2 -1
  339. package/dist/lib/routes/admin-api/metrics.js +2 -1
  340. package/dist/lib/routes/admin-api/metrics.js.map +1 -1
  341. package/dist/lib/routes/admin-api/project/api-token.d.ts +2 -1
  342. package/dist/lib/routes/admin-api/project/api-token.js +12 -3
  343. package/dist/lib/routes/admin-api/project/api-token.js.map +1 -1
  344. package/dist/lib/routes/admin-api/project/environments.d.ts +2 -1
  345. package/dist/lib/routes/admin-api/project/environments.js +3 -1
  346. package/dist/lib/routes/admin-api/project/environments.js.map +1 -1
  347. package/dist/lib/routes/admin-api/project/index.d.ts +2 -1
  348. package/dist/lib/routes/admin-api/project/index.js +31 -0
  349. package/dist/lib/routes/admin-api/project/index.js.map +1 -1
  350. package/dist/lib/routes/admin-api/strategy.d.ts +1 -1
  351. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  352. package/dist/lib/routes/client-api/metrics.js +14 -8
  353. package/dist/lib/routes/client-api/metrics.js.map +1 -1
  354. package/dist/lib/routes/client-api/metrics.test.js +27 -0
  355. package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
  356. package/dist/lib/routes/controller.d.ts +1 -1
  357. package/dist/lib/routes/controller.js +17 -10
  358. package/dist/lib/routes/controller.js.map +1 -1
  359. package/dist/lib/routes/proxy-api/index.js +5 -0
  360. package/dist/lib/routes/proxy-api/index.js.map +1 -1
  361. package/dist/lib/schema/role-schema.js +3 -1
  362. package/dist/lib/schema/role-schema.js.map +1 -1
  363. package/dist/lib/schema/role-schema.test.js +1 -1
  364. package/dist/lib/schema/role-schema.test.js.map +1 -1
  365. package/dist/lib/segments/segment-service-interface.d.ts +1 -1
  366. package/dist/lib/services/access-service.d.ts +29 -11
  367. package/dist/lib/services/access-service.js +53 -10
  368. package/dist/lib/services/access-service.js.map +1 -1
  369. package/dist/lib/services/access-service.test.js +2 -1
  370. package/dist/lib/services/access-service.test.js.map +1 -1
  371. package/dist/lib/services/addon-service.js +4 -2
  372. package/dist/lib/services/addon-service.js.map +1 -1
  373. package/dist/lib/services/addon-service.test.js +65 -0
  374. package/dist/lib/services/addon-service.test.js.map +1 -1
  375. package/dist/lib/services/client-metrics/instance-service.d.ts +5 -2
  376. package/dist/lib/services/client-metrics/instance-service.js +22 -3
  377. package/dist/lib/services/client-metrics/instance-service.js.map +1 -1
  378. package/dist/lib/services/client-metrics/instance-service.test.js +5 -4
  379. package/dist/lib/services/client-metrics/instance-service.test.js.map +1 -1
  380. package/dist/lib/services/context-service.d.ts +6 -2
  381. package/dist/lib/services/context-service.js +16 -2
  382. package/dist/lib/services/context-service.js.map +1 -1
  383. package/dist/lib/services/feature-service-potentially-stale.test.js +1 -1
  384. package/dist/lib/services/feature-service-potentially-stale.test.js.map +1 -1
  385. package/dist/lib/services/feature-toggle-service.d.ts +20 -7
  386. package/dist/lib/services/feature-toggle-service.js +109 -41
  387. package/dist/lib/services/feature-toggle-service.js.map +1 -1
  388. package/dist/lib/services/group-service.d.ts +4 -4
  389. package/dist/lib/services/group-service.js +17 -16
  390. package/dist/lib/services/group-service.js.map +1 -1
  391. package/dist/lib/services/index.d.ts +3 -2
  392. package/dist/lib/services/index.js +31 -17
  393. package/dist/lib/services/index.js.map +1 -1
  394. package/dist/lib/services/project-schema.js +9 -1
  395. package/dist/lib/services/project-schema.js.map +1 -1
  396. package/dist/lib/services/project-service.d.ts +16 -12
  397. package/dist/lib/services/project-service.js +127 -17
  398. package/dist/lib/services/project-service.js.map +1 -1
  399. package/dist/lib/services/scheduler-service.d.ts +1 -1
  400. package/dist/lib/services/scheduler-service.js +3 -3
  401. package/dist/lib/services/scheduler-service.js.map +1 -1
  402. package/dist/lib/services/scheduler-service.test.js +15 -15
  403. package/dist/lib/services/scheduler-service.test.js.map +1 -1
  404. package/dist/lib/services/segment-service.d.ts +4 -2
  405. package/dist/lib/services/segment-service.js +17 -10
  406. package/dist/lib/services/segment-service.js.map +1 -1
  407. package/dist/lib/services/state-service.test.js +13 -3
  408. package/dist/lib/services/state-service.test.js.map +1 -1
  409. package/dist/lib/services/version-service.test.js +3 -0
  410. package/dist/lib/services/version-service.test.js.map +1 -1
  411. package/dist/lib/types/events.d.ts +61 -1
  412. package/dist/lib/types/events.js +66 -4
  413. package/dist/lib/types/events.js.map +1 -1
  414. package/dist/lib/types/experimental.d.ts +1 -1
  415. package/dist/lib/types/experimental.js +9 -5
  416. package/dist/lib/types/experimental.js.map +1 -1
  417. package/dist/lib/types/group.d.ts +2 -2
  418. package/dist/lib/types/model.d.ts +31 -2
  419. package/dist/lib/types/model.js.map +1 -1
  420. package/dist/lib/types/no-auth-user.d.ts +1 -0
  421. package/dist/lib/types/no-auth-user.js +3 -1
  422. package/dist/lib/types/no-auth-user.js.map +1 -1
  423. package/dist/lib/types/option.d.ts +7 -0
  424. package/dist/lib/types/services.d.ts +6 -1
  425. package/dist/lib/types/stores/access-store.d.ts +23 -4
  426. package/dist/lib/types/stores/feature-strategies-store.d.ts +2 -1
  427. package/dist/lib/types/stores/group-store.d.ts +4 -2
  428. package/dist/lib/types/stores/project-stats-store-type.d.ts +2 -0
  429. package/dist/lib/types/stores/project-store.d.ts +7 -14
  430. package/dist/lib/types/stores/strategy-store.d.ts +3 -17
  431. package/dist/lib/types/stores.d.ts +5 -1
  432. package/dist/lib/util/findDuplicates.d.ts +1 -0
  433. package/dist/lib/util/findDuplicates.js +18 -0
  434. package/dist/lib/util/findDuplicates.js.map +1 -0
  435. package/dist/lib/util/findDuplicates.test.d.ts +1 -0
  436. package/dist/lib/util/findDuplicates.test.js +23 -0
  437. package/dist/lib/util/findDuplicates.test.js.map +1 -0
  438. package/dist/migrations/20230830121352-update-client-applications-usage-table.d.ts +2 -0
  439. package/dist/migrations/20230830121352-update-client-applications-usage-table.js +16 -0
  440. package/dist/migrations/20230830121352-update-client-applications-usage-table.js.map +1 -0
  441. package/dist/migrations/20230905122605-add-feature-naming-description.d.ts +2 -0
  442. package/dist/migrations/20230905122605-add-feature-naming-description.js +13 -0
  443. package/dist/migrations/20230905122605-add-feature-naming-description.js.map +1 -0
  444. package/dist/migrations/20230919104006-dependent-features.d.ts +2 -0
  445. package/dist/migrations/20230919104006-dependent-features.js +21 -0
  446. package/dist/migrations/20230919104006-dependent-features.js.map +1 -0
  447. package/dist/migrations/20230927071830-reset-pnps-feedback.d.ts +2 -0
  448. package/dist/migrations/20230927071830-reset-pnps-feedback.js +10 -0
  449. package/dist/migrations/20230927071830-reset-pnps-feedback.js.map +1 -0
  450. package/dist/server-dev.js +7 -4
  451. package/dist/server-dev.js.map +1 -1
  452. package/dist/test/e2e/api/admin/addon.e2e.test.js +0 -1
  453. package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
  454. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +8 -12
  455. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
  456. package/dist/test/e2e/api/admin/event.e2e.test.js +9 -2
  457. package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
  458. package/dist/test/e2e/api/admin/metrics.e2e.test.js +2 -10
  459. package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
  460. package/dist/test/e2e/api/admin/project/environments.e2e.test.js +8 -0
  461. package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -1
  462. package/dist/test/e2e/api/admin/project/features.e2e.test.js +41 -15
  463. package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
  464. package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js +30 -3
  465. package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js.map +1 -1
  466. package/dist/test/e2e/api/admin/segment.e2e.test.d.ts +1 -0
  467. package/dist/test/e2e/api/admin/segment.e2e.test.js +272 -0
  468. package/dist/test/e2e/api/admin/segment.e2e.test.js.map +1 -0
  469. package/dist/test/e2e/api/admin/state.e2e.test.js +0 -11
  470. package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
  471. package/dist/test/e2e/api/admin/strategy.e2e.test.js +1 -1
  472. package/dist/test/e2e/api/client/feature.e2e.test.js +27 -3
  473. package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
  474. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +2 -2
  475. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
  476. package/dist/test/e2e/api/client/segment.e2e.test.js +1 -1
  477. package/dist/test/e2e/api/client/segment.e2e.test.js.map +1 -1
  478. package/dist/test/e2e/api/proxy/proxy.e2e.test.js +34 -9
  479. package/dist/test/e2e/api/proxy/proxy.e2e.test.js.map +1 -1
  480. package/dist/test/e2e/helpers/app.utils.d.ts +6 -0
  481. package/dist/test/e2e/helpers/app.utils.js +16 -0
  482. package/dist/test/e2e/helpers/app.utils.js.map +1 -0
  483. package/dist/test/e2e/helpers/database.json +24 -0
  484. package/dist/test/e2e/services/access-service.e2e.test.js +549 -135
  485. package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
  486. package/dist/test/e2e/services/api-token-service.e2e.test.js +4 -2
  487. package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
  488. package/dist/test/e2e/services/client-metrics-service.e2e.test.js +2 -1
  489. package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
  490. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +38 -5
  491. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
  492. package/dist/test/e2e/services/group-service.e2e.test.js +16 -11
  493. package/dist/test/e2e/services/group-service.e2e.test.js.map +1 -1
  494. package/dist/test/e2e/services/playground-service.test.js +5 -2
  495. package/dist/test/e2e/services/playground-service.test.js.map +1 -1
  496. package/dist/test/e2e/services/project-health-service.e2e.test.js +4 -2
  497. package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
  498. package/dist/test/e2e/services/project-service.e2e.test.js +242 -60
  499. package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
  500. package/dist/test/fixtures/access-service-mock.d.ts +3 -4
  501. package/dist/test/fixtures/access-service-mock.js.map +1 -1
  502. package/dist/test/fixtures/fake-access-store.d.ts +15 -5
  503. package/dist/test/fixtures/fake-access-store.js +30 -3
  504. package/dist/test/fixtures/fake-access-store.js.map +1 -1
  505. package/dist/test/fixtures/fake-group-store.d.ts +4 -2
  506. package/dist/test/fixtures/fake-group-store.js +3 -0
  507. package/dist/test/fixtures/fake-group-store.js.map +1 -1
  508. package/dist/test/fixtures/fake-project-stats-store.d.ts +1 -0
  509. package/dist/test/fixtures/fake-project-stats-store.js +3 -0
  510. package/dist/test/fixtures/fake-project-stats-store.js.map +1 -1
  511. package/dist/test/fixtures/fake-project-store.d.ts +2 -1
  512. package/dist/test/fixtures/fake-project-store.js +3 -0
  513. package/dist/test/fixtures/fake-project-store.js.map +1 -1
  514. package/dist/test/fixtures/no-logger.d.ts +2 -1
  515. package/dist/test/fixtures/no-logger.js +8 -4
  516. package/dist/test/fixtures/no-logger.js.map +1 -1
  517. package/dist/test/fixtures/store.js +3 -0
  518. package/dist/test/fixtures/store.js.map +1 -1
  519. package/frontend/README.md +7 -1
  520. package/frontend/build/index.html +2 -2
  521. package/frontend/build/static/{AdvancedPlayground-1748fcdd.js → AdvancedPlayground-20059178.js} +11 -11
  522. package/frontend/build/static/CreateProject-6955728f.js +4 -0
  523. package/frontend/build/static/{Error-cbce6b64.js → Error-f56339ab.js} +1 -1
  524. package/frontend/build/static/FeatureArchiveDialog-33dc3a5b.js +10 -0
  525. package/frontend/build/static/{FeatureMetricsChart-8fd8a304.js → FeatureMetricsChart-5ad514bc.js} +2 -2
  526. package/frontend/build/static/FeatureViewLazyExport-85a68ed0.js +7 -0
  527. package/frontend/build/static/LazyAdminExport-e2677758.js +35 -0
  528. package/frontend/build/static/LazyProjectExport-969bb54e.js +24 -0
  529. package/frontend/build/static/Logo-android-218bddbb.svg +1 -0
  530. package/frontend/build/static/Logo-flutter-cc3c706f.svg +1 -0
  531. package/frontend/build/static/Logo-go-02475b3d.svg +1 -0
  532. package/frontend/build/static/Logo-java-6e556b26.svg +1 -0
  533. package/frontend/build/static/Logo-javascript-caebc06e.svg +1 -0
  534. package/frontend/build/static/Logo-net-0a33abee.svg +1 -0
  535. package/frontend/build/static/Logo-node-318ed025.svg +1 -0
  536. package/frontend/build/static/Logo-php-201f18c3.svg +1 -0
  537. package/frontend/build/static/Logo-python-4305760e.svg +1 -0
  538. package/frontend/build/static/Logo-react-18e98687.svg +1 -0
  539. package/frontend/build/static/Logo-ruby-58f46832.svg +1 -0
  540. package/frontend/build/static/Logo-rust-c83a80f9.svg +1 -0
  541. package/frontend/build/static/Logo-svelte-97dcb624.svg +1 -0
  542. package/frontend/build/static/Logo-swift-315f842b.svg +5 -0
  543. package/frontend/build/static/Logo-vue-0de73099.svg +1 -0
  544. package/frontend/build/static/{NetworkOverview-349a7bdd.js → NetworkOverview-894877e6.js} +2 -2
  545. package/frontend/build/static/{NetworkTraffic-60478e50.js → NetworkTraffic-81eff1ae.js} +1 -1
  546. package/frontend/build/static/ReactJSONEditor-59c8a094.js +129 -0
  547. package/frontend/build/static/RoleCell-35857d41.js +1 -0
  548. package/frontend/build/static/{StrategyItemContainer-a4caeace.js → StrategyItemContainer-b250f2d4.js} +1 -1
  549. package/frontend/build/static/{chartjs-adapter-date-fns.esm-03d2fbea.js → chartjs-adapter-date-fns.esm-c51fe022.js} +1 -1
  550. package/frontend/build/static/cr-db7653ac.png +0 -0
  551. package/frontend/build/static/datadog-543762b6.svg +5 -0
  552. package/frontend/build/static/edge-daisy-chaining-012bfdef.svg +48 -0
  553. package/frontend/build/static/edge-mode-5d25949b.svg +22 -0
  554. package/frontend/build/static/edge-offline-f6a0f761.svg +19 -0
  555. package/frontend/build/static/{flowchart-elk-definition-170a3958-fc100c77.js → flowchart-elk-definition-170a3958-a8c4a86a.js} +1 -1
  556. package/frontend/build/static/{index-866f9bf9.js → index-0515f416.js} +1 -1
  557. package/frontend/build/static/index-942e9eeb.js +463 -0
  558. package/frontend/build/static/{index-3c63138f.js → index-a59b2d65.js} +1 -1
  559. package/frontend/build/static/{is_dark-31c253e9.js → is_dark-464961a8.js} +1 -1
  560. package/frontend/build/static/jira-1abe7cbf.svg +17 -0
  561. package/frontend/build/static/{mindmap-definition-44684416-398682f9.js → mindmap-definition-44684416-3a71a9a5.js} +1 -1
  562. package/frontend/build/static/slack-36ce798a.svg +18 -0
  563. package/frontend/build/static/style-97d3ef98.css +1 -0
  564. package/frontend/build/static/teams-4e30b51f.svg +45 -0
  565. package/frontend/build/static/{timeline-definition-8e5a9bc6-04a0ae08.js → timeline-definition-8e5a9bc6-da4ebc88.js} +1 -1
  566. package/frontend/build/static/{unknownify-b8618d88.js → unknownify-3563456b.js} +1 -1
  567. package/frontend/build/static/unleash-integration-949d8966.svg +1 -0
  568. package/frontend/build/static/webhooks-b1b44207.svg +16 -0
  569. package/frontend/package.json +20 -18
  570. package/package.json +23 -23
  571. package/dist/lib/services/instance-stats-service.js.map +0 -1
  572. package/dist/lib/services/instance-stats-service.test.js.map +0 -1
  573. package/frontend/build/static/CreateProject-972fa820.js +0 -4
  574. package/frontend/build/static/FeatureArchiveDialog-8a281845.js +0 -10
  575. package/frontend/build/static/FeatureViewLazyExport-a215d53b.js +0 -7
  576. package/frontend/build/static/LazyAdminExport-ba7d55ca.js +0 -35
  577. package/frontend/build/static/LazyProjectExport-12bccd40.js +0 -17
  578. package/frontend/build/static/RoleCell-144e7eca.js +0 -1
  579. package/frontend/build/static/datadog-591b6a73.svg +0 -1
  580. package/frontend/build/static/index-17d74ac9.js +0 -454
  581. package/frontend/build/static/slack-c0af31c6.svg +0 -1
  582. package/frontend/build/static/style-770afaee.css +0 -1
  583. package/frontend/build/static/teams-62e72076.svg +0 -26
  584. package/frontend/build/static/webhooks-ffa904ac.svg +0 -1
  585. /package/dist/lib/{services/instance-stats-service.test.d.ts → db/access-store.test.d.ts} +0 -0
  586. /package/frontend/build/static/{jira-d9eb9af9.svg → jira-comment-d9eb9af9.svg} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"import-toggles-store.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-toggles-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-toggles-store.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-toggles-store.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,23 @@
1
1
  import { FeatureStrategySchema, ImportTogglesValidateItemSchema } from '../../openapi';
2
2
  import { IContextFieldDto } from '../../types/stores/context-field-store';
3
+ import { FeatureNameCheckResultWithFeaturePattern } from '../../services/feature-toggle-service';
4
+ import { ProjectFeaturesLimit } from './import-toggles-store-type';
5
+ export interface IErrorsParams {
6
+ projectName: string;
7
+ strategies: FeatureStrategySchema[];
8
+ contextFields: IContextFieldDto[];
9
+ otherProjectFeatures: string[];
10
+ duplicateFeatures: string[];
11
+ featureNameCheckResult: FeatureNameCheckResultWithFeaturePattern;
12
+ featureLimitResult: ProjectFeaturesLimit;
13
+ }
14
+ export interface IWarningParams {
15
+ usedCustomStrategies: string[];
16
+ archivedFeatures: string[];
17
+ existingFeatures: string[];
18
+ }
3
19
  export declare class ImportValidationMessages {
4
20
  static compilePermissionErrors(missingPermissions: string[]): ImportTogglesValidateItemSchema[];
5
- static compileErrors(projectName: string, strategies: FeatureStrategySchema[], contextFields: IContextFieldDto[], segments: string[], otherProjectFeatures: string[], changeRequestExists: boolean): ImportTogglesValidateItemSchema[];
6
- static compileWarnings(usedCustomStrategies: string[], archivedFeatures: string[], existingFeatures: string[]): ImportTogglesValidateItemSchema[];
21
+ static compileErrors({ projectName, strategies, contextFields, otherProjectFeatures, duplicateFeatures, featureNameCheckResult, featureLimitResult, }: IErrorsParams): ImportTogglesValidateItemSchema[];
22
+ static compileWarnings({ usedCustomStrategies, existingFeatures, archivedFeatures, }: IWarningParams): ImportTogglesValidateItemSchema[];
7
23
  }
@@ -12,7 +12,7 @@ class ImportValidationMessages {
12
12
  }
13
13
  return errors;
14
14
  }
15
- static compileErrors(projectName, strategies, contextFields, segments, otherProjectFeatures, changeRequestExists) {
15
+ static compileErrors({ projectName, strategies, contextFields, otherProjectFeatures, duplicateFeatures, featureNameCheckResult, featureLimitResult, }) {
16
16
  const errors = [];
17
17
  if (strategies.length > 0) {
18
18
  errors.push({
@@ -26,27 +26,43 @@ class ImportValidationMessages {
26
26
  affectedItems: contextFields.map((contextField) => contextField.name),
27
27
  });
28
28
  }
29
- if (segments.length > 0) {
29
+ if (otherProjectFeatures.length > 0) {
30
30
  errors.push({
31
- message: 'We detected the following segments in the import file that need to be created first:',
32
- affectedItems: segments,
31
+ message: `You cannot import a features that already exist in other projects. You already have the following features defined outside of project ${projectName}:`,
32
+ affectedItems: otherProjectFeatures,
33
33
  });
34
34
  }
35
- if (changeRequestExists) {
35
+ if (duplicateFeatures.length > 0) {
36
36
  errors.push({
37
- message: 'Before importing any data, please resolve your pending change request in this project and environment as it is preventing you from importing at this time',
38
- affectedItems: [],
37
+ message: 'We detected the following features are duplicate in your import data:',
38
+ affectedItems: duplicateFeatures,
39
39
  });
40
40
  }
41
- if (otherProjectFeatures.length > 0) {
41
+ if (featureNameCheckResult.state === 'invalid') {
42
+ const baseError = `Features imported into this project must match the project's feature naming pattern: "${featureNameCheckResult.featureNaming.pattern}".`;
43
+ const exampleInfo = featureNameCheckResult.featureNaming.example
44
+ ? ` For example: "${featureNameCheckResult.featureNaming.example}".`
45
+ : '';
46
+ const descriptionInfo = featureNameCheckResult.featureNaming
47
+ .description
48
+ ? ` The pattern is described as follows: "${featureNameCheckResult.featureNaming.description}"`
49
+ : '';
42
50
  errors.push({
43
- message: `You cannot import a features that already exist in other projects. You already have the following features defined outside of project ${projectName}:`,
44
- affectedItems: otherProjectFeatures,
51
+ message: `${baseError}${exampleInfo}${descriptionInfo} The following features do not match the pattern:`,
52
+ affectedItems: [...featureNameCheckResult.invalidNames].sort(),
53
+ });
54
+ }
55
+ if (featureLimitResult.currentFeaturesCount +
56
+ featureLimitResult.newFeaturesCount >
57
+ featureLimitResult.limit) {
58
+ errors.push({
59
+ message: `We detected you want to create ${featureLimitResult.newFeaturesCount} new features to a project that already has ${featureLimitResult.currentFeaturesCount} existing features, exceeding the maximum limit of ${featureLimitResult.limit}.`,
60
+ affectedItems: [],
45
61
  });
46
62
  }
47
63
  return errors;
48
64
  }
49
- static compileWarnings(usedCustomStrategies, archivedFeatures, existingFeatures) {
65
+ static compileWarnings({ usedCustomStrategies, existingFeatures, archivedFeatures, }) {
50
66
  const warnings = [];
51
67
  if (usedCustomStrategies.length > 0) {
52
68
  warnings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"import-validation-messages.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-validation-messages.ts"],"names":[],"mappings":";;;AAMA,MAAa,wBAAwB;IACjC,MAAM,CAAC,uBAAuB,CAC1B,kBAA4B;QAE5B,MAAM,MAAM,GAAsC,EAAE,CAAC;QACrD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EACH,wDAAwD;gBAC5D,aAAa,EAAE,kBAAkB;aACpC,CAAC,CAAC;SACN;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,aAAa,CAChB,WAAmB,EACnB,UAAmC,EACnC,aAAiC,EACjC,QAAkB,EAClB,oBAA8B,EAC9B,mBAA4B;QAE5B,MAAM,MAAM,GAAsC,EAAE,CAAC;QAErD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EACH,8FAA8F;gBAClG,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC7D,CAAC,CAAC;SACN;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EACH,yGAAyG;gBAC7G,aAAa,EAAE,aAAa,CAAC,GAAG,CAC5B,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CACtC;aACJ,CAAC,CAAC;SACN;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EACH,sFAAsF;gBAC1F,aAAa,EAAE,QAAQ;aAC1B,CAAC,CAAC;SACN;QACD,IAAI,mBAAmB,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EACH,2JAA2J;gBAC/J,aAAa,EAAE,EAAE;aACpB,CAAC,CAAC;SACN;QACD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC;gBACR,OAAO,EAAE,yIAAyI,WAAW,GAAG;gBAChK,aAAa,EAAE,oBAAoB;aACtC,CAAC,CAAC;SACN;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,eAAe,CAClB,oBAA8B,EAC9B,gBAA0B,EAC1B,gBAA0B;QAE1B,MAAM,QAAQ,GAAsC,EAAE,CAAC;QACvD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACV,OAAO,EACH,6IAA6I;gBACjJ,aAAa,EAAE,oBAAoB;aACtC,CAAC,CAAC;SACN;QACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACV,OAAO,EACH,0HAA0H;gBAC9H,aAAa,EAAE,gBAAgB;aAClC,CAAC,CAAC;SACN;QACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACV,OAAO,EACH,+EAA+E;gBACnF,aAAa,EAAE,gBAAgB;aAClC,CAAC,CAAC;SACN;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AA/FD,4DA+FC"}
1
+ {"version":3,"file":"import-validation-messages.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-validation-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { IFeatureNaming } from '../../types/model';
2
+ export declare const checkFeatureNamingData: (featureNaming: IFeatureNaming) => {
3
+ state: 'valid';
4
+ } | {
5
+ state: 'invalid';
6
+ reasons: [string, ...string[]];
7
+ };
8
+ export declare type FeatureNameCheckResult = {
9
+ state: 'valid';
10
+ } | {
11
+ state: 'invalid';
12
+ invalidNames: Set<string>;
13
+ };
14
+ export declare const checkFeatureFlagNamesAgainstPattern: (featureNames: string[], pattern: string | null | undefined) => FeatureNameCheckResult;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkFeatureFlagNamesAgainstPattern = exports.checkFeatureNamingData = void 0;
4
+ const compileRegex = (pattern) => new RegExp(`^${pattern}$`);
5
+ const disallowedStrings = [' ', '\\t', '\\s', '\\n', '\\r', '\\f', '\\v'];
6
+ // Helper functions for error messages
7
+ const whitespaceError = (pattern) => `Feature flag names cannot contain whitespace. You've provided a feature flag naming pattern that contains a whitespace character: "${pattern}". Remove any whitespace characters from your pattern.`;
8
+ const exampleMismatchError = (example, pattern) => `You've provided a feature flag naming example ("${example}") that doesn't match your feature flag naming pattern ("${pattern}").`;
9
+ const invalidValueError = (valueName) => `You've provided a feature flag naming ${valueName}, but no feature flag naming pattern. You must specify a pattern to use a ${valueName}.`;
10
+ const checkFeatureNamingData = (featureNaming) => {
11
+ const { pattern, example, description } = featureNaming;
12
+ const errors = [];
13
+ if (disallowedStrings.some((str) => pattern?.includes(str))) {
14
+ errors.push(whitespaceError(pattern));
15
+ }
16
+ else if (pattern && example && !compileRegex(pattern).test(example)) {
17
+ errors.push(exampleMismatchError(example, pattern));
18
+ }
19
+ if (!pattern && example) {
20
+ errors.push(invalidValueError('example'));
21
+ }
22
+ if (!pattern && description) {
23
+ errors.push(invalidValueError('description'));
24
+ }
25
+ const [first, ...rest] = errors;
26
+ if (first) {
27
+ return { state: 'invalid', reasons: [first, ...rest] };
28
+ }
29
+ return { state: 'valid' };
30
+ };
31
+ exports.checkFeatureNamingData = checkFeatureNamingData;
32
+ const checkFeatureFlagNamesAgainstPattern = (featureNames, pattern) => {
33
+ if (pattern) {
34
+ const regex = compileRegex(pattern);
35
+ const mismatchedNames = featureNames.filter((name) => !regex.test(name));
36
+ if (mismatchedNames.length > 0) {
37
+ return {
38
+ state: 'invalid',
39
+ invalidNames: new Set(mismatchedNames),
40
+ };
41
+ }
42
+ }
43
+ return { state: 'valid' };
44
+ };
45
+ exports.checkFeatureFlagNamesAgainstPattern = checkFeatureFlagNamesAgainstPattern;
46
+ //# sourceMappingURL=feature-naming-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-naming-validation.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-naming-pattern/feature-naming-validation.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE1E,sCAAsC;AACtC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CACxC,sIAAsI,OAAO,wDAAwD,CAAC;AAE1M,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAC9D,mDAAmD,OAAO,4DAA4D,OAAO,KAAK,CAAC;AAEvI,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC5C,yCAAyC,SAAS,6EAA6E,SAAS,GAAG,CAAC;AAEzI,MAAM,sBAAsB,GAAG,CAClC,aAA6B,EAG0B,EAAE;IACzD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QACzD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAiB,CAAC,CAAC,CAAC;KACnD;SAAM,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACnE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;KACvD;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;KAC7C;IAED,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE;QACzB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;KACjD;IAED,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IAChC,IAAI,KAAK,EAAE;QACP,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;KAC1D;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC;AA5BW,QAAA,sBAAsB,0BA4BjC;AASK,MAAM,mCAAmC,GAAG,CAC/C,YAAsB,EACtB,OAAkC,EACZ,EAAE;IACxB,IAAI,OAAO,EAAE;QACT,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO;gBACH,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC;aACzC,CAAC;SACL;KACJ;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC;AAlBW,QAAA,mCAAmC,uCAkB9C"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const feature_naming_validation_1 = require("./feature-naming-validation");
4
+ describe('validate incoming feature naming data', () => {
5
+ test('patterns with leading ^ and trailing $ are treated the same as without', () => {
6
+ const basePattern = '[a-z]+';
7
+ const leading = `^${basePattern}`;
8
+ const trailing = `${basePattern}$`;
9
+ const leadingAndTrailing = `^${basePattern}$`;
10
+ const allPatterns = [
11
+ basePattern,
12
+ leading,
13
+ trailing,
14
+ leadingAndTrailing,
15
+ ];
16
+ const invalidExamples = ['-name-', 'name-', '-name'];
17
+ const validExample = 'justalpha';
18
+ for (const pattern of allPatterns) {
19
+ for (const example of invalidExamples) {
20
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({ pattern, example })).toMatchObject({
21
+ state: 'invalid',
22
+ });
23
+ }
24
+ const validData = {
25
+ pattern,
26
+ example: validExample,
27
+ };
28
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)(validData)).toMatchObject({
29
+ state: 'valid',
30
+ });
31
+ }
32
+ });
33
+ test('pattern examples are tested against the pattern as if it were surrounded by ^ and $', () => {
34
+ const pattern = '-[0-9]+';
35
+ const validExample = '-23';
36
+ const invalidExample1 = 'feat-15';
37
+ const invalidExample2 = '-15-';
38
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({
39
+ pattern,
40
+ example: validExample,
41
+ })).toMatchObject({ state: 'valid' });
42
+ for (const example of [invalidExample1, invalidExample2]) {
43
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({
44
+ pattern,
45
+ example,
46
+ })).toMatchObject({ state: 'invalid' });
47
+ }
48
+ });
49
+ test.each([' ', '\\t', '\\n'])('patterns with illegal characters (%s) are invalid', (string) => {
50
+ const pattern = `-${string}[0-9]+`;
51
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({
52
+ pattern,
53
+ })).toMatchObject({ state: 'invalid' });
54
+ });
55
+ test('feature naming data with a non-empty example but an empty pattern is invalid', () => {
56
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({
57
+ pattern: '',
58
+ example: 'example',
59
+ })).toMatchObject({ state: 'invalid' });
60
+ });
61
+ test('feature naming data with a non-empty description but an empty pattern is invalid', () => {
62
+ expect((0, feature_naming_validation_1.checkFeatureNamingData)({
63
+ pattern: '',
64
+ description: 'description',
65
+ })).toMatchObject({ state: 'invalid' });
66
+ });
67
+ test('if the pattern contains disallowed characters, a match is not attempted against the example', () => {
68
+ const result = (0, feature_naming_validation_1.checkFeatureNamingData)({
69
+ pattern: 'a. [0-9]+',
70
+ example: 'obviously-not-a-match',
71
+ });
72
+ if (result.state === 'valid') {
73
+ fail('Expected invalid result');
74
+ }
75
+ expect(result.reasons.length).toBe(1);
76
+ });
77
+ });
78
+ describe('validate feature flag names against a pattern', () => {
79
+ test('should validate names against a pattern', async () => {
80
+ const featureNaming = {
81
+ pattern: 'testpattern.+',
82
+ example: 'testpattern-one!',
83
+ description: 'naming description',
84
+ };
85
+ const validFeatures = ['testpattern-feature', 'testpattern-feature2'];
86
+ const invalidFeatures = ['a', 'b', 'c'];
87
+ const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)([...validFeatures, ...invalidFeatures], featureNaming.pattern);
88
+ expect(result).toMatchObject({
89
+ state: 'invalid',
90
+ invalidNames: new Set(invalidFeatures),
91
+ });
92
+ const validResult = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(validFeatures, featureNaming.pattern);
93
+ expect(validResult).toMatchObject({ state: 'valid' });
94
+ });
95
+ test.each([null, undefined, ''])('should not validate names if the pattern is %s', (pattern) => {
96
+ const featureNaming = {
97
+ pattern,
98
+ };
99
+ const features = ['a', 'b'];
100
+ const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(features, featureNaming.pattern);
101
+ expect(result).toMatchObject({ state: 'valid' });
102
+ });
103
+ test('should validate names as if the pattern is surrounded by ^ and $.', async () => {
104
+ const pattern = '-[0-9]+';
105
+ const featureNaming = {
106
+ pattern,
107
+ };
108
+ const features = ['a-95', '-95-', 'b-52-z'];
109
+ const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(features, featureNaming.pattern);
110
+ expect(result).toMatchObject({
111
+ state: 'invalid',
112
+ invalidNames: new Set(features),
113
+ });
114
+ });
115
+ });
116
+ //# sourceMappingURL=feature-naming-validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-naming-validation.test.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-naming-pattern/feature-naming-validation.test.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,9 @@ const fake_environment_store_1 = __importDefault(require("../../../test/fixtures
33
33
  const event_store_1 = __importDefault(require("../../db/event-store"));
34
34
  const createChangeRequestAccessReadModel_1 = require("../change-request-access-service/createChangeRequestAccessReadModel");
35
35
  const createSegmentService_1 = require("../segment/createSegmentService");
36
+ const strategy_store_1 = __importDefault(require("../../db/strategy-store"));
37
+ const fake_strategies_store_1 = __importDefault(require("../../../test/fixtures/fake-strategies-store"));
38
+ const createPrivateProjectChecker_1 = require("../private-project/createPrivateProjectChecker");
36
39
  const createFeatureToggleService = (db, config) => {
37
40
  const { getLogger, eventBus, flagResolver } = config;
38
41
  const featureStrategiesStore = new feature_strategy_store_1.default(db, eventBus, getLogger, flagResolver);
@@ -43,6 +46,7 @@ const createFeatureToggleService = (db, config) => {
43
46
  const featureEnvironmentStore = new feature_environment_store_1.FeatureEnvironmentStore(db, eventBus, getLogger);
44
47
  const contextFieldStore = new context_field_store_1.default(db, getLogger, flagResolver);
45
48
  const groupStore = new group_store_1.default(db);
49
+ const strategyStore = new strategy_store_1.default(db, getLogger);
46
50
  const accountStore = new account_store_1.AccountStore(db, getLogger);
47
51
  const accessStore = new access_store_1.AccessStore(db, eventBus, getLogger);
48
52
  const roleStore = new role_store_1.default(db, eventBus, getLogger);
@@ -52,6 +56,7 @@ const createFeatureToggleService = (db, config) => {
52
56
  const accessService = new services_1.AccessService({ accessStore, accountStore, roleStore, environmentStore, groupStore }, { getLogger, flagResolver }, groupService);
53
57
  const segmentService = (0, createSegmentService_1.createSegmentService)(db, config);
54
58
  const changeRequestAccessReadModel = (0, createChangeRequestAccessReadModel_1.createChangeRequestAccessReadModel)(db, config);
59
+ const privateProjectChecker = (0, createPrivateProjectChecker_1.createPrivateProjectChecker)(db, config);
55
60
  const featureToggleService = new services_1.FeatureToggleService({
56
61
  featureStrategiesStore,
57
62
  featureToggleStore,
@@ -61,13 +66,15 @@ const createFeatureToggleService = (db, config) => {
61
66
  featureTagStore,
62
67
  featureEnvironmentStore,
63
68
  contextFieldStore,
64
- }, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel);
69
+ strategyStore,
70
+ }, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel, privateProjectChecker);
65
71
  return featureToggleService;
66
72
  };
67
73
  exports.createFeatureToggleService = createFeatureToggleService;
68
74
  const createFakeFeatureToggleService = (config) => {
69
75
  const { getLogger, flagResolver } = config;
70
76
  const eventStore = new fake_event_store_1.default();
77
+ const strategyStore = new fake_strategies_store_1.default();
71
78
  const featureStrategiesStore = new fake_feature_strategies_store_1.default();
72
79
  const featureToggleStore = new fake_feature_toggle_store_1.default();
73
80
  const featureToggleClientStore = new fake_feature_toggle_client_store_1.default();
@@ -84,6 +91,7 @@ const createFakeFeatureToggleService = (config) => {
84
91
  const accessService = new services_1.AccessService({ accessStore, accountStore, roleStore, environmentStore, groupStore }, { getLogger, flagResolver }, groupService);
85
92
  const segmentService = (0, createSegmentService_1.createFakeSegmentService)(config);
86
93
  const changeRequestAccessReadModel = (0, createChangeRequestAccessReadModel_1.createFakeChangeRequestAccessService)();
94
+ const fakeprivateProjectChecker = (0, createPrivateProjectChecker_1.createFakePrivateProjectChecker)();
87
95
  const featureToggleService = new services_1.FeatureToggleService({
88
96
  featureStrategiesStore,
89
97
  featureToggleStore,
@@ -93,7 +101,8 @@ const createFakeFeatureToggleService = (config) => {
93
101
  featureTagStore,
94
102
  featureEnvironmentStore,
95
103
  contextFieldStore,
96
- }, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel);
104
+ strategyStore,
105
+ }, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel, fakeprivateProjectChecker);
97
106
  return featureToggleService;
98
107
  };
99
108
  exports.createFakeFeatureToggleService = createFakeFeatureToggleService;
@@ -1 +1 @@
1
- {"version":3,"file":"createFeatureToggleService.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-toggle/createFeatureToggleService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createFeatureToggleService.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-toggle/createFeatureToggleService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Db } from 'lib/server-impl';
2
+ export declare type GetActiveUsers = () => Promise<{
3
+ last7: number;
4
+ last30: number;
5
+ last60: number;
6
+ last90: number;
7
+ }>;
8
+ export declare const createGetActiveUsers: (db: Db) => GetActiveUsers;
9
+ export declare const createFakeGetActiveUsers: (activeUsers?: Awaited<ReturnType<GetActiveUsers>>) => GetActiveUsers;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const getActiveUsers_1 = require("./getActiveUsers");
7
+ const database_init_1 = __importDefault(require("../../../test/e2e/helpers/database-init"));
8
+ const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
9
+ let db;
10
+ let getActiveUsers;
11
+ const mockUserDaysAgo = (days) => {
12
+ const result = new Date();
13
+ result.setDate(result.getDate() - days);
14
+ return {
15
+ email: `${days}.user@example.com`,
16
+ seen_at: result,
17
+ };
18
+ };
19
+ const mockTokenDaysAgo = (userId, days) => {
20
+ const result = new Date();
21
+ result.setDate(result.getDate() - days);
22
+ return {
23
+ user_id: userId,
24
+ seen_at: result,
25
+ secret: 'secret',
26
+ expires_at: new Date('2031-12-31'),
27
+ };
28
+ };
29
+ beforeAll(async () => {
30
+ db = await (0, database_init_1.default)('active_users_serial', no_logger_1.default);
31
+ getActiveUsers = (0, getActiveUsers_1.createGetActiveUsers)(db.rawDatabase);
32
+ });
33
+ afterEach(async () => {
34
+ await db.rawDatabase('users').delete();
35
+ await db.rawDatabase('personal_access_tokens').delete();
36
+ });
37
+ afterAll(async () => {
38
+ await db.destroy();
39
+ });
40
+ test('should return 0 users', async () => {
41
+ expect(getActiveUsers()).resolves.toEqual({
42
+ last7: 0,
43
+ last30: 0,
44
+ last60: 0,
45
+ last90: 0,
46
+ });
47
+ });
48
+ test('should return 1 user', async () => {
49
+ await db.rawDatabase('users').insert(mockUserDaysAgo(1));
50
+ expect(getActiveUsers()).resolves.toEqual({
51
+ last7: 1,
52
+ last30: 1,
53
+ last60: 1,
54
+ last90: 1,
55
+ });
56
+ });
57
+ test('should handle intervals of activity', async () => {
58
+ await db
59
+ .rawDatabase('users')
60
+ .insert([
61
+ mockUserDaysAgo(5),
62
+ mockUserDaysAgo(10),
63
+ mockUserDaysAgo(20),
64
+ mockUserDaysAgo(40),
65
+ mockUserDaysAgo(70),
66
+ mockUserDaysAgo(100),
67
+ ]);
68
+ expect(getActiveUsers()).resolves.toEqual({
69
+ last7: 1,
70
+ last30: 3,
71
+ last60: 4,
72
+ last90: 5,
73
+ });
74
+ });
75
+ test('should count user as active if they have an active token', async () => {
76
+ const users = await db
77
+ .rawDatabase('users')
78
+ .insert(mockUserDaysAgo(100))
79
+ .returning('id');
80
+ const userId = users[0].id;
81
+ await db
82
+ .rawDatabase('personal_access_tokens')
83
+ .insert(mockTokenDaysAgo(userId, 31));
84
+ expect(getActiveUsers()).resolves.toEqual({
85
+ last7: 0,
86
+ last30: 0,
87
+ last60: 1,
88
+ last90: 1,
89
+ });
90
+ });
91
+ test('should prioritize user seen_at if newer then token seen_at', async () => {
92
+ const users = await db
93
+ .rawDatabase('users')
94
+ .insert(mockUserDaysAgo(14))
95
+ .returning('id');
96
+ const userId = users[0].id;
97
+ await db
98
+ .rawDatabase('personal_access_tokens')
99
+ .insert([
100
+ mockTokenDaysAgo(userId, 31),
101
+ mockTokenDaysAgo(userId, 61),
102
+ mockTokenDaysAgo(userId, 91),
103
+ ]);
104
+ expect(getActiveUsers()).resolves.toEqual({
105
+ last7: 0,
106
+ last30: 1,
107
+ last60: 1,
108
+ last90: 1,
109
+ });
110
+ });
111
+ test('should handle multiple users and with multiple tokens', async () => {
112
+ const users = await db
113
+ .rawDatabase('users')
114
+ .insert([
115
+ mockUserDaysAgo(5),
116
+ mockUserDaysAgo(10),
117
+ mockUserDaysAgo(20),
118
+ mockUserDaysAgo(40),
119
+ mockUserDaysAgo(70),
120
+ mockUserDaysAgo(100),
121
+ ])
122
+ .returning('id');
123
+ await db
124
+ .rawDatabase('personal_access_tokens')
125
+ .insert([
126
+ mockTokenDaysAgo(users[0].id, 31),
127
+ mockTokenDaysAgo(users[1].id, 61),
128
+ mockTokenDaysAgo(users[1].id, 15),
129
+ mockTokenDaysAgo(users[1].id, 55),
130
+ mockTokenDaysAgo(users[2].id, 4),
131
+ mockTokenDaysAgo(users[3].id, 91),
132
+ mockTokenDaysAgo(users[4].id, 91),
133
+ ]);
134
+ expect(getActiveUsers()).resolves.toEqual({
135
+ last7: 2,
136
+ last30: 3,
137
+ last60: 4,
138
+ last90: 5,
139
+ });
140
+ });
141
+ //# sourceMappingURL=getActiveUsers.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getActiveUsers.e2e.test.js","sourceRoot":"","sources":["../../../../src/lib/features/instance-stats/getActiveUsers.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFakeGetActiveUsers = exports.createGetActiveUsers = void 0;
4
+ const createGetActiveUsers = (db) => async () => {
5
+ const combinedQuery = db
6
+ .select('id as user_id', 'seen_at')
7
+ .from('users')
8
+ .unionAll(db.select('user_id', 'seen_at').from('personal_access_tokens'));
9
+ const result = await db
10
+ .with('Combined', combinedQuery)
11
+ .select({
12
+ last_week: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '1 week' THEN user_id END)"),
13
+ last_month: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '1 month' THEN user_id END)"),
14
+ last_two_months: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '2 months' THEN user_id END)"),
15
+ last_quarter: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '3 months' THEN user_id END)"),
16
+ })
17
+ .from('Combined');
18
+ return {
19
+ last7: parseInt(result?.[0]?.last_week || '0', 10),
20
+ last30: parseInt(result?.[0]?.last_month || '0', 10),
21
+ last60: parseInt(result?.[0]?.last_two_months || '0', 10),
22
+ last90: parseInt(result?.[0]?.last_quarter || '0', 10),
23
+ };
24
+ };
25
+ exports.createGetActiveUsers = createGetActiveUsers;
26
+ const createFakeGetActiveUsers = (activeUsers = {
27
+ last7: 0,
28
+ last30: 0,
29
+ last60: 0,
30
+ last90: 0,
31
+ }) => () => Promise.resolve(activeUsers);
32
+ exports.createFakeGetActiveUsers = createFakeGetActiveUsers;
33
+ //# sourceMappingURL=getActiveUsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getActiveUsers.js","sourceRoot":"","sources":["../../../../src/lib/features/instance-stats/getActiveUsers.ts"],"names":[],"mappings":";;;AASO,MAAM,oBAAoB,GAC7B,CAAC,EAAM,EAAkB,EAAE,CAC3B,KAAK,IAAI,EAAE;IACP,MAAM,aAAa,GAAG,EAAE;SACnB,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;SAClC,IAAI,CAAC,OAAO,CAAC;SACb,QAAQ,CACL,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CACjE,CAAC;IAEN,MAAM,MAAM,GAAG,MAAM,EAAE;SAClB,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC;QACJ,SAAS,EAAE,EAAE,CAAC,GAAG,CACb,gFAAgF,CACnF;QACD,UAAU,EAAE,EAAE,CAAC,GAAG,CACd,iFAAiF,CACpF;QACD,eAAe,EAAE,EAAE,CAAC,GAAG,CACnB,kFAAkF,CACrF;QACD,YAAY,EAAE,EAAE,CAAC,GAAG,CAChB,kFAAkF,CACrF;KACJ,CAAC;SACD,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtB,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,GAAG,EAAE,EAAE,CAAC;QACpD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,GAAG,EAAE,EAAE,CAAC;KACzD,CAAC;AACN,CAAC,CAAC;AAlCO,QAAA,oBAAoB,wBAkC3B;AAEC,MAAM,wBAAwB,GACjC,CACI,cAAmD;IAC/C,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;CACZ,EACa,EAAE,CACpB,GAAG,EAAE,CACD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAVxB,QAAA,wBAAwB,4BAUA"}