@hot-updater/console 1.0.0-rc.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-jB4Loglh.js +1 -0
  3. package/.output/public/assets/EventDetails-B6yUsyNA.js +1 -0
  4. package/.output/public/assets/HashValueDisplay-BFX_kY3-.js +1 -0
  5. package/.output/public/assets/InsightsInfo-BNO0WznZ.js +1 -0
  6. package/.output/public/assets/InsightsPageHeader-B892oVml.js +1 -0
  7. package/.output/public/assets/NotFoundPage-DIqCpWa3.js +1 -0
  8. package/.output/public/assets/alert-dialog-Bbk_4-WJ.js +1 -0
  9. package/.output/public/assets/api-DCM0wr6O.js +1 -0
  10. package/.output/public/assets/api-keys-CIO9L_wu.js +1 -0
  11. package/.output/public/assets/api-keys-DVTL_--f.js +1 -0
  12. package/.output/public/assets/arrow-left-CnMYpqB7.js +1 -0
  13. package/.output/public/assets/arrow-up-right-BtffZA6e.js +1 -0
  14. package/.output/public/assets/chevron-right-BqD5wtFb.js +1 -0
  15. package/.output/public/assets/clipboard-DS9ucUQL.js +1 -0
  16. package/.output/public/assets/console-features-api-BH5m_PtQ.js +1 -0
  17. package/.output/public/assets/dialog-Bqbb7B0N.js +1 -0
  18. package/.output/public/assets/dist-LxKJB-Vu.js +1 -0
  19. package/.output/public/assets/empty-CuT2UhFp.js +1 -0
  20. package/.output/public/assets/field-BBDpjIqu.js +1 -0
  21. package/.output/public/assets/index-6o51GkFe.js +11 -0
  22. package/.output/public/assets/input-group-ja_30qaF.js +1 -0
  23. package/.output/public/assets/insights-CmraDzQh.js +1 -0
  24. package/.output/public/assets/insights-CxZ2GCYV.js +2 -0
  25. package/.output/public/assets/insights-api-BigAU9sZ.js +1 -0
  26. package/.output/public/assets/insights-usage-rpc-DYEhsCKT.js +1 -0
  27. package/.output/public/assets/insights-vNRCrfnS.js +42 -0
  28. package/.output/public/assets/insights_.distribution-ChOerfJt.js +1 -0
  29. package/.output/public/assets/insights_.distribution-D-e4iga8.js +1 -0
  30. package/.output/public/assets/insights_.distribution-DZtkibX1.js +2 -0
  31. package/.output/public/assets/installations-BazSJXE0.js +2 -0
  32. package/.output/public/assets/installations-ClHTqdAO.js +1 -0
  33. package/.output/public/assets/installations-DpKsBuHi.js +1 -0
  34. package/.output/public/assets/key-round-wS_SIZ6b.js +1 -0
  35. package/.output/public/assets/list-CgrYiadM.js +1 -0
  36. package/.output/public/assets/refresh-cw-BYgoNCco.js +1 -0
  37. package/.output/public/assets/remote-config-BWwHOkCK.js +1 -0
  38. package/.output/public/assets/remote-config-Br56BODb.js +6 -0
  39. package/.output/public/assets/remote-config-CXOi0LRu.js +1 -0
  40. package/.output/public/assets/routes-B88Erkpk.js +2 -0
  41. package/.output/public/assets/routes-CfzsAleC.js +1 -0
  42. package/.output/public/assets/search-DaTDPW25.js +1 -0
  43. package/.output/public/assets/select-BZZBXMkr.js +1 -0
  44. package/.output/public/assets/sidebar-DNVyJPfX.js +3 -0
  45. package/.output/public/assets/smartphone-DpTFgtKf.js +1 -0
  46. package/.output/public/assets/styles-DTGEAJFv.css +2 -0
  47. package/.output/public/assets/switch-DZ1TPwx-.js +1 -0
  48. package/.output/public/assets/table-Gm4qRWwE.js +1 -0
  49. package/.output/public/assets/tabs-C7FOEjFC.js +1 -0
  50. package/.output/public/assets/undo-2-CmrHjwFc.js +1 -0
  51. package/.output/public/assets/useCompositeListItem-9E4pj_CH.js +1 -0
  52. package/.output/public/assets/valueToPercent-CH8GCHaL.js +1 -0
  53. package/.output/server/__23tanstack-start-server-fn-resolver-BpRlos5Q.mjs +170 -0
  54. package/.output/server/_libs/@base-ui/react+[...].mjs +4389 -4207
  55. package/.output/server/_libs/@tanstack/react-router+[...].mjs +3802 -4022
  56. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +140 -97
  57. package/.output/server/_libs/lucide-react.mjs +221 -9
  58. package/.output/server/_libs/next-themes.mjs +1 -1
  59. package/.output/server/_libs/react-redux+[...].mjs +1 -1
  60. package/.output/server/_libs/recharts+[...].mjs +483 -901
  61. package/.output/server/_libs/sonner.mjs +1 -1
  62. package/.output/server/_libs/tanstack__history.mjs +68 -41
  63. package/.output/server/_libs/tanstack__query-core.mjs +2010 -309
  64. package/.output/server/_libs/tanstack__react-query.mjs +448 -21
  65. package/.output/server/_libs/verkit.mjs +102 -1
  66. package/.output/server/_ssr/BundleIdDisplay-x94o9rlU.mjs +13 -0
  67. package/.output/server/_ssr/ConsoleFeatureUnavailable-ldW8v8-q.mjs +58 -0
  68. package/.output/server/_ssr/EventDetails-Q8kfj9Nr.mjs +344 -0
  69. package/.output/server/_ssr/{HashValueDisplay-C5tS4oGo.mjs → HashValueDisplay-n1GholGS.mjs} +3 -3
  70. package/.output/server/_ssr/InsightsInfo-DuJFatQO.mjs +75 -0
  71. package/.output/server/_ssr/InsightsPageHeader-BSUX3Ye9.mjs +145 -0
  72. package/.output/server/_ssr/NotFoundPage-DZzOOzS3.mjs +37 -0
  73. package/.output/server/_ssr/{dialog-WiIAKl4L.mjs → alert-dialog-C43Doa0I.mjs} +6 -83
  74. package/.output/server/_ssr/{api-keys-aXriWrv7.mjs → api-keys-B4sYm8dM.mjs} +48 -9
  75. package/.output/server/_ssr/api-keys-CEnM9fqG.mjs +5 -0
  76. package/.output/server/_ssr/api-keys-rpc-BIFuUgMt.mjs +52 -0
  77. package/.output/server/_ssr/api-oZjRn9tP.mjs +186 -0
  78. package/.output/server/_ssr/api-rpc-BNiFRRK8.mjs +240 -0
  79. package/.output/server/_ssr/{auth-BF8mbAgF.mjs → auth-UP0wXs4i.mjs} +1 -1
  80. package/.output/server/_ssr/{auth-rpc-B7w3AdRr.mjs → auth-rpc-DnZqYxyq.mjs} +6 -6
  81. package/.output/server/_ssr/auth.server-DFpyxRDd.mjs +5374 -0
  82. package/.output/server/_ssr/bundleActivity-M5gzBFNg.mjs +18 -0
  83. package/.output/server/_ssr/config-WVX4IxSR.mjs +15 -0
  84. package/.output/server/_ssr/config.server-DskXCAyI.mjs +35 -0
  85. package/.output/server/_ssr/console-access-BJfAXknd.mjs +17 -0
  86. package/.output/server/_ssr/console-features-Oz0q20jJ.mjs +61 -0
  87. package/.output/server/_ssr/console-features-api-C9kiKvaV.mjs +43 -0
  88. package/.output/server/_ssr/console-features-rpc-P0GL7Z-R.mjs +19 -0
  89. package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-Cm6Tn0_Y.mjs} +67 -56
  90. package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-RLR4H-Fn.mjs} +2 -2
  91. package/.output/server/_ssr/databaseConfig-C5SkAyUy.mjs +5 -0
  92. package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Csbuzc9Q.mjs} +28 -5
  93. package/.output/server/_ssr/databaseRows-CPphvbag.mjs +73 -0
  94. package/.output/server/_ssr/dialog-BbYDMjdC.mjs +84 -0
  95. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-CbQbBIw-.mjs} +140 -7
  96. package/.output/server/_ssr/{downloadBundle-CI7JUKvC.mjs → downloadBundle-CZysjmNW.mjs} +10 -10
  97. package/.output/server/_ssr/empty-CVLGfxuu.mjs +60 -0
  98. package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CPtwX8a7.mjs} +1 -1
  99. package/.output/server/_ssr/failureReports-DKDhVsXA.mjs +33 -0
  100. package/.output/server/_ssr/field-asw83X0v.mjs +189 -0
  101. package/.output/server/_ssr/getBundleChildren-Cv9iz1As.mjs +22 -0
  102. package/.output/server/_ssr/{input-group-Coj6SwVP.mjs → input-group-CuYJHosb.mjs} +2 -2
  103. package/.output/server/_ssr/insights-B55FG5fm.mjs +14 -0
  104. package/.output/server/_ssr/insights-CWnHIFUV.mjs +5 -0
  105. package/.output/server/_ssr/insights-CpLpedFZ.mjs +2315 -0
  106. package/.output/server/_ssr/insights-api-sjws23WF.mjs +122 -0
  107. package/.output/server/_ssr/insights-errors-BjnFUyZj.mjs +34 -0
  108. package/.output/server/_ssr/insights-failures-rpc-BvbWvqNf.mjs +36 -0
  109. package/.output/server/_ssr/insights-failures-xaa41Buf.mjs +46 -0
  110. package/.output/server/_ssr/insights-recovery-BWQhiZaF.mjs +28 -0
  111. package/.output/server/_ssr/insights-recovery-rpc-GiYXdkaY.mjs +32 -0
  112. package/.output/server/_ssr/{insights-rpc-l2-oBYth.mjs → insights-rpc-DP_8Rmz4.mjs} +22 -14
  113. package/.output/server/_ssr/insights-usage-BpBM0U0c.mjs +29 -0
  114. package/.output/server/_ssr/insights-usage-rpc-BiolgB8e.mjs +29 -0
  115. package/.output/server/_ssr/insights-usage-rpc-KStL0zOx.mjs +41 -0
  116. package/.output/server/_ssr/insightsUsage-CzhVjsc8.mjs +56 -0
  117. package/.output/server/_ssr/insights_.distribution-CVrnbP3R.mjs +7 -0
  118. package/.output/server/_ssr/insights_.distribution-D2HaNTAA.mjs +16 -0
  119. package/.output/server/_ssr/{insights_.distribution-INw6QxbU.mjs → insights_.distribution-DN9pR422.mjs} +50 -22
  120. package/.output/server/_ssr/installations-BHmbbnH8.mjs +5 -0
  121. package/.output/server/_ssr/{installations-DH-tQuRo.mjs → installations-BSCmFq8Q.mjs} +279 -367
  122. package/.output/server/_ssr/installations-DD1g__Nc.mjs +69 -0
  123. package/.output/server/_ssr/listReleases-BfUBlCHo.mjs +79 -0
  124. package/.output/server/_ssr/plugins-BaD1slHx.mjs +2086 -0
  125. package/.output/server/_ssr/release-adoption-005tQRpo.mjs +55 -0
  126. package/.output/server/_ssr/release-adoption-rpc-BsstqxUp.mjs +41 -0
  127. package/.output/server/_ssr/releaseAdoption-CtOFkwli.mjs +114 -0
  128. package/.output/server/_ssr/releaseManagement-DFMUnDF5.mjs +11 -0
  129. package/.output/server/_ssr/remote-config-C2Ee8lXO.mjs +5 -0
  130. package/.output/server/_ssr/remote-config-Dv1ccMo-.mjs +17 -0
  131. package/.output/server/_ssr/remote-config-of0lGQH8.mjs +2648 -0
  132. package/.output/server/_ssr/remote-config-rpc-BzX31mUS.mjs +115 -0
  133. package/.output/server/_ssr/rolldown-runtime-rSIU-vHC.mjs +13 -0
  134. package/.output/server/_ssr/{router-DfFyAp5p.mjs → router-D8NuoJ_I.mjs} +117 -136
  135. package/.output/server/_ssr/{routes-BtsfVx-p.mjs → routes-DgvnFqDy.mjs} +195 -429
  136. package/.output/server/_ssr/routes-V8sDybGf.mjs +409 -0
  137. package/.output/server/_ssr/runtime.server-De0QVWc9.mjs +104 -0
  138. package/.output/server/_ssr/schema-BiAVyEj2.mjs +361 -0
  139. package/.output/server/_ssr/{select-CyvLaMza.mjs → select-t3iXRwc9.mjs} +3 -3
  140. package/.output/server/_ssr/server-h4VxnExB.mjs +8325 -0
  141. package/.output/server/_ssr/{createSsrRpc-C-dLcQuy.mjs → sidebar-DJcErBMo.mjs} +107 -47
  142. package/.output/server/_ssr/ssr.mjs +1 -1
  143. package/.output/server/_ssr/start-BfFbHKMK.mjs +4 -0
  144. package/.output/server/_ssr/switch-E-btwMGt.mjs +43 -0
  145. package/.output/server/_ssr/{table-CkVhsNpe.mjs → table-37Dd23TN.mjs} +2 -2
  146. package/.output/server/_ssr/tabs-DEFnTm95.mjs +45 -0
  147. package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +40 -0
  148. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C88s9jWF.mjs} +2 -2
  149. package/.output/server/_tanstack-start-manifest_v-55AGsehh.mjs +139 -0
  150. package/.output/server/index.mjs +303 -205
  151. package/LICENSE +13 -14
  152. package/README.md +80 -71
  153. package/lib/index.d.mts +23 -11
  154. package/lib/vite-internal.mjs +13 -3
  155. package/lib/vite.d.mts +2 -0
  156. package/package.json +14 -14
  157. package/src/components/AppSidebar.tsx +74 -75
  158. package/src/components/ConsoleAccessPage.tsx +5 -1
  159. package/src/components/ConsoleFeatureUnavailable.tsx +80 -0
  160. package/src/components/NotFoundPage.tsx +7 -7
  161. package/src/components/features/FeatureSlots.tsx +103 -0
  162. package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
  163. package/src/components/features/bundles/BundleMetadata.tsx +8 -5
  164. package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
  165. package/src/components/features/channels/ChannelManagementDialog.tsx +8 -6
  166. package/src/components/features/insights/AppUsage.tsx +41 -14
  167. package/src/components/features/insights/BuiltinBundle.tsx +36 -0
  168. package/src/components/features/insights/ComparedBundlesChart.tsx +310 -0
  169. package/src/components/features/insights/EstimatedCount.tsx +18 -0
  170. package/src/components/features/insights/EventDetails.tsx +390 -26
  171. package/src/components/features/insights/EventHistoryCard.tsx +111 -25
  172. package/src/components/features/insights/EventHistoryList.tsx +1 -1
  173. package/src/components/features/insights/FailureReports.tsx +407 -0
  174. package/src/components/features/insights/InsightsControls.tsx +240 -142
  175. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  176. package/src/components/features/insights/InsightsOverview.tsx +601 -403
  177. package/src/components/features/insights/InsightsPageHeader.tsx +19 -14
  178. package/src/components/features/insights/InsightsPeriodSelector.tsx +67 -12
  179. package/src/components/features/insights/InstallationHistoryCard.tsx +65 -10
  180. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  181. package/src/components/features/insights/ReleaseActivity.tsx +308 -0
  182. package/src/components/features/insights/ReportingDevicesSummary.tsx +13 -13
  183. package/src/components/features/insights/RollbackButton.tsx +118 -0
  184. package/src/components/features/insights/UpdateFailures.tsx +382 -0
  185. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  186. package/src/components/features/releases/ReleaseEditorSheet.tsx +27 -13
  187. package/src/components/features/remote-config/ConditionDialog.tsx +592 -0
  188. package/src/components/features/remote-config/ConditionsCard.tsx +247 -0
  189. package/src/components/features/remote-config/ParameterDialog.tsx +426 -0
  190. package/src/components/features/remote-config/ParametersCard.tsx +254 -0
  191. package/src/components/features/remote-config/PreviewCard.tsx +284 -0
  192. package/src/components/features/remote-config/PublishDialog.tsx +325 -0
  193. package/src/components/features/remote-config/RemoteConfigPage.tsx +353 -0
  194. package/src/components/features/remote-config/RuleSummary.tsx +21 -0
  195. package/src/components/features/remote-config/ValueInput.tsx +151 -0
  196. package/src/components/features/remote-config/VersionsCard.tsx +384 -0
  197. package/src/components/features/remote-config/remoteConfigFeatureUi.tsx +15 -0
  198. package/src/components/features/remote-config/useDateTimeText.ts +16 -0
  199. package/src/components/ui/sidebar.tsx +22 -29
  200. package/src/index.ts +26 -19
  201. package/src/lib/api-keys-api.ts +0 -28
  202. package/src/lib/api-keys-rpc.ts +27 -38
  203. package/src/lib/api-rpc.ts +125 -288
  204. package/src/lib/api.ts +15 -134
  205. package/src/lib/bundle-activity.ts +24 -4
  206. package/src/lib/console-access.ts +20 -0
  207. package/src/lib/console-features-api.ts +68 -0
  208. package/src/lib/console-features-rpc.ts +13 -0
  209. package/src/lib/console-features.ts +98 -0
  210. package/src/lib/insights-api.ts +56 -2
  211. package/src/lib/insights-errors.ts +64 -0
  212. package/src/lib/insights-failures-rpc.ts +36 -0
  213. package/src/lib/insights-failures.ts +130 -0
  214. package/src/lib/insights-recovery-rpc.ts +13 -17
  215. package/src/lib/insights-recovery.ts +12 -36
  216. package/src/lib/insights-retention.ts +21 -0
  217. package/src/lib/insights-rpc.ts +30 -12
  218. package/src/lib/insights-search.ts +50 -4
  219. package/src/lib/insights-usage-rpc.ts +15 -9
  220. package/src/lib/insights-usage.ts +41 -3
  221. package/src/lib/insights-view.ts +34 -5
  222. package/src/lib/release-adoption-api.ts +214 -0
  223. package/src/lib/release-adoption-rpc.ts +49 -0
  224. package/src/lib/release-adoption.ts +164 -0
  225. package/src/lib/remote-config-api.ts +119 -0
  226. package/src/lib/remote-config-draft.ts +666 -0
  227. package/src/lib/remote-config-rpc.ts +196 -0
  228. package/src/lib/scroll-restoration.ts +21 -0
  229. package/src/lib/server/auth.server.ts +13 -5
  230. package/src/lib/server/bundleActivity.ts +27 -28
  231. package/src/lib/server/config.server.ts +21 -76
  232. package/src/lib/server/console-feature-apis.ts +70 -0
  233. package/src/lib/server/console-runtime.server.ts +82 -38
  234. package/src/lib/server/downloadBundle.ts +14 -15
  235. package/src/lib/server/failureReports.ts +50 -0
  236. package/src/lib/server/getBundleChildren.ts +31 -122
  237. package/src/lib/server/insightsUsage.ts +52 -113
  238. package/src/lib/server/listReleases.ts +109 -44
  239. package/src/lib/server/releaseAdoption.ts +151 -0
  240. package/src/lib/server/releaseReachability.ts +8 -8
  241. package/src/lib/server/remoteConfig.ts +75 -0
  242. package/src/lib/server/runtime.server.ts +120 -31
  243. package/src/lib/server/updateFailures.ts +66 -0
  244. package/src/lib/use-dialog-target.ts +27 -0
  245. package/src/routeTree.gen.ts +44 -44
  246. package/src/router.tsx +3 -2
  247. package/src/routes/-installations-search.ts +32 -8
  248. package/src/routes/-releases-search.ts +76 -29
  249. package/src/routes/__root.tsx +7 -1
  250. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  251. package/src/routes/api-keys.tsx +5 -2
  252. package/src/routes/index.tsx +210 -152
  253. package/src/routes/insights.tsx +91 -23
  254. package/src/routes/insights_.distribution.tsx +50 -9
  255. package/src/routes/installations.tsx +97 -40
  256. package/src/routes/remote-config.tsx +42 -0
  257. package/src/styles.css +9 -0
  258. package/src/vite-internal.ts +15 -3
  259. package/src/vite.ts +2 -0
  260. package/.output/public/assets/HashValueDisplay-BpTc3Oyg.js +0 -1
  261. package/.output/public/assets/InsightsPageHeader-DC2eEst8.js +0 -1
  262. package/.output/public/assets/api-CdUyUqzR.js +0 -42
  263. package/.output/public/assets/api-keys-64PM9PwW.js +0 -1
  264. package/.output/public/assets/api-keys-api-BeaJnvY5.js +0 -1
  265. package/.output/public/assets/arrow-left-04Rh8Zgp.js +0 -1
  266. package/.output/public/assets/card-CYHs5FZv.js +0 -1
  267. package/.output/public/assets/chart-no-axes-combined-DwyMsVFW.js +0 -1
  268. package/.output/public/assets/createServerFn-DU71xucx.js +0 -3
  269. package/.output/public/assets/dialog-IVMkBRCq.js +0 -1
  270. package/.output/public/assets/dist-BR4GzeEu.js +0 -1
  271. package/.output/public/assets/field-B3CYDpjg.js +0 -1
  272. package/.output/public/assets/index-C39o7rJH.js +0 -10
  273. package/.output/public/assets/info-C3y9HNoU.js +0 -1
  274. package/.output/public/assets/input-group-nLZylhWF.js +0 -1
  275. package/.output/public/assets/insights-Bm9v8uO3.js +0 -2
  276. package/.output/public/assets/insights-DS3iO7Up.js +0 -1
  277. package/.output/public/assets/insights-search-Byj3g3Mp.js +0 -1
  278. package/.output/public/assets/insights-usage-rpc-BaGR3lgq.js +0 -1
  279. package/.output/public/assets/insights_.distribution-B1i6cjlQ.js +0 -1
  280. package/.output/public/assets/insights_.distribution-C1Wf27eB.js +0 -2
  281. package/.output/public/assets/installations-CkFW4fV9.js +0 -2
  282. package/.output/public/assets/installations-DxTaIcHD.js +0 -1
  283. package/.output/public/assets/lazyRouteComponent-BapzjYnb.js +0 -1
  284. package/.output/public/assets/list-Dqt53fWZ.js +0 -1
  285. package/.output/public/assets/loader-circle-CUKfUqow.js +0 -1
  286. package/.output/public/assets/preload-helper-ClBMtM1g.js +0 -1
  287. package/.output/public/assets/refresh-cw-CNE_2PnD.js +0 -1
  288. package/.output/public/assets/routes-Cgtvspjg.js +0 -2
  289. package/.output/public/assets/routes-O2r2UUN8.js +0 -1
  290. package/.output/public/assets/shield-check-BFcJ46kz.js +0 -1
  291. package/.output/public/assets/signing-BgspC-xP.js +0 -1
  292. package/.output/public/assets/styles-DnrWuBwd.css +0 -2
  293. package/.output/public/assets/table-BuWQgxJJ.js +0 -1
  294. package/.output/public/assets/useMutation-CSV9NCUl.js +0 -1
  295. package/.output/public/assets/useOpenInteractionType-D5kduCTD.js +0 -1
  296. package/.output/public/assets/valueToPercent-BAtcbSLk.js +0 -1
  297. package/.output/server/__23tanstack-start-server-fn-resolver-CmYkol9D.mjs +0 -150
  298. package/.output/server/_ssr/InsightsPageHeader-Dma3dVj1.mjs +0 -64
  299. package/.output/server/_ssr/api-C3bGmgY0.mjs +0 -332
  300. package/.output/server/_ssr/api-keys-api-BRF6rbRC.mjs +0 -60
  301. package/.output/server/_ssr/api-keys-rpc-BMa1ZM6N.mjs +0 -136
  302. package/.output/server/_ssr/api-rpc-BYQ2e0z6.mjs +0 -1399
  303. package/.output/server/_ssr/auth.server-CmicHh0J.mjs +0 -47
  304. package/.output/server/_ssr/bundle-signing-rpc-DbQ4pFAX.mjs +0 -16
  305. package/.output/server/_ssr/bundle-signing.server-Uqt1OF49.mjs +0 -12
  306. package/.output/server/_ssr/bundleActivity-pBrPSG01.mjs +0 -28
  307. package/.output/server/_ssr/card-B7KSO_25.mjs +0 -108
  308. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  309. package/.output/server/_ssr/config.server-C-d1QaBU.mjs +0 -368
  310. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  311. package/.output/server/_ssr/deleteBundle-8X-jq7Z7.mjs +0 -66
  312. package/.output/server/_ssr/field-BDwuU8RE.mjs +0 -74
  313. package/.output/server/_ssr/getBundleChildren-DoL8l_AS.mjs +0 -50
  314. package/.output/server/_ssr/insights-BDJjaDLp.mjs +0 -938
  315. package/.output/server/_ssr/insights-D0FWpfOS.mjs +0 -10
  316. package/.output/server/_ssr/insights-recovery-Cv6RSyeR.mjs +0 -21
  317. package/.output/server/_ssr/insights-recovery-rpc-BE9YsK_T.mjs +0 -37
  318. package/.output/server/_ssr/insights-search-1czJMZgk.mjs +0 -21
  319. package/.output/server/_ssr/insights-usage-rpc-BE_aCnea.mjs +0 -184
  320. package/.output/server/_ssr/insights-usage-rpc-CtAolz-t.mjs +0 -24
  321. package/.output/server/_ssr/insightsContract-B09K_Px1.mjs +0 -303
  322. package/.output/server/_ssr/insightsHistory-Ci4rYAgl.mjs +0 -41
  323. package/.output/server/_ssr/insightsRecovery-CaghWL2t.mjs +0 -113
  324. package/.output/server/_ssr/insightsUsage-DNIj6jxF.mjs +0 -71
  325. package/.output/server/_ssr/insights_.distribution-Cp0kf1vW.mjs +0 -10
  326. package/.output/server/_ssr/installations-Bhyiwx8G.mjs +0 -29
  327. package/.output/server/_ssr/routes-xBkI2Fmt.mjs +0 -37
  328. package/.output/server/_ssr/runtime.server-CsiKFp_Z.mjs +0 -436
  329. package/.output/server/_ssr/server-BdkuOWe8.mjs +0 -7468
  330. package/.output/server/_ssr/signing-CQ70saFm.mjs +0 -133
  331. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  332. package/.output/server/_tanstack-start-manifest_v-CrBsoKQQ.mjs +0 -125
  333. package/src/components/features/bundles/BundleActivityChart.tsx +0 -97
  334. package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -126
  335. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  336. package/src/lib/bundle-signing-api.ts +0 -14
  337. package/src/lib/bundle-signing-rpc.ts +0 -16
  338. package/src/lib/server/bundle-signing.server.ts +0 -23
  339. package/src/lib/server/deleteBundle.ts +0 -145
  340. package/src/lib/server/insightsHistory.ts +0 -52
  341. package/src/lib/server/insightsRecovery.ts +0 -187
  342. package/src/routes/signing.tsx +0 -37
