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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-jB4Loglh.js +1 -0
  3. package/.output/public/assets/EventDetails-B6yUsyNA.js +1 -0
  4. package/.output/public/assets/HashValueDisplay-BFX_kY3-.js +1 -0
  5. package/.output/public/assets/InsightsInfo-BNO0WznZ.js +1 -0
  6. package/.output/public/assets/InsightsPageHeader-B892oVml.js +1 -0
  7. package/.output/public/assets/NotFoundPage-DIqCpWa3.js +1 -0
  8. package/.output/public/assets/alert-dialog-Bbk_4-WJ.js +1 -0
  9. package/.output/public/assets/api-DCM0wr6O.js +1 -0
  10. package/.output/public/assets/api-keys-CIO9L_wu.js +1 -0
  11. package/.output/public/assets/api-keys-DVTL_--f.js +1 -0
  12. package/.output/public/assets/arrow-left-CnMYpqB7.js +1 -0
  13. package/.output/public/assets/arrow-up-right-BtffZA6e.js +1 -0
  14. package/.output/public/assets/chevron-right-BqD5wtFb.js +1 -0
  15. package/.output/public/assets/clipboard-DS9ucUQL.js +1 -0
  16. package/.output/public/assets/console-features-api-BH5m_PtQ.js +1 -0
  17. package/.output/public/assets/dialog-Bqbb7B0N.js +1 -0
  18. package/.output/public/assets/dist-LxKJB-Vu.js +1 -0
  19. package/.output/public/assets/empty-CuT2UhFp.js +1 -0
  20. package/.output/public/assets/field-BBDpjIqu.js +1 -0
  21. package/.output/public/assets/index-6o51GkFe.js +11 -0
  22. package/.output/public/assets/input-group-ja_30qaF.js +1 -0
  23. package/.output/public/assets/insights-CmraDzQh.js +1 -0
  24. package/.output/public/assets/insights-CxZ2GCYV.js +2 -0
  25. package/.output/public/assets/insights-api-BigAU9sZ.js +1 -0
  26. package/.output/public/assets/insights-usage-rpc-DYEhsCKT.js +1 -0
  27. package/.output/public/assets/insights-vNRCrfnS.js +42 -0
  28. package/.output/public/assets/insights_.distribution-ChOerfJt.js +1 -0
  29. package/.output/public/assets/insights_.distribution-D-e4iga8.js +1 -0
  30. package/.output/public/assets/insights_.distribution-DZtkibX1.js +2 -0
  31. package/.output/public/assets/installations-BazSJXE0.js +2 -0
  32. package/.output/public/assets/installations-ClHTqdAO.js +1 -0
  33. package/.output/public/assets/installations-DpKsBuHi.js +1 -0
  34. package/.output/public/assets/key-round-wS_SIZ6b.js +1 -0
  35. package/.output/public/assets/list-CgrYiadM.js +1 -0
  36. package/.output/public/assets/refresh-cw-BYgoNCco.js +1 -0
  37. package/.output/public/assets/remote-config-BWwHOkCK.js +1 -0
  38. package/.output/public/assets/remote-config-Br56BODb.js +6 -0
  39. package/.output/public/assets/remote-config-CXOi0LRu.js +1 -0
  40. package/.output/public/assets/routes-B88Erkpk.js +2 -0
  41. package/.output/public/assets/routes-CfzsAleC.js +1 -0
  42. package/.output/public/assets/search-DaTDPW25.js +1 -0
  43. package/.output/public/assets/select-BZZBXMkr.js +1 -0
  44. package/.output/public/assets/sidebar-DNVyJPfX.js +3 -0
  45. package/.output/public/assets/smartphone-DpTFgtKf.js +1 -0
  46. package/.output/public/assets/styles-DTGEAJFv.css +2 -0
  47. package/.output/public/assets/switch-DZ1TPwx-.js +1 -0
  48. package/.output/public/assets/table-Gm4qRWwE.js +1 -0
  49. package/.output/public/assets/tabs-C7FOEjFC.js +1 -0
  50. package/.output/public/assets/undo-2-CmrHjwFc.js +1 -0
  51. package/.output/public/assets/useCompositeListItem-9E4pj_CH.js +1 -0
  52. package/.output/public/assets/valueToPercent-CH8GCHaL.js +1 -0
  53. package/.output/server/__23tanstack-start-server-fn-resolver-BpRlos5Q.mjs +170 -0
  54. package/.output/server/_libs/@base-ui/react+[...].mjs +4389 -4207
  55. package/.output/server/_libs/@tanstack/react-router+[...].mjs +3802 -4022
  56. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +140 -97
  57. package/.output/server/_libs/lucide-react.mjs +221 -9
  58. package/.output/server/_libs/next-themes.mjs +1 -1
  59. package/.output/server/_libs/react-redux+[...].mjs +1 -1
  60. package/.output/server/_libs/recharts+[...].mjs +483 -901
  61. package/.output/server/_libs/sonner.mjs +1 -1
  62. package/.output/server/_libs/tanstack__history.mjs +68 -41
  63. package/.output/server/_libs/tanstack__query-core.mjs +2010 -309
  64. package/.output/server/_libs/tanstack__react-query.mjs +448 -21
  65. package/.output/server/_libs/verkit.mjs +102 -1
  66. package/.output/server/_ssr/BundleIdDisplay-x94o9rlU.mjs +13 -0
  67. package/.output/server/_ssr/ConsoleFeatureUnavailable-ldW8v8-q.mjs +58 -0
  68. package/.output/server/_ssr/EventDetails-Q8kfj9Nr.mjs +344 -0
  69. package/.output/server/_ssr/{HashValueDisplay-C5tS4oGo.mjs → HashValueDisplay-n1GholGS.mjs} +3 -3
  70. package/.output/server/_ssr/InsightsInfo-DuJFatQO.mjs +75 -0
  71. package/.output/server/_ssr/InsightsPageHeader-BSUX3Ye9.mjs +145 -0
  72. package/.output/server/_ssr/NotFoundPage-DZzOOzS3.mjs +37 -0
  73. package/.output/server/_ssr/{dialog-WiIAKl4L.mjs → alert-dialog-C43Doa0I.mjs} +6 -83
  74. package/.output/server/_ssr/{api-keys-aXriWrv7.mjs → api-keys-B4sYm8dM.mjs} +48 -9
  75. package/.output/server/_ssr/api-keys-CEnM9fqG.mjs +5 -0
  76. package/.output/server/_ssr/api-keys-rpc-BIFuUgMt.mjs +52 -0
  77. package/.output/server/_ssr/api-oZjRn9tP.mjs +186 -0
  78. package/.output/server/_ssr/api-rpc-BNiFRRK8.mjs +240 -0
  79. package/.output/server/_ssr/{auth-BF8mbAgF.mjs → auth-UP0wXs4i.mjs} +1 -1
  80. package/.output/server/_ssr/{auth-rpc-B7w3AdRr.mjs → auth-rpc-DnZqYxyq.mjs} +6 -6
  81. package/.output/server/_ssr/auth.server-DFpyxRDd.mjs +5374 -0
  82. package/.output/server/_ssr/bundleActivity-M5gzBFNg.mjs +18 -0
  83. package/.output/server/_ssr/config-WVX4IxSR.mjs +15 -0
  84. package/.output/server/_ssr/config.server-DskXCAyI.mjs +35 -0
  85. package/.output/server/_ssr/console-access-BJfAXknd.mjs +17 -0
  86. package/.output/server/_ssr/console-features-Oz0q20jJ.mjs +61 -0
  87. package/.output/server/_ssr/console-features-api-C9kiKvaV.mjs +43 -0
  88. package/.output/server/_ssr/console-features-rpc-P0GL7Z-R.mjs +19 -0
  89. package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-Cm6Tn0_Y.mjs} +67 -56
  90. package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-RLR4H-Fn.mjs} +2 -2
  91. package/.output/server/_ssr/databaseConfig-C5SkAyUy.mjs +5 -0
  92. package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Csbuzc9Q.mjs} +28 -5
  93. package/.output/server/_ssr/databaseRows-CPphvbag.mjs +73 -0
  94. package/.output/server/_ssr/dialog-BbYDMjdC.mjs +84 -0
  95. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-CbQbBIw-.mjs} +140 -7
  96. package/.output/server/_ssr/{downloadBundle-CI7JUKvC.mjs → downloadBundle-CZysjmNW.mjs} +10 -10
  97. package/.output/server/_ssr/empty-CVLGfxuu.mjs +60 -0
  98. package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CPtwX8a7.mjs} +1 -1
  99. package/.output/server/_ssr/failureReports-DKDhVsXA.mjs +33 -0
  100. package/.output/server/_ssr/field-asw83X0v.mjs +189 -0
  101. package/.output/server/_ssr/getBundleChildren-Cv9iz1As.mjs +22 -0
  102. package/.output/server/_ssr/{input-group-Coj6SwVP.mjs → input-group-CuYJHosb.mjs} +2 -2
  103. package/.output/server/_ssr/insights-B55FG5fm.mjs +14 -0
  104. package/.output/server/_ssr/insights-CWnHIFUV.mjs +5 -0
  105. package/.output/server/_ssr/insights-CpLpedFZ.mjs +2315 -0
  106. package/.output/server/_ssr/insights-api-sjws23WF.mjs +122 -0
  107. package/.output/server/_ssr/insights-errors-BjnFUyZj.mjs +34 -0
  108. package/.output/server/_ssr/insights-failures-rpc-BvbWvqNf.mjs +36 -0
  109. package/.output/server/_ssr/insights-failures-xaa41Buf.mjs +46 -0
  110. package/.output/server/_ssr/insights-recovery-BWQhiZaF.mjs +28 -0
  111. package/.output/server/_ssr/insights-recovery-rpc-GiYXdkaY.mjs +32 -0
  112. package/.output/server/_ssr/{insights-rpc-l2-oBYth.mjs → insights-rpc-DP_8Rmz4.mjs} +22 -14
  113. package/.output/server/_ssr/insights-usage-BpBM0U0c.mjs +29 -0
  114. package/.output/server/_ssr/insights-usage-rpc-BiolgB8e.mjs +29 -0
  115. package/.output/server/_ssr/insights-usage-rpc-KStL0zOx.mjs +41 -0
  116. package/.output/server/_ssr/insightsUsage-CzhVjsc8.mjs +56 -0
  117. package/.output/server/_ssr/insights_.distribution-CVrnbP3R.mjs +7 -0
  118. package/.output/server/_ssr/insights_.distribution-D2HaNTAA.mjs +16 -0
  119. package/.output/server/_ssr/{insights_.distribution-INw6QxbU.mjs → insights_.distribution-DN9pR422.mjs} +50 -22
  120. package/.output/server/_ssr/installations-BHmbbnH8.mjs +5 -0
  121. package/.output/server/_ssr/{installations-DH-tQuRo.mjs → installations-BSCmFq8Q.mjs} +279 -367
  122. package/.output/server/_ssr/installations-DD1g__Nc.mjs +69 -0
  123. package/.output/server/_ssr/listReleases-BfUBlCHo.mjs +79 -0
  124. package/.output/server/_ssr/plugins-BaD1slHx.mjs +2086 -0
  125. package/.output/server/_ssr/release-adoption-005tQRpo.mjs +55 -0
  126. package/.output/server/_ssr/release-adoption-rpc-BsstqxUp.mjs +41 -0
  127. package/.output/server/_ssr/releaseAdoption-CtOFkwli.mjs +114 -0
  128. package/.output/server/_ssr/releaseManagement-DFMUnDF5.mjs +11 -0
  129. package/.output/server/_ssr/remote-config-C2Ee8lXO.mjs +5 -0
  130. package/.output/server/_ssr/remote-config-Dv1ccMo-.mjs +17 -0
  131. package/.output/server/_ssr/remote-config-of0lGQH8.mjs +2648 -0
  132. package/.output/server/_ssr/remote-config-rpc-BzX31mUS.mjs +115 -0
  133. package/.output/server/_ssr/rolldown-runtime-rSIU-vHC.mjs +13 -0
  134. package/.output/server/_ssr/{router-DfFyAp5p.mjs → router-D8NuoJ_I.mjs} +117 -136
  135. package/.output/server/_ssr/{routes-BtsfVx-p.mjs → routes-DgvnFqDy.mjs} +195 -429
  136. package/.output/server/_ssr/routes-V8sDybGf.mjs +409 -0
  137. package/.output/server/_ssr/runtime.server-De0QVWc9.mjs +104 -0
  138. package/.output/server/_ssr/schema-BiAVyEj2.mjs +361 -0
  139. package/.output/server/_ssr/{select-CyvLaMza.mjs → select-t3iXRwc9.mjs} +3 -3
  140. package/.output/server/_ssr/server-h4VxnExB.mjs +8325 -0
  141. package/.output/server/_ssr/{createSsrRpc-C-dLcQuy.mjs → sidebar-DJcErBMo.mjs} +107 -47
  142. package/.output/server/_ssr/ssr.mjs +1 -1
  143. package/.output/server/_ssr/start-BfFbHKMK.mjs +4 -0
  144. package/.output/server/_ssr/switch-E-btwMGt.mjs +43 -0
  145. package/.output/server/_ssr/{table-CkVhsNpe.mjs → table-37Dd23TN.mjs} +2 -2
  146. package/.output/server/_ssr/tabs-DEFnTm95.mjs +45 -0
  147. package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +40 -0
  148. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C88s9jWF.mjs} +2 -2
  149. package/.output/server/_tanstack-start-manifest_v-55AGsehh.mjs +139 -0
  150. package/.output/server/index.mjs +303 -205
  151. package/LICENSE +13 -14
  152. package/README.md +80 -71
  153. package/lib/index.d.mts +23 -11
  154. package/lib/vite-internal.mjs +13 -3
  155. package/lib/vite.d.mts +2 -0
  156. package/package.json +14 -14
  157. package/src/components/AppSidebar.tsx +74 -75
  158. package/src/components/ConsoleAccessPage.tsx +5 -1
  159. package/src/components/ConsoleFeatureUnavailable.tsx +80 -0
  160. package/src/components/NotFoundPage.tsx +7 -7
  161. package/src/components/features/FeatureSlots.tsx +103 -0
  162. package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
  163. package/src/components/features/bundles/BundleMetadata.tsx +8 -5
  164. package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
  165. package/src/components/features/channels/ChannelManagementDialog.tsx +8 -6
  166. package/src/components/features/insights/AppUsage.tsx +41 -14
  167. package/src/components/features/insights/BuiltinBundle.tsx +36 -0
  168. package/src/components/features/insights/ComparedBundlesChart.tsx +310 -0
  169. package/src/components/features/insights/EstimatedCount.tsx +18 -0
  170. package/src/components/features/insights/EventDetails.tsx +390 -26
  171. package/src/components/features/insights/EventHistoryCard.tsx +111 -25
  172. package/src/components/features/insights/EventHistoryList.tsx +1 -1
  173. package/src/components/features/insights/FailureReports.tsx +407 -0
  174. package/src/components/features/insights/InsightsControls.tsx +240 -142
  175. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  176. package/src/components/features/insights/InsightsOverview.tsx +601 -403
  177. package/src/components/features/insights/InsightsPageHeader.tsx +19 -14
  178. package/src/components/features/insights/InsightsPeriodSelector.tsx +67 -12
  179. package/src/components/features/insights/InstallationHistoryCard.tsx +65 -10
  180. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  181. package/src/components/features/insights/ReleaseActivity.tsx +308 -0
  182. package/src/components/features/insights/ReportingDevicesSummary.tsx +13 -13
  183. package/src/components/features/insights/RollbackButton.tsx +118 -0
  184. package/src/components/features/insights/UpdateFailures.tsx +382 -0
  185. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  186. package/src/components/features/releases/ReleaseEditorSheet.tsx +27 -13
  187. package/src/components/features/remote-config/ConditionDialog.tsx +592 -0
  188. package/src/components/features/remote-config/ConditionsCard.tsx +247 -0
  189. package/src/components/features/remote-config/ParameterDialog.tsx +426 -0
  190. package/src/components/features/remote-config/ParametersCard.tsx +254 -0
  191. package/src/components/features/remote-config/PreviewCard.tsx +284 -0
  192. package/src/components/features/remote-config/PublishDialog.tsx +325 -0
  193. package/src/components/features/remote-config/RemoteConfigPage.tsx +353 -0
  194. package/src/components/features/remote-config/RuleSummary.tsx +21 -0
  195. package/src/components/features/remote-config/ValueInput.tsx +151 -0
  196. package/src/components/features/remote-config/VersionsCard.tsx +384 -0
  197. package/src/components/features/remote-config/remoteConfigFeatureUi.tsx +15 -0
  198. package/src/components/features/remote-config/useDateTimeText.ts +16 -0
  199. package/src/components/ui/sidebar.tsx +22 -29
  200. package/src/index.ts +26 -19
  201. package/src/lib/api-keys-api.ts +0 -28
  202. package/src/lib/api-keys-rpc.ts +27 -38
  203. package/src/lib/api-rpc.ts +125 -288
  204. package/src/lib/api.ts +15 -134
  205. package/src/lib/bundle-activity.ts +24 -4
  206. package/src/lib/console-access.ts +20 -0
  207. package/src/lib/console-features-api.ts +68 -0
  208. package/src/lib/console-features-rpc.ts +13 -0
  209. package/src/lib/console-features.ts +98 -0
  210. package/src/lib/insights-api.ts +56 -2
  211. package/src/lib/insights-errors.ts +64 -0
  212. package/src/lib/insights-failures-rpc.ts +36 -0
  213. package/src/lib/insights-failures.ts +130 -0
  214. package/src/lib/insights-recovery-rpc.ts +13 -17
  215. package/src/lib/insights-recovery.ts +12 -36
  216. package/src/lib/insights-retention.ts +21 -0
  217. package/src/lib/insights-rpc.ts +30 -12
  218. package/src/lib/insights-search.ts +50 -4
  219. package/src/lib/insights-usage-rpc.ts +15 -9
  220. package/src/lib/insights-usage.ts +41 -3
  221. package/src/lib/insights-view.ts +34 -5
  222. package/src/lib/release-adoption-api.ts +214 -0
  223. package/src/lib/release-adoption-rpc.ts +49 -0
  224. package/src/lib/release-adoption.ts +164 -0
  225. package/src/lib/remote-config-api.ts +119 -0
  226. package/src/lib/remote-config-draft.ts +666 -0
  227. package/src/lib/remote-config-rpc.ts +196 -0
  228. package/src/lib/scroll-restoration.ts +21 -0
  229. package/src/lib/server/auth.server.ts +13 -5
  230. package/src/lib/server/bundleActivity.ts +27 -28
  231. package/src/lib/server/config.server.ts +21 -76
  232. package/src/lib/server/console-feature-apis.ts +70 -0
  233. package/src/lib/server/console-runtime.server.ts +82 -38
  234. package/src/lib/server/downloadBundle.ts +14 -15
  235. package/src/lib/server/failureReports.ts +50 -0
  236. package/src/lib/server/getBundleChildren.ts +31 -122
  237. package/src/lib/server/insightsUsage.ts +52 -113
  238. package/src/lib/server/listReleases.ts +109 -44
  239. package/src/lib/server/releaseAdoption.ts +151 -0
  240. package/src/lib/server/releaseReachability.ts +8 -8
  241. package/src/lib/server/remoteConfig.ts +75 -0
  242. package/src/lib/server/runtime.server.ts +120 -31
  243. package/src/lib/server/updateFailures.ts +66 -0
  244. package/src/lib/use-dialog-target.ts +27 -0
  245. package/src/routeTree.gen.ts +44 -44
  246. package/src/router.tsx +3 -2
  247. package/src/routes/-installations-search.ts +32 -8
  248. package/src/routes/-releases-search.ts +76 -29
  249. package/src/routes/__root.tsx +7 -1
  250. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  251. package/src/routes/api-keys.tsx +5 -2
  252. package/src/routes/index.tsx +210 -152
  253. package/src/routes/insights.tsx +91 -23
  254. package/src/routes/insights_.distribution.tsx +50 -9
  255. package/src/routes/installations.tsx +97 -40
  256. package/src/routes/remote-config.tsx +42 -0
  257. package/src/styles.css +9 -0
  258. package/src/vite-internal.ts +15 -3
  259. package/src/vite.ts +2 -0
  260. package/.output/public/assets/HashValueDisplay-BpTc3Oyg.js +0 -1
  261. package/.output/public/assets/InsightsPageHeader-DC2eEst8.js +0 -1
  262. package/.output/public/assets/api-CdUyUqzR.js +0 -42
  263. package/.output/public/assets/api-keys-64PM9PwW.js +0 -1
  264. package/.output/public/assets/api-keys-api-BeaJnvY5.js +0 -1
  265. package/.output/public/assets/arrow-left-04Rh8Zgp.js +0 -1
  266. package/.output/public/assets/card-CYHs5FZv.js +0 -1
  267. package/.output/public/assets/chart-no-axes-combined-DwyMsVFW.js +0 -1
  268. package/.output/public/assets/createServerFn-DU71xucx.js +0 -3
  269. package/.output/public/assets/dialog-IVMkBRCq.js +0 -1
  270. package/.output/public/assets/dist-BR4GzeEu.js +0 -1
  271. package/.output/public/assets/field-B3CYDpjg.js +0 -1
  272. package/.output/public/assets/index-C39o7rJH.js +0 -10
  273. package/.output/public/assets/info-C3y9HNoU.js +0 -1
  274. package/.output/public/assets/input-group-nLZylhWF.js +0 -1
  275. package/.output/public/assets/insights-Bm9v8uO3.js +0 -2
  276. package/.output/public/assets/insights-DS3iO7Up.js +0 -1
  277. package/.output/public/assets/insights-search-Byj3g3Mp.js +0 -1
  278. package/.output/public/assets/insights-usage-rpc-BaGR3lgq.js +0 -1
  279. package/.output/public/assets/insights_.distribution-B1i6cjlQ.js +0 -1
  280. package/.output/public/assets/insights_.distribution-C1Wf27eB.js +0 -2
  281. package/.output/public/assets/installations-CkFW4fV9.js +0 -2
  282. package/.output/public/assets/installations-DxTaIcHD.js +0 -1
  283. package/.output/public/assets/lazyRouteComponent-BapzjYnb.js +0 -1
  284. package/.output/public/assets/list-Dqt53fWZ.js +0 -1
  285. package/.output/public/assets/loader-circle-CUKfUqow.js +0 -1
  286. package/.output/public/assets/preload-helper-ClBMtM1g.js +0 -1
  287. package/.output/public/assets/refresh-cw-CNE_2PnD.js +0 -1
  288. package/.output/public/assets/routes-Cgtvspjg.js +0 -2
  289. package/.output/public/assets/routes-O2r2UUN8.js +0 -1
  290. package/.output/public/assets/shield-check-BFcJ46kz.js +0 -1
  291. package/.output/public/assets/signing-BgspC-xP.js +0 -1
  292. package/.output/public/assets/styles-DnrWuBwd.css +0 -2
  293. package/.output/public/assets/table-BuWQgxJJ.js +0 -1
  294. package/.output/public/assets/useMutation-CSV9NCUl.js +0 -1
  295. package/.output/public/assets/useOpenInteractionType-D5kduCTD.js +0 -1
  296. package/.output/public/assets/valueToPercent-BAtcbSLk.js +0 -1
  297. package/.output/server/__23tanstack-start-server-fn-resolver-CmYkol9D.mjs +0 -150
  298. package/.output/server/_ssr/InsightsPageHeader-Dma3dVj1.mjs +0 -64
  299. package/.output/server/_ssr/api-C3bGmgY0.mjs +0 -332
  300. package/.output/server/_ssr/api-keys-api-BRF6rbRC.mjs +0 -60
  301. package/.output/server/_ssr/api-keys-rpc-BMa1ZM6N.mjs +0 -136
  302. package/.output/server/_ssr/api-rpc-BYQ2e0z6.mjs +0 -1399
  303. package/.output/server/_ssr/auth.server-CmicHh0J.mjs +0 -47
  304. package/.output/server/_ssr/bundle-signing-rpc-DbQ4pFAX.mjs +0 -16
  305. package/.output/server/_ssr/bundle-signing.server-Uqt1OF49.mjs +0 -12
  306. package/.output/server/_ssr/bundleActivity-pBrPSG01.mjs +0 -28
  307. package/.output/server/_ssr/card-B7KSO_25.mjs +0 -108
  308. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  309. package/.output/server/_ssr/config.server-C-d1QaBU.mjs +0 -368
  310. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  311. package/.output/server/_ssr/deleteBundle-8X-jq7Z7.mjs +0 -66
  312. package/.output/server/_ssr/field-BDwuU8RE.mjs +0 -74
  313. package/.output/server/_ssr/getBundleChildren-DoL8l_AS.mjs +0 -50
  314. package/.output/server/_ssr/insights-BDJjaDLp.mjs +0 -938
  315. package/.output/server/_ssr/insights-D0FWpfOS.mjs +0 -10
  316. package/.output/server/_ssr/insights-recovery-Cv6RSyeR.mjs +0 -21
  317. package/.output/server/_ssr/insights-recovery-rpc-BE9YsK_T.mjs +0 -37
  318. package/.output/server/_ssr/insights-search-1czJMZgk.mjs +0 -21
  319. package/.output/server/_ssr/insights-usage-rpc-BE_aCnea.mjs +0 -184
  320. package/.output/server/_ssr/insights-usage-rpc-CtAolz-t.mjs +0 -24
  321. package/.output/server/_ssr/insightsContract-B09K_Px1.mjs +0 -303
  322. package/.output/server/_ssr/insightsHistory-Ci4rYAgl.mjs +0 -41
  323. package/.output/server/_ssr/insightsRecovery-CaghWL2t.mjs +0 -113
  324. package/.output/server/_ssr/insightsUsage-DNIj6jxF.mjs +0 -71
  325. package/.output/server/_ssr/insights_.distribution-Cp0kf1vW.mjs +0 -10
  326. package/.output/server/_ssr/installations-Bhyiwx8G.mjs +0 -29
  327. package/.output/server/_ssr/routes-xBkI2Fmt.mjs +0 -37
  328. package/.output/server/_ssr/runtime.server-CsiKFp_Z.mjs +0 -436
  329. package/.output/server/_ssr/server-BdkuOWe8.mjs +0 -7468
  330. package/.output/server/_ssr/signing-CQ70saFm.mjs +0 -133
  331. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  332. package/.output/server/_tanstack-start-manifest_v-CrBsoKQQ.mjs +0 -125
  333. package/src/components/features/bundles/BundleActivityChart.tsx +0 -97
  334. package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -126
  335. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  336. package/src/lib/bundle-signing-api.ts +0 -14
  337. package/src/lib/bundle-signing-rpc.ts +0 -16
  338. package/src/lib/server/bundle-signing.server.ts +0 -23
  339. package/src/lib/server/deleteBundle.ts +0 -145
  340. package/src/lib/server/insightsHistory.ts +0 -52
  341. package/src/lib/server/insightsRecovery.ts +0 -187
  342. package/src/routes/signing.tsx +0 -37
