@hot-updater/console 1.0.0-rc.2 → 1.0.0-rc.21
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-D0LPL1Gy.js +1 -0
- package/.output/public/assets/HashValueDisplay-BmuB4FW-.js +1 -0
- package/.output/public/assets/InsightsInfo--v4SC07c.js +1 -0
- package/.output/public/assets/InsightsPageHeader-dU83CAQY.js +1 -0
- package/.output/public/assets/NotFoundPage-B5mhGG2a.js +1 -0
- package/.output/public/assets/api-D-vOVlQ4.js +1 -0
- package/.output/public/assets/api-keys-Csh8ARKU.js +1 -0
- package/.output/public/assets/api-keys-OMPUoA_A.js +1 -0
- package/.output/public/assets/arrow-left-Bwq9X1eS.js +1 -0
- package/.output/public/assets/arrow-up-right-BkOVn4if.js +1 -0
- package/.output/public/assets/card-C_7d6O9a.js +1 -0
- package/.output/public/assets/console-features-api-C1jRZTGw.js +1 -0
- package/.output/public/assets/dialog-DE8wFN_P.js +1 -0
- package/.output/public/assets/dist-C7ENGzpS.js +1 -0
- package/.output/public/assets/empty-CVd5NlQD.js +1 -0
- package/.output/public/assets/field-C06q1iC9.js +1 -0
- package/.output/public/assets/index-BeWlQtO6.js +11 -0
- package/.output/public/assets/input-group-Bi61biIA.js +1 -0
- package/.output/public/assets/insights-BjnAtC0f.js +2 -0
- package/.output/public/assets/insights-D86m11yH.js +42 -0
- package/.output/public/assets/insights-DpYstMoY.js +1 -0
- package/.output/public/assets/insights-recovery-rpc-BIm5_ALc.js +1 -0
- package/.output/public/assets/insights-search-KIF7mRtB.js +1 -0
- package/.output/public/assets/insights-usage-rpc-VHj8vyBt.js +1 -0
- package/.output/public/assets/insights_.distribution-ADcrX48c.js +2 -0
- package/.output/public/assets/insights_.distribution-CuuJUN6Y.js +1 -0
- package/.output/public/assets/insights_.distribution-DJRjuXsO.js +1 -0
- package/.output/public/assets/installations-BSBBzqWs.js +2 -0
- package/.output/public/assets/installations-DqIE6WcO.js +1 -0
- package/.output/public/assets/installations-UsELbDvw.js +1 -0
- package/.output/public/assets/loader-circle-CnCBxzHp.js +1 -0
- package/.output/public/assets/mutation-Csp7xUNh.js +1 -0
- package/.output/public/assets/preload-helper-B-cOmpLH.js +1 -0
- package/.output/public/assets/refresh-cw-FF1NtzlQ.js +1 -0
- package/.output/public/assets/routes-CoN9XHP_.js +2 -0
- package/.output/public/assets/routes-DT1jB0Zi.js +1 -0
- package/.output/public/assets/sidebar-D8mJRF15.js +3 -0
- package/.output/public/assets/styles-Bwt7v6U5.css +2 -0
- package/.output/public/assets/table-WBgfvgXg.js +1 -0
- package/.output/public/assets/useCompositeListItem-CloBmDwn.js +1 -0
- package/.output/public/assets/useMutation-DO8cvsTx.js +1 -0
- package/.output/public/assets/useOpenInteractionType-ReGr9GzJ.js +1 -0
- package/.output/public/assets/valueToPercent-BvPAi4bP.js +1 -0
- package/.output/server/{__23tanstack-start-server-fn-resolver-B7ioJhtE.mjs → __23tanstack-start-server-fn-resolver-DMRD4e4f.mjs} +51 -47
- package/.output/server/_libs/@base-ui/react+[...].mjs +7044 -3622
- package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1554 -0
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +3803 -4023
- package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +141 -98
- package/.output/server/_libs/d3-array.mjs +231 -0
- package/.output/server/_libs/d3-color.mjs +330 -0
- package/.output/server/_libs/d3-format.mjs +252 -0
- package/.output/server/_libs/d3-interpolate.mjs +207 -0
- package/.output/server/_libs/d3-path.mjs +77 -0
- package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
- package/.output/server/_libs/d3-shape.mjs +818 -0
- package/.output/server/_libs/decimal.js-light.mjs +884 -0
- package/.output/server/_libs/es-toolkit.mjs +1159 -0
- package/.output/server/_libs/eventemitter3.mjs +236 -0
- package/.output/server/_libs/immer.mjs +532 -0
- package/.output/server/_libs/lucide-react.mjs +46 -32
- package/.output/server/_libs/next-themes.mjs +2 -2
- package/.output/server/_libs/react-redux+[...].mjs +205 -0
- package/.output/server/_libs/recharts+[...].mjs +14350 -0
- package/.output/server/_libs/sonner.mjs +2 -2
- package/.output/server/_libs/tanstack__history.mjs +68 -41
- package/.output/server/_libs/tanstack__query-core.mjs +1618 -309
- package/.output/server/_libs/tanstack__react-query.mjs +262 -22
- package/.output/server/_libs/verkit.mjs +99 -1
- package/.output/server/_runtime.mjs +10 -1
- package/.output/server/_ssr/ConsoleFeatureUnavailable-Du7jNPNS.mjs +58 -0
- package/.output/server/_ssr/{HashValueDisplay-DwpGLfrl.mjs → HashValueDisplay-GQvFkXoi.mjs} +3 -3
- package/.output/server/_ssr/InsightsInfo-Do7QSaFR.mjs +37 -0
- package/.output/server/_ssr/InsightsPageHeader-DSUWUWRc.mjs +154 -0
- package/.output/server/_ssr/NotFoundPage-DsF4Vrhg.mjs +37 -0
- package/.output/server/_ssr/api-BEiVs0H7.mjs +203 -0
- package/.output/server/_ssr/api-keys-BrvBWGRf.mjs +5 -0
- package/.output/server/_ssr/{api-keys-CZeTPQys.mjs → api-keys-K5v32nf7.mjs} +49 -9
- package/.output/server/_ssr/api-keys-rpc-B96bBllm.mjs +52 -0
- package/.output/server/_ssr/api-rpc-DcUe280B.mjs +296 -0
- package/.output/server/_ssr/{auth-rpc-DUaeOWKK.mjs → auth-rpc-C68W56DP.mjs} +6 -6
- package/.output/server/_ssr/auth.server-DM1J6NwR.mjs +5712 -0
- package/.output/server/_ssr/bundleActivity-CpuY9CTP.mjs +19 -0
- package/.output/server/_ssr/card-CPAEKx0w.mjs +49 -0
- package/.output/server/_ssr/config-nsIcsHh8.mjs +15 -0
- package/.output/server/_ssr/config.server-DDCZk3Sq.mjs +36 -0
- package/.output/server/_ssr/console-access-Da-2Qd7q.mjs +17 -0
- package/.output/server/_ssr/console-features-Dzu2iUGD.mjs +55 -0
- package/.output/server/_ssr/console-features-api-xAsSgFa_.mjs +43 -0
- package/.output/server/_ssr/console-features-rpc-qARGpB24.mjs +19 -0
- package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-BdBf_ezN.mjs} +67 -56
- package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-B_y2lrwA.mjs} +2 -2
- package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Bhxciy7Z.mjs} +28 -5
- package/.output/server/_ssr/databaseRows-DwMAjaF8.mjs +74 -0
- package/.output/server/_ssr/{dialog-DS-nw-pA.mjs → dialog-q__BJ7mQ.mjs} +2 -2
- package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-Cxo9ghYv.mjs} +140 -6
- package/.output/server/_ssr/{downloadBundle-CNnYxYO2.mjs → downloadBundle-BW9I-pMQ.mjs} +10 -10
- package/.output/server/_ssr/empty-DcBTAooP.mjs +49 -0
- package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CYdinE-i.mjs} +1 -1
- package/.output/server/_ssr/{table-CnZmon_Z.mjs → field-QCDBVpXA.mjs} +63 -51
- package/.output/server/_ssr/getBundleChildren-DIAGCF4a.mjs +22 -0
- package/.output/server/_ssr/{input-group-BpsnmvZw.mjs → input-group-hCk2nUoU.mjs} +2 -2
- package/.output/server/_ssr/insights-BfBO0RFr.mjs +1238 -0
- package/.output/server/_ssr/insights-DsAU3-TB.mjs +14 -0
- package/.output/server/_ssr/insights-RIfg447W.mjs +5 -0
- package/.output/server/_ssr/insights-api-CDn-QQHU.mjs +105 -0
- package/.output/server/_ssr/insights-failures-BBGMhuUr.mjs +44 -0
- package/.output/server/_ssr/insights-failures-rpc-rA2dctK2.mjs +21 -0
- package/.output/server/_ssr/insights-recovery-Dpk6Mfb9.mjs +28 -0
- package/.output/server/_ssr/insights-recovery-rpc-BCaF-xSd.mjs +46 -0
- package/.output/server/_ssr/insights-recovery-rpc-CcgYyUHk.mjs +20 -0
- package/.output/server/_ssr/{insights-rpc-38DujK0G.mjs → insights-rpc-keycmwzw.mjs} +22 -14
- package/.output/server/_ssr/insights-search-BRg5VsNe.mjs +25 -0
- package/.output/server/_ssr/insights-usage-cbw9n2Fq.mjs +29 -0
- package/.output/server/_ssr/insights-usage-rpc-BKgV1QDf.mjs +29 -0
- package/.output/server/_ssr/insights-usage-rpc-D-JYachy.mjs +41 -0
- package/.output/server/_ssr/insightsRecovery-B7oMc8d8.mjs +45 -0
- package/.output/server/_ssr/insightsUsage-Oa7kk5ek.mjs +56 -0
- package/.output/server/_ssr/insights_.distribution-BIqOqRW0.mjs +335 -0
- package/.output/server/_ssr/insights_.distribution-CuUrDa7P.mjs +5 -0
- package/.output/server/_ssr/insights_.distribution-RT_6x_ud.mjs +14 -0
- package/.output/server/_ssr/{installations-DiVKEF5T.mjs → installations-BO5CjX2z.mjs} +517 -54
- package/.output/server/_ssr/installations-BjaHiIfh.mjs +5 -0
- package/.output/server/_ssr/installations-Dt5luA-N.mjs +69 -0
- package/.output/server/_ssr/listReleases-BitHzOYB.mjs +79 -0
- package/.output/server/_ssr/releaseManagement-B3e7I8J9.mjs +11 -0
- package/.output/server/_ssr/{router-B9wG_9f8.mjs → router-DfVAixxe.mjs} +135 -139
- package/.output/server/_ssr/{routes-D7Yh_jfj.mjs → routes-C6LstNp8.mjs} +176 -455
- package/.output/server/_ssr/routes-Q3Uhmwwz.mjs +292 -0
- package/.output/server/_ssr/runtime.server-fL0o6I2b.mjs +1459 -0
- package/.output/server/_ssr/schema-BKY9SqaY.mjs +25 -0
- package/.output/server/_ssr/select-CUlInmjk.mjs +107 -0
- package/.output/server/_ssr/server-C43wq9ft.mjs +8330 -0
- package/.output/server/_ssr/{createSsrRpc-DjWNJ0uc.mjs → sidebar-DKbx2ach.mjs} +117 -63
- package/.output/server/_ssr/ssr.mjs +1 -1
- package/.output/server/_ssr/start-BXUOv_n8.mjs +4 -0
- package/.output/server/_ssr/table-NGWV8B-S.mjs +53 -0
- package/.output/server/_ssr/updateFailures-Jwe2Baab.mjs +24 -0
- package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C8bwiZr8.mjs} +2 -2
- package/.output/server/_tanstack-start-manifest_v-WQ5qGn8n.mjs +124 -0
- package/.output/server/index.mjs +267 -162
- package/LICENSE +13 -14
- package/README.md +82 -72
- 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 +100 -71
- 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 +99 -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 +2 -5
- package/src/components/features/insights/AppUsage.tsx +370 -0
- package/src/components/features/insights/EstimatedCount.tsx +18 -0
- package/src/components/features/insights/EventDetails.tsx +117 -37
- package/src/components/features/insights/EventHistoryCard.tsx +112 -26
- package/src/components/features/insights/EventHistoryList.tsx +2 -2
- package/src/components/features/insights/InsightsControls.tsx +265 -102
- package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
- package/src/components/features/insights/InsightsInfo.tsx +48 -0
- package/src/components/features/insights/InsightsOverview.tsx +176 -173
- package/src/components/features/insights/InsightsPageHeader.tsx +35 -20
- package/src/components/features/insights/InsightsPeriodSelector.tsx +89 -0
- package/src/components/features/insights/InstallationHistoryCard.tsx +52 -10
- package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
- package/src/components/features/insights/ReleaseActivity.tsx +188 -0
- package/src/components/features/insights/ReportingDevicesSummary.tsx +65 -0
- package/src/components/features/insights/UpdateFailures.tsx +319 -0
- package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
- package/src/components/features/releases/ReleaseEditorSheet.tsx +30 -7
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/empty.tsx +101 -0
- package/src/components/ui/scroll-area.tsx +52 -0
- package/src/components/ui/sidebar.tsx +22 -29
- package/src/components/ui/tabs.tsx +81 -0
- 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 +189 -266
- package/src/lib/api.ts +19 -102
- package/src/lib/bundle-activity.ts +31 -0
- 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 +91 -0
- package/src/lib/insights-api.ts +37 -1
- package/src/lib/insights-failures-rpc.ts +21 -0
- package/src/lib/insights-failures.ts +129 -0
- package/src/lib/insights-recovery-rpc.ts +51 -0
- package/src/lib/insights-recovery.ts +68 -0
- package/src/lib/insights-retention.ts +21 -0
- package/src/lib/insights-rpc.ts +30 -12
- package/src/lib/insights-search.ts +58 -0
- package/src/lib/insights-usage-rpc.ts +29 -0
- package/src/lib/insights-usage.ts +74 -0
- package/src/lib/insights-view.ts +38 -2
- package/src/lib/scroll-restoration.ts +21 -0
- package/src/lib/server/adminInsights.ts +124 -0
- package/src/lib/server/auth.server.ts +13 -5
- package/src/lib/server/bundleActivity.ts +37 -0
- package/src/lib/server/config.server.ts +21 -74
- package/src/lib/server/console-feature-apis.ts +59 -0
- package/src/lib/server/console-runtime.server.ts +82 -38
- package/src/lib/server/downloadBundle.ts +16 -15
- package/src/lib/server/getBundleChildren.ts +31 -122
- package/src/lib/server/insightsRecovery.ts +55 -0
- package/src/lib/server/insightsUsage.ts +63 -0
- package/src/lib/server/listReleases.ts +109 -44
- package/src/lib/server/releaseReachability.ts +8 -7
- package/src/lib/server/runtime.server.ts +120 -31
- package/src/lib/server/updateFailures.ts +31 -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 +10 -4
- package/src/routes/api/bundles/$bundleId/download.ts +2 -5
- package/src/routes/api-keys.tsx +5 -2
- package/src/routes/index.tsx +167 -104
- package/src/routes/insights.tsx +100 -59
- package/src/routes/insights_.distribution.tsx +398 -0
- package/src/routes/installations.tsx +98 -41
- package/src/vite-internal.ts +15 -3
- package/src/vite.ts +2 -0
- package/.output/public/assets/HashValueDisplay-CB0Eskit.js +0 -1
- package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +0 -1
- package/.output/public/assets/api-keys-BzKocqRy.js +0 -1
- package/.output/public/assets/api-keys-api-BHcODB7q.js +0 -1
- package/.output/public/assets/card-Dhr_eFYj.js +0 -1
- package/.output/public/assets/chart-no-axes-combined-Dy4WJv2U.js +0 -1
- package/.output/public/assets/composite-Bp98A0Ld.js +0 -1
- package/.output/public/assets/createServerFn-CA8fs7QD.js +0 -3
- package/.output/public/assets/dialog-CUTrcPlB.js +0 -1
- package/.output/public/assets/dist-C_NydL0e.js +0 -1
- package/.output/public/assets/index-DdAz-CXv.js +0 -10
- package/.output/public/assets/input-group-cSOG4wh_.js +0 -1
- package/.output/public/assets/insights-C0PBSZ-n.js +0 -1
- package/.output/public/assets/installations-CE33wgbY.js +0 -2
- package/.output/public/assets/installations-CStZja8x.js +0 -1
- package/.output/public/assets/lazyRouteComponent-Ccp3bwBY.js +0 -1
- package/.output/public/assets/link-CI8idAUi.js +0 -1
- package/.output/public/assets/loader-circle-BoxLrsOu.js +0 -1
- package/.output/public/assets/preload-helper-CQ36nxok.js +0 -1
- package/.output/public/assets/refresh-cw-Bqc72UZG.js +0 -1
- package/.output/public/assets/routes-DGVXdzpw.js +0 -2
- package/.output/public/assets/routes-DTlwOr8I.js +0 -1
- package/.output/public/assets/shield-check-uK3MHWJZ.js +0 -1
- package/.output/public/assets/signing-CMf4aqDO.js +0 -1
- package/.output/public/assets/styles-BCvbtKsm.css +0 -2
- package/.output/public/assets/table-2vcV89QB.js +0 -1
- package/.output/public/assets/useCompositeListItem-CHLITE_4.js +0 -1
- package/.output/public/assets/x-DCd0j8c6.js +0 -1
- package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +0 -484
- package/.output/server/_ssr/api-keys-api-BUPQVSpk.mjs +0 -60
- package/.output/server/_ssr/api-keys-rpc-Cs7tS5_j.mjs +0 -136
- package/.output/server/_ssr/api-rpc-tAupfGQm.mjs +0 -1399
- package/.output/server/_ssr/auth.server-DW71WzsD.mjs +0 -47
- package/.output/server/_ssr/bundle-signing-rpc-BhnBw0-d.mjs +0 -16
- package/.output/server/_ssr/bundle-signing.server-C4NW5mWx.mjs +0 -12
- package/.output/server/_ssr/card-BRiPmi0C.mjs +0 -108
- package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
- package/.output/server/_ssr/config.server-afDuAwaG.mjs +0 -368
- package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
- package/.output/server/_ssr/deleteBundle-BTGwBgzx.mjs +0 -66
- package/.output/server/_ssr/getBundleChildren-C0vh4ZvE.mjs +0 -50
- package/.output/server/_ssr/insights-BdS364Xu.mjs +0 -460
- package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +0 -303
- package/.output/server/_ssr/installations-CtA59MQG.mjs +0 -29
- package/.output/server/_ssr/routes-CKrrS2q2.mjs +0 -37
- package/.output/server/_ssr/runtime.server-DacU1TBV.mjs +0 -438
- package/.output/server/_ssr/server-D_C2rMzf.mjs +0 -7468
- package/.output/server/_ssr/signing-Dz1WkZOf.mjs +0 -133
- package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
- package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +0 -97
- package/src/components/features/insights/InsightsBundleReports.tsx +0 -51
- 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/routes/signing.tsx +0 -37
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { n as consoleFeatures } from "./console-features-Dzu2iUGD.mjs";
|
|
2
|
+
import { pt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
|
+
import { I as ChartNoAxesCombined, x as KeyRound } from "../_libs/lucide-react.mjs";
|
|
4
|
+
import { S as Skeleton } from "./sidebar-DKbx2ach.mjs";
|
|
5
|
+
import { f as lazyRouteComponent, h as Link, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
6
|
+
import { r as useQuery } from "../_libs/tanstack__react-query.mjs";
|
|
7
|
+
import { a as useConsoleFeatures, i as useConsoleFeature } from "./console-features-api-xAsSgFa_.mjs";
|
|
8
|
+
import { a as CardHeader, n as CardContent, o as CardTitle, t as Card } from "./card-CPAEKx0w.mjs";
|
|
9
|
+
import { i as failureRate, s as formatRate } from "./insights-failures-BBGMhuUr.mjs";
|
|
10
|
+
import { t as getBundleActivityRpc } from "./insights-recovery-rpc-CcgYyUHk.mjs";
|
|
11
|
+
import { l as useUpdateFailuresQuery } from "./insights-api-CDn-QQHU.mjs";
|
|
12
|
+
import { t as InsightsInfo } from "./InsightsInfo-Do7QSaFR.mjs";
|
|
13
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/routes-Q3Uhmwwz.js
|
|
14
|
+
var import_jsx_runtime = require_jsx_runtime();
|
|
15
|
+
/** What API key management adds: its navigation item. */
|
|
16
|
+
var apiKeysFeatureUi = { apiKeys: { navigation: {
|
|
17
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KeyRound, {}),
|
|
18
|
+
paths: ["/api-keys"],
|
|
19
|
+
link: ({ onClick }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
|
|
20
|
+
to: "/api-keys",
|
|
21
|
+
onClick
|
|
22
|
+
})
|
|
23
|
+
} } };
|
|
24
|
+
/** Release activity for bundle rows; mounted only where the console reads it. */
|
|
25
|
+
function useBundleActivityQuery(inputs) {
|
|
26
|
+
const sorted = [...inputs].sort((a, b) => a.releaseId.localeCompare(b.releaseId));
|
|
27
|
+
return useQuery({
|
|
28
|
+
queryKey: ["bundle-activity", sorted],
|
|
29
|
+
queryFn: () => getBundleActivityRpc({ data: sorted }),
|
|
30
|
+
enabled: sorted.length > 0,
|
|
31
|
+
staleTime: 3e4
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
var crashRate = (report) => {
|
|
35
|
+
const attempts = report.activeDays + report.failedLaunches;
|
|
36
|
+
return attempts === 0 ? "—" : `${(report.failedLaunches / attempts * 100).toFixed(2)}%`;
|
|
37
|
+
};
|
|
38
|
+
function BundleMovementSummary({ report, loading = false, input }) {
|
|
39
|
+
if (!report) return loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, {
|
|
40
|
+
"aria-label": "Loading release insights",
|
|
41
|
+
className: "h-4 w-40"
|
|
42
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
43
|
+
"aria-label": "Release insights unavailable",
|
|
44
|
+
children: "—"
|
|
45
|
+
});
|
|
46
|
+
const metrics = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
47
|
+
className: "flex min-w-[220px] flex-wrap items-baseline gap-x-3 gap-y-1 text-sm",
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["Downloads ", report.downloads.toLocaleString()] }),
|
|
50
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["Active days ", report.activeDays.toLocaleString()] }),
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
52
|
+
"Known crashes ",
|
|
53
|
+
report.failedLaunches.toLocaleString(),
|
|
54
|
+
" (",
|
|
55
|
+
crashRate(report),
|
|
56
|
+
")"
|
|
57
|
+
] }),
|
|
58
|
+
report.coverage.kind === "partial" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
59
|
+
className: "text-xs text-muted-foreground",
|
|
60
|
+
children: "Partial"
|
|
61
|
+
}) : null
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
65
|
+
className: "flex items-center gap-1",
|
|
66
|
+
children: [input ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
|
|
67
|
+
className: "rounded-sm hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
68
|
+
to: "/insights",
|
|
69
|
+
search: {
|
|
70
|
+
healthPlatform: input.platform,
|
|
71
|
+
healthChannel: input.channel,
|
|
72
|
+
releaseId: input.releaseId,
|
|
73
|
+
bundleWindow: "7d"
|
|
74
|
+
},
|
|
75
|
+
children: metrics
|
|
76
|
+
}) : metrics, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
|
|
77
|
+
label: "About release insight metrics",
|
|
78
|
+
children: "Active days count each installation once for each UTC day it launched this release. Known crashes are reported OTA launch failures that triggered recovery. The rate is known crashes divided by active days plus known crashes."
|
|
79
|
+
})]
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** The release's failed downloads and installs since its first report, and their rate. */
|
|
83
|
+
function BundleDownloadFailures({ input }) {
|
|
84
|
+
const query = useUpdateFailuresQuery({
|
|
85
|
+
platform: input.platform,
|
|
86
|
+
channel: input.channel,
|
|
87
|
+
releaseId: input.releaseId
|
|
88
|
+
});
|
|
89
|
+
const report = query.data;
|
|
90
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
91
|
+
className: "flex items-center gap-1 text-sm",
|
|
92
|
+
children: [report ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
93
|
+
"Download failures ",
|
|
94
|
+
report.failedUpdates.toLocaleString(),
|
|
95
|
+
" (",
|
|
96
|
+
formatRate(failureRate(report)),
|
|
97
|
+
")"
|
|
98
|
+
] }) : query.isPending ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, {
|
|
99
|
+
"aria-label": "Loading download failures",
|
|
100
|
+
className: "h-4 w-40"
|
|
101
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
102
|
+
"aria-label": "Download failures unavailable",
|
|
103
|
+
children: "—"
|
|
104
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
|
|
105
|
+
label: "About download failures",
|
|
106
|
+
children: "Reported failures to download or install this release, since its first report; each client reports one at most once a UTC day. The rate is the failure rate of update attempts: failures divided by failures plus download reports."
|
|
107
|
+
})]
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/** The bundle detail's Insights card, a section of the release editor: activity and download failures. */
|
|
111
|
+
function BundleInsightsSummary({ input }) {
|
|
112
|
+
const query = useBundleActivityQuery([input]);
|
|
113
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
|
|
114
|
+
className: "px-4 pt-4 pb-3",
|
|
115
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
|
|
116
|
+
className: "text-sm font-medium",
|
|
117
|
+
children: "Insights"
|
|
118
|
+
})
|
|
119
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardContent, {
|
|
120
|
+
className: "flex flex-col gap-2 px-4 pb-4",
|
|
121
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, {
|
|
122
|
+
input,
|
|
123
|
+
loading: query.isFetching,
|
|
124
|
+
report: query.data?.[input.releaseId]
|
|
125
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleDownloadFailures, { input })]
|
|
126
|
+
})] });
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The release editor's Insights card where the console reads no release
|
|
130
|
+
* activity, as through a self-hosted server's admin API: download failures
|
|
131
|
+
* alone. With release activity, its card shows them.
|
|
132
|
+
*/
|
|
133
|
+
function ReleaseFailuresSection({ input }) {
|
|
134
|
+
if (useConsoleFeature("insightsAnalytics")) return null;
|
|
135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
|
|
136
|
+
className: "px-4 pt-4 pb-3",
|
|
137
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
|
|
138
|
+
className: "text-sm font-medium",
|
|
139
|
+
children: "Insights"
|
|
140
|
+
})
|
|
141
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardContent, {
|
|
142
|
+
className: "px-4 pb-4",
|
|
143
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleDownloadFailures, { input })
|
|
144
|
+
})] });
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* One release's activity in the Bundles page's Insights column. Every cell
|
|
148
|
+
* asks for the page's releases under one query key, so the page makes one
|
|
149
|
+
* request.
|
|
150
|
+
*/
|
|
151
|
+
function ReleaseActivityCell({ releaseId, releases }) {
|
|
152
|
+
const query = useBundleActivityQuery(releases);
|
|
153
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, {
|
|
154
|
+
input: releases.find((release) => release.releaseId === releaseId),
|
|
155
|
+
loading: query.isFetching,
|
|
156
|
+
report: query.data?.[releaseId]
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
var consoleFeatureUi = {
|
|
160
|
+
insights: {
|
|
161
|
+
navigation: {
|
|
162
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartNoAxesCombined, {}),
|
|
163
|
+
paths: [
|
|
164
|
+
"/insights",
|
|
165
|
+
"/insights/distribution",
|
|
166
|
+
"/installations"
|
|
167
|
+
],
|
|
168
|
+
link: ({ features, onClick }) => features.insightsAnalytics ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
|
|
169
|
+
to: "/insights",
|
|
170
|
+
onClick
|
|
171
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
|
|
172
|
+
to: "/installations",
|
|
173
|
+
onClick
|
|
174
|
+
})
|
|
175
|
+
},
|
|
176
|
+
releaseSection: ({ release }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReleaseFailuresSection, { input: release })
|
|
177
|
+
},
|
|
178
|
+
insightsAnalytics: {
|
|
179
|
+
releaseColumn: { Cell: ReleaseActivityCell },
|
|
180
|
+
releaseSection: ({ release }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleInsightsSummary, { input: release })
|
|
181
|
+
},
|
|
182
|
+
...apiKeysFeatureUi
|
|
183
|
+
};
|
|
184
|
+
var featureIds = Object.keys(consoleFeatures);
|
|
185
|
+
/**
|
|
186
|
+
* What the features that are on add, in the registry's order, with each
|
|
187
|
+
* feature's label; nothing until the features load.
|
|
188
|
+
*/
|
|
189
|
+
var useFeatureUi = () => {
|
|
190
|
+
const features = useConsoleFeatures().data?.features;
|
|
191
|
+
if (features === void 0) return [];
|
|
192
|
+
return featureIds.flatMap((feature) => {
|
|
193
|
+
const ui = consoleFeatureUi[feature];
|
|
194
|
+
return ui !== void 0 && features[feature] ? [{
|
|
195
|
+
...ui,
|
|
196
|
+
feature,
|
|
197
|
+
label: consoleFeatures[feature].label,
|
|
198
|
+
features
|
|
199
|
+
}] : [];
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
/** The release list's feature columns, with their headers. */
|
|
203
|
+
var useReleaseColumns = () => useFeatureUi().flatMap(({ feature, label, releaseColumn }) => releaseColumn === void 0 ? [] : [{
|
|
204
|
+
...releaseColumn,
|
|
205
|
+
feature,
|
|
206
|
+
label
|
|
207
|
+
}]);
|
|
208
|
+
/** The release editor's feature sections, for one release. */
|
|
209
|
+
function ReleaseSections({ release }) {
|
|
210
|
+
return useFeatureUi().map(({ feature, releaseSection: Section }) => Section === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { release }, feature));
|
|
211
|
+
}
|
|
212
|
+
var optionalString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
213
|
+
/**
|
|
214
|
+
* The search a URL holds, reduced to one of the filter sets the release
|
|
215
|
+
* indexes serve: a bundle, a scope (with enabled), or a channel with its
|
|
216
|
+
* platform (with enabled). A channel without a platform lists iOS.
|
|
217
|
+
*/
|
|
218
|
+
function validateReleaseSearch(search) {
|
|
219
|
+
const beforeReleaseId = optionalString(search.beforeReleaseId);
|
|
220
|
+
const afterReleaseId = beforeReleaseId ? void 0 : optionalString(search.afterReleaseId);
|
|
221
|
+
const enabled = search.enabled === true || search.enabled === "true" ? true : search.enabled === false || search.enabled === "false" ? false : void 0;
|
|
222
|
+
const bundleId = optionalString(search.bundleId);
|
|
223
|
+
const scopeKey = bundleId ? void 0 : optionalString(search.scopeKey);
|
|
224
|
+
const channelId = bundleId || scopeKey ? void 0 : optionalString(search.channelId);
|
|
225
|
+
const platform = channelId === void 0 ? void 0 : search.platform === "android" ? "android" : "ios";
|
|
226
|
+
return {
|
|
227
|
+
afterReleaseId,
|
|
228
|
+
beforeReleaseId,
|
|
229
|
+
bundleId,
|
|
230
|
+
channelId,
|
|
231
|
+
enabled: scopeKey || channelId ? enabled : void 0,
|
|
232
|
+
platform,
|
|
233
|
+
releaseId: optionalString(search.releaseId),
|
|
234
|
+
scopeKey
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function releaseFilterOf(search) {
|
|
238
|
+
const enabled = search.enabled === void 0 ? {} : { enabled: search.enabled };
|
|
239
|
+
if (search.bundleId) return {
|
|
240
|
+
kind: "bundle",
|
|
241
|
+
bundleId: search.bundleId
|
|
242
|
+
};
|
|
243
|
+
if (search.scopeKey) return {
|
|
244
|
+
kind: "scope",
|
|
245
|
+
scopeKey: search.scopeKey,
|
|
246
|
+
...enabled
|
|
247
|
+
};
|
|
248
|
+
if (search.channelId && search.platform) return {
|
|
249
|
+
kind: "channelPlatform",
|
|
250
|
+
channelId: search.channelId,
|
|
251
|
+
platform: search.platform,
|
|
252
|
+
...enabled
|
|
253
|
+
};
|
|
254
|
+
return { kind: "all" };
|
|
255
|
+
}
|
|
256
|
+
function hasReleaseFilters(search) {
|
|
257
|
+
return releaseFilterOf(search).kind !== "all";
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* A new filter starts from the first page. A bundle or scope filter replaces
|
|
261
|
+
* the others, and choosing a channel or platform clears them.
|
|
262
|
+
*/
|
|
263
|
+
function updateReleaseFilters(current, filters) {
|
|
264
|
+
const next = {
|
|
265
|
+
...current,
|
|
266
|
+
...filters
|
|
267
|
+
};
|
|
268
|
+
if (filters.bundleId) return validateReleaseSearch({ bundleId: next.bundleId });
|
|
269
|
+
if (filters.scopeKey) return validateReleaseSearch({
|
|
270
|
+
scopeKey: next.scopeKey,
|
|
271
|
+
enabled: next.enabled
|
|
272
|
+
});
|
|
273
|
+
if ("channelId" in filters || "platform" in filters) return validateReleaseSearch({
|
|
274
|
+
channelId: next.channelId,
|
|
275
|
+
enabled: next.enabled,
|
|
276
|
+
platform: next.platform
|
|
277
|
+
});
|
|
278
|
+
return validateReleaseSearch({
|
|
279
|
+
bundleId: next.bundleId,
|
|
280
|
+
channelId: next.channelId,
|
|
281
|
+
enabled: next.enabled,
|
|
282
|
+
platform: next.platform,
|
|
283
|
+
scopeKey: next.scopeKey
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
var $$splitComponentImporter = () => import("./routes-C6LstNp8.mjs");
|
|
287
|
+
var Route = createFileRoute("/")({
|
|
288
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
289
|
+
validateSearch: validateReleaseSearch
|
|
290
|
+
});
|
|
291
|
+
//#endregion
|
|
292
|
+
export { updateReleaseFilters as a, releaseFilterOf as i, Route as n, useFeatureUi as o, hasReleaseFilters as r, useReleaseColumns as s, ReleaseSections as t };
|