@almadar/std 6.5.2 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/behaviors/registry/atoms/std-agent-activity-log.orb +240 -227
  2. package/behaviors/registry/atoms/std-agent-chat-thread.orb +296 -199
  3. package/behaviors/registry/atoms/std-agent-classifier.orb +384 -133
  4. package/behaviors/registry/atoms/std-agent-completion.orb +404 -141
  5. package/behaviors/registry/atoms/std-agent-context-window.orb +904 -607
  6. package/behaviors/registry/atoms/std-agent-conversation.orb +443 -234
  7. package/behaviors/registry/atoms/std-agent-memory.orb +584 -150
  8. package/behaviors/registry/atoms/std-agent-provider.orb +431 -174
  9. package/behaviors/registry/atoms/std-agent-search.orb +217 -61
  10. package/behaviors/registry/atoms/std-agent-session.orb +406 -159
  11. package/behaviors/registry/atoms/std-agent-step-progress.orb +314 -294
  12. package/behaviors/registry/atoms/std-agent-token-gauge.orb +577 -500
  13. package/behaviors/registry/atoms/std-agent-tool-call.orb +328 -138
  14. package/behaviors/registry/atoms/std-async.orb +147 -86
  15. package/behaviors/registry/atoms/std-autoregressive.orb +64 -73
  16. package/behaviors/registry/atoms/std-browse.orb +260 -126
  17. package/behaviors/registry/atoms/std-cache-aside.orb +358 -259
  18. package/behaviors/registry/atoms/std-calendar.orb +280 -215
  19. package/behaviors/registry/atoms/std-circuit-breaker.orb +295 -234
  20. package/behaviors/registry/atoms/std-collision.orb +136 -135
  21. package/behaviors/registry/atoms/std-combat-log.orb +108 -90
  22. package/behaviors/registry/atoms/std-combat.orb +171 -98
  23. package/behaviors/registry/atoms/std-confirmation.orb +28 -300
  24. package/behaviors/registry/atoms/std-dialogue-box.orb +111 -30
  25. package/behaviors/registry/atoms/std-display.orb +491 -587
  26. package/behaviors/registry/atoms/std-drawer.orb +194 -121
  27. package/behaviors/registry/atoms/std-filter.orb +311 -326
  28. package/behaviors/registry/atoms/std-flip-card.orb +223 -177
  29. package/behaviors/registry/atoms/std-gallery.orb +130 -151
  30. package/behaviors/registry/atoms/std-game-audio.orb +133 -72
  31. package/behaviors/registry/atoms/std-game-canvas2d.orb +112 -52
  32. package/behaviors/registry/atoms/std-game-canvas3d.orb +150 -107
  33. package/behaviors/registry/atoms/std-game-hud.orb +87 -20
  34. package/behaviors/registry/atoms/std-game-menu.orb +32 -32
  35. package/behaviors/registry/atoms/std-game-over-screen.orb +100 -33
  36. package/behaviors/registry/atoms/std-gameflow.orb +147 -80
  37. package/behaviors/registry/atoms/std-input.orb +128 -393
  38. package/behaviors/registry/atoms/std-inventory-panel.orb +108 -71
  39. package/behaviors/registry/atoms/std-isometric-canvas.orb +156 -407
  40. package/behaviors/registry/atoms/std-loading.orb +127 -126
  41. package/behaviors/registry/atoms/std-modal.orb +30 -267
  42. package/behaviors/registry/atoms/std-movement.orb +391 -292
  43. package/behaviors/registry/atoms/std-notification.orb +133 -75
  44. package/behaviors/registry/atoms/std-overworld.orb +194 -121
  45. package/behaviors/registry/atoms/std-pagination.orb +120 -53
  46. package/behaviors/registry/atoms/std-physics2d.orb +94 -93
  47. package/behaviors/registry/atoms/std-platformer-canvas.orb +110 -98
  48. package/behaviors/registry/atoms/std-push.orb +172 -36
  49. package/behaviors/registry/atoms/std-quest.orb +552 -449
  50. package/behaviors/registry/atoms/std-rate-limiter.orb +242 -241
  51. package/behaviors/registry/atoms/std-rating.orb +123 -65
  52. package/behaviors/registry/atoms/std-related.orb +202 -26
  53. package/behaviors/registry/atoms/std-score-board.orb +109 -28
  54. package/behaviors/registry/atoms/std-score.orb +210 -146
  55. package/behaviors/registry/atoms/std-search.orb +265 -138
  56. package/behaviors/registry/atoms/std-selection.orb +311 -220
  57. package/behaviors/registry/atoms/std-service-custom-bearer.orb +199 -110
  58. package/behaviors/registry/atoms/std-service-custom-header.orb +206 -117
  59. package/behaviors/registry/atoms/std-service-custom-noauth.orb +197 -108
  60. package/behaviors/registry/atoms/std-service-custom-query.orb +193 -104
  61. package/behaviors/registry/atoms/std-service-email.orb +195 -107
  62. package/behaviors/registry/atoms/std-service-github.orb +216 -122
  63. package/behaviors/registry/atoms/std-service-llm.orb +204 -122
  64. package/behaviors/registry/atoms/std-service-oauth.orb +290 -204
  65. package/behaviors/registry/atoms/std-service-redis.orb +177 -92
  66. package/behaviors/registry/atoms/std-service-storage.orb +211 -122
  67. package/behaviors/registry/atoms/std-service-stripe.orb +236 -154
  68. package/behaviors/registry/atoms/std-service-twilio.orb +221 -137
  69. package/behaviors/registry/atoms/std-service-youtube.orb +327 -241
  70. package/behaviors/registry/atoms/std-simulation-canvas.orb +97 -36
  71. package/behaviors/registry/atoms/std-sort.orb +284 -207
  72. package/behaviors/registry/atoms/std-sprite.orb +150 -74
  73. package/behaviors/registry/atoms/std-tabs.orb +129 -62
  74. package/behaviors/registry/atoms/std-text-effects.orb +251 -190
  75. package/behaviors/registry/atoms/std-theme.orb +193 -135
  76. package/behaviors/registry/atoms/std-timer.orb +320 -344
  77. package/behaviors/registry/atoms/std-undo.orb +278 -199
  78. package/behaviors/registry/atoms/std-upload.orb +112 -111
  79. package/behaviors/registry/atoms/std-validate-on-save.orb +159 -151
  80. package/behaviors/registry/atoms/std-wizard.orb +445 -336
  81. package/behaviors/registry/molecules/std-agent-fix-loop.orb +876 -857
  82. package/behaviors/registry/molecules/std-agent-learner.orb +635 -654
  83. package/behaviors/registry/molecules/std-agent-planner.orb +581 -548
  84. package/behaviors/registry/molecules/std-agent-rag.orb +414 -410
  85. package/behaviors/registry/molecules/std-agent-tool-loop.orb +716 -711
  86. package/behaviors/registry/molecules/std-batch-selected-list.orb +28 -12
  87. package/behaviors/registry/molecules/std-builder-game.orb +86 -28
  88. package/behaviors/registry/molecules/std-calendar-booking.orb +32 -8
  89. package/behaviors/registry/molecules/std-cart.orb +347 -406
  90. package/behaviors/registry/molecules/std-classifier-game.orb +95 -37
  91. package/behaviors/registry/molecules/std-dashboard-tabbed.orb +16 -10
  92. package/behaviors/registry/molecules/std-debugger-game.orb +95 -37
  93. package/behaviors/registry/molecules/std-detail.orb +133 -138
  94. package/behaviors/registry/molecules/std-drawer-master-list.orb +12 -6
  95. package/behaviors/registry/molecules/std-event-handler-game.orb +91 -33
  96. package/behaviors/registry/molecules/std-filtered-list.orb +14 -8
  97. package/behaviors/registry/molecules/std-form-advanced.orb +242 -153
  98. package/behaviors/registry/molecules/std-gallery-filtered.orb +16 -10
  99. package/behaviors/registry/molecules/std-geospatial.orb +175 -122
  100. package/behaviors/registry/molecules/std-inventory.orb +216 -170
  101. package/behaviors/registry/molecules/std-list.orb +280 -205
  102. package/behaviors/registry/molecules/std-messaging.orb +146 -99
  103. package/behaviors/registry/molecules/std-negotiator-game.orb +95 -37
  104. package/behaviors/registry/molecules/std-platformer-game.orb +300 -171
  105. package/behaviors/registry/molecules/std-push-activity-log.orb +32 -8
  106. package/behaviors/registry/molecules/std-puzzle-game.orb +287 -146
  107. package/behaviors/registry/molecules/std-quiz.orb +322 -263
  108. package/behaviors/registry/molecules/std-related-master-detail.orb +21 -15
  109. package/behaviors/registry/molecules/std-sequencer-game.orb +92 -34
  110. package/behaviors/registry/molecules/std-service-content-pipeline.orb +268 -267
  111. package/behaviors/registry/molecules/std-service-custom-api-tester.orb +245 -152
  112. package/behaviors/registry/molecules/std-service-devops-toolkit.orb +633 -294
  113. package/behaviors/registry/molecules/std-service-notification-hub.orb +237 -152
  114. package/behaviors/registry/molecules/std-service-payment-flow.orb +310 -180
  115. package/behaviors/registry/molecules/std-simulator-game.orb +96 -38
  116. package/behaviors/registry/molecules/std-turn-based-battle.orb +247 -137
  117. package/behaviors/registry/molecules/std-wizard-form.orb +60 -9
  118. package/behaviors/registry/organisms/std-agent-assistant.orb +2810 -1833
  119. package/behaviors/registry/organisms/std-agent-builder.orb +6401 -4539
  120. package/behaviors/registry/organisms/std-agent-pipeline.orb +5028 -3497
  121. package/behaviors/registry/organisms/std-agent-reviewer.orb +2219 -1406
  122. package/behaviors/registry/organisms/std-agent-tutor.orb +2069 -1384
  123. package/behaviors/registry/organisms/std-api-gateway.orb +1419 -870
  124. package/behaviors/registry/organisms/std-arcade-game.orb +488 -231
  125. package/behaviors/registry/organisms/std-booking-system.orb +2457 -1467
  126. package/behaviors/registry/organisms/std-cicd-pipeline.orb +1367 -825
  127. package/behaviors/registry/organisms/std-cms.orb +1549 -566
  128. package/behaviors/registry/organisms/std-coding-academy.orb +744 -495
  129. package/behaviors/registry/organisms/std-crm.orb +1997 -1014
  130. package/behaviors/registry/organisms/std-devops-dashboard.orb +2160 -1606
  131. package/behaviors/registry/organisms/std-ecommerce.orb +2279 -1153
  132. package/behaviors/registry/organisms/std-finance-tracker.orb +1375 -727
  133. package/behaviors/registry/organisms/std-healthcare.orb +2940 -1703
  134. package/behaviors/registry/organisms/std-helpdesk.orb +1443 -781
  135. package/behaviors/registry/organisms/std-hr-portal.orb +2361 -1440
  136. package/behaviors/registry/organisms/std-iot-dashboard.orb +1491 -1026
  137. package/behaviors/registry/organisms/std-lms.orb +1629 -1046
  138. package/behaviors/registry/organisms/std-logic-training.orb +321 -134
  139. package/behaviors/registry/organisms/std-platformer-app.orb +855 -417
  140. package/behaviors/registry/organisms/std-project-manager.orb +1795 -877
  141. package/behaviors/registry/organisms/std-puzzle-app.orb +407 -206
  142. package/behaviors/registry/organisms/std-realtime-chat.orb +1436 -844
  143. package/behaviors/registry/organisms/std-rpg-game.orb +1522 -1007
  144. package/behaviors/registry/organisms/std-service-marketplace.orb +2110 -1204
  145. package/behaviors/registry/organisms/std-service-research-assistant.orb +1285 -1078
  146. package/behaviors/registry/organisms/std-social-feed.orb +612 -252
  147. package/behaviors/registry/organisms/std-stem-lab.orb +642 -450
  148. package/behaviors/registry/organisms/std-strategy-game.orb +893 -650
  149. package/behaviors/registry/organisms/std-trading-dashboard.orb +1271 -805
  150. package/dist/behaviors/registry/atoms/std-agent-activity-log.orb +240 -227
  151. package/dist/behaviors/registry/atoms/std-agent-chat-thread.orb +296 -199
  152. package/dist/behaviors/registry/atoms/std-agent-classifier.orb +384 -133
  153. package/dist/behaviors/registry/atoms/std-agent-completion.orb +404 -141
  154. package/dist/behaviors/registry/atoms/std-agent-context-window.orb +904 -607
  155. package/dist/behaviors/registry/atoms/std-agent-conversation.orb +443 -234
  156. package/dist/behaviors/registry/atoms/std-agent-memory.orb +584 -150
  157. package/dist/behaviors/registry/atoms/std-agent-provider.orb +431 -174
  158. package/dist/behaviors/registry/atoms/std-agent-search.orb +217 -61
  159. package/dist/behaviors/registry/atoms/std-agent-session.orb +406 -159
  160. package/dist/behaviors/registry/atoms/std-agent-step-progress.orb +314 -294
  161. package/dist/behaviors/registry/atoms/std-agent-token-gauge.orb +577 -500
  162. package/dist/behaviors/registry/atoms/std-agent-tool-call.orb +328 -138
  163. package/dist/behaviors/registry/atoms/std-async.orb +147 -86
  164. package/dist/behaviors/registry/atoms/std-autoregressive.orb +64 -73
  165. package/dist/behaviors/registry/atoms/std-browse.orb +260 -126
  166. package/dist/behaviors/registry/atoms/std-cache-aside.orb +358 -259
  167. package/dist/behaviors/registry/atoms/std-calendar.orb +280 -215
  168. package/dist/behaviors/registry/atoms/std-circuit-breaker.orb +295 -234
  169. package/dist/behaviors/registry/atoms/std-collision.orb +136 -135
  170. package/dist/behaviors/registry/atoms/std-combat-log.orb +108 -90
  171. package/dist/behaviors/registry/atoms/std-combat.orb +171 -98
  172. package/dist/behaviors/registry/atoms/std-confirmation.orb +28 -300
  173. package/dist/behaviors/registry/atoms/std-dialogue-box.orb +111 -30
  174. package/dist/behaviors/registry/atoms/std-display.orb +491 -587
  175. package/dist/behaviors/registry/atoms/std-drawer.orb +194 -121
  176. package/dist/behaviors/registry/atoms/std-filter.orb +311 -326
  177. package/dist/behaviors/registry/atoms/std-flip-card.orb +223 -177
  178. package/dist/behaviors/registry/atoms/std-gallery.orb +130 -151
  179. package/dist/behaviors/registry/atoms/std-game-audio.orb +133 -72
  180. package/dist/behaviors/registry/atoms/std-game-canvas2d.orb +112 -52
  181. package/dist/behaviors/registry/atoms/std-game-canvas3d.orb +150 -107
  182. package/dist/behaviors/registry/atoms/std-game-hud.orb +87 -20
  183. package/dist/behaviors/registry/atoms/std-game-menu.orb +32 -32
  184. package/dist/behaviors/registry/atoms/std-game-over-screen.orb +100 -33
  185. package/dist/behaviors/registry/atoms/std-gameflow.orb +147 -80
  186. package/dist/behaviors/registry/atoms/std-input.orb +128 -393
  187. package/dist/behaviors/registry/atoms/std-inventory-panel.orb +108 -71
  188. package/dist/behaviors/registry/atoms/std-isometric-canvas.orb +156 -407
  189. package/dist/behaviors/registry/atoms/std-loading.orb +127 -126
  190. package/dist/behaviors/registry/atoms/std-modal.orb +30 -267
  191. package/dist/behaviors/registry/atoms/std-movement.orb +391 -292
  192. package/dist/behaviors/registry/atoms/std-notification.orb +133 -75
  193. package/dist/behaviors/registry/atoms/std-overworld.orb +194 -121
  194. package/dist/behaviors/registry/atoms/std-pagination.orb +120 -53
  195. package/dist/behaviors/registry/atoms/std-physics2d.orb +94 -93
  196. package/dist/behaviors/registry/atoms/std-platformer-canvas.orb +110 -98
  197. package/dist/behaviors/registry/atoms/std-push.orb +172 -36
  198. package/dist/behaviors/registry/atoms/std-quest.orb +552 -449
  199. package/dist/behaviors/registry/atoms/std-rate-limiter.orb +242 -241
  200. package/dist/behaviors/registry/atoms/std-rating.orb +123 -65
  201. package/dist/behaviors/registry/atoms/std-related.orb +202 -26
  202. package/dist/behaviors/registry/atoms/std-score-board.orb +109 -28
  203. package/dist/behaviors/registry/atoms/std-score.orb +210 -146
  204. package/dist/behaviors/registry/atoms/std-search.orb +265 -138
  205. package/dist/behaviors/registry/atoms/std-selection.orb +311 -220
  206. package/dist/behaviors/registry/atoms/std-service-custom-bearer.orb +199 -110
  207. package/dist/behaviors/registry/atoms/std-service-custom-header.orb +206 -117
  208. package/dist/behaviors/registry/atoms/std-service-custom-noauth.orb +197 -108
  209. package/dist/behaviors/registry/atoms/std-service-custom-query.orb +193 -104
  210. package/dist/behaviors/registry/atoms/std-service-email.orb +195 -107
  211. package/dist/behaviors/registry/atoms/std-service-github.orb +216 -122
  212. package/dist/behaviors/registry/atoms/std-service-llm.orb +204 -122
  213. package/dist/behaviors/registry/atoms/std-service-oauth.orb +290 -204
  214. package/dist/behaviors/registry/atoms/std-service-redis.orb +177 -92
  215. package/dist/behaviors/registry/atoms/std-service-storage.orb +211 -122
  216. package/dist/behaviors/registry/atoms/std-service-stripe.orb +236 -154
  217. package/dist/behaviors/registry/atoms/std-service-twilio.orb +221 -137
  218. package/dist/behaviors/registry/atoms/std-service-youtube.orb +327 -241
  219. package/dist/behaviors/registry/atoms/std-simulation-canvas.orb +97 -36
  220. package/dist/behaviors/registry/atoms/std-sort.orb +284 -207
  221. package/dist/behaviors/registry/atoms/std-sprite.orb +150 -74
  222. package/dist/behaviors/registry/atoms/std-tabs.orb +129 -62
  223. package/dist/behaviors/registry/atoms/std-text-effects.orb +251 -190
  224. package/dist/behaviors/registry/atoms/std-theme.orb +193 -135
  225. package/dist/behaviors/registry/atoms/std-timer.orb +320 -344
  226. package/dist/behaviors/registry/atoms/std-undo.orb +278 -199
  227. package/dist/behaviors/registry/atoms/std-upload.orb +112 -111
  228. package/dist/behaviors/registry/atoms/std-validate-on-save.orb +159 -151
  229. package/dist/behaviors/registry/atoms/std-wizard.orb +445 -336
  230. package/dist/behaviors/registry/molecules/std-agent-fix-loop.orb +876 -857
  231. package/dist/behaviors/registry/molecules/std-agent-learner.orb +635 -654
  232. package/dist/behaviors/registry/molecules/std-agent-planner.orb +581 -548
  233. package/dist/behaviors/registry/molecules/std-agent-rag.orb +414 -410
  234. package/dist/behaviors/registry/molecules/std-agent-tool-loop.orb +716 -711
  235. package/dist/behaviors/registry/molecules/std-batch-selected-list.orb +28 -12
  236. package/dist/behaviors/registry/molecules/std-builder-game.orb +86 -28
  237. package/dist/behaviors/registry/molecules/std-calendar-booking.orb +32 -8
  238. package/dist/behaviors/registry/molecules/std-cart.orb +347 -406
  239. package/dist/behaviors/registry/molecules/std-classifier-game.orb +95 -37
  240. package/dist/behaviors/registry/molecules/std-dashboard-tabbed.orb +16 -10
  241. package/dist/behaviors/registry/molecules/std-debugger-game.orb +95 -37
  242. package/dist/behaviors/registry/molecules/std-detail.orb +133 -138
  243. package/dist/behaviors/registry/molecules/std-drawer-master-list.orb +12 -6
  244. package/dist/behaviors/registry/molecules/std-event-handler-game.orb +91 -33
  245. package/dist/behaviors/registry/molecules/std-filtered-list.orb +14 -8
  246. package/dist/behaviors/registry/molecules/std-form-advanced.orb +242 -153
  247. package/dist/behaviors/registry/molecules/std-gallery-filtered.orb +16 -10
  248. package/dist/behaviors/registry/molecules/std-geospatial.orb +175 -122
  249. package/dist/behaviors/registry/molecules/std-inventory.orb +216 -170
  250. package/dist/behaviors/registry/molecules/std-list.orb +280 -205
  251. package/dist/behaviors/registry/molecules/std-messaging.orb +146 -99
  252. package/dist/behaviors/registry/molecules/std-negotiator-game.orb +95 -37
  253. package/dist/behaviors/registry/molecules/std-platformer-game.orb +300 -171
  254. package/dist/behaviors/registry/molecules/std-push-activity-log.orb +32 -8
  255. package/dist/behaviors/registry/molecules/std-puzzle-game.orb +287 -146
  256. package/dist/behaviors/registry/molecules/std-quiz.orb +322 -263
  257. package/dist/behaviors/registry/molecules/std-related-master-detail.orb +21 -15
  258. package/dist/behaviors/registry/molecules/std-sequencer-game.orb +92 -34
  259. package/dist/behaviors/registry/molecules/std-service-content-pipeline.orb +268 -267
  260. package/dist/behaviors/registry/molecules/std-service-custom-api-tester.orb +245 -152
  261. package/dist/behaviors/registry/molecules/std-service-devops-toolkit.orb +633 -294
  262. package/dist/behaviors/registry/molecules/std-service-notification-hub.orb +237 -152
  263. package/dist/behaviors/registry/molecules/std-service-payment-flow.orb +310 -180
  264. package/dist/behaviors/registry/molecules/std-simulator-game.orb +96 -38
  265. package/dist/behaviors/registry/molecules/std-turn-based-battle.orb +247 -137
  266. package/dist/behaviors/registry/molecules/std-wizard-form.orb +60 -9
  267. package/dist/behaviors/registry/organisms/std-agent-assistant.orb +2810 -1833
  268. package/dist/behaviors/registry/organisms/std-agent-builder.orb +6401 -4539
  269. package/dist/behaviors/registry/organisms/std-agent-pipeline.orb +5028 -3497
  270. package/dist/behaviors/registry/organisms/std-agent-reviewer.orb +2219 -1406
  271. package/dist/behaviors/registry/organisms/std-agent-tutor.orb +2069 -1384
  272. package/dist/behaviors/registry/organisms/std-api-gateway.orb +1419 -870
  273. package/dist/behaviors/registry/organisms/std-arcade-game.orb +488 -231
  274. package/dist/behaviors/registry/organisms/std-booking-system.orb +2457 -1467
  275. package/dist/behaviors/registry/organisms/std-cicd-pipeline.orb +1367 -825
  276. package/dist/behaviors/registry/organisms/std-cms.orb +1549 -566
  277. package/dist/behaviors/registry/organisms/std-coding-academy.orb +744 -495
  278. package/dist/behaviors/registry/organisms/std-crm.orb +1997 -1014
  279. package/dist/behaviors/registry/organisms/std-devops-dashboard.orb +2160 -1606
  280. package/dist/behaviors/registry/organisms/std-ecommerce.orb +2279 -1153
  281. package/dist/behaviors/registry/organisms/std-finance-tracker.orb +1375 -727
  282. package/dist/behaviors/registry/organisms/std-healthcare.orb +2940 -1703
  283. package/dist/behaviors/registry/organisms/std-helpdesk.orb +1443 -781
  284. package/dist/behaviors/registry/organisms/std-hr-portal.orb +2361 -1440
  285. package/dist/behaviors/registry/organisms/std-iot-dashboard.orb +1491 -1026
  286. package/dist/behaviors/registry/organisms/std-lms.orb +1629 -1046
  287. package/dist/behaviors/registry/organisms/std-logic-training.orb +321 -134
  288. package/dist/behaviors/registry/organisms/std-platformer-app.orb +855 -417
  289. package/dist/behaviors/registry/organisms/std-project-manager.orb +1795 -877
  290. package/dist/behaviors/registry/organisms/std-puzzle-app.orb +407 -206
  291. package/dist/behaviors/registry/organisms/std-realtime-chat.orb +1436 -844
  292. package/dist/behaviors/registry/organisms/std-rpg-game.orb +1522 -1007
  293. package/dist/behaviors/registry/organisms/std-service-marketplace.orb +2110 -1204
  294. package/dist/behaviors/registry/organisms/std-service-research-assistant.orb +1285 -1078
  295. package/dist/behaviors/registry/organisms/std-social-feed.orb +612 -252
  296. package/dist/behaviors/registry/organisms/std-stem-lab.orb +642 -450
  297. package/dist/behaviors/registry/organisms/std-strategy-game.orb +893 -650
  298. package/dist/behaviors/registry/organisms/std-trading-dashboard.orb +1271 -805
  299. package/dist/index.js +16 -4
  300. package/dist/index.js.map +1 -1
  301. package/dist/modules/core.js +16 -4
  302. package/dist/modules/core.js.map +1 -1
  303. package/dist/modules/index.js +16 -4
  304. package/dist/modules/index.js.map +1 -1
  305. package/dist/registry.js +16 -4
  306. package/dist/registry.js.map +1 -1
  307. package/package.json +2 -2
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "std-api-gateway",
3
3
  "version": "1.0.0",
