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
@@ -14,5 +14,6 @@ import RoleInUseError from './role-in-use-error';
14
14
  import ProjectWithoutOwnerError from './project-without-owner-error';
15
15
  import PasswordUndefinedError from './password-undefined';
16
16
  import PasswordMismatchError from './password-mismatch';
17
+ import PatternError from './pattern-error';
17
18
  import ForbiddenError from './forbidden-error';
18
- export { BadDataError, UNIQUE_CONSTRAINT_VIOLATION, FOREIGN_KEY_VIOLATION, DisabledError, FeatureHasTagError, IncompatibleProjectError, InvalidOperationError, InvalidTokenError, MinimumOneEnvironmentError, NameExistsError, PermissionError, ForbiddenError, OperationDeniedError, UserTokenError, RoleInUseError, ProjectWithoutOwnerError, PasswordUndefinedError, PasswordMismatchError, };
19
+ export { BadDataError, UNIQUE_CONSTRAINT_VIOLATION, FOREIGN_KEY_VIOLATION, DisabledError, FeatureHasTagError, IncompatibleProjectError, InvalidOperationError, InvalidTokenError, MinimumOneEnvironmentError, NameExistsError, PermissionError, ForbiddenError, OperationDeniedError, UserTokenError, RoleInUseError, ProjectWithoutOwnerError, PasswordUndefinedError, PatternError, PasswordMismatchError, };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PasswordMismatchError = exports.PasswordUndefinedError = exports.ProjectWithoutOwnerError = exports.RoleInUseError = exports.UserTokenError = exports.OperationDeniedError = exports.ForbiddenError = exports.PermissionError = exports.NameExistsError = exports.MinimumOneEnvironmentError = exports.InvalidTokenError = exports.InvalidOperationError = exports.IncompatibleProjectError = exports.FeatureHasTagError = exports.DisabledError = exports.FOREIGN_KEY_VIOLATION = exports.UNIQUE_CONSTRAINT_VIOLATION = exports.BadDataError = void 0;
6
+ exports.PasswordMismatchError = exports.PatternError = exports.PasswordUndefinedError = exports.ProjectWithoutOwnerError = exports.RoleInUseError = exports.UserTokenError = exports.OperationDeniedError = exports.ForbiddenError = exports.PermissionError = exports.NameExistsError = exports.MinimumOneEnvironmentError = exports.InvalidTokenError = exports.InvalidOperationError = exports.IncompatibleProjectError = exports.FeatureHasTagError = exports.DisabledError = exports.FOREIGN_KEY_VIOLATION = exports.UNIQUE_CONSTRAINT_VIOLATION = exports.BadDataError = void 0;
7
7
  const bad_data_error_1 = __importDefault(require("./bad-data-error"));
8
8
  exports.BadDataError = bad_data_error_1.default;
9
9
  const db_error_1 = require("./db-error");
@@ -37,6 +37,8 @@ const password_undefined_1 = __importDefault(require("./password-undefined"));
37
37
  exports.PasswordUndefinedError = password_undefined_1.default;
38
38
  const password_mismatch_1 = __importDefault(require("./password-mismatch"));
39
39
  exports.PasswordMismatchError = password_mismatch_1.default;
40
+ const pattern_error_1 = __importDefault(require("./pattern-error"));
41
+ exports.PatternError = pattern_error_1.default;
40
42
  const forbidden_error_1 = __importDefault(require("./forbidden-error"));
41
43
  exports.ForbiddenError = forbidden_error_1.default;