@@ -0,0 +1,115 @@
1
+ import { u as createServerFn } from "./createMiddleware-Cm6Tn0_Y.mjs";
2
+ import { t as consoleAccess } from "./console-access-BJfAXknd.mjs";
3
+ import { t as createServerRpc } from "./createServerRpc-RLR4H-Fn.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/remote-config-rpc-BzX31mUS.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-DskXCAyI.mjs"), import("./runtime.server-De0QVWc9.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("./plugins-BaD1slHx.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,19 +1,21 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
3
- import { ht as require_react, mt 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 Moon, b as LoaderCircle, c as ShieldCheck, g as OctagonX, h as Package, n as TriangleAlert, o as Sun, y as LogOut } 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-C-dLcQuy.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-DJcErBMo.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-BRF6rbRC.mjs";
9
7
  import { n as toast, t as Toaster } from "../_libs/sonner.mjs";
10
- import { t as Route$5 } from "./insights-D0FWpfOS.mjs";
11
- import { t as Route$6 } from "./insights_.distribution-Cp0kf1vW.mjs";
12
- import { n as getInsightsScrollRestorationKey, t as Route$7 } from "./installations-Bhyiwx8G.mjs";
13
- import { t as Route$8 } from "./routes-xBkI2Fmt.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-C9kiKvaV.mjs";
10
+ import { t as NotFoundPage } from "./NotFoundPage-DZzOOzS3.mjs";
11
+ import { t as Route$4 } from "./insights-B55FG5fm.mjs";
12
+ import { t as Route$5 } from "./insights_.distribution-D2HaNTAA.mjs";
13
+ import { n as Route$6 } from "./installations-DD1g__Nc.mjs";
14
+ import { n as Route$7 } from "./remote-config-of0lGQH8.mjs";
15
+ import { n as Route$8, o as useFeatureUi } from "./routes-V8sDybGf.mjs";
14
16
  import { t as setupRouterSsrQueryIntegration } from "../_libs/@tanstack/react-router-ssr-query+[...].mjs";
15
17
  import { t as z } from "../_libs/next-themes.mjs";
16
- //#region node_modules/.nitro/vite/services/ssr/assets/router-DfFyAp5p.js
18
+ //#region node_modules/.nitro/vite/services/ssr/assets/router-D8NuoJ_I.js
17
19
  var import_react = /* @__PURE__ */ __toESM(require_react());
18
20
  var import_jsx_runtime = require_jsx_runtime();
19
21
  function HotUpdaterLogo({ className }) {
@@ -111,18 +113,47 @@ function useTheme$1() {
111
113
  return context;
112
114
  }
113
115
  function AppSidebar({ canSignOut = false }) {
116
+ const { setOpenMobile } = useSidebar();
117
+ const closeMobileSidebar = () => setOpenMobile(false);
114
118
  const [signingOut, setSigningOut] = (0, import_react.useState)(false);
115
- const apiKeyCapability = useApiKeyCapabilityQuery();
119
+ const featureUi = useFeatureUi();
116
120
  const { theme, setTheme } = useTheme$1();
117
121
  const currentPath = useRouterState().location.pathname;
118
- const isBundlesActive = currentPath === "/";
119
- const isInsightsActive = currentPath === "/insights" || currentPath === "/insights/distribution" || currentPath === "/installations";
120
- const isApiKeysActive = currentPath === "/api-keys";
121
- 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
+ }])];
122
149
  const signOut = async () => {
123
150
  setSigningOut(true);
124
151
  try {
125
- if (!(await fetch("/api/auth/sign-out", { method: "POST" })).ok) throw new Error("Sign-out failed. Please try again.");
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.");
126
157
  window.location.reload();
127
158
  } catch {
128
159
  setSigningOut(false);
@@ -136,6 +167,7 @@ function AppSidebar({ canSignOut = false }) {
136
167
  className: "h-12 justify-center",
137
168
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
138
169
  to: "/",
170
+ onClick: closeMobileSidebar,
139
171
  search: {
140
172
  afterReleaseId: void 0,
141
173
  beforeReleaseId: void 0,
@@ -143,9 +175,8 @@ function AppSidebar({ canSignOut = false }) {
143
175
  enabled: void 0,
144
176
  releaseId: void 0,
145
177
  platform: void 0,
146
- targetAppVersion: void 0,
147
178
  bundleId: void 0,
148
- page: void 0
179
+ scopeKey: void 0
149
180
  },
150
181
  className: "flex items-center gap-3 p-1 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:p-2",
151
182
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(HotUpdaterLogo, { className: "h-7 w-7 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -160,46 +191,13 @@ function AppSidebar({ canSignOut = false }) {
160
191
  })]
161
192
  })
162
193
  }),
