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,6 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { clearUserSession } from "#imports";
3
+ export default defineEventHandler(async (event) => {
4
+ await clearUserSession(event);
5
+ return { ok: true };
6
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<import("../../../../shared/auth/types.js").Principal>>;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { requireObserveSession } from "../../../utils/require-observe-session.js";
3
+ export default defineEventHandler((event) => requireObserveSession(event));
@@ -0,0 +1,3 @@
1
+ import { type ErrorGroupDetailResponse } from '../../../../shared/schema/errors-query.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<ErrorGroupDetailResponse>>;
3
+ export default _default;
@@ -0,0 +1,56 @@
1
+ import { defineEventHandler, getValidatedQuery, getValidatedRouterParams, createError, H3Error } from "h3";
2
+ import { z } from "zod";
3
+ import { useRuntimeConfig } from "#imports";
4
+ import {
5
+ errorDetailQuerySchema,
6
+ DEFAULT_REGRESSION_THRESHOLDS
7
+ } from "../../../../shared/schema/errors-query.js";
8
+ import { periodToRange } from "../../../../shared/utils/period.js";
9
+ import { DEFAULT_BUCKET_MS, MAX_BUCKETS } from "../../../utils/stats-query.js";
10
+ import { requireCapability, getAllowedServiceIds } from "../../../utils/authz.js";
11
+ import { resolveEffectiveScope } from "../../../utils/scope.js";
12
+ import { getErrorGroup } from "../../../utils/observe-errors.js";
13
+ const paramsSchema = z.object({ fingerprint: z.string().regex(/^v\d+:[0-9a-f]{16}$/) });
14
+ export default defineEventHandler(async (event) => {
15
+ const { principal } = await requireCapability(event, "logs.read");
16
+ const { fingerprint } = await getValidatedRouterParams(event, paramsSchema.parse);
17
+ const query = await getValidatedQuery(event, errorDetailQuerySchema.parse);
18
+ const allowed = await getAllowedServiceIds(event, principal);
19
+ const effective = await resolveEffectiveScope(event, principal, allowed, {
20
+ service: query.service,
21
+ group: query.group
22
+ });
23
+ const { from, to, label } = periodToRange(query.period);
24
+ const bucketMs = query.bucketMs ?? DEFAULT_BUCKET_MS[query.period];
25
+ if ((to - from) / bucketMs > MAX_BUCKETS) {
26
+ throw createError({ statusCode: 400, statusMessage: "bucketMs too small for window" });
27
+ }
28
+ if (effective !== "*" && effective.length === 0) {
29
+ throw createError({ statusCode: 404, statusMessage: "Not Found", data: { error: "UNKNOWN_ERROR", fingerprint } });
30
+ }
31
+ const thresholds = useRuntimeConfig(event).observe.errors ?? DEFAULT_REGRESSION_THRESHOLDS;
32
+ let detail;
33
+ try {
34
+ detail = await getErrorGroup(fingerprint, {
35
+ from,
36
+ to,
37
+ bucketMs,
38
+ limit: query.limit,
39
+ offset: query.offset,
40
+ thresholds,
41
+ now: Date.now()
42
+ }, effective);
43
+ } catch (e) {
44
+ if (e instanceof H3Error) throw e;
45
+ throw createError({ statusCode: 500, statusMessage: "Error group query failed" });
46
+ }
47
+ if (!detail) {
48
+ throw createError({ statusCode: 404, statusMessage: "Not Found", data: { error: "UNKNOWN_ERROR", fingerprint } });
49
+ }
50
+ return {
51
+ period: { from, to, label },
52
+ ...detail,
53
+ limit: query.limit,
54
+ offset: query.offset
55
+ };
56
+ });
@@ -0,0 +1,3 @@
1
+ import { type ErrorGroupsResponse } from '../../../../shared/schema/errors-query.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<ErrorGroupsResponse>>;
3
+ export default _default;
@@ -0,0 +1,41 @@
1
+ import { defineEventHandler, getValidatedQuery, createError, H3Error } from "h3";
2
+ import { useRuntimeConfig } from "#imports";
3
+ import {
4
+ errorsQuerySchema,
5
+ DEFAULT_REGRESSION_THRESHOLDS
6
+ } from "../../../../shared/schema/errors-query.js";
7
+ import { periodToRange } from "../../../../shared/utils/period.js";
8
+ import { requireCapability, getAllowedServiceIds } from "../../../utils/authz.js";
9
+ import { resolveEffectiveScope } from "../../../utils/scope.js";
10
+ import { listErrorGroups } from "../../../utils/observe-errors.js";
11
+ export default defineEventHandler(async (event) => {
12
+ const { principal } = await requireCapability(event, "logs.read");
13
+ const query = await getValidatedQuery(event, errorsQuerySchema.parse);
14
+ const allowed = await getAllowedServiceIds(event, principal);
15
+ const effective = await resolveEffectiveScope(event, principal, allowed, {
16
+ service: query.service,
17
+ group: query.group
18
+ });
19
+ const { from, to, label } = periodToRange(query.period);
20
+ const period = { from, to, label };
21
+ if (effective !== "*" && effective.length === 0) {
22
+ return { period, groups: [], total: 0, limit: query.limit, offset: query.offset };
23
+ }
24
+ const thresholds = useRuntimeConfig(event).observe.errors ?? DEFAULT_REGRESSION_THRESHOLDS;
25
+ try {
26
+ const { groups, total } = await listErrorGroups({
27
+ from,
28
+ to,
29
+ limit: query.limit,
30
+ offset: query.offset,
31
+ sort: query.sort,
32
+ filters: { app: query.app, version: query.version, env: query.env, level: query.level, q: query.q },
33
+ thresholds,
34
+ now: Date.now()
35
+ }, effective);
36
+ return { period, groups, total, limit: query.limit, offset: query.offset };
37
+ } catch (e) {
38
+ if (e instanceof H3Error) throw e;
39
+ throw createError({ statusCode: 500, statusMessage: "Errors query failed" });
40
+ }
41
+ });
@@ -0,0 +1,8 @@
1
+ import { type LogsFacetsResponse } from '../../../shared/schema/logs-query.js';
2
+ /**
3
+ * Distinct versions for the filter bar's version dropdown, scoped to the caller and
4
+ * narrowed by ?service/?group so it tracks the navbar switcher. Services/groups facets
5
+ * are deliberately NOT returned - the switcher already owns that surface (Fact 4).
6
+ */
7
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<LogsFacetsResponse>>;
8
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { defineEventHandler, getValidatedQuery } from "h3";
2
+ import { logsFacetsQuerySchema } from "../../../shared/schema/logs-query.js";
3
+ import { requireCapability, getAllowedServiceIds } from "../../utils/authz.js";
4
+ import { resolveEffectiveScope } from "../../utils/scope.js";
5
+ import { queryDistinctVersions } from "../../utils/logs.js";
6
+ export default defineEventHandler(async (event) => {
7
+ const { principal } = await requireCapability(event, "logs.read");
8
+ const { service, group } = await getValidatedQuery(event, logsFacetsQuerySchema.parse);
9
+ const allowed = await getAllowedServiceIds(event, principal);
10
+ const effective = await resolveEffectiveScope(event, principal, allowed, { service, group });
11
+ return { versions: await queryDistinctVersions(effective) };
12
+ });
@@ -0,0 +1,3 @@
1
+ /** Phase 1: group assignments are config-managed (observe.auth.users). See §11 R1. */
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<never>>;
3
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { defineEventHandler, getValidatedRouterParams, createError } from "h3";
2
+ import { groupIdParams } from "../../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../../utils/authz.js";
4
+ export default defineEventHandler(async (event) => {
5
+ await requireCapability(event, "users.manage");
6
+ await getValidatedRouterParams(event, groupIdParams.parse);
7
+ throw createError({
8
+ statusCode: 501,
9
+ statusMessage: "Not Implemented",
10
+ data: { error: "ASSIGNMENTS_MANAGED_IN_CONFIG", hint: "Edit observe.auth.users; runtime assignment lands in CP16." }
11
+ });
12
+ });
@@ -0,0 +1,5 @@
1
+ /** Reconcile a group's membership to exactly the given service ids (direct group_id FK). */
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
3
+ ok: true;
4
+ }>>;
5
+ export default _default;
@@ -0,0 +1,13 @@
1
+ import { defineEventHandler, getValidatedRouterParams, readValidatedBody, createError } from "h3";
2
+ import { groupIdParams, groupMembershipSchema } from "../../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../../utils/authz.js";
4
+ import { getGroupDetail, setGroupMembership } from "../../../../utils/provisioning.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "groups.manage");
7
+ const { id } = await getValidatedRouterParams(event, groupIdParams.parse);
8
+ const existing = await getGroupDetail(id);
9
+ if (!existing) throw createError({ statusCode: 404, statusMessage: "Group not found" });
10
+ const { serviceIds } = await readValidatedBody(event, groupMembershipSchema.parse);
11
+ await setGroupMembership(id, serviceIds);
12
+ return { ok: true };
13
+ });
@@ -0,0 +1,5 @@
1
+ /** Deletes the group and detaches its member services (group_id = NULL). Admin-only. */
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
3
+ ok: true;
4
+ }>>;
5
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { defineEventHandler, getValidatedRouterParams, createError } from "h3";
2
+ import { groupIdParams } from "../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../utils/authz.js";
4
+ import { deleteGroupById } from "../../../utils/provisioning.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "groups.manage");
7
+ const { id } = await getValidatedRouterParams(event, groupIdParams.parse);
8
+ const ok = await deleteGroupById(id);
9
+ if (!ok) throw createError({ statusCode: 404, statusMessage: "Group not found" });
10
+ return { ok: true };
11
+ });
@@ -0,0 +1,6 @@
1
+ import type { GroupListItem, ServiceListItem } from '../../../../shared/schema/provisioning.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
3
+ group: GroupListItem;
4
+ services: ServiceListItem[];
5
+ }>>;
6
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { defineEventHandler, getValidatedRouterParams, createError } from "h3";
2
+ import { groupIdParams } from "../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../utils/authz.js";
4
+ import { getGroupDetail } from "../../../utils/provisioning.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "services.read");
7
+ const { id } = await getValidatedRouterParams(event, groupIdParams.parse);
8
+ const detail = await getGroupDetail(id);
9
+ if (!detail) throw createError({ statusCode: 404, statusMessage: "Group not found" });
10
+ return {
11
+ group: { id: detail.group.id, slug: detail.group.slug, name: detail.group.name, serviceCount: detail.services.length },
12
+ services: detail.services
13
+ };
14
+ });
@@ -0,0 +1,3 @@
1
+ import type { GroupListItem } from '../../../../shared/schema/provisioning.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<GroupListItem>>;
3
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { defineEventHandler, getValidatedRouterParams, readValidatedBody, createError } from "h3";
2
+ import { groupIdParams, groupUpdateSchema } from "../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../utils/authz.js";
4
+ import { updateGroupById } from "../../../utils/provisioning.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "groups.manage");
7
+ const { id } = await getValidatedRouterParams(event, groupIdParams.parse);
8
+ const { name } = await readValidatedBody(event, groupUpdateSchema.parse);
9
+ const group = await updateGroupById(id, name);
10
+ if (!group) throw createError({ statusCode: 404, statusMessage: "Group not found" });
11
+ return { id: group.id, slug: group.slug, name: group.name, serviceCount: 0 };
12
+ });
@@ -0,0 +1,3 @@
1
+ import type { GroupListItem } from '../../../../shared/schema/provisioning.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<GroupListItem[]>>;
3
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { requireCapability } from "../../../utils/authz.js";
3
+ import { listGroupsForPrincipal } from "../../../utils/provisioning.js";
4
+ export default defineEventHandler(async (event) => {
5
+ const { principal } = await requireCapability(event, "services.read");
6
+ return await listGroupsForPrincipal(event, principal);
7
+ });
@@ -0,0 +1,3 @@
1
+ import type { GroupListItem } from '../../../../shared/schema/provisioning.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<GroupListItem>>;
3
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { defineEventHandler, readValidatedBody, createError } from "h3";
2
+ import { groupCreateSchema } from "../../../../shared/schema/provisioning.js";
3
+ import { requireCapability } from "../../../utils/authz.js";
4
+ import { createGroupFromInput } from "../../../utils/provisioning.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "groups.manage");
7
+ const { name } = await readValidatedBody(event, groupCreateSchema.parse);
8
+ const result = await createGroupFromInput(name);
9
+ if (!result.ok) throw createError({ statusCode: 409, statusMessage: "Group slug already exists" });
10
+ return { id: result.group.id, slug: result.group.slug, name: result.group.name, serviceCount: 0 };
11
+ });
@@ -0,0 +1,6 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, {
2
+ ok: true;
3
+ module: string;
4
+ version: any;
5
+ }>;
6
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { useRuntimeConfig } from "#imports";
3
+ export default defineEventHandler((event) => {
4
+ const { observe } = useRuntimeConfig(event);
5
+ return {
6
+ ok: true,
7
+ module: "nuxt-observe",
8
+ version: observe.version
9
+ };
10
+ });
@@ -0,0 +1,5 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
+ ok: true;
3
+ inserted: number;
4
+ } | undefined>>;
5
+ export default _default;
@@ -0,0 +1,42 @@
1
+ import { defineEventHandler, getMethod, getHeader, getQuery, readValidatedBody, createError, setResponseStatus, H3Error } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { zFroggerBatch } from "../../../../shared/schema/adapters/frogger.js";
4
+ import { MAX_BATCH_EVENTS } from "../../../../shared/schema/batch.js";
5
+ import { getApiKeyFromEvent, resolveServiceIdByKey } from "../../../utils/api-keys.js";
6
+ import { resolveServiceCorsMeta } from "../../../utils/services.js";
7
+ import { froggerBatchToEvents } from "../../../utils/frogger-adapter.js";
8
+ import { insertEvents } from "../../../utils/logs.js";
9
+ import { handleCorsForIngest } from "../../../utils/ingest-cors.js";
10
+ import { checkIngestRateLimit } from "../../../utils/rate-limit.js";
11
+ import { checkIngestLoop } from "../../../utils/loop-guard.js";
12
+ const DEFAULT_MAX_BYTES = 1048576;
13
+ export default defineEventHandler(async (event) => {
14
+ const corsMeta = await resolveServiceCorsMeta(getQuery(event).key);
15
+ if (handleCorsForIngest(event, corsMeta)) return;
16
+ if (getMethod(event) !== "POST") throw createError({ statusCode: 405, statusMessage: "Method Not Allowed" });
17
+ const maxBytes = useRuntimeConfig().observe?.ingest?.maxBytes ?? DEFAULT_MAX_BYTES;
18
+ const len = getHeader(event, "content-length");
19
+ if (len && Number.parseInt(len) > maxBytes) throw createError({ statusCode: 413, statusMessage: "Request Too Large" });
20
+ const key = getApiKeyFromEvent(event);
21
+ if (!key) throw createError({ statusCode: 401, statusMessage: "Missing ingest key" });
22
+ const serviceId = await resolveServiceIdByKey(key);
23
+ if (!serviceId) throw createError({ statusCode: 401, statusMessage: "Invalid ingest key" });
24
+ if (!checkIngestRateLimit(serviceId)) throw createError({ statusCode: 429, statusMessage: "Rate limited" });
25
+ const batch = await readValidatedBody(event, zFroggerBatch.parse);
26
+ const loop = checkIngestLoop(event, batch.meta);
27
+ if (loop.reject) throw createError({ statusCode: 400, statusMessage: loop.reason });
28
+ const events = froggerBatchToEvents(batch);
29
+ if (events.length > MAX_BATCH_EVENTS) throw createError({ statusCode: 413, statusMessage: "Batch too large" });
30
+ if (!events.length) {
31
+ setResponseStatus(event, 202);
32
+ return { ok: true, inserted: 0 };
33
+ }
34
+ try {
35
+ const { inserted } = await insertEvents(events, { serviceId });
36
+ setResponseStatus(event, 202);
37
+ return { ok: true, inserted };
38
+ } catch (e) {
39
+ if (e instanceof H3Error) throw e;
40
+ throw createError({ statusCode: 500, statusMessage: "Insert failed" });
41
+ }
42
+ });
@@ -0,0 +1,5 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
+ ok: true;
3
+ inserted: number;
4
+ } | undefined>>;
5
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { defineEventHandler, getMethod, getHeader, getQuery, readValidatedBody, createError, setResponseStatus, H3Error } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { zCanonicalBatch } from "../../../shared/schema/batch.js";
4
+ import { getApiKeyFromEvent, resolveServiceIdByKey } from "../../utils/api-keys.js";
5
+ import { resolveServiceCorsMeta } from "../../utils/services.js";
6
+ import { insertEvents } from "../../utils/logs.js";
7
+ import { handleCorsForIngest } from "../../utils/ingest-cors.js";
8
+ import { checkIngestRateLimit } from "../../utils/rate-limit.js";
9
+ import { checkIngestLoop } from "../../utils/loop-guard.js";
10
+ const DEFAULT_MAX_BYTES = 1048576;
11
+ export default defineEventHandler(async (event) => {
12
+ const corsMeta = await resolveServiceCorsMeta(getQuery(event).key);
13
+ if (handleCorsForIngest(event, corsMeta)) return;
14
+ if (getMethod(event) !== "POST") throw createError({ statusCode: 405, statusMessage: "Method Not Allowed" });
15
+ const maxBytes = useRuntimeConfig().observe?.ingest?.maxBytes ?? DEFAULT_MAX_BYTES;
16
+ const len = getHeader(event, "content-length");
17
+ if (len && Number.parseInt(len) > maxBytes) throw createError({ statusCode: 413, statusMessage: "Request Too Large" });
18
+ const key = getApiKeyFromEvent(event);
19
+ if (!key) throw createError({ statusCode: 401, statusMessage: "Missing ingest key" });
20
+ const serviceId = await resolveServiceIdByKey(key);
21
+ if (!serviceId) throw createError({ statusCode: 401, statusMessage: "Invalid ingest key" });
22
+ if (!checkIngestRateLimit(serviceId)) throw createError({ statusCode: 429, statusMessage: "Rate limited" });
23
+ const batch = await readValidatedBody(event, zCanonicalBatch.parse);
24
+ const loop = checkIngestLoop(event, batch.meta);
25
+ if (loop.reject) throw createError({ statusCode: 400, statusMessage: loop.reason });
26
+ if (!batch.events.length) {
27
+ setResponseStatus(event, 202);
28
+ return { ok: true, inserted: 0 };
29
+ }
30
+ try {
31
+ const { inserted } = await insertEvents(batch.events, { serviceId });
32
+ setResponseStatus(event, 202);
33
+ return { ok: true, inserted };
34
+ } catch (e) {
35
+ if (e instanceof H3Error) throw e;
36
+ throw createError({ statusCode: 500, statusMessage: "Insert failed" });
37
+ }
38
+ });
@@ -0,0 +1,9 @@
1
+ import { type JourneyResponse } from '../../../shared/schema/journey.js';
2
+ /**
3
+ * GET /api/observe/journey (CP12): a read-only, cross-service correlation timeline
4
+ * keyed by exactly one of traceId | session | user. Reuses the logs.read capability
5
+ * and CP6 service scoping. Empty match is a 200 with a partial reason, never a 404 -
6
+ * 4xx is for malformed input, not empty results.
7
+ */
8
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<JourneyResponse>>;
9
+ export default _default;
@@ -0,0 +1,31 @@
1
+ import { defineEventHandler, getValidatedQuery, createError, H3Error } from "h3";
2
+ import {
3
+ journeyQuerySchema,
4
+ journeyMode,
5
+ detectPartial,
6
+ computeJourneyStats
7
+ } from "../../../shared/schema/journey.js";
8
+ import { requireCapability, getAllowedServiceIds } from "../../utils/authz.js";
9
+ import { getJourney } from "../../utils/journey.js";
10
+ export default defineEventHandler(async (event) => {
11
+ const { principal } = await requireCapability(event, "logs.read");
12
+ const query = await getValidatedQuery(event, journeyQuerySchema.parse);
13
+ const { mode, key } = journeyMode(query);
14
+ const allowed = await getAllowedServiceIds(event, principal);
15
+ if (allowed !== "*" && allowed.length === 0) {
16
+ return { mode, key, partial: true, reasons: ["empty"], stats: computeJourneyStats([]), events: [] };
17
+ }
18
+ try {
19
+ const events = await getJourney(mode, key, {
20
+ from: query.from,
21
+ to: query.to,
22
+ limit: query.limit,
23
+ serviceIds: allowed
24
+ });
25
+ const { partial, reasons } = detectPartial(events, events.length === query.limit);
26
+ return { mode, key, partial, reasons, stats: computeJourneyStats(events), events };
27
+ } catch (e) {
28
+ if (e instanceof H3Error) throw e;
29
+ throw createError({ statusCode: 500, statusMessage: "Journey query failed" });
30
+ }
31
+ });
@@ -0,0 +1,3 @@
1
+ import { type LogDetail } from '../../../../shared/schema/logs-query.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<LogDetail>>;
3
+ export default _default;
@@ -0,0 +1,19 @@
1
+ import { defineEventHandler, getValidatedRouterParams, createError } from "h3";
2
+ import { z } from "zod";
3
+ import { rowToDetail } from "../../../../shared/schema/logs-query.js";
4
+ import { requireCapability, getAllowedServiceIds } from "../../../utils/authz.js";
5
+ import { getLogById } from "../../../utils/logs.js";
6
+ const paramsSchema = z.object({ id: z.string().min(1).max(64) });
7
+ export default defineEventHandler(async (event) => {
8
+ const { principal } = await requireCapability(event, "logs.read");
9
+ const { id } = await getValidatedRouterParams(event, paramsSchema.parse);
10
+ const row = await getLogById(id);
11
+ if (!row) {
12
+ throw createError({ statusCode: 404, statusMessage: "Not Found", data: { error: "UNKNOWN_LOG", id } });
13
+ }
14
+ const allowed = await getAllowedServiceIds(event, principal);
15
+ if (allowed !== "*" && (!row.service_id || !allowed.includes(row.service_id))) {
16
+ throw createError({ statusCode: 403, statusMessage: "Forbidden", data: { error: "OUT_OF_SCOPE", id } });
17
+ }
18
+ return rowToDetail(row);
19
+ });
@@ -0,0 +1,3 @@
1
+ import { type LogListResponse } from '../../../shared/schema/logs-query.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<LogListResponse>>;
3
+ export default _default;
@@ -0,0 +1,54 @@
1
+ import { defineEventHandler, getValidatedQuery, createError, H3Error } from "h3";
2
+ import { logsQuerySchema } from "../../../shared/schema/logs-query.js";
3
+ import { periodToRange } from "../../../shared/utils/period.js";
4
+ import { requireCapability, getAllowedServiceIds } from "../../utils/authz.js";
5
+ import { resolveEffectiveScope } from "../../utils/scope.js";
6
+ import { queryLogs, countLogs } from "../../utils/logs.js";
7
+ function toListItem(row) {
8
+ return {
9
+ id: row.id,
10
+ time: row.time,
11
+ level: row.level,
12
+ message: row.message,
13
+ app: row.app,
14
+ version: row.version ?? null,
15
+ env: row.env ?? null,
16
+ service_id: row.service_id ?? null,
17
+ route: row.route ?? null,
18
+ feature: row.feature ?? null,
19
+ error_name: row.error_name ?? null,
20
+ trace_id: row.trace_id ?? null
21
+ };
22
+ }
23
+ export default defineEventHandler(async (event) => {
24
+ const { principal } = await requireCapability(event, "logs.read");
25
+ const query = await getValidatedQuery(event, logsQuerySchema.parse);
26
+ const allowed = await getAllowedServiceIds(event, principal);
27
+ const effective = await resolveEffectiveScope(event, principal, allowed, {
28
+ service: query.service,
29
+ group: query.group
30
+ });
31
+ const { from, to, label } = periodToRange(query.period);
32
+ const period = { from, to, label };
33
+ if (effective !== "*" && effective.length === 0) {
34
+ return { period, rows: [], total: 0, limit: query.limit, offset: query.offset };
35
+ }
36
+ const filter = {
37
+ ...query.traceId ? { traceId: query.traceId } : { from, to },
38
+ levels: query.levels,
39
+ versions: query.versions,
40
+ ...query.route ? { route: query.route } : {},
41
+ ...query.feature ? { feature: query.feature } : {},
42
+ q: query.q,
43
+ serviceIds: effective,
44
+ limit: query.limit,
45
+ offset: query.offset
46
+ };
47
+ try {
48
+ const [rows, total] = await Promise.all([queryLogs(filter), countLogs(filter)]);
49
+ return { period, rows: rows.map(toListItem), total, limit: query.limit, offset: query.offset };
50
+ } catch (e) {
51
+ if (e instanceof H3Error) throw e;
52
+ throw createError({ statusCode: 500, statusMessage: "Logs query failed" });
53
+ }
54
+ });
@@ -0,0 +1,9 @@
1
+ import type { MigrationStatusResponse } from '../../../../shared/schema/migrations.js';
2
+ /**
3
+ * Migration status for the admin console + the dashboard banner. Admin-only
4
+ * (migrations.manage). Global action, not service-scoped, so no serviceScopeFilter.
5
+ * `pendingDestructive` drives the banner; a blocked destructive still needs attention,
6
+ * so it counts too.
7
+ */
8
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<MigrationStatusResponse>>;
9
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { requireCapability } from "../../../utils/authz.js";
3
+ import { useObserveDb } from "../../../utils/db.js";
4
+ import { getMigrationStatus } from "../../../utils/migration-runner.js";
5
+ export default defineEventHandler(async (event) => {
6
+ await requireCapability(event, "migrations.manage");
7
+ const db = useObserveDb();
8
+ const statuses = await getMigrationStatus(db);
9
+ const pendingDestructive = statuses.filter(
10
+ (s) => s.class === "destructive" && s.state !== "applied"
11
+ ).length;
12
+ const driftWarnings = statuses.filter((s) => s.driftWarning).map((s) => s.id);
13
+ return { statuses, pendingDestructive, driftWarnings };
14
+ });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Runs pending migrations and streams progress as SSE frames. Deliberately POST + an h3
3
+ * event stream (NOT a GET EventSource): EventSource auto-reconnects, and a reconnect on a
4
+ * one-shot mutation could re-trigger the run. The client reads `response.body` as a stream
5
+ * (fetch + TextDecoder), so the wire format is SSE (`data: {json}\n\n`) without EventSource.
6
+ *
7
+ * Body: `{ ids?: string[] }` — omit to run all pending, one id for "run next". Frames:
8
+ * { type: 'log', line } per runner output line (start/ok/fail/backup)
9
+ * { type: 'complete', applied, failedAt? } terminal success/summary
10
+ * { type: 'error', message } terminal failure (unexpected throw)
11
+ */
12
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<void>>;
13
+ export default _default;
@@ -0,0 +1,35 @@
1
+ import { defineEventHandler, readBody, createEventStream } from "h3";
2
+ import { useRuntimeConfig } from "#imports";
3
+ import { requireCapability } from "../../../utils/authz.js";
4
+ import { useObserveDb } from "../../../utils/db.js";
5
+ import { runPendingMigrations } from "../../../utils/migration-runner.js";
6
+ export default defineEventHandler(async (event) => {
7
+ await requireCapability(event, "migrations.manage");
8
+ const body = await readBody(event).catch(() => ({}));
9
+ const ids = Array.isArray(body?.ids) ? body.ids : void 0;
10
+ const db = useObserveDb();
11
+ const dbPath = useRuntimeConfig(event).observe.database.path;
12
+ const stream = createEventStream(event);
13
+ let chain = Promise.resolve();
14
+ const send = (payload) => {
15
+ chain = chain.then(() => stream.push({ data: JSON.stringify(payload) }));
16
+ return chain;
17
+ };
18
+ void (async () => {
19
+ try {
20
+ const result = await runPendingMigrations(db, {
21
+ mode: "admin",
22
+ ids,
23
+ dbPath,
24
+ log: (line) => void send({ type: "log", line })
25
+ });
26
+ await send({ type: "complete", applied: result.applied, failedAt: result.failedAt });
27
+ } catch (e) {
28
+ const message = e instanceof Error ? e.message : String(e);
29
+ await send({ type: "error", message });
30
+ } finally {
31
+ await stream.close();
32
+ }
33
+ })();
34
+ return stream.send();
35
+ });
@@ -0,0 +1,3 @@
1
+ import { type OverviewResponse } from '../../../shared/schema/overview.js';
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<OverviewResponse>>;
3
+ export default _default;