unleash-server 5.7.2 → 5.8.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 (788) hide show
  1. package/dist/lib/addons/datadog-definition.js +1 -1
  2. package/dist/lib/addons/datadog-definition.js.map +1 -1
  3. package/dist/lib/addons/datadog.test.js +7 -0
  4. package/dist/lib/addons/datadog.test.js.map +1 -1
  5. package/dist/lib/addons/feature-event-formatter-md.test.js +16 -0
  6. package/dist/lib/addons/feature-event-formatter-md.test.js.map +1 -1
  7. package/dist/lib/addons/slack-app.test.js +2 -0
  8. package/dist/lib/addons/slack-app.test.js.map +1 -1
  9. package/dist/lib/addons/slack.test.js +9 -0
  10. package/dist/lib/addons/slack.test.js.map +1 -1
  11. package/dist/lib/addons/teams.test.js +6 -0
  12. package/dist/lib/addons/teams.test.js.map +1 -1
  13. package/dist/lib/addons/webhook.test.js +5 -0
  14. package/dist/lib/addons/webhook.test.js.map +1 -1
  15. package/dist/lib/app.js +4 -3
  16. package/dist/lib/app.js.map +1 -1
  17. package/dist/lib/app.test.js +38 -0
  18. package/dist/lib/app.test.js.map +1 -1
  19. package/dist/lib/create-config.d.ts.map +1 -1
  20. package/dist/lib/create-config.js +3 -0
  21. package/dist/lib/create-config.js.map +1 -1
  22. package/dist/lib/db/access-store.d.ts.map +1 -1
  23. package/dist/lib/db/access-store.js +26 -2
  24. package/dist/lib/db/access-store.js.map +1 -1
  25. package/dist/lib/db/access-store.test.js +13 -0
  26. package/dist/lib/db/access-store.test.js.map +1 -1
  27. package/dist/lib/db/account-store.d.ts.map +1 -1
  28. package/dist/lib/db/account-store.js +1 -0
  29. package/dist/lib/db/account-store.js.map +1 -1
  30. package/dist/lib/db/event-store.d.ts +1 -0
  31. package/dist/lib/db/event-store.d.ts.map +1 -1
  32. package/dist/lib/db/event-store.js +3 -0
  33. package/dist/lib/db/event-store.js.map +1 -1
  34. package/dist/lib/db/feature-strategy-store.test.js +3 -0
  35. package/dist/lib/db/feature-strategy-store.test.js.map +1 -1
  36. package/dist/lib/db/feature-tag-store.d.ts +6 -5
  37. package/dist/lib/db/feature-tag-store.d.ts.map +1 -1
  38. package/dist/lib/db/feature-tag-store.js +15 -5
  39. package/dist/lib/db/feature-tag-store.js.map +1 -1
  40. package/dist/lib/db/index.d.ts.map +1 -1
  41. package/dist/lib/db/index.js +3 -1
  42. package/dist/lib/db/index.js.map +1 -1
  43. package/dist/lib/db/user-store.d.ts.map +1 -1
  44. package/dist/lib/db/user-store.js +1 -0
  45. package/dist/lib/db/user-store.js.map +1 -1
  46. package/dist/lib/features/access/createAccessService.js +2 -2
  47. package/dist/lib/features/access/createAccessService.js.map +1 -1
  48. package/dist/lib/features/change-request-segment-usage-service/change-request-segment-usage-read-model.test.js +1 -0
  49. package/dist/lib/features/change-request-segment-usage-service/change-request-segment-usage-read-model.test.js.map +1 -1
  50. package/dist/lib/features/dependent-features/dependent-features-service.d.ts +4 -4
  51. package/dist/lib/features/dependent-features/dependent-features-service.d.ts.map +1 -1
  52. package/dist/lib/features/dependent-features/dependent-features-service.js +11 -8
  53. package/dist/lib/features/dependent-features/dependent-features-service.js.map +1 -1
  54. package/dist/lib/features/export-import-toggles/export-import-controller.d.ts.map +1 -1
  55. package/dist/lib/features/export-import-toggles/export-import-controller.js +1 -1
  56. package/dist/lib/features/export-import-toggles/export-import-controller.js.map +1 -1
  57. package/dist/lib/features/export-import-toggles/export-import-service.d.ts +2 -2
  58. package/dist/lib/features/export-import-toggles/export-import-service.d.ts.map +1 -1
  59. package/dist/lib/features/export-import-toggles/export-import-service.js +27 -17
  60. package/dist/lib/features/export-import-toggles/export-import-service.js.map +1 -1
  61. package/dist/lib/features/export-import-toggles/export-import.e2e.test.js +35 -5
  62. package/dist/lib/features/export-import-toggles/export-import.e2e.test.js.map +1 -1
  63. package/dist/lib/features/feature-search/createFeatureSearchService.d.ts.map +1 -1
  64. package/dist/lib/features/feature-search/createFeatureSearchService.js +6 -6
  65. package/dist/lib/features/feature-search/createFeatureSearchService.js.map +1 -1
  66. package/dist/lib/features/feature-search/fake-feature-search-store.d.ts +10 -0
  67. package/dist/lib/features/feature-search/fake-feature-search-store.d.ts.map +1 -0
  68. package/dist/lib/features/feature-search/fake-feature-search-store.js +9 -0
  69. package/dist/lib/features/feature-search/fake-feature-search-store.js.map +1 -0
  70. package/dist/lib/features/feature-search/feature-search-controller.d.ts.map +1 -1
  71. package/dist/lib/features/feature-search/feature-search-controller.js +4 -3
  72. package/dist/lib/features/feature-search/feature-search-controller.js.map +1 -1
  73. package/dist/lib/features/feature-search/feature-search-service.d.ts +2 -2
  74. package/dist/lib/features/feature-search/feature-search-service.d.ts.map +1 -1
  75. package/dist/lib/features/feature-search/feature-search-service.js +9 -4
  76. package/dist/lib/features/feature-search/feature-search-service.js.map +1 -1
  77. package/dist/lib/features/feature-search/feature-search-store-type.d.ts +9 -0
  78. package/dist/lib/features/feature-search/feature-search-store-type.d.ts.map +1 -0
  79. package/dist/lib/features/feature-search/feature-search-store-type.js +3 -0
  80. package/dist/lib/features/feature-search/feature-search-store-type.js.map +1 -0
  81. package/dist/lib/features/feature-search/feature-search-store.d.ts +24 -0
  82. package/dist/lib/features/feature-search/feature-search-store.d.ts.map +1 -0
  83. package/dist/lib/features/feature-search/feature-search-store.js +323 -0
  84. package/dist/lib/features/feature-search/feature-search-store.js.map +1 -0
  85. package/dist/lib/features/feature-search/feature.search.e2e.test.js +101 -6
  86. package/dist/lib/features/feature-search/feature.search.e2e.test.js.map +1 -1
  87. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.d.ts.map +1 -1
  88. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.js +2 -2
  89. package/dist/lib/features/feature-toggle/archive-feature-toggle-controller.js.map +1 -1
  90. package/dist/lib/features/feature-toggle/createFeatureToggleService.js +2 -2
  91. package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
  92. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts +1 -5
  93. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
  94. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +0 -3
  95. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
  96. package/dist/lib/features/feature-toggle/fakes/fake-feature-toggle-store.d.ts +5 -2
  97. package/dist/lib/features/feature-toggle/fakes/fake-feature-toggle-store.d.ts.map +1 -1
  98. package/dist/lib/features/feature-toggle/fakes/fake-feature-toggle-store.js +3 -0
  99. package/dist/lib/features/feature-toggle/fakes/fake-feature-toggle-store.js.map +1 -1
  100. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts.map +1 -1
  101. package/dist/lib/features/feature-toggle/feature-toggle-controller.js +7 -7
  102. package/dist/lib/features/feature-toggle/feature-toggle-controller.js.map +1 -1
  103. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +25 -23
  104. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  105. package/dist/lib/features/feature-toggle/feature-toggle-service.js +79 -51
  106. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  107. package/dist/lib/features/feature-toggle/feature-toggle-store.d.ts +10 -3
  108. package/dist/lib/features/feature-toggle/feature-toggle-store.d.ts.map +1 -1
  109. package/dist/lib/features/feature-toggle/feature-toggle-store.js +44 -13
  110. package/dist/lib/features/feature-toggle/feature-toggle-store.js.map +1 -1
  111. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts +0 -5
  112. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  113. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +2 -201
  114. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  115. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.d.ts.map +1 -1
  116. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.js +20 -16
  117. package/dist/lib/features/feature-toggle/legacy/feature-toggle-legacy-controller.js.map +1 -1
  118. package/dist/lib/features/feature-toggle/tests/archive-feature-toggles.e2e.test.js +4 -0
  119. package/dist/lib/features/feature-toggle/tests/archive-feature-toggles.e2e.test.js.map +1 -1
  120. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.e2e.test.js +24 -23
  121. package/dist/lib/features/feature-toggle/tests/feature-toggle-service.e2e.test.js.map +1 -1
  122. package/dist/lib/features/feature-toggle/tests/feature-toggle-store.e2e.test.js +17 -3
  123. package/dist/lib/features/feature-toggle/tests/feature-toggle-store.e2e.test.js.map +1 -1
  124. package/dist/lib/features/feature-toggle/tests/feature-toggle-strategies-store.e2e.test.js +17 -3
  125. package/dist/lib/features/feature-toggle/tests/feature-toggle-strategies-store.e2e.test.js.map +1 -1
  126. package/dist/lib/features/feature-toggle/tests/feature-toggles.auth.e2e.test.js +9 -3
  127. package/dist/lib/features/feature-toggle/tests/feature-toggles.auth.e2e.test.js.map +1 -1
  128. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +21 -7
  129. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
  130. package/dist/lib/features/feature-toggle/types/feature-toggle-store-type.d.ts +5 -2
  131. package/dist/lib/features/feature-toggle/types/feature-toggle-store-type.d.ts.map +1 -1
  132. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts +2 -5
  133. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts.map +1 -1
  134. package/dist/lib/features/index.d.ts +1 -0
  135. package/dist/lib/features/index.d.ts.map +1 -1
  136. package/dist/lib/features/index.js +1 -0
  137. package/dist/lib/features/index.js.map +1 -1
  138. package/dist/lib/features/maintenance/maintenance-controller.d.ts.map +1 -1
  139. package/dist/lib/features/maintenance/maintenance-controller.js +1 -1
  140. package/dist/lib/features/maintenance/maintenance-controller.js.map +1 -1
  141. package/dist/lib/features/maintenance/maintenance-service.d.ts +1 -1
  142. package/dist/lib/features/maintenance/maintenance-service.d.ts.map +1 -1
  143. package/dist/lib/features/maintenance/maintenance-service.js +2 -2
  144. package/dist/lib/features/maintenance/maintenance-service.js.map +1 -1
  145. package/dist/lib/features/maintenance/maintenance-service.test.js +1 -1
  146. package/dist/lib/features/maintenance/maintenance-service.test.js.map +1 -1
  147. package/dist/lib/features/playground/advanced-playground.test.js +0 -1
  148. package/dist/lib/features/playground/advanced-playground.test.js.map +1 -1
  149. package/dist/lib/features/playground/playground-service.d.ts.map +1 -1
  150. package/dist/lib/features/playground/playground-service.js +9 -11
  151. package/dist/lib/features/playground/playground-service.js.map +1 -1
  152. package/dist/lib/features/private-project/fakePrivateProjectChecker.d.ts.map +1 -1
  153. package/dist/lib/features/private-project/fakePrivateProjectChecker.js +2 -1
  154. package/dist/lib/features/private-project/fakePrivateProjectChecker.js.map +1 -1
  155. package/dist/lib/features/project/createProjectService.js +2 -2
  156. package/dist/lib/features/project/createProjectService.js.map +1 -1
  157. package/dist/lib/features/project-environments/createEnvironmentService.d.ts +6 -0
  158. package/dist/lib/features/project-environments/createEnvironmentService.d.ts.map +1 -0
  159. package/dist/lib/features/project-environments/createEnvironmentService.js +60 -0
  160. package/dist/lib/features/project-environments/createEnvironmentService.js.map +1 -0
  161. package/dist/lib/{services → features/project-environments}/environment-service.d.ts +6 -6
  162. package/dist/lib/features/project-environments/environment-service.d.ts.map +1 -0
  163. package/dist/lib/{services → features/project-environments}/environment-service.js +13 -10
  164. package/dist/lib/features/project-environments/environment-service.js.map +1 -0
  165. package/dist/lib/features/project-environments/environment-service.test.d.ts.map +1 -0
  166. package/dist/{test/e2e/services → lib/features/project-environments}/environment-service.test.js +24 -18
  167. package/dist/lib/features/project-environments/environment-service.test.js.map +1 -0
  168. package/dist/lib/{types/stores/environment-store.d.ts → features/project-environments/environment-store-type.d.ts} +3 -3
  169. package/dist/lib/features/project-environments/environment-store-type.d.ts.map +1 -0
  170. package/dist/lib/{types/stores/environment-store.js → features/project-environments/environment-store-type.js} +1 -1
  171. package/dist/lib/features/project-environments/environment-store-type.js.map +1 -0
  172. package/dist/lib/{db → features/project-environments}/environment-store.d.ts +4 -4
  173. package/dist/lib/features/project-environments/environment-store.d.ts.map +1 -0
  174. package/dist/lib/{db → features/project-environments}/environment-store.js +4 -4
  175. package/dist/lib/features/project-environments/environment-store.js.map +1 -0
  176. package/dist/lib/{routes/admin-api/project → features/project-environments}/environments.d.ts +5 -5
  177. package/dist/lib/features/project-environments/environments.d.ts.map +1 -0
  178. package/dist/lib/features/project-environments/environments.e2e.test.d.ts.map +1 -0
  179. package/dist/{test/e2e/api/admin/project → lib/features/project-environments}/environments.e2e.test.js +4 -4
  180. package/dist/lib/features/project-environments/environments.e2e.test.js.map +1 -0
  181. package/dist/lib/{routes/admin-api/project → features/project-environments}/environments.js +9 -9
  182. package/dist/lib/features/project-environments/environments.js.map +1 -0
  183. package/dist/{test/fixtures → lib/features/project-environments}/fake-environment-store.d.ts +2 -2
  184. package/dist/lib/features/project-environments/fake-environment-store.d.ts.map +1 -0
  185. package/dist/{test/fixtures → lib/features/project-environments}/fake-environment-store.js +1 -1
  186. package/dist/lib/features/project-environments/fake-environment-store.js.map +1 -0
  187. package/dist/lib/features/scheduler/scheduler-service.test.js +1 -1
  188. package/dist/lib/features/scheduler/scheduler-service.test.js.map +1 -1
  189. package/dist/lib/features/segment/segment-controller.d.ts +1 -1
  190. package/dist/lib/features/segment/segment-controller.d.ts.map +1 -1
  191. package/dist/lib/features/segment/segment-controller.js +1 -1
  192. package/dist/lib/features/segment/segment-controller.js.map +1 -1
  193. package/dist/lib/features/tag-type/tag-type-service.d.ts +3 -3
  194. package/dist/lib/features/tag-type/tag-type-service.d.ts.map +1 -1
  195. package/dist/lib/features/tag-type/tag-type-service.js +10 -6
  196. package/dist/lib/features/tag-type/tag-type-service.js.map +1 -1
  197. package/dist/lib/features/tag-type/tag-type.d.ts.map +1 -1
  198. package/dist/lib/features/tag-type/tag-type.js +3 -3
  199. package/dist/lib/features/tag-type/tag-type.js.map +1 -1
  200. package/dist/lib/middleware/api-token-middleware.d.ts.map +1 -1
  201. package/dist/lib/middleware/api-token-middleware.js +6 -1
  202. package/dist/lib/middleware/api-token-middleware.js.map +1 -1
  203. package/dist/lib/middleware/api-token-middleware.test.js +25 -0
  204. package/dist/lib/middleware/api-token-middleware.test.js.map +1 -1
  205. package/dist/lib/middleware/cors-origin-middleware.d.ts.map +1 -1
  206. package/dist/lib/middleware/cors-origin-middleware.js +5 -1
  207. package/dist/lib/middleware/cors-origin-middleware.js.map +1 -1
  208. package/dist/lib/middleware/cors-origin-middleware.test.js +7 -6
  209. package/dist/lib/middleware/cors-origin-middleware.test.js.map +1 -1
  210. package/dist/lib/middleware/secure-headers.d.ts.map +1 -1
  211. package/dist/lib/middleware/secure-headers.js +49 -1
  212. package/dist/lib/middleware/secure-headers.js.map +1 -1
  213. package/dist/lib/openapi/index.d.ts.map +1 -1
  214. package/dist/lib/openapi/index.js +6 -3
  215. package/dist/lib/openapi/index.js.map +1 -1
  216. package/dist/lib/openapi/spec/create-user-response-schema.d.ts +1 -0
  217. package/dist/lib/openapi/spec/create-user-response-schema.d.ts.map +1 -1
  218. package/dist/lib/openapi/spec/deprecated-project-overview-schema.d.ts +2563 -0
  219. package/dist/lib/openapi/spec/deprecated-project-overview-schema.d.ts.map +1 -0
  220. package/dist/lib/openapi/spec/deprecated-project-overview-schema.js +143 -0
  221. package/dist/lib/openapi/spec/deprecated-project-overview-schema.js.map +1 -0
  222. package/dist/lib/openapi/spec/deprecated-project-overview-schema.test.d.ts +2 -0
  223. package/dist/lib/openapi/spec/deprecated-project-overview-schema.test.d.ts.map +1 -0
  224. package/dist/lib/openapi/spec/deprecated-project-overview-schema.test.js +17 -0
  225. package/dist/lib/openapi/spec/deprecated-project-overview-schema.test.js.map +1 -0
  226. package/dist/lib/openapi/spec/event-schema.d.ts +7 -1
  227. package/dist/lib/openapi/spec/event-schema.d.ts.map +1 -1
  228. package/dist/lib/openapi/spec/event-schema.js +6 -0
  229. package/dist/lib/openapi/spec/event-schema.js.map +1 -1
  230. package/dist/lib/openapi/spec/events-schema.d.ts +7 -1
  231. package/dist/lib/openapi/spec/events-schema.d.ts.map +1 -1
  232. package/dist/lib/openapi/spec/export-query-schema.d.ts +22 -3
  233. package/dist/lib/openapi/spec/export-query-schema.d.ts.map +1 -1
  234. package/dist/lib/openapi/spec/export-query-schema.js +14 -3
  235. package/dist/lib/openapi/spec/export-query-schema.js.map +1 -1
  236. package/dist/lib/openapi/spec/export-result-schema.d.ts +6 -0
  237. package/dist/lib/openapi/spec/export-result-schema.d.ts.map +1 -1
  238. package/dist/lib/openapi/spec/feature-events-schema.d.ts +7 -1
  239. package/dist/lib/openapi/spec/feature-events-schema.d.ts.map +1 -1
  240. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts +15 -6
  241. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts.map +1 -1
  242. package/dist/lib/openapi/spec/feature-search-query-parameters.js +16 -6
  243. package/dist/lib/openapi/spec/feature-search-query-parameters.js.map +1 -1
  244. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +1016 -0
  245. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts.map +1 -0
  246. package/dist/lib/openapi/spec/feature-search-response-schema.js +177 -0
  247. package/dist/lib/openapi/spec/feature-search-response-schema.js.map +1 -0
  248. package/dist/lib/openapi/spec/feature-tag-schema.d.ts +6 -0
  249. package/dist/lib/openapi/spec/feature-tag-schema.d.ts.map +1 -1
  250. package/dist/lib/openapi/spec/feature-tag-schema.js +6 -0
  251. package/dist/lib/openapi/spec/feature-tag-schema.js.map +1 -1
  252. package/dist/lib/openapi/spec/feature-type-count-schema.d.ts +25 -0
  253. package/dist/lib/openapi/spec/feature-type-count-schema.d.ts.map +1 -0
  254. package/dist/lib/openapi/spec/feature-type-count-schema.js +26 -0
  255. package/dist/lib/openapi/spec/feature-type-count-schema.js.map +1 -0
  256. package/dist/lib/openapi/spec/feature-type-count-schema.test.d.ts +2 -0
  257. package/dist/lib/openapi/spec/feature-type-count-schema.test.d.ts.map +1 -0
  258. package/dist/lib/openapi/spec/feature-type-count-schema.test.js +12 -0
  259. package/dist/lib/openapi/spec/feature-type-count-schema.test.js.map +1 -0
  260. package/dist/lib/openapi/spec/group-schema.d.ts +2 -0
  261. package/dist/lib/openapi/spec/group-schema.d.ts.map +1 -1
  262. package/dist/lib/openapi/spec/group-user-model-schema.d.ts +1 -0
  263. package/dist/lib/openapi/spec/group-user-model-schema.d.ts.map +1 -1
  264. package/dist/lib/openapi/spec/groups-schema.d.ts +4 -0
  265. package/dist/lib/openapi/spec/groups-schema.d.ts.map +1 -1
  266. package/dist/lib/openapi/spec/import-toggles-schema.d.ts +12 -0
  267. package/dist/lib/openapi/spec/import-toggles-schema.d.ts.map +1 -1
  268. package/dist/lib/openapi/spec/index.d.ts +3 -0
  269. package/dist/lib/openapi/spec/index.d.ts.map +1 -1
  270. package/dist/lib/openapi/spec/index.js +3 -0
  271. package/dist/lib/openapi/spec/index.js.map +1 -1
  272. package/dist/lib/openapi/spec/me-schema.d.ts +1 -0
  273. package/dist/lib/openapi/spec/me-schema.d.ts.map +1 -1
  274. package/dist/lib/openapi/spec/project-overview-schema.d.ts +26 -4
  275. package/dist/lib/openapi/spec/project-overview-schema.d.ts.map +1 -1
  276. package/dist/lib/openapi/spec/project-overview-schema.js +6 -4
  277. package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
  278. package/dist/lib/openapi/spec/project-overview-schema.test.js +7 -1
  279. package/dist/lib/openapi/spec/project-overview-schema.test.js.map +1 -1
  280. package/dist/lib/openapi/spec/public-signup-token-schema.d.ts +1 -0
  281. package/dist/lib/openapi/spec/public-signup-token-schema.d.ts.map +1 -1
  282. package/dist/lib/openapi/spec/public-signup-tokens-schema.d.ts +2 -0
  283. package/dist/lib/openapi/spec/public-signup-tokens-schema.d.ts.map +1 -1
  284. package/dist/lib/openapi/spec/search-events-schema.d.ts +1 -1
  285. package/dist/lib/openapi/spec/search-features-schema.d.ts +12 -4
  286. package/dist/lib/openapi/spec/search-features-schema.d.ts.map +1 -1
  287. package/dist/lib/openapi/spec/search-features-schema.js +4 -4
  288. package/dist/lib/openapi/spec/search-features-schema.js.map +1 -1
  289. package/dist/lib/openapi/spec/{admin-strategies-schema.d.ts → segment-strategies-schema.d.ts} +37 -1
  290. package/dist/lib/openapi/spec/segment-strategies-schema.d.ts.map +1 -0
  291. package/dist/lib/openapi/spec/{admin-strategies-schema.js → segment-strategies-schema.js} +42 -1
  292. package/dist/lib/openapi/spec/segment-strategies-schema.js.map +1 -0
  293. package/dist/lib/openapi/spec/segment-strategies-schema.test.d.ts +2 -0
  294. package/dist/lib/openapi/spec/segment-strategies-schema.test.d.ts.map +1 -0
  295. package/dist/lib/openapi/spec/{admin-strategies-schema.test.js → segment-strategies-schema.test.js} +1 -1
  296. package/dist/lib/openapi/spec/segment-strategies-schema.test.js.map +1 -0
  297. package/dist/lib/openapi/spec/state-schema.d.ts +6 -0
  298. package/dist/lib/openapi/spec/state-schema.d.ts.map +1 -1
  299. package/dist/lib/openapi/spec/ui-config-schema.d.ts +5 -0
  300. package/dist/lib/openapi/spec/ui-config-schema.d.ts.map +1 -1
  301. package/dist/lib/openapi/spec/ui-config-schema.js +5 -0
  302. package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
  303. package/dist/lib/openapi/spec/user-schema.d.ts +1 -0
  304. package/dist/lib/openapi/spec/user-schema.d.ts.map +1 -1
  305. package/dist/lib/openapi/spec/user-schema.js +1 -0
  306. package/dist/lib/openapi/spec/user-schema.js.map +1 -1
  307. package/dist/lib/openapi/spec/users-groups-base-schema.d.ts +4 -0
  308. package/dist/lib/openapi/spec/users-groups-base-schema.d.ts.map +1 -1
  309. package/dist/lib/openapi/spec/users-schema.d.ts +1 -0
  310. package/dist/lib/openapi/spec/users-schema.d.ts.map +1 -1
  311. package/dist/lib/openapi/spec/users-search-schema.d.ts +1 -0
  312. package/dist/lib/openapi/spec/users-search-schema.d.ts.map +1 -1
  313. package/dist/lib/openapi/util/create-request-schema.d.ts.map +1 -1
  314. package/dist/lib/openapi/util/create-request-schema.js +3 -1
  315. package/dist/lib/openapi/util/create-request-schema.js.map +1 -1
  316. package/dist/lib/openapi/util/create-response-schema.d.ts.map +1 -1
  317. package/dist/lib/openapi/util/create-response-schema.js +6 -2
  318. package/dist/lib/openapi/util/create-response-schema.js.map +1 -1
  319. package/dist/lib/routes/admin-api/addon.d.ts.map +1 -1
  320. package/dist/lib/routes/admin-api/addon.js +3 -3
  321. package/dist/lib/routes/admin-api/addon.js.map +1 -1
  322. package/dist/lib/routes/admin-api/api-token.d.ts.map +1 -1
  323. package/dist/lib/routes/admin-api/api-token.js +2 -2
  324. package/dist/lib/routes/admin-api/api-token.js.map +1 -1
  325. package/dist/lib/routes/admin-api/config.d.ts.map +1 -1
  326. package/dist/lib/routes/admin-api/config.js +2 -1
  327. package/dist/lib/routes/admin-api/config.js.map +1 -1
  328. package/dist/lib/routes/admin-api/context.d.ts.map +1 -1
  329. package/dist/lib/routes/admin-api/context.js +3 -3
  330. package/dist/lib/routes/admin-api/context.js.map +1 -1
  331. package/dist/lib/routes/admin-api/events.test.js +13 -5
  332. package/dist/lib/routes/admin-api/events.test.js.map +1 -1
  333. package/dist/lib/routes/admin-api/index.js +2 -2
  334. package/dist/lib/routes/admin-api/index.js.map +1 -1
  335. package/dist/lib/routes/admin-api/project/api-token.d.ts.map +1 -1
  336. package/dist/lib/routes/admin-api/project/api-token.js +1 -1
  337. package/dist/lib/routes/admin-api/project/api-token.js.map +1 -1
  338. package/dist/lib/routes/admin-api/project/{index.d.ts → project-api.d.ts} +4 -2
  339. package/dist/lib/routes/admin-api/project/project-api.d.ts.map +1 -0
  340. package/dist/lib/routes/admin-api/project/{index.js → project-api.js} +29 -3
  341. package/dist/lib/routes/admin-api/project/project-api.js.map +1 -0
  342. package/dist/lib/routes/admin-api/project/project-archive.d.ts.map +1 -1
  343. package/dist/lib/routes/admin-api/project/project-archive.js +2 -2
  344. package/dist/lib/routes/admin-api/project/project-archive.js.map +1 -1
  345. package/dist/lib/routes/admin-api/project/variants.d.ts.map +1 -1
  346. package/dist/lib/routes/admin-api/project/variants.js +1 -1
  347. package/dist/lib/routes/admin-api/project/variants.js.map +1 -1
  348. package/dist/lib/routes/admin-api/public-signup.d.ts.map +1 -1
  349. package/dist/lib/routes/admin-api/public-signup.js +2 -2
  350. package/dist/lib/routes/admin-api/public-signup.js.map +1 -1
  351. package/dist/lib/routes/admin-api/state.d.ts.map +1 -1
  352. package/dist/lib/routes/admin-api/state.js +1 -0
  353. package/dist/lib/routes/admin-api/state.js.map +1 -1
  354. package/dist/lib/routes/admin-api/strategy.d.ts.map +1 -1
  355. package/dist/lib/routes/admin-api/strategy.js +5 -5
  356. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  357. package/dist/lib/routes/admin-api/tag.d.ts.map +1 -1
  358. package/dist/lib/routes/admin-api/tag.js +2 -2
  359. package/dist/lib/routes/admin-api/tag.js.map +1 -1
  360. package/dist/lib/routes/client-api/metrics.test.js +2 -0
  361. package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
  362. package/dist/lib/routes/edge-api/index.d.ts +1 -0
  363. package/dist/lib/routes/edge-api/index.d.ts.map +1 -1
  364. package/dist/lib/routes/edge-api/index.js +25 -13
  365. package/dist/lib/routes/edge-api/index.js.map +1 -1
  366. package/dist/lib/routes/proxy-api/index.js +1 -1
  367. package/dist/lib/routes/proxy-api/index.js.map +1 -1
  368. package/dist/lib/schema/feature-schema.d.ts.map +1 -1
  369. package/dist/lib/schema/feature-schema.js +2 -0
  370. package/dist/lib/schema/feature-schema.js.map +1 -1
  371. package/dist/lib/server-impl.d.ts.map +1 -1
  372. package/dist/lib/server-impl.js +1 -0
  373. package/dist/lib/server-impl.js.map +1 -1
  374. package/dist/lib/services/access-service.d.ts +3 -1
  375. package/dist/lib/services/access-service.d.ts.map +1 -1
  376. package/dist/lib/services/access-service.js +8 -2
  377. package/dist/lib/services/access-service.js.map +1 -1
  378. package/dist/lib/services/access-service.test.js +12 -2
  379. package/dist/lib/services/access-service.test.js.map +1 -1
  380. package/dist/lib/services/addon-service.d.ts +3 -3
  381. package/dist/lib/services/addon-service.d.ts.map +1 -1
  382. package/dist/lib/services/addon-service.js +8 -4
  383. package/dist/lib/services/addon-service.js.map +1 -1
  384. package/dist/lib/services/addon-service.test.js +64 -43
  385. package/dist/lib/services/addon-service.test.js.map +1 -1
  386. package/dist/lib/services/api-token-service.d.ts +4 -4
  387. package/dist/lib/services/api-token-service.d.ts.map +1 -1
  388. package/dist/lib/services/api-token-service.js +12 -9
  389. package/dist/lib/services/api-token-service.js.map +1 -1
  390. package/dist/lib/services/api-token-service.test.js +5 -6
  391. package/dist/lib/services/api-token-service.test.js.map +1 -1
  392. package/dist/lib/services/client-metrics/instance-service.d.ts +2 -1
  393. package/dist/lib/services/client-metrics/instance-service.d.ts.map +1 -1
  394. package/dist/lib/services/client-metrics/instance-service.js +15 -17
  395. package/dist/lib/services/client-metrics/instance-service.js.map +1 -1
  396. package/dist/lib/services/client-metrics/last-seen/last-seen-store.d.ts +0 -5
  397. package/dist/lib/services/client-metrics/last-seen/last-seen-store.d.ts.map +1 -1
  398. package/dist/lib/services/client-metrics/last-seen/last-seen-store.js.map +1 -1
  399. package/dist/lib/services/client-metrics/last-seen/tests/last-seen-service.e2e.test.js +2 -2
  400. package/dist/lib/services/client-metrics/last-seen/tests/last-seen-service.e2e.test.js.map +1 -1
  401. package/dist/lib/services/context-service.d.ts +3 -3
  402. package/dist/lib/services/context-service.d.ts.map +1 -1
  403. package/dist/lib/services/context-service.js +14 -13
  404. package/dist/lib/services/context-service.js.map +1 -1
  405. package/dist/lib/services/email-service.d.ts +10 -3
  406. package/dist/lib/services/email-service.d.ts.map +1 -1
  407. package/dist/lib/services/email-service.js +98 -2
  408. package/dist/lib/services/email-service.js.map +1 -1
  409. package/dist/lib/services/email-service.test.js +41 -29
  410. package/dist/lib/services/email-service.test.js.map +1 -1
  411. package/dist/lib/services/favorites-service.d.ts.map +1 -1
  412. package/dist/lib/services/favorites-service.js +4 -0
  413. package/dist/lib/services/favorites-service.js.map +1 -1
  414. package/dist/lib/services/feature-tag-service.d.ts +4 -4
  415. package/dist/lib/services/feature-tag-service.d.ts.map +1 -1
  416. package/dist/lib/services/feature-tag-service.js +13 -7
  417. package/dist/lib/services/feature-tag-service.js.map +1 -1
  418. package/dist/lib/services/feature-type-service.d.ts.map +1 -1
  419. package/dist/lib/services/feature-type-service.js +1 -0
  420. package/dist/lib/services/feature-type-service.js.map +1 -1
  421. package/dist/lib/services/group-service.d.ts +4 -4
  422. package/dist/lib/services/group-service.d.ts.map +1 -1
  423. package/dist/lib/services/group-service.js +23 -18
  424. package/dist/lib/services/group-service.js.map +1 -1
  425. package/dist/lib/services/index.d.ts +1 -1
  426. package/dist/lib/services/index.d.ts.map +1 -1
  427. package/dist/lib/services/index.js +7 -3
  428. package/dist/lib/services/index.js.map +1 -1
  429. package/dist/lib/services/pat-service.d.ts.map +1 -1
  430. package/dist/lib/services/pat-service.js +2 -0
  431. package/dist/lib/services/pat-service.js.map +1 -1
  432. package/dist/lib/services/project-health-service.js +1 -1
  433. package/dist/lib/services/project-health-service.js.map +1 -1
  434. package/dist/lib/services/project-service.d.ts +13 -12
  435. package/dist/lib/services/project-service.d.ts.map +1 -1
  436. package/dist/lib/services/project-service.js +81 -23
  437. package/dist/lib/services/project-service.js.map +1 -1
  438. package/dist/lib/services/proxy-service.d.ts +1 -1
  439. package/dist/lib/services/proxy-service.d.ts.map +1 -1
  440. package/dist/lib/services/proxy-service.js +2 -2
  441. package/dist/lib/services/proxy-service.js.map +1 -1
  442. package/dist/lib/services/public-signup-token-service.d.ts +2 -2
  443. package/dist/lib/services/public-signup-token-service.d.ts.map +1 -1
  444. package/dist/lib/services/public-signup-token-service.js +7 -3
  445. package/dist/lib/services/public-signup-token-service.js.map +1 -1
  446. package/dist/lib/services/segment-service.d.ts +1 -1
  447. package/dist/lib/services/segment-service.d.ts.map +1 -1
  448. package/dist/lib/services/segment-service.js +15 -14
  449. package/dist/lib/services/segment-service.js.map +1 -1
  450. package/dist/lib/services/setting-service.d.ts +2 -2
  451. package/dist/lib/services/setting-service.d.ts.map +1 -1
  452. package/dist/lib/services/setting-service.js +5 -2
  453. package/dist/lib/services/setting-service.js.map +1 -1
  454. package/dist/lib/services/state-service.d.ts +16 -11
  455. package/dist/lib/services/state-service.d.ts.map +1 -1
  456. package/dist/lib/services/state-service.js +46 -18
  457. package/dist/lib/services/state-service.js.map +1 -1
  458. package/dist/lib/services/state-service.test.js +75 -21
  459. package/dist/lib/services/state-service.test.js.map +1 -1
  460. package/dist/lib/services/strategy-service.d.ts +5 -5
  461. package/dist/lib/services/strategy-service.d.ts.map +1 -1
  462. package/dist/lib/services/strategy-service.js +11 -6
  463. package/dist/lib/services/strategy-service.js.map +1 -1
  464. package/dist/lib/services/tag-service.d.ts +2 -2
  465. package/dist/lib/services/tag-service.d.ts.map +1 -1
  466. package/dist/lib/services/tag-service.js +4 -2
  467. package/dist/lib/services/tag-service.js.map +1 -1
  468. package/dist/lib/services/user-service.d.ts.map +1 -1
  469. package/dist/lib/services/user-service.js +3 -0
  470. package/dist/lib/services/user-service.js.map +1 -1
  471. package/dist/lib/services/user-service.test.js +12 -12
  472. package/dist/lib/services/user-service.test.js.map +1 -1
  473. package/dist/lib/services/version-service.test.js +8 -2
  474. package/dist/lib/services/version-service.test.js.map +1 -1
  475. package/dist/lib/types/core.d.ts +3 -1
  476. package/dist/lib/types/core.d.ts.map +1 -1
  477. package/dist/lib/types/core.js +11 -0
  478. package/dist/lib/types/core.js.map +1 -1
  479. package/dist/lib/types/events.d.ts +51 -2
  480. package/dist/lib/types/events.d.ts.map +1 -1
  481. package/dist/lib/types/events.js +59 -42
  482. package/dist/lib/types/events.js.map +1 -1
  483. package/dist/lib/types/experimental.d.ts +1 -1
  484. package/dist/lib/types/experimental.d.ts.map +1 -1
  485. package/dist/lib/types/experimental.js +9 -1
  486. package/dist/lib/types/experimental.js.map +1 -1
  487. package/dist/lib/types/model.d.ts +30 -2
  488. package/dist/lib/types/model.d.ts.map +1 -1
  489. package/dist/lib/types/model.js.map +1 -1
  490. package/dist/lib/types/option.d.ts +2 -0
  491. package/dist/lib/types/option.d.ts.map +1 -1
  492. package/dist/lib/types/services.d.ts +2 -1
  493. package/dist/lib/types/services.d.ts.map +1 -1
  494. package/dist/lib/types/stores/client-applications-store.d.ts +1 -0
  495. package/dist/lib/types/stores/client-applications-store.d.ts.map +1 -1
  496. package/dist/lib/types/stores/feature-tag-store.d.ts +7 -3
  497. package/dist/lib/types/stores/feature-tag-store.d.ts.map +1 -1
  498. package/dist/lib/types/stores.d.ts +4 -2
  499. package/dist/lib/types/stores.d.ts.map +1 -1
  500. package/dist/lib/util/extract-user.d.ts +5 -0
  501. package/dist/lib/util/extract-user.d.ts.map +1 -1
  502. package/dist/lib/util/extract-user.js +8 -1
  503. package/dist/lib/util/extract-user.js.map +1 -1
  504. package/dist/mailtemplates/scheduled-change-conflict/scheduled-change-conflict.html.mustache +527 -0
  505. package/dist/mailtemplates/scheduled-change-conflict/scheduled-change-conflict.plain.mustache +9 -0
  506. package/dist/mailtemplates/scheduled-execution-failed/scheduled-execution-failed.html.mustache +522 -0
  507. package/dist/mailtemplates/scheduled-execution-failed/scheduled-execution-failed.plain.mustache +6 -0
  508. package/dist/migrations/20231211121444-features-created-by.d.ts +3 -0
  509. package/dist/migrations/20231211121444-features-created-by.d.ts.map +1 -0
  510. package/dist/migrations/20231211121444-features-created-by.js +12 -0
  511. package/dist/migrations/20231211121444-features-created-by.js.map +1 -0
  512. package/dist/migrations/20231211122322-feature-types-created-by.d.ts +3 -0
  513. package/dist/migrations/20231211122322-feature-types-created-by.d.ts.map +1 -0
  514. package/dist/migrations/20231211122322-feature-types-created-by.js +12 -0
  515. package/dist/migrations/20231211122322-feature-types-created-by.js.map +1 -0
  516. package/dist/migrations/20231211122351-feature-tag-created-by.d.ts +3 -0
  517. package/dist/migrations/20231211122351-feature-tag-created-by.d.ts.map +1 -0
  518. package/dist/migrations/20231211122351-feature-tag-created-by.js +12 -0
  519. package/dist/migrations/20231211122351-feature-tag-created-by.js.map +1 -0
  520. package/dist/migrations/20231211122426-feature-strategies-created-by.d.ts +3 -0
  521. package/dist/migrations/20231211122426-feature-strategies-created-by.d.ts.map +1 -0
  522. package/dist/migrations/20231211122426-feature-strategies-created-by.js +12 -0
  523. package/dist/migrations/20231211122426-feature-strategies-created-by.js.map +1 -0
  524. package/dist/migrations/20231211132341-add-created-by-to-role-permission.d.ts +3 -0
  525. package/dist/migrations/20231211132341-add-created-by-to-role-permission.d.ts.map +1 -0
  526. package/dist/migrations/20231211132341-add-created-by-to-role-permission.js +8 -0
  527. package/dist/migrations/20231211132341-add-created-by-to-role-permission.js.map +1 -0
  528. package/dist/migrations/20231211133008-add-created-by-to-role-user.d.ts +3 -0
  529. package/dist/migrations/20231211133008-add-created-by-to-role-user.d.ts.map +1 -0
  530. package/dist/migrations/20231211133008-add-created-by-to-role-user.js +8 -0
  531. package/dist/migrations/20231211133008-add-created-by-to-role-user.js.map +1 -0
  532. package/dist/migrations/20231211133920-add-created-by-to-roles.d.ts +3 -0
  533. package/dist/migrations/20231211133920-add-created-by-to-roles.d.ts.map +1 -0
  534. package/dist/migrations/20231211133920-add-created-by-to-roles.js +8 -0
  535. package/dist/migrations/20231211133920-add-created-by-to-roles.js.map +1 -0
  536. package/dist/migrations/20231211134130-add-created-by-to-users.d.ts +3 -0
  537. package/dist/migrations/20231211134130-add-created-by-to-users.d.ts.map +1 -0
  538. package/dist/migrations/20231211134130-add-created-by-to-users.js +8 -0
  539. package/dist/migrations/20231211134130-add-created-by-to-users.js.map +1 -0
  540. package/dist/migrations/20231211134633-add-created-by-to-apitokens.d.ts +3 -0
  541. package/dist/migrations/20231211134633-add-created-by-to-apitokens.d.ts.map +1 -0
  542. package/dist/migrations/20231211134633-add-created-by-to-apitokens.js +8 -0
  543. package/dist/migrations/20231211134633-add-created-by-to-apitokens.js.map +1 -0
  544. package/dist/migrations/20231212094044-event-created-by-user-id.d.ts +3 -0
  545. package/dist/migrations/20231212094044-event-created-by-user-id.d.ts.map +1 -0
  546. package/dist/migrations/20231212094044-event-created-by-user-id.js +14 -0
  547. package/dist/migrations/20231212094044-event-created-by-user-id.js.map +1 -0
  548. package/dist/migrations/20231213111906-add-reason-to-change-request-schedule.d.ts +3 -0
  549. package/dist/migrations/20231213111906-add-reason-to-change-request-schedule.d.ts.map +1 -0
  550. package/dist/migrations/20231213111906-add-reason-to-change-request-schedule.js +8 -0
  551. package/dist/migrations/20231213111906-add-reason-to-change-request-schedule.js.map +1 -0
  552. package/dist/migrations/20231215105713-incoming-webhooks.d.ts +3 -0
  553. package/dist/migrations/20231215105713-incoming-webhooks.d.ts.map +1 -0
  554. package/dist/migrations/20231215105713-incoming-webhooks.js +34 -0
  555. package/dist/migrations/20231215105713-incoming-webhooks.js.map +1 -0
  556. package/dist/migrations/20231218165612-inc-webhook-tokens-rename-secret-to-token.d.ts +3 -0
  557. package/dist/migrations/20231218165612-inc-webhook-tokens-rename-secret-to-token.d.ts.map +1 -0
  558. package/dist/migrations/20231218165612-inc-webhook-tokens-rename-secret-to-token.js +12 -0
  559. package/dist/migrations/20231218165612-inc-webhook-tokens-rename-secret-to-token.js.map +1 -0
  560. package/dist/migrations/20231219100343-rename-new-columns-to-created-by-user-id.d.ts +3 -0
  561. package/dist/migrations/20231219100343-rename-new-columns-to-created-by-user-id.d.ts.map +1 -0
  562. package/dist/migrations/20231219100343-rename-new-columns-to-created-by-user-id.js +28 -0
  563. package/dist/migrations/20231219100343-rename-new-columns-to-created-by-user-id.js.map +1 -0
  564. package/dist/migrations/20231221143955-feedback-table.d.ts +3 -0
  565. package/dist/migrations/20231221143955-feedback-table.d.ts.map +1 -0
  566. package/dist/migrations/20231221143955-feedback-table.js +21 -0
  567. package/dist/migrations/20231221143955-feedback-table.js.map +1 -0
  568. package/dist/migrations/20231222071533-unleash-system-user.d.ts +3 -0
  569. package/dist/migrations/20231222071533-unleash-system-user.d.ts.map +1 -0
  570. package/dist/migrations/20231222071533-unleash-system-user.js +17 -0
  571. package/dist/migrations/20231222071533-unleash-system-user.js.map +1 -0
  572. package/dist/migrations/20240102142100-incoming-webhooks-created-by.d.ts +3 -0
  573. package/dist/migrations/20240102142100-incoming-webhooks-created-by.d.ts.map +1 -0
  574. package/dist/migrations/20240102142100-incoming-webhooks-created-by.js +11 -0
  575. package/dist/migrations/20240102142100-incoming-webhooks-created-by.js.map +1 -0
  576. package/dist/migrations/20240102205517-observable-events.d.ts +3 -0
  577. package/dist/migrations/20240102205517-observable-events.d.ts.map +1 -0
  578. package/dist/migrations/20240102205517-observable-events.js +27 -0
  579. package/dist/migrations/20240102205517-observable-events.js.map +1 -0
  580. package/dist/server-dev.js +20 -13
  581. package/dist/server-dev.js.map +1 -1
  582. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +1 -0
  583. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
  584. package/dist/test/e2e/api/admin/config.e2e.test.js +1 -1
  585. package/dist/test/e2e/api/admin/config.e2e.test.js.map +1 -1
  586. package/dist/test/e2e/api/admin/context.e2e.test.js +1 -1
  587. package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
  588. package/dist/test/e2e/api/admin/environment.test.js +1 -1
  589. package/dist/test/e2e/api/admin/environment.test.js.map +1 -1
  590. package/dist/test/e2e/api/admin/event.e2e.test.js +5 -0
  591. package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
  592. package/dist/test/e2e/api/admin/instance-admin.e2e.test.js +12 -3
  593. package/dist/test/e2e/api/admin/instance-admin.e2e.test.js.map +1 -1
  594. package/dist/test/e2e/api/admin/metrics.e2e.test.js +1 -1
  595. package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
  596. package/dist/test/e2e/api/admin/project/projects.e2e.test.js +17 -0
  597. package/dist/test/e2e/api/admin/project/projects.e2e.test.js.map +1 -1
  598. package/dist/test/e2e/api/admin/project/variants.e2e.test.js +22 -1
  599. package/dist/test/e2e/api/admin/project/variants.e2e.test.js.map +1 -1
  600. package/dist/test/e2e/api/admin/state.e2e.test.js +25 -13
  601. package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
  602. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js +1 -1
  603. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js.map +1 -1
  604. package/dist/test/e2e/api/auth/simple-password-provider.e2e.test.js +1 -1
  605. package/dist/test/e2e/api/auth/simple-password-provider.e2e.test.js.map +1 -1
  606. package/dist/test/e2e/api/client/feature.e2e.test.js +12 -11
  607. package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
  608. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +3 -2
  609. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -1
  610. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js +10 -10
  611. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js.map +1 -1
  612. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +7 -5
  613. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
  614. package/dist/test/e2e/api/client/metricsV2.e2e.test.js +3 -2
  615. package/dist/test/e2e/api/client/metricsV2.e2e.test.js.map +1 -1
  616. package/dist/test/e2e/api/openapi/openapi.e2e.test.js +2 -1
  617. package/dist/test/e2e/api/openapi/openapi.e2e.test.js.map +1 -1
  618. package/dist/test/e2e/api/proxy/proxy.e2e.test.d.ts.map +1 -1
  619. package/dist/test/e2e/api/proxy/proxy.e2e.test.js +4 -3
  620. package/dist/test/e2e/api/proxy/proxy.e2e.test.js.map +1 -1
  621. package/dist/test/e2e/dedupe-permissions.e2e.test.js +4 -3
  622. package/dist/test/e2e/dedupe-permissions.e2e.test.js.map +1 -1
  623. package/dist/test/e2e/favor-permission-name-over-id.e2e.test.js +4 -3
  624. package/dist/test/e2e/favor-permission-name-over-id.e2e.test.js.map +1 -1
  625. package/dist/test/e2e/services/access-service.e2e.test.js +9 -4
  626. package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
  627. package/dist/test/e2e/services/addon-service.e2e.test.js +4 -3
  628. package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
  629. package/dist/test/e2e/services/api-token-service.e2e.test.js +1 -1
  630. package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
  631. package/dist/test/e2e/services/group-service.e2e.test.js +3 -3
  632. package/dist/test/e2e/services/group-service.e2e.test.js.map +1 -1
  633. package/dist/test/e2e/services/playground-service.test.d.ts.map +1 -1
  634. package/dist/test/e2e/services/playground-service.test.js +1 -0
  635. package/dist/test/e2e/services/playground-service.test.js.map +1 -1
  636. package/dist/test/e2e/services/project-health-service.e2e.test.js +9 -0
  637. package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
  638. package/dist/test/e2e/services/project-service.e2e.test.js +62 -44
  639. package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
  640. package/dist/test/e2e/services/reset-token-service.e2e.test.js +1 -1
  641. package/dist/test/e2e/services/reset-token-service.e2e.test.js.map +1 -1
  642. package/dist/test/e2e/services/setting-service.test.js +9 -8
  643. package/dist/test/e2e/services/setting-service.test.js.map +1 -1
  644. package/dist/test/e2e/services/state-service.e2e.test.js +5 -0
  645. package/dist/test/e2e/services/state-service.e2e.test.js.map +1 -1
  646. package/dist/test/e2e/services/user-service.e2e.test.js +2 -2
  647. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  648. package/dist/test/e2e/stores/event-store.e2e.test.js +11 -0
  649. package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
  650. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js +8 -2
  651. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js.map +1 -1
  652. package/dist/test/e2e/stores/feature-tag-store.e2e.test.js +24 -9
  653. package/dist/test/e2e/stores/feature-tag-store.e2e.test.js.map +1 -1
  654. package/dist/test/e2e/system-user-migration.test.d.ts +2 -0
  655. package/dist/test/e2e/system-user-migration.test.d.ts.map +1 -0
  656. package/dist/test/e2e/system-user-migration.test.js +65 -0
  657. package/dist/test/e2e/system-user-migration.test.js.map +1 -0
  658. package/dist/test/fixtures/fake-feature-tag-store.d.ts +1 -1
  659. package/dist/test/fixtures/fake-feature-tag-store.d.ts.map +1 -1
  660. package/dist/test/fixtures/fake-feature-tag-store.js +3 -2
  661. package/dist/test/fixtures/fake-feature-tag-store.js.map +1 -1
  662. package/dist/test/fixtures/store.d.ts.map +1 -1
  663. package/dist/test/fixtures/store.js +3 -1
  664. package/dist/test/fixtures/store.js.map +1 -1
  665. package/frontend/build/index.html +2 -3
  666. package/frontend/build/static/AdvancedPlayground-iXZHz_Rq.js +13 -0
  667. package/frontend/build/static/CreateProject-BbtWHPl8.js +4 -0
  668. package/frontend/build/static/FeatureArchiveDialog-D_tZ06Sa.js +7 -0
  669. package/frontend/build/static/{FeatureMetricsChart-d6700d04.js → FeatureMetricsChart-SiwdLhRh.js} +2 -2
  670. package/frontend/build/static/FeatureViewLazyExport-baWLSkEu.js +25 -0
  671. package/frontend/build/static/LazyAdminExport-ckQgco28.js +44 -0
  672. package/frontend/build/static/LazyProjectExport-R4jiFkLZ.js +25 -0
  673. package/frontend/build/static/{NetworkOverview-f1b8bc51.js → NetworkOverview-StnrlVkY.js} +53 -47
  674. package/frontend/build/static/NetworkTraffic-V87e4GGP.js +1 -0
  675. package/frontend/build/static/{ReactJSONEditor-cee5845e.js → ReactJSONEditor-Ybg5ijJk.js} +66 -66
  676. package/frontend/build/static/RoleCell-3lnoYolp.js +1 -0
  677. package/frontend/build/static/StrategyItemContainer-wRkYMo4g.js +1 -0
  678. package/frontend/build/static/chartjs-adapter-date-fns.esm-kkU_hxq-.js +23 -0
  679. package/frontend/build/static/{flowchart-elk-definition-170a3958-176ecefe.js → flowchart-elk-definition-170a3958-vkzW0gdf.js} +3 -3
  680. package/frontend/build/static/index-ORDXjnpF.js +501 -0
  681. package/frontend/build/static/{is_dark-bdf64838.js → is_dark-zSU9-MOM.js} +1 -1
  682. package/frontend/build/static/{mindmap-definition-44684416-6e91e0f5.js → mindmap-definition-44684416-2v9fPc7w.js} +2 -2
  683. package/frontend/build/static/not_operator_selected-Iyxw0Fyz.svg +5 -0
  684. package/frontend/build/static/not_operator_unselected-vtd9BSk1.svg +3 -0
  685. package/frontend/build/static/{timeline-definition-8e5a9bc6-d88c2258.js → timeline-definition-8e5a9bc6-RDFfY8I3.js} +1 -1
  686. package/frontend/build/static/{unknownify-708e56b5.js → unknownify-vwm75Pg9.js} +1 -1
  687. package/frontend/build/static/unleashHoliday-kBBu-_tQ.svg +33 -0
  688. package/frontend/build/static/unleashHolidayDark-fbGH80iu.svg +33 -0
  689. package/frontend/build/static/{useApiTokens-4c5c213b.js → useApiTokens-T6gzMZPt.js} +1 -1
  690. package/frontend/build/static/useProjectForm-o3r31UMh.js +1 -0
  691. package/frontend/package.json +21 -15
  692. package/package.json +5 -5
  693. package/dist/lib/db/environment-store.d.ts.map +0 -1
  694. package/dist/lib/db/environment-store.js.map +0 -1
  695. package/dist/lib/openapi/spec/admin-strategies-schema.d.ts.map +0 -1
  696. package/dist/lib/openapi/spec/admin-strategies-schema.js.map +0 -1
  697. package/dist/lib/openapi/spec/admin-strategies-schema.test.d.ts +0 -2
  698. package/dist/lib/openapi/spec/admin-strategies-schema.test.d.ts.map +0 -1
  699. package/dist/lib/openapi/spec/admin-strategies-schema.test.js.map +0 -1
  700. package/dist/lib/routes/admin-api/project/environments.d.ts.map +0 -1
  701. package/dist/lib/routes/admin-api/project/environments.js.map +0 -1
  702. package/dist/lib/routes/admin-api/project/index.d.ts.map +0 -1
  703. package/dist/lib/routes/admin-api/project/index.js.map +0 -1
  704. package/dist/lib/services/environment-service.d.ts.map +0 -1
  705. package/dist/lib/services/environment-service.js.map +0 -1
  706. package/dist/lib/types/stores/environment-store.d.ts.map +0 -1
  707. package/dist/lib/types/stores/environment-store.js.map +0 -1
  708. package/dist/test/e2e/api/admin/project/environments.e2e.test.d.ts.map +0 -1
  709. package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +0 -1
  710. package/dist/test/e2e/services/environment-service.test.d.ts.map +0 -1
  711. package/dist/test/e2e/services/environment-service.test.js.map +0 -1
  712. package/dist/test/fixtures/fake-environment-store.d.ts.map +0 -1
  713. package/dist/test/fixtures/fake-environment-store.js.map +0 -1
  714. package/frontend/build/static/24_Negator off-764e9292.svg +0 -3
  715. package/frontend/build/static/24_Negator-3c95065e.svg +0 -3
  716. package/frontend/build/static/AdvancedPlayground-b2553abd.js +0 -13
  717. package/frontend/build/static/Box-bd72643d.js +0 -1
  718. package/frontend/build/static/CreateProject-b18786eb.js +0 -4
  719. package/frontend/build/static/Error-ef493ef3.js +0 -1
  720. package/frontend/build/static/FeatureArchiveDialog-ec518ad8.js +0 -7
  721. package/frontend/build/static/FeatureViewLazyExport-91172621.js +0 -10
  722. package/frontend/build/static/LazyAdminExport-4686a742.js +0 -38
  723. package/frontend/build/static/LazyProjectExport-e3e11f4e.js +0 -26
  724. package/frontend/build/static/NetworkTraffic-c8b752fe.js +0 -1
  725. package/frontend/build/static/RoleCell-91725c88.js +0 -1
  726. package/frontend/build/static/StrategyItemContainer-ad74b119.js +0 -1
  727. package/frontend/build/static/chartjs-adapter-date-fns.esm-054094c3.js +0 -24
  728. package/frontend/build/static/index-ae1bed58.js +0 -460
  729. package/frontend/build/static/useProjectForm-ff29595e.js +0 -1
  730. /package/dist/{test/e2e/services → lib/features/project-environments}/environment-service.test.d.ts +0 -0
  731. /package/dist/{test/e2e/api/admin/project → lib/features/project-environments}/environments.e2e.test.d.ts +0 -0
  732. /package/frontend/build/static/{24_Text format off-9a1401ab.svg → 24_Text format off-H08NRmYe.svg} +0 -0
  733. /package/frontend/build/static/{24_Text format-c0530280.svg → 24_Text format-rAPEECSE.svg} +0 -0
  734. /package/frontend/build/static/{Logo-android-218bddbb.svg → Logo-android-udpLXX1T.svg} +0 -0
  735. /package/frontend/build/static/{Logo-flutter-cc3c706f.svg → Logo-flutter-eDaat-tQ.svg} +0 -0
  736. /package/frontend/build/static/{Logo-go-02475b3d.svg → Logo-go-7IBXKeYU.svg} +0 -0
  737. /package/frontend/build/static/{Logo-java-6e556b26.svg → Logo-java-52SStktf.svg} +0 -0
  738. /package/frontend/build/static/{Logo-javascript-caebc06e.svg → Logo-javascript-FL9SH-qr.svg} +0 -0
  739. /package/frontend/build/static/{Logo-net-0a33abee.svg → Logo-net-bG0mn56S.svg} +0 -0
  740. /package/frontend/build/static/{Logo-node-318ed025.svg → Logo-node-h37os8v5.svg} +0 -0
  741. /package/frontend/build/static/{Logo-php-201f18c3.svg → Logo-php-Z_EVXL0a.svg} +0 -0
  742. /package/frontend/build/static/{Logo-python-4305760e.svg → Logo-python-_44ZKCSX.svg} +0 -0
  743. /package/frontend/build/static/{Logo-react-18e98687.svg → Logo-react-9krlaJef.svg} +0 -0
  744. /package/frontend/build/static/{Logo-ruby-58f46832.svg → Logo-ruby-ZZBHss3J.svg} +0 -0
  745. /package/frontend/build/static/{Logo-rust-c83a80f9.svg → Logo-rust-2dVdHYIX.svg} +0 -0
  746. /package/frontend/build/static/{Logo-svelte-97dcb624.svg → Logo-svelte-fn23y4Xh.svg} +0 -0
  747. /package/frontend/build/static/{Logo-swift-315f842b.svg → Logo-swift-dl73ozXW.svg} +0 -0
  748. /package/frontend/build/static/{Logo-vue-0de73099.svg → Logo-vue-XNczCeoD.svg} +0 -0
  749. /package/frontend/build/static/{arrowLeft-7271148c.svg → arrowLeft-iw13ytfI.svg} +0 -0
  750. /package/frontend/build/static/{arrowRight-0d07b41b.svg → arrowRight-jyAAywbz.svg} +0 -0
  751. /package/frontend/build/static/{changeRequestProcess-f2469ef4.svg → changeRequestProcess-m2Uj_v6I.svg} +0 -0
  752. /package/frontend/build/static/{cr-db7653ac.png → cr-24xlfR5T.png} +0 -0
  753. /package/frontend/build/static/{datadog-543762b6.svg → datadog--09MbZDg.svg} +0 -0
  754. /package/frontend/build/static/{demo-qr-c2ce85bd.png → demo-qr-kJaJsgg_.png} +0 -0
  755. /package/frontend/build/static/{demo-userid-69a28f5e.png → demo-userid-OFH-UWxt.png} +0 -0
  756. /package/frontend/build/static/{edge-daisy-chaining-012bfdef.svg → edge-daisy-chaining-gE7UbpD0.svg} +0 -0
  757. /package/frontend/build/static/{edge-mode-5d25949b.svg → edge-mode-sUiAy22Z.svg} +0 -0
  758. /package/frontend/build/static/{edge-offline-f6a0f761.svg → edge-offline-uschgqgm.svg} +0 -0
  759. /package/frontend/build/static/{email-1b13db1f.svg → email-9TVW6bxs.svg} +0 -0
  760. /package/frontend/build/static/{google-4c4465a1.svg → google-Rg4hsLIv.svg} +0 -0
  761. /package/frontend/build/static/{isenabled-false-85a17190.svg → isenabled-false-cfG0cxg8.svg} +0 -0
  762. /package/frontend/build/static/{isenabled-true-def895c4.svg → isenabled-true-QEbId32j.svg} +0 -0
  763. /package/frontend/build/static/{jira-1abe7cbf.svg → jira-JdG6Pbgg.svg} +0 -0
  764. /package/frontend/build/static/{jira-comment-d9eb9af9.svg → jira-comment-4uboD2FW.svg} +0 -0
  765. /package/frontend/build/static/{link-child-7239dd72.svg → link-child-b2rNaTp8.svg} +0 -0
  766. /package/frontend/build/static/{link-parent-29e03412.svg → link-parent-2mtl7FAF.svg} +0 -0
  767. /package/frontend/build/static/{logo-b574b8c7.svg → logo-aXkSdUlT.svg} +0 -0
  768. /package/frontend/build/static/{logoBg-3fc9c711.svg → logoBg-w1GxfZYY.svg} +0 -0
  769. /package/frontend/build/static/{logoDarkWithText-7b7859f1.svg → logoDarkWithText-9CJmQsUT.svg} +0 -0
  770. /package/frontend/build/static/{logoWhiteBg-dacde9ce.svg → logoWhiteBg-sKFgoO5r.svg} +0 -0
  771. /package/frontend/build/static/{logoWhiteTransparentHorizontal-32f9c398.svg → logoWhiteTransparentHorizontal-OccVQlof.svg} +0 -0
  772. /package/frontend/build/static/{logoWithWhiteText-954086cd.svg → logoWithWhiteText-8-1bzjd2.svg} +0 -0
  773. /package/frontend/build/static/{merge-afa8c386.svg → merge-uyE9K2XR.svg} +0 -0
  774. /package/frontend/build/static/{mobileGuidanceBg-0cc2cfdc.svg → mobileGuidanceBg-_XUYJ4bI.svg} +0 -0
  775. /package/frontend/build/static/{pro-enterprise-feature-badge-8ac467c3.svg → pro-enterprise-feature-badge-D2dwX2o5.svg} +0 -0
  776. /package/frontend/build/static/{pro-enterprise-feature-badge-light-81a18f9b.svg → pro-enterprise-feature-badge-light-JPGefdhP.svg} +0 -0
  777. /package/frontend/build/static/{projectIcon-0c6827a4.svg → projectIcon-patkU339.svg} +0 -0
  778. /package/frontend/build/static/{rollout-c922b6e9.svg → rollout-wL0vStZV.svg} +0 -0
  779. /package/frontend/build/static/{slack-36ce798a.svg → slack-LdHzcD3n.svg} +0 -0
  780. /package/frontend/build/static/{stars-5e0648cd.svg → stars-uZav8YWv.svg} +0 -0
  781. /package/frontend/build/static/{style-f10c9ed6.css → style-gSb9cHBe.css} +0 -0
  782. /package/frontend/build/static/{teams-4e30b51f.svg → teams-70Mfxcwa.svg} +0 -0
  783. /package/frontend/build/static/{texture-c29e66c0.png → texture-NpzjhzHk.png} +0 -0
  784. /package/frontend/build/static/{unleash-integration-949d8966.svg → unleash-integration-rcapuVXn.svg} +0 -0
  785. /package/frontend/build/static/{unleashLogoIconDarkAlpha-de056a82.gif → unleashLogoIconDarkAlpha-W77gtdw3.gif} +0 -0
  786. /package/frontend/build/static/{usage-line-00d00632.svg → usage-line-R4nA8fmB.svg} +0 -0
  787. /package/frontend/build/static/{usage-rate-cb18f02b.svg → usage-rate-510IagyJ.svg} +0 -0
  788. /package/frontend/build/static/{webhooks-b1b44207.svg → webhooks-p7bNIH7i.svg} +0 -0