@@ -1,8 +1,119 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/dist-CyzPaI5v.js
2
- var stripBundleArtifactMetadata = (metadata) => metadata;
3
- var getManifestStorageUri = (bundle) => bundle.manifestStorageUri ?? null;
4
- var getManifestFileHash = (bundle) => bundle.manifestFileHash ?? null;
5
- var getAssetBaseStorageUri = (bundle) => bundle.assetBaseStorageUri ?? null;
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/dist-CbQbBIw-.js
2
+ var LETTER_DASH_NUMBER = "[a-zA-Z0-9-]";
3
+ var NUMERIC_IDENTIFIER = String.raw`0|[1-9]\d*`;
4
+ var NUMERIC_IDENTIFIER_LOOSE = String.raw`\d+`;
5
+ var NON_NUMERIC_IDENTIFIER = String.raw`\d*[a-zA-Z-]${LETTER_DASH_NUMBER}*`;
6
+ var MAIN_VERSION = String.raw`(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})`;
7
+ var MAIN_VERSION_LOOSE = String.raw`(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})`;
8
+ var PRERELEASE_IDENTIFIER = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER})`;
9
+ var PRERELEASE_IDENTIFIER_LOOSE = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER_LOOSE})`;
10
+ var PRERELEASE = String.raw`(?:-(${PRERELEASE_IDENTIFIER}(?:\.${PRERELEASE_IDENTIFIER})*))`;
11
+ var PRERELEASE_LOOSE = String.raw`(?:-?(${PRERELEASE_IDENTIFIER_LOOSE}(?:\.${PRERELEASE_IDENTIFIER_LOOSE})*))`;
12
+ var BUILD_IDENTIFIER = `${LETTER_DASH_NUMBER}+`;
13
+ var BUILD = String.raw`(?:\+(${BUILD_IDENTIFIER}(?:\.${BUILD_IDENTIFIER})*))`;
14
+ var FULL_PLAIN = `v?${MAIN_VERSION}${PRERELEASE}?${BUILD}?`;
15
+ var LOOSE_PLAIN = String.raw`[v=\s]*${MAIN_VERSION_LOOSE}${PRERELEASE_LOOSE}?${BUILD}?`;
16
+ var XRANGE_IDENTIFIER = String.raw`${NUMERIC_IDENTIFIER}|x|X|\*`;
17
+ var XRANGE_IDENTIFIER_LOOSE = String.raw`${NUMERIC_IDENTIFIER_LOOSE}|x|X|\*`;
18
+ String.raw`[v=\s]*(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:${PRERELEASE})?${BUILD}?)?)?`;
19
+ String.raw`[v=\s]*(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:${PRERELEASE_LOOSE})?${BUILD}?)?)?`;
20
+ String.raw`(?:\^)`;
21
+ var COERCE_PLAIN = String.raw`(^|[^\d])(\d{1,${16}})(?:\.(\d{1,${16}}))?(?:\.(\d{1,${16}}))?`;
22
+ var COERCE = String.raw`${COERCE_PLAIN}(?:$|[^\d])`;
23
+ var COERCE_FULL = String.raw`${COERCE_PLAIN}(?:${PRERELEASE})?(?:${BUILD})?(?:$|[^\d])`;
24
+ function makeSafeRegexSource(source) {
25
+ const replacements = [
26
+ [String.raw`\s`, 1],
27
+ [String.raw`\d`, 256],
28
+ [LETTER_DASH_NUMBER, 250]
29
+ ];
30
+ for (const [token, maximum] of replacements) source = source.split(`${token}*`).join(`${token}{0,${maximum}}`).split(`${token}+`).join(`${token}{1,${maximum}}`);
31
+ return source;
32
+ }
33
+ function safeRegex(source, flags) {
34
+ return new RegExp(makeSafeRegexSource(source), flags);
35
+ }
36
+ var FULL = safeRegex(`^${FULL_PLAIN}$`);
37
+ var LOOSE = safeRegex(`^${LOOSE_PLAIN}$`);
38
+ var NUMERIC$1 = /^\d+$/;
39
+ function formatComparableVersion(version) {
40
+ const base = `${version.major}.${version.minor}.${version.patch}`;
41
+ return version.prerelease?.length ? `${base}-${version.prerelease.join(".")}` : base;
42
+ }
43
+ function formatFullVersion(version) {
44
+ const comparable = formatComparableVersion(version);
45
+ return version.build?.length ? `${comparable}+${version.build.join(".")}` : comparable;
46
+ }
47
+ function parse(version, options = {}) {
48
+ if (typeof version !== "string") return version;
49
+ if (version.length > 256) throw new TypeError(`Version exceeds the maximum length of 256 characters`);
50
+ const match = version.trim().match(options.loose ? LOOSE : FULL);
51
+ if (!match) throw new TypeError(`Invalid version syntax: ${version}`);
52
+ const major = Number(match[1]);
53
+ const minor = Number(match[2]);
54
+ const patch = Number(match[3]);
55
+ if (major > Number.MAX_SAFE_INTEGER || major < 0) throw new TypeError(`Invalid major version: ${match[1]}`);
56
+ if (minor > Number.MAX_SAFE_INTEGER || minor < 0) throw new TypeError(`Invalid minor version: ${match[2]}`);
57
+ if (patch > Number.MAX_SAFE_INTEGER || patch < 0) throw new TypeError(`Invalid patch version: ${match[3]}`);
58
+ const prerelease = match[4] ? match[4].split(".").map((identifier) => {
59
+ if (NUMERIC$1.test(identifier)) {
60
+ const numeric = Number(identifier);
61
+ if (numeric >= 0 && numeric < Number.MAX_SAFE_INTEGER) return numeric;
62
+ }
63
+ return identifier;
64
+ }) : void 0;
65
+ return {
66
+ build: match[5]?.split("."),
67
+ major,
68
+ minor,
69
+ patch,
70
+ prerelease
71
+ };
72
+ }
73
+ function tryParse(version, options = {}) {
74
+ try {
75
+ return parse(version, options);
76
+ } catch {
77
+ return null;
78
+ }
79
+ }
80
+ var COERCE_EXACT = safeRegex(COERCE);
81
+ var COERCE_FULL_EXACT = safeRegex(COERCE_FULL);
82
+ safeRegex(`^${PRERELEASE}$`);
83
+ safeRegex(`^${PRERELEASE_LOOSE}$`);
84
+ function normalizeFull(version, options = {}) {
85
+ const parsed = tryParse(version, options);
86
+ return parsed ? formatFullVersion(parsed) : null;
87
+ }
88
+ function coerce(value, options = {}) {
89
+ if (typeof value === "object") return value;
90
+ const input = typeof value === "number" ? String(value) : value;
91
+ let match = null;
92
+ if (options.rtl) {
93
+ const expression = safeRegex(options.includePrerelease ? COERCE_FULL : COERCE, "g");
94
+ let next;
95
+ while ((next = expression.exec(input)) && (!match || match.index + match[0].length !== input.length)) {
96
+ if (!match || next.index + next[0].length !== match.index + match[0].length) match = next;
97
+ expression.lastIndex = next.index + next[1].length + next[2].length;
98
+ }
99
+ } else match = (options.includePrerelease ? COERCE_FULL_EXACT : COERCE_EXACT).exec(input);
100
+ if (!match) return null;
101
+ const major = match[2];
102
+ return tryParse(`${major}.${match[3] || "0"}.${match[4] || "0"}${options.includePrerelease && match[5] ? `-${match[5]}` : ""}${options.includePrerelease && match[6] ? `+${match[6]}` : ""}`, options);
103
+ }
104
+ /**
105
+ * The form of an app version that the device and the server compare:
106
+ * `major.minor.patch` of the first version in `appVersion`, such as `1.4.0`
107
+ * for `v1.4`, or null when it holds none. Prerelease and build parts are
108
+ * dropped.
109
+ */
110
+ function canonicalizeAppVersion(appVersion) {
111
+ const version = coerce(appVersion);
112
+ return version ? normalizeFull(version) : null;
113
+ }
114
+ var getManifestStorageUri = (bundle) => bundle.manifestStorageUri;
115
+ var getManifestFileHash = (bundle) => bundle.manifestFileHash;
116
+ var getAssetBaseStorageUri = (bundle) => bundle.assetBaseStorageUri;
6
117
  var isBundlePatchArtifact = (value) => {
7
118
  if (!value || typeof value !== "object" || Array.isArray(value)) return false;
8
119
  const candidate = value;
@@ -21,13 +132,15 @@ var getBundlePatches = (bundle) => {
21
132
  return true;
22
133
  });
