@hot-updater/console 1.1.4 → 1.2.0-rc.1

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 (273) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/-native-builds-search-C-TGpFAm.js +1 -0
  3. package/.output/public/assets/{ConsoleFeatureUnavailable-C0KfsKWL.js → ConsoleFeatureUnavailable-CUtcXuY2.js} +1 -1
  4. package/.output/public/assets/EventDetails-Dl2RvPAk.js +1 -0
  5. package/.output/public/assets/HashValueDisplay-6lNRxDJX.js +1 -0
  6. package/.output/public/assets/InsightsPageHeader-DHhqY3DT.js +1 -0
  7. package/.output/public/assets/NotFoundPage-DZ3DxyRA.js +1 -0
  8. package/.output/public/assets/PlatformIcon-BBWQlWm9.js +1 -0
  9. package/.output/public/assets/RolloutPercentageBadge-Cxogpi8F.js +1 -0
  10. package/.output/public/assets/StoreSubmission-JpngSvHS.js +1 -0
  11. package/.output/public/assets/alert-dialog-BqYScr9y.js +1 -0
  12. package/.output/public/assets/api-P2g8dCNg.js +1 -0
  13. package/.output/public/assets/api-keys-DWQC2q6y.js +1 -0
  14. package/.output/public/assets/api-keys-FueRkF9q.js +1 -0
  15. package/.output/public/assets/arrow-left-g9cKqXuC.js +1 -0
  16. package/.output/public/assets/arrow-right-CNII8TYn.js +1 -0
  17. package/.output/public/assets/arrow-up-right-DK8Zdg40.js +1 -0
  18. package/.output/public/assets/badge-DWFcDWho.js +1 -0
  19. package/.output/public/assets/check-CXVR3s3X.js +1 -0
  20. package/.output/public/assets/chevron-right-BoUXo82O.js +1 -0
  21. package/.output/public/assets/circle-off-C7Muo0ss.js +1 -0
  22. package/.output/public/assets/{clipboard-DTkrlIMn.js → clipboard-DQbOcrL7.js} +1 -1
  23. package/.output/public/assets/console-features-api-DEXSwFtc.js +1 -0
  24. package/.output/public/assets/copy-DsuLj3oj.js +1 -0
  25. package/.output/public/assets/dialog-CNUPxNxH.js +1 -0
  26. package/.output/public/assets/{dist-dDj-R6uh.js → dist-CPlO6ko9.js} +1 -1
  27. package/.output/public/assets/download-Cf24LBde.js +1 -0
  28. package/.output/public/assets/{empty-Bf4DanOL.js → empty-B3Uwdd6k.js} +1 -1
  29. package/.output/public/assets/{field-GxF9SyUo.js → field-D-2-mnNh.js} +1 -1
  30. package/.output/public/assets/history-DqHlgSuV.js +1 -0
  31. package/.output/public/assets/index-BWU6owTG.js +10 -0
  32. package/.output/public/assets/{input-group-B4nrqIh0.js → input-group-D3OUBk4n.js} +1 -1
  33. package/.output/public/assets/insights-B-0odqpt.js +42 -0
  34. package/.output/public/assets/insights-BSVGfxSL.js +1 -0
  35. package/.output/public/assets/insights-NK5B6ReS.js +2 -0
  36. package/.output/public/assets/insights-api-BVCXJsoV.js +1 -0
  37. package/.output/public/assets/insights-search-DghCbEnk.js +1 -0
  38. package/.output/public/assets/insights-usage-rpc-CKQH0pUS.js +1 -0
  39. package/.output/public/assets/insights_.distribution-CJvgwcVZ.js +2 -0
  40. package/.output/public/assets/insights_.distribution-DblZM0mO.js +1 -0
  41. package/.output/public/assets/insights_.distribution-dvk6vYDM.js +1 -0
  42. package/.output/public/assets/installations-B674P5Z5.js +2 -0
  43. package/.output/public/assets/installations-BWxczZ2t.js +1 -0
  44. package/.output/public/assets/installations-Dv4kWQYz.js +1 -0
  45. package/.output/public/assets/{key-round-B4fI1psK.js → key-round-DwNKkHhy.js} +1 -1
  46. package/.output/public/assets/link-DTEyW70e.js +2 -0
  47. package/.output/public/assets/{list-Dtj7TtzV.js → list--NIee1FZ.js} +1 -1
  48. package/.output/public/assets/native-builds-BOC71grI.js +1 -0
  49. package/.output/public/assets/native-builds-BswZazmc.js +1 -0
  50. package/.output/public/assets/native-builds-c4BpOLAe.js +2 -0
  51. package/.output/public/assets/native-builds_._buildId-D_Spjl10.js +1 -0
  52. package/.output/public/assets/native-builds_._buildId-DtoXD8rz.js +2 -0
  53. package/.output/public/assets/plus-BReVKct-.js +1 -0
  54. package/.output/public/assets/preload-helper-B44EvKhG.js +1 -0
  55. package/.output/public/assets/{refresh-cw-DjIKjmrS.js → refresh-cw-B9HHjLej.js} +1 -1
  56. package/.output/public/assets/relativeTime-YQt84dYr.js +1 -0
  57. package/.output/public/assets/remote-config-B7ujqhLa.js +6 -0
  58. package/.output/public/assets/remote-config-WjpozBG5.js +1 -0
  59. package/.output/public/assets/remote-config-gXeH6PBW.js +1 -0
  60. package/.output/public/assets/rotate-cw-Cv2aVbYr.js +1 -0
  61. package/.output/public/assets/routes-BDdBIxYS.js +1 -0
  62. package/.output/public/assets/routes-CCD33Azv.js +2 -0
  63. package/.output/public/assets/search-BCel4Oy6.js +1 -0
  64. package/.output/public/assets/select-CBIU0_M1.js +1 -0
  65. package/.output/public/assets/{sidebar-BqX460IW.js → sidebar-Di9SN47G.js} +1 -1
  66. package/.output/public/assets/smartphone-CMaSy_ir.js +1 -0
  67. package/.output/public/assets/styles-Ccxthuz1.css +2 -0
  68. package/.output/public/assets/switch-BpdiHL_t.js +1 -0
  69. package/.output/public/assets/{table-ek1DmRHq.js → table-Bpy3SvSo.js} +1 -1
  70. package/.output/public/assets/{tabs-CgEH_fMT.js → tabs-Xmt7tZeG.js} +1 -1
  71. package/.output/public/assets/{undo-2-DxXx9Zvr.js → undo-2-CUX96_BG.js} +1 -1
  72. package/.output/public/assets/useCompositeListItem-JmyDfo3-.js +1 -0
  73. package/.output/public/assets/useInfiniteQuery-DX4WpBRG.js +1 -0
  74. package/.output/public/assets/useMutation-DbYw7boA.js +1 -0
  75. package/.output/public/assets/uuidv7-zXMtwR9Q.js +1 -0
  76. package/.output/public/assets/{valueToPercent-B44vDssN.js → valueToPercent-BLwGy_xK.js} +1 -1
  77. package/.output/server/{__23tanstack-start-server-fn-resolver-KpQ5Z_24.mjs → __23tanstack-start-server-fn-resolver-CygMPYHZ.mjs} +64 -40
  78. package/.output/server/_chunks/ssr-renderer.mjs +2 -2
  79. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  80. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +1 -1
  81. package/.output/server/_libs/lucide-react.mjs +88 -1
  82. package/.output/server/_libs/uqr.mjs +858 -0
  83. package/.output/server/_ssr/-native-builds-search-CwNcoXf4.mjs +37 -0
  84. package/.output/server/_ssr/{BundleIdDisplay-CjSnY65J.mjs → BundleIdDisplay-DOPz4pUS.mjs} +2 -2
  85. package/.output/server/_ssr/{ConsoleFeatureUnavailable-CHxn9f-w.mjs → ConsoleFeatureUnavailable-Xb1JKqcc.mjs} +7 -7
  86. package/.output/server/_ssr/{EventDetails-l6dF54zp.mjs → EventDetails-D7MejFCN.mjs} +8 -8
  87. package/.output/server/_ssr/{HashValueDisplay-Zs7ABoOi.mjs → HashValueDisplay-Dd-wu5rY.mjs} +2 -2
  88. package/.output/server/_ssr/{InsightsPageHeader-ZlAlDxQy.mjs → InsightsPageHeader-CWf1n4Vt.mjs} +13 -11
  89. package/.output/server/_ssr/{NotFoundPage-u28ndvp1.mjs → NotFoundPage-C5rFdUpg.mjs} +2 -2
  90. package/.output/server/_ssr/PlatformIcon-CFLiTjh1.mjs +29 -0
  91. package/.output/server/_ssr/RolloutPercentageBadge-g0Bhfl3M.mjs +21 -0
  92. package/.output/server/_ssr/StoreSubmission-JZ2Zltak.mjs +139 -0
  93. package/.output/server/_ssr/{alert-dialog-B8AqlJwo.mjs → alert-dialog-CvNvTvIJ.mjs} +1 -1
  94. package/.output/server/_ssr/{api-C_0B7NXM.mjs → api-0vtwA5vY.mjs} +126 -7
  95. package/.output/server/_ssr/{api-keys-pRNvn2-9.mjs → api-keys-D5dyA4D1.mjs} +10 -10
  96. package/.output/server/_ssr/{api-keys-rpc-wecWs0nA.mjs → api-keys-rpc-BOIUHhDi.mjs} +5 -5
  97. package/.output/server/_ssr/{api-keys-CLH38u9B.mjs → api-keys-yFlQDwQF.mjs} +2 -2
  98. package/.output/server/_ssr/{api-rpc-DWN8eOHS.mjs → api-rpc-COeFOpYi.mjs} +79 -12
  99. package/.output/server/_ssr/{auth-UP0wXs4i.mjs → auth-Z-wLddzh.mjs} +1 -1
  100. package/.output/server/_ssr/{auth-rpc-CLRArbIl.mjs → auth-rpc-D1ss2GUI.mjs} +6 -6
  101. package/.output/server/_ssr/{auth.server-DR9zc0EU.mjs → auth.server-DYS1OJ6P.mjs} +771 -641
  102. package/.output/server/_ssr/{badge-BpT7r-ng.mjs → badge-CEdVRgyl.mjs} +1 -1
  103. package/.output/server/_ssr/{bundleActivity-0qFIcvqt.mjs → bundleActivity-MLrjNJCT.mjs} +1 -1
  104. package/.output/server/_ssr/{config-WVX4IxSR.mjs → config-CjIBFhJX.mjs} +1 -1
  105. package/.output/server/_ssr/config.server-NnMFjMFX.mjs +43 -0
  106. package/.output/server/_ssr/{console-access-aUpQs49I.mjs → console-access-33BNlH97.mjs} +3 -3
  107. package/.output/server/_ssr/{console-features-4xAGfZHw.mjs → console-features-BTV-XuhQ.mjs} +1 -1
  108. package/.output/server/_ssr/{console-features-api-DSSgCV3v.mjs → console-features-api-v1fSycue.mjs} +6 -6
  109. package/.output/server/_ssr/{console-features-rpc-D6kMlR2A.mjs → console-features-rpc-C7XNVqm0.mjs} +5 -5
  110. package/.output/server/_ssr/createCsrfMiddleware-BwHbC8n-.mjs +159 -0
  111. package/.output/server/_ssr/createMiddleware-C3ACsfuG.mjs +24 -0
  112. package/.output/server/_ssr/{createMiddleware-B1iPez7u.mjs → createServerFn-AQvBMBjJ.mjs} +2 -23
  113. package/.output/server/_ssr/{createServerRpc-BaDJLGBx.mjs → createServerRpc-BVvRVOz5.mjs} +2 -2
  114. package/.output/server/_ssr/{databaseConfig-C5SkAyUy.mjs → databaseConfig-B_Bg7qS5.mjs} +1 -1
  115. package/.output/server/_ssr/{databaseJsonValue-Csbuzc9Q.mjs → databaseJsonValue-kS7cvEtz.mjs} +1 -1
  116. package/.output/server/_ssr/{databaseRows-CPphvbag.mjs → databaseRows-B6H8Cmgq.mjs} +3 -3
  117. package/.output/server/_ssr/{dialog-B4ALf7NJ.mjs → dialog-C8CS8RMt.mjs} +1 -1
  118. package/.output/server/_ssr/{dist-CbQbBIw-.mjs → dist-TEpM_UAD.mjs} +125 -125
  119. package/.output/server/_ssr/{downloadBundle-94jPBGSO.mjs → downloadBundle-DCmr7vsj.mjs} +1 -1
  120. package/.output/server/_ssr/{empty-Bh1FEeYF.mjs → empty-CkdEAvCY.mjs} +2 -2
  121. package/.output/server/_ssr/{empty-plugin-adapters-CpCHi1TV.mjs → empty-plugin-adapters-zrZ0xs6n.mjs} +1 -1
  122. package/.output/server/_ssr/{failureReports-Bh22wois.mjs → failureReports-Cn_zU9S8.mjs} +3 -3
  123. package/.output/server/_ssr/{field-HKCaPH3e.mjs → field-CW08sZXd.mjs} +2 -2
  124. package/.output/server/_ssr/{getBundleChildren-DfxB2K8D.mjs → getBundleChildren-rtkEEJw5.mjs} +2 -2
  125. package/.output/server/_ssr/git-CTA8Aqr0.mjs +56 -0
  126. package/.output/server/_ssr/{input-group-xm3LzDuq.mjs → input-group-D-TpFPuG.mjs} +1 -1
  127. package/.output/server/_ssr/{insights-BKZpJ_K4.mjs → insights-CMyzPs8l.mjs} +28 -27
  128. package/.output/server/_ssr/{insights-CCyTACIw.mjs → insights-CYeBl8N9.mjs} +5 -5
  129. package/.output/server/_ssr/{insights-CNqWQLJR.mjs → insights-DAi9KknT.mjs} +2 -2
  130. package/.output/server/_ssr/{insights-api-DtRFz5X3.mjs → insights-api-BFARQ5ct.mjs} +6 -6
  131. package/.output/server/_ssr/{insights-errors-Iy-lBaM7.mjs → insights-errors-7BCwFybo.mjs} +2 -2
  132. package/.output/server/_ssr/{insights-failures-BJN3RfLu.mjs → insights-failures-B9VPkzZE.mjs} +2 -2
  133. package/.output/server/_ssr/{insights-failures-rpc-DLZ91uOG.mjs → insights-failures-rpc-Q4WNNJkU.mjs} +12 -12
  134. package/.output/server/_ssr/{insights-recovery-BUuQdlA3.mjs → insights-recovery-BtXVU3ro.mjs} +1 -1
  135. package/.output/server/_ssr/{insights-recovery-rpc-BQHUhPi7.mjs → insights-recovery-rpc-CY5RYJKa.mjs} +8 -8
  136. package/.output/server/_ssr/{insights-rpc-C6Vukyn7.mjs → insights-rpc-BO7_evvs.mjs} +5 -5
  137. package/.output/server/_ssr/{insights-search-CBYoxT7v.mjs → insights-search-DKfxgHD3.mjs} +5 -5
  138. package/.output/server/_ssr/{insights-usage-CHqvtehH.mjs → insights-usage-DiGnuxW8.mjs} +1 -1
  139. package/.output/server/_ssr/{insights-usage-rpc-BJ7a-xco.mjs → insights-usage-rpc-B4czku50.mjs} +8 -8
  140. package/.output/server/_ssr/{insights-usage-rpc-C-lNUIsD.mjs → insights-usage-rpc-CUCTFska.mjs} +5 -5
  141. package/.output/server/_ssr/{insightsUsage-COUG-_-U.mjs → insightsUsage-ClAmoUz8.mjs} +3 -3
  142. package/.output/server/_ssr/{insights_.distribution-DmLW8I8a.mjs → insights_.distribution-BDeUhZGj.mjs} +2 -2
  143. package/.output/server/_ssr/{insights_.distribution-CTwilMPm.mjs → insights_.distribution-BRrbZN1X.mjs} +5 -5
  144. package/.output/server/_ssr/{insights_.distribution-DztDyrBj.mjs → insights_.distribution-C2MXpzKd.mjs} +15 -14
  145. package/.output/server/_ssr/{installations-Bct7ag5y.mjs → installations-BVk7okiY.mjs} +4 -4
  146. package/.output/server/_ssr/{installations-B6MK5iA8.mjs → installations-BjLMgBoH.mjs} +2 -2
  147. package/.output/server/_ssr/{installations-_N4PtYFl.mjs → installations-DxGZEC5G.mjs} +12 -12
  148. package/.output/server/_ssr/{listReleases-BfUBlCHo.mjs → listReleases-D_GY00SQ.mjs} +1 -1
  149. package/.output/server/_ssr/native-builds-CSCgFB21.mjs +10 -0
  150. package/.output/server/_ssr/native-builds-CdlyAldW.mjs +569 -0
  151. package/.output/server/_ssr/native-builds-DhXL5zf_.mjs +137 -0
  152. package/.output/server/_ssr/native-builds_._buildId-CMp1h8dT.mjs +10 -0
  153. package/.output/server/_ssr/native-builds_._buildId-GHpGaYyE.mjs +813 -0
  154. package/.output/server/_ssr/nativeBuildQr-84cnFQPX.mjs +59 -0
  155. package/.output/server/_ssr/nativeBuilds-B_7BPjt_.mjs +133 -0
  156. package/.output/server/_ssr/{plugins-BaD1slHx.mjs → plugins-RIryUNWj.mjs} +6 -5
  157. package/.output/server/_ssr/qr-code-C7kNRIDX.mjs +22 -0
  158. package/.output/server/_ssr/{release-adoption-DuYJTGuX.mjs → release-adoption-DoAtNPED.mjs} +2 -2
  159. package/.output/server/_ssr/{release-adoption-rpc-CHl7G_Zy.mjs → release-adoption-rpc-BJXZvtoQ.mjs} +10 -10
  160. package/.output/server/_ssr/{releaseAdoption-B39cpvfo.mjs → releaseAdoption-a2byXMfz.mjs} +4 -4
  161. package/.output/server/_ssr/releaseCatalogCompiler-DLcean2k.mjs +364 -0
  162. package/.output/server/_ssr/{releaseManagement-DFMUnDF5.mjs → releaseManagement-DHUux2az.mjs} +1 -1
  163. package/.output/server/_ssr/{releaseReachability-bFsuElSS.mjs → releaseReachability-DZOK_dH-.mjs} +2 -2
  164. package/.output/server/_ssr/{remote-config-Mj05qVYZ.mjs → remote-config-DjsEl270.mjs} +20 -19
  165. package/.output/server/_ssr/{remote-config-10-obSZ0.mjs → remote-config-DlyyohL2.mjs} +2 -2
  166. package/.output/server/_ssr/{remote-config-Dj1eTYi4.mjs → remote-config-XdYuByHz.mjs} +2 -2
  167. package/.output/server/_ssr/{remote-config-rpc-lteqDSLn.mjs → remote-config-rpc-GMLPb-90.mjs} +6 -6
  168. package/.output/server/_ssr/request-guard-CPdRBuGW.mjs +108 -0
  169. package/.output/server/_ssr/{router-Dr4jjjhx.mjs → router-vpxd56RW.mjs} +317 -71
  170. package/.output/server/_ssr/{routes-BZbrY_qw.mjs → routes-DyEM4b3x.mjs} +14 -14
  171. package/.output/server/_ssr/{routes-B5KrCDwk.mjs → routes-dQe3XhiS.mjs} +99 -81
  172. package/.output/server/_ssr/{runtime.server-DsHqVqTr.mjs → runtime.server-BdMY1blX.mjs} +4 -4
  173. package/.output/server/_ssr/schema-ChlRtZIo.mjs +23 -0
  174. package/.output/server/_ssr/schema-migration-rpc-BfGzEK_o.mjs +65 -0
  175. package/.output/server/_ssr/{select-BtdGNSmp.mjs → select-DM1uwtk9.mjs} +3 -27
  176. package/.output/server/_ssr/{server-BxaHSwHh.mjs → server-BUUKNSPI.mjs} +7 -161
  177. package/.output/server/_ssr/{sidebar-CVsgosaD.mjs → sidebar-DB2YQlok.mjs} +4 -4
  178. package/.output/server/_ssr/ssr.mjs +1 -1
  179. package/.output/server/_ssr/start-BvDsQehg.mjs +49 -0
  180. package/.output/server/_ssr/{switch-BmARgkUP.mjs → switch-DLD58zLy.mjs} +2 -2
  181. package/.output/server/_ssr/{table-M5P3YUfY.mjs → table-P4TnAZhl.mjs} +1 -1
  182. package/.output/server/_ssr/{tabs-CrmfOlJj.mjs → tabs-B7ZeLicF.mjs} +2 -2
  183. package/.output/server/_ssr/{updateFailures-z1IQy_4q.mjs → updateFailures-n-tGv90S.mjs} +3 -3
  184. package/.output/server/_ssr/{uuidv7-C88s9jWF.mjs → uuidv7-BIF4nb_q.mjs} +2 -2
  185. package/.output/server/_ssr/{schema-BiAVyEj2.mjs → version-CQ98ZBpL-CWSkTT9J.mjs} +2 -22
  186. package/.output/server/_tanstack-start-manifest_v-C-KC63Zq.mjs +184 -0
  187. package/.output/server/index.mjs +432 -271
  188. package/lib/vite-internal.mjs +32 -1
  189. package/package.json +8 -7
  190. package/src/components/AppSidebar.tsx +12 -1
  191. package/src/components/ConsoleAccessPage.tsx +49 -3
  192. package/src/components/QrCode.tsx +35 -0
  193. package/src/components/SchemaMigrationRequired.tsx +139 -0
  194. package/src/components/features/insights/BuiltinBundle.tsx +5 -3
  195. package/src/components/features/native-builds/BuiltInBundleCard.tsx +163 -0
  196. package/src/components/features/native-builds/CommitLink.tsx +30 -0
  197. package/src/components/features/native-builds/CopyableText.tsx +48 -0
  198. package/src/components/features/native-builds/ImportBuild.tsx +91 -0
  199. package/src/components/features/native-builds/InstallCard.tsx +205 -0
  200. package/src/components/features/native-builds/NativeBuildDetailPage.tsx +175 -0
  201. package/src/components/features/native-builds/NativeBuildsPage.tsx +151 -0
  202. package/src/components/features/native-builds/NativeBuildsTable.tsx +426 -0
  203. package/src/components/features/native-builds/PatchesCard.tsx +222 -0
  204. package/src/components/features/native-builds/ReleaseNativeBuildLink.tsx +101 -0
  205. package/src/components/features/native-builds/ServedNowCard.tsx +214 -0
  206. package/src/components/features/native-builds/ShortHash.tsx +41 -0
  207. package/src/components/features/native-builds/StoreSubmission.tsx +73 -0
  208. package/src/components/features/releases/ReleaseEditorSheet.tsx +8 -0
  209. package/src/lib/api-rpc.ts +98 -0
  210. package/src/lib/api.ts +120 -0
  211. package/src/lib/native-builds.ts +162 -0
  212. package/src/lib/qr-code.ts +16 -0
  213. package/src/lib/schema-migration-api.ts +54 -0
  214. package/src/lib/schema-migration-rpc.ts +26 -0
  215. package/src/lib/schema-migration.ts +101 -0
  216. package/src/lib/server/config.server.ts +23 -14
  217. package/src/lib/server/console-runtime.server.ts +4 -6
  218. package/src/lib/server/local-console.ts +164 -0
  219. package/src/lib/server/nativeBuildQr.ts +73 -0
  220. package/src/lib/server/nativeBuilds.ts +288 -0
  221. package/src/lib/shell.ts +9 -0
  222. package/src/routeTree.gen.ts +88 -1
  223. package/src/router.tsx +11 -1
  224. package/src/routes/-native-builds-search.ts +51 -0
  225. package/src/routes/[_]hot-updater/native-builds/qr.ts +14 -0
  226. package/src/routes/__root.tsx +11 -1
  227. package/src/routes/api/native-builds/$buildId/download.ts +50 -0
  228. package/src/routes/native-builds.tsx +21 -0
  229. package/src/routes/native-builds_.$buildId.tsx +23 -0
  230. package/src/start.ts +33 -0
  231. package/src/virtual-modules.d.ts +18 -0
  232. package/src/vite-internal.ts +57 -1
  233. package/.output/public/assets/EventDetails-gbD_fCqc.js +0 -1
  234. package/.output/public/assets/HashValueDisplay-BGkDPaYi.js +0 -1
  235. package/.output/public/assets/InsightsPageHeader-BRw8XkJW.js +0 -1
  236. package/.output/public/assets/NotFoundPage-Cei6W2lm.js +0 -1
  237. package/.output/public/assets/alert-dialog-BtVg50WQ.js +0 -1
  238. package/.output/public/assets/api-DoicFJfd.js +0 -1
  239. package/.output/public/assets/api-keys-D81VHHNM.js +0 -1
  240. package/.output/public/assets/api-keys-Dia6i8K1.js +0 -1
  241. package/.output/public/assets/arrow-left-DsivSewE.js +0 -1
  242. package/.output/public/assets/arrow-up-right-B5aM0F7f.js +0 -1
  243. package/.output/public/assets/badge-Bqf3UDee.js +0 -1
  244. package/.output/public/assets/circle-off-BsbZQtsF.js +0 -1
  245. package/.output/public/assets/console-features-api-DPE4C06Y.js +0 -2
  246. package/.output/public/assets/dialog-CGKPxz3n.js +0 -1
  247. package/.output/public/assets/index-DrkdiRIn.js +0 -10
  248. package/.output/public/assets/insights-C-5t8wh2.js +0 -2
  249. package/.output/public/assets/insights-D_ngQdiz.js +0 -1
  250. package/.output/public/assets/insights-KigRBDgC.js +0 -42
  251. package/.output/public/assets/insights-api-1ZjVu3Sb.js +0 -1
  252. package/.output/public/assets/insights-search-aT8BVCci.js +0 -1
  253. package/.output/public/assets/insights-usage-rpc-DqTiXI1_.js +0 -1
  254. package/.output/public/assets/insights_.distribution-Bzl6RFBR.js +0 -2
  255. package/.output/public/assets/insights_.distribution-Cthgttqb.js +0 -1
  256. package/.output/public/assets/insights_.distribution-D2c2v1bu.js +0 -1
  257. package/.output/public/assets/installations-2Nx8Htf-.js +0 -1
  258. package/.output/public/assets/installations-BskJ1xQr.js +0 -2
  259. package/.output/public/assets/installations-K2iJ_r0h.js +0 -1
  260. package/.output/public/assets/remote-config-D9X3NiwV.js +0 -6
  261. package/.output/public/assets/remote-config-DzOOiBIO.js +0 -1
  262. package/.output/public/assets/remote-config-ikg7kak0.js +0 -1
  263. package/.output/public/assets/routes-9rb9P5Y7.js +0 -2
  264. package/.output/public/assets/routes-P7683vKQ.js +0 -1
  265. package/.output/public/assets/search-DuI1FBpg.js +0 -1
  266. package/.output/public/assets/select-M3H2gxCc.js +0 -1
  267. package/.output/public/assets/smartphone-CtsHuiIC.js +0 -1
  268. package/.output/public/assets/styles-CpiW_YdW.css +0 -2
  269. package/.output/public/assets/switch-By_vfm8I.js +0 -1
  270. package/.output/public/assets/useCompositeListItem-B-UkrDlu.js +0 -1
  271. package/.output/server/_ssr/config.server-DTdsG47T.mjs +0 -35
  272. package/.output/server/_ssr/start-B6ECIE_7.mjs +0 -4
  273. package/.output/server/_tanstack-start-manifest_v-_BY9hYTm.mjs +0 -136
