@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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/ConsoleFeatureUnavailable-jB4Loglh.js +1 -0
- package/.output/public/assets/EventDetails-B6yUsyNA.js +1 -0
- package/.output/public/assets/HashValueDisplay-BFX_kY3-.js +1 -0
- package/.output/public/assets/InsightsInfo-BNO0WznZ.js +1 -0
- package/.output/public/assets/InsightsPageHeader-B892oVml.js +1 -0
- package/.output/public/assets/NotFoundPage-DIqCpWa3.js +1 -0
- package/.output/public/assets/alert-dialog-Bbk_4-WJ.js +1 -0
- package/.output/public/assets/api-DCM0wr6O.js +1 -0
- package/.output/public/assets/api-keys-CIO9L_wu.js +1 -0
- package/.output/public/assets/api-keys-DVTL_--f.js +1 -0
- package/.output/public/assets/arrow-left-CnMYpqB7.js +1 -0
- package/.output/public/assets/arrow-up-right-BtffZA6e.js +1 -0
- package/.output/public/assets/chevron-right-BqD5wtFb.js +1 -0
- package/.output/public/assets/clipboard-DS9ucUQL.js +1 -0
- package/.output/public/assets/console-features-api-BH5m_PtQ.js +1 -0
- package/.output/public/assets/dialog-Bqbb7B0N.js +1 -0
- package/.output/public/assets/dist-LxKJB-Vu.js +1 -0
- package/.output/public/assets/empty-CuT2UhFp.js +1 -0
- package/.output/public/assets/field-BBDpjIqu.js +1 -0
- package/.output/public/assets/index-6o51GkFe.js +11 -0
- package/.output/public/assets/input-group-ja_30qaF.js +1 -0
- package/.output/public/assets/insights-CmraDzQh.js +1 -0
- package/.output/public/assets/insights-CxZ2GCYV.js +2 -0
- package/.output/public/assets/insights-api-BigAU9sZ.js +1 -0
- package/.output/public/assets/insights-usage-rpc-DYEhsCKT.js +1 -0
- package/.output/public/assets/insights-vNRCrfnS.js +42 -0
- package/.output/public/assets/insights_.distribution-ChOerfJt.js +1 -0
- package/.output/public/assets/insights_.distribution-D-e4iga8.js +1 -0
- package/.output/public/assets/insights_.distribution-DZtkibX1.js +2 -0
- package/.output/public/assets/installations-BazSJXE0.js +2 -0
- package/.output/public/assets/installations-ClHTqdAO.js +1 -0
- package/.output/public/assets/installations-DpKsBuHi.js +1 -0
- package/.output/public/assets/key-round-wS_SIZ6b.js +1 -0
- package/.output/public/assets/list-CgrYiadM.js +1 -0
- package/.output/public/assets/refresh-cw-BYgoNCco.js +1 -0
- package/.output/public/assets/remote-config-BWwHOkCK.js +1 -0
- package/.output/public/assets/remote-config-Br56BODb.js +6 -0
- package/.output/public/assets/remote-config-CXOi0LRu.js +1 -0
- package/.output/public/assets/routes-B88Erkpk.js +2 -0
- package/.output/public/assets/routes-CfzsAleC.js +1 -0
- package/.output/public/assets/search-DaTDPW25.js +1 -0
- package/.output/public/assets/select-BZZBXMkr.js +1 -0
- package/.output/public/assets/sidebar-DNVyJPfX.js +3 -0
- package/.output/public/assets/smartphone-DpTFgtKf.js +1 -0
- package/.output/public/assets/styles-DTGEAJFv.css +2 -0
- package/.output/public/assets/switch-DZ1TPwx-.js +1 -0
- package/.output/public/assets/table-Gm4qRWwE.js +1 -0
- package/.output/public/assets/tabs-C7FOEjFC.js +1 -0
- package/.output/public/assets/undo-2-CmrHjwFc.js +1 -0
- package/.output/public/assets/useCompositeListItem-9E4pj_CH.js +1 -0
- package/.output/public/assets/valueToPercent-CH8GCHaL.js +1 -0
- package/.output/server/__23tanstack-start-server-fn-resolver-BpRlos5Q.mjs +170 -0
- package/.output/server/_libs/@base-ui/react+[...].mjs +4389 -4207
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +3802 -4022
- package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +140 -97
- package/.output/server/_libs/lucide-react.mjs +221 -9
- package/.output/server/_libs/next-themes.mjs +1 -1
- package/.output/server/_libs/react-redux+[...].mjs +1 -1
- package/.output/server/_libs/recharts+[...].mjs +483 -901
- package/.output/server/_libs/sonner.mjs +1 -1
- package/.output/server/_libs/tanstack__history.mjs +68 -41
- package/.output/server/_libs/tanstack__query-core.mjs +2010 -309
- package/.output/server/_libs/tanstack__react-query.mjs +448 -21
- package/.output/server/_libs/verkit.mjs +102 -1
- package/.output/server/_ssr/BundleIdDisplay-x94o9rlU.mjs +13 -0
- package/.output/server/_ssr/ConsoleFeatureUnavailable-ldW8v8-q.mjs +58 -0
- package/.output/server/_ssr/EventDetails-Q8kfj9Nr.mjs +344 -0
- package/.output/server/_ssr/{HashValueDisplay-C5tS4oGo.mjs → HashValueDisplay-n1GholGS.mjs} +3 -3
- package/.output/server/_ssr/InsightsInfo-DuJFatQO.mjs +75 -0
- package/.output/server/_ssr/InsightsPageHeader-BSUX3Ye9.mjs +145 -0
- package/.output/server/_ssr/NotFoundPage-DZzOOzS3.mjs +37 -0
- package/.output/server/_ssr/{dialog-WiIAKl4L.mjs → alert-dialog-C43Doa0I.mjs} +6 -83
- package/.output/server/_ssr/{api-keys-aXriWrv7.mjs → api-keys-B4sYm8dM.mjs} +48 -9
- package/.output/server/_ssr/api-keys-CEnM9fqG.mjs +5 -0
- package/.output/server/_ssr/api-keys-rpc-BIFuUgMt.mjs +52 -0
- package/.output/server/_ssr/api-oZjRn9tP.mjs +186 -0
- package/.output/server/_ssr/api-rpc-BNiFRRK8.mjs +240 -0
- package/.output/server/_ssr/{auth-BF8mbAgF.mjs → auth-UP0wXs4i.mjs} +1 -1
- package/.output/server/_ssr/{auth-rpc-B7w3AdRr.mjs → auth-rpc-DnZqYxyq.mjs} +6 -6
- package/.output/server/_ssr/auth.server-DFpyxRDd.mjs +5374 -0
- package/.output/server/_ssr/bundleActivity-M5gzBFNg.mjs +18 -0
- package/.output/server/_ssr/config-WVX4IxSR.mjs +15 -0
- package/.output/server/_ssr/config.server-DskXCAyI.mjs +35 -0
- package/.output/server/_ssr/console-access-BJfAXknd.mjs +17 -0
- package/.output/server/_ssr/console-features-Oz0q20jJ.mjs +61 -0
- package/.output/server/_ssr/console-features-api-C9kiKvaV.mjs +43 -0
- package/.output/server/_ssr/console-features-rpc-P0GL7Z-R.mjs +19 -0
- package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-Cm6Tn0_Y.mjs} +67 -56
- package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-RLR4H-Fn.mjs} +2 -2
- package/.output/server/_ssr/databaseConfig-C5SkAyUy.mjs +5 -0
- package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Csbuzc9Q.mjs} +28 -5
- package/.output/server/_ssr/databaseRows-CPphvbag.mjs +73 -0
- package/.output/server/_ssr/dialog-BbYDMjdC.mjs +84 -0
- package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-CbQbBIw-.mjs} +140 -7
- package/.output/server/_ssr/{downloadBundle-CI7JUKvC.mjs → downloadBundle-CZysjmNW.mjs} +10 -10
- package/.output/server/_ssr/empty-CVLGfxuu.mjs +60 -0
- package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CPtwX8a7.mjs} +1 -1
- package/.output/server/_ssr/failureReports-DKDhVsXA.mjs +33 -0
- package/.output/server/_ssr/field-asw83X0v.mjs +189 -0
- package/.output/server/_ssr/getBundleChildren-Cv9iz1As.mjs +22 -0
- package/.output/server/_ssr/{input-group-Coj6SwVP.mjs → input-group-CuYJHosb.mjs} +2 -2
- package/.output/server/_ssr/insights-B55FG5fm.mjs +14 -0
- package/.output/server/_ssr/insights-CWnHIFUV.mjs +5 -0
- package/.output/server/_ssr/insights-CpLpedFZ.mjs +2315 -0
- package/.output/server/_ssr/insights-api-sjws23WF.mjs +122 -0
- package/.output/server/_ssr/insights-errors-BjnFUyZj.mjs +34 -0
- package/.output/server/_ssr/insights-failures-rpc-BvbWvqNf.mjs +36 -0
- package/.output/server/_ssr/insights-failures-xaa41Buf.mjs +46 -0
- package/.output/server/_ssr/insights-recovery-BWQhiZaF.mjs +28 -0
- package/.output/server/_ssr/insights-recovery-rpc-GiYXdkaY.mjs +32 -0
- package/.output/server/_ssr/{insights-rpc-l2-oBYth.mjs → insights-rpc-DP_8Rmz4.mjs} +22 -14
- package/.output/server/_ssr/insights-usage-BpBM0U0c.mjs +29 -0
- package/.output/server/_ssr/insights-usage-rpc-BiolgB8e.mjs +29 -0
- package/.output/server/_ssr/insights-usage-rpc-KStL0zOx.mjs +41 -0
- package/.output/server/_ssr/insightsUsage-CzhVjsc8.mjs +56 -0
- package/.output/server/_ssr/insights_.distribution-CVrnbP3R.mjs +7 -0
- package/.output/server/_ssr/insights_.distribution-D2HaNTAA.mjs +16 -0
- package/.output/server/_ssr/{insights_.distribution-INw6QxbU.mjs → insights_.distribution-DN9pR422.mjs} +50 -22
- package/.output/server/_ssr/installations-BHmbbnH8.mjs +5 -0
- package/.output/server/_ssr/{installations-DH-tQuRo.mjs → installations-BSCmFq8Q.mjs} +279 -367
- package/.output/server/_ssr/installations-DD1g__Nc.mjs +69 -0
- package/.output/server/_ssr/listReleases-BfUBlCHo.mjs +79 -0
- package/.output/server/_ssr/plugins-BaD1slHx.mjs +2086 -0
- package/.output/server/_ssr/release-adoption-005tQRpo.mjs +55 -0
- package/.output/server/_ssr/release-adoption-rpc-BsstqxUp.mjs +41 -0
- package/.output/server/_ssr/releaseAdoption-CtOFkwli.mjs +114 -0
- package/.output/server/_ssr/releaseManagement-DFMUnDF5.mjs +11 -0
- package/.output/server/_ssr/remote-config-C2Ee8lXO.mjs +5 -0
- package/.output/server/_ssr/remote-config-Dv1ccMo-.mjs +17 -0
- package/.output/server/_ssr/remote-config-of0lGQH8.mjs +2648 -0
- package/.output/server/_ssr/remote-config-rpc-BzX31mUS.mjs +115 -0
- package/.output/server/_ssr/rolldown-runtime-rSIU-vHC.mjs +13 -0
- package/.output/server/_ssr/{router-DfFyAp5p.mjs → router-D8NuoJ_I.mjs} +117 -136
- package/.output/server/_ssr/{routes-BtsfVx-p.mjs → routes-DgvnFqDy.mjs} +195 -429
- package/.output/server/_ssr/routes-V8sDybGf.mjs +409 -0
- package/.output/server/_ssr/runtime.server-De0QVWc9.mjs +104 -0
- package/.output/server/_ssr/schema-BiAVyEj2.mjs +361 -0
- package/.output/server/_ssr/{select-CyvLaMza.mjs → select-t3iXRwc9.mjs} +3 -3
- package/.output/server/_ssr/server-h4VxnExB.mjs +8325 -0
- package/.output/server/_ssr/{createSsrRpc-C-dLcQuy.mjs → sidebar-DJcErBMo.mjs} +107 -47
- package/.output/server/_ssr/ssr.mjs +1 -1
- package/.output/server/_ssr/start-BfFbHKMK.mjs +4 -0
- package/.output/server/_ssr/switch-E-btwMGt.mjs +43 -0
- package/.output/server/_ssr/{table-CkVhsNpe.mjs → table-37Dd23TN.mjs} +2 -2
- package/.output/server/_ssr/tabs-DEFnTm95.mjs +45 -0
- package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +40 -0
- package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C88s9jWF.mjs} +2 -2
- package/.output/server/_tanstack-start-manifest_v-55AGsehh.mjs +139 -0
- package/.output/server/index.mjs +303 -205
- package/LICENSE +13 -14
- package/README.md +80 -71
- package/lib/index.d.mts +23 -11
- package/lib/vite-internal.mjs +13 -3
- package/lib/vite.d.mts +2 -0
- package/package.json +14 -14
- package/src/components/AppSidebar.tsx +74 -75
- package/src/components/ConsoleAccessPage.tsx +5 -1
- package/src/components/ConsoleFeatureUnavailable.tsx +80 -0
- package/src/components/NotFoundPage.tsx +7 -7
- package/src/components/features/FeatureSlots.tsx +103 -0
- package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
- package/src/components/features/bundles/BundleMetadata.tsx +8 -5
- package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
- package/src/components/features/channels/ChannelManagementDialog.tsx +8 -6
- package/src/components/features/insights/AppUsage.tsx +41 -14
- package/src/components/features/insights/BuiltinBundle.tsx +36 -0
- package/src/components/features/insights/ComparedBundlesChart.tsx +310 -0
- package/src/components/features/insights/EstimatedCount.tsx +18 -0
- package/src/components/features/insights/EventDetails.tsx +390 -26
- package/src/components/features/insights/EventHistoryCard.tsx +111 -25
- package/src/components/features/insights/EventHistoryList.tsx +1 -1
- package/src/components/features/insights/FailureReports.tsx +407 -0
- package/src/components/features/insights/InsightsControls.tsx +240 -142
- package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
- package/src/components/features/insights/InsightsOverview.tsx +601 -403
- package/src/components/features/insights/InsightsPageHeader.tsx +19 -14
- package/src/components/features/insights/InsightsPeriodSelector.tsx +67 -12
- package/src/components/features/insights/InstallationHistoryCard.tsx +65 -10
- package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
- package/src/components/features/insights/ReleaseActivity.tsx +308 -0
- package/src/components/features/insights/ReportingDevicesSummary.tsx +13 -13
- package/src/components/features/insights/RollbackButton.tsx +118 -0
- package/src/components/features/insights/UpdateFailures.tsx +382 -0
- package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
- package/src/components/features/releases/ReleaseEditorSheet.tsx +27 -13
- package/src/components/features/remote-config/ConditionDialog.tsx +592 -0
- package/src/components/features/remote-config/ConditionsCard.tsx +247 -0
- package/src/components/features/remote-config/ParameterDialog.tsx +426 -0
- package/src/components/features/remote-config/ParametersCard.tsx +254 -0
- package/src/components/features/remote-config/PreviewCard.tsx +284 -0
- package/src/components/features/remote-config/PublishDialog.tsx +325 -0
- package/src/components/features/remote-config/RemoteConfigPage.tsx +353 -0
- package/src/components/features/remote-config/RuleSummary.tsx +21 -0
- package/src/components/features/remote-config/ValueInput.tsx +151 -0
- package/src/components/features/remote-config/VersionsCard.tsx +384 -0
- package/src/components/features/remote-config/remoteConfigFeatureUi.tsx +15 -0
- package/src/components/features/remote-config/useDateTimeText.ts +16 -0
- package/src/components/ui/sidebar.tsx +22 -29
- package/src/index.ts +26 -19
- package/src/lib/api-keys-api.ts +0 -28
- package/src/lib/api-keys-rpc.ts +27 -38
- package/src/lib/api-rpc.ts +125 -288
- package/src/lib/api.ts +15 -134
- package/src/lib/bundle-activity.ts +24 -4
- package/src/lib/console-access.ts +20 -0
- package/src/lib/console-features-api.ts +68 -0
- package/src/lib/console-features-rpc.ts +13 -0
- package/src/lib/console-features.ts +98 -0
- package/src/lib/insights-api.ts +56 -2
- package/src/lib/insights-errors.ts +64 -0
- package/src/lib/insights-failures-rpc.ts +36 -0
- package/src/lib/insights-failures.ts +130 -0
- package/src/lib/insights-recovery-rpc.ts +13 -17
- package/src/lib/insights-recovery.ts +12 -36
- package/src/lib/insights-retention.ts +21 -0
- package/src/lib/insights-rpc.ts +30 -12
- package/src/lib/insights-search.ts +50 -4
- package/src/lib/insights-usage-rpc.ts +15 -9
- package/src/lib/insights-usage.ts +41 -3
- package/src/lib/insights-view.ts +34 -5
- package/src/lib/release-adoption-api.ts +214 -0
- package/src/lib/release-adoption-rpc.ts +49 -0
- package/src/lib/release-adoption.ts +164 -0
- package/src/lib/remote-config-api.ts +119 -0
- package/src/lib/remote-config-draft.ts +666 -0
- package/src/lib/remote-config-rpc.ts +196 -0
- package/src/lib/scroll-restoration.ts +21 -0
- package/src/lib/server/auth.server.ts +13 -5
- package/src/lib/server/bundleActivity.ts +27 -28
- package/src/lib/server/config.server.ts +21 -76
- package/src/lib/server/console-feature-apis.ts +70 -0
- package/src/lib/server/console-runtime.server.ts +82 -38
- package/src/lib/server/downloadBundle.ts +14 -15
- package/src/lib/server/failureReports.ts +50 -0
- package/src/lib/server/getBundleChildren.ts +31 -122
- package/src/lib/server/insightsUsage.ts +52 -113
- package/src/lib/server/listReleases.ts +109 -44
- package/src/lib/server/releaseAdoption.ts +151 -0
- package/src/lib/server/releaseReachability.ts +8 -8
- package/src/lib/server/remoteConfig.ts +75 -0
- package/src/lib/server/runtime.server.ts +120 -31
- package/src/lib/server/updateFailures.ts +66 -0
- package/src/lib/use-dialog-target.ts +27 -0
- package/src/routeTree.gen.ts +44 -44
- package/src/router.tsx +3 -2
- package/src/routes/-installations-search.ts +32 -8
- package/src/routes/-releases-search.ts +76 -29
- package/src/routes/__root.tsx +7 -1
- package/src/routes/api/bundles/$bundleId/download.ts +2 -5
- package/src/routes/api-keys.tsx +5 -2
- package/src/routes/index.tsx +210 -152
- package/src/routes/insights.tsx +91 -23
- package/src/routes/insights_.distribution.tsx +50 -9
- package/src/routes/installations.tsx +97 -40
- package/src/routes/remote-config.tsx +42 -0
- package/src/styles.css +9 -0
- package/src/vite-internal.ts +15 -3
- package/src/vite.ts +2 -0
- package/.output/public/assets/HashValueDisplay-BpTc3Oyg.js +0 -1
- package/.output/public/assets/InsightsPageHeader-DC2eEst8.js +0 -1
- package/.output/public/assets/api-CdUyUqzR.js +0 -42
- package/.output/public/assets/api-keys-64PM9PwW.js +0 -1
- package/.output/public/assets/api-keys-api-BeaJnvY5.js +0 -1
- package/.output/public/assets/arrow-left-04Rh8Zgp.js +0 -1
- package/.output/public/assets/card-CYHs5FZv.js +0 -1
- package/.output/public/assets/chart-no-axes-combined-DwyMsVFW.js +0 -1
- package/.output/public/assets/createServerFn-DU71xucx.js +0 -3
- package/.output/public/assets/dialog-IVMkBRCq.js +0 -1
- package/.output/public/assets/dist-BR4GzeEu.js +0 -1
- package/.output/public/assets/field-B3CYDpjg.js +0 -1
- package/.output/public/assets/index-C39o7rJH.js +0 -10
- package/.output/public/assets/info-C3y9HNoU.js +0 -1
- package/.output/public/assets/input-group-nLZylhWF.js +0 -1
- package/.output/public/assets/insights-Bm9v8uO3.js +0 -2
- package/.output/public/assets/insights-DS3iO7Up.js +0 -1
- package/.output/public/assets/insights-search-Byj3g3Mp.js +0 -1
- package/.output/public/assets/insights-usage-rpc-BaGR3lgq.js +0 -1
- package/.output/public/assets/insights_.distribution-B1i6cjlQ.js +0 -1
- package/.output/public/assets/insights_.distribution-C1Wf27eB.js +0 -2
- package/.output/public/assets/installations-CkFW4fV9.js +0 -2
- package/.output/public/assets/installations-DxTaIcHD.js +0 -1
- package/.output/public/assets/lazyRouteComponent-BapzjYnb.js +0 -1
- package/.output/public/assets/list-Dqt53fWZ.js +0 -1
- package/.output/public/assets/loader-circle-CUKfUqow.js +0 -1
- package/.output/public/assets/preload-helper-ClBMtM1g.js +0 -1
- package/.output/public/assets/refresh-cw-CNE_2PnD.js +0 -1
- package/.output/public/assets/routes-Cgtvspjg.js +0 -2
- package/.output/public/assets/routes-O2r2UUN8.js +0 -1
- package/.output/public/assets/shield-check-BFcJ46kz.js +0 -1
- package/.output/public/assets/signing-BgspC-xP.js +0 -1
- package/.output/public/assets/styles-DnrWuBwd.css +0 -2
- package/.output/public/assets/table-BuWQgxJJ.js +0 -1
- package/.output/public/assets/useMutation-CSV9NCUl.js +0 -1
- package/.output/public/assets/useOpenInteractionType-D5kduCTD.js +0 -1
- package/.output/public/assets/valueToPercent-BAtcbSLk.js +0 -1
- package/.output/server/__23tanstack-start-server-fn-resolver-CmYkol9D.mjs +0 -150
- package/.output/server/_ssr/InsightsPageHeader-Dma3dVj1.mjs +0 -64
- package/.output/server/_ssr/api-C3bGmgY0.mjs +0 -332
- package/.output/server/_ssr/api-keys-api-BRF6rbRC.mjs +0 -60
- package/.output/server/_ssr/api-keys-rpc-BMa1ZM6N.mjs +0 -136
- package/.output/server/_ssr/api-rpc-BYQ2e0z6.mjs +0 -1399
- package/.output/server/_ssr/auth.server-CmicHh0J.mjs +0 -47
- package/.output/server/_ssr/bundle-signing-rpc-DbQ4pFAX.mjs +0 -16
- package/.output/server/_ssr/bundle-signing.server-Uqt1OF49.mjs +0 -12
- package/.output/server/_ssr/bundleActivity-pBrPSG01.mjs +0 -28
- package/.output/server/_ssr/card-B7KSO_25.mjs +0 -108
- package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
- package/.output/server/_ssr/config.server-C-d1QaBU.mjs +0 -368
- package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
- package/.output/server/_ssr/deleteBundle-8X-jq7Z7.mjs +0 -66
- package/.output/server/_ssr/field-BDwuU8RE.mjs +0 -74
- package/.output/server/_ssr/getBundleChildren-DoL8l_AS.mjs +0 -50
- package/.output/server/_ssr/insights-BDJjaDLp.mjs +0 -938
- package/.output/server/_ssr/insights-D0FWpfOS.mjs +0 -10
- package/.output/server/_ssr/insights-recovery-Cv6RSyeR.mjs +0 -21
- package/.output/server/_ssr/insights-recovery-rpc-BE9YsK_T.mjs +0 -37
- package/.output/server/_ssr/insights-search-1czJMZgk.mjs +0 -21
- package/.output/server/_ssr/insights-usage-rpc-BE_aCnea.mjs +0 -184
- package/.output/server/_ssr/insights-usage-rpc-CtAolz-t.mjs +0 -24
- package/.output/server/_ssr/insightsContract-B09K_Px1.mjs +0 -303
- package/.output/server/_ssr/insightsHistory-Ci4rYAgl.mjs +0 -41
- package/.output/server/_ssr/insightsRecovery-CaghWL2t.mjs +0 -113
- package/.output/server/_ssr/insightsUsage-DNIj6jxF.mjs +0 -71
- package/.output/server/_ssr/insights_.distribution-Cp0kf1vW.mjs +0 -10
- package/.output/server/_ssr/installations-Bhyiwx8G.mjs +0 -29
- package/.output/server/_ssr/routes-xBkI2Fmt.mjs +0 -37
- package/.output/server/_ssr/runtime.server-CsiKFp_Z.mjs +0 -436
- package/.output/server/_ssr/server-BdkuOWe8.mjs +0 -7468
- package/.output/server/_ssr/signing-CQ70saFm.mjs +0 -133
- package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
- package/.output/server/_tanstack-start-manifest_v-CrBsoKQQ.mjs +0 -125
- package/src/components/features/bundles/BundleActivityChart.tsx +0 -97
- package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -126
- package/src/components/features/signing/BundleSigningPage.tsx +0 -139
- package/src/lib/bundle-signing-api.ts +0 -14
- package/src/lib/bundle-signing-rpc.ts +0 -16
- package/src/lib/server/bundle-signing.server.ts +0 -23
- package/src/lib/server/deleteBundle.ts +0 -145
- package/src/lib/server/insightsHistory.ts +0 -52
- package/src/lib/server/insightsRecovery.ts +0 -187
- 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
|
|
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
|
-
- **
|
|
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
|
|
13
|
-
- **
|
|
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
|
|
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
|
|
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
|
-
#
|
|
51
|
-
|
|
49
|
+
# Run these commands from the monorepo root
|
|
50
|
+
# Start the local development server
|
|
51
|
+
pnpm --dir packages/console dev
|
|
52
52
|
|
|
53
|
-
# Build
|
|
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
|
|
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
|
-
│
|
|
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
|
-
│ │
|
|
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
|
-
│ ├──
|
|
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
|
-
- **
|
|
100
|
-
- **
|
|
101
|
-
-
|
|
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
|
-
###
|
|
108
|
+
### Release Editor Sheet
|
|
104
109
|
|
|
105
|
-
- **
|
|
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
|
-
- **
|
|
112
|
-
- **
|
|
113
|
-
- **
|
|
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
|
|
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()`
|
|
120
|
-
- `
|
|
121
|
-
|
|
122
|
-
- `
|
|
123
|
-
- `
|
|
124
|
-
|
|
125
|
-
- `
|
|
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
|
-
|
|
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
|
-
-
|
|
178
|
+
- Typed release-policy drafts and revision-aware mutations
|
|
171
179
|
|
|
172
180
|
## 📊 Data Flow
|
|
173
181
|
|
|
174
|
-
1. **URL State** → `
|
|
175
|
-
2. **Server Functions** → TanStack Start server functions call the configured storage and database
|
|
176
|
-
3. **React Query** → `
|
|
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** → `
|
|
179
|
-
6. **Cache Invalidation** →
|
|
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
|
-
- **
|
|
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
|
-
|
|
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 {
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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,
|
|
48
|
+
export { ConsoleAccess, ConsoleAuthAdapter, ConsoleAuthProvider, ConsolePrincipal, HotUpdaterConsoleConfig, HotUpdaterConsoleConfigSource, defineConsoleConfig };
|
package/lib/vite-internal.mjs
CHANGED
|
@@ -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 ?? "
|
|
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
|
|
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.
|
|
42
|
-
"@tanstack/react-router": "^1.
|
|
43
|
-
"@tanstack/react-router-devtools": "^1.
|
|
44
|
-
"@tanstack/react-router-ssr-query": "^1.
|
|
45
|
-
"@tanstack/react-start": "^1.
|
|
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
|
|
62
|
-
"@hot-updater/
|
|
63
|
-
"@hot-updater/
|
|
64
|
-
"@hot-updater/
|
|
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.
|
|
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/
|
|
90
|
-
"@hot-updater/
|
|
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": "
|
|
93
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
94
94
|
"repository": {
|
|
95
95
|
"type": "git",
|
|
96
96
|
"url": "https://github.com/gronxb/hot-updater"
|