@hot-updater/console 1.0.0-rc.4 → 1.0.0-rc.41

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 (330) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-DRzeMGRM.js +1 -0
  3. package/.output/public/assets/EventDetails-SB5ygJzS.js +1 -0
  4. package/.output/public/assets/HashValueDisplay-BFX_kY3-.js +1 -0
  5. package/.output/public/assets/InsightsInfo-btYppp0B.js +1 -0
  6. package/.output/public/assets/InsightsPageHeader-Ba8psD8t.js +1 -0
  7. package/.output/public/assets/NotFoundPage-CyRG2eca.js +1 -0
  8. package/.output/public/assets/alert-dialog-Bbk_4-WJ.js +1 -0
  9. package/.output/public/assets/api-DUgI6yOI.js +1 -0
  10. package/.output/public/assets/api-keys-CIO9L_wu.js +1 -0
  11. package/.output/public/assets/api-keys-CmkNKOhS.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-BMsI3Bj8.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-BEfQ2_7f.js +11 -0
  22. package/.output/public/assets/input-group-ja_30qaF.js +1 -0
  23. package/.output/public/assets/insights-B0ib9qOE.js +2 -0
  24. package/.output/public/assets/insights-BIMJx-0p.js +1 -0
  25. package/.output/public/assets/insights-CndqcWEj.js +42 -0
  26. package/.output/public/assets/insights-api-B6Ewc-OG.js +1 -0
  27. package/.output/public/assets/insights-usage-rpc-DYEhsCKT.js +1 -0
  28. package/.output/public/assets/insights_.distribution-B26PMy4k.js +2 -0
  29. package/.output/public/assets/insights_.distribution-BBDtqqYS.js +1 -0
  30. package/.output/public/assets/insights_.distribution-DhHmYS8k.js +1 -0
  31. package/.output/public/assets/installations-C3cMuwRx.js +1 -0
  32. package/.output/public/assets/installations-C3yrjwDh.js +2 -0
  33. package/.output/public/assets/installations-D3edlN75.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-0i-gDkeU.js +1 -0
  38. package/.output/public/assets/remote-config-An1ROIOQ.js +6 -0
  39. package/.output/public/assets/remote-config-CoeWgA9i.js +1 -0
  40. package/.output/public/assets/routes-DNoaJIQV.js +2 -0
  41. package/.output/public/assets/routes-cWBDtghZ.js +1 -0
  42. package/.output/public/assets/search-DaTDPW25.js +1 -0
  43. package/.output/public/assets/select-CZMQKT7F.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-D8mxMvCB.css +2 -0
  47. package/.output/public/assets/switch-CU4-fupc.js +1 -0
  48. package/.output/public/assets/table-Gm4qRWwE.js +1 -0
  49. package/.output/public/assets/tabs-R1I8CRjR.js +1 -0
  50. package/.output/public/assets/undo-2-CmrHjwFc.js +1 -0
  51. package/.output/public/assets/useCompositeListItem-BaPeC9ZO.js +1 -0
  52. package/.output/public/assets/valueToPercent-CH8GCHaL.js +1 -0
  53. package/.output/server/__23tanstack-start-server-fn-resolver-DTAqlLRd.mjs +178 -0
  54. package/.output/server/_libs/@base-ui/react+[...].mjs +6450 -2741
  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 +235 -31
  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-BNoVW3Dv.mjs +13 -0
  67. package/.output/server/_ssr/ConsoleFeatureUnavailable-BPFa-cmJ.mjs +58 -0
  68. package/.output/server/_ssr/EventDetails-9CeshfdR.mjs +344 -0
  69. package/.output/server/_ssr/HashValueDisplay-DXZlkcps.mjs +55 -0
  70. package/.output/server/_ssr/InsightsInfo-DLNdJQ0m.mjs +75 -0
  71. package/.output/server/_ssr/InsightsPageHeader-DZGVDgvv.mjs +145 -0
  72. package/.output/server/_ssr/NotFoundPage-mYHHg-2s.mjs +37 -0
  73. package/.output/server/_ssr/{dialog-DUaIgpgd.mjs → alert-dialog-Chkim7vZ.mjs} +6 -83
  74. package/.output/server/_ssr/api-C-Il5-sa.mjs +203 -0
  75. package/.output/server/_ssr/api-keys-01FGqj4d.mjs +5 -0
  76. package/.output/server/_ssr/{api-keys-DJml_XoK.mjs → api-keys-B_f9h7ln.mjs} +48 -10
  77. package/.output/server/_ssr/api-keys-rpc-Cf4YCyFc.mjs +52 -0
  78. package/.output/server/_ssr/api-rpc-DRqwxxT_.mjs +296 -0
  79. package/.output/server/_ssr/{auth-BF8mbAgF.mjs → auth-UP0wXs4i.mjs} +1 -1
  80. package/.output/server/_ssr/{auth-rpc-D_hv52-J.mjs → auth-rpc-D8nFpU9C.mjs} +6 -6
  81. package/.output/server/_ssr/auth.server-COZoXu4i.mjs +5425 -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-Dm2l7w0O.mjs +36 -0
  85. package/.output/server/_ssr/console-access--o9FXikU.mjs +17 -0
  86. package/.output/server/_ssr/console-features-BftSkf3f.mjs +60 -0
  87. package/.output/server/_ssr/console-features-api-CYclUQ4h.mjs +43 -0
  88. package/.output/server/_ssr/console-features-rpc-1WaAkPM_.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-BUuNU-qt.mjs +74 -0
  94. package/.output/server/_ssr/dialog-mfSANqjC.mjs +84 -0
  95. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-wmnTk7w6.mjs} +140 -6
  96. package/.output/server/_ssr/{downloadBundle-B3ert-pY.mjs → downloadBundle-DViuIa9U.mjs} +10 -10
  97. package/.output/server/_ssr/empty-BPayFad3.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-DjZ5t7rH.mjs +189 -0
  101. package/.output/server/_ssr/getBundleChildren-CmjDg6Re.mjs +22 -0
  102. package/.output/server/_ssr/{input-group-Bb8ueylQ.mjs → input-group-Dx-MEkNM.mjs} +3 -52
  103. package/.output/server/_ssr/insights-BopxyJjk.mjs +14 -0
  104. package/.output/server/_ssr/insights-Bvm03d61.mjs +5 -0
  105. package/.output/server/_ssr/insights-CrLAHSDy.mjs +2315 -0
  106. package/.output/server/_ssr/insights-api-Bg8ZV_h_.mjs +122 -0
  107. package/.output/server/_ssr/insights-errors-BjnFUyZj.mjs +34 -0
  108. package/.output/server/_ssr/insights-failures-rpc-tyy5m9Cc.mjs +36 -0
  109. package/.output/server/_ssr/insights-failures-xaa41Buf.mjs +46 -0
  110. package/.output/server/_ssr/{insights-recovery-DSFM-YTL.mjs → insights-recovery-BWQhiZaF.mjs} +9 -2
  111. package/.output/server/_ssr/insights-recovery-rpc-CPJOiJAV.mjs +32 -0
  112. package/.output/server/_ssr/{insights-rpc-DrIQCjpD.mjs → insights-rpc-DoC3hla9.mjs} +22 -14
  113. package/.output/server/_ssr/insights-usage-BpBM0U0c.mjs +29 -0
  114. package/.output/server/_ssr/insights-usage-rpc-CFuTYp3T.mjs +29 -0
  115. package/.output/server/_ssr/insights-usage-rpc-O2ruP4iE.mjs +41 -0
  116. package/.output/server/_ssr/insightsUsage-CzhVjsc8.mjs +56 -0
  117. package/.output/server/_ssr/insights_.distribution-B3BVPD00.mjs +16 -0
  118. package/.output/server/_ssr/insights_.distribution-BMoisxRG.mjs +347 -0
  119. package/.output/server/_ssr/insights_.distribution-BiCcFyrG.mjs +7 -0
  120. package/.output/server/_ssr/{installations-YumqpNpa.mjs → installations-Cx3jIrwl.mjs} +280 -364
  121. package/.output/server/_ssr/installations-DTGPaKXx.mjs +69 -0
  122. package/.output/server/_ssr/installations-osiAuNKr.mjs +5 -0
  123. package/.output/server/_ssr/listReleases-BfUBlCHo.mjs +79 -0
  124. package/.output/server/_ssr/release-adoption-005tQRpo.mjs +55 -0
  125. package/.output/server/_ssr/release-adoption-rpc-BVySDR0L.mjs +41 -0
  126. package/.output/server/_ssr/releaseAdoption-2PJPA09N.mjs +114 -0
  127. package/.output/server/_ssr/releaseManagement-BTCWEY8-.mjs +11 -0
  128. package/.output/server/_ssr/remote-config-CUoAxUMy.mjs +430 -0
  129. package/.output/server/_ssr/remote-config-Cc5P4J-r.mjs +17 -0
  130. package/.output/server/_ssr/remote-config-CjdxcZ9B.mjs +5 -0
  131. package/.output/server/_ssr/remote-config-D2GmbGwI.mjs +2594 -0
  132. package/.output/server/_ssr/remote-config-rpc-kjoZ9PRS.mjs +115 -0
  133. package/.output/server/_ssr/rolldown-runtime-rSIU-vHC.mjs +13 -0
  134. package/.output/server/_ssr/{router-iP95Vqi2.mjs → router-DwGVewL-.mjs} +141 -139
  135. package/.output/server/_ssr/{routes-ivsV2TDu.mjs → routes-C4yxv3JU.mjs} +192 -685
  136. package/.output/server/_ssr/routes-D3_aegLY.mjs +409 -0
  137. package/.output/server/_ssr/runtime.server-BoWf4QhU.mjs +1716 -0
  138. package/.output/server/_ssr/schema-DrOtkRVD.mjs +361 -0
  139. package/.output/server/_ssr/select-DkzM2miy.mjs +107 -0
  140. package/.output/server/_ssr/server-BW0gzB0p.mjs +8325 -0
  141. package/.output/server/_ssr/{createSsrRpc-NHF2PxuK.mjs → sidebar-DPcOijvL.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-BqJ2mAwC.mjs +17 -0
  145. package/.output/server/_ssr/{table-D1mL8fJu.mjs → table-R7RY92q9.mjs} +2 -2
  146. package/.output/server/_ssr/tabs-trDcbRkT.mjs +45 -0
  147. package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +40 -0
  148. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-ctA_XVZA.mjs} +2 -2
  149. package/.output/server/_tanstack-start-manifest_v-BwInaUTw.mjs +139 -0
  150. package/.output/server/index.mjs +315 -154
  151. package/LICENSE +13 -14
  152. package/README.md +82 -72
  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 +100 -71
  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 +2 -5
  166. package/src/components/features/insights/AppUsage.tsx +366 -0
  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 +400 -39
  171. package/src/components/features/insights/EventHistoryCard.tsx +112 -26
  172. package/src/components/features/insights/EventHistoryList.tsx +2 -2
  173. package/src/components/features/insights/FailureReports.tsx +407 -0
  174. package/src/components/features/insights/InsightsControls.tsx +265 -88
  175. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  176. package/src/components/features/insights/InsightsInfo.tsx +48 -0
  177. package/src/components/features/insights/InsightsOverview.tsx +604 -355
  178. package/src/components/features/insights/InsightsPageHeader.tsx +35 -20
  179. package/src/components/features/insights/InsightsPeriodSelector.tsx +89 -0
  180. package/src/components/features/insights/InstallationHistoryCard.tsx +66 -11
  181. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  182. package/src/components/features/insights/ReleaseActivity.tsx +308 -0
  183. package/src/components/features/insights/ReportingDevicesSummary.tsx +48 -0
  184. package/src/components/features/insights/RollbackButton.tsx +118 -0
  185. package/src/components/features/insights/UpdateFailures.tsx +382 -0
  186. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  187. package/src/components/features/releases/ReleaseEditorSheet.tsx +26 -12
  188. package/src/components/features/remote-config/ConditionDialog.tsx +581 -0
  189. package/src/components/features/remote-config/ConditionsCard.tsx +244 -0
  190. package/src/components/features/remote-config/ParameterDialog.tsx +407 -0
  191. package/src/components/features/remote-config/ParametersCard.tsx +244 -0
  192. package/src/components/features/remote-config/PreviewCard.tsx +284 -0
  193. package/src/components/features/remote-config/PublishDialog.tsx +319 -0
  194. package/src/components/features/remote-config/RemoteConfigPage.tsx +353 -0
  195. package/src/components/features/remote-config/RuleSummary.tsx +21 -0
  196. package/src/components/features/remote-config/ValueInput.tsx +148 -0
  197. package/src/components/features/remote-config/VersionsCard.tsx +361 -0
  198. package/src/components/features/remote-config/remoteConfigFeatureUi.tsx +15 -0
  199. package/src/components/features/remote-config/useDateTimeText.ts +16 -0
  200. package/src/components/ui/card.tsx +1 -1
  201. package/src/components/ui/scroll-area.tsx +52 -0
  202. package/src/components/ui/sidebar.tsx +22 -29
  203. package/src/components/ui/tabs.tsx +81 -0
  204. package/src/index.ts +26 -19
  205. package/src/lib/api-keys-api.ts +0 -28
  206. package/src/lib/api-keys-rpc.ts +27 -38
  207. package/src/lib/api-rpc.ts +189 -266
  208. package/src/lib/api.ts +19 -102
  209. package/src/lib/bundle-activity.ts +24 -4
  210. package/src/lib/console-access.ts +20 -0
  211. package/src/lib/console-features-api.ts +68 -0
  212. package/src/lib/console-features-rpc.ts +13 -0
  213. package/src/lib/console-features.ts +97 -0
  214. package/src/lib/insights-api.ts +56 -2
  215. package/src/lib/insights-errors.ts +64 -0
  216. package/src/lib/insights-failures-rpc.ts +36 -0
  217. package/src/lib/insights-failures.ts +130 -0
  218. package/src/lib/insights-recovery-rpc.ts +13 -17
  219. package/src/lib/insights-recovery.ts +10 -27
  220. package/src/lib/insights-retention.ts +21 -0
  221. package/src/lib/insights-rpc.ts +30 -12
  222. package/src/lib/insights-search.ts +93 -0
  223. package/src/lib/insights-usage-rpc.ts +29 -0
  224. package/src/lib/insights-usage.ts +76 -0
  225. package/src/lib/insights-view.ts +34 -5
  226. package/src/lib/release-adoption-api.ts +214 -0
  227. package/src/lib/release-adoption-rpc.ts +49 -0
  228. package/src/lib/release-adoption.ts +164 -0
  229. package/src/lib/remote-config-api.ts +119 -0
  230. package/src/lib/remote-config-draft.ts +652 -0
  231. package/src/lib/remote-config-rpc.ts +196 -0
  232. package/src/lib/scroll-restoration.ts +21 -0
  233. package/src/lib/server/adminInsights.ts +124 -0
  234. package/src/lib/server/auth.server.ts +13 -5
  235. package/src/lib/server/bundleActivity.ts +27 -28
  236. package/src/lib/server/config.server.ts +21 -74
  237. package/src/lib/server/console-feature-apis.ts +70 -0
  238. package/src/lib/server/console-runtime.server.ts +82 -38
  239. package/src/lib/server/downloadBundle.ts +16 -15
  240. package/src/lib/server/failureReports.ts +49 -0
  241. package/src/lib/server/getBundleChildren.ts +31 -122
  242. package/src/lib/server/insightsUsage.ts +63 -0
  243. package/src/lib/server/listReleases.ts +109 -44
  244. package/src/lib/server/releaseAdoption.ts +154 -0
  245. package/src/lib/server/releaseReachability.ts +8 -7
  246. package/src/lib/server/remoteConfig.ts +191 -0
  247. package/src/lib/server/runtime.server.ts +120 -31
  248. package/src/lib/server/updateFailures.ts +65 -0
  249. package/src/routeTree.gen.ts +65 -44
  250. package/src/router.tsx +3 -2
  251. package/src/routes/-installations-search.ts +32 -8
  252. package/src/routes/-releases-search.ts +76 -29
  253. package/src/routes/__root.tsx +10 -4
  254. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  255. package/src/routes/api-keys.tsx +5 -2
  256. package/src/routes/index.tsx +210 -152
  257. package/src/routes/insights.tsx +133 -18
  258. package/src/routes/insights_.distribution.tsx +422 -0
  259. package/src/routes/installations.tsx +98 -41
  260. package/src/routes/remote-config.tsx +42 -0
  261. package/src/styles.css +9 -0
  262. package/src/vite-internal.ts +15 -3
  263. package/src/vite.ts +2 -0
  264. package/.output/public/assets/InsightsPageHeader-C-Xc2MB9.js +0 -1
  265. package/.output/public/assets/api-keys-C1sgC6ko.js +0 -1
  266. package/.output/public/assets/api-keys-api-LchP65vQ.js +0 -1
  267. package/.output/public/assets/badge-BuMDU0Rf.js +0 -1
  268. package/.output/public/assets/card-BEvx_QKh.js +0 -1
  269. package/.output/public/assets/chart-no-axes-combined-C0G0fQ3J.js +0 -1
  270. package/.output/public/assets/composite-CHTH1Xhh.js +0 -1
  271. package/.output/public/assets/createServerFn-DHc2erub.js +0 -3
  272. package/.output/public/assets/dialog-dyZ1SphZ.js +0 -1
  273. package/.output/public/assets/dist-Bh1gaDfB.js +0 -1
  274. package/.output/public/assets/field-79SVH26s.js +0 -1
  275. package/.output/public/assets/index-BNkxg4jz.js +0 -10
  276. package/.output/public/assets/input-group-BbHfaBzQ.js +0 -1
  277. package/.output/public/assets/insights-D_7uSKfc.js +0 -1
  278. package/.output/public/assets/installations-BzoHWuXw.js +0 -1
  279. package/.output/public/assets/installations-DvjbUqd1.js +0 -2
  280. package/.output/public/assets/lazyRouteComponent-BN0MS05o.js +0 -1
  281. package/.output/public/assets/link-BG06whwB.js +0 -1
  282. package/.output/public/assets/loader-circle-Bbp8LGVC.js +0 -1
  283. package/.output/public/assets/preload-helper-uTix4PVD.js +0 -1
  284. package/.output/public/assets/refresh-cw-DZgiAOMk.js +0 -1
  285. package/.output/public/assets/routes-BFE-oRIT.js +0 -1
  286. package/.output/public/assets/routes-DaPMY31P.js +0 -2
  287. package/.output/public/assets/shield-check-DoIiaaXU.js +0 -1
  288. package/.output/public/assets/signing-BTRhaF5D.js +0 -1
  289. package/.output/public/assets/styles-C7U0oVke.css +0 -2
  290. package/.output/public/assets/table-BBEzJ7Xl.js +0 -1
  291. package/.output/public/assets/useCompositeListItem-BkPDaqyj.js +0 -42
  292. package/.output/server/__23tanstack-start-server-fn-resolver-Dr2ixDgQ.mjs +0 -146
  293. package/.output/server/_ssr/InsightsPageHeader-C5Has8Ry.mjs +0 -60
  294. package/.output/server/_ssr/api-keys-api-CrCZyvnl.mjs +0 -60
  295. package/.output/server/_ssr/api-keys-rpc-CFaNf-q0.mjs +0 -136
  296. package/.output/server/_ssr/api-rpc-B61KL3Eo.mjs +0 -1399
  297. package/.output/server/_ssr/auth.server-DF_shCeq.mjs +0 -47
  298. package/.output/server/_ssr/badge-BgsCP9Dp.mjs +0 -28
  299. package/.output/server/_ssr/bundle-signing-rpc-BBipZnFs.mjs +0 -16
  300. package/.output/server/_ssr/bundle-signing.server-Co_zHdJx.mjs +0 -12
  301. package/.output/server/_ssr/bundleActivity-D3_fIda2.mjs +0 -27
  302. package/.output/server/_ssr/card-DrbxCPtG.mjs +0 -86
  303. package/.output/server/_ssr/chart-qxa-_30a.mjs +0 -162
  304. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  305. package/.output/server/_ssr/config.server-CBr6PDj5.mjs +0 -368
  306. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  307. package/.output/server/_ssr/deleteBundle-BAq3JuGr.mjs +0 -66
  308. package/.output/server/_ssr/field-CqNUlqUq.mjs +0 -74
  309. package/.output/server/_ssr/getBundleChildren-COMt16m_.mjs +0 -50
  310. package/.output/server/_ssr/insights-B-DUbksX.mjs +0 -502
  311. package/.output/server/_ssr/insights-recovery-rpc-P71FH66n.mjs +0 -37
  312. package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +0 -303
  313. package/.output/server/_ssr/insightsRecovery-CqcosG7B.mjs +0 -149
  314. package/.output/server/_ssr/installations-BQrppti7.mjs +0 -29
  315. package/.output/server/_ssr/routes-BDabsmc7.mjs +0 -37
  316. package/.output/server/_ssr/runtime.server-jmZOKIQM.mjs +0 -438
  317. package/.output/server/_ssr/server-p7yrVBfD.mjs +0 -7468
  318. package/.output/server/_ssr/signing-CxCbnFCt.mjs +0 -134
  319. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  320. package/.output/server/_tanstack-start-manifest_v-Cwpu0C9Q.mjs +0 -100
  321. package/src/components/features/bundles/BundleActivityChart.tsx +0 -95
  322. package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -121
  323. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  324. package/src/lib/bundle-signing-api.ts +0 -14
  325. package/src/lib/bundle-signing-rpc.ts +0 -16
  326. package/src/lib/server/bundle-signing.server.ts +0 -23
  327. package/src/lib/server/deleteBundle.ts +0 -145
  328. package/src/lib/server/insightsHistory.ts +0 -52
  329. package/src/lib/server/insightsRecovery.ts +0 -186
  330. package/src/routes/signing.tsx +0 -37
