unleash-server 4.1.2 → 4.2.0-1

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 (511) hide show
  1. package/CHANGELOG.md +920 -0
  2. package/README.md +3 -2
  3. package/dist/lib/addons/addon.js +1 -1
  4. package/dist/lib/addons/addon.js.map +1 -1
  5. package/dist/lib/addons/slack.js +9 -9
  6. package/dist/lib/addons/slack.js.map +1 -1
  7. package/dist/lib/addons/teams.js +1 -1
  8. package/dist/lib/addons/teams.js.map +1 -1
  9. package/dist/lib/app.js +20 -20
  10. package/dist/lib/app.js.map +1 -1
  11. package/dist/lib/app.test.js +11 -7
  12. package/dist/lib/app.test.js.map +1 -1
  13. package/dist/lib/create-config.js +9 -9
  14. package/dist/lib/create-config.js.map +1 -1
  15. package/dist/lib/db/api-token-store.d.ts +2 -1
  16. package/dist/lib/db/api-token-store.js +5 -0
  17. package/dist/lib/db/api-token-store.js.map +1 -1
  18. package/dist/lib/db/client-metrics-store.d.ts +6 -0
  19. package/dist/lib/db/client-metrics-store.js +6 -1
  20. package/dist/lib/db/client-metrics-store.js.map +1 -1
  21. package/dist/lib/db/db-pool.js +1 -1
  22. package/dist/lib/db/db-pool.js.map +1 -1
  23. package/dist/lib/db/environment-store.d.ts +7 -7
  24. package/dist/lib/db/environment-store.js +59 -54
  25. package/dist/lib/db/environment-store.js.map +1 -1
  26. package/dist/lib/db/event-store.d.ts +5 -2
  27. package/dist/lib/db/event-store.js +27 -4
  28. package/dist/lib/db/event-store.js.map +1 -1
  29. package/dist/lib/db/event-store.test.js +2 -2
  30. package/dist/lib/db/event-store.test.js.map +1 -1
  31. package/dist/lib/db/feature-environment-store.d.ts +8 -6
  32. package/dist/lib/db/feature-environment-store.js +53 -19
  33. package/dist/lib/db/feature-environment-store.js.map +1 -1
  34. package/dist/lib/db/feature-strategy-store.d.ts +7 -11
  35. package/dist/lib/db/feature-strategy-store.js +77 -147
  36. package/dist/lib/db/feature-strategy-store.js.map +1 -1
  37. package/dist/lib/db/feature-toggle-client-store.d.ts +26 -0
  38. package/dist/lib/db/feature-toggle-client-store.js +106 -0
  39. package/dist/lib/db/feature-toggle-client-store.js.map +1 -0
  40. package/dist/lib/db/feature-toggle-store.d.ts +10 -22
  41. package/dist/lib/db/feature-toggle-store.js +9 -42
  42. package/dist/lib/db/feature-toggle-store.js.map +1 -1
  43. package/dist/lib/db/index.js +2 -0
  44. package/dist/lib/db/index.js.map +1 -1
  45. package/dist/lib/db/project-store.d.ts +4 -6
  46. package/dist/lib/db/project-store.js +7 -43
  47. package/dist/lib/db/project-store.js.map +1 -1
  48. package/dist/lib/event-hook.test.js +8 -7
  49. package/dist/lib/event-hook.test.js.map +1 -1
  50. package/dist/lib/logger.js +1 -1
  51. package/dist/lib/logger.js.map +1 -1
  52. package/dist/lib/logger.test.js +26 -4
  53. package/dist/lib/logger.test.js.map +1 -1
  54. package/dist/lib/metrics.test.js +3 -3
  55. package/dist/lib/metrics.test.js.map +1 -1
  56. package/dist/lib/middleware/api-token-middleware.js +10 -2
  57. package/dist/lib/middleware/api-token-middleware.js.map +1 -1
  58. package/dist/lib/middleware/api-token-middleware.test.js +44 -8
  59. package/dist/lib/middleware/api-token-middleware.test.js.map +1 -1
  60. package/dist/lib/middleware/content_type_checker.test.js +4 -4
  61. package/dist/lib/middleware/content_type_checker.test.js.map +1 -1
  62. package/dist/lib/middleware/demo-authentication.js +1 -1
  63. package/dist/lib/middleware/demo-authentication.js.map +1 -1
  64. package/dist/lib/middleware/no-authentication.test.js +3 -3
  65. package/dist/lib/middleware/no-authentication.test.js.map +1 -1
  66. package/dist/lib/middleware/oss-authentication.js +0 -3
  67. package/dist/lib/middleware/oss-authentication.js.map +1 -1
  68. package/dist/lib/middleware/oss-authentication.test.js +7 -7
  69. package/dist/lib/middleware/oss-authentication.test.js.map +1 -1
  70. package/dist/lib/middleware/rbac-middleware.js +2 -2
  71. package/dist/lib/middleware/rbac-middleware.js.map +1 -1
  72. package/dist/lib/middleware/rbac-middleware.test.js +51 -12
  73. package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
  74. package/dist/lib/middleware/secure-headers.js +1 -1
  75. package/dist/lib/middleware/secure-headers.js.map +1 -1
  76. package/dist/lib/middleware/session-db.js +2 -2
  77. package/dist/lib/middleware/session-db.js.map +1 -1
  78. package/dist/lib/routes/admin-api/addon.d.ts +4 -3
  79. package/dist/lib/routes/admin-api/addon.js +4 -4
  80. package/dist/lib/routes/admin-api/addon.js.map +1 -1
  81. package/dist/lib/routes/admin-api/api-token-controller.js +10 -38
  82. package/dist/lib/routes/admin-api/api-token-controller.js.map +1 -1
  83. package/dist/lib/routes/admin-api/archive.d.ts +4 -3
  84. package/dist/lib/routes/admin-api/archive.js +3 -3
  85. package/dist/lib/routes/admin-api/archive.js.map +1 -1
  86. package/dist/lib/routes/admin-api/config.test.js +5 -5
  87. package/dist/lib/routes/admin-api/config.test.js.map +1 -1
  88. package/dist/lib/routes/admin-api/context.d.ts +4 -3
  89. package/dist/lib/routes/admin-api/context.js +4 -4
  90. package/dist/lib/routes/admin-api/context.js.map +1 -1
  91. package/dist/lib/routes/admin-api/context.test.js +6 -6
  92. package/dist/lib/routes/admin-api/context.test.js.map +1 -1
  93. package/dist/lib/routes/admin-api/email.test.js +6 -6
  94. package/dist/lib/routes/admin-api/email.test.js.map +1 -1
  95. package/dist/lib/routes/admin-api/environments-controller.d.ts +4 -4
  96. package/dist/lib/routes/admin-api/environments-controller.js +17 -43
  97. package/dist/lib/routes/admin-api/environments-controller.js.map +1 -1
  98. package/dist/lib/routes/admin-api/event.js +7 -1
  99. package/dist/lib/routes/admin-api/event.js.map +1 -1
  100. package/dist/lib/routes/admin-api/events.test.js +5 -5
  101. package/dist/lib/routes/admin-api/events.test.js.map +1 -1
  102. package/dist/lib/routes/admin-api/feature.d.ts +11 -10
  103. package/dist/lib/routes/admin-api/feature.js +26 -24
  104. package/dist/lib/routes/admin-api/feature.js.map +1 -1
  105. package/dist/lib/routes/admin-api/metrics.js +25 -66
  106. package/dist/lib/routes/admin-api/metrics.js.map +1 -1
  107. package/dist/lib/routes/admin-api/metrics.test.js +6 -6
  108. package/dist/lib/routes/admin-api/metrics.test.js.map +1 -1
  109. package/dist/lib/routes/admin-api/project/environments.js +6 -15
  110. package/dist/lib/routes/admin-api/project/environments.js.map +1 -1
  111. package/dist/lib/routes/admin-api/project/features.d.ts +29 -11
  112. package/dist/lib/routes/admin-api/project/features.js +97 -35
  113. package/dist/lib/routes/admin-api/project/features.js.map +1 -1
  114. package/dist/lib/routes/admin-api/project/health-report.js +7 -18
  115. package/dist/lib/routes/admin-api/project/health-report.js.map +1 -1
  116. package/dist/lib/routes/admin-api/project/index.d.ts +3 -0
  117. package/dist/lib/routes/admin-api/project/index.js +8 -0
  118. package/dist/lib/routes/admin-api/project/index.js.map +1 -1
  119. package/dist/lib/routes/admin-api/state.d.ts +2 -1
  120. package/dist/lib/routes/admin-api/state.js +7 -6
  121. package/dist/lib/routes/admin-api/state.js.map +1 -1
  122. package/dist/lib/routes/admin-api/strategy.d.ts +1 -1
  123. package/dist/lib/routes/admin-api/strategy.js +24 -22
  124. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  125. package/dist/lib/routes/admin-api/strategy.test.js +6 -6
  126. package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
  127. package/dist/lib/routes/admin-api/tag-type.d.ts +4 -3
  128. package/dist/lib/routes/admin-api/tag-type.js +19 -50
  129. package/dist/lib/routes/admin-api/tag-type.js.map +1 -1
  130. package/dist/lib/routes/admin-api/tag.d.ts +3 -2
  131. package/dist/lib/routes/admin-api/tag.js +3 -4
  132. package/dist/lib/routes/admin-api/tag.js.map +1 -1
  133. package/dist/lib/routes/admin-api/tag.test.js +6 -6
  134. package/dist/lib/routes/admin-api/tag.test.js.map +1 -1
  135. package/dist/lib/routes/admin-api/user-admin.js +11 -37
  136. package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
  137. package/dist/lib/routes/admin-api/user.test.js +5 -5
  138. package/dist/lib/routes/admin-api/user.test.js.map +1 -1
  139. package/dist/lib/routes/api-def.d.ts +49 -52
  140. package/dist/lib/routes/api-def.js +13 -9
  141. package/dist/lib/routes/api-def.js.map +1 -1
  142. package/dist/lib/routes/backstage.test.js +5 -5
  143. package/dist/lib/routes/backstage.test.js.map +1 -1
  144. package/dist/lib/routes/client-api/feature.d.ts +7 -8
  145. package/dist/lib/routes/client-api/feature.js +40 -28
  146. package/dist/lib/routes/client-api/feature.js.map +1 -1
  147. package/dist/lib/routes/client-api/feature.test.js +15 -15
  148. package/dist/lib/routes/client-api/feature.test.js.map +1 -1
  149. package/dist/lib/routes/client-api/metrics.d.ts +3 -2
  150. package/dist/lib/routes/client-api/metrics.js +8 -13
  151. package/dist/lib/routes/client-api/metrics.js.map +1 -1
  152. package/dist/lib/routes/client-api/metrics.test.js +7 -12
  153. package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
  154. package/dist/lib/routes/client-api/register.js +3 -14
  155. package/dist/lib/routes/client-api/register.js.map +1 -1
  156. package/dist/lib/routes/client-api/register.test.js +5 -5
  157. package/dist/lib/routes/client-api/register.test.js.map +1 -1
  158. package/dist/lib/routes/controller.d.ts +1 -0
  159. package/dist/lib/routes/controller.js +4 -1
  160. package/dist/lib/routes/controller.js.map +1 -1
  161. package/dist/lib/routes/health-check.test.js +9 -9
  162. package/dist/lib/routes/health-check.test.js.map +1 -1
  163. package/dist/lib/routes/index.js +5 -5
  164. package/dist/lib/routes/index.js.map +1 -1
  165. package/dist/lib/routes/index.test.js +5 -5
  166. package/dist/lib/routes/index.test.js.map +1 -1
  167. package/dist/lib/routes/logout.test.js +15 -15
  168. package/dist/lib/routes/logout.test.js.map +1 -1
  169. package/dist/lib/routes/unleash-types.d.ts +1 -2
  170. package/dist/lib/routes/util.js +1 -0
  171. package/dist/lib/routes/util.js.map +1 -1
  172. package/dist/lib/schema/api-token-schema.d.ts +2 -0
  173. package/dist/lib/schema/api-token-schema.js +28 -0
  174. package/dist/lib/schema/api-token-schema.js.map +1 -0
  175. package/dist/lib/schema/feature-schema.test.js +17 -16
  176. package/dist/lib/schema/feature-schema.test.js.map +1 -1
  177. package/dist/lib/schema/project-schema.d.ts +2 -0
  178. package/dist/lib/schema/project-schema.js +12 -0
  179. package/dist/lib/schema/project-schema.js.map +1 -0
  180. package/dist/lib/server-impl.d.ts +2 -2
  181. package/dist/lib/server-impl.js +20 -18
  182. package/dist/lib/server-impl.js.map +1 -1
  183. package/dist/lib/server-impl.test.js +28 -21
  184. package/dist/lib/server-impl.test.js.map +1 -1
  185. package/dist/lib/services/access-service.d.ts +1 -1
  186. package/dist/lib/services/access-service.js.map +1 -1
  187. package/dist/lib/services/addon-service.js +2 -2
  188. package/dist/lib/services/addon-service.js.map +1 -1
  189. package/dist/lib/services/addon-service.test.js +1 -1
  190. package/dist/lib/services/addon-service.test.js.map +1 -1
  191. package/dist/lib/services/api-token-service.d.ts +3 -8
  192. package/dist/lib/services/api-token-service.js +43 -8
  193. package/dist/lib/services/api-token-service.js.map +1 -1
  194. package/dist/lib/services/client-metrics/client-metrics-schema.js +1 -0
  195. package/dist/lib/services/client-metrics/client-metrics-schema.js.map +1 -1
  196. package/dist/lib/services/client-metrics/client-metrics.test.js +18 -18
  197. package/dist/lib/services/client-metrics/client-metrics.test.js.map +1 -1
  198. package/dist/lib/services/client-metrics/index.js +5 -3
  199. package/dist/lib/services/client-metrics/index.js.map +1 -1
  200. package/dist/lib/services/context-schema.d.ts +3 -3
  201. package/dist/lib/services/context-schema.js +15 -11
  202. package/dist/lib/services/context-schema.js.map +1 -1
  203. package/dist/lib/services/email-service.js +5 -5
  204. package/dist/lib/services/email-service.js.map +1 -1
  205. package/dist/lib/services/environment-service.d.ts +4 -5
  206. package/dist/lib/services/environment-service.js +14 -14
  207. package/dist/lib/services/environment-service.js.map +1 -1
  208. package/dist/lib/services/event-service.d.ts +1 -0
  209. package/dist/lib/services/event-service.js +4 -3
  210. package/dist/lib/services/event-service.js.map +1 -1
  211. package/dist/lib/services/feature-toggle-service-v2.d.ts +27 -12
  212. package/dist/lib/services/feature-toggle-service-v2.js +157 -55
  213. package/dist/lib/services/feature-toggle-service-v2.js.map +1 -1
  214. package/dist/lib/services/index.js +1 -1
  215. package/dist/lib/services/index.js.map +1 -1
  216. package/dist/lib/services/project-health-service.d.ts +3 -1
  217. package/dist/lib/services/project-health-service.js +7 -3
  218. package/dist/lib/services/project-health-service.js.map +1 -1
  219. package/dist/lib/services/project-schema.d.ts +2 -3
  220. package/dist/lib/services/project-schema.js +12 -7
  221. package/dist/lib/services/project-schema.js.map +1 -1
  222. package/dist/lib/services/project-service.d.ts +4 -2
  223. package/dist/lib/services/project-service.js +21 -11
  224. package/dist/lib/services/project-service.js.map +1 -1
  225. package/dist/lib/services/state-schema.d.ts +2 -0
  226. package/dist/lib/services/state-schema.js +16 -6
  227. package/dist/lib/services/state-schema.js.map +1 -1
  228. package/dist/lib/services/state-service.d.ts +7 -0
  229. package/dist/lib/services/state-service.js +75 -17
  230. package/dist/lib/services/state-service.js.map +1 -1
  231. package/dist/lib/services/state-service.test.js +73 -28
  232. package/dist/lib/services/state-service.test.js.map +1 -1
  233. package/dist/lib/services/state-util.js +1 -1
  234. package/dist/lib/services/state-util.js.map +1 -1
  235. package/dist/lib/services/user-service.js +1 -1
  236. package/dist/lib/services/user-service.js.map +1 -1
  237. package/dist/lib/services/user-service.test.js +1 -1
  238. package/dist/lib/services/user-service.test.js.map +1 -1
  239. package/dist/lib/services/version-service.js +1 -1
  240. package/dist/lib/services/version-service.js.map +1 -1
  241. package/dist/lib/services/version-service.test.js +3 -3
  242. package/dist/lib/services/version-service.test.js.map +1 -1
  243. package/dist/lib/types/api-user.d.ts +11 -4
  244. package/dist/lib/types/api-user.js +4 -1
  245. package/dist/lib/types/api-user.js.map +1 -1
  246. package/dist/lib/types/events.d.ts +7 -0
  247. package/dist/lib/types/events.js +9 -1
  248. package/dist/lib/types/events.js.map +1 -1
  249. package/dist/lib/types/model.d.ts +25 -7
  250. package/dist/lib/types/model.js.map +1 -1
  251. package/dist/lib/types/models/api-token.d.ts +19 -0
  252. package/dist/lib/types/models/api-token.js +10 -0
  253. package/dist/lib/types/models/api-token.js.map +1 -0
  254. package/dist/lib/types/permissions.d.ts +2 -0
  255. package/dist/lib/types/permissions.js +3 -1
  256. package/dist/lib/types/permissions.js.map +1 -1
  257. package/dist/lib/types/stores/api-token-store.d.ts +1 -14
  258. package/dist/lib/types/stores/api-token-store.js +0 -6
  259. package/dist/lib/types/stores/api-token-store.js.map +1 -1
  260. package/dist/lib/types/stores/environment-store.d.ts +6 -6
  261. package/dist/lib/types/stores/event-store.d.ts +1 -0
  262. package/dist/lib/types/stores/feature-environment-store.d.ts +8 -6
  263. package/dist/lib/types/stores/feature-strategies-store.d.ts +6 -12
  264. package/dist/lib/types/stores/feature-toggle-client-store.d.ts +5 -0
  265. package/dist/lib/types/stores/feature-toggle-client-store.js +3 -0
  266. package/dist/lib/types/stores/feature-toggle-client-store.js.map +1 -0
  267. package/dist/lib/types/stores/feature-toggle-store.d.ts +7 -14
  268. package/dist/lib/types/stores/project-store.d.ts +5 -2
  269. package/dist/lib/types/stores.d.ts +2 -0
  270. package/dist/lib/types/user.js +1 -1
  271. package/dist/lib/types/user.js.map +1 -1
  272. package/dist/lib/util/constants.d.ts +1 -0
  273. package/dist/lib/util/constants.js +2 -1
  274. package/dist/lib/util/constants.js.map +1 -1
  275. package/dist/lib/util/extract-user.d.ts +2 -0
  276. package/dist/lib/util/extract-user.js +8 -0
  277. package/dist/lib/util/extract-user.js.map +1 -0
  278. package/dist/lib/util/format-base-uri.test.js +6 -6
  279. package/dist/lib/util/format-base-uri.test.js.map +1 -1
  280. package/dist/lib/util/graceful-shutdown.js +1 -1
  281. package/dist/lib/util/graceful-shutdown.js.map +1 -1
  282. package/dist/lib/util/rewriteHTML.test.js +4 -4
  283. package/dist/lib/util/rewriteHTML.test.js.map +1 -1
  284. package/dist/lib/util/snakeCase.d.ts +6 -0
  285. package/dist/lib/util/snakeCase.js +28 -0
  286. package/dist/lib/util/snakeCase.js.map +1 -0
  287. package/dist/{test/e2e/api/admin/boostrap.test.d.ts → lib/util/snakeCase.test.d.ts} +0 -0
  288. package/dist/lib/util/snakeCase.test.js +23 -0
  289. package/dist/lib/util/snakeCase.test.js.map +1 -0
  290. package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.d.ts +5 -0
  291. package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.js +14 -0
  292. package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.js.map +1 -0
  293. package/dist/migrations/20210907124058-add-dbcritic-indices.d.ts +5 -0
  294. package/dist/migrations/20210907124058-add-dbcritic-indices.js +30 -0
  295. package/dist/migrations/20210907124058-add-dbcritic-indices.js.map +1 -0
  296. package/dist/migrations/20210907124850-add-dbcritic-primary-keys.d.ts +5 -0
  297. package/dist/migrations/20210907124850-add-dbcritic-primary-keys.js +18 -0
  298. package/dist/migrations/20210907124850-add-dbcritic-primary-keys.js.map +1 -0
  299. package/dist/migrations/20210908100701-add-enabled-to-environments.d.ts +5 -0
  300. package/dist/migrations/20210908100701-add-enabled-to-environments.js +14 -0
  301. package/dist/migrations/20210908100701-add-enabled-to-environments.js.map +1 -0
  302. package/dist/migrations/20210909085651-add-protected-field-to-environments.d.ts +5 -0
  303. package/dist/migrations/20210909085651-add-protected-field-to-environments.js +15 -0
  304. package/dist/migrations/20210909085651-add-protected-field-to-environments.js.map +1 -0
  305. package/dist/migrations/20210913103159-api-keys-scoping.d.ts +2 -0
  306. package/dist/migrations/20210913103159-api-keys-scoping.js +13 -0
  307. package/dist/migrations/20210913103159-api-keys-scoping.js.map +1 -0
  308. package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.d.ts +2 -0
  309. package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.js +22 -0
  310. package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.js.map +1 -0
  311. package/dist/migrations/20210920104218-rename-global-env-to-default-env.d.ts +2 -0
  312. package/dist/migrations/20210920104218-rename-global-env-to-default-env.js +25 -0
  313. package/dist/migrations/20210920104218-rename-global-env-to-default-env.js.map +1 -0
  314. package/dist/migrations/20210921105032-client-api-tokens-default.d.ts +2 -0
  315. package/dist/migrations/20210921105032-client-api-tokens-default.js +13 -0
  316. package/dist/migrations/20210921105032-client-api-tokens-default.js.map +1 -0
  317. package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.d.ts +2 -0
  318. package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.js +10 -0
  319. package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.js.map +1 -0
  320. package/dist/migrations/20210922120521-add-tag-type-permission.d.ts +2 -0
  321. package/dist/migrations/20210922120521-add-tag-type-permission.js +19 -0
  322. package/dist/migrations/20210922120521-add-tag-type-permission.js.map +1 -0
  323. package/dist/migrations/20210928065411-remove-displayname-from-environments.d.ts +2 -0
  324. package/dist/migrations/20210928065411-remove-displayname-from-environments.js +10 -0
  325. package/dist/migrations/20210928065411-remove-displayname-from-environments.js.map +1 -0
  326. package/dist/migrations/20210928080601-add-development-and-production-environments.d.ts +2 -0
  327. package/dist/migrations/20210928080601-add-development-and-production-environments.js +16 -0
  328. package/dist/migrations/20210928080601-add-development-and-production-environments.js.map +1 -0
  329. package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.d.ts +2 -0
  330. package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.js +16 -0
  331. package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.js.map +1 -0
  332. package/dist/migrator.d.ts +3 -4
  333. package/dist/migrator.js +19 -5
  334. package/dist/migrator.js.map +1 -1
  335. package/dist/server-dev.js +1 -1
  336. package/dist/server-dev.js.map +1 -1
  337. package/dist/test/config/create-config.test.js +20 -20
  338. package/dist/test/config/create-config.test.js.map +1 -1
  339. package/dist/test/config/test-config.js +1 -1
  340. package/dist/test/config/test-config.js.map +1 -1
  341. package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -2
  342. package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
  343. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +8 -8
  344. package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
  345. package/dist/test/e2e/api/admin/api-token.e2e.test.js +161 -12
  346. package/dist/test/e2e/api/admin/api-token.e2e.test.js.map +1 -1
  347. package/dist/test/e2e/api/admin/archive.test.js +2 -2
  348. package/dist/test/e2e/api/admin/archive.test.js.map +1 -1
  349. package/dist/test/e2e/api/admin/bootstrap.test.d.ts +1 -0
  350. package/dist/test/e2e/api/admin/{boostrap.test.js → bootstrap.test.js} +3 -3
  351. package/dist/test/e2e/api/admin/bootstrap.test.js.map +1 -0
  352. package/dist/test/e2e/api/admin/context.e2e.test.js +2 -2
  353. package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
  354. package/dist/test/e2e/api/admin/environment.test.js +82 -55
  355. package/dist/test/e2e/api/admin/environment.test.js.map +1 -1
  356. package/dist/test/e2e/api/admin/event.e2e.test.js +30 -2
  357. package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
  358. package/dist/test/e2e/api/admin/feature-archive.e2e.test.js +2 -2
  359. package/dist/test/e2e/api/admin/feature-archive.e2e.test.js.map +1 -1
  360. package/dist/test/e2e/api/admin/feature-type.test.js +2 -2
  361. package/dist/test/e2e/api/admin/feature-type.test.js.map +1 -1
  362. package/dist/test/e2e/api/admin/feature.auth.e2e.test.js +3 -3
  363. package/dist/test/e2e/api/admin/feature.auth.e2e.test.js.map +1 -1
  364. package/dist/test/e2e/api/admin/feature.custom-auth.e2e.test.js +3 -3
  365. package/dist/test/e2e/api/admin/feature.custom-auth.e2e.test.js.map +1 -1
  366. package/dist/test/e2e/api/admin/feature.e2e.test.js +71 -65
  367. package/dist/test/e2e/api/admin/feature.e2e.test.js.map +1 -1
  368. package/dist/test/e2e/api/admin/feedback.e2e.test.js +2 -2
  369. package/dist/test/e2e/api/admin/feedback.e2e.test.js.map +1 -1
  370. package/dist/test/e2e/api/admin/metrics.e2e.test.js +2 -2
  371. package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
  372. package/dist/test/e2e/api/admin/project/environments.e2e.test.d.ts +1 -0
  373. package/dist/test/e2e/api/admin/project/environments.e2e.test.js +65 -0
  374. package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -0
  375. package/dist/test/e2e/api/admin/project/feature.strategy.e2e.test.js +503 -72
  376. package/dist/test/e2e/api/admin/project/feature.strategy.e2e.test.js.map +1 -1
  377. package/dist/test/e2e/api/admin/project/project.health.e2e.test.js +4 -2
  378. package/dist/test/e2e/api/admin/project/project.health.e2e.test.js.map +1 -1
  379. package/dist/test/e2e/api/admin/project/projects.e2e.test.d.ts +1 -0
  380. package/dist/test/e2e/api/admin/project/projects.e2e.test.js +30 -0
  381. package/dist/test/e2e/api/admin/project/projects.e2e.test.js.map +1 -0
  382. package/dist/test/e2e/api/admin/state.e2e.test.js +163 -2
  383. package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
  384. package/dist/test/e2e/api/admin/strategy.e2e.test.js +2 -2
  385. package/dist/test/e2e/api/admin/strategy.e2e.test.js.map +1 -1
  386. package/dist/test/e2e/api/admin/tag-types.e2e.test.js +2 -2
  387. package/dist/test/e2e/api/admin/tag-types.e2e.test.js.map +1 -1
  388. package/dist/test/e2e/api/admin/tags.e2e.test.js +2 -2
  389. package/dist/test/e2e/api/admin/tags.e2e.test.js.map +1 -1
  390. package/dist/test/e2e/api/admin/user-admin.e2e.test.js +3 -3
  391. package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
  392. package/dist/test/e2e/api/admin/user.test.js +2 -2
  393. package/dist/test/e2e/api/admin/user.test.js.map +1 -1
  394. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js +5 -5
  395. package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js.map +1 -1
  396. package/dist/test/e2e/api/client/feature.e2e.test.js +74 -19
  397. package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
  398. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.d.ts +1 -0
  399. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +49 -0
  400. package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -0
  401. package/dist/test/e2e/api/client/feature.token.access.e2e.test.d.ts +1 -0
  402. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +156 -0
  403. package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -0
  404. package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.d.ts +1 -0
  405. package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.js +42 -0
  406. package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.js.map +1 -0
  407. package/dist/test/e2e/api/client/metrics.e2e.test.js +12 -8
  408. package/dist/test/e2e/api/client/metrics.e2e.test.js.map +1 -1
  409. package/dist/test/e2e/api/client/register.e2e.test.js +18 -14
  410. package/dist/test/e2e/api/client/register.e2e.test.js.map +1 -1
  411. package/dist/test/e2e/custom-auth.test.js +3 -3
  412. package/dist/test/e2e/custom-auth.test.js.map +1 -1
  413. package/dist/test/e2e/health.e2e.test.js +2 -2
  414. package/dist/test/e2e/health.e2e.test.js.map +1 -1
  415. package/dist/test/e2e/helpers/database-config.d.ts +1 -1
  416. package/dist/test/e2e/helpers/database-config.js +12 -8
  417. package/dist/test/e2e/helpers/database-config.js.map +1 -1
  418. package/dist/test/e2e/helpers/database-init.d.ts +7 -1
  419. package/dist/test/e2e/helpers/database-init.js +12 -11
  420. package/dist/test/e2e/helpers/database-init.js.map +1 -1
  421. package/dist/test/e2e/helpers/database.json +5 -2
  422. package/dist/test/e2e/helpers/test-helper.js +4 -4
  423. package/dist/test/e2e/helpers/test-helper.js.map +1 -1
  424. package/dist/test/e2e/routes/routes.test.js +2 -2
  425. package/dist/test/e2e/routes/routes.test.js.map +1 -1
  426. package/dist/test/e2e/services/access-service.e2e.test.js +1 -1
  427. package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
  428. package/dist/test/e2e/services/addon-service.e2e.test.js +2 -2
  429. package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
  430. package/dist/test/e2e/services/api-token-service.e2e.test.js +30 -17
  431. package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
  432. package/dist/test/e2e/services/environment-service.test.js +38 -40
  433. package/dist/test/e2e/services/environment-service.test.js.map +1 -1
  434. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +19 -13
  435. package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
  436. package/dist/test/e2e/services/project-health-service.e2e.test.js +12 -12
  437. package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
  438. package/dist/test/e2e/services/project-service.e2e.test.js +27 -4
  439. package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
  440. package/dist/test/e2e/services/reset-token-service.e2e.test.js +3 -3
  441. package/dist/test/e2e/services/reset-token-service.e2e.test.js.map +1 -1
  442. package/dist/test/e2e/services/session-service.e2e.test.js +1 -1
  443. package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
  444. package/dist/test/e2e/services/setting-service.test.js +2 -2
  445. package/dist/test/e2e/services/setting-service.test.js.map +1 -1
  446. package/dist/test/e2e/services/user-service.e2e.test.js +2 -2
  447. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  448. package/dist/test/e2e/stores/client-application-store.e2e.test.js +1 -1
  449. package/dist/test/e2e/stores/client-application-store.e2e.test.js.map +1 -1
  450. package/dist/test/e2e/stores/event-store.e2e.test.js +1 -1
  451. package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
  452. package/dist/test/e2e/stores/feature-tag-store.e2e.test.js +4 -4
  453. package/dist/test/e2e/stores/feature-tag-store.e2e.test.js.map +1 -1
  454. package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +1 -1
  455. package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
  456. package/dist/test/e2e/stores/feature-type-store.e2e.test.js +1 -1
  457. package/dist/test/e2e/stores/feature-type-store.e2e.test.js.map +1 -1
  458. package/dist/test/e2e/stores/project-store.e2e.test.js +5 -2
  459. package/dist/test/e2e/stores/project-store.e2e.test.js.map +1 -1
  460. package/dist/test/e2e/stores/setting-store.e2e.test.js +1 -1
  461. package/dist/test/e2e/stores/setting-store.e2e.test.js.map +1 -1
  462. package/dist/test/e2e/stores/user-feedback-store.e2e.test.js +1 -1
  463. package/dist/test/e2e/stores/user-feedback-store.e2e.test.js.map +1 -1
  464. package/dist/test/e2e/stores/user-store.e2e.test.js +1 -1
  465. package/dist/test/e2e/stores/user-store.e2e.test.js.map +1 -1
  466. package/dist/test/fixtures/fake-api-token-store.d.ts +2 -1
  467. package/dist/test/fixtures/fake-api-token-store.js.map +1 -1
  468. package/dist/test/fixtures/fake-environment-store.d.ts +5 -3
  469. package/dist/test/fixtures/fake-environment-store.js +22 -15
  470. package/dist/test/fixtures/fake-environment-store.js.map +1 -1
  471. package/dist/test/fixtures/fake-event-store.d.ts +1 -0
  472. package/dist/test/fixtures/fake-event-store.js +3 -0
  473. package/dist/test/fixtures/fake-event-store.js.map +1 -1
  474. package/dist/test/fixtures/fake-feature-environment-store.d.ts +7 -5
  475. package/dist/test/fixtures/fake-feature-environment-store.js +31 -10
  476. package/dist/test/fixtures/fake-feature-environment-store.js.map +1 -1
  477. package/dist/test/fixtures/fake-feature-strategies-store.d.ts +7 -13
  478. package/dist/test/fixtures/fake-feature-strategies-store.js +14 -51
  479. package/dist/test/fixtures/fake-feature-strategies-store.js.map +1 -1
  480. package/dist/test/fixtures/fake-feature-toggle-client-store.d.ts +9 -0
  481. package/dist/test/fixtures/fake-feature-toggle-client-store.js +50 -0
  482. package/dist/test/fixtures/fake-feature-toggle-client-store.js.map +1 -0
  483. package/dist/test/fixtures/fake-feature-toggle-store.d.ts +7 -9
  484. package/dist/test/fixtures/fake-feature-toggle-store.js +7 -14
  485. package/dist/test/fixtures/fake-feature-toggle-store.js.map +1 -1
  486. package/dist/test/fixtures/fake-project-store.d.ts +1 -2
  487. package/dist/test/fixtures/fake-project-store.js +0 -7
  488. package/dist/test/fixtures/fake-project-store.js.map +1 -1
  489. package/dist/test/fixtures/permissions.d.ts +3 -3
  490. package/dist/test/fixtures/permissions.js +5 -4
  491. package/dist/test/fixtures/permissions.js.map +1 -1
  492. package/dist/test/fixtures/store.js +2 -0
  493. package/dist/test/fixtures/store.js.map +1 -1
  494. package/package.json +51 -45
  495. package/dist/lib/extract-user.d.ts +0 -2
  496. package/dist/lib/extract-user.js +0 -6
  497. package/dist/lib/extract-user.js.map +0 -1
  498. package/dist/test/e2e/api/admin/boostrap.test.js.map +0 -1
  499. package/docs/api/oas/swagger-ui-bundle.js +0 -3
  500. package/docs/api/oas/swagger-ui-bundle.js.map +0 -1
  501. package/docs/api/oas/swagger-ui-es-bundle-core.js +0 -3
  502. package/docs/api/oas/swagger-ui-es-bundle-core.js.map +0 -1
  503. package/docs/api/oas/swagger-ui-es-bundle.js +0 -3
  504. package/docs/api/oas/swagger-ui-es-bundle.js.map +0 -1
  505. package/docs/api/oas/swagger-ui-standalone-preset.js +0 -3
  506. package/docs/api/oas/swagger-ui-standalone-preset.js.map +0 -1
  507. package/docs/api/oas/swagger-ui.css +0 -8906
  508. package/docs/api/oas/swagger-ui.css.map +0 -1
  509. package/docs/api/oas/swagger-ui.js +0 -3
  510. package/docs/api/oas/swagger-ui.js.map +0 -1
  511. package/docs/api/oas/swagger.json +0 -1479
