@hot-updater/console 1.0.0-rc.1 → 1.0.0-rc.2

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 (181) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/HashValueDisplay-CB0Eskit.js +1 -0
  3. package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +1 -0
  4. package/.output/public/assets/api-keys-BzKocqRy.js +1 -0
  5. package/.output/public/assets/api-keys-api-BHcODB7q.js +1 -0
  6. package/.output/public/assets/card-Dhr_eFYj.js +1 -0
  7. package/.output/public/assets/{chart-no-axes-combined-FaYMGmQS.js → chart-no-axes-combined-Dy4WJv2U.js} +1 -1
  8. package/.output/public/assets/composite-Bp98A0Ld.js +1 -0
  9. package/.output/public/assets/createServerFn-CA8fs7QD.js +3 -0
  10. package/.output/public/assets/dialog-CUTrcPlB.js +1 -0
  11. package/.output/public/assets/dist-C_NydL0e.js +1 -0
  12. package/.output/public/assets/index-DdAz-CXv.js +10 -0
  13. package/.output/public/assets/input-group-cSOG4wh_.js +1 -0
  14. package/.output/public/assets/insights-C0PBSZ-n.js +1 -0
  15. package/.output/public/assets/installations-CE33wgbY.js +2 -0
  16. package/.output/public/assets/installations-CStZja8x.js +1 -0
  17. package/.output/public/assets/lazyRouteComponent-Ccp3bwBY.js +1 -0
  18. package/.output/public/assets/link-CI8idAUi.js +1 -0
  19. package/.output/public/assets/loader-circle-BoxLrsOu.js +1 -0
  20. package/.output/public/assets/{refresh-cw-BkbfZ62O.js → refresh-cw-Bqc72UZG.js} +1 -1
  21. package/.output/public/assets/{routes-BuoI5-Cr.js → routes-DGVXdzpw.js} +2 -2
  22. package/.output/public/assets/routes-DTlwOr8I.js +1 -0
  23. package/.output/public/assets/{shield-check-DE_hVuHu.js → shield-check-uK3MHWJZ.js} +1 -1
  24. package/.output/public/assets/signing-CMf4aqDO.js +1 -0
  25. package/.output/public/assets/styles-BCvbtKsm.css +2 -0
  26. package/.output/public/assets/table-2vcV89QB.js +1 -0
  27. package/.output/public/assets/useCompositeListItem-CHLITE_4.js +1 -0
  28. package/.output/public/assets/x-DCd0j8c6.js +1 -0
  29. package/.output/server/{__23tanstack-start-server-fn-resolver-Dftxlm2E.mjs → __23tanstack-start-server-fn-resolver-B7ioJhtE.mjs} +46 -54
  30. package/.output/server/_libs/@base-ui/react+[...].mjs +283 -2417
  31. package/.output/server/_libs/@tanstack/react-router+[...].mjs +52 -4
  32. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +2 -2
  33. package/.output/server/_libs/lucide-react.mjs +36 -3
  34. package/.output/server/_libs/next-themes.mjs +2 -2
  35. package/.output/server/_libs/sonner.mjs +2 -2
  36. package/.output/server/_libs/tanstack__react-query.mjs +2 -2
  37. package/.output/server/_libs/verkit.mjs +20 -15
  38. package/.output/server/_runtime.mjs +1 -10
  39. package/.output/server/_ssr/HashValueDisplay-DwpGLfrl.mjs +55 -0
  40. package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +484 -0
  41. package/.output/server/_ssr/{api-keys-CpBqHpuC.mjs → api-keys-CZeTPQys.mjs} +9 -11
  42. package/.output/server/_ssr/{api-keys-api-Czkp57UV.mjs → api-keys-api-BUPQVSpk.mjs} +2 -2
  43. package/.output/server/_ssr/{api-keys-rpc-BTtMDSoR.mjs → api-keys-rpc-Cs7tS5_j.mjs} +5 -5
  44. package/.output/server/_ssr/{api-rpc-BEX8ISai.mjs → api-rpc-tAupfGQm.mjs} +73 -142
  45. package/.output/server/_ssr/{auth-rpc-BFMEC-TT.mjs → auth-rpc-DUaeOWKK.mjs} +2 -2
  46. package/.output/server/_ssr/{bundle-signing-rpc-BbCFUQSu.mjs → bundle-signing-rpc-BhnBw0-d.mjs} +2 -2
  47. package/.output/server/_ssr/{card-Bsc8mRis.mjs → card-BRiPmi0C.mjs} +25 -3
  48. package/.output/server/_ssr/{config.server-DQYEr_5X.mjs → config.server-afDuAwaG.mjs} +14 -7
  49. package/.output/server/_ssr/{createSsrRpc-DhfrxEjg.mjs → createSsrRpc-DjWNJ0uc.mjs} +6 -6
  50. package/.output/server/_ssr/databaseJsonValue-d6I3nAS4.mjs +45 -0
  51. package/.output/server/_ssr/{databaseRows-QlCYLi0H.mjs → databaseRows-5bCRTxm-.mjs} +4 -44
  52. package/.output/server/_ssr/{deleteBundle-Cu_XOMt0.mjs → deleteBundle-BTGwBgzx.mjs} +2 -2
  53. package/.output/server/_ssr/{dialog-C0vKUp8R.mjs → dialog-DS-nw-pA.mjs} +2 -2
  54. package/.output/server/_ssr/{dist-BVSLTpoP.mjs → dist-CyzPaI5v.mjs} +2 -2
  55. package/.output/server/_ssr/{getBundleChildren-BcRMFoDF.mjs → getBundleChildren-C0vh4ZvE.mjs} +2 -2
  56. package/.output/server/_ssr/input-group-BpsnmvZw.mjs +70 -0
  57. package/.output/server/_ssr/insights-BdS364Xu.mjs +460 -0
  58. package/.output/server/_ssr/insights-rpc-38DujK0G.mjs +57 -0
  59. package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +303 -0
  60. package/.output/server/_ssr/installations-CtA59MQG.mjs +29 -0
  61. package/.output/server/_ssr/installations-DiVKEF5T.mjs +627 -0
  62. package/.output/server/_ssr/{router-BxBEvtF1.mjs → router-B9wG_9f8.mjs} +23 -32
  63. package/.output/server/_ssr/{routes-BC7rn-tf.mjs → routes-CKrrS2q2.mjs} +3 -3
  64. package/.output/server/_ssr/{routes-CM5KAwpB.mjs → routes-D7Yh_jfj.mjs} +402 -389
  65. package/.output/server/_ssr/runtime.server-DacU1TBV.mjs +438 -0
  66. package/.output/server/_ssr/{server-CpzW--lT.mjs → server-D_C2rMzf.mjs} +5 -5
  67. package/.output/server/_ssr/{signing-jk4HANnl.mjs → signing-Dz1WkZOf.mjs} +5 -6
  68. package/.output/server/_ssr/ssr.mjs +1 -1
  69. package/.output/server/_ssr/{field-DASCh-5d.mjs → table-CnZmon_Z.mjs} +51 -5
  70. package/.output/server/_ssr/{uuidv7-CaKuKXrV.mjs → uuidv7-D0QFkPL_.mjs} +3 -3
  71. package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +97 -0
  72. package/.output/server/index.mjs +164 -178
  73. package/lib/index.d.mts +4 -3
  74. package/lib/vite-internal.mjs +1 -1
  75. package/lib/vite.d.mts +0 -1
  76. package/package.json +8 -8
  77. package/src/components/AppSidebar.tsx +10 -14
  78. package/src/components/ConsoleAccessPage.tsx +1 -1
  79. package/src/components/HashValueDisplay.tsx +11 -2
  80. package/src/components/features/bundles/BundleChildrenPanel.tsx +7 -6
  81. package/src/components/features/bundles/BundleMetadata.tsx +1 -20
  82. package/src/components/features/channels/ChannelManagementDialog.tsx +1 -1
  83. package/src/components/features/insights/EventDetails.tsx +151 -0
  84. package/src/components/features/insights/EventHistoryCard.tsx +245 -0
  85. package/src/components/features/insights/EventHistoryList.tsx +63 -0
  86. package/src/components/features/insights/InsightsBundleReports.tsx +51 -0
  87. package/src/components/features/insights/InsightsControls.tsx +82 -76
  88. package/src/components/features/insights/InsightsErrorAlert.tsx +5 -5
  89. package/src/components/features/insights/InsightsOverview.tsx +156 -161
  90. package/src/components/features/insights/InsightsPageHeader.tsx +48 -0
  91. package/src/components/features/insights/InsightsPagination.tsx +52 -0
  92. package/src/components/features/insights/InstallationHistoryCard.tsx +178 -176
  93. package/src/components/features/insights/InstallationMatchesCard.tsx +111 -65
  94. package/src/components/features/insights/InstallationPageHeader.tsx +57 -105
  95. package/src/components/features/releases/ReleaseEditorSheet.tsx +24 -24
  96. package/src/components/ui/badge.tsx +2 -0
  97. package/src/components/ui/combobox.tsx +1 -0
  98. package/src/components/ui/skeleton.tsx +4 -1
  99. package/src/components/ui/tooltip.tsx +1 -1
  100. package/src/index.ts +7 -2
  101. package/src/lib/api-rpc.ts +19 -90
  102. package/src/lib/api.ts +0 -99
  103. package/src/lib/insights-api.ts +93 -137
  104. package/src/lib/insights-rpc.ts +69 -199
  105. package/src/lib/insights-view.ts +15 -0
  106. package/src/lib/public-bundle-error.ts +19 -0
  107. package/src/lib/server/releaseReachability.ts +1 -4
  108. package/src/lib/server/runtime.server.ts +5 -141
  109. package/src/router.tsx +3 -0
  110. package/src/routes/-installations-search.ts +25 -12
  111. package/src/routes/__root.tsx +6 -16
  112. package/src/routes/index.tsx +21 -81
  113. package/src/routes/insights.tsx +50 -105
  114. package/src/routes/installations.tsx +290 -138
  115. package/src/styles.css +6 -0
  116. package/.output/public/assets/BundleIdDisplay-D4ErdU5_.js +0 -1
  117. package/.output/public/assets/InsightsCapabilityContext-B42VqvP6.js +0 -1
  118. package/.output/public/assets/api-keys-api-DGVTTvTJ.js +0 -1
  119. package/.output/public/assets/api-keys-z16OZIP4.js +0 -1
  120. package/.output/public/assets/badge-Br_KDO0J.js +0 -1
  121. package/.output/public/assets/card-DzuEXvyJ.js +0 -1
  122. package/.output/public/assets/createServerFn-gM2-LFBy.js +0 -3
  123. package/.output/public/assets/dialog-BeAENgez.js +0 -1
  124. package/.output/public/assets/dist-Bssh_cv0.js +0 -1
  125. package/.output/public/assets/field-Buq148-A.js +0 -1
  126. package/.output/public/assets/index-uOpQAIC4.js +0 -10
  127. package/.output/public/assets/input-group-B3p5UpyW.js +0 -1
  128. package/.output/public/assets/insights-DJTr7Ozn.js +0 -1
  129. package/.output/public/assets/insights-api-DVMOoRMS.js +0 -1
  130. package/.output/public/assets/installations-BY64iIAK.js +0 -2
  131. package/.output/public/assets/installations-D5v9i3AL.js +0 -1
  132. package/.output/public/assets/lazyRouteComponent-DKYu5cZJ.js +0 -1
  133. package/.output/public/assets/routes-C8fvgETO.js +0 -1
  134. package/.output/public/assets/search-qsIDvS2I.js +0 -1
  135. package/.output/public/assets/signing-mJD88Y4C.js +0 -1
  136. package/.output/public/assets/styles-BZIG7t42.css +0 -2
  137. package/.output/public/assets/table-RamFEclP.js +0 -1
  138. package/.output/public/assets/useCompositeListItem-ChzDqdpc.js +0 -42
  139. package/.output/public/assets/useMutation-JsGVjQMY.js +0 -1
  140. package/.output/public/assets/useOpenInteractionType-Dwfy-SpA.js +0 -1
  141. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1554
  142. package/.output/server/_libs/d3-array.mjs +0 -231
  143. package/.output/server/_libs/d3-color.mjs +0 -330
  144. package/.output/server/_libs/d3-format.mjs +0 -252
  145. package/.output/server/_libs/d3-interpolate.mjs +0 -207
  146. package/.output/server/_libs/d3-path.mjs +0 -77
  147. package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
  148. package/.output/server/_libs/d3-shape.mjs +0 -818
  149. package/.output/server/_libs/decimal.js-light.mjs +0 -884
  150. package/.output/server/_libs/es-toolkit.mjs +0 -1134
  151. package/.output/server/_libs/eventemitter3.mjs +0 -236
  152. package/.output/server/_libs/immer.mjs +0 -532
  153. package/.output/server/_libs/react-redux+[...].mjs +0 -205
  154. package/.output/server/_libs/recharts+[...].mjs +0 -14117
  155. package/.output/server/_ssr/BundleActivityChart-CWcdPuUn.mjs +0 -288
  156. package/.output/server/_ssr/BundleIdDisplay-BEvB3MvA.mjs +0 -13
  157. package/.output/server/_ssr/InsightsCapabilityContext-Cx8fjm2s.mjs +0 -15
  158. package/.output/server/_ssr/badge-CpWXQwyF.mjs +0 -26
  159. package/.output/server/_ssr/input-group-etIsBUqv.mjs +0 -288
  160. package/.output/server/_ssr/insights-api-C1F7UreR.mjs +0 -71
  161. package/.output/server/_ssr/insights-input-9fEJF-ZG.mjs +0 -96
  162. package/.output/server/_ssr/insights-rpc-C-8R6kED.mjs +0 -155
  163. package/.output/server/_ssr/insights-ygT_aIfo.mjs +0 -858
  164. package/.output/server/_ssr/installations-DqRT1QTd.mjs +0 -535
  165. package/.output/server/_ssr/installations-K8TCYTYh.mjs +0 -19
  166. package/.output/server/_ssr/runtime.server-la7TRAH_.mjs +0 -527
  167. package/.output/server/_ssr/table-CU58HeI7.mjs +0 -53
  168. package/.output/server/_tanstack-start-manifest_v-Mz9MmSlD.mjs +0 -103
  169. package/src/components/features/bundles/BundleActivityChart.tsx +0 -193
  170. package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -123
  171. package/src/components/features/insights/ActivityChart.tsx +0 -150
  172. package/src/components/features/insights/BundleDistribution.tsx +0 -133
  173. package/src/components/features/insights/BundleSelector.tsx +0 -114
  174. package/src/components/features/insights/InsightsCapabilityContext.tsx +0 -24
  175. package/src/components/features/insights/InstallationPagination.tsx +0 -48
  176. package/src/components/features/insights/InstallationSearch.tsx +0 -230
  177. package/src/components/features/insights/UpdateOutcomes.tsx +0 -147
  178. package/src/lib/insights-error.ts +0 -19
  179. package/src/lib/insights-input.ts +0 -187
  180. package/src/lib/insights-overview.ts +0 -170
  181. package/src/lib/server/releaseActivity.ts +0 -27
