unleash-server 4.2.0 → 4.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/CHANGELOG.md +1266 -0
  2. package/dist/lib/addons/addon.d.ts +2 -1
  3. package/dist/lib/addons/addon.js.map +1 -1
  4. package/dist/lib/addons/datadog.d.ts +2 -1
  5. package/dist/lib/addons/datadog.js.map +1 -1
  6. package/dist/lib/addons/datadog.test.js +3 -0
  7. package/dist/lib/addons/datadog.test.js.map +1 -1
  8. package/dist/lib/addons/feature-event-formatter-md.d.ts +1 -1
  9. package/dist/lib/addons/feature-event-formatter-md.js +13 -14
  10. package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
  11. package/dist/lib/addons/slack.d.ts +2 -1
  12. package/dist/lib/addons/slack.js.map +1 -1
  13. package/dist/lib/addons/slack.test.js +6 -0
  14. package/dist/lib/addons/slack.test.js.map +1 -1
  15. package/dist/lib/addons/teams.d.ts +2 -1
  16. package/dist/lib/addons/teams.js.map +1 -1
  17. package/dist/lib/addons/teams.test.js +3 -0
  18. package/dist/lib/addons/teams.test.js.map +1 -1
  19. package/dist/lib/addons/webhook.d.ts +8 -2
  20. package/dist/lib/addons/webhook.js +0 -1
  21. package/dist/lib/addons/webhook.js.map +1 -1
  22. package/dist/lib/addons/webhook.test.js +2 -0
  23. package/dist/lib/addons/webhook.test.js.map +1 -1
  24. package/dist/lib/create-config.js +6 -5
  25. package/dist/lib/create-config.js.map +1 -1
  26. package/dist/lib/db/client-instance-store.js +2 -2
  27. package/dist/lib/db/client-instance-store.js.map +1 -1
  28. package/dist/lib/db/client-metrics-db.js +2 -2
  29. package/dist/lib/db/client-metrics-db.js.map +1 -1
  30. package/dist/lib/db/client-metrics-store-v2.js +5 -1
  31. package/dist/lib/db/client-metrics-store-v2.js.map +1 -1
  32. package/dist/lib/db/client-metrics-store.js +2 -2
  33. package/dist/lib/db/client-metrics-store.js.map +1 -1
  34. package/dist/lib/db/event-store.d.ts +10 -6
  35. package/dist/lib/db/event-store.js +21 -1
  36. package/dist/lib/db/event-store.js.map +1 -1
  37. package/dist/lib/db/session-store.js +2 -1
  38. package/dist/lib/db/session-store.js.map +1 -1
  39. package/dist/lib/error/minimum-one-environment-error.d.ts +5 -0
  40. package/dist/lib/error/minimum-one-environment-error.js +24 -0
  41. package/dist/lib/error/minimum-one-environment-error.js.map +1 -0
  42. package/dist/lib/metrics.js +20 -12
  43. package/dist/lib/metrics.js.map +1 -1
  44. package/dist/lib/metrics.test.js +1 -0
  45. package/dist/lib/metrics.test.js.map +1 -1
  46. package/dist/lib/middleware/rbac-middleware.js +2 -17
  47. package/dist/lib/middleware/rbac-middleware.js.map +1 -1
  48. package/dist/lib/middleware/rbac-middleware.test.js +0 -21
  49. package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
  50. package/dist/lib/middleware/secure-headers.js +2 -1
  51. package/dist/lib/middleware/secure-headers.js.map +1 -1
  52. package/dist/lib/middleware/session-db.js +2 -3
  53. package/dist/lib/middleware/session-db.js.map +1 -1
  54. package/dist/lib/routes/admin-api/event.d.ts +8 -4
  55. package/dist/lib/routes/admin-api/event.js +8 -10
  56. package/dist/lib/routes/admin-api/event.js.map +1 -1
  57. package/dist/lib/routes/admin-api/feature.js +6 -2
  58. package/dist/lib/routes/admin-api/feature.js.map +1 -1
  59. package/dist/lib/routes/admin-api/project/features.js +11 -8
  60. package/dist/lib/routes/admin-api/project/features.js.map +1 -1
  61. package/dist/lib/routes/admin-api/state.js +2 -3
  62. package/dist/lib/routes/admin-api/state.js.map +1 -1
  63. package/dist/lib/routes/client-api/feature.test.js +3 -2
  64. package/dist/lib/routes/client-api/feature.test.js.map +1 -1
  65. package/dist/lib/routes/util.js +2 -0
  66. package/dist/lib/routes/util.js.map +1 -1
  67. package/dist/lib/services/addon-service-test-simple-addon.d.ts +1 -1
  68. package/dist/lib/services/addon-service-test-simple-addon.js.map +1 -1
  69. package/dist/lib/services/addon-service.js +2 -2
  70. package/dist/lib/services/addon-service.js.map +1 -1
  71. package/dist/lib/services/api-token-service.js +2 -2
  72. package/dist/lib/services/api-token-service.js.map +1 -1
  73. package/dist/lib/services/client-metrics/client-metrics-service-v2.js +3 -4
  74. package/dist/lib/services/client-metrics/client-metrics-service-v2.js.map +1 -1
  75. package/dist/lib/services/client-metrics/client-metrics.test.js +74 -41
  76. package/dist/lib/services/client-metrics/client-metrics.test.js.map +1 -1
  77. package/dist/lib/services/client-metrics/index.d.ts +6 -5
  78. package/dist/lib/services/client-metrics/index.js +13 -10
  79. package/dist/lib/services/client-metrics/index.js.map +1 -1
  80. package/dist/lib/services/client-metrics/list.d.ts +19 -16
  81. package/dist/lib/services/client-metrics/list.js +6 -4
  82. package/dist/lib/services/client-metrics/list.js.map +1 -1
  83. package/dist/lib/services/client-metrics/list.test.js +9 -5
  84. package/dist/lib/services/client-metrics/list.test.js.map +1 -1
  85. package/dist/lib/services/client-metrics/ttl-list.d.ts +20 -13
  86. package/dist/lib/services/client-metrics/ttl-list.js +26 -15
  87. package/dist/lib/services/client-metrics/ttl-list.js.map +1 -1
  88. package/dist/lib/services/client-metrics/ttl-list.test.js +33 -9
  89. package/dist/lib/services/client-metrics/ttl-list.test.js.map +1 -1
  90. package/dist/lib/services/environment-service.d.ts +2 -1
  91. package/dist/lib/services/environment-service.js +10 -3
  92. package/dist/lib/services/environment-service.js.map +1 -1
  93. package/dist/lib/services/event-service.d.ts +1 -1
  94. package/dist/lib/services/event-service.js +1 -1
  95. package/dist/lib/services/event-service.js.map +1 -1
  96. package/dist/lib/services/feature-tag-service.js +7 -11
  97. package/dist/lib/services/feature-tag-service.js.map +1 -1
  98. package/dist/lib/services/{feature-toggle-service-v2.d.ts → feature-toggle-service.d.ts} +29 -19
  99. package/dist/lib/services/{feature-toggle-service-v2.js → feature-toggle-service.js} +177 -145
  100. package/dist/lib/services/feature-toggle-service.js.map +1 -0
  101. package/dist/lib/services/index.js +3 -2
  102. package/dist/lib/services/index.js.map +1 -1
  103. package/dist/lib/services/project-health-service.d.ts +2 -2
  104. package/dist/lib/services/project-health-service.js +3 -3
  105. package/dist/lib/services/project-health-service.js.map +1 -1
  106. package/dist/lib/services/project-service.d.ts +2 -2
  107. package/dist/lib/services/project-service.js +5 -3
  108. package/dist/lib/services/project-service.js.map +1 -1
  109. package/dist/lib/services/reset-token-service.js +2 -2
  110. package/dist/lib/services/reset-token-service.js.map +1 -1
  111. package/dist/lib/services/state-util.js +1 -1
  112. package/dist/lib/services/state-util.js.map +1 -1
  113. package/dist/lib/services/user-service.d.ts +3 -2
  114. package/dist/lib/services/user-service.js +37 -21
  115. package/dist/lib/services/user-service.js.map +1 -1
  116. package/dist/lib/services/version-service.js +2 -2
  117. package/dist/lib/services/version-service.js.map +1 -1
  118. package/dist/lib/types/events.d.ts +165 -2
  119. package/dist/lib/types/events.js +124 -4
  120. package/dist/lib/types/events.js.map +1 -1
  121. package/dist/lib/types/model.d.ts +0 -12
  122. package/dist/lib/types/model.js.map +1 -1
  123. package/dist/lib/types/services.d.ts +3 -2
  124. package/dist/lib/types/stores/event-store.d.ts +4 -3
  125. package/dist/lib/util/constants.d.ts +0 -2
  126. package/dist/lib/util/constants.js +1 -3
  127. package/dist/lib/util/constants.js.map +1 -1
  128. package/dist/migrations/20210428103922-patch-role-table.d.ts +2 -0
  129. package/dist/migrations/20210428103922-patch-role-table.js +19 -0
  130. package/dist/migrations/20210428103922-patch-role-table.js.map +1 -0
  131. package/dist/migrations/20210428103924-patch-admin-role-name.d.ts +2 -0
  132. package/dist/migrations/20210428103924-patch-admin-role-name.js +11 -0
  133. package/dist/migrations/20210428103924-patch-admin-role-name.js.map +1 -0
  134. package/dist/migrations/20210428103924-patch-admin_role.d.ts +2 -0
  135. package/dist/migrations/20210428103924-patch-admin_role.js +23 -0
  136. package/dist/migrations/20210428103924-patch-admin_role.js.map +1 -0
  137. package/dist/migrations/20210428103924-patch-role_permissions.d.ts +2 -0
  138. package/dist/migrations/20210428103924-patch-role_permissions.js +50 -0
  139. package/dist/migrations/20210428103924-patch-role_permissions.js.map +1 -0
  140. package/dist/migrations/20211105104316-add-feature-name-column-to-events.d.ts +2 -0
  141. package/dist/migrations/20211105104316-add-feature-name-column-to-events.js +16 -0
  142. package/dist/migrations/20211105104316-add-feature-name-column-to-events.js.map +1 -0
  143. package/dist/migrations/20211105105509-add-predata-column-to-events.d.ts +2 -0
  144. package/dist/migrations/20211105105509-add-predata-column-to-events.js +8 -0
  145. package/dist/migrations/20211105105509-add-predata-column-to-events.js.map +1 -0
  146. package/dist/migrator.js +9 -2
  147. package/dist/migrator.js.map +1 -1
  148. package/dist/test/e2e/api/admin/client-metrics.e2e.test.js +16 -12
  149. package/dist/test/e2e/api/admin/client-metrics.e2e.test.js.map +1 -1
  150. package/dist/test/e2e/api/admin/feature-archive.e2e.test.js +1 -2
  151. package/dist/test/e2e/api/admin/feature-archive.e2e.test.js.map +1 -1
  152. package/dist/test/e2e/api/admin/feature.e2e.test.js +19 -2
  153. package/dist/test/e2e/api/admin/feature.e2e.test.js.map +1 -1
  154. package/dist/test/e2e/api/admin/metrics.e2e.test.js +5 -3
  155. package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
  156. package/dist/test/e2e/api/admin/project/environments.e2e.test.js +10 -0
  157. package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -1
  158. package/dist/test/e2e/api/admin/project/features.e2e.test.js +120 -8
  159. package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
  160. package/dist/test/e2e/api/admin/state.e2e.test.js +17 -13
  161. package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
  162. package/dist/test/e2e/api/admin/user-admin.e2e.test.js +2 -16
  163. package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
  164. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +8 -4
  165. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -1
  166. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +4 -4
  167. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
  168. package/dist/test/e2e/api/client/register.e2e.test.js +1 -1
  169. package/dist/test/e2e/api/client/register.e2e.test.js.map +1 -1
  170. package/dist/test/e2e/services/addon-service.e2e.test.js +1 -1
  171. package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
  172. package/dist/test/e2e/services/api-token-service.e2e.test.js +5 -3
  173. package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
  174. package/dist/test/e2e/services/client-metrics-service.e2e.test.js +5 -2
  175. package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
  176. package/dist/test/e2e/services/environment-service.test.js +1 -1
  177. package/dist/test/e2e/services/environment-service.test.js.map +1 -1
  178. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +14 -11
  179. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
  180. package/dist/test/e2e/services/project-health-service.e2e.test.js +2 -2
  181. package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
  182. package/dist/test/e2e/services/project-service.e2e.test.js +2 -2
  183. package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
  184. package/dist/test/e2e/services/session-service.e2e.test.js +5 -4
  185. package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
  186. package/dist/test/e2e/services/user-service.e2e.test.js +3 -2
  187. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  188. package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js +4 -6
  189. package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js.map +1 -1
  190. package/dist/test/e2e/stores/event-store.e2e.test.js +1 -1
  191. package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
  192. package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +1 -1
  193. package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
  194. package/dist/test/fixtures/fake-event-store.d.ts +2 -1
  195. package/dist/test/fixtures/fake-event-store.js +3 -0
  196. package/dist/test/fixtures/fake-event-store.js.map +1 -1
  197. package/docs/api/oas/openapi.yaml +35 -55
  198. package/package.json +10 -11
  199. package/dist/lib/event-differ.d.ts +0 -1
  200. package/dist/lib/event-differ.js +0 -117
  201. package/dist/lib/event-differ.js.map +0 -1
  202. package/dist/lib/event-differ.test.d.ts +0 -1
  203. package/dist/lib/event-differ.test.js +0 -142
  204. package/dist/lib/event-differ.test.js.map +0 -1
  205. package/dist/lib/services/feature-toggle-service-v2.js.map +0 -1
