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

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 (275) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-B9VYGA3N.js +1 -0
  3. package/.output/public/assets/HashValueDisplay-D880zntR.js +1 -0
  4. package/.output/public/assets/InsightsInfo-By_sPjTE.js +1 -0
  5. package/.output/public/assets/InsightsPageHeader-9_kx_LL7.js +1 -0
  6. package/.output/public/assets/NotFoundPage-Dys8C0cW.js +1 -0
  7. package/.output/public/assets/api-CtarlV0l.js +1 -0
  8. package/.output/public/assets/api-keys-DFF_QqtN.js +1 -0
  9. package/.output/public/assets/api-keys-evfsQ4sN.js +1 -0
  10. package/.output/public/assets/arrow-left-BP9D-ta_.js +1 -0
  11. package/.output/public/assets/arrow-up-right-CDP9Tevw.js +1 -0
  12. package/.output/public/assets/card-DzCPSRsh.js +1 -0
  13. package/.output/public/assets/console-features-api-yv7rm3DX.js +1 -0
  14. package/.output/public/assets/dialog-BDvCy_QO.js +1 -0
  15. package/.output/public/assets/dist-Clb6cQ9l.js +1 -0
  16. package/.output/public/assets/empty-C5x9mn_s.js +1 -0
  17. package/.output/public/assets/field-Bou7shoO.js +1 -0
  18. package/.output/public/assets/index-0eg3l8aC.js +10 -0
  19. package/.output/public/assets/input-group-DVtWFUUF.js +1 -0
  20. package/.output/public/assets/insights-2MbdiSNv.js +1 -0
  21. package/.output/public/assets/insights-C6tmCZHk.js +2 -0
  22. package/.output/public/assets/insights-CadS_aIA.js +42 -0
  23. package/.output/public/assets/insights-recovery-rpc-wvdyM4LD.js +1 -0
  24. package/.output/public/assets/insights-search-KIF7mRtB.js +1 -0
  25. package/.output/public/assets/insights-usage-rpc-qUkNtrWr.js +1 -0
  26. package/.output/public/assets/insights_.distribution-BhBs6PNA.js +1 -0
  27. package/.output/public/assets/insights_.distribution-CItZw3-8.js +1 -0
  28. package/.output/public/assets/insights_.distribution-CJUH_wAS.js +2 -0
  29. package/.output/public/assets/installations-CH2H7JQt.js +2 -0
  30. package/.output/public/assets/installations-DMeMuwsW.js +1 -0
  31. package/.output/public/assets/installations-DnvxI9Dt.js +1 -0
  32. package/.output/public/assets/loader-circle-Ca7C9YY1.js +1 -0
  33. package/.output/public/assets/mutation-x9L28_CD.js +1 -0
  34. package/.output/public/assets/preload-helper-BN-UkjOE.js +1 -0
  35. package/.output/public/assets/refresh-cw-CVGqvy8Z.js +1 -0
  36. package/.output/public/assets/routes-BhK8DuZA.js +1 -0
  37. package/.output/public/assets/routes-veKtDW39.js +2 -0
  38. package/.output/public/assets/sidebar-B45aMqRm.js +3 -0
  39. package/.output/public/assets/styles-Dn0pK1EX.css +2 -0
  40. package/.output/public/assets/table-CwLnN6KX.js +1 -0
  41. package/.output/public/assets/useCompositeListItem-CF7vsfcA.js +1 -0
  42. package/.output/public/assets/useMutation-CN1ygYEr.js +1 -0
  43. package/.output/public/assets/useOpenInteractionType-AnAMWYIY.js +1 -0
  44. package/.output/public/assets/valueToPercent-C-t8FT0y.js +1 -0
  45. package/.output/server/{__23tanstack-start-server-fn-resolver-B7ioJhtE.mjs → __23tanstack-start-server-fn-resolver-CUQLz7hs.mjs} +52 -40
  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 +49 -3
  49. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +4 -4
  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__react-query.mjs +8 -3
  67. package/.output/server/_libs/verkit.mjs +99 -1
  68. package/.output/server/_runtime.mjs +10 -1
  69. package/.output/server/_ssr/ConsoleFeatureUnavailable-DoxET2AT.mjs +58 -0
  70. package/.output/server/_ssr/{HashValueDisplay-DwpGLfrl.mjs → HashValueDisplay-BplboHEb.mjs} +3 -3
  71. package/.output/server/_ssr/InsightsInfo-o2YPd5Qc.mjs +37 -0
  72. package/.output/server/_ssr/InsightsPageHeader-NExCJL1I.mjs +154 -0
  73. package/.output/server/_ssr/NotFoundPage-Cd-A8ock.mjs +37 -0
  74. package/.output/server/_ssr/api-B1Ro0uys.mjs +202 -0
  75. package/.output/server/_ssr/api-C0G9MTMI.mjs +4205 -0
  76. package/.output/server/_ssr/{api-keys-CZeTPQys.mjs → api-keys-CT3HG7KT.mjs} +49 -9
  77. package/.output/server/_ssr/api-keys-Dvvy1sem.mjs +5 -0
  78. package/.output/server/_ssr/api-keys-rpc-b1qTTFfG.mjs +52 -0
  79. package/.output/server/_ssr/api-rpc-Cbns2MGx.mjs +338 -0
  80. package/.output/server/_ssr/{auth-rpc-DUaeOWKK.mjs → auth-rpc-DChS7m9y.mjs} +6 -6
  81. package/.output/server/_ssr/auth.server-Ccqz2iVv.mjs +37 -0
  82. package/.output/server/_ssr/bundleActivity-D17Pb_h5.mjs +19 -0
  83. package/.output/server/_ssr/card-DMbcvlPz.mjs +49 -0
  84. package/.output/server/_ssr/config-DMEJdhoW.mjs +13 -0
  85. package/.output/server/_ssr/config.server-DyypN6cQ.mjs +60 -0
  86. package/.output/server/_ssr/console-access-KpPv5lin.mjs +17 -0
  87. package/.output/server/_ssr/console-features-CsbyHYfK.mjs +55 -0
  88. package/.output/server/_ssr/console-features-api-B-KVuo4p.mjs +43 -0
  89. package/.output/server/_ssr/console-features-rpc-Djyo5740.mjs +19 -0
  90. package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-B_I3Ll4M.mjs} +28 -2
  91. package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-DuNm5mmo.mjs} +2 -2
  92. package/.output/server/_ssr/databaseRows-CXxf_VIB.mjs +132 -0
  93. package/.output/server/_ssr/{deleteBundle-BTGwBgzx.mjs → deleteBundle-Dcc21Lbd.mjs} +9 -19
  94. package/.output/server/_ssr/{dialog-DS-nw-pA.mjs → dialog-cOmLTUV2.mjs} +2 -2
  95. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-B-r4u3Lg.mjs} +28 -5
  96. package/.output/server/_ssr/{downloadBundle-CNnYxYO2.mjs → downloadBundle-CexOFoZ4.mjs} +6 -7
  97. package/.output/server/_ssr/empty-BHoY_5jt.mjs +49 -0
  98. package/.output/server/_ssr/{table-CnZmon_Z.mjs → field-mjhcNEXD.mjs} +63 -51
  99. package/.output/server/_ssr/getBundleChildren-DbDXe9wB.mjs +22 -0
  100. package/.output/server/_ssr/{input-group-BpsnmvZw.mjs → input-group-96H30HWC.mjs} +2 -2
  101. package/.output/server/_ssr/insights-D25VDVaz.mjs +5 -0
  102. package/.output/server/_ssr/insights-D359GJFL.mjs +14 -0
  103. package/.output/server/_ssr/insights-DgFv1NsO.mjs +1238 -0
  104. package/.output/server/_ssr/insights-api-ChAKrbhG.mjs +105 -0
  105. package/.output/server/_ssr/insights-failures-WQ-ttjOx.mjs +44 -0
  106. package/.output/server/_ssr/insights-failures-rpc-BFsqlltN.mjs +21 -0
  107. package/.output/server/_ssr/insights-recovery-DkL6bxMW.mjs +28 -0
  108. package/.output/server/_ssr/insights-recovery-rpc-2P5m8F62.mjs +46 -0
  109. package/.output/server/_ssr/insights-recovery-rpc-Tj8vNC19.mjs +20 -0
  110. package/.output/server/_ssr/{insights-rpc-38DujK0G.mjs → insights-rpc-DrkVmV9o.mjs} +22 -14
  111. package/.output/server/_ssr/insights-search-BsalnNw-.mjs +25 -0
  112. package/.output/server/_ssr/insights-usage-1nVTQrLy.mjs +29 -0
  113. package/.output/server/_ssr/insights-usage-rpc-Ct_4xHhZ.mjs +29 -0
  114. package/.output/server/_ssr/insights-usage-rpc-DaYIRtFK.mjs +41 -0
  115. package/.output/server/_ssr/insightsRecovery-CpGucWN1.mjs +45 -0
  116. package/.output/server/_ssr/insightsUsage-JYpKZAF7.mjs +56 -0
  117. package/.output/server/_ssr/insights_.distribution-Bcu6uYs_.mjs +5 -0
  118. package/.output/server/_ssr/insights_.distribution-D3Csuyjw.mjs +14 -0
  119. package/.output/server/_ssr/insights_.distribution-jQZEF07J.mjs +335 -0
  120. package/.output/server/_ssr/installations-B8Vh54lH.mjs +69 -0
  121. package/.output/server/_ssr/installations-BI5kelHv.mjs +5 -0
  122. package/.output/server/_ssr/{installations-DiVKEF5T.mjs → installations-Cxikllmx.mjs} +517 -54
  123. package/.output/server/_ssr/listReleases-DqU9t1l3.mjs +79 -0
  124. package/.output/server/_ssr/releaseManagement-B3e7I8J9.mjs +11 -0
  125. package/.output/server/_ssr/{router-B9wG_9f8.mjs → router-CRkm-wHD.mjs} +117 -124
  126. package/.output/server/_ssr/routes-B3IJo_jL.mjs +292 -0
  127. package/.output/server/_ssr/{routes-D7Yh_jfj.mjs → routes-CNAi0Mmv.mjs} +176 -455
  128. package/.output/server/_ssr/runtime.server-NucbYjc7.mjs +1372 -0
  129. package/.output/server/_ssr/select-BkPAJFL7.mjs +107 -0
  130. package/.output/server/_ssr/{server-D_C2rMzf.mjs → server-DKJYsaCP.mjs} +6 -32
  131. package/.output/server/_ssr/{createSsrRpc-DjWNJ0uc.mjs → sidebar-Cw1VuC7d.mjs} +117 -63
  132. package/.output/server/_ssr/ssr.mjs +1 -1
  133. package/.output/server/_ssr/table-q0P9wz7x.mjs +53 -0
  134. package/.output/server/_ssr/updateFailures-DMU9f0pK.mjs +24 -0
  135. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-BzSO-fr-.mjs} +2 -2
  136. package/.output/server/_tanstack-start-manifest_v-Bb0gKDbb.mjs +124 -0
  137. package/.output/server/index.mjs +273 -168
  138. package/README.md +71 -65
  139. package/lib/index.d.mts +13 -11
  140. package/lib/vite-internal.mjs +6 -3
  141. package/package.json +8 -8
  142. package/src/components/AppSidebar.tsx +91 -71
  143. package/src/components/ConsoleAccessPage.tsx +5 -1
  144. package/src/components/ConsoleFeatureUnavailable.tsx +82 -0
  145. package/src/components/NotFoundPage.tsx +7 -7
  146. package/src/components/features/FeatureSlots.tsx +99 -0
  147. package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
  148. package/src/components/features/bundles/BundleMetadata.tsx +7 -4
  149. package/src/components/features/channels/ChannelManagementDialog.tsx +2 -5
  150. package/src/components/features/insights/AppUsage.tsx +370 -0
  151. package/src/components/features/insights/EstimatedCount.tsx +18 -0
  152. package/src/components/features/insights/EventDetails.tsx +117 -37
  153. package/src/components/features/insights/EventHistoryCard.tsx +112 -26
  154. package/src/components/features/insights/EventHistoryList.tsx +2 -2
  155. package/src/components/features/insights/InsightsControls.tsx +265 -102
  156. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  157. package/src/components/features/insights/InsightsInfo.tsx +48 -0
  158. package/src/components/features/insights/InsightsOverview.tsx +176 -173
  159. package/src/components/features/insights/InsightsPageHeader.tsx +35 -20
  160. package/src/components/features/insights/InsightsPeriodSelector.tsx +89 -0
  161. package/src/components/features/insights/InstallationHistoryCard.tsx +52 -10
  162. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  163. package/src/components/features/insights/ReleaseActivity.tsx +188 -0
  164. package/src/components/features/insights/ReportingDevicesSummary.tsx +65 -0
  165. package/src/components/features/insights/UpdateFailures.tsx +319 -0
  166. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  167. package/src/components/features/releases/ReleaseEditorSheet.tsx +24 -1
  168. package/src/components/ui/card.tsx +1 -1
  169. package/src/components/ui/empty.tsx +101 -0
  170. package/src/components/ui/scroll-area.tsx +52 -0
  171. package/src/components/ui/sidebar.tsx +22 -29
  172. package/src/components/ui/tabs.tsx +81 -0
  173. package/src/index.ts +12 -17
  174. package/src/lib/api-keys-api.ts +0 -28
  175. package/src/lib/api-keys-rpc.ts +27 -38
  176. package/src/lib/api-rpc.ts +197 -221
  177. package/src/lib/api.ts +11 -13
  178. package/src/lib/bundle-activity.ts +31 -0
  179. package/src/lib/console-access.ts +20 -0
  180. package/src/lib/console-features-api.ts +68 -0
  181. package/src/lib/console-features-rpc.ts +13 -0
  182. package/src/lib/console-features.ts +91 -0
  183. package/src/lib/insights-api.ts +37 -1
  184. package/src/lib/insights-failures-rpc.ts +21 -0
  185. package/src/lib/insights-failures.ts +129 -0
  186. package/src/lib/insights-recovery-rpc.ts +51 -0
  187. package/src/lib/insights-recovery.ts +68 -0
  188. package/src/lib/insights-retention.ts +21 -0
  189. package/src/lib/insights-rpc.ts +30 -12
  190. package/src/lib/insights-search.ts +58 -0
  191. package/src/lib/insights-usage-rpc.ts +29 -0
  192. package/src/lib/insights-usage.ts +74 -0
  193. package/src/lib/insights-view.ts +38 -2
  194. package/src/lib/scroll-restoration.ts +21 -0
  195. package/src/lib/server/adminInsights.ts +124 -0
  196. package/src/lib/server/auth.server.ts +13 -5
  197. package/src/lib/server/bundleActivity.ts +37 -0
  198. package/src/lib/server/config.server.ts +16 -32
  199. package/src/lib/server/console-feature-apis.ts +59 -0
  200. package/src/lib/server/console-runtime.server.ts +6 -40
  201. package/src/lib/server/deleteBundle.ts +16 -25
  202. package/src/lib/server/downloadBundle.ts +7 -10
  203. package/src/lib/server/getBundleChildren.ts +31 -122
  204. package/src/lib/server/insightsRecovery.ts +55 -0
  205. package/src/lib/server/insightsUsage.ts +63 -0
  206. package/src/lib/server/listReleases.ts +109 -44
  207. package/src/lib/server/releaseReachability.ts +4 -3
  208. package/src/lib/server/runtime.server.ts +132 -31
  209. package/src/lib/server/updateFailures.ts +31 -0
  210. package/src/routeTree.gen.ts +21 -21
  211. package/src/router.tsx +3 -2
  212. package/src/routes/-installations-search.ts +32 -8
  213. package/src/routes/-releases-search.ts +76 -29
  214. package/src/routes/__root.tsx +10 -4
  215. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  216. package/src/routes/api-keys.tsx +5 -2
  217. package/src/routes/index.tsx +167 -104
  218. package/src/routes/insights.tsx +100 -59
  219. package/src/routes/insights_.distribution.tsx +398 -0
  220. package/src/routes/installations.tsx +98 -41
  221. package/src/vite-internal.ts +6 -3
  222. package/.output/public/assets/HashValueDisplay-CB0Eskit.js +0 -1
  223. package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +0 -1
  224. package/.output/public/assets/api-keys-BzKocqRy.js +0 -1
  225. package/.output/public/assets/api-keys-api-BHcODB7q.js +0 -1
  226. package/.output/public/assets/card-Dhr_eFYj.js +0 -1
  227. package/.output/public/assets/chart-no-axes-combined-Dy4WJv2U.js +0 -1
  228. package/.output/public/assets/composite-Bp98A0Ld.js +0 -1
  229. package/.output/public/assets/createServerFn-CA8fs7QD.js +0 -3
  230. package/.output/public/assets/dialog-CUTrcPlB.js +0 -1
  231. package/.output/public/assets/dist-C_NydL0e.js +0 -1
  232. package/.output/public/assets/index-DdAz-CXv.js +0 -10
  233. package/.output/public/assets/input-group-cSOG4wh_.js +0 -1
  234. package/.output/public/assets/insights-C0PBSZ-n.js +0 -1
  235. package/.output/public/assets/installations-CE33wgbY.js +0 -2
  236. package/.output/public/assets/installations-CStZja8x.js +0 -1
  237. package/.output/public/assets/lazyRouteComponent-Ccp3bwBY.js +0 -1
  238. package/.output/public/assets/link-CI8idAUi.js +0 -1
  239. package/.output/public/assets/loader-circle-BoxLrsOu.js +0 -1
  240. package/.output/public/assets/preload-helper-CQ36nxok.js +0 -1
  241. package/.output/public/assets/refresh-cw-Bqc72UZG.js +0 -1
  242. package/.output/public/assets/routes-DGVXdzpw.js +0 -2
  243. package/.output/public/assets/routes-DTlwOr8I.js +0 -1
  244. package/.output/public/assets/shield-check-uK3MHWJZ.js +0 -1
  245. package/.output/public/assets/signing-CMf4aqDO.js +0 -1
  246. package/.output/public/assets/styles-BCvbtKsm.css +0 -2
  247. package/.output/public/assets/table-2vcV89QB.js +0 -1
  248. package/.output/public/assets/useCompositeListItem-CHLITE_4.js +0 -1
  249. package/.output/public/assets/x-DCd0j8c6.js +0 -1
  250. package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +0 -484
  251. package/.output/server/_ssr/api-keys-api-BUPQVSpk.mjs +0 -60
  252. package/.output/server/_ssr/api-keys-rpc-Cs7tS5_j.mjs +0 -136
  253. package/.output/server/_ssr/api-rpc-tAupfGQm.mjs +0 -1399
  254. package/.output/server/_ssr/auth.server-DW71WzsD.mjs +0 -47
  255. package/.output/server/_ssr/bundle-signing-rpc-BhnBw0-d.mjs +0 -16
  256. package/.output/server/_ssr/bundle-signing.server-C4NW5mWx.mjs +0 -12
  257. package/.output/server/_ssr/card-BRiPmi0C.mjs +0 -108
  258. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  259. package/.output/server/_ssr/config.server-afDuAwaG.mjs +0 -368
  260. package/.output/server/_ssr/databaseJsonValue-d6I3nAS4.mjs +0 -45
  261. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  262. package/.output/server/_ssr/getBundleChildren-C0vh4ZvE.mjs +0 -50
  263. package/.output/server/_ssr/insights-BdS364Xu.mjs +0 -460
  264. package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +0 -303
  265. package/.output/server/_ssr/installations-CtA59MQG.mjs +0 -29
  266. package/.output/server/_ssr/routes-CKrrS2q2.mjs +0 -37
  267. package/.output/server/_ssr/runtime.server-DacU1TBV.mjs +0 -438
  268. package/.output/server/_ssr/signing-Dz1WkZOf.mjs +0 -133
  269. package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +0 -97
  270. package/src/components/features/insights/InsightsBundleReports.tsx +0 -51
  271. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  272. package/src/lib/bundle-signing-api.ts +0 -14
  273. package/src/lib/bundle-signing-rpc.ts +0 -16
  274. package/src/lib/server/bundle-signing.server.ts +0 -23
  275. package/src/routes/signing.tsx +0 -37