@@ -1,1479 +0,0 @@
1
- {
2
- "swagger": "2.0",
3
- "info": {
4
- "contact": {
5
- "name": "The Unleash team",
6
- "url": "https://unleash.github.io/"
7
- },
8
- "description": "Unleash is an open source feature flag and toggle system for all your applications and services.\n\nOnce you have [set your Unleash server up](https://unleash.github.io/docs/getting_started), you can test the API from inside your browser. The following assumes the server is running on localhost:4242.\n\nThe following 'endpoints' (such as `GET /admin/metrics/applications`) provide reference documentation for the Unleash REST API. To try out API calls:\n1. Expand an endpoint\n2. Click **Try it out**\n3. Customize the **Request body** and/or **Parameters**.\n4. Click **Execute**.\n\nYou will see the cURL request submitted to the API server and the corresponding response.\n\nAlternatively, you can test the API in [Postman](https://app.getpostman.com/run-collection/8552ddcd4cc9fc012548)\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/8552ddcd4cc9fc012548)",
9
- "title": "Unleash API",
10
- "version": "3.5.6"
11
- },
12
- "host": "localhost:4242",
13
- "basePath": "/api",
14
- "schemes": ["http"],
15
- "paths": {
16
- "/admin/archive/features": {
17
- "get": {
18
- "produces": ["application/json"],
19
- "parameters": [],
20
- "responses": {
21
- "200": {
22
- "description": "Successful response",
23
- "schema": {
24
- "$ref": "#/definitions/200"
25
- }
26
- },
27
- "401": {
28
- "description": "Not authorized",
29
- "schema": {
30
- "$ref": "#/definitions/401"
31
- }
32
- },
33
- "404": {
34
- "description": "Feature Toggle not found"
35
- }
36
- },
37
- "tags": ["Archive"],
38
- "description": "Archived feature toggles are those that have been previously deleted",
39
- "operationId": "fetchArchivedToggles",
40
- "summary": "List all the archived feature toggles on the Unleash server"
41
- }
42
- },
43
- "/admin/archive/revive/{featureName}": {
44
- "post": {
45
- "parameters": [
46
- {
47
- "description": "Must match an existing Feature Toggle name.",
48
- "in": "path",
49
- "name": "featureName",
50
- "required": true,
51
- "type": "string",
52
- "x-example": "featureX"
53
- }
54
- ],
55
- "responses": {
56
- "200": {
57
- "description": "Feature Toggle successfully revived"
58
- },
59
- "404": {
60
- "description": "Feature Toggle not found"
61
- }
62
- },
63
- "tags": ["Archive"],
64
- "description": "The Feature Toggle had been previously deleted",
65
- "operationId": "reviveFeatureToggle",
66
- "summary": "Un-archive a Feature Toggle"
67
- }
68
- },
69
- "/admin/events": {
70
- "get": {
71
- "produces": ["application/json"],
72
- "parameters": [],
73
- "responses": {
74
- "200": {
75
- "description": "OK",
76
- "schema": {
77
- "$ref": "#/definitions/200-events"
78
- }
79
- },
80
- "401": {
81
- "description": "Not authorized",
82
- "schema": {
83
- "$ref": "#/definitions/401"
84
- }
85
- }
86
- },
87
- "tags": ["Events"],
88
- "description": "Returns one of the six event types:\n- feature-created\n- feature-updated\n- feature-archived\n- feature-revived\n- strategy-created\n- strategy-deleted",
89
- "operationId": "get-admin-events",
90
- "summary": "Fetch all changes in the Unleash system"
91
- }
92
- },
93
- "/admin/feature-types": {
94
- "get": {
95
- "produces": ["application/json"],
96
- "parameters": [],
97
- "responses": {
98
- "200": {
99
- "description": "OK",
100
- "schema": {
101
- "$ref": "#/definitions/200featuretype"
102
- }
103
- },
104
- "401": {
105
- "description": "Not authorized",
106
- "schema": {
107
- "$ref": "#/definitions/401"
108
- }
109
- }
110
- },
111
- "tags": ["Feature types"],
112
- "description": "- release\n- experiment\n- ops\n- killswitch\n- permission",
113
- "operationId": "get-admin-feature-types",
114
- "summary": "Fetch the list of Unleash feature types"
115
- }
116
- },
117
- "/admin/features": {
118
- "get": {
119
- "produces": ["application/json"],
120
- "parameters": [],
121
- "responses": {
122
- "200": {
123
- "description": "Successful response",
124
- "schema": {
125
- "$ref": "#/definitions/200"
126
- }
127
- },
128
- "401": {
129
- "description": "Not authorized",
130
- "schema": {
131
- "$ref": "#/definitions/401"
132
- }
133
- }
134
- },
135
- "tags": ["Feature toggles"],
136
- "externalDocs": {
137
- "description": "Activation strategies",
138
- "url": "https://unleash.github.io/docs/activation_strategy"
139
- },
140
- "description": "The response returns all active feature toggles and their current strategy configuration:\n- A feature toggle will have *at least* one configured strategy.\n- A strategy will have a `name` and `parameters` map.\n",
141
- "operationId": "getFeatures",
142
- "summary": "Fetches all feature toggles from the Unleash server."
143
- },
144
- "post": {
145
- "consumes": ["application/json"],
146
- "produces": ["application/json"],
147
- "parameters": [
148
- {
149
- "in": "body",
150
- "name": "body",
151
- "required": true,
152
- "schema": {
153
- "$ref": "#/definitions/featureToggleSchema"
154
- }
155
- }
156
- ],
157
- "responses": {
158
- "201": {
159
- "description": "Feature Toggle successfully created"
160
- },
161
- "400": {
162
- "description": "Bad body request (for example, Feature Toggle name is not unique)"
163
- },
164
- "401": {
165
- "description": "Not authorized",
166
- "schema": {
167
- "$ref": "#/definitions/401"
168
- }
169
- }
170
- },
171
- "tags": ["Feature toggles"],
172
- "description": "Create a new Feature Toggle",
173
- "operationId": "createFeatureToggle",
174
- "summary": "Create a Feature Toggle"
175
- }
176
- },
177
- "/admin/features/{featureName}": {
178
- "delete": {
179
- "produces": ["application/json"],
180
- "parameters": [
181
- {
182
- "description": "Must match an existing Feature Toggle name.",
183
- "in": "path",
184
- "name": "featureName",
185
- "required": true,
186
- "type": "string",
187
- "x-example": "featureX"
188
- }
189
- ],
190
- "responses": {
191
- "200": {
192
- "description": "Feature Toggle successfully archived"
193
- },
194
- "401": {
195
- "description": "Not authorized",
196
- "schema": {
197
- "$ref": "#/definitions/401"
198
- }
199
- },
200
- "404": {
201
- "description": "Feature Toggle not found"
202
- }
203
- },
204
- "tags": ["Feature toggles", "Archive"],
205
- "description": "Feature toggles can only be archived - they cannot be deleted.\n\nIf an old Feature Toggle *re-appears*, this is because someone else has created a new one with the same name.\n",
206
- "operationId": "archiveFeatureToggle",
207
- "summary": "Archive a Feature Toggle."
208
- },
209
- "get": {
210
- "produces": ["application/json"],
211
- "parameters": [
212
- {
213
- "description": "Must match an existing Feature Toggle name.",
214
- "in": "path",
215
- "name": "featureName",
216
- "required": true,
217
- "type": "string",
218
- "x-example": "featureX"
219
- }
220
- ],
221
- "responses": {
222
- "200": {
223
- "description": "Successful response",
224
- "schema": {
225
- "$ref": "#/definitions/200"
226
- }
227
- },
228
- "401": {
229
- "description": "Not authorized",
230
- "schema": {
231
- "$ref": "#/definitions/401"
232
- }
233
- }
234
- },
235
- "tags": ["Feature toggles"],
236
- "externalDocs": {
237
- "description": "Activation strategies",
238
- "url": "https://unleash.github.io/docs/activation_strategy"
239
- },
240
- "description": "The response returns the Feature Toggle's current strategy configuration:\n- It will have *at least* one configured strategy.\n- A strategy will have a *name* and *parameters* map.\n",
241
- "operationId": "getFeature",
242
- "summary": "Fetches a specific Feature Toggle from the Unleash server."
243
- },
244
- "put": {
245
- "consumes": ["application/json"],
246
- "produces": ["application/json"],
247
- "parameters": [
248
- {
249
- "description": "Must match an existing Feature Toggle name.",
250
- "in": "path",
251
- "name": "featureName",
252
- "required": true,
253
- "type": "string",
254
- "x-example": "featureX"
255
- },
256
- {
257
- "in": "body",
258
- "name": "body",
259
- "required": true,
260
- "schema": {
261
- "$ref": "#/definitions/featureToggleSchema"
262
- }
263
- }
264
- ],
265
- "responses": {
266
- "200": {
267
- "description": "Feature Toggle successfully updated",
268
- "schema": {
269
- "$ref": "#/definitions/200"
270
- }
271
- },
272
- "400": {
273
- "description": "Bad body request (for example 'strategies' is not an array)"
274
- },
275
- "401": {
276
- "description": "Not authorized",
277
- "schema": {
278
- "$ref": "#/definitions/401"
279
- }
280
- },
281
- "404": {
282
- "description": "Feature Toggle not found"
283
- }
284
- },
285
- "tags": ["Feature toggles"],
286
- "description": "Update a Feature Toggle.",
287
- "operationId": "featureName",
288
- "summary": "Update a Feature Toggle"
289
- }
290
- },
291
- "/admin/features/{featureName}/stale/off": {
292
- "post": {
293
- "produces": ["application/json"],
294
- "parameters": [
295
- {
296
- "description": "Must match an existing Feature Toggle name.",
297
- "in": "path",
298
- "name": "featureName",
299
- "required": true,
300
- "type": "string",
301
- "x-example": "featureX"
302
- }
303
- ],
304
- "responses": {
305
- "200": {
306
- "description": "Successful response",
307
- "schema": {
308
- "$ref": "#/definitions/200"
309
- }
310
- },
311
- "401": {
312
- "description": "Not authorized",
313
- "schema": {
314
- "$ref": "#/definitions/401"
315
- }
316
- },
317
- "404": {
318
- "description": "Feature Toggle not found"
319
- }
320
- },
321
- "tags": ["Feature toggles"],
322
- "externalDocs": {
323
- "description": "Feature Toggle types",
324
- "url": "https://unleash.github.io/docs/feature_toggle_types"
325
- },
326
- "description": "**featureName** must match an existing Feature Toggle.",
327
- "operationId": "markFeatureToggleActive",
328
- "summary": "Mark a Feature Toggle as active."
329
- }
330
- },
331
- "/admin/features/{featureName}/stale/on": {
332
- "post": {
333
- "produces": ["application/json"],
334
- "parameters": [
335
- {
336
- "description": "Must match an existing Feature Toggle name.",
337
- "in": "path",
338
- "name": "featureName",
339
- "required": true,
340
- "type": "string",
341
- "x-example": "featureX"
342
- }
343
- ],
344
- "responses": {
345
- "200": {
346
- "description": "Successful response",
347
- "schema": {
348
- "$ref": "#/definitions/200"
349
- }
350
- },
351
- "401": {
352
- "description": "Not authorized",
353
- "schema": {
354
- "$ref": "#/definitions/401"
355
- }
356
- },
357
- "404": {
358
- "description": "Feature Toggle not found"
359
- }
360
- },
361
- "tags": ["Feature toggles"],
362
- "externalDocs": {
363
- "description": "Feature Toggle types",
364
- "url": "https://unleash.github.io/docs/feature_toggle_types"
365
- },
366
- "description": "**featureName** must match an existing Feature Toggle.",
367
- "operationId": "markFeatureToggleStale",
368
- "summary": "Mark a Feature Toggle as 'stale' (deprecated)."
369
- }
370
- },
371
- "/admin/features/{featureName}/toggle/off": {
372
- "post": {
373
- "produces": ["application/json"],
374
- "parameters": [
375
- {
376
- "description": "Must match an existing Feature Toggle name.",
377
- "in": "path",
378
- "name": "featureName",
379
- "required": true,
380
- "type": "string",
381
- "x-example": "featureX"
382
- }
383
- ],
384
- "responses": {
385
- "200": {
386
- "description": "Successful response",
387
- "schema": {
388
- "$ref": "#/definitions/200"
389
- }
390
- },
391
- "401": {
392
- "description": "Not authorized",
393
- "schema": {
394
- "$ref": "#/definitions/401"
395
- }
396
- },
397
- "404": {
398
- "description": "Feature Toggle not found"
399
- }
400
- },
401
- "tags": ["Feature toggles"],
402
- "description": "**featureName** must match an existing Feature Toggle.",
403
- "operationId": "disableFeatureToggle",
404
- "summary": "Disable a Feature Toggle."
405
- }
406
- },
407
- "/admin/features/{featureName}/toggle/on": {
408
- "post": {
409
- "produces": ["application/json"],
410
- "parameters": [
411
- {
412
- "description": "Must match an existing Feature Toggle name.",
413
- "in": "path",
414
- "name": "featureName",
415
- "required": true,
416
- "type": "string",
417
- "x-example": "featureX"
418
- }
419
- ],
420
- "responses": {
421
- "200": {
422
- "description": "Successful response",
423
- "schema": {
424
- "$ref": "#/definitions/200"
425
- }
426
- },
427
- "401": {
428
- "description": "Not authorized",
429
- "schema": {
430
- "$ref": "#/definitions/401"
431
- }
432
- },
433
- "404": {
434
- "description": "Feature Toggle not found"
435
- }
436
- },
437
- "tags": ["Feature toggles"],
438
- "description": "**featureName** must match an existing Feature Toggle.",
439
- "operationId": "enableFeatureToggle",
440
- "summary": "Enable a Feature Toggle."
441
- }
442
- },
443
- "/admin/metrics/applications": {
444
- "get": {
445
- "produces": ["application/json"],
446
- "parameters": [],
447
- "responses": {
448
- "200": {
449
- "description": "Successful response",
450
- "schema": {
451
- "$ref": "#/definitions/applicationArray"
452
- }
453
- },
454
- "401": {
455
- "description": "Not authorized",
456
- "schema": {
457
- "$ref": "#/definitions/401"
458
- }
459
- }
460
- },
461
- "tags": ["Metrics"],
462
- "description": "Also has a link for more details.",
463
- "operationId": "getApplications",
464
- "summary": "A list of known applications ('seen' by Unleash in the last two days)"
465
- }
466
- },
467
- "/admin/metrics/applications/{appName}": {
468
- "get": {
469
- "produces": ["application/json"],
470
- "parameters": [
471
- {
472
- "description": "Must match an existing application name.",
473
- "in": "path",
474
- "name": "appName",
475
- "required": true,
476
- "type": "string",
477
- "x-example": "my-application"
478
- }
479
- ],
480
- "responses": {
481
- "200": {
482
- "description": "Successful response",
483
- "schema": {
484
- "$ref": "#/definitions/200appdetails"
485
- }
486
- },
487
- "401": {
488
- "description": "Not authorized",
489
- "schema": {
490
- "$ref": "#/definitions/401"
491
- }
492
- },
493
- "500": {
494
- "description": "Application name not found"
495
- }
496
- },
497
- "tags": ["Metrics"],
498
- "description": "Details include things such as instances, strategies implemented and seen feature toggles.",
499
- "operationId": "getApplicationDetails",
500
- "summary": "Details about a client application."
501
- }
502
- },
503
- "/admin/metrics/feature-toggles": {
504
- "get": {
505
- "produces": ["application/json"],
506
- "parameters": [],
507
- "responses": {
508
- "200": {
509
- "description": "Successful response",
510
- "schema": {
511
- "$ref": "#/definitions/200feature"
512
- }
513
- },
514
- "401": {
515
- "description": "Not authorized",
516
- "schema": {
517
- "$ref": "#/definitions/401"
518
- }
519
- }
520
- },
521
- "tags": ["Metrics"],
522
- "description": "- **Yes** is the number of times a given feature toggle was enabled in a client applucation\n- **No** is the number of times it was disabled.",
523
- "operationId": "featureToggles",
524
- "summary": "Gives 'last minute' and 'last hour' metrics for all active feature toggles (based on what was reported by the client applications)."
525
- }
526
- },
527
- "/admin/metrics/seen-apps": {
528
- "get": {
529
- "produces": ["application/json"],
530
- "parameters": [],
531
- "responses": {
532
- "200": {
533
- "description": "Successful response",
534
- "schema": {
535
- "$ref": "#/definitions/applicationArray"
536
- }
537
- },
538
- "401": {
539
- "description": "Not authorized",
540
- "schema": {
541
- "$ref": "#/definitions/401"
542
- }
543
- }
544
- },
545
- "tags": ["Metrics"],
546
- "description": "(per Feature Toggle)",
547
- "operationId": "seenApps",
548
- "summary": "Details about seen applications"
549
- }
550
- },
551
- "/admin/metrics/seen-toggles": {
552
- "get": {
553
- "produces": ["application/json"],
554
- "parameters": [],
555
- "responses": {
556
- "200": {
557
- "description": "Successful response",
558
- "schema": {
559
- "$ref": "#/definitions/200seen"
560
- }
561
- }
562
- },
563
- "tags": ["Metrics"],
564
- "description": "It is only guaranteed that feature toggles reported by client applications within the last hour will be returned. However, in most cases, earlier reported feature toggles will also be returned.",
565
- "operationId": "seenToggles",
566
- "summary": "Returns a list of applications and the feature toggles that Unleash has 'seen' for each application."
567
- }
568
- },
569
- "/admin/state/export": {
570
- "get": {
571
- "produces": ["application/json"],
572
- "parameters": [
573
- {
574
- "description": "Choose export format, either json or yaml. json is the default\n",
575
- "enum": ["json", "yaml"],
576
- "in": "query",
577
- "name": "format",
578
- "type": "string",
579
- "x-example": "json"
580
- },
581
- {
582
- "description": "Do you want to export the data as a file? Default is false",
583
- "in": "query",
584
- "name": "download",
585
- "type": "boolean",
586
- "x-example": false
587
- },
588
- {
589
- "description": "Do you want to include feature toggles in the export? Default is true",
590
- "in": "query",
591
- "name": "featureToggles",
592
- "type": "boolean",
593
- "x-example": true
594
- },
595
- {
596
- "description": "Do you want to include strategies in the export? Default is true",
597
- "in": "query",
598
- "name": "strategies",
599
- "type": "boolean",
600
- "x-example": true
601
- }
602
- ],
603
- "responses": {
604
- "200": {
605
- "description": "OK",
606
- "schema": {
607
- "$ref": "#/definitions/200export"
608
- }
609
- },
610
- "401": {
611
- "description": "Not authorized",
612
- "schema": {
613
- "$ref": "#/definitions/401"
614
- }
615
- }
616
- },
617
- "tags": ["Import and export"],
618
- "externalDocs": {
619
- "description": "Import and export",
620
- "url": "https://unleash.github.io/docs/import_export"
621
- },
622
- "description": "Exports a list of feature toggles and/or strategies in either JSON or YAML format.",
623
- "operationId": "get-admin-state-export",
624
- "summary": "Export feature toggles and strategies"
625
- }
626
- },
627
- "/admin/state/import": {
628
- "post": {
629
- "consumes": ["multipart/form-data", "application/json"],
630
- "produces": ["application/json"],
631
- "parameters": [
632
- {
633
- "default": "false",
634
- "description": "Be careful using this in production environments. Set to true if you want the to remove all strategies and feature toggles from the datebase before import. Default is false.",
635
- "in": "query",
636
- "name": "drop",
637
- "type": "boolean"
638
- },
639
- {
640
- "default": "false",
641
- "description": "Set to *true* if you want keep all existing feature toggles and strategies as is; only the missing feature toggles and strategies will be inserted from the import data. Default is true.",
642
- "in": "query",
643
- "name": "keep",
644
- "type": "boolean",
645
- "x-example": true
646
- },
647
- {
648
- "format": "binary",
649
- "in": "formData",
650
- "name": "fileName",
651
- "type": "string"
652
- }
653
- ],
654
- "responses": {
655
- "200": {
656
- "description": "Successful import."
657
- },
658
- "401": {
659
- "description": "Not authorized",
660
- "schema": {
661
- "$ref": "#/definitions/401"
662
- }
663
- },
664
- "404": {
665
- "description": "No import data provided."
666
- }
667
- },
668
- "tags": ["Import and export"],
669
- "externalDocs": {
670
- "description": "Import and export",
671
- "url": "https://unleash.github.io/docs/import_export"
672
- },
673
- "description": "Upload the data, in JSON or YAML format.\nYou can add in the POST body or upload a file\n- **POST body** (JSON format only) - next to **Request body**, choose the *application/json* dropdown option.\n- **File upload** (JOSN or YAML format) - next to **Request body**, choose the *multipart/form-data* dropdown option. This adopts the same schema as `GET /admin/state/export`",
674
- "operationId": "post-admin-state-import",
675
- "summary": "Import feature toggles and strategies"
676
- }
677
- },
678
- "/admin/strategies": {
679
- "get": {
680
- "produces": ["application/json"],
681
- "parameters": [],
682
- "responses": {
683
- "200": {
684
- "description": "Successful response",
685
- "schema": {
686
- "$ref": "#/definitions/200strategy"
687
- }
688
- },
689
- "401": {
690
- "description": "Not authorized",
691
- "schema": {
692
- "$ref": "#/definitions/401"
693
- }
694
- }
695
- },
696
- "tags": ["Strategies"],
697
- "description": "Fetch all strategies and their parameters.",
698
- "operationId": "getStrategies",
699
- "summary": "Fetch all strategies and their parameters."
700
- },
701
- "post": {
702
- "consumes": ["application/json"],
703
- "produces": ["application/json"],
704
- "parameters": [
705
- {
706
- "in": "body",
707
- "name": "body",
708
- "required": true,
709
- "schema": {
710
- "$ref": "#/definitions/createStrategy"
711
- }
712
- }
713
- ],
714
- "responses": {
715
- "201": {
716
- "description": "Strategy successfully added"
717
- },
718
- "400": {
719
- "description": "Bad body request (for example 'strategies' is not an array)"
720
- },
721
- "401": {
722
- "description": "Not authorized",
723
- "schema": {
724
- "$ref": "#/definitions/401"
725
- }
726
- },
727
- "409": {
728
- "description": "Strategy already exists",
729
- "schema": {
730
- "$ref": "#/definitions/409"
731
- }
732
- }
733
- },
734
- "tags": ["Strategies"],
735
- "description": "Create Strategy",
736
- "operationId": "createStrategy",
737
- "summary": "Create Strategy"
738
- }
739
- },
740
- "/admin/strategies/{strategyName}": {
741
- "put": {
742
- "consumes": ["application/json"],
743
- "produces": ["application/json"],
744
- "parameters": [
745
- {
746
- "description": "Must match an existing Strategy name.",
747
- "in": "path",
748
- "name": "strategyName",
749
- "required": true,
750
- "type": "string",
751
- "x-example": "flexibleRollout"
752
- },
753
- {
754
- "in": "body",
755
- "name": "body",
756
- "required": true,
757
- "schema": {
758
- "$ref": "#/definitions/createStrategy"
759
- }
760
- }
761
- ],
762
- "responses": {
763
- "200": {
764
- "description": "Strategy successfully updated."
765
- },
766
- "401": {
767
- "description": "Not authorized",
768
- "schema": {
769
- "$ref": "#/definitions/401"
770
- }
771
- },
772
- "404": {
773
- "description": "Strategy not updated due to errors in query and/or request body (such as **name** and **strategyName** not matching)."
774
- }
775
- },
776
- "tags": ["Strategies"],
777
- "description": "Use to update a Strategy definition.\n\n**name** and **strategyName** must match and must also match an existing Strategy name.\n\n**Caution: It can be dangerous to change a Strategy (as the implementation also might need to be changed).**\n",
778
- "operationId": "updateStrategy",
779
- "summary": "Update Strategy"
780
- }
781
- }
782
- },
783
- "definitions": {
784
- "200": {
785
- "properties": {
786
- "features": {
787
- "$ref": "#/definitions/featureToggleSchema"
788
- },
789
- "version": {
790
- "$ref": "#/definitions/versionSchema"
791
- }
792
- },
793
- "title": "Successful response",
794
- "type": "object"
795
- },
796
- "401": {
797
- "description": "Not authorized",
798
- "title": "Unauthorized access",
799
- "properties": {
800
- "message": {
801
- "minLength": 1,
802
- "type": "string"
803
- },
804
- "path": {
805
- "minLength": 1,
806
- "type": "string"
807
- },
808
- "type": {
809
- "minLength": 1,
810
- "type": "string"
811
- }
812
- },
813
- "required": ["type", "path", "message"],
814
- "type": "object"
815
- },
816
- "409": {
817
- "properties": {
818
- "details": {
819
- "items": {
820
- "properties": {
821
- "message": {
822
- "description": "Error message",
823
- "minLength": 1,
824
- "type": "string"
825
- }
826
- },
827
- "required": ["message"]
828
- },
829
- "minItems": 1,
830
- "type": "array",
831
- "uniqueItems": true
832
- },
833
- "isJoi": {
834
- "description": "For internal use by the Unleash developers",
835
- "type": "boolean"
836
- },
837
- "name": {
838
- "description": "Title of error",
839
- "minLength": 1,
840
- "type": "string"
841
- }
842
- },
843
- "required": ["isJoi", "name", "details"],
844
- "title": "Error",
845
- "type": "object"
846
- },
847
- "200-events": {
848
- "properties": {
849
- "events": {
850
- "items": {
851
- "properties": {
852
- "createdAt": {
853
- "description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
854
- "example": "2016-12-09T14:56:36.730Z",
855
- "type": "string"
856
- },
857
- "createdBy": {
858
- "description": "The current user's *email* or *username* (taken from the *User* object on the current session)",
859
- "minLength": 1,
860
- "type": "string"
861
- },
862
- "data": {
863
- "$ref": "#/definitions/featureToggleSchema"
864
- },
865
- "diffs": {
866
- "externalDocs": {
867
- "description": "Activation strategies",
868
- "url": "https://www.npmjs.com/package/deep-diff#differences"
869
- },
870
- "description": "The JSON differences between the current and last version of the Feature Toggle.\n(Uses the [deep-diff Node.js module](https://www.npmjs.com/package/deep-diff))",
871
- "items": {
872
- "properties": {
873
- "kind": {
874
- "description": "The kind of change:\n- **N** - a newly-added property or element\n- **D** - a property or element was deleted\n- **E** - a property or element was edited\n- **A** - a change occurred within an array",
875
- "enum": ["N", "D", "E", "A"],
876
- "example": "E",
877
- "type": "string"
878
- },
879
- "lhs": {
880
- "description": "The value on the left-hand-side of the comparison (*undefined* if **kind** is *N*)",
881
- "example": true,
882
- "type": "boolean"
883
- },
884
- "path": {
885
- "items": {
886
- "required": ["pathItem"]
887
- },
888
- "properties": {
889
- "pathItem": {
890
- "description": "The property path (from the left-hand-side root)",
891
- "example": "enabled",
892
- "type": "string"
893
- }
894
- },
895
- "type": "array"
896
- },
897
- "rhs": {
898
- "description": "The value on the right-hand-side of the comparison (*undefined* if **kind** is *D*)",
899
- "example": false,
900
- "type": "boolean"
901
- }
902
- },
903
- "required": ["kind", "lhs", "rhs"]
904
- },
905
- "type": "array"
906
- },
907
- "id": {
908
- "description": "The event number. All events have a unique id.",
909
- "example": 55,
910
- "type": "number"
911
- },
912
- "type": {
913
- "description": "One of the six event types",
914
- "enum": [
915
- "feature-created",
916
- "feature-updated",
917
- "feature-archived",
918
- "feature-revived",
919
- "strategy-created",
920
- "strategy-deleted"
921
- ],
922
- "example": "feature-updated",
923
- "minLength": 1,
924
- "type": "string"
925
- }
926
- }
927
- },
928
- "minItems": 1,
929
- "required": ["id", "type", "createdBy", "createdAt"],
930
- "type": "array",
931
- "uniqueItems": true
932
- },
933
- "version": {
934
- "$ref": "#/definitions/versionSchema"
935
- }
936
- },
937
- "title": "Successful response",
938
- "type": "object"
939
- },
940
- "200appdetails": {
941
- "properties": {
942
- "application": {
943
- "$ref": "#/definitions/application"
944
- },
945
- "instances": {
946
- "properties": {
947
- "appName": {
948
- "description": "Application name",
949
- "example": "my-application",
950
- "minLength": 1,
951
- "type": "string"
952
- },
953
- "clientIp": {
954
- "description": "The IP address of the system running this instance of the application",
955
- "example": "::ffff:127.0.0.1",
956
- "minLength": 1,
957
- "type": "string"
958
- },
959
- "createdAt": {
960
- "description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
961
- "example": "2020-11-13T16:56:29.279Z",
962
- "minLength": 1,
963
- "type": "string"
964
- },
965
- "instanceId": {
966
- "description": "The name of the system running the application",
967
- "example": "generated-732038-17080",
968
- "minLength": 1,
969
- "type": "string"
970
- },
971
- "lastSeen": {
972
- "description": "The last time the application 'talked' to Unleash (sent metrics, registered, fetched feature toggles) - in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime)",
973
- "example": "2020-11-14T11:17:24.482Z",
974
- "minLength": 1,
975
- "type": "string"
976
- },
977
- "sdkVersion": {
978
- "description": "The version of the Unleash client SDK running the application",
979
- "example": "unleash-client-node:3.4.0",
980
- "minLength": 1,
981
- "type": "string"
982
- }
983
- },
984
- "required": [
985
- "appName",
986
- "instanceId",
987
- "sdkVersion",
988
- "clientIp",
989
- "lastSeen",
990
- "createdAt"
991
- ],
992
- "type": "object"
993
- },
994
- "links": {
995
- "properties": {
996
- "self": {
997
- "description": "Deprecated. Do not use",
998
- "minLength": 1,
999
- "type": "string"
1000
- }
1001
- },
1002
- "type": "object"
1003
- },
1004
- "seenToggles": {
1005
- "$ref": "#/definitions/featureToggleSchema"
1006
- },
1007
- "strategies": {
1008
- "$ref": "#/definitions/strategySchema"
1009
- }
1010
- },
1011
- "required": ["application", "instances", "strategies", "seenToggles"],
1012
- "title": "Successful response",
1013
- "type": "object"
1014
- },
1015
- "200export": {
1016
- "properties": {
1017
- "features": {
1018
- "$ref": "#/definitions/featureToggleSchema"
1019
- },
1020
- "strategies": {
1021
- "$ref": "#/definitions/strategySchema"
1022
- },
1023
- "version": {
1024
- "$ref": "#/definitions/versionSchema"
1025
- }
1026
- },
1027
- "required": ["version", "features", "strategies"],
1028
- "title": "Successful response",
1029
- "type": "object"
1030
- },
1031
- "200feature": {
1032
- "description": "- **lastHour** - how many times a Feature Toggle was accessed in the last hour.\n- **lastMinute** - how many times a Feature Toggle was accessed in the last minute.",
1033
- "items": {
1034
- "properties": {
1035
- "appName": {
1036
- "enum": ["lastHour", "lastMinute"],
1037
- "example": "lastHour",
1038
- "minLength": 1,
1039
- "type": "string"
1040
- },
1041
- "seenToggles": {
1042
- "properties": {
1043
- "metricsCount": {
1044
- "type": "number"
1045
- },
1046
- "yesno": {
1047
- "enum": ["yes", "no"],
1048
- "type": "string"
1049
- }
1050
- },
1051
- "required": ["yesno", "metricsCount"],
1052
- "type": "object"
1053
- }
1054
- },
1055
- "required": ["appName", "seenToggles"],
1056
- "title": "Feature Toggle metrics",
1057
- "type": "object"
1058
- },
1059
- "minItems": 1,
1060
- "title": "Successful response",
1061
- "type": "array",
1062
- "uniqueItems": true
1063
- },
1064
- "200featuretype": {
1065
- "properties": {
1066
- "types": {
1067
- "items": {
1068
- "properties": {
1069
- "description": {
1070
- "description": "A description of what this Feature Toggle type could be used for",
1071
- "enum": [
1072
- "Enables trunk-based development for teams practicing continuous delivery",
1073
- "Performs multivariate or A/B testing",
1074
- "Controls operational aspects of the system behavior",
1075
- "Gracefully degrades system functionality",
1076
- "Changes the features or product experiences that certain users receive"
1077
- ],
1078
- "minLength": 1,
1079
- "type": "string"
1080
- },
1081
- "id": {
1082
- "$ref": "#/definitions/featureToggleTypeSchema"
1083
- },
1084
- "lifetimeDays": {
1085
- "externalDocs": {
1086
- "description": "Feature Toggle types",
1087
- "url": "https://unleash.github.io/docs/feature_toggle_types"
1088
- },
1089
- "description": "The number of days this Feature Toggle is intended to be used. This information is used to issue deprecation notices",
1090
- "example": 40,
1091
- "type": "number"
1092
- },
1093
- "name": {
1094
- "description": "The title of the Feature Toggle type",
1095
- "enum": [
1096
- "Release",
1097
- "Experiment",
1098
- "Operational",
1099
- "Kill switch",
1100
- "Permission"
1101
- ],
1102
- "example": "Release",
1103
- "minLength": 1,
1104
- "type": "string"
1105
- }
1106
- },
1107
- "required": ["id", "name", "description", "lifetimeDays"]
1108
- },
1109
- "minItems": 1,
1110
- "type": "array",
1111
- "uniqueItems": true
1112
- },
1113
- "version": {
1114
- "$ref": "#/definitions/versionSchema"
1115
- }
1116
- },
1117
- "required": ["version", "types"],
1118
- "title": "Successful response",
1119
- "type": "object"
1120
- },
1121
- "200seen": {
1122
- "items": {
1123
- "properties": {
1124
- "appName": {
1125
- "minLength": 1,
1126
- "type": "string"
1127
- },
1128
- "metricsCount": {
1129
- "type": "number"
1130
- },
1131
- "seenToggles": {
1132
- "items": {
1133
- "properties": {}
1134
- },
1135
- "type": "array"
1136
- }
1137
- },
1138
- "required": ["appName", "seenToggles", "metricsCount"],
1139
- "title": "Feature Toggle information",
1140
- "type": "object"
1141
- },
1142
- "minItems": 1,
1143
- "title": "Successful response",
1144
- "type": "array",
1145
- "uniqueItems": true
1146
- },
1147
- "200strategy": {
1148
- "properties": {
1149
- "strategies": {
1150
- "$ref": "#/definitions/strategySchema"
1151
- },
1152
- "version": {
1153
- "$ref": "#/definitions/versionSchema"
1154
- }
1155
- },
1156
- "required": ["version", "strategies"],
1157
- "title": "Successful response",
1158
- "type": "object"
1159
- },
1160
- "application": {
1161
- "properties": {
1162
- "applications": {
1163
- "items": {
1164
- "properties": {
1165
- "appName": {
1166
- "description": "Application name",
1167
- "example": "my-application",
1168
- "type": "string"
1169
- },
1170
- "color": {
1171
- "description": "Deprecated. Do not use",
1172
- "type": "string"
1173
- },
1174
- "createdAt": {
1175
- "description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
1176
- "example": "2016-12-09T14:56:36.730Z",
1177
- "type": "string"
1178
- },
1179
- "description": {
1180
- "description": "A description of what the application does",
1181
- "type": "string"
1182
- },
1183
- "icon": {
1184
- "description": "The application's icon. Must be one of the [Material Design icon names](https://material.io/resources/icons/?style=baseline)",
1185
- "example": "comment_bank",
1186
- "type": "string"
1187
- },
1188
- "strategies": {
1189
- "description": "A description of what the application does",
1190
- "type": "string"
1191
- },
1192
- "updatedAt": {
1193
- "description": "The last time the application 'talked' to Unleash (sent metrics, registered, fetched feature toggles) - in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime)",
1194
- "example": "2020-11-14T09:55:23.653Z",
1195
- "type": "string"
1196
- },
1197
- "url": {
1198
- "description": "Absolute URL to the actual application",
1199
- "example": "http://someapp.internal.url",
1200
- "type": "string"
1201
- }
1202
- },
1203
- "required": ["appName", "createdAt", "updatedAt", "strategies"]
1204
- },
1205
- "minItems": 1,
1206
- "type": "array",
1207
- "uniqueItems": true
1208
- }
1209
- },
1210
- "required": ["applications"],
1211
- "title": "Application details",
1212
- "type": "object"
1213
- },
1214
- "applicationArray": {
1215
- "items": {
1216
- "$ref": "#/definitions/application"
1217
- },
1218
- "title": "List of applications",
1219
- "type": "array"
1220
- },
1221
- "createStrategy": {
1222
- "properties": {
1223
- "parameters": {
1224
- "items": {
1225
- "properties": {
1226
- "description": {
1227
- "example": "What percent of users should the new Feature Toggle be active for?",
1228
- "minLength": 1,
1229
- "type": "string"
1230
- },
1231
- "name": {
1232
- "example": "percentage",
1233
- "minLength": 1,
1234
- "type": "string"
1235
- },
1236
- "required": {
1237
- "example": true,
1238
- "type": "boolean"
1239
- },
1240
- "type": {
1241
- "example": "percentage",
1242
- "minLength": 1,
1243
- "type": "string"
1244
- }
1245
- },
1246
- "required": ["name", "type", "description", "required"]
1247
- },
1248
- "minItems": 1,
1249
- "type": "array",
1250
- "uniqueItems": true
1251
- },
1252
- "description": {
1253
- "example": "Gradual rollout to logged in users",
1254
- "minLength": 1,
1255
- "type": "string"
1256
- },
1257
- "name": {
1258
- "example": "gradualRollout",
1259
- "minLength": 1,
1260
- "type": "string"
1261
- }
1262
- },
1263
- "required": ["name", "description", "parameters"],
1264
- "title": "Strategy",
1265
- "type": "object"
1266
- },
1267
- "featureToggleSchema": {
1268
- "items": {
1269
- "properties": {
1270
- "createdAt": {
1271
- "minLength": 1,
1272
- "type": "string"
1273
- },
1274
- "description": {
1275
- "example": "Toggles featureX on and off",
1276
- "minLength": 1,
1277
- "type": "string"
1278
- },
1279
- "enabled": {
1280
- "description": "Is the Feature Toggle enabled?",
1281
- "example": true,
1282
- "type": "boolean"
1283
- },
1284
- "name": {
1285
- "description": "Feature Toggle name must be unique.",
1286
- "example": "featureX",
1287
- "minLength": 1,
1288
- "type": "string"
1289
- },
1290
- "stale": {
1291
- "description": "Is the Feature Toggle 'stale' (deprecated)?",
1292
- "example": false,
1293
- "type": "boolean"
1294
- },
1295
- "strategies": {
1296
- "$ref": "#/definitions/strategySchema"
1297
- },
1298
- "type": {
1299
- "$ref": "#/definitions/featureToggleTypeSchema"
1300
- },
1301
- "variants": {
1302
- "$ref": "#/definitions/variantsSchema"
1303
- }
1304
- },
1305
- "required": [
1306
- "name",
1307
- "description",
1308
- "type",
1309
- "enabled",
1310
- "stale",
1311
- "strategies"
1312
- ],
1313
- "title": "Feature Toggle items",
1314
- "type": "object"
1315
- },
1316
- "title": "Feature Toggle",
1317
- "type": "array"
1318
- },
1319
- "featureToggleTypeSchema": {
1320
- "externalDocs": {
1321
- "description": "Feature Toggle types",
1322
- "url": "https://unleash.github.io/docs/feature_toggle_types"
1323
- },
1324
- "default": "release",
1325
- "description": "'One of the five Unleash Feature Toggle types.\n\n**type** is optional. If not defined, it defaults to *release*'",
1326
- "enum": ["release", "experiment", "ops", "killswitch", "permission"],
1327
- "example": "release",
1328
- "minLength": 1,
1329
- "title": "Types of Feature Toggle",
1330
- "type": "string"
1331
- },
1332
- "strategySchema": {
1333
- "items": {
1334
- "properties": {
1335
- "parameters": {
1336
- "properties": {
1337
- "parameter": {
1338
- "properties": {
1339
- "description": {
1340
- "description": "What the parameter does",
1341
- "example": "Define activation groups to allow you to correlate across feature toggles.",
1342
- "type": "string"
1343
- },
1344
- "name": {
1345
- "description": "The name of the parameter",
1346
- "example": "groupId",
1347
- "type": "string"
1348
- },
1349
- "required": {
1350
- "description": "Is this a required parameter?",
1351
- "example": false,
1352
- "type": "boolean"
1353
- },
1354
- "type": {
1355
- "description": "The type of the parameter",
1356
- "example": "string",
1357
- "type": "string"
1358
- }
1359
- },
1360
- "required": ["name", "type"],
1361
- "type": "object"
1362
- }
1363
- },
1364
- "type": "object"
1365
- },
1366
- "description": {
1367
- "description": "What the Strategy is",
1368
- "example": "Default on/off strategy.",
1369
- "type": "string"
1370
- },
1371
- "editable": {
1372
- "example": true,
1373
- "type": "boolean"
1374
- },
1375
- "name": {
1376
- "description": "Name of the Strategy",
1377
- "example": "default",
1378
- "minLength": 1,
1379
- "type": "string"
1380
- }
1381
- },
1382
- "type": "object"
1383
- },
1384
- "title": "Strategy",
1385
- "type": "array"
1386
- },
1387
- "variantsSchema": {
1388
- "externalDocs": {
1389
- "description": "How to use Feature Toggle variants",
1390
- "url": "https://unleash.github.io/docs/toggle_variants"
1391
- },
1392
- "items": {
1393
- "properties": {
1394
- "name": {
1395
- "description": "The name of the Feature Toggle variant",
1396
- "example": "yellow",
1397
- "minLength": 1,
1398
- "type": "string"
1399
- },
1400
- "weight": {
1401
- "description": "A number between 0 and 1,000.\nThe client SDK will summarize all variant weights, hash the number and divide the users among them. The distribution will be according to the weight as a fraction of the sum of weight.",
1402
- "example": 20,
1403
- "type": "number"
1404
- }
1405
- },
1406
- "required": ["name", "weight"]
1407
- },
1408
- "type": "array"
1409
- },
1410
- "versionSchema": {
1411
- "description": "For internal use by the Unleash developers",
1412
- "example": 1,
1413
- "title": "Internal version number",
1414
- "type": "number"
1415
- }
1416
- },
1417
- "tags": [
1418
- {
1419
- "description": "Handling Feature Toggle archiving and un-archiving",
1420
- "name": "Archive"
1421
- },
1422
- {
1423
- "description": "Identifying events on the Unleash server",
1424
- "name": "Events"
1425
- },
1426
- {
1427
- "description": "Accessing feature toggles",
1428
- "name": "Feature toggles"
1429
- },
1430
- {
1431
- "description": "Details of the five Unleash Feature Toggle types",
1432
- "name": "Feature types"
1433
- },
1434
- {
1435
- "description": "Importing and exporting feature toggles and strategies",
1436
- "name": "Import and export"
1437
- },
1438
- {
1439
- "description": "Determining usage of feature toggles and applications",
1440
- "name": "Metrics"
1441
- },
1442
- {
1443
- "description": "Accessing and updating strategies",
1444
- "name": "Strategies"
1445
- }
1446
- ],
1447
- "externalDocs": {
1448
- "description": "Unleash documentation",
1449
- "url": "https://unleash.github.io/docs/getting_started"
1450
- },
1451
- "x-components": {
1452
- "parameters": {
1453
- "appNamePath": {
1454
- "description": "Must match an existing application name.",
1455
- "in": "path",
1456
- "name": "appName",
1457
- "required": true,
1458
- "type": "string",
1459
- "x-example": "my-application"
1460
- },
1461
- "featureNamePath": {
1462
- "description": "Must match an existing Feature Toggle name.",
1463
- "in": "path",
1464
- "name": "featureName",
1465
- "required": true,
1466
- "type": "string",
1467
- "x-example": "featureX"
1468
- },
1469
- "strategyNamePath": {
1470
- "description": "Must match an existing Strategy name.",
1471
- "in": "path",
1472
- "name": "strategyName",
1473
- "required": true,
1474
- "type": "string",
1475
- "x-example": "flexibleRollout"
1476
- }
1477
- }
1478
- }
1479
- }