@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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/-native-builds-search-C-TGpFAm.js +1 -0
- package/.output/public/assets/{ConsoleFeatureUnavailable-C0KfsKWL.js → ConsoleFeatureUnavailable-CUtcXuY2.js} +1 -1
- package/.output/public/assets/EventDetails-Dl2RvPAk.js +1 -0
- package/.output/public/assets/HashValueDisplay-6lNRxDJX.js +1 -0
- package/.output/public/assets/InsightsPageHeader-DHhqY3DT.js +1 -0
- package/.output/public/assets/NotFoundPage-DZ3DxyRA.js +1 -0
- package/.output/public/assets/PlatformIcon-BBWQlWm9.js +1 -0
- package/.output/public/assets/RolloutPercentageBadge-Cxogpi8F.js +1 -0
- package/.output/public/assets/StoreSubmission-JpngSvHS.js +1 -0
- package/.output/public/assets/alert-dialog-BqYScr9y.js +1 -0
- package/.output/public/assets/api-P2g8dCNg.js +1 -0
- package/.output/public/assets/api-keys-DWQC2q6y.js +1 -0
- package/.output/public/assets/api-keys-FueRkF9q.js +1 -0
- package/.output/public/assets/arrow-left-g9cKqXuC.js +1 -0
- package/.output/public/assets/arrow-right-CNII8TYn.js +1 -0
- package/.output/public/assets/arrow-up-right-DK8Zdg40.js +1 -0
- package/.output/public/assets/badge-DWFcDWho.js +1 -0
- package/.output/public/assets/check-CXVR3s3X.js +1 -0
- package/.output/public/assets/chevron-right-BoUXo82O.js +1 -0
- package/.output/public/assets/circle-off-C7Muo0ss.js +1 -0
- package/.output/public/assets/{clipboard-DTkrlIMn.js → clipboard-DQbOcrL7.js} +1 -1
- package/.output/public/assets/console-features-api-DEXSwFtc.js +1 -0
- package/.output/public/assets/copy-DsuLj3oj.js +1 -0
- package/.output/public/assets/dialog-CNUPxNxH.js +1 -0
- package/.output/public/assets/{dist-dDj-R6uh.js → dist-CPlO6ko9.js} +1 -1
- package/.output/public/assets/download-Cf24LBde.js +1 -0
- package/.output/public/assets/{empty-Bf4DanOL.js → empty-B3Uwdd6k.js} +1 -1
- package/.output/public/assets/{field-GxF9SyUo.js → field-D-2-mnNh.js} +1 -1
- package/.output/public/assets/history-DqHlgSuV.js +1 -0
- package/.output/public/assets/index-BWU6owTG.js +10 -0
- package/.output/public/assets/{input-group-B4nrqIh0.js → input-group-D3OUBk4n.js} +1 -1
- package/.output/public/assets/insights-B-0odqpt.js +42 -0
- package/.output/public/assets/insights-BSVGfxSL.js +1 -0
- package/.output/public/assets/insights-NK5B6ReS.js +2 -0
- package/.output/public/assets/insights-api-BVCXJsoV.js +1 -0
- package/.output/public/assets/insights-search-DghCbEnk.js +1 -0
- package/.output/public/assets/insights-usage-rpc-CKQH0pUS.js +1 -0
- package/.output/public/assets/insights_.distribution-CJvgwcVZ.js +2 -0
- package/.output/public/assets/insights_.distribution-DblZM0mO.js +1 -0
- package/.output/public/assets/insights_.distribution-dvk6vYDM.js +1 -0
- package/.output/public/assets/installations-B674P5Z5.js +2 -0
- package/.output/public/assets/installations-BWxczZ2t.js +1 -0
- package/.output/public/assets/installations-Dv4kWQYz.js +1 -0
- package/.output/public/assets/{key-round-B4fI1psK.js → key-round-DwNKkHhy.js} +1 -1
- package/.output/public/assets/link-DTEyW70e.js +2 -0
- package/.output/public/assets/{list-Dtj7TtzV.js → list--NIee1FZ.js} +1 -1
- package/.output/public/assets/native-builds-BOC71grI.js +1 -0
- package/.output/public/assets/native-builds-BswZazmc.js +1 -0
- package/.output/public/assets/native-builds-c4BpOLAe.js +2 -0
- package/.output/public/assets/native-builds_._buildId-D_Spjl10.js +1 -0
- package/.output/public/assets/native-builds_._buildId-DtoXD8rz.js +2 -0
- package/.output/public/assets/plus-BReVKct-.js +1 -0
- package/.output/public/assets/preload-helper-B44EvKhG.js +1 -0
- package/.output/public/assets/{refresh-cw-DjIKjmrS.js → refresh-cw-B9HHjLej.js} +1 -1
- package/.output/public/assets/relativeTime-YQt84dYr.js +1 -0
- package/.output/public/assets/remote-config-B7ujqhLa.js +6 -0
- package/.output/public/assets/remote-config-WjpozBG5.js +1 -0
- package/.output/public/assets/remote-config-gXeH6PBW.js +1 -0
- package/.output/public/assets/rotate-cw-Cv2aVbYr.js +1 -0
- package/.output/public/assets/routes-BDdBIxYS.js +1 -0
- package/.output/public/assets/routes-CCD33Azv.js +2 -0
- package/.output/public/assets/search-BCel4Oy6.js +1 -0
- package/.output/public/assets/select-CBIU0_M1.js +1 -0
- package/.output/public/assets/{sidebar-BqX460IW.js → sidebar-Di9SN47G.js} +1 -1
- package/.output/public/assets/smartphone-CMaSy_ir.js +1 -0
- package/.output/public/assets/styles-Ccxthuz1.css +2 -0
- package/.output/public/assets/switch-BpdiHL_t.js +1 -0
- package/.output/public/assets/{table-ek1DmRHq.js → table-Bpy3SvSo.js} +1 -1
- package/.output/public/assets/{tabs-CgEH_fMT.js → tabs-Xmt7tZeG.js} +1 -1
- package/.output/public/assets/{undo-2-DxXx9Zvr.js → undo-2-CUX96_BG.js} +1 -1
- package/.output/public/assets/useCompositeListItem-JmyDfo3-.js +1 -0
- package/.output/public/assets/useInfiniteQuery-DX4WpBRG.js +1 -0
- package/.output/public/assets/useMutation-DbYw7boA.js +1 -0
- package/.output/public/assets/uuidv7-zXMtwR9Q.js +1 -0
- package/.output/public/assets/{valueToPercent-B44vDssN.js → valueToPercent-BLwGy_xK.js} +1 -1
- package/.output/server/{__23tanstack-start-server-fn-resolver-KpQ5Z_24.mjs → __23tanstack-start-server-fn-resolver-CygMPYHZ.mjs} +64 -40
- package/.output/server/_chunks/ssr-renderer.mjs +2 -2
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +1 -1
- package/.output/server/_libs/lucide-react.mjs +88 -1
- package/.output/server/_libs/uqr.mjs +858 -0
- package/.output/server/_ssr/-native-builds-search-CwNcoXf4.mjs +37 -0
- package/.output/server/_ssr/{BundleIdDisplay-CjSnY65J.mjs → BundleIdDisplay-DOPz4pUS.mjs} +2 -2
- package/.output/server/_ssr/{ConsoleFeatureUnavailable-CHxn9f-w.mjs → ConsoleFeatureUnavailable-Xb1JKqcc.mjs} +7 -7
- package/.output/server/_ssr/{EventDetails-l6dF54zp.mjs → EventDetails-D7MejFCN.mjs} +8 -8
- package/.output/server/_ssr/{HashValueDisplay-Zs7ABoOi.mjs → HashValueDisplay-Dd-wu5rY.mjs} +2 -2
- package/.output/server/_ssr/{InsightsPageHeader-ZlAlDxQy.mjs → InsightsPageHeader-CWf1n4Vt.mjs} +13 -11
- package/.output/server/_ssr/{NotFoundPage-u28ndvp1.mjs → NotFoundPage-C5rFdUpg.mjs} +2 -2
- package/.output/server/_ssr/PlatformIcon-CFLiTjh1.mjs +29 -0
- package/.output/server/_ssr/RolloutPercentageBadge-g0Bhfl3M.mjs +21 -0
- package/.output/server/_ssr/StoreSubmission-JZ2Zltak.mjs +139 -0
- package/.output/server/_ssr/{alert-dialog-B8AqlJwo.mjs → alert-dialog-CvNvTvIJ.mjs} +1 -1
- package/.output/server/_ssr/{api-C_0B7NXM.mjs → api-0vtwA5vY.mjs} +126 -7
- package/.output/server/_ssr/{api-keys-pRNvn2-9.mjs → api-keys-D5dyA4D1.mjs} +10 -10
- package/.output/server/_ssr/{api-keys-rpc-wecWs0nA.mjs → api-keys-rpc-BOIUHhDi.mjs} +5 -5
- package/.output/server/_ssr/{api-keys-CLH38u9B.mjs → api-keys-yFlQDwQF.mjs} +2 -2
- package/.output/server/_ssr/{api-rpc-DWN8eOHS.mjs → api-rpc-COeFOpYi.mjs} +79 -12
- package/.output/server/_ssr/{auth-UP0wXs4i.mjs → auth-Z-wLddzh.mjs} +1 -1
- package/.output/server/_ssr/{auth-rpc-CLRArbIl.mjs → auth-rpc-D1ss2GUI.mjs} +6 -6
- package/.output/server/_ssr/{auth.server-DR9zc0EU.mjs → auth.server-DYS1OJ6P.mjs} +771 -641
- package/.output/server/_ssr/{badge-BpT7r-ng.mjs → badge-CEdVRgyl.mjs} +1 -1
- package/.output/server/_ssr/{bundleActivity-0qFIcvqt.mjs → bundleActivity-MLrjNJCT.mjs} +1 -1
- package/.output/server/_ssr/{config-WVX4IxSR.mjs → config-CjIBFhJX.mjs} +1 -1
- package/.output/server/_ssr/config.server-NnMFjMFX.mjs +43 -0
- package/.output/server/_ssr/{console-access-aUpQs49I.mjs → console-access-33BNlH97.mjs} +3 -3
- package/.output/server/_ssr/{console-features-4xAGfZHw.mjs → console-features-BTV-XuhQ.mjs} +1 -1
- package/.output/server/_ssr/{console-features-api-DSSgCV3v.mjs → console-features-api-v1fSycue.mjs} +6 -6
- package/.output/server/_ssr/{console-features-rpc-D6kMlR2A.mjs → console-features-rpc-C7XNVqm0.mjs} +5 -5
- package/.output/server/_ssr/createCsrfMiddleware-BwHbC8n-.mjs +159 -0
- package/.output/server/_ssr/createMiddleware-C3ACsfuG.mjs +24 -0
- package/.output/server/_ssr/{createMiddleware-B1iPez7u.mjs → createServerFn-AQvBMBjJ.mjs} +2 -23
- package/.output/server/_ssr/{createServerRpc-BaDJLGBx.mjs → createServerRpc-BVvRVOz5.mjs} +2 -2
- package/.output/server/_ssr/{databaseConfig-C5SkAyUy.mjs → databaseConfig-B_Bg7qS5.mjs} +1 -1
- package/.output/server/_ssr/{databaseJsonValue-Csbuzc9Q.mjs → databaseJsonValue-kS7cvEtz.mjs} +1 -1
- package/.output/server/_ssr/{databaseRows-CPphvbag.mjs → databaseRows-B6H8Cmgq.mjs} +3 -3
- package/.output/server/_ssr/{dialog-B4ALf7NJ.mjs → dialog-C8CS8RMt.mjs} +1 -1
- package/.output/server/_ssr/{dist-CbQbBIw-.mjs → dist-TEpM_UAD.mjs} +125 -125
- package/.output/server/_ssr/{downloadBundle-94jPBGSO.mjs → downloadBundle-DCmr7vsj.mjs} +1 -1
- package/.output/server/_ssr/{empty-Bh1FEeYF.mjs → empty-CkdEAvCY.mjs} +2 -2
- package/.output/server/_ssr/{empty-plugin-adapters-CpCHi1TV.mjs → empty-plugin-adapters-zrZ0xs6n.mjs} +1 -1
- package/.output/server/_ssr/{failureReports-Bh22wois.mjs → failureReports-Cn_zU9S8.mjs} +3 -3
- package/.output/server/_ssr/{field-HKCaPH3e.mjs → field-CW08sZXd.mjs} +2 -2
- package/.output/server/_ssr/{getBundleChildren-DfxB2K8D.mjs → getBundleChildren-rtkEEJw5.mjs} +2 -2
- package/.output/server/_ssr/git-CTA8Aqr0.mjs +56 -0
- package/.output/server/_ssr/{input-group-xm3LzDuq.mjs → input-group-D-TpFPuG.mjs} +1 -1
- package/.output/server/_ssr/{insights-BKZpJ_K4.mjs → insights-CMyzPs8l.mjs} +28 -27
- package/.output/server/_ssr/{insights-CCyTACIw.mjs → insights-CYeBl8N9.mjs} +5 -5
- package/.output/server/_ssr/{insights-CNqWQLJR.mjs → insights-DAi9KknT.mjs} +2 -2
- package/.output/server/_ssr/{insights-api-DtRFz5X3.mjs → insights-api-BFARQ5ct.mjs} +6 -6
- package/.output/server/_ssr/{insights-errors-Iy-lBaM7.mjs → insights-errors-7BCwFybo.mjs} +2 -2
- package/.output/server/_ssr/{insights-failures-BJN3RfLu.mjs → insights-failures-B9VPkzZE.mjs} +2 -2
- package/.output/server/_ssr/{insights-failures-rpc-DLZ91uOG.mjs → insights-failures-rpc-Q4WNNJkU.mjs} +12 -12
- package/.output/server/_ssr/{insights-recovery-BUuQdlA3.mjs → insights-recovery-BtXVU3ro.mjs} +1 -1
- package/.output/server/_ssr/{insights-recovery-rpc-BQHUhPi7.mjs → insights-recovery-rpc-CY5RYJKa.mjs} +8 -8
- package/.output/server/_ssr/{insights-rpc-C6Vukyn7.mjs → insights-rpc-BO7_evvs.mjs} +5 -5
- package/.output/server/_ssr/{insights-search-CBYoxT7v.mjs → insights-search-DKfxgHD3.mjs} +5 -5
- package/.output/server/_ssr/{insights-usage-CHqvtehH.mjs → insights-usage-DiGnuxW8.mjs} +1 -1
- package/.output/server/_ssr/{insights-usage-rpc-BJ7a-xco.mjs → insights-usage-rpc-B4czku50.mjs} +8 -8
- package/.output/server/_ssr/{insights-usage-rpc-C-lNUIsD.mjs → insights-usage-rpc-CUCTFska.mjs} +5 -5
- package/.output/server/_ssr/{insightsUsage-COUG-_-U.mjs → insightsUsage-ClAmoUz8.mjs} +3 -3
- package/.output/server/_ssr/{insights_.distribution-DmLW8I8a.mjs → insights_.distribution-BDeUhZGj.mjs} +2 -2
- package/.output/server/_ssr/{insights_.distribution-CTwilMPm.mjs → insights_.distribution-BRrbZN1X.mjs} +5 -5
- package/.output/server/_ssr/{insights_.distribution-DztDyrBj.mjs → insights_.distribution-C2MXpzKd.mjs} +15 -14
- package/.output/server/_ssr/{installations-Bct7ag5y.mjs → installations-BVk7okiY.mjs} +4 -4
- package/.output/server/_ssr/{installations-B6MK5iA8.mjs → installations-BjLMgBoH.mjs} +2 -2
- package/.output/server/_ssr/{installations-_N4PtYFl.mjs → installations-DxGZEC5G.mjs} +12 -12
- package/.output/server/_ssr/{listReleases-BfUBlCHo.mjs → listReleases-D_GY00SQ.mjs} +1 -1
- package/.output/server/_ssr/native-builds-CSCgFB21.mjs +10 -0
- package/.output/server/_ssr/native-builds-CdlyAldW.mjs +569 -0
- package/.output/server/_ssr/native-builds-DhXL5zf_.mjs +137 -0
- package/.output/server/_ssr/native-builds_._buildId-CMp1h8dT.mjs +10 -0
- package/.output/server/_ssr/native-builds_._buildId-GHpGaYyE.mjs +813 -0
- package/.output/server/_ssr/nativeBuildQr-84cnFQPX.mjs +59 -0
- package/.output/server/_ssr/nativeBuilds-B_7BPjt_.mjs +133 -0
- package/.output/server/_ssr/{plugins-BaD1slHx.mjs → plugins-RIryUNWj.mjs} +6 -5
- package/.output/server/_ssr/qr-code-C7kNRIDX.mjs +22 -0
- package/.output/server/_ssr/{release-adoption-DuYJTGuX.mjs → release-adoption-DoAtNPED.mjs} +2 -2
- package/.output/server/_ssr/{release-adoption-rpc-CHl7G_Zy.mjs → release-adoption-rpc-BJXZvtoQ.mjs} +10 -10
- package/.output/server/_ssr/{releaseAdoption-B39cpvfo.mjs → releaseAdoption-a2byXMfz.mjs} +4 -4
- package/.output/server/_ssr/releaseCatalogCompiler-DLcean2k.mjs +364 -0
- package/.output/server/_ssr/{releaseManagement-DFMUnDF5.mjs → releaseManagement-DHUux2az.mjs} +1 -1
- package/.output/server/_ssr/{releaseReachability-bFsuElSS.mjs → releaseReachability-DZOK_dH-.mjs} +2 -2
- package/.output/server/_ssr/{remote-config-Mj05qVYZ.mjs → remote-config-DjsEl270.mjs} +20 -19
- package/.output/server/_ssr/{remote-config-10-obSZ0.mjs → remote-config-DlyyohL2.mjs} +2 -2
- package/.output/server/_ssr/{remote-config-Dj1eTYi4.mjs → remote-config-XdYuByHz.mjs} +2 -2
- package/.output/server/_ssr/{remote-config-rpc-lteqDSLn.mjs → remote-config-rpc-GMLPb-90.mjs} +6 -6
- package/.output/server/_ssr/request-guard-CPdRBuGW.mjs +108 -0
- package/.output/server/_ssr/{router-Dr4jjjhx.mjs → router-vpxd56RW.mjs} +317 -71
- package/.output/server/_ssr/{routes-BZbrY_qw.mjs → routes-DyEM4b3x.mjs} +14 -14
- package/.output/server/_ssr/{routes-B5KrCDwk.mjs → routes-dQe3XhiS.mjs} +99 -81
- package/.output/server/_ssr/{runtime.server-DsHqVqTr.mjs → runtime.server-BdMY1blX.mjs} +4 -4
- package/.output/server/_ssr/schema-ChlRtZIo.mjs +23 -0
- package/.output/server/_ssr/schema-migration-rpc-BfGzEK_o.mjs +65 -0
- package/.output/server/_ssr/{select-BtdGNSmp.mjs → select-DM1uwtk9.mjs} +3 -27
- package/.output/server/_ssr/{server-BxaHSwHh.mjs → server-BUUKNSPI.mjs} +7 -161
- package/.output/server/_ssr/{sidebar-CVsgosaD.mjs → sidebar-DB2YQlok.mjs} +4 -4
- package/.output/server/_ssr/ssr.mjs +1 -1
- package/.output/server/_ssr/start-BvDsQehg.mjs +49 -0
- package/.output/server/_ssr/{switch-BmARgkUP.mjs → switch-DLD58zLy.mjs} +2 -2
- package/.output/server/_ssr/{table-M5P3YUfY.mjs → table-P4TnAZhl.mjs} +1 -1
- package/.output/server/_ssr/{tabs-CrmfOlJj.mjs → tabs-B7ZeLicF.mjs} +2 -2
- package/.output/server/_ssr/{updateFailures-z1IQy_4q.mjs → updateFailures-n-tGv90S.mjs} +3 -3
- package/.output/server/_ssr/{uuidv7-C88s9jWF.mjs → uuidv7-BIF4nb_q.mjs} +2 -2
- package/.output/server/_ssr/{schema-BiAVyEj2.mjs → version-CQ98ZBpL-CWSkTT9J.mjs} +2 -22
- package/.output/server/_tanstack-start-manifest_v-C-KC63Zq.mjs +184 -0
- package/.output/server/index.mjs +432 -271
- package/lib/vite-internal.mjs +32 -1
- package/package.json +8 -7
- package/src/components/AppSidebar.tsx +12 -1
- package/src/components/ConsoleAccessPage.tsx +49 -3
- package/src/components/QrCode.tsx +35 -0
- package/src/components/SchemaMigrationRequired.tsx +139 -0
- package/src/components/features/insights/BuiltinBundle.tsx +5 -3
- package/src/components/features/native-builds/BuiltInBundleCard.tsx +163 -0
- package/src/components/features/native-builds/CommitLink.tsx +30 -0
- package/src/components/features/native-builds/CopyableText.tsx +48 -0
- package/src/components/features/native-builds/ImportBuild.tsx +91 -0
- package/src/components/features/native-builds/InstallCard.tsx +205 -0
- package/src/components/features/native-builds/NativeBuildDetailPage.tsx +175 -0
- package/src/components/features/native-builds/NativeBuildsPage.tsx +151 -0
- package/src/components/features/native-builds/NativeBuildsTable.tsx +426 -0
- package/src/components/features/native-builds/PatchesCard.tsx +222 -0
- package/src/components/features/native-builds/ReleaseNativeBuildLink.tsx +101 -0
- package/src/components/features/native-builds/ServedNowCard.tsx +214 -0
- package/src/components/features/native-builds/ShortHash.tsx +41 -0
- package/src/components/features/native-builds/StoreSubmission.tsx +73 -0
- package/src/components/features/releases/ReleaseEditorSheet.tsx +8 -0
- package/src/lib/api-rpc.ts +98 -0
- package/src/lib/api.ts +120 -0
- package/src/lib/native-builds.ts +162 -0
- package/src/lib/qr-code.ts +16 -0
- package/src/lib/schema-migration-api.ts +54 -0
- package/src/lib/schema-migration-rpc.ts +26 -0
- package/src/lib/schema-migration.ts +101 -0
- package/src/lib/server/config.server.ts +23 -14
- package/src/lib/server/console-runtime.server.ts +4 -6
- package/src/lib/server/local-console.ts +164 -0
- package/src/lib/server/nativeBuildQr.ts +73 -0
- package/src/lib/server/nativeBuilds.ts +288 -0
- package/src/lib/shell.ts +9 -0
- package/src/routeTree.gen.ts +88 -1
- package/src/router.tsx +11 -1
- package/src/routes/-native-builds-search.ts +51 -0
- package/src/routes/[_]hot-updater/native-builds/qr.ts +14 -0
- package/src/routes/__root.tsx +11 -1
- package/src/routes/api/native-builds/$buildId/download.ts +50 -0
- package/src/routes/native-builds.tsx +21 -0
- package/src/routes/native-builds_.$buildId.tsx +23 -0
- package/src/start.ts +33 -0
- package/src/virtual-modules.d.ts +18 -0
- package/src/vite-internal.ts +57 -1
- package/.output/public/assets/EventDetails-gbD_fCqc.js +0 -1
- package/.output/public/assets/HashValueDisplay-BGkDPaYi.js +0 -1
- package/.output/public/assets/InsightsPageHeader-BRw8XkJW.js +0 -1
- package/.output/public/assets/NotFoundPage-Cei6W2lm.js +0 -1
- package/.output/public/assets/alert-dialog-BtVg50WQ.js +0 -1
- package/.output/public/assets/api-DoicFJfd.js +0 -1
- package/.output/public/assets/api-keys-D81VHHNM.js +0 -1
- package/.output/public/assets/api-keys-Dia6i8K1.js +0 -1
- package/.output/public/assets/arrow-left-DsivSewE.js +0 -1
- package/.output/public/assets/arrow-up-right-B5aM0F7f.js +0 -1
- package/.output/public/assets/badge-Bqf3UDee.js +0 -1
- package/.output/public/assets/circle-off-BsbZQtsF.js +0 -1
- package/.output/public/assets/console-features-api-DPE4C06Y.js +0 -2
- package/.output/public/assets/dialog-CGKPxz3n.js +0 -1
- package/.output/public/assets/index-DrkdiRIn.js +0 -10
- package/.output/public/assets/insights-C-5t8wh2.js +0 -2
- package/.output/public/assets/insights-D_ngQdiz.js +0 -1
- package/.output/public/assets/insights-KigRBDgC.js +0 -42
- package/.output/public/assets/insights-api-1ZjVu3Sb.js +0 -1
- package/.output/public/assets/insights-search-aT8BVCci.js +0 -1
- package/.output/public/assets/insights-usage-rpc-DqTiXI1_.js +0 -1
- package/.output/public/assets/insights_.distribution-Bzl6RFBR.js +0 -2
- package/.output/public/assets/insights_.distribution-Cthgttqb.js +0 -1
- package/.output/public/assets/insights_.distribution-D2c2v1bu.js +0 -1
- package/.output/public/assets/installations-2Nx8Htf-.js +0 -1
- package/.output/public/assets/installations-BskJ1xQr.js +0 -2
- package/.output/public/assets/installations-K2iJ_r0h.js +0 -1
- package/.output/public/assets/remote-config-D9X3NiwV.js +0 -6
- package/.output/public/assets/remote-config-DzOOiBIO.js +0 -1
- package/.output/public/assets/remote-config-ikg7kak0.js +0 -1
- package/.output/public/assets/routes-9rb9P5Y7.js +0 -2
- package/.output/public/assets/routes-P7683vKQ.js +0 -1
- package/.output/public/assets/search-DuI1FBpg.js +0 -1
- package/.output/public/assets/select-M3H2gxCc.js +0 -1
- package/.output/public/assets/smartphone-CtsHuiIC.js +0 -1
- package/.output/public/assets/styles-CpiW_YdW.css +0 -2
- package/.output/public/assets/switch-By_vfm8I.js +0 -1
- package/.output/public/assets/useCompositeListItem-B-UkrDlu.js +0 -1
- package/.output/server/_ssr/config.server-DTdsG47T.mjs +0 -35
- package/.output/server/_ssr/start-B6ECIE_7.mjs +0 -4
- 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-
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/BundleIdDisplay-
|
|
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 {
|
|
4
|
-
import { O as buttonVariants, S as SidebarTrigger } from "./sidebar-
|
|
5
|
-
import { a as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
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
|
|
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-
|
|
5
|
-
import {
|
|
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 {
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
|
|
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-
|
|
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-
|
|
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 }) {
|
package/.output/server/_ssr/{InsightsPageHeader-ZlAlDxQy.mjs → InsightsPageHeader-CWf1n4Vt.mjs}
RENAMED
|
@@ -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 {
|
|
4
|
-
import { O as buttonVariants, S as SidebarTrigger, k as cn } from "./sidebar-
|
|
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-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
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
|
-
*
|
|
79
|
-
*
|
|
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-
|
|
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-
|
|
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-
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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 {
|
|
6
|
-
|
|
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,
|
|
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 {
|
|
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
|
|
5
|
-
import { A as createSsrRpc, C as Skeleton, S as SidebarTrigger, n as Input, t as Button$1 } from "./sidebar-
|
|
6
|
-
import { t as
|
|
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-
|
|
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 {
|
|
2
|
-
import { t as consoleAccess } from "./console-access-
|
|
3
|
-
import { t as createServerRpc } from "./createServerRpc-
|
|
4
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/api-keys-rpc-
|
|
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-
|
|
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-
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/api-keys-
|
|
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 };
|