4
- "description": "API gateway management organism. Composes: stdList(Route) + stdCircuitBreaker(Backend) + stdDisplay(Analytics)",
4
+ "description": "std-api-gateway as a Function",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "RouteOrbital",
8
8
  "entity": {
9
9
  "name": "Route",
10
- "persistence": "persistent",
11
10
  "collection": "routes",
11
+ "persistence": "persistent",
12
12
  "fields": [
13
13
  {
14
14
  "name": "id",
@@ -23,7 +23,6 @@
23
23
  {
24
24
  "name": "method",
25
25
  "type": "string",
26
- "required": true,
27
26
  "values": [
28
27
  "GET",
29
28
  "POST",
@@ -51,23 +50,79 @@
51
50
  "traits": [
52
51
  {
53
52
  "name": "RouteBrowse",
54
- "linkedEntity": "Route",
55
53
  "category": "interaction",
54
+ "linkedEntity": "Route",
55
+ "emits": [
56
+ {
57
+ "event": "RouteLoaded",
58
+ "description": "Fired when Route finishes loading",
59
+ "scope": "internal",
60
+ "payload": [
61
+ {
62
+ "name": "id",
63
+ "type": "string",
64
+ "required": true
65
+ },
66
+ {
67
+ "name": "path",
68
+ "type": "string",
69
+ "required": true
70
+ },
71
+ {
72
+ "name": "method",
73
+ "type": "string"
74
+ },
75
+ {
76
+ "name": "backend",
77
+ "type": "string",
78
+ "required": true
79
+ },
80
+ {
81
+ "name": "rateLimit",
82
+ "type": "number"
83
+ },
84
+ {
85
+ "name": "pendingId",
86
+ "type": "string"
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "event": "RouteLoadFailed",
92
+ "description": "Fired when Route fails to load",
93
+ "scope": "internal",
94
+ "payload": [
95
+ {
96
+ "name": "message",
97
+ "type": "string"
98
+ }
99
+ ]
100
+ }
101
+ ],
56
102
  "listens": [
57
103
  {
58
104
  "event": "ROUTE_CREATED",
59
105
  "triggers": "INIT",
60
- "scope": "external"
106
+ "source": {
107
+ "kind": "trait",
108
+ "trait": "RouteCreate"
109
+ }
61
110
  },
62
111
  {
63
112
  "event": "ROUTE_UPDATED",
64
113
  "triggers": "INIT",
65
- "scope": "external"
114
+ "source": {
115
+ "kind": "trait",
116
+ "trait": "RouteEdit"
117
+ }
66
118
  },
67
119
  {
68
120
  "event": "ROUTE_DELETED",
69
121
  "triggers": "INIT",
70
- "scope": "external"
122
+ "source": {
123
+ "kind": "trait",
124
+ "trait": "RouteDelete"
125
+ }
71
126
  }
72
127
  ],
73
128
  "stateMachine": {
@@ -83,12 +138,22 @@
83
138
  "name": "Initialize"
84
139
  },
85
140
  {
86
- "key": "CREATE",
87
- "name": "CREATE"
141
+ "key": "RouteLoaded",
142
+ "name": "Route loaded"
143
+ },
144
+ {
145
+ "key": "RouteLoadFailed",
146
+ "name": "Route load failed",
147
+ "payload": [
148
+ {
149
+ "name": "message",
150
+ "type": "string"
151
+ }
152
+ ]
88
153
  },
89
154
  {
90
155
  "key": "VIEW",
91
- "name": "VIEW",
156
+ "name": "View",
92
157
  "payload": [
93
158
  {
94
159
  "name": "id",
@@ -103,7 +168,7 @@
103
168
  },
104
169
  {
105
170
  "key": "EDIT",
106
- "name": "EDIT",
171
+ "name": "Edit",
107
172
  "payload": [
108
173
  {
109
174
  "name": "id",
@@ -118,7 +183,7 @@
118
183
  },
119
184
  {
120
185
  "key": "DELETE",
121
- "name": "DELETE",
186
+ "name": "Delete",
122
187
  "payload": [
123
188
  {
124
189
  "name": "id",
@@ -150,9 +215,9 @@
150
215
  "appName": "API Gateway",
151
216
  "navItems": [
152
217
  {
218
+ "icon": "git-branch",
153
219
  "label": "Routes",
154
- "href": "/routes",
155
- "icon": "git-branch"
220
+ "href": "/routes"
156
221
  },
157
222
  {
158
223
  "label": "Backends",
@@ -160,56 +225,56 @@
160
225
  "icon": "server"
161
226
  },
162
227
  {
228
+ "icon": "bar-chart-2",
163
229
  "label": "Analytics",
164
- "href": "/analytics",
165
- "icon": "bar-chart-2"
230
+ "href": "/analytics"
166
231
  }
167
232
  ],
168
233
  "children": [
169
234
  {
235
+ "className": "max-w-5xl mx-auto w-full",
236
+ "gap": "lg",
170
237
  "type": "stack",
171
238
  "direction": "vertical",
172
- "gap": "lg",
173
- "className": "max-w-5xl mx-auto w-full",
174
239
  "children": [
175
240
  {
176
- "type": "stack",
177
241
  "direction": "horizontal",
178
242
  "gap": "md",
243
+ "type": "stack",
179
244
  "justify": "space-between",
180
245
  "align": "center",
181
246
  "children": [
182
247
  {
183
- "type": "stack",
184
- "direction": "horizontal",
185
- "gap": "sm",
186
- "align": "center",
187
248
  "children": [
188
249
  {
189
250
  "type": "icon",
190
- "name": "git-branch",
191
- "size": "lg"
251
+ "size": "lg",
252
+ "name": "git-branch"
192
253
  },
193
254
  {
255
+ "variant": "h2",
194
256
  "type": "typography",
195
- "content": "Routes",
196
- "variant": "h2"
257
+ "content": "Routes"
197
258
  }
198
- ]
259
+ ],
260
+ "gap": "sm",
261
+ "type": "stack",
262
+ "align": "center",
263
+ "direction": "horizontal"
199
264
  },
200
265
  {
201
- "type": "stack",
202
- "direction": "horizontal",
203
266
  "gap": "sm",
204
267
  "children": [
205
268
  {
206
- "type": "button",
207
- "label": "Create Route",
208
269
  "event": "CREATE",
209
- "variant": "primary",
210
- "icon": "plus"
270
+ "icon": "plus",
271
+ "label": "Create Route",
272
+ "type": "button",
273
+ "variant": "primary"
211
274
  }
212
- ]
275
+ ],
276
+ "type": "stack",
277
+ "direction": "horizontal"
213
278
  }
214
279
  ]
215
280
  },
@@ -217,54 +282,54 @@
217
282
  "type": "divider"
218
283
  },
219
284
  {
220
- "type": "data-list",
221
- "entity": "Route",
222
- "emptyIcon": "inbox",
223
285
  "emptyTitle": "No routes configured",
286
+ "columns": [
287
+ {
288
+ "variant": "badge",
289
+ "name": "method"
290
+ },
291
+ {
292
+ "variant": "h3",
293
+ "icon": "git-branch",
294
+ "name": "path"
295
+ },
296
+ {
297
+ "variant": "body",
298
+ "name": "backend"
299
+ },
300
+ {
301
+ "name": "rateLimit",
302
+ "format": "number",
303
+ "label": "Rate Limit",
304
+ "variant": "caption"
305
+ }
306
+ ],
307
+ "gap": "sm",
224
308
  "emptyDescription": "Add API routes to your gateway.",
309
+ "type": "data-list",
225
310
  "itemActions": [
226
311
  {
227
- "label": "View",
228
312
  "event": "VIEW",
229
313
  "variant": "ghost",
314
+ "label": "View",
230
315
  "size": "sm"
231
316
  },
232
317
  {
233
318
  "label": "Edit",
234
- "event": "EDIT",
319
+ "size": "sm",
235
320
  "variant": "ghost",
236
- "size": "sm"
321
+ "event": "EDIT"
237
322
  },
238
323
  {
239
324
  "label": "Delete",
240
- "event": "DELETE",
241
325
  "variant": "danger",
242
- "size": "sm"
243
- }
244
- ],
245
- "columns": [
246
- {
247
- "name": "method",
248
- "variant": "badge"
249
- },
250
- {
251
- "name": "path",
252
- "variant": "h3",
253
- "icon": "git-branch"
254
- },
255
- {
256
- "name": "backend",
257
- "variant": "body"
258
- },
259
- {
260
- "name": "rateLimit",
261
- "label": "Rate Limit",
262
- "variant": "caption",
263
- "format": "number"
326
+ "size": "sm",
327
+ "event": "DELETE"
264
328
  }
265
329
  ],
266
330
  "variant": "card",
267
- "gap": "sm"
331
+ "emptyIcon": "inbox",
332
+ "entity": "Route"
268
333
  }
269
334
  ]
270
335
  }
@@ -274,20 +339,68 @@
274
339
  ]
275
340
  }
276
341
  ]
277
- }
342
+ },
343
+ "scope": "collection"
278
344
  },
279
345
  {
280
346
  "name": "RouteCreate",
281
- "linkedEntity": "Route",
282
347
  "category": "interaction",
348
+ "linkedEntity": "Route",
283
349
  "emits": [
284
350
  {
285
- "event": "SAVE",
286
- "scope": "internal"
351
+ "event": "ROUTE_CREATED",
352
+ "scope": "external",
353
+ "payload": [
354
+ {
355
+ "name": "id",
356
+ "type": "string"
357
+ }
358
+ ]
287
359
  },
288
360
  {
289
- "event": "ROUTE_CREATED",
290
- "scope": "external"
361
+ "event": "RouteLoaded",
362
+ "description": "Fired when Route finishes loading",
363
+ "scope": "internal",
364
+ "payload": [
365
+ {
366
+ "name": "id",
367
+ "type": "string",
368
+ "required": true
369
+ },
370
+ {
371
+ "name": "path",
372
+ "type": "string",
373
+ "required": true
374
+ },
375
+ {
376
+ "name": "method",
377
+ "type": "string"
378
+ },
379
+ {
380
+ "name": "backend",
381
+ "type": "string",
382
+ "required": true
383
+ },
384
+ {
385
+ "name": "rateLimit",
386
+ "type": "number"
387
+ },
388
+ {
389
+ "name": "pendingId",
390
+ "type": "string"
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ "event": "RouteLoadFailed",
396
+ "description": "Fired when Route fails to load",
397
+ "scope": "internal",
398
+ "payload": [
399
+ {
400
+ "name": "message",
401
+ "type": "string"
402
+ }
403
+ ]
291
404
  }
292
405
  ],
293
406
  "stateMachine": {
@@ -307,7 +420,7 @@
307
420
  },
308
421
  {
309
422
  "key": "CREATE",
310
- "name": "Open"
423
+ "name": "Create"
311
424
  },
312
425
  {
313
426
  "key": "CLOSE",
@@ -323,6 +436,24 @@
323
436
  "required": true
324
437
  }
325
438
  ]
439
+ },
440
+ {
441
+ "key": "ROUTE_CREATED",
442
+ "name": "Route Created"
443
+ },
444
+ {
445
+ "key": "RouteLoaded",
446
+ "name": "Route loaded"
447
+ },
448
+ {
449
+ "key": "RouteLoadFailed",
450
+ "name": "Route load failed",
451
+ "payload": [
452
+ {
453
+ "name": "message",
454
+ "type": "string"
455
+ }
456
+ ]
326
457
  }
327
458
  ],
328
459
  "transitions": [
@@ -344,50 +475,56 @@
344
475
  "effects": [
345
476
  [
346
477
  "fetch",
347
- "Route"
478
+ "Route",
479
+ {
480
+ "emit": {
481
+ "failure": "RouteLoadFailed",
482
+ "success": "RouteLoaded"
483
+ }
484
+ }
348
485
  ],
349
486
  [
350
487
  "render-ui",
351
488
  "modal",
352
489
  {
353
- "type": "stack",
354
- "direction": "vertical",
355
- "gap": "md",
356
490
  "children": [
357
491
  {
358
- "type": "stack",
359
- "direction": "horizontal",
360
- "gap": "sm",
361
492
  "children": [
362
493
  {
363
- "type": "icon",
494
+ "size": "md",
364
495
  "name": "plus-circle",
365
- "size": "md"
496
+ "type": "icon"
366
497
  },
367
498
  {
368
- "type": "typography",
369
499
  "content": "Create Route",
370
- "variant": "h3"
500
+ "variant": "h3",
501
+ "type": "typography"
371
502
  }
372
- ]
503
+ ],
504
+ "direction": "horizontal",
505
+ "gap": "sm",
506
+ "type": "stack"
373
507
  },
374
508
  {
375
509
  "type": "divider"
376
510
  },
377
511
  {
378
- "type": "form-section",
379
- "entity": "Route",
380
- "mode": "create",
381
- "submitEvent": "SAVE",
382
- "cancelEvent": "CLOSE",
383
512
  "fields": [
384
513
  "path",
385
514
  "method",
386
515
  "backend",
387
516
  "rateLimit"
388
- ]
517
+ ],
518
+ "mode": "create",
519
+ "cancelEvent": "CLOSE",
520
+ "type": "form-section",
521
+ "entity": "Route",
522
+ "submitEvent": "SAVE"
389
523
  }
390
- ]
524
+ ],
525
+ "direction": "vertical",
526
+ "type": "stack",
527
+ "gap": "md"
391
528
  }
392
529
  ]
393
530
  ]
@@ -402,6 +539,13 @@
402
539
  "modal",
403
540
  null
404
541
  ],
542
+ [
543
+ "render-ui",
544
+ "main",
545
+ {
546
+ "type": "box"
547
+ }
548
+ ],
405
549
  [
406
550
  "notify",
407
551
  "Cancelled",
@@ -425,6 +569,13 @@
425
569
  "modal",
426
570
  null
427
571
  ],
572
+ [
573
+ "render-ui",
574
+ "main",
575
+ {
576
+ "type": "box"
577
+ }
578
+ ],
428
579
  [
429
580
  "emit",
430
581
  "ROUTE_CREATED"
@@ -432,20 +583,68 @@
432
583
  ]
433
584
  }
434
585
  ]
435
- }
586
+ },
587
+ "scope": "collection"
436
588
  },
