@hot-updater/console 1.0.0-rc.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/ConsoleFeatureUnavailable-jB4Loglh.js +1 -0
  3. package/.output/public/assets/EventDetails-B6yUsyNA.js +1 -0
  4. package/.output/public/assets/HashValueDisplay-BFX_kY3-.js +1 -0
  5. package/.output/public/assets/InsightsInfo-BNO0WznZ.js +1 -0
  6. package/.output/public/assets/InsightsPageHeader-B892oVml.js +1 -0
  7. package/.output/public/assets/NotFoundPage-DIqCpWa3.js +1 -0
  8. package/.output/public/assets/alert-dialog-Bbk_4-WJ.js +1 -0
  9. package/.output/public/assets/api-DCM0wr6O.js +1 -0
  10. package/.output/public/assets/api-keys-CIO9L_wu.js +1 -0
  11. package/.output/public/assets/api-keys-DVTL_--f.js +1 -0
  12. package/.output/public/assets/arrow-left-CnMYpqB7.js +1 -0
  13. package/.output/public/assets/arrow-up-right-BtffZA6e.js +1 -0
  14. package/.output/public/assets/chevron-right-BqD5wtFb.js +1 -0
  15. package/.output/public/assets/clipboard-DS9ucUQL.js +1 -0
  16. package/.output/public/assets/console-features-api-BH5m_PtQ.js +1 -0
  17. package/.output/public/assets/dialog-Bqbb7B0N.js +1 -0
  18. package/.output/public/assets/dist-LxKJB-Vu.js +1 -0
  19. package/.output/public/assets/empty-CuT2UhFp.js +1 -0
  20. package/.output/public/assets/field-BBDpjIqu.js +1 -0
  21. package/.output/public/assets/index-6o51GkFe.js +11 -0
  22. package/.output/public/assets/input-group-ja_30qaF.js +1 -0
  23. package/.output/public/assets/insights-CmraDzQh.js +1 -0
  24. package/.output/public/assets/insights-CxZ2GCYV.js +2 -0
  25. package/.output/public/assets/insights-api-BigAU9sZ.js +1 -0
  26. package/.output/public/assets/insights-usage-rpc-DYEhsCKT.js +1 -0
  27. package/.output/public/assets/insights-vNRCrfnS.js +42 -0
  28. package/.output/public/assets/insights_.distribution-ChOerfJt.js +1 -0
  29. package/.output/public/assets/insights_.distribution-D-e4iga8.js +1 -0
  30. package/.output/public/assets/insights_.distribution-DZtkibX1.js +2 -0
  31. package/.output/public/assets/installations-BazSJXE0.js +2 -0
  32. package/.output/public/assets/installations-ClHTqdAO.js +1 -0
  33. package/.output/public/assets/installations-DpKsBuHi.js +1 -0
  34. package/.output/public/assets/key-round-wS_SIZ6b.js +1 -0
  35. package/.output/public/assets/list-CgrYiadM.js +1 -0
  36. package/.output/public/assets/refresh-cw-BYgoNCco.js +1 -0
  37. package/.output/public/assets/remote-config-BWwHOkCK.js +1 -0
  38. package/.output/public/assets/remote-config-Br56BODb.js +6 -0
  39. package/.output/public/assets/remote-config-CXOi0LRu.js +1 -0
  40. package/.output/public/assets/routes-B88Erkpk.js +2 -0
  41. package/.output/public/assets/routes-CfzsAleC.js +1 -0
  42. package/.output/public/assets/search-DaTDPW25.js +1 -0
  43. package/.output/public/assets/select-BZZBXMkr.js +1 -0
  44. package/.output/public/assets/sidebar-DNVyJPfX.js +3 -0
  45. package/.output/public/assets/smartphone-DpTFgtKf.js +1 -0
  46. package/.output/public/assets/styles-DTGEAJFv.css +2 -0
  47. package/.output/public/assets/switch-DZ1TPwx-.js +1 -0
  48. package/.output/public/assets/table-Gm4qRWwE.js +1 -0
  49. package/.output/public/assets/tabs-C7FOEjFC.js +1 -0
  50. package/.output/public/assets/undo-2-CmrHjwFc.js +1 -0
  51. package/.output/public/assets/useCompositeListItem-9E4pj_CH.js +1 -0
  52. package/.output/public/assets/valueToPercent-CH8GCHaL.js +1 -0
  53. package/.output/server/__23tanstack-start-server-fn-resolver-BpRlos5Q.mjs +170 -0
  54. package/.output/server/_libs/@base-ui/react+[...].mjs +4389 -4207
  55. package/.output/server/_libs/@tanstack/react-router+[...].mjs +3802 -4022
  56. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +140 -97
  57. package/.output/server/_libs/lucide-react.mjs +221 -9
  58. package/.output/server/_libs/next-themes.mjs +1 -1
  59. package/.output/server/_libs/react-redux+[...].mjs +1 -1
  60. package/.output/server/_libs/recharts+[...].mjs +483 -901
  61. package/.output/server/_libs/sonner.mjs +1 -1
  62. package/.output/server/_libs/tanstack__history.mjs +68 -41
  63. package/.output/server/_libs/tanstack__query-core.mjs +2010 -309
  64. package/.output/server/_libs/tanstack__react-query.mjs +448 -21
  65. package/.output/server/_libs/verkit.mjs +102 -1
  66. package/.output/server/_ssr/BundleIdDisplay-x94o9rlU.mjs +13 -0
  67. package/.output/server/_ssr/ConsoleFeatureUnavailable-ldW8v8-q.mjs +58 -0
  68. package/.output/server/_ssr/EventDetails-Q8kfj9Nr.mjs +344 -0
  69. package/.output/server/_ssr/{HashValueDisplay-C5tS4oGo.mjs → HashValueDisplay-n1GholGS.mjs} +3 -3
  70. package/.output/server/_ssr/InsightsInfo-DuJFatQO.mjs +75 -0
  71. package/.output/server/_ssr/InsightsPageHeader-BSUX3Ye9.mjs +145 -0
  72. package/.output/server/_ssr/NotFoundPage-DZzOOzS3.mjs +37 -0
  73. package/.output/server/_ssr/{dialog-WiIAKl4L.mjs → alert-dialog-C43Doa0I.mjs} +6 -83
  74. package/.output/server/_ssr/{api-keys-aXriWrv7.mjs → api-keys-B4sYm8dM.mjs} +48 -9
  75. package/.output/server/_ssr/api-keys-CEnM9fqG.mjs +5 -0
  76. package/.output/server/_ssr/api-keys-rpc-BIFuUgMt.mjs +52 -0
  77. package/.output/server/_ssr/api-oZjRn9tP.mjs +186 -0
  78. package/.output/server/_ssr/api-rpc-BNiFRRK8.mjs +240 -0
  79. package/.output/server/_ssr/{auth-BF8mbAgF.mjs → auth-UP0wXs4i.mjs} +1 -1
  80. package/.output/server/_ssr/{auth-rpc-B7w3AdRr.mjs → auth-rpc-DnZqYxyq.mjs} +6 -6
  81. package/.output/server/_ssr/auth.server-DFpyxRDd.mjs +5374 -0
  82. package/.output/server/_ssr/bundleActivity-M5gzBFNg.mjs +18 -0
  83. package/.output/server/_ssr/config-WVX4IxSR.mjs +15 -0
  84. package/.output/server/_ssr/config.server-DskXCAyI.mjs +35 -0
  85. package/.output/server/_ssr/console-access-BJfAXknd.mjs +17 -0
  86. package/.output/server/_ssr/console-features-Oz0q20jJ.mjs +61 -0
  87. package/.output/server/_ssr/console-features-api-C9kiKvaV.mjs +43 -0
  88. package/.output/server/_ssr/console-features-rpc-P0GL7Z-R.mjs +19 -0
  89. package/.output/server/_ssr/{createServerFn-B2hcXoPM.mjs → createMiddleware-Cm6Tn0_Y.mjs} +67 -56
  90. package/.output/server/_ssr/{createServerRpc-DB29C_5p.mjs → createServerRpc-RLR4H-Fn.mjs} +2 -2
  91. package/.output/server/_ssr/databaseConfig-C5SkAyUy.mjs +5 -0
  92. package/.output/server/_ssr/{databaseJsonValue-d6I3nAS4.mjs → databaseJsonValue-Csbuzc9Q.mjs} +28 -5
  93. package/.output/server/_ssr/databaseRows-CPphvbag.mjs +73 -0
  94. package/.output/server/_ssr/dialog-BbYDMjdC.mjs +84 -0
  95. package/.output/server/_ssr/{dist-CyzPaI5v.mjs → dist-CbQbBIw-.mjs} +140 -7
  96. package/.output/server/_ssr/{downloadBundle-CI7JUKvC.mjs → downloadBundle-CZysjmNW.mjs} +10 -10
  97. package/.output/server/_ssr/empty-CVLGfxuu.mjs +60 -0
  98. package/.output/server/_ssr/{empty-plugin-adapters-B5QvGpEl.mjs → empty-plugin-adapters-CPtwX8a7.mjs} +1 -1
  99. package/.output/server/_ssr/failureReports-DKDhVsXA.mjs +33 -0
  100. package/.output/server/_ssr/field-asw83X0v.mjs +189 -0
  101. package/.output/server/_ssr/getBundleChildren-Cv9iz1As.mjs +22 -0
  102. package/.output/server/_ssr/{input-group-Coj6SwVP.mjs → input-group-CuYJHosb.mjs} +2 -2
  103. package/.output/server/_ssr/insights-B55FG5fm.mjs +14 -0
  104. package/.output/server/_ssr/insights-CWnHIFUV.mjs +5 -0
  105. package/.output/server/_ssr/insights-CpLpedFZ.mjs +2315 -0
  106. package/.output/server/_ssr/insights-api-sjws23WF.mjs +122 -0
  107. package/.output/server/_ssr/insights-errors-BjnFUyZj.mjs +34 -0
  108. package/.output/server/_ssr/insights-failures-rpc-BvbWvqNf.mjs +36 -0
  109. package/.output/server/_ssr/insights-failures-xaa41Buf.mjs +46 -0
  110. package/.output/server/_ssr/insights-recovery-BWQhiZaF.mjs +28 -0
  111. package/.output/server/_ssr/insights-recovery-rpc-GiYXdkaY.mjs +32 -0
  112. package/.output/server/_ssr/{insights-rpc-l2-oBYth.mjs → insights-rpc-DP_8Rmz4.mjs} +22 -14
  113. package/.output/server/_ssr/insights-usage-BpBM0U0c.mjs +29 -0
  114. package/.output/server/_ssr/insights-usage-rpc-BiolgB8e.mjs +29 -0
  115. package/.output/server/_ssr/insights-usage-rpc-KStL0zOx.mjs +41 -0
  116. package/.output/server/_ssr/insightsUsage-CzhVjsc8.mjs +56 -0
  117. package/.output/server/_ssr/insights_.distribution-CVrnbP3R.mjs +7 -0
  118. package/.output/server/_ssr/insights_.distribution-D2HaNTAA.mjs +16 -0
  119. package/.output/server/_ssr/{insights_.distribution-INw6QxbU.mjs → insights_.distribution-DN9pR422.mjs} +50 -22
  120. package/.output/server/_ssr/installations-BHmbbnH8.mjs +5 -0
  121. package/.output/server/_ssr/{installations-DH-tQuRo.mjs → installations-BSCmFq8Q.mjs} +279 -367
  122. package/.output/server/_ssr/installations-DD1g__Nc.mjs +69 -0
  123. package/.output/server/_ssr/listReleases-BfUBlCHo.mjs +79 -0
  124. package/.output/server/_ssr/plugins-BaD1slHx.mjs +2086 -0
  125. package/.output/server/_ssr/release-adoption-005tQRpo.mjs +55 -0
  126. package/.output/server/_ssr/release-adoption-rpc-BsstqxUp.mjs +41 -0
  127. package/.output/server/_ssr/releaseAdoption-CtOFkwli.mjs +114 -0
  128. package/.output/server/_ssr/releaseManagement-DFMUnDF5.mjs +11 -0
  129. package/.output/server/_ssr/remote-config-C2Ee8lXO.mjs +5 -0
  130. package/.output/server/_ssr/remote-config-Dv1ccMo-.mjs +17 -0
  131. package/.output/server/_ssr/remote-config-of0lGQH8.mjs +2648 -0
  132. package/.output/server/_ssr/remote-config-rpc-BzX31mUS.mjs +115 -0
  133. package/.output/server/_ssr/rolldown-runtime-rSIU-vHC.mjs +13 -0
  134. package/.output/server/_ssr/{router-DfFyAp5p.mjs → router-D8NuoJ_I.mjs} +117 -136
  135. package/.output/server/_ssr/{routes-BtsfVx-p.mjs → routes-DgvnFqDy.mjs} +195 -429
  136. package/.output/server/_ssr/routes-V8sDybGf.mjs +409 -0
  137. package/.output/server/_ssr/runtime.server-De0QVWc9.mjs +104 -0
  138. package/.output/server/_ssr/schema-BiAVyEj2.mjs +361 -0
  139. package/.output/server/_ssr/{select-CyvLaMza.mjs → select-t3iXRwc9.mjs} +3 -3
  140. package/.output/server/_ssr/server-h4VxnExB.mjs +8325 -0
  141. package/.output/server/_ssr/{createSsrRpc-C-dLcQuy.mjs → sidebar-DJcErBMo.mjs} +107 -47
  142. package/.output/server/_ssr/ssr.mjs +1 -1
  143. package/.output/server/_ssr/start-BfFbHKMK.mjs +4 -0
  144. package/.output/server/_ssr/switch-E-btwMGt.mjs +43 -0
  145. package/.output/server/_ssr/{table-CkVhsNpe.mjs → table-37Dd23TN.mjs} +2 -2
  146. package/.output/server/_ssr/tabs-DEFnTm95.mjs +45 -0
  147. package/.output/server/_ssr/updateFailures-H6pnnYK4.mjs +40 -0
  148. package/.output/server/_ssr/{uuidv7-D0QFkPL_.mjs → uuidv7-C88s9jWF.mjs} +2 -2
  149. package/.output/server/_tanstack-start-manifest_v-55AGsehh.mjs +139 -0
  150. package/.output/server/index.mjs +303 -205
  151. package/LICENSE +13 -14
  152. package/README.md +80 -71
  153. package/lib/index.d.mts +23 -11
  154. package/lib/vite-internal.mjs +13 -3
  155. package/lib/vite.d.mts +2 -0
  156. package/package.json +14 -14
  157. package/src/components/AppSidebar.tsx +74 -75
  158. package/src/components/ConsoleAccessPage.tsx +5 -1
  159. package/src/components/ConsoleFeatureUnavailable.tsx +80 -0
  160. package/src/components/NotFoundPage.tsx +7 -7
  161. package/src/components/features/FeatureSlots.tsx +103 -0
  162. package/src/components/features/api-keys/apiKeysFeatureUi.tsx +15 -0
  163. package/src/components/features/bundles/BundleMetadata.tsx +8 -5
  164. package/src/components/features/bundles/RolloutCohortsDialog.tsx +1 -1
  165. package/src/components/features/channels/ChannelManagementDialog.tsx +8 -6
  166. package/src/components/features/insights/AppUsage.tsx +41 -14
  167. package/src/components/features/insights/BuiltinBundle.tsx +36 -0
  168. package/src/components/features/insights/ComparedBundlesChart.tsx +310 -0
  169. package/src/components/features/insights/EstimatedCount.tsx +18 -0
  170. package/src/components/features/insights/EventDetails.tsx +390 -26
  171. package/src/components/features/insights/EventHistoryCard.tsx +111 -25
  172. package/src/components/features/insights/EventHistoryList.tsx +1 -1
  173. package/src/components/features/insights/FailureReports.tsx +407 -0
  174. package/src/components/features/insights/InsightsControls.tsx +240 -142
  175. package/src/components/features/insights/InsightsErrorAlert.tsx +14 -1
  176. package/src/components/features/insights/InsightsOverview.tsx +601 -403
  177. package/src/components/features/insights/InsightsPageHeader.tsx +19 -14
  178. package/src/components/features/insights/InsightsPeriodSelector.tsx +67 -12
  179. package/src/components/features/insights/InstallationHistoryCard.tsx +65 -10
  180. package/src/components/features/insights/InstallationMatchesCard.tsx +1 -1
  181. package/src/components/features/insights/ReleaseActivity.tsx +308 -0
  182. package/src/components/features/insights/ReportingDevicesSummary.tsx +13 -13
  183. package/src/components/features/insights/RollbackButton.tsx +118 -0
  184. package/src/components/features/insights/UpdateFailures.tsx +382 -0
  185. package/src/components/features/insights/insightsFeatureUi.tsx +35 -0
  186. package/src/components/features/releases/ReleaseEditorSheet.tsx +27 -13
  187. package/src/components/features/remote-config/ConditionDialog.tsx +592 -0
  188. package/src/components/features/remote-config/ConditionsCard.tsx +247 -0
  189. package/src/components/features/remote-config/ParameterDialog.tsx +426 -0
  190. package/src/components/features/remote-config/ParametersCard.tsx +254 -0
  191. package/src/components/features/remote-config/PreviewCard.tsx +284 -0
  192. package/src/components/features/remote-config/PublishDialog.tsx +325 -0
  193. package/src/components/features/remote-config/RemoteConfigPage.tsx +353 -0
  194. package/src/components/features/remote-config/RuleSummary.tsx +21 -0
  195. package/src/components/features/remote-config/ValueInput.tsx +151 -0
  196. package/src/components/features/remote-config/VersionsCard.tsx +384 -0
  197. package/src/components/features/remote-config/remoteConfigFeatureUi.tsx +15 -0
  198. package/src/components/features/remote-config/useDateTimeText.ts +16 -0
  199. package/src/components/ui/sidebar.tsx +22 -29
  200. package/src/index.ts +26 -19
  201. package/src/lib/api-keys-api.ts +0 -28
  202. package/src/lib/api-keys-rpc.ts +27 -38
  203. package/src/lib/api-rpc.ts +125 -288
  204. package/src/lib/api.ts +15 -134
  205. package/src/lib/bundle-activity.ts +24 -4
  206. package/src/lib/console-access.ts +20 -0
  207. package/src/lib/console-features-api.ts +68 -0
  208. package/src/lib/console-features-rpc.ts +13 -0
  209. package/src/lib/console-features.ts +98 -0
  210. package/src/lib/insights-api.ts +56 -2
  211. package/src/lib/insights-errors.ts +64 -0
  212. package/src/lib/insights-failures-rpc.ts +36 -0
  213. package/src/lib/insights-failures.ts +130 -0
  214. package/src/lib/insights-recovery-rpc.ts +13 -17
  215. package/src/lib/insights-recovery.ts +12 -36
  216. package/src/lib/insights-retention.ts +21 -0
  217. package/src/lib/insights-rpc.ts +30 -12
  218. package/src/lib/insights-search.ts +50 -4
  219. package/src/lib/insights-usage-rpc.ts +15 -9
  220. package/src/lib/insights-usage.ts +41 -3
  221. package/src/lib/insights-view.ts +34 -5
  222. package/src/lib/release-adoption-api.ts +214 -0
  223. package/src/lib/release-adoption-rpc.ts +49 -0
  224. package/src/lib/release-adoption.ts +164 -0
  225. package/src/lib/remote-config-api.ts +119 -0
  226. package/src/lib/remote-config-draft.ts +666 -0
  227. package/src/lib/remote-config-rpc.ts +196 -0
  228. package/src/lib/scroll-restoration.ts +21 -0
  229. package/src/lib/server/auth.server.ts +13 -5
  230. package/src/lib/server/bundleActivity.ts +27 -28
  231. package/src/lib/server/config.server.ts +21 -76
  232. package/src/lib/server/console-feature-apis.ts +70 -0
  233. package/src/lib/server/console-runtime.server.ts +82 -38
  234. package/src/lib/server/downloadBundle.ts +14 -15
  235. package/src/lib/server/failureReports.ts +50 -0
  236. package/src/lib/server/getBundleChildren.ts +31 -122
  237. package/src/lib/server/insightsUsage.ts +52 -113
  238. package/src/lib/server/listReleases.ts +109 -44
  239. package/src/lib/server/releaseAdoption.ts +151 -0
  240. package/src/lib/server/releaseReachability.ts +8 -8
  241. package/src/lib/server/remoteConfig.ts +75 -0
  242. package/src/lib/server/runtime.server.ts +120 -31
  243. package/src/lib/server/updateFailures.ts +66 -0
  244. package/src/lib/use-dialog-target.ts +27 -0
  245. package/src/routeTree.gen.ts +44 -44
  246. package/src/router.tsx +3 -2
  247. package/src/routes/-installations-search.ts +32 -8
  248. package/src/routes/-releases-search.ts +76 -29
  249. package/src/routes/__root.tsx +7 -1
  250. package/src/routes/api/bundles/$bundleId/download.ts +2 -5
  251. package/src/routes/api-keys.tsx +5 -2
  252. package/src/routes/index.tsx +210 -152
  253. package/src/routes/insights.tsx +91 -23
  254. package/src/routes/insights_.distribution.tsx +50 -9
  255. package/src/routes/installations.tsx +97 -40
  256. package/src/routes/remote-config.tsx +42 -0
  257. package/src/styles.css +9 -0
  258. package/src/vite-internal.ts +15 -3
  259. package/src/vite.ts +2 -0
  260. package/.output/public/assets/HashValueDisplay-BpTc3Oyg.js +0 -1
  261. package/.output/public/assets/InsightsPageHeader-DC2eEst8.js +0 -1
  262. package/.output/public/assets/api-CdUyUqzR.js +0 -42
  263. package/.output/public/assets/api-keys-64PM9PwW.js +0 -1
  264. package/.output/public/assets/api-keys-api-BeaJnvY5.js +0 -1
  265. package/.output/public/assets/arrow-left-04Rh8Zgp.js +0 -1
  266. package/.output/public/assets/card-CYHs5FZv.js +0 -1
  267. package/.output/public/assets/chart-no-axes-combined-DwyMsVFW.js +0 -1
  268. package/.output/public/assets/createServerFn-DU71xucx.js +0 -3
  269. package/.output/public/assets/dialog-IVMkBRCq.js +0 -1
  270. package/.output/public/assets/dist-BR4GzeEu.js +0 -1
  271. package/.output/public/assets/field-B3CYDpjg.js +0 -1
  272. package/.output/public/assets/index-C39o7rJH.js +0 -10
  273. package/.output/public/assets/info-C3y9HNoU.js +0 -1
  274. package/.output/public/assets/input-group-nLZylhWF.js +0 -1
  275. package/.output/public/assets/insights-Bm9v8uO3.js +0 -2
  276. package/.output/public/assets/insights-DS3iO7Up.js +0 -1
  277. package/.output/public/assets/insights-search-Byj3g3Mp.js +0 -1
  278. package/.output/public/assets/insights-usage-rpc-BaGR3lgq.js +0 -1
  279. package/.output/public/assets/insights_.distribution-B1i6cjlQ.js +0 -1
  280. package/.output/public/assets/insights_.distribution-C1Wf27eB.js +0 -2
  281. package/.output/public/assets/installations-CkFW4fV9.js +0 -2
  282. package/.output/public/assets/installations-DxTaIcHD.js +0 -1
  283. package/.output/public/assets/lazyRouteComponent-BapzjYnb.js +0 -1
  284. package/.output/public/assets/list-Dqt53fWZ.js +0 -1
  285. package/.output/public/assets/loader-circle-CUKfUqow.js +0 -1
  286. package/.output/public/assets/preload-helper-ClBMtM1g.js +0 -1
  287. package/.output/public/assets/refresh-cw-CNE_2PnD.js +0 -1
  288. package/.output/public/assets/routes-Cgtvspjg.js +0 -2
  289. package/.output/public/assets/routes-O2r2UUN8.js +0 -1
  290. package/.output/public/assets/shield-check-BFcJ46kz.js +0 -1
  291. package/.output/public/assets/signing-BgspC-xP.js +0 -1
  292. package/.output/public/assets/styles-DnrWuBwd.css +0 -2
  293. package/.output/public/assets/table-BuWQgxJJ.js +0 -1
  294. package/.output/public/assets/useMutation-CSV9NCUl.js +0 -1
  295. package/.output/public/assets/useOpenInteractionType-D5kduCTD.js +0 -1
  296. package/.output/public/assets/valueToPercent-BAtcbSLk.js +0 -1
  297. package/.output/server/__23tanstack-start-server-fn-resolver-CmYkol9D.mjs +0 -150
  298. package/.output/server/_ssr/InsightsPageHeader-Dma3dVj1.mjs +0 -64
  299. package/.output/server/_ssr/api-C3bGmgY0.mjs +0 -332
  300. package/.output/server/_ssr/api-keys-api-BRF6rbRC.mjs +0 -60
  301. package/.output/server/_ssr/api-keys-rpc-BMa1ZM6N.mjs +0 -136
  302. package/.output/server/_ssr/api-rpc-BYQ2e0z6.mjs +0 -1399
  303. package/.output/server/_ssr/auth.server-CmicHh0J.mjs +0 -47
  304. package/.output/server/_ssr/bundle-signing-rpc-DbQ4pFAX.mjs +0 -16
  305. package/.output/server/_ssr/bundle-signing.server-Uqt1OF49.mjs +0 -12
  306. package/.output/server/_ssr/bundleActivity-pBrPSG01.mjs +0 -28
  307. package/.output/server/_ssr/card-B7KSO_25.mjs +0 -108
  308. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +0 -13
  309. package/.output/server/_ssr/config.server-C-d1QaBU.mjs +0 -368
  310. package/.output/server/_ssr/databaseRows-5bCRTxm-.mjs +0 -126
  311. package/.output/server/_ssr/deleteBundle-8X-jq7Z7.mjs +0 -66
  312. package/.output/server/_ssr/field-BDwuU8RE.mjs +0 -74
  313. package/.output/server/_ssr/getBundleChildren-DoL8l_AS.mjs +0 -50
  314. package/.output/server/_ssr/insights-BDJjaDLp.mjs +0 -938
  315. package/.output/server/_ssr/insights-D0FWpfOS.mjs +0 -10
  316. package/.output/server/_ssr/insights-recovery-Cv6RSyeR.mjs +0 -21
  317. package/.output/server/_ssr/insights-recovery-rpc-BE9YsK_T.mjs +0 -37
  318. package/.output/server/_ssr/insights-search-1czJMZgk.mjs +0 -21
  319. package/.output/server/_ssr/insights-usage-rpc-BE_aCnea.mjs +0 -184
  320. package/.output/server/_ssr/insights-usage-rpc-CtAolz-t.mjs +0 -24
  321. package/.output/server/_ssr/insightsContract-B09K_Px1.mjs +0 -303
  322. package/.output/server/_ssr/insightsHistory-Ci4rYAgl.mjs +0 -41
  323. package/.output/server/_ssr/insightsRecovery-CaghWL2t.mjs +0 -113
  324. package/.output/server/_ssr/insightsUsage-DNIj6jxF.mjs +0 -71
  325. package/.output/server/_ssr/insights_.distribution-Cp0kf1vW.mjs +0 -10
  326. package/.output/server/_ssr/installations-Bhyiwx8G.mjs +0 -29
  327. package/.output/server/_ssr/routes-xBkI2Fmt.mjs +0 -37
  328. package/.output/server/_ssr/runtime.server-CsiKFp_Z.mjs +0 -436
  329. package/.output/server/_ssr/server-BdkuOWe8.mjs +0 -7468
  330. package/.output/server/_ssr/signing-CQ70saFm.mjs +0 -133
  331. package/.output/server/_ssr/start-DpViQGnt.mjs +0 -4
  332. package/.output/server/_tanstack-start-manifest_v-CrBsoKQQ.mjs +0 -125
  333. package/src/components/features/bundles/BundleActivityChart.tsx +0 -97
  334. package/src/components/features/bundles/BundleInsightsSummary.tsx +0 -126
  335. package/src/components/features/signing/BundleSigningPage.tsx +0 -139
  336. package/src/lib/bundle-signing-api.ts +0 -14
  337. package/src/lib/bundle-signing-rpc.ts +0 -16
  338. package/src/lib/server/bundle-signing.server.ts +0 -23
  339. package/src/lib/server/deleteBundle.ts +0 -145
  340. package/src/lib/server/insightsHistory.ts +0 -52
  341. package/src/lib/server/insightsRecovery.ts +0 -187
  342. package/src/routes/signing.tsx +0 -37