@@ -9,12 +9,13 @@ const permissions_1 = require("../../../lib/types/permissions");
9
9
  const test_config_1 = require("../../config/test-config");
10
10
  const model_1 = require("../../../lib/types/model");
11
11
  const random_id_1 = require("../../../lib/util/random-id");
12
- const environment_service_1 = __importDefault(require("../../../lib/services/environment-service"));
12
+ const environment_service_1 = __importDefault(require("../../../lib/features/project-environments/environment-service"));
13
13
  const incompatible_project_error_1 = __importDefault(require("../../../lib/error/incompatible-project-error"));
14
14
  const services_1 = require("../../../lib/services");
15
15
  const events_1 = require("../../../lib/types/events");
16
16
  const date_fns_1 = require("date-fns");
17
17
  const features_1 = require("../../../lib/features");
18
+ const types_1 = require("../../../lib/types");
18
19
  let stores;
19
20
  let db;
20
21
  let projectService;
@@ -24,6 +25,7 @@ let environmentService;
24
25
  let featureToggleService;
25
26
  let user; // many methods in this test use User instead of IUser
26
27
  let group;
28
+ const TEST_USER_ID = -9999;
27
29
  const isProjectUser = async (userId, projectName, condition) => {
28
30
  expect(await projectService.isProjectUser(userId, projectName)).toBe(condition);
29
31
  };