437
589
  {
438
590
  "name": "RouteEdit",
439
- "linkedEntity": "Route",
440
591
  "category": "interaction",
592
+ "linkedEntity": "Route",
441
593
  "emits": [
442
594
  {
443
- "event": "SAVE",
444
- "scope": "internal"
595
+ "event": "ROUTE_UPDATED",
596
+ "scope": "external",
597
+ "payload": [
598
+ {
599
+ "name": "id",
600
+ "type": "string"
601
+ }
602
+ ]
445
603
  },
446
604
  {
447
- "event": "ROUTE_UPDATED",
448
- "scope": "external"
605
+ "event": "RouteLoaded",
606
+ "description": "Fired when Route finishes loading",
607
+ "scope": "internal",
608
+ "payload": [
609
+ {
610
+ "name": "id",
611
+ "type": "string",
612
+ "required": true
613
+ },
614
+ {
615
+ "name": "path",
616
+ "type": "string",
617
+ "required": true
618
+ },
619
+ {
620
+ "name": "method",
621
+ "type": "string"
622
+ },
623
+ {
624
+ "name": "backend",
625
+ "type": "string",
626
+ "required": true
627
+ },
628
+ {
629
+ "name": "rateLimit",
630
+ "type": "number"
631
+ },
632
+ {
633
+ "name": "pendingId",
634
+ "type": "string"
635
+ }
636
+ ]
637
+ },
638
+ {
639
+ "event": "RouteLoadFailed",
640
+ "description": "Fired when Route fails to load",
641
+ "scope": "internal",
642
+ "payload": [
643
+ {
644
+ "name": "message",
645
+ "type": "string"
646
+ }
647
+ ]
449
648
  }
450
649
  ],
451
650
  "stateMachine": {
@@ -465,7 +664,7 @@
465
664
  },
466
665
  {
467
666
  "key": "EDIT",
468
- "name": "Open",
667
+ "name": "Edit",
469
668
  "payload": [
470
669
  {
471
670
  "name": "id",
@@ -488,6 +687,24 @@
488
687
  "required": true
489
688
  }
490
689
  ]
690
+ },
691
+ {
692
+ "key": "ROUTE_UPDATED",
693
+ "name": "Route Updated"
694
+ },
695
+ {
696
+ "key": "RouteLoaded",
697
+ "name": "Route loaded"
698
+ },
699
+ {
700
+ "key": "RouteLoadFailed",
701
+ "name": "Route load failed",
702
+ "payload": [
703
+ {
704
+ "name": "message",
705
+ "type": "string"
706
+ }
707
+ ]
491
708
  }
492
709
  ],
493
710
  "transitions": [
@@ -511,40 +728,41 @@
511
728
  "fetch",
512
729
  "Route",
513
730
  {
514
- "id": "@payload.id"
731
+ "id": "@payload.id",
732
+ "emit": {
733
+ "success": "RouteLoaded",
734
+ "failure": "RouteLoadFailed"
735
+ }
515
736
  }
516
737
  ],
517
738
  [
518
739
  "render-ui",
519
740
  "modal",
520
741
  {
521
- "type": "stack",
522
- "direction": "vertical",
523
- "gap": "md",
524
742
  "children": [
525
743
  {
526
- "type": "stack",
527
- "direction": "horizontal",
528
- "gap": "sm",
529
744
  "children": [
530
745
  {
531
746
  "type": "icon",
532
- "name": "edit",
533
- "size": "md"
747
+ "size": "md",
748
+ "name": "edit"
534
749
  },
535
750
  {
536
- "type": "typography",
751
+ "variant": "h3",
537
752
  "content": "Edit Route",
538
- "variant": "h3"
753
+ "type": "typography"
539
754
  }
540
- ]
755
+ ],
756
+ "direction": "horizontal",
757
+ "type": "stack",
758
+ "gap": "sm"
541
759
  },
542
760
  {
543
761
  "type": "divider"
544
762
  },
545
763
  {
764
+ "entityId": "@entity.id",
546
765
  "type": "form-section",
547
- "entity": "Route",
548
766
  "mode": "edit",
549
767
  "submitEvent": "SAVE",
550
768
  "cancelEvent": "CLOSE",
@@ -554,9 +772,12 @@
554
772
  "backend",
555
773
  "rateLimit"
556
774
  ],
557
- "entityId": "@entity.id"
775
+ "entity": "Route"
558
776
  }
559
- ]
777
+ ],
778
+ "gap": "md",
779
+ "type": "stack",
780
+ "direction": "vertical"
560
781
  }
561
782
  ]
562
783
  ]
@@ -571,6 +792,13 @@
571
792
  "modal",
572
793
  null
573
794
  ],
795
+ [
796
+ "render-ui",
797
+ "main",
798
+ {
799
+ "type": "box"
800
+ }
801
+ ],
574
802
  [
575
803
  "notify",
576
804
  "Cancelled",
@@ -594,6 +822,13 @@
594
822
  "modal",
595
823
  null
596
824
  ],
825
+ [
826
+ "render-ui",
827
+ "main",
828
+ {
829
+ "type": "box"
830
+ }
831
+ ],
597
832
  [
598
833
  "emit",
599
834
  "ROUTE_UPDATED"
@@ -601,16 +836,58 @@
601
836
  ]
602
837
  }
603
838
  ]
604
- }
839
+ },
840
+ "scope": "collection"
605
841
  },
606
842
  {
607
843
  "name": "RouteView",
608
- "linkedEntity": "Route",
609
844
  "category": "interaction",
845
+ "linkedEntity": "Route",
610
846
  "emits": [
611
847
  {
612
- "event": "SAVE",
613
- "scope": "internal"
848
+ "event": "RouteLoaded",
849
+ "description": "Fired when Route finishes loading",
850
+ "scope": "internal",
851
+ "payload": [
852
+ {
853
+ "name": "id",
854
+ "type": "string",
855
+ "required": true
856
+ },
857
+ {
858
+ "name": "path",
859
+ "type": "string",
860
+ "required": true
861
+ },
862
+ {
863
+ "name": "method",
864
+ "type": "string"
865
+ },
866
+ {
867
+ "name": "backend",
868
+ "type": "string",
869
+ "required": true
870
+ },
871
+ {
872
+ "name": "rateLimit",
873
+ "type": "number"
874
+ },
875
+ {
876
+ "name": "pendingId",
877
+ "type": "string"
878
+ }
879
+ ]
880
+ },
881
+ {
882
+ "event": "RouteLoadFailed",
883
+ "description": "Fired when Route fails to load",
884
+ "scope": "internal",
885
+ "payload": [
886
+ {
887
+ "name": "message",
888
+ "type": "string"
889
+ }
890
+ ]
614
891
  }
615
892
  ],
616
893
  "stateMachine": {
@@ -630,7 +907,7 @@
630
907
  },
631
908
  {
632
909
  "key": "VIEW",
633
- "name": "Open",
910
+ "name": "View",
634
911
  "payload": [
635
912
  {
636
913
  "name": "id",
@@ -653,6 +930,20 @@
653
930
  "required": true
654
931
  }
655
932
  ]
933
+ },
934
+ {
935
+ "key": "RouteLoaded",
936
+ "name": "Route loaded"
937
+ },
938
+ {
939
+ "key": "RouteLoadFailed",
940
+ "name": "Route load failed",
941
+ "payload": [
942
+ {
943
+ "name": "message",
944
+ "type": "string"
945
+ }
946
+ ]
656
947
  }
657
948
  ],
658
949
  "transitions": [
@@ -676,7 +967,11 @@
676
967
  "fetch",
677
968
  "Route",
678
969
  {
679
- "id": "@payload.id"
970
+ "id": "@payload.id",
971
+ "emit": {
972
+ "failure": "RouteLoadFailed",
973
+ "success": "RouteLoaded"
974
+ }
680
975
  }
681
976
  ],
682
977
  [
@@ -685,23 +980,22 @@
685
980
  {
686
981
  "type": "stack",
687
982
  "direction": "vertical",
688
- "gap": "md",
689
983
  "children": [
690
984
  {
691
- "type": "stack",
692
- "direction": "horizontal",
693
985
  "gap": "sm",
986
+ "direction": "horizontal",
987
+ "type": "stack",
694
988
  "align": "center",
695
989
  "children": [
696
990
  {
991
+ "size": "md",
697
992
  "type": "icon",
698
- "name": "eye",
699
- "size": "md"
993
+ "name": "eye"
700
994
  },
701
995
  {
702
- "type": "typography",
996
+ "content": "@entity.path",
703
997
  "variant": "h3",
704
- "content": "@entity.path"
998
+ "type": "typography"
705
999
  }
706
1000
  ]
707
1001
  },
@@ -709,98 +1003,99 @@
709
1003
  "type": "divider"
710
1004
  },
711
1005
  {
712
- "type": "stack",
713
- "direction": "horizontal",
714
1006
  "gap": "md",
1007
+ "direction": "horizontal",
1008
+ "type": "stack",
715
1009
  "children": [
716
1010
  {
717
- "type": "typography",
718
1011
  "variant": "caption",
719
- "content": "Path"
1012
+ "content": "Path",
1013
+ "type": "typography"
720
1014
  },
721
1015
  {
1016
+ "content": "@entity.path",
722
1017
  "type": "typography",
723
- "variant": "body",
724
- "content": "@entity.path"
1018
+ "variant": "body"
725
1019
  }
726
1020
  ]
727
1021
  },
728
1022
  {
729
- "type": "stack",
730
1023
  "direction": "horizontal",
731
- "gap": "md",
1024
+ "type": "stack",
732
1025
  "children": [
733
1026
  {
734
- "type": "typography",
735
1027
  "variant": "caption",
736
- "content": "Method"
1028
+ "content": "Method",
1029
+ "type": "typography"
737
1030
  },
738
1031
  {
739
1032
  "type": "typography",
740
1033
  "variant": "body",
741
1034
  "content": "@entity.method"
742
1035
  }
743
- ]
1036
+ ],
1037
+ "gap": "md"
744
1038
  },
745
1039
  {
746
- "type": "stack",
747
- "direction": "horizontal",
748
1040
  "gap": "md",
1041
+ "direction": "horizontal",
749
1042
  "children": [
750
1043
  {
1044
+ "content": "Backend",
751
1045
  "type": "typography",
752
- "variant": "caption",
753
- "content": "Backend"
1046
+ "variant": "caption"
754
1047
  },
755
1048
  {
756
1049
  "type": "typography",
757
1050
  "variant": "body",
758
1051
  "content": "@entity.backend"
759
1052
  }
760
- ]
1053
+ ],
1054
+ "type": "stack"
761
1055
  },
762
1056
  {
763
- "type": "stack",
764
- "direction": "horizontal",
765
- "gap": "md",
766
1057
  "children": [
767
1058
  {
768
1059
  "type": "typography",
769
- "variant": "caption",
770
- "content": "Rate Limit"
1060
+ "content": "Rate Limit",
1061
+ "variant": "caption"
771
1062
  },
772
1063
  {
773
1064
  "type": "typography",
774
1065
  "variant": "body",
775
1066
  "content": "@entity.rateLimit"
776
1067
  }
777
- ]
1068
+ ],
1069
+ "gap": "md",
1070
+ "direction": "horizontal",
1071
+ "type": "stack"
778
1072
  },
779
1073
  {
780
1074
  "type": "divider"
781
1075
  },
782
1076
  {
783
- "type": "stack",
784
- "direction": "horizontal",
785
- "gap": "sm",
786
1077
  "justify": "end",
1078
+ "direction": "horizontal",
787
1079
  "children": [
788
1080
  {
789
1081
  "type": "button",
790
- "label": "Edit",
791
- "event": "EDIT",
792
1082
  "variant": "primary",
1083
+ "event": "EDIT",
1084
+ "label": "Edit",
793
1085
  "icon": "edit"
794
1086
  },
795
1087
  {
796
- "type": "button",
797
1088
  "label": "Close",
798
- "event": "CLOSE",
799
- "variant": "ghost"
800
- }
801
- ]
1089
+ "variant": "ghost",
1090
+ "type": "button",
1091
+ "event": "CLOSE"
1092
+ }
1093
+ ],
1094
+ "gap": "sm",
1095
+ "type": "stack"
802
1096
  }
803
- ]
1097
+ ],
1098
+ "gap": "md"
804
1099
  }
805
1100
  ]
806
1101
  ]
@@ -815,6 +1110,13 @@
815
1110
  "modal",
816
1111
  null
817
1112
  ],
1113
+ [
1114
+ "render-ui",
1115
+ "main",
1116
+ {
1117
+ "type": "box"
1118
+ }
1119
+ ],
818
1120
  [
819
1121
  "notify",
820
1122
  "Cancelled",
@@ -831,24 +1133,79 @@
831
1133
  "render-ui",
832
1134
  "modal",
833
1135
  null
1136
+ ],
1137
+ [
1138
+ "render-ui",
1139
+ "main",
1140
+ {
1141
+ "type": "box"
1142
+ }
834
1143
  ]
835
1144
  ]
836
1145
  }
837
1146
  ]
838
- }
1147
+ },
1148
+ "scope": "collection"
839
1149
  },
840
1150
  {
841
1151
  "name": "RouteDelete",
842
- "linkedEntity": "Route",
843
1152
  "category": "interaction",
1153
+ "linkedEntity": "Route",
844
1154
  "emits": [
845
1155
  {
846
- "event": "CONFIRM_DELETE",
847
- "scope": "internal"
1156
+ "event": "ROUTE_DELETED",
1157
+ "scope": "external",
1158
+ "payload": [
1159
+ {
1160
+ "name": "id",
1161
+ "type": "string"
1162
+ }
1163
+ ]
848
1164
  },
849
1165
  {
850
- "event": "ROUTE_DELETED",
851
- "scope": "external"
1166
+ "event": "RouteLoaded",
1167
+ "description": "Fired when Route finishes loading",
1168
+ "scope": "internal",
1169
+ "payload": [
1170
+ {
1171
+ "name": "id",
1172
+ "type": "string",
1173
+ "required": true
1174
+ },
1175
+ {
1176
+ "name": "path",
1177
+ "type": "string",
1178
+ "required": true
1179
+ },
1180
+ {
1181
+ "name": "method",
1182
+ "type": "string"
1183
+ },
1184
+ {
1185
+ "name": "backend",
1186
+ "type": "string",
1187
+ "required": true
1188
+ },
1189
+ {
1190
+ "name": "rateLimit",
1191
+ "type": "number"
1192
+ },
1193
+ {
1194
+ "name": "pendingId",
1195
+ "type": "string"
1196
+ }
1197
+ ]
1198
+ },
1199
+ {
1200
+ "event": "RouteLoadFailed",
1201
+ "description": "Fired when Route fails to load",
1202
+ "scope": "internal",
1203
+ "payload": [
1204
+ {
1205
+ "name": "message",
1206
+ "type": "string"
1207
+ }
1208
+ ]
852
1209
  }
853
1210
  ],
854
1211
  "stateMachine": {
@@ -868,7 +1225,7 @@
868
1225
  },
869
1226
  {
870
1227
  "key": "DELETE",
871
- "name": "Request Confirmation",
1228
+ "name": "Delete",
872
1229
  "payload": [
873
1230
  {
874
1231
  "name": "id",
@@ -879,7 +1236,7 @@
879
1236
  },
880
1237
  {
881
1238
  "key": "CONFIRM_DELETE",
882
- "name": "Confirm"
1239
+ "name": "Confirm Delete"
883
1240
  },
884
1241
  {
885
1242
  "key": "CANCEL",
@@ -888,6 +1245,24 @@
888
1245
  {
889
1246
  "key": "CLOSE",
890
1247
  "name": "Close"
1248
+ },
1249
+ {
1250
+ "key": "ROUTE_DELETED",
1251
+ "name": "Route Deleted"
1252
+ },
1253
+ {
1254
+ "key": "RouteLoaded",
1255
+ "name": "Route loaded"
1256
+ },
1257
+ {
1258
+ "key": "RouteLoadFailed",
1259
+ "name": "Route load failed",
1260
+ "payload": [
1261
+ {
1262
+ "name": "message",
1263
+ "type": "string"
1264
+ }
1265
+ ]
891
1266
  }
892
1267
  ],
893
1268
  "transitions": [
@@ -916,6 +1291,10 @@
916
1291
  "fetch",
917
1292
  "Route",
918
1293
  {
1294
+ "emit": {
1295
+ "success": "RouteLoaded",
1296
+ "failure": "RouteLoadFailed"
1297
+ },
919
1298
  "id": "@payload.id"
920
1299
  }
921
1300
  ],
@@ -924,12 +1303,9 @@
924
1303
  "modal",
925
1304
  {
926
1305
  "type": "stack",
927
- "direction": "vertical",
928
- "gap": "md",
929
1306
  "children": [
930
1307
  {
931
1308
  "type": "stack",
932
- "direction": "horizontal",
933
1309
  "gap": "sm",
934
1310
  "align": "center",
935
1311
  "children": [
@@ -939,42 +1315,45 @@
939
1315
  "size": "md"
940
1316
  },
941
1317
  {
942
- "type": "typography",
943
1318
  "content": "Delete Route",
1319
+ "type": "typography",
944
1320
  "variant": "h3"
945
1321
  }
946
- ]
1322
+ ],
1323
+ "direction": "horizontal"
947
1324
  },
948
1325
  {
949
1326
  "type": "divider"
950
1327
  },
951
1328
  {
952
1329
  "type": "alert",
953
- "variant": "danger",
954
- "message": "This action cannot be undone."
1330
+ "message": "This action cannot be undone.",
1331
+ "variant": "danger"
955
1332
  },
956
1333
  {
957
1334
  "type": "stack",
958
- "direction": "horizontal",
959
- "gap": "sm",
960
1335
  "justify": "end",
1336
+ "gap": "sm",
961
1337
  "children": [
962
1338
  {
963
- "type": "button",
964
- "label": "Cancel",
965
1339
  "event": "CANCEL",
966
- "variant": "ghost"
1340
+ "variant": "ghost",
1341
+ "type": "button",
1342
+ "label": "Cancel"
967
1343
  },
968
1344
  {
1345
+ "icon": "check",
969
1346
  "type": "button",
970
- "label": "Delete",
971
1347
  "event": "CONFIRM_DELETE",
972
- "variant": "danger",
973
- "icon": "check"
1348
+ "label": "Delete",
1349
+ "variant": "danger"
974
1350
  }
975
- ]
1351
+ ],
1352
+ "direction": "horizontal"
976
1353
  }
977
- ]
1354
+ ],
1355
+ "direction": "vertical",
1356
+ "gap": "md"
978
1357
  }