@@ -0,0 +1,79 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/listReleases-DqU9t1l3.js
2
+ var isRecord = (value) => typeof value === "object" && value !== null;
3
+ var text = (value, name) => {
4
+ if (typeof value !== "string" || value.length === 0) throw new Error(`Release filter ${name} is required.`);
5
+ return value;
6
+ };
7
+ var enabledOf = (value) => {
8
+ if (value === void 0) return {};
9
+ if (typeof value !== "boolean") throw new Error("Release filter enabled must be true or false.");
10
+ return { enabled: value };
11
+ };
12
+ /**
13
+ * A release list's filter: none, a channel with its platform (and enabled),
14
+ * a bundle, or a scope (and enabled). Those are the sets the release indexes
15
+ * serve, so any other combination is refused.
16
+ */
17
+ var readReleaseFilter = (value) => {
18
+ if (value === void 0) return { kind: "all" };
19
+ if (!isRecord(value)) throw new Error("Invalid release filter.");
20
+ switch (value.kind) {
21
+ case "all": return { kind: "all" };
22
+ case "channelPlatform":
23
+ if (value.platform !== "ios" && value.platform !== "android") throw new Error("Release filter platform must be ios or android.");
24
+ return {
25
+ kind: "channelPlatform",
26
+ channelId: text(value.channelId, "channelId"),
27
+ platform: value.platform,
28
+ ...enabledOf(value.enabled)
29
+ };
30
+ case "bundle": return {
31
+ kind: "bundle",
32
+ bundleId: text(value.bundleId, "bundleId")
33
+ };
34
+ case "scope": return {
35
+ kind: "scope",
36
+ scopeKey: text(value.scopeKey, "scopeKey"),
37
+ ...enabledOf(value.enabled)
38
+ };
39
+ default: throw new Error("Invalid release filter.");
40
+ }
41
+ };
42
+ /**
43
+ * One page of releases, newest first, through the index the filter names:
44
+ * each page reads only its own rows. `next` is set for a full page, so the
45
+ * last page may lead to an empty one.
46
+ */
47
+ async function listReleases(core, input) {
48
+ const { filter, limit } = input;
49
+ if (input.afterReleaseId !== void 0) {
50
+ const data = (await core.listReleases({
51
+ filter,
52
+ order: "asc",
53
+ after: input.afterReleaseId,
54
+ limit
55
+ })).reverse();
56
+ const first = data[0]?.id;
57
+ const last = data.at(-1)?.id;
58
+ return {
59
+ data,
60
+ ...last === void 0 ? {} : { next: last },
61
+ ...first !== void 0 && data.length === limit ? { previous: first } : {}
62
+ };
63
+ }
64
+ const data = await core.listReleases({
65
+ filter,
66
+ order: "desc",
67
+ limit,
68
+ ...input.beforeReleaseId === void 0 ? {} : { after: input.beforeReleaseId }
69
+ });
70
+ const first = data[0]?.id;
71
+ const last = data.at(-1)?.id;
72
+ return {
73
+ data,
74
+ ...last !== void 0 && data.length === limit ? { next: last } : {},
75
+ ...first !== void 0 && input.beforeReleaseId !== void 0 ? { previous: first } : {}
76
+ };
77
+ }
78
+ //#endregion
79
+ export { readReleaseFilter as n, listReleases as t };
@@ -0,0 +1,11 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/releaseManagement-B3e7I8J9.js
2
+ var ReleaseManagementError = class extends Error {
3
+ code;
4
+ name = "ReleaseManagementError";
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ }
9
+ };
10
+ //#endregion
11
+ export { ReleaseManagementError as t };
@@ -1,17 +1,20 @@
1
- import { r as __toESM } from "../_runtime.mjs";
2
- import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
3
- import { J as require_react, q as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
- import { F as ChartNoAxesCombined, S as Info, _ as Moon, c as ShieldCheck, g as OctagonX, k as CircleCheck, m as Package, n as TriangleAlert, o as Sun, x as KeyRound, y as LoaderCircle } from "../_libs/lucide-react.mjs";
5
- import { S as buttonVariants, a as SidebarContent, b as TooltipProvider, c as SidebarGroupContent, d as SidebarInset, f as SidebarMenu, h as SidebarProvider, i as Sidebar, l as SidebarGroupLabel, m as SidebarMenuItem, o as SidebarFooter, p as SidebarMenuButton, s as SidebarGroup, t as Button$1, u as SidebarHeader, w as createSsrRpc } from "./createSsrRpc-DjWNJ0uc.mjs";
6
- import { a as HeadContent, d as lazyRouteComponent, f as createFileRoute, i as Scripts, l as createRouter, m as Link, o as useRouterState, p as createRootRouteWithContext, u as Outlet } from "../_libs/@tanstack/react-router+[...].mjs";
1
+ import { i as __toESM } from "../_runtime.mjs";
2
+ import { l as createServerFn } from "./createMiddleware-B_I3Ll4M.mjs";
3
+ import { mt as require_react, pt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
+ import { S as Info, g as Moon, h as OctagonX, k as CircleCheck, m as Package, n as TriangleAlert, o as Sun, v as LogOut, y as LoaderCircle } from "../_libs/lucide-react.mjs";
5
+ import { T as TooltipProvider, _ as SidebarMenu, b as SidebarProvider, d as SidebarFooter, f as SidebarGroup, g as SidebarInset, h as SidebarHeader, j as useSidebar, k as createSsrRpc, l as Sidebar, m as SidebarGroupLabel, p as SidebarGroupContent, t as Button$1, u as SidebarContent, v as SidebarMenuButton, y as SidebarMenuItem } from "./sidebar-Cw1VuC7d.mjs";
7
6
  import { t as QueryClient } from "../_libs/tanstack__query-core.mjs";
8
- import { n as useApiKeyCapabilityQuery, t as ensureApiKeyRouteAccess } from "./api-keys-api-BUPQVSpk.mjs";
9
- import { t as Toaster } from "../_libs/sonner.mjs";
10
- import { n as getInsightsScrollRestorationKey, t as Route$6 } from "./installations-CtA59MQG.mjs";
11
- import { t as Route$7 } from "./routes-CKrrS2q2.mjs";
7
+ import { n as toast, t as Toaster } from "../_libs/sonner.mjs";
8
+ import { a as HeadContent, d as Outlet, f as lazyRouteComponent, h as Link, i as Scripts, m as createRootRouteWithContext, p as createFileRoute, s as useRouterState, u as createRouter } from "../_libs/@tanstack/react-router+[...].mjs";
9
+ import { r as requireConsoleFeature, t as consoleFeaturesQueryOptions } from "./console-features-api-B-KVuo4p.mjs";
10
+ import { t as NotFoundPage } from "./NotFoundPage-Cd-A8ock.mjs";
11
+ import { t as Route$4 } from "./insights-D359GJFL.mjs";
12
+ import { t as Route$5 } from "./insights_.distribution-D3Csuyjw.mjs";
13
+ import { n as Route$6 } from "./installations-B8Vh54lH.mjs";
14
+ import { n as Route$7, o as useFeatureUi } from "./routes-B3IJo_jL.mjs";
12
15
  import { t as setupRouterSsrQueryIntegration } from "../_libs/@tanstack/react-router-ssr-query+[...].mjs";
13
16
  import { t as z } from "../_libs/next-themes.mjs";
14
- //#region node_modules/.nitro/vite/services/ssr/assets/router-B9wG_9f8.js
17
+ //#region node_modules/.nitro/vite/services/ssr/assets/router-CRkm-wHD.js
15
18
  var import_react = /* @__PURE__ */ __toESM(require_react());
16
19
  var import_jsx_runtime = require_jsx_runtime();
17
20
  function HotUpdaterLogo({ className }) {
@@ -108,14 +111,54 @@ function useTheme$1() {
108
111
  if (context === void 0) throw new Error("useTheme must be used within a ThemeProvider");
109
112
  return context;
110
113
  }
111
- function AppSidebar() {
112
- const apiKeyCapability = useApiKeyCapabilityQuery();
114
+ function AppSidebar({ canSignOut = false }) {
115
+ const { setOpenMobile } = useSidebar();
116
+ const closeMobileSidebar = () => setOpenMobile(false);
117
+ const [signingOut, setSigningOut] = (0, import_react.useState)(false);
118
+ const featureUi = useFeatureUi();
113
119
  const { theme, setTheme } = useTheme$1();
114
120
  const currentPath = useRouterState().location.pathname;
115
- const isBundlesActive = currentPath === "/";
116
- const isInsightsActive = currentPath === "/insights" || currentPath === "/installations";
117
- const isApiKeysActive = currentPath === "/api-keys";
118
- const isSigningActive = currentPath === "/signing";
121
+ const navigation = [{
122
+ label: "Bundles",
123
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Package, {}),
124
+ active: currentPath === "/",
125
+ link: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
126
+ to: "/",
127
+ onClick: closeMobileSidebar,
128
+ search: {
129
+ afterReleaseId: void 0,
130
+ beforeReleaseId: void 0,
131
+ channelId: void 0,
132
+ enabled: void 0,
133
+ releaseId: void 0,
134
+ platform: void 0,
135
+ bundleId: void 0,
136
+ scopeKey: void 0
137
+ }
138
+ })
139
+ }, ...featureUi.flatMap(({ features, label, navigation }) => navigation === void 0 ? [] : [{
140
+ label,
141
+ icon: navigation.icon,
142
+ active: navigation.paths.includes(currentPath),
143
+ link: navigation.link({
144
+ features,
145
+ onClick: closeMobileSidebar
146
+ })
147
+ }])];
148
+ const signOut = async () => {
149
+ setSigningOut(true);
150
+ try {
151
+ if (!(await fetch("/api/auth/sign-out", {
152
+ body: "{}",
153
+ headers: { "content-type": "application/json" },
154
+ method: "POST"
155
+ })).ok) throw new Error("Sign-out failed. Please try again.");
156
+ window.location.reload();
157
+ } catch {
158
+ setSigningOut(false);
159
+ toast.error("Sign-out failed. Please try again.");
160
+ }
161
+ };
119
162
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Sidebar, {
120
163
  collapsible: "icon",
121
164
  children: [
@@ -123,6 +166,7 @@ function AppSidebar() {
123
166
  className: "h-12 justify-center",
124
167
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
125
168
  to: "/",
169
+ onClick: closeMobileSidebar,
126
170
  search: {
127
171
  afterReleaseId: void 0,
128
172
  beforeReleaseId: void 0,
@@ -130,9 +174,8 @@ function AppSidebar() {
130
174
  enabled: void 0,
131
175
  releaseId: void 0,
132
176
  platform: void 0,
133
- targetAppVersion: void 0,
134
177
  bundleId: void 0,
135
- page: void 0
178
+ scopeKey: void 0
136
179
  },
137
180
  className: "flex items-center gap-3 p-1 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:p-2",
138
181
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(HotUpdaterLogo, { className: "h-7 w-7 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -147,50 +190,22 @@ function AppSidebar() {
147
190
  })]
148
191
  })
149
192
  }),
150
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarGroup, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarGroupLabel, { children: "Navigation" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarGroupContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenu, { children: [
151
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
152
- isActive: isBundlesActive,
153
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
154
- to: "/",
155
- search: {
156
- afterReleaseId: void 0,
157
- beforeReleaseId: void 0,
158
- channelId: void 0,
159
- enabled: void 0,
160
- releaseId: void 0,
161
- platform: void 0,
162
- targetAppVersion: void 0,
163
- bundleId: void 0,
164
- page: void 0
165
- }
166
- }),
167
- tooltip: "Bundles",
168
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Package, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Bundles" })]
169
- }) }),
170
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
171
- isActive: isInsightsActive,
172
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/insights" }),
173
- tooltip: "Insights",
174
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartNoAxesCombined, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Insights" })]
175
- }) }),
176
- apiKeyCapability.data?.apiKeys ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
177
- isActive: isApiKeysActive,
178
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/api-keys" }),
179
- tooltip: "API keys",
180
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(KeyRound, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "API keys" })]
181
- }) }) : null,
182
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
183
- isActive: isSigningActive,
184
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/signing" }),
185
- tooltip: "Bundle signing",
186
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShieldCheck, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Bundle signing" })]
187
- }) })
188
- ] }) })] }) }),
189
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarFooter, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenu, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
193
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarGroup, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarGroupLabel, { children: "Navigation" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarGroupContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenu, { children: navigation.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
194
+ isActive: item.active,
195
+ render: item.link,
196
+ tooltip: item.label,
197
+ children: [item.icon, /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: item.label })]
198
+ }) }, item.label)) }) })] }) }),
199
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarFooter, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenu, { children: [canSignOut ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
200
+ disabled: signingOut,
201
+ onClick: () => void signOut(),
202
+ tooltip: "Sign out",
203
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LogOut, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: signingOut ? "Signing out…" : "Sign out" })]
204
+ }) }) : null, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
190
205
  onClick: () => setTheme(theme === "dark" ? "light" : "dark"),
