@hot-updater/console 1.0.0-rc.2 → 1.0.0-rc.21

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 (285) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-D0LPL1Gy.js +1 -0
  3. package/.output/public/assets/HashValueDisplay-BmuB4FW-.js +1 -0
  4. package/.output/public/assets/InsightsInfo--v4SC07c.js +1 -0
  5. package/.output/public/assets/InsightsPageHeader-dU83CAQY.js +1 -0
  6. package/.output/public/assets/NotFoundPage-B5mhGG2a.js +1 -0
  7. package/.output/public/assets/api-D-vOVlQ4.js +1 -0
  8. package/.output/public/assets/api-keys-Csh8ARKU.js +1 -0
  9. package/.output/public/assets/api-keys-OMPUoA_A.js +1 -0
  10. package/.output/public/assets/arrow-left-Bwq9X1eS.js +1 -0
  11. package/.output/public/assets/arrow-up-right-BkOVn4if.js +1 -0
  12. package/.output/public/assets/card-C_7d6O9a.js +1 -0
  13. package/.output/public/assets/console-features-api-C1jRZTGw.js +1 -0
  14. package/.output/public/assets/dialog-DE8wFN_P.js +1 -0
  15. package/.output/public/assets/dist-C7ENGzpS.js +1 -0
  16. package/.output/public/assets/empty-CVd5NlQD.js +1 -0
  17. package/.output/public/assets/field-C06q1iC9.js +1 -0
  18. package/.output/public/assets/index-BeWlQtO6.js +11 -0
  19. package/.output/public/assets/input-group-Bi61biIA.js +1 -0
  20. package/.output/public/assets/insights-BjnAtC0f.js +2 -0
  21. package/.output/public/assets/insights-D86m11yH.js +42 -0
  22. package/.output/public/assets/insights-DpYstMoY.js +1 -0
  23. package/.output/public/assets/insights-recovery-rpc-BIm5_ALc.js +1 -0
  24. package/.output/public/assets/insights-search-KIF7mRtB.js +1 -0
  25. package/.output/public/assets/insights-usage-rpc-VHj8vyBt.js +1 -0
  26. package/.output/public/assets/insights_.distribution-ADcrX48c.js +2 -0
  27. package/.output/public/assets/insights_.distribution-CuuJUN6Y.js +1 -0
  28. package/.output/public/assets/insights_.distribution-DJRjuXsO.js +1 -0
  29. package/.output/public/assets/installations-BSBBzqWs.js +2 -0
  30. package/.output/public/assets/installations-DqIE6WcO.js +1 -0
  31. package/.output/public/assets/installations-UsELbDvw.js +1 -0
  32. package/.output/public/assets/loader-circle-CnCBxzHp.js +1 -0
  33. package/.output/public/assets/mutation-Csp7xUNh.js +1 -0
  34. package/.output/public/assets/preload-helper-B-cOmpLH.js +1 -0
  35. package/.output/public/assets/refresh-cw-FF1NtzlQ.js +1 -0
  36. package/.output/public/assets/routes-CoN9XHP_.js +2 -0
  37. package/.output/public/assets/routes-DT1jB0Zi.js +1 -0
  38. package/.output/public/assets/sidebar-D8mJRF15.js +3 -0
  39. package/.output/public/assets/styles-Bwt7v6U5.css +2 -0
  40. package/.output/public/assets/table-WBgfvgXg.js +1 -0
  41. package/.output/public/assets/useCompositeListItem-CloBmDwn.js +1 -0
  42. package/.output/public/assets/useMutation-DO8cvsTx.js +1 -0
  43. package/.output/public/assets/useOpenInteractionType-ReGr9GzJ.js +1 -0
  44. package/.output/public/assets/valueToPercent-BvPAi4bP.js +1 -0
  45. package/.output/server/{__23tanstack-start-server-fn-resolver-B7ioJhtE.mjs → __23tanstack-start-server-fn-resolver-DMRD4e4f.mjs} +51 -47
  46. package/.output/server/_libs/@base-ui/react+[...].mjs +7044 -3622
  47. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1554 -0
  48. package/.output/server/_libs/@tanstack/react-router+[...].mjs +3803 -4023
  49. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +141 -98
  50. package/.output/server/_libs/d3-array.mjs +231 -0
  51. package/.output/server/_libs/d3-color.mjs +330 -0
  52. package/.output/server/_libs/d3-format.mjs +252 -0
  53. package/.output/server/_libs/d3-interpolate.mjs +207 -0
  54. package/.output/server/_libs/d3-path.mjs +77 -0
  55. package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
  56. package/.output/server/_libs/d3-shape.mjs +818 -0
  57. package/.output/server/_libs/decimal.js-light.mjs +884 -0
  58. package/.output/server/_libs/es-toolkit.mjs +1159 -0
  59. package/.output/server/_libs/eventemitter3.mjs +236 -0
  60. package/.output/server/_libs/immer.mjs +532 -0
  61. package/.output/server/_libs/lucide-react.mjs +46 -32
  62. package/.output/server/_libs/next-themes.mjs +2 -2
  63. package/.output/server/_libs/react-redux+[...].mjs +205 -0
  64. package/.output/server/_libs/recharts+[...].mjs +14350 -0
  65. package/.output/server/_libs/sonner.mjs +2 -2
  66. package/.output/server/_libs/tanstack__history.mjs +68 -41
  67. package/.output/server/_libs/tanstack__query-core.mjs +1618 -309
  68. package/.output/server/_libs/tanstack__react-query.mjs +262 -22
  69. package/.output/server/_libs/verkit.mjs +99 -1
  70. package/.output/server/_runtime.mjs +10 -1
  71. package/.output/server/_ssr/ConsoleFeatureUnavailable-Du7jNPNS.mjs +58 -0
  72. package/.output/server/_ssr/{HashValueDisplay-DwpGLfrl.mjs → HashValueDisplay-GQvFkXoi.mjs} +3 -3
  73. package/.output/server/_ssr/InsightsInfo-Do7QSaFR.mjs +37 -0
  74. package/.output/server/_ssr/InsightsPageHeader-DSUWUWRc.mjs +154 -0
  75. package/.output/server/_ssr/NotFoundPage-DsF4Vrhg.mjs +37 -0
  76. package/.output/server/_ssr/api-BEiVs0H7.mjs +203 -0
  77. package/.output/server/_ssr/api-keys-BrvBWGRf.mjs +5 -0
  78. package/.output/server/_ssr/{api-keys-CZeTPQys.mjs → api-keys-K5v32nf7.mjs} +49 -9
  79. package/.output/server/_ssr/api-keys-rpc-B96bBllm.mjs +52 -0
  80. package/.output/server/_ssr/api-rpc-DcUe280B.mjs +296 -0
  81. package/.output/server/_ssr/{auth-rpc-DUaeOWKK.mjs → auth-rpc-C68W56DP.mjs} +6 -6
  82. package/.output/server/_ssr/auth.server-DM1J6NwR.mjs +5712 -0
  83. package/.output/server/_ssr/bundleActivity-CpuY9CTP.mjs +19 -0
  84. package/.output/server/_ssr/card-CPAEKx0w.mjs +49 -0
  85. package/.output/server/_ssr/config-nsIcsHh8.mjs +15 -0
  86. package/.output/server/_ssr/config.server-DDCZk3Sq.mjs +36 -0
  87. package/.output/server/_ssr/console-access-Da-2Qd7q.mjs +17 -0
  88. package/.output/server/_ssr/console-features-Dzu2iUGD.mjs +55 -0
  89. package/.output/server/_ssr/console-features-api-xAsSgFa_.mjs +43 -0
  90. package/.output/server/_ssr/console-features-rpc-qARGpB24.mjs +19 -0
  91. package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-BdBf_ezN.mjs} +67 -56
  92. package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-B_y2lrwA.mjs} +2 -2
  93. package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Bhxciy7Z.mjs} +28 -5
  94. package/.output/server/_ssr/databaseRows-DwMAjaF8.mjs +74 -0
  95. package/.output/server/_ssr/{dialog-DS-nw-pA.mjs → dialog-q__BJ7mQ.mjs} +2 -2
  96. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-Cxo9ghYv.mjs} +140 -6
  97. package/.output/server/_ssr/{downloadBundle-CNnYxYO2.mjs → downloadBundle-BW9I-pMQ.mjs} +10 -10
  98. package/.output/server/_ssr/empty-DcBTAooP.mjs +49 -0
  99. package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CYdinE-i.mjs} +1 -1
  100. package/.output/server/_ssr/{table-CnZmon_Z.mjs → field-QCDBVpXA.mjs} +63 -51
  101. package/.output/server/_ssr/getBundleChildren-DIAGCF4a.mjs +22 -0
  102. package/.output/server/_ssr/{input-group-BpsnmvZw.mjs → input-group-hCk2nUoU.mjs} +2 -2
  103. package/.output/server/_ssr/insights-BfBO0RFr.mjs +1238 -0
  104. package/.output/server/_ssr/insights-DsAU3-TB.mjs +14 -0
  105. package/.output/server/_ssr/insights-RIfg447W.mjs +5 -0
  106. package/.output/server/_ssr/insights-api-CDn-QQHU.mjs +105 -0
  107. package/.output/server/_ssr/insights-failures-BBGMhuUr.mjs +44 -0
  108. package/.output/server/_ssr/insights-failures-rpc-rA2dctK2.mjs +21 -0
  109. package/.output/server/_ssr/insights-recovery-Dpk6Mfb9.mjs +28 -0
  110. package/.output/server/_ssr/insights-recovery-rpc-BCaF-xSd.mjs +46 -0
  111. package/.output/server/_ssr/insights-recovery-rpc-CcgYyUHk.mjs +20 -0
  112. package/.output/server/_ssr/{insights-rpc-38DujK0G.mjs → insights-rpc-keycmwzw.mjs} +22 -14
  113. package/.output/server/_ssr/insights-search-BRg5VsNe.mjs +25 -0
  114. package/.output/server/_ssr/insights-usage-cbw9n2Fq.mjs +29 -0
  115. package/.output/server/_ssr/insights-usage-rpc-BKgV1QDf.mjs +29 -0
  116. package/.output/server/_ssr/insights-usage-rpc-D-JYachy.mjs +41 -0
  117. package/.output/server/_ssr/insightsRecovery-B7oMc8d8.mjs +45 -0
  118. package/.output/server/_ssr/insightsUsage-Oa7kk5ek.mjs +56 -0
  119. package/.output/server/_ssr/insights_.distribution-BIqOqRW0.mjs +335 -0
  120. package/.output/server/_ssr/insights_.distribution-CuUrDa7P.mjs +5 -0
  121. package/.output/server/_ssr/insights_.distribution-RT_6x_ud.mjs +14 -0
  122. package/.output/server/_ssr/{installations-DiVKEF5T.mjs → installations-BO5CjX2z.mjs} +517 -54
  123. package/.output/server/_ssr/installations-BjaHiIfh.mjs +5 -0
  124. package/.output/server/_ssr/installations-Dt5luA-N.mjs +69 -0
  125. package/.output/server/_ssr/listReleases-BitHzOYB.mjs +79 -0
  126. package/.output/server/_ssr/releaseManagement-B3e7I8J9.mjs +11 -0
  127. package/.output/server/_ssr/{router-B9wG_9f8.mjs → router-DfVAixxe.mjs} +135 -139
  128. package/.output/server/_ssr/{routes-D7Yh_jfj.mjs → routes-C6LstNp8.mjs} +176 -455
  129. package/.output/server/_ssr/routes-Q3Uhmwwz.mjs +292 -0
  130. package/.output/server/_ssr/runtime.server-fL0o6I2b.mjs +1459 -0
  131. package/.output/server/_ssr/schema-BKY9SqaY.mjs +25 -0
  132. package/.output/server/_ssr/select-CUlInmjk.mjs +107 -0
  133. package/.output/server/_ssr/server-C43wq9ft.mjs +8330 -0
  134. package/.output/server/_ssr/{createSsrRpc-DjWNJ0uc.mjs → sidebar-DKbx2ach.mjs} +117 -63
  135. package/.output/server/_ssr/ssr.mjs +1 -1
  136. package/.output/server/_ssr/start-BXUOv_n8.mjs +4 -0
  137. package/.output/server/_ssr/table-NGWV8B-S.mjs +53 -0
  138. package/.output/server/_ssr/updateFailures-Jwe2Baab.mjs +24 -0
  139. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C8bwiZr8.mjs} +2 -2
  140. package/.output/server/_tanstack-start-manifest_v-WQ5qGn8n.mjs +124 -0
  141. package/.output/server/index.mjs +267 -162
  142. package/LICENSE +13 -14
  143. package/README.md +82 -72
  144. package/lib/index.d.mts +23 -11
  145. package/lib/vite-internal.mjs +13 -3
  146. package/lib/vite.d.mts +2 -0
  147. package/package.json +14 -14
  148. package/src/components/AppSidebar.tsx +100 -71
  149. package/src/components/ConsoleAccessPage.tsx +5 -1
  150. package/src/components/ConsoleFeatureUnavailable.tsx +80 -0
  151. package/src/components/NotFoundPage.tsx +7 -7
  152. package/src/components/features/FeatureSlots.tsx +99 -0
  153. package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
  154. package/src/components/features/bundles/BundleMetadata.tsx +8 -5
  155. package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
  156. package/src/components/features/channels/ChannelManagementDialog.tsx +2 -5
  157. package/src/components/features/insights/AppUsage.tsx +370 -0
  158. package/src/components/features/insights/EstimatedCount.tsx +18 -0
  159. package/src/components/features/insights/EventDetails.tsx +117 -37
  160. package/src/components/features/insights/EventHistoryCard.tsx +112 -26
  161. package/src/components/features/insights/EventHistoryList.tsx +2 -2
  162. package/src/components/features/insights/InsightsControls.tsx +265 -102
  163. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  164. package/src/components/features/insights/InsightsInfo.tsx +48 -0
  165. package/src/components/features/insights/InsightsOverview.tsx +176 -173
  166. package/src/components/features/insights/InsightsPageHeader.tsx +35 -20
  167. package/src/components/features/insights/InsightsPeriodSelector.tsx +89 -0
  168. package/src/components/features/insights/InstallationHistoryCard.tsx +52 -10
  169. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  170. package/src/components/features/insights/ReleaseActivity.tsx +188 -0
  171. package/src/components/features/insights/ReportingDevicesSummary.tsx +65 -0
  172. package/src/components/features/insights/UpdateFailures.tsx +319 -0
  173. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  174. package/src/components/features/releases/ReleaseEditorSheet.tsx +30 -7
  175. package/src/components/ui/card.tsx +1 -1
  176. package/src/components/ui/empty.tsx +101 -0
  177. package/src/components/ui/scroll-area.tsx +52 -0
  178. package/src/components/ui/sidebar.tsx +22 -29
  179. package/src/components/ui/tabs.tsx +81 -0
  180. package/src/index.ts +26 -19
  181. package/src/lib/api-keys-api.ts +0 -28
  182. package/src/lib/api-keys-rpc.ts +27 -38
  183. package/src/lib/api-rpc.ts +189 -266
  184. package/src/lib/api.ts +19 -102
  185. package/src/lib/bundle-activity.ts +31 -0
  186. package/src/lib/console-access.ts +20 -0
  187. package/src/lib/console-features-api.ts +68 -0
  188. package/src/lib/console-features-rpc.ts +13 -0
  189. package/src/lib/console-features.ts +91 -0
  190. package/src/lib/insights-api.ts +37 -1
  191. package/src/lib/insights-failures-rpc.ts +21 -0
  192. package/src/lib/insights-failures.ts +129 -0
  193. package/src/lib/insights-recovery-rpc.ts +51 -0
  194. package/src/lib/insights-recovery.ts +68 -0
  195. package/src/lib/insights-retention.ts +21 -0
  196. package/src/lib/insights-rpc.ts +30 -12
  197. package/src/lib/insights-search.ts +58 -0
  198. package/src/lib/insights-usage-rpc.ts +29 -0
  199. package/src/lib/insights-usage.ts +74 -0
  200. package/src/lib/insights-view.ts +38 -2
  201. package/src/lib/scroll-restoration.ts +21 -0
  202. package/src/lib/server/adminInsights.ts +124 -0
  203. package/src/lib/server/auth.server.ts +13 -5
  204. package/src/lib/server/bundleActivity.ts +37 -0
  205. package/src/lib/server/config.server.ts +21 -74
  206. package/src/lib/server/console-feature-apis.ts +59 -0
  207. package/src/lib/server/console-runtime.server.ts +82 -38
  208. package/src/lib/server/downloadBundle.ts +16 -15
  209. package/src/lib/server/getBundleChildren.ts +31 -122
  210. package/src/lib/server/insightsRecovery.ts +55 -0
  211. package/src/lib/server/insightsUsage.ts +63 -0
  212. package/src/lib/server/listReleases.ts +109 -44
  213. package/src/lib/server/releaseReachability.ts +8 -7
  214. package/src/lib/server/runtime.server.ts +120 -31
  215. package/src/lib/server/updateFailures.ts +31 -0
  216. package/src/routeTree.gen.ts +44 -44
  217. package/src/router.tsx +3 -2
  218. package/src/routes/-installations-search.ts +32 -8
  219. package/src/routes/-releases-search.ts +76 -29
  220. package/src/routes/__root.tsx +10 -4
  221. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  222. package/src/routes/api-keys.tsx +5 -2
  223. package/src/routes/index.tsx +167 -104
  224. package/src/routes/insights.tsx +100 -59
  225. package/src/routes/insights_.distribution.tsx +398 -0
  226. package/src/routes/installations.tsx +98 -41
  227. package/src/vite-internal.ts +15 -3
  228. package/src/vite.ts +2 -0
  229. package/.output/public/assets/HashValueDisplay-CB0Eskit.js +0 -1
  230. package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +0 -1
  231. package/.output/public/assets/api-keys-BzKocqRy.js +0 -1
  232. package/.output/public/assets/api-keys-api-BHcODB7q.js +0 -1
  233. package/.output/public/assets/card-Dhr_eFYj.js +0 -1
  234. package/.output/public/assets/chart-no-axes-combined-Dy4WJv2U.js +0 -1
  235. package/.output/public/assets/composite-Bp98A0Ld.js +0 -1
  236. package/.output/public/assets/createServerFn-CA8fs7QD.js +0 -3
  237. package/.output/public/assets/dialog-CUTrcPlB.js +0 -1
  238. package/.output/public/assets/dist-C_NydL0e.js +0 -1
  239. package/.output/public/assets/index-DdAz-CXv.js +0 -10
  240. package/.output/public/assets/input-group-cSOG4wh_.js +0 -1
  241. package/.output/public/assets/insights-C0PBSZ-n.js +0 -1
  242. package/.output/public/assets/installations-CE33wgbY.js +0 -2
  243. package/.output/public/assets/installations-CStZja8x.js +0 -1
  244. package/.output/public/assets/lazyRouteComponent-Ccp3bwBY.js +0 -1
  245. package/.output/public/assets/link-CI8idAUi.js +0 -1
  246. package/.output/public/assets/loader-circle-BoxLrsOu.js +0 -1
  247. package/.output/public/assets/preload-helper-CQ36nxok.js +0 -1
  248. package/.output/public/assets/refresh-cw-Bqc72UZG.js +0 -1
  249. package/.output/public/assets/routes-DGVXdzpw.js +0 -2
  250. package/.output/public/assets/routes-DTlwOr8I.js +0 -1
  251. package/.output/public/assets/shield-check-uK3MHWJZ.js +0 -1
  252. package/.output/public/assets/signing-CMf4aqDO.js +0 -1
  253. package/.output/public/assets/styles-BCvbtKsm.css +0 -2
  254. package/.output/public/assets/table-2vcV89QB.js +0 -1
  255. package/.output/public/assets/useCompositeListItem-CHLITE_4.js +0 -1
  256. package/.output/public/assets/x-DCd0j8c6.js +0 -1
  257. package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +0 -484
  258. package/.output/server/_ssr/api-keys-api-BUPQVSpk.mjs +0 -60
  259. package/.output/server/_ssr/api-keys-rpc-Cs7tS5_j.mjs +0 -136
  260. package/.output/server/_ssr/api-rpc-tAupfGQm.mjs +0 -1399
  261. package/.output/server/_ssr/auth.server-DW71WzsD.mjs +0 -47
  262. package/.output/server/_ssr/bundle-signing-rpc-BhnBw0-d.mjs +0 -16
  263. package/.output/server/_ssr/bundle-signing.server-C4NW5mWx.mjs +0 -12
  264. package/.output/server/_ssr/card-BRiPmi0C.mjs +0 -108
  265. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  266. package/.output/server/_ssr/config.server-afDuAwaG.mjs +0 -368
  267. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  268. package/.output/server/_ssr/deleteBundle-BTGwBgzx.mjs +0 -66
  269. package/.output/server/_ssr/getBundleChildren-C0vh4ZvE.mjs +0 -50
  270. package/.output/server/_ssr/insights-BdS364Xu.mjs +0 -460
  271. package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +0 -303
  272. package/.output/server/_ssr/installations-CtA59MQG.mjs +0 -29
  273. package/.output/server/_ssr/routes-CKrrS2q2.mjs +0 -37
  274. package/.output/server/_ssr/runtime.server-DacU1TBV.mjs +0 -438
  275. package/.output/server/_ssr/server-D_C2rMzf.mjs +0 -7468
  276. package/.output/server/_ssr/signing-Dz1WkZOf.mjs +0 -133
  277. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  278. package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +0 -97
  279. package/src/components/features/insights/InsightsBundleReports.tsx +0 -51
  280. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  281. package/src/lib/bundle-signing-api.ts +0 -14
  282. package/src/lib/bundle-signing-rpc.ts +0 -16
  283. package/src/lib/server/bundle-signing.server.ts +0 -23
  284. package/src/lib/server/deleteBundle.ts +0 -145
  285. package/src/routes/signing.tsx +0 -37