979
1358
  ]
980
1359
  ]
@@ -995,6 +1374,13 @@
995
1374
  "modal",
996
1375
  null
997
1376
  ],
1377
+ [
1378
+ "render-ui",
1379
+ "main",
1380
+ {
1381
+ "type": "box"
1382
+ }
1383
+ ],
998
1384
  [
999
1385
  "ref",
1000
1386
  "Route"
@@ -1015,6 +1401,13 @@
1015
1401
  "modal",
1016
1402
  null
1017
1403
  ],
1404
+ [
1405
+ "render-ui",
1406
+ "main",
1407
+ {
1408
+ "type": "box"
1409
+ }
1410
+ ],
1018
1411
  [
1019
1412
  "ref",
1020
1413
  "Route"
@@ -1031,6 +1424,13 @@
1031
1424
  "modal",
1032
1425
  null
1033
1426
  ],
1427
+ [
1428
+ "render-ui",
1429
+ "main",
1430
+ {
1431
+ "type": "box"
1432
+ }
1433
+ ],
1034
1434
  [
1035
1435
  "ref",
1036
1436
  "Route"
@@ -1038,14 +1438,14 @@
1038
1438
  ]
1039
1439
  }
1040
1440
  ]
1041
- }
1441
+ },
1442
+ "scope": "collection"
1042
1443
  }
1043
1444
  ],
1044
1445
  "pages": [
1045
1446
  {
1046
1447
  "name": "RoutesPage",
1047
1448
  "path": "/routes",
1048
- "isInitial": true,
1049
1449
  "traits": [
1050
1450
  {
1051
1451
  "ref": "RouteBrowse"
@@ -1097,38 +1497,78 @@
1097
1497
  },
1098
1498
  {
1099
1499
  "name": "failureCount",
1100
- "type": "number",
1101
- "default": 0
1500
+ "type": "number"
1102
1501
  },
1103
1502
  {
1104
1503
  "name": "successCount",
1105
- "type": "number",
1106
- "default": 0
1504
+ "type": "number"
1107
1505
  },
1108
1506
  {
1109
1507
  "name": "threshold",
1110
- "type": "number",
1111
- "default": 5
1112
- }
1113
- ],
1114
- "instances": [
1115
- {
1116
- "id": "sn-1",
1117
- "name": "ServiceNode",
1118
- "description": "Primary API gateway",
1119
- "status": "active",
1120
- "createdAt": "2026-01-10",
1121
- "failureCount": 783,
1122
- "successCount": 603,
1123
- "threshold": 5
1508
+ "type": "number"
1124
1509
  }
1125
1510
  ]
1126
1511
  },
1127
1512
  "traits": [
1128
1513
  {
1129
1514
  "name": "BackendCircuitBreaker",
1130
- "linkedEntity": "Backend",
1131
1515
  "category": "interaction",
1516
+ "linkedEntity": "Backend",
1517
+ "emits": [
1518
+ {
1519
+ "event": "BackendLoaded",
1520
+ "description": "Fired when Backend finishes loading",
1521
+ "scope": "internal",
1522
+ "payload": [
1523
+ {
1524
+ "name": "id",
1525
+ "type": "string",
1526
+ "required": true
1527
+ },
1528
+ {
1529
+ "name": "name",
1530
+ "type": "string",
1531
+ "required": true
1532
+ },
1533
+ {
1534
+ "name": "url",
1535
+ "type": "string",
1536
+ "required": true
1537
+ },
1538
+ {
1539
+ "name": "status",
1540
+ "type": "string"
1541
+ },
1542
+ {
1543
+ "name": "latency",
1544
+ "type": "number"
1545
+ },
1546
+ {
1547
+ "name": "failureCount",
1548
+ "type": "number"
1549
+ },
1550
+ {
1551
+ "name": "successCount",
1552
+ "type": "number"
1553
+ },
1554
+ {
1555
+ "name": "threshold",
1556
+ "type": "number"
1557
+ }
1558
+ ]
1559
+ },
1560
+ {
1561
+ "event": "BackendLoadFailed",
1562
+ "description": "Fired when Backend fails to load",
1563
+ "scope": "internal",
1564
+ "payload": [
1565
+ {
1566
+ "name": "message",
1567
+ "type": "string"
1568
+ }
1569
+ ]
1570
+ }
1571
+ ],
1132
1572
  "stateMachine": {
1133
1573
  "states": [
1134
1574
  {
@@ -1162,6 +1602,20 @@
1162
1602
  {
1163
1603
  "key": "RESET",
1164
1604
  "name": "Reset"
1605
+ },
1606
+ {
1607
+ "key": "BackendLoaded",
1608
+ "name": "Backend loaded"
1609
+ },
1610
+ {
1611
+ "key": "BackendLoadFailed",
1612
+ "name": "Backend load failed",
1613
+ "payload": [
1614
+ {
1615
+ "name": "message",
1616
+ "type": "string"
1617
+ }
1618
+ ]
1165
1619
  }
1166
1620
  ],
1167
1621
  "transitions": [
@@ -1172,85 +1626,67 @@
1172
1626
  "effects": [
1173
1627
  [
1174
1628
  "fetch",
1175
- "Backend"
1629
+ "Backend",
1630
+ {
1631
+ "emit": {
1632
+ "failure": "BackendLoadFailed",
1633
+ "success": "BackendLoaded"
1634
+ }
1635
+ }
1176
1636
  ],
1177
1637
  [
1178
1638
  "render-ui",
1179
1639
  "main",
1180
1640
  {
1181
1641
  "type": "dashboard-layout",
1182
- "appName": "API Gateway",
1183
- "navItems": [
1184
- {
1185
- "label": "Routes",
1186
- "href": "/routes",
1187
- "icon": "git-branch"
1188
- },
1189
- {
1190
- "label": "Backends",
1191
- "href": "/backends",
1192
- "icon": "server"
1193
- },
1194
- {
1195
- "label": "Analytics",
1196
- "href": "/analytics",
1197
- "icon": "bar-chart-2"
1198
- }
1199
- ],
1200
1642
  "children": [
1201
1643
  {
1202
- "type": "stack",
1203
- "direction": "vertical",
1204
- "gap": "lg",
1205
1644
  "children": [
1206
1645
  {
1207
- "type": "stack",
1208
- "direction": "horizontal",
1209
- "gap": "md",
1210
- "align": "center",
1211
1646
  "justify": "space-between",
1647
+ "direction": "horizontal",
1212
1648
  "children": [
1213
1649
  {
1214
1650
  "type": "stack",
1215
- "direction": "horizontal",
1216
- "gap": "md",
1217
- "align": "center",
1218
1651
  "children": [
1219
1652
  {
1653
+ "size": "lg",
1220
1654
  "type": "icon",
1221
- "name": "server",
1222
- "size": "lg"
1655
+ "name": "server"
1223
1656
  },
1224
1657
  {
1225
1658
  "type": "typography",
1226
- "content": "Backend",
1227
- "variant": "h2"
1659
+ "variant": "h2",
1660
+ "content": "Backend"
1228
1661
  }
1229
- ]
1662
+ ],
1663
+ "align": "center",
1664
+ "direction": "horizontal",
1665
+ "gap": "md"
1230
1666
  },
1231
1667
  {
1232
1668
  "type": "status-dot",
1233
- "status": "success",
1669
+ "label": "Circuit Closed",
1234
1670
  "pulse": false,
1235
- "label": "Circuit Closed"
1671
+ "status": "success"
1236
1672
  }
1237
- ]
1673
+ ],
1674
+ "type": "stack",
1675
+ "gap": "md",
1676
+ "align": "center"
1238
1677
  },
1239
1678
  {
1240
1679
  "type": "divider"
1241
1680
  },
1242
1681
  {
1243
- "type": "alert",
1682
+ "message": "Service is healthy. All requests are being processed.",
1244
1683
  "variant": "success",
1245
- "message": "Service is healthy. All requests are being processed."
1684
+ "type": "alert"
1246
1685
  },
1247
1686
  {
1248
1687
  "type": "simple-grid",
1249
- "columns": 2,
1250
1688
  "children": [
1251
1689
  {
1252
- "type": "stat-display",
1253
- "label": "Failures",
1254
1690
  "value": [
1255
1691
  "object/get",
1256
1692
  [
@@ -1258,11 +1694,12 @@
1258
1694
  "@entity"
1259
1695
  ],
1260
1696
  "failureCount"
1261
- ]
1697
+ ],
1698
+ "type": "stat-display",
1699
+ "label": "Failures"
1262
1700
  },
1263
1701
  {
1264
1702
  "type": "stat-display",
1265
- "label": "Successes",
1266
1703
  "value": [
1267
1704
  "object/get",
1268
1705
  [
@@ -1270,9 +1707,11 @@
1270
1707
  "@entity"
1271
1708
  ],
1272
1709
  "successCount"
1273
- ]
1710
+ ],
1711
+ "label": "Successes"
1274
1712
  }
1275
- ]
1713
+ ],
1714
+ "columns": 2.0
1276
1715
  },
1277
1716
  {
1278
1717
  "type": "meter",
@@ -1284,7 +1723,7 @@
1284
1723
  ],
1285
1724
  "failureCount"
1286
1725
  ],
1287
- "min": 0,
1726
+ "min": 0.0,
1288
1727
  "max": [
1289
1728
  "object/get",
1290
1729
  [
@@ -1294,7 +1733,28 @@
1294
1733
  "threshold"
1295
1734
  ]
1296
1735
  }
1297
- ]
1736
+ ],
1737
+ "type": "stack",
1738
+ "gap": "lg",
1739
+ "direction": "vertical"
1740
+ }
1741
+ ],
1742
+ "appName": "API Gateway",
1743
+ "navItems": [
1744
+ {
1745
+ "icon": "git-branch",
1746
+ "label": "Routes",
1747
+ "href": "/routes"
1748
+ },
1749
+ {
1750
+ "label": "Backends",
1751
+ "href": "/backends",
1752
+ "icon": "server"
1753
+ },
1754
+ {
1755
+ "href": "/analytics",
1756
+ "icon": "bar-chart-2",
1757
+ "label": "Analytics"
1298
1758
  }
1299
1759
  ]
1300
1760
  }
@@ -1310,43 +1770,22 @@
1310
1770
  "render-ui",
1311
1771
  "main",
1312
1772
  {
1313
- "type": "dashboard-layout",
1314
- "appName": "API Gateway",
1315
- "navItems": [
1316
- {
1317
- "label": "Routes",
1318
- "href": "/routes",
1319
- "icon": "git-branch"
1320
- },
1321
- {
1322
- "label": "Backends",
1323
- "href": "/backends",
1324
- "icon": "server"
1325
- },
1326
- {
1327
- "label": "Analytics",
1328
- "href": "/analytics",
1329
- "icon": "bar-chart-2"
1330
- }
1331
- ],
1332
1773
  "children": [
1333
1774
  {
1775
+ "gap": "lg",
1334
1776
  "type": "stack",
1335
1777
  "direction": "vertical",
1336
- "gap": "lg",
1337
1778
  "children": [
1338
1779
  {
1339
- "type": "stack",
1340
- "direction": "horizontal",
1341
- "gap": "md",
1342
1780
  "align": "center",
1343
1781
  "justify": "space-between",
1782
+ "direction": "horizontal",
1783
+ "type": "stack",
1784
+ "gap": "md",
1344
1785
  "children": [
1345
1786
  {
1346
- "type": "stack",
1347
- "direction": "horizontal",
1348
- "gap": "md",
1349
1787
  "align": "center",
1788
+ "gap": "md",
1350
1789
  "children": [
1351
1790
  {
1352
1791
  "type": "icon",
@@ -1354,17 +1793,19 @@
1354
1793
  "size": "lg"
1355
1794
  },
1356
1795
  {
1357
- "type": "typography",
1358
1796
  "content": "Backend",
1359
- "variant": "h2"
1797
+ "variant": "h2",
1798
+ "type": "typography"
1360
1799
  }
1361
- ]
1800
+ ],
1801
+ "direction": "horizontal",
1802
+ "type": "stack"
1362
1803
  },
1363
1804
  {
1364
- "type": "status-dot",
1365
- "status": "error",
1366
1805
  "pulse": true,
1367
- "label": "Circuit Open"
1806
+ "label": "Circuit Open",
1807
+ "status": "error",
1808
+ "type": "status-dot"
1368
1809
  }
1369
1810
  ]
1370
1811
  },
@@ -1377,8 +1818,8 @@
1377
1818
  "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
1378
1819
  },
1379
1820
  {
1821
+ "columns": 2.0,
1380
1822
  "type": "simple-grid",
1381
- "columns": 2,
1382
1823
  "children": [
1383
1824
  {
1384
1825
  "type": "stat-display",
@@ -1407,7 +1848,7 @@
1407
1848
  ]
1408
1849
  },
1409
1850
  {
1410
- "type": "meter",
1851
+ "min": 0.0,
1411
1852
  "value": [
1412
1853
  "object/get",
1413
1854
  [
@@ -1416,7 +1857,6 @@
1416
1857
  ],
1417
1858
  "failureCount"
1418
1859
  ],
1419
- "min": 0,
1420
1860
  "max": [
1421
1861
  "object/get",
1422
1862
  [
@@ -1424,17 +1864,37 @@
1424
1864
  "@entity"
1425
1865
  ],
1426
1866
  "threshold"
1427
- ]
1867
+ ],
1868
+ "type": "meter"
1428
1869
  },
1429
1870
  {
1430
- "type": "button",
1431
- "label": "Reset",
1432
1871
  "event": "RESET",
1872
+ "label": "Reset",
1873
+ "type": "button",
1433
1874
  "variant": "ghost",
1434
1875
  "icon": "rotate-ccw"
1435
1876
  }
1436
1877
  ]
1437
1878
  }
1879
+ ],
1880
+ "type": "dashboard-layout",
1881
+ "appName": "API Gateway",
1882
+ "navItems": [
1883
+ {
1884
+ "label": "Routes",
1885
+ "icon": "git-branch",
1886
+ "href": "/routes"
1887
+ },
1888
+ {
1889
+ "href": "/backends",
1890
+ "icon": "server",
1891
+ "label": "Backends"
1892
+ },
1893
+ {
1894
+ "href": "/analytics",
1895
+ "label": "Analytics",
1896
+ "icon": "bar-chart-2"
1897
+ }
1438
1898
  ]
1439
1899
  }
1440
1900
  ]
@@ -1449,79 +1909,74 @@
1449
1909
  "render-ui",
1450
1910
  "main",
1451
1911
  {
1452
- "type": "dashboard-layout",
1453
1912
  "appName": "API Gateway",
1454
1913
  "navItems": [
1455
1914
  {
1456
- "label": "Routes",
1457
1915
  "href": "/routes",
1458
- "icon": "git-branch"
1916
+ "icon": "git-branch",
1917
+ "label": "Routes"
1459
1918
  },
1460
1919
  {
1461
1920
  "label": "Backends",
1462
- "href": "/backends",
1463
- "icon": "server"
1921
+ "icon": "server",
1922
+ "href": "/backends"
1464
1923
  },
1465
1924
  {
1925
+ "icon": "bar-chart-2",
1466
1926
  "label": "Analytics",
1467
- "href": "/analytics",
1468
- "icon": "bar-chart-2"
1927
+ "href": "/analytics"
1469
1928
  }
1470
1929
  ],
1930
+ "type": "dashboard-layout",
1471
1931
  "children": [
1472
1932
  {
1473
- "type": "stack",
1474
1933
  "direction": "vertical",
1475
- "gap": "lg",
1476
1934
  "children": [
1477
1935
  {
1478
1936
  "type": "stack",
1479
1937
  "direction": "horizontal",
1480
- "gap": "md",
1481
- "align": "center",
1482
1938
  "justify": "space-between",
1483
1939
  "children": [
1484
1940
  {
1941
+ "gap": "md",
1485
1942
  "type": "stack",
1486
1943
  "direction": "horizontal",
1487
- "gap": "md",
1488
- "align": "center",
1489
1944
  "children": [
1490
1945
  {
1946
+ "size": "lg",
1491
1947
  "type": "icon",
1492
- "name": "server",
1493
- "size": "lg"
1948
+ "name": "server"
1494
1949
  },
1495
1950
  {
1496
1951
  "type": "typography",
1497
1952
  "content": "Backend",
1498
1953
  "variant": "h2"
1499
1954
  }
1500
- ]
1955
+ ],
1956
+ "align": "center"
1501
1957
  },
1502
1958
  {
1503
1959
  "type": "status-dot",
1504
- "status": "success",
1505
1960
  "pulse": false,
1506
- "label": "Circuit Closed"
1961
+ "label": "Circuit Closed",
1962
+ "status": "success"
1507
1963
  }
1508
- ]
1964
+ ],
1965
+ "align": "center",
1966
+ "gap": "md"
1509
1967
  },
1510
1968
  {
1511
1969
  "type": "divider"
1512
1970
  },
1513
1971
  {
1514
- "type": "alert",
1515
1972
  "variant": "success",
1516
- "message": "Service is healthy. All requests are being processed."
1973
+ "message": "Service is healthy. All requests are being processed.",
1974
+ "type": "alert"
1517
1975
  },
1518
1976
  {
1519
1977
  "type": "simple-grid",
1520
- "columns": 2,
1521
1978
  "children": [
1522
1979
  {
1523
- "type": "stat-display",
1524
- "label": "Failures",
1525
1980
  "value": [
1526
1981
  "object/get",
1527
1982
  [
@@ -1529,7 +1984,9 @@
1529
1984
  "@entity"
1530
1985
  ],
1531
1986
  "failureCount"
1532
- ]
1987
+ ],
1988
+ "label": "Failures",
1989
+ "type": "stat-display"
1533
1990
  },
1534
1991
  {
1535
1992
  "type": "stat-display",
@@ -1543,29 +2000,32 @@
1543
2000
  "successCount"
1544
2001
  ]
1545
2002
  }
1546
- ]
2003
+ ],
2004
+ "columns": 2.0
1547
2005
  },