23
134
  };
135
+ var getBundlePatch = (bundle, baseBundleId) => {
136
+ return getBundlePatches(bundle).find((patch) => patch.baseBundleId === baseBundleId) ?? null;
137
+ };
24
138
  var getPrimaryPatch = (bundle) => {
25
139
  return getBundlePatches(bundle)[0] ?? null;
26
140
  };
27
141
  var getPatchBaseBundleId = (bundle) => getPrimaryPatch(bundle)?.baseBundleId ?? null;
28
142
  var getPatchBaseFileHash = (bundle) => getPrimaryPatch(bundle)?.baseFileHash ?? null;
29
143
  var getPatchFileHash = (bundle) => getPrimaryPatch(bundle)?.patchFileHash ?? null;
30
- var getPatchStorageUri = (bundle) => getPrimaryPatch(bundle)?.patchStorageUri ?? null;
31
144
  var NUMERIC_COHORT_SIZE = 1e3;
32
145
  var DEFAULT_ROLLOUT_COHORT_COUNT = NUMERIC_COHORT_SIZE;
33
146
  var INVALID_COHORT_ERROR_MESSAGE = `Invalid cohort. Use 1-1000 or a lowercase slug without spaces, up to 64 characters.`;
@@ -244,7 +357,27 @@ function createReleaseCatalogScopeKey(input) {
244
357
  assertCatalogSegment(input.fingerprintHash, "Fingerprint hash");
245
358
  return `v1:fingerprint:${input.platform}:${input.channelKey}:${input.fingerprintHash}`;
246
359
  }