@@ -12,32 +12,58 @@ const events_1 = require("../types/events");
12
12
  const notfound_error_1 = __importDefault(require("../error/notfound-error"));
13
13
  const constants_1 = require("../util/constants");
14
14
  const fast_json_patch_1 = require("fast-json-patch");
15
- class FeatureToggleServiceV2 {
15
+ class FeatureToggleService {
16
16
  constructor({ featureStrategiesStore, featureToggleStore, featureToggleClientStore, projectStore, eventStore, featureTagStore, featureEnvironmentStore, }, { getLogger }) {
17
17
  this.logger = getLogger('services/feature-toggle-service-v2.ts');
18
18
  this.featureStrategiesStore = featureStrategiesStore;
19
19
  this.featureToggleStore = featureToggleStore;
20
20
  this.featureToggleClientStore = featureToggleClientStore;
21
- this.featureTagStore = featureTagStore;
21
+ this.tagStore = featureTagStore;
22
22
  this.projectStore = projectStore;
23
23
  this.eventStore = eventStore;
24
24
  this.featureEnvironmentStore = featureEnvironmentStore;
25
25
  }
26
- async patchFeature(projectId, featureName, userName, operations) {
26
+ async validateFeatureContext({ featureName, projectId, }) {
27
+ const id = await this.featureToggleStore.getProjectId(featureName);
28
+ if (id !== projectId) {
29
+ throw new invalid_operation_error_1.default('You can not change the projectId for an activation strategy.');
30
+ }
31
+ }
32
+ validateFeatureStrategyContext(strategy, { featureName, projectId }) {
33
+ if (strategy.projectId !== projectId) {
34
+ throw new invalid_operation_error_1.default('You can not change the projectId for an activation strategy.');
35
+ }
36
+ if (strategy.featureName !== featureName) {
37
+ throw new invalid_operation_error_1.default('You can not change the featureName for an activation strategy.');
38
+ }
39
+ }
40
+ async patchFeature(project, featureName, createdBy, operations) {
27
41
  const featureToggle = await this.getFeatureMetadata(featureName);
28
42
  const { newDocument } = (0, fast_json_patch_1.applyPatch)((0, fast_json_patch_1.deepClone)(featureToggle), operations);
29
- const updated = await this.updateFeatureToggle(projectId, newDocument, userName);
43
+ const updated = await this.updateFeatureToggle(project, newDocument, createdBy);
30
44
  if (featureToggle.stale !== newDocument.stale) {
31
- await this.eventStore.store({
32
- type: newDocument.stale ? events_1.FEATURE_STALE_ON : events_1.FEATURE_STALE_OFF,
33
- data: updated,
34
- project: projectId,
35
- createdBy: userName,
36
- });
45
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
46
+ await this.eventStore.store(new events_1.FeatureStaleEvent({
47
+ stale: newDocument.stale,
48
+ project,
49
+ featureName,
50
+ createdBy,
51
+ tags,
52
+ }));
37
53
  }
38
54
  return updated;
39
55
  }
40
- async createStrategy(strategyConfig, projectId, featureName, userName, environment = constants_1.DEFAULT_ENV) {
56
+ featureStrategyToPublic(featureStrategy) {
57
+ return {
58
+ id: featureStrategy.id,
59
+ name: featureStrategy.strategyName,
60
+ constraints: featureStrategy.constraints || [],
61
+ parameters: featureStrategy.parameters,
62
+ };
63
+ }
64
+ async createStrategy(strategyConfig, context, createdBy) {
65
+ const { featureName, projectId, environment } = context;
66
+ await this.validateFeatureContext(context);
41
67
  try {
42
68
  const newFeatureStrategy = await this.featureStrategiesStore.createStrategyFeatureEnv({
43
69
  strategyName: strategyConfig.name,
@@ -48,24 +74,17 @@ class FeatureToggleServiceV2 {
48
74
  featureName,
49
75
  environment,
50
76
  });
51
- const data = {
52
- id: newFeatureStrategy.id,
53
- name: newFeatureStrategy.strategyName,
54
- constraints: newFeatureStrategy.constraints,
55
- parameters: newFeatureStrategy.parameters,
56
- };
57
- await this.eventStore.store({
58
- type: events_1.FEATURE_STRATEGY_ADD,
77
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
78
+ const strategy = this.featureStrategyToPublic(newFeatureStrategy);
79
+ await this.eventStore.store(new events_1.FeatureStrategyAddEvent({
59
80
  project: projectId,
60
- createdBy: userName,
81
+ featureName,
82
+ createdBy,
61
83
  environment,
62
- data: {
63
- ...data,
64
- name: featureName,
65
- strategyName: newFeatureStrategy.strategyName,
66
- },
67
- });
68
- return data;
84
+ data: strategy,
85
+ tags,
86
+ }));
87
+ return strategy;
69
88
  }
70
89
  catch (e) {
71
90
  if (e.code === db_error_1.FOREIGN_KEY_VIOLATION) {
@@ -81,49 +100,51 @@ class FeatureToggleServiceV2 {
81
100
  * }
82
101
  * @param id
83
102
  * @param updates
103
+ * @param context - Which context does this strategy live in (projectId, featureName, environment)
104
+ * @param userName - Human readable id of the user performing the update
84
105
  */
85
- // TODO: verify projectId is not changed from URL!
86
- async updateStrategy(id, environment, project, userName, updates) {
106
+ async updateStrategy(id, updates, context, userName) {
107
+ const { projectId, environment, featureName } = context;
87
108
  const existingStrategy = await this.featureStrategiesStore.get(id);
109
+ this.validateFeatureStrategyContext(existingStrategy, context);
88
110
  if (existingStrategy.id === id) {
89
111
  const strategy = await this.featureStrategiesStore.updateStrategy(id, updates);
90
- const data = {
91
- id: strategy.id,
92
- name: strategy.strategyName,
93
- featureName: strategy.featureName,
94
- constraints: strategy.constraints || [],
95
- parameters: strategy.parameters,
96
- };
97
- await this.eventStore.store({
98
- type: events_1.FEATURE_STRATEGY_UPDATE,
99
- project,
112
+ // Store event!
113
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
114
+ const data = this.featureStrategyToPublic(strategy);
115
+ const preData = this.featureStrategyToPublic(existingStrategy);
116
+ await this.eventStore.store(new events_1.FeatureStrategyUpdateEvent({
117
+ project: projectId,
118
+ featureName,
100
119
  environment,
101
120
  createdBy: userName,
102
121
  data,
103
- });
122
+ preData,
123
+ tags,
124
+ }));
104
125
  return data;
105
126
  }
106
127
  throw new notfound_error_1.default(`Could not find strategy with id ${id}`);
107
128
  }
108
- // TODO: verify projectId is not changed from URL!
109
- async updateStrategyParameter(id, name, value, userName, project, environment) {
129
+ async updateStrategyParameter(id, name, value, context, userName) {
130
+ const { projectId, environment, featureName } = context;
110
131
  const existingStrategy = await this.featureStrategiesStore.get(id);
132
+ this.validateFeatureStrategyContext(existingStrategy, context);
111
133
  if (existingStrategy.id === id) {
112
134
  existingStrategy.parameters[name] = value;
113
135
  const strategy = await this.featureStrategiesStore.updateStrategy(id, existingStrategy);
114
- const data = {
115
- id: strategy.id,
116
- name: strategy.strategyName,
117
- constraints: strategy.constraints || [],
118
- parameters: strategy.parameters,
119
- };
120
- await this.eventStore.store({
121
- type: events_1.FEATURE_STRATEGY_UPDATE,
122
- project,
136
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
137
+ const data = this.featureStrategyToPublic(strategy);
138
+ const preData = this.featureStrategyToPublic(existingStrategy);
139
+ await this.eventStore.store(new events_1.FeatureStrategyUpdateEvent({
140
+ featureName,
141
+ project: projectId,
123
142
  environment,
124
143
  createdBy: userName,
125
144
  data,
126
- });
145
+ preData,
146
+ tags,
147
+ }));
127
148
  return data;
128
149
  }
129
150
  throw new notfound_error_1.default(`Could not find strategy with id ${id}`);
@@ -134,23 +155,24 @@ class FeatureToggleServiceV2 {
134
155
  *
135
156
  * }
136
157
  * @param id - strategy id
137
- * @param featureName - Name of the feature the strategy belongs to
138
- * @param userName - Who's doing the change
139
- * @param project - Which project does this feature toggle belong to
158
+ * @param context - Which context does this strategy live in (projectId, featureName, environment)
140
159
  * @param environment - Which environment does this strategy belong to
141
160
  */
142
- async deleteStrategy(id, featureName, userName, project = 'default', environment = constants_1.DEFAULT_ENV) {
161
+ async deleteStrategy(id, context, createdBy) {
162
+ const existingStrategy = await this.featureStrategiesStore.get(id);
163
+ const { featureName, projectId, environment } = context;
164
+ this.validateFeatureStrategyContext(existingStrategy, context);
143
165
  await this.featureStrategiesStore.delete(id);
144
- await this.eventStore.store({
145
- type: events_1.FEATURE_STRATEGY_REMOVE,
146
- project,
166
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
167
+ const preData = this.featureStrategyToPublic(existingStrategy);
168
+ await this.eventStore.store(new events_1.FeatureStrategyRemoveEvent({
169
+ featureName,
170
+ project: projectId,
147
171
  environment,
148
- createdBy: userName,
149
- data: {
150
- id,
151
- name: featureName,
152
- },
153
- });
172
+ createdBy,
173
+ preData,
174
+ tags,
175
+ }));
154
176
  // If there are no strategies left for environment disable it
155
177
  await this.featureEnvironmentStore.disableEnvironmentIfNoStrategies(featureName, environment);
156
178
  }
@@ -202,21 +224,23 @@ class FeatureToggleServiceV2 {
202
224
  async getFeatureToggle(featureName) {
203
225
  return this.featureStrategiesStore.getFeatureToggleWithEnvs(featureName, false);
204
226
  }
205
- async createFeatureToggle(projectId, value, userName) {
206
- this.logger.info(`${userName} creates feature toggle ${value.name}`);
227
+ async createFeatureToggle(projectId, value, createdBy) {
228
+ this.logger.info(`${createdBy} creates feature toggle ${value.name}`);
207
229
  await this.validateName(value.name);
208
230
  const exists = await this.projectStore.hasProject(projectId);
209
231
  if (exists) {
210
232
  const featureData = await feature_schema_1.featureMetadataSchema.validateAsync(value);
233
+ const featureName = featureData.name;
211
234
  const createdToggle = await this.featureToggleStore.create(projectId, featureData);
212
- await this.featureEnvironmentStore.connectFeatureToEnvironmentsForProject(featureData.name, projectId);
213
- const data = { ...featureData, project: projectId };
214
- await this.eventStore.store({
215
- type: events_1.FEATURE_CREATED,
216
- createdBy: userName,
235
+ await this.featureEnvironmentStore.connectFeatureToEnvironmentsForProject(featureName, projectId);
236
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
237
+ await this.eventStore.store(new events_1.FeatureCreatedEvent({
238
+ featureName,
239
+ createdBy,
217
240
  project: projectId,
218
- data,
219
- });
241
+ data: createdToggle,
242
+ tags,
243
+ }));
220
244
  return createdToggle;
221
245
  }
222
246
  throw new notfound_error_1.default(`Project with id ${projectId} does not exist`);
@@ -235,7 +259,11 @@ class FeatureToggleServiceV2 {
235
259
  s.parameters.groupId = newFeatureName;
236
260
  }
237
261
  delete s.id;
238
- createStrategies.push(this.createStrategy(s, projectId, newFeatureName, userName, e.name));
262
+ createStrategies.push(this.createStrategy(s, {
263
+ projectId,
264
+ featureName: newFeatureName,
265
+ environment: e.name,
266
+ }, userName));
239
267
  }));
240
268
  // Create strategies
241
269
  await Promise.allSettled(createStrategies);
@@ -245,15 +273,17 @@ class FeatureToggleServiceV2 {
245
273
  const featureName = updatedFeature.name;
246
274
  this.logger.info(`${userName} updates feature toggle ${featureName}`);
247
275
  const featureData = await feature_schema_1.featureMetadataSchema.validateAsync(updatedFeature);
276
+ const preData = await this.featureToggleStore.get(featureName);
248
277
  const featureToggle = await this.featureToggleStore.update(projectId, featureData);
249
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
250
- await this.eventStore.store({
251
- type: events_1.FEATURE_METADATA_UPDATED,
278
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
279
+ await this.eventStore.store(new events_1.FeatureMetadataUpdateEvent({
252
280
  createdBy: userName,
253
281
  data: featureToggle,
282
+ preData,
283
+ featureName,
254
284
  project: projectId,
255
285
  tags,
256
- });
286
+ }));
257
287
  return featureToggle;
258
288
  }
259
289
  async getFeatureCountForProject(projectId) {
@@ -284,6 +314,7 @@ class FeatureToggleServiceV2 {
284
314
  strategies,
285
315
  };
286
316
  }
317
+ // todo: store events for this change.
287
318
  async deleteEnvironment(projectId, environment) {
288
319
  await this.featureStrategiesStore.deleteConfigurationsForProjectAndEnvironment(projectId, environment);
289
320
  await this.projectStore.deleteEnvironmentForProject(projectId, environment);
@@ -310,38 +341,38 @@ class FeatureToggleServiceV2 {
310
341
  async hasFeature(name) {
311
342
  return this.featureToggleStore.exists(name);
312
343
  }
313
- async updateStale(featureName, isStale, userName) {
344
+ async updateStale(featureName, isStale, createdBy) {
314
345
  const feature = await this.featureToggleStore.get(featureName);
346
+ const { project } = feature;
315
347
  feature.stale = isStale;
316
- await this.featureToggleStore.update(feature.project, feature);
317
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
318
- const data = await this.getFeatureToggleLegacy(featureName);
319
- await this.eventStore.store({
320
- type: isStale ? events_1.FEATURE_STALE_ON : events_1.FEATURE_STALE_OFF,
321
- createdBy: userName,
322
- data,
348
+ await this.featureToggleStore.update(project, feature);
349
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
350
+ await this.eventStore.store(new events_1.FeatureStaleEvent({
351
+ stale: isStale,
352
+ project,
353
+ featureName,
354
+ createdBy,
323
355
  tags,
324
- project: feature.project,
325
- });
356
+ }));
326
357
  return feature;
327
358
  }
328
- async archiveToggle(name, userName) {
329
- const feature = await this.featureToggleStore.get(name);
330
- await this.featureToggleStore.archive(name);
331
- const tags = (await this.featureTagStore.getAllTagsForFeature(name)) || [];
332
- await this.eventStore.store({
333
- type: events_1.FEATURE_ARCHIVED,
334
- createdBy: userName,
335
- data: { name },
359
+ // todo: add projectId
360
+ async archiveToggle(featureName, createdBy) {
361
+ const feature = await this.featureToggleStore.get(featureName);
362
+ await this.featureToggleStore.archive(featureName);
363
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
364
+ await this.eventStore.store(new events_1.FeatureArchivedEvent({
365
+ featureName,
366
+ createdBy,
336
367
  project: feature.project,
337
368
  tags,
338
- });
369
+ }));
339
370
  }
340
- async updateEnabled(projectId, featureName, environment, enabled, userName) {
371
+ async updateEnabled(project, featureName, environment, enabled, createdBy) {
341
372
  const hasEnvironment = await this.featureEnvironmentStore.featureHasEnvironment(environment, featureName);
342
373
  if (hasEnvironment) {
343
374
  if (enabled) {
344
- const strategies = await this.getStrategiesForEnvironment(projectId, featureName, environment);
375
+ const strategies = await this.getStrategiesForEnvironment(project, featureName, environment);
345
376
  if (strategies.length === 0) {
346
377
  throw new invalid_operation_error_1.default('You can not enable the environment before it has strategies');
347
378
  }
@@ -349,28 +380,30 @@ class FeatureToggleServiceV2 {
349
380
  const updatedEnvironmentStatus = await this.featureEnvironmentStore.setEnvironmentEnabledStatus(environment, featureName, enabled);
350
381
  const feature = await this.featureToggleStore.get(featureName);
351
382
  if (updatedEnvironmentStatus > 0) {
352
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
353
- await this.eventStore.store({
354
- type: enabled
355
- ? events_1.FEATURE_ENVIRONMENT_ENABLED
356
- : events_1.FEATURE_ENVIRONMENT_DISABLED,
357
- createdBy: userName,
358
- data: { name: featureName },
359
- tags,
360
- project: projectId,
383
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
384
+ await this.eventStore.store(new events_1.FeatureEnvironmentEvent({
385
+ enabled,
386
+ project,
387
+ featureName,
361
388
  environment,
362
- });
389
+ createdBy,
390
+ tags,
391
+ }));
363
392
  }
364
393
  return feature;
365
394
  }
366
395
  throw new notfound_error_1.default(`Could not find environment ${environment} for feature: ${featureName}`);
367
396
  }
368
- async storeFeatureUpdatedEventLegacy(featureName, userName) {
369
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
397
+ // @deprecated
398
+ async storeFeatureUpdatedEventLegacy(featureName, createdBy) {
399
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
370
400
  const feature = await this.getFeatureToggleLegacy(featureName);
401
+ // Legacy event. Will not be used from v4.3.
402
+ // We do not include 'preData' on purpose.
371
403
  await this.eventStore.store({
372
404
  type: events_1.FEATURE_UPDATED,
373
- createdBy: userName,
405
+ createdBy,
406
+ featureName,
374
407
  data: feature,
375
408
  tags,
376
409
  project: feature.project,
@@ -383,6 +416,7 @@ class FeatureToggleServiceV2 {
383
416
  const isEnabled = await this.featureEnvironmentStore.isEnvironmentEnabled(featureName, environment);
384
417
  return this.updateEnabled(projectId, featureName, environment, !isEnabled, userName);
385
418
  }
419
+ // @deprecated
386
420
  async getFeatureToggleLegacy(featureName) {
387
421
  const feature = await this.featureStrategiesStore.getFeatureToggleWithEnvs(featureName);
388
422
  const { environments, ...legacyFeature } = feature;
@@ -391,47 +425,46 @@ class FeatureToggleServiceV2 {
391
425
  const enabled = defaultEnv?.enabled || false;
392
426
  return { ...legacyFeature, enabled, strategies };
393
427
  }
394
- async changeProject(featureName, newProject, userName) {
428
+ async changeProject(featureName, newProject, createdBy) {
395
429
  const feature = await this.featureToggleStore.get(featureName);
396
430
  const oldProject = feature.project;
397
431
  feature.project = newProject;
398
432
  await this.featureToggleStore.update(newProject, feature);
399
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
400
- await this.eventStore.store({
401
- type: events_1.FEATURE_PROJECT_CHANGE,
402
- createdBy: userName,
403
- data: {
404
- name: feature.name,
405
- oldProject,
406
- newProject,
407
- },
408
- project: newProject,
433
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
434
+ await this.eventStore.store(new events_1.FeatureChangeProjectEvent({
435
+ createdBy,
436
+ oldProject,
437
+ newProject,
438
+ featureName,
409
439
  tags,
410
- });
440
+ }));
411
441
  }
412
442
  async getArchivedFeatures() {
413
443
  return this.getFeatureToggles({}, true);
414
444
  }
415
- async deleteFeature(featureName, userName) {
445
+ // TODO: add project id.
446
+ async deleteFeature(featureName, createdBy) {
447
+ const toggle = await this.featureToggleStore.get(featureName);
448
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
416
449
  await this.featureToggleStore.delete(featureName);
417
- await this.eventStore.store({
418
- type: events_1.FEATURE_DELETED,
419
- createdBy: userName,
420
- data: {
421
- featureName,
422
- },
423
- });
450
+ await this.eventStore.store(new events_1.FeatureDeletedEvent({
451
+ featureName,
452
+ project: toggle.project,
453
+ createdBy,
454
+ preData: toggle,
455
+ tags,
456
+ }));
424
457
  }
425
- async reviveToggle(featureName, userName) {
426
- const data = await this.featureToggleStore.revive(featureName);
427
- const tags = await this.featureTagStore.getAllTagsForFeature(featureName);
428
- await this.eventStore.store({
429
- type: events_1.FEATURE_REVIVED,
430
- createdBy: userName,
431
- data,
432
- project: data.project,
458
+ // TODO: add project id.
459
+ async reviveToggle(featureName, createdBy) {
460
+ const toggle = await this.featureToggleStore.revive(featureName);
461
+ const tags = await this.tagStore.getAllTagsForFeature(featureName);
462
+ await this.eventStore.store(new events_1.FeatureRevivedEvent({
463
+ createdBy,
464
+ featureName,
465
+ project: toggle.project,
433
466
  tags,
434
- });
467
+ }));
435
468
  }
436
469
  async getMetadataForAllFeatures(archived) {
437
470
  return this.featureToggleStore.getAll({ archived });
@@ -443,6 +476,5 @@ class FeatureToggleServiceV2 {
443
476
  await this.featureStrategiesStore.setProjectForStrategiesBelongingToFeature(featureName, newProjectId);
444
477
  }
445
478
  }
446
- module.exports = FeatureToggleServiceV2;
447
- exports.default = FeatureToggleServiceV2;
448
- //# sourceMappingURL=feature-toggle-service-v2.js.map
479
+ exports.default = FeatureToggleService;
480
+ //# sourceMappingURL=feature-toggle-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-toggle-service.js","sourceRoot":"","sources":["../../../src/lib/services/feature-toggle-service.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ const reset_token_service_1 = __importDefault(require("./reset-token-service"));
25
25
  const setting_service_1 = __importDefault(require("./setting-service"));
26
26
  const session_service_1 = __importDefault(require("./session-service"));
27
27
  const user_feedback_service_1 = __importDefault(require("./user-feedback-service"));
28
- const feature_toggle_service_v2_1 = __importDefault(require("./feature-toggle-service-v2"));
28
+ const feature_toggle_service_1 = __importDefault(require("./feature-toggle-service"));
29
29
  const environment_service_1 = __importDefault(require("./environment-service"));
30
30
  const feature_tag_service_1 = __importDefault(require("./feature-tag-service"));
31
31
  const project_health_service_1 = __importDefault(require("./project-health-service"));
@@ -56,7 +56,7 @@ const createServices = (stores, config) => {
56
56
  const versionService = new version_service_1.default(stores, config);
57
57
  const healthService = new health_service_1.default(stores, config);
58
58
  const userFeedbackService = new user_feedback_service_1.default(stores, config);
59
- const featureToggleServiceV2 = new feature_toggle_service_v2_1.default(stores, config);
59
+ const featureToggleServiceV2 = new feature_toggle_service_1.default(stores, config);
60
60
  const environmentService = new environment_service_1.default(stores, config);
61
61
  const featureTagService = new feature_tag_service_1.default(stores, config);
62
62
  const projectHealthService = new project_health_service_1.default(stores, config, featureToggleServiceV2);
@@ -64,6 +64,7 @@ const createServices = (stores, config) => {
64
64
  return {
65
65
  accessService,
66
66
  addonService,
67
+ featureToggleService: featureToggleServiceV2,
67
68
  featureToggleServiceV2,
68
69
  featureTypeService,
69
70
  healthService,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { IUnleashStores } from '../types/stores';
2
2
  import { IUnleashConfig } from '../types/option';
3
3
  import { IProject, IProjectHealthReport, IProjectOverview } from '../types/model';
4
- import FeatureToggleServiceV2 from './feature-toggle-service-v2';
4
+ import FeatureToggleService from './feature-toggle-service';
5
5
  export default class ProjectHealthService {
6
6
  private logger;
7
7
  private projectStore;
@@ -10,7 +10,7 @@ export default class ProjectHealthService {
10
10
  private featureTypes;
11
11
  private healthRatingTimer;
12
12
  private featureToggleService;
13
- constructor({ projectStore, featureTypeStore, featureToggleStore, }: Pick<IUnleashStores, 'projectStore' | 'featureTypeStore' | 'featureToggleStore'>, { getLogger }: Pick<IUnleashConfig, 'getLogger'>, featureToggleService: FeatureToggleServiceV2);
13
+ constructor({ projectStore, featureTypeStore, featureToggleStore, }: Pick<IUnleashStores, 'projectStore' | 'featureTypeStore' | 'featureToggleStore'>, { getLogger }: Pick<IUnleashConfig, 'getLogger'>, featureToggleService: FeatureToggleService);
14
14
  getProjectOverview(projectId: string, archived?: boolean): Promise<IProjectOverview>;
15
15
  getProjectHealthReport(projectId: string): Promise<IProjectHealthReport>;
16
16
  private potentiallyStaleCount;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const constants_1 = require("../util/constants");
3
+ const date_fns_1 = require("date-fns");
4
4
  class ProjectHealthService {
5
5
  constructor({ projectStore, featureTypeStore, featureToggleStore, }, { getLogger }, featureToggleService) {
6
6
  this.logger = getLogger('services/project-health-service.ts');
@@ -8,7 +8,7 @@ class ProjectHealthService {
8
8
  this.featureTypeStore = featureTypeStore;
9
9
  this.featureToggleStore = featureToggleStore;
10
10
  this.featureTypes = new Map();
11
- this.healthRatingTimer = setInterval(() => this.setHealthRating(), constants_1.MILLISECONDS_IN_ONE_HOUR).unref();
11
+ this.healthRatingTimer = setInterval(() => this.setHealthRating(), (0, date_fns_1.hoursToMilliseconds)(1)).unref();
12
12
  this.featureToggleService = featureToggleService;
13
13
  }
14
14
  // TODO: duplicate from project-service.
@@ -48,7 +48,7 @@ class ProjectHealthService {
48
48
  const diff = today - feature.createdAt.valueOf();
49
49
  const featureTypeExpectedLifetime = this.featureTypes.get(feature.type);
50
50
  return (!feature.stale &&
51
- diff >= featureTypeExpectedLifetime * constants_1.MILLISECONDS_IN_DAY);
51
+ diff >= featureTypeExpectedLifetime * (0, date_fns_1.hoursToMilliseconds)(24));
52
52
  }).length;
53
53
  }
54
54
  activeCount(features) {
@@ -1 +1 @@
1
- {"version":3,"file":"project-health-service.js","sourceRoot":"","sources":["../../../src/lib/services/project-health-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-health-service.js","sourceRoot":"","sources":["../../../src/lib/services/project-health-service.ts"],"names":[],"mappings":"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"}