@@ -0,0 +1,115 @@
1
+ import { u as createServerFn } from "./createMiddleware-Cm6Tn0_Y.mjs";
2
+ import { t as consoleAccess } from "./console-access--o9FXikU.mjs";
3
+ import { t as createServerRpc } from "./createServerRpc-RLR4H-Fn.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/remote-config-rpc-kjoZ9PRS.js
5
+ /** Remote Config, once the console's access check and the feature guard pass. */
6
+ var remoteConfig = async () => {
7
+ const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-Dm2l7w0O.mjs"), import("./runtime.server-BoWf4QhU.mjs")]);
8
+ const { runtime } = await prepareConfig();
9
+ return requireFeature(runtime, "remoteConfig");
10
+ };
11
+ var field = (input, key) => typeof input === "object" && input !== null ? Reflect.get(input, key) : void 0;
12
+ var versionNumber = (value, name) => {
13
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) throw new TypeError(`${name} must be a non-negative integer.`);
14
+ return value;
15
+ };
16
+ var parseCursor = (input) => {
17
+ const cursor = field(input, "cursor");
18
+ if (cursor !== void 0 && typeof cursor !== "string") throw new TypeError("cursor must be text.");
19
+ return cursor === void 0 ? {} : { cursor };
20
+ };
21
+ var parseVersion = (input) => ({ version: versionNumber(field(input, "version"), "version") });
22
+ var parsePublish = (input) => {
23
+ const description = field(input, "description");
24
+ if (description !== void 0 && typeof description !== "string") throw new TypeError("description must be text.");
25
+ return {
26
+ template: field(input, "template"),
27
+ baseVersion: versionNumber(field(input, "baseVersion"), "baseVersion"),
28
+ ...description === void 0 ? {} : { description }
29
+ };
30
+ };
31
+ var parseRollback = (input) => ({
32
+ version: versionNumber(field(input, "version"), "version"),
33
+ baseVersion: versionNumber(field(input, "baseVersion"), "baseVersion")
34
+ });
35
+ var CONTEXT_FIELDS = [
36
+ "platform",
37
+ "appVersion",
38
+ "channel",
39
+ "cohort",
40
+ "fingerprintHash"
41
+ ];
42
+ var parsePreview = (input) => {
43
+ const raw = field(input, "context");
44
+ const context = {};
45
+ for (const key of CONTEXT_FIELDS) {
46
+ const value = field(raw, key);
47
+ if (typeof value === "string" && value.trim().length > 0) context[key] = value.trim();
48
+ }
49
+ if (context.platform !== void 0 && context.platform !== "ios" && context.platform !== "android") throw new TypeError("platform must be \"ios\" or \"android\".");
50
+ const now = field(raw, "now");
51
+ if (now !== void 0 && (typeof now !== "number" || !Number.isFinite(now))) throw new TypeError("now must be a time in milliseconds since the epoch.");
52
+ return {
53
+ template: field(input, "template"),
54
+ context: {
55
+ ...context,
56
+ now: now ?? Date.now()
57
+ }
58
+ };
59
+ };
60
+ var getRemoteConfigRpc_createServerFn_handler = createServerRpc({
61
+ id: "0ccfae64b399b03d820328fa98a38e2caa0b622d3da5a7ca633c5a0e8101e3f6",
62
+ name: "getRemoteConfigRpc",
63
+ filename: "src/lib/remote-config-rpc.ts"
64
+ }, (opts) => getRemoteConfigRpc.__executeServer(opts));
65
+ var getRemoteConfigRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).handler(getRemoteConfigRpc_createServerFn_handler, async () => (await remoteConfig()).getActive());
66
+ var listRemoteConfigVersionsRpc_createServerFn_handler = createServerRpc({
67
+ id: "3377db68b9d1d971971595469029c0466da0777a177b294d655cd0c039737f1a",
68
+ name: "listRemoteConfigVersionsRpc",
69
+ filename: "src/lib/remote-config-rpc.ts"
70
+ }, (opts) => listRemoteConfigVersionsRpc.__executeServer(opts));
71
+ var listRemoteConfigVersionsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(parseCursor).handler(listRemoteConfigVersionsRpc_createServerFn_handler, async ({ data }) => (await remoteConfig()).listVersions({
72
+ limit: 20,
73
+ ...data
74
+ }));
75
+ var getRemoteConfigVersionRpc_createServerFn_handler = createServerRpc({
76
+ id: "af71e3c55a659ce46093e33b9d70e729359610eec7d576502e8f0e26c785b317",
77
+ name: "getRemoteConfigVersionRpc",
78
+ filename: "src/lib/remote-config-rpc.ts"
79
+ }, (opts) => getRemoteConfigVersionRpc.__executeServer(opts));
80
+ var getRemoteConfigVersionRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(parseVersion).handler(getRemoteConfigVersionRpc_createServerFn_handler, async ({ data }) => (await remoteConfig()).getVersion(data.version));
81
+ var publishRemoteConfigRpc_createServerFn_handler = createServerRpc({
82
+ id: "4182bf9ccbb675700638f30bc6122517ccd90b16a339a6823a0f5f6c808d70a6",
83
+ name: "publishRemoteConfigRpc",
84
+ filename: "src/lib/remote-config-rpc.ts"
85
+ }, (opts) => publishRemoteConfigRpc.__executeServer(opts));
86
+ var publishRemoteConfigRpc = createServerFn({ method: "POST" }).middleware([consoleAccess]).validator(parsePublish).handler(publishRemoteConfigRpc_createServerFn_handler, async ({ data }) => (await remoteConfig()).publish(data));
87
+ var rollbackRemoteConfigRpc_createServerFn_handler = createServerRpc({
88
+ id: "98c10bdc514eb4d3fe65af546be44452b492a81092cfe45625778a4c9f731727",
89
+ name: "rollbackRemoteConfigRpc",
90
+ filename: "src/lib/remote-config-rpc.ts"
91
+ }, (opts) => rollbackRemoteConfigRpc.__executeServer(opts));
92
+ var rollbackRemoteConfigRpc = createServerFn({ method: "POST" }).middleware([consoleAccess]).validator(parseRollback).handler(rollbackRemoteConfigRpc_createServerFn_handler, async ({ data }) => (await remoteConfig()).rollback(data));
93
+ var previewRemoteConfigRpc_createServerFn_handler = createServerRpc({
94
+ id: "1371bff16085636e2c44b60a573ae434b556c63045c40a0a93a93ab69ec47999",
95
+ name: "previewRemoteConfigRpc",
96
+ filename: "src/lib/remote-config-rpc.ts"
97
+ }, (opts) => previewRemoteConfigRpc.__executeServer(opts));
98
+ var previewRemoteConfigRpc = createServerFn({ method: "POST" }).middleware([consoleAccess]).validator(parsePreview).handler(previewRemoteConfigRpc_createServerFn_handler, async ({ data }) => {
99
+ await remoteConfig();
100
+ const { evaluateRemoteConfig, RemoteConfigValidationError, validateRemoteConfigTemplate } = await import("./remote-config-CUoAxUMy.mjs").then((n) => n.t);
101
+ try {
102
+ return {
103
+ status: "ok",
104
+ parameters: evaluateRemoteConfig(validateRemoteConfigTemplate(data.template), data.context)
105
+ };
106
+ } catch (error) {
107
+ if (error instanceof RemoteConfigValidationError) return {
108
+ status: "invalid",
109
+ issues: error.issues
110
+ };
111
+ throw error;
112
+ }
113
+ });
114
+ //#endregion
115
+ export { getRemoteConfigRpc_createServerFn_handler, getRemoteConfigVersionRpc_createServerFn_handler, listRemoteConfigVersionsRpc_createServerFn_handler, previewRemoteConfigRpc_createServerFn_handler, publishRemoteConfigRpc_createServerFn_handler, rollbackRemoteConfigRpc_createServerFn_handler };
@@ -0,0 +1,13 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/rolldown-runtime-rSIU-vHC.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
@@ -1,17 +1,21 @@
1
1
  import { i 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 { A as CircleCheck, C as Info, I as ChartNoAxesCombined, S as KeyRound, _ as OctagonX, b as LoaderCircle, c as ShieldCheck, h as Package, n as TriangleAlert, o as Sun, v as Moon } 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-NHF2PxuK.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";
2
+ import { u as createServerFn } from "./createMiddleware-Cm6Tn0_Y.mjs";
3
+ import { _t as require_react, gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
+ import { O as Info, S as Moon, T as LoaderCircle, b as Package, c as Sun, i as TriangleAlert, w as LogOut, x as OctagonX, z as CircleCheck } from "../_libs/lucide-react.mjs";
5
+ import { A as createSsrRpc, E as TooltipProvider, M as useSidebar, _ as SidebarInset, b as SidebarMenuItem, d as SidebarContent, f as SidebarFooter, g as SidebarHeader, h as SidebarGroupLabel, m as SidebarGroupContent, p as SidebarGroup, t as Button$1, u as Sidebar, v as SidebarMenu, x as SidebarProvider, y as SidebarMenuButton } from "./sidebar-DPcOijvL.mjs";
6
+ 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";
7
7
  import { t as QueryClient } from "../_libs/tanstack__query-core.mjs";
8
- import { n as useApiKeyCapabilityQuery, t as ensureApiKeyRouteAccess } from "./api-keys-api-CrCZyvnl.mjs";
9
- import { t as Toaster } from "../_libs/sonner.mjs";
10
- import { n as getInsightsScrollRestorationKey, t as Route$6 } from "./installations-BQrppti7.mjs";
11
- import { t as Route$7 } from "./routes-BDabsmc7.mjs";
8
+ import { r as requireConsoleFeature, t as consoleFeaturesQueryOptions } from "./console-features-api-CYclUQ4h.mjs";
9
+ import { t as NotFoundPage } from "./NotFoundPage-mYHHg-2s.mjs";
10
+ import { n as toast, t as Toaster } from "../_libs/sonner.mjs";
11
+ import { t as Route$4 } from "./insights-BopxyJjk.mjs";
12
+ import { t as Route$5 } from "./insights_.distribution-B3BVPD00.mjs";
13
+ import { n as Route$6 } from "./installations-DTGPaKXx.mjs";
14
+ import { n as Route$7 } from "./remote-config-D2GmbGwI.mjs";
15
+ import { n as Route$8, o as useFeatureUi } from "./routes-D3_aegLY.mjs";
12
16
  import { t as setupRouterSsrQueryIntegration } from "../_libs/@tanstack/react-router-ssr-query+[...].mjs";
13
17
  import { t as z } from "../_libs/next-themes.mjs";
14
- //#region node_modules/.nitro/vite/services/ssr/assets/router-iP95Vqi2.js
18
+ //#region node_modules/.nitro/vite/services/ssr/assets/router-DwGVewL-.js
15
19
  var import_react = /* @__PURE__ */ __toESM(require_react());
16
20
  var import_jsx_runtime = require_jsx_runtime();
17
21
  function HotUpdaterLogo({ className }) {
@@ -108,14 +112,54 @@ function useTheme$1() {
108
112
  if (context === void 0) throw new Error("useTheme must be used within a ThemeProvider");
109
113
  return context;
110
114
  }
111
- function AppSidebar() {
112
- const apiKeyCapability = useApiKeyCapabilityQuery();
115
+ function AppSidebar({ canSignOut = false }) {
116
+ const { setOpenMobile } = useSidebar();
117
+ const closeMobileSidebar = () => setOpenMobile(false);
118
+ const [signingOut, setSigningOut] = (0, import_react.useState)(false);
119
+ const featureUi = useFeatureUi();
113
120
  const { theme, setTheme } = useTheme$1();
114
121
  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";
122
+ const navigation = [{
123
+ label: "Bundles",
124
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Package, {}),
125
+ active: currentPath === "/",
126
+ link: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
127
+ to: "/",
128
+ onClick: closeMobileSidebar,
129
+ search: {
130
+ afterReleaseId: void 0,
131
+ beforeReleaseId: void 0,
132
+ channelId: void 0,
133
+ enabled: void 0,
134
+ releaseId: void 0,
135
+ platform: void 0,
136
+ bundleId: void 0,
137
+ scopeKey: void 0
138
+ }
139
+ })
140
+ }, ...featureUi.flatMap(({ features, label, navigation }) => navigation === void 0 ? [] : [{
141
+ label,
142
+ icon: navigation.icon,
143
+ active: navigation.paths.includes(currentPath),
144
+ link: navigation.link({
145
+ features,
146
+ onClick: closeMobileSidebar
147
+ })
148
+ }])];
149
+ const signOut = async () => {
150
+ setSigningOut(true);
151
+ try {
152
+ if (!(await fetch("/api/auth/sign-out", {
153
+ body: "{}",
154
+ headers: { "content-type": "application/json" },
155
+ method: "POST"
156
+ })).ok) throw new Error("Sign-out failed. Please try again.");
157
+ window.location.reload();
158
+ } catch {
159
+ setSigningOut(false);
160
+ toast.error("Sign-out failed. Please try again.");
161
+ }
162
+ };
119
163
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Sidebar, {
120
164
  collapsible: "icon",
121
165
  children: [
@@ -123,6 +167,7 @@ function AppSidebar() {
123
167
  className: "h-12 justify-center",
124
168
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
125
169
  to: "/",
170
+ onClick: closeMobileSidebar,
126
171
  search: {
127
172
  afterReleaseId: void 0,
128
173
  beforeReleaseId: void 0,
@@ -130,9 +175,8 @@ function AppSidebar() {
130
175
  enabled: void 0,
131
176
  releaseId: void 0,
132
177
  platform: void 0,
133
- targetAppVersion: void 0,
134
178
  bundleId: void 0,
135
- page: void 0
179
+ scopeKey: void 0
136
180
  },
137
181
  className: "flex items-center gap-3 p-1 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:p-2",
138
182
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(HotUpdaterLogo, { className: "h-7 w-7 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -147,50 +191,28 @@ function AppSidebar() {
147
191
  })]
148
192
  })
149
193
  }),
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, {
194
+ /* @__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, {
195
+ isActive: item.active,
196
+ render: item.link,
197
+ tooltip: item.label,
198
+ children: [item.icon, /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: item.label })]
199
+ }) }, item.label)) }) })] }) }),
200
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(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, {
201
+ disabled: signingOut,
202
+ onClick: () => void signOut(),
203
+ tooltip: "Sign out",
204
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LogOut, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: signingOut ? "Signing out…" : "Sign out" })]
205
+ }) }) : null, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
190
206
  onClick: () => setTheme(theme === "dark" ? "light" : "dark"),
191
207
  tooltip: theme === "dark" ? "Light mode" : "Dark mode",
192
208
  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
- }) }) }) })
209
+ }) })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
210
+ href: "https://hot-updater.dev",
211
+ target: "_blank",
212
+ rel: "noreferrer",
213
+ className: "px-2 pb-1 text-[11px] text-sidebar-foreground/60 hover:text-sidebar-foreground group-data-[collapsible=icon]:hidden",
214
+ children: "Powered by hot-updater"
215
+ })] })
194
216
  ]
195
217
  });
196
218
  }
@@ -226,7 +248,11 @@ function ConsoleAccessPage({ access, providers }) {
226
248
  setSigningOut(true);
227
249
  setError(null);
228
250
  try {
229
- if (!(await fetch("/api/auth/sign-out", { method: "POST" })).ok) throw new Error("Sign-out failed.");
251
+ if (!(await fetch("/api/auth/sign-out", {
252
+ body: "{}",
253
+ headers: { "content-type": "application/json" },
254
+ method: "POST"
255
+ })).ok) throw new Error("Sign-out failed.");
230
256
  window.location.reload();
231
257
  } catch (cause) {
232
258
  setSigningOut(false);
@@ -291,36 +317,6 @@ function ConsoleAccessPage({ access, providers }) {
291
317
  })
292
318
  });
293
319
  }
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
320
  var Toaster$1 = ({ ...props }) => {
325
321
  const { theme = "system" } = z();
326
322
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Toaster, {
@@ -345,8 +341,8 @@ var Toaster$1 = ({ ...props }) => {
345
341
  };
346
342
  var getConsoleAccessRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("c504696e68ba764b48c48aa8a40275938640941e473cf9cfdd7b2322d99f9d13"));
347
343
  var getConsoleAuthProvidersRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("fa8c48f0489d97c62b9b68fd0caf0a61b15bad25a42b3866ec36264b4b30bb74"));
348
- var styles_default = "/assets/styles-C7U0oVke.css";
349
- var Route$5 = createRootRouteWithContext()({
344
+ var styles_default = "/assets/styles-D8mxMvCB.css";
345
+ var Route$3 = createRootRouteWithContext()({
350
346
  head: () => ({
351
347
  meta: [
352
348
  { charSet: "utf-8" },
@@ -369,8 +365,9 @@ var Route$5 = createRootRouteWithContext()({
369
365
  href: styles_default
370
366
  }]
371
367
  }),
372
- loader: async () => {
368
+ loader: async ({ context }) => {
373
369
  const [access, providers] = await Promise.all([getConsoleAccessRpc(), getConsoleAuthProvidersRpc()]);
370
+ if (access.status === "authorized") await context.queryClient.prefetchQuery(consoleFeaturesQueryOptions());
374
371
  return {
375
372
  access,
376
373
  providers
@@ -403,31 +400,29 @@ function RootDocument({ children }) {
403
400
  });
404
401
  }
405
402
  function RootLayout() {
406
- const { access, providers } = Route$5.useLoaderData();
403
+ const { access, providers } = Route$3.useLoaderData();
407
404
  if (access.status !== "authorized") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConsoleAccessPage, {
408
405
  access,
409
406
  providers
410
407
  });
411
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthorizedConsole, {});
408
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthorizedConsole, { canSignOut: providers.length > 0 });
412
409
  }
413
- function AuthorizedConsole() {
410
+ function AuthorizedConsole({ canSignOut }) {
414
411
  (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, {
412
+ 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
413
  className: "min-h-0 min-w-0 overflow-hidden",
417
414
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Outlet, {})
418
415
  })] });
419
416
  }
420
- var $$splitComponentImporter$2 = () => import("./signing-CxCbnFCt.mjs");
421
- var Route$4 = createFileRoute("/signing")({ component: lazyRouteComponent($$splitComponentImporter$2, "component") });
422
- var $$splitComponentImporter$1 = () => import("./insights-B-DUbksX.mjs");
423
- var Route$3 = createFileRoute("/insights")({ component: lazyRouteComponent($$splitComponentImporter$1, "component") });
424
- var $$splitComponentImporter = () => import("./api-keys-DJml_XoK.mjs");
417
+ var $$splitComponentImporter = () => import("./api-keys-B_f9h7ln.mjs");
418
+ var $$splitNotFoundComponentImporter = () => import("./api-keys-01FGqj4d.mjs");
425
419
  var Route$2 = createFileRoute("/api-keys")({
426
- beforeLoad: ({ context }) => ensureApiKeyRouteAccess(context.queryClient),
420
+ beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "apiKeys"),
421
+ notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
427
422
  component: lazyRouteComponent($$splitComponentImporter, "component")
428
423
  });
429
424
  var handleAuthRequest = async ({ request }) => {
430
- const { handleConsoleAuth } = await import("./auth.server-DF_shCeq.mjs");
425
+ const { handleConsoleAuth } = await import("./auth.server-COZoXu4i.mjs");
431
426
  return handleConsoleAuth(request);
432
427
  };
433
428
  var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
@@ -435,63 +430,70 @@ var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
435
430
  POST: handleAuthRequest
436
431
  } } });
437
432
  var Route = createFileRoute("/api/bundles/$bundleId/download")({ server: { handlers: { GET: async ({ params, request }) => {
438
- const { prepareConfig } = await import("./config.server-CBr6PDj5.mjs");
439
- const { downloadBundle } = await import("./downloadBundle-B3ert-pY.mjs");
440
- const { databaseClient, storagePlugin } = await prepareConfig(request);
433
+ const { prepareConfig } = await import("./config.server-Dm2l7w0O.mjs");
434
+ const { downloadBundle } = await import("./downloadBundle-DViuIa9U.mjs");
435
+ const { core, storage } = await prepareConfig(request);
441
436
  return downloadBundle(params.bundleId, {
442
- databaseClient,
443
- storagePlugin
437
+ core,
438
+ storage
444
439
  });
445
440
  } } } });
446
- var SigningRoute = Route$4.update({
447
- id: "/signing",
448
- path: "/signing",
449
- getParentRoute: () => Route$5
450
- });
451
- var InstallationsRoute = Route$6.update({
452
- id: "/installations",
453
- path: "/installations",
454
- getParentRoute: () => Route$5
455
- });
456
- var InsightsRoute = Route$3.update({
457
- id: "/insights",
458
- path: "/insights",
459
- getParentRoute: () => Route$5
460
- });
461
- var ApiKeysRoute = Route$2.update({
462
- id: "/api-keys",
463
- path: "/api-keys",
464
- getParentRoute: () => Route$5
465
- });
466
441
  var rootRouteChildren = {
467
- IndexRoute: Route$7.update({
442
+ IndexRoute: Route$8.update({
468
443
  id: "/",
469
444
  path: "/",
470
- getParentRoute: () => Route$5
445
+ getParentRoute: () => Route$3
446
+ }),
447
+ ApiKeysRoute: Route$2.update({
448
+ id: "/api-keys",
449
+ path: "/api-keys",
450
+ getParentRoute: () => Route$3
451
+ }),
452
+ InsightsRoute: Route$4.update({
453
+ id: "/insights",
454
+ path: "/insights",
455
+ getParentRoute: () => Route$3
456
+ }),
457
+ InstallationsRoute: Route$6.update({
458
+ id: "/installations",
459
+ path: "/installations",
460
+ getParentRoute: () => Route$3
461
+ }),
462
+ RemoteConfigRoute: Route$7.update({
463
+ id: "/remote-config",
464
+ path: "/remote-config",
465
+ getParentRoute: () => Route$3
466
+ }),
467
+ InsightsDistributionRoute: Route$5.update({
468
+ id: "/insights_/distribution",
469
+ path: "/insights/distribution",
470
+ getParentRoute: () => Route$3
471
471
  }),
472
- ApiKeysRoute,
473
- InsightsRoute,
474
- InstallationsRoute,
475
- SigningRoute,
476
472
  ApiAuthSplatRoute: Route$1.update({
477
473
  id: "/api/auth/$",
478
474
  path: "/api/auth/$",
479
- getParentRoute: () => Route$5
475
+ getParentRoute: () => Route$3
480
476
  }),
481
477
  ApiBundlesBundleIdDownloadRoute: Route.update({
482
478
  id: "/api/bundles/$bundleId/download",
483
479
  path: "/api/bundles/$bundleId/download",
484
- getParentRoute: () => Route$5
480
+ getParentRoute: () => Route$3
485
481
  })
486
482
  };
487
- var routeTree = Route$5._addFileChildren(rootRouteChildren)._addFileTypes();
483
+ var routeTree = Route$3._addFileChildren(rootRouteChildren)._addFileTypes();
484
+ /** A location's scroll-restoration key: its route's own, else its history entry's. */
485
+ var routeScrollRestorationKey = (router, location) => {
486
+ const [, , foundRoute] = router.getMatchedRoutes(location.pathname);
487
+ const routeKey = foundRoute?.options.staticData?.scrollRestorationKey;
488
+ return routeKey?.(location) ?? location.state.__TSR_key;
489
+ };
488
490
  var getRouter = () => {
489
491
  const queryClient = new QueryClient();
490
492
  const router = createRouter({
491
493
  routeTree,
492
494
  context: { queryClient },
493
495
  scrollRestoration: true,
494
- getScrollRestorationKey: getInsightsScrollRestorationKey,
496
+ getScrollRestorationKey: (location) => routeScrollRestorationKey(router, location),
495
497
  defaultPreloadStaleTime: 0
496
498
  });
497
499
  setupRouterSsrQueryIntegration({