1548
2006
  {
1549
- "type": "meter",
1550
- "value": [
2007
+ "max": [
1551
2008
  "object/get",
1552
2009
  [
1553
2010
  "array/first",
1554
2011
  "@entity"
1555
2012
  ],
1556
- "failureCount"
2013
+ "threshold"
1557
2014
  ],
1558
- "min": 0,
1559
- "max": [
2015
+ "type": "meter",
2016
+ "min": 0.0,
2017
+ "value": [
1560
2018
  "object/get",
1561
2019
  [
1562
2020
  "array/first",
1563
2021
  "@entity"
1564
2022
  ],
1565
- "threshold"
2023
+ "failureCount"
1566
2024
  ]
1567
2025
  }
1568
- ]
2026
+ ],
2027
+ "type": "stack",
2028
+ "gap": "lg"
1569
2029
  }
1570
2030
  ]
1571
2031
  }
@@ -1581,43 +2041,20 @@
1581
2041
  "render-ui",
1582
2042
  "main",
1583
2043
  {
1584
- "type": "dashboard-layout",
1585
- "appName": "API Gateway",
1586
- "navItems": [
1587
- {
1588
- "label": "Routes",
1589
- "href": "/routes",
1590
- "icon": "git-branch"
1591
- },
1592
- {
1593
- "label": "Backends",
1594
- "href": "/backends",
1595
- "icon": "server"
1596
- },
1597
- {
1598
- "label": "Analytics",
1599
- "href": "/analytics",
1600
- "icon": "bar-chart-2"
1601
- }
1602
- ],
1603
2044
  "children": [
1604
2045
  {
1605
- "type": "stack",
1606
- "direction": "vertical",
1607
- "gap": "lg",
1608
2046
  "children": [
1609
2047
  {
1610
- "type": "stack",
1611
- "direction": "horizontal",
1612
2048
  "gap": "md",
1613
2049
  "align": "center",
2050
+ "direction": "horizontal",
2051
+ "type": "stack",
1614
2052
  "justify": "space-between",
1615
2053
  "children": [
1616
2054
  {
2055
+ "gap": "md",
1617
2056
  "type": "stack",
1618
2057
  "direction": "horizontal",
1619
- "gap": "md",
1620
- "align": "center",
1621
2058
  "children": [
1622
2059
  {
1623
2060
  "type": "icon",
@@ -1629,13 +2066,14 @@
1629
2066
  "content": "Backend",
1630
2067
  "variant": "h2"
1631
2068
  }
1632
- ]
2069
+ ],
2070
+ "align": "center"
1633
2071
  },
1634
2072
  {
1635
- "type": "status-dot",
1636
2073
  "status": "warning",
1637
- "pulse": true,
1638
- "label": "Circuit Half-Open"
2074
+ "label": "Circuit Half-Open",
2075
+ "type": "status-dot",
2076
+ "pulse": true
1639
2077
  }
1640
2078
  ]
1641
2079
  },
@@ -1643,13 +2081,13 @@
1643
2081
  "type": "divider"
1644
2082
  },
1645
2083
  {
2084
+ "message": "Testing recovery. Limited requests are being allowed through.",
1646
2085
  "type": "alert",
1647
- "variant": "warning",
1648
- "message": "Testing recovery. Limited requests are being allowed through."
2086
+ "variant": "warning"
1649
2087
  },
1650
2088
  {
1651
2089
  "type": "simple-grid",
1652
- "columns": 2,
2090
+ "columns": 2.0,
1653
2091
  "children": [
1654
2092
  {
1655
2093
  "type": "stat-display",
@@ -1664,8 +2102,6 @@
1664
2102
  ]
1665
2103
  },
1666
2104
  {
1667
- "type": "stat-display",
1668
- "label": "Successes",
1669
2105
  "value": [
1670
2106
  "object/get",
1671
2107
  [
@@ -1673,11 +2109,35 @@
1673
2109
  "@entity"
1674
2110
  ],
1675
2111
  "successCount"
1676
- ]
2112
+ ],
2113
+ "type": "stat-display",
2114
+ "label": "Successes"
1677
2115
  }
1678
2116
  ]
1679
2117
  }
1680
- ]
2118
+ ],
2119
+ "gap": "lg",
2120
+ "type": "stack",
2121
+ "direction": "vertical"
2122
+ }
2123
+ ],
2124
+ "appName": "API Gateway",
2125
+ "type": "dashboard-layout",
2126
+ "navItems": [
2127
+ {
2128
+ "icon": "git-branch",
2129
+ "label": "Routes",
2130
+ "href": "/routes"
2131
+ },
2132
+ {
2133
+ "label": "Backends",
2134
+ "href": "/backends",
2135
+ "icon": "server"
2136
+ },
2137
+ {
2138
+ "href": "/analytics",
2139
+ "label": "Analytics",
2140
+ "icon": "bar-chart-2"
1681
2141
  }
1682
2142
  ]
1683
2143
  }
@@ -1693,79 +2153,76 @@
1693
2153
  "render-ui",
1694
2154
  "main",
1695
2155
  {
1696
- "type": "dashboard-layout",
1697
- "appName": "API Gateway",
1698
2156
  "navItems": [
1699
2157
  {
1700
- "label": "Routes",
1701
2158
  "href": "/routes",
1702
- "icon": "git-branch"
2159
+ "icon": "git-branch",
2160
+ "label": "Routes"
1703
2161
  },
1704
2162
  {
1705
- "label": "Backends",
1706
2163
  "href": "/backends",
2164
+ "label": "Backends",
1707
2165
  "icon": "server"
1708
2166
  },
1709
2167
  {
1710
2168
  "label": "Analytics",
1711
- "href": "/analytics",
1712
- "icon": "bar-chart-2"
2169
+ "icon": "bar-chart-2",
2170
+ "href": "/analytics"
1713
2171
  }
1714
2172
  ],
2173
+ "appName": "API Gateway",
2174
+ "type": "dashboard-layout",
1715
2175
  "children": [
1716
2176
  {
1717
- "type": "stack",
1718
- "direction": "vertical",
1719
- "gap": "lg",
1720
2177
  "children": [
1721
2178
  {
1722
- "type": "stack",
1723
- "direction": "horizontal",
1724
- "gap": "md",
1725
- "align": "center",
1726
- "justify": "space-between",
1727
2179
  "children": [
1728
2180
  {
1729
- "type": "stack",
1730
- "direction": "horizontal",
1731
- "gap": "md",
1732
- "align": "center",
1733
2181
  "children": [
1734
2182
  {
1735
- "type": "icon",
1736
2183
  "name": "server",
2184
+ "type": "icon",
1737
2185
  "size": "lg"
1738
2186
  },
1739
2187
  {
1740
- "type": "typography",
1741
2188
  "content": "Backend",
1742
- "variant": "h2"
2189
+ "variant": "h2",
2190
+ "type": "typography"
1743
2191
  }
1744
- ]
2192
+ ],
2193
+ "gap": "md",
2194
+ "direction": "horizontal",
2195
+ "type": "stack",
2196
+ "align": "center"
1745
2197
  },
1746
2198
  {
1747
- "type": "status-dot",
1748
2199
  "status": "success",
1749
2200
  "pulse": false,
1750
- "label": "Circuit Closed"
2201
+ "label": "Circuit Closed",
2202
+ "type": "status-dot"
1751
2203
  }
1752
- ]
2204
+ ],
2205
+ "align": "center",
2206
+ "type": "stack",
2207
+ "justify": "space-between",
2208
+ "gap": "md",
2209
+ "direction": "horizontal"
1753
2210
  },
1754
2211
  {
1755
2212
  "type": "divider"
1756
2213
  },
1757
2214
  {
1758
- "type": "alert",
1759
2215
  "variant": "success",
2216
+ "type": "alert",
1760
2217
  "message": "Service is healthy. All requests are being processed."
1761
2218
  },
1762
2219
  {
1763
2220
  "type": "simple-grid",
1764
- "columns": 2,
2221
+ "columns": 2.0,
1765
2222
  "children": [
1766
2223
  {
1767
- "type": "stat-display",
1768
2224
  "label": "Failures",
2225
+ "type": "stat-display",
1769
2226
  "value": [
1770
2227
  "object/get",
1771
2228
  [
@@ -1776,8 +2233,8 @@
1776
2233
  ]
1777
2234
  },
1778
2235
  {
1779
- "type": "stat-display",
1780
2236
  "label": "Successes",
2237
+ "type": "stat-display",
1781
2238
  "value": [
1782
2239
  "object/get",
1783
2240
  [
@@ -1790,7 +2247,6 @@
1790
2247
  ]
1791
2248
  },
1792
2249
  {
1793
- "type": "meter",
1794
2250
  "value": [
1795
2251
  "object/get",
1796
2252
  [
@@ -1799,7 +2255,7 @@
1799
2255
  ],
1800
2256
  "failureCount"
1801
2257
  ],
1802
- "min": 0,
2258
+ "min": 0.0,
1803
2259
  "max": [
1804
2260
  "object/get",
1805
2261
  [
@@ -1807,9 +2263,13 @@
1807
2263
  "@entity"
1808
2264
  ],
1809
2265
  "threshold"
1810
- ]
2266
+ ],
2267
+ "type": "meter"
1811
2268
  }
1812
- ]
2269
+ ],
2270
+ "direction": "vertical",
2271
+ "type": "stack",
2272
+ "gap": "lg"
1813
2273
  }
1814
2274
  ]
1815
2275
  }
@@ -1826,7 +2286,6 @@
1826
2286
  "main",
1827
2287
  {
1828
2288
  "type": "dashboard-layout",
1829
- "appName": "API Gateway",
1830
2289
  "navItems": [
1831
2290
  {
1832
2291
  "label": "Routes",
@@ -1834,66 +2293,66 @@
1834
2293
  "icon": "git-branch"
1835
2294
  },
1836
2295
  {
1837
- "label": "Backends",
1838
2296
  "href": "/backends",
1839
- "icon": "server"
2297
+ "icon": "server",
2298
+ "label": "Backends"
1840
2299
  },
1841
2300
  {
1842
- "label": "Analytics",
1843
2301
  "href": "/analytics",
1844
- "icon": "bar-chart-2"
2302
+ "icon": "bar-chart-2",
2303
+ "label": "Analytics"
1845
2304
  }
1846
2305
  ],
1847
2306
  "children": [
1848
2307
  {
1849
- "type": "stack",
1850
2308
  "direction": "vertical",
2309
+ "type": "stack",
1851
2310
  "gap": "lg",
1852
2311
  "children": [
1853
2312
  {
1854
- "type": "stack",
1855
- "direction": "horizontal",
1856
- "gap": "md",
1857
- "align": "center",
1858
2313
  "justify": "space-between",
1859
2314
  "children": [
1860
2315
  {
1861
- "type": "stack",
1862
- "direction": "horizontal",
1863
- "gap": "md",
1864
- "align": "center",
1865
2316
  "children": [
1866
2317
  {
2318
+ "size": "lg",
1867
2319
  "type": "icon",
1868
- "name": "server",
1869
- "size": "lg"
2320
+ "name": "server"
1870
2321
  },
1871
2322
  {
1872
- "type": "typography",
1873
2323
  "content": "Backend",
2324
+ "type": "typography",
1874
2325
  "variant": "h2"
1875
2326
  }
1876
- ]
2327
+ ],
2328
+ "direction": "horizontal",
2329
+ "gap": "md",
2330
+ "type": "stack",
2331
+ "align": "center"
1877
2332
  },
1878
2333
  {
1879
2334
  "type": "status-dot",
1880
- "status": "success",
2335
+ "label": "Circuit Closed",
1881
2336
  "pulse": false,
1882
- "label": "Circuit Closed"
2337
+ "status": "success"
1883
2338
  }
1884
- ]
2339
+ ],
2340
+ "gap": "md",
2341
+ "direction": "horizontal",
2342
+ "type": "stack",
2343
+ "align": "center"
1885
2344
  },
1886
2345
  {
1887
2346
  "type": "divider"
1888
2347
  },
1889
2348
  {
1890
2349
  "type": "alert",
1891
- "variant": "success",
1892
- "message": "Service is healthy. All requests are being processed."
2350
+ "message": "Service is healthy. All requests are being processed.",
2351
+ "variant": "success"
1893
2352
  },
1894
2353
  {
1895
2354
  "type": "simple-grid",
1896
- "columns": 2,
2355
+ "columns": 2.0,
1897
2356
  "children": [
1898
2357
  {
1899
2358
  "type": "stat-display",
@@ -1922,7 +2381,6 @@
1922
2381
  ]
1923
2382
  },
1924
2383
  {
1925
- "type": "meter",
1926
2384
  "value": [
1927
2385
  "object/get",
1928
2386
  [
@@ -1931,7 +2389,6 @@
1931
2389
  ],
1932
2390
  "failureCount"
1933
2391
  ],
1934
- "min": 0,
1935
2392
  "max": [
1936
2393
  "object/get",
1937
2394
  [
@@ -1939,11 +2396,14 @@
1939
2396
  "@entity"
1940
2397
  ],
1941
2398
  "threshold"
1942
- ]
2399
+ ],
2400
+ "type": "meter",
2401
+ "min": 0.0
1943
2402
  }
1944
2403
  ]
1945
2404
  }
1946
- ]
2405
+ ],
2406
+ "appName": "API Gateway"
1947
2407
  }
1948
2408
  ]
1949
2409
  ]
@@ -1958,7 +2418,6 @@
1958
2418
  "main",
1959
2419
  {
1960
2420
  "type": "dashboard-layout",
1961
- "appName": "API Gateway",
1962
2421
  "navItems": [
1963
2422
  {
1964
2423
  "label": "Routes",
@@ -1978,58 +2437,54 @@
1978
2437
  ],
1979
2438
  "children": [
1980
2439
  {
1981
- "type": "stack",
1982
- "direction": "vertical",
1983
- "gap": "lg",
1984
2440
  "children": [
1985
2441
  {
1986
- "type": "stack",
1987
- "direction": "horizontal",
1988
- "gap": "md",
1989
2442
  "align": "center",
1990
- "justify": "space-between",
2443
+ "gap": "md",
1991
2444
  "children": [
1992
2445
  {
1993
2446
  "type": "stack",
1994
2447
  "direction": "horizontal",
1995
- "gap": "md",
1996
2448
  "align": "center",
1997
2449
  "children": [
1998
2450
  {
1999
- "type": "icon",
2000
- "name": "alert-triangle",
2001
- "size": "lg"
2451
+ "size": "lg",
2452
+ "type": "icon",
2453
+ "name": "alert-triangle"
2002
2454
  },
2003
2455
  {
2004
2456
  "type": "typography",
2005
2457
  "content": "Backend",
2006
2458
  "variant": "h2"
2007
2459
  }
2008
- ]
2460
+ ],
2461
+ "gap": "md"
2009
2462
  },
2010
2463
  {
2011
- "type": "status-dot",
2012
2464
  "status": "error",
2013
2465
  "pulse": true,
2466
+ "type": "status-dot",
2014
2467
  "label": "Circuit Open"
2015
2468
  }
2016
- ]
2469
+ ],
2470
+ "type": "stack",
2471
+ "justify": "space-between",
2472
+ "direction": "horizontal"
2017
2473
  },
2018
2474
  {
2019
2475
  "type": "divider"
2020
2476
  },
2021
2477
  {
2022
- "type": "alert",
2023
2478
  "variant": "danger",
2479
+ "type": "alert",
2024
2480
  "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
2025
2481
  },
2026
2482
  {
2027
2483
  "type": "simple-grid",
2028
- "columns": 2,
2484
+ "columns": 2.0,
2029
2485
  "children": [
2030
2486
  {
2031
2487
  "type": "stat-display",
2032
- "label": "Failures",
2033
2488
  "value": [
2034
2489
  "object/get",
2035
2490
  [
@@ -2037,11 +2492,12 @@
2037
2492
  "@entity"
2038
2493
  ],
2039
2494
  "failureCount"
2040
- ]
2495
+ ],
2496
+ "label": "Failures"
2041
2497
  },
2042
2498
  {
2043
- "type": "stat-display",
2044
2499
  "label": "Successes",
2500
+ "type": "stat-display",
2045
2501
  "value": [
2046
2502
  "object/get",
2047
2503
  [
@@ -2054,35 +2510,39 @@
2054
2510
  ]
2055
2511
  },
2056
2512
  {
2057
- "type": "meter",
2058
- "value": [
2513
+ "max": [
2059
2514
  "object/get",
2060
2515
  [
2061
2516
  "array/first",
2062
2517
  "@entity"
2063
2518
  ],
2064
- "failureCount"
2519
+ "threshold"
2065
2520
  ],
2066
- "min": 0,
2067
- "max": [
2521
+ "type": "meter",
2522
+ "min": 0.0,
2523
+ "value": [
2068
2524
  "object/get",
2069
2525
  [
2070
2526
  "array/first",
2071
2527
  "@entity"
2072
2528
  ],
2073
- "threshold"
2529
+ "failureCount"
2074
2530
  ]
2075
2531
  },
2076
2532
  {
2077
- "type": "button",
2078
2533
  "label": "Reset",
2079
- "event": "RESET",
2534
+ "icon": "rotate-ccw",
2535
+ "type": "button",
2080
2536
  "variant": "ghost",
2081
- "icon": "rotate-ccw"
2537
+ "event": "RESET"
2082
2538
  }
2083
- ]
2539
+ ],
2540
+ "gap": "lg",
2541
+ "direction": "vertical",
2542
+ "type": "stack"
2084
2543
  }
2085
- ]
2544
+ ],
2545
+ "appName": "API Gateway"
2086
2546
  }
2087
2547
  ]
