@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
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
- MIT License
1
+ MIT License with Hosted Service Attribution
2
2
 
3
- Copyright (c) 2023 Sungyu Kang
3
+ Copyright (c) 2023 Sungyu Kang
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -12,6 +12,17 @@ furnished to do so, subject to the following conditions:
12
12
  The above copyright notice and this permission notice shall be included in all
13
13
  copies or substantial portions of the Software.
14
14
 
15
+ Hosted service attribution. If you make the Software, a modified version of
16
+ it, or a service built on it available to third parties as a hosted or managed
17
+ service, that is, a service that third parties use to deliver updates to their
18
+ own apps, you must display the notice "Powered by hot-updater" with a link to
19
+ https://hot-updater.dev or https://github.com/gronxb/hot-updater where the
20
+ users of that service can reasonably see it, such as the service's dashboard,
21
+ the footer of its website, or its about page. The Software's sidebar displays
22
+ this notice, and keeping it in place satisfies this condition. This condition
23
+ does not apply when you run the Software only for your own apps, or for apps
24
+ that you build or operate for your clients.
25
+
15
26
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
27
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
28
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -19,15 +30,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
30
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
31
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
32
  SOFTWARE.
22
-
23
- ---
24
-
25
- ADDITIONAL DISCLAIMER
26
-
27
- The authors of this software shall not be held responsible for any legal issues,
28
- regulatory violations, policy violations, or disputes arising from the use,
29
- distribution, or integration of this software.
30
-
31
- Users are solely responsible for ensuring compliance with all applicable laws,
32
- regulations, and third-party policies (including but not limited to app store
33
- policies).
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Hot Updater Console (v2)
1
+ # Hot Updater Console
2
2
 
3
3
  Modern web-based management console for Hot Updater built with **TanStack Start** and **shadcn/ui**.
4
4
 
@@ -6,11 +6,11 @@ Modern web-based management console for Hot Updater built with **TanStack Start*
6
6
 
7
7
  - **Bundle Management** - View, filter, and manage OTA update bundles
8
8
  - **Real-time Filtering** - Filter by platform (iOS/Android) and channel
9
- - **Bundle Editor** - Edit bundle configurations with intuitive forms
9
+ - **Release Editor** - Edit delivery policy, rollout, and target cohorts
10
10
  - **Rollout Control** - Adjust rollout percentage with visual slider
11
11
  - **Rollout Statistics** - View deployment metrics and success rates
12
- - **Channel Promotion** - Copy or move bundles between channels
13
- - **Emergency Rollback** - One-click disable and rollback
12
+ - **Channel Promotion** - Copy or move releases between channels
13
+ - **Rollback** - Disable a release and save; devices reconsider it on their next update check
14
14
  - **Dark Mode** - Full dark mode support with system preference detection
15
15
  - **Responsive Design** - Works seamlessly on desktop, tablet, and mobile
16
16
 
@@ -21,13 +21,11 @@ Modern web-based management console for Hot Updater built with **TanStack Start*
21
21
  - **TanStack Start** - Full-stack React framework with SSR
22
22
  - **TanStack Router** - File-based routing with type safety
23
23
  - **TanStack Query** - Data fetching and caching
24
- - **TanStack Form** - Form state management and validation
25
- - **TanStack Table** - Powerful table with sorting and pagination
26
24
  - **React 19** - Latest React features
27
25
 
28
26
  ### UI Components
29
27
 
30
- - **shadcn/ui** - High-quality accessible components (Radix Mira style)
28
+ - **shadcn/ui** - High-quality accessible components built on Base UI
31
29
  - **Tailwind CSS v4** - Utility-first CSS with oklch color system
32
30
  - **Lucide React** - Beautiful icon library
33
31
  - **Sonner** - Toast notifications
@@ -35,32 +33,38 @@ Modern web-based management console for Hot Updater built with **TanStack Start*
35
33
  ### Backend
36
34
 
37
35
  - **TanStack Start Server Functions** - Type-safe server endpoints
38
- - **Hot Updater Integration** - Storage and database plugin integration
36
+ - **Hot Updater Integration** - Storage and database adapter integration
39
37
 