360
+ function parseReleaseCatalogScopeKey(scopeKey) {
361
+ const segments = scopeKey.split(":");
362
+ const [version, strategy, platform, channelKey] = segments;
363
+ if (version !== "v1" || platform !== "ios" && platform !== "android" || channelKey === void 0) throw new Error("Invalid release catalog scope key");
364
+ const input = strategy === "app-version" && segments.length === 4 ? {
365
+ channelKey,
366
+ platform,
367
+ strategy: "APP_VERSION"
368
+ } : strategy === "fingerprint" && segments.length === 5 && segments[4] !== void 0 ? {
369
+ channelKey,
370
+ fingerprintHash: segments[4],
371
+ platform,
372
+ strategy: "FINGERPRINT"
373
+ } : (() => {
374
+ throw new Error("Invalid release catalog scope key");
375
+ })();
376
+ if (createReleaseCatalogScopeKey(input) !== scopeKey) throw new Error("Release catalog scope key is not canonical");
377
+ return input;
378
+ }
379
+ var NIL_UUID = "00000000-0000-0000-0000-000000000000";
247
380
  var UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
248
381
  var isUUIDv7 = (value) => typeof value === "string" && UUID_V7_PATTERN.test(value);
249
382
  //#endregion
250
- export { normalizeCohortValue as C, isValidCohort as S, stripBundleArtifactMetadata as T, getPatchStorageUri as _, createReleaseCatalogScopeKey as a, isReleaseEligibleForCohort as b, getAssetBaseStorageUri as c, getManifestStorageUri as d, getNumericCohortRolloutPosition as f, getPatchFileHash as g, getPatchBaseFileHash as h, RELEASE_CATALOG_FALLBACK_POLICY as i, getBundlePatches as l, getPatchBaseBundleId as m, MAX_COMPILED_CATALOG_BYTES as n, decodeChannelKey as o, getNumericCohortValue as p, NUMERIC_COHORT_SIZE as r, encodeChannelKey as s, INVALID_COHORT_ERROR_MESSAGE as t, getManifestFileHash as u, getRolledOutNumericCohorts as v, normalizeRolloutCohortCount as w, isUUIDv7 as x, isCustomCohort as y };
383
+ export { isUUIDv7 as C, parseReleaseCatalogScopeKey as D, normalizeRolloutCohortCount as E, isReleaseEligibleForCohort as S, normalizeCohortValue as T, getPatchBaseBundleId as _, RELEASE_CATALOG_FALLBACK_POLICY as a, getRolledOutNumericCohorts as b, decodeChannelKey as c, getBundlePatch as d, getBundlePatches as f, getNumericCohortValue as g, getNumericCohortRolloutPosition as h, NUMERIC_COHORT_SIZE as i, encodeChannelKey as l, getManifestStorageUri as m, MAX_COMPILED_CATALOG_BYTES as n, canonicalizeAppVersion as o, getManifestFileHash as p, NIL_UUID as r, createReleaseCatalogScopeKey as s, INVALID_COHORT_ERROR_MESSAGE as t, getAssetBaseStorageUri as u, getPatchBaseFileHash as v, isValidCohort as w, isCustomCohort as x, getPatchFileHash as y };
@@ -1,23 +1,23 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-CI7JUKvC.js
2
- var downloadBundle = async (bundleId, { databaseClient, storagePlugin }) => {
3
- const bundle = await databaseClient.getBundleById(bundleId);
4
- if (!bundle) return new Response("Bundle not found", { status: 404 });
5
- const storageUri = bundle.storageUri;
6
- if (!storageUri) return new Response("Bundle has no storage URI", { status: 404 });
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-CZysjmNW.js
2
+ var downloadBundle = async (bundleId, { core, storage }) => {
3
+ const detail = await core.getBundle(bundleId);
4
+ if (!detail) return new Response("Bundle not found", { status: 404 });
5
+ const storageUri = detail.bundle.manifest_storage_uri;
7
6
  const protocol = new URL(storageUri).protocol.replace(":", "");
8
- if (storagePlugin?.protocol === protocol) {
9
- const { response } = await storagePlugin.get({ storageUri });
7
+ const storageAdapter = storage.protocol === protocol ? storage : void 0;
8
+ if (storageAdapter?.get !== void 0) {
9
+ const { response } = await storageAdapter.get({ storageUri });
10
10
  if (!response) return new Response("Storage object not found", { status: 404 });
11
11
  const headers = new Headers(response.headers);
12
12
  headers.set("cache-control", "private, no-store");
13
- headers.set("content-disposition", "attachment");
13
+ headers.set("content-disposition", "attachment; filename=\"manifest.json\"");
14
14
  return new Response(response.body, {
15
15
  headers,
16
16
  status: response.status,
17
17
  statusText: response.statusText
18
18
  });
19
19
  }
20
- if (protocol !== "http" && protocol !== "https") return new Response(`No storage plugin for protocol: ${protocol}`, { status: 503 });
20
+ if (protocol !== "http" && protocol !== "https") return new Response(`No storage adapter for protocol: ${protocol}`, { status: 503 });
21
21
  return Response.redirect(storageUri, 302);
22
22
  };
23
23
  //#endregion
@@ -0,0 +1,60 @@
1
+ import { gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
3
+ import { k as cn } from "./sidebar-DJcErBMo.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/empty-CVLGfxuu.js
5
+ var import_jsx_runtime = require_jsx_runtime();
6
+ function Empty({ className, ...props }) {
7
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
8
+ "data-slot": "empty",
9
+ className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className),
10
+ ...props
11
+ });
12
+ }
13
+ function EmptyHeader({ className, ...props }) {
14
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
15
+ "data-slot": "empty-header",
16
+ className: cn("flex max-w-sm flex-col items-center gap-1", className),
17
+ ...props
18
+ });
19
+ }
20
+ var emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
21
+ variants: { variant: {
22
+ default: "bg-transparent",
23
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-md bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
24
+ } },
25
+ defaultVariants: { variant: "default" }
26
+ });
27
+ function EmptyMedia({ className, variant = "default", ...props }) {
28
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
29
+ "data-slot": "empty-icon",
30
+ "data-variant": variant,
31
+ className: cn(emptyMediaVariants({
32
+ variant,
33
+ className
34
+ })),
35
+ ...props
36
+ });
37
+ }
38
+ function EmptyTitle({ className, ...props }) {
39
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
40
+ "data-slot": "empty-title",
41
+ className: cn("text-sm font-medium tracking-tight", className),
42
+ ...props
43
+ });
44
+ }
45
+ function EmptyDescription({ className, ...props }) {
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
47
+ "data-slot": "empty-description",
48
+ className: cn("text-xs/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
49
+ ...props
50
+ });
51
+ }
52
+ function EmptyContent({ className, ...props }) {
53
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
54
+ "data-slot": "empty-content",
55
+ className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-xs/relaxed text-balance", className),
56
+ ...props
57
+ });
58
+ }
59
+ //#endregion
60
+ export { EmptyMedia as a, EmptyHeader as i, EmptyContent as n, EmptyTitle as o, EmptyDescription as r, Empty as t };
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/empty-plugin-adapters-B5QvGpEl.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/empty-plugin-adapters-CPtwX8a7.js
2
2
  var pluginSerializationAdapters = [];