@@ -0,0 +1,37 @@
1
+ import { o as assertCanonicalChannelName } from "./dist-TEpM_UAD.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/-native-builds-search-CwNcoXf4.js
3
+ var text = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
4
+ /** A channel name a build can embed, or undefined. */
5
+ var channelName = (value) => {
6
+ const channel = text(value);
7
+ if (channel === void 0) return void 0;
8
+ try {
9
+ assertCanonicalChannelName(channel);
10
+ return channel;
11
+ } catch {
12
+ return;
13
+ }
14
+ };
15
+ var defined = (values) => Object.fromEntries(Object.entries(values).filter(([, value]) => value !== void 0));
16
+ /**
17
+ * The native build list's URL: a channel the builds embed, and one keyset
18
+ * page. A page has one direction, so `before` wins over `after`.
19
+ */
20
+ var validateNativeBuildsSearch = (search) => {
21
+ const before = text(search.before);
22
+ return defined({
23
+ channel: channelName(search.channel),
24
+ before,
25
+ after: before === void 0 ? text(search.after) : void 0
26
+ });
27
+ };
28
+ /** A native build page's URL: one page of the patches from it. */
29
+ var validateNativeBuildDetailSearch = (search) => {
30
+ const patchesBefore = text(search.patchesBefore);
31
+ return defined({
32
+ patchesBefore,
33
+ patchesAfter: patchesBefore === void 0 ? text(search.patchesAfter) : void 0
34
+ });
35
+ };
36
+ //#endregion
37
+ export { validateNativeBuildsSearch as n, validateNativeBuildDetailSearch as t };
@@ -1,6 +1,6 @@
1
1
  import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