2088
2548
  ]
@@ -2097,47 +2557,41 @@
2097
2557
  "main",
2098
2558
  {
2099
2559
  "type": "dashboard-layout",
2100
- "appName": "API Gateway",
2101
2560
  "navItems": [
2102
2561
  {
2562
+ "icon": "git-branch",
2103
2563
  "label": "Routes",
2104
- "href": "/routes",
2105
- "icon": "git-branch"
2564
+ "href": "/routes"
2106
2565
  },
2107
2566
  {
2567
+ "icon": "server",
2108
2568
  "label": "Backends",
2109
- "href": "/backends",
2110
- "icon": "server"
2569
+ "href": "/backends"
2111
2570
  },
2112
2571
  {
2572
+ "icon": "bar-chart-2",
2113
2573
  "label": "Analytics",
2114
- "href": "/analytics",
2115
- "icon": "bar-chart-2"
2574
+ "href": "/analytics"
2116
2575
  }
2117
2576
  ],
2577
+ "appName": "API Gateway",
2118
2578
  "children": [
2119
2579
  {
2120
- "type": "stack",
2121
2580
  "direction": "vertical",
2122
- "gap": "lg",
2581
+ "type": "stack",
2123
2582
  "children": [
2124
2583
  {
2125
- "type": "stack",
2126
- "direction": "horizontal",
2127
- "gap": "md",
2128
- "align": "center",
2129
- "justify": "space-between",
2130
2584
  "children": [
2131
2585
  {
2586
+ "gap": "md",
2132
2587
  "type": "stack",
2133
2588
  "direction": "horizontal",
2134
- "gap": "md",
2135
2589
  "align": "center",
2136
2590
  "children": [
2137
2591
  {
2138
2592
  "type": "icon",
2139
- "name": "server",
2140
- "size": "lg"
2593
+ "size": "lg",
2594
+ "name": "server"
2141
2595
  },
2142
2596
  {
2143
2597
  "type": "typography",
@@ -2147,12 +2601,17 @@
2147
2601
  ]
2148
2602
  },
2149
2603
  {
2150
- "type": "status-dot",
2151
2604
  "status": "success",
2605
+ "type": "status-dot",
2152
2606
  "pulse": false,
2153
2607
  "label": "Circuit Closed"
2154
2608
  }
2155
- ]
2609
+ ],
2610
+ "direction": "horizontal",
2611
+ "gap": "md",
2612
+ "align": "center",
2613
+ "justify": "space-between",
2614
+ "type": "stack"
2156
2615
  },
2157
2616
  {
2158
2617
  "type": "divider"
@@ -2163,12 +2622,10 @@
2163
2622
  "message": "Service is healthy. All requests are being processed."
2164
2623
  },
2165
2624
  {
2166
- "type": "simple-grid",
2167
- "columns": 2,
2625
+ "columns": 2.0,
2168
2626
  "children": [
2169
2627
  {
2170
2628
  "type": "stat-display",
2171
- "label": "Failures",
2172
2629
  "value": [
2173
2630
  "object/get",
2174
2631
  [
@@ -2176,11 +2633,11 @@
2176
2633
  "@entity"
2177
2634
  ],
2178
2635
  "failureCount"
2179
- ]
2636
+ ],
2637
+ "label": "Failures"
2180
2638
  },
2181
2639
  {
2182
2640
  "type": "stat-display",
2183
- "label": "Successes",
2184
2641
  "value": [
2185
2642
  "object/get",
2186
2643
  [
@@ -2188,31 +2645,34 @@
2188
2645
  "@entity"
2189
2646
  ],
2190
2647
  "successCount"
2191
- ]
2648
+ ],
2649
+ "label": "Successes"
2192
2650
  }
2193
- ]
2651
+ ],
2652
+ "type": "simple-grid"
2194
2653
  },
2195
2654
  {
2196
2655
  "type": "meter",
2197
- "value": [
2656
+ "max": [
2198
2657
  "object/get",
2199
2658
  [
2200
2659
  "array/first",
2201
2660
  "@entity"
2202
2661
  ],
2203
- "failureCount"
2662
+ "threshold"
2204
2663
  ],
2205
- "min": 0,
2206
- "max": [
2664
+ "min": 0.0,
2665
+ "value": [
2207
2666
  "object/get",
2208
2667
  [
2209
2668
  "array/first",
2210
2669
  "@entity"
2211
2670
  ],
2212
- "threshold"
2671
+ "failureCount"
2213
2672
  ]
2214
2673
  }
2215
- ]
2674
+ ],
2675
+ "gap": "lg"
2216
2676
  }
2217
2677
  ]
2218
2678
  }
@@ -2220,12 +2680,13 @@
2220
2680
  ]
2221
2681
  }
2222
2682
  ]
2223
- }
2683
+ },
2684
+ "scope": "collection"
2224
2685
  }
2225
2686
  ],
2226
2687
  "pages": [
2227
2688
  {
2228
- "name": "BackendsPage",
2689
+ "name": "Backends",
2229
2690
  "path": "/backends",
2230
2691
  "traits": [
2231
2692
  {
@@ -2269,8 +2730,51 @@
2269
2730
  "traits": [
2270
2731
  {
2271
2732
  "name": "AnalyticsDisplay",
2272
- "linkedEntity": "Analytics",
2273
2733
  "category": "interaction",
2734
+ "linkedEntity": "Analytics",
2735
+ "emits": [
2736
+ {
2737
+ "event": "AnalyticsLoaded",
2738
+ "description": "Fired when Analytics finishes loading",
2739
+ "scope": "internal",
2740
+ "payload": [
2741
+ {
2742
+ "name": "id",
2743
+ "type": "string",
2744
+ "required": true
2745
+ },
2746
+ {
2747
+ "name": "totalRequests",
2748
+ "type": "number",
2749
+ "required": true
2750
+ },
2751
+ {
2752
+ "name": "errorRate",
2753
+ "type": "number",
2754
+ "required": true
2755
+ },
2756
+ {
2757
+ "name": "avgLatency",
2758
+ "type": "number"
2759
+ },
2760
+ {
2761
+ "name": "uptime",
2762
+ "type": "string"
2763
+ }
2764
+ ]
2765
+ },
2766
+ {
2767
+ "event": "AnalyticsLoadFailed",
2768
+ "description": "Fired when Analytics fails to load",
2769
+ "scope": "internal",
2770
+ "payload": [
2771
+ {
2772
+ "name": "message",
2773
+ "type": "string"
2774
+ }
2775
+ ]
2776
+ }
2777
+ ],
2274
2778
  "stateMachine": {
2275
2779
  "states": [
2276
2780
  {
@@ -2300,6 +2804,20 @@
2300
2804
  {
2301
2805
  "key": "REFRESHED",
2302
2806
  "name": "Refreshed"
2807
+ },
2808
+ {
2809
+ "key": "AnalyticsLoaded",
2810
+ "name": "Analytics loaded"
2811
+ },
2812
+ {
2813
+ "key": "AnalyticsLoadFailed",
2814
+ "name": "Analytics load failed",
2815
+ "payload": [
2816
+ {
2817
+ "name": "message",
2818
+ "type": "string"
2819
+ }
2820
+ ]
2303
2821
  }
2304
2822
  ],
2305
2823
  "transitions": [
@@ -2310,7 +2828,13 @@
2310
2828
  "effects": [
2311
2829
  [
2312
2830
  "fetch",
2313
- "Analytics"
2831
+ "Analytics",
2832
+ {
2833
+ "emit": {
2834
+ "success": "AnalyticsLoaded",
2835
+ "failure": "AnalyticsLoadFailed"
2836
+ }
2837
+ }
2314
2838
  ],
2315
2839
  [
2316
2840
  "render-ui",
@@ -2320,9 +2844,9 @@
2320
2844
  "appName": "API Gateway",
2321
2845
  "navItems": [
2322
2846
  {
2323
- "label": "Routes",
2324
2847
  "href": "/routes",
2325
- "icon": "git-branch"
2848
+ "icon": "git-branch",
2849
+ "label": "Routes"
2326
2850
  },
2327
2851
  {
2328
2852
  "label": "Backends",
@@ -2330,19 +2854,16 @@
2330
2854
  "icon": "server"
2331
2855
  },
2332
2856
  {
2333
- "label": "Analytics",
2334
2857
  "href": "/analytics",
2335
- "icon": "bar-chart-2"
2858
+ "icon": "bar-chart-2",
2859
+ "label": "Analytics"
2336
2860
  }
2337
2861
  ],
2338
2862
  "children": [
2339
2863
  {
2340
- "type": "scaled-diagram",
2341
2864
  "children": [
2342
2865
  {
2343
- "type": "stack",
2344
2866
  "direction": "vertical",
2345
- "gap": "lg",
2346
2867
  "children": [
2347
2868
  {
2348
2869
  "type": "breadcrumb",
@@ -2357,34 +2878,34 @@
2357
2878
  ]
2358
2879
  },
2359
2880
  {
2360
- "type": "stack",
2361
2881
  "direction": "horizontal",
2362
- "gap": "md",
2363
2882
  "justify": "space-between",
2883
+ "type": "stack",
2884
+ "gap": "md",
2364
2885
  "children": [
2365
2886
  {
2366
2887
  "type": "stack",
2367
2888
  "direction": "horizontal",
2368
- "gap": "md",
2369
2889
  "children": [
2370
2890
  {
2371
- "type": "icon",
2372
2891
  "name": "bar-chart-2",
2373
- "size": "lg"
2892
+ "size": "lg",
2893
+ "type": "icon"
2374
2894
  },
2375
2895
  {
2376
2896
  "type": "typography",
2377
2897
  "content": "Analytics",
2378
2898
  "variant": "h2"
2379
2899
  }
2380
- ]
2900
+ ],
2901
+ "gap": "md"
2381
2902
  },
2382
2903
  {
2383
2904
  "type": "button",
2384
2905
  "label": "Refresh",
2385
- "event": "REFRESH",
2386
2906
  "variant": "secondary",
2387
- "icon": "refresh-cw"
2907
+ "icon": "refresh-cw",
2908
+ "event": "REFRESH"
2388
2909
  }
2389
2910
  ]
2390
2911
  },
@@ -2392,12 +2913,10 @@
2392
2913
  "type": "divider"
2393
2914
  },
2394
2915
  {
2395
- "type": "box",
2396
2916
  "padding": "md",
2397
2917
  "children": [
2398
2918
  {
2399
- "type": "simple-grid",
2400
- "columns": 3,
2919
+ "columns": 3.0,
2401
2920
  "children": [
2402
2921
  {
2403
2922
  "type": "stat-display",
@@ -2412,8 +2931,8 @@
2412
2931
  ]
2413
2932
  },
2414
2933
  {
2415
- "type": "stat-display",
2416
2934
  "label": "ErrorRate",
2935
+ "type": "stat-display",
2417
2936
  "value": [
2418
2937
  "object/get",
2419
2938
  [
@@ -2440,17 +2959,13 @@
2440
2959
  "children": [
2441
2960
  {
2442
2961
  "type": "stack",
2443
- "direction": "vertical",
2444
- "gap": "sm",
2445
2962
  "children": [
2446
2963
  {
2447
2964
  "type": "typography",
2448
- "variant": "caption",
2449
- "content": "Uptime"
2965
+ "content": "Uptime",
2966
+ "variant": "caption"
2450
2967
  },
2451
2968
  {
2452
- "type": "typography",
2453
- "variant": "h3",
2454
2969
  "content": [
2455
2970
  "object/get",
2456
2971
  [
@@ -2458,23 +2973,28 @@
2458
2973
  "@entity"
2459
2974
  ],
2460
2975
  "uptime"
2461
- ]
2976
+ ],
2977
+ "variant": "h3",
2978
+ "type": "typography"
2462
2979
  }
2463
- ]
2980
+ ],
2981
+ "gap": "sm",
2982
+ "direction": "vertical"
2464
2983
  }
2465
2984
  ]
2466
2985
  }
2467
- ]
2986
+ ],
2987
+ "type": "simple-grid"
2468
2988
  }
2469
- ]
2989
+ ],
2990
+ "type": "box"
2470
2991
  },
2471
2992
  {
2472
2993
  "type": "divider"
2473
2994
  },
2474
2995
  {
2475
- "type": "grid",
2476
- "columns": 2,
2477
2996
  "gap": "md",
2997
+ "columns": 2.0,
2478
2998
  "children": [
2479
2999
  {
2480
3000
  "type": "card",
@@ -2487,100 +3007,104 @@
2487
3007
  ]
2488
3008
  },
2489
3009
  {
2490
- "type": "card",
2491
3010
  "children": [
2492
3011
  {
2493
- "type": "typography",
2494
3012
  "variant": "caption",
2495
- "content": "Graph View"
3013
+ "content": "Graph View",
3014
+ "type": "typography"
2496
3015
  }
2497
- ]
3016
+ ],
3017
+ "type": "card"
2498
3018
  }
2499
- ]
3019
+ ],
3020
+ "type": "grid"
2500
3021
  },
2501
3022
  {
3023
+ "title": "Trend",
2502
3024
  "type": "line-chart",
3025
+ "yKey": "value",
3026
+ "xKey": "date",
2503
3027
  "data": [
2504
3028
  {
2505
3029
  "date": "Jan",
2506
- "value": 12
3030
+ "value": 12.0
2507
3031
  },
2508
3032
  {
2509
3033
  "date": "Feb",
2510
- "value": 19
3034
+ "value": 19.0
2511
3035
  },
2512
3036
  {
2513
- "date": "Mar",
2514
- "value": 15
3037
+ "value": 15.0,
3038
+ "date": "Mar"
2515
3039
  },
2516
3040
  {
2517
- "date": "Apr",
2518
- "value": 25
3041
+ "value": 25.0,
3042
+ "date": "Apr"
2519
3043
  },
2520
3044
  {
2521
- "date": "May",
2522
- "value": 22
3045
+ "value": 22.0,
3046
+ "date": "May"
2523
3047
  },
2524
3048
  {
2525
3049
  "date": "Jun",
2526
- "value": 30
3050
+ "value": 30.0
2527
3051
  }
2528
- ],
2529
- "xKey": "date",
2530
- "yKey": "value",
2531
- "title": "Trend"
3052
+ ]
2532
3053
  },
2533
3054
  {
2534
- "type": "chart-legend",
2535
3055
  "items": [
2536
3056
  {
2537
- "label": "Current",
2538
- "color": "primary"
3057
+ "color": "primary",
3058
+ "label": "Current"
2539
3059
  },
2540
3060
  {
2541
3061
  "label": "Previous",
2542
3062
  "color": "muted"
2543
3063
  }
2544
- ]
3064
+ ],
3065
+ "type": "chart-legend"
2545
3066
  },
2546
3067
  {
2547
3068
  "type": "graph-view",
3069
+ "height": 200.0,
3070
+ "edges": [
3071
+ {
3072
+ "to": "b",
3073
+ "from": "a"
3074
+ },
3075
+ {
3076
+ "from": "b",
3077
+ "to": "c"
3078
+ }
3079
+ ],
3080
+ "width": 400.0,
2548
3081
  "nodes": [
2549
3082
  {
2550
- "id": "a",
3083
+ "x": 50.0,
2551
3084
  "label": "Start",
2552
- "x": 50,
2553
- "y": 100
3085
+ "y": 100.0,
3086
+ "id": "a"
2554
3087
  },
2555
3088
  {
3089
+ "y": 50.0,
2556
3090
  "id": "b",
2557
3091
  "label": "Process",
2558
- "x": 200,
2559
- "y": 50
3092
+ "x": 200.0
2560
3093
  },
2561
3094
  {
2562
3095
  "id": "c",
3096
+ "x": 350.0,
2563
3097
  "label": "End",
2564
- "x": 350,
2565
- "y": 100
2566
- }
2567
- ],
2568
- "edges": [
2569
- {
2570
- "from": "a",
2571
- "to": "b"
2572
- },
2573
- {
2574
- "from": "b",
2575
- "to": "c"
3098
+ "y": 100.0
2576
3099
  }
2577
- ],
2578
- "width": 400,
2579
- "height": 200
3100
+ ]
2580
3101
  }
2581
- ]
3102
+ ],
3103
+ "gap": "lg",
3104
+ "type": "stack"
2582
3105
  }
2583
- ]
3106
+ ],
3107
+ "type": "scaled-diagram"
2584
3108
  }
2585
3109
  ]
2586
3110
  }