191
206
  tooltip: theme === "dark" ? "Light mode" : "Dark mode",
192
207
  children: [theme === "dark" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Sun, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Moon, { className: "h-4 w-4" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: theme === "dark" ? "Light mode" : "Dark mode" })]
193
- }) }) }) })
208
+ }) })] }) })
194
209
  ]
195
210
  });
196
211
  }
@@ -226,7 +241,11 @@ function ConsoleAccessPage({ access, providers }) {
226
241
  setSigningOut(true);
227
242
  setError(null);
228
243
  try {
229
- if (!(await fetch("/api/auth/sign-out", { method: "POST" })).ok) throw new Error("Sign-out failed.");
244
+ if (!(await fetch("/api/auth/sign-out", {
245
+ body: "{}",
246
+ headers: { "content-type": "application/json" },
247
+ method: "POST"
248
+ })).ok) throw new Error("Sign-out failed.");
230
249
  window.location.reload();
231
250
  } catch (cause) {
232
251
  setSigningOut(false);
@@ -291,36 +310,6 @@ function ConsoleAccessPage({ access, providers }) {
291
310
  })
292
311
  });
293
312
  }
294
- var homeSearch = {
295
- channel: void 0,
296
- platform: void 0,
297
- targetAppVersion: void 0,
298
- page: void 0,
299
- after: void 0,
300
- before: void 0,
301
- bundleId: void 0,
302
- expandedBundleId: void 0
303
- };
304
- function NotFoundPage() {
305
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
306
- className: "flex min-h-svh flex-1 items-center justify-center px-6 py-10",
307
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
308
- className: "flex max-w-md flex-col items-center text-center",
309
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
310
- className: "text-2xl font-semibold tracking-tight text-foreground",
311
- children: "Page not found"
312
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
313
- className: buttonVariants({
314
- className: "mt-6",
315
- size: "lg"
316
- }),
317
- to: "/",
318
- search: homeSearch,
319
- children: "Go to home"
320
- })]
321
- })
322
- });
323
- }
324
313
  var Toaster$1 = ({ ...props }) => {
325
314
  const { theme = "system" } = z();
326
315
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Toaster, {
@@ -345,8 +334,8 @@ var Toaster$1 = ({ ...props }) => {
345
334
  };
346
335
  var getConsoleAccessRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("c504696e68ba764b48c48aa8a40275938640941e473cf9cfdd7b2322d99f9d13"));
347
336
  var getConsoleAuthProvidersRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("fa8c48f0489d97c62b9b68fd0caf0a61b15bad25a42b3866ec36264b4b30bb74"));
