unleash-server 8.0.1 → 8.0.3

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 (626) hide show
  1. package/dist/lib/addons/addon.d.ts +10 -2
  2. package/dist/lib/addons/addon.d.ts.map +1 -1
  3. package/dist/lib/addons/addon.js +104 -6
  4. package/dist/lib/addons/addon.js.map +1 -1
  5. package/dist/lib/addons/datadog-definition.js +1 -1
  6. package/dist/lib/addons/datadog-definition.js.map +1 -1
  7. package/dist/lib/addons/datadog.test.js +2 -0
  8. package/dist/lib/addons/datadog.test.js.map +1 -1
  9. package/dist/lib/addons/feature-event-formatter-md.d.ts.map +1 -1
  10. package/dist/lib/addons/feature-event-formatter-md.js +5 -3
  11. package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
  12. package/dist/lib/addons/feature-event-formatter-md.test.js +3 -1
  13. package/dist/lib/addons/feature-event-formatter-md.test.js.map +1 -1
  14. package/dist/lib/addons/index.d.ts.map +1 -1
  15. package/dist/lib/addons/index.js +2 -0
  16. package/dist/lib/addons/index.js.map +1 -1
  17. package/dist/lib/addons/new-relic.d.ts.map +1 -1
  18. package/dist/lib/addons/new-relic.js +0 -1
  19. package/dist/lib/addons/new-relic.js.map +1 -1
  20. package/dist/lib/addons/new-relic.test.js +0 -1
  21. package/dist/lib/addons/new-relic.test.js.map +1 -1
  22. package/dist/lib/addons/slack.test.js +1 -2
  23. package/dist/lib/addons/slack.test.js.map +1 -1
  24. package/dist/lib/addons/teams-definition.d.ts.map +1 -1
  25. package/dist/lib/addons/teams-definition.js +1 -0
  26. package/dist/lib/addons/teams-definition.js.map +1 -1
  27. package/dist/lib/addons/teams-workflow-definition.d.ts +4 -0
  28. package/dist/lib/addons/teams-workflow-definition.d.ts.map +1 -0
  29. package/dist/lib/addons/teams-workflow-definition.js +66 -0
  30. package/dist/lib/addons/teams-workflow-definition.js.map +1 -0
  31. package/dist/lib/addons/teams-workflow.d.ts +15 -0
  32. package/dist/lib/addons/teams-workflow.d.ts.map +1 -0
  33. package/dist/lib/addons/teams-workflow.js +110 -0
  34. package/dist/lib/addons/teams-workflow.js.map +1 -0
  35. package/dist/lib/addons/teams-workflow.test.d.ts +2 -0
  36. package/dist/lib/addons/teams-workflow.test.d.ts.map +1 -0
  37. package/dist/lib/addons/teams-workflow.test.js +202 -0
  38. package/dist/lib/addons/teams-workflow.test.js.map +1 -0
  39. package/dist/lib/addons/teams.d.ts.map +1 -1
  40. package/dist/lib/addons/teams.js +0 -1
  41. package/dist/lib/addons/teams.js.map +1 -1
  42. package/dist/lib/addons/teams.test.js +0 -1
  43. package/dist/lib/addons/teams.test.js.map +1 -1
  44. package/dist/lib/addons/validate-url.d.ts +18 -0
  45. package/dist/lib/addons/validate-url.d.ts.map +1 -0
  46. package/dist/lib/addons/validate-url.js +93 -0
  47. package/dist/lib/addons/validate-url.js.map +1 -0
  48. package/dist/lib/addons/validate-url.test.d.ts +2 -0
  49. package/dist/lib/addons/validate-url.test.d.ts.map +1 -0
  50. package/dist/lib/addons/validate-url.test.js +199 -0
  51. package/dist/lib/addons/validate-url.test.js.map +1 -0
  52. package/dist/lib/addons/webhook.d.ts.map +1 -1
  53. package/dist/lib/addons/webhook.js +28 -2
  54. package/dist/lib/addons/webhook.js.map +1 -1
  55. package/dist/lib/addons/webhook.test.js +72 -0
  56. package/dist/lib/addons/webhook.test.js.map +1 -1
  57. package/dist/lib/app.d.ts.map +1 -1
  58. package/dist/lib/app.js +2 -0
  59. package/dist/lib/app.js.map +1 -1
  60. package/dist/lib/create-config.d.ts.map +1 -1
  61. package/dist/lib/create-config.js +8 -0
  62. package/dist/lib/create-config.js.map +1 -1
  63. package/dist/lib/error/bad-data-error.d.ts.map +1 -1
  64. package/dist/lib/error/bad-data-error.js +10 -2
  65. package/dist/lib/error/bad-data-error.js.map +1 -1
  66. package/dist/lib/error/unleash-error.test.js +23 -0
  67. package/dist/lib/error/unleash-error.test.js.map +1 -1
  68. package/dist/lib/features/context/context-field-store.d.ts +1 -1
  69. package/dist/lib/features/context/context-field-store.d.ts.map +1 -1
  70. package/dist/lib/features/context/context-field-store.js +1 -5
  71. package/dist/lib/features/context/context-field-store.js.map +1 -1
  72. package/dist/lib/features/context/context-service.d.ts +5 -4
  73. package/dist/lib/features/context/context-service.d.ts.map +1 -1
  74. package/dist/lib/features/context/context-service.js +20 -27
  75. package/dist/lib/features/context/context-service.js.map +1 -1
  76. package/dist/lib/features/context/context-service.test.d.ts +2 -0
  77. package/dist/lib/features/context/context-service.test.d.ts.map +1 -0
  78. package/dist/lib/features/context/context-service.test.js +24 -0
  79. package/dist/lib/features/context/context-service.test.js.map +1 -0
  80. package/dist/lib/features/context/context.d.ts +1 -0
  81. package/dist/lib/features/context/context.d.ts.map +1 -1
  82. package/dist/lib/features/context/context.js +22 -10
  83. package/dist/lib/features/context/context.js.map +1 -1
  84. package/dist/lib/features/context/context.test.js +15 -1
  85. package/dist/lib/features/context/context.test.js.map +1 -1
  86. package/dist/lib/features/context/createContextService.d.ts +4 -1
  87. package/dist/lib/features/context/createContextService.d.ts.map +1 -1
  88. package/dist/lib/features/context/createContextService.js +2 -1
  89. package/dist/lib/features/context/createContextService.js.map +1 -1
  90. package/dist/lib/features/context/fake-context-field-store.d.ts +1 -1
  91. package/dist/lib/features/context/fake-context-field-store.d.ts.map +1 -1
  92. package/dist/lib/features/context/fake-context-field-store.js +1 -6
  93. package/dist/lib/features/context/fake-context-field-store.js.map +1 -1
  94. package/dist/lib/features/export-import-toggles/createExportImportService.js +1 -1
  95. package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
  96. package/dist/lib/features/feature-toggle/converters/feature-toggle-row-converter.d.ts +1 -1
  97. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts +2 -1
  98. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
  99. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +5 -0
  100. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
  101. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts +1 -1
  102. package/dist/lib/features/feature-toggle/feature-toggle-controller.d.ts.map +1 -1
  103. package/dist/lib/features/feature-toggle/feature-toggle-controller.js +22 -2
  104. package/dist/lib/features/feature-toggle/feature-toggle-controller.js.map +1 -1
  105. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +3 -2
  106. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  107. package/dist/lib/features/feature-toggle/feature-toggle-service.js +11 -4
  108. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  109. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts +2 -0
  110. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  111. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +7 -0
  112. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  113. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +4 -0
  114. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
  115. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts +6 -0
  116. package/dist/lib/features/feature-toggle/types/feature-toggle-strategies-store-type.d.ts.map +1 -1
  117. package/dist/lib/features/frontend-api/frontend-api-service.d.ts.map +1 -1
  118. package/dist/lib/features/frontend-api/frontend-api-service.js +17 -20
  119. package/dist/lib/features/frontend-api/frontend-api-service.js.map +1 -1
  120. package/dist/lib/features/metrics/integrations/integration-metrics.d.ts +1 -1
  121. package/dist/lib/features/metrics/integrations/integration-metrics.d.ts.map +1 -1
  122. package/dist/lib/features/metrics/integrations/integration-metrics.js +2 -0
  123. package/dist/lib/features/metrics/integrations/integration-metrics.js.map +1 -1
  124. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts +2 -0
  125. package/dist/lib/features/playground/feature-evaluator/constraint.d.ts.map +1 -1
  126. package/dist/lib/features/playground/feature-evaluator/constraint.js +11 -1
  127. package/dist/lib/features/playground/feature-evaluator/constraint.js.map +1 -1
  128. package/dist/lib/features/playground/playground.test.js +2 -3
  129. package/dist/lib/features/playground/playground.test.js.map +1 -1
  130. package/dist/lib/features/release-plans/release-plan-template-store.d.ts +4 -0
  131. package/dist/lib/features/release-plans/release-plan-template-store.d.ts.map +1 -1
  132. package/dist/lib/features/release-plans/release-plan-template-store.js +25 -2
  133. package/dist/lib/features/release-plans/release-plan-template-store.js.map +1 -1
  134. package/dist/lib/features/release-plans/release-plan-template-store.test.js +75 -16
  135. package/dist/lib/features/release-plans/release-plan-template-store.test.js.map +1 -1
  136. package/dist/lib/features/release-plans/release-plan-template.d.ts +1 -0
  137. package/dist/lib/features/release-plans/release-plan-template.d.ts.map +1 -1
  138. package/dist/lib/features/scheduler/scheduler-service.test.js +1 -0
  139. package/dist/lib/features/scheduler/scheduler-service.test.js.map +1 -1
  140. package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js +3 -0
  141. package/dist/lib/features/unique-connection/unique-connection-store.e2e.test.js.map +1 -1
  142. package/dist/lib/middleware/rbac-middleware.d.ts.map +1 -1
  143. package/dist/lib/middleware/rbac-middleware.js +3 -4
  144. package/dist/lib/middleware/rbac-middleware.js.map +1 -1
  145. package/dist/lib/middleware/rbac-middleware.test.js +62 -24
  146. package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
  147. package/dist/lib/middleware/secure-headers.d.ts.map +1 -1
  148. package/dist/lib/middleware/secure-headers.js +20 -1
  149. package/dist/lib/middleware/secure-headers.js.map +1 -1
  150. package/dist/lib/middleware/session-context.d.ts +20 -0
  151. package/dist/lib/middleware/session-context.d.ts.map +1 -0
  152. package/dist/lib/middleware/session-context.js +38 -0
  153. package/dist/lib/middleware/session-context.js.map +1 -0
  154. package/dist/lib/openapi/spec/addon-create-update-schema.d.ts +1 -1
  155. package/dist/lib/openapi/spec/addon-create-update-schema.js +1 -1
  156. package/dist/lib/openapi/spec/addons-schema.d.ts +15 -0
  157. package/dist/lib/openapi/spec/addons-schema.d.ts.map +1 -1
  158. package/dist/lib/openapi/spec/addons-schema.js +51 -0
  159. package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
  160. package/dist/lib/openapi/spec/admin-segment-schema.d.ts +1 -1
  161. package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +4 -4
  162. package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +8 -8
  163. package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +17 -17
  164. package/dist/lib/openapi/spec/client-feature-schema.d.ts +2 -2
  165. package/dist/lib/openapi/spec/client-features-delta-schema.d.ts +5 -5
  166. package/dist/lib/openapi/spec/client-features-schema.d.ts +5 -5
  167. package/dist/lib/openapi/spec/client-segment-schema.d.ts +1 -1
  168. package/dist/lib/openapi/spec/constraint-schema.d.ts +2 -2
  169. package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +1 -1
  170. package/dist/lib/openapi/spec/environment-project-schema.d.ts +2 -2
  171. package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
  172. package/dist/lib/openapi/spec/export-result-schema.d.ts +68 -68
  173. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +17 -17
  174. package/dist/lib/openapi/spec/feature-schema.d.ts +34 -34
  175. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +34 -34
  176. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +68 -68
  177. package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +1 -1
  178. package/dist/lib/openapi/spec/health-overview-schema.d.ts +69 -69
  179. package/dist/lib/openapi/spec/health-report-schema.d.ts +69 -69
  180. package/dist/lib/openapi/spec/playground-constraint-schema.d.ts +1 -1
  181. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts +4 -0
  182. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.d.ts.map +1 -0
  183. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js +91 -0
  184. package/dist/lib/openapi/spec/playground-feature-schema.arbitraries.js.map +1 -0
  185. package/dist/lib/openapi/spec/playground-feature-schema.d.ts +4 -4
  186. package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts +1 -3
  187. package/dist/lib/openapi/spec/playground-feature-schema.test.d.ts.map +1 -1
  188. package/dist/lib/openapi/spec/playground-feature-schema.test.js +1 -89
  189. package/dist/lib/openapi/spec/playground-feature-schema.test.js.map +1 -1
  190. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts +4 -0
  191. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.d.ts.map +1 -0
  192. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js +9 -0
  193. package/dist/lib/openapi/spec/playground-request-schema.arbitraries.js.map +1 -0
  194. package/dist/lib/openapi/spec/playground-request-schema.test.d.ts +1 -3
  195. package/dist/lib/openapi/spec/playground-request-schema.test.d.ts.map +1 -1
  196. package/dist/lib/openapi/spec/playground-request-schema.test.js +1 -8
  197. package/dist/lib/openapi/spec/playground-request-schema.test.js.map +1 -1
  198. package/dist/lib/openapi/spec/playground-response-schema.d.ts +9 -9
  199. package/dist/lib/openapi/spec/playground-response-schema.test.js +2 -3
  200. package/dist/lib/openapi/spec/playground-response-schema.test.js.map +1 -1
  201. package/dist/lib/openapi/spec/playground-segment-schema.d.ts +1 -1
  202. package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +2 -2
  203. package/dist/lib/openapi/spec/profile-schema.d.ts +40 -35
  204. package/dist/lib/openapi/spec/profile-schema.d.ts.map +1 -1
  205. package/dist/lib/openapi/spec/profile-schema.js +13 -1
  206. package/dist/lib/openapi/spec/profile-schema.js.map +1 -1
  207. package/dist/lib/openapi/spec/profile-schema.test.js +1 -0
  208. package/dist/lib/openapi/spec/profile-schema.test.js.map +1 -1
  209. package/dist/lib/openapi/spec/project-environment-schema.d.ts +1 -1
  210. package/dist/lib/openapi/spec/project-overview-schema.d.ts +69 -69
  211. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +4 -4
  212. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +2 -2
  213. package/dist/lib/openapi/spec/release-plan-schema.d.ts +8 -8
  214. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +14 -8
  215. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts.map +1 -1
  216. package/dist/lib/openapi/spec/release-plan-template-schema.js +6 -0
  217. package/dist/lib/openapi/spec/release-plan-template-schema.js.map +1 -1
  218. package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts +22 -16
  219. package/dist/lib/openapi/spec/release-plan-templates-schema.d.ts.map +1 -1
  220. package/dist/lib/openapi/spec/release-plans-schema.d.ts +16 -16
  221. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts +4 -0
  222. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.d.ts.map +1 -0
  223. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js +12 -0
  224. package/dist/lib/openapi/spec/sdk-context-schema.arbitraries.js.map +1 -0
  225. package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts +1 -3
  226. package/dist/lib/openapi/spec/sdk-context-schema.test.d.ts.map +1 -1
  227. package/dist/lib/openapi/spec/sdk-context-schema.test.js +1 -11
  228. package/dist/lib/openapi/spec/sdk-context-schema.test.js.map +1 -1
  229. package/dist/lib/openapi/spec/search-features-schema.d.ts +104 -104
  230. package/dist/lib/openapi/spec/segment-schema.d.ts +1 -1
  231. package/dist/lib/openapi/spec/segments-schema.d.ts +2 -2
  232. package/dist/lib/openapi/spec/ui-config-schema.d.ts +5 -0
  233. package/dist/lib/openapi/spec/ui-config-schema.d.ts.map +1 -1
  234. package/dist/lib/openapi/spec/ui-config-schema.js +5 -0
  235. package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
  236. package/dist/lib/openapi/spec/update-feature-schema.d.ts +1 -1
  237. package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts +1 -1
  238. package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +1 -1
  239. package/dist/lib/routes/admin-api/addon.d.ts.map +1 -1
  240. package/dist/lib/routes/admin-api/addon.js +6 -2
  241. package/dist/lib/routes/admin-api/addon.js.map +1 -1
  242. package/dist/lib/routes/admin-api/user/user.d.ts.map +1 -1
  243. package/dist/lib/routes/admin-api/user/user.js +3 -1
  244. package/dist/lib/routes/admin-api/user/user.js.map +1 -1
  245. package/dist/lib/routes/admin-api/user/user.test.js +32 -7
  246. package/dist/lib/routes/admin-api/user/user.test.js.map +1 -1
  247. package/dist/lib/routes/util.d.ts.map +1 -1
  248. package/dist/lib/routes/util.js +8 -1
  249. package/dist/lib/routes/util.js.map +1 -1
  250. package/dist/lib/routes/util.test.d.ts +2 -0
  251. package/dist/lib/routes/util.test.d.ts.map +1 -0
  252. package/dist/lib/routes/util.test.js +18 -0
  253. package/dist/lib/routes/util.test.js.map +1 -0
  254. package/dist/lib/schema/feature-schema.test.js +1 -1
  255. package/dist/lib/schema/feature-schema.test.js.map +1 -1
  256. package/dist/lib/schema/html-input.d.ts +4 -0
  257. package/dist/lib/schema/html-input.d.ts.map +1 -0
  258. package/dist/lib/schema/html-input.js +41 -0
  259. package/dist/lib/schema/html-input.js.map +1 -0
  260. package/dist/lib/schema/html-input.test.d.ts +2 -0
  261. package/dist/lib/schema/html-input.test.d.ts.map +1 -0
  262. package/dist/lib/schema/html-input.test.js +98 -0
  263. package/dist/lib/schema/html-input.test.js.map +1 -0
  264. package/dist/lib/server-impl.d.ts +2 -1
  265. package/dist/lib/server-impl.d.ts.map +1 -1
  266. package/dist/lib/server-impl.js +2 -1
  267. package/dist/lib/server-impl.js.map +1 -1
  268. package/dist/lib/services/addon-service.d.ts +8 -1
  269. package/dist/lib/services/addon-service.d.ts.map +1 -1
  270. package/dist/lib/services/addon-service.js +24 -1
  271. package/dist/lib/services/addon-service.js.map +1 -1
  272. package/dist/lib/services/addon-service.test.js +75 -8
  273. package/dist/lib/services/addon-service.test.js.map +1 -1
  274. package/dist/lib/services/feature-tag-service.d.ts +1 -1
  275. package/dist/lib/services/feature-tag-service.d.ts.map +1 -1
  276. package/dist/lib/services/feature-tag-service.js +5 -1
  277. package/dist/lib/services/feature-tag-service.js.map +1 -1
  278. package/dist/lib/services/index.d.ts.map +1 -1
  279. package/dist/lib/services/index.js +1 -1
  280. package/dist/lib/services/index.js.map +1 -1
  281. package/dist/lib/services/project-schema.d.ts +1 -2
  282. package/dist/lib/services/project-schema.d.ts.map +1 -1
  283. package/dist/lib/services/project-schema.js +4 -2
  284. package/dist/lib/services/project-schema.js.map +1 -1
  285. package/dist/lib/services/user-service.d.ts +1 -0
  286. package/dist/lib/services/user-service.d.ts.map +1 -1
  287. package/dist/lib/services/user-service.js +7 -0
  288. package/dist/lib/services/user-service.js.map +1 -1
  289. package/dist/lib/types/events.d.ts +8 -0
  290. package/dist/lib/types/events.d.ts.map +1 -1
  291. package/dist/lib/types/events.js +4 -0
  292. package/dist/lib/types/events.js.map +1 -1
  293. package/dist/lib/types/experimental.d.ts +1 -1
  294. package/dist/lib/types/experimental.d.ts.map +1 -1
  295. package/dist/lib/types/experimental.js +27 -1
  296. package/dist/lib/types/experimental.js.map +1 -1
  297. package/dist/lib/types/model.d.ts +2 -0
  298. package/dist/lib/types/model.d.ts.map +1 -1
  299. package/dist/lib/types/model.js.map +1 -1
  300. package/dist/lib/types/option.d.ts +5 -0
  301. package/dist/lib/types/option.d.ts.map +1 -1
  302. package/dist/lib/types/permissions.d.ts +1 -0
  303. package/dist/lib/types/permissions.d.ts.map +1 -1
  304. package/dist/lib/types/permissions.js +2 -0
  305. package/dist/lib/types/permissions.js.map +1 -1
  306. package/dist/lib/types/stores.d.ts +1 -0
  307. package/dist/lib/types/stores.d.ts.map +1 -1
  308. package/dist/lib/types/stores.js.map +1 -1
  309. package/dist/lib/ui-config/ui-config-controller.d.ts +1 -2
  310. package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -1
  311. package/dist/lib/ui-config/ui-config-controller.js +3 -1
  312. package/dist/lib/ui-config/ui-config-controller.js.map +1 -1
  313. package/dist/lib/ui-config/ui-config-service.d.ts +3 -2
  314. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -1
  315. package/dist/lib/ui-config/ui-config-service.js +11 -3
  316. package/dist/lib/ui-config/ui-config-service.js.map +1 -1
  317. package/dist/lib/ui-config/ui-config.test.js +25 -2
  318. package/dist/lib/ui-config/ui-config.test.js.map +1 -1
  319. package/dist/lib/util/anonymise.d.ts +1 -0
  320. package/dist/lib/util/anonymise.d.ts.map +1 -1
  321. package/dist/lib/util/anonymise.js +3 -0
  322. package/dist/lib/util/anonymise.js.map +1 -1
  323. package/dist/lib/util/anonymise.test.js +4 -1
  324. package/dist/lib/util/anonymise.test.js.map +1 -1
  325. package/dist/lib/util/constants.d.ts +3 -1
  326. package/dist/lib/util/constants.d.ts.map +1 -1
  327. package/dist/lib/util/constants.js +11 -1
  328. package/dist/lib/util/constants.js.map +1 -1
  329. package/dist/mailtemplates/requested-cr-approval/requested-cr-approval.html.mustache +1 -1
  330. package/dist/migrations/20260617115403-update-flag-descriptions.d.ts +3 -0
  331. package/dist/migrations/20260617115403-update-flag-descriptions.d.ts.map +1 -0
  332. package/dist/migrations/20260617115403-update-flag-descriptions.js +38 -0
  333. package/dist/migrations/20260617115403-update-flag-descriptions.js.map +1 -0
  334. package/dist/migrations/20260624120000-servicenow-change-references.d.ts +3 -0
  335. package/dist/migrations/20260624120000-servicenow-change-references.d.ts.map +1 -0
  336. package/dist/migrations/20260624120000-servicenow-change-references.js +22 -0
  337. package/dist/migrations/20260624120000-servicenow-change-references.js.map +1 -0
  338. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts +3 -0
  339. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.d.ts.map +1 -0
  340. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js +8 -0
  341. package/dist/migrations/20260706100000-add-project-column-to-release-plan-definitions.js.map +1 -0
  342. package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts +3 -0
  343. package/dist/migrations/20260708100000-add-project-release-template-permission.d.ts.map +1 -0
  344. package/dist/migrations/20260708100000-add-project-release-template-permission.js +15 -0
  345. package/dist/migrations/20260708100000-add-project-release-template-permission.js.map +1 -0
  346. package/dist/server-dev.js +9 -1
  347. package/dist/server-dev.js.map +1 -1
  348. package/dist/test/arbitraries.d.ts +25 -0
  349. package/dist/test/arbitraries.d.ts.map +1 -0
  350. package/dist/test/arbitraries.js +143 -0
  351. package/dist/test/arbitraries.js.map +1 -0
  352. package/dist/test/arbitraries.test.d.ts +1 -24
  353. package/dist/test/arbitraries.test.d.ts.map +1 -1
  354. package/dist/test/arbitraries.test.js +1 -142
  355. package/dist/test/arbitraries.test.js.map +1 -1
  356. package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -1
  357. package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
  358. package/dist/test/e2e/api/admin/playground.e2e.test.js +2 -2
  359. package/dist/test/e2e/api/admin/playground.e2e.test.js.map +1 -1
  360. package/dist/test/e2e/services/addon-service.e2e.test.js +2 -0
  361. package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
  362. package/dist/test/e2e/services/playground-service.test.js +2 -2
  363. package/dist/test/e2e/services/playground-service.test.js.map +1 -1
  364. package/dist/test/fixtures/fake-segment-store.d.ts +1 -1
  365. package/dist/test/fixtures/fake-segment-store.d.ts.map +1 -1
  366. package/dist/test/fixtures/fake-segment-store.js +2 -2
  367. package/dist/test/fixtures/fake-segment-store.js.map +1 -1
  368. package/dist/test/prom-last-wins.d.ts +2 -0
  369. package/dist/test/prom-last-wins.d.ts.map +1 -0
  370. package/dist/test/prom-last-wins.js +25 -0
  371. package/dist/test/prom-last-wins.js.map +1 -0
  372. package/dist/test/reset-cross-file-state.d.ts +2 -0
  373. package/dist/test/reset-cross-file-state.d.ts.map +1 -0
  374. package/dist/test/reset-cross-file-state.js +57 -0
  375. package/dist/test/reset-cross-file-state.js.map +1 -0
  376. package/dist/test-setup.d.ts.map +1 -1
  377. package/dist/test-setup.js +4 -0
  378. package/dist/test-setup.js.map +1 -1
  379. package/frontend/build/index.html +2 -2
  380. package/frontend/build/static/AccordionSummary-KVRcLxLK.js +1 -0
  381. package/frontend/build/static/AdvancedPlayground-Cls80com.js +3 -0
  382. package/frontend/build/static/Alert-DQgOzmJF.js +1 -0
  383. package/frontend/build/static/Avatar-xU_puYmY.js +1 -0
  384. package/frontend/build/static/BackendConnections-CkI8tLcv.js +1 -0
  385. package/frontend/build/static/Box-rSzdGLLJ.js +1 -0
  386. package/frontend/build/static/Button-yGjgMTJI.js +1 -0
  387. package/frontend/build/static/Button.story-CBE27I2T.js +1 -0
  388. package/frontend/build/static/CircularProgress-CmGBJn6I.js +124 -0
  389. package/frontend/build/static/Close-DKD1r3T7.js +1 -0
  390. package/frontend/build/static/Close-nISwbNAY.js +1 -0
  391. package/frontend/build/static/CodeRenderer-RNHlNPBl.js +1094 -0
  392. package/frontend/build/static/CodeRenderer.story-Vw214z1Z.js +2 -0
  393. package/frontend/build/static/Collapse-COunT4rQ.js +1 -0
  394. package/frontend/build/static/ConditionallyRender-CEffh9Z-.js +1 -0
  395. package/frontend/build/static/ConnectSdkStep-DnH4iwnu.js +1 -0
  396. package/frontend/build/static/ConnectSdkStep.story-DeWPTOZK.js +1 -0
  397. package/frontend/build/static/CreateProject-eo1TZ1so.js +1 -0
  398. package/frontend/build/static/Dialog-DLpX4v6X.js +1 -0
  399. package/frontend/build/static/DialogWithAside-BxVspeMV.js +1 -0
  400. package/frontend/build/static/DialogWithAside.story-Dqmr9MnM.js +1 -0
  401. package/frontend/build/static/Divider-BYq1CcT0.js +1 -0
  402. package/frontend/build/static/EnterpriseEdge-D-g3JGCd.js +6 -0
  403. package/frontend/build/static/FeatureCard.story-B2Q-SD_-.js +1 -0
  404. package/frontend/build/static/FeatureMetricsChart-ETalRWKx.js +2 -0
  405. package/frontend/build/static/FeatureStaleDialog-CvD9ojNj.js +8 -0
  406. package/frontend/build/static/FeatureViewLazyExport-10Z3_Wda.js +10 -0
  407. package/frontend/build/static/FileCopy-D1ZqmNek.js +1 -0
  408. package/frontend/build/static/FlagMetricsChart-dLfSDZ_x.js +2 -0
  409. package/frontend/build/static/FlagUsageSnippet-DOGwaqPZ.js +2 -0
  410. package/frontend/build/static/FlagUsageSnippet.story-tfMvt3kG.js +1 -0
  411. package/frontend/build/static/FormControlLabel-BrOlsUbv.js +1 -0
  412. package/frontend/build/static/FormField-CRXe4g4R.js +1 -0
  413. package/frontend/build/static/FrontendNetworkTrafficUsage-DGEwK1Qg.js +1 -0
  414. package/frontend/build/static/GenerateApiKey-C1aJtPh-.js +1 -0
  415. package/frontend/build/static/GenerateApiKey.story-DNMZG0qg.js +1 -0
  416. package/frontend/build/static/GenerateApiKeySummary-DkPI02tH.js +1 -0
  417. package/frontend/build/static/GenerateApiKeySummary.story-CruMFwTQ.js +1 -0
  418. package/frontend/build/static/GridLayoutWrapper-B3BIpxoE.js +5 -0
  419. package/frontend/build/static/Grow-CuQu7Z-P.js +1 -0
  420. package/frontend/build/static/HelpOutlineOutlined-HDH1hus2.js +1 -0
  421. package/frontend/build/static/HelpResources.story-warJFqf6.js +1 -0
  422. package/frontend/build/static/Highlighter-BS0Ow0vZ.js +1 -0
  423. package/frontend/build/static/HtmlTooltip-3YsoM_F5.js +1 -0
  424. package/frontend/build/static/IconButton-BveFD3PF.js +1 -0
  425. package/frontend/build/static/ImpactMetricsPage-C57istn7.js +1 -0
  426. package/frontend/build/static/ImpactViewsPage-MKEHnt2w.js +1 -0
  427. package/frontend/build/static/LazyAdminExport-DfIYVWQD.js +38 -0
  428. package/frontend/build/static/LazyProjectExport-30GlUH0L.js +46 -0
  429. package/frontend/build/static/LifecycleChartComponent-Tj1pN5Tj.js +2 -0
  430. package/frontend/build/static/LineChartComponent-_RiDjL2-.js +1 -0
  431. package/frontend/build/static/Link-wv6er_Jy.js +1 -0
  432. package/frontend/build/static/Loader-CnLypnQx.js +1 -0
  433. package/frontend/build/static/{LogRocketRunner-Duzg1Kzh.js → LogRocketRunner-BS6AEpSK.js} +1 -1
  434. package/frontend/build/static/MarkCompletedDialogue-BeIA6eMj.js +1 -0
  435. package/frontend/build/static/Menu-DUeb4XP8.js +1 -0
  436. package/frontend/build/static/MenuBook-DZFyn--3.js +1 -0
  437. package/frontend/build/static/MenuItem-DNlBQQYG.js +1 -0
  438. package/frontend/build/static/Modal-DdH902AP.js +1 -0
  439. package/frontend/build/static/NetworkOverview-DF8c0k1P.js +1 -0
  440. package/frontend/build/static/{NetworkPrometheusAPIWarning-Bq62ygkV.js → NetworkPrometheusAPIWarning-B0v-FihJ.js} +1 -1
  441. package/frontend/build/static/NetworkTraffic-C1I4wwcb.js +1 -0
  442. package/frontend/build/static/NetworkTrafficUsage-DkdQx64o.js +1 -0
  443. package/frontend/build/static/NotificationStack.story-CdeU4r0p.js +1 -0
  444. package/frontend/build/static/OnboardingProgress-BuWQ2rjB.js +1 -0
  445. package/frontend/build/static/OnboardingProgress.story-CmQztiFV.js +1 -0
  446. package/frontend/build/static/OpenInNew-CHcHAi4B.js +1 -0
  447. package/frontend/build/static/PageContent-lT51j8jO.js +1 -0
  448. package/frontend/build/static/Paper-BvPQ0Zq6.js +1 -0
  449. package/frontend/build/static/PercentageDonut-CZVWd5fE.js +1 -0
  450. package/frontend/build/static/PermissionButton-Tj54K9Kc.js +1 -0
  451. package/frontend/build/static/Popover-FHiFav9d.js +1 -0
  452. package/frontend/build/static/Popper-Cut-_j4A.js +1 -0
  453. package/frontend/build/static/Portal-kwmlgXGI.js +1 -0
  454. package/frontend/build/static/Radio-Cj82h8o5.js +1 -0
  455. package/frontend/build/static/RadioGroup-BWTZb8iE.js +1 -0
  456. package/frontend/build/static/ReactJSONEditor-D65iiPmM.js +4 -0
  457. package/frontend/build/static/ReactJSONEditor.story-Bt3pxUGO.js +1 -0
  458. package/frontend/build/static/RoleCell-tqHUOlI7.js +1 -0
  459. package/frontend/build/static/RtlProvider-D1AlROju.js +1 -0
  460. package/frontend/build/static/Safeguard-DFEQulxy.js +1 -0
  461. package/frontend/build/static/SdkEvaluationStatus-B1rMywp-.js +17 -0
  462. package/frontend/build/static/SdkEvaluationStatus.story-BxgqLICz.js +1 -0
  463. package/frontend/build/static/Select-DdG1oq6O.js +3 -0
  464. package/frontend/build/static/SelectSdk-Boj2Ug-2.js +1 -0
  465. package/frontend/build/static/SelectSdk-CzRoKDb5.js +1 -0
  466. package/frontend/build/static/SelectSdk.story-BT9ke5Eb.js +1 -0
  467. package/frontend/build/static/SelectSdk.story-CdzotYoq.js +1 -0
  468. package/frontend/build/static/Spacing.story-CB6GkN5Z.js +1 -0
  469. package/frontend/build/static/StoriesPage-luLnHVc2.js +1 -0
  470. package/frontend/build/static/SwitchBase-cxExIOp0.js +1 -0
  471. package/frontend/build/static/TextField-Cf03Ror7.js +1 -0
  472. package/frontend/build/static/ThemeColors.story-Cx9bv5pL.js +1 -0
  473. package/frontend/build/static/TokenExplanation-CJjBSQ07.js +1 -0
  474. package/frontend/build/static/TokenExplanation.story-BoOaHRrQ.js +1 -0
  475. package/frontend/build/static/Tooltip-DPzrXyNS.js +1 -0
  476. package/frontend/build/static/TooltipResolver-CIBfA4vm.js +1 -0
  477. package/frontend/build/static/Truncator-CF0-SVks.js +1 -0
  478. package/frontend/build/static/Typography-nCkGT67u.js +1 -0
  479. package/frontend/build/static/Typography.story-CofmlvJB.js +1 -0
  480. package/frontend/build/static/UIContext-Dsr0TY8K.js +1 -0
  481. package/frontend/build/static/WhatsNewLayout.story-p4Cm8bgx.js +1 -0
  482. package/frontend/build/static/aggregateFeatureMetrics-D7AXsd2U.js +1 -0
  483. package/frontend/build/static/capitalize-DfXJDj8P.js +1 -0
  484. package/frontend/build/static/chartjs-plugin-annotation.esm-tsR8Pv5a.js +1 -0
  485. package/frontend/build/static/chunk-KS7C4IRE-PUpsdS_b.js +3 -0
  486. package/frontend/build/static/code-block-BZePA-4e.js +1 -0
  487. package/frontend/build/static/copy-to-clipboard-BCU4eeSw.js +1 -0
  488. package/frontend/build/static/createBox-DaDvp7MB.js +1 -0
  489. package/frontend/build/static/createSimplePaletteValueFilter-Bt9IjErz.js +1 -0
  490. package/frontend/build/static/createSvgIcon-D-6jHYkf.js +1 -0
  491. package/frontend/build/static/differenceInSeconds-DMZGQwjK.js +1 -0
  492. package/frontend/build/static/dividerClasses-DcI5JVLQ.js +1 -0
  493. package/frontend/build/static/endOfMonth-CkSR_DAx.js +1 -0
  494. package/frontend/build/static/{enterpriseEdgeCloud-C5u35XAw.js → enterpriseEdgeCloud-qnOcFE1S.js} +1 -1
  495. package/frontend/build/static/esm-DViSjNxt.js +12 -0
  496. package/frontend/build/static/formatAccessText-BhC1wtCg.js +1 -0
  497. package/frontend/build/static/formatDistanceToNow-CyouiCIY.js +1 -0
  498. package/frontend/build/static/httpErrorResponseHandler-BzpwldnE.js +1 -0
  499. package/frontend/build/static/impact-metrics-DrmGy_gn.png +0 -0
  500. package/frontend/build/static/{impact-metrics-icon-6dt-ye-h.js → impact-metrics-icon-Cg_ki-2e.js} +1 -1
  501. package/frontend/build/static/index-C2zVj2FI.js +287 -0
  502. package/frontend/build/static/{jsx-runtime-BnvnyDTF.js → jsx-runtime-DYfQNk55.js} +1 -1
  503. package/frontend/build/static/mcp-ADx0Sju7.png +0 -0
  504. package/frontend/build/static/{metricsFormatters-BEX2qb8Y.js → metricsFormatters-BmjW0KTj.js} +1 -1
  505. package/frontend/build/static/milestone-CciNgBhP.png +0 -0
  506. package/frontend/build/static/{mui-CoU2c-id.js → mui-C_omlwxE.js} +1 -1
  507. package/frontend/build/static/networkTrafficUsageHighlightPlugin-DPi6id5j.js +1 -0
  508. package/frontend/build/static/parse-Chj4PyAg.js +1 -0
  509. package/frontend/build/static/react-Ca03aNmg.js +1 -0
  510. package/frontend/build/static/resolveProps-CAVsjga5.js +1 -0
  511. package/frontend/build/static/servicenow-BmgZtZjb.svg +13 -0
  512. package/frontend/build/static/sharedTypes-CXnpeg4U.js +1 -0
  513. package/frontend/build/static/startOfHour-P0Sr6h8e.js +1 -0
  514. package/frontend/build/static/styled-CY_-vLWk.js +1 -0
  515. package/frontend/build/static/theme-DDCs0xPV.js +1 -0
  516. package/frontend/build/static/themeStyles-B99HStK1.js +1 -0
  517. package/frontend/build/static/useApi-B7ZLy5tN.js +1 -0
  518. package/frontend/build/static/useApiGetter-C41iZzl2.js +1 -0
  519. package/frontend/build/static/useApiTokens-BQWPDfv2.js +1 -0
  520. package/frontend/build/static/useConditionalSWR-QWHOvx6V.js +1 -0
  521. package/frontend/build/static/useConditionallyHiddenColumns-DbQbB4u7.js +5 -0
  522. package/frontend/build/static/useCustomEvent-BnWpZ2E1.js +1 -0
  523. package/frontend/build/static/useEnhancedEffect-BBMUaXin.js +1 -0
  524. package/frontend/build/static/useEnvironments-Gu7r2cpc.js +2 -0
  525. package/frontend/build/static/useEventTracker-B0ILyjZB.js +1 -0
  526. package/frontend/build/static/useGroupedImpactMetricsData-jQ7IYFK3.js +1 -0
  527. package/frontend/build/static/useId-Bg4oXGUa.js +1 -0
  528. package/frontend/build/static/{useImpactMetrics-9qDSEpTn.js → useImpactMetrics-DXxTQl6p.js} +2 -2
  529. package/frontend/build/static/{useImpactMetricsEnabled-wRNO6-Oh.js → useImpactMetricsEnabled-B3om8V0b.js} +1 -1
  530. package/frontend/build/static/{useInstanceTrafficMetrics-CIpyIGYi.js → useInstanceTrafficMetrics-DkgcWjVM.js} +1 -1
  531. package/frontend/build/static/useLocationSettings-vlEPA_j3.js +1 -0
  532. package/frontend/build/static/useMediaQuery-BFm2lR-0.js +2 -0
  533. package/frontend/build/static/useOptionalPathParam-Cmh3Ejbi.js +1 -0
  534. package/frontend/build/static/{usePageTitle-CHzzFshF.js → usePageTitle-DD1IHvCw.js} +1 -1
  535. package/frontend/build/static/useSlot-Ce59-xJL.js +1 -0
  536. package/frontend/build/static/useSlotProps-v77xI-e5.js +1 -0
  537. package/frontend/build/static/useTheme-CTychWp2.js +10 -0
  538. package/frontend/build/static/useTimeout-B2sc1jSE.js +1 -0
  539. package/frontend/build/static/useToast-BUHn_9TC.js +1 -0
  540. package/frontend/build/static/{useUiConfig-DbVjTDpE.js → useUiConfig-BcfEDPWc.js} +1 -1
  541. package/frontend/build/static/useUiFlag-PbKW1iMa.js +1 -0
  542. package/frontend/package.json +20 -19
  543. package/package.json +15 -12
  544. package/frontend/build/static/AccordionSummary-wye3oOm6.js +0 -1
  545. package/frontend/build/static/AdvancedPlayground-BEYkf6Xg.js +0 -3
  546. package/frontend/build/static/Alert-_bLyWbvx.js +0 -1
  547. package/frontend/build/static/BackendConnections-DdvotR_8.js +0 -1
  548. package/frontend/build/static/Box-BQsxfFmC.js +0 -1
  549. package/frontend/build/static/Button-CebB8EPB.js +0 -1
  550. package/frontend/build/static/ChatOutlined-jZlhx14o.js +0 -1
  551. package/frontend/build/static/CircularProgress-C_LUU3DK.js +0 -101
  552. package/frontend/build/static/Close-DyTASMSq.js +0 -1
  553. package/frontend/build/static/CloudCircle-BjnxUYAO.js +0 -1
  554. package/frontend/build/static/Collapse-DPPTUMpf.js +0 -1
  555. package/frontend/build/static/ConditionallyRender---uTpMBn.js +0 -1
  556. package/frontend/build/static/CreateProject-BSlg0WYM.js +0 -1
  557. package/frontend/build/static/Dialog-C-xQxqWX.js +0 -1
  558. package/frontend/build/static/DialogWithAside-BvaGTcqO.js +0 -1106
  559. package/frontend/build/static/Divider-CsdWvu5F.js +0 -1
  560. package/frontend/build/static/EnterpriseEdge-DN23kaQp.js +0 -6
  561. package/frontend/build/static/FeatureMetricsChart-CmVkRuwG.js +0 -2
  562. package/frontend/build/static/FeatureStaleDialog-BkyjUGR9.js +0 -8
  563. package/frontend/build/static/FeatureViewLazyExport-C5FggFea.js +0 -10
  564. package/frontend/build/static/FileCopy-B8HZEA83.js +0 -1
  565. package/frontend/build/static/FlagMetricsChart-ZjHSwulg.js +0 -2
  566. package/frontend/build/static/FormControlLabel-F5gDLixN.js +0 -1
  567. package/frontend/build/static/FrontendNetworkTrafficUsage-BmLOJdK9.js +0 -1
  568. package/frontend/build/static/GridLayoutWrapper-D93wkNEo.js +0 -3
  569. package/frontend/build/static/Grow-BIbmvKVy.js +0 -1
  570. package/frontend/build/static/HelpOutlineOutlined-CpMsVJZu.js +0 -1
  571. package/frontend/build/static/Highlighter-MomUaQww.js +0 -1
  572. package/frontend/build/static/HtmlTooltip-B9jv1G1R.js +0 -1
  573. package/frontend/build/static/ImpactMetricsPage-D1CETZR_.js +0 -1
  574. package/frontend/build/static/ImpactViewsPage-DeBga4lU.js +0 -1
  575. package/frontend/build/static/LazyAdminExport-BvtR_me3.js +0 -38
  576. package/frontend/build/static/LazyProjectExport-BkOu6pHf.js +0 -46
  577. package/frontend/build/static/LifecycleChartComponent-BYvIFr7Q.js +0 -2
  578. package/frontend/build/static/LineChartComponent-d80f3Tky.js +0 -1
  579. package/frontend/build/static/Link-CfIScd2f.js +0 -1
  580. package/frontend/build/static/Loader-DdgXftPc.js +0 -1
  581. package/frontend/build/static/MarkCompletedDialogue-CtzRfovJ.js +0 -1
  582. package/frontend/build/static/NetworkOverview-D1UOxIaf.js +0 -1
  583. package/frontend/build/static/NetworkTraffic-CLnhub6c.js +0 -1
  584. package/frontend/build/static/NetworkTrafficUsage-PgI0lqze.js +0 -1
  585. package/frontend/build/static/PageContent-c0NDm5oD.js +0 -1
  586. package/frontend/build/static/PercentageDonut-C6I2UOES.js +0 -1
  587. package/frontend/build/static/PermissionButton-BIeM26DH.js +0 -1
  588. package/frontend/build/static/Popover-CUTnSn2h.js +0 -1
  589. package/frontend/build/static/Radio-DL8ja0ll.js +0 -1
  590. package/frontend/build/static/RadioGroup-Ci3WHaOy.js +0 -1
  591. package/frontend/build/static/ReactJSONEditor-C-paZV5Q.js +0 -4
  592. package/frontend/build/static/RoleCell-BCPNstXC.js +0 -1
  593. package/frontend/build/static/Safeguard-9zs64Bna.js +0 -1
  594. package/frontend/build/static/SelectSdk-D2NaTubs.js +0 -2
  595. package/frontend/build/static/StoriesPage-5lbMiQlA.js +0 -1
  596. package/frontend/build/static/SwitchBase-DWPIxZnN.js +0 -1
  597. package/frontend/build/static/TextField-oipjeg6n.js +0 -3
  598. package/frontend/build/static/Tooltip-BaILXXti.js +0 -1
  599. package/frontend/build/static/TooltipResolver-4A1YhwBy.js +0 -1
  600. package/frontend/build/static/Truncator-D2bO9ub6.js +0 -1
  601. package/frontend/build/static/Typography-BTdLWIUX.js +0 -1
  602. package/frontend/build/static/aggregateFeatureMetrics-DBivHCcj.js +0 -1
  603. package/frontend/build/static/chartjs-plugin-annotation.esm-BxKcCGhA.js +0 -1
  604. package/frontend/build/static/chunk-QUQL4437-Dr42NpoL.js +0 -3
  605. package/frontend/build/static/createBox-Cf2UJsmc.js +0 -1
  606. package/frontend/build/static/createSimplePaletteValueFilter-BRAMrHWJ.js +0 -1
  607. package/frontend/build/static/dividerClasses-Cc45lyWo.js +0 -1
  608. package/frontend/build/static/esm-CFWP4-MJ.js +0 -15
  609. package/frontend/build/static/httpErrorResponseHandler-FMtt7Zqh.js +0 -1
  610. package/frontend/build/static/index-BJ2iUk24.js +0 -289
  611. package/frontend/build/static/networkTrafficUsageHighlightPlugin-DVWh8Lrd.js +0 -1
  612. package/frontend/build/static/parse-BhYjTMCL.js +0 -1
  613. package/frontend/build/static/react-GZhdek4G.js +0 -1
  614. package/frontend/build/static/startOfHour-KiLZtdEa.js +0 -1
  615. package/frontend/build/static/themeStyles-BPY8RNQO.js +0 -1
  616. package/frontend/build/static/useApiGetter-7FP8Avm4.js +0 -1
  617. package/frontend/build/static/useApiTokens-C8Dqw_X1.js +0 -1
  618. package/frontend/build/static/useConditionalSWR-DGgzun6i.js +0 -1
  619. package/frontend/build/static/useConditionallyHiddenColumns-DTDzRlyO.js +0 -5
  620. package/frontend/build/static/useCustomEvent-CwoY8S5F.js +0 -1
  621. package/frontend/build/static/useEnvironments-CTguhgy0.js +0 -2
  622. package/frontend/build/static/useGroupedImpactMetricsData-CK8Pz2an.js +0 -1
  623. package/frontend/build/static/useMediaQuery-DGx8zAkf.js +0 -2
  624. package/frontend/build/static/useOptionalPathParam-Cx3ru9yC.js +0 -1
  625. package/frontend/build/static/useTheme-CQqAmDLr.js +0 -9
  626. /package/frontend/build/static/{connect-DbjGV9Hl.png → cr-DbjGV9Hl.png} +0 -0
