@abtnode/webapp 1.17.4-beta-20251203-225234-75da41dd → 1.17.4-beta-20251204-152224-243ff54f
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/blocklet.js +1 -1
- package/blocklet.yml +1 -1
- package/dist/assets/{AdapterDayjs-B8XrCnul.js → AdapterDayjs-D7bJvNHv.js} +1 -1
- package/dist/assets/{Add-kI5bOAG-.js → Add-CRng1bvb.js} +1 -1
- package/dist/assets/ArrowDropDown-DenHrhc8.js +1 -0
- package/dist/assets/{Autocomplete-CQE4jUXI.js → Autocomplete-Z7djk_ZA.js} +1 -1
- package/dist/assets/{Breadcrumbs-AnwvYAV4.js → Breadcrumbs-Cl3pYXuX.js} +1 -1
- package/dist/assets/{ButtonGroup-BMNpoL2h.js → ButtonGroup-DT2mnbzl.js} +1 -1
- package/dist/assets/{CSSTransition-BxHb6pgR.js → CSSTransition-DnKCf5MC.js} +1 -1
- package/dist/assets/{CallMerge-D4r5xzUL.js → CallMerge-ez9AWPJv.js} +1 -1
- package/dist/assets/{CardContent-7R2qvvpi.js → CardContent-3_u5Glkf.js} +1 -1
- package/dist/assets/{ChevronLeft-LXiuPIK5.js → ChevronLeft-CrMq5UEk.js} +1 -1
- package/dist/assets/{ChevronRight-DqFLktR4.js → ChevronRight-Cuplw8Vk.js} +1 -1
- package/dist/assets/{Clear-Hs60zEib.js → Clear-BqdaPKpz.js} +1 -1
- package/dist/assets/{DeleteOutline-DsqrqnCp.js → DeleteOutline-BASXPKuD.js} +1 -1
- package/dist/assets/{Done-vE3VnBR0.js → Done-CB_qB8AL.js} +1 -1
- package/dist/assets/{Edit-qO_MT0b2.js → Edit-Dtb20pIp.js} +1 -1
- package/dist/assets/{ErrorOutline-DdvUBhqw.js → ErrorOutline-D9sfPJGD.js} +1 -1
- package/dist/assets/{FilterList-AnfIXCKs.js → FilterList-C8mCq8zA.js} +1 -1
- package/dist/assets/{Google--RzStVOR.js → Google-C-fURhjk.js} +1 -1
- package/dist/assets/{HelpOutline-CoSkqfzt.js → HelpOutline-Cueb4ga5.js} +1 -1
- package/dist/assets/{KeyboardArrowDown-Dujsdgxw.js → KeyboardArrowDown-BcVS9Fto.js} +1 -1
- package/dist/assets/{Launch-DYmoqTVe.js → Launch-7PWsMLYi.js} +1 -1
- package/dist/assets/{Link-C00bCC3q.js → Link-DehBPVeZ.js} +1 -1
- package/dist/assets/{ListItemButton-BEID3HDl.js → ListItemButton-DWl1Vgm4.js} +1 -1
- package/dist/assets/{ListSubheader-Dc864cM6.js → ListSubheader-CwlXohNJ.js} +1 -1
- package/dist/assets/{LoadingButton-BClJhQK8.js → LoadingButton-MojQ_kdf.js} +1 -1
- package/dist/assets/{MoreVert-CqJOZeEC.js → MoreVert-DtyK0V7L.js} +1 -1
- package/dist/assets/{OpenInNew-Pw51SEHY.js → OpenInNew-_TIFZ5Zi.js} +1 -1
- package/dist/assets/{Refresh-CcEIh6xY.js → Refresh-DwyswQXH.js} +1 -1
- package/dist/assets/{Search-C_5maoKz.js → Search-CsPuhVY5.js} +1 -1
- package/dist/assets/{Stepper-Ck_x8FLF.js → Stepper-Rcrn65Du.js} +1 -1
- package/dist/assets/{Switch-DYHMHuRa.js → Switch-DkUYQLr7.js} +1 -1
- package/dist/assets/TableSearch-Bj-RkYUe.js +51 -0
- package/dist/assets/{ToggleButtonGroup-CS6Q6qZB.js → ToggleButtonGroup-3zowoGqS.js} +1 -1
- package/dist/assets/{UnfoldMore-BPzgNPA4.js → UnfoldMore-DkTRhBQs.js} +1 -1
- package/dist/assets/{Verified-LTXU8MrA.js → Verified-B6fUdHX1.js} +1 -1
- package/dist/assets/{VerifiedUser-B3wH8cXt.js → VerifiedUser-Dk6hfaYJ.js} +1 -1
- package/dist/assets/{ViewList-BfiQ8qPi.js → ViewList-D8N8QDcN.js} +1 -1
- package/dist/assets/{_createAggregator-4BM34H5l.js → _createAggregator-B5A3r6Wz.js} +1 -1
- package/dist/assets/actions-CGozisCX.js +11 -0
- package/dist/assets/actions-DzRp1CK0.js +1 -0
- package/dist/assets/{agreement-BzsHgssv.js → agreement-BPuCuaYS.js} +3 -3
- package/dist/assets/api-DksC2jZF.js +1 -0
- package/dist/assets/{appearance-DHqXwjoD.js → appearance-DqS4_O1_.js} +1 -1
- package/dist/assets/ar-Cwm1-0yA.js +7 -0
- package/dist/assets/{audit-logs-fSLdeI5s.js → audit-logs-D0e8XQkm.js} +1 -1
- package/dist/assets/{base-chart-D5YNxfH0.js → base-chart-DWYRF-Pp.js} +1 -1
- package/dist/assets/{blocklet-DzsezOxR.js → blocklet-CO_UEcgH.js} +1 -1
- package/dist/assets/{chain-C9-WRPu7.js → chain-Ss4dh3Ib.js} +1 -1
- package/dist/assets/{click-to-copy-BqSPQ3-7.js → click-to-copy-CHgcysbr.js} +1 -1
- package/dist/assets/cloneDeep-DGATVnvO.js +1 -0
- package/dist/assets/{collapse-B_3Ho-QP.js → collapse-BxCDdwz2.js} +1 -1
- package/dist/assets/{config-navigation-Dp2RakXR.js → config-navigation-DnjjiErQ.js} +3 -3
- package/dist/assets/{connect-to-pNkkzCak.js → connect-to-DDy1G5fS.js} +1 -1
- package/dist/assets/{cssMode-tZr3iQNS.js → cssMode-BIviLN-T.js} +1 -1
- package/dist/assets/de-XQM4sDLo.js +7 -0
- package/dist/assets/{delete-confirm-Co07Njuf.js → delete-confirm-vp8hd-iS.js} +1 -1
- package/dist/assets/{depsEqual-DDykxzRj.js → depsEqual-CZP345Xi.js} +1 -1
- package/dist/assets/{detail-DcgwTwye.js → detail-DKJA4QJA.js} +3 -3
- package/dist/assets/domains-DnORdhZ7.js +28 -0
- package/dist/assets/{download-CK01OJP3.js → download-bjQaUX52.js} +1 -1
- package/dist/assets/{edit.svg-BQ5aLBCI.js → edit.svg-D22FchVe.js} +1 -1
- package/dist/assets/emotion-cache.browser.esm-CqYOpxkG.js +1 -0
- package/dist/assets/engine-Cc942eOX.js +1 -0
- package/dist/assets/es-D4zFwVhj.js +9 -0
- package/dist/assets/fr-BQXlmrTL.js +7 -0
- package/dist/assets/{freemarker2-DSJRqUi6.js → freemarker2-B6EoaK3p.js} +1 -1
- package/dist/assets/{get-safe-url-DQ8We4Cn.js → get-safe-url-CfVKsPMH.js} +1 -1
- package/dist/assets/getValidReactChildren-D7wwEzgt.js +1 -0
- package/dist/assets/{graphqlMode-BG47Adzu.js → graphqlMode-B1q5zCxy.js} +2 -2
- package/dist/assets/{handlebars-B6x-6VIa.js → handlebars-leG6s9kW.js} +1 -1
- package/dist/assets/hi-Cdz2GskJ.js +5 -0
- package/dist/assets/{html-jMDnRBWp.js → html-BUpVyqnU.js} +1 -1
- package/dist/assets/{html-title-B38L6o3q.js → html-title-B7gNlV0N.js} +1 -1
- package/dist/assets/{htmlMode-C5S9mBrG.js → htmlMode-BtvUyoUm.js} +1 -1
- package/dist/assets/id-Q9i8FdSt.js +7 -0
- package/dist/assets/{iframe-BNWt4-fa.js → iframe-Bcq1yggD.js} +1 -1
- package/dist/assets/{index-BtUuqhY5.js → index-8muv7_Jd.js} +1 -1
- package/dist/assets/index-9amiOBds.js +1 -0
- package/dist/assets/{index-BWfkNY7x.js → index-B9cmEwta.js} +1 -1
- package/dist/assets/{index-fUcEQ60M.js → index-BA9z7d5M.js} +2 -2
- package/dist/assets/{index-Dj4J7MRE.js → index-BCFuar1a.js} +1 -1
- package/dist/assets/{index-D1awT4uB.js → index-BEBlF9m9.js} +1 -1
- package/dist/assets/{index-CdmTtYEH.js → index-BFd6rfnD.js} +1 -1
- package/dist/assets/index-BHh7dbJI.js +79 -0
- package/dist/assets/{index-CHG9EhW0.js → index-BZK15J4S.js} +2 -2
- package/dist/assets/{index-gLhIa95r.js → index-BcwJKAa8.js} +3 -3
- package/dist/assets/index-BmhCRjuT.js +1 -0
- package/dist/assets/{index-i1qQpQly.js → index-Bs1YhLgL.js} +1 -1
- package/dist/assets/index-BtC9W7tW.js +120 -0
- package/dist/assets/{index-sbhy4wTO.js → index-BuBuhUeR.js} +1 -1
- package/dist/assets/{index-CVAkH3vd.js → index-BzdGhRHG.js} +1 -1
- package/dist/assets/{index-C601SkM4.js → index-C4pxl7E6.js} +1 -1
- package/dist/assets/{index-B_NMI3ZI.js → index-C5QUiUfn.js} +1 -1
- package/dist/assets/index-C8uJSnoX.js +606 -0
- package/dist/assets/{index-YAdFrAoP.js → index-CK2r1fQ4.js} +3 -3
- package/dist/assets/{index-CdAykioB.js → index-CLUNG8RH.js} +1 -1
- package/dist/assets/{index-CX5L5Zzo.js → index-COAHcVH6.js} +1 -1
- package/dist/assets/{index-CQ3wtaOi.js → index-CP2ySx69.js} +1 -1
- package/dist/assets/{index-CT2MPFX1.js → index-CS3jjVt-.js} +1 -1
- package/dist/assets/index-CToqwOpp.js +328 -0
- package/dist/assets/{index-Da6avpbI.js → index-CYKLn0md.js} +1 -1
- package/dist/assets/{index-Ca71Ul3i.js → index-CaFQZBnI.js} +3 -3
- package/dist/assets/{index-B7lwLoYe.js → index-CjNtQPhT.js} +1 -1
- package/dist/assets/index-ClhL9yaw.js +1 -0
- package/dist/assets/{index-BqDRNwJX.js → index-CtuC-y68.js} +1 -1
- package/dist/assets/{index-ituQ-YWI.js → index-Cueikc61.js} +2 -2
- package/dist/assets/{index-gKfbF3Uy.js → index-D6RZzwG3.js} +1 -1
- package/dist/assets/{index-CLvjrKnU.js → index-D7pAGc4n.js} +9 -9
- package/dist/assets/{index-DOjmnZso.js → index-D8QdSuWP.js} +1 -1
- package/dist/assets/{index-DypTd994.js → index-DP781l3f.js} +1 -1
- package/dist/assets/{index-BfBCWTwI.js → index-DPRN-V2-.js} +1 -1
- package/dist/assets/{index-DXgv4Xqm.js → index-DPsk4bZI.js} +1 -1
- package/dist/assets/{index-D6Tf4nQu.js → index-DRjvR70q.js} +1 -1
- package/dist/assets/{index-D331Asw4.js → index-DYek3fDu.js} +5 -5
- package/dist/assets/{index-CtGeZSa_.js → index-D_SuvjB5.js} +1 -1
- package/dist/assets/{index-PBuMheS3.js → index-DdtHjUVR.js} +4 -4
- package/dist/assets/index-DpjK8TAu.js +20 -0
- package/dist/assets/{index-D0tbGiP6.js → index-LTqv_onD.js} +1 -1
- package/dist/assets/{index-B6tHzrIn.js → index-STr1ffGc.js} +2 -2
- package/dist/assets/{index-DaYK2wTG.js → index-nb9hmF43.js} +1 -1
- package/dist/assets/index-uvbslqFd.js +1 -0
- package/dist/assets/{index-CUSquMEA.js → index-wL5lEY63.js} +8 -8
- package/dist/assets/{index.esm-yDr2HoCY.js → index.esm-uQodQ2iI.js} +1 -1
- package/dist/assets/{install-from-url-CUdRu_Yn.js → install-from-url-B1AvU1HE.js} +1 -1
- package/dist/assets/{invitation-BcqzR03j.js → invitation-BGoJ_RU_.js} +1 -1
- package/dist/assets/{is-path-prefix-equal-wXDXCvIL.js → is-path-prefix-equal-B0MjzJqh.js} +1 -1
- package/dist/assets/item-MiuwuO0Y.js +273 -0
- package/dist/assets/ja-CH8WZngC.js +9 -0
- package/dist/assets/{javascript-Cif1kEP1.js → javascript-CQivY_iF.js} +1 -1
- package/dist/assets/{jsonMode-Dtj4OX0P.js → jsonMode-B1DIJogh.js} +1 -1
- package/dist/assets/ko-Nli9PwTV.js +9 -0
- package/dist/assets/{liquid-wpaZ49Sr.js → liquid-B-d-gcy-.js} +1 -1
- package/dist/assets/{list-header--wgea2u-.js → list-header-CSw-R3Ib.js} +1 -1
- package/dist/assets/{lock.svg-Br-cW1Vr.js → lock.svg-BhUN8bfS.js} +1 -1
- package/dist/assets/log-DSCML-QG.js +15 -0
- package/dist/assets/{lottie-react.esm-DGCSfjEH.js → lottie-react.esm-BsJCvwoE.js} +1 -1
- package/dist/assets/{mdx-BNHuuftl.js → mdx-CmVqY81W.js} +1 -1
- package/dist/assets/{memory-CO8_mKFj.js → memory-CYZ4RyvC.js} +1 -1
- package/dist/assets/{metric-D4Ezyye6.js → metric--Aw7wHv-.js} +1 -1
- package/dist/assets/omit-D3F-V5wK.js +1 -0
- package/dist/assets/overview-Dtzj0xH0.js +13 -0
- package/dist/assets/{permission-DkUGU8Dy.js → permission-C4awFEcL.js} +1 -1
- package/dist/assets/{preference-C1-5FR1J.js → preference-4rp0K0MI.js} +3 -3
- package/dist/assets/pt-eVksFEJb.js +5 -0
- package/dist/assets/{python-BeSPls-_.js → python-UalezmyW.js} +1 -1
- package/dist/assets/{raf-schd.esm-Bmt0I179.js → raf-schd.esm-nqmR3RY3.js} +1 -1
- package/dist/assets/{razor-VrEhsMvy.js → razor-CCom4Y0p.js} +1 -1
- package/dist/assets/{rotate-session-key-BPyoa2sO.js → rotate-session-key-BVtPivm4.js} +1 -1
- package/dist/assets/ru-ycnIgUGb.js +5 -0
- package/dist/assets/runtime-ChvahMmk.js +1 -0
- package/dist/assets/schema-D90no3Xq.js +1 -0
- package/dist/assets/sdk-D033K402.js +1 -0
- package/dist/assets/{service-B3qJKUUb.js → service-D0Nqh0MK.js} +1 -1
- package/dist/assets/shorten-label-BtsExUKj.js +1 -0
- package/dist/assets/{simple-select-BlzEjZYK.js → simple-select-CwS4mJu8.js} +1 -1
- package/dist/assets/{spaces-BW0FVSze.js → spaces-DfyZsuc8.js} +1 -1
- package/dist/assets/status-BniY81sT.js +1 -0
- package/dist/assets/{status-hfEX7VoN.js → status-CUxXICmB.js} +1 -1
- package/dist/assets/{switch-control-CRKB4FYD.js → switch-control-BKH5l4X4.js} +1 -1
- package/dist/assets/{table-icons-DIiznwf7.js → table-icons-SEKPul8f.js} +18 -18
- package/dist/assets/{team-Cr3_9lEo.js → team-azT9Jfpw.js} +1 -1
- package/dist/assets/th-BvLhxkpi.js +5 -0
- package/dist/assets/{toLower-CBDRJ4vw.js → toLower-BOQN0AT2.js} +1 -1
- package/dist/assets/toUpper-CS-AduT_.js +1 -0
- package/dist/assets/{traffic-c9i5qWvQ.js → traffic-DasUqpt9.js} +1 -1
- package/dist/assets/{tsMode-DA1Je9xp.js → tsMode-DiIkFf_x.js} +1 -1
- package/dist/assets/{typescript-BC9b2MIP.js → typescript-85TY_MlI.js} +1 -1
- package/dist/assets/{url-evaluation-BNj0UZK1.js → url-evaluation-CcvHRXPN.js} +1 -1
- package/dist/assets/{url-join-Cwzm0LVv.js → url-join-BXDQZ2P_.js} +1 -1
- package/dist/assets/{use-mobile-DegDbYke.js → use-mobile-CWjERnhJ.js} +1 -1
- package/dist/assets/{use-mobile-ZXn0_vSN.js → use-mobile-DMNeuaxw.js} +1 -1
- package/dist/assets/{useAsync-DhvcDNZU.js → useAsync-CCNZX_yW.js} +1 -1
- package/dist/assets/{useAsyncRetry-BuFRS3YZ.js → useAsyncRetry-DOwZIXtY.js} +1 -1
- package/dist/assets/{useLocalStorage-Ceu1UYjX.js → useLocalStorage-CEBeH0_O.js} +1 -1
- package/dist/assets/{useThemeProps-CGNNiV2h.js → useThemeProps-Ck1ydGI4.js} +1 -1
- package/dist/assets/{util-CvX1kI1W.js → util-C4YCPi_k.js} +1 -1
- package/dist/assets/vi-BmM-09Iq.js +5 -0
- package/dist/assets/{wait-container-DQfZdJnZ.js → wait-container-B7fAP1Xa.js} +7 -7
- package/dist/assets/{without-wallet-BKVBw3vL.js → without-wallet-C-OpmM-K.js} +1 -1
- package/dist/assets/wrap-locale-DHJmdRca.js +1 -0
- package/dist/assets/{xml-Byc4kRnH.js → xml-CTVLNdi0.js} +1 -1
- package/dist/assets/{yaml-BqelJ5A8.js → yaml-Dx5B49fH.js} +1 -1
- package/dist/assets/{zh-DZI4Yy2m.js → zh-BkVzTN9N.js} +2 -2
- package/dist/assets/zh-tw-CW4J6ddt.js +9 -0
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +1 -1
- package/dist/assets/ArrowDropDown-DQiHUHN2.js +0 -1
- package/dist/assets/TableSearch-CCo38KPm.js +0 -51
- package/dist/assets/actions-CE27qWor.js +0 -11
- package/dist/assets/actions-SrVXdq5g.js +0 -1
- package/dist/assets/api-SBg_zsK3.js +0 -1
- package/dist/assets/ar-C89Z16Ql.js +0 -7
- package/dist/assets/cloneDeep-DpgUjdaj.js +0 -1
- package/dist/assets/de-BsCDrfBl.js +0 -7
- package/dist/assets/domains-BV1XoGlV.js +0 -28
- package/dist/assets/emotion-cache.browser.esm-X_vzDGxi.js +0 -1
- package/dist/assets/engine-WLYB4JH-.js +0 -1
- package/dist/assets/es-BJh_XsEm.js +0 -9
- package/dist/assets/fr-DRJMwn7V.js +0 -7
- package/dist/assets/getValidReactChildren-BsG2WRwa.js +0 -1
- package/dist/assets/hi-h-9Yl5g9.js +0 -5
- package/dist/assets/id-BDWggRsa.js +0 -7
- package/dist/assets/index-B8v-axBf.js +0 -328
- package/dist/assets/index-B_nHd_uz.js +0 -606
- package/dist/assets/index-C4B0vM19.js +0 -1
- package/dist/assets/index-C7TNAoJk.js +0 -1
- package/dist/assets/index-CD7DvxmZ.js +0 -20
- package/dist/assets/index-CExol_6_.js +0 -1
- package/dist/assets/index-CvbVZVN0.js +0 -79
- package/dist/assets/index-DuCzR9nh.js +0 -120
- package/dist/assets/index-xk8o36aP.js +0 -1
- package/dist/assets/item-CEMWCyCy.js +0 -273
- package/dist/assets/ja-R9EF3xbB.js +0 -9
- package/dist/assets/ko-C_QLPZyk.js +0 -9
- package/dist/assets/log-BwGGQAmT.js +0 -15
- package/dist/assets/omit-BkO80IDI.js +0 -1
- package/dist/assets/overview-XRYsL-Df.js +0 -13
- package/dist/assets/pt-DpYO8djd.js +0 -5
- package/dist/assets/ru-DkZtar3s.js +0 -5
- package/dist/assets/runtime-B2AOXg1s.js +0 -1
- package/dist/assets/schema-BZPDZOr7.js +0 -1
- package/dist/assets/sdk-jF2ykj-E.js +0 -1
- package/dist/assets/shorten-label-CdOupV3k.js +0 -1
- package/dist/assets/status-BwdlUN6n.js +0 -1
- package/dist/assets/th-04iX5CrT.js +0 -5
- package/dist/assets/toUpper-CiB1f6qA.js +0 -1
- package/dist/assets/vi-kOP0E9Ga.js +0 -5
- package/dist/assets/wrap-locale-DyG--MvI.js +0 -1
- package/dist/assets/zh-tw-BLapUUeq.js +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-BEBlF9m9.js","./index-BojVbZw0.js","./index-CP2ySx69.js","./metric--Aw7wHv-.js","./click-to-copy-CHgcysbr.js","./index-BHh7dbJI.js","./useLocalStorage-CEBeH0_O.js","./ErrorOutline-D9sfPJGD.js","./index-BCFuar1a.js","./FilterList-C8mCq8zA.js","./CSSTransition-DnKCf5MC.js","./emotion-cache.browser.esm-CqYOpxkG.js","./index-DP781l3f.js","./redux-DfszZyTl.js","./typeof-QjJsDpFa.js","./depsEqual-CZP345Xi.js","./index-C4pxl7E6.js","./TableSearch-Bj-RkYUe.js","./Search-CsPuhVY5.js","./Clear-BqdaPKpz.js","./MoreVert-DtyK0V7L.js","./status-CUxXICmB.js","./actions-CGozisCX.js","./url-evaluation-CcvHRXPN.js","./get-safe-url-CfVKsPMH.js","./ButtonGroup-DT2mnbzl.js","./getValidReactChildren-D7wwEzgt.js","./permission-C4awFEcL.js","./install-from-url-B1AvU1HE.js","./without-wallet-C-OpmM-K.js","./index-CS3jjVt-.js","./cloneDeep-DGATVnvO.js","./Autocomplete-Z7djk_ZA.js","./ListSubheader-CwlXohNJ.js","./ListItemButton-DWl1Vgm4.js","./Stepper-Rcrn65Du.js","./Launch-7PWsMLYi.js","./Add-CRng1bvb.js","./index-CtuC-y68.js","./schema-D90no3Xq.js","./index-wL5lEY63.js","./toLower-BOQN0AT2.js","./index-BuBuhUeR.js","./url-join-BXDQZ2P_.js","./wait-container-B7fAP1Xa.js","./use-mobile-CWjERnhJ.js","./DeleteOutline-BASXPKuD.js","./spaces-DfyZsuc8.js","./api-DksC2jZF.js","./index-DpjK8TAu.js","./item-MiuwuO0Y.js","./index-B9cmEwta.js","./KeyboardArrowDown-BcVS9Fto.js","./ChevronLeft-CrMq5UEk.js","./ChevronRight-Cuplw8Vk.js","./blocklet-CO_UEcgH.js","./Verified-B6fUdHX1.js","./VerifiedUser-Dk6hfaYJ.js","./Done-CB_qB8AL.js","./delete-confirm-vp8hd-iS.js","./item-G0iZE90Q.css","./engine-Cc942eOX.js","./ArrowDropDown-DenHrhc8.js","./Breadcrumbs-Cl3pYXuX.js","./index-CToqwOpp.js","./html-title-B7gNlV0N.js","./index.esm-uQodQ2iI.js","./switch-control-BKH5l4X4.js","./Switch-DkUYQLr7.js","./Link-DehBPVeZ.js","./actions-DzRp1CK0.js","./logo-BKA11TRi.js","./Refresh-DwyswQXH.js","./LoadingButton-MojQ_kdf.js","./rotate-session-key-BVtPivm4.js","./visuallyHidden-Dan1xhjv.js","./is-path-prefix-equal-B0MjzJqh.js","./Edit-Dtb20pIp.js","./CallMerge-ez9AWPJv.js","./CardContent-3_u5Glkf.js","./index-Bs1YhLgL.js","./download-bjQaUX52.js","./index-CjNtQPhT.js","./audit-logs-D0e8XQkm.js","./index-nb9hmF43.js","./decode-DPztD6kB.js","./index-gnjjKJuC.css","./UnfoldMore-DkTRhBQs.js","./shorten-label-BtsExUKj.js","./team-azT9Jfpw.js","./index-D8QdSuWP.js","./ViewList-D8N8QDcN.js","./Google-C-fURhjk.js","./AdapterDayjs-D7bJvNHv.js","./useThemeProps-Ck1ydGI4.js","./index-C5QUiUfn.js","./sdk-D033K402.js","./ua-parser-DP5omx3I.js","./index-D6RZzwG3.js","./edit.svg-D22FchVe.js","./list-header-CSw-R3Ib.js","./chain-Ss4dh3Ib.js","./ToggleButtonGroup-3zowoGqS.js","./lock.svg-BhUN8bfS.js","./useAsyncRetry-DOwZIXtY.js","./useAsync-CCNZX_yW.js","./index-ZgkIHsf0.css","./detail-DKJA4QJA.js","./index-D_SuvjB5.js","./index-uvbslqFd.js","./invitation-BGoJ_RU_.js","./wrap-locale-DHJmdRca.js","./index-ClhL9yaw.js","./index-CK2r1fQ4.js","./index-DPsk4bZI.js","./index-DdtHjUVR.js","./agreement-BPuCuaYS.js","./index-CLUNG8RH.js","./index-Cueikc61.js","./index-BA9z7d5M.js","./traffic-DasUqpt9.js","./iframe-Bcq1yggD.js","./index-DBii9-f-.js","./base-chart-DWYRF-Pp.js","./index-CYKLn0md.js","./index-DRYJ0xIl.js","./memory-CYZ4RyvC.js","./index-BzdGhRHG.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
function _mergeNamespaces(De,Me){for(var He=0;He<Me.length;He++){const Ge=Me[He];if(typeof Ge!="string"&&!Array.isArray(Ge)){for(const Je in Ge)if(Je!=="default"&&!(Je in De)){const Ye=Object.getOwnPropertyDescriptor(Ge,Je);Ye&&Object.defineProperty(De,Je,Ye.get?Ye:{enumerable:!0,get:()=>Ge[Je]})}}}return Object.freeze(Object.defineProperty(De,Symbol.toStringTag,{value:"Module"}))}(function(){const Me=document.createElement("link").relList;if(Me&&Me.supports&&Me.supports("modulepreload"))return;for(const Je of document.querySelectorAll('link[rel="modulepreload"]'))Ge(Je);new MutationObserver(Je=>{for(const Ye of Je)if(Ye.type==="childList")for(const Ze of Ye.addedNodes)Ze.tagName==="LINK"&&Ze.rel==="modulepreload"&&Ge(Ze)}).observe(document,{childList:!0,subtree:!0});function He(Je){const Ye={};return Je.integrity&&(Ye.integrity=Je.integrity),Je.referrerPolicy&&(Ye.referrerPolicy=Je.referrerPolicy),Je.crossOrigin==="use-credentials"?Ye.credentials="include":Je.crossOrigin==="anonymous"?Ye.credentials="omit":Ye.credentials="same-origin",Ye}function Ge(Je){if(Je.ep)return;Je.ep=!0;const Ye=He(Je);fetch(Je.href,Ye)}})();var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs$1(De){return De&&De.__esModule&&Object.prototype.hasOwnProperty.call(De,"default")?De.default:De}function getAugmentedNamespace(De){if(Object.prototype.hasOwnProperty.call(De,"__esModule"))return De;var Me=De.default;if(typeof Me=="function"){var He=function Ge(){var Je=!1;try{Je=this instanceof Ge}catch{}return Je?Reflect.construct(Me,arguments,this.constructor):Me.apply(this,arguments)};He.prototype=Me.prototype}else He={};return Object.defineProperty(He,"__esModule",{value:!0}),Object.keys(De).forEach(function(Ge){var Je=Object.getOwnPropertyDescriptor(De,Ge);Object.defineProperty(He,Ge,Je.get?Je:{enumerable:!0,get:function(){return De[Ge]}})}),He}var jsxRuntime={exports:{}},reactJsxRuntime_production={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
@@ -1781,10 +1781,10 @@ Portrait Mode:
|
|
|
1781
1781
|
Ratio: 9:16
|
|
1782
1782
|
|
|
1783
1783
|
Landscape Mode:
|
|
1784
|
-
Ratio: 16:9`,splashLandscape:"Splash Landscape",splashPortraitDesc:"Displayed when the blocklet is launched. PNG or JPG format, recommended aspect ratio 9:16 for portrait and 16:9 for landscape (max 5MB)",ogImage:"Open Graph Background",ogImageDesc:"Used in: social media sharing background",clusterSize:"Instance count when run this blocklet in cluster mode",copyrightOwner:"Copyright Owner",copyrightYear:"Copyright Year",copyrightDesc:"Used in: website footer",advanced:"Advanced Configuration",errorReason:"Blocklet start failed, but you can still access it by clicking the button below",deletable:{name:"Delete Protection",enable:"This blocklet can NOT currently be deleted",disable:"This blocklet can currently be deleted"},tenantMode:{name:"Multi-Tenant Mode",multiple:"This blocklet runs in multiple tenant mode, data should be isolated for each tenant",single:"This blocklet runs in single tenant mode, all data are shared"},walletType:{name:"Wallet Type",description:"Blocklet instance wallet type, will change the derived DID"},languages:"Supported Languages",selectLanguagesTip:"Adjust the order by removing and re-adding",languagesSearch:"Search by Country's Local Name, English Name, or ISO Code...",passportColor:"Passport Color",appUrl:"App URL",appUrlDesc:"Used in: sitemap and social sharing",access:{title:"Who can access?",description:"Choose how you want to control access to your application.",useDefault:"Use default",defaultDescription:"Use the application's default configuration",whoCanAccess:{all:{title:"Open to Everyone",description:"Anyone can access this blocklet without authenticating."},owner:{title:"Owner-Only Access",description:"Only the blocklet owner can access it."},invited:{title:"Invite-Only Access",description:"Only invited members can access it."}},publicToStore:"Public On Store",publicInstanceTip:"The access address of this blocklet will be displayed in the Store (along with your DID for accepting donations)",updatedTip:"Access Control Modified"},changedTip:"Configuration updated, please restart Blocklet",missingRequired:"Missing required configuration to start the blocklet",gotoFix:"Go to fix",environment:{key:"Configuration key",value:"Configuration value",keyValueRequired:"Configuration key and value must be specified",invalidKey:"Configuration key must not start with BLOCKLET_ or COMPONENT_",deleteForbidden:"This configuration is required and should not be deleted",tip:"Configurations prefixed with BWA_ should not contain sensitive information because they will be sent to the browser"},dangerZone:"Danger Zone",migrate:{button:"Change DID",title:"Confirm DID Change",description:"If you are launching with server managed wallet, you can change application DID to your own wallet.",confirm:"Are you sure you want to change the application DID? This operation will invalidate all existing sessions and force users to login again, including your own session."},sharedToAllComponents:"Will be shared to all components",session:{period:"Session validity period",profile:"User profile requirements",ttl:"User will be asked to login again if they have no activity on this site for {day} days",day:"{day} day",days:"{day} days",cacheTtl:"Cache duration for user session data (in seconds)",fullNameEnabled:"Request user name on login (enabled by default)",avatarEnabled:"Request user avatar on login (enabled by default)",emailEnabled:"Request user email on login",emailRequireVerified:"Require user email to be verified before login",emailRequireUnique:"Require user email to be unique across all users",phoneEnabled:"Request user phone number on login (not supported yet)",phoneRequireVerified:"Require user phone number to be verified before login",phoneRequireUnique:"Require user phone number to be unique across all users",emailTrustOauthProviders:"Trust OAuth providers for email verification status",enableDomainBlackList:"Enable email domain black list (reject listed email domains)",enableDomainWhiteList:"Enable email domain white list (only allow listed email domains to login)",addDomain:"Add source to fetch the list (in plain text format, one domain per line)",enableBlacklist:"Enable login token & refresh token revocation",experimentalSettings:"Experimental Settings"},clearCache:{name:"Cache Management",purpose:"Manage files cached in router and blocklet services",title:"Confirm Cache Clear?",action:"Clear Cache",success:"Successfully cleared {count} cache entries",description:"Are you sure you want to clear cached files in router and blocklet service? this operation may cause slight performance downgrade in the short term"},rotateSessionKey:{name:"Session Salt Rotation",purpose:"Session salt is a random value used to enhance the security of session tokens. Click the button to rotate the session salt manually, which helps reduce the risk of login token compromise.",title:"Confirm Session Salt Rotation?",action:"Rotate Salt",success:"Successfully rotated session salt",description:"Are you sure you want to rotate session salt? this operation will invalidate all existing login tokens and force user to login again, including your own login token."},vault:{name:"Vault DID",title:"Setup Vault",desc:"Use vault to add an extra layer of security to funds managed by this blocklet.",tip:"Input the vault address to continue, you need to prove ownership of the vault address before it can be used.",address:"Vault Address",verified:"Vault is verified",current:"Current Vault",error:{invalid:"Vault address must be a valid DID",holder:"Vault address must be a valid token holder on blockchain, token/asset/factory/stake address are not supported.",duplicate:"This vault address was used before, please use a different one",appDid:"Can not use application DID as vault address, please use a different one"},role:"Role Type",firstSeen:"First Seen",lastSeen:"Last Seen",migratedFrom:"Migrated From",migratedTo:"Migrated To",commit:{title:"Verify Vault Ownership",scan:"Use the following methods to verify the vault ownership",confirm:"Confirm using DID Wallet",success:"Vault is configured successfully"},approve:{title:"Approve Vault Change",byOwner:"Sign with blocklet owner to approve the change",byLast:"Sign with last vault to approve the change",confirm:"Confirm using DID Wallet",success:"Vault change is approved"}}},overview:{source:"Source",deployedFrom:"Deployed From",accessControl:"Access Control",viewInStore:"View It In Store"},diskInfo:{empty:"Disk info not available now!",appDir:"App Directory",dataDir:"Data Directory",logDir:"Log Directory",cacheDir:"Cache Directory"},runtimeInfo:{noRunning:"Runtime information will be available when blocklet is running!",memoryUsage:"Memory Usage",cpuUsage:"CPU Usage",uptime:"Uptime",port:"Port",processId:"Process ID"},dist:{downloadLink:"Download Link",verify:"Verify"},status:{added:"Added",waiting:"Waiting",downloading:"Downloading",extracting:"Extracting",installing:"Installing",upgrading:"Upgrading",installed:"Installed",created:"Created",starting:"Starting",running:"Running",stopping:"Stopping",stopped:"Stopped",error:"Error",deleting:"Deleting",corrupted:"Corrupted",purchasing:"Waiting for purchase",purchased:"Purchased",verifying:"Verifying purchase",resource:"Resource",failWithOldVersion:"New version failed to start, Blocklet is running on the old version"},list:{download:"Download",star:"Star",searchPlaceholder:"Search by Blocklet Name or DID"},component:{container:"Global Config",showContainer:"Show Global Config",didSpaceConfig:"Configure DID Spaces",didSpaceConfigTip:"Complete the following authorize process to store application data in DID Spaces",didSpaceConnected:"Storage being authorized to: {endpoint}",checkUpdateTitle:"Check for Updates",updateTitle:"Update Blocklets",noUpdate:"No Blocklets to update",add:"Add Blocklet",selectComponent:"Select Blocklet",selectRegistry:"Select Blocklet Store",selectRegistryTip:"You can switch blocklet store to see more components",selectInstance:"Select Instance",selectInstanceTip:"You can select an existing instance or create a new instance. Existing instances will use previously saved configuration and data",newInstance:"Create New Instance",noComponent:"No Blocklets",mountPoint:"What's the mount point?",mountPointTip:"If you set mount point to '/my-prefix', then all requests that begins with that mount point will be routed to the selected Blocklet",delete:"Delete Blocklet",deleteDescription:"This Blocklet will not be accessible after deletion. Confirm delete?",purchase:"Payment Required",tip:{stopBlocklet:"Please stop running Blocklet first",requiredBy:"The Blocklet is required by {name}"},choose:"Choose",upgrade:"Upgrade",upgradeAvailable:"Upgrade Available",needBuy:"Need Purchase",isOfficial:"Officially Certified",addWithName:"Add Blocklet To {name}",relatedComponents:"Related Blocklets",required:"Required",noDependencies:"{name} doesn't have any dependencies",installed:"Installed",installingTip:"Installing component, please wait...",installingCanCloseWindowTip:"Installing component in the background, you can safely close this window",installSuccessTip:"Congratulations, the component was installed successfully!",missDownloadTokenTip:"Cannot add paid component without valid download token",purchaseComponentSecondCheckTip:"Please present your blocklet purchase NFT to continue",installComponentError:"There was an error installing the component, please retry again",downloadComponentError:"There was an error downloading the component, please retry again",addComponentTip:{introduction:"Welcome to the Add Component Wizard",isPurchase:"You need to Verify NFT before use <b>{name}</b> as a component;",belowInformation:"Below is the information for the component: ",verifyNFT:"Please select the Verify NFT method",config:"Please fill in the configuration of the component",environment:"Please fill in the environment of the component",fromUrl:"Add Blocklet From Url",fromUpload:"Add Blocklet From Upload",uploadFailed:"Upload failed",allowedFileTypes:"Types of files allowed for upload: {types}"},addNext:"Add {name}",upgradeNext:"Upgrade {name}",setting:"Settings"},router:{urlPath:"URL Path",noRunning:"The blocklet is not currently started. Unable to access through the following address!",securitySetting:"Security Setting",checkUrlAccessible:"Check the accessibility of the address",urlInaccessible:"It may be due to network reasons, the address is temporarily inaccessible",noAccessibleUrl:"No accessible URL",domainLockTooltip:"The system generated Domain cannot be edited.",urlLockTooltip:"The system generated URL Path cannot be edited.",showAllDomains:"Show all domains",showAllDIDs:"Show all DIDs",currentDomainTip:"You are accessing the current page through this domain"},export:{title:"Export Blocklet",name:"Bundle Name",nameTip:'e.g. "my-blocklet-name" or "@my-scope/blocklet-name"',result:"What's next",exportSource:"Export Source",success:"Blocklet successfully exported",resultTipStart:"With",resultTipEnd:"you can build and publish this blocklet within minutes",uploadedComponentTip:"Directly uploaded components cannot be exported:"},migrate:{title:"Migrate Application",scan:"Connect your DID Wallet to generate a key-pair for this application",confirm:"Review this operation on your DID Wallet",success:"Your application is successfully migrated, the page will be refreshed in {sec} seconds",intro:{l1:"Click here",l2:"to migrate your application to new version (changes are disabled before the migration completes)",l3:"1. The application DID will be fully controlled from your DID Wallet.",l4:"2. The application data will be migrated, and no further changes required.",l5:"3. The new application structure will give you more flexibly when change components.",l6:"4. Please do not change component mount points before component new version is out."},tip:{duplicate:"Find duplicate component {name}, please delete useless components and migrate again",running:"Please stop blocklet before migration"}},error:{isRunning:"Blocklet is running, please stop it first",isInProgress:"Blocklet is in progress, please wait for it to finish"},publish:{store:"Blocklet Store",connectOrUpload:"Connect or Upload",projectSettings:"Project Settings",noStoreSelected:"Please select one of the existing stores or add a new store to continue",forceResourceBlocklet:"Force defined as a resource-based blocklet",autoUploadTip:"Upload release to connected Blocklet Stores automatically after creation",autoPublishErrorTip:"Auto publish to {storeName} failed: {error}",possibleSameStoreTip:"Try resolving dependency blocklets to the same Blocklet Store before each uploading when possible",needProjectId:"Please create a project first",developerInfo:"Developer Information",branding:"Branding",brandingHelp:"More information about the blocklet will be displayed in the Store",download:"Download {name}",deleteStoreTip:"Are you sure you want to remove {name} from the connect Store list?",delete:"Delete {name}",copyInstallUrl:"Copy Install URL",installToThisServer:"Install to this server",createResource:"Create Resource",blockletStudio:"Blocklet Studio",tenantScope:"Tenant",addResource:"Add Blocklet",productTitle:"Product",versionTitle:"Versioning",imgTitle:"Images",storeRule:{warning:"Warning",screenshot:"screenshot",screenshots:"screenshots",first:"1st",second:"2nd",third:"3rd",maxImageCount:"The store allows at most {max} {unit}.",minImageCount:"The store requires at least {min} {unit}.",minImageSize:"The {name} screenshot image size must be at least {width}x{height}.",logoFormat:"The logo image format just supports [{format}]."},resourceTitle:"Content",resourceSelect:"Select resource from following blocklets",resourceUpload:"Upload resource from your disk (index.html is required in the archive)",resourceDocker:"Build Blocklet from Docker",singleton:"Single instance only",singletonTip:"When singleton mode is enabled, the application cannot run multiple instances at the same time.Since your app uses singleton mode, blue-green deployment cannot be used for updates or restarts.",resourceSelectTitle:"Resource",resourceUploadTitle:"Upload",resourceDockerTitle:"Docker",resourceDockerInputTip:"Please input the docker run command",blockletEmptyTip:"There aren't any blocklets here",createBlockletTip:"You can create new blocklet through existing resources, components, and configuration in this application",createBlocklet:"New blocklet",reconnectStoreTip:"After reconnecting, a new developer will be bound. Are you sure you want to reconnect?",disconnectStoreTip:"After disconnecting, the blocklet will be removed from the store. Are you sure you want to disconnect?",componentNotRunning:"Blocklet {name} is not running, please start it first",allComponentsNotRunning:"Blocklets is not running, please start it first",releaseEmptyTip:"There aren't any releases here",resourceEmptyTip:"No available resources",viewLastRelease:"View last release",createReleaseTip:"You can create a release of the blocklet, along with release notes and resources, for other people to use",createRelease:"Create release",deleteReleaseTip:"The release cannot be recovered after deletion",createBlockletDid:"Create from DID Wallet",createReleaseSuccess:"Release created successfully",saveDraftSuccess:"Draft saved successfully",packTip:"Currently blocklets can be installed directly as applications. Components and application configurations will be automatically included in the Blocklet",resourceTip:"Currently, as a Resource Blocklet, it cannot be directly installed from the Store.",whyCantSeeInStore:"You can publish the current blocklet on the store, and it can be used all over the world",whyCantSeeResourceBlockletInStore:"You can publish the current blocklet on the store, and it can be used all over the world, Blocklet are hidden from the store listing page by default",resourceChangedWarning:"You have modified the resource, please save it in time",install:"Install {name}",installResourceTip:"Install Url:",installResourceTip2:"If you want to see more tips, please visit",installResourceHelp:"Help Document",componentIncluded:"Included",componentForceRequired:"Required",steps:{branding:"Describe the basic information of your Blocklet. This information will be presented to users in the store.",introduction:"A clear introduction can effectively highlight your Blocklet. You can use Markdown syntax to write and preview it.",resources:"Please select the resources that need to be associated with the current Blocklet, as these resources will be installed along with the Blocklet.",blocklets:"Please select the Blocklets that need to be associated and installed when installing the current Blocklet.",version:"Set the release version and the change log."},connect:{title:"Create Blocklet DID",scan:"Use the following methods to generate Blocklet DID",confirm:"Confirm using DID Wallet",success:"Blocklet DID has been generated, please continue your operation"},deleteProject:{title:"Delete {name}",scan:"Use the following methods to delete {name}",confirm:"Confirm using DID Wallet",success:"Blocklet has been deleted, please continue your operation",description:"Are you sure you want to delete the Blocklet? Here are the issues you might encounter:",tip1:"The Blocklet cannot be recovered after deletion.",tip2:"You will no longer be able to publish new versions to the deleted Blocklet, which means that the Blocklet will not be updated in the Store anymore.",tip3:"Deleting the Blocklet will not affect its currently published version in the Store."},saveDraft:"Save Draft",releaseNote:"Release Note",errorTip:{noDid:"Blocklet DID is required",noFirstDid:"Please create Blocklet DID first",noTitle:"Blocklet Title is required",noVersion:"Blocklet Version is required",inValidVersion:"Invalid Blocklet Version",noResource:"Please select upload resource to be included in the blocklet",noDescription:"Blocklet Description is required",noNote:"Release Note is required",invalidUrl:"Please input a valid URL",invalidUrlOrEmail:"Please input a valid URL or email"},uploadToStoreSuccess:"Blocklet upload to Store successfully, you need publish it in the Store",publishToStoreSuccess:"Blocklet published to Store successfully",connectStoreSuccess:"Blocklet Store connected successfully",docker:{pleaseInputDockerCommand:"Please input the docker run command",volumeTip:"Volume must start with $BLOCKLET_DATA_DIR or $BLOCKLET_APP_DIR",volumeTip2:'Volume cannot contain ".."',noAllowTheArg:"The argument is not allowed to be used in the docker run command",needCustomInput:"Setup the value when install blocklet",dockerParams:"Docker Params",nextTab:"Parse Command",dockerCommand:"Docker Command",dockerImageName:"Docker Image Name",addItem:"Add Docker Run Param",envKey:"Environment Variable Key",publishTips:"The final external port will be automatically assigned by the blocklet",volumeTips:"The volume need start with $BLOCKLET_DATA_DIR or $BLOCKLET_APP_DIR",modifyParam:"Modify Docker Run Param",modifyEnv:"Modify Environment Variable",paramDetail:"Param Detail",description:"Description",secure:"Secure",shared:"Shared",required:"Required",autoGenerated:"Auto Generated",prefix:"Prefix",path:"Path",name:"Name",portType:"Port Type",proxyBehavior:"Proxy Behavior",serviceProxy:"Service",directProxy:"Direct",dockerImageNameError:"Docker Image Name cannot contain spaces",dockerCMDError:"Docker CMD only supports simple characters"},endpoint:{tab:"Remote Blocklet",uploadToEndpoint:"You can upload the current blocklet to the specified blocklet.",addEndpoint:"Add Blocklet Endpoint",urlEmpty:"Endpoint URL cannot be empty",addFailed:"Add Blocklet Endpoint Failed: ",deleteEndpoint:"Delete Blocklet Endpoint",deleteDesc:'Confirm Delete blocklet endpoint {name} ?<br/><span style="color: {color}">*After removing this blocklet endpoint, you cannot update the apps installed from this blocklet endpoint unless you add them again.</span>',confirmDesc:"Please input {name} to delete",visitEndpoint:"Visit Blocklet",disconnectEndpointTip:"Are you sure you want to disconnect {url}? After disconnecting, the blocklet will not be uploaded to this endpoint.",deleteFailed:"Delete Blocklet Endpoint Failed",publishToEndpointSuccess:"Blocklet published to Endpoint successfully",uploadToEndpointSuccess:"Blocklet uploaded to Endpoint successfully"}}},dashboard:{nodeDid:"Node",ownerDid:"Owner",routingEngine:"Routing Engine",database:"Database",ownerNftURL:"Owner NFT",expirationLeft:"Expiration Left",startFromCrashTip:"Blocklet Server did not exit normally last time, please manually start the blocklets that needs to be run.",runtimeConfig:{blockletMaxMemoryLimit:"Blocklet Max Memory Limit",daemonMaxMemoryLimit:"Server Max Memory Limit"},document:"Learn more in our documentation"},store:{nameSort:"Name",popularSort:"Popularity",headerDescription:"Find and Install Your Blocklets",detail:{purchase:"Purchase {name}",open:"Open {name}",install:"Install {name}",upgrade:"Upgrade {name}",empty:"No introduction"},tooltip:{upgradeServer:"Blocklet requires Blocklet Server version {version}, current Blocklet Server version is {serverVersion}"},blockletRegistry:{changeFailed:"Change Blocklet Store Failed: ",addFailed:"Add Blocklet Store Failed: ",editFailed:"Edit Blocklet Store Failed: ",switchRegistry:"Switch Blocklet Store",addRegistry:"Add Blocklet Store",editRegistry:"Edit Blocklet Store",deleteRegistry:"Delete Blocklet Store",haveSameRegistry:"The same blocklet store exists",registryName:"Blocklet Store Name",registryUrl:"Blocklet Store URL",registryNameEmpty:"Blocklet Store name cannot be empty",registryUrlEmpty:"Blocklet store url cannot be empty",deleteDesc:'Confirm Delete blocklet store {name} ?<br/><span style="color: {color}">*After removing this blocklet store, you cannot update the apps installed from this blocklet store unless you add them again.</span>',confirmDesc:"Please input {name} to delete"},purchase:{title:"Purchase {name}",confirmed:"Your blocklet purchase NFT is verified",declined:"You do not provided valid the blocklet purchase NFT",waiting:"Waiting for purchase complete...",purchase:{title:"Purchase NFT",description:"Pay some token before installing this blocklet if you have not purchased this blocklet"},verify:{title:"Verify NFT",description:"Your NFT will be verified before installing this blocklet if you have purchased and hold the purchase NFT in your DID Wallet",auth:{title:"Purchase Credential Required",scan:"Connect DID Wallet to provide blocklet purchase NFT",confirm:"Review this operation on your DID Wallet",success:"Your purchase NFT is verified, and installing has started"}},auth:{title:"Purchase {name}",scan:"Scan following QRCode with your DID Wallet",confirm:"Confirm in your account",success:"Purchase NFT sent to your DID Wallet"},launch:"Launch {name}",autoLaunch:"{name} successfully purchased, redirecting to launch page..."}},setting:{saveSuccess:"Settings Saved Successfully",unSavedTip:'There are unsaved changes, please click "Save Changes" to save them.',unSavedLeaveTip:"There are unsaved changes, are you sure to leave the page?",form:{name:"Name Your Server",nameRequired:"Server description is required",namePlaceholder:"Server Name",description:"Describe Your Server",descriptionHolder:"Server Description",descriptionRequired:"Server description is required",domain:"Your Server Domain Name",domainPlaceholder:"Server Domain Name",domainRequired:"Server domain is required",ipPlaceholder:"IP",ipRequired:"IP is required",registry:"Blocklet Store",registryPlaceholder:"Blocklet store to fetch blocklets",registryRequired:"Blocklet store is required ",registerUrl:"Blocklet Launcher URL",registerUrlPlaceholder:"Input the URL of your preferred Blocklet Launcher, you can use the official one safely",webWalletUrl:"DID Wallet URL",webWalletUrlPlaceholder:'Please input the URL of your hosted "DID Wallet", you can use the official one safely',nftDomainUrl:"NFT Domain URL",nftDomainUrlPlaceholder:'Please input the URL of your hosted "NFT Domain", you can use the official one safely',enableWelcomePage:"Enable welcome page",welcome:{switchLabel:"Welcome Page"},enableSessionHardening:{switchLabel:"Enable Session Hardening",switchTips:"After enabling this option, mutation operations will require strict verification, which can improve the server's overall security."},security:{switchLabel:"File System Isolation",switchTips:"After disabling this option, the file system of the Blocklet will no longer be in isolation, which may pose a risk of malicious software damaging the file system.",warningTips:"The file system isolation feature cannot take effect. Please upgrade the node.js version (current version is {version}) to v21.6.0 or higher."},docker:{switchLabel:"Run Blocklets in Containers",switchTips:"After enabling this option, all blocklets will be run in Docker containers, which can improve the server's overall security.",notInstalled:"Can not enable container mode because docker is not installed or the current user has insufficient permission to run docker",needCloseFileSystemIsolation:"File system isolation and docker container mode runtime cannot be enabled at the same time"},dockerNetwork:{switchLabel:"Container Network Isolation",switchTips:"After enabling this option, blocklets run in a more secure manner: a blocklet cannot access the blocklet server or other blocklets across applications.",needEnableDocker:"Container mode must be enabled to enable network isolation"},upgrade:{title:"Upgrade Blocklet Server to {version}",description:"During the upgrade, your Blocklet Server will enter maintenance mode for a few minutes while the update is completed.",dialog:'Click on "confirm" to install the update. Blocklet Server will enter maintenance mode until the update is completed and return to production mode automatically.',confirm:"Upgrade",switchLabel:"Auto Update Check",enableBetaRelease:"Enable Beta Release",setup:"Preparing the upgrade",installing:"Installing Blocklet Server v{version}",restarting:"Restarting Blocklet Server",cleanup:"Migrating Blocklet Server data",verifying:"Verifying Blocklet Server v{version}",rollback:"Rollback Blocklet Server",complete:"Upgrade complete!",progress:"Upgrading {name}",check:"Check for Updates",latest:"You are running the latest version."},restart:{title:"Restart Blocklet Server",description:"During the restarting, your Blocklet Server will enter maintenance mode while the restart is completed.",dialog:'Click on "confirm" to restart. Blocklet Server will enter maintenance mode until the restart is completed and return to production mode automatically.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting Blocklet Server",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting {name}"},restartAllContainers:{title:"Restart All Container",description:"Restart all containers and keep blocklets running.",dialog:'Click "confirm" to restart all container blocklets and keep blockelts status running.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting All Container At Background",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting All Container At Background"},restartAllBlocklet:{title:"Restart All Blocklets",description:"Restart all blocklets that are running or error on this server.",dialog:'Click "confirm" to restart all blocklets at background.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting All Running Or Error Blocklets At Background",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting All Running Or Error Blocklets At Background"},register:{title:"Register to Blocklet Launcher",description:"Once added, you can launch blocklets to this blocklet server from {url}.",button:"Register"},monitor:{diskThreshold:"Send alert when disk usage exceeds (%)",diskThresholdPlaceholder:"Please set the disk usage alert threshold"}},accessKey:{listTitle:"Manage secure API access with Access Keys",tooltipTitle:"Generate and manage credentials that allow trusted systems to interact with your app programmatically. Access keys enable secure automation and seamless integration across your tools and services. ",accessKeyId:"Access Key ID",accessKeySecret:"Access Key Secret",lastUsed:"Last Used At",tip:"Please enter a name for this access key",passport:"Select a passport for the access key to grant or limit permissions",expireTime:"Set an expiration date for the access key for better security",saveSecretTip:"This is the only time that your Access Secret key can be viewed and cannot be recovered. However, you can create new access keys at any time",iKnow:"I have copied and saved the Access Secret",showSecret:"Show Secret Access Key",hideSecret:"Hide Secret",title:"Delete Access Key",descriptionNoTime:"This will permanently delete the access key {key} with name {name}, which is (never used before)",description:"This will permanently delete access key {key} with name {name}, which is (last used on {time}, {timeAge})",confirm_desc:"Please input {name} to delete",remark:"Access Key Name",remarkInvalid:"Access Key Name is required",authType:"Auth Type",resourceType:"Resource Type",resourceId:"Resource ID",component:"Component",expired:"{time} expired",simple:"Simple",signature:"Signature",signatureDesc:"Enterprise-grade security standard using cryptography. requires code integration with SDK (@blocklet/server-js), ideal for scenarios with high security requirements and critical data transmission",simpleDesc:"Lightweight Bearer Token mechanism, similar to OpenAPI Key, supports RESTful API calls and third-party service integration. No coding required, quick integration via HTTP Header, perfect for rapid development",viewSecret:"You can continue to access the secret key later in the details page of the access key",usage:"Usage"},webhook:{add:"Add Integration",delTitle:"Delete Integration",requiredError:"Please provide a valid {type}",duplicateError:"The URL already exists",confirm_desc:"Please input {name} to delete",test:"Test",description:"This will permanently delete integration with ID {id}",testSuccess:"Test message sent successfully",columns:{description:"ID",params:"Params",createdAt:"createdAt"},updateSuccess:"Update status successfully"},dns:{step1Title:"1. Log in to your domain registrar",step1Desc1:"Log in to your domain registrar, find the domain management page, and locate the name server settings page. You can search for your domain registrar at ",step2Title:"2. Find the DNS settings for {url}",step2Desc:'This may be called "DNS Management", "Advanced settings", or similar.',step3Title:"3. Add the following DNS records",step3Desc:'"Name" might be called "host", "hostname", or "alias"'},domain:{addingDomain:"Adding domain...",checkingResolvable:"Checking domain status...",cannotResolve:"{domain} can not be resolved, please check your DNS configuration",resolvedAddressError:"{domain} is not properly configured with a CNAME record pointing to {curDomain}",invalidDNSReminder:"{error}. However, you can continue to add the domain, but automatic certificate generation is not available.",continueAdd:"Continue Adding",conflictTitle:"{domain} has already been used",conflictDescription:'{domain} is already used by "{title}", by clicking confirm, the domain will be removed from "{from}" and added to "{to}".'},aigne:{config:"Config AIGNE Hub",description:"The current configuration will take effect when {name} is running. Need to save and restart the blocklet to take effect.",modelAdapter:"Model Provider",modelName:"Model Name",baseUrl:"AIGNE Hub URL",invalidUrl:"{provider} URL is invalid",revokeUrlAuthTitle:"Confirm change the {url}?",revokeUrlAuth:"Are you sure you want to change the {url}? After modification, your authorization will be invalid and need to be re-authorized!",apiKeyNotAuthorized:"The API key is not authorized. Please click the connect to AIGNE Hub button to authorize it",switchUser:"Switch User",connectTimeOut:"Connection to {provider} timed out, please try again later",desc:{modelAdapter:"The platform that provides an AI model service",modelName:"The specific model version or model name",key:"The {provider} API Key used for authentication",baseUrl:"Enter the URL of your AIGNE Hub instance (e.g., https://hub.aigne.io). Use your own if you're self-hosting.",accessKeyId:"The unique key ID for accessing the model",secretAccessKey:"The secret key paired with the access key ID",docLink:"View official documentation for more details and API reference"},restart:{title:"Restart Blocklet",connectedContent:"Your Blocklet is currently connected to {provider}. The configuration will take effect after restart. Would you like to restart now?",notConnectedContent:"Your Blocklet is currently disconnected from {provider}. The configuration will take effect after restart. Would you like to restart now?",confirm:"Restart Now",cancel:"Restart Later"},configDesc:'Integrate your blocklet with AIGNE Hub to enable secure, routed access to large language models (LLMs). Once connected, your blocklet and its components can send intelligent requests and become smarter instantly. You can use your own self-hosted <a href="{url}" target="_blank">AIGNE Hub</a> or the default public instance.',failed:"AIGNE config save failed",authorizeAigneHub:"Connect to {name}",disconnect:"Disconnect",disconnectConfirm:"Are you sure you want to disconnect from AIGNE Hub? This will remove the current AI configuration.",disconnectSuccess:"Successfully disconnected from AIGNE Hub",disconnectFailed:"Failed to disconnect from AIGNE Hub",testConnection:"Test {provider} connection",testSuccess:"Connected successfully to AIGNE Hub",testFailed:"Could not connect to AIGNE Hub. Please check the URL or your network.",check:"Check",pendingCredit:"Outstanding Charges",addCredits:"Buy Credits",transaction:"Transactions",connected:"Successfully connected",account:"Account Information",infinite:"Unlimited"}},notification:{title:"Notifications",empty:"No activities yet",viewAll:"View All",showRead:"Show Read",markAllAsRead:"Mark All as Read",markAsRead:"Mark As Read",proceed:"Proceed",checkingForUpdates:"Checking for updates...",installComponentError:"Not found uninstalled component {name}",installingComponent:"Installing component {name}",pushKit:{enable:"Enable notification",endpoint:"PushKit endpoint",endpointInvalid:"PushKit endpoint is invalid URL",testSuccess:"Test PushKit send successfully",testFailed:"Test PushKit send failed",testReceiver:"PushKit receiver",testSend:"Test push-kit send",inputTestReceiver:"Please input test receiver did",receiverRequired:"PushKit receiver is required",pushPath:"Api path for push-kit (default /api/push)",did:"PushKit Blocklet DID",customOptions:"Custom Options"},email:{signature:"Signature",signatureTooltip:"The email signature is used at the bottom to provide the recipient with key information about the sender. ",companyName:"Company Name",companyLink:"Company Link",companyAddress:"Company Address",supportEmail:"Support Email",enable:"Enable notification",emailInvalid:"Email is invalid",linkInvalid:"Link is invalid, should start with http or https",from:"Email Sender",host:"SMTP Server Host",port:"SMTP Server Port",user:"SMTP Username",secure:"Secure Connection",password:"SMTP Password",fromRequired:"Email sender is required",fromInvalid:"Email sender is invalid",receiverRequired:"Email receiver is required",receiverInvalid:"Email receiver is invalid",hostRequired:"SMTP server host is required",hostInvalid:"SMTP server host is invalid",portRequired:"SMTP server port is required",portInvalid:"SMTP server port is invalid, port should be between 1 and 65535",userRequired:"SMTP server username is required",passwordRequired:"SMTP server user password is required",testSuccess:"Test email send successfully",testFailed:"Test email send failed",testReceiver:"Email receiver",testSendEmail:"Test email send",inputTestReceiver:"Please input test receiver email",disable:"Unsubscribe email notification",disableDescription:"After unsubscribe, you will no longer receive email notifications. To receive email notifications, you can subscribe it again on this page.",unsubscribe:"Unsubscribe email notification",unsubscribeDescription:"After unsubscribe, you will no longer receive any email notifications.",subscribe:"subscribe",subscribeDescription:"To receive email notifications, you can subscribe it again on settings page."},comingSoon:"More notification channel are under construction",unsubscribe:"Unsubscribe",unsubscribeSucceed:"Unsubscribe succeeded",unsubscribeFailed:"Unsubscribe failed",unsubscribeTokenRequired:"Unsubscribe token in required",unsubscribeTokenExpired:"Unsubscribe token is expired",unsubscribeTokenInvalid:"Unsubscribe token is invalid",notificationDetails:"Notification Details",notificationPreview:"Notification Preview",receiver:"Receiver",filter:"Filter",resend:"Resend",resendLimit:"You can resend a notification up to three times daily.",sendStatus:{success:"Sent",failed:"Failed",pending:"Pending",sentTime:"Sent Time: {date}",count:"{count} ",total:"Total",reason:{enabled:"User has enabled {channel} notification",disabled:"User has not enabled {channel} notification",unavailable:"Current Blocklet has not configured {channel} notification",available:"Current Blocklet has configured {channel} notification",notSent:"Current message has not been sent to {channel}",offline:"User is offline"}},from:"From",to:"To",body:"Body",notificationTitle:"Title",createdAt:"Created At",status:"Status",system:"System",severity:"Severity",config:"Configs",selectChannels:"Select Channels",selectChannelsTip:"Select the channels to resend",resendFailedOnly:"Resend Only to Failed Channels",statistics:"Statistics",allSender:"All Senders",allSeverity:"All Severities",severityType:{info:"Info",success:"Success",warning:"Warning",error:"Error"},clear:"Clear",allDone:"You're all done",filterType:{all:"All",unread:"Unread"},viewMore:"View More"},router:{routerSetting:"Domains & URLs",certSetting:"SSL Certificates",defaultSite:"Default",urlHelperText:"URL that do not start with HTTP/HTTPS are considered relative paths",empty:"Click on Actions to setup URL Mapping",healthy:{ok:"Blocklet or service is running",error:"Blocklet or service is not running or not installed"},service:{select:"Select Blocklet Services (Optional)",what:"Blocklet Services are pipelines executed against the request before redirecting to upstream blocklet"},nonProvider:{title:"Engine Change Warning",description:"If you change engine to none, your current page may not work properly because the previous engine will be stopped, are you sure to continue?",confirm:"I understand, continue"},validation:{urlRequired:"URL is required",redirectCodeRequired:"Redirect code is required",didRequired:"Blocklet is required",pathPrefixTooLong:"The URL Prefix cannot exceed {length} characters",pathPrefixCannotBeEmpty:"The URL Prefix cannot be empty",domainRequired:"Server domain is required",invalidUrl:"Please provide a valid URL",pathPrefixRequired:"URL prefix is required",redirectUrlRequired:"Redirect URL is required",rewriteUrlRequired:"Rewrite URL is required"},domain:{addSite:"Add Site",validate:{emptyTip:"Site domain cannot be empty",suffixTip:"Site domain cannot include {suffix}"},add:{title:"Add Domain Name",description:"Please provide a valid domain name",confirm:"Add",cancel:"Cancel",blocklet:"Select Blocklet",redirect:"Where to redirect the traffic?",port:"What port does your request handler need to listen to?",portTip:"This defaults to the main port of request handler, you can customize this",type:"Traffic Handler",component:"Select Component",pageGroup:"Page Group",pageGroupTip:"This component can render any group of pages listed above, leave empty to render all pages"},update:{title:"Update Site Domain",label:"Site Domain",description:"Please provide a valid site domain"},setup:{tipStart:"Add the DNS records for the domain",tipEnd:"as per the following guidelines",recordType:"Record Type",recordValue:"Record Value"},verify:{ok:"The domain resolution is normal",notResolved:"This domain neither resolved nor accessible, please check your DNS configuration"},https:{ok:"This domain has https enabled",bad:"This domain has not enabled https"},delete:{title:"Delete Site",description:'By confirming, you will delete your existing "{name}" site. Type "{name}" below and select Delete to complete the change, or select Cancel if you want to leave your site',confirm_desc:"Please input {name} to confirm"}},domainAlias:{custom:"Custom domain",noCustom:"No custom domain",noCustomTip:"No custom domain is configured with your website. For enhanced security and better user experience, we recommend configuring your own custom domain. Click below to get started.",nftDomain:"Automatic config with DID Names",showTipHint:"How do I configure domain name resolution?",add:{title:"Add Additional Domain",tips:"You can enter a domain name purchased from DID Names or any other domain. If it is a DID Domain, you must present the DID Domain NFT to proceed.",domainDescription:"Please provide a valid domain name",forceTip:"Force add if domain name already exists",helperText:"If an HTTP or HTTPS URL is entered, it will be automatically converted into a domain name.",isDidDomainError:"This domain is a DID Domain. Please add it using the method for automatic domain configuration."},addCustomDomain:{name:"Custom Domain"},addDomainNFT:{showNFT:"Configure domain automatically",tips:"You can enter a domain purchased from DID Names. If a DID Domain is detected, you must present the DID Domain NFT to continue.",connect:{title:"Connect DID Names to {appName}",scan:"Use one of the following methods to connect {domain} to {appName}",confirm:"Confirm in your account",success:"Authorization Successful"},authorizeFailed:"Failed to get the domain NFT info, please try again!",buyTip:"DID Names will do the domain name resolution automatically, no need to configure it manually, and the blocklet will update the resolution record of the domain name automatically when needed. If your don't have DID Domain NFT yet, ",buy:"Buy DID Domain",topLevelDidDomainHint:"For DID Domain, if you enter a top-level domain (e.g. example.com), it will automatically be configured as www.example.com"},delete:{title:"Are you sure you want to delete?",description:'After delete "{domain}", access to that alias may not be handled properly.',confirmPlaceholder:'Please input "{domain}" to delete'}},domainSecurity:{title:"Domain Security",cors:{title:"Allowed CORS Domains",description:'Domain list that can send cross origin requests to {name}, comma separated, use "*" to allow anyone, which is not recommended',domainInvalid:"Please input a valid list of domain names"}},rule:{add:{title:"Add URL Mapping",confirm:"Add",pathPrefix:"What's the URL Prefix?",pathPrefixTip:"If you set prefix to '/my-prefix', then all requests that begins with that prefix will be routed to the configured blocklet",blocklet:"Which Blocklet will be handling those requests?",port:"Which port of the blocklet will be handling requests?",portTip:"This defaults to the main port of blocklet, if your blocklet listens on multiple ports, you can customize this",responseType:"Response Type",responseBody:"Response Content",responseBodyTip:"Paste your response content here, should not exceed 4096 characters",responseBodyRequired:"Response content can not be empty"},delete:{title:"Delete URL Mapping",description:'By confirming, you will delete your existing "{name}" URL Mapping. Type "{name}" below and select Delete to complete the change, or select Cancel if you want to leave your URL Mapping.',confirm_desc:"Please input {name} to delete",cancel:"Cancel"},update:{title:"Update URL Mapping",confirm:"Yes, Update",cancel:"Cancel"}},cert:{name:"Certificate Name",domain:"Domain Name",action:"Action",commonName:"Common Name",boundDomains:"Domains",source:"Source",expired:"Expired",leftDays:" days left",issuedOn:"Issued On",expiryOn:"Expiry On",fingerprintAlg:"Fingerprint Algorithm",validityPeriod:"Validity Period",matchedSites:"Matched Sites",upload:"Manual Upload",publicCertHelperText:"Public certificates can be downloaded",nonPublicCertHelperText:"Non-public certificates cannot be downloaded",protectedCertHelperText:"Protected certificates cannot be edited",unprotectedCertHelperText:"Unprotected certificates can be edited",issuing:"Certificate being generated",sourceTypes:{upload:"Manual Upload",lets_encrypt:"Let's Encrypt"},table:{nodata:"No data"},delete:{title:"Delete Certificate",description:"Confirm delete certificate of domain {domain}? Deleting it may affect related services. Please confirm it's safe before proceeding with the deletion.",confirm:"Confirm"},nginx:{title:"Update Certificate",titleAdd:"Add Certificate",pem:"SSL Certificate File",pemTip:'Please drop your server certificate file here, it should ends with ".pem" or ".crt"',key:"Private Key File",keyTip:'Please drop your server private key file here, it should ends with ".pem" or ".key"',confirm:"Save",cancel:"Cancel",invalidFile:"You have selected an invalid file",empty:"No file selected yet",source:"Source",sourceTypes:{upload:"Manual Upload",lets_encrypt:"Let's Encrypt"}},detail:{title:"Certificate Details"},genLetsEncryptCert:{title:"Generate Let's Encrypt certificate",dnsTip:"Please make sure the domain name has point to the current Blocklet Server.",description:"Adding a certificate will make the service more secure, and Blocklet Server will automatically renew the certificate before it expires."}},gateway:{reqLimit:{title:"Request Limiting",switchLabel:"Enable concurrent request limiting for reliable performance",global:"Limit concurrent requests handled by the gateway to {global} per second (global limit)",burstFactor:"The burst factor for the rate limiting, applied to both global and per-IP limits, (global: {global}, per-IP: {rate})",burstDelay:"The delay when requests burst and exceed the per-IP limit ({delay} seconds)",rate:"Limit concurrent requests by IP to {rate} per second (per-IP limit)",methods:"Limit concurrent requests by IP for the following methods"},cacheEnabled:{title:"Gateway Cache",switchLabel:"Enable gateway cache to boost performance"},blockPolicy:{title:"Request Blocking",switchLabel:"Block bad requests to protect your server",addItem:"Add Item",blacklistDesc:"Requests from these IPs will be blocked from accessing this Server and all Blocklets",inputPlaceholder:"Enter IP address, CIDR range, or URL",invalidItem:"Invalid IP address, CIDR range, or URL",autoBlocking:{switchLabel:"Block bad requests by realtime detection",windowSize:"The time window size for counting requests (seconds)",windowQuota:"The maximum number of requests (per IP) allowed within the window",blockDuration:"The duration to block user by IP when quota exceeded within the window (seconds)",statusCodes:"The status codes to be checked"}},proxyPolicy:{title:"Proxy Policy",switchLabel:"This server is running behind proxies",trustRecursive:"Trust proxies recursively",trustRecursiveDesc:"Use the leftmost IP in the X-Forwarded-For chain",trustedProxies:"Trusted Proxies",trustedProxiesDesc:"Requests from these IPs will be trusted to get the real client IP",realIpHeaderLabel:"Client IP Header",realIpHeaderDesc:"If the Blocklet Server is running behind proxies such as CloudFront, you can set the header of the client's real IP here.",addItem:"Add Item",inputPlaceholder:"Enter IP address, CIDR range",invalidItem:"Invalid IP address, CIDR range"},wafPolicy:{title:"Web Application Firewall",switchLabel:"Detect and block bad requests with ModSecurity",modeDesc:"The mode for ModSecurity",docDesc:"Check the documentation for how to setup ModSecurity",mode:{detectOnly:"Detect Only (will not block requests)",on:"On (will block requests)"},logLevelDesc:"The log level for ModSecurity (0-9), 0 means disable audit log",inboundAnomalyScoreThresholdDesc:"The inbound anomaly score threshold (1-100), lower value means more strict",outboundAnomalyScoreThresholdDesc:"The outbound anomaly score threshold (1-100), lower value means more strict"}}},noMatch:{desc:"We can't find the page that you're looking for"},health:{connectionErrorTip:"Blocklet Server can't connect to the network, please check if Blocklet Server has been stopped or there is a network issue",connectionRecoveryTip:"Blocklet Server connectivity has been recovered",connectionStoppedTip:"Blocklet Server has been stopped",wrongAccessUrlTip:"Blocklet Server access address is wrong, please use the correct access address"},embed:{iconTip:"Click to view subscription details"},debug:{title:"Your Blocklet Server is up and running!"},team:{add:"Add New",invite:{action:"Invite New",setting:"Invite Settings",enabled:"Disable this setting to restrict new user invites to owner/admin only",disabled:"Enable this setting to allow any user to invite new users",inviter:"Invited By"},member:{name:"Name",passport:"Passport",passports:"Passports",lastLogin:"Last Login",lastLoginIp:"Last Login IP",openProfile:"View Profile",source:"Register Source",source_derived:"Derived from oauth",source_wallet:"DID Wallet",filter:"Filter by",blockAccess:"Block Access",blockAccessDescription:"The user will not be able to connect to this application",allowAccess:"Allow Access",allowAccessDescription:"The user will be able to connect to this application",updateRole:"Update Role",removeUser:"Remove User",removeUserDescription:'Confirm remove user "{did}" and all its related data (connected accounts, passports, login sessions, etc.)? This action cannot be undone.',removeUserSuccess:"User removed successfully",revokePassport:"Revoke Passport",revokePassportDescription:"Once the passport is revoked, the passport holder can not use it to login again, are you sure to continue?",enablePassport:"Enable Passport",enablePassportDescription:"Once the revoked passport is enabled again, the passport holder can use it to login again, are you sure to continue?",passportPermissionTitle:"The passport has the following permissions:",search:"Search Member",onlyApprovedMember:"Show Approved Only",inviteDialog:{createInviteLink:"Generate Invitation Link",createSuccessTip:"The invitation link is successfully created, click to copy and send the link to the invited member, please note that this invitation link can not be reused and will expire on {expireDate}"},error:{passportEmpty:"Passport should not be empty"},connectedAccounts:"Connected Accounts",connections:"Connections",federated:"Federated",switch:{did:"Switch DID",profile:"Switch Profile",passport:"Switch Passport"},settings:{notification:"Notifications",email:"Send email to me when some events happen",wallet:"Send notification to my wallet when some events happen",phone:"Send text message to me when some events happen",webhook:"Webhooks",add:"Add new webhook",url:"Custom URL",slack:"Slack Webhook",tested:"Test message sent"},activeUserSessions:"Active User Sessions",forceLogout:"Force logout",forceLogoutDescription:"Confirm to force logout this user?",forceLogoutRemoveDescription:"Confirm to force logout this user (Also remove all user-sessions)?"},transferNode:{name:"Transfer Ownership",inviteDialog:{title:"Transfer Blocklet Server",tips:{progress:"Transfer the server needs to be accepted by the receiver to complete the transfer operation, and once the receiver accepts it, you cannot log in to the server with the current passport again.",newOwnerPermissions:"The new Owner will have the right to manage all operations such as members, passports, and Blocklets.",revoke:'If you want to withdraw the transfer invitation, you can delete the invitation link in the "Team -> Members -> Inviting" page.'},createInviteLink:"Generate Invitation Link",createSuccessTip:"The invitation link is successfully created, click to copy and send the link to the invited member, please note that this invitation link can not be reused and will expire on {expireDate}"},delegateDialog:{title:"Authorize Required",scan:"Use the following methods to authorize server to transfer server ownership NFT.",confirm:"Confirm in your account",success:"Authorization Successful"}},transferApp:{name:"Transfer Ownership",description:"You can transfer the ownership of your application to another wallet or another person.",transferDialog:{title:"Transfer Application",tips:{progress:"Transfer the application needs to be accepted by the receiver to complete the transfer operation, and once the receiver accepts it, you cannot log in to the application with the current passport again.",newOwnerPermissions:"The new Owner will have the right to manage all operations such as members, passports, and settings."},createTransferLink:"Generate Transfer Link",createSuccessTip1:'The transfer link is successfully created, the invitee must use <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> to receive the app ownership',createSuccessTip2:"Please click to copy and send the link to the invited member, please note that this transfer link can not be reused and will expire on {expireDate}. Your transfer link will only be shown once and will not be viewable again after closing this dialog",createSuccessTip3:"After the transfer is successful, the application will automatically restart to make the changes take effect",link:"Transfer Link",iKnow:"I have copied and saved the link"},connectDialog:{title:"Authorize Required",scan:"Use the following methods to authorize application to transfer ownership.",confirm:"Confirm in your account",success:"Authorization Successful"},receiveDialog:{title:"Receive Application Ownership",scan:"Use the following methods to receive the application ownership.",confirm:"Confirm in your account",success:"Receive Ownership Successfully"},successTitle:"You have become the new owner of this application",visitDashboard:"Visit Application Dashboard"},permission:{create:{title:"Create Permission",description:`Format: <action>_<resource>
|
|
1785
|
-
e.g. 'query_user', 'mutate_user'`},delete:{title:"Delete Permission",description:"Confirm delete {name}?"},error:{actionEmpty:"action cannot be empty",resourceEmpty:"resource cannot be empty",permissionTooLong:"permission cannot exceed {length} characters",descriptionTooLong:"description cannot exceed {length} characters"}},passport:{sourceMaps:{recover:"Recovered",issue:"Issued",invite:"Invited",trusted:"Trusted"},related:"Related Passports",operationLogs:"Operation Logs",owner:"Owner",status:"Status",statusMap:{valid:"Valid",revoked:"Revoked",expired:"Expired"},view:"Manage Passports",create:{title:"Create Passport",titleTip:"Title cannot be modified after created, recommended within 14 letters"},bind:{title:"Bind Permission",roleTip:"You will get all the permissions of the selected passport after binding",permissionTip:"You will get the selected permissions after binding",transferLeftTitle:"All permissions",transferRightTitle:"Granted permissions"},delete:{title:"Delete Passport",description:"The passports holds by user will lose all permissions after it is deleted. Are you sure to continue?"},error:{titleEmpty:"title cannot be empty",titleTooLong:"title cannot exceed {length} characters",descriptionEmpty:"description cannot be empty"},issuance:{pending:"Pending",create:{title:"Generate Link"},delete:{title:"Delete Receive Link",description:"Confirm delete {link}?"}},issue:"Issue Passport",disableIssuance:"Disable Passport Issuance",enableIssuance:"Enable Passport Issuance",disableIssuanceTip:'"Issue Passport", "Invite Member" and other operations will be disabled',enableIssuanceTip:'"Issue Passport", "Invite Member" and other operations will be enabled',trustedPassportIssuers:"Trusted Passport Issuers",trustedPassportIssuersTip:"Manage trusted passport issuers that can be used to issue passport",trustedIssuers:"Trusted Issuers",trustedFactories:"Trusted NFT Collections",trustedFactoriesTip:"Manage trusted NFT Collections that can be used to exchange for a passport",searchFactoryAddress:"Search Collection DID",configFactories:"Config Trusted NFT Collections",configFactoriesTip:"Allow users to exchange NFTs for passport",factoryAddress:"NFT Collection Address",factory404:"NFT Collection not found",factoryAddressTip:"The NFT Collection address must exist on ArcBlock Main Chain",role:"Passport Type",ttl:"Passport Expire Policy",ttlNever:"Never Expire",ttlMint:"From NFT Purchase",ttlExchange:"From Passport Exchange",ttlNeverTip:"The passport will be valid until revoked",ttlMintTip:"The passport will be valid from the time the NFT is purchased until you specified ttl or revoke",ttlExchangeTip:"The passport will be valid from the time user successfully exchanged until you specified ttl or revoke",ttlTip:'"365d" means 365 days, you can also use "30 days" or "24h"',validUntil:"Valid until: {date}",externalPassport:"External Passport",notTrustedIssuerTip:"The passport cannot be used because the issuer is not on the list of trusted issuers",issuerDid:"Issuer DID",addNodeToTrustedIssuers:"Add current server as a trusted passport issuer",revoked:"Revoked",noPermission:"No permission to perform this operation",shouldNotDeleteCurrent:"You can not revoke your passport currently in use",mappingRule:"Mapping rule",defaultRule:"Default rule",search:"Search Passport",searchIssuerDid:"Search Issuer DID",issueBy:"Issue by {name}",configColor:"Config Passport Color",configColorTip:"Customize the color of the passport",color:"Passport Color",description:"Use this passport to connect {teamName} as {title}",displayBuiltin:"Builtin",displayCustom:"Custom",typesTip:"Customize the types of the passport, split by comma",issuanceDate:"Issuance Date: {date}",issuanceTime:"Issuance Time",relatedDescription:"The current passport is recovered from the following passport",passportExpireTime:"Set an expiration date for the Passport",customExpireTime:"Custom Expire Time",customExpireTimeIsInvalid:"Custom Expire Time is invalid"},inviting:{link:"Invite Link",inviter:"Inviter",delete:{title:"Delete Invite Link",description:"Confirm delete {link}?"},disabledTip:"Invitation is not enabled"},whoCanAccess:{all:{title:"Accessible to all"},owner:{title:"Owner only"},invited:{title:"Invited user only"}},userFollowers:{title:"Follow",follow:"Follow",unfollow:"Unfollow",followersOnly:"Only visible to followers",followers:"Followers",following:"Following",emptyFollowing:"No users you are following yet.",emptyFollowers:"No followers yet.",emptyInvitees:"You have not invited anyone yet.",invitees:"Invitees"},orgs:{explain:"Allows users to create and join organizations, assign roles and manage resources.",description:"Description",deleteConfirm:"Confirm delete {name}?",members:"Members",myCreated:"My Created",myJoined:"My Joined",myCreatedEmpty:"You have not created any organizations yet.",myJoinedEmpty:"You have not joined any organizations yet.",deleteConfirmDescription:"Deleting this organization will remove all roles and resources linked to it. Users will remain in the system but lose their roles in this organization. This action cannot be undone.",active:"Active",deleteOrg:"Remove Current Organization",invitedAt:"Invited at: {time}",joinedAt:"Joined at: {time}",createNew:"Create New Organization",viewAll:"View All Organizations",validate:{nameEmpty:"Name cannot be empty",nameTooLong:"Name cannot exceed {length} characters",descriptionTooLong:"Description cannot exceed {length} characters"},mutate:{title:"{mode} Organization",name:"Organization Name",createSuccess:"Organization created successfully",updateSuccess:"Organization updated successfully",orgNotEnabled:"Organization is not enabled",maxMemberPerOrg:"The organization can invite up to {maxMemberPerOrg} members",maxOrgPerUser:"You can create up to {maxOrgPerUser} orgs"},invite:{chooseUsersToInvite:"Choose users to invite",success:"Invitation sent to users",pleaseSelectUsers:"Please select users",pleaseSelectRole:"Please select role",inviteExternalUsers:"Invite external users",failed:"{count} users invitation failed, please try again later",remove:"Remove user",removeSuccess:"User removed successfully",limit:"Limit",limitTip:"Limit org members and orgs per user.",maxMembers:"Max members per org",maxOrgs:"Max orgs per user",maxMembersTip:"The maximum number of users that can be invited for this organization",inviteLinkSendToEmail:"Invitation link has been sent to email ({email}), please check",enterEmailAddress:"Please enter email address",inviteTitle:"Invite users to join {orgName}"},member:{removeMemberConfirm:"Confirm remove {name}?",removeMemberConfirmDescription:"After removal, the user will lose the roles and permissions in the organization. This action cannot be undone.",removeInvitingMember:"Confirm cancel invite {name}?",removeInvitingMemberDescription:"After removal, the user will not be able to join the organization, and needs to be reinvited. This action cannot be undone."}}},launcher:{provider:"Provider",adminUrl:"URL"},session:{blockAccess:"You have been blocked from access this server"},launchBlocklet:{appInfo:"Application Information",appInfoDesc:"Confirm the application information",author:"Application Author: {author}",setup:"Setup Blocklet",redirect:"Redirect",alreadyConsumed:"The launch session has been consumed",redirectToLauncherBlocklet:"Redirecting to Launcher Blocklet",alreadyRunning:"Application {name} is already running on this Blocklet Server",alreadyInstalled:"Application {name} is already installed on this Blocklet Server",alreadyExists:"This application already exists, redirecting...",purchased:"Already Purchased",purchase:"Purchase",nextStep:"Next Step",agreement:"License Agreement",agreeAll:"Agree & Continue",installing:"Installing {appName} on {serverName}, it may take minutes to complete, please stay tuned...",redirecting:"{appName} is successfully installed, now starting...",start:"Launching",launch:"Install Blocklet to Server",launchSuccess:"{appName} is successfully launched!",installSuccess:"Blocklet is successfully installed and launched on {serverName}",openInRegistry:"View in Blocklet Store",subTitle:"Ready to install Blocklet {appName} on {serverName}",installingSubTitle:"{appName} installing",access:"Open the application",installRelatedComponents:"Install related Blocklets",canNotInstall:"Can not install",dockerBlockletCantInstall:"Can not install the Blocklet, because the Blocklet Server has not enabled Docker or Docker Network",viewApplication:"View Application",newVersion:"New Version",newVersionDesc:"The application already exists, but the current version can be upgraded",upgradeNow:"Upgrade Now",later:"Later",introduction:"Introduction",welcome:"Welcome to the Blocklet Launch Wizard",accept:"I agree to the Blocklet EULA",license:"Application License",next:"Agree to the EULA and continue",purchaseApp:"Purchase Blocklet",setupAppDesc:"Initialize your Blocklet",launched:"Complete",confirmInstall:"Confirm Installation",dialog:{title:"Become App Owner",nftFreeDescription:"Please present app space NFT and create app account to continue",nftPaidDescription:"Please present app space NFT and app purchase NFT to continue",freeDescription:"Please create app account to continue",paidDescription:"Please present app purchase NFT and create app account to continue",confirm:"Confirm in your account",success:"Authorization Successful",authorizationTimeout:"Authorization timeout"},waiting:{verifying:"Verifying app meta...",downloading:"Downloading app bundle...",downloadingComponent:"Downloading {name}",extractingComponent:"Extracting {name}",extracting:"Extracting app bundle...",installing:"Installing app components...",installed:"Installed",starting:"Starting the app...",done:"Your app is launching...",parsing:"Parsing app meta...",initializing:"Initializing app configuration...",initializingOwner:"Initializing app owner...",creatingSecurityRules:"Creating default security rules...",assigningDomain:"Assigning default domain...",waitingForDomain:"Waiting for default domain to take effect..."},error:{loadMetaFailed:"Load app information failed",appMetaNotFound:"No information found for this app",downloadFailed:"Failed to download the app, please try again",installFailed:"Failed to install the app, please try again",startFailed:"Failed to start the app, please try again",launchFailed:"Failed to launch the app, please try again",installedButStopped:"The app is installed successfully, but cannot be started. You can start it manually after resolving blocking issues",installedButError:"The app is successfully installed, but failed to start",restoreFailed:"Failed to restore app, please try again",resourceBlocklet:"This blocklet cannot be launched directly, but you can add it into existing application."},steps:{introduction:"Introduction",installApp:"Install Application",purchaseSpace:"Purchase Space",prepareSpace:"Prepare Space"},nav:{myApps:"My Apps",viewMyApps:"View My Apps"},withoutWallet:"Skip DID Wallet Connection",nwFailed:"Failed to retrieve workflow."},issuePassport:{title:"Receive Passport",description:"Use the following methods to receive the passport issued by {name}",dialog:{scan:"Use the following methods to claim the passport",confirm:"Confirm in your account",success:"The passport has been successfully added in your wallet",loginWithPassport:"Connect with this Passport",autoClose:"Page will auto close in {seconds}s",autoJump:"Page will auto jump in {seconds}s"}},lostPassport:{title:"Lost Passport",description:"The owner of {name} can use the following methods to retrieve the passport, members please contact the owner to reissue the passport",recoverDialog:{title:"Recover passport",scan:"Use the following methods to retrieve your passport",confirm:"Confirm on your DID wallet",success:"Successfully retrieved"},receiveDialog:{title:"Receive passport",scan:"Use the following methods to receive the passport",confirm:"Confirm on your DID wallet",success:"Successfully received"},return:"Cancel retrieval operation, return to homepage",recoverPassport:"Recover passport",receivePassport:"Receive passport"},invite:{message:"{name} invite you to be the {role} of {dapp}",success:"You have successfully joined {dapp}",receive:"Receive with",validUntil:"Valid until:",viewPermission:"View Permission",emptyPermission:"Empty Permission",open:"Open",description:{step1:"Download and setup your {wallet}",step2:"Click above button to receive passport",step3:"Login in {dapp} with received passport"},transferNFTDialog:{title:"Accept Blocklet Server {name}",scan:"Connect the Launcher to complete the reception of the Blocklet Server.",confirm:"Review this operation on your DID Wallet",success:"Connect successfully, waiting for confirmation of receiving the Server"}},receive:{dialog:{title:"Receive passport",scan:"After receiving the passport, you can use the passport to log in to the application",scanWithDid:"Please use {did} account to receive this passport. After receiving the passport, you can use the passport to log in to the application",confirm:"Confirm in your account",success:"You are successfully connected"}},navigation:{navigation:"Navigation",access:"Access",members:"Members",passport:"Passport",analytics:"Analytics",dashboard:"Dashboard",studio:"Studio",blockletService:"Blocklet Service",actionFailed:"Action Failed",form:{themeConfig:"Theme Configuration",contentConfig:"Content Configuration",title:"Title",titlePlaceholder:"Please input navigation title",titleTooLong:"Title length should small than {len}",description:"Description",descriptionPlaceholder:"Please input navigation description",descriptionTooLong:"Description length should small than {len}",icon:"Default Icon",iconPlaceholder:"Please select an icon",invalidIcon:"Icon is invalid",findMoreIcon:"Find more icons",link:"Link",linkPlaceholder:"Please input navigation link",invalidLink:"Link is invalid",component:"Component",componentPlaceholder:"Please select navigation component",role:"Role",rolePlaceholder:"Please select navigation role",locale:"Locale",localePlaceholder:"Please input locale need to add",localeExists:"{value} is already exists",activeIcon:"Active Icon",activeColor:"Active Color",color:"Default Color",colorPlaceholder:"e.g. #FF0000",invalidColor:"Invalid hex color",searchIcons:"Search for Icons",searchIconsPlaceholder:"e.g. mdi:home"},action:{add:"Add navigation",addSub:"Add sub navigation",edit:"Edit navigation",hide:"Hide navigation",show:"Show navigation",del:"Delete navigation",new:"New",noAddSub:"Uninstalled component can't add sub navigation",noEdit:"Uninstalled component can't edit",noDel:"Not allowed delete built-in navigation",reset:"Reset",restConfirmTitle:"Reset {section} navigation to default?",restConfirmDesc:"Your custom navigation will be cleared and restored to the default items.",resetSuccessful:"Reset successful",delTabBarTitle:"Do you want to delete this tab?",delTabBarDesc:"It will no longer appear in your bottom navigation, but you can add it back anytime."},didConnect:"DID Connect",didSpaces:"DID Spaces",website:"Website",operations:"Operations",integration:"Integrations",developer:"Developers"},storage:{spaces:{title:"DID Spaces",tips:"Tips",label:"Enter DID Spaces Gateway",connected:{title:"Connected DID Spaces",tag:"Connected"},connectedWithName:"You have successfully connected to {name}",addedWithName:"You have successfully added {name}",connects:"Connect",reconnect:"Reconnect",addressCannotEmpty:"Address cannot be empty",addressNotValid:"{url} is not a valid address",authorize:{title:"Connect {appName} to DID Spaces",scan:"Use the following methods to allow the app {appName} to connect to DID Spaces",success:"Connected successfully"},provideNFT:{title:"Please show the DID Spaces NFT for {appName}",scan:"Use the following methods to allow the app {appName} show DID Space NFT",success:"Connected successfully"},backup:{title:"Backup",records:"Backup records",without:"Without backup",succeeded:"Backup succeeded",failed:"Backup failed",lastBackup:"Last backup time",lastBackupTip:'It has been {time} since your last successfully backup, please check your backup settings in the "DID Spaces" tab.',noBackup:"No backup",noBackupTip:"No backup has been created yet. We recommend setting up regular backups to protect your data and settings"},autoBackup:{title:"Auto backup",enabled:"Automatic backup is on",disabled:"Automatic backup is off"},autoCheckUpdate:{title:"Automatically check for new version notification",enabled:"Automatically check for new version is on",disabled:"Automatically check for new version is off"},backupSuccessfully:"Backup successfully",restore:"Restore",restoreSuccessfully:"Restore successfully",gateway:{title:"Gateway",select:"Select a DID Spaces",add:{title:"Add DID Spaces",label:"Enter the url of the DID Spaces",failed:"Add DID Spaces failed",invalidUrl:"Invalid DID Spaces gateway url",duplicate:"{name} is already connected to this blocklet"},delete:{title:"Disconnect",succeeded:"Successfully disconnected from DID Spaces {name}",failed:"Failed to disconnect from gateway",failedForSelected:"Unable to disconnect from the selected DID Spaces",descForBackup:`After disconnecting from {name}, you will no longer be able to back up Blocklet to this DID Space. Are you sure you want to disconnect?
|
|
1784
|
+
Ratio: 16:9`,splashLandscape:"Splash Landscape",splashPortraitDesc:"Displayed when the blocklet is launched. PNG or JPG format, recommended aspect ratio 9:16 for portrait and 16:9 for landscape (max 5MB)",ogImage:"Open Graph Background",ogImageDesc:"Used in: social media sharing background",clusterSize:"Instance count when run this blocklet in cluster mode",copyrightOwner:"Copyright Owner",copyrightYear:"Copyright Year",copyrightDesc:"Used in: website footer",advanced:"Advanced Configuration",errorReason:"Blocklet start failed, but you can still access it by clicking the button below",deletable:{name:"Delete Protection",enable:"This blocklet can NOT currently be deleted",disable:"This blocklet can currently be deleted"},tenantMode:{name:"Multi-Tenant Mode",multiple:"This blocklet runs in multiple tenant mode, data should be isolated for each tenant",single:"This blocklet runs in single tenant mode, all data are shared"},walletType:{name:"Wallet Type",description:"Blocklet instance wallet type, will change the derived DID"},languages:"Supported Languages",selectLanguagesTip:"Adjust the order by removing and re-adding",languagesSearch:"Search by Country's Local Name, English Name, or ISO Code...",passportColor:"Passport Color",appUrl:"App URL",appUrlDesc:"Used in: sitemap and social sharing",access:{title:"Who can access?",description:"Choose how you want to control access to your application.",useDefault:"Use default",defaultDescription:"Use the application's default configuration",whoCanAccess:{all:{title:"Open to Everyone",description:"Anyone can access this blocklet without authenticating."},owner:{title:"Owner-Only Access",description:"Only the blocklet owner can access it."},invited:{title:"Invite-Only Access",description:"Only invited members can access it."}},publicToStore:"Public On Store",publicInstanceTip:"The access address of this blocklet will be displayed in the Store (along with your DID for accepting donations)",updatedTip:"Access Control Modified"},changedTip:"Configuration updated, please restart Blocklet",missingRequired:"Missing required configuration to start the blocklet",gotoFix:"Go to fix",environment:{key:"Configuration key",value:"Configuration value",keyValueRequired:"Configuration key and value must be specified",invalidKey:"Configuration key must not start with BLOCKLET_ or COMPONENT_",deleteForbidden:"This configuration is required and should not be deleted",tip:"Configurations prefixed with BWA_ should not contain sensitive information because they will be sent to the browser"},dangerZone:"Danger Zone",migrate:{button:"Change DID",title:"Confirm DID Change",description:"If you are launching with server managed wallet, you can change application DID to your own wallet.",confirm:"Are you sure you want to change the application DID? This operation will invalidate all existing sessions and force users to login again, including your own session."},sharedToAllComponents:"Will be shared to all components",session:{period:"Session validity period",profile:"User profile requirements",ttl:"User will be asked to login again if they have no activity on this site for {day} days",day:"{day} day",days:"{day} days",cacheTtl:"Cache duration for user session data (in seconds)",fullNameEnabled:"Request user name on login (enabled by default)",avatarEnabled:"Request user avatar on login (enabled by default)",emailEnabled:"Request user email on login",emailRequireVerified:"Require user email to be verified before login",emailRequireUnique:"Require user email to be unique across all users",phoneEnabled:"Request user phone number on login (not supported yet)",phoneRequireVerified:"Require user phone number to be verified before login",phoneRequireUnique:"Require user phone number to be unique across all users",emailTrustOauthProviders:"Trust OAuth providers for email verification status",enableDomainBlackList:"Enable email domain black list (reject listed email domains)",enableDomainWhiteList:"Enable email domain white list (only allow listed email domains to login)",addDomain:"Add source to fetch the list (in plain text format, one domain per line)",enableBlacklist:"Enable login token & refresh token revocation",experimentalSettings:"Experimental Settings"},clearCache:{name:"Cache Management",purpose:"Manage files cached in router and blocklet services",title:"Confirm Cache Clear?",action:"Clear Cache",success:"Successfully cleared {count} cache entries",description:"Are you sure you want to clear cached files in router and blocklet service? this operation may cause slight performance downgrade in the short term"},rotateSessionKey:{name:"Session Salt Rotation",purpose:"Session salt is a random value used to enhance the security of session tokens. Click the button to rotate the session salt manually, which helps reduce the risk of login token compromise.",title:"Confirm Session Salt Rotation?",action:"Rotate Salt",success:"Successfully rotated session salt",description:"Are you sure you want to rotate session salt? this operation will invalidate all existing login tokens and force user to login again, including your own login token."},vault:{name:"Vault DID",title:"Setup Vault",desc:"Use vault to add an extra layer of security to funds managed by this blocklet.",tip:"Input the vault address to continue, you need to prove ownership of the vault address before it can be used.",address:"Vault Address",verified:"Vault is verified",current:"Current Vault",error:{invalid:"Vault address must be a valid DID",holder:"Vault address must be a valid token holder on blockchain, token/asset/factory/stake address are not supported.",duplicate:"This vault address was used before, please use a different one",appDid:"Can not use application DID as vault address, please use a different one"},role:"Role Type",firstSeen:"First Seen",lastSeen:"Last Seen",migratedFrom:"Migrated From",migratedTo:"Migrated To",commit:{title:"Verify Vault Ownership",scan:"Use the following methods to verify the vault ownership",confirm:"Confirm using DID Wallet",success:"Vault is configured successfully"},approve:{title:"Approve Vault Change",byOwner:"Sign with blocklet owner to approve the change",byLast:"Sign with last vault to approve the change",confirm:"Confirm using DID Wallet",success:"Vault change is approved"}}},overview:{source:"Source",deployedFrom:"Deployed From",accessControl:"Access Control",viewInStore:"View It In Store"},diskInfo:{empty:"Disk info not available now!",appDir:"App Directory",dataDir:"Data Directory",logDir:"Log Directory",cacheDir:"Cache Directory"},runtimeInfo:{noRunning:"Runtime information will be available when blocklet is running!",memoryUsage:"Memory Usage",cpuUsage:"CPU Usage",uptime:"Uptime",port:"Port",processId:"Process ID"},dist:{downloadLink:"Download Link",verify:"Verify"},status:{added:"Added",waiting:"Waiting",downloading:"Downloading",extracting:"Extracting",installing:"Installing",upgrading:"Upgrading",installed:"Installed",created:"Created",starting:"Starting",running:"Running",stopping:"Stopping",stopped:"Stopped",error:"Error",deleting:"Deleting",corrupted:"Corrupted",purchasing:"Waiting for purchase",purchased:"Purchased",verifying:"Verifying purchase",resource:"Resource",failWithOldVersion:"New version failed to start, Blocklet is running on the old version",hasSomeErrors:"{blocklets} is not fully running, possibly due to issues or pending startup."},list:{download:"Download",star:"Star",searchPlaceholder:"Search by Blocklet Name or DID"},component:{container:"Global Config",showContainer:"Show Global Config",didSpaceConfig:"Configure DID Spaces",didSpaceConfigTip:"Complete the following authorize process to store application data in DID Spaces",didSpaceConnected:"Storage being authorized to: {endpoint}",checkUpdateTitle:"Check for Updates",updateTitle:"Update Blocklets",noUpdate:"No Blocklets to update",add:"Add Blocklet",selectComponent:"Select Blocklet",selectRegistry:"Select Blocklet Store",selectRegistryTip:"You can switch blocklet store to see more components",selectInstance:"Select Instance",selectInstanceTip:"You can select an existing instance or create a new instance. Existing instances will use previously saved configuration and data",newInstance:"Create New Instance",noComponent:"No Blocklets",mountPoint:"What's the mount point?",mountPointTip:"If you set mount point to '/my-prefix', then all requests that begins with that mount point will be routed to the selected Blocklet",delete:"Delete Blocklet",deleteDescription:"This Blocklet will not be accessible after deletion. Confirm delete?",purchase:"Payment Required",tip:{stopBlocklet:"Please stop running Blocklet first",requiredBy:"The Blocklet is required by {name}"},choose:"Choose",upgrade:"Upgrade",upgradeAvailable:"Upgrade Available",needBuy:"Need Purchase",isOfficial:"Officially Certified",addWithName:"Add Blocklet To {name}",relatedComponents:"Related Blocklets",required:"Required",noDependencies:"{name} doesn't have any dependencies",installed:"Installed",installingTip:"Installing component, please wait...",installingCanCloseWindowTip:"Installing component in the background, you can safely close this window",installSuccessTip:"Congratulations, the component was installed successfully!",missDownloadTokenTip:"Cannot add paid component without valid download token",purchaseComponentSecondCheckTip:"Please present your blocklet purchase NFT to continue",installComponentError:"There was an error installing the component, please retry again",downloadComponentError:"There was an error downloading the component, please retry again",addComponentTip:{introduction:"Welcome to the Add Component Wizard",isPurchase:"You need to Verify NFT before use <b>{name}</b> as a component;",belowInformation:"Below is the information for the component: ",verifyNFT:"Please select the Verify NFT method",config:"Please fill in the configuration of the component",environment:"Please fill in the environment of the component",fromUrl:"Add Blocklet From Url",fromUpload:"Add Blocklet From Upload",uploadFailed:"Upload failed",allowedFileTypes:"Types of files allowed for upload: {types}"},addNext:"Add {name}",upgradeNext:"Upgrade {name}",setting:"Settings"},router:{urlPath:"URL Path",noRunning:"The blocklet is not currently started. Unable to access through the following address!",securitySetting:"Security Setting",checkUrlAccessible:"Check the accessibility of the address",urlInaccessible:"It may be due to network reasons, the address is temporarily inaccessible",noAccessibleUrl:"No accessible URL",domainLockTooltip:"The system generated Domain cannot be edited.",urlLockTooltip:"The system generated URL Path cannot be edited.",showAllDomains:"Show all domains",showAllDIDs:"Show all DIDs",currentDomainTip:"You are accessing the current page through this domain"},export:{title:"Export Blocklet",name:"Bundle Name",nameTip:'e.g. "my-blocklet-name" or "@my-scope/blocklet-name"',result:"What's next",exportSource:"Export Source",success:"Blocklet successfully exported",resultTipStart:"With",resultTipEnd:"you can build and publish this blocklet within minutes",uploadedComponentTip:"Directly uploaded components cannot be exported:"},migrate:{title:"Migrate Application",scan:"Connect your DID Wallet to generate a key-pair for this application",confirm:"Review this operation on your DID Wallet",success:"Your application is successfully migrated, the page will be refreshed in {sec} seconds",intro:{l1:"Click here",l2:"to migrate your application to new version (changes are disabled before the migration completes)",l3:"1. The application DID will be fully controlled from your DID Wallet.",l4:"2. The application data will be migrated, and no further changes required.",l5:"3. The new application structure will give you more flexibly when change components.",l6:"4. Please do not change component mount points before component new version is out."},tip:{duplicate:"Find duplicate component {name}, please delete useless components and migrate again",running:"Please stop blocklet before migration"}},error:{isRunning:"Blocklet is running, please stop it first",isInProgress:"Blocklet is in progress, please wait for it to finish"},publish:{store:"Blocklet Store",connectOrUpload:"Connect or Upload",projectSettings:"Project Settings",noStoreSelected:"Please select one of the existing stores or add a new store to continue",forceResourceBlocklet:"Force defined as a resource-based blocklet",autoUploadTip:"Upload release to connected Blocklet Stores automatically after creation",autoPublishErrorTip:"Auto publish to {storeName} failed: {error}",possibleSameStoreTip:"Try resolving dependency blocklets to the same Blocklet Store before each uploading when possible",needProjectId:"Please create a project first",developerInfo:"Developer Information",branding:"Branding",brandingHelp:"More information about the blocklet will be displayed in the Store",download:"Download {name}",deleteStoreTip:"Are you sure you want to remove {name} from the connect Store list?",delete:"Delete {name}",copyInstallUrl:"Copy Install URL",installToThisServer:"Install to this server",createResource:"Create Resource",blockletStudio:"Blocklet Studio",tenantScope:"Tenant",addResource:"Add Blocklet",productTitle:"Product",versionTitle:"Versioning",imgTitle:"Images",storeRule:{warning:"Warning",screenshot:"screenshot",screenshots:"screenshots",first:"1st",second:"2nd",third:"3rd",maxImageCount:"The store allows at most {max} {unit}.",minImageCount:"The store requires at least {min} {unit}.",minImageSize:"The {name} screenshot image size must be at least {width}x{height}.",logoFormat:"The logo image format just supports [{format}]."},resourceTitle:"Content",resourceSelect:"Select resource from following blocklets",resourceUpload:"Upload resource from your disk (index.html is required in the archive)",resourceDocker:"Build Blocklet from Docker",singleton:"Single instance only",singletonTip:"When singleton mode is enabled, the application cannot run multiple instances at the same time.Since your app uses singleton mode, blue-green deployment cannot be used for updates or restarts.",resourceSelectTitle:"Resource",resourceUploadTitle:"Upload",resourceDockerTitle:"Docker",resourceDockerInputTip:"Please input the docker run command",blockletEmptyTip:"There aren't any blocklets here",createBlockletTip:"You can create new blocklet through existing resources, components, and configuration in this application",createBlocklet:"New blocklet",reconnectStoreTip:"After reconnecting, a new developer will be bound. Are you sure you want to reconnect?",disconnectStoreTip:"After disconnecting, the blocklet will be removed from the store. Are you sure you want to disconnect?",componentNotRunning:"Blocklet {name} is not running, please start it first",allComponentsNotRunning:"Blocklets is not running, please start it first",releaseEmptyTip:"There aren't any releases here",resourceEmptyTip:"No available resources",viewLastRelease:"View last release",createReleaseTip:"You can create a release of the blocklet, along with release notes and resources, for other people to use",createRelease:"Create release",deleteReleaseTip:"The release cannot be recovered after deletion",createBlockletDid:"Create from DID Wallet",createReleaseSuccess:"Release created successfully",saveDraftSuccess:"Draft saved successfully",packTip:"Currently blocklets can be installed directly as applications. Components and application configurations will be automatically included in the Blocklet",resourceTip:"Currently, as a Resource Blocklet, it cannot be directly installed from the Store.",whyCantSeeInStore:"You can publish the current blocklet on the store, and it can be used all over the world",whyCantSeeResourceBlockletInStore:"You can publish the current blocklet on the store, and it can be used all over the world, Blocklet are hidden from the store listing page by default",resourceChangedWarning:"You have modified the resource, please save it in time",install:"Install {name}",installResourceTip:"Install Url:",installResourceTip2:"If you want to see more tips, please visit",installResourceHelp:"Help Document",componentIncluded:"Included",componentForceRequired:"Required",steps:{branding:"Describe the basic information of your Blocklet. This information will be presented to users in the store.",introduction:"A clear introduction can effectively highlight your Blocklet. You can use Markdown syntax to write and preview it.",resources:"Please select the resources that need to be associated with the current Blocklet, as these resources will be installed along with the Blocklet.",blocklets:"Please select the Blocklets that need to be associated and installed when installing the current Blocklet.",version:"Set the release version and the change log."},connect:{title:"Create Blocklet DID",scan:"Use the following methods to generate Blocklet DID",confirm:"Confirm using DID Wallet",success:"Blocklet DID has been generated, please continue your operation"},deleteProject:{title:"Delete {name}",scan:"Use the following methods to delete {name}",confirm:"Confirm using DID Wallet",success:"Blocklet has been deleted, please continue your operation",description:"Are you sure you want to delete the Blocklet? Here are the issues you might encounter:",tip1:"The Blocklet cannot be recovered after deletion.",tip2:"You will no longer be able to publish new versions to the deleted Blocklet, which means that the Blocklet will not be updated in the Store anymore.",tip3:"Deleting the Blocklet will not affect its currently published version in the Store."},saveDraft:"Save Draft",releaseNote:"Release Note",errorTip:{noDid:"Blocklet DID is required",noFirstDid:"Please create Blocklet DID first",noTitle:"Blocklet Title is required",noVersion:"Blocklet Version is required",inValidVersion:"Invalid Blocklet Version",noResource:"Please select upload resource to be included in the blocklet",noDescription:"Blocklet Description is required",noNote:"Release Note is required",invalidUrl:"Please input a valid URL",invalidUrlOrEmail:"Please input a valid URL or email"},uploadToStoreSuccess:"Blocklet upload to Store successfully, you need publish it in the Store",publishToStoreSuccess:"Blocklet published to Store successfully",connectStoreSuccess:"Blocklet Store connected successfully",docker:{pleaseInputDockerCommand:"Please input the docker run command",volumeTip:"Volume must start with $BLOCKLET_DATA_DIR or $BLOCKLET_APP_DIR",volumeTip2:'Volume cannot contain ".."',noAllowTheArg:"The argument is not allowed to be used in the docker run command",needCustomInput:"Setup the value when install blocklet",dockerParams:"Docker Params",nextTab:"Parse Command",dockerCommand:"Docker Command",dockerImageName:"Docker Image Name",addItem:"Add Docker Run Param",envKey:"Environment Variable Key",publishTips:"The final external port will be automatically assigned by the blocklet",volumeTips:"The volume need start with $BLOCKLET_DATA_DIR or $BLOCKLET_APP_DIR",modifyParam:"Modify Docker Run Param",modifyEnv:"Modify Environment Variable",paramDetail:"Param Detail",description:"Description",secure:"Secure",shared:"Shared",required:"Required",autoGenerated:"Auto Generated",prefix:"Prefix",path:"Path",name:"Name",portType:"Port Type",proxyBehavior:"Proxy Behavior",serviceProxy:"Service",directProxy:"Direct",dockerImageNameError:"Docker Image Name cannot contain spaces",dockerCMDError:"Docker CMD only supports simple characters"},endpoint:{tab:"Remote Blocklet",uploadToEndpoint:"You can upload the current blocklet to the specified blocklet.",addEndpoint:"Add Blocklet Endpoint",urlEmpty:"Endpoint URL cannot be empty",addFailed:"Add Blocklet Endpoint Failed: ",deleteEndpoint:"Delete Blocklet Endpoint",deleteDesc:'Confirm Delete blocklet endpoint {name} ?<br/><span style="color: {color}">*After removing this blocklet endpoint, you cannot update the apps installed from this blocklet endpoint unless you add them again.</span>',confirmDesc:"Please input {name} to delete",visitEndpoint:"Visit Blocklet",disconnectEndpointTip:"Are you sure you want to disconnect {url}? After disconnecting, the blocklet will not be uploaded to this endpoint.",deleteFailed:"Delete Blocklet Endpoint Failed",publishToEndpointSuccess:"Blocklet published to Endpoint successfully",uploadToEndpointSuccess:"Blocklet uploaded to Endpoint successfully"}}},dashboard:{nodeDid:"Node",ownerDid:"Owner",routingEngine:"Routing Engine",database:"Database",ownerNftURL:"Owner NFT",expirationLeft:"Expiration Left",startFromCrashTip:"Blocklet Server did not exit normally last time, please manually start the blocklets that needs to be run.",runtimeConfig:{blockletMaxMemoryLimit:"Blocklet Max Memory Limit",daemonMaxMemoryLimit:"Server Max Memory Limit"},document:"Learn more in our documentation"},store:{nameSort:"Name",popularSort:"Popularity",headerDescription:"Find and Install Your Blocklets",detail:{purchase:"Purchase {name}",open:"Open {name}",install:"Install {name}",upgrade:"Upgrade {name}",empty:"No introduction"},tooltip:{upgradeServer:"Blocklet requires Blocklet Server version {version}, current Blocklet Server version is {serverVersion}"},blockletRegistry:{changeFailed:"Change Blocklet Store Failed: ",addFailed:"Add Blocklet Store Failed: ",editFailed:"Edit Blocklet Store Failed: ",switchRegistry:"Switch Blocklet Store",addRegistry:"Add Blocklet Store",editRegistry:"Edit Blocklet Store",deleteRegistry:"Delete Blocklet Store",haveSameRegistry:"The same blocklet store exists",registryName:"Blocklet Store Name",registryUrl:"Blocklet Store URL",registryNameEmpty:"Blocklet Store name cannot be empty",registryUrlEmpty:"Blocklet store url cannot be empty",deleteDesc:'Confirm Delete blocklet store {name} ?<br/><span style="color: {color}">*After removing this blocklet store, you cannot update the apps installed from this blocklet store unless you add them again.</span>',confirmDesc:"Please input {name} to delete"},purchase:{title:"Purchase {name}",confirmed:"Your blocklet purchase NFT is verified",declined:"You do not provided valid the blocklet purchase NFT",waiting:"Waiting for purchase complete...",purchase:{title:"Purchase NFT",description:"Pay some token before installing this blocklet if you have not purchased this blocklet"},verify:{title:"Verify NFT",description:"Your NFT will be verified before installing this blocklet if you have purchased and hold the purchase NFT in your DID Wallet",auth:{title:"Purchase Credential Required",scan:"Connect DID Wallet to provide blocklet purchase NFT",confirm:"Review this operation on your DID Wallet",success:"Your purchase NFT is verified, and installing has started"}},auth:{title:"Purchase {name}",scan:"Scan following QRCode with your DID Wallet",confirm:"Confirm in your account",success:"Purchase NFT sent to your DID Wallet"},launch:"Launch {name}",autoLaunch:"{name} successfully purchased, redirecting to launch page..."}},setting:{saveSuccess:"Settings Saved Successfully",unSavedTip:'There are unsaved changes, please click "Save Changes" to save them.',unSavedLeaveTip:"There are unsaved changes, are you sure to leave the page?",form:{name:"Name Your Server",nameRequired:"Server description is required",namePlaceholder:"Server Name",description:"Describe Your Server",descriptionHolder:"Server Description",descriptionRequired:"Server description is required",domain:"Your Server Domain Name",domainPlaceholder:"Server Domain Name",domainRequired:"Server domain is required",ipPlaceholder:"IP",ipRequired:"IP is required",registry:"Blocklet Store",registryPlaceholder:"Blocklet store to fetch blocklets",registryRequired:"Blocklet store is required ",registerUrl:"Blocklet Launcher URL",registerUrlPlaceholder:"Input the URL of your preferred Blocklet Launcher, you can use the official one safely",webWalletUrl:"DID Wallet URL",webWalletUrlPlaceholder:'Please input the URL of your hosted "DID Wallet", you can use the official one safely',nftDomainUrl:"NFT Domain URL",nftDomainUrlPlaceholder:'Please input the URL of your hosted "NFT Domain", you can use the official one safely',enableWelcomePage:"Enable welcome page",welcome:{switchLabel:"Welcome Page"},enableSessionHardening:{switchLabel:"Enable Session Hardening",switchTips:"After enabling this option, mutation operations will require strict verification, which can improve the server's overall security."},security:{switchLabel:"File System Isolation",switchTips:"After disabling this option, the file system of the Blocklet will no longer be in isolation, which may pose a risk of malicious software damaging the file system.",warningTips:"The file system isolation feature cannot take effect. Please upgrade the node.js version (current version is {version}) to v21.6.0 or higher."},docker:{switchLabel:"Run Blocklets in Containers",switchTips:"After enabling this option, all blocklets will be run in Docker containers, which can improve the server's overall security.",notInstalled:"Can not enable container mode because docker is not installed or the current user has insufficient permission to run docker",needCloseFileSystemIsolation:"File system isolation and docker container mode runtime cannot be enabled at the same time"},dockerNetwork:{switchLabel:"Container Network Isolation",switchTips:"After enabling this option, blocklets run in a more secure manner: a blocklet cannot access the blocklet server or other blocklets across applications.",needEnableDocker:"Container mode must be enabled to enable network isolation"},upgrade:{title:"Upgrade Blocklet Server to {version}",description:"During the upgrade, your Blocklet Server will enter maintenance mode for a few minutes while the update is completed.",dialog:'Click on "confirm" to install the update. Blocklet Server will enter maintenance mode until the update is completed and return to production mode automatically.',confirm:"Upgrade",switchLabel:"Auto Update Check",enableBetaRelease:"Enable Beta Release",setup:"Preparing the upgrade",installing:"Installing Blocklet Server v{version}",restarting:"Restarting Blocklet Server",cleanup:"Migrating Blocklet Server data",verifying:"Verifying Blocklet Server v{version}",rollback:"Rollback Blocklet Server",complete:"Upgrade complete!",progress:"Upgrading {name}",check:"Check for Updates",latest:"You are running the latest version."},restart:{title:"Restart Blocklet Server",description:"During the restarting, your Blocklet Server will enter maintenance mode while the restart is completed.",dialog:'Click on "confirm" to restart. Blocklet Server will enter maintenance mode until the restart is completed and return to production mode automatically.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting Blocklet Server",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting {name}"},restartAllContainers:{title:"Restart All Container",description:"Restart all containers and keep blocklets running.",dialog:'Click "confirm" to restart all container blocklets and keep blockelts status running.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting All Container At Background",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting All Container At Background"},restartAllBlocklet:{title:"Restart All Blocklets",description:"Restart all blocklets that are running or error on this server.",dialog:'Click "confirm" to restart all blocklets at background.',confirm:"Restart",setup:"Preparing the restart",verifying:"Verifying Blocklet Server",restarting:"Restarting All Running Or Error Blocklets At Background",cleanup:"Ensure everything is OK",rollback:"Cleanup the dirty state",complete:"Maintain complete!",progress:"Restarting All Running Or Error Blocklets At Background"},register:{title:"Register to Blocklet Launcher",description:"Once added, you can launch blocklets to this blocklet server from {url}.",button:"Register"},monitor:{diskThreshold:"Send alert when disk usage exceeds (%)",diskThresholdPlaceholder:"Please set the disk usage alert threshold"}},accessKey:{listTitle:"Manage secure API access with Access Keys",tooltipTitle:"Generate and manage credentials that allow trusted systems to interact with your app programmatically. Access keys enable secure automation and seamless integration across your tools and services. ",accessKeyId:"Access Key ID",accessKeySecret:"Access Key Secret",lastUsed:"Last Used At",tip:"Please enter a name for this access key",passport:"Select a passport for the access key to grant or limit permissions",expireTime:"Set an expiration date for the access key for better security",saveSecretTip:"This is the only time that your Access Secret key can be viewed and cannot be recovered. However, you can create new access keys at any time",iKnow:"I have copied and saved the Access Secret",showSecret:"Show Secret Access Key",hideSecret:"Hide Secret",title:"Delete Access Key",descriptionNoTime:"This will permanently delete the access key {key} with name {name}, which is (never used before)",description:"This will permanently delete access key {key} with name {name}, which is (last used on {time}, {timeAge})",confirm_desc:"Please input {name} to delete",remark:"Access Key Name",remarkInvalid:"Access Key Name is required",authType:"Auth Type",resourceType:"Resource Type",resourceId:"Resource ID",component:"Component",expired:"{time} expired",simple:"Simple",signature:"Signature",signatureDesc:"Enterprise-grade security standard using cryptography. requires code integration with SDK (@blocklet/server-js), ideal for scenarios with high security requirements and critical data transmission",simpleDesc:"Lightweight Bearer Token mechanism, similar to OpenAPI Key, supports RESTful API calls and third-party service integration. No coding required, quick integration via HTTP Header, perfect for rapid development",viewSecret:"You can continue to access the secret key later in the details page of the access key",usage:"Usage"},webhook:{add:"Add Integration",delTitle:"Delete Integration",requiredError:"Please provide a valid {type}",duplicateError:"The URL already exists",confirm_desc:"Please input {name} to delete",test:"Test",description:"This will permanently delete integration with ID {id}",testSuccess:"Test message sent successfully",columns:{description:"ID",params:"Params",createdAt:"createdAt"},updateSuccess:"Update status successfully"},dns:{step1Title:"1. Log in to your domain registrar",step1Desc1:"Log in to your domain registrar, find the domain management page, and locate the name server settings page. You can search for your domain registrar at ",step2Title:"2. Find the DNS settings for {url}",step2Desc:'This may be called "DNS Management", "Advanced settings", or similar.',step3Title:"3. Add the following DNS records",step3Desc:'"Name" might be called "host", "hostname", or "alias"'},domain:{addingDomain:"Adding domain...",checkingResolvable:"Checking domain status...",cannotResolve:"{domain} can not be resolved, please check your DNS configuration",resolvedAddressError:"{domain} is not properly configured with a CNAME record pointing to {curDomain}",invalidDNSReminder:"{error}. However, you can continue to add the domain, but automatic certificate generation is not available.",continueAdd:"Continue Adding",conflictTitle:"{domain} has already been used",conflictDescription:'{domain} is already used by "{title}", by clicking confirm, the domain will be removed from "{from}" and added to "{to}".'},aigne:{config:"Config AIGNE Hub",description:"The current configuration will take effect when {name} is running. Need to save and restart the blocklet to take effect.",modelAdapter:"Model Provider",modelName:"Model Name",baseUrl:"AIGNE Hub URL",invalidUrl:"{provider} URL is invalid",revokeUrlAuthTitle:"Confirm change the {url}?",revokeUrlAuth:"Are you sure you want to change the {url}? After modification, your authorization will be invalid and need to be re-authorized!",apiKeyNotAuthorized:"The API key is not authorized. Please click the connect to AIGNE Hub button to authorize it",switchUser:"Switch User",connectTimeOut:"Connection to {provider} timed out, please try again later",desc:{modelAdapter:"The platform that provides an AI model service",modelName:"The specific model version or model name",key:"The {provider} API Key used for authentication",baseUrl:"Enter the URL of your AIGNE Hub instance (e.g., https://hub.aigne.io). Use your own if you're self-hosting.",accessKeyId:"The unique key ID for accessing the model",secretAccessKey:"The secret key paired with the access key ID",docLink:"View official documentation for more details and API reference"},restart:{title:"Restart Blocklet",connectedContent:"Your Blocklet is currently connected to {provider}. The configuration will take effect after restart. Would you like to restart now?",notConnectedContent:"Your Blocklet is currently disconnected from {provider}. The configuration will take effect after restart. Would you like to restart now?",confirm:"Restart Now",cancel:"Restart Later"},failed:"AIGNE config save failed",authorizeAigneHub:"Connect to {name}",disconnect:"Disconnect",disconnectConfirm:"Are you sure you want to disconnect from AIGNE Hub? This will remove the current AI configuration.",disconnectSuccess:"Successfully disconnected from AIGNE Hub",disconnectFailed:"Failed to disconnect from AIGNE Hub",testConnection:"Test {provider} connection",testSuccess:"Connected successfully to AIGNE Hub",testFailed:"Could not connect to AIGNE Hub. Please check the URL or your network.",check:"Check",pendingCredit:"Outstanding Charges",addCredits:"Buy Credits",transaction:"Transactions",connected:"Successfully connected",account:"Account Information",infinite:"Unlimited"}},notification:{title:"Notifications",empty:"No activities yet",viewAll:"View All",showRead:"Show Read",markAllAsRead:"Mark All as Read",markAsRead:"Mark As Read",proceed:"Proceed",checkingForUpdates:"Checking for updates...",installComponentError:"Not found uninstalled component {name}",installingComponent:"Installing component {name}",pushKit:{enable:"Enable notification",endpoint:"PushKit endpoint",endpointInvalid:"PushKit endpoint is invalid URL",testSuccess:"Test PushKit send successfully",testFailed:"Test PushKit send failed",testReceiver:"PushKit receiver",testSend:"Test push-kit send",inputTestReceiver:"Please input test receiver did",receiverRequired:"PushKit receiver is required",pushPath:"Api path for push-kit (default /api/push)",did:"PushKit Blocklet DID",customOptions:"Custom Options"},email:{signature:"Signature",signatureTooltip:"The email signature is used at the bottom to provide the recipient with key information about the sender. ",companyName:"Company Name",companyLink:"Company Link",companyAddress:"Company Address",supportEmail:"Support Email",enable:"Enable notification",emailInvalid:"Email is invalid",linkInvalid:"Link is invalid, should start with http or https",from:"Email Sender",host:"SMTP Server Host",port:"SMTP Server Port",user:"SMTP Username",secure:"Secure Connection",password:"SMTP Password",fromRequired:"Email sender is required",fromInvalid:"Email sender is invalid",receiverRequired:"Email receiver is required",receiverInvalid:"Email receiver is invalid",hostRequired:"SMTP server host is required",hostInvalid:"SMTP server host is invalid",portRequired:"SMTP server port is required",portInvalid:"SMTP server port is invalid, port should be between 1 and 65535",userRequired:"SMTP server username is required",passwordRequired:"SMTP server user password is required",testSuccess:"Test email send successfully",testFailed:"Test email send failed",testReceiver:"Email receiver",testSendEmail:"Test email send",inputTestReceiver:"Please input test receiver email",disable:"Unsubscribe email notification",disableDescription:"After unsubscribe, you will no longer receive email notifications. To receive email notifications, you can subscribe it again on this page.",unsubscribe:"Unsubscribe email notification",unsubscribeDescription:"After unsubscribe, you will no longer receive any email notifications.",subscribe:"subscribe",subscribeDescription:"To receive email notifications, you can subscribe it again on settings page."},comingSoon:"More notification channel are under construction",unsubscribe:"Unsubscribe",unsubscribeSucceed:"Unsubscribe succeeded",unsubscribeFailed:"Unsubscribe failed",unsubscribeTokenRequired:"Unsubscribe token in required",unsubscribeTokenExpired:"Unsubscribe token is expired",unsubscribeTokenInvalid:"Unsubscribe token is invalid",notificationDetails:"Notification Details",notificationPreview:"Notification Preview",receiver:"Receiver",filter:"Filter",resend:"Resend",resendLimit:"You can resend a notification up to three times daily.",sendStatus:{success:"Sent",failed:"Failed",pending:"Pending",sentTime:"Sent Time: {date}",count:"{count} ",total:"Total",reason:{enabled:"User has enabled {channel} notification",disabled:"User has not enabled {channel} notification",unavailable:"Current Blocklet has not configured {channel} notification",available:"Current Blocklet has configured {channel} notification",notSent:"Current message has not been sent to {channel}",offline:"User is offline"}},from:"From",to:"To",body:"Body",notificationTitle:"Title",createdAt:"Created At",status:"Status",system:"System",severity:"Severity",config:"Configs",selectChannels:"Select Channels",selectChannelsTip:"Select the channels to resend",resendFailedOnly:"Resend Only to Failed Channels",statistics:"Statistics",allSender:"All Senders",allSeverity:"All Severities",severityType:{info:"Info",success:"Success",warning:"Warning",error:"Error"},clear:"Clear",allDone:"You're all done",filterType:{all:"All",unread:"Unread"},viewMore:"View More"},router:{routerSetting:"Domains & URLs",certSetting:"SSL Certificates",defaultSite:"Default",urlHelperText:"URL that do not start with HTTP/HTTPS are considered relative paths",empty:"Click on Actions to setup URL Mapping",healthy:{ok:"Blocklet or service is running",error:"Blocklet or service is not running or not installed"},service:{select:"Select Blocklet Services (Optional)",what:"Blocklet Services are pipelines executed against the request before redirecting to upstream blocklet"},nonProvider:{title:"Engine Change Warning",description:"If you change engine to none, your current page may not work properly because the previous engine will be stopped, are you sure to continue?",confirm:"I understand, continue"},validation:{urlRequired:"URL is required",redirectCodeRequired:"Redirect code is required",didRequired:"Blocklet is required",pathPrefixTooLong:"The URL Prefix cannot exceed {length} characters",pathPrefixCannotBeEmpty:"The URL Prefix cannot be empty",domainRequired:"Server domain is required",invalidUrl:"Please provide a valid URL",pathPrefixRequired:"URL prefix is required",redirectUrlRequired:"Redirect URL is required",rewriteUrlRequired:"Rewrite URL is required"},domain:{addSite:"Add Site",validate:{emptyTip:"Site domain cannot be empty",suffixTip:"Site domain cannot include {suffix}"},add:{title:"Add Domain Name",description:"Please provide a valid domain name",confirm:"Add",cancel:"Cancel",blocklet:"Select Blocklet",redirect:"Where to redirect the traffic?",port:"What port does your request handler need to listen to?",portTip:"This defaults to the main port of request handler, you can customize this",type:"Traffic Handler",component:"Select Component",pageGroup:"Page Group",pageGroupTip:"This component can render any group of pages listed above, leave empty to render all pages"},update:{title:"Update Site Domain",label:"Site Domain",description:"Please provide a valid site domain"},setup:{tipStart:"Add the DNS records for the domain",tipEnd:"as per the following guidelines",recordType:"Record Type",recordValue:"Record Value"},verify:{ok:"The domain resolution is normal",notResolved:"This domain neither resolved nor accessible, please check your DNS configuration"},https:{ok:"This domain has https enabled",bad:"This domain has not enabled https"},delete:{title:"Delete Site",description:'By confirming, you will delete your existing "{name}" site. Type "{name}" below and select Delete to complete the change, or select Cancel if you want to leave your site',confirm_desc:"Please input {name} to confirm"}},domainAlias:{custom:"Custom domain",noCustom:"No custom domain",noCustomTip:"No custom domain is configured with your website. For enhanced security and better user experience, we recommend configuring your own custom domain. Click below to get started.",nftDomain:"Automatic config with DID Names",showTipHint:"How do I configure domain name resolution?",add:{title:"Add Additional Domain",tips:"You can enter a domain name purchased from DID Names or any other domain. If it is a DID Domain, you must present the DID Domain NFT to proceed.",domainDescription:"Please provide a valid domain name",forceTip:"Force add if domain name already exists",helperText:"If an HTTP or HTTPS URL is entered, it will be automatically converted into a domain name.",isDidDomainError:"This domain is a DID Domain. Please add it using the method for automatic domain configuration."},addCustomDomain:{name:"Custom Domain"},addDomainNFT:{showNFT:"Configure domain automatically",tips:"You can enter a domain purchased from DID Names. If a DID Domain is detected, you must present the DID Domain NFT to continue.",connect:{title:"Connect DID Names to {appName}",scan:"Use one of the following methods to connect {domain} to {appName}",confirm:"Confirm in your account",success:"Authorization Successful"},authorizeFailed:"Failed to get the domain NFT info, please try again!",buyTip:"DID Names will do the domain name resolution automatically, no need to configure it manually, and the blocklet will update the resolution record of the domain name automatically when needed. If your don't have DID Domain NFT yet, ",buy:"Buy DID Domain",topLevelDidDomainHint:"For DID Domain, if you enter a top-level domain (e.g. example.com), it will automatically be configured as www.example.com"},delete:{title:"Are you sure you want to delete?",description:'After delete "{domain}", access to that alias may not be handled properly.',confirmPlaceholder:'Please input "{domain}" to delete'}},domainSecurity:{title:"Domain Security",cors:{title:"Allowed CORS Domains",description:'Domain list that can send cross origin requests to {name}, comma separated, use "*" to allow anyone, which is not recommended',domainInvalid:"Please input a valid list of domain names"}},rule:{add:{title:"Add URL Mapping",confirm:"Add",pathPrefix:"What's the URL Prefix?",pathPrefixTip:"If you set prefix to '/my-prefix', then all requests that begins with that prefix will be routed to the configured blocklet",blocklet:"Which Blocklet will be handling those requests?",port:"Which port of the blocklet will be handling requests?",portTip:"This defaults to the main port of blocklet, if your blocklet listens on multiple ports, you can customize this",responseType:"Response Type",responseBody:"Response Content",responseBodyTip:"Paste your response content here, should not exceed 4096 characters",responseBodyRequired:"Response content can not be empty"},delete:{title:"Delete URL Mapping",description:'By confirming, you will delete your existing "{name}" URL Mapping. Type "{name}" below and select Delete to complete the change, or select Cancel if you want to leave your URL Mapping.',confirm_desc:"Please input {name} to delete",cancel:"Cancel"},update:{title:"Update URL Mapping",confirm:"Yes, Update",cancel:"Cancel"}},cert:{name:"Certificate Name",domain:"Domain Name",action:"Action",commonName:"Common Name",boundDomains:"Domains",source:"Source",expired:"Expired",leftDays:" days left",issuedOn:"Issued On",expiryOn:"Expiry On",fingerprintAlg:"Fingerprint Algorithm",validityPeriod:"Validity Period",matchedSites:"Matched Sites",upload:"Manual Upload",publicCertHelperText:"Public certificates can be downloaded",nonPublicCertHelperText:"Non-public certificates cannot be downloaded",protectedCertHelperText:"Protected certificates cannot be edited",unprotectedCertHelperText:"Unprotected certificates can be edited",issuing:"Certificate being generated",sourceTypes:{upload:"Manual Upload",lets_encrypt:"Let's Encrypt"},table:{nodata:"No data"},delete:{title:"Delete Certificate",description:"Confirm delete certificate of domain {domain}? Deleting it may affect related services. Please confirm it's safe before proceeding with the deletion.",confirm:"Confirm"},nginx:{title:"Update Certificate",titleAdd:"Add Certificate",pem:"SSL Certificate File",pemTip:'Please drop your server certificate file here, it should ends with ".pem" or ".crt"',key:"Private Key File",keyTip:'Please drop your server private key file here, it should ends with ".pem" or ".key"',confirm:"Save",cancel:"Cancel",invalidFile:"You have selected an invalid file",empty:"No file selected yet",source:"Source",sourceTypes:{upload:"Manual Upload",lets_encrypt:"Let's Encrypt"}},detail:{title:"Certificate Details"},genLetsEncryptCert:{title:"Generate Let's Encrypt certificate",dnsTip:"Please make sure the domain name has point to the current Blocklet Server.",description:"Adding a certificate will make the service more secure, and Blocklet Server will automatically renew the certificate before it expires."}},gateway:{reqLimit:{title:"Request Limiting",switchLabel:"Enable concurrent request limiting for reliable performance",global:"Limit concurrent requests handled by the gateway to {global} per second (global limit)",burstFactor:"The burst factor for the rate limiting, applied to both global and per-IP limits, (global: {global}, per-IP: {rate})",burstDelay:"The delay when requests burst and exceed the per-IP limit ({delay} seconds)",rate:"Limit concurrent requests by IP to {rate} per second (per-IP limit)",methods:"Limit concurrent requests by IP for the following methods"},cacheEnabled:{title:"Gateway Cache",switchLabel:"Enable gateway cache to boost performance"},blockPolicy:{title:"Request Blocking",switchLabel:"Block bad requests to protect your server",addItem:"Add Item",blacklistDesc:"Requests from these IPs will be blocked from accessing this Server and all Blocklets",inputPlaceholder:"Enter IP address, CIDR range, or URL",invalidItem:"Invalid IP address, CIDR range, or URL",autoBlocking:{switchLabel:"Block bad requests by realtime detection",windowSize:"The time window size for counting requests (seconds)",windowQuota:"The maximum number of requests (per IP) allowed within the window",blockDuration:"The duration to block user by IP when quota exceeded within the window (seconds)",statusCodes:"The status codes to be checked"}},proxyPolicy:{title:"Proxy Policy",switchLabel:"This server is running behind proxies",trustRecursive:"Trust proxies recursively",trustRecursiveDesc:"Use the leftmost IP in the X-Forwarded-For chain",trustedProxies:"Trusted Proxies",trustedProxiesDesc:"Requests from these IPs will be trusted to get the real client IP",realIpHeaderLabel:"Client IP Header",realIpHeaderDesc:"If the Blocklet Server is running behind proxies such as CloudFront, you can set the header of the client's real IP here.",addItem:"Add Item",inputPlaceholder:"Enter IP address, CIDR range",invalidItem:"Invalid IP address, CIDR range"},wafPolicy:{title:"Web Application Firewall",switchLabel:"Detect and block bad requests with ModSecurity",modeDesc:"The mode for ModSecurity",docDesc:"Check the documentation for how to setup ModSecurity",mode:{detectOnly:"Detect Only (will not block requests)",on:"On (will block requests)"},logLevelDesc:"The log level for ModSecurity (0-9), 0 means disable audit log",inboundAnomalyScoreThresholdDesc:"The inbound anomaly score threshold (1-100), lower value means more strict",outboundAnomalyScoreThresholdDesc:"The outbound anomaly score threshold (1-100), lower value means more strict"}}},noMatch:{desc:"We can't find the page that you're looking for"},health:{connectionErrorTip:"Blocklet Server can't connect to the network, please check if Blocklet Server has been stopped or there is a network issue",connectionRecoveryTip:"Blocklet Server connectivity has been recovered",connectionStoppedTip:"Blocklet Server has been stopped",wrongAccessUrlTip:"Blocklet Server access address is wrong, please use the correct access address"},embed:{iconTip:"Click to view subscription details"},debug:{title:"Your Blocklet Server is up and running!"},team:{add:"Add New",invite:{action:"Invite New",setting:"Invite Settings",enabled:"Disable this setting to restrict new user invites to owner/admin only",disabled:"Enable this setting to allow any user to invite new users",inviter:"Invited By"},member:{name:"Name",passport:"Passport",passports:"Passports",lastLogin:"Last Login",lastLoginIp:"Last Login IP",openProfile:"View Profile",source:"Register Source",source_derived:"Derived from oauth",source_wallet:"DID Wallet",filter:"Filter by",blockAccess:"Block Access",blockAccessDescription:"The user will not be able to connect to this application",allowAccess:"Allow Access",allowAccessDescription:"The user will be able to connect to this application",updateRole:"Update Role",removeUser:"Remove User",removeUserDescription:'Confirm remove user "{did}" and all its related data (connected accounts, passports, login sessions, etc.)? This action cannot be undone.',removeUserSuccess:"User removed successfully",revokePassport:"Revoke Passport",revokePassportDescription:"Once the passport is revoked, the passport holder can not use it to login again, are you sure to continue?",enablePassport:"Enable Passport",enablePassportDescription:"Once the revoked passport is enabled again, the passport holder can use it to login again, are you sure to continue?",passportPermissionTitle:"The passport has the following permissions:",search:"Search Member",onlyApprovedMember:"Show Approved Only",inviteDialog:{createInviteLink:"Generate Invitation Link",createSuccessTip:"The invitation link is successfully created, click to copy and send the link to the invited member, please note that this invitation link can not be reused and will expire on {expireDate}"},error:{passportEmpty:"Passport should not be empty"},connectedAccounts:"Connected Accounts",connections:"Connections",federated:"Federated",switch:{did:"Switch DID",profile:"Switch Profile",passport:"Switch Passport"},settings:{notification:"Notifications",email:"Send email to me when some events happen",wallet:"Send notification to my wallet when some events happen",phone:"Send text message to me when some events happen",webhook:"Webhooks",add:"Add new webhook",url:"Custom URL",slack:"Slack Webhook",tested:"Test message sent"},activeUserSessions:"Active User Sessions",forceLogout:"Force logout",forceLogoutDescription:"Confirm to force logout this user?",forceLogoutRemoveDescription:"Confirm to force logout this user (Also remove all user-sessions)?"},transferNode:{name:"Transfer Ownership",inviteDialog:{title:"Transfer Blocklet Server",tips:{progress:"Transfer the server needs to be accepted by the receiver to complete the transfer operation, and once the receiver accepts it, you cannot log in to the server with the current passport again.",newOwnerPermissions:"The new Owner will have the right to manage all operations such as members, passports, and Blocklets.",revoke:'If you want to withdraw the transfer invitation, you can delete the invitation link in the "Team -> Members -> Inviting" page.'},createInviteLink:"Generate Invitation Link",createSuccessTip:"The invitation link is successfully created, click to copy and send the link to the invited member, please note that this invitation link can not be reused and will expire on {expireDate}"},delegateDialog:{title:"Authorize Required",scan:"Use the following methods to authorize server to transfer server ownership NFT.",confirm:"Confirm in your account",success:"Authorization Successful"}},transferApp:{name:"Transfer Ownership",description:"You can transfer the ownership of your application to another wallet or another person.",transferDialog:{title:"Transfer Application",tips:{progress:"Transfer the application needs to be accepted by the receiver to complete the transfer operation, and once the receiver accepts it, you cannot log in to the application with the current passport again.",newOwnerPermissions:"The new Owner will have the right to manage all operations such as members, passports, and settings."},createTransferLink:"Generate Transfer Link",createSuccessTip1:'The transfer link is successfully created, the invitee must use <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> to receive the app ownership',createSuccessTip2:"Please click to copy and send the link to the invited member, please note that this transfer link can not be reused and will expire on {expireDate}. Your transfer link will only be shown once and will not be viewable again after closing this dialog",createSuccessTip3:"After the transfer is successful, the application will automatically restart to make the changes take effect",link:"Transfer Link",iKnow:"I have copied and saved the link"},connectDialog:{title:"Authorize Required",scan:"Use the following methods to authorize application to transfer ownership.",confirm:"Confirm in your account",success:"Authorization Successful"},receiveDialog:{title:"Receive Application Ownership",scan:"Use the following methods to receive the application ownership.",confirm:"Confirm in your account",success:"Receive Ownership Successfully"},successTitle:"You have become the new owner of this application",visitDashboard:"Visit Application Dashboard"},permission:{create:{title:"Create Permission",description:`Format: <action>_<resource>
|
|
1785
|
+
e.g. 'query_user', 'mutate_user'`},delete:{title:"Delete Permission",description:"Confirm delete {name}?"},error:{actionEmpty:"action cannot be empty",resourceEmpty:"resource cannot be empty",permissionTooLong:"permission cannot exceed {length} characters",descriptionTooLong:"description cannot exceed {length} characters"}},passport:{sourceMaps:{recover:"Recovered",issue:"Issued",invite:"Invited",trusted:"Trusted"},related:"Related Passports",operationLogs:"Operation Logs",owner:"Owner",status:"Status",statusMap:{valid:"Valid",revoked:"Revoked",expired:"Expired"},view:"Manage Passports",create:{title:"Create Passport",titleTip:"Title cannot be modified after created, recommended within 14 letters"},bind:{title:"Bind Permission",roleTip:"You will get all the permissions of the selected passport after binding",permissionTip:"You will get the selected permissions after binding",transferLeftTitle:"All permissions",transferRightTitle:"Granted permissions"},delete:{title:"Delete Passport",description:"The passports holds by user will lose all permissions after it is deleted. Are you sure to continue?"},error:{titleEmpty:"title cannot be empty",titleTooLong:"title cannot exceed {length} characters",descriptionEmpty:"description cannot be empty"},issuance:{pending:"Pending",create:{title:"Generate Link"},delete:{title:"Delete Receive Link",description:"Confirm delete {link}?"}},issue:"Issue Passport",disableIssuance:"Disable Passport Issuance",enableIssuance:"Enable Passport Issuance",disableIssuanceTip:'"Issue Passport", "Invite Member" and other operations will be disabled',enableIssuanceTip:'"Issue Passport", "Invite Member" and other operations will be enabled',trustedPassportIssuers:"Trusted Passport Issuers",trustedPassportIssuersTip:"Manage trusted passport issuers that can be used to issue passport",trustedIssuers:"Trusted Issuers",trustedFactories:"Trusted NFT Collections",trustedFactoriesTip:"Manage trusted NFT Collections that can be used to exchange for a passport",searchFactoryAddress:"Search Collection DID",configFactories:"Config Trusted NFT Collections",configFactoriesTip:"Allow users to exchange NFTs for passport",factoryAddress:"NFT Collection Address",factory404:"NFT Collection not found",factoryAddressTip:"The NFT Collection address must exist on ArcBlock Main Chain",role:"Passport Type",ttl:"Passport Expire Policy",ttlNever:"Never Expire",ttlMint:"From NFT Purchase",ttlExchange:"From Passport Exchange",ttlNeverTip:"The passport will be valid until revoked",ttlMintTip:"The passport will be valid from the time the NFT is purchased until you specified ttl or revoke",ttlExchangeTip:"The passport will be valid from the time user successfully exchanged until you specified ttl or revoke",ttlTip:'"365d" means 365 days, you can also use "30 days" or "24h"',validUntil:"Valid until: {date}",externalPassport:"External Passport",notTrustedIssuerTip:"The passport cannot be used because the issuer is not on the list of trusted issuers",issuerDid:"Issuer DID",addNodeToTrustedIssuers:"Add current server as a trusted passport issuer",revoked:"Revoked",noPermission:"No permission to perform this operation",shouldNotDeleteCurrent:"You can not revoke your passport currently in use",mappingRule:"Mapping rule",defaultRule:"Default rule",search:"Search Passport",searchIssuerDid:"Search Issuer DID",issueBy:"Issue by {name}",configColor:"Config Passport Color",configColorTip:"Customize the color of the passport",color:"Passport Color",description:"Use this passport to connect {teamName} as {title}",displayBuiltin:"Builtin",displayCustom:"Custom",typesTip:"Customize the types of the passport, split by comma",issuanceDate:"Issuance Date: {date}",issuanceTime:"Issuance Time",relatedDescription:"The current passport is recovered from the following passport",passportExpireTime:"Set an expiration date for the Passport",customExpireTime:"Custom Expire Time",customExpireTimeIsInvalid:"Custom Expire Time is invalid"},inviting:{link:"Invite Link",inviter:"Inviter",delete:{title:"Delete Invite Link",description:"Confirm delete {link}?"},disabledTip:"Invitation is not enabled"},whoCanAccess:{all:{title:"Accessible to all"},owner:{title:"Owner only"},invited:{title:"Invited user only"}},userFollowers:{title:"Follow",follow:"Follow",unfollow:"Unfollow",followersOnly:"Only visible to followers",followers:"Followers",following:"Following",emptyFollowing:"No users you are following yet.",emptyFollowers:"No followers yet.",emptyInvitees:"You have not invited anyone yet.",invitees:"Invitees"},orgs:{explain:"Allows users to create and join organizations, assign roles and manage resources.",description:"Description",deleteConfirm:"Confirm delete {name}?",members:"Members",myCreated:"My Created",myJoined:"My Joined",myCreatedEmpty:"You have not created any organizations yet.",myJoinedEmpty:"You have not joined any organizations yet.",deleteConfirmDescription:"Deleting this organization will remove all roles and resources linked to it. Users will remain in the system but lose their roles in this organization. This action cannot be undone.",active:"Active",deleteOrg:"Remove Current Organization",invitedAt:"Invited at: {time}",joinedAt:"Joined at: {time}",createNew:"Create New Organization",viewAll:"View All Organizations",validate:{nameEmpty:"Name cannot be empty",nameTooLong:"Name cannot exceed {length} characters",descriptionTooLong:"Description cannot exceed {length} characters"},mutate:{title:"{mode} Organization",name:"Organization Name",createSuccess:"Organization created successfully",updateSuccess:"Organization updated successfully",orgNotEnabled:"Organization is not enabled",maxMemberPerOrg:"The organization can invite up to {maxMemberPerOrg} members",maxOrgPerUser:"You can create up to {maxOrgPerUser} orgs"},invite:{chooseUsersToInvite:"Choose users to invite",success:"Invitation sent to users",pleaseSelectUsers:"Please select users",pleaseSelectRole:"Please select role",inviteExternalUsers:"Invite external users",failed:"{count} users invitation failed, please try again later",remove:"Remove user",removeSuccess:"User removed successfully",limit:"Limit",limitTip:"Limit org members and orgs per user.",maxMembers:"Max members per org",maxOrgs:"Max orgs per user",maxMembersTip:"The maximum number of users that can be invited for this organization",inviteLinkSendToEmail:"Invitation link has been sent to email ({email}), please check",enterEmailAddress:"Please enter email address",inviteTitle:"Invite users to join {orgName}"},member:{removeMemberConfirm:"Confirm remove {name}?",removeMemberConfirmDescription:"After removal, the user will lose the roles and permissions in the organization. This action cannot be undone.",removeInvitingMember:"Confirm cancel invite {name}?",removeInvitingMemberDescription:"After removal, the user will not be able to join the organization, and needs to be reinvited. This action cannot be undone."}}},launcher:{provider:"Provider",adminUrl:"URL"},session:{blockAccess:"You have been blocked from access this server"},launchBlocklet:{appInfo:"Application Information",appInfoDesc:"Confirm the application information",author:"Application Author: {author}",setup:"Setup Blocklet",redirect:"Redirect",alreadyConsumed:"The launch session has been consumed",redirectToLauncherBlocklet:"Redirecting to Launcher Blocklet",alreadyRunning:"Application {name} is already running on this Blocklet Server",alreadyInstalled:"Application {name} is already installed on this Blocklet Server",alreadyExists:"This application already exists, redirecting...",purchased:"Already Purchased",purchase:"Purchase",nextStep:"Next Step",agreement:"License Agreement",agreeAll:"Agree & Continue",installing:"Installing {appName} on {serverName}, it may take minutes to complete, please stay tuned...",redirecting:"{appName} is successfully installed, now starting...",start:"Launching",launch:"Install Blocklet to Server",launchSuccess:"{appName} is successfully launched!",installSuccess:"Blocklet is successfully installed and launched on {serverName}",openInRegistry:"View in Blocklet Store",subTitle:"Ready to install Blocklet {appName} on {serverName}",installingSubTitle:"{appName} installing",access:"Open the application",installRelatedComponents:"Install related Blocklets",canNotInstall:"Can not install",dockerBlockletCantInstall:"Can not install the Blocklet, because the Blocklet Server has not enabled Docker or Docker Network",viewApplication:"View Application",newVersion:"New Version",newVersionDesc:"The application already exists, but the current version can be upgraded",upgradeNow:"Upgrade Now",later:"Later",introduction:"Introduction",welcome:"Welcome to the Blocklet Launch Wizard",accept:"I agree to the Blocklet EULA",license:"Application License",next:"Agree to the EULA and continue",purchaseApp:"Purchase Blocklet",setupAppDesc:"Initialize your Blocklet",launched:"Complete",confirmInstall:"Confirm Installation",dialog:{title:"Become App Owner",nftFreeDescription:"Please present app space NFT and create app account to continue",nftPaidDescription:"Please present app space NFT and app purchase NFT to continue",freeDescription:"Please create app account to continue",paidDescription:"Please present app purchase NFT and create app account to continue",confirm:"Confirm in your account",success:"Authorization Successful",authorizationTimeout:"Authorization timeout"},waiting:{verifying:"Verifying app meta...",downloading:"Downloading app bundle...",downloadingComponent:"Downloading {name}",extractingComponent:"Extracting {name}",extracting:"Extracting app bundle...",installing:"Installing app components...",installed:"Installed",starting:"Starting the app...",done:"Your app is launching...",parsing:"Parsing app meta...",initializing:"Initializing app configuration...",initializingOwner:"Initializing app owner...",creatingSecurityRules:"Creating default security rules...",assigningDomain:"Assigning default domain...",waitingForDomain:"Waiting for default domain to take effect..."},error:{loadMetaFailed:"Load app information failed",appMetaNotFound:"No information found for this app",downloadFailed:"Failed to download the app, please try again",installFailed:"Failed to install the app, please try again",startFailed:"Failed to start the app, please try again",launchFailed:"Failed to launch the app, please try again",installedButStopped:"The app is installed successfully, but cannot be started. You can start it manually after resolving blocking issues",installedButError:"The app is successfully installed, but failed to start",restoreFailed:"Failed to restore app, please try again",resourceBlocklet:"This blocklet cannot be launched directly, but you can add it into existing application."},steps:{introduction:"Introduction",installApp:"Install Application",purchaseSpace:"Purchase Space",prepareSpace:"Prepare Space"},nav:{myApps:"My Apps",viewMyApps:"View My Apps"},withoutWallet:"Skip DID Wallet Connection",nwFailed:"Failed to retrieve workflow."},issuePassport:{title:"Receive Passport",description:"Use the following methods to receive the passport issued by {name}",dialog:{scan:"Use the following methods to claim the passport",confirm:"Confirm in your account",success:"The passport has been successfully added in your wallet",loginWithPassport:"Connect with this Passport",autoClose:"Page will auto close in {seconds}s",autoJump:"Page will auto jump in {seconds}s"}},lostPassport:{title:"Lost Passport",description:"The owner of {name} can use the following methods to retrieve the passport, members please contact the owner to reissue the passport",recoverDialog:{title:"Recover passport",scan:"Use the following methods to retrieve your passport",confirm:"Confirm on your DID wallet",success:"Successfully retrieved"},receiveDialog:{title:"Receive passport",scan:"Use the following methods to receive the passport",confirm:"Confirm on your DID wallet",success:"Successfully received"},return:"Cancel retrieval operation, return to homepage",recoverPassport:"Recover passport",receivePassport:"Receive passport"},invite:{message:"{name} invite you to be the {role} of {dapp}",success:"You have successfully joined {dapp}",receive:"Receive with",validUntil:"Valid until:",viewPermission:"View Permission",emptyPermission:"Empty Permission",open:"Open",description:{step1:"Download and setup your {wallet}",step2:"Click above button to receive passport",step3:"Login in {dapp} with received passport"},transferNFTDialog:{title:"Accept Blocklet Server {name}",scan:"Connect the Launcher to complete the reception of the Blocklet Server.",confirm:"Review this operation on your DID Wallet",success:"Connect successfully, waiting for confirmation of receiving the Server"}},receive:{dialog:{title:"Receive passport",scan:"After receiving the passport, you can use the passport to log in to the application",scanWithDid:"Please use {did} account to receive this passport. After receiving the passport, you can use the passport to log in to the application",confirm:"Confirm in your account",success:"You are successfully connected"}},navigation:{navigation:"Navigation",access:"Access",members:"Members",passport:"Passport",analytics:"Analytics",dashboard:"Dashboard",studio:"Studio",blockletService:"Blocklet Service",actionFailed:"Action Failed",form:{themeConfig:"Theme Configuration",contentConfig:"Content Configuration",title:"Title",titlePlaceholder:"Please input navigation title",titleTooLong:"Title length should small than {len}",description:"Description",descriptionPlaceholder:"Please input navigation description",descriptionTooLong:"Description length should small than {len}",icon:"Default Icon",iconPlaceholder:"Please select an icon",invalidIcon:"Icon is invalid",findMoreIcon:"Find more icons",link:"Link",linkPlaceholder:"Please input navigation link",invalidLink:"Link is invalid",component:"Component",componentPlaceholder:"Please select navigation component",role:"Role",rolePlaceholder:"Please select navigation role",locale:"Locale",localePlaceholder:"Please input locale need to add",localeExists:"{value} is already exists",activeIcon:"Active Icon",activeColor:"Active Color",color:"Default Color",colorPlaceholder:"e.g. #FF0000",invalidColor:"Invalid hex color",searchIcons:"Search for Icons",searchIconsPlaceholder:"e.g. mdi:home"},action:{add:"Add navigation",addSub:"Add sub navigation",edit:"Edit navigation",hide:"Hide navigation",show:"Show navigation",del:"Delete navigation",new:"New",noAddSub:"Uninstalled component can't add sub navigation",noEdit:"Uninstalled component can't edit",noDel:"Not allowed delete built-in navigation",reset:"Reset",restConfirmTitle:"Reset {section} navigation to default?",restConfirmDesc:"Your custom navigation will be cleared and restored to the default items.",resetSuccessful:"Reset successful",delTabBarTitle:"Do you want to delete this tab?",delTabBarDesc:"It will no longer appear in your bottom navigation, but you can add it back anytime."},didConnect:"DID Connect",didSpaces:"DID Spaces",website:"Website",operations:"Operations",integration:"Integrations",developer:"Developers",serviceApp:{overview:{description:"Monitor app health and details, and easily install, start, or remove Blocklets in one place."},didConnect:{description:"Add team members, set sign‑in options, and manage secure access for smooth collaboration."},aigne:{description:'Connect your blocklet to <a href="{url}" target="_blank">AIGNE Hub</a> for secure LLM access, using self‑hosted or public instance.'},website:{description:"Manage domain, adjust theme, refine branding, and customize navigation for a unique site look."},operations:{description:"View analytics, check activity logs, get alerts, and adjust advanced settings as needed."},integrations:{description:"Link external services via Webhooks, access keys, and MCP servers to expand app capabilities."},developers:{description:"Use logs, performance tracking, and documentation to build, debug, and optimize your app."},didSpaces:{description:"Store and back up your Blocklet app data securely to ensure reliable protection and easy recovery."},publish:{description:"Publish your app to stores or share via links so more people can use it."}}},storage:{spaces:{title:"DID Spaces",tips:"Tips",label:"Enter DID Spaces Gateway",connected:{title:"Connected DID Spaces",tag:"Connected"},connectedWithName:"You have successfully connected to {name}",addedWithName:"You have successfully added {name}",connects:"Connect",reconnect:"Reconnect",addressCannotEmpty:"Address cannot be empty",addressNotValid:"{url} is not a valid address",authorize:{title:"Connect {appName} to DID Spaces",scan:"Use the following methods to allow the app {appName} to connect to DID Spaces",success:"Connected successfully"},provideNFT:{title:"Please show the DID Spaces NFT for {appName}",scan:"Use the following methods to allow the app {appName} show DID Space NFT",success:"Connected successfully"},backup:{title:"Backup",records:"Backup records",without:"Without backup",succeeded:"Backup succeeded",failed:"Backup failed",lastBackup:"Last backup time",lastBackupTip:'It has been {time} since your last successfully backup, please check your backup settings in the "DID Spaces" tab.',noBackup:"No backup",noBackupTip:"No backup has been created yet. We recommend setting up regular backups to protect your data and settings"},autoBackup:{title:"Auto backup",enabled:"Automatic backup is on",disabled:"Automatic backup is off"},autoCheckUpdate:{title:"Automatically check for new version notification",enabled:"Automatically check for new version is on",disabled:"Automatically check for new version is off"},backupSuccessfully:"Backup successfully",restore:"Restore",restoreSuccessfully:"Restore successfully",gateway:{title:"Gateway",select:"Select a DID Spaces",add:{title:"Add DID Spaces",label:"Enter the url of the DID Spaces",failed:"Add DID Spaces failed",invalidUrl:"Invalid DID Spaces gateway url",duplicate:"{name} is already connected to this blocklet"},delete:{title:"Disconnect",succeeded:"Successfully disconnected from DID Spaces {name}",failed:"Failed to disconnect from gateway",failedForSelected:"Unable to disconnect from the selected DID Spaces",descForBackup:`After disconnecting from {name}, you will no longer be able to back up Blocklet to this DID Space. Are you sure you want to disconnect?
|
|
1786
1786
|
You can restore backup operations by reconnecting to {name}.`,descForStorage:`After disconnecting from {name}, you will no longer be able to store data from this Blocklet to this DID Space. Are you sure you want to disconnect?
|
|
1787
|
-
You can resume data storage by reconnecting to {name}.`},connect:{title:"Connect DID Spaces",add:"Connect to DID Spaces now",addTips:"You are not connected to any DID Space yet",switch:"Switch DID Spaces",switchTips:"You are connected to {name}",connected:"Connected"},switch:{failedForMismatchSpace:"Please connect to the correct DID Space {name}"},connectTo:"Connect to DID Spaces"},strategy:{title:"Backup Strategy",autoBackup:"Auto backup",backupNow:"Backup now",viewBackupFiles:"View backup files"},progress:{title:"Backup progress"},record:{title:"Backup records",emptyData:"No records"},notYet:"You don't have a backup in progress yet...",connect:{now:"Connect now",title:"Connect DID Spaces",provider:"Provide your DID Space to start backups",providerForStorage:"Provide your DID Space for data storage",useWallet:"Connect with DID Wallet",useWalletReconnect:"Reconnect with DID Wallet",useSpaceGateway:"Connect using the DID Spaces gateway",useSpaceGatewayReconnect:"Reconnect using the DID Spaces gateway",switchToSpace:"Switch to DID Space",abortBlockletBackup:"Abort backup",switchToSpaceSucceeded:"Switched to DID Space {name}",succeeded:"You have successfully connected to DID Spaces",disconnect:"disconnect"},disconnected:{tag:"Disconnected",reconnectNow:"Reconnect Now"}},appLevel:{title:"App Level Storage",description:"All data generated by the application is stored on this DID Space"}},log:{lastDays:{1:"Last 1 Day",7:"Last 1 Week"}},oauth:{commonSettings:"Common Settings",save:"Save",saveSuccess:"Save successfully",saveFailed:"Save failed",issued:"Issued",thirdPartyLogin:"Third party login",alreadyBindOAuth:"Already bind third party login",alreadyBindWallet:"Already bind DID Wallet",viewDocument:"View Documentation",auth0:{enable:"Enable Auth0 login",domain:"Domain",domainDescription:"Auth0's domain is required",clientId:"Client ID",clientIdDescription:"Auth0 OAuth application client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Auth0 OAuth application Client Secret is required"},github:{enable:"Enable Github login",clientId:"Client ID",clientIdDescription:"Github OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Github OAuth application Client Secret is required"},twitter:{enable:"Enable X login",clientId:"Client ID",clientIdDescription:"X OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"X OAuth application Client Secret is required"},google:{enable:"Enable Google login",clientId:"Client ID",clientIdDescription:"Google OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Google OAuth application Client Secret is required"},apple:{enable:"Enable Apple login",teamId:"Team ID",teamIdDescription:"Apple OAuth application Team ID is required",serviceId:"Service ID",serviceIdDescription:"Apple OAuth application Service ID is required",keyId:"Key ID",keyIdDescription:"Apple OAuth application Key ID is required",authKey:"Auth Key",authKeyDescription:"Apple OAuth application Auth Key is required",bundleId:"Bundle ID",bundleIdDescription:"Apple OAuth application Bundle ID is required"},comingSoon:"More login methods are under construction",moreLogin:"More Login",federated:"Federated Login",oauth:"Third Party Login",runTest:"Test",authorize:"OAuth Authorization",client:{listTitle:"Enable secure third-party access with OAuth Apps",tooltipTitle:"Use your app's built-in OAuth server to authorize external applications with industry-standard protocols. Empower users with secure, seamless authentication and delegated access control.",tab:"OAuth Apps",name:"App Name",clientId:"Client ID",clientSecret:"Client Secret",scope:"Scope",redirectUris:"Redirect URIs",grantTypes:"Grant Types",responseTypes:"Response Types",tokenEndpointAuthMethod:"Token Endpoint Auth Method",actions:"Actions",grantResponse:"Grant & Response",metaContact:"Meta & Contact",clientUri:"Client URI",logoUri:"Logo URI",contacts:"Contacts",tosUri:"Terms of Service URL",policyUri:"Policy URI",jwksSoftware:"JWKS & Software",jwksUri:"JWKS URI",jwks:"JWKS",softwareId:"Software ID",softwareVersion:"Software Version",clientSecretExpiresAt:"Client Secret Expires At",clientIdIssuedAt:"Client ID Issued At",oauthAppDetails:"OAuth App Detail",oauthEndpoints:"OAuth Endpoints",authorizationEndpoint:"Authorization Endpoint",tokenEndpoint:"Token Endpoint",userinfoEndpoint:"Userinfo Endpoint",registrationEndpoint:"Registration Endpoint",endSessionEndpoint:"End Session Endpoint",validate:{clientName:"App name is required",clientNameMinLength:"App name must be at least 3 characters",clientUri:"Homepage URL is required",clientUriInvalid:"Please enter a valid URL starting with http:// or https://",redirectUris:"Authorization callback URL is required",redirectUrisInvalid:"Please enter valid URLs starting with http:// or https://",contacts:"Please enter valid email addresses separated by commas",tosUri:"Terms of Service URL is required",tosUriInvalid:"Please enter a valid URL",policyUri:"Policy URL is required",policyUriInvalid:"Please enter a valid URL",jwksUri:"JWKS URI is required",jwksUriInvalid:"Please enter a valid URL",jwks:"JWKS is required",jwksInvalid:"Please enter a valid JWKS"},input:{expireTime:"Set an expiration date for the client secret for better security",clientName:"App name",clientNamePlaceholder:"Something users will recognize and trust",clientUri:"Homepage URL",clientUriPlaceholder:"https://your-app.com",redirectUris:"Authorization callback URL",redirectUrisPlaceholder:"https://your-app.com/callback",contacts:"Contact Emails",contactsPlaceholder:"admin@your-app.com, support@your-app.com",permissions:"Select the permissions you need",tosUri:"Terms of Service URL",tosUriPlaceholder:"https://your-app.com/terms",policyUri:"Policy URL",policyUriPlaceholder:"https://your-app.com/policy",jwksUri:"JWKS URI",jwksUriPlaceholder:"https://your-app.com/jwks",jwks:"JWKS",jwksPlaceholder:"JSON Web Key Set"},helperText:{clientName:"Something users will recognize and trust.",clientUri:"The full URL to your application homepage.",redirectUris:"Your application's callback URL.",contacts:"The email address of the person responsible for the application.",tosUri:"The URL to your application's terms of service.",policyUri:"The URL to your application's privacy policy.",read:"Read our ",document:"OAuth Documentation ",more:" for more information."},delete:{title:"Delete OAuth Client",description:"Are you sure you want to delete this {clientName} OAuth Client?"},register:"Create a new OAuth App",requiredInformation:"Required Information",optionalInformation:"Optional Information",registerButton:"Create",logo:"Logo",openRegistration:"Open Registration",openidConfiguration:"OpenID Configuration",createUser:"CreatedBy",update:"Update OAuth App",empty:"No Data Added"}},expiration:{mobile:{tips:{success:"{validity}",warning:"{validity}",error:"Expired"},loadFailed:"Retry!"},desktop:{tips:{success:"Subscription will expire after {validity}",warning:"Subscription will expire after {validity}",error:"Subscription Expired"},loading:"Load subscription...",loadFailed:"Failed to load subscription info, please retry!",nextInvoice:"Next Invoice: {date}"}},analytics:{trend:"Trends",detail:"Breakdown",runtime:"Runtime",traffic:{totalRequests:"Total Requests",validRequests:"Success Requests",failedRequests:"Failed Requests",uniqueVisitors:"Unique Visitors",uniqueFiles:"Unique URLs",uniqueReferrers:"Unique Referrers",uniqueNotFound:"Unique 404",uniqueStaticFiles:"Unique Static Files",logSize:"Log Size",bandwidth:"Bandwidth"}},federated:{title:"What is Federated Login?",description:"Federated login can be achieved through single sign-on across multiple systems. You can invite other teams to join the federated login, or proactively join the federated login platform of other organizations.",link:"View Document",inviteJoinFederatedLogin:"Invite to join federated login",inviteJoinFederatedLoginDescription:"Copy the following address and fill it in the application where you need to join to apply for federated login.",federatedLogin:"Federated login",joinFederatedLogin:"Join federated login",joinFederatedLoginDescription:"Please enter the federated login address provided by Master Blocklet to join the federated login",quitFederatedLogin:"Quit federated login",quitFederatedLoginDescription:"After quit federated login, normal login is always available",federatedJoinAppUrl:"Federated login join appUrl",federatedJoinAppUrlRequired:"Please input federated login join appUrl",failedToGetFederatedLoginAppUrl:"Failed to get federated login join appUrl",federatedJoinAppUrlInvalid:"Federated login appUrl is invalid",siteDetail:"Site detail",approveToJoinLogin:"Approve to join federated login",approve:"Enable login",revoke:"Disable login",enableFederatedLogin:"Enable federated login",disableFederatedLogin:"Disable federated login",enableFederatedLoginDescription:"After enable federated login, this site will be auto login",disableFederatedLoginDescription:"After disable federated login, this site will not be auto login",enableFederatedAutoLogin:"Enable automatic login",enableFederatedAutoLoginDescription:"After enable automatic login, if there is currently a unified login status, the site will automatically log in the identity of the federated login",disableFederatedAutoLogin:"Disable automatic login",disableFederatedAutoLoginDescription:"After the automatic login is turned off, the site will not automatically log in the user information of the unified login, and you can still choose to manually click to log in with the identity of the federated login",info:{appId:"APP DID",appPid:"Permanent ID",migratedFrom:"Also Known As",appName:"Blocklet name",appDescription:"Blocklet description",appUrl:"Blocklet url",appLogo:"Blocklet logo",did:"Blocklet DID",serverId:"Blocklet Server ID",serverVersion:"Blocklet Server version",version:"Blocklet version",appliedAt:"Apply at",status:"Status"},status:{pending:"Pending",approved:"Approved",rejected:"Rejected",revoked:"Revoked"},disbandFederatedLogin:"Disband federated login",disbandFederatedLoginDescription:"After disband federated login, all member site will quit federated login automatically",syncConfig:"Sync federated sites config",quitMember:"Remove",quitMemberDescription:"Remove specified members from the site group",removeFederatedLogin:"Remove member",removeFederatedLoginDescription:"After remove specified members from the site group, member can only use normal login"},optionsOrder:{1:"Option One",2:"Option Two"},securityRule:{title:"Security Rule",sortByDescription:"Sort by matching priority",add:"Add Security Rule",edit:"Edit Security Rule",view:"View Security Rule",useless:"Useless Security Rule",form:{precede:"Precede",pathPattern:"Path Pattern",pathPatternPlaceholder:"Please input path pattern",pathPatternErrorText:"Path pattern is invalid",accessPolicyOrResponseHeaderPolicyRequired:"Access Policy or Response Header Policy is required",accessPolicy:"Access Policy",accessPolicyPlaceholder:"Please select access policy",accessPolicyHelperText:"Please select access policy",responseHeaderPolicy:"Response Header Policy",responseHeaderPolicyPlaceholder:"Please select response header policy",responseHeaderPolicyHelperText:"Please select response header policy",remark:"Remark",remarkPlaceholder:"Please input remark",component:"Component",componentPlaceholder:"Please choose component"},delete:{title:"Delete Security Rule ?",description:"After removing a security rule, the rule will no longer take effect"}},responseHeaderPolicy:{title:"Response Header Policy",add:"Add Response Header Policy",edit:"Edit Response Header Policy",view:"View Response Header Policy",form:{name:"Name",namePlaceholder:"Please input name",description:"Description",descriptionPlaceholder:"Please input description",originOverride:"Origin Override",originOverrideHelperText:"Whether to allow the logic in the application to override this response header",cors:{origin:"Origin",originPlaceholder:"Support the following domain formats: http://www.example.com, http://*.example.com, http://www.example.com:8080, * (wildcard is not recommended)",originHelperText:"Domain name starts with http:// or https://, one per line, one wildcard * per line",methods:"Methods",allowedHeaders:"Allowed Headers",allowedHeadersPlaceholder:"It's recommended to fill in *, support multi-line input",allowedHeadersHelperText:"Tell the server which custom HTTP request headers can be used in the next request when sending an OPTIONS request, such as: x-blocklet-version",exposedHeaders:"Exposed Headers",exposedHeadersPlaceholder:"Support multi-line input",exposedHeadersHelperText:"Configure Expose-Headers, for example: X-Content-Range",maxAge:"Max-Age (Seconds)",maxAgeHelperText:"The validity period of the result obtained by the OPTIONS request, which needs to be a positive integer",optionsSuccessStatus:"Options Success Status",preflightContinue:"Preflight Continue",credentials:"Credentials",smartMode:"Smart Mode",smartModeHelperText:"Automatically add all domain names of the current application, as well as all domain names of the federated login site group"}},delete:{title:"Delete Response Header Policy ?",description:"After removing a response header policy, the policy will no longer take effect"}},accessPolicy:{title:"Access Policy",add:"Add Access Policy",edit:"Edit Access Policy",view:"View Access Policy",form:{name:"Name",namePlaceholder:"Please input name",description:"Description",descriptionPlaceholder:"Please input description",roles:"Access Roles",accessType:"Access type"},delete:{title:"Delete Access Policy ?",description:"After removing an access policy, the policy will no longer take effect"}},pagination:{next:"Next Page",previous:"Previous Page",rowsPerPage:"Per page:",displayRows:"of",jumpToPage:"Jump to Page:"},webhookEndpoint:{triggeredFrom:"This webhook was triggered from attempt",listTitle:"Send real-time event data with Webhooks",tooltipTitle:"Seamlessly connect your app to external systems by sending real-time event notifications. Webhooks enable powerful integrations and automated workflows across your tools and services.",createWebhook:"Create Webhook",createWebhookTitle:"Create Webhook",selectAllEvents:"Select All Events",selectAllEventsTooltip:"Select all available events",selectedEventsCount:"{count} events selected",selectedCount:"{count} selected",eventsCount:"{count} events",saveWebhook:"Create Webhook",noAvailableEvents:"No available events",loadingEvents:"Loading events...",loadingError:"Failed to load events: {message}",title:"Webhooks",noWebhooksAdded:"No webhooks added",validation:{urlRequired:"URL is required",urlInvalid:"Please enter a valid URL",descriptionRequired:"Description is required",eventRequired:"Please select at least one event"},hosted:"Hosted endpoints",add:"Create Webhook",addTip:"Set up your webhook endpoint to receive live events",listen:"Listen for",version:"API Version",attempts:"Webhook Attempts",url:{label:"URL",description:"Webhook URL"},description:{label:"Description",description:"An optional description of what this endpoint is used for"},events:{label:"Select events to listen to",description:"An optional description of what this endpoint is used for"},disabled:"Disabled",enabled:"Enabled",disable:"Disable",enable:"Enable",editWebhookTitle:"Update Webhook",updateWebhook:"Update Webhook",waitingForEvents:"Waiting for events...",loadingMore:"Loading more...",loadMore:"Load more",response:"Response",request:"Request",eventData:"Event Data",deleteWebhook:{title:"Delete Webhook?",description:"After deleting a webhook, the webhook will no longer receive events"},success:" Success"},description:{environment:"The current variables will take effect when {name} is running. Need to restart the application to take effect.",preferences:"The current variables will take effect when {name} is running. Changes will be applied after saving, no application restart required."},preferencesFor:"Preferences for {name}",environmentFor:"Environments for {name}",environmentTips:{delete:"Are you sure you want to delete this row?",deleteForbidden:"Only key of custom env can be changed."},accessKey:"Access Key",command:"Command",mcp:{listTitle:"Access your blocklet from MCP Clients",tooltipTitle:"Explore the list of MCP servers supported by this blocklet, select a server to instantly view the connection commands you need to join from your client.",endpoint:"MCP Endpoint",available:"Available MCP Servers",noServer:"No MCP server available"},installCommand:"Installation Command",label:{add:"Add",apply:"Apply labels",manage:"Manage labels",title:"Labels",description:"Description",systemLabel:"System Label",create:"Create label",edit:"Edit label",name:"Name",slug:"Slug",parentLabel:"Parent label",color:"Color",search:"Search labels",saveSuccess:"Label saved successfully",delete:"Delete",deleteTip:'Delete "{name}"?',deleteDesc:'After deleting a label, the label will no longer be used. Are you sure you want to delete "{name}"?',deleteSuccess:"Label deleted successfully",reassignTip:"If this label is in use, reassign its items to another label.",reassignTo:"Choose a new label",recently:"Recent",noMatching:"No labels found",noLabels:"No labels created yet",filter:"Filter labels",createNewLabel:'Create new label "{name}"',actionLabel:"Assign labels in bulk",selectLabels:"Select labels",nameRequired:"Title is required",nameMinLength:"Title must be at least 1 character",nameMaxLength:"Title must be less than 64 characters",slugRequired:"Slug is required",slugMinLength:"Slug must be at least 1 character",slugMaxLength:"Slug must be less than 128 characters",descriptionMaxLength:"Description must be less than 255 characters",colorRequired:"Color is required",colorInvalid:"Color is invalid"}},en$1={blocklet:{restoreBlocklet:{title:"Restore Blocklet",description:"Please select the blocklet you want to restore",verify:{title:"Verify Ownership",subTitle:"Verify ownership of the blocklet with your wallet",verify:"Verify",reconnect:"Try another blocklet",scan:"Scan the QR code to prove ownership",confirm:"Sign to allow the server to download and decrypt the backup",success:"Ownership verified. Restoring now.",exists:"This blocklet already exists on this server",open:"Visit Blocklet",overwrite:"Overwrite"},overwrite:{title:"Overwrite existing blocklet?",description:"The blocklet you are restoring already exists on this server. Do you want to overwrite it? The existing blocklet will be deleted first if you continue."},restore:{title:"Restore Blocklet"}},restoreFromServer:{selectTitle:"Select Application",description:"Please select the application you want to restore",backupIn:"Backup in"},restoreFromSpaces:{title:"Restore from DID Spaces",navSubTitle:"Restore",connect:{title:"Connect to DID Spaces",subTitle:"Jump to DID Spaces, and select the blocklet you want to restore.",select:"Select DID Spaces Gateway",connect:"Connect"},selectBlocklet:{title:"Select App"},restore:{title:"Restore App",subTitle:"The app is being restored",completeTitle:"Everything is Ready",installedTitle:"Successfully restored!",installedSubTitle:"But still needs some configuration to start",support:'If retrying does not work, please ask help in the <a href="{communityLink}" target="_blank">community</a> or contact us at <a href="mailto: {supportEmail}">{supportEmail}</a>.'},nftAuthDialog:{title:"Present Your App Space NFT",scan:"Scan the QR code with your wallet to present your NFT",confirm:"Confirm in your wallet",success:"NFT verified"},progress:{waiting:"Waiting for restore...",restoring:"Restoring...",importData:"Importing data...",downloading:"Downloading files, progress: {progress}",importSuccess:"Successfully imported!",installing:"Installing..."}}},server:{checkUpgrade:"Check new version"}},flatMerge=De=>flat(merge(...De)),translations={en:flat(merge(en$2,en$1)),ar:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ar-C89Z16Ql.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ar-D5lpNQex.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},de:async()=>{const De=await Promise.all([__vitePreload(()=>import("./de-BsCDrfBl.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./de-B-nBacto.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},es:async()=>{const De=await Promise.all([__vitePreload(()=>import("./es-BJh_XsEm.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./es-Bim5LI46.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},fr:async()=>{const De=await Promise.all([__vitePreload(()=>import("./fr-DRJMwn7V.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./fr-DaLsDtII.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},hi:async()=>{const De=await Promise.all([__vitePreload(()=>import("./hi-h-9Yl5g9.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./hi-BGJWWeJR.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},id:async()=>{const De=await Promise.all([__vitePreload(()=>import("./id-BDWggRsa.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./id-D5FUCxFy.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ja:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ja-R9EF3xbB.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ja-BNVc3FKo.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ko:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ko-C_QLPZyk.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ko-ChYlA2AT.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},pt:async()=>{const De=await Promise.all([__vitePreload(()=>import("./pt-DpYO8djd.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./pt-CG5Nkqxu.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ru:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ru-DkZtar3s.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ru-yY3pEHy3.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},th:async()=>{const De=await Promise.all([__vitePreload(()=>import("./th-04iX5CrT.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./th-DpMvfLqJ.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},vi:async()=>{const De=await Promise.all([__vitePreload(()=>import("./vi-kOP0E9Ga.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./vi-DLoHNt-o.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},zh:async()=>{const De=await Promise.all([__vitePreload(()=>import("./zh-DZI4Yy2m.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./zh-CKz_A9v_.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},"zh-TW":async()=>{const De=await Promise.all([__vitePreload(()=>import("./zh-tw-BLapUUeq.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./zh-tw-CQSCOuqr.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)}};function GlobalStyles(){const De=useTheme(),Me=reactExports.useMemo(()=>css`
|
|
1787
|
+
You can resume data storage by reconnecting to {name}.`},connect:{title:"Connect DID Spaces",add:"Connect to DID Spaces now",addTips:"You are not connected to any DID Space yet",switch:"Switch DID Spaces",switchTips:"You are connected to {name}",connected:"Connected"},switch:{failedForMismatchSpace:"Please connect to the correct DID Space {name}"},connectTo:"Connect to DID Spaces"},strategy:{title:"Backup Strategy",autoBackup:"Auto backup",backupNow:"Backup now",viewBackupFiles:"View backup files"},progress:{title:"Backup progress"},record:{title:"Backup records",emptyData:"No records"},notYet:"You don't have a backup in progress yet...",connect:{now:"Connect now",title:"Connect DID Spaces",provider:"Provide your DID Space to start backups",providerForStorage:"Provide your DID Space for data storage",useWallet:"Connect with DID Wallet",useWalletReconnect:"Reconnect with DID Wallet",useSpaceGateway:"Connect using the DID Spaces gateway",useSpaceGatewayReconnect:"Reconnect using the DID Spaces gateway",switchToSpace:"Switch to DID Space",abortBlockletBackup:"Abort backup",switchToSpaceSucceeded:"Switched to DID Space {name}",succeeded:"You have successfully connected to DID Spaces",disconnect:"disconnect"},disconnected:{tag:"Disconnected",reconnectNow:"Reconnect Now"}},appLevel:{title:"App Level Storage",description:"All data generated by the application is stored on this DID Space"}},log:{lastDays:{1:"Last 1 Day",7:"Last 1 Week"}},oauth:{commonSettings:"Common Settings",save:"Save",saveSuccess:"Save successfully",saveFailed:"Save failed",issued:"Issued",thirdPartyLogin:"Third party login",alreadyBindOAuth:"Already bind third party login",alreadyBindWallet:"Already bind DID Wallet",viewDocument:"View Documentation",auth0:{enable:"Enable Auth0 login",domain:"Domain",domainDescription:"Auth0's domain is required",clientId:"Client ID",clientIdDescription:"Auth0 OAuth application client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Auth0 OAuth application Client Secret is required"},github:{enable:"Enable Github login",clientId:"Client ID",clientIdDescription:"Github OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Github OAuth application Client Secret is required"},twitter:{enable:"Enable X login",clientId:"Client ID",clientIdDescription:"X OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"X OAuth application Client Secret is required"},google:{enable:"Enable Google login",clientId:"Client ID",clientIdDescription:"Google OAuth application Client ID is required",clientSecret:"Client Secret",clientSecretDescription:"Google OAuth application Client Secret is required"},apple:{enable:"Enable Apple login",teamId:"Team ID",teamIdDescription:"Apple OAuth application Team ID is required",serviceId:"Service ID",serviceIdDescription:"Apple OAuth application Service ID is required",keyId:"Key ID",keyIdDescription:"Apple OAuth application Key ID is required",authKey:"Auth Key",authKeyDescription:"Apple OAuth application Auth Key is required",bundleId:"Bundle ID",bundleIdDescription:"Apple OAuth application Bundle ID is required"},comingSoon:"More login methods are under construction",moreLogin:"More Login",federated:"Federated Login",oauth:"Third Party Login",runTest:"Test",authorize:"OAuth Authorization",client:{listTitle:"Enable secure third-party access with OAuth Apps",tooltipTitle:"Use your app's built-in OAuth server to authorize external applications with industry-standard protocols. Empower users with secure, seamless authentication and delegated access control.",tab:"OAuth Apps",name:"App Name",clientId:"Client ID",clientSecret:"Client Secret",scope:"Scope",redirectUris:"Redirect URIs",grantTypes:"Grant Types",responseTypes:"Response Types",tokenEndpointAuthMethod:"Token Endpoint Auth Method",actions:"Actions",grantResponse:"Grant & Response",metaContact:"Meta & Contact",clientUri:"Client URI",logoUri:"Logo URI",contacts:"Contacts",tosUri:"Terms of Service URL",policyUri:"Policy URI",jwksSoftware:"JWKS & Software",jwksUri:"JWKS URI",jwks:"JWKS",softwareId:"Software ID",softwareVersion:"Software Version",clientSecretExpiresAt:"Client Secret Expires At",clientIdIssuedAt:"Client ID Issued At",oauthAppDetails:"OAuth App Detail",oauthEndpoints:"OAuth Endpoints",authorizationEndpoint:"Authorization Endpoint",tokenEndpoint:"Token Endpoint",userinfoEndpoint:"Userinfo Endpoint",registrationEndpoint:"Registration Endpoint",endSessionEndpoint:"End Session Endpoint",validate:{clientName:"App name is required",clientNameMinLength:"App name must be at least 3 characters",clientUri:"Homepage URL is required",clientUriInvalid:"Please enter a valid URL starting with http:// or https://",redirectUris:"Authorization callback URL is required",redirectUrisInvalid:"Please enter valid URLs starting with http:// or https://",contacts:"Please enter valid email addresses separated by commas",tosUri:"Terms of Service URL is required",tosUriInvalid:"Please enter a valid URL",policyUri:"Policy URL is required",policyUriInvalid:"Please enter a valid URL",jwksUri:"JWKS URI is required",jwksUriInvalid:"Please enter a valid URL",jwks:"JWKS is required",jwksInvalid:"Please enter a valid JWKS"},input:{expireTime:"Set an expiration date for the client secret for better security",clientName:"App name",clientNamePlaceholder:"Something users will recognize and trust",clientUri:"Homepage URL",clientUriPlaceholder:"https://your-app.com",redirectUris:"Authorization callback URL",redirectUrisPlaceholder:"https://your-app.com/callback",contacts:"Contact Emails",contactsPlaceholder:"admin@your-app.com, support@your-app.com",permissions:"Select the permissions you need",tosUri:"Terms of Service URL",tosUriPlaceholder:"https://your-app.com/terms",policyUri:"Policy URL",policyUriPlaceholder:"https://your-app.com/policy",jwksUri:"JWKS URI",jwksUriPlaceholder:"https://your-app.com/jwks",jwks:"JWKS",jwksPlaceholder:"JSON Web Key Set"},helperText:{clientName:"Something users will recognize and trust.",clientUri:"The full URL to your application homepage.",redirectUris:"Your application's callback URL.",contacts:"The email address of the person responsible for the application.",tosUri:"The URL to your application's terms of service.",policyUri:"The URL to your application's privacy policy.",read:"Read our ",document:"OAuth Documentation ",more:" for more information."},delete:{title:"Delete OAuth Client",description:"Are you sure you want to delete this {clientName} OAuth Client?"},register:"Create a new OAuth App",requiredInformation:"Required Information",optionalInformation:"Optional Information",registerButton:"Create",logo:"Logo",openRegistration:"Open Registration",openidConfiguration:"OpenID Configuration",createUser:"CreatedBy",update:"Update OAuth App",empty:"No Data Added"}},expiration:{mobile:{tips:{success:"{validity}",warning:"{validity}",error:"Expired"},loadFailed:"Retry!"},desktop:{tips:{success:"Subscription will expire after {validity}",warning:"Subscription will expire after {validity}",error:"Subscription Expired"},loading:"Load subscription...",loadFailed:"Failed to load subscription info, please retry!",nextInvoice:"Next Invoice: {date}"}},analytics:{trend:"Trends",detail:"Breakdown",runtime:"Runtime",traffic:{totalRequests:"Total Requests",validRequests:"Success Requests",failedRequests:"Failed Requests",uniqueVisitors:"Unique Visitors",uniqueFiles:"Unique URLs",uniqueReferrers:"Unique Referrers",uniqueNotFound:"Unique 404",uniqueStaticFiles:"Unique Static Files",logSize:"Log Size",bandwidth:"Bandwidth"}},federated:{title:"What is Federated Login?",description:"Federated login can be achieved through single sign-on across multiple systems. You can invite other teams to join the federated login, or proactively join the federated login platform of other organizations.",link:"View Document",inviteJoinFederatedLogin:"Invite to join federated login",inviteJoinFederatedLoginDescription:"Copy the following address and fill it in the application where you need to join to apply for federated login.",federatedLogin:"Federated login",joinFederatedLogin:"Join federated login",joinFederatedLoginDescription:"Please enter the federated login address provided by Master Blocklet to join the federated login",quitFederatedLogin:"Quit federated login",quitFederatedLoginDescription:"After quit federated login, normal login is always available",federatedJoinAppUrl:"Federated login join appUrl",federatedJoinAppUrlRequired:"Please input federated login join appUrl",failedToGetFederatedLoginAppUrl:"Failed to get federated login join appUrl",federatedJoinAppUrlInvalid:"Federated login appUrl is invalid",siteDetail:"Site detail",approveToJoinLogin:"Approve to join federated login",approve:"Enable login",revoke:"Disable login",enableFederatedLogin:"Enable federated login",disableFederatedLogin:"Disable federated login",enableFederatedLoginDescription:"After enable federated login, this site will be auto login",disableFederatedLoginDescription:"After disable federated login, this site will not be auto login",enableFederatedAutoLogin:"Enable automatic login",enableFederatedAutoLoginDescription:"After enable automatic login, if there is currently a unified login status, the site will automatically log in the identity of the federated login",disableFederatedAutoLogin:"Disable automatic login",disableFederatedAutoLoginDescription:"After the automatic login is turned off, the site will not automatically log in the user information of the unified login, and you can still choose to manually click to log in with the identity of the federated login",info:{appId:"APP DID",appPid:"Permanent ID",migratedFrom:"Also Known As",appName:"Blocklet name",appDescription:"Blocklet description",appUrl:"Blocklet url",appLogo:"Blocklet logo",did:"Blocklet DID",serverId:"Blocklet Server ID",serverVersion:"Blocklet Server version",version:"Blocklet version",appliedAt:"Apply at",status:"Status"},status:{pending:"Pending",approved:"Approved",rejected:"Rejected",revoked:"Revoked"},disbandFederatedLogin:"Disband federated login",disbandFederatedLoginDescription:"After disband federated login, all member site will quit federated login automatically",syncConfig:"Sync federated sites config",quitMember:"Remove",quitMemberDescription:"Remove specified members from the site group",removeFederatedLogin:"Remove member",removeFederatedLoginDescription:"After remove specified members from the site group, member can only use normal login"},optionsOrder:{1:"Option One",2:"Option Two"},securityRule:{title:"Security Rule",sortByDescription:"Sort by matching priority",add:"Add Security Rule",edit:"Edit Security Rule",view:"View Security Rule",useless:"Useless Security Rule",form:{precede:"Precede",pathPattern:"Path Pattern",pathPatternPlaceholder:"Please input path pattern",pathPatternErrorText:"Path pattern is invalid",accessPolicyOrResponseHeaderPolicyRequired:"Access Policy or Response Header Policy is required",accessPolicy:"Access Policy",accessPolicyPlaceholder:"Please select access policy",accessPolicyHelperText:"Please select access policy",responseHeaderPolicy:"Response Header Policy",responseHeaderPolicyPlaceholder:"Please select response header policy",responseHeaderPolicyHelperText:"Please select response header policy",remark:"Remark",remarkPlaceholder:"Please input remark",component:"Component",componentPlaceholder:"Please choose component"},delete:{title:"Delete Security Rule ?",description:"After removing a security rule, the rule will no longer take effect"}},responseHeaderPolicy:{title:"Response Header Policy",add:"Add Response Header Policy",edit:"Edit Response Header Policy",view:"View Response Header Policy",form:{name:"Name",namePlaceholder:"Please input name",description:"Description",descriptionPlaceholder:"Please input description",originOverride:"Origin Override",originOverrideHelperText:"Whether to allow the logic in the application to override this response header",cors:{origin:"Origin",originPlaceholder:"Support the following domain formats: http://www.example.com, http://*.example.com, http://www.example.com:8080, * (wildcard is not recommended)",originHelperText:"Domain name starts with http:// or https://, one per line, one wildcard * per line",methods:"Methods",allowedHeaders:"Allowed Headers",allowedHeadersPlaceholder:"It's recommended to fill in *, support multi-line input",allowedHeadersHelperText:"Tell the server which custom HTTP request headers can be used in the next request when sending an OPTIONS request, such as: x-blocklet-version",exposedHeaders:"Exposed Headers",exposedHeadersPlaceholder:"Support multi-line input",exposedHeadersHelperText:"Configure Expose-Headers, for example: X-Content-Range",maxAge:"Max-Age (Seconds)",maxAgeHelperText:"The validity period of the result obtained by the OPTIONS request, which needs to be a positive integer",optionsSuccessStatus:"Options Success Status",preflightContinue:"Preflight Continue",credentials:"Credentials",smartMode:"Smart Mode",smartModeHelperText:"Automatically add all domain names of the current application, as well as all domain names of the federated login site group"}},delete:{title:"Delete Response Header Policy ?",description:"After removing a response header policy, the policy will no longer take effect"}},accessPolicy:{title:"Access Policy",add:"Add Access Policy",edit:"Edit Access Policy",view:"View Access Policy",form:{name:"Name",namePlaceholder:"Please input name",description:"Description",descriptionPlaceholder:"Please input description",roles:"Access Roles",accessType:"Access type"},delete:{title:"Delete Access Policy ?",description:"After removing an access policy, the policy will no longer take effect"}},pagination:{next:"Next Page",previous:"Previous Page",rowsPerPage:"Per page:",displayRows:"of",jumpToPage:"Jump to Page:"},webhookEndpoint:{triggeredFrom:"This webhook was triggered from attempt",listTitle:"Send real-time event data with Webhooks",tooltipTitle:"Seamlessly connect your app to external systems by sending real-time event notifications. Webhooks enable powerful integrations and automated workflows across your tools and services.",createWebhook:"Create Webhook",createWebhookTitle:"Create Webhook",selectAllEvents:"Select All Events",selectAllEventsTooltip:"Select all available events",selectedEventsCount:"{count} events selected",selectedCount:"{count} selected",eventsCount:"{count} events",saveWebhook:"Create Webhook",noAvailableEvents:"No available events",loadingEvents:"Loading events...",loadingError:"Failed to load events: {message}",title:"Webhooks",noWebhooksAdded:"No webhooks added",validation:{urlRequired:"URL is required",urlInvalid:"Please enter a valid URL",descriptionRequired:"Description is required",eventRequired:"Please select at least one event"},hosted:"Hosted endpoints",add:"Create Webhook",addTip:"Set up your webhook endpoint to receive live events",listen:"Listen for",version:"API Version",attempts:"Webhook Attempts",url:{label:"URL",description:"Webhook URL"},description:{label:"Description",description:"An optional description of what this endpoint is used for"},events:{label:"Select events to listen to",description:"An optional description of what this endpoint is used for"},disabled:"Disabled",enabled:"Enabled",disable:"Disable",enable:"Enable",editWebhookTitle:"Update Webhook",updateWebhook:"Update Webhook",waitingForEvents:"Waiting for events...",loadingMore:"Loading more...",loadMore:"Load more",response:"Response",request:"Request",eventData:"Event Data",deleteWebhook:{title:"Delete Webhook?",description:"After deleting a webhook, the webhook will no longer receive events"},success:" Success"},description:{environment:"The current variables will take effect when {name} is running. Need to restart the application to take effect.",preferences:"The current variables will take effect when {name} is running. Changes will be applied after saving, no application restart required."},preferencesFor:"Preferences for {name}",environmentFor:"Environments for {name}",environmentTips:{delete:"Are you sure you want to delete this row?",deleteForbidden:"Only key of custom env can be changed."},accessKey:"Access Key",command:"Command",mcp:{listTitle:"Access your blocklet from MCP Clients",tooltipTitle:"Explore the list of MCP servers supported by this blocklet, select a server to instantly view the connection commands you need to join from your client.",endpoint:"MCP Endpoint",available:"Available MCP Servers",noServer:"No MCP server available"},installCommand:"Installation Command",label:{add:"Add",apply:"Apply labels",manage:"Manage labels",title:"Labels",description:"Description",systemLabel:"System Label",create:"Create label",edit:"Edit label",name:"Name",slug:"Slug",parentLabel:"Parent label",color:"Color",search:"Search labels",saveSuccess:"Label saved successfully",delete:"Delete",deleteTip:'Delete "{name}"?',deleteDesc:'After deleting a label, the label will no longer be used. Are you sure you want to delete "{name}"?',deleteSuccess:"Label deleted successfully",reassignTip:"If this label is in use, reassign its items to another label.",reassignTo:"Choose a new label",recently:"Recent",noMatching:"No labels found",noLabels:"No labels created yet",filter:"Filter labels",createNewLabel:'Create new label "{name}"',actionLabel:"Assign labels in bulk",selectLabels:"Select labels",nameRequired:"Title is required",nameMinLength:"Title must be at least 1 character",nameMaxLength:"Title must be less than 64 characters",slugRequired:"Slug is required",slugMinLength:"Slug must be at least 1 character",slugMaxLength:"Slug must be less than 128 characters",descriptionMaxLength:"Description must be less than 255 characters",colorRequired:"Color is required",colorInvalid:"Color is invalid"}},en$1={blocklet:{restoreBlocklet:{title:"Restore Blocklet",description:"Please select the blocklet you want to restore",verify:{title:"Verify Ownership",subTitle:"Verify ownership of the blocklet with your wallet",verify:"Verify",reconnect:"Try another blocklet",scan:"Scan the QR code to prove ownership",confirm:"Sign to allow the server to download and decrypt the backup",success:"Ownership verified. Restoring now.",exists:"This blocklet already exists on this server",open:"Visit Blocklet",overwrite:"Overwrite"},overwrite:{title:"Overwrite existing blocklet?",description:"The blocklet you are restoring already exists on this server. Do you want to overwrite it? The existing blocklet will be deleted first if you continue."},restore:{title:"Restore Blocklet"}},restoreFromServer:{selectTitle:"Select Application",description:"Please select the application you want to restore",backupIn:"Backup in"},restoreFromSpaces:{title:"Restore from DID Spaces",navSubTitle:"Restore",connect:{title:"Connect to DID Spaces",subTitle:"Jump to DID Spaces, and select the blocklet you want to restore.",select:"Select DID Spaces Gateway",connect:"Connect"},selectBlocklet:{title:"Select App"},restore:{title:"Restore App",subTitle:"The app is being restored",completeTitle:"Everything is Ready",installedTitle:"Successfully restored!",installedSubTitle:"But still needs some configuration to start",support:'If retrying does not work, please ask help in the <a href="{communityLink}" target="_blank">community</a> or contact us at <a href="mailto: {supportEmail}">{supportEmail}</a>.'},nftAuthDialog:{title:"Present Your App Space NFT",scan:"Scan the QR code with your wallet to present your NFT",confirm:"Confirm in your wallet",success:"NFT verified"},progress:{waiting:"Waiting for restore...",restoring:"Restoring...",importData:"Importing data...",downloading:"Downloading files, progress: {progress}",importSuccess:"Successfully imported!",installing:"Installing..."}}},server:{checkUpgrade:"Check new version"}},flatMerge=De=>flat(merge(...De)),translations={en:flat(merge(en$2,en$1)),ar:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ar-Cwm1-0yA.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ar-D5lpNQex.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},de:async()=>{const De=await Promise.all([__vitePreload(()=>import("./de-XQM4sDLo.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./de-B-nBacto.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},es:async()=>{const De=await Promise.all([__vitePreload(()=>import("./es-D4zFwVhj.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./es-Bim5LI46.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},fr:async()=>{const De=await Promise.all([__vitePreload(()=>import("./fr-BQXlmrTL.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./fr-DaLsDtII.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},hi:async()=>{const De=await Promise.all([__vitePreload(()=>import("./hi-Cdz2GskJ.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./hi-BGJWWeJR.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},id:async()=>{const De=await Promise.all([__vitePreload(()=>import("./id-Q9i8FdSt.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./id-D5FUCxFy.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ja:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ja-CH8WZngC.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ja-BNVc3FKo.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ko:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ko-Nli9PwTV.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ko-ChYlA2AT.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},pt:async()=>{const De=await Promise.all([__vitePreload(()=>import("./pt-eVksFEJb.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./pt-CG5Nkqxu.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},ru:async()=>{const De=await Promise.all([__vitePreload(()=>import("./ru-ycnIgUGb.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./ru-yY3pEHy3.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},th:async()=>{const De=await Promise.all([__vitePreload(()=>import("./th-BvLhxkpi.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./th-DpMvfLqJ.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},vi:async()=>{const De=await Promise.all([__vitePreload(()=>import("./vi-BmM-09Iq.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./vi-DLoHNt-o.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},zh:async()=>{const De=await Promise.all([__vitePreload(()=>import("./zh-BkVzTN9N.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./zh-CKz_A9v_.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)},"zh-TW":async()=>{const De=await Promise.all([__vitePreload(()=>import("./zh-tw-CW4J6ddt.js"),[],import.meta.url).then(Me=>Me.default),__vitePreload(()=>import("./zh-tw-CQSCOuqr.js"),[],import.meta.url).then(Me=>Me.default)]);return flatMerge(De)}};function GlobalStyles(){const De=useTheme(),Me=reactExports.useMemo(()=>css`
|
|
1788
1788
|
a {
|
|
1789
1789
|
color: ${teal.A700};
|
|
1790
1790
|
text-decoration: none;
|
|
@@ -2900,4 +2900,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
2900
2900
|
padding-top: 16px;
|
|
2901
2901
|
${De=>De.scrollable?"":"overflow: hidden"};
|
|
2902
2902
|
}
|
|
2903
|
-
`;function GlobalSubscriber(){const{t:De}=V$2(),{session:Me}=useSessionContext$1(),{info:He,refresh:Ge}=useNodeContext();return useSubscription(constantExports.TeamEvents.userUpdated,({teamDid:Je,user:Ye})=>{Je===He.did&&Ye&&!Ye.approved&&Me&&Me.user&&Me.user.did===Ye.did&&(H$7.warning(De("session.blockAccess"),{autoHideDuration:10*1e3}),Me.logout())}),useSubscription(constantExports$1.EVENTS.NOTIFICATION_CREATE,Je=>{Je.entityType==="node"&&Ge({silent:!0})}),useSubscription(constantExports$1.EVENTS.NODE_UPDATED,()=>{Ge({silent:!0})}),null}const authorize=({user:De,launchType:Me,nftId:He})=>{if(!De)return!1;if(Me==="serverless"){if(!He)throw new Error("nftId is required");return De?.controller?.nftId===He}return(De.permissions||[]).includes("mutate_blocklets")},isServerlessBlockletInstalled=De=>De.isGetBlocklet&&De.runtimeBlocklet?.controller?.consumedAt,getRestoredAccessUrl=async De=>{const Me=getBlockletUrls({blocklet:De});let He="";return He=Me.find(Ge=>{try{const{hostname:Je}=new URL(Ge);return urlEvaluationExports.isSlpDomain(Je)}catch(Je){return console.error(Je),!1}}),He||(He=await getAccessibleUrl(Me)),He},LaunchBlockletContext=reactExports.createContext({}),{Provider:Provider$1,Consumer:Consumer$1}=LaunchBlockletContext;function LaunchBlockletProvider({children:De}){const{session:Me}=useSessionContext$1(),{t:He}=V$2(),{api:Ge,info:Je}=useNodeContext(),[Ye]=useSearchParams(),Ze=Ye.get("launchType"),et=Ye.get("fromLauncher"),Qe=Ye.get("blocklet_meta_url")||"",nt=Ye.get("nftId")||"",tt=Ye.get("from")||"",rt=Ye.get("launcherSessionId")||"",ot=Ye.get("launcherUrl")||"",at=tt==="url",st=tt==="empty",ut=at||st?"":new URL(Qe).origin,[dt,ct]=reactExports.useState({meta:null,appDid:Ye.get("appDid")||null,sessionId:Ye.get("sessionId")||null,isFree:!0,isExternal:!1,isInstalling:!1,isInstalled:!1,isRunning:!1,launcherSession:null,registryUrl:""}),ft=(mt,bt)=>ct(Et=>({...Et,appDid:mt,sessionId:bt})),ht=authorize({user:Me.user,launchType:Ze,nftId:nt}),[yt,gt]=reactExports.useState(null),[Ct,At]=reactExports.useState(!0),_t=reactExports.useMemo(()=>Je?getServerUrl(Je):"",[Je]),Pt=async mt=>{if(!mt)throw new Error("appDid should not be empty");const{blocklet:bt}=await Ge.getBlocklet({input:{did:mt,attachConfig:!1}});if(!bt)return null;const Et=constantExports.BlockletStatus[bt.status],Tt=!!nt,St=Et<constantExports.BlockletStatus.installed,Rt=Et===constantExports.BlockletStatus.installed,kt=Et===constantExports.BlockletStatus.running;return ct(wt=>({...wt,isInstalled:Rt,isRunning:kt,isExternal:Tt,isInstalling:St})),{isInstalled:Rt,isRunning:kt,isExternal:Tt,isInstalling:St}},Lt=async()=>{if(At(!0),st){ct(mt=>({...mt,meta:{title:Ye.get("title")||"",description:Ye.get("description")||""}})),At(!1);return}try{if(!Qe&&!st)throw new Error(He("common.invalidParam"));const[{meta:mt,isFree:bt,registryUrl:Et},{launcherSession:Tt,error:St}]=await Promise.all([Ge.getBlockletMetaFromUrl({input:{url:Qe,checkPrice:!0}}),rt?Ge.getLauncherSession({input:{launcherSessionId:rt,launcherUrl:ot}}):Promise.resolve({})]);if(rt&&!Tt)throw new Error(`Launch session invalid: ${St}`);if(!mt)throw new Error(He("LaunchBlockletBlocklet.error.loadMetaFailed"));let Rt={};ht&&dt.appDid&&(Rt=await Pt(dt.appDid)),ct(kt=>({...kt,...Rt,meta:mt,isFree:bt,registryUrl:Et,launcherSession:Tt}))}catch(mt){console.error(mt),gt(mt.message)}finally{At(!1)}};reactExports.useEffect(()=>{Me?.user?.role===constantExports$1.SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER&&Me?.user?.controller?.nftId!==nt&&Me.logout(),Lt()},[]),reactExports.useEffect(()=>{Ct||!dt.meta||(ht?dt.appDid&&Pt(dt.appDid).catch(mt=>{H$7.error(mt.message)}):(ct(mt=>({...mt,isInstalled:!1,isRunning:!1,isExternal:!1})),gt(null)))},[ht]);const Dt={meta:dt.meta,isFree:dt.isFree,appDid:dt.appDid,sessionId:dt.sessionId,isInstalling:dt.isInstalling,isInstalled:dt.isInstalled,isExternal:dt.isExternal,isRunning:dt.isRunning,serverUrl:_t,storeUrl:dt.registryUrl||ut,blockletMetaUrl:Qe,fromLauncher:et,loading:Ct,error:yt,api:Ge,getBlocklet:Pt,setAppDid:ft,launcherUrl:ot,launcherSession:dt.launcherSession,launcherSessionId:rt,launchType:Ze};return jsxRuntimeExports.jsx(Provider$1,{value:Dt,children:De})}function useLaunchBlockletContext(){return reactExports.useContext(LaunchBlockletContext)}var useAsyncExports=requireUseAsync();const useAsync=getDefaultExportFromCjs$1(useAsyncExports);function useQuery(){return new URLSearchParams(useLocation().search)}const BlockletAppContext=reactExports.createContext(),{Provider,Consumer}=BlockletAppContext;function BlockletAppProvider({children:De}){const He=useQuery().get("blocklet_meta_url"),Ge=useAsync(async()=>{const{data:Ye}=await axios.get(He);return Ye});if(Ge.loading)return jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});const Je={meta:Ge.value,error:Ge.error};return jsxRuntimeExports.jsx(Provider,{value:Je,children:De})}BlockletAppProvider.propTypes={children:o$h.any.isRequired};function useBlockletAppContext(){return reactExports.useContext(BlockletAppContext)}const Dashboard=reactExports.lazy(()=>__vitePreload(()=>import("./index-D1awT4uB.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)),BlockletList=reactExports.lazy(()=>__vitePreload(()=>import("./index-CvbVZVN0.js"),__vite__mapDeps([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,2,31,32,33,34,35,36,37,38]),import.meta.url)),BlockletRestore=reactExports.lazy(()=>__vitePreload(()=>import("./index-CUSquMEA.js"),__vite__mapDeps([39,40,41,42,43,44,23,6,35,45,46,47,19,15]),import.meta.url)),BlockletStore=reactExports.lazy(()=>__vitePreload(()=>import("./index-CD7DvxmZ.js"),__vite__mapDeps([48,6,49,50,51,52,53,17,15,54,31,32,55,56,36,35,57,45,58,4,19,23,24,25,59,60,26,61,62]),import.meta.url)),Settings=reactExports.lazy(()=>__vitePreload(()=>import("./index-B8v-axBf.js"),__vite__mapDeps([63,64,61,65,66,67,26,7,8,9,10,11,12,13,14,15,16,17,18,19,68,69,22,58,4,2,70,6,71,72,73,74,36,20,75,53,76,77,78]),import.meta.url)),LogPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-i1qQpQly.js"),__vite__mapDeps([79,80,24,25,6]),import.meta.url)),TeamPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-B7lwLoYe.js"),__vite__mapDeps([81,64,82,15,16,17,18,6,83,84,85,86,87,88,54,22,89,36,90,7,8,9,10,11,12,13,14,19,37,24,25,65,91,30,31,32,26,4,92,93,74,2,55,45,94,95,96,50,44,69,97,98,99,100,101,102,103,71,76,1,58,104,105,106]),import.meta.url)),BlockletDetail=reactExports.lazy(()=>__vitePreload(()=>import("./detail-DcgwTwye.js"),__vite__mapDeps([107,64,20,21,6,19,22,23,24,25,26,54,108,88,62]),import.meta.url)),EULAPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-BtUuqhY5.js"),[],import.meta.url)),Notifications=reactExports.lazy(()=>__vitePreload(()=>import("./index-D0tbGiP6.js"),[],import.meta.url)),IssuePassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-C4B0vM19.js"),__vite__mapDeps([109,110,108,95,10,96,111,112,23]),import.meta.url)),LostPassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-YAdFrAoP.js"),__vite__mapDeps([113,90,57,95,10,111,112,23,34]),import.meta.url)),ExchangePassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-DXgv4Xqm.js"),__vite__mapDeps([114,111,112,23]),import.meta.url)),BlockletLauncher=reactExports.lazy(()=>__vitePreload(()=>import("./index-PBuMheS3.js"),__vite__mapDeps([115,41,42,43,44,104,105,116,83,84,85,23,28,29,47,38,6,70,60]),import.meta.url)),NotFoundPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-CdAykioB.js"),__vite__mapDeps([117,108]),import.meta.url)),Invite=reactExports.lazy(()=>__vitePreload(()=>import("./index-ituQ-YWI.js"),__vite__mapDeps([118,110,108,95,10,96,111,112]),import.meta.url)),Console=reactExports.lazy(()=>__vitePreload(()=>import("./index-CHG9EhW0.js"),[],import.meta.url)),AnalyticsPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-fUcEQ60M.js"),__vite__mapDeps([119,64,120,121,52,53,122,13,123,124,92,93,9,74,7,8,10,11,12,14,15,16,17,18,19,125,126,78,6,102,25]),import.meta.url)),GenKeyPair=reactExports.lazy(()=>__vitePreload(()=>import("./index-CVAkH3vd.js"),__vite__mapDeps([127,108]),import.meta.url));function useSharedContext(){const De=useNodeContext(),{session:Me}=useSessionContext$1(),{wallet:He}=d$d(),Ge=Me.user&&Me.user.did;return reactExports.useEffect(()=>{const Je=getWsClient();return Ge?Je.connect():Je.isConnected()&&Je.disconnect(),()=>{Je.isConnected()&&Je.disconnect()}},[Ge]),reactExports.useEffect(()=>{if(He)return()=>{};const Je=()=>{document.visibilityState==="visible"&&Me.refresh()};return document.addEventListener("visibilitychange",Je),()=>{document.removeEventListener("visibilitychange",Je)}},[]),{node:De,session:Me}}function ProtectedApp(){const{t:De}=V$2(),{node:Me,session:He}=useSharedContext(),Ge=useLocation();reactExports.useEffect(()=>{window.tracker&&typeof window.tracker.pageView=="function"&&window.tracker.pageView(`${Ge.pathname}${Ge.search}`)},[Ge]),reactExports.useEffect(()=>{He?.user?.role===constantExports$1.SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER&&He.logout()},[He?.user?.role]);const Je=jsxRuntimeExports.jsx(CircularProgress,{});if(Me.loading||He.loading)return jsxRuntimeExports.jsx(o$f,{children:Je});if(!Me.info.initialized)return getAuthMethodExports.getServerAuthMethod(Me.info)==="nft"?jsxRuntimeExports.jsx(NodeVerifyOwner,{action:"verify-owner"}):jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(NodeConnectOwner,{})});if(Me.info.upgradeSessionId)return jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(MaintainProgress,{})});if(!He.user)return jsxRuntimeExports.jsx(NodeLogin,{loadingEle:Je});const Ye=jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});return jsxRuntimeExports.jsx(BlockletsProvider,{children:jsxRuntimeExports.jsxs(NotificationProvider,{children:[jsxRuntimeExports.jsx(Health,{}),jsxRuntimeExports.jsx(CheckNodeStatus,{}),jsxRuntimeExports.jsx(GlobalSubscriber,{}),jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:Ye,children:jsxRuntimeExports.jsxs(Routes,{children:[jsxRuntimeExports.jsx(Route,{path:"/dashboard",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:"Dashboard",children:jsxRuntimeExports.jsx(Dashboard,{})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.blocklets"),children:jsxRuntimeExports.jsx(BlockletList,{})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets/:did/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:"Blocklets",children:jsxRuntimeExports.jsx(BlockletDetail,{})})}),jsxRuntimeExports.jsx(Route,{path:"/settings/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.setting"),children:jsxRuntimeExports.jsx(Settings,{})})}),jsxRuntimeExports.jsx(Route,{path:"/eula",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("setup.steps.eula"),children:jsxRuntimeExports.jsx(EULAPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/store",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.store"),children:jsxRuntimeExports.jsx(BlockletStore,{})})}),jsxRuntimeExports.jsx(Route,{path:"/console",element:jsxRuntimeExports.jsx(DashboardRoute,{title:`GraphQL ${De("common.console")}`,scrollable:!1,fullWidth:!0,children:jsxRuntimeExports.jsx(Console,{})})}),jsxRuntimeExports.jsx(Route,{path:"/notifications",element:jsxRuntimeExports.jsx(DashboardRoute,{title:De("notification.title"),children:jsxRuntimeExports.jsx(Notifications,{})})}),jsxRuntimeExports.jsx(Route,{path:"/team/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.team"),children:jsxRuntimeExports.jsx(TeamPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/logs/:name?",element:jsxRuntimeExports.jsx(DashboardRoute,{scrollable:!1,fullWidth:!0,title:De("common.logs"),children:jsxRuntimeExports.jsx(LogPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/analytics/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.analytics"),children:jsxRuntimeExports.jsx(AnalyticsPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/",element:jsxRuntimeExports.jsx(Navigate,{to:"/dashboard",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/team",element:jsxRuntimeExports.jsx(Navigate,{to:"/team/members",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/analytics",element:jsxRuntimeExports.jsx(Navigate,{to:"/analytics/traffic",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/router",element:jsxRuntimeExports.jsx(Navigate,{to:"/router/rules",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/settings",element:jsxRuntimeExports.jsx(Navigate,{to:"/settings/basic",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/marketplace",element:jsxRuntimeExports.jsx(Navigate,{to:"/store",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/marketplace/:did",element:jsxRuntimeExports.jsx(Navigate,{to:"/store/:did",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"*",element:jsxRuntimeExports.jsx(NotFoundPage,{})})]})})]})})}function UnprotectedWrapper({children:De}){const{node:Me,session:He}=useSharedContext();return Me.loading||!He.initialized&&He.loading?jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})}):Me.info.upgradeSessionId?jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(MaintainProgress,{})}):De}function App(){const{changeLocale:De}=V$2(),Me=useQuery();reactExports.useEffect(()=>{const Ge=Me.get("locale");Ge&&["zh","en"].includes(Ge)&&De(Ge)},[]);const He=jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});return jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:He,children:jsxRuntimeExports.jsxs(Routes,{children:[jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/issue-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(IssuePassport,{})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/lost-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(LostPassport,{})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/exchange-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(ExchangePassport,{})})}),jsxRuntimeExports.jsx(Route,{path:"/accept-server",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(NodeVerifyOwner,{action:"accept-server"})})}),jsxRuntimeExports.jsx(Route,{path:"/gen-key-pair/",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(GenKeyPair,{})})}),jsxRuntimeExports.jsx(Route,{path:"/launch-blocklet/*",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(LaunchBlockletProvider,{children:jsxRuntimeExports.jsx(BlockletLauncher,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets/restore/*",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(BlockletAppProvider,{children:jsxRuntimeExports.jsx(BlockletRestore,{})})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/invite`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(Invite,{})})}),jsxRuntimeExports.jsx(Route,{path:"/*",element:jsxRuntimeExports.jsx(ProtectedApp,{})})]})})}function AppWrapper(){const De=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";return jsxRuntimeExports.jsx(BrowserRouter,{history:history$1,basename:De,children:jsxRuntimeExports.jsx(Root,{children:jsxRuntimeExports.jsx(App,{})})})}const root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(AppWrapper,{}));const prefix=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";register(`${prefix}/service-worker.js`.replace(/\/+/g,"/"),{registrationOptions:{scope:prefix},registered(){console.info("Service worker has been registered.")},ready(){console.info("Service worker is active.")},cached(){console.info("Content has been cached for offline use.")},updatefound(){console.info("New content is downloading.")},updated(){console.info("New content is available; please refresh.")},offline(){console.info("No internet connection found. App is running in offline mode.")},error(De){console.error("Error during service worker registration:",De)}});export{$$4 as $,useNavigate as A,useSearchParams as B,CircularProgress as C,DialogContentText as D,useMediaQuery as E,libExports$3 as F,Grid$1 as G,H$7 as H,Link$1 as I,BlockletAppAvatar as J,Box as K,Link as L,isEmpty as M,oe as N,FormControl as O,InputLabel as P,MenuItem as Q,Checkbox as R,Select as S,Typography as T,Alert as U,V$2 as V,WrappedDidAddress as W,formatError as X,o$f as Y,CheckIcon$2 as Z,propTypesExports as _,useSubscription as a,urlPathFriendlyExports as a$,api as a0,merge as a1,cloneDeep as a2,IconButton as a3,R$3 as a4,ListItemSecondaryAction as a5,List as a6,ListItem as a7,ListItemText as a8,getServerUrl as a9,ErrorBoundary as aA,k$1 as aB,formatRegistryLogoPath as aC,Icon as aD,ListItemIcon as aE,createSvgIcon as aF,ensureDomainAliases as aG,constantExports$1 as aH,getIp as aI,normalizePathPrefix as aJ,sortBy as aK,stringSortHandlerAsc as aL,getAccessUrl as aM,history$1 as aN,semver as aO,useReactive as aP,useAsyncEffect as aQ,InfoOutlinedIcon as aR,sleep as aS,useMemoizedFn as aT,checkInputByType as aU,FormControlLabel as aV,Stack$1 as aW,useAsync as aX,axios as aY,shouldCheckDomainStatus as aZ,formatMountPoint as a_,useBlockletAppContext as aa,getAuthMethodExports as ab,ConfirmDialog as ac,getRestoredAccessUrl as ad,setSessionToken as ae,isEqual as af,isServerlessBlockletInstalled as ag,Debug as ah,getWsClient as ai,useQuery as aj,getPathPrefix as ak,Global as al,Routes as am,Route as an,Navigate as ao,HeaderAddon as ap,SessionContext as aq,css as ar,$$5 as as,formatToDatetime as at,alpha$1 as au,getLaunchAgreementUrl as av,axios$2 as aw,useSessionContext$1 as ax,Tooltip as ay,getBlockletMetaUrl as az,constantExports as b,emphasize as b$,Menu as b0,checkIsWildcardDomain as b1,Popover as b2,Card as b3,formatToDate as b4,sortDomains as b5,C$9 as b6,Collapse as b7,CheckCircle as b8,styled as b9,f$7 as bA,Button as bB,createPassportSvg as bC,getWalletType as bD,useCreation as bE,BlockletAdminRoles as bF,isInstalling as bG,Badge as bH,createAppPassportSvg as bI,NavLink as bJ,__vitePreload as bK,SetCache as bL,arrayIncludes$1 as bM,arrayIncludesWith as bN,cacheHas as bO,baseUniq as bP,baseFlatten as bQ,baseRest as bR,last as bS,arrayFilter as bT,isArrayLikeObject as bU,t$a as bV,isDownloading as bW,getBlockletUrl as bX,getBlockletUrlParams as bY,ButtonBase as bZ,memoTheme as b_,isUrl as ba,__awaiter as bb,__generator as bc,__spread as bd,getDefaultExportFromCjs$1 as be,U$3 as bf,dayjs$1 as bg,Divider as bh,isCertificateMatch as bi,FormHelperText as bj,FormGroup as bk,o$c as bl,NodeContext as bm,useParams as bn,useNodeContext$1 as bo,uniqBy as bp,l as bq,e$c as br,l$p as bs,copy as bt,libExports$1 as bu,B$4 as bv,o$9 as bw,l$i as bx,BlockletAvatar as by,ClickAwayListener as bz,createCompounder as c,s$8 as c$,generateUtilityClasses as c0,generateUtilityClass as c1,useDefaultProps as c2,useSlotProps as c3,clsx$1 as c4,composeClasses as c5,__read as c6,toSlotDomain as c7,omit as c8,fixBlocklet as c9,d$d as cA,Avatar as cB,isFromWallet as cC,usePassportId as cD,isFunction$3 as cE,Container$3 as cF,K$4 as cG,getLauncherBaseURL as cH,SvgIcon as cI,Buffer$1 as cJ,parseURL as cK,withHttps as cL,useLaunchBlockletContext as cM,z$2 as cN,authorize as cO,ArrowForwardIcon as cP,isNewStoreUrl as cQ,getAccessibleUrl as cR,getBlockletLogoUrl as cS,t as cT,M$9 as cU,__spreadArrays as cV,__assign as cW,h$6 as cX,useLocation as cY,l$8 as cZ,useMount as c_,isProtectedRole as ca,baseOrderBy as cb,isArray$1 as cc,rootShouldForwardProp as cd,useFormControl as ce,createChainedFunction$1 as cf,useSlot as cg,capitalize$1 as ch,SwitchBase as ci,createSimplePaletteValueFilter as cj,useControlled as ck,useForkRef as cl,useId as cm,getBlockletUrls as cn,defaultCheckAccessible as co,urlEvaluationExports as cp,memoize as cq,ButtonGroupContext as cr,ButtonGroupButtonContext as cs,useNotificationContext as ct,utilExports as cu,NotificationList as cv,useRequest as cw,isNumber$3 as cx,useLatest as cy,dayjs as cz,useBlockletsContext as d,afterMain as d$,formatDateTime as d0,getExplorerLink as d1,patchJsxToLocale as d2,T$6 as d3,getSessionToken as d4,LinearProgress as d5,SvgLogo as d6,isNumber$1 as d7,useEnhancedEffect$1 as d8,debounce$2 as d9,requireJsxRuntime as dA,requirePropTypes as dB,requireReactDom as dC,isObject$3 as dD,require$$0$2 as dE,require$$5$1 as dF,requireConstant$1 as dG,$e$1 as dH,noop$1 as dI,Paper as dJ,MenuList as dK,Popper as dL,_inheritsLoose$1 as dM,ReactDOM as dN,_objectWithoutPropertiesLoose$1 as dO,TransitionGroup as dP,ENTERED as dQ,ENTERING as dR,EXITING as dS,TransitionGroupContext as dT,Transition as dU,config$1 as dV,popperGenerator as dW,eventListeners as dX,popperOffsets$1 as dY,computeStyles$1 as dZ,applyStyles$1 as d_,ownerWindow as da,useRtl as db,KeyboardArrowLeft as dc,KeyboardArrowRight as dd,useEventCallback$1 as de,ownerDocument as df,getCommonHtmlTitle as dg,HelmetExport as dh,requireReact as di,i$e as dj,te$2 as dk,se$1 as dl,InfoIcon$2 as dm,upperFirst as dn,camelCase as dp,Skeleton as dq,R$5 as dr,isArrayLike as ds,baseIteratee as dt,keys as du,toInteger as dv,baseFindIndex as dw,commonjsGlobal as dx,getAugmentedNamespace as dy,emotionUtils_browser_esm as dz,useAsyncRetry as e,toString$2 as e$,afterRead as e0,afterWrite as e1,arrow$1 as e2,auto as e3,basePlacements as e4,beforeMain as e5,beforeRead as e6,beforeWrite as e7,bottom as e8,clippingParents as e9,requireLib$4 as eA,requireLib$5 as eB,requireLib$3 as eC,requireConstant$2 as eD,requireUrlPathFriendly as eE,b$8 as eF,data$s as eG,global$2 as eH,hoistStatics as eI,isEqual$3 as eJ,usePreviousProps as eK,setRef as eL,ClearIcon as eM,ArrowDropDownIcon as eN,Chip as eO,filledInputClasses as eP,inputBaseClasses as eQ,outlinedInputClasses as eR,inputClasses as eS,ListContext as eT,getListItemButtonUtilityClass as eU,listItemButtonClasses as eV,emotionReact_browser_esm as eW,emotionCache_browser_esm as eX,cloneDeep$1 as eY,forceReflow as eZ,_extends$2 as e_,createPopper as ea,createPopper$1 as eb,detectOverflow as ec,end as ed,flip$1 as ee,hide$1 as ef,left as eg,main as eh,modifierPhases as ei,offset$1 as ej,placements as ek,popper as el,preventOverflow$1 as em,read as en,reference as eo,right as ep,start as eq,top as er,variationPlacements as es,viewport as et,write as eu,requireReactIs as ev,emotionStyled_browser_esm as ew,emotionSerialize_esm as ex,emotionSheet_esm as ey,process$1 as ez,useTheme as f,requireCryptoBrowserify as f$,mergeThemeOptions as f0,StyledEngineProvider as f1,ThemeProvider as f2,ThemeProvider$3 as f3,s$3 as f4,CloseIcon as f5,isString$1 as f6,createTheme as f7,createAxios as f8,pick as f9,darken as fA,slotShouldForwardProp as fB,requireNormalizePathPrefix as fC,debounce as fD,useInterval as fE,formatTime as fF,CloseFullscreenIcon as fG,S$8 as fH,TablePagination as fI,parseAvatar as fJ,__rest as fK,useEffectWithTarget$1 as fL,__values as fM,tmp as fN,useUpdate as fO,requireUtil$6 as fP,requireObjectKeys$1 as fQ,requireShams$1 as fR,requireCallBound as fS,requireEsObjectAtoms as fT,requireDefineDataProperty as fU,requireHasPropertyDescriptors as fV,requireCallBind as fW,requireCallBound$1 as fX,requireSafeBuffer$1 as fY,requireBrowser$f as fZ,requireElliptic as f_,omitBy as fa,flat as fb,MenuIcon as fc,useDebounceFn as fd,Dialog as fe,OutlinedInput as ff,data as fg,Drawer as fh,parseQuery as fi,parseFilename as fj,stringifyParsedURL as fk,Grow as fl,Wt as fm,InputAdornment as fn,tooltipClasses as fo,requireEngine as fp,__spreadArray as fq,useEventListener as fr,le$7 as fs,getTargetElement as ft,MoreHorizIcon as fu,clamp as fv,extractEventHandlers as fw,isFocusVisible as fx,isHostComponent as fy,lighten as fz,p$3 as g,isServerless as g$,requireRipemd160 as g0,requireLib$1 as g1,requireUtil$2 as g2,uniq as g3,useLocalStorageState as g4,InputBase as g5,useSize as g6,DialogTitle as g7,DialogContent as g8,DialogActions as g9,isPlainObject$2 as gA,require$$12 as gB,throttle$2 as gC,isUndefined$1 as gD,useTimeout as gE,Fade as gF,FocusTrap as gG,dialogClasses as gH,localizedFormatPlugin as gI,n$8 as gJ,purify as gK,Buffer$1$1 as gL,Q$2 as gM,require$$0$1 as gN,requireIsAbsoluteUrl as gO,requireDist$1 as gP,requireBrowser$3 as gQ,require$$3 as gR,resolveProps as gS,useThemeProps as gT,defaultTheme$1 as gU,THEME_ID as gV,en$2 as gW,isIndex as gX,useTheme$4 as gY,objectAssign as gZ,__extends as g_,pickBy as ga,shouldForwardProp as gb,resolveComponentProps as gc,getInviteLink as gd,e$e as ge,getIssuePassportLink as gf,uniqBy$1 as gg,isNodeOwner as gh,isSelf as gi,Q$1 as gj,I$3 as gk,Y$3 as gl,PQueue as gm,getBlockletAccessibleUrl as gn,A$1 as go,createPassportSvg$1 as gp,requireMs as gq,E$3 as gr,trim as gs,getBlockletSDK as gt,identity$1 as gu,arrayEach as gv,baseEach as gw,arrayMap as gx,baseMap as gy,baseForOwn as gz,get$1 as h,amber as h$,requireJsonStableStringify as h0,isFunction$2 as h1,omit$1 as h2,TableContext as h3,Tablelvl2Context as h4,g$e as h5,useUnmount as h6,isDidDomainOrIpEchoDomain as h7,ExpandLess as h8,validateDomain as h9,isBrowser$1 as hA,root$1 as hB,isNil$1 as hC,require$$11 as hD,requireHoistNonReactStatics_cjs as hE,_assertThisInitialized$1 as hF,reactDomExports as hG,loadIcon as hH,withoutLeadingSlash as hI,fetchSvgAsPng as hJ,blobToFile as hK,withoutTrailingSlash as hL,u$2 as hM,Ce as hN,t$g as hO,i as hP,R$8 as hQ,p$f as hR,usePrevious as hS,browserExports$1 as hT,BlockletSDK as hU,highlightExports as hV,funcExports as hW,data$y as hX,useSnackbar as hY,common$3 as hZ,green as h_,requireDist$2 as ha,requireAxios as hb,trim$1 as hc,requirePRetry as hd,TableCell as he,xe$1 as hf,getSystemDomains as hg,copyArray as hh,baseIndexOf as hi,ke as hj,useAppLogo as hk,getTransferAppLink as hl,requireBn$1 as hm,require$$2 as hn,updateWindowEnv as ho,M$5 as hp,isNil as hq,requireBase32 as hr,Re as hs,withTrailingSlash as ht,data$B as hu,keyframes as hv,requireAssertString as hw,isEmail as hx,isURL as hy,createUseStorageState as hz,utilExports$1 as i,n$5 as i$,SnackbarContent as i0,d$f as i1,t$1 as i2,useDebounce as i3,Y as i4,g$3 as i5,b as i6,g$9 as i7,withErrorBoundary as i8,z$1 as i9,hasRequiredSteps as iA,getStoreList as iB,commonjsRequire as iC,require_interface as iD,requireHasown as iE,requireBrowser$1 as iF,requireSemver as iG,require$$4$1 as iH,flatten as iI,trimEnd as iJ,base32Exports as iK,flatExports as iL,Xt as iM,AxiosError as iN,I$6 as iO,isNull as iP,orange as iQ,purple as iR,useStore as iS,createStore as iT,create$1 as iU,t$h as iV,clientExports as iW,ke$1 as iX,retry as iY,isNetworkError as iZ,requirePTimeout as i_,M$6 as ia,Be as ib,G$1 as ic,xe as id,useBlockletLogo as ie,isPlainObject$1 as ig,Toolbar as ih,_setPrototypeOf as ii,isString$3 as ij,FormLabel as ik,RelativeTime as il,isIncludeActivity as im,isUserActor as io,ActorAvatar as ip,SendComponentAvatar as iq,Activity as ir,NotificationContent$1 as is,AvatarGroup as it,requireCjs as iu,useTheme$2 as iv,baseAssignValue as iw,isValidClusterSize as ix,extractStatusUrlFromNextWorkflow as iy,pWaitFor as iz,jsxRuntimeExports as j,Modal as j0,GlobalStyles$2 as j1,filesize as k,prettyMs as l,formatLocale as m,useSessionContext as n,o$h as o,p$e as p,useSetState as q,reactExports as r,styled$3 as s,TextField as t,useNodeContext as u,n$4 as v,lo as w,getWebWalletUrl as x,joinURL as y,withQuery as z};
|
|
2903
|
+
`;function GlobalSubscriber(){const{t:De}=V$2(),{session:Me}=useSessionContext$1(),{info:He,refresh:Ge}=useNodeContext();return useSubscription(constantExports.TeamEvents.userUpdated,({teamDid:Je,user:Ye})=>{Je===He.did&&Ye&&!Ye.approved&&Me&&Me.user&&Me.user.did===Ye.did&&(H$7.warning(De("session.blockAccess"),{autoHideDuration:10*1e3}),Me.logout())}),useSubscription(constantExports$1.EVENTS.NOTIFICATION_CREATE,Je=>{Je.entityType==="node"&&Ge({silent:!0})}),useSubscription(constantExports$1.EVENTS.NODE_UPDATED,()=>{Ge({silent:!0})}),null}const authorize=({user:De,launchType:Me,nftId:He})=>{if(!De)return!1;if(Me==="serverless"){if(!He)throw new Error("nftId is required");return De?.controller?.nftId===He}return(De.permissions||[]).includes("mutate_blocklets")},isServerlessBlockletInstalled=De=>De.isGetBlocklet&&De.runtimeBlocklet?.controller?.consumedAt,getRestoredAccessUrl=async De=>{const Me=getBlockletUrls({blocklet:De});let He="";return He=Me.find(Ge=>{try{const{hostname:Je}=new URL(Ge);return urlEvaluationExports.isSlpDomain(Je)}catch(Je){return console.error(Je),!1}}),He||(He=await getAccessibleUrl(Me)),He},LaunchBlockletContext=reactExports.createContext({}),{Provider:Provider$1,Consumer:Consumer$1}=LaunchBlockletContext;function LaunchBlockletProvider({children:De}){const{session:Me}=useSessionContext$1(),{t:He}=V$2(),{api:Ge,info:Je}=useNodeContext(),[Ye]=useSearchParams(),Ze=Ye.get("launchType"),et=Ye.get("fromLauncher"),Qe=Ye.get("blocklet_meta_url")||"",nt=Ye.get("nftId")||"",tt=Ye.get("from")||"",rt=Ye.get("launcherSessionId")||"",ot=Ye.get("launcherUrl")||"",at=tt==="url",st=tt==="empty",ut=at||st?"":new URL(Qe).origin,[dt,ct]=reactExports.useState({meta:null,appDid:Ye.get("appDid")||null,sessionId:Ye.get("sessionId")||null,isFree:!0,isExternal:!1,isInstalling:!1,isInstalled:!1,isRunning:!1,launcherSession:null,registryUrl:""}),ft=(mt,bt)=>ct(Et=>({...Et,appDid:mt,sessionId:bt})),ht=authorize({user:Me.user,launchType:Ze,nftId:nt}),[yt,gt]=reactExports.useState(null),[Ct,At]=reactExports.useState(!0),_t=reactExports.useMemo(()=>Je?getServerUrl(Je):"",[Je]),Pt=async mt=>{if(!mt)throw new Error("appDid should not be empty");const{blocklet:bt}=await Ge.getBlocklet({input:{did:mt,attachConfig:!1}});if(!bt)return null;const Et=constantExports.BlockletStatus[bt.status],Tt=!!nt,St=Et<constantExports.BlockletStatus.installed,Rt=Et===constantExports.BlockletStatus.installed,kt=Et===constantExports.BlockletStatus.running;return ct(wt=>({...wt,isInstalled:Rt,isRunning:kt,isExternal:Tt,isInstalling:St})),{isInstalled:Rt,isRunning:kt,isExternal:Tt,isInstalling:St}},Lt=async()=>{if(At(!0),st){ct(mt=>({...mt,meta:{title:Ye.get("title")||"",description:Ye.get("description")||""}})),At(!1);return}try{if(!Qe&&!st)throw new Error(He("common.invalidParam"));const[{meta:mt,isFree:bt,registryUrl:Et},{launcherSession:Tt,error:St}]=await Promise.all([Ge.getBlockletMetaFromUrl({input:{url:Qe,checkPrice:!0}}),rt?Ge.getLauncherSession({input:{launcherSessionId:rt,launcherUrl:ot}}):Promise.resolve({})]);if(rt&&!Tt)throw new Error(`Launch session invalid: ${St}`);if(!mt)throw new Error(He("LaunchBlockletBlocklet.error.loadMetaFailed"));let Rt={};ht&&dt.appDid&&(Rt=await Pt(dt.appDid)),ct(kt=>({...kt,...Rt,meta:mt,isFree:bt,registryUrl:Et,launcherSession:Tt}))}catch(mt){console.error(mt),gt(mt.message)}finally{At(!1)}};reactExports.useEffect(()=>{Me?.user?.role===constantExports$1.SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER&&Me?.user?.controller?.nftId!==nt&&Me.logout(),Lt()},[]),reactExports.useEffect(()=>{Ct||!dt.meta||(ht?dt.appDid&&Pt(dt.appDid).catch(mt=>{H$7.error(mt.message)}):(ct(mt=>({...mt,isInstalled:!1,isRunning:!1,isExternal:!1})),gt(null)))},[ht]);const Dt={meta:dt.meta,isFree:dt.isFree,appDid:dt.appDid,sessionId:dt.sessionId,isInstalling:dt.isInstalling,isInstalled:dt.isInstalled,isExternal:dt.isExternal,isRunning:dt.isRunning,serverUrl:_t,storeUrl:dt.registryUrl||ut,blockletMetaUrl:Qe,fromLauncher:et,loading:Ct,error:yt,api:Ge,getBlocklet:Pt,setAppDid:ft,launcherUrl:ot,launcherSession:dt.launcherSession,launcherSessionId:rt,launchType:Ze};return jsxRuntimeExports.jsx(Provider$1,{value:Dt,children:De})}function useLaunchBlockletContext(){return reactExports.useContext(LaunchBlockletContext)}var useAsyncExports=requireUseAsync();const useAsync=getDefaultExportFromCjs$1(useAsyncExports);function useQuery(){return new URLSearchParams(useLocation().search)}const BlockletAppContext=reactExports.createContext(),{Provider,Consumer}=BlockletAppContext;function BlockletAppProvider({children:De}){const He=useQuery().get("blocklet_meta_url"),Ge=useAsync(async()=>{const{data:Ye}=await axios.get(He);return Ye});if(Ge.loading)return jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});const Je={meta:Ge.value,error:Ge.error};return jsxRuntimeExports.jsx(Provider,{value:Je,children:De})}BlockletAppProvider.propTypes={children:o$h.any.isRequired};function useBlockletAppContext(){return reactExports.useContext(BlockletAppContext)}const Dashboard=reactExports.lazy(()=>__vitePreload(()=>import("./index-BEBlF9m9.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)),BlockletList=reactExports.lazy(()=>__vitePreload(()=>import("./index-BHh7dbJI.js"),__vite__mapDeps([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2,32,33,34,35,36,37,38,39]),import.meta.url)),BlockletRestore=reactExports.lazy(()=>__vitePreload(()=>import("./index-wL5lEY63.js"),__vite__mapDeps([40,41,42,43,44,45,24,6,36,46,47,48,20,16]),import.meta.url)),BlockletStore=reactExports.lazy(()=>__vitePreload(()=>import("./index-DpjK8TAu.js"),__vite__mapDeps([49,6,50,51,52,53,54,18,16,55,32,33,56,57,37,36,58,46,59,4,20,24,25,26,60,61,27,62,63]),import.meta.url)),Settings=reactExports.lazy(()=>__vitePreload(()=>import("./index-CToqwOpp.js"),__vite__mapDeps([64,65,62,66,67,68,27,8,9,10,11,12,13,14,15,16,17,18,19,20,69,70,23,59,4,2,71,6,72,73,74,75,37,21,76,54,77,78,79]),import.meta.url)),LogPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-Bs1YhLgL.js"),__vite__mapDeps([80,81,25,26,6]),import.meta.url)),TeamPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-CjNtQPhT.js"),__vite__mapDeps([82,65,83,16,17,18,19,6,84,85,86,87,88,89,55,23,90,37,91,8,9,10,11,12,13,14,15,20,38,25,26,66,92,31,32,33,27,4,93,94,75,2,56,46,7,95,96,51,45,70,97,98,99,100,101,102,103,72,77,1,59,104,105,106]),import.meta.url)),BlockletDetail=reactExports.lazy(()=>__vitePreload(()=>import("./detail-DKJA4QJA.js"),__vite__mapDeps([107,65,21,22,6,20,23,24,25,26,27,55,108,89,63]),import.meta.url)),EULAPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-8muv7_Jd.js"),[],import.meta.url)),Notifications=reactExports.lazy(()=>__vitePreload(()=>import("./index-LTqv_onD.js"),[],import.meta.url)),IssuePassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-uvbslqFd.js"),__vite__mapDeps([109,110,108,95,11,96,111,112,24]),import.meta.url)),LostPassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-CK2r1fQ4.js"),__vite__mapDeps([113,91,58,95,11,111,112,24,35]),import.meta.url)),ExchangePassport=reactExports.lazy(()=>__vitePreload(()=>import("./index-DPsk4bZI.js"),__vite__mapDeps([114,111,112,24]),import.meta.url)),BlockletLauncher=reactExports.lazy(()=>__vitePreload(()=>import("./index-DdtHjUVR.js"),__vite__mapDeps([115,42,43,44,45,104,105,116,84,85,86,24,29,30,48,39,6,71,61]),import.meta.url)),NotFoundPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-CLUNG8RH.js"),__vite__mapDeps([117,108]),import.meta.url)),Invite=reactExports.lazy(()=>__vitePreload(()=>import("./index-Cueikc61.js"),__vite__mapDeps([118,110,108,95,11,96,111,112]),import.meta.url)),Console=reactExports.lazy(()=>__vitePreload(()=>import("./index-BZK15J4S.js"),[],import.meta.url)),AnalyticsPage=reactExports.lazy(()=>__vitePreload(()=>import("./index-BA9z7d5M.js"),__vite__mapDeps([119,65,120,121,53,54,122,14,123,124,93,94,10,75,8,9,11,12,13,15,16,17,18,19,20,125,126,79,6,102,26]),import.meta.url)),GenKeyPair=reactExports.lazy(()=>__vitePreload(()=>import("./index-BzdGhRHG.js"),__vite__mapDeps([127,108]),import.meta.url));function useSharedContext(){const De=useNodeContext(),{session:Me}=useSessionContext$1(),{wallet:He}=d$d(),Ge=Me.user&&Me.user.did;return reactExports.useEffect(()=>{const Je=getWsClient();return Ge?Je.connect():Je.isConnected()&&Je.disconnect(),()=>{Je.isConnected()&&Je.disconnect()}},[Ge]),reactExports.useEffect(()=>{if(He)return()=>{};const Je=()=>{document.visibilityState==="visible"&&Me.refresh()};return document.addEventListener("visibilitychange",Je),()=>{document.removeEventListener("visibilitychange",Je)}},[]),{node:De,session:Me}}function ProtectedApp(){const{t:De}=V$2(),{node:Me,session:He}=useSharedContext(),Ge=useLocation();reactExports.useEffect(()=>{window.tracker&&typeof window.tracker.pageView=="function"&&window.tracker.pageView(`${Ge.pathname}${Ge.search}`)},[Ge]),reactExports.useEffect(()=>{He?.user?.role===constantExports$1.SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER&&He.logout()},[He?.user?.role]);const Je=jsxRuntimeExports.jsx(CircularProgress,{});if(Me.loading||He.loading)return jsxRuntimeExports.jsx(o$f,{children:Je});if(!Me.info.initialized)return getAuthMethodExports.getServerAuthMethod(Me.info)==="nft"?jsxRuntimeExports.jsx(NodeVerifyOwner,{action:"verify-owner"}):jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(NodeConnectOwner,{})});if(Me.info.upgradeSessionId)return jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(MaintainProgress,{})});if(!He.user)return jsxRuntimeExports.jsx(NodeLogin,{loadingEle:Je});const Ye=jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});return jsxRuntimeExports.jsx(BlockletsProvider,{children:jsxRuntimeExports.jsxs(NotificationProvider,{children:[jsxRuntimeExports.jsx(Health,{}),jsxRuntimeExports.jsx(CheckNodeStatus,{}),jsxRuntimeExports.jsx(GlobalSubscriber,{}),jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:Ye,children:jsxRuntimeExports.jsxs(Routes,{children:[jsxRuntimeExports.jsx(Route,{path:"/dashboard",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:"Dashboard",children:jsxRuntimeExports.jsx(Dashboard,{})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.blocklets"),children:jsxRuntimeExports.jsx(BlockletList,{})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets/:did/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:"Blocklets",children:jsxRuntimeExports.jsx(BlockletDetail,{})})}),jsxRuntimeExports.jsx(Route,{path:"/settings/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.setting"),children:jsxRuntimeExports.jsx(Settings,{})})}),jsxRuntimeExports.jsx(Route,{path:"/eula",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("setup.steps.eula"),children:jsxRuntimeExports.jsx(EULAPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/store",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.store"),children:jsxRuntimeExports.jsx(BlockletStore,{})})}),jsxRuntimeExports.jsx(Route,{path:"/console",element:jsxRuntimeExports.jsx(DashboardRoute,{title:`GraphQL ${De("common.console")}`,scrollable:!1,fullWidth:!0,children:jsxRuntimeExports.jsx(Console,{})})}),jsxRuntimeExports.jsx(Route,{path:"/notifications",element:jsxRuntimeExports.jsx(DashboardRoute,{title:De("notification.title"),children:jsxRuntimeExports.jsx(Notifications,{})})}),jsxRuntimeExports.jsx(Route,{path:"/team/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.team"),children:jsxRuntimeExports.jsx(TeamPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/logs/:name?",element:jsxRuntimeExports.jsx(DashboardRoute,{scrollable:!1,fullWidth:!0,title:De("common.logs"),children:jsxRuntimeExports.jsx(LogPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/analytics/:tab",element:jsxRuntimeExports.jsx(DashboardRoute,{fullWidth:!0,title:De("common.analytics"),children:jsxRuntimeExports.jsx(AnalyticsPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/",element:jsxRuntimeExports.jsx(Navigate,{to:"/dashboard",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/team",element:jsxRuntimeExports.jsx(Navigate,{to:"/team/members",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/analytics",element:jsxRuntimeExports.jsx(Navigate,{to:"/analytics/traffic",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/router",element:jsxRuntimeExports.jsx(Navigate,{to:"/router/rules",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/settings",element:jsxRuntimeExports.jsx(Navigate,{to:"/settings/basic",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/marketplace",element:jsxRuntimeExports.jsx(Navigate,{to:"/store",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"/marketplace/:did",element:jsxRuntimeExports.jsx(Navigate,{to:"/store/:did",replace:!0})}),jsxRuntimeExports.jsx(Route,{path:"*",element:jsxRuntimeExports.jsx(NotFoundPage,{})})]})})]})})}function UnprotectedWrapper({children:De}){const{node:Me,session:He}=useSharedContext();return Me.loading||!He.initialized&&He.loading?jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})}):Me.info.upgradeSessionId?jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(MaintainProgress,{})}):De}function App(){const{changeLocale:De}=V$2(),Me=useQuery();reactExports.useEffect(()=>{const Ge=Me.get("locale");Ge&&["zh","en"].includes(Ge)&&De(Ge)},[]);const He=jsxRuntimeExports.jsx(o$f,{children:jsxRuntimeExports.jsx(CircularProgress,{})});return jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:He,children:jsxRuntimeExports.jsxs(Routes,{children:[jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/issue-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(IssuePassport,{})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/lost-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(LostPassport,{})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/exchange-passport`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(ExchangePassport,{})})}),jsxRuntimeExports.jsx(Route,{path:"/accept-server",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(NodeVerifyOwner,{action:"accept-server"})})}),jsxRuntimeExports.jsx(Route,{path:"/gen-key-pair/",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(GenKeyPair,{})})}),jsxRuntimeExports.jsx(Route,{path:"/launch-blocklet/*",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(LaunchBlockletProvider,{children:jsxRuntimeExports.jsx(BlockletLauncher,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/blocklets/restore/*",element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(BlockletAppProvider,{children:jsxRuntimeExports.jsx(BlockletRestore,{})})})}),jsxRuntimeExports.jsx(Route,{path:`${constantExports$1.WELLKNOWN_SERVICE_PATH_PREFIX}/invite`,element:jsxRuntimeExports.jsx(UnprotectedWrapper,{children:jsxRuntimeExports.jsx(Invite,{})})}),jsxRuntimeExports.jsx(Route,{path:"/*",element:jsxRuntimeExports.jsx(ProtectedApp,{})})]})})}function AppWrapper(){const De=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";return jsxRuntimeExports.jsx(BrowserRouter,{history:history$1,basename:De,children:jsxRuntimeExports.jsx(Root,{children:jsxRuntimeExports.jsx(App,{})})})}const root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(AppWrapper,{}));const prefix=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";register(`${prefix}/service-worker.js`.replace(/\/+/g,"/"),{registrationOptions:{scope:prefix},registered(){console.info("Service worker has been registered.")},ready(){console.info("Service worker is active.")},cached(){console.info("Content has been cached for offline use.")},updatefound(){console.info("New content is downloading.")},updated(){console.info("New content is available; please refresh.")},offline(){console.info("No internet connection found. App is running in offline mode.")},error(De){console.error("Error during service worker registration:",De)}});export{$$4 as $,useNavigate as A,useSearchParams as B,CircularProgress as C,DialogContentText as D,useMediaQuery as E,libExports$3 as F,Grid$1 as G,H$7 as H,Link$1 as I,BlockletAppAvatar as J,Box as K,Link as L,isEmpty as M,oe as N,Tooltip as O,FormControl as P,InputLabel as Q,MenuItem as R,Select as S,Typography as T,Checkbox as U,V$2 as V,WrappedDidAddress as W,Alert as X,formatError as Y,o$f as Z,CheckIcon$2 as _,useSubscription as a,urlPathFriendlyExports as a$,propTypesExports as a0,api as a1,merge as a2,cloneDeep as a3,IconButton as a4,R$3 as a5,ListItemSecondaryAction as a6,List as a7,ListItem as a8,ListItemText as a9,ErrorBoundary as aA,k$1 as aB,formatRegistryLogoPath as aC,Icon as aD,ListItemIcon as aE,createSvgIcon as aF,ensureDomainAliases as aG,constantExports$1 as aH,normalizePathPrefix as aI,sortBy as aJ,getIp as aK,stringSortHandlerAsc as aL,getAccessUrl as aM,history$1 as aN,semver as aO,useReactive as aP,useAsyncEffect as aQ,InfoOutlinedIcon as aR,sleep as aS,useMemoizedFn as aT,checkInputByType as aU,FormControlLabel as aV,Stack$1 as aW,useAsync as aX,axios as aY,shouldCheckDomainStatus as aZ,formatMountPoint as a_,getServerUrl as aa,useBlockletAppContext as ab,getAuthMethodExports as ac,ConfirmDialog as ad,getRestoredAccessUrl as ae,setSessionToken as af,isEqual as ag,isServerlessBlockletInstalled as ah,Debug as ai,getWsClient as aj,useQuery as ak,getPathPrefix as al,Global as am,Routes as an,Route as ao,Navigate as ap,HeaderAddon as aq,SessionContext as ar,css as as,$$5 as at,formatToDatetime as au,alpha$1 as av,getLaunchAgreementUrl as aw,axios$2 as ax,useSessionContext$1 as ay,getBlockletMetaUrl as az,constantExports as b,emphasize as b$,Menu as b0,checkIsWildcardDomain as b1,Popover as b2,Card as b3,formatToDate as b4,sortDomains as b5,C$9 as b6,Collapse as b7,CheckCircle as b8,styled as b9,f$7 as bA,Button as bB,createPassportSvg as bC,getWalletType as bD,useCreation as bE,BlockletAdminRoles as bF,isInstalling as bG,Badge as bH,createAppPassportSvg as bI,NavLink as bJ,__vitePreload as bK,SetCache as bL,arrayIncludes$1 as bM,arrayIncludesWith as bN,cacheHas as bO,baseUniq as bP,baseFlatten as bQ,baseRest as bR,last as bS,arrayFilter as bT,isArrayLikeObject as bU,t$a as bV,isDownloading as bW,getBlockletUrl as bX,getBlockletUrlParams as bY,ButtonBase as bZ,memoTheme as b_,isUrl as ba,__awaiter as bb,__generator as bc,__spread as bd,getDefaultExportFromCjs$1 as be,U$3 as bf,dayjs$1 as bg,Divider as bh,isCertificateMatch as bi,FormHelperText as bj,FormGroup as bk,o$c as bl,NodeContext as bm,useParams as bn,useNodeContext$1 as bo,uniqBy as bp,l as bq,e$c as br,l$p as bs,copy as bt,libExports$1 as bu,B$4 as bv,o$9 as bw,l$i as bx,BlockletAvatar as by,ClickAwayListener as bz,createCompounder as c,s$8 as c$,generateUtilityClasses as c0,generateUtilityClass as c1,useDefaultProps as c2,useSlotProps as c3,clsx$1 as c4,composeClasses as c5,__read as c6,toSlotDomain as c7,omit as c8,fixBlocklet as c9,d$d as cA,Avatar as cB,isFromWallet as cC,usePassportId as cD,isFunction$3 as cE,Container$3 as cF,K$4 as cG,getLauncherBaseURL as cH,SvgIcon as cI,Buffer$1 as cJ,parseURL as cK,withHttps as cL,useLaunchBlockletContext as cM,z$2 as cN,authorize as cO,ArrowForwardIcon as cP,isNewStoreUrl as cQ,getAccessibleUrl as cR,getBlockletLogoUrl as cS,t as cT,M$9 as cU,__spreadArrays as cV,__assign as cW,h$6 as cX,useLocation as cY,l$8 as cZ,useMount as c_,isProtectedRole as ca,baseOrderBy as cb,isArray$1 as cc,rootShouldForwardProp as cd,useFormControl as ce,createChainedFunction$1 as cf,useSlot as cg,capitalize$1 as ch,SwitchBase as ci,createSimplePaletteValueFilter as cj,useControlled as ck,useForkRef as cl,useId as cm,getBlockletUrls as cn,defaultCheckAccessible as co,urlEvaluationExports as cp,memoize as cq,ButtonGroupContext as cr,ButtonGroupButtonContext as cs,useNotificationContext as ct,utilExports as cu,NotificationList as cv,useRequest as cw,isNumber$3 as cx,useLatest as cy,dayjs as cz,useBlockletsContext as d,afterMain as d$,formatDateTime as d0,getExplorerLink as d1,patchJsxToLocale as d2,T$6 as d3,getSessionToken as d4,LinearProgress as d5,SvgLogo as d6,isNumber$1 as d7,useEnhancedEffect$1 as d8,debounce$2 as d9,requireJsxRuntime as dA,requirePropTypes as dB,requireReactDom as dC,isObject$3 as dD,require$$0$2 as dE,require$$5$1 as dF,requireConstant$1 as dG,$e$1 as dH,noop$1 as dI,Paper as dJ,MenuList as dK,Popper as dL,_inheritsLoose$1 as dM,ReactDOM as dN,_objectWithoutPropertiesLoose$1 as dO,TransitionGroup as dP,ENTERED as dQ,ENTERING as dR,EXITING as dS,TransitionGroupContext as dT,Transition as dU,config$1 as dV,popperGenerator as dW,eventListeners as dX,popperOffsets$1 as dY,computeStyles$1 as dZ,applyStyles$1 as d_,ownerWindow as da,useRtl as db,KeyboardArrowLeft as dc,KeyboardArrowRight as dd,useEventCallback$1 as de,ownerDocument as df,getCommonHtmlTitle as dg,HelmetExport as dh,requireReact as di,i$e as dj,te$2 as dk,se$1 as dl,InfoIcon$2 as dm,upperFirst as dn,camelCase as dp,Skeleton as dq,R$5 as dr,isArrayLike as ds,baseIteratee as dt,keys as du,toInteger as dv,baseFindIndex as dw,commonjsGlobal as dx,getAugmentedNamespace as dy,emotionUtils_browser_esm as dz,useAsyncRetry as e,toString$2 as e$,afterRead as e0,afterWrite as e1,arrow$1 as e2,auto as e3,basePlacements as e4,beforeMain as e5,beforeRead as e6,beforeWrite as e7,bottom as e8,clippingParents as e9,requireLib$4 as eA,requireLib$5 as eB,requireLib$3 as eC,requireConstant$2 as eD,requireUrlPathFriendly as eE,b$8 as eF,data$s as eG,global$2 as eH,hoistStatics as eI,isEqual$3 as eJ,usePreviousProps as eK,setRef as eL,ClearIcon as eM,ArrowDropDownIcon as eN,Chip as eO,filledInputClasses as eP,inputBaseClasses as eQ,outlinedInputClasses as eR,inputClasses as eS,ListContext as eT,getListItemButtonUtilityClass as eU,listItemButtonClasses as eV,emotionReact_browser_esm as eW,emotionCache_browser_esm as eX,cloneDeep$1 as eY,forceReflow as eZ,_extends$2 as e_,createPopper as ea,createPopper$1 as eb,detectOverflow as ec,end as ed,flip$1 as ee,hide$1 as ef,left as eg,main as eh,modifierPhases as ei,offset$1 as ej,placements as ek,popper as el,preventOverflow$1 as em,read as en,reference as eo,right as ep,start as eq,top as er,variationPlacements as es,viewport as et,write as eu,requireReactIs as ev,emotionStyled_browser_esm as ew,emotionSerialize_esm as ex,emotionSheet_esm as ey,process$1 as ez,useTheme as f,requireCryptoBrowserify as f$,mergeThemeOptions as f0,StyledEngineProvider as f1,ThemeProvider as f2,ThemeProvider$3 as f3,s$3 as f4,CloseIcon as f5,isString$1 as f6,createTheme as f7,createAxios as f8,pick as f9,darken as fA,slotShouldForwardProp as fB,requireNormalizePathPrefix as fC,debounce as fD,useInterval as fE,formatTime as fF,CloseFullscreenIcon as fG,S$8 as fH,TablePagination as fI,parseAvatar as fJ,__rest as fK,useEffectWithTarget$1 as fL,__values as fM,tmp as fN,useUpdate as fO,requireUtil$6 as fP,requireObjectKeys$1 as fQ,requireShams$1 as fR,requireCallBound as fS,requireEsObjectAtoms as fT,requireDefineDataProperty as fU,requireHasPropertyDescriptors as fV,requireCallBind as fW,requireCallBound$1 as fX,requireSafeBuffer$1 as fY,requireBrowser$f as fZ,requireElliptic as f_,omitBy as fa,flat as fb,MenuIcon as fc,useDebounceFn as fd,Dialog as fe,OutlinedInput as ff,data as fg,Drawer as fh,parseQuery as fi,parseFilename as fj,stringifyParsedURL as fk,Grow as fl,Wt as fm,InputAdornment as fn,tooltipClasses as fo,requireEngine as fp,__spreadArray as fq,useEventListener as fr,le$7 as fs,getTargetElement as ft,MoreHorizIcon as fu,clamp as fv,extractEventHandlers as fw,isFocusVisible as fx,isHostComponent as fy,lighten as fz,p$3 as g,isServerless as g$,requireRipemd160 as g0,requireLib$1 as g1,requireUtil$2 as g2,uniq as g3,useLocalStorageState as g4,InputBase as g5,useSize as g6,DialogTitle as g7,DialogContent as g8,DialogActions as g9,isPlainObject$2 as gA,require$$12 as gB,throttle$2 as gC,isUndefined$1 as gD,useTimeout as gE,Fade as gF,FocusTrap as gG,dialogClasses as gH,localizedFormatPlugin as gI,n$8 as gJ,purify as gK,Buffer$1$1 as gL,Q$2 as gM,require$$0$1 as gN,requireIsAbsoluteUrl as gO,requireDist$1 as gP,requireBrowser$3 as gQ,require$$3 as gR,resolveProps as gS,useThemeProps as gT,defaultTheme$1 as gU,THEME_ID as gV,en$2 as gW,isIndex as gX,useTheme$4 as gY,objectAssign as gZ,__extends as g_,pickBy as ga,shouldForwardProp as gb,resolveComponentProps as gc,getInviteLink as gd,e$e as ge,getIssuePassportLink as gf,uniqBy$1 as gg,isNodeOwner as gh,isSelf as gi,Q$1 as gj,I$3 as gk,Y$3 as gl,PQueue as gm,getBlockletAccessibleUrl as gn,A$1 as go,createPassportSvg$1 as gp,requireMs as gq,E$3 as gr,trim as gs,getBlockletSDK as gt,identity$1 as gu,arrayEach as gv,baseEach as gw,arrayMap as gx,baseMap as gy,baseForOwn as gz,get$1 as h,amber as h$,requireJsonStableStringify as h0,isFunction$2 as h1,omit$1 as h2,TableContext as h3,Tablelvl2Context as h4,g$e as h5,useUnmount as h6,isDidDomainOrIpEchoDomain as h7,ExpandLess as h8,validateDomain as h9,isBrowser$1 as hA,root$1 as hB,isNil$1 as hC,require$$11 as hD,requireHoistNonReactStatics_cjs as hE,_assertThisInitialized$1 as hF,reactDomExports as hG,loadIcon as hH,withoutLeadingSlash as hI,fetchSvgAsPng as hJ,blobToFile as hK,withoutTrailingSlash as hL,u$2 as hM,Ce as hN,t$g as hO,i as hP,R$8 as hQ,p$f as hR,usePrevious as hS,browserExports$1 as hT,BlockletSDK as hU,highlightExports as hV,funcExports as hW,data$y as hX,useSnackbar as hY,common$3 as hZ,green as h_,requireDist$2 as ha,requireAxios as hb,trim$1 as hc,requirePRetry as hd,TableCell as he,xe$1 as hf,getSystemDomains as hg,copyArray as hh,baseIndexOf as hi,ke as hj,useAppLogo as hk,getTransferAppLink as hl,requireBn$1 as hm,require$$2 as hn,updateWindowEnv as ho,M$5 as hp,isNil as hq,requireBase32 as hr,Re as hs,withTrailingSlash as ht,data$B as hu,keyframes as hv,requireAssertString as hw,isEmail as hx,isURL as hy,createUseStorageState as hz,utilExports$1 as i,n$5 as i$,SnackbarContent as i0,d$f as i1,t$1 as i2,useDebounce as i3,Y as i4,g$3 as i5,b as i6,g$9 as i7,withErrorBoundary as i8,z$1 as i9,hasRequiredSteps as iA,getStoreList as iB,commonjsRequire as iC,require_interface as iD,requireHasown as iE,requireBrowser$1 as iF,requireSemver as iG,require$$4$1 as iH,flatten as iI,trimEnd as iJ,base32Exports as iK,flatExports as iL,Xt as iM,AxiosError as iN,I$6 as iO,isNull as iP,orange as iQ,purple as iR,useStore as iS,createStore as iT,create$1 as iU,t$h as iV,clientExports as iW,ke$1 as iX,retry as iY,isNetworkError as iZ,requirePTimeout as i_,M$6 as ia,Be as ib,G$1 as ic,xe as id,useBlockletLogo as ie,isPlainObject$1 as ig,Toolbar as ih,_setPrototypeOf as ii,isString$3 as ij,FormLabel as ik,RelativeTime as il,isIncludeActivity as im,isUserActor as io,ActorAvatar as ip,SendComponentAvatar as iq,Activity as ir,NotificationContent$1 as is,AvatarGroup as it,requireCjs as iu,useTheme$2 as iv,baseAssignValue as iw,isValidClusterSize as ix,extractStatusUrlFromNextWorkflow as iy,pWaitFor as iz,jsxRuntimeExports as j,Modal as j0,GlobalStyles$2 as j1,filesize as k,prettyMs as l,formatLocale as m,useSessionContext as n,o$h as o,p$e as p,useSetState as q,reactExports as r,styled$3 as s,TextField as t,useNodeContext as u,n$4 as v,lo as w,getWebWalletUrl as x,joinURL as y,withQuery as z};
|