@@ -41,9 +43,6 @@ beforeAll(async () => {
41
43
  });
42
44
  const config = (0, test_config_1.createTestConfig)({
43
45
  getLogger: no_logger_1.default,
44
- experimental: {
45
- flags: { privateProjects: true },
46
- },
47
46
  });
48
47
  eventService = new services_1.EventService(stores, config);
49
48
  accessService = (0, features_1.createAccessService)(db.rawDatabase, config);
@@ -143,6 +142,7 @@ test('should not be able to delete project with toggles', async () => {
143
142
  await projectService.createProject(project, user);
144
143
  await stores.featureToggleStore.create(project.id, {
145
144
  name: 'test-project-delete',
145
+ createdByUserId: 9999,
146
146
  });
147
147
  try {
148
148
  await projectService.deleteProject(project.id, user);
@@ -376,7 +376,7 @@ test('should remove user from the project', async () => {
376
376
  });
377
377
  const memberRole = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
378
378
  await projectService.addUser(project.id, memberRole.id, projectMember1.id, 'test');
379
- await projectService.removeUser(project.id, memberRole.id, projectMember1.id, 'test');
379
+ await projectService.removeUser(project.id, memberRole.id, projectMember1.id, 'test', TEST_USER_ID);
380
380
  const { users } = await projectService.getAccessToProject(project.id);
381
381
  const memberUsers = users.filter((u) => u.roleId === memberRole.id);
382
382
  expect(memberUsers).toHaveLength(0);
@@ -391,7 +391,7 @@ test('should not change project if feature toggle project does not match current
391
391
  };
392
392
  const toggle = { name: 'test-toggle' };
393
393
  await projectService.createProject(project, user);
394
- await featureToggleService.createFeatureToggle(project.id, toggle, user.email);
394
+ await featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
395
395
  try {
396
396
  await projectService.changeProject('newProject', toggle.name, user, 'wrong-project-id');
397
397
  }
@@ -410,7 +410,7 @@ test('should return 404 if no project is found with the project id', async () =>
410
410
  };
411
411
  const toggle = { name: 'test-toggle-2' };
412
412
  await projectService.createProject(project, user);
413
- await featureToggleService.createFeatureToggle(project.id, toggle, user.email);
413
+ await featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
414
414
  try {
415
415
  await projectService.changeProject('newProject', toggle.name, user, project.id);
416
416
  }
@@ -440,7 +440,7 @@ test('should fail if user is not authorized', async () => {
440
440
  });
441
441
  await projectService.createProject(project, user);
442
442
  await projectService.createProject(projectDestination, projectAdmin1);
443
- await featureToggleService.createFeatureToggle(project.id, toggle, user.email);
443
+ await featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
444
444
  try {
445
445
  await projectService.changeProject(projectDestination.id, toggle.name, user, project.id);
446
446
  }
@@ -465,7 +465,7 @@ test('should change project when checks pass', async () => {
465
465
  const toggle = { name: (0, random_id_1.randomId)() };
466
466
  await projectService.createProject(projectA, user);
467
467
  await projectService.createProject(projectB, user);
468
- await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email);
468
+ await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email, TEST_USER_ID);
469
469
  await projectService.changeProject(projectB.id, toggle.name, user, projectA.id);
470
470
  const updatedFeature = await featureToggleService.getFeature({
471
471
  featureName: toggle.name,
@@ -488,7 +488,7 @@ test('changing project should emit event even if user does not have a username s
488
488
  const toggle = { name: (0, random_id_1.randomId)() };
489
489
  await projectService.createProject(projectA, user);
490
490
  await projectService.createProject(projectB, user);
491
- await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email);
491
+ await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email, TEST_USER_ID);
492
492
  const eventsBeforeChange = await stores.eventStore.getEvents();
493
493
  await projectService.changeProject(projectB.id, toggle.name, user, projectA.id);
494
494
  const eventsAfterChange = await stores.eventStore.getEvents();
@@ -511,9 +511,9 @@ test('should require equal project environments to move features', async () => {
511
511
  const toggle = { name: (0, random_id_1.randomId)() };
512
512
  await projectService.createProject(projectA, user);
513
513
  await projectService.createProject(projectB, user);
514
- await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email);
514
+ await featureToggleService.createFeatureToggle(projectA.id, toggle, user.email, TEST_USER_ID);
515
515
  await stores.environmentStore.create(environment);
516
- await environmentService.addEnvironmentToProject(environment.name, projectB.id);
516
+ await environmentService.addEnvironmentToProject(environment.name, projectB.id, 'test', TEST_USER_ID);
517
517
  await expect(() => projectService.changeProject(projectB.id, toggle.name, user, projectA.id)).rejects.toThrowError(incompatible_project_error_1.default);
518
518
  });
519
519
  test('A newly created project only gets connected to enabled environments', async () => {
@@ -607,6 +607,7 @@ test('should add a user to the project with a custom role', async () => {
607
607
  id: 8, // DELETE_FEATURE
608
608
  },
609
609
  ],
610
+ createdByUserId: types_1.SYSTEM_USER_ID,
610
611
  });
611
612
  await projectService.addUser(project.id, customRole.id, projectMember1.id, 'test');
612
613
  const { users } = await projectService.getAccessToProject(project.id);
@@ -643,6 +644,7 @@ test('should delete role entries when deleting project', async () => {
643
644
  id: 8, // DELETE_FEATURE
644
645
  },
645
646
  ],
647
+ createdByUserId: types_1.SYSTEM_USER_ID,
646
648
  });
647
649
  await projectService.addUser(project.id, customRole.id, user1.id, 'test');
648
650
  await projectService.addUser(project.id, customRole.id, user2.id, 'test');
@@ -676,6 +678,7 @@ test('should change a users role in the project', async () => {
676
678
  id: 8, // DELETE_FEATURE
677
679
  },
678
680
  ],
681
+ createdByUserId: types_1.SYSTEM_USER_ID,
679
682
  });