- import { k as cn } from "./sidebar-CVsgosaD.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/BundleIdDisplay-CjSnY65J.js
2
+ import { k as cn } from "./sidebar-DB2YQlok.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/BundleIdDisplay-DOPz4pUS.js
4
4
  var import_jsx_runtime = require_jsx_runtime();
5
5
  function BundleIdDisplay({ bundleId, className }) {
6
6
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -1,11 +1,11 @@
1
- import { a as unavailableReason, n as consoleFeatures } from "./console-features-4xAGfZHw.mjs";
2
1
  import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { X as ArrowUpRight } from "../_libs/lucide-react.mjs";
4
- import { O as buttonVariants, S as SidebarTrigger } from "./sidebar-CVsgosaD.mjs";
5
- import { a as useConsoleFeatures, n as notFoundFeature } from "./console-features-api-DSSgCV3v.mjs";
6
- import { t as NotFoundPage } from "./NotFoundPage-u28ndvp1.mjs";
7
- import { i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-Bh1FEeYF.mjs";
8
- //#region node_modules/.nitro/vite/services/ssr/assets/ConsoleFeatureUnavailable-CHxn9f-w.js
2
+ import { tt as ArrowUpRight } from "../_libs/lucide-react.mjs";
3
+ import { O as buttonVariants, S as SidebarTrigger } from "./sidebar-DB2YQlok.mjs";
4
+ import { a as unavailableReason, n as consoleFeatures } from "./console-features-BTV-XuhQ.mjs";
5
+ import { a as useConsoleFeatures, n as notFoundFeature } from "./console-features-api-v1fSycue.mjs";
6
+ import { t as NotFoundPage } from "./NotFoundPage-C5rFdUpg.mjs";
7
+ import { i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-CkdEAvCY.mjs";
8
+ //#region node_modules/.nitro/vite/services/ssr/assets/ConsoleFeatureUnavailable-Xb1JKqcc.js
9
9
  var import_jsx_runtime = require_jsx_runtime();
10
10
  var CONSOLE_DEPLOYMENT_GUIDE_URL = "https://hot-updater.dev/docs/guides/console-deployment";
11
11
  /**
@@ -1,14 +1,14 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
2
  import { bt as require_react, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { B as CircleAlert, F as Download, G as Check, I as Copy, Q as ArrowRightLeft, W as ChevronDown, h as RotateCcw, l as Sparkles, tt as Activity, u as Smartphone } from "../_libs/lucide-react.mjs";
4
- import { a as SheetContent, c as SheetTitle, i as Sheet, l as SheetTrigger, o as SheetDescription, s as SheetHeader, t as Button$1 } from "./sidebar-CVsgosaD.mjs";
5
- import { i as EmptyHeader, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-Bh1FEeYF.mjs";
6
- import { a as Badge } from "./badge-BpT7r-ng.mjs";
3
+ import { B as Download, G as CircleAlert, V as Copy, X as Check, Y as ChevronDown, g as RotateCcw, l as Sparkles, ot as Activity, rt as ArrowRightLeft, u as Smartphone } from "../_libs/lucide-react.mjs";
4
+ import { a as SheetContent, c as SheetTitle, i as Sheet, l as SheetTrigger, o as SheetDescription, s as SheetHeader, t as Button$1 } from "./sidebar-DB2YQlok.mjs";
5
+ import { a as Badge } from "./badge-CEdVRgyl.mjs";
7
6
  import { n as toast } from "../_libs/sonner.mjs";
8
- import { n as describeFailure } from "./insights-failures-BJN3RfLu.mjs";
9
- import { s as isBuiltinBundle, t as BuiltinBundleBadge } from "./InsightsPageHeader-ZlAlDxQy.mjs";
10
- import { t as HashValueDisplay } from "./HashValueDisplay-Zs7ABoOi.mjs";
11
- //#region node_modules/.nitro/vite/services/ssr/assets/EventDetails-l6dF54zp.js
7
+ import { i as EmptyHeader, o as EmptyTitle, r as EmptyDescription, t as Empty } from "./empty-CkdEAvCY.mjs";
8
+ import { n as describeFailure } from "./insights-failures-B9VPkzZE.mjs";
9
+ import { s as isBuiltinBundle, t as BuiltinBundleBadge } from "./InsightsPageHeader-CWf1n4Vt.mjs";
10
+ import { t as HashValueDisplay } from "./HashValueDisplay-Dd-wu5rY.mjs";
11
+ //#region node_modules/.nitro/vite/services/ssr/assets/EventDetails-D7MejFCN.js
12
12
  var import_react = /* @__PURE__ */ __toESM(require_react());
13
13
  var import_jsx_runtime = require_jsx_runtime();
14
14
  var eventTypes = {
@@ -1,7 +1,7 @@
1
1
  import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
- import { D as TooltipTrigger, T as TooltipContent, k as cn, w as Tooltip$1 } from "./sidebar-CVsgosaD.mjs";
2
+ import { D as TooltipTrigger, T as TooltipContent, k as cn, w as Tooltip$1 } from "./sidebar-DB2YQlok.mjs";
3
3
  import { n as toast } from "../_libs/sonner.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/HashValueDisplay-Zs7ABoOi.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/HashValueDisplay-Dd-wu5rY.js
5
5
  var import_jsx_runtime = require_jsx_runtime();
6
6
  var shortenIdentifier = (value, maxLength = 12) => value.length > maxLength ? `${value.slice(0, Math.max(1, maxLength - 4))}…${value.slice(-4)}` : value;
7
7
  function HashValueDisplay({ value, maxLength = 12, className, buttonClassName }) {
@@ -1,13 +1,13 @@
1
- import { r as isConsoleFeatureUnavailableError } from "./console-features-4xAGfZHw.mjs";
2
1
  import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { E as List, K as ChartNoAxesCombined, O as Info, i as TriangleAlert } from "../_libs/lucide-react.mjs";
4
- import { O as buttonVariants, S as SidebarTrigger, k as cn } from "./sidebar-CVsgosaD.mjs";
2
+ import { A as Info, O as List, Z as ChartNoAxesCombined, i as TriangleAlert } from "../_libs/lucide-react.mjs";
3
+ import { O as buttonVariants, S as SidebarTrigger, k as cn } from "./sidebar-DB2YQlok.mjs";
4
+ import { a as Badge, i as AlertTitle, r as AlertDescription, t as Alert } from "./badge-CEdVRgyl.mjs";
5
+ import { r as isConsoleFeatureUnavailableError } from "./console-features-BTV-XuhQ.mjs";
5
6
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
6
- import { i as useConsoleFeature } from "./console-features-api-DSSgCV3v.mjs";
7
- import { a as Badge, i as AlertTitle, r as AlertDescription, t as Alert } from "./badge-BpT7r-ng.mjs";
8
- import { n as usageMetrics } from "./insights-usage-CHqvtehH.mjs";
9
- import { i as TabsTrigger, r as TabsList, t as Tabs$1 } from "./tabs-CrmfOlJj.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/InsightsPageHeader-ZlAlDxQy.js
7
+ import { i as useConsoleFeature } from "./console-features-api-v1fSycue.mjs";
8
+ import { n as usageMetrics } from "./insights-usage-DiGnuxW8.mjs";
9
+ import { i as TabsTrigger, r as TabsList, t as Tabs$1 } from "./tabs-B7ZeLicF.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/InsightsPageHeader-CWf1n4Vt.js
11
11
  var import_jsx_runtime = require_jsx_runtime();
12
12
  function InsightsErrorAlert({ error, fallbackTitle }) {
13
13
  if (isConsoleFeatureUnavailableError(error)) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Alert, { children: [
@@ -75,10 +75,12 @@ function UsagePeriodSelector({ window, onWindowChange, twelveMonths = true }) {
75
75
  }
76
76
  /**
77
77
  * A built-in bundle's ID: every native build makes it from its build time with
78
- * the random bits zeroed, or the nil UUID in a debug build. A deployed
79
- * bundle's ID is a random UUIDv7, so it never has this shape.
78
+ * zero random bits, and builds an earlier `hot-updater native-build` made, in
79
+ * the field still, have a node of a platform byte (`01` iOS, `02` Android) and
80
+ * random bits; or the nil UUID in a debug build. A deployed bundle's ID is a
81
+ * random UUIDv7, so it practically never has this shape.
80
82
  */
81
- var BUILTIN_BUNDLE_ID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-7000-8000-000000000000|00000000-0000-0000-0000-000000000000)$/iu;
83
+ var BUILTIN_BUNDLE_ID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-7000-8000-(?:000000000000|0[12][0-9a-f]{10})|00000000-0000-0000-0000-000000000000)$/iu;
82
84
  /**
83
85
  * Whether a reported bundle is one a native build shipped: the report's
84
86
  * `minBundleId`, or, from an SDK that reports none, an ID in the built-in
@@ -1,7 +1,7 @@
1
1
  import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
- import { O as buttonVariants } from "./sidebar-CVsgosaD.mjs";
2
+ import { O as buttonVariants } from "./sidebar-DB2YQlok.mjs";
3
3
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/NotFoundPage-u28ndvp1.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/NotFoundPage-C5rFdUpg.js
5
5
  var import_jsx_runtime = require_jsx_runtime();
6
6
  var homeSearch = {
7
7
  afterReleaseId: void 0,
@@ -0,0 +1,29 @@
1
+ import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/PlatformIcon-CFLiTjh1.js
3
+ var import_jsx_runtime = require_jsx_runtime();
4
+ function AppleIcon({ className }) {
5
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
6
+ "aria-hidden": "true",
7
+ viewBox: "0 0 24 24",
8
+ xmlns: "http://www.w3.org/2000/svg",
9
+ className,
10
+ fill: "currentColor",
11
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701" })
12
+ });
13
+ }
14
+ function AndroidIcon({ className }) {
15
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
16
+ "aria-hidden": "true",
17
+ viewBox: "0 0 24 24",
18
+ xmlns: "http://www.w3.org/2000/svg",
19
+ className,
20
+ fill: "currentColor",
21
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M18.4395 5.5586c-.675 1.1664-1.352 2.3318-2.0274 3.498-.0366-.0155-.0742-.0286-.1113-.043-1.8249-.6957-3.484-.8-4.42-.787-1.8551.0185-3.3544.4643-4.2597.8203-.084-.1494-1.7526-3.021-2.0215-3.4864a1.1451 1.1451 0 0 0-.1406-.1914c-.3312-.364-.9054-.4859-1.379-.203-.475.282-.7136.9361-.3886 1.5019 1.9466 3.3696-.0966-.2158 1.9473 3.3593.0172.031-.4946.2642-1.3926 1.0177C2.8987 12.176.452 14.772 0 18.9902h24c-.119-1.1108-.3686-2.099-.7461-3.0683-.7438-1.9118-1.8435-3.2928-2.7402-4.1836a12.1048 12.1048 0 0 0-2.1309-1.6875c.6594-1.122 1.312-2.2559 1.9649-3.3848.2077-.3615.1886-.7956-.0079-1.1191a1.1001 1.1001 0 0 0-.8515-.5332c-.5225-.0536-.9392.3128-1.0488.5449zm-.0391 8.461c.3944.5926.324 1.3306-.1563 1.6503-.4799.3197-1.188.0985-1.582-.4941-.3944-.5927-.324-1.3307.1563-1.6504.4727-.315 1.1812-.1086 1.582.4941zM7.207 13.5273c.4803.3197.5506 1.0577.1563 1.6504-.394.5926-1.1038.8138-1.584.4941-.48-.3197-.5503-1.0577-.1563-1.6504.4008-.6021 1.1087-.8106 1.584-.4941z" })
22
+ });
23
+ }
24
+ function PlatformIcon({ platform, className }) {
25
+ if (platform === "ios") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppleIcon, { className });
26
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AndroidIcon, { className });
27
+ }
28
+ //#endregion
29
+ export { PlatformIcon as t };
@@ -0,0 +1,21 @@
1
+ import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { i as TriangleAlert } from "../_libs/lucide-react.mjs";
3
+ import { k as cn } from "./sidebar-DB2YQlok.mjs";
4
+ import { a as Badge } from "./badge-CEdVRgyl.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/RolloutPercentageBadge-g0Bhfl3M.js
6
+ var import_jsx_runtime = require_jsx_runtime();
7
+ function RolloutPercentageBadge({ percentage, className }) {
8
+ const isPartialRollout = percentage < 100;
9
+ const formattedPercentage = percentage.toFixed(1);
10
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Badge, {
11
+ className: cn("gap-1", className),
12
+ variant: isPartialRollout ? "secondary" : "default",
13
+ children: [
14
+ isPartialRollout ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-3 w-3" }) : null,
15
+ formattedPercentage,
16
+ "%"
17
+ ]
18
+ });
19
+ }
20
+ //#endregion
21
+ export { RolloutPercentageBadge as t };
@@ -0,0 +1,139 @@
1
+ import { i as __toESM } from "../_runtime.mjs";
2
+ import { yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
+ import { V as Copy, p as Send } from "../_libs/lucide-react.mjs";
4
+ import { t as Button$1 } from "./sidebar-DB2YQlok.mjs";
5
+ import { a as Badge } from "./badge-CEdVRgyl.mjs";
6
+ import { n as toast } from "../_libs/sonner.mjs";
7
+ import { a as useConfigQuery } from "./api-0vtwA5vY.mjs";
8
+ import { n as require_dayjs_min, t as require_relativeTime } from "../_libs/dayjs.mjs";
9
+ import { n as getCommitUrl } from "./git-CTA8Aqr0.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/StoreSubmission-JZ2Zltak.js
11
+ var import_jsx_runtime = require_jsx_runtime();
12
+ var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
13
+ var import_relativeTime = /* @__PURE__ */ __toESM(require_relativeTime());
14
+ /** A command or link on one line, with a button that copies it. */
15
+ function CopyableText({ label, value, wrap = false }) {
16
+ const copy = async () => {
17
+ try {
18
+ await navigator.clipboard.writeText(value);
19
+ toast.success("Copied to clipboard");
20
+ } catch {
21
+ toast.error(`Could not copy ${label}`);
22
+ }
23
+ };
24
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
25
+ className: "flex w-full min-w-0 items-center gap-2 rounded-md border bg-muted/40 py-1 pr-1 pl-3",
26
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
27
+ className: wrap ? "min-w-0 flex-1 text-left font-mono text-xs break-all whitespace-pre-wrap" : "min-w-0 flex-1 overflow-x-auto text-left font-mono text-xs whitespace-nowrap",
28
+ children: value
29
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
30
+ "aria-label": `Copy ${label}`,
31
+ className: "size-11 sm:size-7",
32
+ onClick: () => void copy(),
33
+ size: "icon-sm",
34
+ variant: "ghost",
35
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Copy, { "aria-hidden": "true" })
36
+ })]
37
+ });
38
+ }
39
+ /**
40
+ * A hash shortened to its prefix, as git shows a commit: never cut in the
41
+ * middle, the full value on hover, and copied on click.
42
+ */
43
+ function ShortHash({ value, length, label }) {
44
+ const copy = async () => {
45
+ try {
46
+ await navigator.clipboard.writeText(value);
47
+ toast.success("Copied to clipboard", { description: value });
48
+ } catch {
49
+ toast.error(`Could not copy the ${label}`);
50
+ }
51
+ };
52
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
53
+ "aria-label": `Copy the ${label} ${value}`,
54
+ className: "cursor-copy rounded-sm font-mono text-xs whitespace-nowrap tabular-nums underline-offset-4 hover:underline focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none",
55
+ onClick: (event) => {
56
+ event.stopPropagation();
57
+ copy();
58
+ },
59
+ title: value,
60
+ translate: "no",
61
+ type: "button",
62
+ children: value.slice(0, length)
63
+ });
64
+ }
65
+ /**
66
+ * A build's commit as git shows it, its first 7 characters: a link to the
67
+ * commit when `console.gitUrl` is set, else a button that copies the full
68
+ * SHA. The full SHA shows on hover either way.
69
+ */
70
+ function CommitLink({ hash }) {
71
+ const config = useConfigQuery();
72
+ if (hash === null) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
73
+ className: "text-muted-foreground",
74
+ children: "—"
75
+ });
76
+ const url = getCommitUrl(config.data?.console.gitUrl, hash);
77
+ return url === null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShortHash, {
78
+ label: "commit",
79
+ length: 7,
80
+ value: hash
81
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
82
+ className: "font-mono text-xs whitespace-nowrap underline-offset-4 hover:underline",
83
+ href: url,
84
+ onClick: (event) => event.stopPropagation(),
85
+ rel: "noreferrer",
86
+ target: "_blank",
87
+ title: hash,
88
+ translate: "no",
89
+ children: hash.slice(0, 7)
90
+ });
91
+ }
92
+ import_dayjs_min.default.extend(import_relativeTime.default);
93
+ /** Each store track's name as the stores call it. */
94
+ var storeTrackLabels = {
95
+ testflight: "TestFlight",
96
+ "play-internal": "Play internal"
97
+ };
98
+ /** Whether a store took the build, as its row records. */
99
+ var isSubmitted = (build) => build.submitted_to !== null && build.submitted_to !== void 0;
100
+ /** When the submission was recorded: relative, with the exact time on hover. */
101
+ function SubmittedAt({ ms }) {
102
+ if (ms === null) return null;
103
+ const date = (0, import_dayjs_min.default)(ms);
104
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("time", {
105
+ className: "text-xs text-muted-foreground",
106
+ dateTime: date.toISOString(),
107
+ title: date.format("YYYY-MM-DD HH:mm:ss"),
108
+ children: date.fromNow()
109
+ });
110
+ }
111
+ /**
112
+ * The store track a build went to, with the store's label of it, such as
113
+ * "TestFlight 1.7.0 (66)": none for a build no store took.
114
+ */
115
+ function StoreSubmissionBadge({ build, withTime = false }) {
116
+ if (!isSubmitted(build)) return null;
117
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
118
+ className: "inline-flex flex-wrap items-center gap-1.5",
119
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Badge, {
120
+ className: "gap-1",
121
+ title: `Submitted to ${storeTrackLabels[build.submitted_to]}`,
122
+ variant: "secondary",
123
+ children: [
124
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Send, {
125
+ "aria-hidden": "true",
126
+ className: "size-3"
127
+ }),
128
+ storeTrackLabels[build.submitted_to],
129
+ build.submitted_version ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
130
+ className: "font-mono tabular-nums",
131
+ translate: "no",
132
+ children: build.submitted_version
133
+ }) : null
134
+ ]
135
+ }), withTime ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SubmittedAt, { ms: build.submitted_at_ms }) : null]
136
+ });
137
+ }
138
+ //#endregion
139
+ export { isSubmitted as a, StoreSubmissionBadge as i, CopyableText as n, ShortHash as r, CommitLink as t };
@@ -1,6 +1,6 @@
1
1
  import "../_runtime.mjs";