348
- var styles_default = "/assets/styles-BCvbtKsm.css";
349
- var Route$5 = createRootRouteWithContext()({
337
+ var styles_default = "/assets/styles-Dn0pK1EX.css";
338
+ var Route$3 = createRootRouteWithContext()({
350
339
  head: () => ({
351
340
  meta: [
352
341
  { charSet: "utf-8" },
@@ -369,8 +358,9 @@ var Route$5 = createRootRouteWithContext()({
369
358
  href: styles_default
370
359
  }]
371
360
  }),
372
- loader: async () => {
361
+ loader: async ({ context }) => {
373
362
  const [access, providers] = await Promise.all([getConsoleAccessRpc(), getConsoleAuthProvidersRpc()]);
363
+ if (access.status === "authorized") await context.queryClient.prefetchQuery(consoleFeaturesQueryOptions());
374
364
  return {
375
365
  access,
376
366
  providers
@@ -403,31 +393,29 @@ function RootDocument({ children }) {
403
393
  });
404
394
  }
405
395
  function RootLayout() {
406
- const { access, providers } = Route$5.useLoaderData();
396
+ const { access, providers } = Route$3.useLoaderData();
407
397
  if (access.status !== "authorized") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConsoleAccessPage, {
408
398
  access,
409
399
  providers
410
400
  });
411
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthorizedConsole, {});
401
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthorizedConsole, { canSignOut: providers.length > 0 });
412
402
  }
413
- function AuthorizedConsole() {
403
+ function AuthorizedConsole({ canSignOut }) {
414
404
  (0, import_react.useEffect)(() => {}, []);
415
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarProvider, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppSidebar, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarInset, {
405
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarProvider, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppSidebar, { canSignOut }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarInset, {
416
406
  className: "min-h-0 min-w-0 overflow-hidden",
417
407
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Outlet, {})
418
408
  })] });
419
409
  }