680
683
  const member = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
681
684
  await projectService.addUser(project.id, member.id, projectUser.id, 'test');
@@ -684,7 +687,7 @@ test('should change a users role in the project', async () => {
684
687
  expect(memberUser).toHaveLength(1);
685
688
  expect(memberUser[0].id).toBe(projectUser.id);
686
689
  expect(memberUser[0].name).toBe(projectUser.name);
687
- await projectService.removeUser(project.id, member.id, projectUser.id, 'test');
690
+ await projectService.removeUser(project.id, member.id, projectUser.id, 'test', TEST_USER_ID);
688
691
  await projectService.addUser(project.id, customRole.id, projectUser.id, 'test');
689
692
  const { users: updatedUsers } = await projectService.getAccessToProject(project.id);
690
693
  const customUser = updatedUsers.filter((u) => u.roleId === customRole.id);
@@ -708,7 +711,7 @@ test('should update role for user on project', async () => {
708
711
  const memberRole = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
709
712
  const ownerRole = await stores.roleStore.getRoleByName(model_1.RoleName.OWNER);
710
713
  await projectService.addUser(project.id, memberRole.id, projectMember1.id, 'test');
711
- await projectService.changeRole(project.id, ownerRole.id, projectMember1.id, 'test');
714
+ await projectService.changeRole(project.id, ownerRole.id, projectMember1.id, 'test', TEST_USER_ID);
712
715
  const { users } = await projectService.getAccessToProject(project.id);
713
716
  const memberUsers = users.filter((u) => u.roleId === memberRole.id);
714
717
  const ownerUsers = users.filter((u) => u.roleId === ownerRole.id);
@@ -735,7 +738,7 @@ test('should able to assign role without existing members', async () => {
735
738
  });
736
739
  const memberRole = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
737
740
  await projectService.addUser(project.id, memberRole.id, projectMember1.id, 'test');
738
- await projectService.changeRole(project.id, testRole.id, projectMember1.id, 'test');
741
+ await projectService.changeRole(project.id, testRole.id, projectMember1.id, 'test', TEST_USER_ID);
739
742
  const { users } = await projectService.getAccessToProject(project.id);
740
743
  const memberUsers = users.filter((u) => u.roleId === memberRole.id);
741
744
  const testUsers = users.filter((u) => u.roleId === testRole.id);
@@ -755,10 +758,10 @@ describe('ensure project has at least one owner', () => {
755
758
  const roles = await stores.roleStore.getRolesForProject(project.id);
756
759
  const ownerRole = roles.find((r) => r.name === model_1.RoleName.OWNER);
757
760
  await expect(async () => {
758
- await projectService.removeUser(project.id, ownerRole.id, user.id, 'test');
761
+ await projectService.removeUser(project.id, ownerRole.id, user.id, 'test', TEST_USER_ID);
759
762
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
760
763
  await expect(async () => {
761
- await projectService.removeUserAccess(project.id, user.id, 'test');
764
+ await projectService.removeUserAccess(project.id, user.id, 'test', TEST_USER_ID);
762
765
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
763
766
  });
764
767
  test('should be able to remove member user from the project when another is owner', async () => {
@@ -775,9 +778,9 @@ describe('ensure project has at least one owner', () => {
775
778
  name: 'Some Name',
776
779
  email: 'member@getunleash.io',
777
780
  });
778
- await projectService.addAccess(project.id, [memberRole.id], [], [memberUser.id], 'test');
781
+ await projectService.addAccess(project.id, [memberRole.id], [], [memberUser.id], 'test', TEST_USER_ID);
779
782
  const usersBefore = await projectService.getProjectUsers(project.id);
780
- await projectService.removeUserAccess(project.id, memberUser.id, 'test');
783
+ await projectService.removeUserAccess(project.id, memberUser.id, 'test', TEST_USER_ID);
781
784
  const usersAfter = await projectService.getProjectUsers(project.id);
782
785
  expect(usersBefore).toHaveLength(2);
783
786
  expect(usersAfter).toHaveLength(1);
@@ -798,10 +801,10 @@ describe('ensure project has at least one owner', () => {
798
801
  const memberRole = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
799
802
  await projectService.addUser(project.id, memberRole.id, projectMember1.id, 'test');
800
803
  await expect(async () => {
801
- await projectService.changeRole(project.id, memberRole.id, user.id, 'test');
804
+ await projectService.changeRole(project.id, memberRole.id, user.id, 'test', TEST_USER_ID);
802
805
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
803
806
  await expect(async () => {
804
- await projectService.setRolesForUser(project.id, user.id, [memberRole.id], 'test');
807
+ await projectService.setRolesForUser(project.id, user.id, [memberRole.id], 'test', TEST_USER_ID);
805
808
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
806
809
  });
807
810
  async function projectWithGroupOwner(projectId) {
@@ -815,10 +818,10 @@ describe('ensure project has at least one owner', () => {
815
818
  await projectService.createProject(project, user);
816
819
  const roles = await stores.roleStore.getRolesForProject(project.id);
817
820
  const ownerRole = roles.find((r) => r.name === model_1.RoleName.OWNER);
818
- await projectService.addGroup(project.id, ownerRole.id, group.id, 'test');
821
+ await projectService.addGroup(project.id, ownerRole.id, group.id, 'test', TEST_USER_ID);
819
822
  // this should be fine, leaving the group as the only owner
820
823
  // note group has zero members, but it still acts as an owner
821
- await projectService.removeUser(project.id, ownerRole.id, user.id, 'test');
824
+ await projectService.removeUser(project.id, ownerRole.id, user.id, 'test', TEST_USER_ID);
822
825
  return {
823
826
  project,
824
827
  group,
@@ -828,20 +831,20 @@ describe('ensure project has at least one owner', () => {
828
831
  test('should not remove group from the project', async () => {
829
832
  const { project, group, ownerRole } = await projectWithGroupOwner('remove-group-not-allowed');
830
833
  await expect(async () => {
831
- await projectService.removeGroup(project.id, ownerRole.id, group.id, 'test');
834
+ await projectService.removeGroup(project.id, ownerRole.id, group.id, 'test', TEST_USER_ID);
832
835
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
833
836
  await expect(async () => {
834
- await projectService.removeGroupAccess(project.id, group.id, 'test');
837
+ await projectService.removeGroupAccess(project.id, group.id, 'test', TEST_USER_ID);
835
838
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
836
839
  });
837
840
  test('should not update role for group on project when she is the owner', async () => {
838
841
  const { project, group } = await projectWithGroupOwner('update-group-not-allowed');
839
842
  const memberRole = await stores.roleStore.getRoleByName(model_1.RoleName.MEMBER);
840
843
  await expect(async () => {
841
- await projectService.changeGroupRole(project.id, memberRole.id, group.id, 'test');
844
+ await projectService.changeGroupRole(project.id, memberRole.id, group.id, 'test', TEST_USER_ID);
842
845
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
843
846
  await expect(async () => {
844
- await projectService.setRolesForGroup(project.id, group.id, [memberRole.id], 'test');
847
+ await projectService.setRolesForGroup(project.id, group.id, [memberRole.id], 'test', TEST_USER_ID);
845
848
  }).rejects.toThrowError(new Error('A project must have at least one owner'));
846
849
  });
847
850
  });
@@ -870,8 +873,9 @@ test('Should allow bulk update of group permissions', async () => {
870
873
  id: 2, // CREATE_FEATURE
871
874
  },
872
875
  ],
876
+ createdByUserId: types_1.SYSTEM_USER_ID,
873
877
  });
874
- await projectService.addAccess(project.id, [createFeatureRole.id], [group1.id], [user1.id], 'some-admin-user');
878
+ await projectService.addAccess(project.id, [createFeatureRole.id], [group1.id], [user1.id], 'some-admin-user', TEST_USER_ID);
875
879
  });
876
880
  test('Should bulk update of only users', async () => {
877
881
  const project = 'bulk-update-project-users';
@@ -887,8 +891,9 @@ test('Should bulk update of only users', async () => {
887
891
  id: 2, // CREATE_FEATURE
888
892
  },
889
893
  ],
894
+ createdByUserId: types_1.SYSTEM_USER_ID,
890
895
  });
891
- await projectService.addAccess(project, [createFeatureRole.id], [], [user1.id], 'some-admin-user');
896
+ await projectService.addAccess(project, [createFeatureRole.id], [], [user1.id], 'some-admin-user', TEST_USER_ID);
892
897
  });
893
898
  test('Should allow bulk update of only groups', async () => {
894
899
  const project = {
@@ -911,8 +916,9 @@ test('Should allow bulk update of only groups', async () => {
911
916
  id: 2, // CREATE_FEATURE
912
917
  },
913
918
  ],
919
+ createdByUserId: types_1.SYSTEM_USER_ID,
914
920
  });
915
- await projectService.addAccess(project.id, [createFeatureRole.id], [group1.id], [], 'some-admin-user');
921
+ await projectService.addAccess(project.id, [createFeatureRole.id], [group1.id], [], 'some-admin-user', TEST_USER_ID);
916
922
  });
917
923
  test('Should allow permutations of roles, groups and users when adding a new access', async () => {
918
924
  const project = {
@@ -946,6 +952,7 @@ test('Should allow permutations of roles, groups and users when adding a new acc
946
952
  id: 2, // CREATE_FEATURE
947
953
  },
948
954
  ],
955
+ createdByUserId: types_1.SYSTEM_USER_ID,
949
956
  });
950
957
  const role2 = await accessService.createRole({
951
958
  name: 'permutation-role-2',
@@ -955,8 +962,9 @@ test('Should allow permutations of roles, groups and users when adding a new acc
955
962
  id: 7, // UPDATE_FEATURE
956
963
  },
957
964
  ],
965
+ createdByUserId: types_1.SYSTEM_USER_ID,
958
966
  });
959
- await projectService.addAccess(project.id, [role1.id, role2.id], [group1.id, group2.id], [user1.id, user2.id], 'some-admin-user');
967
+ await projectService.addAccess(project.id, [role1.id, role2.id], [group1.id, group2.id], [user1.id, user2.id], 'some-admin-user', TEST_USER_ID);
960
968
  const { users, groups } = await projectService.getAccessToProject(project.id);
961
969
  const ownerRole = await stores.roleStore.getRoleByName(model_1.RoleName.OWNER);
962
970
  expect(users).toHaveLength(3); // the 2 added plus the one that created the project
@@ -976,9 +984,11 @@ test('should only count active feature toggles for project', async () => {
976
984
  await projectService.createProject(project, user);
977
985
  await stores.featureToggleStore.create(project.id, {
978
986
  name: 'only-active-t1',
987
+ createdByUserId: 9999,
979
988
  });
980
989
  await stores.featureToggleStore.create(project.id, {
981
990
  name: 'only-active-t2',
991
+ createdByUserId: 9999,
982
992
  });
983
993
  await featureToggleService.archiveToggle('only-active-t2', user);
984
994
  const projects = await projectService.getProjects();
@@ -996,6 +1006,7 @@ test('should list projects with all features archived', async () => {
996
1006
  await projectService.createProject(project, user);
997
1007
  await stores.featureToggleStore.create(project.id, {
998
1008
  name: 'archived-toggle',
1009
+ createdByUserId: 9999,
999
1010
  });
1000
1011
  await featureToggleService.archiveToggle('archived-toggle', user);
1001
1012
  const projects = await projectService.getProjects();
@@ -1030,7 +1041,7 @@ test('should calculate average time to production', async () => {
1030
1041
  { name: 'average-prod-time-5' },
1031
1042
  ];
1032
1043
  const featureToggles = await Promise.all(toggles.map((toggle) => {
1033
- return featureToggleService.createFeatureToggle(project.id, toggle, user.email);
1044
+ return featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
1034
1045
  }));
1035
1046
  await Promise.all(featureToggles.map((toggle) => {
1036
1047
  return eventService.storeEvent(new events_1.FeatureEnvironmentEvent({
@@ -1039,6 +1050,7 @@ test('should calculate average time to production', async () => {
1039
1050
  featureName: toggle.name,
1040
1051
  environment: 'default',
1041
1052
  createdBy: 'Fredrik',
1053
+ createdByUserId: TEST_USER_ID,
1042
1054
  }));
1043
1055
  }));
1044
1056
  await updateEventCreatedAt((0, date_fns_1.subDays)(new Date(), 31), 'average-prod-time-5');
@@ -1062,6 +1074,7 @@ test('should calculate average time to production ignoring some items', async ()
1062
1074
  featureName,
1063
1075
  environment: 'default',
1064
1076
  createdBy: 'Fredrik',
1077
+ createdByUserId: TEST_USER_ID,
1065
1078
  tags: [],
1066
1079
  });
1067
1080
  await projectService.createProject(project, user);
@@ -1069,10 +1082,10 @@ test('should calculate average time to production ignoring some items', async ()
1069
1082
  name: 'customEnv',
1070
1083
  type: 'development',
1071
1084
  });
1072
- await environmentService.addEnvironmentToProject('customEnv', project.id);
1085
+ await environmentService.addEnvironmentToProject('customEnv', project.id, types_1.SYSTEM_USER.username, types_1.SYSTEM_USER.id);
1073
1086
  // actual toggle we take for calculations
1074
1087
  const toggle = { name: 'main-toggle' };
1075
- await featureToggleService.createFeatureToggle(project.id, toggle, user.email);
1088
+ await featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
1076
1089
  await updateFeature(toggle.name, {
1077
1090
  created_at: (0, date_fns_1.subDays)(new Date(), 20),
1078
1091
  });
@@ -1082,22 +1095,22 @@ test('should calculate average time to production ignoring some items', async ()
1082
1095
  await eventService.storeEvent(new events_1.FeatureEnvironmentEvent(makeEvent(toggle.name)));
1083
1096
  // ignore toggles enabled in non-prod envs
1084
1097
  const devToggle = { name: 'dev-toggle' };
1085
- await featureToggleService.createFeatureToggle(project.id, devToggle, user.email);
1098
+ await featureToggleService.createFeatureToggle(project.id, devToggle, user.email, TEST_USER_ID);
1086
1099
  await eventService.storeEvent(new events_1.FeatureEnvironmentEvent({
1087
1100
  ...makeEvent(devToggle.name),
1088
1101
  environment: 'customEnv',
1089
1102
  }));
1090
1103
  // ignore toggles from other projects
1091
1104
  const otherProjectToggle = { name: 'other-project' };
1092
- await featureToggleService.createFeatureToggle('default', otherProjectToggle, user.email);
1105
+ await featureToggleService.createFeatureToggle('default', otherProjectToggle, user.email, TEST_USER_ID);
1093
1106
  await eventService.storeEvent(new events_1.FeatureEnvironmentEvent(makeEvent(otherProjectToggle.name)));
1094
1107
  // ignore non-release toggles
1095
1108
  const nonReleaseToggle = { name: 'permission-toggle', type: 'permission' };
1096
- await featureToggleService.createFeatureToggle(project.id, nonReleaseToggle, user.email);
1109
+ await featureToggleService.createFeatureToggle(project.id, nonReleaseToggle, user.email, TEST_USER_ID);
1097
1110
  await eventService.storeEvent(new events_1.FeatureEnvironmentEvent(makeEvent(nonReleaseToggle.name)));
1098
1111
  // ignore toggles with events before toggle creation time
1099
1112
  const previouslyDeleteToggle = { name: 'previously-deleted' };
1100
- await featureToggleService.createFeatureToggle(project.id, previouslyDeleteToggle, user.email);
1113
+ await featureToggleService.createFeatureToggle(project.id, previouslyDeleteToggle, user.email, TEST_USER_ID);
1101
1114
  await eventService.storeEvent(new events_1.FeatureEnvironmentEvent(makeEvent(previouslyDeleteToggle.name)));
1102
1115
  await updateEventCreatedAt((0, date_fns_1.subDays)(new Date(), 30), previouslyDeleteToggle.name);
1103
1116
  const result = await projectService.getStatusUpdates(project.id);
@@ -1118,7 +1131,7 @@ test('should get correct amount of features created in current and past window',
1118
1131
  { name: 'features-created-4' },
1119
1132
  ];
1120
1133
  await Promise.all(toggles.map((toggle) => {
1121
- return featureToggleService.createFeatureToggle(project.id, toggle, user.email);
1134
+ return featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
1122
1135
  }));
1123
1136
  await Promise.all([
1124
1137
  updateFeature(toggles[2].name, { created_at: (0, date_fns_1.subDays)(new Date(), 31) }),
@@ -1143,7 +1156,7 @@ test('should get correct amount of features archived in current and past window'
1143
1156
  { name: 'features-archived-4' },
1144
1157
  ];
1145
1158
  await Promise.all(toggles.map((toggle) => {
1146
- return featureToggleService.createFeatureToggle(project.id, toggle, user.email);
1159
+ return featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
1147
1160
  }));
1148
1161
  await Promise.all([
1149
1162
  updateFeature(toggles[0].name, {
@@ -1206,7 +1219,7 @@ test('should return average time to production per toggle', async () => {
1206
1219
  { name: 'average-prod-time-pt-5', subdays: 2 },
1207
1220
  ];
1208
1221
  const featureToggles = await Promise.all(toggles.map((toggle) => {
1209
- return featureToggleService.createFeatureToggle(project.id, toggle, user.email);
1222
+ return featureToggleService.createFeatureToggle(project.id, toggle, user.email, TEST_USER_ID);
1210
1223
  }));
1211
1224
  await Promise.all(featureToggles.map((toggle) => {
1212
1225
  return eventService.storeEvent(new events_1.FeatureEnvironmentEvent({
@@ -1215,6 +1228,7 @@ test('should return average time to production per toggle', async () => {
1215
1228
  featureName: toggle.name,
1216
1229
  environment: 'default',
1217
1230
  createdBy: 'Fredrik',
1231
+ createdByUserId: TEST_USER_ID,
1218
1232
  }));
1219
1233
  }));
1220
1234
  await Promise.all(toggles.map((toggle) => updateFeature(toggle.name, {
@@ -1250,10 +1264,10 @@ test('should return average time to production per toggle for a specific project
1250
1264
  { name: 'average-prod-time-pt-14', subdays: 2 },
1251
1265
  ];
1252
1266
  const featureTogglesProject1 = await Promise.all(togglesProject1.map((toggle) => {
1253
- return featureToggleService.createFeatureToggle(project1.id, toggle, user.email);
1267
+ return featureToggleService.createFeatureToggle(project1.id, toggle, user.email, TEST_USER_ID);
1254
1268
  }));
1255
1269
  const featureTogglesProject2 = await Promise.all(togglesProject2.map((toggle) => {
1256
- return featureToggleService.createFeatureToggle(project2.id, toggle, user.email);
1270
+ return featureToggleService.createFeatureToggle(project2.id, toggle, user.email, TEST_USER_ID);
1257
1271
  }));
1258
1272
  await Promise.all(featureTogglesProject1.map((toggle) => {
1259
1273
  return eventService.storeEvent(new events_1.FeatureEnvironmentEvent({
@@ -1262,6 +1276,7 @@ test('should return average time to production per toggle for a specific project
1262
1276
  featureName: toggle.name,
1263
1277
  environment: 'default',
1264
1278
  createdBy: 'Fredrik',
1279
+ createdByUserId: TEST_USER_ID,
1265
1280
  }));
1266
1281
  }));
1267
1282
  await Promise.all(featureTogglesProject2.map((toggle) => {
@@ -1271,6 +1286,7 @@ test('should return average time to production per toggle for a specific project
1271
1286
  featureName: toggle.name,
1272
1287
  environment: 'default',
1273
1288
  createdBy: 'Fredrik',
1289
+ createdByUserId: TEST_USER_ID,
1274
1290
  }));
1275
1291
  }));
1276
1292
  await Promise.all(togglesProject1.map((toggle) => updateFeature(toggle.name, {
@@ -1298,7 +1314,7 @@ test('should return average time to production per toggle and include archived t
1298
1314
  { name: 'average-prod-time-pta-12', subdays: 40 },
1299
1315
  ];
1300
1316
  const featureTogglesProject1 = await Promise.all(togglesProject1.map((toggle) => {
1301
- return featureToggleService.createFeatureToggle(project1.id, toggle, user.email);
1317
+ return featureToggleService.createFeatureToggle(project1.id, toggle, user.email, TEST_USER_ID);
1302
1318
  }));
1303
1319
  await Promise.all(featureTogglesProject1.map((toggle) => {
1304
1320
  return eventService.storeEvent(new events_1.FeatureEnvironmentEvent({
@@ -1307,6 +1323,7 @@ test('should return average time to production per toggle and include archived t
1307
1323
  featureName: toggle.name,
1308
1324
  environment: 'default',
1309
1325
  createdBy: 'Fredrik',
1326
+ createdByUserId: TEST_USER_ID,
1310
1327
  }));
1311
1328
  }));
1312
1329
  await Promise.all(togglesProject1.map((toggle) => updateFeature(toggle.name, {
@@ -1362,6 +1379,7 @@ test('deleting a project with archived toggles should result in any remaining ar
1362
1379
  await projectService.createProject(project, user);
1363
1380
  await stores.featureToggleStore.create(project.id, {
1364
1381
  name: toggleName,
1382
+ createdByUserId: 9999,
1365
1383
  });
1366
1384
  await stores.featureToggleStore.archive(toggleName);
1367
1385
  await projectService.deleteProject(project.id, user);