3
3
  var hasPluginAdapters = false;
4
4
  //#endregion
@@ -0,0 +1,33 @@
1
+ import { r as recoveryWindows } from "./insights-recovery-BWQhiZaF.mjs";
2
+ import { n as readFailureReportsInput } from "./insights-errors-BjnFUyZj.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/failureReports-DKDhVsXA.js
4
+ /** Bounded raw-event reads, with continuation even when a batch finds no failures. */
5
+ async function listFailureReports(reads, input) {
6
+ readFailureReportsInput(input);
7
+ const { rawDays } = await reads.getRetention();
8
+ const duration = Math.min(90 * 864e5, rawDays * 864e5, input.window ? recoveryWindows[input.window].durationMs : Infinity);
9
+ const sinceMs = Math.max(0, input.beforeReceivedAtMs - duration);
10
+ const data = [];
11
+ let cursor = input.cursor;
12
+ let scanned = 0;
13
+ for (let batch = 0; batch < 5; batch += 1) {
14
+ const page = await reads.listEvents({
15
+ sinceMs,
16
+ beforeReceivedAtMs: input.beforeReceivedAtMs,
17
+ limit: 100,
18
+ ...cursor === void 0 ? {} : { cursor }
19
+ });
20
+ scanned += page.data.length;
21
+ data.push(...page.data.filter((event) => event.type === "UPDATE_FAILED" && event.platform === input.platform && event.channel === input.channel && (input.releaseId === void 0 || event.failure?.stage !== "check" && event.toReleaseId === input.releaseId)));
22
+ cursor = page.nextCursor ?? void 0;
23
+ if (!cursor || data.length >= 50) break;
24
+ }
25
+ return {
26
+ data,
27
+ scanned,
28
+ sinceMs,
29
+ nextCursor: cursor ?? null
30
+ };
31
+ }
32
+ //#endregion
33
+ export { listFailureReports };
@@ -0,0 +1,189 @@
1
+ import { i as __toESM } from "../_runtime.mjs";
2
+ import { _t as require_react, gt as require_jsx_runtime, ht as mergeProps, rt as useRender } from "../_libs/@base-ui/react+[...].mjs";
3
+ import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
4
+ import { k as cn } from "./sidebar-DJcErBMo.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/field-asw83X0v.js
6
+ var import_react = /* @__PURE__ */ __toESM(require_react());
7
+ var import_jsx_runtime = require_jsx_runtime();
8
+ function Card({ className, ...props }) {
9
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
10
+ "data-slot": "card",
11
+ className: cn("rounded-xl border bg-card text-card-foreground shadow", className),
12
+ ...props
13
+ });
14
+ }
15
+ function CardHeader({ className, ...props }) {
16
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17
+ "data-slot": "card-header",
18
+ className: cn("flex flex-col gap-1.5 p-6", className),
19
+ ...props
20
+ });
21
+ }
22
+ function CardTitle({ className, ...props }) {
23
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24
+ "data-slot": "card-title",
25
+ className: cn("font-semibold leading-none tracking-tight", className),
26
+ ...props
27
+ });
28
+ }
29
+ function CardDescription({ className, ...props }) {
30
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
31
+ "data-slot": "card-description",
32
+ className: cn("text-sm text-muted-foreground", className),
33
+ ...props
34
+ });
35
+ }
36
+ function CardContent({ className, ...props }) {
37
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
38
+ "data-slot": "card-content",
39
+ className: cn("p-6 pt-0", className),
40
+ ...props
41
+ });
42
+ }
43
+ function CardFooter({ className, ...props }) {
44
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
45
+ "data-slot": "card-footer",
46
+ className: cn("flex items-center p-6 pt-0", className),
47
+ ...props
48
+ });
49
+ }
50
+ var alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2 py-1.5 text-left text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5", {
51
+ variants: { variant: {
52
+ default: "bg-card text-card-foreground",
53
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
54
+ } },
55
+ defaultVariants: { variant: "default" }
56
+ });
57
+ function Alert({ className, variant, ...props }) {
58
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
59
+ "data-slot": "alert",
60
+ role: "alert",
61
+ className: cn(alertVariants({ variant }), className),
62
+ ...props
63
+ });
64
+ }
65
+ function AlertTitle({ className, ...props }) {
66
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
67
+ "data-slot": "alert-title",
68
+ className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
69
+ ...props
70
+ });
71
+ }
72
+ function AlertDescription({ className, ...props }) {
73
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
74
+ "data-slot": "alert-description",
75
+ className: cn("text-xs/relaxed text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
76
+ ...props
77
+ });
78
+ }
79
+ function AlertAction({ className, ...props }) {
80
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
81
+ "data-slot": "alert-action",
82
+ className: cn("absolute top-1.5 right-2", className),
83
+ ...props
84
+ });
85
+ }
86
+ var badgeVariants = cva("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
87
+ variants: { variant: {
88
+ default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
89
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
90
+ success: "border-success/20 bg-success/10 text-success",
91
+ warning: "border-warning/20 bg-warning/10 text-warning",
92
+ destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
93
+ outline: "text-foreground"
94
+ } },
95
+ defaultVariants: { variant: "default" }
96
+ });
97
+ function Badge({ className, variant = "default", render, ...props }) {
98
+ return useRender({
99
+ defaultTagName: "span",
100
+ props: mergeProps({ className: cn(badgeVariants({ variant }), className) }, props),
101
+ render,
102
+ state: {
103
+ slot: "badge",
104
+ variant
105
+ }
106
+ });
107
+ }
108
+ function Label({ className, htmlFor, ...props }) {
109
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
110
+ "data-slot": "label",
111
+ htmlFor,
112
+ className: cn("flex items-center gap-2 text-xs/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
113
+ ...props
114
+ });
115
+ }
116
+ function FieldSet({ className, ...props }) {
117
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("fieldset", {
118
+ "data-slot": "field-set",
119
+ className: cn("gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col", className),
120
+ ...props
121
+ });
122
+ }
123
+ function FieldLegend({ className, variant = "legend", ...props }) {
124
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("legend", {
125
+ "data-slot": "field-legend",
126
+ "data-variant": variant,
127
+ className: cn("mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm", className),
128
+ ...props
129
+ });
130
+ }
131
+ function FieldGroup({ className, ...props }) {
132
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
133
+ "data-slot": "field-group",
134
+ className: cn("gap-4 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4 group/field-group @container/field-group flex w-full flex-col", className),
135
+ ...props
136
+ });
137
+ }
138
+ var fieldVariants = cva("data-[invalid=true]:text-destructive gap-2 group/field flex w-full", {
139
+ variants: { orientation: {
140
+ vertical: "flex-col [&>*]:w-full [&>.sr-only]:w-auto",
141
+ horizontal: "flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
142
+ responsive: "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
143
+ } },
144
+ defaultVariants: { orientation: "vertical" }
145
+ });
146
+ function Field({ className, orientation = "vertical", ...props }) {
147
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
148
+ "data-slot": "field",
149
+ "data-orientation": orientation,
150
+ className: cn(fieldVariants({ orientation }), className),
151
+ ...props
152
+ });
153
+ }
154
+ function FieldLabel({ className, ...props }) {
155
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Label, {
156
+ "data-slot": "field-label",
157
+ className: cn("has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-2 group/field-label peer/field-label flex w-fit leading-snug", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", className),
158
+ ...props
159
+ });
160
+ }
161
+ function FieldDescription({ className, ...props }) {
162
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
163
+ "data-slot": "field-description",
164
+ className: cn("text-muted-foreground text-left text-xs/relaxed [[data-variant=legend]+&]:-mt-1.5 leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance", "last:mt-0 nth-last-2:-mt-1", "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", className),
165
+ ...props
166
+ });
167
+ }
168
+ function FieldError({ className, children, errors, ...props }) {
169
+ const content = (0, import_react.useMemo)(() => {
170
+ if (children) return children;
171
+ if (!errors?.length) return null;
172
+ const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
173
+ if (uniqueErrors?.length === 1) return uniqueErrors[0]?.message;
174
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
175
+ className: "ml-4 flex list-disc flex-col gap-1",
176
+ children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: error.message }, index))
177
+ });
178
+ }, [children, errors]);
179
+ if (!content) return null;
180
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
181
+ role: "alert",
182
+ "data-slot": "field-error",
183
+ className: cn("text-destructive text-xs/relaxed font-normal", className),
184
+ ...props,
185
+ children: content
186
+ });
187
+ }
188
+ //#endregion
189
+ export { FieldLegend as _, Badge as a, CardDescription as c, CardTitle as d, Field as f, FieldLabel as g, FieldGroup as h, AlertTitle as i, CardFooter as l, FieldError as m, AlertAction as n, Card as o, FieldDescription as p, AlertDescription as r, CardContent as s, Alert as t, CardHeader as u, FieldSet as v, Label as y };
@@ -0,0 +1,22 @@
1
+ import { i as rowToBundle } from "./databaseRows-CPphvbag.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/getBundleChildren-Cv9iz1As.js
3
+ /** The most children the lineage panel lists; the count comes from the base bundle's counter. */
4
+ var BUNDLE_CHILDREN_LIMIT = 100;
5
+ /**
6
+ * The bundles with a patch from this base, newest first: one read of the
7
+ * patches index, then each child bundle.
8
+ */
9
+ async function getBundleChildren(core, baseBundleId) {
10
+ const patches = await core.listPatchesFromBase(baseBundleId, {
11
+ order: "desc",
12
+ limit: 100
13
+ });
14
+ return (await Promise.all([...new Set(patches.map(({ bundle_id }) => bundle_id))].map((id) => core.getBundle(id)))).flatMap((detail) => detail === null ? [] : [rowToBundle(detail.bundle, detail.patches)]);
15
+ }
16
+ /** How many bundles patch from each base: each base bundle's reference counter, in one batch read. */
17
+ async function getBundleChildCounts(core, baseBundleIds) {
18
+ const ids = [...new Set(baseBundleIds.filter(Boolean))];
19
+ return ids.length === 0 ? {} : core.countBundleChildren(ids);
20
+ }
21
+ //#endregion
22
+ export { BUNDLE_CHILDREN_LIMIT, getBundleChildCounts, getBundleChildren };
@@ -1,7 +1,7 @@
1
1
  import "../_runtime.mjs";