@@ -1,1106 +0,0 @@
1
- import{o as e,t}from"./react-GZhdek4G.js";import{j as n,s as r,t as i}from"./useTheme-CQqAmDLr.js";import{t as a}from"./jsx-runtime-BnvnyDTF.js";import{v as o}from"./createSimplePaletteValueFilter-BRAMrHWJ.js";import{t as s}from"./useMediaQuery-DGx8zAkf.js";import{t as c}from"./Tooltip-BaILXXti.js";import{n as ee,r as te}from"./TextField-oipjeg6n.js";import{r as l,t as u}from"./Alert-_bLyWbvx.js";import{t as d}from"./Typography-BTdLWIUX.js";import{t as f}from"./Box-BQsxfFmC.js";import{t as p}from"./Button-CebB8EPB.js";import{t as m}from"./Dialog-C-xQxqWX.js";import{a as h,i as ne,n as g,o as re}from"./TooltipResolver-4A1YhwBy.js";import{t as _}from"./Close-DyTASMSq.js";import{t as v,u as y}from"./httpErrorResponseHandler-FMtt7Zqh.js";import{n as b,r as x}from"./formatPath-j72gcKwy.js";import{t as ie}from"./Truncator-D2bO9ub6.js";import{n as ae,t as oe}from"./FileCopy-B8HZEA83.js";import{Ha as S,Js as se,Ot as ce,St as le,Va as C,fo as ue,kt as de}from"./index-BJ2iUk24.js";var w=e(t()),T=a(),fe=e=>(0,T.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:20,height:20,viewBox:`0 0 20 20`,fill:`none`,...e,children:(0,T.jsx)(`path`,{d:`M4.16667 17.5C3.70833 17.5 3.31597 17.3368 2.98958 17.0104C2.66319 16.684 2.5 16.2917 2.5 15.8333V5.41667C2.5 5.22222 2.53125 5.03819 2.59375 4.86458C2.65625 4.69097 2.75 4.52778 2.875 4.375L4.04167 2.95833C4.16667 2.80556 4.30903 2.69097 4.46875 2.61458C4.62847 2.53819 4.80556 2.5 5 2.5H15C15.1944 2.5 15.3715 2.53819 15.5312 2.61458C15.691 2.69097 15.8333 2.80556 15.9583 2.95833L17.125 4.375C17.25 4.52778 17.3438 4.69097 17.4062 4.86458C17.4688 5.03819 17.5 5.22222 17.5 5.41667V15.8333C17.5 16.2917 17.3368 16.684 17.0104 17.0104C16.684 17.3368 16.2917 17.5 15.8333 17.5H4.16667ZM4.5 5H15.5L14.7917 4.16667H5.20833L4.5 5ZM4.16667 15.8333H15.8333V6.66667H4.16667V15.8333ZM12.125 14.2083L15.0833 11.25L12.125 8.29167L10.9167 9.5L12.6667 11.25L10.9167 13L12.125 14.2083ZM7.91667 14.2083L9.125 13L7.375 11.25L9.125 9.5L7.91667 8.29167L4.95833 11.25L7.91667 14.2083Z`,fill:`#6E6E70`})}),E=o(se)(({theme:e})=>({width:e.spacing(3),height:e.spacing(3)})),D=C.filter(e=>e.type===`server`).map(({name:e})=>({name:S[e].title,icon:S[e].icon})),O=C.filter(e=>e.type===`client`).map(({name:e})=>({name:S[e].title,icon:S[e].icon})),pe=[...D,...O],me=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3),backgroundColor:e.palette.background.paper})),k=o(`div`)(({theme:e})=>({fontWeight:e.typography.fontWeightBold,fontSize:e.typography.body1.fontSize})),A=o(`div`)(({theme:e})=>({marginTop:e.spacing(.5),marginBottom:e.spacing(2),fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary})),he=o(`div`)(({theme:e})=>({display:`flex`,columnGap:e.spacing(1.5),rowGap:e.spacing(1.5),alignItems:`center`,justifyContent:`flex-start`,flexWrap:`wrap`})),ge=o(p,{shouldForwardProp:e=>e!==`isSelected`})(({theme:e,isSelected:t})=>({fontSize:e.typography.body2.fontSize,border:`1px solid ${t?e.palette.primary.main:e.palette.divider}`,borderRadius:e.shape.borderRadius,padding:e.spacing(1,1.5),minWidth:e.spacing(30),display:`flex`,alignItems:`center`,gap:e.spacing(1)})),_e=o(`div`)(({theme:e})=>({color:e.palette.text.primary,display:`flex`,justifyContent:`space-between`,alignItems:`center`,width:`100%`})),ve=o(`span`)(({theme:e})=>({color:e.palette.primary.main,fontSize:e.typography.body2.fontSize,fontWeight:700})),j=({sdks:e,type:t,selectedSdkName:n,onSelect:r})=>(0,T.jsx)(he,{children:e.map(e=>{let i=n===e.name;return(0,T.jsxs)(ge,{onClick:()=>r({name:e.name,type:t}),variant:`text`,isSelected:i,children:[(0,T.jsx)(E,{src:x(e.icon),alt:``}),(0,T.jsxs)(_e,{children:[(0,T.jsx)(`b`,{children:e.name}),(0,T.jsx)(ve,{children:i?`Selected`:`Select`})]})]},e.name)})}),ye=({onSelect:e,sdk:t})=>{let n=t?.name;return(0,T.jsxs)(me,{children:[(0,T.jsxs)(f,{children:[(0,T.jsx)(k,{children:`Backend SDKs`}),(0,T.jsx)(A,{children:`Backend SDKs need a backend API key.`}),(0,T.jsx)(j,{sdks:D,type:`client`,selectedSdkName:n,onSelect:e})]}),(0,T.jsxs)(f,{children:[(0,T.jsx)(k,{children:`Frontend SDKs`}),(0,T.jsx)(A,{children:`Frontend SDKs need a frontend API key.`}),(0,T.jsx)(j,{sdks:O,type:`frontend`,selectedSdkName:n,onSelect:e})]})]})},M=(e,t={})=>{let{data:n,error:r,mutate:i}=y(b(`api/admin/projects/${e}/api-tokens`),be,t),a=(0,w.useMemo)(()=>n??[],[n]),o=(0,w.useCallback)(()=>{i().catch(console.warn)},[i]);return{tokens:a,error:r,loading:!r&&!n,refetch:o}},be=async e=>(await(await fetch(e).then(v(`Project Api tokens`))).json()).tokens,N=()=>{let{makeRequest:e,createRequest:t,errors:n,loading:r}=g({propagateErrors:!0});return{deleteToken:async(n,r)=>{let i=t(`api/admin/projects/${r}/api-tokens/${n}`,{method:`DELETE`});return e(i.caller,i.id)},createToken:async(n,r)=>{let i=t(`api/admin/projects/${r}/api-tokens`,{method:`POST`,body:JSON.stringify(n)});return e(i.caller,i.id)},errors:n,loading:r}},xe=e=>{if(!e)return null;let[t,n]=e.split(`:`,2);if(!n)return null;let[r,i,...a]=n.split(`.`);return t&&r&&i&&a.length===0?{project:t,environment:r,secret:i}:null},P=de(),Se=o(`div`)(({theme:e})=>({backgroundColor:e.palette.background.elevation1,borderRadius:e.shape.borderRadius,padding:e.spacing(3),display:`flex`,flexDirection:`column`,alignItems:`center`})),F=o(`div`)({wordBreak:`break-all`}),I=o(`div`)(({theme:e})=>({borderRadius:e.shape.borderRadius,padding:e.spacing(2),flex:1,color:e.palette.text.secondary,fontSize:e.typography.body2.fontSize,background:e.palette.background.default})),L=o(I)(({theme:e})=>({border:`1px solid ${e.palette.primary.main}`})),R=o(I)(({theme:e})=>({border:`1px solid ${e.palette.success.main}`})),z=o(I)(({theme:e})=>({border:`1px solid ${e.palette.text.secondary}`})),Ce=o(`div`)(({theme:e})=>({display:`flex`,gap:e.spacing(2),alignItems:`flex-start`,marginTop:e.spacing(8),flexWrap:`wrap`})),we=o(`div`)({width:`100%`}),Te=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(1),marginTop:e.spacing(2),width:`100%`})),B=o(`span`)(({theme:e})=>({fontFamily:`Sen`,fontSize:e.typography.body2.fontSize,fontStyle:`normal`,fontWeight:400,lineHeight:`20px`})),V=o(B)(({theme:e})=>({color:e.palette.primary.main})),H=o(B)(({theme:e})=>({color:e.palette.success.main})),U=o(B)(({theme:e})=>({color:e.palette.text.secondary})),W=o(B)(({theme:e})=>({color:e.palette.text.disabled})),G={project:`The project this API key can retrieve feature flags from`,environment:`The environment this API key can retrieve feature flag configuration from`,secret:`The API key secret`},K=({project:e,environment:t,secret:n})=>{let r=i(),a=s(r.breakpoints.up(`lg`));return(0,T.jsx)(we,{children:(0,T.jsx)(P.ArcherContainer,{strokeColor:r.palette.secondary.border,endMarker:!1,lineStyle:`curve`,children:(0,T.jsxs)(Se,{children:[(0,T.jsxs)(F,{children:[(0,T.jsx)(P.ArcherElement,{id:`project`,children:(0,T.jsx)(V,{children:e})}),(0,T.jsx)(W,{children:`:`}),(0,T.jsx)(P.ArcherElement,{id:`environment`,children:(0,T.jsx)(H,{children:t})}),(0,T.jsx)(W,{children:`.`}),(0,T.jsx)(P.ArcherElement,{id:`secret`,children:(0,T.jsx)(U,{children:n})})]}),a?(0,T.jsxs)(Ce,{children:[(0,T.jsx)(P.ArcherElement,{id:`project-description`,relations:[{targetId:`project`,targetAnchor:`bottom`,sourceAnchor:`top`,style:{strokeColor:r.palette.primary.main,strokeWidth:2}}],children:(0,T.jsx)(L,{children:G.project})}),(0,T.jsx)(P.ArcherElement,{id:`environment-description`,relations:[{targetId:`environment`,targetAnchor:`bottom`,sourceAnchor:`top`,style:{strokeColor:r.palette.success.main,strokeWidth:2}}],children:(0,T.jsx)(R,{children:G.environment})}),(0,T.jsx)(P.ArcherElement,{id:`secret-description`,relations:[{targetId:`secret`,targetAnchor:`bottom`,sourceAnchor:`top`,style:{strokeColor:r.palette.text.secondary,strokeWidth:2}}],children:(0,T.jsx)(z,{children:G.secret})})]}):(0,T.jsxs)(Te,{children:[(0,T.jsxs)(L,{children:[(0,T.jsx)(V,{children:e}),(0,T.jsx)(`div`,{children:G.project})]}),(0,T.jsxs)(R,{children:[(0,T.jsx)(H,{children:t}),(0,T.jsx)(`div`,{children:G.environment})]}),(0,T.jsxs)(z,{children:[(0,T.jsx)(F,{children:(0,T.jsx)(U,{children:n})}),(0,T.jsx)(`div`,{children:G.secret})]})]})]})})})},Ee={client:`Backend`,frontend:`Frontend`},De=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(3)})),q=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,alignItems:`flex-start`,gap:e.spacing(2),padding:e.spacing(2),borderRadius:e.shape.borderRadiusMedium,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.elevation1})),J=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`column`,gap:e.spacing(.5)})),Y=o(`div`)(({theme:e})=>({fontWeight:e.typography.fontWeightBold,fontSize:e.typography.body1.fontSize})),X=o(`p`)(({theme:e})=>({fontSize:e.typography.body2.fontSize})),Oe=o(`div`)({display:`flex`,width:`100%`,justifyContent:`flex-end`}),ke=({projectId:e,environments:t,sdk:n,onApiKeyChange:r,onNext:i})=>{let{trackEvent:a}=re(),{tokens:o,loading:s,refetch:c}=M(e),{createToken:l,loading:u}=N(),{setToastApiError:d}=h(),[f,m]=(0,w.useState)(t[0]||``),g=o.find(e=>e.environment===f&&e.type===n?.type),_=xe(g?.secret);if((0,w.useEffect)(()=>{r(g?.secret)},[g?.secret,r]),!n)return null;let v=async()=>{try{await l({environment:f,type:n.type,projects:[e],tokenName:`api-key-${e}-${f}`},e),c(),a(`onboarding`,{props:{eventType:`api-key-generated`}})}catch(e){d(ne(e))}},y=t.length>0?Math.max(...t.map(e=>e.length)):0,b=s||u,x=Ee[n.type];return(0,T.jsxs)(De,{children:[(0,T.jsxs)(q,{children:[(0,T.jsxs)(J,{children:[(0,T.jsx)(Y,{children:`First select environment`}),(0,T.jsx)(X,{children:`The environment connects to an SDK to retrieve information.`})]}),(0,T.jsx)(ee,{value:f,onChange:e=>m(e.target.value),size:`small`,inputProps:{"aria-label":`Select environment`},sx:{minWidth:`${y+5}ch`},children:t.map(e=>(0,T.jsx)(te,{value:e,children:e},e))})]}),(0,T.jsxs)(q,{children:[(0,T.jsx)(J,{children:_?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(Y,{children:[x,` API Key`]}),(0,T.jsxs)(X,{children:[`Here is your generated`,` `,x.toLowerCase(),` API key. We will use it to connect to the`,` `,(0,T.jsx)(`b`,{children:_.project}),` project in the`,` `,(0,T.jsx)(`b`,{children:_.environment}),` environment.`]})]}):(0,T.jsxs)(Y,{children:[`Then generate a `,x,` API Key`]})}),_?(0,T.jsx)(K,{project:_.project,environment:_.environment,secret:_.secret}):(0,T.jsxs)(p,{variant:`contained`,disabled:b,onClick:v,children:[`Generate `,x,` API Key`]})]}),_&&(0,T.jsx)(Oe,{children:(0,T.jsx)(p,{variant:`contained`,onClick:i,children:`Next`})})]})},Ae=({apiKey:e})=>e?(0,T.jsx)(ue,{color:`neutral`,children:(0,T.jsx)(ie,{title:e,sx:{maxWidth:200},children:e})}):null,je=e(ae(),1),Me={Android:`1\\. Install the SDK
2
-
3
- \`\`\`gradle
4
- implementation("io.getunleash:unleash-android:+")
5
- \`\`\`
6
-
7
- 2\\. Enable required [permissions](https://developer.android.com/guide/topics/manifest/uses-permission-element)
8
-
9
- \`\`\`xml
10
- <uses-permission android:name="android.permission.INTERNET" />
11
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
12
- \`\`\`
13
-
14
- 3\\. Initialize Unleash in your application
15
-
16
- \`\`\`kotlin
17
- class MyApplication: Application() {
18
- val unleash: Unleash by lazy {
19
- val instance = DefaultUnleash(
20
- androidContext = this,
21
- unleashConfig = UnleashConfig.newBuilder(appName = "unleash-onboarding-android")
22
- .proxyUrl("<YOUR_API_URL>")
23
- .clientKey("<YOUR_API_TOKEN>")
24
- .build()
25
- )
26
- instance.start()
27
- instance
28
- }
29
-
30
- override fun onTerminate() {
31
- super.onTerminate()
32
- unleash.close()
33
- }
34
- }
35
- \`\`\`
36
-
37
- 4\\. Check flag status
38
-
39
- \`\`\`kotlin
40
- class MainActivity : ComponentActivity() {
41
- override fun onCreate(savedInstanceState: Bundle?) {
42
- super.onCreate(savedInstanceState)
43
- val unleashInstance = (application as MyApplication).unleash
44
-
45
- setContent {
46
- var flagStatus by remember { mutableStateOf("loading") }
47
- LaunchedEffect(Unit) {
48
- while (isActive) {
49
- val isFlagEnabled = unleashInstance.isEnabled("<YOUR_FLAG>")
50
- flagStatus = if (isFlagEnabled) {
51
- "Flag is enabled"
52
- } else {
53
- "Flag is disabled"
54
- }
55
- delay(3.seconds)
56
- }
57
- }
58
-
59
- Text(text = flagStatus)
60
- }
61
-
62
- }
63
- }
64
- \`\`\`
65
- ℹ️ **Info:** The Android SDK takes at least 60 seconds to post metrics to Unleash.
66
-
67
- ---
68
- ---
69
- - [SDK repository with documentation and example](https://github.com/Unleash/unleash-android)
70
- - [Android SDK basic example](hhttps://github.com/Unleash/unleash-sdk-examples/tree/main/Android)
71
-
72
- ---
73
-
74
- \`\`\`kotlin
75
- if (unleash.isEnabled("<YOUR_FLAG>")) {
76
- println("<YOUR_FLAG> is enabled")
77
- } else {
78
- println("<YOUR_FLAG> is disabled")
79
- }
80
- \`\`\`
81
-
82
- ℹ️ **Info:** The Android SDK takes at least 60 seconds to post metrics to Unleash.
83
- `,Go:`1\\. Install the SDK
84
- \`\`\`sh
85
- go get github.com/Unleash/unleash-go-sdk/v6@latest
86
- \`\`\`
87
-
88
- 2\\. Run Unleash
89
- \`\`\`go
90
- package main
91
-
92
- import (
93
- unleash "github.com/Unleash/unleash-go-sdk/v6"
94
- "net/http"
95
- )
96
-
97
- func main() {
98
- err := unleash.Initialize(
99
- unleash.WithAppName("unleash-onboarding-golang"),
100
- unleash.WithUrl("<YOUR_API_URL>"),
101
- unleash.WithCustomHeaders(http.Header{"Authorization": {"<YOUR_API_TOKEN>"}}), // in production use environment variable
102
- )
103
- if err != nil {
104
- panic(err)
105
- }
106
- defer unleash.Close()
107
- unleash.WaitForReady() // optional: blocks until first sync
108
-
109
- if unleash.IsEnabled("<YOUR_FLAG>", unleash.FeatureOptions{}) {
110
- // New behaviour
111
- }
112
- }
113
- \`\`\`
114
-
115
- ---
116
- \`\`\`go
117
- package main
118
-
119
- import (
120
- unleash "github.com/Unleash/unleash-go-sdk/v6"
121
- "net/http"
122
- "os"
123
- )
124
-
125
- func main() {
126
- err := unleash.Initialize(
127
- unleash.WithAppName("unleash-onboarding-golang"),
128
- unleash.WithUrl("<YOUR_API_URL>"),
129
- unleash.WithCustomHeaders(http.Header{
130
- "Authorization": {os.Getenv("UNLEASH_API_KEY")},
131
- }),
132
- )
133
- if err != nil {
134
- panic(err)
135
- }
136
- defer unleash.Close()
137
-
138
- if unleash.IsEnabled("<YOUR_FLAG>", unleash.FeatureOptions{}) {
139
- // New behaviour
140
- }
141
- }
142
- \`\`\`
143
-
144
- ---
145
- - [SDK repository with documentation](https://github.com/Unleash/unleash-go-sdk)
146
- - [Go SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Go)
147
-
148
- ---
149
-
150
- \`\`\`go
151
- if unleash.IsEnabled("<YOUR_FLAG>", unleash.FeatureOptions{}) {
152
- fmt.Println("<YOUR_FLAG> is enabled")
153
- } else {
154
- fmt.Println("<YOUR_FLAG> is disabled")
155
- }
156
- \`\`\`
157
- `,JavaScript:`1\\. Install the SDK
158
- \`\`\`sh
159
- npm install unleash-proxy-client
160
- \`\`\`
161
-
162
- 2\\. Run Unleash
163
- \`\`\`js
164
- const { UnleashClient } = require('unleash-proxy-client');
165
-
166
- const unleash = new UnleashClient({
167
- url: '<YOUR_API_URL>',
168
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variable
169
- appName: 'unleash-onboarding-javascript',
170
- });
171
-
172
- unleash.start();
173
-
174
- setInterval(() => {
175
- if (unleash.isEnabled('<YOUR_FLAG>')) {
176
- console.log('<YOUR_FLAG> is enabled');
177
- } else {
178
- console.log('<YOUR_FLAG> is disabled');
179
- }
180
- }, 1000);
181
- \`\`\`
182
- ---
183
- \`\`\`js
184
- const unleash = new UnleashClient({
185
- url: '<YOUR_API_URL>',
186
- clientKey: process.env.UNLEASH_API_TOKEN,
187
- appName: 'unleash-onboarding-javascript',
188
- });
189
-
190
- setInterval(() => {
191
- if (unleash.isEnabled('<YOUR_FLAG>')) {
192
- console.log('<YOUR_FLAG> is enabled');
193
- } else {
194
- console.log('<YOUR_FLAG> is disabled');
195
- }
196
- }, 1000);
197
-
198
- unleash.start();
199
- \`\`\`
200
-
201
- ---
202
- - [SDK repository with documentation](https://github.com/Unleash/unleash-proxy-client-js)
203
- - [JavaScript SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/JavaScript)
204
-
205
- ---
206
-
207
- \`\`\`js
208
- if (unleash.isEnabled('<YOUR_FLAG>')) {
209
- console.log('<YOUR_FLAG> is enabled');
210
- } else {
211
- console.log('<YOUR_FLAG> is disabled');
212
- }
213
- \`\`\`
214
- `,"Node.js":`1\\. Install the SDK
215
- \`\`\`sh
216
- npm install unleash-client
217
- \`\`\`
218
-
219
- 2\\. Run Unleash
220
- \`\`\`js
221
- const { initialize } = require('unleash-client');
222
-
223
- const unleash = initialize({
224
- url: '<YOUR_API_URL>',
225
- appName: 'unleash-onboarding-node',
226
- customHeaders: {
227
- Authorization: '<YOUR_API_TOKEN>' // in production use environment variable
228
- },
229
- });
230
-
231
- setInterval(() => {
232
- if (unleash.isEnabled('<YOUR_FLAG>')) {
233
- console.log('<YOUR_FLAG> is enabled');
234
- } else {
235
- console.log('<YOUR_FLAG> is disabled');
236
- }
237
- }, 1000);
238
- \`\`\`
239
-
240
- ---
241
- \`\`\`js
242
- const { initialize } = require('unleash-client');
243
-
244
- const unleash = initialize({
245
- url: '<YOUR_API_URL>',
246
- appName: 'unleash-onboarding-node',
247
- customHeaders: { Authorization: process.env.UNLEASH_API_KEY },
248
- });
249
-
250
- unleash.on('synchronized', () => {
251
- console.log('Unleash synchronized');
252
- });
253
- unleash.on('error', console.error);
254
- unleash.on('warn', console.warn);
255
-
256
- setInterval(() => {
257
- if (unleash.isEnabled('<YOUR_FLAG>')) {
258
- console.log('<YOUR_FLAG> is enabled');
259
- } else {
260
- console.log('<YOUR_FLAG> is disabled');
261
- }
262
- }, 1000);
263
- \`\`\`
264
-
265
- ---
266
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-node)
267
- - [Node.js SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Node.js)
268
- - [Node.js SDK tutorial](https://dev.to/reeshee/how-to-implement-feature-flags-in-nodejs-using-unleash-3907)
269
-
270
- ---
271
-
272
- \`\`\`js
273
- if (unleash.isEnabled('<YOUR_FLAG>')) {
274
- console.log('<YOUR_FLAG> is enabled');
275
- } else {
276
- console.log('<YOUR_FLAG> is disabled');
277
- }
278
- \`\`\`
279
- `,Python:`1\\. Install the SDK
280
- \`\`\`sh
281
- pip install UnleashClient
282
- \`\`\`
283
-
284
- 2\\. Run Unleash
285
- \`\`\`python
286
- from UnleashClient import UnleashClient
287
- import time
288
-
289
- client = UnleashClient(
290
- url="<YOUR_API_URL>",
291
- app_name="unleash-onboarding-python",
292
- custom_headers={'Authorization': '<YOUR_API_TOKEN>'}) # in production use environment variable
293
-
294
- client.initialize_client()
295
-
296
- while True:
297
- if client.is_enabled("<YOUR_FLAG>"):
298
- print("<YOUR_FLAG> is enabled")
299
- else:
300
- print("<YOUR_FLAG> is disabled")
301
- time.sleep(2)
302
- \`\`\`
303
- ---
304
- \`\`\`python
305
- from UnleashClient import UnleashClient
306
- import os
307
-
308
- client = UnleashClient(
309
- url="<YOUR_API_URL>",
310
- app_name="unleash-onboarding-python",
311
- custom_headers={'Authorization': os.getenv('UNLEASH_API_TOKEN')})
312
-
313
- client.initialize_client()
314
-
315
- \`\`\`
316
-
317
- ---
318
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-python)
319
- - [Python SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Python)
320
- - [How to Implement Feature Flags in Python](https://docs.getunleash.io/guides/implement-feature-flags-in-python)
321
-
322
- ---
323
-
324
- \`\`\`python
325
- if client.is_enabled("<YOUR_FLAG>"):
326
- print("<YOUR_FLAG> is enabled")
327
- else:
328
- print("<YOUR_FLAG> is disabled")
329
- \`\`\`
330
- `,Ruby:`1\\. Install the SDK
331
- \`\`\`sh
332
- gem install unleash
333
- \`\`\`
334
-
335
- 2\\. Run Unleash
336
- \`\`\`rb
337
- require 'unleash'
338
-
339
- @unleash = Unleash::Client.new(
340
- url: "<YOUR_API_URL>",
341
- custom_http_headers: { 'Authorization': "<YOUR_API_TOKEN>" }, # in production use environment variable
342
- app_name: 'unleash-onboarding-ruby',
343
- instance_id: 'unleash-onboarding-ruby',
344
- )
345
-
346
- while true
347
- if @unleash.is_enabled?("<YOUR_FLAG>")
348
- puts "Flag is enabled"
349
- else
350
- puts "Flag is not enabled"
351
- end
352
- sleep 3
353
- end
354
-
355
- \`\`\`
356
- ---
357
- \`\`\`rb
358
- @unleash = Unleash::Client.new(
359
- url: "<YOUR_API_URL>",
360
- custom_http_headers: { 'Authorization': ENV['UNLEASH_API_TOKEN'] },
361
- app_name: 'unleash-onboarding-ruby',
362
- instance_id: 'unleash-onboarding-ruby',
363
- )
364
- \`\`\`
365
-
366
- ---
367
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-ruby)
368
- - [Ruby example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Ruby)
369
- - [How to Implement Feature Flags in Ruby](https://docs.getunleash.io/guides/implement-feature-flags-in-ruby)
370
-
371
- ---
372
-
373
- \`\`\`rb
374
- if @unleash.is_enabled?("<YOUR_FLAG>")
375
- puts "<YOUR_FLAG> is enabled"
376
- else
377
- puts "<YOUR_FLAG> is disabled"
378
- end
379
- \`\`\`
380
- `,Svelte:`1\\. Install the SDK
381
- \`\`\`sh
382
- npm install @unleash/proxy-client-svelte
383
- \`\`\`
384
-
385
- 2\\. Initialize Unleash
386
- \`\`\`svelte
387
- <script>
388
- import { FlagProvider } from '@unleash/proxy-client-svelte';
389
- const { children } = $props();
390
-
391
- const config = {
392
- url: '<YOUR_API_URL>',
393
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variable
394
- appName: 'unleash-onboarding-svelte',
395
- };
396
- <\/script>
397
-
398
- <div class="app">
399
- <FlagProvider {config}>
400
- <main>
401
- {@render children()}
402
- </main>
403
- </FlagProvider>
404
- </div>
405
- \`\`\`
406
-
407
- 3\\. Check feature flag status
408
- \`\`\`svelte
409
- <script lang="ts">
410
- import { useFlag } from '@unleash/proxy-client-svelte';
411
- const enabled = useFlag('<YOUR_FLAG>');
412
- <\/script>
413
-
414
- <section>
415
- {#if $enabled}
416
- <p><YOUR_FLAG> is enabled!</p>
417
- {:else}
418
- <p><YOUR_FLAG> is disabled!</p>
419
- {/if}
420
- </section>
421
- \`\`\`
422
- ---
423
- \`\`\`svelte
424
- const config = {
425
- url: '<YOUR_API_URL>',
426
- clientKey: import.meta.env.VITE_UNLEASH_API_TOKEN,
427
- appName: 'unleash-onboarding-svelte',
428
- };
429
- \`\`\`
430
-
431
- ---
432
- - [SDK repository with documentation](https://github.com/Unleash/proxy-client-svelte)
433
- - [Svelte example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Svelte)
434
- - [How to Implement Feature Flags in SvelteKit](https://docs.getunleash.io/guides/implement-feature-flags-in-sveltekit)
435
-
436
- ---
437
-
438
- \`\`\`svelte
439
- <script lang="ts">
440
- import { useFlag } from '@unleash/proxy-client-svelte';
441
- const enabled = useFlag('<YOUR_FLAG>');
442
- <\/script>
443
-
444
- <section>
445
- {#if $enabled}
446
- <p><YOUR_FLAG> is enabled!</p>
447
- {:else}
448
- <p><YOUR_FLAG> is disabled!</p>
449
- {/if}
450
- </section>
451
- \`\`\`
452
- `,Vue:`1\\. Install the SDK
453
- \`\`\`sh
454
- npm install @unleash/proxy-client-vue
455
- \`\`\`
456
-
457
- 2\\. Initialize Unleash
458
- \`\`\`vue
459
- <script setup lang="ts">
460
- import { FlagProvider } from '@unleash/proxy-client-vue'
461
-
462
- const config = {
463
- url: '<YOUR_API_URL>',
464
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variable
465
- appName: 'unleash-onboarding-vue',
466
- }
467
- <\/script>
468
-
469
- <template>
470
- <FlagProvider :config="config">
471
- <!-- <YourComponent /> -->
472
- </FlagProvider>
473
- </template>
474
- \`\`\`
475
-
476
- 3\\. Check feature flag status
477
- \`\`\`vue
478
- <script setup lang="ts">
479
- import { useFlag } from '@unleash/proxy-client-vue'
480
-
481
- const flagEnabled = useFlag('<YOUR_FLAG>')
482
- <\/script>
483
-
484
- <template>
485
- <div>
486
- <div v-if="flagEnabled"><YOUR_FLAG> is enabled</div>
487
- <div v-else><YOUR_FLAG> is disabled</div>
488
- </div>
489
- </template>
490
- \`\`\`
491
- ---
492
- \`\`\`svelte
493
- const config = {
494
- url: '<YOUR_API_URL>',
495
- clientKey: import.meta.env.VITE_UNLEASH_API_TOKEN,
496
- appName: 'unleash-onboarding-vue',
497
- }
498
- \`\`\`
499
-
500
- ---
501
- - [SDK repository with documentation](https://github.com/Unleash/proxy-client-vue)
502
- - [Vue example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Vue)
503
-
504
- ---
505
-
506
- \`\`\`vue
507
- <script setup lang="ts">
508
- import { useFlag } from '@unleash/proxy-client-vue'
509
-
510
- const flagEnabled = useFlag('<YOUR_FLAG>')
511
- <\/script>
512
-
513
- <template>
514
- <div>
515
- <div v-if="flagEnabled"><YOUR_FLAG> is enabled</div>
516
- <div v-else><YOUR_FLAG> is disabled</div>
517
- </div>
518
- </template>
519
- \`\`\`
520
- `,Flutter:`1\\. Install the SDK
521
- \`\`\`sh
522
- flutter pub add unleash_proxy_client_flutter
523
- \`\`\`
524
-
525
- 2\\. Run Unleash
526
- \`\`\`dart
527
- import 'package:unleash_proxy_client_flutter/unleash_proxy_client_flutter.dart';
528
- import 'dart:async';
529
-
530
- final unleash = UnleashClient(
531
- url: Uri.parse('<YOUR_API_URL>'),
532
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variable
533
- appName: 'unleash-onboarding-flutter');
534
-
535
- unleash.start();
536
-
537
- Timer.periodic(Duration(seconds: 1), (Timer timer) {
538
- if (unleash.isEnabled('<YOUR_FLAG>')) {
539
- print('<YOUR_FLAG> is enabled');
540
- } else {
541
- print('<YOUR_FLAG> is disabled');
542
- }
543
- });
544
- \`\`\`
545
- ---
546
- \`\`\`dart
547
- import 'package:unleash_proxy_client_flutter/unleash_proxy_client_flutter.dart';
548
- import 'dart:io';
549
-
550
- final unleash = UnleashClient(
551
- url: Uri.parse('<YOUR_API_URL>'),
552
- clientKey: Platform.environment['UNLEASH_CLIENT_KEY']!,
553
- appName: 'unleash-onboarding-flutter');
554
-
555
- unleash.start();
556
- \`\`\`
557
-
558
- ---
559
- - [SDK repository with documentation](https://github.com/Unleash/unleash_proxy_client_flutter)
560
- - [Flutter example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Flutter)
561
- - [A/B Testing in Flutter using Unleash and Mixpanel](https://docs.getunleash.io/guides/implement-ab-test-in-flutter)
562
-
563
- ---
564
-
565
- \`\`\`dart
566
- if (unleash.isEnabled("<YOUR_FLAG>")) {
567
- print("<YOUR_FLAG> is enabled");
568
- } else {
569
- print("<YOUR_FLAG> is disabled");
570
- }
571
- \`\`\`
572
- `,Java:`1\\. Install the SDK
573
- \`\`\`xml
574
- <dependency>
575
- <groupId>io.getunleash</groupId>
576
- <artifactId>unleash-client-java</artifactId>
577
- <version>LATEST</version>
578
- </dependency>
579
- \`\`\`
580
-
581
- 2\\. Run Unleash
582
- \`\`\`java
583
- UnleashConfig config = UnleashConfig.builder()
584
- .appName("unleash-onboarding-java")
585
- .instanceId("unleash-onboarding-instance")
586
- .unleashAPI("<YOUR_API_URL>")
587
- .apiKey("<YOUR_API_TOKEN>") // in production use environment variable
588
- .build();
589
-
590
- Unleash unleash = new DefaultUnleash(config);
591
-
592
- while (true) {
593
- boolean featureEnabled = unleash.isEnabled("<YOUR_FLAG>");
594
- System.out.println("Feature enabled: " + featureEnabled);
595
- Thread.sleep(1000);
596
- }
597
- \`\`\`
598
-
599
- ---
600
- \`\`\`java
601
- UnleashConfig config = UnleashConfig.builder()
602
- .appName("unleash-onboarding-java")
603
- .instanceId("unleash-onboarding-instance")
604
- .unleashAPI("<YOUR_API_URL>")
605
- .apiKey(System.getenv("UNLEASH_API_KEY"))
606
- .build();
607
- \`\`\`
608
-
609
- ---
610
- - [SDK repository with documentation](https://github.com/Unleash/unleash-java-sdk)
611
- - [Java SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Java)
612
- - [How to Implement Feature Flags in Java](https://docs.getunleash.io/guides/implement-feature-flags-in-java)
613
-
614
- ---
615
-
616
- \`\`\`java
617
- if (unleash.isEnabled("<YOUR_FLAG>")) {
618
- System.out.println("<YOUR_FLAG> is enabled");
619
- } else {
620
- System.out.println("<YOUR_FLAG> is disabled");
621
- }
622
- \`\`\`
623
- `,".NET":`1\\. Install the SDK
624
- \`\`\`sh
625
- dotnet add package unleash.client
626
- // If you do not have a json library in your project:
627
- dotnet add package Newtonsoft.Json
628
- \`\`\`
629
-
630
- 2\\. Initialize Unleash
631
- \`\`\`csharp
632
- using Unleash;
633
- using Unleash.ClientFactory;
634
-
635
- public class Program
636
- {
637
- public static async Task Main()
638
- {
639
- var settings = new UnleashSettings()
640
- {
641
- AppName = "unleash-onboarding-dotnet",
642
- UnleashApi = new Uri("<YOUR_API_URL>"),
643
- CustomHttpHeaders = new Dictionary<string, string>()
644
- {
645
- {"Authorization","<YOUR_API_TOKEN>"} // in production use environment variable
646
- }
647
- };
648
-
649
- var unleash = new DefaultUnleash(settings);
650
-
651
- while (true) {
652
- if (unleash.IsEnabled("<YOUR_FLAG>"))
653
- {
654
- Console.WriteLine("<YOUR_FLAG> is enabled");
655
- }
656
- else
657
- {
658
- Console.WriteLine("<YOUR_FLAG> is disabled");
659
- }
660
- await Task.Delay(1000);
661
- }
662
- }
663
- }
664
-
665
- \`\`\`
666
-
667
- ---
668
- \`\`\`csharp
669
- var settings = new UnleashSettings()
670
- {
671
- AppName = "unleash-onboarding-dotnet",
672
- UnleashApi = new Uri("<YOUR_API_URL>"),
673
- CustomHttpHeaders = new Dictionary<string, string>()
674
- {
675
- {"Authorization",Environment.GetEnvironmentVariable("UNLEASH_API_KEY")}
676
- }
677
- };
678
- \`\`\`
679
-
680
- ---
681
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-dotnet)
682
- - [.NET/C# SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Csharp)
683
-
684
- ---
685
-
686
- \`\`\`csharp
687
- if (unleash.IsEnabled("<YOUR_FLAG>"))
688
- {
689
- Console.WriteLine("<YOUR_FLAG> is enabled");
690
- }
691
- else
692
- {
693
- Console.WriteLine("<YOUR_FLAG> is disabled");
694
- }
695
- \`\`\`
696
- `,PHP:`1\\. Install the SDK
697
- \`\`\`sh
698
- composer require unleash/client guzzlehttp/guzzle symfony/cache
699
- \`\`\`
700
- or
701
- \`\`\`sh
702
- composer require unleash/client symfony/http-client nyholm/psr7 symfony/cache
703
- \`\`\`
704
-
705
- 2\\. Initialize Unleash
706
- \`\`\`php
707
- <?php
708
-
709
- use Unleash\\\\Client\\\\UnleashBuilder;
710
-
711
- require 'vendor/autoload.php';
712
-
713
- $unleash = UnleashBuilder::create()
714
- ->withAppName('unleash-onboarding-php')
715
- ->withAppUrl('<YOUR_API_URL>')
716
- ->withHeader('Authorization', '<YOUR_API_TOKEN>') // in production use environment variable
717
- ->withInstanceId('unleash-onboarding-instance')
718
- ->build();
719
-
720
- while (true) {
721
- if ($unleash->isEnabled('<YOUR_FLAG>')) {
722
- echo '<YOUR_FLAG> is enabled' . PHP_EOL;
723
- } else {
724
- echo '<YOUR_FLAG> is disabled' . PHP_EOL;
725
- }
726
- sleep(1);
727
- }
728
- \`\`\`
729
- ---
730
- \`\`\`php
731
- $unleash = UnleashBuilder::create()
732
- ->withAppName('unleash-onboarding-php')
733
- ->withAppUrl('<YOUR_API_URL>')
734
- ->withHeader('Authorization', getenv('UNLEASH_API_TOKEN'))
735
- ->withInstanceId('unleash-onboarding-instance')
736
- ->build();
737
- \`\`\`
738
-
739
- ---
740
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-php)
741
- - [PHP SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/PHP)
742
-
743
- ---
744
-
745
- \`\`\`php
746
- if ($unleash->isEnabled('<YOUR_FLAG>')) {
747
- echo '<YOUR_FLAG> is enabled' . PHP_EOL;
748
- } else {
749
- echo '<YOUR_FLAG> is disabled' . PHP_EOL;
750
- }
751
- \`\`\`
752
- `,React:`1\\. Install the SDK
753
- \`\`\`sh
754
- npm install @unleash/proxy-client-react unleash-proxy-client
755
- \`\`\`
756
-
757
- 2\\. Initialize Unleash
758
- \`\`\`jsx
759
- import React from 'react';
760
- import { createRoot } from 'react-dom/client';
761
- import { FlagProvider } from '@unleash/proxy-client-react';
762
-
763
- const config = {
764
- url: '<YOUR_API_URL>',
765
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variable
766
- appName: 'unleash-onboarding-react',
767
- };
768
-
769
- const root = createRoot(document.getElementById('root'));
770
-
771
- root.render(
772
- <React.StrictMode>
773
- <FlagProvider config={config}>
774
- <App />
775
- </FlagProvider>
776
- </React.StrictMode>
777
- );
778
- \`\`\`
779
-
780
- 3\\. Check feature flag status
781
- \`\`\`jsx
782
- import { useFlag } from '@unleash/proxy-client-react';
783
-
784
- export const TestComponent = () => {
785
- const enabled = useFlag('<YOUR_FLAG>');
786
-
787
- return enabled ? 'Flag is enabled' : 'Flag is disabled'
788
- };
789
- \`\`\`
790
- ---
791
- \`\`\`jsx
792
- const config = {
793
- url: '<YOUR_API_URL>',
794
- clientKey: process.env.UNLEASH_API_TOKEN,
795
- appName: 'unleash-onboarding-react',
796
- };
797
- \`\`\`
798
-
799
- ---
800
- - [SDK repository with documentation](https://github.com/Unleash/proxy-client-react)
801
- - [React SDK example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/React)
802
- - [https://docs.getunleash.io/guides/implement-feature-flags-in-react](https://docs.getunleash.io/guides/implement-feature-flags-in-react)
803
-
804
- ---
805
-
806
- \`\`\`jsx
807
- const TestComponent = () => {
808
- const enabled = useFlag('<YOUR_FLAG>');
809
-
810
- if (enabled) {
811
- return (<div>{'<YOUR_FLAG> is enabled'}</div>);
812
- } else {
813
- return (<div>{'<YOUR_FLAG> is disabled'}</div>);
814
- }
815
- };
816
- \`\`\`
817
-
818
- `,Rust:`1\\. Install the SDK
819
- \`\`\`sh
820
- cargo add unleash-api-client --features reqwest
821
- cargo add serde --features derive
822
- cargo add reqwest@0.12 --features json
823
- cargo add tokio --features full
824
- cargo add enum-map
825
- \`\`\`
826
-
827
- 2\\. Run Unleash
828
- \`\`\`rust
829
- use enum_map::Enum;
830
- use serde::{Deserialize, Serialize};
831
- use std::error::Error;
832
- use std::time::Duration;
833
- use tokio::time::sleep;
834
- use unleash_api_client::client::ClientBuilder;
835
- use unleash_api_client::Client;
836
-
837
- #[derive(Debug, Deserialize, Serialize, Enum, Clone)]
838
- enum Flags {
839
- #[serde(rename = "<YOUR_FLAG>")]
840
- TestFlag,
841
- }
842
-
843
- #[tokio::main]
844
- async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
845
- let client: Client<Flags, reqwest::Client> = ClientBuilder::default()
846
- .into_client(
847
- "<YOUR_API_URL>",
848
- "unleash-onboarding-rust",
849
- "unleash-onboarding-instance",
850
- Some("<YOUR_API_TOKEN>".to_owned()), // in production use environment variable
851
- )?;
852
- client.register().await?;
853
-
854
- let (_, _) = tokio::join!(client.poll_for_updates(), async {
855
- sleep(Duration::from_millis(1000)).await;
856
-
857
- let is_enabled = client.is_enabled(Flags::TestFlag, None, true);
858
- println!("\\nIs flag enabled: {}\\n", is_enabled);
859
-
860
- sleep(Duration::from_millis(5000)).await;
861
-
862
- client.stop_poll().await;
863
- Ok::<(), Box<dyn Error + Send + Sync>>(())
864
- });
865
-
866
- Ok(())
867
- }
868
- \`\`\`
869
- ---
870
- \`\`\`rust
871
- let api_token = env::var("UNLEASH_API_TOKEN").expect("UNLEASH_API_TOKEN environment variable not set");
872
-
873
- let client: Client<Flags, reqwest::Client> = ClientBuilder::default()
874
- .into_client(
875
- "<YOUR_API_URL>",
876
- "unleash-onboarding-rust",
877
- "unleash-onboarding-instance",
878
- Some(api_token.to_owned()),
879
- )?;
880
- client.register().await?;
881
- \`\`\`
882
-
883
- ---
884
- - [SDK repository with documentation](https://github.com/Unleash/unleash-client-rust)
885
- - [Rust example with CodeSandbox](https://github.com/Unleash/unleash-sdk-examples/tree/main/Rust)
886
- - [How to Implement Feature Flags in Rust](https://docs.getunleash.io/guides/implement-feature-flags-in-rust)
887
-
888
- ---
889
-
890
- \`\`\`rust
891
- enum Flags {
892
- #[serde(rename = "<YOUR_FLAG>")]
893
- TestFlag,
894
- }
895
-
896
- if client.is_enabled(Flags::TestFlag, None, true) {
897
- println!("<YOUR_FLAG> is enabled");
898
- } else {
899
- println!("<YOUR_FLAG> is disabled");
900
- }
901
- \`\`\`
902
- `,Swift:`1\\. Install the SDK
903
- \`\`\`swift
904
- .package(url: "https://github.com/Unleash/unleash-ios-sdk.git", from: "0.0.0")
905
- \`\`\`
906
-
907
- 2\\. Run Unleash
908
- \`\`\`swift
909
- import Foundation
910
- import UnleashProxyClientSwift
911
-
912
- var unleash = UnleashProxyClientSwift.UnleashClient(
913
- unleashUrl: "<YOUR_API_URL>",
914
- clientKey: "<YOUR_API_TOKEN>", // in production use environment variable
915
- appName: "unleash-onboarding-swift",
916
- context: [:])
917
-
918
- unleash.start()
919
-
920
- Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
921
- MainActor.assumeIsolated {
922
- if unleash.isEnabled(name: "<YOUR_FLAG>") {
923
- print("<YOUR_FLAG> is enabled")
924
- } else {
925
- print("<YOUR_FLAG> is disabled")
926
- }
927
- fflush(stdout)
928
- }
929
- }
930
-
931
- RunLoop.main.run()
932
- \`\`\`
933
- ℹ️ **Info:** The Swift SDK takes at least 60 seconds to post metrics to Unleash.
934
- ---
935
- ---
936
- - [SDK repository with documentation](https://github.com/Unleash/unleash-ios-sdk)
937
- ---
938
-
939
- \`\`\`swift
940
- if unleash.isEnabled(name: "<YOUR_FLAG>") {
941
- print("<YOUR_FLAG> is enabled")
942
- } else {
943
- print("<YOUR_FLAG> is disabled")
944
- }
945
- \`\`\`
946
-
947
- ℹ️ **Info:** The Swift SDK takes at least 60 seconds to post metrics to Unleash.
948
- `,"Next.js":`1\\. Install the SDK
949
- \`\`\`sh
950
- npm install @unleash/nextjs
951
- \`\`\`
952
-
953
- 2\\. Wrap your app with FlagProvider
954
- \`\`\`jsx
955
- "use client";
956
-
957
- import { FlagProvider } from '@unleash/nextjs/client';
958
-
959
- const config = {
960
- url: '<YOUR_API_URL>',
961
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variables
962
- appName: 'unleash-onboarding-nextjs',
963
- };
964
-
965
- export default function Home() {
966
- return (
967
- <FlagProvider config={config}>
968
- <App />
969
- </FlagProvider>
970
- );
971
- }
972
- \`\`\`
973
-
974
- 3\\. Check feature flag status
975
- \`\`\`jsx
976
- "use client";
977
-
978
- import { useFlag } from '@unleash/nextjs/client';
979
-
980
- export default function MyComponent() {
981
- const isEnabled = useFlag('<YOUR_FLAG>');
982
-
983
- if (isEnabled) {
984
- return (<div>{'<YOUR_FLAG> is enabled'}</div>);
985
- } else {
986
- return (<div>{'<YOUR_FLAG> is disabled'}</div>);
987
- }
988
- }
989
- \`\`\`
990
- ---
991
- \`\`\`jsx
992
- // Set NEXT_PUBLIC_UNLEASH_FRONTEND_API_URL, NEXT_PUBLIC_UNLEASH_FRONTEND_API_TOKEN
993
- // and NEXT_PUBLIC_UNLEASH_APP_NAME in your environment
994
- export default function Home() {
995
- return (
996
- <FlagProvider>
997
- <App />
998
- </FlagProvider>
999
- );
1000
- }
1001
- \`\`\`
1002
-
1003
- ---
1004
- - [SDK repository with documentation](https://github.com/Unleash/unleash-nextjs-sdk)
1005
- - [Next.js SDK example](https://github.com/Unleash/unleash-sdk-examples/tree/main/Next.js)
1006
- - [https://docs.getunleash.io/sdks/next-js](https://docs.getunleash.io/sdks/next-js)
1007
-
1008
- ---
1009
-
1010
- \`\`\`jsx
1011
- "use client";
1012
-
1013
- import { useFlag } from '@unleash/nextjs/client';
1014
-
1015
- export default function MyComponent() {
1016
- const isEnabled = useFlag('<YOUR_FLAG>');
1017
-
1018
- if (isEnabled) {
1019
- return (<div>{'<YOUR_FLAG> is enabled'}</div>);
1020
- } else {
1021
- return (<div>{'<YOUR_FLAG> is disabled'}</div>);
1022
- }
1023
- }
1024
- \`\`\`
1025
- `,"React Native":`1\\. Install the SDK
1026
- \`\`\`sh
1027
- npm install @unleash/unleash-react-native-sdk unleash-proxy-client
1028
- \`\`\`
1029
-
1030
- 2\\. Initialize Unleash
1031
- \`\`\`tsx
1032
- import { FlagProvider, useFlag } from '@unleash/unleash-react-native-sdk';
1033
-
1034
- const config = {
1035
- url: '<YOUR_API_URL>',
1036
- clientKey: '<YOUR_API_TOKEN>', // in production use environment variables
1037
- appName: 'unleash-onboarding-react-native',
1038
- };
1039
-
1040
- function FlagStatus() {
1041
- const isEnabled = useFlag('<YOUR_FLAG>');
1042
-
1043
- if (isEnabled) {
1044
- return <Text>{'<YOUR_FLAG> is enabled'}</Text>;
1045
- } else {
1046
- return <Text>{'<YOUR_FLAG> is disabled'}</Text>;
1047
- }
1048
- }
1049
-
1050
- export default function App() {
1051
- return (
1052
- <FlagProvider config={config}>
1053
- <FlagStatus />
1054
- </FlagProvider>
1055
- );
1056
- }
1057
- \`\`\`
1058
- ---
1059
- \`\`\`tsx
1060
- // Use environment variables instead of hardcoded values.
1061
- // The variable names depend on your setup (e.g. EXPO_PUBLIC_* for Expo,
1062
- // or your chosen library for bare React Native).
1063
- const config = {
1064
- url: process.env.YOUR_UNLEASH_URL,
1065
- clientKey: process.env.YOUR_UNLEASH_CLIENT_KEY,
1066
- appName: 'unleash-onboarding-react-native',
1067
- };
1068
- \`\`\`
1069
-
1070
- ---
1071
- - [SDK repository with documentation](https://github.com/Unleash/unleash-react-native-sdk)
1072
- - [React Native SDK example](https://github.com/Unleash/unleash-sdk-examples/tree/main/ReactNative)
1073
- - [https://docs.getunleash.io/sdks/react-native](https://docs.getunleash.io/sdks/react-native)
1074
-
1075
- ---
1076
-
1077
- \`\`\`tsx
1078
- import { useFlag } from '@unleash/unleash-react-native-sdk';
1079
-
1080
- function MyComponent() {
1081
- const isEnabled = useFlag('<YOUR_FLAG>');
1082
-
1083
- if (isEnabled) {
1084
- return <Text>{'<YOUR_FLAG> is enabled'}</Text>;
1085
- } else {
1086
- return <Text>{'<YOUR_FLAG> is disabled'}</Text>;
1087
- }
1088
- }
1089
- \`\`\`
1090
- `},Ne=o(`pre`)(({theme:e})=>({backgroundColor:e.palette.background.elevation1,padding:e.spacing(2),borderRadius:e.shape.borderRadius,overflow:`auto`,fontSize:e.typography.body2.fontSize,wordBreak:`break-all`,whiteSpace:`pre-wrap`,position:`relative`,maxHeight:e.spacing(90)})),Pe=o(c)(({theme:e})=>({position:`absolute`,top:e.spacing(1),right:e.spacing(1)})),Fe=({title:e,code:t})=>{let n=e=>()=>{(0,je.default)(e),r({type:`success`,text:`Copied to clipboard`})},{setToastData:r}=h();return(0,T.jsxs)(Ne,{children:[t,(0,T.jsx)(Pe,{title:e,arrow:!0,children:(0,T.jsx)(l,{onClick:n(t),size:`small`,children:(0,T.jsx)(oe,{})})})]})},Ie=({children:e,className:t})=>{let n=!!t,r=Array.isArray(e)?e[0]:e;return n&&typeof r==`string`?(0,T.jsx)(Fe,{code:r,title:`Copy code`}):(0,T.jsx)(`code`,{className:t,children:e})},Le=o(`span`)(({theme:e})=>{let t=n`
1091
- 0% {
1092
- box-shadow:
1093
- 0 0 0 0 ${r(e.palette.primary.main,.5)},
1094
- 0 0 0 0 ${r(e.palette.primary.main,.3)};
1095
- }
1096
- 70% {
1097
- box-shadow:
1098
- 0 0 0 6px ${r(e.palette.primary.main,0)},
1099
- 0 0 0 12px ${r(e.palette.primary.main,0)};
1100
- }
1101
- 100% {
1102
- box-shadow:
1103
- 0 0 0 0 ${r(e.palette.primary.main,0)},
1104
- 0 0 0 0 ${r(e.palette.primary.main,0)};
1105
- }
1106
- `;return{display:`flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0,width:e.spacing(3),height:e.spacing(3),borderRadius:`50%`,backgroundColor:e.palette.primary.main,color:e.palette.common.white,animation:`${t} 1.8s ease-out infinite`,"@media (prefers-reduced-motion: reduce)":{animation:`none`}}}),Z=()=>(0,T.jsx)(Le,{children:(0,T.jsx)(le,{fontSize:`small`})}),Q=o(`div`)(({theme:e})=>({display:`flex`,flexDirection:`row`,gap:e.spacing(2),padding:e.spacing(2),fontSize:e.typography.body2.fontSize,borderRadius:e.shape.borderRadiusMedium,backgroundColor:e.palette.secondary.light,border:`1px solid ${e.palette.secondary.border}`})),Re=o(Q)(({theme:e})=>({backgroundColor:e.palette.success.light,border:`1px solid ${e.palette.success.border}`})),ze=o(`div`)(({theme:e})=>({marginLeft:e.spacing(1),marginTop:e.spacing(1)})),Be=o(ce)(({theme:e})=>({marginLeft:e.spacing(1),marginTop:e.spacing(1),width:e.spacing(3),height:e.spacing(3),color:e.palette.success.main})),Ve=o(u)(({theme:e})=>({marginTop:e.spacing(2),padding:e.spacing(2,3),"& .MuiAlert-message":{padding:0},"& .MuiAlert-icon":{marginRight:e.spacing(1)}})),He=({sdkConnected:e,connectedTitle:t,connectedBody:n,waitingTitle:r,waitingBody:i,showTroubleshooting:a,troubleshootingText:o})=>e?(0,T.jsxs)(Re,{children:[(0,T.jsx)(`div`,{children:(0,T.jsx)(Be,{})}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`strong`,{children:t}),(0,T.jsx)(d,{variant:`body2`,color:`textSecondary`,children:n})]})]}):(0,T.jsxs)(Q,{children:[(0,T.jsx)(ze,{children:(0,T.jsx)(Z,{})}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`strong`,{children:r}),(0,T.jsx)(d,{variant:`body2`,color:`textSecondary`,children:i}),a&&(0,T.jsx)(Ve,{severity:`warning`,children:o})]})]}),Ue=40,$=`md`,We=o(m,{shouldForwardProp:e=>e!==`dialogMaxWidth`&&e!==`fullHeight`})(({theme:e,dialogMaxWidth:t=170,fullHeight:n})=>({"& .MuiDialog-paper":{borderRadius:e.shape.borderRadiusLarge,maxWidth:e.spacing(t),width:`100%`,...n&&{height:`100%`},overflow:`hidden`,display:`flex`,flexDirection:`column`,backgroundColor:e.palette.background.sidebar}})),Ge=o(`div`)(({theme:e})=>({display:`flex`,flexShrink:0,borderBottom:`1px solid ${e.palette.divider}`})),Ke=o(`div`)(({theme:e})=>({flex:1,display:`flex`,alignItems:`center`,justifyContent:`space-between`,backgroundColor:e.palette.background.paper,paddingRight:e.spacing(1.5),"& .closeButton":{[e.breakpoints.up($)]:{display:`none`}}})),qe=o(`h2`)(({theme:e})=>({margin:0,padding:e.spacing(1.5,3),fontWeight:e.typography.fontWeightBold,fontSize:e.typography.body1.fontSize,lineHeight:e.spacing(2.75)})),Je=o(`div`)(({theme:e})=>({width:e.spacing(Ue),flexShrink:0,backgroundColor:e.palette.background.sidebar,color:e.palette.primary.contrastText,display:`flex`,alignItems:`center`,justifyContent:`flex-end`,paddingRight:e.spacing(1.5),[e.breakpoints.down($)]:{display:`none`}})),Ye=o(`div`)({display:`flex`,flex:1,overflow:`hidden`}),Xe=o(`div`)(({theme:e})=>({flex:1,overflowY:`auto`,backgroundColor:e.palette.background.paper})),Ze=o(`aside`)(({theme:e})=>({width:e.spacing(Ue),flexShrink:0,backgroundColor:e.palette.background.sidebar,color:e.palette.primary.contrastText,[e.breakpoints.down($)]:{display:`none`}})),Qe=({open:e,onClose:t,title:n,aside:r,children:i,maxWidth:a,fullHeight:o})=>(0,T.jsxs)(We,{open:e,onClose:t,maxWidth:!1,dialogMaxWidth:a,fullHeight:o,children:[(0,T.jsxs)(Ge,{children:[(0,T.jsxs)(Ke,{children:[(0,T.jsx)(qe,{children:n}),(0,T.jsx)(l,{size:`small`,className:`closeButton`,onClick:t,children:(0,T.jsx)(_,{})})]}),(0,T.jsx)(Je,{children:(0,T.jsx)(l,{size:`small`,onClick:t,sx:{color:`inherit`},children:(0,T.jsx)(_,{})})})]}),(0,T.jsxs)(Ye,{children:[(0,T.jsx)(Xe,{children:i}),(0,T.jsx)(Ze,{children:r})]})]});export{Me as a,K as c,ye as d,pe as f,fe as g,E as h,Ie as i,N as l,D as m,He as n,Ae as o,O as p,Z as r,ke as s,Qe as t,M as u};