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,9 @@
1
+ import { z } from "zod";
2
+ import { PERIODS } from "../utils/period.js";
3
+ export const overviewQuerySchema = z.object({
4
+ period: z.enum(PERIODS).default("24h"),
5
+ /** service slug; resolved to an id and intersected with the caller's scope */
6
+ service: z.string().optional(),
7
+ /** group slug; expanded to member service ids and intersected with the caller's scope */
8
+ group: z.string().optional()
9
+ });
@@ -0,0 +1,230 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Provisioning contracts (CP11). Pure zod + local only: this file loads in the
4
+ * browser UForm, the Nitro routes, and node unit tests, so it must never import
5
+ * #imports, node:crypto, or any server util (same rule as registry.ts).
6
+ *
7
+ * `type` is orthogonal to `kind`: `kind` (server|browser) drives dynamic CORS,
8
+ * `type` is a descriptive UI-only category (badge + icon + filter metadata).
9
+ */
10
+ export declare const SERVICE_TYPES: readonly ["website", "webapp", "api", "service", "worker", "mobile", "other"];
11
+ export type ServiceType = (typeof SERVICE_TYPES)[number];
12
+ export declare const serviceTypeSchema: z.ZodEnum<{
13
+ service: "service";
14
+ other: "other";
15
+ website: "website";
16
+ webapp: "webapp";
17
+ api: "api";
18
+ worker: "worker";
19
+ mobile: "mobile";
20
+ }>;
21
+ export declare const SERVICE_KINDS: readonly ["server", "browser"];
22
+ export type ServiceKind = (typeof SERVICE_KINDS)[number];
23
+ export declare const serviceKindSchema: z.ZodEnum<{
24
+ server: "server";
25
+ browser: "browser";
26
+ }>;
27
+ /**
28
+ * Presentation map for the `type` axis: one source of truth for the USelectMenu
29
+ * options, the table badge, and the detail header. lucide names follow the repo's
30
+ * `i-lucide-*` convention. An unknown/hand-edited `type` falls back to `other`
31
+ * at render time (see serviceTypeMeta).
32
+ */
33
+ export declare const SERVICE_TYPE_META: {
34
+ readonly website: {
35
+ readonly label: "Website";
36
+ readonly icon: "i-lucide-globe";
37
+ };
38
+ readonly webapp: {
39
+ readonly label: "Web app";
40
+ readonly icon: "i-lucide-app-window";
41
+ };
42
+ readonly api: {
43
+ readonly label: "API";
44
+ readonly icon: "i-lucide-webhook";
45
+ };
46
+ readonly service: {
47
+ readonly label: "Service";
48
+ readonly icon: "i-lucide-server";
49
+ };
50
+ readonly worker: {
51
+ readonly label: "Worker";
52
+ readonly icon: "i-lucide-cog";
53
+ };
54
+ readonly mobile: {
55
+ readonly label: "Mobile";
56
+ readonly icon: "i-lucide-smartphone";
57
+ };
58
+ readonly other: {
59
+ readonly label: "Other";
60
+ readonly icon: "i-lucide-box";
61
+ };
62
+ };
63
+ /** Lenient lookup: any unrecognised value renders as `other` rather than throwing. */
64
+ export declare function serviceTypeMeta(type: string): {
65
+ label: string;
66
+ icon: string;
67
+ };
68
+ export declare const serviceCreateSchema: z.ZodObject<{
69
+ name: z.ZodString;
70
+ type: z.ZodDefault<z.ZodEnum<{
71
+ service: "service";
72
+ other: "other";
73
+ website: "website";
74
+ webapp: "webapp";
75
+ api: "api";
76
+ worker: "worker";
77
+ mobile: "mobile";
78
+ }>>;
79
+ kind: z.ZodDefault<z.ZodEnum<{
80
+ server: "server";
81
+ browser: "browser";
82
+ }>>;
83
+ appNames: z.ZodArray<z.ZodString>;
84
+ allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>;
85
+ env: z.ZodOptional<z.ZodString>;
86
+ versionTracking: z.ZodOptional<z.ZodBoolean>;
87
+ }, z.core.$strip>;
88
+ export declare const serviceUpdateSchema: z.ZodObject<{
89
+ name: z.ZodOptional<z.ZodString>;
90
+ type: z.ZodOptional<z.ZodEnum<{
91
+ service: "service";
92
+ other: "other";
93
+ website: "website";
94
+ webapp: "webapp";
95
+ api: "api";
96
+ worker: "worker";
97
+ mobile: "mobile";
98
+ }>>;
99
+ kind: z.ZodOptional<z.ZodEnum<{
100
+ server: "server";
101
+ browser: "browser";
102
+ }>>;
103
+ appNames: z.ZodOptional<z.ZodArray<z.ZodString>>;
104
+ allowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
+ env: z.ZodOptional<z.ZodNullable<z.ZodString>>;
106
+ groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
107
+ versionTracking: z.ZodOptional<z.ZodBoolean>;
108
+ currentVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
109
+ }, z.core.$strip>;
110
+ export declare const keyCreateSchema: z.ZodObject<{
111
+ label: z.ZodString;
112
+ }, z.core.$strip>;
113
+ export declare const groupCreateSchema: z.ZodObject<{
114
+ name: z.ZodString;
115
+ }, z.core.$strip>;
116
+ export declare const groupUpdateSchema: z.ZodObject<{
117
+ name: z.ZodString;
118
+ }, z.core.$strip>;
119
+ export declare const groupMembershipSchema: z.ZodObject<{
120
+ serviceIds: z.ZodArray<z.ZodString>;
121
+ }, z.core.$strip>;
122
+ export declare const assignmentSchema: z.ZodObject<{
123
+ userIds: z.ZodArray<z.ZodString>;
124
+ }, z.core.$strip>;
125
+ export declare const serviceIdParams: z.ZodObject<{
126
+ id: z.ZodString;
127
+ }, z.core.$strip>;
128
+ export declare const keyIdParams: z.ZodObject<{
129
+ id: z.ZodString;
130
+ keyId: z.ZodString;
131
+ }, z.core.$strip>;
132
+ export declare const groupIdParams: z.ZodObject<{
133
+ id: z.ZodString;
134
+ }, z.core.$strip>;
135
+ export type ServiceCreate = z.infer<typeof serviceCreateSchema>;
136
+ export type ServiceUpdate = z.infer<typeof serviceUpdateSchema>;
137
+ export type KeyCreate = z.infer<typeof keyCreateSchema>;
138
+ export type GroupCreate = z.infer<typeof groupCreateSchema>;
139
+ export type GroupMembership = z.infer<typeof groupMembershipSchema>;
140
+ /**
141
+ * Wire shapes the composables type against. Kept here (framework-free) so the
142
+ * client and the routes never drift on field names.
143
+ */
144
+ export interface ServiceListItem {
145
+ id: string;
146
+ slug: string;
147
+ name: string;
148
+ type: ServiceType;
149
+ kind: ServiceKind;
150
+ env: string | null;
151
+ groupId: string | null;
152
+ versionTracking: boolean;
153
+ currentVersion: string | null;
154
+ keyCount: number;
155
+ managedByConfig: boolean;
156
+ deletedAt: number | null;
157
+ /** epoch ms at which a soft-deleted service is eligible for permanent purge, else null. */
158
+ purgeAt: number | null;
159
+ }
160
+ export interface ServiceDetail extends ServiceListItem {
161
+ appNames: string[];
162
+ allowedOrigins: string[];
163
+ group: {
164
+ id: string;
165
+ slug: string;
166
+ name: string;
167
+ } | null;
168
+ }
169
+ export interface KeyMeta {
170
+ id: string;
171
+ keyPrefix: string;
172
+ label: string | null;
173
+ createdAt: number;
174
+ revokedAt: number | null;
175
+ lastUsedAt: number | null;
176
+ }
177
+ export interface MintedKey {
178
+ key: string;
179
+ prefix: string;
180
+ ingestUrl: string;
181
+ snippet: {
182
+ rawUrl: string;
183
+ serverPluginSnippet: string;
184
+ configSnippet: string;
185
+ };
186
+ }
187
+ export interface GroupListItem {
188
+ id: string;
189
+ slug: string;
190
+ name: string;
191
+ serviceCount: number;
192
+ }
193
+ export interface UserPick {
194
+ id: string;
195
+ name: string;
196
+ role: string;
197
+ assignment: {
198
+ services: string[];
199
+ groups: string[];
200
+ };
201
+ }
202
+ /**
203
+ * Full DB-backed user (CP16), for the edit page. `services`/`groups` carry ids + per-scope
204
+ * role (the assignment editor edits by id); `assignment` carries slugs for display parity
205
+ * with UserPick. `disabled` is a boolean on the wire (0/1 in the row).
206
+ */
207
+ export interface UserDetail {
208
+ id: string;
209
+ username: string;
210
+ displayName: string | null;
211
+ name: string;
212
+ role: string;
213
+ disabled: boolean;
214
+ source: string;
215
+ hasPassword: boolean;
216
+ createdAt: number;
217
+ updatedAt: number | null;
218
+ assignment: {
219
+ services: string[];
220
+ groups: string[];
221
+ };
222
+ services: Array<{
223
+ serviceId: string;
224
+ role: string;
225
+ }>;
226
+ groups: Array<{
227
+ groupId: string;
228
+ role: string;
229
+ }>;
230
+ }
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ export const SERVICE_TYPES = ["website", "webapp", "api", "service", "worker", "mobile", "other"];
3
+ export const serviceTypeSchema = z.enum(SERVICE_TYPES);
4
+ export const SERVICE_KINDS = ["server", "browser"];
5
+ export const serviceKindSchema = z.enum(SERVICE_KINDS);
6
+ export const SERVICE_TYPE_META = {
7
+ website: { label: "Website", icon: "i-lucide-globe" },
8
+ webapp: { label: "Web app", icon: "i-lucide-app-window" },
9
+ api: { label: "API", icon: "i-lucide-webhook" },
10
+ service: { label: "Service", icon: "i-lucide-server" },
11
+ worker: { label: "Worker", icon: "i-lucide-cog" },
12
+ mobile: { label: "Mobile", icon: "i-lucide-smartphone" },
13
+ other: { label: "Other", icon: "i-lucide-box" }
14
+ };
15
+ export function serviceTypeMeta(type) {
16
+ return SERVICE_TYPE_META[type] ?? SERVICE_TYPE_META.other;
17
+ }
18
+ const originSchema = z.string().refine(
19
+ (v) => v === "*" || /^https?:\/\/[^/\s]+$/.test(v),
20
+ { message: 'must be an http(s) origin (e.g. https://app.example.com) or "*"' }
21
+ );
22
+ export const serviceCreateSchema = z.object({
23
+ name: z.string().min(1).max(80),
24
+ type: serviceTypeSchema.default("service"),
25
+ kind: serviceKindSchema.default("server"),
26
+ appNames: z.array(z.string().min(1)).min(1),
27
+ allowedOrigins: z.array(originSchema).default([]),
28
+ env: z.string().max(40).optional(),
29
+ versionTracking: z.boolean().optional()
30
+ }).refine((s) => !(s.allowedOrigins.length && s.kind === "server"), {
31
+ path: ["allowedOrigins"],
32
+ message: 'allowedOrigins requires kind="browser"'
33
+ });
34
+ export const serviceUpdateSchema = z.object({
35
+ name: z.string().min(1).max(80).optional(),
36
+ type: serviceTypeSchema.optional(),
37
+ kind: serviceKindSchema.optional(),
38
+ appNames: z.array(z.string().min(1)).min(1).optional(),
39
+ allowedOrigins: z.array(originSchema).optional(),
40
+ env: z.string().max(40).nullable().optional(),
41
+ groupId: z.string().nullable().optional(),
42
+ versionTracking: z.boolean().optional(),
43
+ currentVersion: z.string().nullable().optional()
44
+ });
45
+ export const keyCreateSchema = z.object({ label: z.string().min(1).max(60) });
46
+ export const groupCreateSchema = z.object({ name: z.string().min(1).max(80) });
47
+ export const groupUpdateSchema = z.object({ name: z.string().min(1).max(80) });
48
+ export const groupMembershipSchema = z.object({ serviceIds: z.array(z.string().min(1)) });
49
+ export const assignmentSchema = z.object({ userIds: z.array(z.string().min(1)) });
50
+ export const serviceIdParams = z.object({ id: z.string().min(1) });
51
+ export const keyIdParams = z.object({ id: z.string().min(1), keyId: z.string().min(1) });
52
+ export const groupIdParams = z.object({ id: z.string().min(1) });
@@ -0,0 +1,115 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Config-seed contracts for the service registry. Pure zod + local only: this
4
+ * file is part of the `nuxt-observe/schema` subpath and must never import
5
+ * node:crypto, #imports, or any server util.
6
+ */
7
+ export declare const zServiceSeed: z.ZodPipe<z.ZodObject<{
8
+ slug: z.ZodString;
9
+ name: z.ZodString;
10
+ type: z.ZodDefault<z.ZodEnum<{
11
+ website: "website";
12
+ webapp: "webapp";
13
+ api: "api";
14
+ service: "service";
15
+ worker: "worker";
16
+ mobile: "mobile";
17
+ other: "other";
18
+ }>>;
19
+ kind: z.ZodDefault<z.ZodEnum<{
20
+ server: "server";
21
+ browser: "browser";
22
+ }>>;
23
+ appNames: z.ZodDefault<z.ZodArray<z.ZodString>>;
24
+ allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ env: z.ZodOptional<z.ZodString>;
26
+ versionTracking: z.ZodOptional<z.ZodBoolean>;
27
+ currentVersion: z.ZodOptional<z.ZodString>;
28
+ group: z.ZodOptional<z.ZodString>;
29
+ key: z.ZodOptional<z.ZodString>;
30
+ }, z.core.$strip>, z.ZodTransform<{
31
+ slug: string;
32
+ name: string;
33
+ type: "website" | "webapp" | "api" | "service" | "worker" | "mobile" | "other";
34
+ kind: "server" | "browser";
35
+ appNames: string[];
36
+ allowedOrigins: string[];
37
+ env?: string | undefined;
38
+ versionTracking?: boolean | undefined;
39
+ currentVersion?: string | undefined;
40
+ group?: string | undefined;
41
+ key?: string | undefined;
42
+ }, {
43
+ slug: string;
44
+ name: string;
45
+ type: "website" | "webapp" | "api" | "service" | "worker" | "mobile" | "other";
46
+ kind: "server" | "browser";
47
+ appNames: string[];
48
+ allowedOrigins: string[];
49
+ env?: string | undefined;
50
+ versionTracking?: boolean | undefined;
51
+ currentVersion?: string | undefined;
52
+ group?: string | undefined;
53
+ key?: string | undefined;
54
+ }>>;
55
+ export declare const zGroupSeed: z.ZodObject<{
56
+ slug: z.ZodString;
57
+ name: z.ZodString;
58
+ }, z.core.$strip>;
59
+ export declare const zObserveSeedConfig: z.ZodObject<{
60
+ services: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodObject<{
61
+ slug: z.ZodString;
62
+ name: z.ZodString;
63
+ type: z.ZodDefault<z.ZodEnum<{
64
+ website: "website";
65
+ webapp: "webapp";
66
+ api: "api";
67
+ service: "service";
68
+ worker: "worker";
69
+ mobile: "mobile";
70
+ other: "other";
71
+ }>>;
72
+ kind: z.ZodDefault<z.ZodEnum<{
73
+ server: "server";
74
+ browser: "browser";
75
+ }>>;
76
+ appNames: z.ZodDefault<z.ZodArray<z.ZodString>>;
77
+ allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>;
78
+ env: z.ZodOptional<z.ZodString>;
79
+ versionTracking: z.ZodOptional<z.ZodBoolean>;
80
+ currentVersion: z.ZodOptional<z.ZodString>;
81
+ group: z.ZodOptional<z.ZodString>;
82
+ key: z.ZodOptional<z.ZodString>;
83
+ }, z.core.$strip>, z.ZodTransform<{
84
+ slug: string;
85
+ name: string;
86
+ type: "website" | "webapp" | "api" | "service" | "worker" | "mobile" | "other";
87
+ kind: "server" | "browser";
88
+ appNames: string[];
89
+ allowedOrigins: string[];
90
+ env?: string | undefined;
91
+ versionTracking?: boolean | undefined;
92
+ currentVersion?: string | undefined;
93
+ group?: string | undefined;
94
+ key?: string | undefined;
95
+ }, {
96
+ slug: string;
97
+ name: string;
98
+ type: "website" | "webapp" | "api" | "service" | "worker" | "mobile" | "other";
99
+ kind: "server" | "browser";
100
+ appNames: string[];
101
+ allowedOrigins: string[];
102
+ env?: string | undefined;
103
+ versionTracking?: boolean | undefined;
104
+ currentVersion?: string | undefined;
105
+ group?: string | undefined;
106
+ key?: string | undefined;
107
+ }>>>>;
108
+ groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
109
+ slug: z.ZodString;
110
+ name: z.ZodString;
111
+ }, z.core.$strip>>>;
112
+ }, z.core.$strip>;
113
+ export type ServiceSeed = z.input<typeof zServiceSeed>;
114
+ export type GroupSeed = z.input<typeof zGroupSeed>;
115
+ export type ObserveSeedConfig = z.input<typeof zObserveSeedConfig>;
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { serviceTypeSchema } from "./provisioning.js";
3
+ export const zServiceSeed = z.object({
4
+ slug: z.string().min(1),
5
+ name: z.string().min(1),
6
+ type: serviceTypeSchema.default("service"),
7
+ kind: z.enum(["server", "browser"]).default("server"),
8
+ appNames: z.array(z.string().min(1)).default([]),
9
+ allowedOrigins: z.array(z.string().min(1)).default([]),
10
+ // browser origins, or the literal '*'
11
+ env: z.string().optional(),
12
+ versionTracking: z.boolean().optional(),
13
+ currentVersion: z.string().optional(),
14
+ group: z.string().optional(),
15
+ // group slug
16
+ key: z.string().optional()
17
+ // raw ingest key (from env); hashed at seed time, never stored raw
18
+ // Declaring allowedOrigins implies a browser source: coerce rather than hard-error for friendlier config.
19
+ }).transform((s) => s.allowedOrigins.length && s.kind === "server" ? { ...s, kind: "browser" } : s);
20
+ export const zGroupSeed = z.object({
21
+ slug: z.string().min(1),
22
+ name: z.string().min(1)
23
+ });
24
+ export const zObserveSeedConfig = z.object({
25
+ services: z.array(zServiceSeed).optional(),
26
+ groups: z.array(zGroupSeed).optional()
27
+ });
@@ -0,0 +1,103 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Contract for GET /api/observe/rollout/{versions,compare,regressions} (CP13): the
4
+ * per-version rollout view. Framework-free (zod only + pure fns) so it loads in
5
+ * node-env unit tests, the Nitro handlers, and the browser composable alike. The DB
6
+ * query builders live in server/utils/rollout.ts; everything here is pure, matching
7
+ * the CP12 precedent of keeping node-testable algorithms in shared/schema/*.
8
+ *
9
+ * NULL `version` is folded under the '(unversioned)' sentinel everywhere (SQL COALESCE
10
+ * on the query side, and this constant on the algorithm side) so a NULL never fragments
11
+ * or vanishes from a GROUP BY.
12
+ */
13
+ export declare const UNVERSIONED = "(unversioned)";
14
+ export declare const rolloutQuerySchema: z.ZodObject<{
15
+ period: z.ZodDefault<z.ZodEnum<{
16
+ "15m": "15m";
17
+ "1h": "1h";
18
+ "24h": "24h";
19
+ "7d": "7d";
20
+ "30d": "30d";
21
+ }>>;
22
+ service: z.ZodOptional<z.ZodString>;
23
+ group: z.ZodOptional<z.ZodString>;
24
+ env: z.ZodOptional<z.ZodString>;
25
+ bucketMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
26
+ }, z.core.$strip>;
27
+ export type RolloutQuery = z.infer<typeof rolloutQuerySchema>;
28
+ export interface VersionStat {
29
+ /** '(unversioned)' for NULL */
30
+ version: string;
31
+ total: number;
32
+ /** level = 0 count */
33
+ errors: number;
34
+ /** errors / total, 0 when total === 0 */
35
+ errorRate: number;
36
+ /** MIN(time) */
37
+ firstSeen: number;
38
+ /** MAX(time) */
39
+ lastSeen: number;
40
+ }
41
+ export interface VersionSeries {
42
+ version: string;
43
+ /** per-bucket event count, aligned to `buckets`, zero-filled */
44
+ volume: number[];
45
+ /** per-bucket errors/total, aligned to `buckets`, 0 for empty buckets */
46
+ errorRate: number[];
47
+ }
48
+ export interface VersionCompare {
49
+ /** contiguous ascending bucket start times, ms epoch */
50
+ buckets: number[];
51
+ /** one series per distinct version, volume-desc then version-asc for stable ordering */
52
+ series: VersionSeries[];
53
+ }
54
+ /** Flat grouped row from the CP8-shaped bucketed query, pre-pivot. */
55
+ export interface VersionSeriesRow {
56
+ b: number;
57
+ version: string;
58
+ total: number;
59
+ errors: number | null;
60
+ }
61
+ export interface RegressionConfig {
62
+ /** ignore any version below this sample size */
63
+ minEvents: number;
64
+ /** absolute error-rate increase threshold (e.g. 0.05) */
65
+ errorRateDelta: number;
66
+ /** relative threshold (e.g. 1.5x baseline) */
67
+ errorRateMultiplier: number;
68
+ /** candidate must be first-seen within this of `now`; omit to skip the freshness gate */
69
+ baselineWindowMs?: number;
70
+ }
71
+ export interface RegressionFinding {
72
+ version: string;
73
+ errorRate: number;
74
+ baselineVersion: string | null;
75
+ baselineErrorRate: number;
76
+ /** candidate.errorRate - baseline.errorRate */
77
+ delta: number;
78
+ /** candidate.errorRate / baseline.errorRate (Infinity when baseline has zero errors) */
79
+ ratio: number;
80
+ /** candidate.total */
81
+ sampleSize: number;
82
+ severity: 'warn' | 'critical';
83
+ }
84
+ export interface RegressionResponse {
85
+ /** false when the single ?service has version_tracking = 0 */
86
+ trackingEnabled: boolean;
87
+ findings: RegressionFinding[];
88
+ }
89
+ /**
90
+ * Pivot flat {b, version, total, errors} rows into a chart-ready {buckets, series}.
91
+ * Pure + DB-free: the bucket-index math mirrors zeroFilledBuckets (floor(time/bucketMs))
92
+ * but is inlined so this stays free of any server import. Every series is the same
93
+ * length and aligns to the shared `buckets` x-axis; gaps are zero-filled.
94
+ */
95
+ export declare function pivotVersionSeries(rows: VersionSeriesRow[], from: number, to: number, bucketMs: number): VersionCompare;
96
+ /**
97
+ * Deterministic baseline-vs-candidate regression flag. Pure: `now` is injected so
98
+ * tests are stable and no wall-clock read happens inside. The candidate is the
99
+ * newest-by-firstSeen versioned build; the baseline is the highest-volume build that
100
+ * appeared strictly earlier. A spike is flagged only when the candidate clears BOTH
101
+ * the absolute delta and the relative multiplier over that baseline.
102
+ */
103
+ export declare function detectRegressions(stats: VersionStat[], config: RegressionConfig, now: number): RegressionFinding[];
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import { PERIODS } from "../utils/period.js";
3
+ export const UNVERSIONED = "(unversioned)";
4
+ export const rolloutQuerySchema = z.object({
5
+ period: z.enum(PERIODS).default("24h"),
6
+ /** service slug; resolved to an id and intersected with the caller's scope */
7
+ service: z.string().optional(),
8
+ /** group slug; expanded to member ids and intersected with the caller's scope */
9
+ group: z.string().optional(),
10
+ /** exact env filter on the log row (matches stats' row-level env) */
11
+ env: z.string().optional(),
12
+ /** compare-only bucket-size override in ms; rejected with 400 when it yields > 500 buckets */
13
+ bucketMs: z.coerce.number().int().positive().optional()
14
+ });
15
+ export function pivotVersionSeries(rows, from, to, bucketMs) {
16
+ const bFrom = Math.floor(from / bucketMs);
17
+ const bTo = Math.floor(to / bucketMs);
18
+ const len = Math.max(0, bTo - bFrom + 1);
19
+ const buckets = [];
20
+ for (let i = 0; i < len; i++) buckets.push((bFrom + i) * bucketMs);
21
+ const byVersion = /* @__PURE__ */ new Map();
22
+ for (const row of rows) {
23
+ const idx = row.b - bFrom;
24
+ if (idx < 0 || idx >= len) continue;
25
+ let acc = byVersion.get(row.version);
26
+ if (!acc) {
27
+ acc = { volume: Array(len).fill(0), errors: Array(len).fill(0), total: 0 };
28
+ byVersion.set(row.version, acc);
29
+ }
30
+ const errors = row.errors ?? 0;
31
+ acc.volume[idx] = (acc.volume[idx] ?? 0) + row.total;
32
+ acc.errors[idx] = (acc.errors[idx] ?? 0) + errors;
33
+ acc.total += row.total;
34
+ }
35
+ const series = [...byVersion.entries()].sort((a, b) => b[1].total - a[1].total || a[0].localeCompare(b[0])).map(([version, acc]) => ({
36
+ version,
37
+ volume: acc.volume,
38
+ errorRate: acc.volume.map((v, i) => v ? acc.errors[i] / v : 0)
39
+ }));
40
+ return { buckets, series };
41
+ }
42
+ export function detectRegressions(stats, config, now) {
43
+ const { minEvents, errorRateDelta, errorRateMultiplier, baselineWindowMs } = config;
44
+ const eligible = stats.filter((s) => s.version !== UNVERSIONED && s.total >= minEvents);
45
+ if (eligible.length < 2) return [];
46
+ const sorted = [...eligible].sort((a, b) => a.firstSeen - b.firstSeen);
47
+ const candidate = sorted[sorted.length - 1];
48
+ if (baselineWindowMs != null && candidate.firstSeen < now - baselineWindowMs) return [];
49
+ const earlier = sorted.filter((s) => s.firstSeen < candidate.firstSeen);
50
+ if (earlier.length === 0) return [];
51
+ const baseline = earlier.reduce((best, s) => s.total > best.total ? s : best);
52
+ const delta = candidate.errorRate - baseline.errorRate;
53
+ const ratio = baseline.errorRate === 0 ? Infinity : candidate.errorRate / baseline.errorRate;
54
+ const passesMultiplier = baseline.errorRate === 0 || candidate.errorRate >= baseline.errorRate * errorRateMultiplier;
55
+ if (delta < errorRateDelta || !passesMultiplier) return [];
56
+ return [{
57
+ version: candidate.version,
58
+ errorRate: candidate.errorRate,
59
+ baselineVersion: baseline.version,
60
+ baselineErrorRate: baseline.errorRate,
61
+ delta,
62
+ ratio,
63
+ sampleSize: candidate.total,
64
+ severity: delta >= 2 * errorRateDelta ? "critical" : "warn"
65
+ }];
66
+ }
@@ -0,0 +1,64 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Contract for GET /api/observe/stats (CP8): the bucketed time-series the charts
4
+ * render. Framework-free (zod only) so it loads in node-env unit tests, the Nitro
5
+ * handler, and the browser composable alike.
6
+ */
7
+ export declare const statsQuerySchema: z.ZodObject<{
8
+ period: z.ZodDefault<z.ZodEnum<{
9
+ "15m": "15m";
10
+ "1h": "1h";
11
+ "24h": "24h";
12
+ "7d": "7d";
13
+ "30d": "30d";
14
+ }>>;
15
+ service: z.ZodOptional<z.ZodString>;
16
+ group: z.ZodOptional<z.ZodString>;
17
+ version: z.ZodOptional<z.ZodString>;
18
+ level: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
19
+ bucketMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
20
+ }, z.core.$strip>;
21
+ export type StatsQuery = z.infer<typeof statsQuerySchema>;
22
+ /** Legend entry for the per-service breakdown; the folded tail is { id: 'other', slug: 'other', name: 'Other' }. */
23
+ export interface StatsSeriesMeta {
24
+ id: string;
25
+ slug: string;
26
+ name: string;
27
+ }
28
+ export interface StatsBucket {
29
+ /** bucket start, ms epoch, aligned to floor(time / bucketMs) * bucketMs */
30
+ t: number;
31
+ count: number;
32
+ /** level = 0 */
33
+ errorCount: number;
34
+ /** level = 1 */
35
+ warnCount: number;
36
+ /** serviceId (or 'other') -> count; only top-N + 'other' keys present */
37
+ byService: Record<string, number>;
38
+ }
39
+ export interface StatsResponse {
40
+ period: {
41
+ from: number;
42
+ to: number;
43
+ label: string;
44
+ };
45
+ /** isAll=true for admin ('*'); serviceIds is [] then, not the full id list */
46
+ scope: {
47
+ serviceIds: string[];
48
+ isAll: boolean;
49
+ };
50
+ bucketMs: number;
51
+ /** zero-filled, contiguous, ascending by t */
52
+ buckets: StatsBucket[];
53
+ /** legend for the breakdown chart: top-N by volume desc, + 'other' when folded */
54
+ services: StatsSeriesMeta[];
55
+ totals: {
56
+ count: number;
57
+ errorCount: number;
58
+ warnCount: number;
59
+ /** errorCount / count * 100, 0 when count === 0 */
60
+ errorRatePct: number;
61
+ };
62
+ }
63
+ /** The db-derived slice getStats() assembles; the handler adds period + scope + bucketMs. */
64
+ export type StatsData = Pick<StatsResponse, 'buckets' | 'services' | 'totals'>;
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import { PERIODS } from "../utils/period.js";
3
+ export const statsQuerySchema = z.object({
4
+ period: z.enum(PERIODS).default("24h"),
5
+ /** service slug; resolved to an id and intersected with the caller's scope */
6
+ service: z.string().optional(),
7
+ /** group slug; expanded to member service ids and intersected with the caller's scope */
8
+ group: z.string().optional(),
9
+ /** exact version filter (rides idx_logs_version) */
10
+ version: z.string().optional(),
11
+ /** exact-level filter, 0..5 */
12
+ level: z.coerce.number().int().min(0).max(5).optional(),
13
+ /** advanced bucket-size override in ms; rejected with 400 when it yields > 500 buckets */
14
+ bucketMs: z.coerce.number().int().positive().optional()
15
+ });