42
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/error/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA4C;AAmBxC,uBAnBG,wBAAY,CAmBH;AAlBhB,yCAAgF;AAmB5E,4GAnBK,sCAA2B,OAmBL;AAC3B,sGApBkC,gCAAqB,OAoBlC;AAnBzB,sEAA6C;AAoBzC,wBApBG,wBAAa,CAoBH;AAnBjB,oFAAyD;AAoBrD,6BApBG,+BAAkB,CAoBH;AAnBtB,8FAAoE;AAoBhE,mCApBG,oCAAwB,CAoBH;AAnB5B,wFAA8D;AAoB1D,gCApBG,iCAAqB,CAoBH;AAnBzB,gFAAsD;AAoBlD,4BApBG,6BAAiB,CAoBH;AAnBrB,oGAAyE;AAoBrE,qCApBG,uCAA0B,CAoBH;AAnB9B,4EAAkD;AAoB9C,0BApBG,2BAAe,CAoBH;AAnBnB,0EAAiD;AAoB7C,0BApBG,0BAAe,CAoBH;AAnBnB,qEAAgE;AAqB5D,qGArBK,6CAAoB,OAqBL;AApBxB,0EAAgD;AAqB5C,yBArBG,0BAAc,CAqBH;AApBlB,4EAAiD;AAqB7C,yBArBG,2BAAc,CAqBH;AApBlB,gGAAqE;AAqBjE,mCArBG,qCAAwB,CAqBH;AApB5B,8EAA0D;AAqBtD,iCArBG,4BAAsB,CAqBH;AApB1B,4EAAwD;AAqBpD,gCArBG,2BAAqB,CAqBH;AApBzB,wEAA+C;AAc3C,yBAdG,yBAAc,CAcH"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/error/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA4C;AAoBxC,uBApBG,wBAAY,CAoBH;AAnBhB,yCAAgF;AAoB5E,4GApBK,sCAA2B,OAoBL;AAC3B,sGArBkC,gCAAqB,OAqBlC;AApBzB,sEAA6C;AAqBzC,wBArBG,wBAAa,CAqBH;AApBjB,oFAAyD;AAqBrD,6BArBG,+BAAkB,CAqBH;AApBtB,8FAAoE;AAqBhE,mCArBG,oCAAwB,CAqBH;AApB5B,wFAA8D;AAqB1D,gCArBG,iCAAqB,CAqBH;AApBzB,gFAAsD;AAqBlD,4BArBG,6BAAiB,CAqBH;AApBrB,oGAAyE;AAqBrE,qCArBG,uCAA0B,CAqBH;AApB9B,4EAAkD;AAqB9C,0BArBG,2BAAe,CAqBH;AApBnB,0EAAiD;AAqB7C,0BArBG,0BAAe,CAqBH;AApBnB,qEAAgE;AAsB5D,qGAtBK,6CAAoB,OAsBL;AArBxB,0EAAgD;AAsB5C,yBAtBG,0BAAc,CAsBH;AArBlB,4EAAiD;AAsB7C,yBAtBG,2BAAc,CAsBH;AArBlB,gGAAqE;AAsBjE,mCAtBG,qCAAwB,CAsBH;AArB5B,8EAA0D;AAsBtD,iCAtBG,4BAAsB,CAsBH;AArB1B,4EAAwD;AAuBpD,gCAvBG,2BAAqB,CAuBH;AAtBzB,oEAA2C;AAqBvC,uBArBG,uBAAY,CAqBH;AApBhB,wEAA+C;AAc3C,yBAdG,yBAAc,CAcH"}
@@ -0,0 +1,10 @@
1
+ import { ApiErrorSchema, UnleashError } from './unleash-error';
2
+ declare class PatternError extends UnleashError {
3
+ statusCode: number;
4
+ details?: {
5
+ message: string;
6
+ }[];
7
+ constructor(message: string, details?: string[]);
8
+ toJSON(): ApiErrorSchema;
9
+ }
10
+ export default PatternError;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const unleash_error_1 = require("./unleash-error");
4
+ class PatternError extends unleash_error_1.UnleashError {
5
+ constructor(message, details) {
6
+ super(message);
7
+ this.statusCode = 400;
8
+ this.details = details?.map((description) => ({
9
+ message: description,
10
+ }));
11
+ }
12
+ toJSON() {
13
+ return {
14
+ ...super.toJSON(),
15
+ details: this.details,
16
+ };
17
+ }
18
+ }
19
+ exports.default = PatternError;
20
+ //# sourceMappingURL=pattern-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-error.js","sourceRoot":"","sources":["../../../src/lib/error/pattern-error.ts"],"names":[],"mappings":";;AAAA,mDAA+D;AAE/D,MAAM,YAAa,SAAQ,4BAAY;IAKnC,YAAY,OAAe,EAAE,OAAkB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QALnB,eAAU,GAAG,GAAG,CAAC;QAMb,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,EAAE,WAAW;SACvB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,MAAM;QACF,OAAO;YACH,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;IACN,CAAC;CACJ;AAED,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Db } from '../../db/db';
2
+ import { DependentFeaturesService } from './dependent-features-service';
3
+ export declare const createDependentFeaturesService: (db: Db) => DependentFeaturesService;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDependentFeaturesService = void 0;
4
+ const dependent_features_service_1 = require("./dependent-features-service");
5
+ const dependent_features_store_1 = require("./dependent-features-store");
6
+ const createDependentFeaturesService = (db) => {
7
+ const dependentFeaturesStore = new dependent_features_store_1.DependentFeaturesStore(db);
8
+ return new dependent_features_service_1.DependentFeaturesService(dependentFeaturesStore);
9
+ };
10
+ exports.createDependentFeaturesService = createDependentFeaturesService;
11
+ //# sourceMappingURL=createDependentFeaturesService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDependentFeaturesService.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/createDependentFeaturesService.ts"],"names":[],"mappings":";;;AACA,6EAAwE;AACxE,yEAAoE;AAE7D,MAAM,8BAA8B,GAAG,CAC1C,EAAM,EACkB,EAAE;IAC1B,MAAM,sBAAsB,GAAG,IAAI,iDAAsB,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI,qDAAwB,CAAC,sBAAsB,CAAC,CAAC;AAChE,CAAC,CAAC;AALW,QAAA,8BAA8B,kCAKzC"}
@@ -0,0 +1,28 @@
1
+ import { Response } from 'express';
2
+ import Controller from '../../routes/controller';
3
+ import { IUnleashConfig, IUnleashServices } from '../../types';
4
+ import { CreateDependentFeatureSchema, ParentFeatureOptionsSchema } from '../../openapi';
5
+ import { IAuthRequest } from '../../routes/unleash-types';
6
+ import { TransactionCreator, UnleashTransaction } from '../../db/transaction';
7
+ interface FeatureParams {
8
+ child: string;
9
+ }
10
+ interface DeleteDependencyParams {
11
+ child: string;
12
+ parent: string;
13
+ }
14
+ declare type DependentFeaturesServices = Pick<IUnleashServices, 'transactionalDependentFeaturesService' | 'dependentFeaturesService' | 'openApiService'>;
15
+ export default class DependentFeaturesController extends Controller {
16
+ private transactionalDependentFeaturesService;
17
+ private dependentFeaturesService;
18
+ private readonly startTransaction;
19
+ private openApiService;
20
+ private flagResolver;
21
+ private readonly logger;
22
+ constructor(config: IUnleashConfig, { transactionalDependentFeaturesService, dependentFeaturesService, openApiService, }: DependentFeaturesServices, startTransaction: TransactionCreator<UnleashTransaction>);
23
+ addFeatureDependency(req: IAuthRequest<FeatureParams, any, CreateDependentFeatureSchema>, res: Response): Promise<void>;
24
+ deleteFeatureDependency(req: IAuthRequest<DeleteDependencyParams, any, any>, res: Response): Promise<void>;
25
+ deleteFeatureDependencies(req: IAuthRequest<FeatureParams, any, any>, res: Response): Promise<void>;
26
+ getParentOptions(req: IAuthRequest<FeatureParams, any, any>, res: Response<ParentFeatureOptionsSchema>): Promise<void>;
27
+ }
28
+ export {};
@@ -0,0 +1,151 @@
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 controller_1 = __importDefault(require("../../routes/controller"));
7
+ const types_1 = require("../../types");
8
+ const openapi_1 = require("../../openapi");
9
+ const error_1 = require("../../error");
10
+ const PATH = '/:projectId/features';
11
+ const PATH_FEATURE = `${PATH}/:child`;
12
+ const PATH_DEPENDENCIES = `${PATH_FEATURE}/dependencies`;
13
+ const PATH_PARENTS = `${PATH_FEATURE}/parents`;
14
+ const PATH_DEPENDENCY = `${PATH_FEATURE}/dependencies/:parent`;
15
+ class DependentFeaturesController extends controller_1.default {
16
+ constructor(config, { transactionalDependentFeaturesService, dependentFeaturesService, openApiService, }, startTransaction) {
17
+ super(config);
18
+ this.transactionalDependentFeaturesService =
19
+ transactionalDependentFeaturesService;
20
+ this.dependentFeaturesService = dependentFeaturesService;
21
+ this.openApiService = openApiService;
22
+ this.flagResolver = config.flagResolver;
23
+ this.startTransaction = startTransaction;
24
+ this.logger = config.getLogger('/dependent-features/dependent-feature-service.ts');
25
+ this.route({
26
+ method: 'post',
27
+ path: PATH_DEPENDENCIES,
28
+ handler: this.addFeatureDependency,
29
+ permission: types_1.UPDATE_FEATURE,
30
+ middleware: [
31
+ openApiService.validPath({
32
+ tags: ['Features'],
33
+ summary: 'Add a feature dependency.',
34
+ description: 'Add a dependency to a parent feature. Each environment will resolve corresponding dependency independently.',
35
+ operationId: 'addFeatureDependency',
36
+ requestBody: (0, openapi_1.createRequestSchema)('createDependentFeatureSchema'),
37
+ responses: {
38
+ 200: openapi_1.emptyResponse,
39
+ ...(0, openapi_1.getStandardResponses)(401, 403, 404),
40
+ },
41
+ }),
42
+ ],
43
+ });
44
+ this.route({
45
+ method: 'delete',
46
+ path: PATH_DEPENDENCY,
47
+ handler: this.deleteFeatureDependency,
48
+ permission: types_1.UPDATE_FEATURE,
49
+ acceptAnyContentType: true,
50
+ middleware: [
51
+ openApiService.validPath({
52
+ tags: ['Features'],
53
+ summary: 'Deletes a feature dependency.',
54
+ description: 'Remove a dependency to a parent feature.',
55
+ operationId: 'deleteFeatureDependency',
56
+ responses: {
57
+ 200: openapi_1.emptyResponse,
58
+ ...(0, openapi_1.getStandardResponses)(401, 403, 404),
59
+ },
60
+ }),
61
+ ],
62
+ });
63
+ this.route({
64
+ method: 'delete',
65
+ path: PATH_DEPENDENCIES,
66
+ handler: this.deleteFeatureDependencies,
67
+ permission: types_1.UPDATE_FEATURE,
68
+ acceptAnyContentType: true,
69
+ middleware: [
70
+ openApiService.validPath({
71
+ tags: ['Features'],
72
+ summary: 'Deletes feature dependencies.',
73
+ description: 'Remove dependencies to all parent features.',
74
+ operationId: 'deleteFeatureDependencies',
75
+ responses: {
76
+ 200: openapi_1.emptyResponse,
77
+ ...(0, openapi_1.getStandardResponses)(401, 403, 404),
78
+ },
79
+ }),
80
+ ],
81
+ });
82
+ this.route({
83
+ method: 'get',
84
+ path: PATH_PARENTS,
85
+ handler: this.getParentOptions,
86
+ permission: types_1.NONE,
87
+ middleware: [
88
+ openApiService.validPath({
89
+ tags: ['Features'],
90
+ summary: 'List parent options.',
91
+ description: 'List available parents who have no transitive dependencies.',
92
+ operationId: 'listParentOptions',
93
+ responses: {
94
+ 200: (0, openapi_1.createResponseSchema)('parentFeatureOptionsSchema'),
95
+ ...(0, openapi_1.getStandardResponses)(401, 403, 404),
96
+ },
97
+ }),
98
+ ],
99
+ });
100
+ }
101
+ async addFeatureDependency(req, res) {
102
+ const { child } = req.params;
103
+ const { variants, enabled, feature } = req.body;
104
+ if (this.config.flagResolver.isEnabled('dependentFeatures')) {
105
+ await this.startTransaction(async (tx) => this.transactionalDependentFeaturesService(tx).upsertFeatureDependency(child, {
106
+ variants,
107
+ enabled,
108
+ feature,
109
+ }));
110
+ res.status(200).end();
111
+ }
112
+ else {
113
+ throw new error_1.InvalidOperationError('Dependent features are not enabled');
114
+ }
115
+ }
116
+ async deleteFeatureDependency(req, res) {
117
+ const { child, parent } = req.params;
118
+ if (this.config.flagResolver.isEnabled('dependentFeatures')) {
119
+ await this.dependentFeaturesService.deleteFeatureDependency({
120
+ parent,
121
+ child,
122
+ });
123
+ res.status(200).end();
124
+ }
125
+ else {
126
+ throw new error_1.InvalidOperationError('Dependent features are not enabled');
127
+ }
128
+ }
129
+ async deleteFeatureDependencies(req, res) {
130
+ const { child } = req.params;
131
+ if (this.config.flagResolver.isEnabled('dependentFeatures')) {
132
+ await this.dependentFeaturesService.deleteFeatureDependencies(child);
133
+ res.status(200).end();
134
+ }
135
+ else {
136
+ throw new error_1.InvalidOperationError('Dependent features are not enabled');
137
+ }
138
+ }
139
+ async getParentOptions(req, res) {
140
+ const { child } = req.params;
141
+ if (this.config.flagResolver.isEnabled('dependentFeatures')) {
142
+ const parentOptions = await this.dependentFeaturesService.getParentOptions(child);
143
+ res.send(parentOptions);
144
+ }
145
+ else {
146
+ throw new error_1.InvalidOperationError('Dependent features are not enabled');
147
+ }
148
+ }
149
+ }
150
+ exports.default = DependentFeaturesController;
151
+ //# sourceMappingURL=dependent-features-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent-features-controller.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CreateDependentFeatureSchema } from '../../openapi';
2
+ import { IDependentFeaturesStore } from './dependent-features-store-type';
3
+ import { FeatureDependencyId } from './dependent-features';
4
+ export declare class DependentFeaturesService {
5
+ private dependentFeaturesStore;
6
+ constructor(dependentFeaturesStore: IDependentFeaturesStore);
7
+ upsertFeatureDependency(child: string, dependentFeature: CreateDependentFeatureSchema): Promise<void>;
8
+ deleteFeatureDependency(dependency: FeatureDependencyId): Promise<void>;
9
+ deleteFeatureDependencies(feature: string): Promise<void>;
10
+ getParentOptions(feature: string): Promise<string[]>;
11
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependentFeaturesService = void 0;
4
+ const error_1 = require("../../error");
5
+ class DependentFeaturesService {
6
+ constructor(dependentFeaturesStore) {
7
+ this.dependentFeaturesStore = dependentFeaturesStore;
8
+ }
9
+ async upsertFeatureDependency(child, dependentFeature) {
10
+ const { enabled, feature: parent, variants } = dependentFeature;
11
+ const children = await this.dependentFeaturesStore.getChildren(child);
12
+ if (children.length > 0) {
13
+ throw new error_1.InvalidOperationError('Transitive dependency detected. Cannot add a dependency to the feature that other features depend on.');
14
+ }
15
+ const featureDependency = enabled === false
16
+ ? {
17
+ parent,
18
+ child,
19
+ enabled,
20
+ }
21
+ : {
22
+ parent,
23
+ child,
24
+ enabled: true,
25
+ variants,
26
+ };
27
+ await this.dependentFeaturesStore.upsert(featureDependency);
28
+ }
29
+ async deleteFeatureDependency(dependency) {
30
+ await this.dependentFeaturesStore.delete(dependency);
31
+ }
32
+ async deleteFeatureDependencies(feature) {
33
+ await this.dependentFeaturesStore.deleteAll(feature);
34
+ }
35
+ async getParentOptions(feature) {
36
+ return this.dependentFeaturesStore.getParentOptions(feature);
37
+ }
38
+ }
39
+ exports.DependentFeaturesService = DependentFeaturesService;
40
+ //# sourceMappingURL=dependent-features-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent-features-service.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-service.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AAKpD,MAAa,wBAAwB;IAGjC,YAAY,sBAA+C;QACvD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,KAAa,EACb,gBAA8C;QAE9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC;QAEhE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,MAAM,IAAI,6BAAqB,CAC3B,uGAAuG,CAC1G,CAAC;SACL;QAED,MAAM,iBAAiB,GACnB,OAAO,KAAK,KAAK;YACb,CAAC,CAAC;gBACI,MAAM;gBACN,KAAK;gBACL,OAAO;aACV;YACH,CAAC,CAAC;gBACI,MAAM;gBACN,KAAK;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ;aACX,CAAC;QACZ,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,uBAAuB,CACzB,UAA+B;QAE/B,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,OAAe;QAC3C,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;CACJ;AAjDD,4DAiDC"}
@@ -0,0 +1,8 @@
1
+ import { FeatureDependency, FeatureDependencyId } from './dependent-features';
2
+ export interface IDependentFeaturesStore {
3
+ upsert(featureDependency: FeatureDependency): Promise<void>;
4
+ getChildren(parent: string): Promise<string[]>;
5
+ delete(dependency: FeatureDependencyId): Promise<void>;
6
+ deleteAll(child: string): Promise<void>;
7
+ getParentOptions(child: string): Promise<string[]>;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dependent-features-store-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent-features-store-type.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-store-type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Db } from '../../db/db';
2
+ import { IDependentFeaturesStore } from './dependent-features-store-type';
3
+ import { FeatureDependency, FeatureDependencyId } from './dependent-features';
4
+ export declare class DependentFeaturesStore implements IDependentFeaturesStore {
5
+ private db;
6
+ constructor(db: Db);
7
+ upsert(featureDependency: FeatureDependency): Promise<void>;
8
+ getChildren(parent: string): Promise<string[]>;
9
+ getParentOptions(child: string): Promise<string[]>;
10
+ delete(dependency: FeatureDependencyId): Promise<void>;
11
+ deleteAll(feature: string): Promise<void>;
12
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependentFeaturesStore = void 0;
4
+ class DependentFeaturesStore {
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ async upsert(featureDependency) {
9
+ const serializableFeatureDependency = {
10
+ parent: featureDependency.parent,
11
+ child: featureDependency.child,
12
+ enabled: featureDependency.enabled,
13
+ };
14
+ if ('variants' in featureDependency) {
15
+ serializableFeatureDependency.variants = JSON.stringify(featureDependency.variants);
16
+ }
17
+ // TODO: remove when we support multiple parents
18
+ await this.db('dependent_features')
19
+ .where('child', featureDependency.child)
20
+ .del();
21
+ await this.db('dependent_features')
22
+ .insert(serializableFeatureDependency)
23
+ .onConflict(['parent', 'child'])
24
+ .merge();
25
+ }
26
+ async getChildren(parent) {
27
+ const rows = await this.db('dependent_features').where('parent', parent);
28
+ return rows.map((row) => row.child);
29
+ }
30
+ async getParentOptions(child) {
31
+ const result = await this.db('features as f')
32
+ .where('f.name', child)
33
+ .select('f.project');
34
+ if (result.length === 0) {
35
+ return [];
36
+ }
37
+ const rows = await this.db('features as f')
38
+ .leftJoin('dependent_features as df', 'f.name', 'df.child')
39
+ .where('f.project', result[0].project)
40
+ .andWhere('f.name', '!=', child)
41
+ .andWhere('df.child', null)
42
+ .select('f.name');
43
+ return rows.map((item) => item.name);
44
+ }
45
+ async delete(dependency) {
46
+ await this.db('dependent_features')
47
+ .where('parent', dependency.parent)
48
+ .andWhere('child', dependency.child)
49
+ .del();
50
+ }
51
+ async deleteAll(feature) {
52
+ await this.db('dependent_features').andWhere('child', feature).del();
53
+ }
54
+ }
55
+ exports.DependentFeaturesStore = DependentFeaturesStore;
56
+ //# sourceMappingURL=dependent-features-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent-features-store.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features-store.ts"],"names":[],"mappings":";;;AAOA,MAAa,sBAAsB;IAG/B,YAAY,EAAM;QACd,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,iBAAoC;QAC7C,MAAM,6BAA6B,GAAkC;YACjE,MAAM,EAAE,iBAAiB,CAAC,MAAM;YAChC,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,OAAO,EAAE,iBAAiB,CAAC,OAAO;SACrC,CAAC;QACF,IAAI,UAAU,IAAI,iBAAiB,EAAE;YACjC,6BAA6B,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CACnD,iBAAiB,CAAC,QAAQ,CAC7B,CAAC;SACL;QACD,gDAAgD;QAChD,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;aACvC,GAAG,EAAE,CAAC;QAEX,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,MAAM,CAAC,6BAA6B,CAAC;aACrC,UAAU,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAC/B,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAClD,QAAQ,EACR,MAAM,CACT,CAAC;QAEF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;aACxC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;aACtB,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,CAAC;SACb;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC;aACtC,QAAQ,CAAC,0BAA0B,EAAE,QAAQ,EAAE,UAAU,CAAC;aAC1D,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;aACrC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;aAC/B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;aAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA+B;QACxC,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC;aAC9B,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC;aAClC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;aACnC,GAAG,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IACzE,CAAC;CACJ;AAjED,wDAiEC"}
@@ -0,0 +1,14 @@
1
+ export declare type FeatureDependencyId = {
2
+ parent: string;
3
+ child: string;
4
+ };
5
+ export declare type FeatureDependency = {
6
+ parent: string;
7
+ child: string;
8
+ enabled: true;
9
+ variants?: string[];
10
+ } | {
11
+ parent: string;
12
+ child: string;
13
+ enabled: false;
14
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dependent-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent-features.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent-features.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
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 uuid_1 = require("uuid");
7
+ const database_init_1 = __importDefault(require("../../../test/e2e/helpers/database-init"));
8
+ const test_helper_1 = require("../../../test/e2e/helpers/test-helper");
9
+ const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
10
+ let app;
11
+ let db;
12
+ beforeAll(async () => {
13
+ db = await (0, database_init_1.default)('dependent_features', no_logger_1.default);
14
+ app = await (0, test_helper_1.setupAppWithCustomConfig)(db.stores, {
15
+ experimental: {
16
+ flags: {
17
+ strictSchemaValidation: true,
18
+ dependentFeatures: true,
19
+ },
20
+ },
21
+ }, db.rawDatabase);
22
+ });
23
+ afterAll(async () => {
24
+ await app.destroy();
25
+ await db.destroy();
26
+ });
27
+ const addFeatureDependency = async (childFeature, payload, expectedCode = 200) => {
28
+ return app.request
29
+ .post(`/api/admin/projects/default/features/${childFeature}/dependencies`)
30
+ .send(payload)
31
+ .expect(expectedCode);
32
+ };
33
+ const deleteFeatureDependency = async (childFeature, parentFeature, expectedCode = 200) => {
34
+ return app.request
35
+ .delete(`/api/admin/projects/default/features/${childFeature}/dependencies/${parentFeature}`)
36
+ .expect(expectedCode);
37
+ };
38
+ const deleteFeatureDependencies = async (childFeature, expectedCode = 200) => {
39
+ return app.request
40
+ .delete(`/api/admin/projects/default/features/${childFeature}/dependencies`)
41
+ .expect(expectedCode);
42
+ };
43
+ const getParentOptions = async (childFeature, expectedCode = 200) => {
44
+ return app.request
45
+ .get(`/api/admin/projects/default/features/${childFeature}/parents`)
46
+ .expect(expectedCode);
47
+ };
48
+ test('should add and delete feature dependencies', async () => {
49
+ const parent = (0, uuid_1.v4)();
50
+ const child = (0, uuid_1.v4)();
51
+ await app.createFeature(parent);
52
+ await app.createFeature(child);
53
+ const { body: parentOptions } = await getParentOptions(child);
54
+ expect(parentOptions).toStrictEqual([parent]);
55
+ // save explicit enabled and variants
56
+ await addFeatureDependency(child, {
57
+ feature: parent,
58
+ enabled: false,
59
+ });
60
+ // overwrite with implicit enabled: true and variants
61
+ await addFeatureDependency(child, {
62
+ feature: parent,
63
+ variants: ['variantB'],
64
+ });
65
+ await deleteFeatureDependency(child, parent); // single
66
+ await deleteFeatureDependencies(child); // all
67
+ });
68
+ test('should not allow to add a parent dependency to a feature that already has children', async () => {
69
+ const grandparent = (0, uuid_1.v4)();
70
+ const parent = (0, uuid_1.v4)();
71
+ const child = (0, uuid_1.v4)();
72
+ await app.createFeature(grandparent);
73
+ await app.createFeature(parent);
74
+ await app.createFeature(child);
75
+ await addFeatureDependency(child, {
76
+ feature: parent,
77
+ });
78
+ await addFeatureDependency(parent, {
79
+ feature: grandparent,
80
+ }, 403);
81
+ });
82
+ //# sourceMappingURL=dependent.features.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependent.features.e2e.test.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/dependent.features.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { IDependentFeaturesStore } from './dependent-features-store-type';
2
+ export declare class FakeDependentFeaturesStore implements IDependentFeaturesStore {
3
+ upsert(): Promise<void>;
4
+ getChildren(): Promise<string[]>;
5
+ getParentOptions(): Promise<string[]>;
6
+ delete(): Promise<void>;
7
+ deleteAll(): Promise<void>;
8
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FakeDependentFeaturesStore = void 0;
4
+ class FakeDependentFeaturesStore {
5
+ async upsert() {
6
+ return Promise.resolve();
7
+ }
8
+ getChildren() {
9
+ return Promise.resolve([]);
10
+ }
11
+ getParentOptions() {
12
+ return Promise.resolve([]);
13
+ }
14
+ delete() {
15
+ return Promise.resolve();
16
+ }
17
+ deleteAll() {
18
+ return Promise.resolve();
19
+ }
20
+ }
21
+ exports.FakeDependentFeaturesStore = FakeDependentFeaturesStore;
22
+ //# sourceMappingURL=fake-dependent-features-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-dependent-features-store.js","sourceRoot":"","sources":["../../../../src/lib/features/dependent-features/fake-dependent-features-store.ts"],"names":[],"mappings":";;;AAEA,MAAa,0BAA0B;IACnC,KAAK,CAAC,MAAM;QACR,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW;QACP,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS;QACL,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ;AApBD,gEAoBC"}