@@ -2594,39 +3118,42 @@
2594
3118
  "effects": [
2595
3119
  [
2596
3120
  "fetch",
2597
- "Analytics"
3121
+ "Analytics",
3122
+ {
3123
+ "emit": {
3124
+ "success": "AnalyticsLoaded",
3125
+ "failure": "AnalyticsLoadFailed"
3126
+ }
3127
+ }
2598
3128
  ],
2599
3129
  [
2600
3130
  "render-ui",
2601
3131
  "main",
2602
3132
  {
2603
- "type": "dashboard-layout",
2604
- "appName": "API Gateway",
2605
3133
  "navItems": [
2606
3134
  {
3135
+ "icon": "git-branch",
2607
3136
  "label": "Routes",
2608
- "href": "/routes",
2609
- "icon": "git-branch"
3137
+ "href": "/routes"
2610
3138
  },
2611
3139
  {
2612
3140
  "label": "Backends",
2613
- "href": "/backends",
2614
- "icon": "server"
3141
+ "icon": "server",
3142
+ "href": "/backends"
2615
3143
  },
2616
3144
  {
2617
- "label": "Analytics",
2618
3145
  "href": "/analytics",
2619
- "icon": "bar-chart-2"
3146
+ "icon": "bar-chart-2",
3147
+ "label": "Analytics"
2620
3148
  }
2621
3149
  ],
3150
+ "type": "dashboard-layout",
3151
+ "appName": "API Gateway",
2622
3152
  "children": [
2623
3153
  {
2624
3154
  "type": "scaled-diagram",
2625
3155
  "children": [
2626
3156
  {
2627
- "type": "stack",
2628
- "direction": "vertical",
2629
- "gap": "lg",
2630
3157
  "children": [
2631
3158
  {
2632
3159
  "type": "breadcrumb",
@@ -2641,51 +3168,47 @@
2641
3168
  ]
2642
3169
  },
2643
3170
  {
2644
- "type": "stack",
2645
- "direction": "horizontal",
2646
3171
  "gap": "md",
3172
+ "type": "stack",
2647
3173
  "justify": "space-between",
2648
3174
  "children": [
2649
3175
  {
2650
- "type": "stack",
2651
3176
  "direction": "horizontal",
2652
3177
  "gap": "md",
2653
3178
  "children": [
2654
3179
  {
2655
- "type": "icon",
2656
3180
  "name": "bar-chart-2",
2657
- "size": "lg"
3181
+ "size": "lg",
3182
+ "type": "icon"
2658
3183
  },
2659
3184
  {
2660
- "type": "typography",
2661
3185
  "content": "Analytics",
3186
+ "type": "typography",
2662
3187
  "variant": "h2"
2663
3188
  }
2664
- ]
3189
+ ],
3190
+ "type": "stack"
2665
3191
  },
2666
3192
  {
2667
- "type": "button",
2668
3193
  "label": "Refresh",
3194
+ "icon": "refresh-cw",
2669
3195
  "event": "REFRESH",
2670
3196
  "variant": "secondary",
2671
- "icon": "refresh-cw"
3197
+ "type": "button"
2672
3198
  }
2673
- ]
3199
+ ],
3200
+ "direction": "horizontal"
2674
3201
  },
2675
3202
  {
2676
3203
  "type": "divider"
2677
3204
  },
2678
3205
  {
2679
- "type": "box",
2680
3206
  "padding": "md",
2681
3207
  "children": [
2682
3208
  {
2683
- "type": "simple-grid",
2684
- "columns": 3,
2685
3209
  "children": [
2686
3210
  {
2687
3211
  "type": "stat-display",
2688
- "label": "TotalRequests",
2689
3212
  "value": [
2690
3213
  "object/get",
2691
3214
  [
@@ -2693,7 +3216,8 @@
2693
3216
  "@entity"
2694
3217
  ],
2695
3218
  "totalRequests"
2696
- ]
3219
+ ],
3220
+ "label": "TotalRequests"
2697
3221
  },
2698
3222
  {
2699
3223
  "type": "stat-display",
@@ -2748,71 +3272,74 @@
2748
3272
  }
2749
3273
  ]
2750
3274
  }
2751
- ]
3275
+ ],
3276
+ "columns": 3.0,
3277
+ "type": "simple-grid"
2752
3278
  }
2753
- ]
3279
+ ],
3280
+ "type": "box"
2754
3281
  },
2755
3282
  {
2756
3283
  "type": "divider"
2757
3284
  },
2758
3285
  {
3286
+ "columns": 2.0,
2759
3287
  "type": "grid",
2760
- "columns": 2,
2761
3288
  "gap": "md",
2762
3289
  "children": [
2763
3290
  {
2764
- "type": "card",
2765
3291
  "children": [
2766
3292
  {
2767
3293
  "type": "typography",
2768
3294
  "variant": "caption",
2769
3295
  "content": "Chart View"
2770
3296
  }
2771
- ]
3297
+ ],
3298
+ "type": "card"
2772
3299
  },
2773
3300
  {
2774
3301
  "type": "card",
2775
3302
  "children": [
2776
3303
  {
2777
- "type": "typography",
2778
3304
  "variant": "caption",
2779
- "content": "Graph View"
3305
+ "content": "Graph View",
3306
+ "type": "typography"
2780
3307
  }
2781
3308
  ]
2782
3309
  }
2783
3310
  ]
2784
3311
  },
2785
3312
  {
2786
- "type": "line-chart",
3313
+ "xKey": "date",
2787
3314
  "data": [
2788
3315
  {
2789
- "date": "Jan",
2790
- "value": 12
3316
+ "value": 12.0,
3317
+ "date": "Jan"
2791
3318
  },
2792
3319
  {
2793
3320
  "date": "Feb",
2794
- "value": 19
3321
+ "value": 19.0
2795
3322
  },
2796
3323
  {
2797
- "date": "Mar",
2798
- "value": 15
3324
+ "value": 15.0,
3325
+ "date": "Mar"
2799
3326
  },
2800
3327
  {
2801
- "date": "Apr",
2802
- "value": 25
3328
+ "value": 25.0,
3329
+ "date": "Apr"
2803
3330
  },
2804
3331
  {
2805
3332
  "date": "May",
2806
- "value": 22
3333
+ "value": 22.0
2807
3334
  },
2808
3335
  {
2809
3336
  "date": "Jun",
2810
- "value": 30
3337
+ "value": 30.0
2811
3338
  }
2812
3339
  ],
2813
- "xKey": "date",
2814
- "yKey": "value",
2815
- "title": "Trend"
3340
+ "type": "line-chart",
3341
+ "title": "Trend",
3342
+ "yKey": "value"
2816
3343
  },
2817
3344
  {
2818
3345
  "type": "chart-legend",
@@ -2822,33 +3349,35 @@
2822
3349
  "color": "primary"
2823
3350
  },
2824
3351
  {
2825
- "label": "Previous",
2826
- "color": "muted"
3352
+ "color": "muted",
3353
+ "label": "Previous"
2827
3354
  }
2828
3355
  ]
2829
3356
  },
2830
3357
  {
2831
3358
  "type": "graph-view",
3359
+ "height": 200.0,
2832
3360
  "nodes": [
2833
3361
  {
2834
3362
  "id": "a",
2835
- "label": "Start",
2836
- "x": 50,
2837
- "y": 100
3363
+ "x": 50.0,
3364
+ "y": 100.0,
3365
+ "label": "Start"
2838
3366
  },
2839
3367
  {
2840
- "id": "b",
2841
3368
  "label": "Process",
2842
- "x": 200,
2843
- "y": 50
3369
+ "x": 200.0,
3370
+ "id": "b",
3371
+ "y": 50.0
2844
3372
  },
2845
3373
  {
3374
+ "x": 350.0,
2846
3375
  "id": "c",
2847
3376
  "label": "End",
2848
- "x": 350,
2849
- "y": 100
3377
+ "y": 100.0
2850
3378
  }
2851
3379
  ],
3380
+ "width": 400.0,
2852
3381
  "edges": [
2853
3382
  {
2854
3383
  "from": "a",
@@ -2858,11 +3387,12 @@
2858
3387
  "from": "b",
2859
3388
  "to": "c"
2860
3389
  }
2861
- ],
2862
- "width": 400,
2863
- "height": 200
3390
+ ]
2864
3391
  }
2865
- ]
3392
+ ],
3393
+ "type": "stack",
3394
+ "gap": "lg",
3395
+ "direction": "vertical"
2866
3396
  }
2867
3397
  ]
2868
3398
  }
@@ -2878,7 +3408,13 @@
2878
3408
  "effects": [
2879
3409
  [
2880
3410
  "fetch",
2881
- "Analytics"
3411
+ "Analytics",
3412
+ {
3413
+ "emit": {
3414
+ "success": "AnalyticsLoaded",
3415
+ "failure": "AnalyticsLoadFailed"
3416
+ }
3417
+ }
2882
3418
  ],
2883
3419
  [
2884
3420
  "render-ui",
@@ -2888,18 +3424,18 @@
2888
3424
  "appName": "API Gateway",
2889
3425
  "navItems": [
2890
3426
  {
2891
- "label": "Routes",
2892
3427
  "href": "/routes",
2893
- "icon": "git-branch"
3428
+ "icon": "git-branch",
3429
+ "label": "Routes"
2894
3430
  },
2895
3431
  {
2896
- "label": "Backends",
2897
3432
  "href": "/backends",
3433
+ "label": "Backends",
2898
3434
  "icon": "server"
2899
3435
  },
2900
3436
  {
2901
- "label": "Analytics",
2902
3437
  "href": "/analytics",
3438
+ "label": "Analytics",
2903
3439
  "icon": "bar-chart-2"
2904
3440
  }
2905
3441
  ],
@@ -2908,49 +3444,47 @@
2908
3444
  "type": "scaled-diagram",
2909
3445
  "children": [
2910
3446
  {
2911
- "type": "stack",
2912
- "direction": "vertical",
2913
3447
  "gap": "lg",
2914
3448
  "children": [
2915
3449
  {
2916
- "type": "breadcrumb",
2917
3450
  "items": [
2918
3451
  {
2919
- "label": "Home",
2920
- "href": "/"
3452
+ "href": "/",
3453
+ "label": "Home"
2921
3454
  },
2922
3455
  {
2923
3456
  "label": "Analytics"
2924
3457
  }
2925
- ]
3458
+ ],
3459
+ "type": "breadcrumb"
2926
3460
  },
2927
3461
  {
2928
- "type": "stack",
2929
- "direction": "horizontal",
2930
3462
  "gap": "md",
3463
+ "direction": "horizontal",
3464
+ "type": "stack",
2931
3465
  "justify": "space-between",
2932
3466
  "children": [
2933
3467
  {
2934
3468
  "type": "stack",
2935
- "direction": "horizontal",
2936
- "gap": "md",
2937
3469
  "children": [
2938
3470
  {
3471
+ "size": "lg",
2939
3472
  "type": "icon",
2940
- "name": "bar-chart-2",
2941
- "size": "lg"
3473
+ "name": "bar-chart-2"
2942
3474
  },
2943
3475
  {
2944
- "type": "typography",
2945
3476
  "content": "Analytics",
3477
+ "type": "typography",
2946
3478
  "variant": "h2"
2947
3479
  }
2948
- ]
3480
+ ],
3481
+ "direction": "horizontal",
3482
+ "gap": "md"
2949
3483
  },
2950
3484
  {
3485
+ "event": "REFRESH",
2951
3486
  "type": "button",
2952
3487
  "label": "Refresh",
2953
- "event": "REFRESH",
2954
3488
  "variant": "secondary",
2955
3489
  "icon": "refresh-cw"
2956
3490
  }
@@ -2960,15 +3494,11 @@
2960
3494
  "type": "divider"
2961
3495
  },
2962
3496
  {
2963
- "type": "box",
2964
3497
  "padding": "md",
2965
3498
  "children": [
2966
3499
  {
2967
- "type": "simple-grid",
2968
- "columns": 3,
2969
3500
  "children": [
2970
3501
  {
2971
- "type": "stat-display",
2972
3502
  "label": "TotalRequests",
2973
3503
  "value": [
2974
3504
  "object/get",
@@ -2977,7 +3507,8 @@
2977
3507
  "@entity"
2978
3508
  ],
2979
3509
  "totalRequests"
2980
- ]
3510
+ ],
3511
+ "type": "stat-display"
2981
3512
  },
2982
3513
  {
2983
3514
  "type": "stat-display",
@@ -3004,21 +3535,17 @@
3004
3535
  ]
3005
3536
  },
3006
3537
  {
3007
- "type": "card",
3008
3538
  "children": [
3009
3539
  {
3010
- "type": "stack",
3011
3540
  "direction": "vertical",
3012
3541
  "gap": "sm",
3013
3542
  "children": [
3014
3543
  {
3544
+ "content": "Uptime",
3015
3545
  "type": "typography",
3016
- "variant": "caption",
3017
- "content": "Uptime"
3546
+ "variant": "caption"
3018
3547
  },
3019
3548
  {
3020
- "type": "typography",
3021
- "variant": "h3",
3022
3549
  "content": [
3023
3550
  "object/get",
3024
3551
  [
@@ -3026,22 +3553,28 @@
3026
3553
  "@entity"
3027
3554
  ],
3028
3555
  "uptime"
3029
- ]
3556
+ ],
3557
+ "variant": "h3",
3558
+ "type": "typography"
3030
3559
  }
3031
- ]
3560
+ ],
3561
+ "type": "stack"
3032
3562
  }
3033
- ]
3563
+ ],
3564
+ "type": "card"
3034
3565
  }
3035
- ]
3566
+ ],
3567
+ "columns": 3.0,
3568
+ "type": "simple-grid"
3036
3569
  }
3037
- ]
3570
+ ],
3571
+ "type": "box"
3038
3572
  },
3039
3573
  {
3040
3574
  "type": "divider"
3041
3575
  },
3042
3576
  {
3043
3577
  "type": "grid",
3044
- "columns": 2,
3045
3578
  "gap": "md",
3046
3579
  "children": [
3047
3580
  {
@@ -3049,8 +3582,8 @@
3049
3582
  "children": [
3050
3583
  {
3051
3584
  "type": "typography",
3052
- "variant": "caption",
3053
- "content": "Chart View"
3585
+ "content": "Chart View",
3586
+ "variant": "caption"
3054
3587
  }
3055
3588
  ]
3056
3589
  },
@@ -3058,95 +3591,98 @@
3058
3591
  "type": "card",
3059
3592
  "children": [
3060
3593
  {
3061
- "type": "typography",
3062
3594
  "variant": "caption",
3063
- "content": "Graph View"
3595
+ "content": "Graph View",
3596
+ "type": "typography"
3064
3597
  }
3065
3598
  ]
3066
3599
  }
3067
- ]
3600
+ ],
3601
+ "columns": 2.0
3068
3602
  },
3069
3603
  {
3070
3604
  "type": "line-chart",
3071
3605
  "data": [
3072
3606
  {
3073
- "date": "Jan",
3074
- "value": 12
3607
+ "value": 12.0,
3608
+ "date": "Jan"
3075
3609
  },
3076
3610
  {
3077
3611
  "date": "Feb",
3078
- "value": 19
3612
+ "value": 19.0
3079
3613
  },
3080
3614
  {
3081
- "date": "Mar",
3082
- "value": 15
3615
+ "value": 15.0,
3616
+ "date": "Mar"
3083
3617
  },
3084
3618
  {
3085
- "date": "Apr",
3086
- "value": 25
3619
+ "value": 25.0,
3620
+ "date": "Apr"
3087
3621
  },
3088
3622
  {
3089
- "date": "May",
3090
- "value": 22
3623
+ "value": 22.0,
3624
+ "date": "May"
3091
3625
  },
3092
3626
  {
3093
3627
  "date": "Jun",
3094
- "value": 30
3628
+ "value": 30.0
3095
3629
  }
3096
3630
  ],
3631
+ "title": "Trend",
3097
3632
  "xKey": "date",
3098
- "yKey": "value",
3099
- "title": "Trend"
3633
+ "yKey": "value"
3100
3634
  },
3101
3635
  {
3102
- "type": "chart-legend",
3103
3636
  "items": [
3104
3637
  {
3105
- "label": "Current",
3106
- "color": "primary"
3638
+ "color": "primary",
3639
+ "label": "Current"
3107
3640
  },
3108
3641
  {
3109
- "label": "Previous",
3110
- "color": "muted"
3642
+ "color": "muted",
3643
+ "label": "Previous"
3111
3644
  }
3112
- ]
3645
+ ],
3646
+ "type": "chart-legend"
3113
3647
  },
3114
3648
  {
3649
+ "height": 200.0,
3115
3650
  "type": "graph-view",
3116
3651
  "nodes": [
3117
3652
  {
3653
+ "y": 100.0,
3118
3654
  "id": "a",
3119
3655
  "label": "Start",
3120
- "x": 50,
3121
- "y": 100
3656
+ "x": 50.0
3122
3657
  },
3123
3658
  {
3659
+ "y": 50.0,
3124
3660
  "id": "b",
3125
3661
  "label": "Process",
3126
- "x": 200,
3127
- "y": 50
3662
+ "x": 200.0
3128
3663
  },
3129
3664
  {
3665
+ "y": 100.0,
3130
3666
  "id": "c",
3131
3667
  "label": "End",
3132
- "x": 350,
3133
- "y": 100
3668
+ "x": 350.0
3134
3669
  }
3135
3670
  ],
3136
3671
  "edges": [
3137
3672
  {
3138
- "from": "a",
3139
- "to": "b"
3673
+ "to": "b",
3674
+ "from": "a"
3140
3675
  },
3141
3676
  {
3142
3677
  "from": "b",
3143
3678
  "to": "c"
3144
3679
  }
3145
3680
  ],
3146
- "width": 400,
3147
- "height": 200
3681
+ "width": 400.0
3148
3682
  }
3149
- ]
3683
+ ],
3684
+ "direction": "vertical",
3685
+ "type": "stack"
3150
3686
  }
3151
3687
  ]
3152
3688
  }
