nuxt-observe 0.0.2

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 (435) hide show
  1. package/README.md +92 -0
  2. package/dist/module.d.mts +7 -0
  3. package/dist/module.json +9 -0
  4. package/dist/module.mjs +393 -0
  5. package/dist/runtime/app/assets/css/main.css +1 -0
  6. package/dist/runtime/app/components/ObserveActivityFeed.d.vue.ts +13 -0
  7. package/dist/runtime/app/components/ObserveActivityFeed.vue +77 -0
  8. package/dist/runtime/app/components/ObserveActivityFeed.vue.d.ts +13 -0
  9. package/dist/runtime/app/components/ObserveActivityTable.d.vue.ts +30 -0
  10. package/dist/runtime/app/components/ObserveActivityTable.vue +187 -0
  11. package/dist/runtime/app/components/ObserveActivityTable.vue.d.ts +30 -0
  12. package/dist/runtime/app/components/ObserveCan.d.vue.ts +27 -0
  13. package/dist/runtime/app/components/ObserveCan.vue +16 -0
  14. package/dist/runtime/app/components/ObserveCan.vue.d.ts +27 -0
  15. package/dist/runtime/app/components/ObserveErrorsTable.d.vue.ts +19 -0
  16. package/dist/runtime/app/components/ObserveErrorsTable.vue +105 -0
  17. package/dist/runtime/app/components/ObserveErrorsTable.vue.d.ts +19 -0
  18. package/dist/runtime/app/components/ObserveHealthHero.d.vue.ts +16 -0
  19. package/dist/runtime/app/components/ObserveHealthHero.vue +114 -0
  20. package/dist/runtime/app/components/ObserveHealthHero.vue.d.ts +16 -0
  21. package/dist/runtime/app/components/ObserveJourneySearch.d.vue.ts +13 -0
  22. package/dist/runtime/app/components/ObserveJourneySearch.vue +55 -0
  23. package/dist/runtime/app/components/ObserveJourneySearch.vue.d.ts +13 -0
  24. package/dist/runtime/app/components/ObserveJourneyTimeline.d.vue.ts +14 -0
  25. package/dist/runtime/app/components/ObserveJourneyTimeline.vue +119 -0
  26. package/dist/runtime/app/components/ObserveJourneyTimeline.vue.d.ts +14 -0
  27. package/dist/runtime/app/components/ObserveLogDetail.d.vue.ts +12 -0
  28. package/dist/runtime/app/components/ObserveLogDetail.vue +187 -0
  29. package/dist/runtime/app/components/ObserveLogDetail.vue.d.ts +12 -0
  30. package/dist/runtime/app/components/ObserveLogLevelBadge.d.vue.ts +10 -0
  31. package/dist/runtime/app/components/ObserveLogLevelBadge.vue +29 -0
  32. package/dist/runtime/app/components/ObserveLogLevelBadge.vue.d.ts +10 -0
  33. package/dist/runtime/app/components/ObserveLogsFilterBar.d.vue.ts +20 -0
  34. package/dist/runtime/app/components/ObserveLogsFilterBar.vue +134 -0
  35. package/dist/runtime/app/components/ObserveLogsFilterBar.vue.d.ts +20 -0
  36. package/dist/runtime/app/components/ObserveLogsTable.d.vue.ts +20 -0
  37. package/dist/runtime/app/components/ObserveLogsTable.vue +92 -0
  38. package/dist/runtime/app/components/ObserveLogsTable.vue.d.ts +20 -0
  39. package/dist/runtime/app/components/ObservePeriodSelector.d.vue.ts +3 -0
  40. package/dist/runtime/app/components/ObservePeriodSelector.vue +22 -0
  41. package/dist/runtime/app/components/ObservePeriodSelector.vue.d.ts +3 -0
  42. package/dist/runtime/app/components/ObserveRegressionAlert.d.vue.ts +12 -0
  43. package/dist/runtime/app/components/ObserveRegressionAlert.vue +27 -0
  44. package/dist/runtime/app/components/ObserveRegressionAlert.vue.d.ts +12 -0
  45. package/dist/runtime/app/components/ObserveServiceSwitcher.d.vue.ts +3 -0
  46. package/dist/runtime/app/components/ObserveServiceSwitcher.vue +49 -0
  47. package/dist/runtime/app/components/ObserveServiceSwitcher.vue.d.ts +3 -0
  48. package/dist/runtime/app/components/ObserveServicesTable.d.vue.ts +15 -0
  49. package/dist/runtime/app/components/ObserveServicesTable.vue +109 -0
  50. package/dist/runtime/app/components/ObserveServicesTable.vue.d.ts +15 -0
  51. package/dist/runtime/app/components/ObserveStatCard.d.vue.ts +14 -0
  52. package/dist/runtime/app/components/ObserveStatCard.vue +34 -0
  53. package/dist/runtime/app/components/ObserveStatCard.vue.d.ts +14 -0
  54. package/dist/runtime/app/components/charts/ObserveErrorRateChart.client.d.vue.ts +15 -0
  55. package/dist/runtime/app/components/charts/ObserveErrorRateChart.client.vue +170 -0
  56. package/dist/runtime/app/components/charts/ObserveErrorRateChart.client.vue.d.ts +15 -0
  57. package/dist/runtime/app/components/charts/ObserveServiceBreakdownChart.client.d.vue.ts +17 -0
  58. package/dist/runtime/app/components/charts/ObserveServiceBreakdownChart.client.vue +208 -0
  59. package/dist/runtime/app/components/charts/ObserveServiceBreakdownChart.client.vue.d.ts +17 -0
  60. package/dist/runtime/app/components/charts/ObserveVersionAdoptionChart.client.d.vue.ts +14 -0
  61. package/dist/runtime/app/components/charts/ObserveVersionAdoptionChart.client.vue +208 -0
  62. package/dist/runtime/app/components/charts/ObserveVersionAdoptionChart.client.vue.d.ts +14 -0
  63. package/dist/runtime/app/components/charts/ObserveVersionCompareChart.client.d.vue.ts +14 -0
  64. package/dist/runtime/app/components/charts/ObserveVersionCompareChart.client.vue +190 -0
  65. package/dist/runtime/app/components/charts/ObserveVersionCompareChart.client.vue.d.ts +14 -0
  66. package/dist/runtime/app/components/charts/ObserveVolumeChart.client.d.vue.ts +16 -0
  67. package/dist/runtime/app/components/charts/ObserveVolumeChart.client.vue +199 -0
  68. package/dist/runtime/app/components/charts/ObserveVolumeChart.client.vue.d.ts +16 -0
  69. package/dist/runtime/app/components/charts/chart-core.d.ts +64 -0
  70. package/dist/runtime/app/components/charts/chart-core.js +136 -0
  71. package/dist/runtime/app/components/settings/ObserveApiKeyPanel.d.vue.ts +8 -0
  72. package/dist/runtime/app/components/settings/ObserveApiKeyPanel.vue +145 -0
  73. package/dist/runtime/app/components/settings/ObserveApiKeyPanel.vue.d.ts +8 -0
  74. package/dist/runtime/app/components/settings/ObserveApiKeyRevealModal.d.vue.ts +19 -0
  75. package/dist/runtime/app/components/settings/ObserveApiKeyRevealModal.vue +106 -0
  76. package/dist/runtime/app/components/settings/ObserveApiKeyRevealModal.vue.d.ts +19 -0
  77. package/dist/runtime/app/components/settings/ObserveAssignmentEditor.d.vue.ts +12 -0
  78. package/dist/runtime/app/components/settings/ObserveAssignmentEditor.vue +67 -0
  79. package/dist/runtime/app/components/settings/ObserveAssignmentEditor.vue.d.ts +12 -0
  80. package/dist/runtime/app/components/settings/ObserveGroupFormModal.d.vue.ts +18 -0
  81. package/dist/runtime/app/components/settings/ObserveGroupFormModal.vue +60 -0
  82. package/dist/runtime/app/components/settings/ObserveGroupFormModal.vue.d.ts +18 -0
  83. package/dist/runtime/app/components/settings/ObserveGroupMembershipEditor.d.vue.ts +20 -0
  84. package/dist/runtime/app/components/settings/ObserveGroupMembershipEditor.vue +21 -0
  85. package/dist/runtime/app/components/settings/ObserveGroupMembershipEditor.vue.d.ts +20 -0
  86. package/dist/runtime/app/components/settings/ObserveOriginAllowlistEditor.d.vue.ts +15 -0
  87. package/dist/runtime/app/components/settings/ObserveOriginAllowlistEditor.vue +63 -0
  88. package/dist/runtime/app/components/settings/ObserveOriginAllowlistEditor.vue.d.ts +15 -0
  89. package/dist/runtime/app/components/settings/ObserveServiceEditForm.d.vue.ts +38 -0
  90. package/dist/runtime/app/components/settings/ObserveServiceEditForm.vue +216 -0
  91. package/dist/runtime/app/components/settings/ObserveServiceEditForm.vue.d.ts +38 -0
  92. package/dist/runtime/app/components/settings/ObserveServiceFormModal.d.vue.ts +37 -0
  93. package/dist/runtime/app/components/settings/ObserveServiceFormModal.vue +192 -0
  94. package/dist/runtime/app/components/settings/ObserveServiceFormModal.vue.d.ts +37 -0
  95. package/dist/runtime/app/components/settings/ObserveServiceTypeBadge.d.vue.ts +11 -0
  96. package/dist/runtime/app/components/settings/ObserveServiceTypeBadge.vue +18 -0
  97. package/dist/runtime/app/components/settings/ObserveServiceTypeBadge.vue.d.ts +11 -0
  98. package/dist/runtime/app/components/settings/ObserveSettingsServicesTable.d.vue.ts +19 -0
  99. package/dist/runtime/app/components/settings/ObserveSettingsServicesTable.vue +132 -0
  100. package/dist/runtime/app/components/settings/ObserveSettingsServicesTable.vue.d.ts +19 -0
  101. package/dist/runtime/app/components/settings/ObserveUserFormModal.d.vue.ts +27 -0
  102. package/dist/runtime/app/components/settings/ObserveUserFormModal.vue +108 -0
  103. package/dist/runtime/app/components/settings/ObserveUserFormModal.vue.d.ts +27 -0
  104. package/dist/runtime/app/components/settings/ObserveVersionTrackingField.d.vue.ts +17 -0
  105. package/dist/runtime/app/components/settings/ObserveVersionTrackingField.vue +20 -0
  106. package/dist/runtime/app/components/settings/ObserveVersionTrackingField.vue.d.ts +17 -0
  107. package/dist/runtime/app/composables/useObserveAbility.d.ts +15 -0
  108. package/dist/runtime/app/composables/useObserveAbility.js +20 -0
  109. package/dist/runtime/app/composables/useObserveActivity.d.ts +22 -0
  110. package/dist/runtime/app/composables/useObserveActivity.js +44 -0
  111. package/dist/runtime/app/composables/useObserveApiKeys.d.ts +15 -0
  112. package/dist/runtime/app/composables/useObserveApiKeys.js +19 -0
  113. package/dist/runtime/app/composables/useObserveAssignments.d.ts +19 -0
  114. package/dist/runtime/app/composables/useObserveAssignments.js +16 -0
  115. package/dist/runtime/app/composables/useObserveErrors.d.ts +33 -0
  116. package/dist/runtime/app/composables/useObserveErrors.js +85 -0
  117. package/dist/runtime/app/composables/useObserveGroups.d.ts +27 -0
  118. package/dist/runtime/app/composables/useObserveGroups.js +33 -0
  119. package/dist/runtime/app/composables/useObserveJourney.d.ts +19 -0
  120. package/dist/runtime/app/composables/useObserveJourney.js +19 -0
  121. package/dist/runtime/app/composables/useObserveLogFacets.d.ts +11 -0
  122. package/dist/runtime/app/composables/useObserveLogFacets.js +21 -0
  123. package/dist/runtime/app/composables/useObserveLogs.d.ts +28 -0
  124. package/dist/runtime/app/composables/useObserveLogs.js +100 -0
  125. package/dist/runtime/app/composables/useObserveMigrations.d.ts +17 -0
  126. package/dist/runtime/app/composables/useObserveMigrations.js +49 -0
  127. package/dist/runtime/app/composables/useObserveOverview.d.ts +14 -0
  128. package/dist/runtime/app/composables/useObserveOverview.js +23 -0
  129. package/dist/runtime/app/composables/useObservePeriod.d.ts +11 -0
  130. package/dist/runtime/app/composables/useObservePeriod.js +18 -0
  131. package/dist/runtime/app/composables/useObserveRollout.d.ts +20 -0
  132. package/dist/runtime/app/composables/useObserveRollout.js +55 -0
  133. package/dist/runtime/app/composables/useObserveScope.d.ts +13 -0
  134. package/dist/runtime/app/composables/useObserveScope.js +17 -0
  135. package/dist/runtime/app/composables/useObserveServices.d.ts +26 -0
  136. package/dist/runtime/app/composables/useObserveServices.js +33 -0
  137. package/dist/runtime/app/composables/useObserveStats.d.ts +14 -0
  138. package/dist/runtime/app/composables/useObserveStats.js +23 -0
  139. package/dist/runtime/app/composables/useObserveUsers.d.ts +29 -0
  140. package/dist/runtime/app/composables/useObserveUsers.js +33 -0
  141. package/dist/runtime/app/layouts/observe.d.vue.ts +13 -0
  142. package/dist/runtime/app/layouts/observe.vue +138 -0
  143. package/dist/runtime/app/layouts/observe.vue.d.ts +13 -0
  144. package/dist/runtime/app/middleware/observe-auth.global.d.ts +9 -0
  145. package/dist/runtime/app/middleware/observe-auth.global.js +8 -0
  146. package/dist/runtime/app/pages/activity.d.vue.ts +3 -0
  147. package/dist/runtime/app/pages/activity.vue +54 -0
  148. package/dist/runtime/app/pages/activity.vue.d.ts +3 -0
  149. package/dist/runtime/app/pages/error-detail.d.vue.ts +3 -0
  150. package/dist/runtime/app/pages/error-detail.vue +190 -0
  151. package/dist/runtime/app/pages/error-detail.vue.d.ts +3 -0
  152. package/dist/runtime/app/pages/errors.d.vue.ts +3 -0
  153. package/dist/runtime/app/pages/errors.vue +47 -0
  154. package/dist/runtime/app/pages/errors.vue.d.ts +3 -0
  155. package/dist/runtime/app/pages/journey.d.vue.ts +3 -0
  156. package/dist/runtime/app/pages/journey.vue +96 -0
  157. package/dist/runtime/app/pages/journey.vue.d.ts +3 -0
  158. package/dist/runtime/app/pages/log-detail.d.vue.ts +3 -0
  159. package/dist/runtime/app/pages/log-detail.vue +35 -0
  160. package/dist/runtime/app/pages/log-detail.vue.d.ts +3 -0
  161. package/dist/runtime/app/pages/login.d.vue.ts +3 -0
  162. package/dist/runtime/app/pages/login.vue +69 -0
  163. package/dist/runtime/app/pages/login.vue.d.ts +3 -0
  164. package/dist/runtime/app/pages/logs.d.vue.ts +3 -0
  165. package/dist/runtime/app/pages/logs.vue +36 -0
  166. package/dist/runtime/app/pages/logs.vue.d.ts +3 -0
  167. package/dist/runtime/app/pages/metrics.d.vue.ts +3 -0
  168. package/dist/runtime/app/pages/metrics.vue +68 -0
  169. package/dist/runtime/app/pages/metrics.vue.d.ts +3 -0
  170. package/dist/runtime/app/pages/overview.d.vue.ts +3 -0
  171. package/dist/runtime/app/pages/overview.vue +65 -0
  172. package/dist/runtime/app/pages/overview.vue.d.ts +3 -0
  173. package/dist/runtime/app/pages/rollout.d.vue.ts +3 -0
  174. package/dist/runtime/app/pages/rollout.vue +188 -0
  175. package/dist/runtime/app/pages/rollout.vue.d.ts +3 -0
  176. package/dist/runtime/app/pages/settings/group-detail.d.vue.ts +3 -0
  177. package/dist/runtime/app/pages/settings/group-detail.vue +149 -0
  178. package/dist/runtime/app/pages/settings/group-detail.vue.d.ts +3 -0
  179. package/dist/runtime/app/pages/settings/groups.d.vue.ts +3 -0
  180. package/dist/runtime/app/pages/settings/groups.vue +107 -0
  181. package/dist/runtime/app/pages/settings/groups.vue.d.ts +3 -0
  182. package/dist/runtime/app/pages/settings/index.d.vue.ts +3 -0
  183. package/dist/runtime/app/pages/settings/index.vue +47 -0
  184. package/dist/runtime/app/pages/settings/index.vue.d.ts +3 -0
  185. package/dist/runtime/app/pages/settings/migrations.d.vue.ts +3 -0
  186. package/dist/runtime/app/pages/settings/migrations.vue +275 -0
  187. package/dist/runtime/app/pages/settings/migrations.vue.d.ts +3 -0
  188. package/dist/runtime/app/pages/settings/service-detail.d.vue.ts +3 -0
  189. package/dist/runtime/app/pages/settings/service-detail.vue +133 -0
  190. package/dist/runtime/app/pages/settings/service-detail.vue.d.ts +3 -0
  191. package/dist/runtime/app/pages/settings/services.d.vue.ts +3 -0
  192. package/dist/runtime/app/pages/settings/services.vue +66 -0
  193. package/dist/runtime/app/pages/settings/services.vue.d.ts +3 -0
  194. package/dist/runtime/app/pages/settings/users/[id].d.vue.ts +3 -0
  195. package/dist/runtime/app/pages/settings/users/[id].vue +243 -0
  196. package/dist/runtime/app/pages/settings/users/[id].vue.d.ts +3 -0
  197. package/dist/runtime/app/pages/settings/users/index.d.vue.ts +3 -0
  198. package/dist/runtime/app/pages/settings/users/index.vue +129 -0
  199. package/dist/runtime/app/pages/settings/users/index.vue.d.ts +3 -0
  200. package/dist/runtime/options.d.ts +1 -0
  201. package/dist/runtime/options.js +1 -0
  202. package/dist/runtime/server/api/observe/activity.get.d.ts +3 -0
  203. package/dist/runtime/server/api/observe/activity.get.js +30 -0
  204. package/dist/runtime/server/api/observe/auth/login.post.d.ts +4 -0
  205. package/dist/runtime/server/api/observe/auth/login.post.js +13 -0
  206. package/dist/runtime/server/api/observe/auth/logout.post.d.ts +4 -0
  207. package/dist/runtime/server/api/observe/auth/logout.post.js +6 -0
  208. package/dist/runtime/server/api/observe/auth/me.get.d.ts +2 -0
  209. package/dist/runtime/server/api/observe/auth/me.get.js +3 -0
  210. package/dist/runtime/server/api/observe/errors/[fingerprint].get.d.ts +3 -0
  211. package/dist/runtime/server/api/observe/errors/[fingerprint].get.js +56 -0
  212. package/dist/runtime/server/api/observe/errors/index.get.d.ts +3 -0
  213. package/dist/runtime/server/api/observe/errors/index.get.js +41 -0
  214. package/dist/runtime/server/api/observe/facets.get.d.ts +8 -0
  215. package/dist/runtime/server/api/observe/facets.get.js +12 -0
  216. package/dist/runtime/server/api/observe/groups/[id]/assignments.put.d.ts +3 -0
  217. package/dist/runtime/server/api/observe/groups/[id]/assignments.put.js +12 -0
  218. package/dist/runtime/server/api/observe/groups/[id]/services.put.d.ts +5 -0
  219. package/dist/runtime/server/api/observe/groups/[id]/services.put.js +13 -0
  220. package/dist/runtime/server/api/observe/groups/[id].delete.d.ts +5 -0
  221. package/dist/runtime/server/api/observe/groups/[id].delete.js +11 -0
  222. package/dist/runtime/server/api/observe/groups/[id].get.d.ts +6 -0
  223. package/dist/runtime/server/api/observe/groups/[id].get.js +14 -0
  224. package/dist/runtime/server/api/observe/groups/[id].patch.d.ts +3 -0
  225. package/dist/runtime/server/api/observe/groups/[id].patch.js +12 -0
  226. package/dist/runtime/server/api/observe/groups/index.get.d.ts +3 -0
  227. package/dist/runtime/server/api/observe/groups/index.get.js +7 -0
  228. package/dist/runtime/server/api/observe/groups/index.post.d.ts +3 -0
  229. package/dist/runtime/server/api/observe/groups/index.post.js +11 -0
  230. package/dist/runtime/server/api/observe/health.get.d.ts +6 -0
  231. package/dist/runtime/server/api/observe/health.get.js +10 -0
  232. package/dist/runtime/server/api/observe/ingest/frogger.d.ts +5 -0
  233. package/dist/runtime/server/api/observe/ingest/frogger.js +42 -0
  234. package/dist/runtime/server/api/observe/ingest.d.ts +5 -0
  235. package/dist/runtime/server/api/observe/ingest.js +38 -0
  236. package/dist/runtime/server/api/observe/journey.get.d.ts +9 -0
  237. package/dist/runtime/server/api/observe/journey.get.js +31 -0
  238. package/dist/runtime/server/api/observe/logs/[id].get.d.ts +3 -0
  239. package/dist/runtime/server/api/observe/logs/[id].get.js +19 -0
  240. package/dist/runtime/server/api/observe/logs.get.d.ts +3 -0
  241. package/dist/runtime/server/api/observe/logs.get.js +54 -0
  242. package/dist/runtime/server/api/observe/migrations/index.get.d.ts +9 -0
  243. package/dist/runtime/server/api/observe/migrations/index.get.js +14 -0
  244. package/dist/runtime/server/api/observe/migrations/run.post.d.ts +13 -0
  245. package/dist/runtime/server/api/observe/migrations/run.post.js +35 -0
  246. package/dist/runtime/server/api/observe/overview.get.d.ts +3 -0
  247. package/dist/runtime/server/api/observe/overview.get.js +19 -0
  248. package/dist/runtime/server/api/observe/rollout/compare.get.d.ts +3 -0
  249. package/dist/runtime/server/api/observe/rollout/compare.get.js +24 -0
  250. package/dist/runtime/server/api/observe/rollout/regressions.get.d.ts +3 -0
  251. package/dist/runtime/server/api/observe/rollout/regressions.get.js +31 -0
  252. package/dist/runtime/server/api/observe/rollout/versions.get.d.ts +3 -0
  253. package/dist/runtime/server/api/observe/rollout/versions.get.js +20 -0
  254. package/dist/runtime/server/api/observe/services/[id]/assignments.put.d.ts +7 -0
  255. package/dist/runtime/server/api/observe/services/[id]/assignments.put.js +12 -0
  256. package/dist/runtime/server/api/observe/services/[id]/keys/[keyId]/rotate.post.d.ts +4 -0
  257. package/dist/runtime/server/api/observe/services/[id]/keys/[keyId]/rotate.post.js +14 -0
  258. package/dist/runtime/server/api/observe/services/[id]/keys/[keyId].delete.d.ts +4 -0
  259. package/dist/runtime/server/api/observe/services/[id]/keys/[keyId].delete.js +14 -0
  260. package/dist/runtime/server/api/observe/services/[id]/keys/index.get.d.ts +3 -0
  261. package/dist/runtime/server/api/observe/services/[id]/keys/index.get.js +10 -0
  262. package/dist/runtime/server/api/observe/services/[id]/keys/index.post.d.ts +3 -0
  263. package/dist/runtime/server/api/observe/services/[id]/keys/index.post.js +11 -0
  264. package/dist/runtime/server/api/observe/services/[id]/restore.post.d.ts +4 -0
  265. package/dist/runtime/server/api/observe/services/[id]/restore.post.js +11 -0
  266. package/dist/runtime/server/api/observe/services/[id].delete.d.ts +11 -0
  267. package/dist/runtime/server/api/observe/services/[id].delete.js +11 -0
  268. package/dist/runtime/server/api/observe/services/[id].get.d.ts +3 -0
  269. package/dist/runtime/server/api/observe/services/[id].get.js +12 -0
  270. package/dist/runtime/server/api/observe/services/[id].patch.d.ts +3 -0
  271. package/dist/runtime/server/api/observe/services/[id].patch.js +13 -0
  272. package/dist/runtime/server/api/observe/services/index.get.d.ts +3 -0
  273. package/dist/runtime/server/api/observe/services/index.get.js +7 -0
  274. package/dist/runtime/server/api/observe/services/index.post.d.ts +3 -0
  275. package/dist/runtime/server/api/observe/services/index.post.js +16 -0
  276. package/dist/runtime/server/api/observe/stats.get.d.ts +3 -0
  277. package/dist/runtime/server/api/observe/stats.get.js +28 -0
  278. package/dist/runtime/server/api/observe/users/[id]/assignments.put.d.ts +3 -0
  279. package/dist/runtime/server/api/observe/users/[id]/assignments.put.js +14 -0
  280. package/dist/runtime/server/api/observe/users/[id].delete.d.ts +4 -0
  281. package/dist/runtime/server/api/observe/users/[id].delete.js +15 -0
  282. package/dist/runtime/server/api/observe/users/[id].get.d.ts +3 -0
  283. package/dist/runtime/server/api/observe/users/[id].get.js +11 -0
  284. package/dist/runtime/server/api/observe/users/[id].patch.d.ts +3 -0
  285. package/dist/runtime/server/api/observe/users/[id].patch.js +25 -0
  286. package/dist/runtime/server/api/observe/users/index.get.d.ts +8 -0
  287. package/dist/runtime/server/api/observe/users/index.get.js +7 -0
  288. package/dist/runtime/server/api/observe/users/index.post.d.ts +3 -0
  289. package/dist/runtime/server/api/observe/users/index.post.js +29 -0
  290. package/dist/runtime/server/auth/authorization.d.ts +7 -0
  291. package/dist/runtime/server/auth/authorization.js +5 -0
  292. package/dist/runtime/server/auth/provider.d.ts +17 -0
  293. package/dist/runtime/server/auth/provider.js +44 -0
  294. package/dist/runtime/server/auth/providers/config-provider.d.ts +18 -0
  295. package/dist/runtime/server/auth/providers/config-provider.js +54 -0
  296. package/dist/runtime/server/auth/providers/db-provider.d.ts +16 -0
  297. package/dist/runtime/server/auth/providers/db-provider.js +42 -0
  298. package/dist/runtime/server/auth/providers/jwt-provider.d.ts +24 -0
  299. package/dist/runtime/server/auth/providers/jwt-provider.js +72 -0
  300. package/dist/runtime/server/migrations/0001-services-kind.d.ts +8 -0
  301. package/dist/runtime/server/migrations/0001-services-kind.js +14 -0
  302. package/dist/runtime/server/migrations/0002-services-type.d.ts +7 -0
  303. package/dist/runtime/server/migrations/0002-services-type.js +14 -0
  304. package/dist/runtime/server/migrations/0003-services-deleted-at.d.ts +6 -0
  305. package/dist/runtime/server/migrations/0003-services-deleted-at.js +14 -0
  306. package/dist/runtime/server/migrations/0004-logs-error-fingerprint.d.ts +11 -0
  307. package/dist/runtime/server/migrations/0004-logs-error-fingerprint.js +15 -0
  308. package/dist/runtime/server/migrations/0005-users-columns.d.ts +9 -0
  309. package/dist/runtime/server/migrations/0005-users-columns.js +25 -0
  310. package/dist/runtime/server/migrations/index.d.ts +13 -0
  311. package/dist/runtime/server/migrations/index.js +13 -0
  312. package/dist/runtime/server/migrations/types.d.ts +15 -0
  313. package/dist/runtime/server/migrations/types.js +0 -0
  314. package/dist/runtime/server/plugins/observe-migrate.server.d.ts +2 -0
  315. package/dist/runtime/server/plugins/observe-migrate.server.js +18 -0
  316. package/dist/runtime/server/tasks/backfill-fingerprints.d.ts +11 -0
  317. package/dist/runtime/server/tasks/backfill-fingerprints.js +41 -0
  318. package/dist/runtime/server/tasks/purge.d.ts +5 -0
  319. package/dist/runtime/server/tasks/purge.js +12 -0
  320. package/dist/runtime/server/tsconfig.json +3 -0
  321. package/dist/runtime/server/utils/activity-query.d.ts +28 -0
  322. package/dist/runtime/server/utils/activity-query.js +70 -0
  323. package/dist/runtime/server/utils/api-keys.d.ts +48 -0
  324. package/dist/runtime/server/utils/api-keys.js +67 -0
  325. package/dist/runtime/server/utils/authz.d.ts +50 -0
  326. package/dist/runtime/server/utils/authz.js +60 -0
  327. package/dist/runtime/server/utils/db/users.d.ts +91 -0
  328. package/dist/runtime/server/utils/db/users.js +128 -0
  329. package/dist/runtime/server/utils/db.d.ts +10 -0
  330. package/dist/runtime/server/utils/db.js +5 -0
  331. package/dist/runtime/server/utils/frogger-adapter.d.ts +40 -0
  332. package/dist/runtime/server/utils/frogger-adapter.js +97 -0
  333. package/dist/runtime/server/utils/groups.d.ts +35 -0
  334. package/dist/runtime/server/utils/groups.js +59 -0
  335. package/dist/runtime/server/utils/ingest-cors.d.ts +23 -0
  336. package/dist/runtime/server/utils/ingest-cors.js +27 -0
  337. package/dist/runtime/server/utils/journey.d.ts +20 -0
  338. package/dist/runtime/server/utils/journey.js +44 -0
  339. package/dist/runtime/server/utils/logs.d.ts +50 -0
  340. package/dist/runtime/server/utils/logs.js +154 -0
  341. package/dist/runtime/server/utils/loop-guard.d.ts +11 -0
  342. package/dist/runtime/server/utils/loop-guard.js +11 -0
  343. package/dist/runtime/server/utils/migrate.d.ts +21 -0
  344. package/dist/runtime/server/utils/migrate.js +144 -0
  345. package/dist/runtime/server/utils/migration-runner.d.ts +42 -0
  346. package/dist/runtime/server/utils/migration-runner.js +129 -0
  347. package/dist/runtime/server/utils/observe-errors.d.ts +58 -0
  348. package/dist/runtime/server/utils/observe-errors.js +206 -0
  349. package/dist/runtime/server/utils/overview.d.ts +20 -0
  350. package/dist/runtime/server/utils/overview.js +119 -0
  351. package/dist/runtime/server/utils/provisioning.d.ts +62 -0
  352. package/dist/runtime/server/utils/provisioning.js +299 -0
  353. package/dist/runtime/server/utils/rate-limit.d.ts +11 -0
  354. package/dist/runtime/server/utils/rate-limit.js +22 -0
  355. package/dist/runtime/server/utils/require-observe-session.d.ts +15 -0
  356. package/dist/runtime/server/utils/require-observe-session.js +25 -0
  357. package/dist/runtime/server/utils/rollout.d.ts +19 -0
  358. package/dist/runtime/server/utils/rollout.js +56 -0
  359. package/dist/runtime/server/utils/scope.d.ts +14 -0
  360. package/dist/runtime/server/utils/scope.js +28 -0
  361. package/dist/runtime/server/utils/seed.d.ts +18 -0
  362. package/dist/runtime/server/utils/seed.js +70 -0
  363. package/dist/runtime/server/utils/services.d.ts +91 -0
  364. package/dist/runtime/server/utils/services.js +142 -0
  365. package/dist/runtime/server/utils/stats-query.d.ts +40 -0
  366. package/dist/runtime/server/utils/stats-query.js +104 -0
  367. package/dist/runtime/shared/auth/roles.d.ts +34 -0
  368. package/dist/runtime/shared/auth/roles.js +6 -0
  369. package/dist/runtime/shared/auth/schema.d.ts +85 -0
  370. package/dist/runtime/shared/auth/schema.js +41 -0
  371. package/dist/runtime/shared/auth/types.d.ts +68 -0
  372. package/dist/runtime/shared/auth/types.js +0 -0
  373. package/dist/runtime/shared/rbac/capabilities.d.ts +46 -0
  374. package/dist/runtime/shared/rbac/capabilities.js +48 -0
  375. package/dist/runtime/shared/schema/activity.d.ts +77 -0
  376. package/dist/runtime/shared/schema/activity.js +22 -0
  377. package/dist/runtime/shared/schema/adapters/frogger.d.ts +52 -0
  378. package/dist/runtime/shared/schema/adapters/frogger.js +17 -0
  379. package/dist/runtime/shared/schema/batch.d.ts +33 -0
  380. package/dist/runtime/shared/schema/batch.js +9 -0
  381. package/dist/runtime/shared/schema/error-fingerprint.d.ts +53 -0
  382. package/dist/runtime/shared/schema/error-fingerprint.js +47 -0
  383. package/dist/runtime/shared/schema/errors-query.d.ts +136 -0
  384. package/dist/runtime/shared/schema/errors-query.js +47 -0
  385. package/dist/runtime/shared/schema/event.d.ts +48 -0
  386. package/dist/runtime/shared/schema/event.js +41 -0
  387. package/dist/runtime/shared/schema/frogger-map.d.ts +62 -0
  388. package/dist/runtime/shared/schema/frogger-map.js +30 -0
  389. package/dist/runtime/shared/schema/index.d.ts +17 -0
  390. package/dist/runtime/shared/schema/index.js +17 -0
  391. package/dist/runtime/shared/schema/journey.d.ts +99 -0
  392. package/dist/runtime/shared/schema/journey.js +96 -0
  393. package/dist/runtime/shared/schema/levels.d.ts +37 -0
  394. package/dist/runtime/shared/schema/levels.js +72 -0
  395. package/dist/runtime/shared/schema/log-row.d.ts +31 -0
  396. package/dist/runtime/shared/schema/log-row.js +0 -0
  397. package/dist/runtime/shared/schema/logs-query.d.ts +91 -0
  398. package/dist/runtime/shared/schema/logs-query.js +72 -0
  399. package/dist/runtime/shared/schema/migrations.d.ts +34 -0
  400. package/dist/runtime/shared/schema/migrations.js +0 -0
  401. package/dist/runtime/shared/schema/overview.d.ts +78 -0
  402. package/dist/runtime/shared/schema/overview.js +9 -0
  403. package/dist/runtime/shared/schema/provisioning.d.ts +230 -0
  404. package/dist/runtime/shared/schema/provisioning.js +52 -0
  405. package/dist/runtime/shared/schema/registry.d.ts +115 -0
  406. package/dist/runtime/shared/schema/registry.js +27 -0
  407. package/dist/runtime/shared/schema/rollout.d.ts +103 -0
  408. package/dist/runtime/shared/schema/rollout.js +66 -0
  409. package/dist/runtime/shared/schema/stats.d.ts +64 -0
  410. package/dist/runtime/shared/schema/stats.js +15 -0
  411. package/dist/runtime/shared/schema/tiers.d.ts +5 -0
  412. package/dist/runtime/shared/schema/tiers.js +9 -0
  413. package/dist/runtime/shared/types/module-options.d.ts +119 -0
  414. package/dist/runtime/shared/types/module-options.js +13 -0
  415. package/dist/runtime/shared/types/storage.d.ts +31 -0
  416. package/dist/runtime/shared/types/storage.js +0 -0
  417. package/dist/runtime/shared/utils/format-relative.d.ts +7 -0
  418. package/dist/runtime/shared/utils/format-relative.js +11 -0
  419. package/dist/runtime/shared/utils/frogger-snippet.d.ts +19 -0
  420. package/dist/runtime/shared/utils/frogger-snippet.js +33 -0
  421. package/dist/runtime/shared/utils/observe-config.d.ts +9 -0
  422. package/dist/runtime/shared/utils/observe-config.js +17 -0
  423. package/dist/runtime/shared/utils/period.d.ts +13 -0
  424. package/dist/runtime/shared/utils/period.js +15 -0
  425. package/dist/runtime/shared/utils/slug.d.ts +1 -0
  426. package/dist/runtime/shared/utils/slug.js +5 -0
  427. package/dist/runtime/shared/utils/uuid.d.ts +187 -0
  428. package/dist/runtime/shared/utils/uuid.js +345 -0
  429. package/dist/runtime/types/nuxt-auth-utils-imports.d.ts +25 -0
  430. package/dist/runtime/types/observe-app-imports.d.ts +20 -0
  431. package/dist/runtime/types/session.d.ts +17 -0
  432. package/dist/schema.d.mts +1318 -0
  433. package/dist/schema.mjs +629 -0
  434. package/dist/types.d.mts +3 -0
  435. package/package.json +93 -0