420
- var $$splitComponentImporter$2 = () => import("./signing-Dz1WkZOf.mjs");
421
- var Route$4 = createFileRoute("/signing")({ component: lazyRouteComponent($$splitComponentImporter$2, "component") });
422
- var $$splitComponentImporter$1 = () => import("./insights-BdS364Xu.mjs");
423
- var Route$3 = createFileRoute("/insights")({ component: lazyRouteComponent($$splitComponentImporter$1, "component") });
424
- var $$splitComponentImporter = () => import("./api-keys-CZeTPQys.mjs");
410
+ var $$splitComponentImporter = () => import("./api-keys-CT3HG7KT.mjs");
411
+ var $$splitNotFoundComponentImporter = () => import("./api-keys-Dvvy1sem.mjs");
425
412
  var Route$2 = createFileRoute("/api-keys")({
426
- beforeLoad: ({ context }) => ensureApiKeyRouteAccess(context.queryClient),
413
+ beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "apiKeys"),
414
+ notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
427
415
  component: lazyRouteComponent($$splitComponentImporter, "component")
428
416
  });
429
417
  var handleAuthRequest = async ({ request }) => {
430
- const { handleConsoleAuth } = await import("./auth.server-DW71WzsD.mjs");
418
+ const { handleConsoleAuth } = await import("./auth.server-Ccqz2iVv.mjs");
431
419
  return handleConsoleAuth(request);
432
420
  };