@@ -3162,81 +3698,69 @@
3162
3698
  "effects": [
3163
3699
  [
3164
3700
  "fetch",
3165
- "Analytics"
3701
+ "Analytics",
3702
+ {
3703
+ "emit": {
3704
+ "success": "AnalyticsLoaded",
3705
+ "failure": "AnalyticsLoadFailed"
3706
+ }
3707
+ }
3166
3708
  ],
3167
3709
  [
3168
3710
  "render-ui",
3169
3711
  "main",
3170
3712
  {
3171
3713
  "type": "dashboard-layout",
3172
- "appName": "API Gateway",
3173
- "navItems": [
3174
- {
3175
- "label": "Routes",
3176
- "href": "/routes",
3177
- "icon": "git-branch"
3178
- },
3179
- {
3180
- "label": "Backends",
3181
- "href": "/backends",
3182
- "icon": "server"
3183
- },
3184
- {
3185
- "label": "Analytics",
3186
- "href": "/analytics",
3187
- "icon": "bar-chart-2"
3188
- }
3189
- ],
3190
3714
  "children": [
3191
3715
  {
3192
3716
  "type": "scaled-diagram",
3193
3717
  "children": [
3194
3718
  {
3195
- "type": "stack",
3196
3719
  "direction": "vertical",
3720
+ "type": "stack",
3197
3721
  "gap": "lg",
3198
3722
  "children": [
3199
3723
  {
3200
- "type": "breadcrumb",
3201
3724
  "items": [
3202
3725
  {
3203
- "label": "Home",
3204
- "href": "/"
3726
+ "href": "/",
3727
+ "label": "Home"
3205
3728
  },
3206
3729
  {
3207
3730
  "label": "Analytics"
3208
3731
  }
3209
- ]
3732
+ ],
3733
+ "type": "breadcrumb"
3210
3734
  },
3211
3735
  {
3212
- "type": "stack",
3213
3736
  "direction": "horizontal",
3214
3737
  "gap": "md",
3215
3738
  "justify": "space-between",
3739
+ "type": "stack",
3216
3740
  "children": [
3217
3741
  {
3218
- "type": "stack",
3219
- "direction": "horizontal",
3220
3742
  "gap": "md",
3221
3743
  "children": [
3222
3744
  {
3223
- "type": "icon",
3224
3745
  "name": "bar-chart-2",
3225
- "size": "lg"
3746
+ "size": "lg",
3747
+ "type": "icon"
3226
3748
  },
3227
3749
  {
3228
- "type": "typography",
3229
3750
  "content": "Analytics",
3230
- "variant": "h2"
3751
+ "variant": "h2",
3752
+ "type": "typography"
3231
3753
  }
3232
- ]
3754
+ ],
3755
+ "type": "stack",
3756
+ "direction": "horizontal"
3233
3757
  },
3234
3758
  {
3235
- "type": "button",
3236
- "label": "Refresh",
3759
+ "icon": "refresh-cw",
3237
3760
  "event": "REFRESH",
3238
- "variant": "secondary",
3239
- "icon": "refresh-cw"
3761
+ "label": "Refresh",
3762
+ "type": "button",
3763
+ "variant": "secondary"
3240
3764
  }
3241
3765
  ]
3242
3766
  },
@@ -3248,11 +3772,8 @@
3248
3772
  "padding": "md",
3249
3773
  "children": [
3250
3774
  {
3251
- "type": "simple-grid",
3252
- "columns": 3,
3253
3775
  "children": [
3254
3776
  {
3255
- "type": "stat-display",
3256
3777
  "label": "TotalRequests",
3257
3778
  "value": [
3258
3779
  "object/get",
@@ -3261,11 +3782,12 @@
3261
3782
  "@entity"
3262
3783
  ],
3263
3784
  "totalRequests"
3264
- ]
3785
+ ],
3786
+ "type": "stat-display"
3265
3787
  },
3266
3788
  {
3267
- "type": "stat-display",
3268
3789
  "label": "ErrorRate",
3790
+ "type": "stat-display",
3269
3791
  "value": [
3270
3792
  "object/get",
3271
3793
  [
@@ -3276,7 +3798,6 @@
3276
3798
  ]
3277
3799
  },
3278
3800
  {
3279
- "type": "stat-display",
3280
3801
  "label": "AvgLatency",
3281
3802
  "value": [
3282
3803
  "object/get",
@@ -3285,24 +3806,21 @@
3285
3806
  "@entity"
3286
3807
  ],
3287
3808
  "avgLatency"
3288
- ]
3809
+ ],
3810
+ "type": "stat-display"
3289
3811
  },
3290
3812
  {
3291
- "type": "card",
3292
3813
  "children": [
3293
3814
  {
3294
3815
  "type": "stack",
3295
- "direction": "vertical",
3296
3816
  "gap": "sm",
3297
3817
  "children": [
3298
3818
  {
3299
- "type": "typography",
3300
3819
  "variant": "caption",
3820
+ "type": "typography",
3301
3821
  "content": "Uptime"
3302
3822
  },
3303
3823
  {
3304
- "type": "typography",
3305
- "variant": "h3",
3306
3824
  "content": [
3307
3825
  "object/get",
3308
3826
  [
@@ -3310,13 +3828,19 @@
3310
3828
  "@entity"
3311
3829
  ],
3312
3830
  "uptime"
3313
- ]
3831
+ ],
3832
+ "type": "typography",
3833
+ "variant": "h3"
3314
3834
  }
3315
- ]
3835
+ ],
3836
+ "direction": "vertical"
3316
3837
  }
3317
- ]
3838
+ ],
3839
+ "type": "card"
3318
3840
  }
3319
- ]
3841
+ ],
3842
+ "type": "simple-grid",
3843
+ "columns": 3.0
3320
3844
  }
3321
3845
  ]
3322
3846
  },
@@ -3324,9 +3848,6 @@
3324
3848
  "type": "divider"
3325
3849
  },
3326
3850
  {
3327
- "type": "grid",
3328
- "columns": 2,
3329
- "gap": "md",
3330
3851
  "children": [
3331
3852
  {
3332
3853
  "type": "card",
@@ -3348,39 +3869,42 @@
3348
3869
  }
3349
3870
  ]
3350
3871
  }
3351
- ]
3872
+ ],
3873
+ "columns": 2.0,
3874
+ "type": "grid",
3875
+ "gap": "md"
3352
3876
  },
3353
3877
  {
3354
- "type": "line-chart",
3878
+ "xKey": "date",
3879
+ "yKey": "value",
3355
3880
  "data": [
3356
3881
  {
3357
3882
  "date": "Jan",
3358
- "value": 12
3883
+ "value": 12.0
3359
3884
  },
3360
3885
  {
3361
- "date": "Feb",
3362
- "value": 19
3886
+ "value": 19.0,
3887
+ "date": "Feb"
3363
3888
  },
3364
3889
  {
3365
3890
  "date": "Mar",
3366
- "value": 15
3891
+ "value": 15.0
3367
3892
  },
3368
3893
  {
3369
3894
  "date": "Apr",
3370
- "value": 25
3895
+ "value": 25.0
3371
3896
  },
3372
3897
  {
3373
3898
  "date": "May",
3374
- "value": 22
3899
+ "value": 22.0
3375
3900
  },
3376
3901
  {
3377
3902
  "date": "Jun",
3378
- "value": 30
3903
+ "value": 30.0
3379
3904
  }
3380
3905
  ],
3381
- "xKey": "date",
3382
- "yKey": "value",
3383
- "title": "Trend"
3906
+ "title": "Trend",
3907
+ "type": "line-chart"
3384
3908
  },
3385
3909
  {
3386
3910
  "type": "chart-legend",
@@ -3390,31 +3914,33 @@
3390
3914
  "color": "primary"
3391
3915
  },
3392
3916
  {
3393
- "label": "Previous",
3394
- "color": "muted"
3917
+ "color": "muted",
3918
+ "label": "Previous"
3395
3919
  }
3396
3920
  ]
3397
3921
  },
3398
3922
  {
3399
3923
  "type": "graph-view",
3924
+ "height": 200.0,
3925
+ "width": 400.0,
3400
3926
  "nodes": [
3401
3927
  {
3402
3928
  "id": "a",
3403
3929
  "label": "Start",
3404
- "x": 50,
3405
- "y": 100
3930
+ "x": 50.0,
3931
+ "y": 100.0
3406
3932
  },
3407
3933
  {
3408
- "id": "b",
3934
+ "y": 50.0,
3935
+ "x": 200.0,
3409
3936
  "label": "Process",
3410
- "x": 200,
3411
- "y": 50
3937
+ "id": "b"
3412
3938
  },
3413
3939
  {
3414
- "id": "c",
3940
+ "y": 100.0,
3415
3941
  "label": "End",
3416
- "x": 350,
3417
- "y": 100
3942
+ "x": 350.0,
3943
+ "id": "c"
3418
3944
  }
3419
3945
  ],
3420
3946
  "edges": [
@@ -3426,15 +3952,31 @@
3426
3952
  "from": "b",
3427
3953
  "to": "c"
3428
3954
  }
3429
- ],
3430
- "width": 400,
3431
- "height": 200
3955
+ ]
3432
3956
  }
3433
3957
  ]
3434
3958
  }
3435
3959
  ]
3436
3960
  }
3437
- ]
3961
+ ],
3962
+ "navItems": [
3963
+ {
3964
+ "href": "/routes",
3965
+ "icon": "git-branch",
3966
+ "label": "Routes"
3967
+ },
3968
+ {
3969
+ "label": "Backends",
3970
+ "href": "/backends",
3971
+ "icon": "server"
3972
+ },
3973
+ {
3974
+ "href": "/analytics",
3975
+ "icon": "bar-chart-2",
3976
+ "label": "Analytics"
3977
+ }
3978
+ ],
3979
+ "appName": "API Gateway"
3438
3980
  }
3439
3981
  ]
3440
3982
  ]
@@ -3446,46 +3988,30 @@
3446
3988
  "effects": [
3447
3989
  [
3448
3990
  "fetch",
3449
- "Analytics"
3991
+ "Analytics",
3992
+ {
3993
+ "emit": {
3994
+ "failure": "AnalyticsLoadFailed",
3995
+ "success": "AnalyticsLoaded"
3996
+ }
3997
+ }
3450
3998
  ],
3451
3999
  [
3452
4000
  "render-ui",
3453
4001
  "main",
3454
4002
  {
3455
- "type": "dashboard-layout",
3456
- "appName": "API Gateway",
3457
- "navItems": [
3458
- {
3459
- "label": "Routes",
3460
- "href": "/routes",
3461
- "icon": "git-branch"
3462
- },
3463
- {
3464
- "label": "Backends",
3465
- "href": "/backends",
3466
- "icon": "server"
3467
- },
3468
- {
3469
- "label": "Analytics",
3470
- "href": "/analytics",
3471
- "icon": "bar-chart-2"
3472
- }
3473
- ],
3474
4003
  "children": [
3475
4004
  {
3476
- "type": "scaled-diagram",
3477
4005
  "children": [
3478
4006
  {
3479
4007
  "type": "stack",
3480
- "direction": "vertical",
3481
- "gap": "lg",
3482
4008
  "children": [
3483
4009
  {
3484
4010
  "type": "breadcrumb",
3485
4011
  "items": [
3486
4012
  {
3487
- "label": "Home",
3488
- "href": "/"
4013
+ "href": "/",
4014
+ "label": "Home"
3489
4015
  },
3490
4016
  {
3491
4017
  "label": "Analytics"
@@ -3493,15 +4019,12 @@
3493
4019
  ]
3494
4020
  },
3495
4021
  {
3496
- "type": "stack",
3497
4022
  "direction": "horizontal",
3498
- "gap": "md",
3499
4023
  "justify": "space-between",
3500
4024
  "children": [
3501
4025
  {
3502
- "type": "stack",
3503
4026
  "direction": "horizontal",
3504
- "gap": "md",
4027
+ "type": "stack",
3505
4028
  "children": [
3506
4029
  {
3507
4030
  "type": "icon",
@@ -3509,35 +4032,36 @@
3509
4032
  "size": "lg"
3510
4033
  },
3511
4034
  {
3512
- "type": "typography",
3513
4035
  "content": "Analytics",
4036
+ "type": "typography",
3514
4037
  "variant": "h2"
3515
4038
  }
3516
- ]
4039
+ ],
4040
+ "gap": "md"
3517
4041
  },
3518
4042
  {
3519
- "type": "button",
3520
4043
  "label": "Refresh",
3521
- "event": "REFRESH",
4044
+ "icon": "refresh-cw",
4045
+ "type": "button",
3522
4046
  "variant": "secondary",
3523
- "icon": "refresh-cw"
4047
+ "event": "REFRESH"
3524
4048
  }
3525
- ]
4049
+ ],
4050
+ "type": "stack",
4051
+ "gap": "md"
3526
4052
  },
3527
4053
  {
3528
4054
  "type": "divider"
3529
4055
  },
3530
4056
  {
3531
4057
  "type": "box",
3532
- "padding": "md",
3533
4058
  "children": [
3534
4059
  {
4060
+ "columns": 3.0,
3535
4061
  "type": "simple-grid",
3536
- "columns": 3,
3537
4062
  "children": [
3538
4063
  {
3539
4064
  "type": "stat-display",
3540
- "label": "TotalRequests",
3541
4065
  "value": [
3542
4066
  "object/get",
3543
4067
  [
@@ -3545,11 +4069,10 @@
3545
4069
  "@entity"
3546
4070
  ],
3547
4071
  "totalRequests"
3548
- ]
4072
+ ],
4073
+ "label": "TotalRequests"
3549
4074
  },
3550
4075
  {
3551
- "type": "stat-display",
3552
- "label": "ErrorRate",
3553
4076
  "value": [
3554
4077
  "object/get",
3555
4078
  [
@@ -3557,11 +4080,11 @@
3557
4080
  "@entity"
3558
4081
  ],
3559
4082
  "errorRate"
3560
- ]
4083
+ ],
4084
+ "label": "ErrorRate",
4085
+ "type": "stat-display"
3561
4086
  },
3562
4087
  {
3563
- "type": "stat-display",
3564
- "label": "AvgLatency",
3565
4088
  "value": [
3566
4089
  "object/get",
3567
4090
  [
@@ -3569,23 +4092,21 @@
3569
4092
  "@entity"
3570
4093
  ],
3571
4094
  "avgLatency"
3572
- ]
4095
+ ],
4096
+ "type": "stat-display",
4097
+ "label": "AvgLatency"
3573
4098
  },
3574
4099
  {
3575
4100
  "type": "card",
3576
4101
  "children": [
3577
4102
  {
3578
- "type": "stack",
3579
- "direction": "vertical",
3580
- "gap": "sm",
3581
4103
  "children": [
3582
4104
  {
3583
- "type": "typography",
3584
4105
  "variant": "caption",
4106
+ "type": "typography",
3585
4107
  "content": "Uptime"
3586
4108
  },
3587
4109
  {
3588
- "type": "typography",
3589
4110
  "variant": "h3",
3590
4111
  "content": [
3591
4112
  "object/get",
@@ -3594,77 +4115,82 @@
3594
4115
  "@entity"
3595
4116
  ],
3596
4117
  "uptime"
3597
- ]
4118
+ ],
4119
+ "type": "typography"
3598
4120
  }
3599
- ]
4121
+ ],
4122
+ "type": "stack",
4123
+ "direction": "vertical",
4124
+ "gap": "sm"
3600
4125
  }
3601
4126
  ]
3602
4127
  }
3603
4128
  ]
3604
4129
  }
3605
- ]
4130
+ ],
4131
+ "padding": "md"
3606
4132
  },
3607
4133
  {
3608
4134
  "type": "divider"
3609
4135
  },
3610
4136
  {
3611
4137
  "type": "grid",
3612
- "columns": 2,
3613
- "gap": "md",
3614
4138
  "children": [
3615
4139
  {
3616
4140
  "type": "card",
3617
4141
  "children": [
3618
4142
  {
3619
- "type": "typography",
3620
4143
  "variant": "caption",
4144
+ "type": "typography",
3621
4145
  "content": "Chart View"
3622
4146
  }
3623
4147
  ]
3624
4148
  },
3625
4149
  {
3626
- "type": "card",
3627
4150
  "children": [
3628
4151
  {
3629
- "type": "typography",
3630
4152
  "variant": "caption",
4153
+ "type": "typography",
3631
4154
  "content": "Graph View"
3632
4155
  }
3633
- ]
4156
+ ],
4157
+ "type": "card"
3634
4158
  }
3635
- ]
4159
+ ],
4160
+ "columns": 2.0,
4161
+ "gap": "md"
3636
4162
  },
3637
4163
  {
3638
4164
  "type": "line-chart",
4165
+ "title": "Trend",
3639
4166
  "data": [
3640
4167
  {
3641
- "date": "Jan",
3642
- "value": 12
4168
+ "value": 12.0,
4169
+ "date": "Jan"
3643
4170
  },
3644
4171
  {
3645
- "date": "Feb",
3646
- "value": 19
4172
+ "value": 19.0,
4173
+ "date": "Feb"
3647
4174
  },
3648
4175
  {
3649
- "date": "Mar",
3650
- "value": 15
4176
+ "value": 15.0,
4177
+ "date": "Mar"
3651
4178
  },
3652
4179
  {
3653
4180
  "date": "Apr",
3654
- "value": 25
4181
+ "value": 25.0
3655
4182
  },
3656
4183
  {
3657
- "date": "May",
3658
- "value": 22
4184
+ "value": 22.0,
4185
+ "date": "May"
3659
4186
  },
3660
4187
  {
3661
4188
  "date": "Jun",
3662
- "value": 30
4189
+ "value": 30.0
3663
4190
  }
3664
4191
  ],
3665
- "xKey": "date",
3666
4192
  "yKey": "value",
3667
- "title": "Trend"
4193
+ "xKey": "date"
3668
4194
  },
3669
4195
  {
3670
4196
  "type": "chart-legend",
@@ -3680,43 +4206,65 @@
3680
4206
  ]
3681
4207
  },
3682
4208
  {
3683
- "type": "graph-view",
4209
+ "height": 200.0,
3684
4210
  "nodes": [
3685
4211
  {
4212
+ "x": 50.0,
3686
4213
  "id": "a",
3687
4214
  "label": "Start",
3688
- "x": 50,
3689
- "y": 100
4215
+ "y": 100.0
3690
4216
  },
3691
4217
  {
3692
4218
  "id": "b",
3693
- "label": "Process",
3694
- "x": 200,
3695
- "y": 50
4219
+ "y": 50.0,
4220
+ "x": 200.0,
4221
+ "label": "Process"
3696
4222
  },
3697
4223
  {
3698
4224
  "id": "c",
3699
4225
  "label": "End",
3700
- "x": 350,
3701
- "y": 100
4226
+ "x": 350.0,
4227
+ "y": 100.0
3702
4228
  }
3703
4229
  ],
4230
+ "width": 400.0,
4231
+ "type": "graph-view",
3704
4232
  "edges": [
3705
4233
  {
3706
- "from": "a",
3707
- "to": "b"
4234
+ "to": "b",
4235
+ "from": "a"
3708
4236
  },
3709
4237
  {
3710
- "from": "b",
3711
- "to": "c"
4238
+ "to": "c",
4239
+ "from": "b"
3712
4240
  }
3713
- ],
3714
- "width": 400,
3715
- "height": 200
4241
+ ]
3716
4242
  }
3717
- ]
4243
+ ],
4244
+ "direction": "vertical",
4245
+ "gap": "lg"
3718
4246
  }
3719
- ]
4247
+ ],
4248
+ "type": "scaled-diagram"
4249
+ }
4250
+ ],
4251
+ "type": "dashboard-layout",
4252
+ "appName": "API Gateway",
4253
+ "navItems": [
4254
+ {
4255
+ "label": "Routes",
4256
+ "icon": "git-branch",
4257
+ "href": "/routes"
4258
+ },
4259
+ {
4260
+ "icon": "server",
4261
+ "href": "/backends",
4262
+ "label": "Backends"
4263
+ },
4264
+ {
4265
+ "icon": "bar-chart-2",
4266
+ "label": "Analytics",
4267
+ "href": "/analytics"
3720
4268
  }
3721
4269
  ]
3722
4270
  }
@@ -3724,12 +4272,13 @@
3724
4272
  ]
3725
4273
  }
3726
4274
  ]
3727
- }
4275
+ },
4276
+ "scope": "collection"
3728
4277
  }
3729
4278
  ],
3730
4279
  "pages": [
3731
4280
  {
3732
- "name": "AnalyticsPage",
4281
+ "name": "Analytics",
3733
4282
  "path": "/analytics",
3734
4283
  "traits": [
3735
4284
  {
@@ -3740,4 +4289,4 @@
3740
4289
  ]
3741
4290
  }
3742
4291
  ]
3743
- }
4292
+ }