@@ -0,0 +1,187 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useRuntimeConfig, useRouter } from "#imports";
4
+ import { formatRelative } from "../../shared/utils/format-relative";
5
+ import { useObservePeriod } from "../composables/useObservePeriod";
6
+ import { useObserveScope } from "../composables/useObserveScope";
7
+ const props = defineProps({
8
+ items: { type: Array, required: true },
9
+ total: { type: Number, required: true },
10
+ degraded: { type: Boolean, required: true },
11
+ pending: { type: Boolean, required: false },
12
+ compact: { type: Boolean, required: false }
13
+ });
14
+ const sort = defineModel("sort", { type: null, ...{ required: true } });
15
+ const q = defineModel("q", { type: String, ...{ default: "" } });
16
+ const ERROR_THRESHOLD = 0.05;
17
+ const { prefix } = useRuntimeConfig().public.observe;
18
+ const router = useRouter();
19
+ const { period } = useObservePeriod();
20
+ const { serviceSlug, groupSlug } = useObserveScope();
21
+ const logsRouteExists = computed(() => router.hasRoute("observe-logs"));
22
+ const showDim = computed(() => new Set(props.items.map((i) => i.dim)).size > 1);
23
+ const numericHead = "text-right";
24
+ const numericCell = "text-right tabular-nums";
25
+ const columns = [
26
+ { id: "key", accessorKey: "key", header: "Route / Feature" },
27
+ { id: "count", accessorKey: "count", header: "Events", meta: { class: { th: numericHead, td: numericCell } } },
28
+ { id: "errors", accessorKey: "errors", header: "Errors", meta: { class: { th: numericHead, td: numericCell } } },
29
+ { id: "errorRate", accessorKey: "errorRate", header: "Error rate", meta: { class: { th: numericHead, td: numericCell } } },
30
+ { id: "lastSeen", accessorKey: "lastSeen", header: "Last seen", meta: { class: { th: numericHead, td: `${numericCell} text-muted whitespace-nowrap` } } }
31
+ ];
32
+ const SORT_LABELS = {
33
+ count: "Events",
34
+ errors: "Errors",
35
+ errorRate: "Error rate",
36
+ lastSeen: "Last seen"
37
+ };
38
+ function ratioColor(rate) {
39
+ if (rate >= ERROR_THRESHOLD) return "error";
40
+ if (rate > 0) return "warning";
41
+ return "neutral";
42
+ }
43
+ function drillTo(item) {
44
+ return {
45
+ path: `${prefix}/logs`,
46
+ query: {
47
+ ...serviceSlug.value ? { service: serviceSlug.value } : {},
48
+ ...groupSlug.value ? { group: groupSlug.value } : {},
49
+ [item.dim]: item.key,
50
+ period: period.value
51
+ }
52
+ };
53
+ }
54
+ </script>
55
+
56
+ <template>
57
+ <UCard :ui="{ body: 'p-0 sm:p-0' }">
58
+ <div
59
+ v-if="!compact"
60
+ class="flex items-center justify-between border-b border-default px-4 py-3"
61
+ >
62
+ <UInput
63
+ v-model="q"
64
+ icon="i-lucide-search"
65
+ placeholder="Filter keys"
66
+ class="w-56"
67
+ />
68
+ </div>
69
+
70
+ <div
71
+ v-if="degraded"
72
+ class="p-4"
73
+ >
74
+ <UAlert
75
+ color="warning"
76
+ variant="subtle"
77
+ icon="i-lucide-route"
78
+ title="No route/feature data in these logs"
79
+ description="Events arrived in this window, but none carry the route or feature field that powers this view. The frogger companion checkpoint (CP15) will emit these automatically; until it lands, add route or feature to your log ctx and they will appear here."
80
+ />
81
+ </div>
82
+
83
+ <UTable
84
+ v-else
85
+ :data="items"
86
+ :columns="columns"
87
+ :loading="pending"
88
+ empty="No activity in this window."
89
+ >
90
+ <template #count-header>
91
+ <button
92
+ type="button"
93
+ class="inline-flex items-center gap-1 cursor-pointer hover:text-default"
94
+ @click="sort = 'count'"
95
+ >
96
+ {{ SORT_LABELS.count }}
97
+ <UIcon
98
+ v-if="sort === 'count'"
99
+ name="i-lucide-arrow-down"
100
+ class="size-3.5"
101
+ />
102
+ </button>
103
+ </template>
104
+ <template #errors-header>
105
+ <button
106
+ type="button"
107
+ class="inline-flex items-center gap-1 cursor-pointer hover:text-default"
108
+ @click="sort = 'errors'"
109
+ >
110
+ {{ SORT_LABELS.errors }}
111
+ <UIcon
112
+ v-if="sort === 'errors'"
113
+ name="i-lucide-arrow-down"
114
+ class="size-3.5"
115
+ />
116
+ </button>
117
+ </template>
118
+ <template #errorRate-header>
119
+ <button
120
+ type="button"
121
+ class="inline-flex items-center gap-1 cursor-pointer hover:text-default"
122
+ @click="sort = 'errorRate'"
123
+ >
124
+ {{ SORT_LABELS.errorRate }}
125
+ <UIcon
126
+ v-if="sort === 'errorRate'"
127
+ name="i-lucide-arrow-down"
128
+ class="size-3.5"
129
+ />
130
+ </button>
131
+ </template>
132
+ <template #lastSeen-header>
133
+ <button
134
+ type="button"
135
+ class="inline-flex items-center gap-1 cursor-pointer hover:text-default"
136
+ @click="sort = 'lastSeen'"
137
+ >
138
+ {{ SORT_LABELS.lastSeen }}
139
+ <UIcon
140
+ v-if="sort === 'lastSeen'"
141
+ name="i-lucide-arrow-down"
142
+ class="size-3.5"
143
+ />
144
+ </button>
145
+ </template>
146
+
147
+ <template #key-cell="{ row }">
148
+ <span class="flex items-center gap-2 min-w-0">
149
+ <NuxtLink
150
+ v-if="logsRouteExists"
151
+ :to="drillTo(row.original)"
152
+ class="font-mono text-sm truncate hover:text-primary"
153
+ :title="`View logs for ${row.original.key}`"
154
+ >{{ row.original.key }}</NuxtLink>
155
+ <span
156
+ v-else
157
+ class="font-mono text-sm truncate"
158
+ :title="row.original.key"
159
+ >{{ row.original.key }}</span>
160
+ <span
161
+ v-if="showDim"
162
+ class="text-xs text-muted shrink-0"
163
+ >{{ row.original.dim }}</span>
164
+ </span>
165
+ </template>
166
+
167
+ <template #errors-cell="{ row }">
168
+ <span :class="row.original.errors > 0 ? 'text-error font-medium' : 'text-muted'">
169
+ {{ row.original.errors }}
170
+ </span>
171
+ </template>
172
+
173
+ <template #errorRate-cell="{ row }">
174
+ <UBadge
175
+ :color="ratioColor(row.original.errorRate)"
176
+ variant="subtle"
177
+ >
178
+ {{ (row.original.errorRate * 100).toFixed(1) }}%
179
+ </UBadge>
180
+ </template>
181
+
182
+ <template #lastSeen-cell="{ row }">
183
+ {{ formatRelative(row.original.lastSeen) }}
184
+ </template>
185
+ </UTable>
186
+ </UCard>
187
+ </template>
@@ -0,0 +1,30 @@
1
+ import type { ActivityItem, ActivitySort } from '../../shared/schema/activity.js';
2
+ /**
3
+ * The ranked top-hits list (CP10), styled to sit alongside ObserveServicesTable /
4
+ * ObserveLogsTable. Sort round-trips to the server (client-sorting a truncated top-N would
5
+ * be wrong), so the header buttons just set the sort model. Each key drills through to the
6
+ * logs explorer, gated on the route existing so the component is inert if CP9 is ever absent.
7
+ * Two empty-states: `degraded` (events exist but carry no route/feature, the CP15 emit gap)
8
+ * and the plain no-activity state.
9
+ */
10
+ type __VLS_Props = {
11
+ items: ActivityItem[];
12
+ total: number;
13
+ degraded: boolean;
14
+ pending?: boolean;
15
+ compact?: boolean;
16
+ };
17
+ type __VLS_ModelProps = {
18
+ 'sort': ActivitySort;
19
+ 'q'?: string;
20
+ };
21
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
22
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
23
+ "update:sort": (value: "count" | "errors" | "errorRate" | "lastSeen") => any;
24
+ "update:q": (value: string) => any;
25
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
26
+ "onUpdate:sort"?: ((value: "count" | "errors" | "errorRate" | "lastSeen") => any) | undefined;
27
+ "onUpdate:q"?: ((value: string) => any) | undefined;
28
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
+ declare const _default: typeof __VLS_export;
30
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import type { Capability } from '../../shared/rbac/capabilities.js';
2
+ /**
3
+ * Declarative slot gate: renders its default slot only when the current principal holds
4
+ * `capability` (optionally scoped to `serviceSlug`). Presentational only — see
5
+ * useObserveAbility; the server is the sole authority.
6
+ *
7
+ * <ObserveCan capability="services.manage" :service-slug="svc.slug">
8
+ * <UButton>Edit</UButton>
9
+ * </ObserveCan>
10
+ */
11
+ type __VLS_Props = {
12
+ capability: Capability;
13
+ serviceSlug?: string;
14
+ };
15
+ declare var __VLS_1: {};
16
+ type __VLS_Slots = {} & {
17
+ default?: (props: typeof __VLS_1) => any;
18
+ };
19
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,16 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useObserveAbility } from "../composables/useObserveAbility";
4
+ const props = defineProps({
5
+ capability: { type: String, required: true },
6
+ serviceSlug: { type: String, required: false }
7
+ });
8
+ const { can, canForService } = useObserveAbility();
9
+ const allowed = computed(
10
+ () => props.serviceSlug ? canForService(props.capability, props.serviceSlug) : can(props.capability)
11
+ );
12
+ </script>
13
+
14
+ <template>
15
+ <slot v-if="allowed" />
16
+ </template>
@@ -0,0 +1,27 @@
1
+ import type { Capability } from '../../shared/rbac/capabilities.js';
2
+ /**
3
+ * Declarative slot gate: renders its default slot only when the current principal holds
4
+ * `capability` (optionally scoped to `serviceSlug`). Presentational only — see
5
+ * useObserveAbility; the server is the sole authority.
6
+ *
7
+ * <ObserveCan capability="services.manage" :service-slug="svc.slug">
8
+ * <UButton>Edit</UButton>
9
+ * </ObserveCan>
10
+ */
11
+ type __VLS_Props = {
12
+ capability: Capability;
13
+ serviceSlug?: string;
14
+ };
15
+ declare var __VLS_1: {};
16
+ type __VLS_Slots = {} & {
17
+ default?: (props: typeof __VLS_1) => any;
18
+ };
19
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,19 @@
1
+ import type { ErrorGroup } from '../../shared/schema/errors-query.js';
2
+ /**
3
+ * The grouped-error list (CP14), styled to sit alongside ObserveLogsTable. Rows click
4
+ * through to the drill-down page; pagination is bound to the server `total`.
5
+ */
6
+ type __VLS_Props = {
7
+ rows: ErrorGroup[];
8
+ total: number;
9
+ page: number;
10
+ limit: number;
11
+ pending?: boolean;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ "update:page": (args_0: number) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ "onUpdate:page"?: ((args_0: number) => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
@@ -0,0 +1,105 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useRuntimeConfig, navigateTo } from "#imports";
4
+ import { formatRelative } from "../../shared/utils/format-relative";
5
+ const props = defineProps({
6
+ rows: { type: Array, required: true },
7
+ total: { type: Number, required: true },
8
+ page: { type: Number, required: true },
9
+ limit: { type: Number, required: true },
10
+ pending: { type: Boolean, required: false }
11
+ });
12
+ const emit = defineEmits(["update:page"]);
13
+ const { prefix } = useRuntimeConfig().public.observe;
14
+ const columns = [
15
+ { id: "level", accessorKey: "worstLevel", header: "Level" },
16
+ { id: "error", accessorKey: "message", header: "Error", meta: { class: { td: "max-w-md" } } },
17
+ { id: "count", accessorKey: "count", header: "Events", meta: { class: { th: "text-right", td: "text-right tabular-nums" } } },
18
+ { id: "services", header: "Services", meta: { class: { th: "hidden md:table-cell", td: "hidden md:table-cell text-muted" } } },
19
+ { id: "versions", header: "Versions", meta: { class: { th: "hidden lg:table-cell", td: "hidden lg:table-cell text-muted" } } },
20
+ { id: "lastSeen", accessorKey: "lastSeen", header: "Last seen", meta: { class: { td: "tabular-nums whitespace-nowrap text-muted" } } }
21
+ ];
22
+ const compact = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
23
+ function absTime(ms) {
24
+ return new Date(ms).toLocaleString();
25
+ }
26
+ function onSelect(_e, row) {
27
+ return navigateTo(`${prefix}/errors/${row.original.fingerprint}`);
28
+ }
29
+ const pageModel = computed({
30
+ get: () => props.page,
31
+ set: (p) => emit("update:page", p)
32
+ });
33
+ </script>
34
+
35
+ <template>
36
+ <UCard :ui="{ body: 'p-0 sm:p-0' }">
37
+ <UTable
38
+ :data="rows"
39
+ :columns="columns"
40
+ :loading="pending"
41
+ empty="No errors in this window."
42
+ :meta="{ class: { tr: () => 'cursor-pointer' } }"
43
+ :on-select="onSelect"
44
+ >
45
+ <template #level-cell="{ row }">
46
+ <ObserveLogLevelBadge :level="row.original.worstLevel" />
47
+ </template>
48
+
49
+ <template #error-cell="{ row }">
50
+ <span class="flex items-center gap-2 min-w-0">
51
+ <span
52
+ class="block truncate"
53
+ :title="`${row.original.name ?? ''} ${row.original.message ?? ''}`.trim()"
54
+ >
55
+ <span
56
+ v-if="row.original.name"
57
+ class="font-medium"
58
+ >{{ row.original.name }}: </span>{{ row.original.message ?? row.original.fingerprint }}
59
+ </span>
60
+ <UBadge
61
+ v-if="row.original.regressed"
62
+ color="warning"
63
+ variant="subtle"
64
+ size="sm"
65
+ icon="i-lucide-trending-up"
66
+ class="shrink-0"
67
+ >
68
+ Regressed
69
+ </UBadge>
70
+ </span>
71
+ </template>
72
+
73
+ <template #count-cell="{ row }">
74
+ {{ compact.format(row.original.count) }}
75
+ </template>
76
+
77
+ <template #services-cell="{ row }">
78
+ <span
79
+ class="block truncate max-w-[16rem]"
80
+ :title="row.original.apps.join(', ')"
81
+ >{{ row.original.apps.join(", ") || "\u2014" }}</span>
82
+ </template>
83
+
84
+ <template #versions-cell="{ row }">
85
+ <span
86
+ class="block truncate max-w-[12rem]"
87
+ :title="row.original.versions.join(', ')"
88
+ >{{ row.original.versions.join(", ") || "\u2014" }}</span>
89
+ </template>
90
+
91
+ <template #lastSeen-cell="{ row }">
92
+ <span :title="absTime(row.original.lastSeen)">{{ formatRelative(row.original.lastSeen) }}</span>
93
+ </template>
94
+ </UTable>
95
+
96
+ <div class="flex items-center justify-between border-t border-default px-4 py-3">
97
+ <span class="text-xs text-muted tabular-nums">{{ total }} groups</span>
98
+ <UPagination
99
+ v-model:page="pageModel"
100
+ :total="total"
101
+ :items-per-page="limit"
102
+ />
103
+ </div>
104
+ </UCard>
105
+ </template>
@@ -0,0 +1,19 @@
1
+ import type { ErrorGroup } from '../../shared/schema/errors-query.js';
2
+ /**
3
+ * The grouped-error list (CP14), styled to sit alongside ObserveLogsTable. Rows click
4
+ * through to the drill-down page; pagination is bound to the server `total`.
5
+ */
6
+ type __VLS_Props = {
7
+ rows: ErrorGroup[];
8
+ total: number;
9
+ page: number;
10
+ limit: number;
11
+ pending?: boolean;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ "update:page": (args_0: number) => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ "onUpdate:page"?: ((args_0: number) => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import type { OverviewStats, OverviewActivityItem } from '../../shared/schema/overview.js';
2
+ /**
3
+ * The triage hero: a one-line health banner colour-coded by worst state, expanding
4
+ * to include the latest-error spotlight (who/what/when/where) only when there are
5
+ * errors in the window. Quiet when healthy, loud when broken. `detail` is the newest
6
+ * error-level activity item, used to enrich the spotlight with the actor fields
7
+ * stats.latestError does not carry.
8
+ */
9
+ type __VLS_Props = {
10
+ stats?: OverviewStats;
11
+ periodLabel?: string;
12
+ detail?: OverviewActivityItem;
13
+ };
14
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
@@ -0,0 +1,114 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { formatRelative } from "../../shared/utils/format-relative";
4
+ const props = defineProps({
5
+ stats: { type: Object, required: false },
6
+ periodLabel: { type: String, required: false },
7
+ detail: { type: Object, required: false }
8
+ });
9
+ const state = computed(() => {
10
+ if (!props.stats) return "ok";
11
+ if (props.stats.errorCount > 0) return "error";
12
+ if (props.stats.warnCount > 0) return "warning";
13
+ return "ok";
14
+ });
15
+ const compact = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
16
+ const headline = computed(() => {
17
+ const s = props.stats;
18
+ if (!s) return "Loading";
19
+ if (s.errorCount > 0) {
20
+ return `${compact.format(s.errorCount)} ${s.errorCount === 1 ? "error" : "errors"} \xB7 ${(s.errorRate * 100).toFixed(1)}% error rate`;
21
+ }
22
+ if (s.warnCount > 0) {
23
+ return `No errors \xB7 ${compact.format(s.warnCount)} ${s.warnCount === 1 ? "warning" : "warnings"}`;
24
+ }
25
+ return "All clear";
26
+ });
27
+ const detailLine = computed(() => {
28
+ const s = props.stats;
29
+ if (!s) return "";
30
+ const parts = [];
31
+ if (s.errorCount > 0 && s.warnCount > 0) {
32
+ parts.push(`${compact.format(s.warnCount)} ${s.warnCount === 1 ? "warning" : "warnings"}`);
33
+ }
34
+ parts.push(`${compact.format(s.totalEvents)} ${s.totalEvents === 1 ? "event" : "events"}`);
35
+ if (props.periodLabel) parts.push(props.periodLabel.toLowerCase());
36
+ return parts.join(" \xB7 ");
37
+ });
38
+ const who = computed(() => props.detail?.user ?? props.detail?.session ?? "anonymous");
39
+ </script>
40
+
41
+ <template>
42
+ <section
43
+ class="rounded-lg ring p-4"
44
+ :class="{
45
+ 'bg-error/5 ring-error/25': state === 'error',
46
+ 'bg-warning/5 ring-warning/25': state === 'warning',
47
+ 'bg-success/5 ring-success/20': state === 'ok'
48
+ }"
49
+ >
50
+ <div class="flex items-center gap-3">
51
+ <span
52
+ class="size-2.5 rounded-full shrink-0"
53
+ :class="{
54
+ 'bg-error': state === 'error',
55
+ 'bg-warning': state === 'warning',
56
+ 'bg-success': state === 'ok'
57
+ }"
58
+ />
59
+ <p class="text-sm min-w-0 truncate">
60
+ <span class="font-semibold">{{ headline }}</span>
61
+ <span
62
+ v-if="detailLine"
63
+ class="text-muted"
64
+ > · {{ detailLine }}</span>
65
+ </p>
66
+ </div>
67
+
68
+ <div
69
+ v-if="stats?.latestError"
70
+ class="mt-3 rounded-md bg-default ring ring-error/20 p-3"
71
+ >
72
+ <p class="text-sm font-medium">
73
+ <span v-if="stats.latestError.name">{{ stats.latestError.name }}: </span>{{ stats.latestError.message }}
74
+ </p>
75
+ <dl class="mt-2 grid grid-cols-2 lg:grid-cols-4 gap-x-4 gap-y-2 text-xs">
76
+ <div>
77
+ <dt class="uppercase text-muted">
78
+ Who
79
+ </dt>
80
+ <dd class="mt-0.5 truncate">
81
+ {{ who }}
82
+ </dd>
83
+ </div>
84
+ <div>
85
+ <dt class="uppercase text-muted">
86
+ Where
87
+ </dt>
88
+ <dd class="mt-0.5 truncate">
89
+ {{ stats.latestError.service }}<span v-if="stats.latestError.route"> · {{ stats.latestError.route }}</span>
90
+ </dd>
91
+ </div>
92
+ <div>
93
+ <dt class="uppercase text-muted">
94
+ When
95
+ </dt>
96
+ <dd class="mt-0.5 tabular-nums">
97
+ {{ formatRelative(stats.latestError.time) }}
98
+ </dd>
99
+ </div>
100
+ <div>
101
+ <dt class="uppercase text-muted">
102
+ Trace
103
+ </dt>
104
+ <dd
105
+ class="mt-0.5 font-mono truncate"
106
+ :title="stats.latestError.traceId"
107
+ >
108
+ {{ stats.latestError.traceId ?? "n/a" }}
109
+ </dd>
110
+ </div>
111
+ </dl>
112
+ </div>
113
+ </section>
114
+ </template>
@@ -0,0 +1,16 @@
1
+ import type { OverviewStats, OverviewActivityItem } from '../../shared/schema/overview.js';
2
+ /**
3
+ * The triage hero: a one-line health banner colour-coded by worst state, expanding
4
+ * to include the latest-error spotlight (who/what/when/where) only when there are
5
+ * errors in the window. Quiet when healthy, loud when broken. `detail` is the newest
6
+ * error-level activity item, used to enrich the spotlight with the actor fields
7
+ * stats.latestError does not carry.
8
+ */
9
+ type __VLS_Props = {
10
+ stats?: OverviewStats;
11
+ periodLabel?: string;
12
+ detail?: OverviewActivityItem;
13
+ };
14
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
@@ -0,0 +1,13 @@
1
+ import type { JourneyMode } from '../../shared/schema/journey.js';
2
+ /**
3
+ * The journey selector: a mode picker (trace/session/user) + an id box. Submitting
4
+ * navigates to the same page with ?mode=&key=, so the URL is the single source of
5
+ * truth (shareable, back-button-safe) and the page's fetch reacts to the change.
6
+ */
7
+ type __VLS_Props = {
8
+ mode: JourneyMode;
9
+ keyValue: string;
10
+ };
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
@@ -0,0 +1,55 @@
1
+ <script setup>
2
+ import { ref, watch } from "vue";
3
+ import { useRuntimeConfig, navigateTo } from "#imports";
4
+ const props = defineProps({
5
+ mode: { type: String, required: true },
6
+ keyValue: { type: String, required: true }
7
+ });
8
+ const { prefix } = useRuntimeConfig().public.observe;
9
+ const localMode = ref(props.mode);
10
+ const localKey = ref(props.keyValue);
11
+ watch(() => props.mode, (v) => localMode.value = v);
12
+ watch(() => props.keyValue, (v) => localKey.value = v);
13
+ const modeItems = [
14
+ { label: "Trace", value: "trace" },
15
+ { label: "Session", value: "session" },
16
+ { label: "User", value: "user" }
17
+ ];
18
+ const placeholder = {
19
+ trace: "32-hex trace id",
20
+ session: "session id",
21
+ user: "user id"
22
+ };
23
+ async function submit() {
24
+ const key = localKey.value.trim();
25
+ if (!key) return;
26
+ await navigateTo({ path: `${prefix}/journey`, query: { mode: localMode.value, key } });
27
+ }
28
+ </script>
29
+
30
+ <template>
31
+ <form
32
+ class="flex flex-wrap items-center gap-2"
33
+ @submit.prevent="submit"
34
+ >
35
+ <USelect
36
+ v-model="localMode"
37
+ :items="modeItems"
38
+ value-key="value"
39
+ icon="i-lucide-waypoints"
40
+ class="w-36"
41
+ />
42
+ <UInput
43
+ v-model="localKey"
44
+ :placeholder="placeholder[localMode]"
45
+ icon="i-lucide-search"
46
+ class="w-80 font-mono"
47
+ />
48
+ <UButton
49
+ type="submit"
50
+ label="View journey"
51
+ icon="i-lucide-arrow-right"
52
+ :disabled="localKey.trim().length === 0"
53
+ />
54
+ </form>
55
+ </template>
@@ -0,0 +1,13 @@
1
+ import type { JourneyMode } from '../../shared/schema/journey.js';
2
+ /**
3
+ * The journey selector: a mode picker (trace/session/user) + an id box. Submitting
4
+ * navigates to the same page with ?mode=&key=, so the URL is the single source of
5
+ * truth (shareable, back-button-safe) and the page's fetch reacts to the change.
6
+ */
7
+ type __VLS_Props = {
8
+ mode: JourneyMode;
9
+ keyValue: string;
10
+ };
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;