@@ -0,0 +1,292 @@
1
+ import { n as consoleFeatures } from "./console-features-Dzu2iUGD.mjs";
2
+ import { pt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
+ import { I as ChartNoAxesCombined, x as KeyRound } from "../_libs/lucide-react.mjs";
4
+ import { S as Skeleton } from "./sidebar-DKbx2ach.mjs";
5
+ import { f as lazyRouteComponent, h as Link, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
6
+ import { r as useQuery } from "../_libs/tanstack__react-query.mjs";
7
+ import { a as useConsoleFeatures, i as useConsoleFeature } from "./console-features-api-xAsSgFa_.mjs";
8
+ import { a as CardHeader, n as CardContent, o as CardTitle, t as Card } from "./card-CPAEKx0w.mjs";
9
+ import { i as failureRate, s as formatRate } from "./insights-failures-BBGMhuUr.mjs";
10
+ import { t as getBundleActivityRpc } from "./insights-recovery-rpc-CcgYyUHk.mjs";
11
+ import { l as useUpdateFailuresQuery } from "./insights-api-CDn-QQHU.mjs";
12
+ import { t as InsightsInfo } from "./InsightsInfo-Do7QSaFR.mjs";
13
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-Q3Uhmwwz.js
14
+ var import_jsx_runtime = require_jsx_runtime();
15
+ /** What API key management adds: its navigation item. */
16
+ var apiKeysFeatureUi = { apiKeys: { navigation: {
17
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KeyRound, {}),
18
+ paths: ["/api-keys"],
19
+ link: ({ onClick }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
20
+ to: "/api-keys",
21
+ onClick
22
+ })
23
+ } } };
24
+ /** Release activity for bundle rows; mounted only where the console reads it. */
25
+ function useBundleActivityQuery(inputs) {
26
+ const sorted = [...inputs].sort((a, b) => a.releaseId.localeCompare(b.releaseId));
27
+ return useQuery({
28
+ queryKey: ["bundle-activity", sorted],
29
+ queryFn: () => getBundleActivityRpc({ data: sorted }),
30
+ enabled: sorted.length > 0,
31
+ staleTime: 3e4
32
+ });
33
+ }
34
+ var crashRate = (report) => {
35
+ const attempts = report.activeDays + report.failedLaunches;
36
+ return attempts === 0 ? "—" : `${(report.failedLaunches / attempts * 100).toFixed(2)}%`;
37
+ };
38
+ function BundleMovementSummary({ report, loading = false, input }) {
39
+ if (!report) return loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, {
40
+ "aria-label": "Loading release insights",
41
+ className: "h-4 w-40"
42
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
43
+ "aria-label": "Release insights unavailable",
44
+ children: "—"
45
+ });
46
+ const metrics = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
47
+ className: "flex min-w-[220px] flex-wrap items-baseline gap-x-3 gap-y-1 text-sm",
48
+ children: [
49
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["Downloads ", report.downloads.toLocaleString()] }),
50
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["Active days ", report.activeDays.toLocaleString()] }),
51
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
52
+ "Known crashes ",
53
+ report.failedLaunches.toLocaleString(),
54
+ " (",
55
+ crashRate(report),
56
+ ")"
57
+ ] }),
58
+ report.coverage.kind === "partial" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
59
+ className: "text-xs text-muted-foreground",
60
+ children: "Partial"
61
+ }) : null
62
+ ]
63
+ });
64
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
65
+ className: "flex items-center gap-1",
66
+ children: [input ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
67
+ className: "rounded-sm hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
68
+ to: "/insights",
69
+ search: {
70
+ healthPlatform: input.platform,
71
+ healthChannel: input.channel,
72
+ releaseId: input.releaseId,
73
+ bundleWindow: "7d"
74
+ },
75
+ children: metrics
76
+ }) : metrics, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
77
+ label: "About release insight metrics",
78
+ children: "Active days count each installation once for each UTC day it launched this release. Known crashes are reported OTA launch failures that triggered recovery. The rate is known crashes divided by active days plus known crashes."
79
+ })]
80
+ });
81
+ }
82
+ /** The release's failed downloads and installs since its first report, and their rate. */
83
+ function BundleDownloadFailures({ input }) {
84
+ const query = useUpdateFailuresQuery({
85
+ platform: input.platform,
86
+ channel: input.channel,
87
+ releaseId: input.releaseId
88
+ });
89
+ const report = query.data;
90
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
91
+ className: "flex items-center gap-1 text-sm",
92
+ children: [report ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
93
+ "Download failures ",
94
+ report.failedUpdates.toLocaleString(),
95
+ " (",
96
+ formatRate(failureRate(report)),
97
+ ")"
98
+ ] }) : query.isPending ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, {
99
+ "aria-label": "Loading download failures",
100
+ className: "h-4 w-40"
101
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
102
+ "aria-label": "Download failures unavailable",
103
+ children: "—"
104
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
105
+ label: "About download failures",
106
+ children: "Reported failures to download or install this release, since its first report; each client reports one at most once a UTC day. The rate is the failure rate of update attempts: failures divided by failures plus download reports."
107
+ })]
108
+ });
109
+ }
110
+ /** The bundle detail's Insights card, a section of the release editor: activity and download failures. */
111
+ function BundleInsightsSummary({ input }) {
112
+ const query = useBundleActivityQuery([input]);
113
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
114
+ className: "px-4 pt-4 pb-3",
115
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
116
+ className: "text-sm font-medium",
117
+ children: "Insights"
118
+ })
119
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardContent, {
120
+ className: "flex flex-col gap-2 px-4 pb-4",
121
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, {
122
+ input,
123
+ loading: query.isFetching,
124
+ report: query.data?.[input.releaseId]
125
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleDownloadFailures, { input })]
126
+ })] });
127
+ }
128
+ /**
129
+ * The release editor's Insights card where the console reads no release
130
+ * activity, as through a self-hosted server's admin API: download failures
131
+ * alone. With release activity, its card shows them.
132
+ */
133
+ function ReleaseFailuresSection({ input }) {
134
+ if (useConsoleFeature("insightsAnalytics")) return null;
135
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
136
+ className: "px-4 pt-4 pb-3",
137
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
138
+ className: "text-sm font-medium",
139
+ children: "Insights"
140
+ })
141
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardContent, {
142
+ className: "px-4 pb-4",
143
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleDownloadFailures, { input })
144
+ })] });
145
+ }
146
+ /**
147
+ * One release's activity in the Bundles page's Insights column. Every cell
148
+ * asks for the page's releases under one query key, so the page makes one
149
+ * request.
150
+ */
151
+ function ReleaseActivityCell({ releaseId, releases }) {
152
+ const query = useBundleActivityQuery(releases);
153
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, {
154
+ input: releases.find((release) => release.releaseId === releaseId),
155
+ loading: query.isFetching,
156
+ report: query.data?.[releaseId]
157
+ });
158
+ }
159
+ var consoleFeatureUi = {
160
+ insights: {
161
+ navigation: {
162
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartNoAxesCombined, {}),
163
+ paths: [
164
+ "/insights",
165
+ "/insights/distribution",
166
+ "/installations"
167
+ ],
168
+ link: ({ features, onClick }) => features.insightsAnalytics ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
169
+ to: "/insights",
170
+ onClick
171
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
172
+ to: "/installations",
173
+ onClick
174
+ })
175
+ },
176
+ releaseSection: ({ release }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReleaseFailuresSection, { input: release })
177
+ },
178
+ insightsAnalytics: {
179
+ releaseColumn: { Cell: ReleaseActivityCell },
180
+ releaseSection: ({ release }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleInsightsSummary, { input: release })
181
+ },
182
+ ...apiKeysFeatureUi
183
+ };
184
+ var featureIds = Object.keys(consoleFeatures);
185
+ /**
186
+ * What the features that are on add, in the registry's order, with each
187
+ * feature's label; nothing until the features load.
188
+ */
189
+ var useFeatureUi = () => {
190
+ const features = useConsoleFeatures().data?.features;
191
+ if (features === void 0) return [];
192
+ return featureIds.flatMap((feature) => {
193
+ const ui = consoleFeatureUi[feature];
194
+ return ui !== void 0 && features[feature] ? [{
195
+ ...ui,
196
+ feature,
197
+ label: consoleFeatures[feature].label,
198
+ features
199
+ }] : [];
200
+ });
201
+ };
202
+ /** The release list's feature columns, with their headers. */
203
+ var useReleaseColumns = () => useFeatureUi().flatMap(({ feature, label, releaseColumn }) => releaseColumn === void 0 ? [] : [{
204
+ ...releaseColumn,
205
+ feature,
206
+ label
207
+ }]);
208
+ /** The release editor's feature sections, for one release. */
209
+ function ReleaseSections({ release }) {
210
+ return useFeatureUi().map(({ feature, releaseSection: Section }) => Section === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { release }, feature));
211
+ }
212
+ var optionalString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
213
+ /**
214
+ * The search a URL holds, reduced to one of the filter sets the release
215
+ * indexes serve: a bundle, a scope (with enabled), or a channel with its
216
+ * platform (with enabled). A channel without a platform lists iOS.
217
+ */
218
+ function validateReleaseSearch(search) {
219
+ const beforeReleaseId = optionalString(search.beforeReleaseId);
220
+ const afterReleaseId = beforeReleaseId ? void 0 : optionalString(search.afterReleaseId);
221
+ const enabled = search.enabled === true || search.enabled === "true" ? true : search.enabled === false || search.enabled === "false" ? false : void 0;
222
+ const bundleId = optionalString(search.bundleId);
223
+ const scopeKey = bundleId ? void 0 : optionalString(search.scopeKey);
224
+ const channelId = bundleId || scopeKey ? void 0 : optionalString(search.channelId);
225
+ const platform = channelId === void 0 ? void 0 : search.platform === "android" ? "android" : "ios";
226
+ return {
227
+ afterReleaseId,
228
+ beforeReleaseId,
229
+ bundleId,
230
+ channelId,
231
+ enabled: scopeKey || channelId ? enabled : void 0,
232
+ platform,
233
+ releaseId: optionalString(search.releaseId),
234
+ scopeKey
235
+ };
236
+ }
237
+ function releaseFilterOf(search) {
238
+ const enabled = search.enabled === void 0 ? {} : { enabled: search.enabled };
239
+ if (search.bundleId) return {
240
+ kind: "bundle",
241
+ bundleId: search.bundleId
242
+ };
243
+ if (search.scopeKey) return {
244
+ kind: "scope",
245
+ scopeKey: search.scopeKey,
246
+ ...enabled
247
+ };
248
+ if (search.channelId && search.platform) return {
249
+ kind: "channelPlatform",
250
+ channelId: search.channelId,
251
+ platform: search.platform,
252
+ ...enabled
253
+ };
254
+ return { kind: "all" };
255
+ }
256
+ function hasReleaseFilters(search) {
257
+ return releaseFilterOf(search).kind !== "all";
258
+ }
259
+ /**
260
+ * A new filter starts from the first page. A bundle or scope filter replaces
261
+ * the others, and choosing a channel or platform clears them.
262
+ */
263
+ function updateReleaseFilters(current, filters) {
264
+ const next = {
265
+ ...current,
266
+ ...filters
267
+ };
268
+ if (filters.bundleId) return validateReleaseSearch({ bundleId: next.bundleId });
269
+ if (filters.scopeKey) return validateReleaseSearch({
270
+ scopeKey: next.scopeKey,
271
+ enabled: next.enabled
272
+ });
273
+ if ("channelId" in filters || "platform" in filters) return validateReleaseSearch({
274
+ channelId: next.channelId,
275
+ enabled: next.enabled,
276
+ platform: next.platform
277
+ });
278
+ return validateReleaseSearch({
279
+ bundleId: next.bundleId,
280
+ channelId: next.channelId,
281
+ enabled: next.enabled,
282
+ platform: next.platform,
283
+ scopeKey: next.scopeKey
284
+ });
285
+ }
286
+ var $$splitComponentImporter = () => import("./routes-C6LstNp8.mjs");
287
+ var Route = createFileRoute("/")({
288
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
289
+ validateSearch: validateReleaseSearch
290
+ });
291
+ //#endregion
292
+ export { updateReleaseFilters as a, releaseFilterOf as i, Route as n, useFeatureUi as o, hasReleaseFilters as r, useReleaseColumns as s, ReleaseSections as t };