433
421
  var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
@@ -435,63 +423,68 @@ var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
435
423
  POST: handleAuthRequest
436
424
  } } });
437
425
  var Route = createFileRoute("/api/bundles/$bundleId/download")({ server: { handlers: { GET: async ({ params, request }) => {
438
- const { prepareConfig } = await import("./config.server-afDuAwaG.mjs");
439
- const { downloadBundle } = await import("./downloadBundle-CNnYxYO2.mjs");
440
- const { databaseClient, storagePlugin } = await prepareConfig(request);
426
+ const { prepareConfig } = await import("./config.server-DyypN6cQ.mjs");
427
+ const { downloadBundle } = await import("./downloadBundle-CexOFoZ4.mjs");
428
+ const { core, storagePlugin } = await prepareConfig(request);
441
429
  return downloadBundle(params.bundleId, {
442
- databaseClient,
430
+ core,
443
431
  storagePlugin
444
432
  });
445
433
  } } } });
446
- var SigningRoute = Route$4.update({
447
- id: "/signing",
448
- path: "/signing",
449
- getParentRoute: () => Route$5
450
- });
451
434
  var InstallationsRoute = Route$6.update({
452
435
  id: "/installations",
453
436
  path: "/installations",
454
- getParentRoute: () => Route$5
437
+ getParentRoute: () => Route$3
455
438
  });
