@hot-updater/console 1.1.2 → 1.1.4

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 (154) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/EventDetails-gbD_fCqc.js +1 -0
  3. package/.output/public/assets/{InsightsPageHeader-SYEOMClX.js → InsightsPageHeader-BRw8XkJW.js} +1 -1
  4. package/.output/public/assets/api-keys-D81VHHNM.js +1 -0
  5. package/.output/public/assets/api-keys-Dia6i8K1.js +1 -0
  6. package/.output/public/assets/badge-Bqf3UDee.js +1 -0
  7. package/.output/public/assets/circle-off-BsbZQtsF.js +1 -0
  8. package/.output/public/assets/field-GxF9SyUo.js +1 -0
  9. package/.output/public/assets/{index-C5S4DrO2.js → index-DrkdiRIn.js} +3 -3
  10. package/.output/public/assets/insights-C-5t8wh2.js +2 -0
  11. package/.output/public/assets/insights-D_ngQdiz.js +1 -0
  12. package/.output/public/assets/insights-KigRBDgC.js +42 -0
  13. package/.output/public/assets/insights-api-1ZjVu3Sb.js +1 -0
  14. package/.output/public/assets/insights-search-aT8BVCci.js +1 -0
  15. package/.output/public/assets/{insights-usage-rpc-DTL0_Rp8.js → insights-usage-rpc-DqTiXI1_.js} +1 -1
  16. package/.output/public/assets/insights_.distribution-Bzl6RFBR.js +2 -0
  17. package/.output/public/assets/insights_.distribution-Cthgttqb.js +1 -0
  18. package/.output/public/assets/insights_.distribution-D2c2v1bu.js +1 -0
  19. package/.output/public/assets/installations-2Nx8Htf-.js +1 -0
  20. package/.output/public/assets/{installations-we1IV0xp.js → installations-BskJ1xQr.js} +2 -2
  21. package/.output/public/assets/installations-K2iJ_r0h.js +1 -0
  22. package/.output/public/assets/{remote-config-uBgCaI-p.js → remote-config-D9X3NiwV.js} +4 -4
  23. package/.output/public/assets/{remote-config-DyTLPRKh.js → remote-config-DzOOiBIO.js} +1 -1
  24. package/.output/public/assets/remote-config-ikg7kak0.js +1 -0
  25. package/.output/public/assets/routes-9rb9P5Y7.js +2 -0
  26. package/.output/public/assets/routes-P7683vKQ.js +1 -0
  27. package/.output/public/assets/{select-CV8nkfsf.js → select-M3H2gxCc.js} +1 -1
  28. package/.output/public/assets/styles-CpiW_YdW.css +2 -0
  29. package/.output/public/assets/{switch-C8ycp9AH.js → switch-By_vfm8I.js} +1 -1
  30. package/.output/server/{__23tanstack-start-server-fn-resolver-B2gMrGs6.mjs → __23tanstack-start-server-fn-resolver-KpQ5Z_24.mjs} +40 -40
  31. package/.output/server/_libs/@base-ui/react+[...].mjs +77 -1
  32. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  33. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +2 -2
  34. package/.output/server/_libs/lucide-react.mjs +1 -1
  35. package/.output/server/_libs/next-themes.mjs +1 -1
  36. package/.output/server/_libs/react-redux+[...].mjs +1 -1
  37. package/.output/server/_libs/recharts+[...].mjs +1 -1
  38. package/.output/server/_libs/sonner.mjs +1 -1
  39. package/.output/server/_libs/tanstack__react-query.mjs +1 -1
  40. package/.output/server/_ssr/{BundleIdDisplay-BIXUWOM_.mjs → BundleIdDisplay-CjSnY65J.mjs} +3 -3
  41. package/.output/server/_ssr/{ConsoleFeatureUnavailable-B5BX1XJQ.mjs → ConsoleFeatureUnavailable-CHxn9f-w.mjs} +7 -7
  42. package/.output/server/_ssr/{EventDetails-C0bZVuOS.mjs → EventDetails-l6dF54zp.mjs} +8 -8
  43. package/.output/server/_ssr/{HashValueDisplay-DtWes-Gr.mjs → HashValueDisplay-Zs7ABoOi.mjs} +3 -3
  44. package/.output/server/_ssr/{InsightsPageHeader-CLP-sCpY.mjs → InsightsPageHeader-ZlAlDxQy.mjs} +8 -8
  45. package/.output/server/_ssr/{NotFoundPage-BVQx08zn.mjs → NotFoundPage-u28ndvp1.mjs} +3 -3
  46. package/.output/server/_ssr/{alert-dialog-BlEXzHma.mjs → alert-dialog-B8AqlJwo.mjs} +2 -2
  47. package/.output/server/_ssr/{api-CVve4Y9C.mjs → api-C_0B7NXM.mjs} +3 -3
  48. package/.output/server/_ssr/{api-keys-Dknq3e2R.mjs → api-keys-CLH38u9B.mjs} +2 -2
  49. package/.output/server/_ssr/{api-keys-2TVuUP_S.mjs → api-keys-pRNvn2-9.mjs} +9 -8
  50. package/.output/server/_ssr/{api-keys-rpc-D6mjj6ux.mjs → api-keys-rpc-wecWs0nA.mjs} +3 -3
  51. package/.output/server/_ssr/{api-rpc-C2zK3DoM.mjs → api-rpc-DWN8eOHS.mjs} +6 -41
  52. package/.output/server/_ssr/{auth-rpc-Dss6nG8G.mjs → auth-rpc-CLRArbIl.mjs} +4 -4
  53. package/.output/server/_ssr/{auth.server-DLi4kbQi.mjs → auth.server-DR9zc0EU.mjs} +2 -2
  54. package/.output/server/_ssr/badge-BpT7r-ng.mjs +108 -0
  55. package/.output/server/_ssr/{bundleActivity-M5gzBFNg.mjs → bundleActivity-0qFIcvqt.mjs} +1 -1
  56. package/.output/server/_ssr/{config.server-B_oTMFxL.mjs → config.server-DTdsG47T.mjs} +4 -4
  57. package/.output/server/_ssr/{console-access-UB-4rDiA.mjs → console-access-aUpQs49I.mjs} +2 -2
  58. package/.output/server/_ssr/{console-features-Oz0q20jJ.mjs → console-features-4xAGfZHw.mjs} +1 -1
  59. package/.output/server/_ssr/{console-features-api-DJV790QE.mjs → console-features-api-DSSgCV3v.mjs} +5 -5
  60. package/.output/server/_ssr/{console-features-rpc-cai3k4Ac.mjs → console-features-rpc-D6kMlR2A.mjs} +3 -3
  61. package/.output/server/_ssr/{dialog-CdG-5FiE.mjs → dialog-B4ALf7NJ.mjs} +2 -2
  62. package/.output/server/_ssr/{downloadBundle-CZysjmNW.mjs → downloadBundle-94jPBGSO.mjs} +1 -1
  63. package/.output/server/_ssr/{empty-CtbzbPdQ.mjs → empty-Bh1FEeYF.mjs} +3 -3
  64. package/.output/server/_ssr/{failureReports-DKDhVsXA.mjs → failureReports-Bh22wois.mjs} +4 -4
  65. package/.output/server/_ssr/field-HKCaPH3e.mjs +89 -0
  66. package/.output/server/_ssr/{getBundleChildren-Cv9iz1As.mjs → getBundleChildren-DfxB2K8D.mjs} +1 -1
  67. package/.output/server/_ssr/{input-group-c65TGOPW.mjs → input-group-xm3LzDuq.mjs} +2 -2
  68. package/.output/server/_ssr/{insights-_IGtova5.mjs → insights-BKZpJ_K4.mjs} +590 -360
  69. package/.output/server/_ssr/{insights-DU_QAXWM.mjs → insights-CCyTACIw.mjs} +5 -5
  70. package/.output/server/_ssr/{insights-Bn2m3_41.mjs → insights-CNqWQLJR.mjs} +2 -2
  71. package/.output/server/_ssr/{insights-api-Ds7dvWu4.mjs → insights-api-DtRFz5X3.mjs} +5 -5
  72. package/.output/server/_ssr/{insights-errors-BjnFUyZj.mjs → insights-errors-Iy-lBaM7.mjs} +2 -2
  73. package/.output/server/_ssr/{insights-failures-xaa41Buf.mjs → insights-failures-BJN3RfLu.mjs} +3 -3
  74. package/.output/server/_ssr/{insights-failures-rpc-DdcX5E7T.mjs → insights-failures-rpc-DLZ91uOG.mjs} +12 -12
  75. package/.output/server/_ssr/{insights-recovery-BWQhiZaF.mjs → insights-recovery-BUuQdlA3.mjs} +1 -1
  76. package/.output/server/_ssr/{insights-recovery-rpc-DOhy6APf.mjs → insights-recovery-rpc-BQHUhPi7.mjs} +6 -6
  77. package/.output/server/_ssr/{insights-rpc-US_gs2id.mjs → insights-rpc-C6Vukyn7.mjs} +3 -3
  78. package/.output/server/_ssr/{insights-search-C70xifQF.mjs → insights-search-CBYoxT7v.mjs} +8 -7
  79. package/.output/server/_ssr/{insights-usage-BpBM0U0c.mjs → insights-usage-CHqvtehH.mjs} +1 -1
  80. package/.output/server/_ssr/{insights-usage-rpc-5DtQXLAY.mjs → insights-usage-rpc-BJ7a-xco.mjs} +6 -6
  81. package/.output/server/_ssr/{insights-usage-rpc-TTivW3zB.mjs → insights-usage-rpc-C-lNUIsD.mjs} +5 -5
  82. package/.output/server/_ssr/{insightsUsage-CzhVjsc8.mjs → insightsUsage-COUG-_-U.mjs} +3 -3
  83. package/.output/server/_ssr/{insights_.distribution-D5U5EzU-.mjs → insights_.distribution-CTwilMPm.mjs} +5 -5
  84. package/.output/server/_ssr/{insights_.distribution-BvA8x4Pc.mjs → insights_.distribution-DmLW8I8a.mjs} +2 -2
  85. package/.output/server/_ssr/{insights_.distribution-Wm6hKWPa.mjs → insights_.distribution-DztDyrBj.mjs} +14 -13
  86. package/.output/server/_ssr/{installations-BmuAKPlD.mjs → installations-B6MK5iA8.mjs} +2 -2
  87. package/.output/server/_ssr/{installations-D6X1wvQA.mjs → installations-Bct7ag5y.mjs} +4 -4
  88. package/.output/server/_ssr/{installations-rfEUgSuk.mjs → installations-_N4PtYFl.mjs} +12 -11
  89. package/.output/server/_ssr/{release-adoption-005tQRpo.mjs → release-adoption-DuYJTGuX.mjs} +17 -7
  90. package/.output/server/_ssr/{release-adoption-rpc-VPRjwQya.mjs → release-adoption-rpc-CHl7G_Zy.mjs} +8 -8
  91. package/.output/server/_ssr/{releaseAdoption-CtOFkwli.mjs → releaseAdoption-B39cpvfo.mjs} +42 -26
  92. package/.output/server/_ssr/releaseReachability-bFsuElSS.mjs +39 -0
  93. package/.output/server/_ssr/{remote-config-BW3yo4ZC.mjs → remote-config-10-obSZ0.mjs} +3 -3
  94. package/.output/server/_ssr/{remote-config-C6qyWeqT.mjs → remote-config-Dj1eTYi4.mjs} +2 -2
  95. package/.output/server/_ssr/{remote-config-BdOas6KI.mjs → remote-config-Mj05qVYZ.mjs} +18 -17
  96. package/.output/server/_ssr/{remote-config-rpc-DNjk69nN.mjs → remote-config-rpc-lteqDSLn.mjs} +3 -3
  97. package/.output/server/_ssr/{router-DqyQ8o8T.mjs → router-Dr4jjjhx.mjs} +17 -17
  98. package/.output/server/_ssr/{routes-1TWMRTCY.mjs → routes-B5KrCDwk.mjs} +17 -16
  99. package/.output/server/_ssr/{routes-DxfbhYOp.mjs → routes-BZbrY_qw.mjs} +17 -17
  100. package/.output/server/_ssr/{runtime.server-De0QVWc9.mjs → runtime.server-DsHqVqTr.mjs} +2 -2
  101. package/.output/server/_ssr/{select-CEyhDZtT.mjs → select-BtdGNSmp.mjs} +2 -2
  102. package/.output/server/_ssr/{server-BUe4_4dH.mjs → server-BxaHSwHh.mjs} +4 -4
  103. package/.output/server/_ssr/{sidebar-De1__izs.mjs → sidebar-CVsgosaD.mjs} +3 -3
  104. package/.output/server/_ssr/ssr.mjs +1 -1
  105. package/.output/server/_ssr/{switch-B6TmLbu-.mjs → switch-BmARgkUP.mjs} +3 -3
  106. package/.output/server/_ssr/{table-BEpbu0xs.mjs → table-M5P3YUfY.mjs} +2 -2
  107. package/.output/server/_ssr/{tabs-DP0GnDdN.mjs → tabs-CrmfOlJj.mjs} +3 -3
  108. package/.output/server/_ssr/updateFailures-z1IQy_4q.mjs +103 -0
  109. package/.output/server/{_tanstack-start-manifest_v-DTOQk1l4.mjs → _tanstack-start-manifest_v-_BY9hYTm.mjs} +51 -50
  110. package/.output/server/index.mjs +204 -197
  111. package/package.json +7 -7
  112. package/src/components/features/insights/AppUsage.tsx +15 -2
  113. package/src/components/features/insights/InsightsControls.tsx +264 -246
  114. package/src/components/features/insights/InsightsOverview.tsx +90 -68
  115. package/src/components/features/insights/InsightsScope.tsx +39 -0
  116. package/src/components/features/insights/ReleaseActivity.tsx +4 -4
  117. package/src/components/features/insights/ReleaseCombobox.tsx +196 -0
  118. package/src/components/features/insights/RollbackButton.tsx +4 -0
  119. package/src/components/features/insights/UpdateFailures.tsx +7 -1
  120. package/src/lib/insights-failures-rpc.ts +3 -1
  121. package/src/lib/insights-failures.ts +5 -2
  122. package/src/lib/insights-recovery.ts +5 -0
  123. package/src/lib/insights-search.ts +10 -14
  124. package/src/lib/release-adoption-api.ts +24 -32
  125. package/src/lib/release-adoption.ts +45 -8
  126. package/src/lib/server/failureReports.ts +1 -1
  127. package/src/lib/server/releaseAdoption.ts +75 -26
  128. package/src/lib/server/updateFailures.ts +131 -10
  129. package/src/routes/insights.tsx +56 -24
  130. package/src/routes/insights_.distribution.tsx +2 -1
  131. package/.output/public/assets/EventDetails-CSX2ayg9.js +0 -1
  132. package/.output/public/assets/api-keys-BEdLKiib.js +0 -1
  133. package/.output/public/assets/api-keys-TdTtKm2b.js +0 -1
  134. package/.output/public/assets/chevron-right-BnvHIJdZ.js +0 -1
  135. package/.output/public/assets/field-DBMkBfkD.js +0 -1
  136. package/.output/public/assets/insights-BMKRCIg1.js +0 -2
  137. package/.output/public/assets/insights-CPyViuyC.js +0 -42
  138. package/.output/public/assets/insights-D0PbX-Rm.js +0 -1
  139. package/.output/public/assets/insights-api-Dmd_LgT3.js +0 -1
  140. package/.output/public/assets/insights-search-DAa0f7Dr.js +0 -1
  141. package/.output/public/assets/insights_.distribution-BaOQlBV9.js +0 -1
  142. package/.output/public/assets/insights_.distribution-CxXMIEb5.js +0 -2
  143. package/.output/public/assets/insights_.distribution-EE5OqxyL.js +0 -1
  144. package/.output/public/assets/installations-BgISglUQ.js +0 -1
  145. package/.output/public/assets/installations-DQbgRkSi.js +0 -1
  146. package/.output/public/assets/remote-config-AQmdmbT8.js +0 -1
  147. package/.output/public/assets/routes-Br26jzt9.js +0 -1
  148. package/.output/public/assets/routes-CyirpG2O.js +0 -2
  149. package/.output/public/assets/styles-DTGEAJFv.css +0 -2
  150. package/.output/server/_ssr/field-0KdP_8LI.mjs +0 -189
  151. package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +0 -40
  152. /package/.output/public/assets/{ConsoleFeatureUnavailable-B-iNWpuE.js → ConsoleFeatureUnavailable-C0KfsKWL.js} +0 -0
  153. /package/.output/public/assets/{table-DgGD67Fx.js → table-ek1DmRHq.js} +0 -0
  154. /package/.output/public/assets/{valueToPercent-C4C1WZVn.js → valueToPercent-B44vDssN.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { f as lazyRouteComponent, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { r as requireConsoleFeature } from "./console-features-api-DJV790QE.mjs";
3
- import { a as validateInsightsSearch } from "./insights-search-C70xifQF.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-DU_QAXWM.js
5
- var $$splitComponentImporter = () => import("./insights-_IGtova5.mjs");
6
- var $$splitNotFoundComponentImporter = () => import("./insights-Bn2m3_41.mjs");
2
+ import { r as requireConsoleFeature } from "./console-features-api-DSSgCV3v.mjs";
3
+ import { o as validateInsightsSearch } from "./insights-search-CBYoxT7v.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-CCyTACIw.js
5
+ var $$splitComponentImporter = () => import("./insights-BKZpJ_K4.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights-CNqWQLJR.mjs");
7
7
  var Route = createFileRoute("/insights")({
8
8
  beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "insightsAnalytics"),
9
9
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
@@ -1,5 +1,5 @@
1
- import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-B5BX1XJQ.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-Bn2m3_41.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-CHxn9f-w.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-CNqWQLJR.js
3
3
  var SplitNotFoundComponent = ConsoleFeatureUnavailable;
4
4
  //#endregion
5
5
  export { SplitNotFoundComponent as notFoundComponent };
@@ -1,10 +1,10 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
3
- import { A as createSsrRpc } from "./sidebar-De1__izs.mjs";
2
+ import { A as createSsrRpc } from "./sidebar-CVsgosaD.mjs";
3
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
4
4
  import { i as useQuery, t as useInfiniteQuery } from "../_libs/tanstack__react-query.mjs";
5
- import { c as readUpdateFailuresInput } from "./insights-failures-xaa41Buf.mjs";
6
- import { n as readFailureReportsInput } from "./insights-errors-BjnFUyZj.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-Ds7dvWu4.js
5
+ import { c as readUpdateFailuresInput } from "./insights-failures-BJN3RfLu.mjs";
6
+ import { n as readFailureReportsInput } from "./insights-errors-Iy-lBaM7.mjs";
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-DtRFz5X3.js
8
8
  var getUpdateFailuresRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readUpdateFailuresInput).handler(createSsrRpc("0d1dacdd1e5ee6b100e5c142fb9af03602b6f2c6fe6af79312b36c223d7f8f97"));
9
9
  var listFailureReportsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readFailureReportsInput).handler(createSsrRpc("b4388826a9b515fb4d2113270aa8ded1c50ba13d7f07ac2b268c41396e87d0a3"));
10
10
  /** `insights()`'s defaults, for a server that does not report its periods. */
@@ -1,5 +1,5 @@
1
- import { c as readUpdateFailuresInput } from "./insights-failures-xaa41Buf.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-errors-BjnFUyZj.js
1
+ import { c as readUpdateFailuresInput } from "./insights-failures-BJN3RfLu.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-errors-Iy-lBaM7.js
3
3
  function readFailureReportsInput(input) {
4
4
  readUpdateFailuresInput(input);
5
5
  if (!Number.isSafeInteger(input.beforeReceivedAtMs) || input.beforeReceivedAtMs < 0 || input.cursor !== void 0 && (typeof input.cursor !== "string" || !input.cursor.length || input.cursor.length > 8192)) throw new Error("Invalid failure report range or cursor.");
@@ -1,7 +1,7 @@
1
- import { r as recoveryWindows } from "./insights-recovery-BWQhiZaF.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-xaa41Buf.js
1
+ import { r as recoveryWindows } from "./insights-recovery-BUuQdlA3.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-BJN3RfLu.js
3
3
  function readUpdateFailuresInput(input) {
4
- if (!input || input.platform !== "ios" && input.platform !== "android" || typeof input.channel !== "string" || !input.channel.trim() || input.channel.length > 1024 || input.releaseId !== void 0 && (typeof input.releaseId !== "string" || !input.releaseId.trim() || input.releaseId.length > 36) || (input.window === void 0 ? input.releaseId === void 0 : !Object.hasOwn(recoveryWindows, input.window))) throw new Error("Choose a platform, channel, and time window.");
4
+ if (!input || input.platform !== "all" && input.platform !== "ios" && input.platform !== "android" || typeof input.channel !== "string" || !input.channel.trim() || input.channel.length > 1024 || input.releaseId !== void 0 && (typeof input.releaseId !== "string" || !input.releaseId.trim() || input.releaseId.length > 36) || (input.window === void 0 ? input.releaseId === void 0 : !Object.hasOwn(recoveryWindows, input.window))) throw new Error("Choose a platform, channel, and time window.");
5
5
  return input;
6
6
  }
7
7
  /**
@@ -1,9 +1,9 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
2
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- import { c as readUpdateFailuresInput } from "./insights-failures-xaa41Buf.mjs";
5
- import { n as readFailureReportsInput } from "./insights-errors-BjnFUyZj.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-DdcX5E7T.js
4
+ import { c as readUpdateFailuresInput } from "./insights-failures-BJN3RfLu.mjs";
5
+ import { n as readFailureReportsInput } from "./insights-errors-Iy-lBaM7.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-DLZ91uOG.js
7
7
  var getUpdateFailuresRpc_createServerFn_handler = createServerRpc({
8
8
  id: "0d1dacdd1e5ee6b100e5c142fb9af03602b6f2c6fe6af79312b36c223d7f8f97",
9
9
  name: "getUpdateFailuresRpc",
@@ -11,12 +11,12 @@ var getUpdateFailuresRpc_createServerFn_handler = createServerRpc({
11
11
  }, (opts) => getUpdateFailuresRpc.__executeServer(opts));
12
12
  var getUpdateFailuresRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readUpdateFailuresInput).handler(getUpdateFailuresRpc_createServerFn_handler, async ({ data }) => {
13
13
  const [{ prepareConfig }, { getUpdateFailuresReport }, { requireFeature }] = await Promise.all([
14
- import("./config.server-B_oTMFxL.mjs"),
15
- import("./updateFailures-H6pnnYK4.mjs"),
16
- import("./runtime.server-De0QVWc9.mjs")
14
+ import("./config.server-DTdsG47T.mjs"),
15
+ import("./updateFailures-z1IQy_4q.mjs"),
16
+ import("./runtime.server-DsHqVqTr.mjs")
17
17
  ]);
18
- const { runtime } = await prepareConfig();
19
- return getUpdateFailuresReport(await requireFeature(runtime, "insights"), data);
18
+ const { runtime, core } = await prepareConfig();
19
+ return getUpdateFailuresReport(await requireFeature(runtime, "insights"), data, Date.now(), core);
20
20
  });
21
21
  var listFailureReportsRpc_createServerFn_handler = createServerRpc({
22
22
  id: "b4388826a9b515fb4d2113270aa8ded1c50ba13d7f07ac2b268c41396e87d0a3",
@@ -25,9 +25,9 @@ var listFailureReportsRpc_createServerFn_handler = createServerRpc({
25
25
  }, (opts) => listFailureReportsRpc.__executeServer(opts));
26
26
  var listFailureReportsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readFailureReportsInput).handler(listFailureReportsRpc_createServerFn_handler, async ({ data }) => {
27
27
  const [{ prepareConfig }, { listFailureReports }, { requireFeature }] = await Promise.all([
28
- import("./config.server-B_oTMFxL.mjs"),
29
- import("./failureReports-DKDhVsXA.mjs"),
30
- import("./runtime.server-De0QVWc9.mjs")
28
+ import("./config.server-DTdsG47T.mjs"),
29
+ import("./failureReports-Bh22wois.mjs"),
30
+ import("./runtime.server-DsHqVqTr.mjs")
31
31
  ]);
32
32
  const { runtime } = await prepareConfig();
33
33
  return listFailureReports(await requireFeature(runtime, "insights"), data);
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-BWQhiZaF.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-BUuQdlA3.js
2
2
  var recoveryWindows = {
3
3
  "24h": {
4
4
  durationMs: 864e5,
@@ -1,8 +1,8 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
2
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- import { n as readRecoveryInput } from "./insights-recovery-BWQhiZaF.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-rpc-DOhy6APf.js
4
+ import { n as readRecoveryInput } from "./insights-recovery-BUuQdlA3.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-rpc-BQHUhPi7.js
6
6
  function readBundleActivityInput(inputs) {
7
7
  if (!Array.isArray(inputs) || inputs.length > 20) throw new Error("Choose up to 20 bundles.");
8
8
  return inputs.map((input) => {
@@ -21,9 +21,9 @@ var getBundleActivityRpc_createServerFn_handler = createServerRpc({
21
21
  }, (opts) => getBundleActivityRpc.__executeServer(opts));
22
22
  var getBundleActivityRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readBundleActivityInput).handler(getBundleActivityRpc_createServerFn_handler, async ({ data }) => {
23
23
  const [{ prepareConfig }, { getBundleActivity }, { requireFeature }] = await Promise.all([
24
- import("./config.server-B_oTMFxL.mjs"),
25
- import("./bundleActivity-M5gzBFNg.mjs"),
26
- import("./runtime.server-De0QVWc9.mjs")
24
+ import("./config.server-DTdsG47T.mjs"),
25
+ import("./bundleActivity-0qFIcvqt.mjs"),
26
+ import("./runtime.server-DsHqVqTr.mjs")
27
27
  ]);
28
28
  const { runtime } = await prepareConfig();
29
29
  return getBundleActivity(await requireFeature(runtime, "insightsAnalytics"), data);
@@ -1,10 +1,10 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
2
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-US_gs2id.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-C6Vukyn7.js
5
5
  /** The Insights reads, once the console's access check and the feature guard pass. */
6
6
  var insightsReads = async () => {
7
- const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-B_oTMFxL.mjs"), import("./runtime.server-De0QVWc9.mjs")]);
7
+ const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-DTdsG47T.mjs"), import("./runtime.server-DsHqVqTr.mjs")]);
8
8
  const { runtime } = await prepareConfig();
9
9
  return requireFeature(runtime, "insights");
10
10
  };
@@ -1,10 +1,10 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { _t as require_react, gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { bt as require_react, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { O as Info } from "../_libs/lucide-react.mjs";
4
- import { D as TooltipTrigger, T as TooltipContent, t as Button$1, w as Tooltip$1 } from "./sidebar-De1__izs.mjs";
4
+ import { D as TooltipTrigger, T as TooltipContent, t as Button$1, w as Tooltip$1 } from "./sidebar-CVsgosaD.mjs";
5
5
  import { C as isUUIDv7 } from "./dist-CbQbBIw-.mjs";
6
6
  import { r as extractTimestampFromUUIDv7 } from "./uuidv7-C88s9jWF.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-search-C70xifQF.js
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-search-CBYoxT7v.js
8
8
  var import_react = /* @__PURE__ */ __toESM(require_react());
9
9
  var import_jsx_runtime = require_jsx_runtime();
10
10
  function InfoTooltip({ label, children }) {
@@ -39,15 +39,16 @@ var readText = (value) => typeof value === "string" && value.trim().length > 0 &
39
39
  var readWindow = (value) => value === "24h" || value === "7d" || value === "30d" ? value : void 0;
40
40
  var readHealthChart = (value) => value === "adoption" || value === "crashes" ? value : void 0;
41
41
  var readUsageWindow = (value) => value === "12m" ? value : readWindow(value);
42
+ /** The channel Insights reads when none is chosen: the SDK's and the CLI's default. */
43
+ var DEFAULT_INSIGHTS_CHANNEL = "production";
44
+ var readPlatform = (value) => value === "all" || value === "ios" || value === "android" ? value : void 0;
42
45
  function validateInsightsSearch(search) {
43
46
  return {
44
- platform: search.platform === "all" || search.platform === "ios" || search.platform === "android" ? search.platform : void 0,
47
+ platform: readPlatform(search.platform),
45
48
  channel: readText(search.channel),
46
49
  appVersion: readText(search.appVersion),
47
50
  window: readUsageWindow(search.window),
48
51
  bundleWindow: readWindow(search.bundleWindow),
49
- healthPlatform: search.healthPlatform === "ios" || search.healthPlatform === "android" ? search.healthPlatform : void 0,
50
- healthChannel: readText(search.healthChannel),
51
52
  releaseId: readText(search.releaseId),
52
53
  healthChart: readHealthChart(search.healthChart),
53
54
  bundles: readText(search.bundles)
@@ -72,4 +73,4 @@ function adoptionWindow(releaseId, now = Date.now()) {
72
73
  /** Release health's compared bundles from the `bundles` search value. */
73
74
  var comparedBundleIds = (value) => value === void 0 ? void 0 : [...new Set(value.split(",").filter((id) => id.length > 0))];
74
75
  //#endregion
75
- export { validateInsightsSearch as a, validateDistributionSearch as i, adoptionWindow as n, comparedBundleIds as r, InfoTooltip as t };
76
+ export { validateDistributionSearch as a, comparedBundleIds as i, InfoTooltip as n, validateInsightsSearch as o, adoptionWindow as r, DEFAULT_INSIGHTS_CHANNEL as t };
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-BpBM0U0c.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-CHqvtehH.js
2
2
  var usageMetrics = {
3
3
  "24h": {
4
4
  label: "DAU",
@@ -1,8 +1,8 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
2
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- import { t as readAppUsageInput } from "./insights-usage-BpBM0U0c.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-5DtQXLAY.js
4
+ import { t as readAppUsageInput } from "./insights-usage-CHqvtehH.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-BJ7a-xco.js
6
6
  var getAppUsageReportRpc_createServerFn_handler = createServerRpc({
7
7
  id: "8a98cd9c178e4a54185d62c25a95f09d3d59850c43d3f5baa1563e1614ad942e",
8
8
  name: "getAppUsageReportRpc",
@@ -18,9 +18,9 @@ var getAppUsageReportRpc = createServerFn({ method: "GET" }).middleware([console
18
18
  };
19
19
  }).handler(getAppUsageReportRpc_createServerFn_handler, async ({ data }) => {
20
20
  const [{ prepareConfig }, { getAppUsageReport }, { requireFeature }] = await Promise.all([
21
- import("./config.server-B_oTMFxL.mjs"),
22
- import("./insightsUsage-CzhVjsc8.mjs"),
23
- import("./runtime.server-De0QVWc9.mjs")
21
+ import("./config.server-DTdsG47T.mjs"),
22
+ import("./insightsUsage-COUG-_-U.mjs"),
23
+ import("./runtime.server-DsHqVqTr.mjs")
24
24
  ]);
25
25
  const { runtime } = await prepareConfig();
26
26
  return getAppUsageReport(await requireFeature(runtime, "insightsAnalytics"), data);
@@ -1,9 +1,9 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
3
- import { D as ProgressTrack$1, E as ProgressIndicator$1, O as ProgressRoot, gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
- import { A as createSsrRpc, k as cn } from "./sidebar-De1__izs.mjs";
5
- import { t as readAppUsageInput } from "./insights-usage-BpBM0U0c.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-TTivW3zB.js
2
+ import { A as ProgressTrack$1, j as ProgressRoot, k as ProgressIndicator$1, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
+ import { A as createSsrRpc, k as cn } from "./sidebar-CVsgosaD.mjs";
4
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
5
+ import { t as readAppUsageInput } from "./insights-usage-CHqvtehH.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-C-lNUIsD.js
7
7
  var import_jsx_runtime = require_jsx_runtime();
8
8
  function Progress$1({ className, children, value, ...props }) {
9
9
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ProgressRoot, {
@@ -1,6 +1,6 @@
1
- import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-BWQhiZaF.mjs";
2
- import { t as readAppUsageInput } from "./insights-usage-BpBM0U0c.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/insightsUsage-CzhVjsc8.js
1
+ import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-BUuQdlA3.mjs";
2
+ import { t as readAppUsageInput } from "./insights-usage-CHqvtehH.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/insightsUsage-COUG-_-U.js
4
4
  var DAY_MS = 864e5;
5
5
  var WEEK_MS = 7 * DAY_MS;
6
6
  /**
@@ -1,9 +1,9 @@
1
1
  import { f as lazyRouteComponent, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { r as requireConsoleFeature } from "./console-features-api-DJV790QE.mjs";
3
- import { i as validateDistributionSearch } from "./insights-search-C70xifQF.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-D5U5EzU-.js
5
- var $$splitComponentImporter = () => import("./insights_.distribution-Wm6hKWPa.mjs");
6
- var $$splitNotFoundComponentImporter = () => import("./insights_.distribution-BvA8x4Pc.mjs");
2
+ import { r as requireConsoleFeature } from "./console-features-api-DSSgCV3v.mjs";
3
+ import { a as validateDistributionSearch } from "./insights-search-CBYoxT7v.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-CTwilMPm.js
5
+ var $$splitComponentImporter = () => import("./insights_.distribution-DztDyrBj.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights_.distribution-DmLW8I8a.mjs");
7
7
  /** How a distribution row's bundle reads aloud. */
8
8
  /** The bundle an app version's native build shipped, by its ID. */
9
9
  var Route = createFileRoute("/insights_/distribution")({
@@ -1,5 +1,5 @@
1
- import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-B5BX1XJQ.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-BvA8x4Pc.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-CHxn9f-w.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-DmLW8I8a.js
3
3
  /** How a distribution row's bundle reads aloud. */
4
4
  /** The bundle an app version's native build shipped, by its ID. */
5
5
  var SplitNotFoundComponent = ConsoleFeatureUnavailable;
@@ -1,18 +1,19 @@
1
- import { gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
1
+ import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
2
  import { $ as ArrowLeft, X as ArrowUpRight, m as RotateCw } from "../_libs/lucide-react.mjs";
3
- import { C as Skeleton, O as buttonVariants, t as Button$1 } from "./sidebar-De1__izs.mjs";
4
- import { a as Badge, d as CardTitle, f as Field, g as FieldLabel, i as AlertTitle, l as CardFooter, o as Card, r as AlertDescription, s as CardContent, t as Alert, u as CardHeader } from "./field-0KdP_8LI.mjs";
5
- import { i as useQuery } from "../_libs/tanstack__react-query.mjs";
3
+ import { C as Skeleton, O as buttonVariants, t as Button$1 } from "./sidebar-CVsgosaD.mjs";
6
4
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
7
- import { i as EmptyHeader, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-CtbzbPdQ.mjs";
8
- import { a as validateInsightsSearch, t as InfoTooltip } from "./insights-search-C70xifQF.mjs";
9
- import { l as useInsightsRetention, r as keepsTwelveMonths } from "./insights-api-Ds7dvWu4.mjs";
10
- import { a as SelectItem, i as SelectGroup, n as Select$1, o as SelectTrigger, r as SelectContent, s as SelectValue, t as PlatformIcon } from "./select-CEyhDZtT.mjs";
11
- import { t as BundleIdDisplay } from "./BundleIdDisplay-BIXUWOM_.mjs";
12
- import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-TTivW3zB.mjs";
13
- import { n as InsightsErrorAlert, o as UsagePeriodSelector, r as InsightsPageHeader, t as BuiltinBundleBadge } from "./InsightsPageHeader-CLP-sCpY.mjs";
14
- import { t as Route } from "./insights_.distribution-D5U5EzU-.mjs";
15
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-Wm6hKWPa.js
5
+ import { i as useQuery } from "../_libs/tanstack__react-query.mjs";
6
+ import { i as EmptyHeader, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-Bh1FEeYF.mjs";
7
+ import { a as Badge, d as CardTitle, i as AlertTitle, l as CardFooter, o as Card, r as AlertDescription, s as CardContent, t as Alert, u as CardHeader } from "./badge-BpT7r-ng.mjs";
8
+ import { a as FieldLabel, t as Field } from "./field-HKCaPH3e.mjs";
9
+ import { n as InfoTooltip, o as validateInsightsSearch } from "./insights-search-CBYoxT7v.mjs";
10
+ import { l as useInsightsRetention, r as keepsTwelveMonths } from "./insights-api-DtRFz5X3.mjs";
11
+ import { a as SelectItem, i as SelectGroup, n as Select$1, o as SelectTrigger, r as SelectContent, s as SelectValue, t as PlatformIcon } from "./select-BtdGNSmp.mjs";
12
+ import { t as BundleIdDisplay } from "./BundleIdDisplay-CjSnY65J.mjs";
13
+ import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-C-lNUIsD.mjs";
14
+ import { n as InsightsErrorAlert, o as UsagePeriodSelector, r as InsightsPageHeader, t as BuiltinBundleBadge } from "./InsightsPageHeader-ZlAlDxQy.mjs";
15
+ import { t as Route } from "./insights_.distribution-CTwilMPm.mjs";
16
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-DztDyrBj.js
16
17
  var import_jsx_runtime = require_jsx_runtime();
17
18
  var PAGE_SIZE = 20;
18
19
  var dates = new Intl.DateTimeFormat("en", {
@@ -1,5 +1,5 @@
1
- import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-B5BX1XJQ.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/installations-BmuAKPlD.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-CHxn9f-w.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/installations-B6MK5iA8.js
3
3
  var SplitNotFoundComponent = ConsoleFeatureUnavailable;
4
4
  //#endregion
5
5
  export { SplitNotFoundComponent as notFoundComponent };
@@ -1,6 +1,6 @@
1
1
  import { f as lazyRouteComponent, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { r as requireConsoleFeature } from "./console-features-api-DJV790QE.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/installations-D6X1wvQA.js
2
+ import { r as requireConsoleFeature } from "./console-features-api-DSSgCV3v.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/installations-Bct7ag5y.js
4
4
  var DAY_MS = 864e5;
5
5
  /** The time ranges an event list reads, shortest first. */
6
6
  var eventRanges = {
@@ -56,8 +56,8 @@ function validateInstallationsSearch(search) {
56
56
  historyBefore: readTimestamp(search.historyBefore)
57
57
  };
58
58
  }
59
- var $$splitComponentImporter = () => import("./installations-rfEUgSuk.mjs");
60
- var $$splitNotFoundComponentImporter = () => import("./installations-BmuAKPlD.mjs");
59
+ var $$splitComponentImporter = () => import("./installations-_N4PtYFl.mjs");
60
+ var $$splitNotFoundComponentImporter = () => import("./installations-B6MK5iA8.mjs");
61
61
  var Route = createFileRoute("/installations")({
62
62
  beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "insights"),
63
63
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
@@ -1,17 +1,18 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { _t as require_react, gt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { bt as require_react, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { $ as ArrowLeft, G as Check, W as ChevronDown, X as ArrowUpRight, g as RefreshCw, p as Search, t as X } from "../_libs/lucide-react.mjs";
4
- import { C as Skeleton, O as buttonVariants, k as cn, r as Separator$1, t as Button$1 } from "./sidebar-De1__izs.mjs";
5
- import { c as CardDescription, d as CardTitle, f as Field, g as FieldLabel, o as Card, s as CardContent, u as CardHeader } from "./field-0KdP_8LI.mjs";
6
- import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-BEpbu0xs.mjs";
4
+ import { C as Skeleton, O as buttonVariants, k as cn, r as Separator$1, t as Button$1 } from "./sidebar-CVsgosaD.mjs";
7
5
  import { c as useElementScrollRestoration, h as Link, o as useLocation } from "../_libs/@tanstack/react-router+[...].mjs";
8
- import { a as useInsightsEventsQuery, c as useInsightsInstallationsQuery, l as useInsightsRetention, n as formatDays, o as useInsightsInstallationEventsQuery, s as useInsightsInstallationQuery, t as DEFAULT_INSIGHTS_RETENTION } from "./insights-api-Ds7dvWu4.mjs";
9
- import { i as InputGroupInput, n as InputGroupAddon, r as InputGroupButton, t as InputGroup } from "./input-group-c65TGOPW.mjs";
10
- import { a as PeriodSelector, n as InsightsErrorAlert, r as InsightsPageHeader, s as isBuiltinBundle, t as BuiltinBundleBadge } from "./InsightsPageHeader-CLP-sCpY.mjs";
11
- import { n as shortenIdentifier, t as HashValueDisplay } from "./HashValueDisplay-DtWes-Gr.mjs";
12
- import { a as HttpResponseDetails, n as EventTimestamp, o as useInsightsTimeFormat, r as EventTypeDetails, t as EventBundleTransition } from "./EventDetails-C0bZVuOS.mjs";
13
- import { a as installationsScrollRestorationKey, i as eventRanges, n as Route, o as widerEventRange, r as eventRangeBounds, t as EVENT_RANGES } from "./installations-D6X1wvQA.mjs";
14
- //#region node_modules/.nitro/vite/services/ssr/assets/installations-rfEUgSuk.js
6
+ import { c as CardDescription, d as CardTitle, o as Card, s as CardContent, u as CardHeader } from "./badge-BpT7r-ng.mjs";
7
+ import { a as FieldLabel, t as Field } from "./field-HKCaPH3e.mjs";
8
+ import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-M5P3YUfY.mjs";
9
+ import { a as useInsightsEventsQuery, c as useInsightsInstallationsQuery, l as useInsightsRetention, n as formatDays, o as useInsightsInstallationEventsQuery, s as useInsightsInstallationQuery, t as DEFAULT_INSIGHTS_RETENTION } from "./insights-api-DtRFz5X3.mjs";
10
+ import { i as InputGroupInput, n as InputGroupAddon, r as InputGroupButton, t as InputGroup } from "./input-group-xm3LzDuq.mjs";
11
+ import { a as PeriodSelector, n as InsightsErrorAlert, r as InsightsPageHeader, s as isBuiltinBundle, t as BuiltinBundleBadge } from "./InsightsPageHeader-ZlAlDxQy.mjs";
12
+ import { n as shortenIdentifier, t as HashValueDisplay } from "./HashValueDisplay-Zs7ABoOi.mjs";
13
+ import { a as HttpResponseDetails, n as EventTimestamp, o as useInsightsTimeFormat, r as EventTypeDetails, t as EventBundleTransition } from "./EventDetails-l6dF54zp.mjs";
14
+ import { a as installationsScrollRestorationKey, i as eventRanges, n as Route, o as widerEventRange, r as eventRangeBounds, t as EVENT_RANGES } from "./installations-Bct7ag5y.mjs";
15
+ //#region node_modules/.nitro/vite/services/ssr/assets/installations-_N4PtYFl.js
15
16
  var import_react = /* @__PURE__ */ __toESM(require_react());
16
17
  var import_jsx_runtime = require_jsx_runtime();
17
18
  function EventHistoryList({ events, formatter, renderIdentity }) {
@@ -1,5 +1,5 @@
1
- import { r as recoveryWindows } from "./insights-recovery-BWQhiZaF.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/release-adoption-005tQRpo.js
1
+ import { r as recoveryWindows } from "./insights-recovery-BUuQdlA3.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/release-adoption-DuYJTGuX.js
3
3
  /** A crash rate at which Release health recommends rolling a bundle back. */
4
4
  var CRASH_RATE_THRESHOLD = .05;
5
5
  var HOUR_MS = 36e5;
@@ -8,7 +8,7 @@ var invalid = () => {
8
8
  throw new Error("Choose a platform, channel, period, and bundle.");
9
9
  };
10
10
  function readAdoptionReleasesInput(input) {
11
- if (!input || input.platform !== "ios" && input.platform !== "android" || !isText(input.channel)) invalid();
11
+ if (!input || input.platform !== "all" && input.platform !== "ios" && input.platform !== "android" || !isText(input.channel)) invalid();
12
12
  return {
13
13
  platform: input.platform,
14
14
  channel: input.channel
@@ -24,10 +24,11 @@ function readAdoptionReleaseInput(input) {
24
24
  };
25
25
  }
26
26
  function readBundleEventsInput(input) {
27
- const scope = readAdoptionReleasesInput(input);
28
- if (!Object.hasOwn(recoveryWindows, input.window) || typeof input.endMs !== "number" || !Number.isSafeInteger(input.endMs) || input.endMs <= 0 || input.endMs % HOUR_MS !== 0 || !isText(input.bundleId) || input.type !== "DOWNLOADED" && input.type !== "LAUNCHED" && input.type !== "RECOVERED") invalid();
27
+ const { platform, channel } = readAdoptionReleasesInput(input);
28
+ if (platform === "all" || !Object.hasOwn(recoveryWindows, input.window) || typeof input.endMs !== "number" || !Number.isSafeInteger(input.endMs) || input.endMs <= 0 || input.endMs % HOUR_MS !== 0 || !isText(input.bundleId) || input.type !== "DOWNLOADED" && input.type !== "LAUNCHED" && input.type !== "RECOVERED") invalid();
29
29
  return {
30
- ...scope,
30
+ platform,
31
+ channel,
31
32
  window: input.window,
32
33
  endMs: input.endMs,
33
34
  bundleId: input.bundleId,
@@ -46,10 +47,19 @@ var crashRateOf = (launched, recovered) => {
46
47
  rate: attempts === 0 ? 0 : recovered / attempts
47
48
  };
48
49
  };
50
+ /**
51
+ * The bundles Release health compares when none are chosen, from the
52
+ * candidates newest first: the two newest live bundles of one platform, or
53
+ * the newest live one of each; without any live one, the newest two.
54
+ */
55
+ var defaultAdoptionReleases = (candidates, platform) => {
56
+ const live = (platform === "all" ? ["ios", "android"] : [platform]).flatMap((each) => candidates.filter((release) => release.platform === each && release.live).slice(0, platform === "all" ? 1 : 2));
57
+ return (live.length > 0 ? live : candidates).slice(0, 2).map((release) => release.releaseId);
58
+ };
49
59
  /** Whether a bundle's crashes call for rolling it back. */
50
60
  var recommendsRollback = (release, launched, recovered) => {
51
61
  const { attempts, rate } = crashRateOf(launched, recovered);
52
62
  return release.enabled && attempts >= 20 && rate >= .05;
53
63
  };
54
64
  //#endregion
55
- export { readBundleEventsInput as a, readAdoptionReleasesInput as i, crashRateOf as n, recommendsRollback as o, readAdoptionReleaseInput as r, CRASH_RATE_THRESHOLD as t };
65
+ export { readAdoptionReleasesInput as a, readAdoptionReleaseInput as i, crashRateOf as n, readBundleEventsInput as o, defaultAdoptionReleases as r, recommendsRollback as s, CRASH_RATE_THRESHOLD as t };
@@ -1,15 +1,15 @@
1
1
  import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-UB-4rDiA.mjs";
2
+ import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- import { a as readBundleEventsInput, i as readAdoptionReleasesInput, r as readAdoptionReleaseInput } from "./release-adoption-005tQRpo.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/release-adoption-rpc-VPRjwQya.js
4
+ import { a as readAdoptionReleasesInput, i as readAdoptionReleaseInput, o as readBundleEventsInput } from "./release-adoption-DuYJTGuX.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/release-adoption-rpc-CHl7G_Zy.js
6
6
  var listAdoptionReleasesRpc_createServerFn_handler = createServerRpc({
7
7
  id: "d11a48f7251928b7819e2376aed4902fa66277bf6d30312d87ca53468332f256",
8
8
  name: "listAdoptionReleasesRpc",
9
9
  filename: "src/lib/release-adoption-rpc.ts"
10
10
  }, (opts) => listAdoptionReleasesRpc.__executeServer(opts));
11
11
  var listAdoptionReleasesRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readAdoptionReleasesInput).handler(listAdoptionReleasesRpc_createServerFn_handler, async ({ data }) => {
12
- const [{ prepareConfig }, { listAdoptionReleases }] = await Promise.all([import("./config.server-B_oTMFxL.mjs"), import("./releaseAdoption-CtOFkwli.mjs")]);
12
+ const [{ prepareConfig }, { listAdoptionReleases }] = await Promise.all([import("./config.server-DTdsG47T.mjs"), import("./releaseAdoption-B39cpvfo.mjs")]);
13
13
  const { core } = await prepareConfig();
14
14
  return listAdoptionReleases(core, data);
15
15
  });
@@ -19,7 +19,7 @@ var getAdoptionReleaseRpc_createServerFn_handler = createServerRpc({
19
19
  filename: "src/lib/release-adoption-rpc.ts"
20
20
  }, (opts) => getAdoptionReleaseRpc.__executeServer(opts));
21
21
  var getAdoptionReleaseRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readAdoptionReleaseInput).handler(getAdoptionReleaseRpc_createServerFn_handler, async ({ data }) => {
22
- const [{ prepareConfig }, { getAdoptionRelease }] = await Promise.all([import("./config.server-B_oTMFxL.mjs"), import("./releaseAdoption-CtOFkwli.mjs")]);
22
+ const [{ prepareConfig }, { getAdoptionRelease }] = await Promise.all([import("./config.server-DTdsG47T.mjs"), import("./releaseAdoption-B39cpvfo.mjs")]);
23
23
  const { core } = await prepareConfig();
24
24
  return getAdoptionRelease(core, data);
25
25
  });
@@ -30,9 +30,9 @@ var getBundleEventsRpc_createServerFn_handler = createServerRpc({
30
30
  }, (opts) => getBundleEventsRpc.__executeServer(opts));
31
31
  var getBundleEventsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readBundleEventsInput).handler(getBundleEventsRpc_createServerFn_handler, async ({ data }) => {
32
32
  const [{ prepareConfig }, { getBundleEvents }, { requireFeature }] = await Promise.all([
33
- import("./config.server-B_oTMFxL.mjs"),
34
- import("./releaseAdoption-CtOFkwli.mjs"),
35
- import("./runtime.server-De0QVWc9.mjs")
33
+ import("./config.server-DTdsG47T.mjs"),
34
+ import("./releaseAdoption-B39cpvfo.mjs"),
35
+ import("./runtime.server-DsHqVqTr.mjs")
36
36
  ]);
37
37
  const { runtime } = await prepareConfig();
38
38
  return getBundleEvents(await requireFeature(runtime, "insightsAnalytics"), data);
@@ -1,60 +1,76 @@
1
- import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-BWQhiZaF.mjs";
2
- import { a as readBundleEventsInput, i as readAdoptionReleasesInput, r as readAdoptionReleaseInput } from "./release-adoption-005tQRpo.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/releaseAdoption-CtOFkwli.js
1
+ import { t as addReleaseReachability } from "./releaseReachability-bFsuElSS.mjs";
2
+ import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-BUuQdlA3.mjs";
3
+ import { a as readAdoptionReleasesInput, i as readAdoptionReleaseInput, o as readBundleEventsInput } from "./release-adoption-DuYJTGuX.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/releaseAdoption-B39cpvfo.js
4
5
  /** Rows read past a focused release to find the bundle before it. */
5
6
  var PREVIOUS_ROWS = 4;
6
- var labelOf = (release) => ({
7
- releaseId: release.id,
8
- bundleId: release.bundle_id,
9
- deployedAtMs: release.created_at_ms,
10
- targetAppVersion: release.target_app_version,
11
- enabled: release.enabled,
12
- revision: release.revision
13
- });
14
- var bundles = (releases) => releases.filter((release) => release.bundle_id).map(labelOf);
7
+ var platformsOf = (platform) => platform === "all" ? ["ios", "android"] : [platform];
15
8
  /**
16
- * The newest bundle deployments of a channel and platform, newest first: one
17
- * read of the channel and one of its newest releases.
9
+ * Labels the releases that have a bundle, a release without one having
10
+ * nothing to apply. A bundle is live when its scope's catalog still serves
11
+ * it: one catalog read per scope of the enabled ones.
12
+ */
13
+ var labelled = async (core, releases) => {
14
+ const bundles = releases.filter((release) => release.bundle_id);
15
+ const live = new Set((await addReleaseReachability(core, bundles.filter((release) => release.enabled))).filter((release) => !release.currentlyUnreachable).map((release) => release.id));
16
+ return bundles.map((release) => ({
17
+ releaseId: release.id,
18
+ bundleId: release.bundle_id,
19
+ platform: release.platform,
20
+ deployedAtMs: release.created_at_ms,
21
+ targetAppVersion: release.target_app_version,
22
+ enabled: release.enabled,
23
+ live: live.has(release.id),
24
+ revision: release.revision
25
+ }));
26
+ };
27
+ /**
28
+ * A channel's newest bundle deployments, of one platform or both, newest
29
+ * first: per platform, its newest releases and its newest enabled ones, so
30
+ * a live bundle older than the newest still shows.
18
31
  */
19
32
  async function listAdoptionReleases(core, input) {
20
33
  const { platform, channel } = readAdoptionReleasesInput(input);
21
34
  const row = await core.findChannelByName(channel);
22
35
  if (row === null) return [];
23
- return bundles(await core.listReleases({
36
+ const lists = await Promise.all(platformsOf(platform).flatMap((each) => [{}, { enabled: true }].map((enabled) => core.listReleases({
24
37
  filter: {
25
38
  kind: "channelPlatform",
26
39
  channelId: row.id,
27
- platform
40
+ platform: each,
41
+ ...enabled
28
42
  },
29
43
  order: "desc",
30
44
  limit: 10
31
- }));
45
+ }))));
46
+ return labelled(core, [...new Map(lists.flat().map((release) => [release.id, release])).values()].sort((left, right) => right.created_at_ms - left.created_at_ms));
32
47
  }
33
48
  /**
34
- * One bundle deployment of the channel and platform, for a focus the newest
35
- * ones leave out, and with `withPrevious` the bundle deployed before it.
49
+ * One bundle deployment of the channel, for a focus the newest ones leave
50
+ * out, and with `withPrevious` the bundle deployed before it on its
51
+ * platform.
36
52
  */
37
53
  async function getAdoptionRelease(core, input) {
38
54
  const { platform, channel, releaseId, withPrevious } = readAdoptionReleaseInput(input);
39
55
  const [row, release] = await Promise.all([core.findChannelByName(channel), core.getRelease(releaseId)]);
40
- if (row === null || release === null || !release.bundle_id || release.platform !== platform || release.channel_id !== row.id) return withPrevious ? {
56
+ if (row === null || release === null || !release.bundle_id || platform !== "all" && release.platform !== platform || release.channel_id !== row.id) return withPrevious ? {
41
57
  release: null,
42
58
  previous: null
43
59
  } : { release: null };
44
- if (!withPrevious) return { release: labelOf(release) };
45
- const older = await core.listReleases({
60
+ if (!withPrevious) return { release: (await labelled(core, [release]))[0] };
61
+ const [label, previous] = await labelled(core, [release, ...await core.listReleases({
46
62
  filter: {
47
63
  kind: "channelPlatform",
48
64
  channelId: row.id,
49
- platform
65
+ platform: release.platform
50
66
  },
51
67
  order: "desc",
52
68
  after: release.id,
53
69
  limit: PREVIOUS_ROWS
54
- });
70
+ })]);
55
71
  return {
56
- release: labelOf(release),
57
- previous: bundles(older)[0] ?? null
72
+ release: label,
73
+ previous: previous ?? null
58
74
  };
59
75
  }
60
76
  /**