@@ -1,71 +0,0 @@
1
- import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
2
- import { w as createSsrRpc } from "./createSsrRpc-DhfrxEjg.mjs";
3
- import { g as redirect } from "../_libs/@tanstack/react-router+[...].mjs";
4
- import { n as useQuery } from "../_libs/tanstack__react-query.mjs";
5
- import { t as parseActiveInstallationInput } from "./insights-input-9fEJF-ZG.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-C1F7UreR.js
7
- var getInsightsCapabilitiesRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("8101c1b67ac0488033e72bd608b71b9f1357fbcb18f704aefda7ff781f2d174b"));
8
- var getInsightsOverviewRpc = createServerFn({ method: "GET" }).handler(createSsrRpc("9a9239f6c3fe4a5b4c3f9f3dfe4902d99d1109e69c3b7f8394b97383aedb343c"));
9
- var getActiveInstallationOverviewRpc = createServerFn({ method: "GET" }).validator(parseActiveInstallationInput).handler(createSsrRpc("11380734886ea712b34e5d8dbe3c5ecb3c1873c58435c87d41dfecfb0b75829c"));
10
- var insightsQueryKeys = {
11
- capabilities: ["insights", "capabilities"],
12
- overview: ["insights", "overview"],
13
- activeInstallations: (input) => [
14
- "insights",
15
- "active-installations",
16
- input.window,
17
- input.userId ?? null
18
- ]
19
- };
20
- var INSIGHTS_STALE_TIME_MS = 3e4;
21
- var getInsightsCapabilityState = (query) => {
22
- switch (query.status) {
23
- case "pending": return { status: "unresolved" };
24
- case "error": return {
25
- status: "error",
26
- error: query.error
27
- };
28
- case "success":
29
- if (!query.data.capabilities.insights) return { status: "unsupported" };
30
- return {
31
- status: "supported",
32
- mode: "bounded",
33
- maxMatchingRows: query.data.capabilities.maxMatchingRows
34
- };
35
- }
36
- };
37
- var isInsightsQueryEnabled = (capability) => capability.status === "supported";
38
- var getInsightsCapabilitiesQueryOptions = () => ({
39
- queryKey: insightsQueryKeys.capabilities,
40
- queryFn: () => getInsightsCapabilitiesRpc(),
41
- staleTime: Infinity
42
- });
43
- var useInsightsCapabilitiesQuery = () => useQuery(getInsightsCapabilitiesQueryOptions());
44
- var ensureInsightsRouteAccess = async (queryClient) => {
45
- if (!(await queryClient.ensureQueryData(getInsightsCapabilitiesQueryOptions())).capabilities.insights) throw redirect({
46
- to: "/",
47
- search: {},
48
- replace: true
49
- });
50
- };
51
- var getInsightsOverviewQueryOptions = (capability) => ({
52
- queryKey: insightsQueryKeys.overview,
53
- queryFn: () => getInsightsOverviewRpc(),
54
- staleTime: INSIGHTS_STALE_TIME_MS,
55
- refetchOnWindowFocus: true,
56
- enabled: isInsightsQueryEnabled(capability)
57
- });
58
- var useInsightsOverviewQuery = (capability) => useQuery(getInsightsOverviewQueryOptions(capability));
59
- var getActiveInstallationQueryOptions = (capability, input) => {
60
- const normalized = parseActiveInstallationInput(input);
61
- return {
62
- queryKey: insightsQueryKeys.activeInstallations(normalized),
63
- queryFn: () => getActiveInstallationOverviewRpc({ data: normalized }),
64
- staleTime: INSIGHTS_STALE_TIME_MS,
65
- refetchOnWindowFocus: true,
66
- enabled: isInsightsQueryEnabled(capability)
67
- };
68
- };
69
- var useActiveInstallationQuery = (capability, input) => useQuery(getActiveInstallationQueryOptions(capability, input));
70
- //#endregion
71
- export { useInsightsCapabilitiesQuery as a, useActiveInstallationQuery as i, getInsightsCapabilityState as n, useInsightsOverviewQuery as o, isInsightsQueryEnabled as r, ensureInsightsRouteAccess as t };
@@ -1,96 +0,0 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-input-9fEJF-ZG.js
2
- var MAX_INSIGHTS_STRING_LENGTH = 1024;
3
- var MAX_INSIGHTS_LIMIT = 100;
4
- var InsightsInputValidationError = class extends Error {
5
- name = "InsightsInputValidationError";
6
- constructor(field) {
7
- super(`Invalid insights input: ${field}`);
8
- this.field = field;
9
- }
10
- };
11
- var isRecord = (input) => typeof input === "object" && input !== null && !Array.isArray(input);
12
- var parseRecord = (input) => {
13
- if (!isRecord(input)) throw new InsightsInputValidationError("input");
14
- return input;
15
- };
16
- var parseString = (input, field) => {
17
- const value = input[field];
18
- if (typeof value !== "string") throw new InsightsInputValidationError(field);
19
- const trimmed = value.trim();
20
- if (trimmed.length === 0 || trimmed.length > MAX_INSIGHTS_STRING_LENGTH) throw new InsightsInputValidationError(field);
21
- return trimmed;
22
- };
23
- var parseLimit = (input) => {
24
- const value = input.limit;
25
- if (value === void 0) return;
26
- if (typeof value !== "number" || !Number.isInteger(value) || value < 1 || value > MAX_INSIGHTS_LIMIT) throw new InsightsInputValidationError("limit");
27
- return value;
28
- };
29
- var parseOffset = (input) => {
30
- const value = input.offset;
31
- if (value === void 0) return;
32
- if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) throw new InsightsInputValidationError("offset");
33
- return value;
34
- };
35
- var parsePagination = (input) => {
36
- const limit = parseLimit(input);
37
- const offset = parseOffset(input);
38
- return {
39
- ...limit === void 0 ? {} : { limit },
40
- ...offset === void 0 ? {} : { offset }
41
- };
42
- };
43
- var parseWindow = (input) => {
44
- const value = input.window;
45
- if (value === "24h" || value === "7d" || value === "30d" || value === "all") return value;
46
- throw new InsightsInputValidationError("window");
47
- };
48
- var parseActiveWindow = (input) => {
49
- const value = input.window;
50
- if (value === "24h" || value === "7d" || value === "30d") return value;
51
- throw new InsightsInputValidationError("window");
52
- };
53
- var parseOptionalUserId = (input) => {
54
- if (input.userId === void 0) return void 0;
55
- if (typeof input.userId !== "string") throw new InsightsInputValidationError("userId");
56
- const userId = input.userId.trim();
57
- if (userId.length === 0) return void 0;
58
- if (userId.length > MAX_INSIGHTS_STRING_LENGTH) throw new InsightsInputValidationError("userId");
59
- return userId;
60
- };
61
- var parseActiveInstallationInput = (input) => {
62
- const record = parseRecord(input);
63
- const window = parseActiveWindow(record);
64
- const userId = parseOptionalUserId(record);
65
- return userId === void 0 ? { window } : {
66
- window,
67
- userId
68
- };
69
- };
70
- var parseBundleEventSummaryInput = (input) => {
71
- return { bundleId: parseString(parseRecord(input), "bundleId") };
72
- };
73
- var parseBundleEventInsightsInput = (input) => {
74
- const record = parseRecord(input);
75
- return {
76
- bundleId: parseString(record, "bundleId"),
77
- window: parseWindow(record),
78
- ...parsePagination(record)
79
- };
80
- };
81
- var parseSearchInstallationsInput = (input) => {
82
- const record = parseRecord(input);
83
- return {
84
- query: parseString(record, "query"),
85
- ...parsePagination(record)
86
- };
87
- };
88
- var parseInstallationHistoryInput = (input) => {
89
- const record = parseRecord(input);
90
- return {
91
- installId: parseString(record, "installId"),
92
- ...parsePagination(record)
93
- };
94
- };
95
- //#endregion
96
- export { parseSearchInstallationsInput as a, parseInstallationHistoryInput as i, parseBundleEventInsightsInput as n, parseBundleEventSummaryInput as r, parseActiveInstallationInput as t };
@@ -1,155 +0,0 @@
1
- import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
2
- import { t as createServerRpc } from "./createServerRpc-DB29C_5p.mjs";
3
- import { w as normalizeRolloutCohortCount } from "./dist-BVSLTpoP.mjs";
4
- import { t as parseActiveInstallationInput } from "./insights-input-9fEJF-ZG.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-overview-mnrbzD0I.js
6
- var toBundleMetadata = (bundle, release, channelById) => ({
7
- platform: bundle.platform,
8
- channel: release ? channelById.get(release.channel_id) ?? null : null,
9
- targetAppVersion: release?.target_app_version ?? null,
10
- fingerprintHash: release?.fingerprint_hash ?? null
11
- });
12
- var compareCodePoints = (left, right) => left < right ? -1 : left > right ? 1 : 0;
13
- var createOverview = (bundles, releases, channels, trackedInstallations, latestReportedCounts) => {
14
- const bundleById = new Map(bundles.map((bundle) => [bundle.id, bundle]));
15
- const channelById = new Map(channels.map((channel) => [channel.id, channel.name]));
16
- const bundleReleases = releases.filter((release) => release.kind === "BUNDLE" && release.bundle_id !== null).sort((left, right) => compareCodePoints(right.id, left.id));
17
- const latestReleaseByBundleId = /* @__PURE__ */ new Map();
18
- for (const release of bundleReleases) if (!latestReleaseByBundleId.has(release.bundle_id)) latestReleaseByBundleId.set(release.bundle_id, release);
19
- const latestReportedBundles = [...latestReportedCounts].map(([bundleId, count]) => {
20
- const bundle = bundleById.get(bundleId);
21
- return {
22
- bundleId,
23
- trackedInstallations: count,
24
- observedShare: trackedInstallations === 0 ? 0 : count / trackedInstallations,
25
- bundle: bundle ? toBundleMetadata(bundle, latestReleaseByBundleId.get(bundle.id), channelById) : null
26
- };
27
- }).sort((left, right) => right.trackedInstallations - left.trackedInstallations || compareCodePoints(left.bundleId, right.bundleId));
28
- const configuredRollouts = bundleReleases.filter((release) => bundleById.has(release.bundle_id)).map((release) => ({
29
- releaseId: release.id,
30
- bundleId: release.bundle_id,
31
- configuredPercentage: normalizeRolloutCohortCount(release.rollout_cohort_count) / 10,
32
- trackedInstallations: latestReportedCounts.get(release.bundle_id) ?? 0,
33
- bundle: toBundleMetadata(bundleById.get(release.bundle_id), release, channelById)
34
- })).sort((left, right) => compareCodePoints(left.releaseId, right.releaseId));
35
- return {
36
- trackedInstallations,
37
- mostCommonLatestReportedBundle: latestReportedBundles[0] ?? null,
38
- latestReportedBundles,
39
- configuredRollouts
40
- };
41
- };
42
- var createInsightsOverviewFromCounts = (bundles, releases, channels, trackedInstallations, counts) => createOverview(bundles, releases, channels, trackedInstallations, new Map(counts.map(({ bundleId, installations }) => [bundleId, installations])));
43
- //#endregion
44
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-C-8R6kED.js
45
- var DEFAULT_INSIGHTS_PAGE_SIZE = 100;
46
- var InsightsNotSupportedError = class extends Error {
47
- constructor() {
48
- super("Insights are not supported by the configured database plugin.");
49
- this.name = "InsightsNotSupportedError";
50
- }
51
- };
52
- var InsightsBundlePaginationError = class extends Error {
53
- name = "InsightsBundlePaginationError";
54
- constructor(requestedPage, reason) {
55
- super(`Invalid bundle pagination for page ${requestedPage}: ${reason}`);
56
- this.requestedPage = requestedPage;
57
- this.reason = reason;
58
- }
59
- };
60
- var getInsightsCapabilities = async (runtime) => {
61
- const { getInsightsCapability } = await import("./runtime.server-la7TRAH_.mjs");
62
- const capability = await getInsightsCapability(runtime);
63
- if (!capability.insights || !capability.insightsQueries) return { capabilities: { insights: false } };
64
- return { capabilities: {
65
- insights: true,
66
- mode: "bounded",
67
- maxMatchingRows: capability.maxMatchingRows
68
- } };
69
- };
70
- var collectBundles = async (getBundles, pageSize) => {
71
- const bundles = [];
72
- let page = 1;
73
- while (true) {
74
- const result = await getBundles({
75
- limit: pageSize,
76
- page
77
- });
78
- const { currentPage, hasNextPage, totalPages } = result.pagination;
79
- const isEmptyFirstPage = page === 1 && currentPage === 1 && totalPages === 0 && result.data.length === 0 && hasNextPage === false;
80
- if (currentPage !== page) throw new InsightsBundlePaginationError(page, `currentPage must equal ${page}, received ${currentPage}`);
81
- if (!Number.isFinite(totalPages) || !Number.isInteger(totalPages)) throw new InsightsBundlePaginationError(page, `totalPages must be a finite integer, received ${totalPages}`);
82
- if (totalPages < 0) throw new InsightsBundlePaginationError(page, `totalPages must be nonnegative, received ${totalPages}`);
83
- if (!isEmptyFirstPage && totalPages < currentPage) throw new InsightsBundlePaginationError(page, `totalPages ${totalPages} is lower than currentPage ${currentPage}`);
84
- if (!isEmptyFirstPage && hasNextPage !== currentPage < totalPages) throw new InsightsBundlePaginationError(page, "hasNextPage contradicts currentPage and totalPages");
85
- bundles.push(...result.data);
86
- if (!hasNextPage) return bundles;
87
- page += 1;
88
- }
89
- };
90
- var collectReleases = async (getReleases, pageSize) => {
91
- const releases = [];
92
- const cursors = /* @__PURE__ */ new Set();
93
- let beforeReleaseId;
94
- while (true) {
95
- const page = await getReleases({
96
- beforeReleaseId,
97
- limit: pageSize
98
- });
99
- releases.push(...page);
100
- if (page.length < pageSize) return releases;
101
- const nextCursor = page.at(-1)?.id;
102
- if (!nextCursor || cursors.has(nextCursor)) throw new InsightsBundlePaginationError(releases.length, "release cursor did not advance");
103
- cursors.add(nextCursor);
104
- beforeReleaseId = nextCursor;
105
- }
106
- };
107
- var collectInsightsOverview = async ({ runtime, getBundles, getReleases, getChannels, pageSize = DEFAULT_INSIGHTS_PAGE_SIZE }) => {
108
- const { capabilities } = await getInsightsCapabilities(runtime);
109
- if (!capabilities.insights) throw new InsightsNotSupportedError();
110
- const [bundles, releases, channels] = await Promise.all([
111
- collectBundles(getBundles, pageSize),
112
- collectReleases(getReleases, pageSize),
113
- getChannels()
114
- ]);
115
- const overview = await runtime.getBundleEventOverview();
116
- return createInsightsOverviewFromCounts(bundles, releases, channels, overview.trackedInstallations, overview.bundles);
117
- };
118
- var getInsightsCapabilitiesRpc_createServerFn_handler = createServerRpc({
119
- id: "8101c1b67ac0488033e72bd608b71b9f1357fbcb18f704aefda7ff781f2d174b",
120
- name: "getInsightsCapabilitiesRpc",
121
- filename: "src/lib/insights-rpc.ts"
122
- }, (opts) => getInsightsCapabilitiesRpc.__executeServer(opts));
123
- var getInsightsCapabilitiesRpc = createServerFn({ method: "GET" }).handler(getInsightsCapabilitiesRpc_createServerFn_handler, async () => {
124
- const { prepareConfig } = await import("./config.server-DQYEr_5X.mjs");
125
- const { hotUpdater } = await prepareConfig();
126
- return getInsightsCapabilities(hotUpdater);
127
- });
128
- var getInsightsOverviewRpc_createServerFn_handler = createServerRpc({
129
- id: "9a9239f6c3fe4a5b4c3f9f3dfe4902d99d1109e69c3b7f8394b97383aedb343c",
130
- name: "getInsightsOverviewRpc",
131
- filename: "src/lib/insights-rpc.ts"
132
- }, (opts) => getInsightsOverviewRpc.__executeServer(opts));
133
- var getInsightsOverviewRpc = createServerFn({ method: "GET" }).handler(getInsightsOverviewRpc_createServerFn_handler, async () => {
134
- const { prepareConfig } = await import("./config.server-DQYEr_5X.mjs");
135
- const { config, databaseClient, hotUpdater } = await prepareConfig();
136
- return collectInsightsOverview({
137
- runtime: hotUpdater,
138
- getBundles: (options) => databaseClient.getBundles(options),
139
- getReleases: (options) => config.database.models.releases.findMany(options),
140
- getChannels: () => config.database.models.channels.list({}).then(({ channels }) => channels)
141
- });
142
- });
143
- var getActiveInstallationOverviewRpc_createServerFn_handler = createServerRpc({
144
- id: "11380734886ea712b34e5d8dbe3c5ecb3c1873c58435c87d41dfecfb0b75829c",
145
- name: "getActiveInstallationOverviewRpc",
146
- filename: "src/lib/insights-rpc.ts"
147
- }, (opts) => getActiveInstallationOverviewRpc.__executeServer(opts));
148
- var getActiveInstallationOverviewRpc = createServerFn({ method: "GET" }).validator(parseActiveInstallationInput).handler(getActiveInstallationOverviewRpc_createServerFn_handler, async ({ data }) => {
149
- const { prepareConfig } = await import("./config.server-DQYEr_5X.mjs");
150
- const { getActiveInstallationOverview } = await import("./runtime.server-la7TRAH_.mjs");
151
- const { hotUpdater } = await prepareConfig();
152
- return getActiveInstallationOverview(hotUpdater, data);
153
- });
154
- //#endregion
155
- export { getActiveInstallationOverviewRpc_createServerFn_handler, getInsightsCapabilitiesRpc_createServerFn_handler, getInsightsOverviewRpc_createServerFn_handler };