2
- import { ht as require_react, mt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { _t as require_react, gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
4
- import { C as cn, n as Input, t as Button$1 } from "./createSsrRpc-C-dLcQuy.mjs";
4
+ import { k as cn, n as Input, t as Button$1 } from "./sidebar-DJcErBMo.mjs";
5
5
  require_react();
6
6
  var import_jsx_runtime = require_jsx_runtime();
7
7
  function Textarea({ className, ...props }) {
@@ -0,0 +1,14 @@
1
+ import { f as lazyRouteComponent, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
2
+ import { r as requireConsoleFeature } from "./console-features-api-C9kiKvaV.mjs";
3
+ import { a as validateInsightsSearch } from "./InsightsInfo-DuJFatQO.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-B55FG5fm.js
5
+ var $$splitComponentImporter = () => import("./insights-CpLpedFZ.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights-CWnHIFUV.mjs");
7
+ var Route = createFileRoute("/insights")({
8
+ beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "insightsAnalytics"),
9
+ notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
10
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
11
+ validateSearch: validateInsightsSearch
12
+ });
13
+ //#endregion
14
+ export { Route as t };
@@ -0,0 +1,5 @@
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-ldW8v8-q.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-CWnHIFUV.js
3
+ var SplitNotFoundComponent = ConsoleFeatureUnavailable;
4
+ //#endregion
5
+ export { SplitNotFoundComponent as notFoundComponent };