40
38
  ## 📦 Installation
41
39
 
42
40
  ```bash
43
- # Install dependencies (from monorepo root)
41
+ # Install and build workspace dependencies (from monorepo root)
44
42
  pnpm install
43
+ pnpm -w build
45
44
  ```
46
45
 
47
46
  ## 🏃‍♂️ Development
48
47
 
49
48
  ```bash
50
- # Start development server
51
- pnpm dev
49
+ # Run these commands from the monorepo root
50
+ # Start the local development server
51
+ pnpm --dir packages/console dev
52
52
 
53
- # Build for production
54
- pnpm build
55
-
56
- # Preview production build
57
- pnpm preview
53
+ # Build and preview the local console package
54
+ pnpm --dir packages/console build
55
+ pnpm --dir packages/console preview
58
56
 
59
57
  # Type checking
60
- pnpm test:type
58
+ pnpm --dir packages/console test:type
61
59
  ```
62
60
 
63
- The console will be available at `http://localhost:3000`.
61
+ The development server is available at `http://localhost:3000`.
62
+
63
+ This package's Vite configuration uses the local console adapter, which grants
64
+ management access without sign-in in both development and built output. Keep
65
+ this build and preview local. For production hosting, follow the
66
+ [Console deployment guide](https://hot-updater.dev/docs/guides/console-deployment)
67
+ and configure its hosted template with a `ConsoleAuthAdapter`.
64
68
 
65
69
  ## 📁 Project Structure
66
70
 
@@ -68,26 +72,27 @@ The console will be available at `http://localhost:3000`.
68
72
  src/
69
73
  ├── routes/
70
74
  │ ├── __root.tsx # Root layout with providers
71
- │ ├── index.tsx # Bundle list page
72
- │ └── api/ # API routes (future)
75
+ │ ├── index.tsx # Bundle/release list page
76
+ │ ├── -releases-search.ts # URL filter validation
77
+ │ └── api/ # Authentication and bundle downloads
73
78
  ├── components/
74
79
  │ ├── ui/ # shadcn components
75
80
  │ ├── features/
76
- │ │ └── bundles/ # Bundle-related components
81
+ │ │ ├── bundles/ # Bundle metadata and rollout details
82
+ │ │ └── releases/ # Release policy editor
77
83
  │ ├── PlatformIcon.tsx # iOS/Android icons
78
84
  │ ├── BundleIdDisplay.tsx # Truncated bundle ID with tooltip
79
85
  │ ├── RolloutPercentageBadge.tsx
80
86
  │ ├── TimestampDisplay.tsx # UUIDv7 timestamp formatting
81
87
  │ ├── ChannelBadge.tsx
82
88
  │ └── EnabledStatusIcon.tsx
83
- ├── hooks/
84
- │ └── useFilterParams.ts # URL-based filter state
85
89
  ├── lib/
86
90
  │ ├── api.ts # React Query hooks
91
+ │ ├── api-rpc.ts # TanStack Start server functions
87
92
  │ ├── constants.ts # Shared constants
88
93
  │ ├── utils.ts # Utility functions
89
94
  │ └── server/
90
- │ ├── api.server.ts # Server functions
95
+ │ ├── auth.server.ts # Management access checks
91
96
  │ └── config.server.ts # Hot Updater config loader
92
97
  └── styles.css # Global styles & theme variables
93
98
  ```
@@ -96,64 +101,67 @@ src/
96
101
 
97
102
  ### Bundle List Page
98
103
 
99
- - **FilterToolbar** - Platform and channel filters with reset button
100
- - **BundlesTable** - Server-side paginated table (20 per page)
101
- - **BundleTableColumns** - Column definitions with custom cell renderers
104
+ - **BundlesPage** - Release-backed list with server-side pagination (20 per page)
105
+ - **BundleFilterToolbar** - Platform, channel, and enabled-state filters
106
+ - Both live in `src/routes/index.tsx`.
102
107
 
103
- ### Bundle Editor Sheet
108
+ ### Release Editor Sheet
104
109
 
105
- - **BundleEditorSheet** - Right-side slide-out panel
106
- - **BundleEditorForm** - TanStack Form with validation
110
+ - **ReleaseEditorSheet** - Slide-out editor for release policy, rollout, and promotion
107
111
  - **BundleMetadata** - Read-only bundle information display
112
+ - Saving preflights the policy, then updates it with the expected release revision.
113
+ - To roll back a release, turn off **Enabled** and select **Save changes**.
114
+ On the next update check, devices select a previous eligible release or the
115
+ built-in app when none remains; the app still controls applying the result.
108
116
 
109
117
  ### Dialogs
110
118
 
111
- - **PromoteChannelDialog** - Channel promotion with copy/move toggle
112
- - **DeleteBundleDialog** - Confirmation dialog with bundle details
113
- - **EmergencyRollbackButton** - One-click disable + 0% rollout
119
+ - **ReleaseEditorSheet** contains promotion and release-deletion dialogs.
120
+ - **RolloutCohortsDialog** displays rollout and targeted cohorts.
121
+ - **ChannelManagementDialog** creates and deletes channels.
114
122
 
115
123
  ## 🔌 API Integration
116
124
 
117
- The console integrates with the configured Hot Updater storage and database plugins through TanStack Start server functions:
125
+ The console integrates with the configured Hot Updater storage and database
126
+ adapters through TanStack Start server functions in `src/lib/api-rpc.ts`.
127
+ Functions with input take a `{ data: input }` argument:
118
128
 
119
- - `getConfig()` - Load console configuration
120
- - `getChannels()` - List available channels
121
- - `getBundles(filters)` - List bundles with pagination
122
- - `getBundle(bundleId)` - Get single bundle details
123
- - `updateBundle(bundleId, data)` - Update bundle configuration
124
- - `createBundle(bundle)` - Create new bundle
125
- - `deleteBundle(bundleId)` - Delete bundle
129
+ - `getConfig()` and `getChannels()` load configuration and channels.
130
+ - `getReleases({ data: { filter, limit, beforeReleaseId, afterReleaseId } })`
131
+ lists releases using the supported `ReleaseFilter` shapes.
132
+ - `getRelease({ data: { releaseId } })` reads a release.
133
+ - `preflightRelease({ data: { releaseId, expectedRevision, patch } })` validates
134
+ a `ReleasePolicyPatch`; `updateRelease` takes the same input to save it.
135
+ - `deleteRelease({ data: { releaseId, expectedRevision } })` deletes a release.
136
+ - `promoteRelease({ data: { releaseId, expectedRevision, targetChannel, action } })`
137
+ copies or moves a release; `action` is `"copy"` or `"move"`.
138
+ - `getBundle({ data: { bundleId } })` reads a bundle artifact.
139
+
140
+ Use one pagination cursor at a time.
126
141
 
127
142
  ## 🎯 Configuration
128
143
 
129
- Configure Hot Updater in `hot-updater.config.ts`:
144
+ The console reads `database`, `storage`, and `plugins` from
145
+ [hot-updater.config.ts](hot-updater.config.ts), as the CLI does, and runs the
146
+ plugins over the database as the server does. The checked-in
147
+ [demo database](demoDatabase.ts) seeds sample bundles, releases, and Insights
148
+ events through `assembleServer` from `@hot-updater/cli-tools`, over
149
+ `database.withoutLatency()`. For an empty local mock console, use this
150
+ `hot-updater.config.ts`:
130
151
 
131
152
  ```typescript
132
- import {
133
- createMockDatabaseData,
134
- mockDatabase,
135
- mockStorage,
136
- } from "@hot-updater/mock";
137
- import { bundleToRow, type Bundle } from "@hot-updater/plugin-core";
138
-
139
- const bundles: Bundle[] = [
140
- // ... your bundles
141
- ];
142
-
143
- const databaseData = createMockDatabaseData();
144
- for (const bundle of bundles) {
145
- databaseData.bundles.set(bundle.id, bundleToRow(bundle));
146
- }
153
+ import { mockDatabase, mockStorage } from "@hot-updater/mock";
147
154
 
148
155
  export default {
156
+ database: mockDatabase({ latency: { min: 500, max: 700 } }),
149
157
  storage: mockStorage({}),
150
- database: mockDatabase({
151
- latency: { min: 500, max: 700 },
152
- data: databaseData,
153
- }),
154
158
  };
155
159
  ```
156
160
 
161
+ Import the built-in factories from `hot-updater/plugins` and add `plugins`,
162
+ such as `[insights(), apiKeys()]`, to show their pages. Mock data is held in
163
+ memory and resets when the configuration is reloaded.
164
+
157
165
  ## 🌈 Theming
158
166
 
159
167
  The console uses Tailwind CSS v4 with oklch color space for accessible colors. Theme variables are defined in `src/styles.css`:
@@ -167,23 +175,23 @@ The console uses Tailwind CSS v4 with oklch color space for accessible colors. T
167
175
  - Full TypeScript strict mode
168
176
  - Type-safe server functions with TanStack Start
169
177
  - Type-safe routing with TanStack Router
170
- - Type-safe forms with TanStack Form
178
+ - Typed release-policy drafts and revision-aware mutations
171
179
 
172
180
  ## 📊 Data Flow
173
181
 
174
- 1. **URL State** → `useFilterParams()` hook manages filter state in URL
175
- 2. **Server Functions** → TanStack Start server functions call the configured storage and database plugins
176
- 3. **React Query** → `useBundlesQuery()` fetches and caches data
182
+ 1. **URL State** → `Route.useSearch()` and `-releases-search.ts` manage release filters
183
+ 2. **Server Functions** → TanStack Start server functions call the configured storage and database adapters
184
+ 3. **React Query** → `useReleasesQuery()` and `useBundleQuery()` fetch and cache data
177
185
  4. **UI Components** → Display data with shadcn components
178
- 5. **Mutations** → `useUpdateBundleMutation()` updates data with optimistic updates
179
- 6. **Cache Invalidation** → React Query automatically refreshes affected queries
186
+ 5. **Mutations** → `usePreflightReleaseMutation()` validates changes before `useUpdateReleaseMutation()` saves them
187
+ 6. **Cache Invalidation** → Successful updates invalidate release, catalog, and channel queries
180
188
 
181
189
  ## 🚦 Development Guidelines
182
190
 
183
191
  - **Server-only code** must use `.server.ts` extension
184
192
  - **Client-side constants** live in `src/lib/constants.ts`
185
193
  - **shadcn components** are customizable in `src/components/ui/`
186
- - **Form validation** uses TanStack Form validators
194
+ - **Release validation** checks the draft locally and preflights changes on the server
187
195
  - **Toast notifications** use Sonner for success/error feedback
188
196
 
189
197
  ## 🐛 Troubleshooting
@@ -196,12 +204,13 @@ The console uses Tailwind CSS v4 with oklch color space for accessible colors. T
196
204
  ### Development Server
197
205
 
198
206
  - Default port is 3000
199
- - Change port: `pnpm dev --port 3001`
207
+ - Change port: `pnpm --dir packages/console dev --port 3001`
200
208
 
201
209
  ### Hot Updater Config
202
210
 
203
- - Ensure `hot-updater.config.ts` is at package root
204
- - Verify the storage and database plugins are correctly initialized
211
+ - Ensure `hot-updater.config.ts` is at the package root and sets `database`
212
+ and `storage`
213
+ - Verify its storage and database adapters are correctly initialized
205
214
 
206
215
  ## 📝 License
207
216
 
package/lib/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { ConfigInput, DatabasePlugin } from "@hot-updater/plugin-core";
1
+ import { AnyHotUpdaterPlugin, ConfiguredDatabase, StorageAdapter } from "@hot-updater/plugin-core";
2
2
  //#region src/index.d.ts
3
3
  type ConsoleAuthProvider = "google" | "github";
4
4
  type ConsolePrincipal = Readonly<{
@@ -20,17 +20,29 @@ type ConsoleAuthAdapter = Readonly<{
20
20
  getAccess(request: Request): Promise<ConsoleAccess>;
21
21
  getProviders(request: Request): Promise<readonly ConsoleAuthProvider[]>;
22
22
  }>;
23
- type ConsoleSigningConfig = Readonly<{
24
- enabled: boolean;
25
- provider?: string;
26
- }>;
27
- type HotUpdaterConsoleConfig = Readonly<Omit<Pick<ConfigInput, "console" | "database" | "signing" | "storage">, "database"> & {
28
- database: DatabasePlugin;
29
- }>;
30
- type ResolvedHotUpdaterConsoleConfig = Readonly<Omit<HotUpdaterConsoleConfig, "signing"> & {
31
- signing?: ConsoleSigningConfig;
23
+ type HotUpdaterConsoleConfig = Readonly<{
24
+ /**
25
+ * The database your server runs on, such as `dynamoDB(...)`, or
26
+ * `standaloneRepository(...)`, which reaches a self-hosted server through
27
+ * its admin API.
28
+ */
29
+ database: ConfiguredDatabase;
30
+ /** The storage your server lists; the console reads bundle files with it. */
31
+ storage: StorageAdapter;
32
+ /**
33
+ * The plugins your server runs, such as the `plugins` a managed provider
34
+ * package exports or `[insights(), apiKeys()]`. The console runs them over
35
+ * `database` as the server does, and shows only the built-in features of
36
+ * the plugins listed. With `standaloneRepository`, they run on the server,
37
+ * and the console shows the features its admin API serves.
38
+ */
39
+ plugins?: readonly AnyHotUpdaterPlugin[];
40
+ console?: {
41
+ /** The Git repository whose commits the console links bundles to. */
42
+ gitUrl?: string;
43
+ };
32
44
  }>;
33
45
  type HotUpdaterConsoleConfigSource = HotUpdaterConsoleConfig | ((request: Request) => HotUpdaterConsoleConfig | Promise<HotUpdaterConsoleConfig>);
34
46
  declare const defineConsoleConfig: <const TConfig extends HotUpdaterConsoleConfigSource>(config: TConfig) => TConfig;
35
47
  //#endregion
36
- export { ConsoleAccess, ConsoleAuthAdapter, ConsoleAuthProvider, ConsolePrincipal, ConsoleSigningConfig, HotUpdaterConsoleConfig, HotUpdaterConsoleConfigSource, ResolvedHotUpdaterConsoleConfig, defineConsoleConfig };
48
+ export { ConsoleAccess, ConsoleAuthAdapter, ConsoleAuthProvider, ConsolePrincipal, HotUpdaterConsoleConfig, HotUpdaterConsoleConfigSource, defineConsoleConfig };
@@ -38,7 +38,7 @@ const createConsoleModulesPlugin = (mode) => {
38
38
  const cacheDirectory = path.join(root, ".hot-updater/console");
39
39
  generatedRouteTreeFile = path.join(cacheDirectory, "routeTree.gen.ts");
40
40
  authFile = resolveFromRoot(root, mode.options.auth ?? "console.auth.ts");
41
- configFile = resolveFromRoot(root, mode.options.config ?? "hot-updater.config.ts");
41
+ configFile = resolveFromRoot(root, mode.options.config ?? "console.config.ts");
42
42
  writeFileIfChanged(path.join(cacheDirectory, "router.ts"), [`export { getRouter } from ${JSON.stringify(virtualPackageRouterModuleId)};`, ""].join("\n"));
43
43
  }
44
44
  return {
@@ -72,11 +72,21 @@ const createConsoleModulesPlugin = (mode) => {
72
72
  "import { loadConfig } from \"@hot-updater/cli-tools\";",
73
73
  "export default async () => {",
74
74
  " const config = await loadConfig(null);",
75
+ " if (config.database === undefined) {",
76
+ " throw new Error(",
77
+ " \"Set database in hot-updater.config.ts: the database your server runs on, such as d1Database(...), or standaloneRepository({ baseUrl }) to reach a self-hosted server through its admin API.\",",
78
+ " );",
79
+ " }",
80
+ " if (config.storage === undefined) {",
81
+ " throw new Error(",
82
+ " \"Set storage in hot-updater.config.ts: where your server stores bundles, which the console reads, such as r2Storage(...).\",",
83
+ " );",
84
+ " }",
75
85
  " return {",
76
- " console: { gitUrl: config.console.gitUrl },",
77
86
  " database: config.database,",
78
- " signing: config.signing,",
79
87
  " storage: config.storage,",
88
+ " plugins: config.plugins,",
89
+ " console: { gitUrl: config.console.gitUrl },",
80
90
  " };",
81
91
  "};"
82
92
  ].join("\n");
package/lib/vite.d.mts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { PluginOption } from "vite";
2
2
  //#region src/vite.d.ts
3
3
  interface HotUpdaterConsolePluginOptions {
4
+ /** The console's auth module, `console.auth.ts` by default. */
4
5
  readonly auth?: string;
6
+ /** The module whose default export is `defineConsoleConfig(...)`, `console.config.ts` by default. */
5
7
  readonly config?: string;
6
8
  }
7
9
  declare const hotUpdaterConsole: (options?: HotUpdaterConsolePluginOptions) => PluginOption[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hot-updater/console",
3
3
  "type": "module",
4
- "version": "1.0.0-rc.8",
4
+ "version": "1.0.0",
5
5
  "files": [
6
6
  ".output",
7
7
  "lib",
@@ -38,11 +38,11 @@
38
38
  "@fontsource-variable/inter": "^5.2.8",
39
39
  "@tailwindcss/vite": "^4.2.1",
40
40
  "@tanstack/react-devtools": "^0.10.0",
41
- "@tanstack/react-query": "^5.90.21",
42
- "@tanstack/react-router": "^1.167.0",
43
- "@tanstack/react-router-devtools": "^1.166.7",
44
- "@tanstack/react-router-ssr-query": "^1.166.7",
45
- "@tanstack/react-start": "^1.166.11",
41
+ "@tanstack/react-query": "^5.104.0",
42
+ "@tanstack/react-router": "^1.170.41",
43
+ "@tanstack/react-router-devtools": "^1.167.2",
44
+ "@tanstack/react-router-ssr-query": "^1.167.3",
45
+ "@tanstack/react-start": "^1.168.60",
46
46
  "@vitejs/plugin-react": "^6.0.1",
47
47
  "class-variance-authority": "^0.7.1",
48
48
  "clsx": "^2.1.1",
@@ -58,16 +58,16 @@
58
58
  "tailwindcss": "^4.2.1",
59
59
  "tw-animate-css": "^1.4.0",
60
60
  "verkit": "0.4.0",
61
- "@hot-updater/bsdiff": "1.0.0-rc.0",
62
- "@hot-updater/core": "1.0.0-rc.0",
63
- "@hot-updater/plugin-core": "1.0.0-rc.3",
64
- "@hot-updater/server": "1.0.0-rc.3"
61
+ "@hot-updater/bsdiff": "1.0.0",
62
+ "@hot-updater/protocol": "1.0.0",
63
+ "@hot-updater/server": "1.0.0",
64
+ "@hot-updater/plugin-core": "1.0.0"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@tanstack/devtools-vite": "^0.6.0",
68
68
  "@tanstack/react-form": "^1.28.5",
69
69
  "@tanstack/react-table": "^8.21.3",
70
- "@tanstack/router-plugin": "^1.166.9",
70
+ "@tanstack/router-plugin": "^1.168.42",
71
71
  "@testing-library/dom": "^10.4.0",
72
72
  "@testing-library/react": "^16.3.2",
73
73
  "@types/node": "^25.5.0",
@@ -86,11 +86,11 @@
86
86
  "vite-tsconfig-paths": "^6.1.1",
87
87
  "vitest": "4.1.4",
88
88
  "web-vitals": "^5.1.0",
89
- "@hot-updater/mock": "1.0.0-rc.3",
90
- "@hot-updater/cli-tools": "1.0.0-rc.3"
89
+ "@hot-updater/cli-tools": "1.0.0",
90
+ "@hot-updater/mock": "1.0.0"
91
91
  },
92
92
  "description": "React Native OTA solution for self-hosted",
93
- "license": "MIT",
93
+ "license": "SEE LICENSE IN LICENSE",
94
94
  "repository": {
95
95
  "type": "git",
96
96
  "url": "https://github.com/gronxb/hot-updater"