2
2
  import { $ as DialogTitle, X as AlertDialogTrigger$1, Z as AlertDialogRoot, at as DialogBackdrop, bt as require_react, it as DialogClose, nt as DialogPopup, rt as DialogDescription, tt as DialogPortal, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { k as cn, t as Button$1 } from "./sidebar-CVsgosaD.mjs";
3
+ import { k as cn, t as Button$1 } from "./sidebar-DB2YQlok.mjs";
4
4
  require_react();
5
5
  var import_jsx_runtime = require_jsx_runtime();
6
6
  function AlertDialog$1({ ...props }) {
@@ -1,9 +1,11 @@
1
- import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { A as createSsrRpc } from "./sidebar-CVsgosaD.mjs";
3
- import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
1
+ import { l as createServerFn } from "./createServerFn-AQvBMBjJ.mjs";
2
+ import { t as consoleAccess } from "./console-access-33BNlH97.mjs";
3
+ import { A as createSsrRpc } from "./sidebar-DB2YQlok.mjs";
4
4
  import { i as useQuery, n as useMutation, s as useQueryClient } from "../_libs/tanstack__react-query.mjs";
5
- import { n as readReleaseFilter } from "./listReleases-BfUBlCHo.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/api-C_0B7NXM.js
5
+ import { o as assertCanonicalChannelName } from "./dist-TEpM_UAD.mjs";
6
+ import { n as channelIdOf } from "./native-builds-DhXL5zf_.mjs";
7
+ import { n as readReleaseFilter } from "./listReleases-D_GY00SQ.mjs";
8
+ //#region node_modules/.nitro/vite/services/ssr/assets/api-0vtwA5vY.js
7
9
  var MAX_PAGE_LIMIT = 100;
8
10
  var pageLimit = (limit) => {
9
11
  const value = limit ?? 20;
@@ -36,6 +38,39 @@ var getBundleChildCounts = createServerFn({ method: "GET" }).middleware([console
36
38
  if (!Array.isArray(input?.bundleIds) || input.bundleIds.length > 100) throw new Error("Choose up to 100 bundles.");
37
39
  return input;
38
40
  }).handler(createSsrRpc("4ca367070b00f58179a572f0bb8196a4ccdd3881e9b1dbfe33deee0cb6e1f549"));
41
+ /** A channel name the list filters by, as its channel ID. */
42
+ var channelIdFilter = (channel) => {
43
+ if (channel === void 0) return {};
44
+ if (typeof channel !== "string") throw new Error("channel must be a name.");
45
+ assertCanonicalChannelName(channel);
46
+ return { channelId: channelIdOf(channel) };
47
+ };
48
+ var getNativeBuilds = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator((input) => ({
49
+ ...input?.before === void 0 ? {} : { before: input.before },
50
+ ...input?.after === void 0 ? {} : { after: input.after },
51
+ ...channelIdFilter(input?.channel),
52
+ limit: pageLimit(input?.limit)
53
+ })).handler(createSsrRpc("17a54fe7c5ad6ca53457914b1d02b3d6887811aa6b5fa6598a1ee107796ce8f0"));
54
+ /** A native build's page: the build, its built-in bundle, what it is served, and its patches. */
55
+ var getNativeBuildDetail = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator((input) => input).handler(createSsrRpc("c101ad0315790cf226f182906274176b64a93b9bf5b410cacec5067208c70a04"));
56
+ /** One page of the patches from a native build's built-in bundle. */
57
+ var getNativeBuildPatches = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator((input) => ({
58
+ minBundleId: input.minBundleId,
59
+ ...input.before === void 0 ? {} : { before: input.before },
60
+ ...input.after === void 0 ? {} : { after: input.after }
61
+ })).handler(createSsrRpc("2e3fab89483b2e4fea0c2f996071b2dbb15b8bc072e7dae78c75a9a9d854d5b9"));
62
+ /**
63
+ * The newest native build of a release's scope, which its patches start
64
+ * from: one read. A release of an app version range has no one build, and
65
+ * reads nothing.
66
+ */
67
+ var getReleaseNativeBuild = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator((input) => input).handler(createSsrRpc("868ce85f0b63ad138a1f82a573d1d6b12f80c7ca44aefec3dadf01b5fa7db86c"));
68
+ /**
69
+ * The URL a phone downloads a build from without the console's sign-in, or
70
+ * null when the storage gives none: the storage's download URL, resolved
71
+ * again each time it is read, since it may expire.
72
+ */
73
+ var getNativeBuildDownloadUrl = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator((input) => input).handler(createSsrRpc("936ef8582ff49d97077d1d80e8403d0b4106831c955591c5c471a88f96007fe9"));
39
74
  var releaseListQueryKey = ["releases"];
40
75
  var queryKeys = {
41
76
  config: ["config"],
@@ -55,8 +90,26 @@ var queryKeys = {
55
90
  ...bundleIds
56
91
  ]
57
92
  },
58
- bundle: (bundleId) => ["bundle", bundleId]
93
+ bundle: (bundleId) => ["bundle", bundleId],
94
+ nativeBuilds: {
95
+ all: ["native-builds"],
96
+ list: (page) => ["native-builds", page]
97
+ },
98
+ nativeBuild: (id) => ["native-build", id],
99
+ nativeBuildPatches: (minBundleId, page) => [
100
+ "native-build-patches",
101
+ minBundleId,
102
+ page
103
+ ],
104
+ nativeBuildDownloadUrl: (id) => ["native-build-download-url", id],
105
+ releaseNativeBuild: (release) => ["release-native-build", release]
59
106
  };
107
+ /**
108
+ * How often an open install QR reads its download URL again. Storage gives
109
+ * no lifetime with the URL, and adapters let it be configured down to
110
+ * minutes, so the QR never shows one older than this.
111
+ */
112
+ var DOWNLOAD_URL_REFRESH_MS = 3e4;
60
113
  function useConfigQuery() {
61
114
  return useQuery({
62
115
  queryKey: queryKeys.config,
@@ -117,6 +170,72 @@ function useBundleChildCountsQuery(bundleIds) {
117
170
  enabled: normalizedBundleIds.length > 0
118
171
  });
119
172
  }
173
+ /** One page of native builds, newest first, kept on screen while the next loads. */
174
+ function useNativeBuildsQuery(page) {
175
+ return useQuery({
176
+ queryKey: queryKeys.nativeBuilds.list(page),
177
+ queryFn: () => getNativeBuilds({ data: page }),
178
+ placeholderData: (previousData) => previousData,
179
+ staleTime: 6e4
180
+ });
181
+ }
182
+ /**
183
+ * A native build's page in one round trip, or null for an unknown ID. The
184
+ * page reads it again when it opens, since its catalog and patches change
185
+ * with each deploy.
186
+ */
187
+ function useNativeBuildDetailQuery(id) {
188
+ return useQuery({
189
+ queryKey: queryKeys.nativeBuild(id),
190
+ queryFn: () => getNativeBuildDetail({ data: { id } }),
191
+ enabled: id.length > 0
192
+ });
193
+ }
194
+ /**
195
+ * A page of patches from a built-in bundle other than the newest, which the
196
+ * build's page already holds; kept on screen while the next one loads.
197
+ */
198
+ function useNativeBuildPatchesQuery(minBundleId, page, enabled) {
199
+ return useQuery({
200
+ queryKey: queryKeys.nativeBuildPatches(minBundleId, page),
201
+ queryFn: () => getNativeBuildPatches({ data: {
202
+ minBundleId,
203
+ ...page
204
+ } }),
205
+ enabled: enabled && minBundleId.length > 0,
206
+ placeholderData: (previousData) => previousData
207
+ });
208
+ }
209
+ /**
210
+ * The newest native build of a release's scope, or none: read only for a
211
+ * release one build can serve, by its fingerprint or one exact app version.
212
+ */
213
+ function useReleaseNativeBuildQuery(release) {
214
+ return useQuery({
215
+ queryKey: queryKeys.releaseNativeBuild(release ?? {
216
+ platform: "ios",
217
+ channel: "",
218
+ fingerprintHash: null,
219
+ targetAppVersion: null
220
+ }),
221
+ queryFn: () => getReleaseNativeBuild({ data: release }),
222
+ enabled: release !== null,
223
+ staleTime: 6e4
224
+ });
225
+ }
226
+ /**
227
+ * The storage URL a phone downloads a build from, read while the install
228
+ * QR is open and again before it expires.
229
+ */
230
+ function useNativeBuildDownloadUrlQuery(id, enabled) {
231
+ return useQuery({
232
+ queryKey: queryKeys.nativeBuildDownloadUrl(id),
233
+ queryFn: () => getNativeBuildDownloadUrl({ data: { id } }),
234
+ enabled,
235
+ staleTime: DOWNLOAD_URL_REFRESH_MS,
236
+ refetchInterval: (query) => query.state.data?.url === null ? false : DOWNLOAD_URL_REFRESH_MS
237
+ });
238
+ }
120
239
  function useCreateChannelMutation() {
121
240
  const queryClient = useQueryClient();
122
241
  return useMutation({
@@ -183,4 +302,4 @@ function usePromoteReleaseMutation() {
183
302
  });
184
303
  }
185
304
  //#endregion
186
- export { useConfigQuery as a, useDeleteReleaseMutation as c, useReleaseCatalogDiagnosticsQuery as d, useReleaseQuery as f, useChannelsQuery as i, usePreflightReleaseMutation as l, useUpdateReleaseMutation as m, useBundleChildrenQuery as n, useCreateChannelMutation as o, useReleasesQuery as p, useBundleQuery as r, useDeleteChannelMutation as s, useBundleChildCountsQuery as t, usePromoteReleaseMutation as u };
305
+ export { useReleaseQuery as _, useConfigQuery as a, useDeleteReleaseMutation as c, useNativeBuildPatchesQuery as d, useNativeBuildsQuery as f, useReleaseNativeBuildQuery as g, useReleaseCatalogDiagnosticsQuery as h, useChannelsQuery as i, useNativeBuildDetailQuery as l, usePromoteReleaseMutation as m, useBundleChildrenQuery as n, useCreateChannelMutation as o, usePreflightReleaseMutation as p, useBundleQuery as r, useDeleteChannelMutation as s, useBundleChildCountsQuery as t, useNativeBuildDownloadUrlQuery as u, useReleasesQuery as v, useUpdateReleaseMutation as y };
@@ -1,17 +1,17 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
+ import { l as createServerFn } from "./createServerFn-AQvBMBjJ.mjs";
3
+ import { t as consoleAccess } from "./console-access-33BNlH97.mjs";
3
4
  import { bt as require_react, yt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
- import { D as KeyRound, G as Check, L as Clipboard, T as LoaderCircle, _ as Plus, f as ShieldOff, g as RefreshCw, i as TriangleAlert } from "../_libs/lucide-react.mjs";
5
- import { A as createSsrRpc, C as Skeleton, S as SidebarTrigger, n as Input, t as Button$1 } from "./sidebar-CVsgosaD.mjs";
6
- import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
5
+ import { D as LoaderCircle, H as Clipboard, X as Check, _ as RefreshCw, f as ShieldOff, i as TriangleAlert, k as KeyRound, v as Plus } from "../_libs/lucide-react.mjs";
6
+ import { A as createSsrRpc, C as Skeleton, S as SidebarTrigger, n as Input, t as Button$1 } from "./sidebar-DB2YQlok.mjs";
7
+ import { a as Badge, d as CardTitle, i as AlertTitle, n as AlertAction, o as Card, r as AlertDescription, s as CardContent, t as Alert, u as CardHeader } from "./badge-CEdVRgyl.mjs";
8
+ import { a as AlertDialogDescription, c as AlertDialogMedia, i as AlertDialogContent, l as AlertDialogTitle, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1, u as AlertDialogTrigger } from "./alert-dialog-CvNvTvIJ.mjs";
9
+ import { a as DialogHeader, i as DialogFooter, n as DialogContent, o as DialogTitle, r as DialogDescription, t as Dialog$1 } from "./dialog-C8CS8RMt.mjs";
10
+ import { a as FieldLabel, i as FieldGroup, n as FieldDescription, r as FieldError, t as Field } from "./field-CW08sZXd.mjs";
11
+ import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-P4TnAZhl.mjs";
7
12
  import { i as useQuery, n as useMutation, s as useQueryClient } from "../_libs/tanstack__react-query.mjs";
8
- import { a as Badge, d as CardTitle, i as AlertTitle, n as AlertAction, o as Card, r as AlertDescription, s as CardContent, t as Alert, u as CardHeader } from "./badge-BpT7r-ng.mjs";
9
- import { a as AlertDialogDescription, c as AlertDialogMedia, i as AlertDialogContent, l as AlertDialogTitle, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1, u as AlertDialogTrigger } from "./alert-dialog-B8AqlJwo.mjs";
10
- import { a as DialogHeader, i as DialogFooter, n as DialogContent, o as DialogTitle, r as DialogDescription, t as Dialog$1 } from "./dialog-B4ALf7NJ.mjs";
11
- import { a as FieldLabel, i as FieldGroup, n as FieldDescription, r as FieldError, t as Field } from "./field-HKCaPH3e.mjs";
12
- import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-M5P3YUfY.mjs";
13
13
  import { n as toast } from "../_libs/sonner.mjs";
14
- //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-pRNvn2-9.js
14
+ //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-D5dyA4D1.js
15
15
  var import_react = /* @__PURE__ */ __toESM(require_react());
16
16
  var import_jsx_runtime = require_jsx_runtime();
17
17
  var parseName = (input) => {
@@ -1,7 +1,7 @@
1
- import { u as createServerFn } from "./createMiddleware-B1iPez7u.mjs";
2
- import { t as consoleAccess } from "./console-access-aUpQs49I.mjs";
3
- import { t as createServerRpc } from "./createServerRpc-BaDJLGBx.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-rpc-wecWs0nA.js
1
+ import { l as createServerFn } from "./createServerFn-AQvBMBjJ.mjs";
2
+ import { t as consoleAccess } from "./console-access-33BNlH97.mjs";
3
+ import { t as createServerRpc } from "./createServerRpc-BVvRVOz5.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-rpc-BOIUHhDi.js
5
5
  var parseName = (input) => {
6
6
  const name = typeof input === "object" && input !== null ? Reflect.get(input, "name") : void 0;
7
7
  if (typeof name !== "string") throw new TypeError("API key name must be a string.");
@@ -14,7 +14,7 @@ var parseId = (input) => {
14
14
  };
15
15
  /** API key management, once the console's access check and the feature guard pass. */
16
16
  var apiKeyManagement = async () => {
17
- const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-DTdsG47T.mjs"), import("./runtime.server-DsHqVqTr.mjs")]);
17
+ const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-NnMFjMFX.mjs"), import("./runtime.server-BdMY1blX.mjs")]);
18
18
  const { runtime } = await prepareConfig();
19
19
  return requireFeature(runtime, "apiKeys");
20
20
  };
@@ -1,5 +1,5 @@
1
- import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-CHxn9f-w.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-CLH38u9B.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-Xb1JKqcc.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/api-keys-yFlQDwQF.js
3
3
  var SplitNotFoundComponent = ConsoleFeatureUnavailable;
4
4
  //#endregion
5
5
  export { SplitNotFoundComponent as notFoundComponent };