456
- var InsightsRoute = Route$3.update({
439
+ var InsightsRoute = Route$4.update({
457
440
  id: "/insights",
458
441
  path: "/insights",
459
- getParentRoute: () => Route$5
442
+ getParentRoute: () => Route$3
460
443
  });
461
444
  var ApiKeysRoute = Route$2.update({
462
445
  id: "/api-keys",
463
446
  path: "/api-keys",
464
- getParentRoute: () => Route$5
447
+ getParentRoute: () => Route$3
465
448
  });
466
449
  var rootRouteChildren = {
467
450
  IndexRoute: Route$7.update({
468
451
  id: "/",
469
452
  path: "/",
470
- getParentRoute: () => Route$5
453
+ getParentRoute: () => Route$3
471
454
  }),
472
455
  ApiKeysRoute,
473
456
  InsightsRoute,
474
457
  InstallationsRoute,
475
- SigningRoute,
458
+ InsightsDistributionRoute: Route$5.update({
459
+ id: "/insights_/distribution",
460
+ path: "/insights/distribution",
461
+ getParentRoute: () => Route$3
462
+ }),
476
463
  ApiAuthSplatRoute: Route$1.update({
477
464
  id: "/api/auth/$",
478
465
  path: "/api/auth/$",
479
- getParentRoute: () => Route$5
466
+ getParentRoute: () => Route$3
480
467
  }),
481
468
  ApiBundlesBundleIdDownloadRoute: Route.update({
482
469
  id: "/api/bundles/$bundleId/download",
483
470
  path: "/api/bundles/$bundleId/download",
484
- getParentRoute: () => Route$5
471
+ getParentRoute: () => Route$3
485
472
  })
486
473
  };
487
- var routeTree = Route$5._addFileChildren(rootRouteChildren)._addFileTypes();
474
+ var routeTree = Route$3._addFileChildren(rootRouteChildren)._addFileTypes();
475
+ /** A location's scroll-restoration key: its route's own, else its history entry's. */
476
+ var routeScrollRestorationKey = (router, location) => {
477
+ const { foundRoute } = router.getMatchedRoutes(location.pathname);
478
+ const routeKey = foundRoute?.options.staticData?.scrollRestorationKey;
479
+ return routeKey?.(location) ?? location.state.__TSR_key;
480
+ };
488
481
  var getRouter = () => {
489
482
  const queryClient = new QueryClient();
490
483
  const router = createRouter({
491
484
  routeTree,
492
485
  context: { queryClient },
493
486
  scrollRestoration: true,
494
- getScrollRestorationKey: getInsightsScrollRestorationKey,
487
+ getScrollRestorationKey: (location) => routeScrollRestorationKey(router, location),
495
488
  defaultPreloadStaleTime: 0
496
489
  });
497
490
  setupRouterSsrQueryIntegration({