163
- /* @__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: [
164
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
165
- isActive: isBundlesActive,
166
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
167
- to: "/",
168
- search: {
169
- afterReleaseId: void 0,
170
- beforeReleaseId: void 0,
171
- channelId: void 0,
172
- enabled: void 0,
173
- releaseId: void 0,
174
- platform: void 0,
175
- targetAppVersion: void 0,
176
- bundleId: void 0,
177
- page: void 0
178
- }
179
- }),
180
- tooltip: "Bundles",
181
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Package, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Bundles" })]
182
- }) }),
183
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
184
- isActive: isInsightsActive,
185
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/insights" }),
186
- tooltip: "Insights",
187
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartNoAxesCombined, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Insights" })]
188
- }) }),
189
- apiKeyCapability.data?.apiKeys ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
190
- isActive: isApiKeysActive,
191
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/api-keys" }),
192
- tooltip: "API keys",
193
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(KeyRound, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "API keys" })]
194
- }) }) : null,
195
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SidebarMenuItem, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(SidebarMenuButton, {
196
- isActive: isSigningActive,
197
- render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { to: "/signing" }),
198
- tooltip: "Bundle signing",
199
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShieldCheck, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Bundle signing" })]
200
- }) })
201
- ] }) })] }) }),
202
- /* @__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, {
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, {
203
201
  disabled: signingOut,
204
202
  onClick: () => void signOut(),
205
203
  tooltip: "Sign out",
@@ -208,7 +206,13 @@ function AppSidebar({ canSignOut = false }) {
208
206
  onClick: () => setTheme(theme === "dark" ? "light" : "dark"),
209
207
  tooltip: theme === "dark" ? "Light mode" : "Dark mode",
210
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" })]
211
- }) })] }) })
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
+ })] })
212
216
  ]
213
217
  });
214
218
  }
@@ -244,7 +248,11 @@ function ConsoleAccessPage({ access, providers }) {
244
248
  setSigningOut(true);
245
249
  setError(null);
246
250
  try {
247
- 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.");
248
256
  window.location.reload();
249
257
  } catch (cause) {
250
258
  setSigningOut(false);
@@ -309,36 +317,6 @@ function ConsoleAccessPage({ access, providers }) {
309
317
  })
310
318
  });
311
319
  }
312
- var homeSearch = {
313
- channel: void 0,
314
- platform: void 0,
315
- targetAppVersion: void 0,
316
- page: void 0,
317
- after: void 0,
318
- before: void 0,
319
- bundleId: void 0,
320
- expandedBundleId: void 0
321
- };
322
- function NotFoundPage() {
323
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
324
- className: "flex min-h-svh flex-1 items-center justify-center px-6 py-10",
325
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
326
- className: "flex max-w-md flex-col items-center text-center",
327
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
328
- className: "text-2xl font-semibold tracking-tight text-foreground",
329
- children: "Page not found"
330
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
331
- className: buttonVariants({
332
- className: "mt-6",
333
- size: "lg"
334
- }),
335
- to: "/",
336
- search: homeSearch,
337
- children: "Go to home"
338
- })]
339
- })
340
- });
341
- }
342
320
  var Toaster$1 = ({ ...props }) => {
343
321
  const { theme = "system" } = z();
344
322
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Toaster, {
@@ -363,8 +341,8 @@ var Toaster$1 = ({ ...props }) => {
363
341
  };
364
342
  var getConsoleAccessRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("c504696e68ba764b48c48aa8a40275938640941e473cf9cfdd7b2322d99f9d13"));
365
343
  var getConsoleAuthProvidersRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("fa8c48f0489d97c62b9b68fd0caf0a61b15bad25a42b3866ec36264b4b30bb74"));
366
- var styles_default = "/assets/styles-DnrWuBwd.css";
367
- var Route$4 = createRootRouteWithContext()({
344
+ var styles_default = "/assets/styles-DTGEAJFv.css";
345
+ var Route$3 = createRootRouteWithContext()({
368
346
  head: () => ({
369
347
  meta: [
370
348
  { charSet: "utf-8" },
@@ -387,8 +365,9 @@ var Route$4 = createRootRouteWithContext()({
387
365
  href: styles_default
388
366
  }]
389
367
  }),
390
- loader: async () => {
368
+ loader: async ({ context }) => {
391
369
  const [access, providers] = await Promise.all([getConsoleAccessRpc(), getConsoleAuthProvidersRpc()]);
370
+ if (access.status === "authorized") await context.queryClient.prefetchQuery(consoleFeaturesQueryOptions());
392
371
  return {
393
372
  access,
394
373
  providers
@@ -421,7 +400,7 @@ function RootDocument({ children }) {
421
400
  });
422
401
  }
423
402
  function RootLayout() {
424
- const { access, providers } = Route$4.useLoaderData();
403
+ const { access, providers } = Route$3.useLoaderData();
425
404
  if (access.status !== "authorized") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConsoleAccessPage, {
426
405
  access,
427
406
  providers
@@ -435,15 +414,15 @@ function AuthorizedConsole({ canSignOut }) {
435
414
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Outlet, {})
436
415
  })] });
437
416
  }
438
- var $$splitComponentImporter$1 = () => import("./signing-CQ70saFm.mjs");
439
- var Route$3 = createFileRoute("/signing")({ component: lazyRouteComponent($$splitComponentImporter$1, "component") });
440
- var $$splitComponentImporter = () => import("./api-keys-aXriWrv7.mjs");
417
+ var $$splitComponentImporter = () => import("./api-keys-B4sYm8dM.mjs");
418
+ var $$splitNotFoundComponentImporter = () => import("./api-keys-CEnM9fqG.mjs");
441
419
  var Route$2 = createFileRoute("/api-keys")({
442
- beforeLoad: ({ context }) => ensureApiKeyRouteAccess(context.queryClient),
420
+ beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "apiKeys"),
421
+ notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
443
422
  component: lazyRouteComponent($$splitComponentImporter, "component")
444
423
  });
445
424
  var handleAuthRequest = async ({ request }) => {
446
- const { handleConsoleAuth } = await import("./auth.server-CmicHh0J.mjs");
425
+ const { handleConsoleAuth } = await import("./auth.server-DFpyxRDd.mjs");
447
426
  return handleConsoleAuth(request);
448
427
  };
449
428
  var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
@@ -451,68 +430,70 @@ var Route$1 = createFileRoute("/api/auth/$")({ server: { handlers: {
451
430
  POST: handleAuthRequest
452
431
  } } });
453
432
  var Route = createFileRoute("/api/bundles/$bundleId/download")({ server: { handlers: { GET: async ({ params, request }) => {
454
- const { prepareConfig } = await import("./config.server-C-d1QaBU.mjs");
455
- const { downloadBundle } = await import("./downloadBundle-CI7JUKvC.mjs");
456
- const { databaseClient, storagePlugin } = await prepareConfig(request);
433
+ const { prepareConfig } = await import("./config.server-DskXCAyI.mjs");
434
+ const { downloadBundle } = await import("./downloadBundle-CZysjmNW.mjs");
435
+ const { core, storage } = await prepareConfig(request);
457
436
  return downloadBundle(params.bundleId, {
458
- databaseClient,
459
- storagePlugin
437
+ core,
438
+ storage
460
439
  });
461
440
  } } } });
462
- var SigningRoute = Route$3.update({
463
- id: "/signing",
464
- path: "/signing",
465
- getParentRoute: () => Route$4
466
- });
467
- var InstallationsRoute = Route$7.update({
468
- id: "/installations",
469
- path: "/installations",
470
- getParentRoute: () => Route$4
471
- });
472
- var InsightsRoute = Route$5.update({
473
- id: "/insights",
474
- path: "/insights",
475
- getParentRoute: () => Route$4
476
- });
477
- var ApiKeysRoute = Route$2.update({
478
- id: "/api-keys",
479
- path: "/api-keys",
480
- getParentRoute: () => Route$4
481
- });
482
441
  var rootRouteChildren = {
483
442
  IndexRoute: Route$8.update({
484
443
  id: "/",
485
444
  path: "/",
486
- getParentRoute: () => Route$4
445
+ getParentRoute: () => Route$3
487
446
  }),
488
- ApiKeysRoute,
489
- InsightsRoute,
490
- InstallationsRoute,
491
- SigningRoute,
492
- InsightsDistributionRoute: Route$6.update({
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({
493
468
  id: "/insights_/distribution",
494
469
  path: "/insights/distribution",
495
- getParentRoute: () => Route$4
470
+ getParentRoute: () => Route$3
496
471
  }),
497
472
  ApiAuthSplatRoute: Route$1.update({
498
473
  id: "/api/auth/$",
499
474
  path: "/api/auth/$",
500
- getParentRoute: () => Route$4
475
+ getParentRoute: () => Route$3
501
476
  }),
502
477
  ApiBundlesBundleIdDownloadRoute: Route.update({
503
478
  id: "/api/bundles/$bundleId/download",
504
479
  path: "/api/bundles/$bundleId/download",
505
- getParentRoute: () => Route$4
480
+ getParentRoute: () => Route$3
506
481
  })
507
482
  };
508
- var routeTree = Route$4._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
+ };
509
490
  var getRouter = () => {
510
491
  const queryClient = new QueryClient();
511
492
  const router = createRouter({
512
493
  routeTree,
513
494
  context: { queryClient },
514
495
  scrollRestoration: true,
515
- getScrollRestorationKey: getInsightsScrollRestorationKey,
496
+ getScrollRestorationKey: (location) => routeScrollRestorationKey(router, location),
516
497
  defaultPreloadStaleTime: 0
517
498
  });
518
499
  setupRouterSsrQueryIntegration({