@@ -1,47 +0,0 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/auth.server-CmicHh0J.js
2
- var readString = (value, key) => {
3
- if (typeof value !== "object" || value === null) return void 0;
4
- const member = Reflect.get(value, key);
5
- return typeof member === "string" && member.trim().length > 0 ? member.trim() : void 0;
6
- };
7
- var getProviderName = (signing) => {
8
- return readString(signing, "name")?.slice(0, 80) ?? (readString(signing, "privateKeyPath") ? "localSigning" : void 0) ?? "Configured provider";
9
- };
10
- var sanitizeConsoleSigningConfig = (signing) => {
11
- if (typeof signing !== "object" || signing === null) return void 0;
12
- const privateKeyPath = readString(signing, "privateKeyPath");
13
- if (Reflect.get(signing, "enabled") === false || privateKeyPath && Reflect.get(signing, "enabled") !== true) return void 0;
14
- return {
15
- enabled: true,
16
- provider: getProviderName(signing)
17
- };
18
- };
19
- var getConsoleAuthAdapter = async () => {
20
- return (await import("./auth-BF8mbAgF.mjs")).default;
21
- };
22
- var resolveConsoleConfig = async (request) => {
23
- const { default: source } = await import("./config-Dv8qLDZ0.mjs");
24
- const { signing: signingSource, ...configWithoutSigning } = typeof source === "function" ? await source(request) : source;
25
- const signing = sanitizeConsoleSigningConfig(signingSource);
26
- return {
27
- ...configWithoutSigning,
28
- ...signing === void 0 ? {} : { signing }
29
- };
30
- };
31
- var accessError = (access) => new Response(access.status === "unauthenticated" ? "Unauthorized" : "Forbidden", { status: access.status === "unauthenticated" ? 401 : 403 });
32
- var getConsoleAccess = async (request) => {
33
- return (await getConsoleAuthAdapter()).getAccess(request);
34
- };
35
- var getConsoleAuthProviders = async (request) => {
36
- return (await getConsoleAuthAdapter()).getProviders(request);
37
- };
38
- var handleConsoleAuth = async (request) => {
39
- return (await getConsoleAuthAdapter()).handle(request);
40
- };
41
- var requireConsoleAccess = async (request) => {
42
- const access = await getConsoleAccess(request);
43
- if (access.status !== "authorized") throw accessError(access);
44
- return access.principal;
45
- };
46
- //#endregion
47
- export { getConsoleAccess, getConsoleAuthProviders, handleConsoleAuth, requireConsoleAccess, resolveConsoleConfig as t };
@@ -1,16 +0,0 @@
1
- import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
2
- import { t as createServerRpc } from "./createServerRpc-DB29C_5p.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/bundle-signing-rpc-DbQ4pFAX.js
4
- var getBundleSigningInspection = async () => {
5
- const [{ prepareConfig }, { inspectBundleSigning }] = await Promise.all([import("./config.server-C-d1QaBU.mjs"), import("./bundle-signing.server-Uqt1OF49.mjs")]);
6
- const { config } = await prepareConfig();
7
- return inspectBundleSigning(config.signing);
8
- };
9
- var getBundleSigningInspectionRpc_createServerFn_handler = createServerRpc({
10
- id: "662034966679a6d29db2b55e7ba665e26e6c9a58a5529f33aa857a2049616233",
11
- name: "getBundleSigningInspectionRpc",
12
- filename: "src/lib/bundle-signing-rpc.ts"
13
- }, (opts) => getBundleSigningInspectionRpc.__executeServer(opts));
14
- var getBundleSigningInspectionRpc = createServerFn({ method: "GET" }).handler(getBundleSigningInspectionRpc_createServerFn_handler, getBundleSigningInspection);
15
- //#endregion
16
- export { getBundleSigningInspectionRpc_createServerFn_handler };
@@ -1,12 +0,0 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/bundle-signing.server-Uqt1OF49.js
2
- var DEFAULT_PROVIDER = "Configured provider";
3
- var inspectBundleSigning = async (signing) => {
4
- if (!signing?.enabled) return { status: "disabled" };
5
- return {
6
- algorithm: "RSA-SHA256",
7
- provider: signing.provider ?? DEFAULT_PROVIDER,
8
- status: "enabled"
9
- };
10
- };
11
- //#endregion
12
- export { inspectBundleSigning };
@@ -1,28 +0,0 @@
1
- import { t as readInsightsHistory } from "./insightsHistory-Ci4rYAgl.mjs";
2
- import { buildRecoveryReport } from "./insightsRecovery-CaghWL2t.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/bundleActivity-pBrPSG01.js
4
- async function getBundleActivity(model, inputs, now = Date.now()) {
5
- if (inputs.length === 0) return {};
6
- const history = await readInsightsHistory(model, "30d", now);
7
- const scopes = /* @__PURE__ */ new Map();
8
- const result = /* @__PURE__ */ new Map();
9
- for (const input of inputs) {
10
- const key = JSON.stringify([input.platform, input.channel]);
11
- let report = scopes.get(key);
12
- if (!report) {
13
- report = buildRecoveryReport(history, {
14
- platform: input.platform,
15
- channel: input.channel,
16
- window: "30d"
17
- });
18
- scopes.set(key, report);
19
- }
20
- result.set(input.releaseId, {
21
- ...report,
22
- series: report.series.filter((series) => series.releaseId === input.releaseId)
23
- });
24
- }
25
- return Object.fromEntries(result);
26
- }
27
- //#endregion
28
- export { getBundleActivity };
@@ -1,108 +0,0 @@
1
- import "../_runtime.mjs";
2
- import { ft as useRender, ht as require_react, mt as require_jsx_runtime, pt as mergeProps } from "../_libs/@base-ui/react+[...].mjs";
3
- import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
4
- import { C as cn } from "./createSsrRpc-C-dLcQuy.mjs";
5
- require_react();
6
- var import_jsx_runtime = require_jsx_runtime();
7
- var alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2 py-1.5 text-left text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5", {
8
- variants: { variant: {
9
- default: "bg-card text-card-foreground",
10
- destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
11
- } },
12
- defaultVariants: { variant: "default" }
13
- });
14
- function Alert({ className, variant, ...props }) {
15
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16
- "data-slot": "alert",
17
- role: "alert",
18
- className: cn(alertVariants({ variant }), className),
19
- ...props
20
- });
21
- }
22
- function AlertTitle({ className, ...props }) {
23
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24
- "data-slot": "alert-title",
25
- className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
26
- ...props
27
- });
28
- }
29
- function AlertDescription({ className, ...props }) {
30
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
31
- "data-slot": "alert-description",
32
- className: cn("text-xs/relaxed text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
33
- ...props
34
- });
35
- }
36
- function AlertAction({ className, ...props }) {
37
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
38
- "data-slot": "alert-action",
39
- className: cn("absolute top-1.5 right-2", className),
40
- ...props
41
- });
42
- }
43
- var badgeVariants = cva("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
44
- variants: { variant: {
45
- default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
46
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
47
- success: "border-success/20 bg-success/10 text-success",
48
- warning: "border-warning/20 bg-warning/10 text-warning",
49
- destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
50
- outline: "text-foreground"
51
- } },
52
- defaultVariants: { variant: "default" }
53
- });
54
- function Badge({ className, variant = "default", render, ...props }) {
55
- return useRender({
56
- defaultTagName: "span",
57
- props: mergeProps({ className: cn(badgeVariants({ variant }), className) }, props),
58
- render,
59
- state: {
60
- slot: "badge",
61
- variant
62
- }
63
- });
64
- }
65
- function Card({ className, ...props }) {
66
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
67
- "data-slot": "card",
68
- className: cn("rounded-xl border bg-card text-card-foreground shadow", className),
69
- ...props
70
- });
71
- }
72
- function CardHeader({ className, ...props }) {
73
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
74
- "data-slot": "card-header",
75
- className: cn("flex flex-col gap-1.5 p-6", className),
76
- ...props
77
- });
78
- }
79
- function CardTitle({ className, ...props }) {
80
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
81
- "data-slot": "card-title",
82
- className: cn("font-semibold leading-none tracking-tight", className),
83
- ...props
84
- });
85
- }
86
- function CardDescription({ className, ...props }) {
87
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
88
- "data-slot": "card-description",
89
- className: cn("text-sm text-muted-foreground", className),
90
- ...props
91
- });
92
- }
93
- function CardContent({ className, ...props }) {
94
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
95
- "data-slot": "card-content",
96
- className: cn("p-6 pt-0", className),
97
- ...props
98
- });
99
- }
100
- function CardFooter({ className, ...props }) {
101
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
102
- "data-slot": "card-footer",
103
- className: cn("flex items-center p-6 pt-0", className),
104
- ...props
105
- });
106
- }
107
- //#endregion
108
- export { Badge as a, CardDescription as c, CardTitle as d, AlertTitle as i, CardFooter as l, AlertAction as n, Card as o, AlertDescription as r, CardContent as s, Alert as t, CardHeader as u };
@@ -1,13 +0,0 @@
1
- import { loadConfig } from "@hot-updater/cli-tools";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/config-Dv8qLDZ0.js
3
- var config_default = async () => {
4
- const config = await loadConfig(null);
5
- return {
6
- console: { gitUrl: config.console.gitUrl },
7
- database: config.database,
8
- signing: config.signing,
9
- storage: config.storage
10
- };
11
- };
12
- //#endregion
13
- export { config_default as default };
@@ -1,368 +0,0 @@
1
- import { t as DatabasePluginInputError } from "./databaseJsonValue-d6I3nAS4.mjs";
2
- import { l as getBundlePatches } from "./dist-CyzPaI5v.mjs";
3
- import { a as rowsToBundles, n as bundleToPatchRows, r as bundleToRow, t as bundleMetadataToRow } from "./databaseRows-5bCRTxm-.mjs";
4
- import { r as getRequest } from "./server-BdkuOWe8.mjs";
5
- import { requireConsoleAccess, t as resolveConsoleConfig } from "./auth.server-CmicHh0J.mjs";
6
- import { r as isRecord } from "./insightsContract-B09K_Px1.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/config.server-C-d1QaBU.js
8
- /**
9
- * Calculate pagination information based on total count, limit, and offset
10
- */
11
- function calculatePagination(total, options) {
12
- const { limit, offset } = options;
13
- if (total === 0) return {
14
- total: 0,
15
- hasNextPage: false,
16
- hasPreviousPage: false,
17
- currentPage: 1,
18
- totalPages: 0
19
- };
20
- const currentPage = Math.floor(offset / limit) + 1;
21
- const totalPages = Math.ceil(total / limit);
22
- return {
23
- total,
24
- hasNextPage: offset + limit < total,
25
- hasPreviousPage: offset > 0,
26
- currentPage,
27
- totalPages
28
- };
29
- }
30
- var validateBundlePagination = (options) => {
31
- if (!Number.isSafeInteger(options.limit) || options.limit <= 0 || options.page !== void 0 && (!Number.isSafeInteger(options.page) || options.page <= 0) || options.page !== void 0 && options.cursor !== void 0) throw new DatabasePluginInputError("invalid-pagination");
32
- const cursor = options.cursor;
33
- if (cursor === void 0) return;
34
- if (!isRecord(cursor)) throw new DatabasePluginInputError("invalid-pagination");
35
- const hasAfter = Object.hasOwn(cursor, "after");
36
- if (hasAfter === Object.hasOwn(cursor, "before")) throw new DatabasePluginInputError("invalid-pagination");
37
- const value = hasAfter ? cursor.after : cursor.before;
38
- if (typeof value !== "string" || value.length === 0) throw new DatabasePluginInputError("invalid-pagination");
39
- };
40
- var DatabaseAtomicCommitUnsupportedError = class extends Error {
41
- pluginName;
42
- name = "DatabaseAtomicCommitUnsupportedError";
43
- constructor(pluginName) {
44
- super(`Database plugin "${pluginName}" cannot atomically commit changes across models.`);
45
- this.pluginName = pluginName;
46
- }
47
- };
48
- /**
49
- * Internal provider signal for a delete rejected by a live reference.
50
- *
51
- * Provider implementations throw this after translating their native
52
- * foreign-key or reference-condition error. The public database contract
53
- * observes only the indexed `referenced` commit conflict.
54
- */
55
- var DatabaseRowReferencedError = class extends Error {
56
- name = "DatabaseRowReferencedError";
57
- constructor() {
58
- super("The database row is still referenced.");
59
- }
60
- };
61
- function assertStorageOperations(plugin, operations) {
62
- for (const operation of operations) if (typeof plugin[operation] !== "function") throw new Error(`Storage plugin "${plugin.name}" does not implement ${operation}.`);
63
- }
64
- var DatabasePatchUpdateUnsupportedError = class extends Error {
65
- bundleId;
66
- pluginName;
67
- name = "DatabasePatchUpdateUnsupportedError";
68
- constructor(bundleId, pluginName) {
69
- super(`Database plugin "${pluginName}" cannot atomically replace patches for bundle "${bundleId}".`);
70
- this.bundleId = bundleId;
71
- this.pluginName = pluginName;
72
- }
73
- };
74
- var bundleUpdateToRow = (update, _channelId) => {
75
- return {
76
- ...update.platform !== void 0 ? { platform: update.platform } : {},
77
- ...update.fileHash !== void 0 ? { file_hash: update.fileHash } : {},
78
- ...update.gitCommitHash !== void 0 ? { git_commit_hash: update.gitCommitHash } : {},
79
- ...update.storageUri !== void 0 ? { storage_uri: update.storageUri } : {},
80
- ...update.archiveByteSize !== void 0 ? { archive_byte_size: update.archiveByteSize } : {},
81
- ...update.metadata !== void 0 ? { metadata: bundleMetadataToRow(update.metadata) } : {},
82
- ...update.manifestStorageUri !== void 0 ? { manifest_storage_uri: update.manifestStorageUri } : {},
83
- ...update.manifestFileHash !== void 0 ? { manifest_file_hash: update.manifestFileHash } : {},
84
- ...update.assetBaseStorageUri !== void 0 ? { asset_base_storage_uri: update.assetBaseStorageUri } : {}
85
- };
86
- };
87
- var bundleUpdateToPatchRows = (bundleId, update) => getBundlePatches({ patches: update.patches }).map((patch, orderIndex) => ({
88
- id: `${bundleId}:${patch.baseBundleId}`,
89
- bundle_id: bundleId,
90
- base_bundle_id: patch.baseBundleId,
91
- base_file_hash: patch.baseFileHash,
92
- patch_file_hash: patch.patchFileHash,
93
- patch_storage_uri: patch.patchStorageUri,
94
- byte_size: patch.byteSize,
95
- order_index: orderIndex
96
- }));
97
- var PAGE_SIZE = 100;
98
- var mergeIdFilter = (where, id) => ({
99
- ...where,
100
- id: {
101
- ...where?.id,
102
- ...id
103
- }
104
- });
105
- var loadBundleRows = async (database, where) => {
106
- const finiteIds = where?.id?.in;
107
- if (finiteIds) {
108
- if (finiteIds.length === 0) return [];
109
- return [...await database.models.bundles.findMany({
110
- where,
111
- limit: finiteIds.length,
112
- offset: 0,
113
- orderBy: {
114
- field: "id",
115
- direction: "asc"
116
- }
117
- })];
118
- }
119
- const [cutoff] = await database.models.bundles.findMany({
120
- where,
121
- limit: 1,
122
- offset: 0,
123
- orderBy: {
124
- field: "id",
125
- direction: "desc"
126
- }
127
- });
128
- if (!cutoff) return [];
129
- const rows = [];
130
- let after;
131
- for (;;) {
132
- const page = await database.models.bundles.findMany({
133
- where: mergeIdFilter(where, {
134
- lte: cutoff.id,
135
- ...after ? { gt: after } : {}
136
- }),
137
- limit: PAGE_SIZE,
138
- offset: 0,
139
- orderBy: {
140
- field: "id",
141
- direction: "asc"
142
- }
143
- });
144
- rows.push(...page);
145
- if (page.length < PAGE_SIZE) return rows;
146
- after = page.at(-1)?.id;
147
- }
148
- };
149
- var hydrateRows = async (database, ownerRows) => {
150
- const patchRows = await database.models.bundlePatches.findByBundleIds(ownerRows.map(({ id }) => id));
151
- const ownerIds = new Set(ownerRows.map(({ id }) => id));
152
- const referencedIds = [...new Set(patchRows.map(({ base_bundle_id }) => base_bundle_id).filter((id) => !ownerIds.has(id)))];
153
- return rowsToBundles(ownerRows, patchRows, referencedIds.length === 0 ? [] : await loadBundleRows(database, { id: { in: referencedIds } }));
154
- };
155
- var cursorIdFilter = (cursor, direction) => {
156
- if (cursor?.after) return { [direction === "desc" ? "lt" : "gt"]: cursor.after };
157
- if (cursor?.before) return { [direction === "desc" ? "gt" : "lt"]: cursor.before };
158
- };
159
- var responsePage = async (database, options) => {
160
- validateBundlePagination(options);
161
- const direction = options.orderBy?.direction ?? "desc";
162
- const offset = options.page ? Math.max(0, options.page - 1) * options.limit : 0;
163
- const cursor = options.page ? void 0 : options.cursor;
164
- const queryLimit = cursor ? options.limit + 1 : options.limit;
165
- if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(queryLimit) || !Number.isSafeInteger(offset + queryLimit)) throw new DatabasePluginInputError("invalid-pagination");
166
- const cursorFilter = cursorIdFilter(cursor, direction);
167
- const where = cursorFilter ? mergeIdFilter(options.where, cursorFilter) : options.where;
168
- const queryDirection = cursor?.before ? direction === "desc" ? "asc" : "desc" : direction;
169
- const [queriedRows, total] = await Promise.all([database.models.bundles.findMany({
170
- where,
171
- limit: queryLimit,
172
- offset,
173
- orderBy: {
174
- field: "id",
175
- direction: queryDirection
176
- }
177
- }), database.models.bundles.count(options.where)]);
178
- const hasMore = cursor ? queriedRows.length > options.limit : false;
179
- const pageRows = cursor ? queriedRows.slice(0, options.limit) : queriedRows;
180
- const ownerRows = cursor?.before ? pageRows.toReversed() : pageRows;
181
- const pagination = calculatePagination(total, {
182
- limit: options.limit,
183
- offset
184
- });
185
- const hasPreviousPage = cursor ? Boolean(cursor.after) || hasMore : pagination.hasPreviousPage;
186
- const hasNextPage = cursor ? Boolean(cursor.before) || hasMore : pagination.hasNextPage;
187
- const firstId = ownerRows[0]?.id;
188
- const lastId = ownerRows.at(-1)?.id;
189
- return {
190
- data: await hydrateRows(database, ownerRows),
191
- pagination: {
192
- ...pagination,
193
- hasNextPage,
194
- hasPreviousPage,
195
- ...hasNextPage && lastId ? { nextCursor: lastId } : {},
196
- ...hasPreviousPage && firstId ? { previousCursor: firstId } : {},
197
- ...!firstId && cursor?.after ? { previousCursor: cursor.after } : {},
198
- ...!lastId && cursor?.before ? { nextCursor: cursor.before } : {}
199
- }
200
- };
201
- };
202
- var DatabaseBundleNotFoundError = class extends Error {
203
- bundleId;
204
- name = "DatabaseBundleNotFoundError";
205
- constructor(bundleId) {
206
- super(`Bundle "${bundleId}" was not found.`);
207
- this.bundleId = bundleId;
208
- }
209
- };
210
- var DatabasePatchInsertUnsupportedError = class extends Error {
211
- bundleId;
212
- pluginName;
213
- name = "DatabasePatchInsertUnsupportedError";
214
- constructor(bundleId, pluginName) {
215
- super(`Database plugin "${pluginName}" cannot atomically insert patches for bundle "${bundleId}".`);
216
- this.bundleId = bundleId;
217
- this.pluginName = pluginName;
218
- }
219
- };
220
- var insertChanges = (bundle) => [{
221
- model: "bundles",
222
- operation: "insert",
223
- row: bundleToRow(bundle)
224
- }, ...bundleToPatchRows(bundle).map((row) => ({
225
- model: "bundlePatches",
226
- operation: "insert",
227
- row
228
- }))];
229
- var updateChanges = (bundleId, update) => {
230
- const rowUpdate = bundleUpdateToRow(update);
231
- return [{
232
- model: "bundles",
233
- operation: "update",
234
- where: { id: bundleId },
235
- update: rowUpdate
236
- }, ...Object.hasOwn(update, "patches") ? [{
237
- model: "bundlePatches",
238
- operation: "delete",
239
- where: { bundleId }
240
- }, ...bundleUpdateToPatchRows(bundleId, update).map((row) => ({
241
- model: "bundlePatches",
242
- operation: "insert",
243
- row
244
- }))] : []];
245
- };
246
- var deleteChanges = (bundleId) => [{
247
- model: "bundles",
248
- operation: "delete",
249
- where: { id: bundleId }
250
- }];
251
- var createDatabaseClient = (plugin) => {
252
- const getBundleById = async (id) => {
253
- const row = await plugin.models.bundles.findById(id);
254
- if (!row) return null;
255
- return (await hydrateRows(plugin, [row]))[0] ?? null;
256
- };
257
- const insertChannel = (input) => plugin.models.channels.insert(input);
258
- const createMutationClient = (commit) => ({
259
- getBundleById,
260
- getBundles: (options) => responsePage(plugin, options),
261
- async getChannels() {
262
- return (await plugin.models.channels.list({})).channels;
263
- },
264
- insertChannel,
265
- async insertBundle(bundle) {
266
- try {
267
- await commit(insertChanges(bundle));
268
- } catch (error) {
269
- if (error instanceof DatabaseAtomicCommitUnsupportedError && bundleToPatchRows(bundle).length > 0) throw new DatabasePatchInsertUnsupportedError(bundle.id, plugin.name);
270
- throw error;
271
- }
272
- },
273
- async updateBundleById(bundleId, update) {
274
- try {
275
- if (!(await commit(updateChanges(bundleId, update))).committed) throw new DatabaseBundleNotFoundError(bundleId);
276
- } catch (error) {
277
- if (error instanceof DatabaseAtomicCommitUnsupportedError && Object.hasOwn(update, "patches")) throw new DatabasePatchUpdateUnsupportedError(bundleId, plugin.name);
278
- throw error;
279
- }
280
- },
281
- async deleteBundleById(bundleId) {
282
- const result = await commit(deleteChanges(bundleId));
283
- if (!result.committed && result.conflict.reason === "referenced") throw new DatabaseRowReferencedError();
284
- }
285
- });
286
- const runMutation = async (operation) => {
287
- const changes = [];
288
- const result = await operation(createMutationClient(async (input) => {
289
- changes.push(...input);
290
- return { committed: true };
291
- }));
292
- if (changes.length === 0) return result;
293
- const commitResult = await plugin.commit({ changes });
294
- if (!commitResult.committed) {
295
- const change = changes[commitResult.conflict.changeIndex];
296
- if (commitResult.conflict.reason === "referenced" && change?.model === "bundles" && change.operation === "delete") throw new DatabaseRowReferencedError();
297
- if (change?.model === "bundles" && change.operation === "update") throw new DatabaseBundleNotFoundError(change.where.id);
298
- throw new Error(`Database plugin "${plugin.name}" rejected a commit.`);
299
- }
300
- return result;
301
- };
302
- return {
303
- ...createMutationClient((changes) => plugin.commit({ changes })),
304
- deleteChannel: (input) => plugin.models.channels.delete(input),
305
- mutate: runMutation
306
- };
307
- };
308
- var configPromise = null;
309
- var databaseClient = null;
310
- var hotUpdater = null;
311
- var apiKeyStore = null;
312
- var apiKeyStoreResolved = false;
313
- var storagePluginPromise = null;
314
- var loadCachedConfig = async (request) => {
315
- if (!configPromise) configPromise = resolveConsoleConfig(request).then((config) => ({
316
- ...config,
317
- console: config.console ?? {}
318
- })).catch((error) => {
319
- configPromise = null;
320
- throw error;
321
- });
322
- return configPromise;
323
- };
324
- var loadCachedStoragePlugin = async (config) => {
325
- if (!storagePluginPromise) storagePluginPromise = Promise.resolve(config.storage).then((storagePlugin) => {
326
- assertStorageOperations(storagePlugin, [
327
- "get",
328
- "put",
329
- "exists",
330
- "delete"
331
- ]);
332
- return storagePlugin;
333
- }).catch((error) => {
334
- storagePluginPromise = null;
335
- throw error;
336
- });
337
- return storagePluginPromise;
338
- };
339
- var prepareConfig = async (request = getRequest()) => {
340
- try {
341
- await requireConsoleAccess(request);
342
- const config = await loadCachedConfig(request);
343
- if (!databaseClient) databaseClient = createDatabaseClient(config.database);
344
- if (!hotUpdater) {
345
- const { createRuntimeHotUpdater } = await import("./runtime.server-CsiKFp_Z.mjs");
346
- hotUpdater = createRuntimeHotUpdater(config);
347
- }
348
- if (!apiKeyStoreResolved) {
349
- const { createApiKeyStore } = await import("./runtime.server-CsiKFp_Z.mjs");
350
- apiKeyStore = createApiKeyStore(config);
351
- apiKeyStoreResolved = true;
352
- }
353
- const storagePlugin = await loadCachedStoragePlugin(config);
354
- return {
355
- config,
356
- databaseClient,
357
- hotUpdater,
358
- apiKeyStore,
359
- storagePlugin
360
- };
361
- } catch (error) {
362
- if (!(error instanceof Response && (error.status === 401 || error.status === 403))) console.error("Error during configuration initialization:", error);
363
- throw error;
364
- }
365
- };
366
- var isConfigLoaded = () => Boolean(configPromise);
367
- //#endregion
368
- export { isConfigLoaded, prepareConfig };