hfs 3.4.0-beta3 → 3.4.0-rc4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/admin/assets/AccountsPage-Cq70nuY2.js +4 -0
  2. package/admin/assets/{ConfigFilePage-jUH2feqi.js → ConfigFilePage-CZKkFWKy.js} +1 -1
  3. package/admin/assets/{CustomHtmlPage-Pl_AJZrl.js → CustomHtmlPage-BWJMIbjK.js} +1 -1
  4. package/admin/assets/{InternetPage-DIcAwhFk.js → InternetPage-ChHF2KsX.js} +3 -3
  5. package/admin/assets/{LangPage-BwVY8QRD.js → LangPage-Do-2xam2.js} +1 -1
  6. package/admin/assets/{LogsPage-CcjS12cP.js → LogsPage-BjPjQ5no.js} +2 -2
  7. package/admin/assets/MonitorPage-Cn98Y7fp.js +2 -0
  8. package/admin/assets/OptionsPage-D2lthk3u.js +3 -0
  9. package/admin/assets/{PluginsPage-CC2dINcb.js → PluginsPage-wv8YGwiG.js} +1 -1
  10. package/admin/assets/{af-B1Gi_bpo.js → af-DbQ8Cp2D.js} +1 -1
  11. package/admin/assets/{am-B-dZnhsM.js → am-rTWUV8Q3.js} +1 -1
  12. package/admin/assets/ar-PoKj6G1D.js +1 -0
  13. package/admin/assets/{ar-dz-CxlYiKtP.js → ar-dz-Br5NmnXt.js} +1 -1
  14. package/admin/assets/{ar-iq-y4_Puo4B.js → ar-iq-BvwnnT3I.js} +1 -1
  15. package/admin/assets/{ar-kw-DTOZ0VC7.js → ar-kw-BF15YTZa.js} +1 -1
  16. package/admin/assets/{ar-ly-lPV9gApv.js → ar-ly-qH3DvDgG.js} +1 -1
  17. package/admin/assets/{ar-ma-DZqLSpeB.js → ar-ma-C7os4fnL.js} +1 -1
  18. package/admin/assets/{ar-sa-v-5vsIOR.js → ar-sa-DYNuwli-.js} +1 -1
  19. package/admin/assets/{ar-tn-a4q8lhXy.js → ar-tn-DNa89H2E.js} +1 -1
  20. package/admin/assets/{az-Cj4yq-j-.js → az-B9-m6vPU.js} +1 -1
  21. package/admin/assets/be-CrScT_T-.js +1 -0
  22. package/admin/assets/{bg-A8-93xdK.js → bg-BBGrX1km.js} +1 -1
  23. package/admin/assets/{bi-bwwEWGG2.js → bi-BY1hp7bh.js} +1 -1
  24. package/admin/assets/{bm-DpLmtYXC.js → bm-3BGRkD_Z.js} +1 -1
  25. package/admin/assets/{bn-DPL_BgLw.js → bn-DwhbHuEC.js} +1 -1
  26. package/admin/assets/{bn-bd-DukmY_R5.js → bn-bd-BuUiyWmp.js} +1 -1
  27. package/admin/assets/{bo-68KDEKGI.js → bo-BH1ivA_J.js} +1 -1
  28. package/admin/assets/{br-gA86uwqY.js → br-CWpuoVJP.js} +1 -1
  29. package/admin/assets/{bs-SfthSp42.js → bs-CJ06ZDuH.js} +1 -1
  30. package/admin/assets/{ca-8qUtZKFe.js → ca-CaNw03n9.js} +1 -1
  31. package/admin/assets/{cs-CTHcqPCX.js → cs-0aG58aYb.js} +1 -1
  32. package/admin/assets/{cv-BhBW7hcO.js → cv-D33jjmD9.js} +1 -1
  33. package/admin/assets/{cy-BYTS4PNY.js → cy-Bv-r1u54.js} +1 -1
  34. package/admin/assets/da-Bb0RK9Ek.js +1 -0
  35. package/admin/assets/{de-BFqyDxvo.js → de-Dg1YmBtR.js} +1 -1
  36. package/admin/assets/{de-at-C7zUXXVL.js → de-at-CE8AAPiz.js} +1 -1
  37. package/admin/assets/{de-ch-BVHosAzt.js → de-ch-dT7HLonw.js} +1 -1
  38. package/admin/assets/{dist-DC2A6cD2.js → dist-D3cOB8lq.js} +1 -1
  39. package/admin/assets/{dv-dvig99nB.js → dv-DAiO4FWM.js} +1 -1
  40. package/admin/assets/{el-BtJcYjoT.js → el-CpGQCpXg.js} +1 -1
  41. package/admin/assets/{en-B26lXzkx.js → en-DX5a8Etn.js} +1 -1
  42. package/admin/assets/en-au-Bb4_3YUG.js +1 -0
  43. package/admin/assets/{en-ca-nou5bZ6q.js → en-ca-ksaBtz9B.js} +1 -1
  44. package/admin/assets/{en-in-Bri93cNM.js → en-gb-Be35srzU.js} +1 -1
  45. package/admin/assets/{en-ie-C55e3apX.js → en-ie-DaIh113k.js} +1 -1
  46. package/admin/assets/{en-il-HYabE6j7.js → en-il-CYJKN5BU.js} +1 -1
  47. package/admin/assets/{en-tt-BqzQXPA5.js → en-in-CySHpBIl.js} +1 -1
  48. package/admin/assets/{en-nz-BqhpzeuX.js → en-nz-mP8Nxbdh.js} +1 -1
  49. package/admin/assets/{en-sg-q8xv-C8V.js → en-sg-CoIpxjC4.js} +1 -1
  50. package/admin/assets/{en-gb-kl3giCnh.js → en-tt-DwydYH9j.js} +1 -1
  51. package/admin/assets/{eo-5Y962E4S.js → eo-DNtw5yFM.js} +1 -1
  52. package/admin/assets/{es-DOQ7swrW.js → es-DVT0XHUz.js} +1 -1
  53. package/admin/assets/{es-do-Diob7juh.js → es-do-BbtwJtqj.js} +1 -1
  54. package/admin/assets/{es-mx-miy7RFDh.js → es-mx-DtmP93Lr.js} +1 -1
  55. package/admin/assets/{es-pr-CZa5Iw2n.js → es-pr-DaTYsO8g.js} +1 -1
  56. package/admin/assets/{es-us-BX03CBQf.js → es-us-C-csRt3U.js} +1 -1
  57. package/admin/assets/esm-CreJU49o.js +1 -0
  58. package/admin/assets/{et-DGWOmMlC.js → et-CK8IKO_0.js} +1 -1
  59. package/admin/assets/{eu-D1Qj8RMh.js → eu--GTpSs4T.js} +1 -1
  60. package/admin/assets/{fa--TfwKnl9.js → fa-CHdd20JP.js} +1 -1
  61. package/admin/assets/{fi-Dcbkv925.js → fi-BFXmafHr.js} +1 -1
  62. package/admin/assets/{fo-BPGX_WF4.js → fo-D5nODabC.js} +1 -1
  63. package/admin/assets/{fr-CNsDHzNh.js → fr-D1Ip1Dge.js} +1 -1
  64. package/admin/assets/{fr-ca-BsNs3KIJ.js → fr-ca-BNSC7iSL.js} +1 -1
  65. package/admin/assets/{fr-ch-BBmdtvlB.js → fr-ch-CpBlTkAy.js} +1 -1
  66. package/admin/assets/{fy-q3UE-mqp.js → fy-C2lX9wgR.js} +1 -1
  67. package/admin/assets/ga-CqPs0moD.js +1 -0
  68. package/admin/assets/{gd-mLMfry_l.js → gd-DwR_ZM38.js} +1 -1
  69. package/admin/assets/{gl-CO8Bj9I_.js → gl-OUgWMUz3.js} +1 -1
  70. package/admin/assets/{gom-latn-myglMmHV.js → gom-latn-AexJ0ZQz.js} +1 -1
  71. package/admin/assets/{gu-Bdz1OpMU.js → gu-CWIu1O0z.js} +1 -1
  72. package/admin/assets/{he-C4lqk2AA.js → he-LcLErtzp.js} +1 -1
  73. package/admin/assets/{hi-h0Byc_UN.js → hi-kQn-O4r7.js} +1 -1
  74. package/admin/assets/{hr-CZV7Za1n.js → hr-DZ_e0Ulr.js} +1 -1
  75. package/admin/assets/{ht-Dg2blNvl.js → ht-BQic7H76.js} +1 -1
  76. package/admin/assets/{hu-DbOVhd9K.js → hu-C9Umqg7s.js} +1 -1
  77. package/admin/assets/{hy-am-E48Q7kWE.js → hy-am-D6agS2em.js} +1 -1
  78. package/admin/assets/{icons-C_ux1zLA.js → icons-D6k8t08O.js} +1 -1
  79. package/admin/assets/{id-Cd4yWevW.js → id-jp72rBrA.js} +1 -1
  80. package/admin/assets/index-DUFnYPeE.js +779 -0
  81. package/admin/assets/{is-BJZYSfrA.js → is-BQEPU5pL.js} +1 -1
  82. package/admin/assets/{it-BRaqqFz4.js → it-BfwC0F9Q.js} +1 -1
  83. package/admin/assets/{it-ch-BkLqxaff.js → it-ch-DRHQLZvj.js} +1 -1
  84. package/admin/assets/{ja-X_I-25cD.js → ja-BRfodXq8.js} +1 -1
  85. package/admin/assets/{jv-BBBx3R3v.js → jv-CjdA7shg.js} +1 -1
  86. package/admin/assets/{ka-D9Yrujqk.js → ka-erBrS3c-.js} +1 -1
  87. package/admin/assets/{kk-Bz450_o8.js → kk-BwfB676c.js} +1 -1
  88. package/admin/assets/{km-CKOAqvHM.js → km-BFjcfFW9.js} +1 -1
  89. package/admin/assets/{kn-k2xTBR7a.js → kn-D_yG3aYq.js} +1 -1
  90. package/admin/assets/{ko-BCvoCYib.js → ko-BThIM7bS.js} +1 -1
  91. package/admin/assets/{ku-D6Rloctr.js → ku-_PuC_gH_.js} +1 -1
  92. package/admin/assets/{ky-C54qnEzk.js → ky-DDLpB1ep.js} +1 -1
  93. package/admin/assets/{lb-y3rkrWB2.js → lb-DnkPbtvx.js} +1 -1
  94. package/admin/assets/{lo-nA_dPnOU.js → lo-D-SL6zpP.js} +1 -1
  95. package/admin/assets/{lt-hjPmCCML.js → lt-D5ekwPTY.js} +1 -1
  96. package/admin/assets/{lv-Bh4qmUa_.js → lv-_fCWCMW3.js} +1 -1
  97. package/admin/assets/{me-e32suC_n.js → me-HHhlyCy2.js} +1 -1
  98. package/admin/assets/{mi-Dwbsuyr9.js → mi-Cdoio8LZ.js} +1 -1
  99. package/admin/assets/{mk-DjUXwKRn.js → mk-DPZliVUO.js} +1 -1
  100. package/admin/assets/{ml-CWjFAViF.js → ml-D7F-V_eL.js} +1 -1
  101. package/admin/assets/{mn-BU4qTvEl.js → mn-BB2_r7Uf.js} +1 -1
  102. package/admin/assets/{mr-Bvnduzfb.js → mr-DS20irLS.js} +1 -1
  103. package/admin/assets/{ms-XuKVAni7.js → ms-IsWqX08Y.js} +1 -1
  104. package/admin/assets/{ms-my-CDbnYp0g.js → ms-my-DXb8k3-o.js} +1 -1
  105. package/admin/assets/{mt-PDuxJf8J.js → mt-CqISTppi.js} +1 -1
  106. package/admin/assets/{my-7N6SHnsD.js → my-DQnfIg4a.js} +1 -1
  107. package/admin/assets/{nb-Cu3KUtTR.js → nb-BZ3oXkCk.js} +1 -1
  108. package/admin/assets/{ne-CYW0uI2a.js → ne-BzdLyBBb.js} +1 -1
  109. package/admin/assets/{nl-DL7cw699.js → nl-D6k7FUY-.js} +1 -1
  110. package/admin/assets/{nl-be-B3NSF-2w.js → nl-be-BJMJB86Z.js} +1 -1
  111. package/admin/assets/{nn-BHITVkGB.js → nn-DeDoW2gh.js} +1 -1
  112. package/admin/assets/{oc-lnc-dp3c4Bty.js → oc-lnc-D7zHC0B6.js} +1 -1
  113. package/admin/assets/{pa-in-BxgIlP1T.js → pa-in-DFr7y90l.js} +1 -1
  114. package/admin/assets/{pl-GrG6yjkB.js → pl-CqtucynZ.js} +1 -1
  115. package/admin/assets/{pt-cVbj6hL6.js → pt-C17mt65n.js} +1 -1
  116. package/admin/assets/{pt-br-BxTgeF95.js → pt-br-CzOOC-bM.js} +1 -1
  117. package/admin/assets/{rn-DiVJ2_Jy.js → rn-CAIDc-jx.js} +1 -1
  118. package/admin/assets/{ro-D1WeRyXR.js → ro-D2zK9l-W.js} +1 -1
  119. package/admin/assets/rolldown-runtime-8BhlS34s.js +1 -0
  120. package/admin/assets/{routing-Be72yFmd.js → routing-DvS2UalH.js} +1 -1
  121. package/admin/assets/{ru-DZCu4V9W.js → ru-fzjTY7Be.js} +1 -1
  122. package/admin/assets/{rw-DfFpVc_g.js → rw-1K76p_9E.js} +1 -1
  123. package/admin/assets/{sd-yDyBYxtQ.js → sd-90fzw5NP.js} +1 -1
  124. package/admin/assets/{se-EJKibocp.js → se-CdyuJz2s.js} +1 -1
  125. package/admin/assets/sha512-CyvtZ8Ek.js +1 -0
  126. package/admin/assets/{si-BCBV00rO.js → si-BmAvPXrx.js} +1 -1
  127. package/admin/assets/{sk-B2VvG_mo.js → sk-BU2IAAmj.js} +1 -1
  128. package/admin/assets/{sl-BTYmt65M.js → sl-ChP1IupW.js} +1 -1
  129. package/admin/assets/{sq-BaLGKAHu.js → sq-L_xT9URu.js} +1 -1
  130. package/admin/assets/{sr-DarE-95b.js → sr-GWkHw_Kt.js} +1 -1
  131. package/admin/assets/{sr-cyrl-CrwXFtkw.js → sr-cyrl-CmbXxMh7.js} +1 -1
  132. package/admin/assets/{ss-CbBe1RUs.js → ss-uh1wXX0s.js} +1 -1
  133. package/admin/assets/{sv-Baw7Je9j.js → sv-BaqZIaFS.js} +1 -1
  134. package/admin/assets/{sv-fi-CVHORXkw.js → sv-fi-5mTgY7SS.js} +1 -1
  135. package/admin/assets/{sw-k1H_OzIi.js → sw-CgZyjUY_.js} +1 -1
  136. package/admin/assets/{ta-Bc4ZaZT9.js → ta-BTYrdU6q.js} +1 -1
  137. package/admin/assets/{te-ClciACZi.js → te-BCD82vjs.js} +1 -1
  138. package/admin/assets/{tet-B75w1oSG.js → tet-D3WjCGd2.js} +1 -1
  139. package/admin/assets/{tg-CuH2ARRk.js → tg-Gqdlk9ho.js} +1 -1
  140. package/admin/assets/{th-LvExAoJ6.js → th-CsNcKT-3.js} +1 -1
  141. package/admin/assets/{tk-2CFwTMKo.js → tk-DTwh4mGR.js} +1 -1
  142. package/admin/assets/{tl-ph-CNJ_lViV.js → tl-ph-DGe58ZB_.js} +1 -1
  143. package/admin/assets/{tlh-9UbKQkHo.js → tlh-QefTfcsO.js} +1 -1
  144. package/admin/assets/{tr-Cu4P4OMe.js → tr-CAVwBwq3.js} +1 -1
  145. package/admin/assets/{tzl-D97WsZW-.js → tzl-CecEic_J.js} +1 -1
  146. package/admin/assets/{tzm-latn-BRGsWK-9.js → tzm-latn-Coe9YWA1.js} +1 -1
  147. package/admin/assets/{tzm-CURkYgMY.js → tzm-wsG5Gbc8.js} +1 -1
  148. package/admin/assets/{ug-cn-Cd4exKOc.js → ug-cn-MQAmw47P.js} +1 -1
  149. package/admin/assets/{uk-DEXM3PIH.js → uk-qONcDBL3.js} +1 -1
  150. package/admin/assets/{ur-DpUycj07.js → ur-DwbJl05B.js} +1 -1
  151. package/admin/assets/{uz-CznjzufA.js → uz-DI2FQHIg.js} +1 -1
  152. package/admin/assets/{uz-latn-Baga58FN.js → uz-latn-DHU_kU5D.js} +1 -1
  153. package/admin/assets/{vi-BrZWcL2C.js → vi-BmZ3NncE.js} +1 -1
  154. package/admin/assets/{x-pseudo-BY6J4I7_.js → x-pseudo-DhxEXlE7.js} +1 -1
  155. package/admin/assets/{yo-Dkeaym0x.js → yo-DF4qHF3o.js} +1 -1
  156. package/admin/assets/{zh-C2fOZUKR.js → zh-C0JKmERV.js} +1 -1
  157. package/admin/assets/{zh-cn-CiA7hMZm.js → zh-cn-BaPz93Vm.js} +1 -1
  158. package/admin/assets/{zh-hk-EkoniWh0.js → zh-hk-BsGTDJKO.js} +1 -1
  159. package/admin/assets/{zh-tw-KDgos-kB.js → zh-tw-BOyHnTWu.js} +1 -1
  160. package/admin/index.html +3 -3
  161. package/central.json +3 -3
  162. package/frontend/assets/dist-legacy-BLSZSqtf.js +2 -0
  163. package/frontend/assets/index-legacy-DYqom5rb.js +30 -0
  164. package/frontend/assets/lib-legacy-D_nM1f4j.js +1 -0
  165. package/frontend/assets/polyfills-legacy-DKfiW0TO.js +3 -0
  166. package/frontend/assets/sha512-legacy-CBxAsOjS.js +1 -0
  167. package/frontend/index.html +3 -3
  168. package/npm-shrinkwrap.json +68 -68
  169. package/package.json +15 -14
  170. package/src/QuickZipStream.js +11 -1
  171. package/src/admin-langs/hfs-admin-lang-ar.json +1 -0
  172. package/src/admin-langs/hfs-admin-lang-bg.json +1 -0
  173. package/src/admin-langs/hfs-admin-lang-de.json +1 -0
  174. package/src/admin-langs/hfs-admin-lang-el.json +1 -0
  175. package/src/admin-langs/hfs-admin-lang-en.json +1 -0
  176. package/src/admin-langs/hfs-admin-lang-es.json +1 -0
  177. package/src/admin-langs/hfs-admin-lang-fi.json +11 -18
  178. package/src/admin-langs/hfs-admin-lang-fr.json +1 -0
  179. package/src/admin-langs/hfs-admin-lang-hu.json +1 -0
  180. package/src/admin-langs/hfs-admin-lang-it.json +1 -0
  181. package/src/admin-langs/hfs-admin-lang-ja.json +1 -0
  182. package/src/admin-langs/hfs-admin-lang-ko.json +1 -0
  183. package/src/admin-langs/hfs-admin-lang-lt.json +1 -0
  184. package/src/admin-langs/hfs-admin-lang-ms.json +1 -0
  185. package/src/admin-langs/hfs-admin-lang-nl.json +1 -0
  186. package/src/admin-langs/hfs-admin-lang-pl.json +1 -0
  187. package/src/admin-langs/hfs-admin-lang-pt-br.json +1 -0
  188. package/src/admin-langs/hfs-admin-lang-ro.json +1 -0
  189. package/src/admin-langs/hfs-admin-lang-ru.json +1 -0
  190. package/src/admin-langs/hfs-admin-lang-sr-latn.json +1 -0
  191. package/src/admin-langs/hfs-admin-lang-sr.json +1 -0
  192. package/src/admin-langs/hfs-admin-lang-th.json +1 -0
  193. package/src/admin-langs/hfs-admin-lang-tr.json +1 -0
  194. package/src/admin-langs/hfs-admin-lang-uk.json +1 -0
  195. package/src/admin-langs/hfs-admin-lang-vi.json +1 -0
  196. package/src/admin-langs/hfs-admin-lang-zh-hant.json +1 -0
  197. package/src/admin-langs/hfs-admin-lang-zh.json +1 -0
  198. package/src/const.js +1 -1
  199. package/src/github.js +2 -4
  200. package/src/plugins.js +10 -4
  201. package/src/util-http.js +16 -9
  202. package/src/vfs.js +1 -1
  203. package/src/walkDir.js +13 -11
  204. package/admin/assets/AccountsPage-CoiPofEv.js +0 -4
  205. package/admin/assets/MonitorPage-DMVFXyMe.js +0 -2
  206. package/admin/assets/OptionsPage-BB40ax9G.js +0 -3
  207. package/admin/assets/ar-DsQGp6kZ.js +0 -1
  208. package/admin/assets/be-B-3QlFM8.js +0 -1
  209. package/admin/assets/da-BiwfOrRd.js +0 -1
  210. package/admin/assets/en-au-CWzJ565h.js +0 -1
  211. package/admin/assets/esm-Dtaf0rWK.js +0 -1
  212. package/admin/assets/ga-C-DOgnYh.js +0 -1
  213. package/admin/assets/index-BSSQOMG_.js +0 -755
  214. package/admin/assets/rolldown-runtime-CacB07dV.js +0 -1
  215. package/admin/assets/sha512-DJtGRwVu.js +0 -1
  216. package/frontend/assets/dist-legacy-D7Dg5w3L.js +0 -1
  217. package/frontend/assets/index-legacy-CnazC3Dj.js +0 -1
  218. package/frontend/assets/lib-legacy-BxFHpdER.js +0 -1
  219. package/frontend/assets/polyfills-legacy-uhvhjQSD.js +0 -1
  220. package/frontend/assets/sha512-legacy-C8xoQBnP.js +0 -1
@@ -1,11 +1,7 @@
1
1
  {
2
2
  "author": "Automatic translation & Win_7",
3
- "version": 1.1,
3
+ "version": 1.11,
4
4
  "translate": {
5
- "Using a hostname?": "Käytätkö isäntänimeä?",
6
- "Configure it first": "Määritä se ensin",
7
- "auto_login_net_help": "IP-osoitteet ja localhost toimivat ilman lisämäärityksiä.\nJos käytät HFS:ää isäntänimellä, määritä se kohdassa Internet → Osoite pääosoitteeksi tai verkkotunnusten juuriin. Lisää portti, jos se näkyy osoitteessa.\nTämä estää haitallista sivustoa käyttämästä selaimen hyväksyttyä IP-osoitetta kirjautumiseen DNS-uudelleensidonnalla. Määritä vain luotettuja verkkotunnuksia ja vältä liian laajoja jokerimerkkejä.\nMuilla isäntänimillä automaattinen kirjautuminen ohitetaan, mutta kirjautuminen tunnuksilla on edelleen käytettävissä.",
8
- "Configure your firewall to allow only trusted proxies to connect to HFS.": "Määritä palomuuri sallimaan vain luotettujen välityspalvelimien yhteydet HFS:ään.",
9
5
  "Include hidden files": "Sisällytä piilotetut tiedostot",
10
6
  "Case-insensitive": "Kirjainkoolla ei ole merkitystä",
11
7
  "non_public_ip_warning": "Tämä IP-osoite ei ole julkinen. Siihen ei voi muodostaa yhteyttä suoraan internetistä. Käytä julkista IP-osoitetta tai verkkotunnusta.",
@@ -353,7 +349,7 @@
353
349
  "Explanation": "Selitys",
354
350
  "Export without passwords": "Vie ilman salasanoja",
355
351
  "externalPort not found": "ulkoista porttia ei löydy",
356
- "Failed": "Epäonnistui",
352
+ "Failed": "Epäonnistuneet",
357
353
  "failed_plugin_dependencies": "Epäonnistuneet riippuvuudet: {dependencies}",
358
354
  "Failed Dependency: the request failed because a previous request did not succeed": "Epäonnistunut riippuvuus: pyyntö epäonnistui, koska edellinen pyyntö ei onnistunut",
359
355
  "Failed requests that you probably don't want to see": "Epäonnistuneet pyynnöt, joita et todennäköisesti halua nähdä",
@@ -518,7 +514,7 @@
518
514
  "Length Required: the request didn’t include the required content length": "Pakollinen pituus: pyyntö ei sisältänyt vaadittua sisällön pituutta",
519
515
  "Level": "Taso",
520
516
  "license": "lisenssi",
521
- "Light theme": "Kevyt teema",
517
+ "Light theme": "Vaalea teema",
522
518
  "Limit output": "Rajoita lähtöä",
523
519
  "Limit output per-IP": "Rajoita IP-lähtöä",
524
520
  "Link": "Linkki",
@@ -589,7 +585,7 @@
589
585
  "MM": "MM",
590
586
  "MMMM": "MMMM",
591
587
  "Modified": "Muokattu",
592
- "Modify": "Muuttaa",
588
+ "Modify": "Muuta",
593
589
  "Month": "Kuukausi",
594
590
  "monthly": "kuukausittain",
595
591
  "More help": "Lisää apua",
@@ -659,8 +655,8 @@
659
655
  "Nothing to delete": "Ei mitään poistettavaa",
660
656
  "Nothing to save": "Ei mitään pelastettavaa",
661
657
  "vfs_move_paste_hint": "Nyt kun tämä on merkitty siirrettäväksi, napsauta kohdekansiota ja sitten liitä-painiketta ",
662
- "number": "määrä",
663
- "Number": "Määrä",
658
+ "number": "numero",
659
+ "Number": "Numero",
664
660
  "Number of incoming HTTP proxies": "Saapuvien HTTP-välityspalvelinten määrä",
665
661
  "Number of simultaneous downloads": "Samanaikaisten latausten määrä",
666
662
  "off": "pois",
@@ -731,7 +727,7 @@
731
727
  "Procedure complete": "Toimenpide suoritettu",
732
728
  "Proceed only if you trust this plugin": "Jatka vain, jos luotat tähän laajennukseen",
733
729
  "Processing: the server is processing the request but a complete response isn’t ready yet": "Käsitellään: palvelin käsittelee pyyntöä, mutta täydellinen vastaus ei ole vielä valmis",
734
- "Protocol": "pöytäkirja",
730
+ "Protocol": "Protokolla",
735
731
  "Protocol <u>{k}</u>: ": "Protokolla <u>{k}</u>: ",
736
732
  "provide_adequate_files": "antaa riittävät tiedostot",
737
733
  "proxies": "välityspalvelimet",
@@ -756,8 +752,6 @@
756
752
  "dynamic_dns_url_help": "Kysy DNS-palveluntarjoajaltasi, mikä URL-osoite voi pitää verkkotunnuksesi automaattisesti päivitettynä. Tuetut symbolit ovat $IP4, $IP6, $IPX. Vaihtoehtoisesti voit lisätä ”>” ja sen jälkeen säännöllisen lausekkeen onnistuneen vastauksen määrittämiseksi, muuten tilakoodia käytetään.",
757
753
  "Reinstall previous version": "Asenna edellinen versio uudelleen",
758
754
  "Reject uploads that don't comply": "Hylkää vaatimustenvastaiset lähetykset",
759
- "Require approval for uploaded HTML/SVG": "Vaadi hyväksyntä ladatuille HTML/SVG-tiedostoille",
760
- "Prevents running scripts on your website": "Estää komentosarjojen suorittamisen sivustollasi",
761
755
  "release": "vapauttaa",
762
756
  "Reload": "Lataa uudelleen",
763
757
  "Remove": "Poistaa",
@@ -766,8 +760,9 @@
766
760
  "repeat(auto-fill, minmax(8em,1fr))": "toista(automaattinen täyttö, minmax(8em,1fr))",
767
761
  "repeating-linear-gradient(45deg, #333, #333 10px, #444 10px, #444 20px)": "toistuva lineaarinen gradientti (45 astetta, #333, #333 10px, #444 10px, #444 20px)",
768
762
  "repo": "repo",
769
- "Request": "Pyytää",
763
+ "Request": "Pyydä",
770
764
  "github_quota_error": "Pyyntö evätty. Olet ehkä saavuttanut rajan, yritä myöhemmin uudelleen.",
765
+ "tls_certificate_verification_error": "GitHubin HTTPS-varmennetta ei voida vahvistaa. Tarkista välityspalvelimen tai virustorjunnan asetukset.",
771
766
  "Request Header Fields Too Large: the request’s header fields are too large": "Pyynnön otsikkokentät liian suuret: pyynnön otsikkokentät ovat liian suuria",
772
767
  "Request Timeout: the server timed out waiting for the request": "Pyynnön aikakatkaisu: palvelin aikakatkaistiin odottamassa pyyntöä",
773
768
  "Requests": "Pyynnöt",
@@ -796,8 +791,8 @@
796
791
  "Rows": "Rivit",
797
792
  "Rows per page": "Riviä sivulla",
798
793
  "Rule": "Sääntö",
799
- "save": "tallentaa",
800
- "Save": "Tallentaa",
794
+ "save": "tallenna",
795
+ "Save": "Tallenna",
801
796
  "Save\n(ctrl+enter)": "Tallenna\n(ctrl+enter)",
802
797
  "Save\n(ctrl+s)": "Tallenna\n(Ctrl+s)",
803
798
  "Save and close": "Tallenna ja sulje",
@@ -857,8 +852,6 @@
857
852
  "Show more": "Näytä lisää",
858
853
  "Show tree": "Näytä puu",
859
854
  "Show uploader to": "Näytä lähettäjä käyttäjälle",
860
- "Treat as interface asset": "Käsittele käyttöliittymän resurssina",
861
- "Excluded from download limits; logged only when interface logging is enabled": "Ei kuulu latausrajoihin; kirjataan vain, kun käyttöliittymän kirjaus on käytössä",
862
855
  "Show without probing disk source": "Näytä ilman levylähdettä",
863
856
  "since_timestamp": "Alkaen: {timestamp}",
864
857
  "size": "koko",
@@ -764,6 +764,7 @@
764
764
  "repo": "dépôt",
765
765
  "Request": "Demander",
766
766
  "github_quota_error": "Demande refusée. Vous avez peut-être atteint la limite, réessayez plus tard.",
767
+ "tls_certificate_verification_error": "Impossible de vérifier le certificat HTTPS de GitHub. Vérifiez les paramètres du proxy ou de l’antivirus.",
767
768
  "Request Header Fields Too Large: the request’s header fields are too large": "Champs d'en-tête de requête trop grands : les champs d'en-tête de la requête sont trop grands",
768
769
  "Request Timeout: the server timed out waiting for the request": "Request Timeout : le serveur a expiré en attendant la demande",
769
770
  "Requests": "Demandes",
@@ -768,6 +768,7 @@
768
768
  "repo": "repo",
769
769
  "Request": "Kérés",
770
770
  "github_quota_error": "A kérés elutasítva. Lehet, hogy elérte a korlátot, próbálkozzon újra később.",
771
+ "tls_certificate_verification_error": "A GitHub HTTPS-tanúsítványa nem ellenőrizhető. Ellenőrizze a proxy vagy a vírusirtó beállításait.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "A kérelem fejlécmezői túl nagyok: a kérelem fejlécmezői túl nagyok",
772
773
  "Request Timeout: the server timed out waiting for the request": "Kérelem időtúllépése: a szerver időtúllépést ért el a kérésre várva",
773
774
  "Requests": "Kérések",
@@ -764,6 +764,7 @@
764
764
  "repo": "pronti contro termine",
765
765
  "Request": "Richiedi",
766
766
  "github_quota_error": "Richiesta respinta. Potresti aver raggiunto il limite, riprova più tardi.",
767
+ "tls_certificate_verification_error": "Impossibile verificare il certificato HTTPS di GitHub. Controlla le impostazioni del proxy o dell'antivirus.",
767
768
  "Request Header Fields Too Large: the request’s header fields are too large": "Campi intestazione richiesta troppo grandi: i campi di intestazione della richiesta sono troppo grandi",
768
769
  "Request Timeout: the server timed out waiting for the request": "Request Timeout: il server è scaduto in attesa della richiesta",
769
770
  "Requests": "Richieste",
@@ -764,6 +764,7 @@
764
764
  "repo": "リポジトリ",
765
765
  "Request": "リクエスト",
766
766
  "github_quota_error": "リクエストは拒否されました。制限に達した可能性があります。後で再試行してください。",
767
+ "tls_certificate_verification_error": "GitHub の HTTPS 証明書を検証できません。プロキシまたはウイルス対策ソフトの設定を確認してください。",
767
768
  "Request Header Fields Too Large: the request’s header fields are too large": "リクエストヘッダーフィールドが大きすぎます: リクエストのヘッダーフィールドが大きすぎます",
768
769
  "Request Timeout: the server timed out waiting for the request": "リクエストのタイムアウト: サーバーはリクエストの待機中にタイムアウトになりました。",
769
770
  "Requests": "リクエスト",
@@ -768,6 +768,7 @@
768
768
  "repo": "레포",
769
769
  "Request": "요청",
770
770
  "github_quota_error": "요청이 거부되었습니다.한도에 도달했을 수 있습니다. 나중에 다시 시도하세요.",
771
+ "tls_certificate_verification_error": "GitHub의 HTTPS 인증서를 검증할 수 없습니다. 프록시 또는 백신 설정을 확인하세요.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "요청 헤더 필드가 너무 큼: 요청의 헤더 필드가 너무 큽니다.",
772
773
  "Request Timeout: the server timed out waiting for the request": "요청 시간 초과: 서버가 요청을 기다리는 동안 시간이 초과되었습니다.",
773
774
  "Requests": "요청사항",
@@ -768,6 +768,7 @@
768
768
  "repo": "atpirkimo sandoris",
769
769
  "Request": "Prašyti",
770
770
  "github_quota_error": "Prašymas atmestas. Galbūt pasiekėte limitą, bandykite dar kartą vėliau.",
771
+ "tls_certificate_verification_error": "Nepavyksta patikrinti GitHub HTTPS sertifikato. Patikrinkite tarpinio serverio arba antivirusinės programos nustatymus.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Užklausos antraštės laukai per dideli: užklausos antraštės laukai per dideli",
772
773
  "Request Timeout: the server timed out waiting for the request": "Užklausos skirtasis laikas: serveriui baigėsi skirtasis laikas laukiant užklausos",
773
774
  "Requests": "Prašymai",
@@ -768,6 +768,7 @@
768
768
  "repo": "repo",
769
769
  "Request": "Minta",
770
770
  "github_quota_error": "Permintaan ditolak. Anda mungkin telah mencapai had, cuba semula kemudian.",
771
+ "tls_certificate_verification_error": "Tidak dapat mengesahkan sijil HTTPS GitHub. Semak tetapan proksi atau antivirus anda.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Medan Pengepala Permintaan Terlalu Besar: medan pengepala permintaan terlalu besar",
772
773
  "Request Timeout: the server timed out waiting for the request": "Permintaan Tamat: pelayan tamat masa menunggu permintaan",
773
774
  "Requests": "Permintaan",
@@ -768,6 +768,7 @@
768
768
  "repo": "repository",
769
769
  "Request": "Aanvragen",
770
770
  "github_quota_error": "Verzoek afgewezen. Mogelijk heeft u de limiet bereikt. Probeer het later opnieuw.",
771
+ "tls_certificate_verification_error": "Het HTTPS-certificaat van GitHub kan niet worden geverifieerd. Controleer uw proxy- of antivirusinstellingen.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Verzoekkoptekstvelden te groot: de koptekstvelden van het verzoek zijn te groot",
772
773
  "Request Timeout: the server timed out waiting for the request": "Time-out van verzoek: er is een time-out opgetreden bij het wachten op het verzoek",
773
774
  "Requests": "Verzoeken",
@@ -768,6 +768,7 @@
768
768
  "repo": "repozytorium",
769
769
  "Request": "Zażądaj",
770
770
  "github_quota_error": "Żądanie odrzucone. Być może osiągnąłeś limit. Spróbuj ponownie później.",
771
+ "tls_certificate_verification_error": "Nie można zweryfikować certyfikatu HTTPS GitHuba. Sprawdź ustawienia proxy lub antywirusa.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Pola nagłówka żądania są zbyt duże: pola nagłówka żądania są zbyt duże",
772
773
  "Request Timeout: the server timed out waiting for the request": "Limit czasu żądania: przekroczono limit czasu serwera podczas oczekiwania na żądanie",
773
774
  "Requests": "Upraszanie",
@@ -768,6 +768,7 @@
768
768
  "repo": "repositório",
769
769
  "Request": "Solicitar",
770
770
  "github_quota_error": "Pedido negado. Você pode ter atingido o limite. Tente novamente mais tarde.",
771
+ "tls_certificate_verification_error": "Não foi possível verificar o certificado HTTPS do GitHub. Verifique as configurações do proxy ou do antivírus.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Campos de cabeçalho da solicitação muito grandes: os campos de cabeçalho da solicitação são muito grandes",
772
773
  "Request Timeout: the server timed out waiting for the request": "Request Timeout: o servidor expirou aguardando a solicitação",
773
774
  "Requests": "Solicitações",
@@ -768,6 +768,7 @@
768
768
  "repo": "repo",
769
769
  "Request": "Solicită",
770
770
  "github_quota_error": "Solicitare respinsă. Este posibil să fi atins limita, reîncercați mai târziu.",
771
+ "tls_certificate_verification_error": "Certificatul HTTPS al GitHub nu poate fi verificat. Verificați setările proxy sau antivirus.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Câmpurile antetului cererii sunt prea mari: câmpurile antetului solicitării sunt prea mari",
772
773
  "Request Timeout: the server timed out waiting for the request": "Request Timeout: serverul a expirat în așteptarea solicitării",
773
774
  "Requests": "Cereri",
@@ -768,6 +768,7 @@
768
768
  "repo": "репо",
769
769
  "Request": "Запросить",
770
770
  "github_quota_error": "Запрос отклонен. Возможно, вы достигли предела, повторите попытку позже.",
771
+ "tls_certificate_verification_error": "Не удалось проверить HTTPS-сертификат GitHub. Проверьте настройки прокси или антивируса.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Поля заголовка запроса слишком велики: поля заголовка запроса слишком велики.",
772
773
  "Request Timeout: the server timed out waiting for the request": "Таймаут запроса: время ожидания запроса на сервере истекло.",
773
774
  "Requests": "Запросы",
@@ -768,6 +768,7 @@
768
768
  "repo": "repo",
769
769
  "Request": "Zatraži",
770
770
  "github_quota_error": "Zahtev odbijen. Možda ste dostigli ograničenje, pokušajte ponovo kasnije.",
771
+ "tls_certificate_verification_error": "Nije moguće proveriti GitHub HTTPS sertifikat. Proverite podešavanja proksija ili antivirusa.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Polja zaglavlja zahteva su prevelika: polja zaglavlja zahteva su prevelika",
772
773
  "Request Timeout: the server timed out waiting for the request": "Rekuest Timeout: server je istekao čekajući zahtev",
773
774
  "Requests": "Zahtevi",
@@ -768,6 +768,7 @@
768
768
  "repo": "репо",
769
769
  "Request": "Затражи",
770
770
  "github_quota_error": "Захтев одбијен. Можда сте достигли ограничење, покушајте поново касније.",
771
+ "tls_certificate_verification_error": "Није могуће проверити GitHub HTTPS сертификат. Проверите подешавања проксија или антивируса.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Поља заглавља захтева су превелика: поља заглавља захтева су превелика",
772
773
  "Request Timeout: the server timed out waiting for the request": "Рекуест Тимеоут: сервер је истекао чекајући захтев",
773
774
  "Requests": "Захтеви",
@@ -768,6 +768,7 @@
768
768
  "repo": "ซื้อคืน",
769
769
  "Request": "ขอ",
770
770
  "github_quota_error": "คำขอถูกปฏิเสธคุณอาจถึงขีดจำกัดแล้ว ลองอีกครั้งในภายหลัง",
771
+ "tls_certificate_verification_error": "ไม่สามารถตรวจสอบใบรับรอง HTTPS ของ GitHub ได้ โปรดตรวจสอบการตั้งค่าพร็อกซีหรือโปรแกรมป้องกันไวรัส",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "ฟิลด์ส่วนหัวของคำขอมีขนาดใหญ่เกินไป: ฟิลด์ส่วนหัวของคำขอมีขนาดใหญ่เกินไป",
772
773
  "Request Timeout: the server timed out waiting for the request": "คำขอหมดเวลา: เซิร์ฟเวอร์หมดเวลารอคำขอ",
773
774
  "Requests": "คำขอ",
@@ -768,6 +768,7 @@
768
768
  "repo": "depo",
769
769
  "Request": "İste",
770
770
  "github_quota_error": "Talep reddedildi. Sınıra ulaşmış olabilirsiniz, daha sonra tekrar deneyin.",
771
+ "tls_certificate_verification_error": "GitHub'ın HTTPS sertifikası doğrulanamıyor. Proxy veya antivirüs ayarlarınızı kontrol edin.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "İstek Başlığı Alanları Çok Büyük: isteğin başlık alanları çok büyük",
772
773
  "Request Timeout: the server timed out waiting for the request": "İstek Zaman Aşımı: sunucu isteği beklerken zaman aşımına uğradı",
773
774
  "Requests": "İstekler",
@@ -768,6 +768,7 @@
768
768
  "repo": "репо",
769
769
  "Request": "Запросити",
770
770
  "github_quota_error": "Запит відхилено. Можливо, ви досягли обмеження, повторіть спробу пізніше.",
771
+ "tls_certificate_verification_error": "Не вдалося перевірити HTTPS-сертифікат GitHub. Перевірте налаштування проксі або антивірусу.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Завеликі поля заголовка запиту: поля заголовка запиту завеликі",
772
773
  "Request Timeout: the server timed out waiting for the request": "Час очікування запиту: минув час очікування сервера на запит",
773
774
  "Requests": "Запити",
@@ -768,6 +768,7 @@
768
768
  "repo": "kho lưu trữ",
769
769
  "Request": "Yêu cầu",
770
770
  "github_quota_error": "Yêu cầu bị từ chối. Bạn có thể đã đạt đến giới hạn, hãy thử lại sau.",
771
+ "tls_certificate_verification_error": "Không thể xác minh chứng chỉ HTTPS của GitHub. Kiểm tra cài đặt proxy hoặc phần mềm diệt virus.",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "Trường tiêu đề yêu cầu quá lớn: trường tiêu đề của yêu cầu quá lớn",
772
773
  "Request Timeout: the server timed out waiting for the request": "Hết thời gian yêu cầu: máy chủ đã hết thời gian chờ yêu cầu",
773
774
  "Requests": "Yêu cầu",
@@ -768,6 +768,7 @@
768
768
  "repo": "儲存庫",
769
769
  "Request": "請求",
770
770
  "github_quota_error": "請求被拒絕。你可能已達到限制,請稍後重試。",
771
+ "tls_certificate_verification_error": "無法驗證 GitHub 的 HTTPS 憑證。請檢查代理伺服器或防毒軟體的設定。",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "請求標頭欄位過大:請求的標頭欄位過大",
772
773
  "Request Timeout: the server timed out waiting for the request": "請求逾時:伺服器等待請求逾時",
773
774
  "Requests": "請求",
@@ -768,6 +768,7 @@
768
768
  "repo": "仓库",
769
769
  "Request": "请求",
770
770
  "github_quota_error": "请求被拒绝。你可能已达到限制,请稍后重试。",
771
+ "tls_certificate_verification_error": "无法验证 GitHub 的 HTTPS 证书。请检查代理或杀毒软件的设置。",
771
772
  "Request Header Fields Too Large: the request’s header fields are too large": "请求标头字段过大:请求的标头字段过大",
772
773
  "Request Timeout: the server timed out waiting for the request": "请求超时:服务器等待请求超时",
773
774
  "Requests": "请求",
package/src/const.js CHANGED
@@ -49,7 +49,7 @@ const path_1 = require("path");
49
49
  const cross_1 = require("./cross");
50
50
  const argv_1 = require("./argv");
51
51
  __exportStar(require("./cross-const"), exports);
52
- exports.API_VERSION = 13.71;
52
+ exports.API_VERSION = 13.72;
53
53
  exports.COMPATIBLE_API_VERSION = 1; // the day we break with the past, we'll update this
54
54
  // you can add arguments with this file, currently used for the update process on mac/linux.
55
55
  // we are using homedir because it's the only stable path both the old and new process can agree on (open() doesn't preserve cwd)
package/src/github.js CHANGED
@@ -176,8 +176,8 @@ async function readOnlinePlugin(repo, branch = '') {
176
176
  }
177
177
  async function readOnlineCompatiblePlugin(repo, branch = '') {
178
178
  const pl = await readOnlinePlugin(repo, branch);
179
- if (!pl?.apiRequired)
180
- return; // mandatory field
179
+ if (!pl?.apiRequired && !pl?.versionRequired)
180
+ return; // at least one compatibility requirement is mandatory
181
181
  if (!pl.badApi)
182
182
  return pl;
183
183
  // we try other branches (starting with 'api')
@@ -189,8 +189,6 @@ async function readOnlineCompatiblePlugin(repo, branch = '') {
189
189
  const pl = await readOnlinePlugin(repo, branch);
190
190
  if (!pl)
191
191
  continue;
192
- if (!pl.apiRequired)
193
- pl.badApi = '-';
194
192
  if (!pl.badApi)
195
193
  return pl;
196
194
  }
package/src/plugins.js CHANGED
@@ -382,6 +382,7 @@ class Plugin {
382
382
  get version() { return this.data?.version; }
383
383
  get description() { return this.data?.description; }
384
384
  get apiRequired() { return this.data?.apiRequired; }
385
+ get versionRequired() { return this.data?.versionRequired; }
385
386
  get isTheme() { return this.data?.isTheme; }
386
387
  get repo() { return this.data?.repo; }
387
388
  get depend() { return this.data?.depend; }
@@ -737,6 +738,7 @@ function parsePluginSource(id, source) {
737
738
  pl.repo = (0, misc_1.tryJson)(/exports.repo\s*=\s*([^\s;]+)/.exec(source)?.[1]);
738
739
  pl.version = Number(/exports.version\s*=\s*(\d*\.?\d+)/.exec(source)?.[1]) ?? undefined;
739
740
  pl.apiRequired = (0, misc_1.tryJson)(/exports.apiRequired\s*=\s*([ \d.,[\]]+)/.exec(source)?.[1]) ?? undefined;
741
+ pl.versionRequired = (0, misc_1.tryJson)(/exports.versionRequired\s*=\s*("(?:[^"\\]|\\.)*"|\[[\s\S]*?])/.exec(source)?.[1]) ?? undefined;
740
742
  pl.isTheme = (0, misc_1.tryJson)(/exports.isTheme\s*=\s*(true|false|"light"|"dark")/.exec(source)?.[1]) ?? (id.endsWith('-theme') || undefined);
741
743
  pl.preview = (0, misc_1.tryJson)(/exports.preview\s*=\s*("(?:[^"\\]|\\.)*"|\[[\s\S]*?\])/.exec(source)?.[1]) ?? undefined;
742
744
  pl.depend = (0, misc_1.tryJson)(/exports.depend\s*=\s*(\[[\s\S]*?])/m.exec(source)?.[1])?.filter((x) => typeof x.repo === 'string' && x.version === undefined || typeof x.version === 'number'
@@ -753,11 +755,15 @@ function parsePluginSource(id, source) {
753
755
  }
754
756
  function calculateBadApi(data) {
755
757
  const r = data.apiRequired;
758
+ const v = data.versionRequired;
756
759
  const [min = 0, max = Infinity] = Array.isArray(r) ? r : [r]; // normalize data type
757
- data.badApi = !r ? "missing mandatory property apiRequired"
758
- : min > const_1.API_VERSION ? "may not work correctly as it is designed for a newer version of HFS - check for updates"
759
- : min < const_1.COMPATIBLE_API_VERSION || max < const_1.API_VERSION ? "may not work correctly as it is designed for an older version of HFS - check for updates"
760
- : undefined;
760
+ const versions = Array.isArray(v) ? v : v === undefined ? [] : [v];
761
+ const [minVersion, maxVersion] = versions;
762
+ data.badApi = !r && !v ? "missing mandatory property apiRequired or versionRequired"
763
+ : (Array.isArray(v) && v.length !== 2) || !versions.every(version => typeof version === 'string' && Number.isFinite(new config_1.Version(version).scalar)) ? "invalid versionRequired"
764
+ : min > const_1.API_VERSION || minVersion && config_1.currentVersion.olderThan(minVersion) ? "may not work correctly as it is designed for a newer version of HFS - check for updates"
765
+ : r && (min < const_1.COMPATIBLE_API_VERSION || max < const_1.API_VERSION) || maxVersion && new config_1.Version(maxVersion).olderThan(Const.VERSION) ? "may not work correctly as it is designed for an older version of HFS - check for updates"
766
+ : undefined;
761
767
  }
762
768
  function getMissingDependencies(plugin) {
763
769
  return (0, misc_1.onlyTruthy)((plugin?.depend || []).map((dep) => {
package/src/util-http.js CHANGED
@@ -154,23 +154,30 @@ function httpStream(url, { body, proxy, jar, noRedirect, httpThrow = true, ...op
154
154
  delete hostJar[k];
155
155
  }
156
156
  if (!res.statusCode || httpThrow && res.statusCode >= 400)
157
- return reject(Error(String(res.statusCode), { cause: res }));
157
+ return fail(String(res.statusCode), res);
158
158
  let r = res.headers.location;
159
159
  if (r && !noRedirect) {
160
160
  const dest = new URL(r, url); // rewrite in case r is just a path, and thus relative to the current url
161
161
  r = dest.toString();
162
162
  const src = new URL(url);
163
163
  const sameOrigin = src.protocol === dest.protocol && src.host === dest.host;
164
- return redirected.includes(r) ? reject(Error('endless http redirection'))
165
- : redirected.length > 20 ? reject(Error('excessive http redirection'))
166
- : resolve(httpStream(r, {
167
- httpThrow, jar, proxy,
168
- ...lodash_1.default.pick(options, ['agent', 'rejectUnauthorized', 'timeout']),
169
- // forward some headers and exclude authorization if it's cross-origin
170
- headers: options.headers && lodash_1.default.omit(options.headers, ['content-length', 'host', 'connection', 'transfer-encoding', sameOrigin ? '' : 'authorization']),
171
- }, [...redirected, r]));
164
+ return redirected.includes(r) ? fail('endless http redirection')
165
+ : redirected.length > 20 ? fail('excessive http redirection')
166
+ : src.protocol === 'https:' && dest.protocol !== 'https:' ? fail('https-to-http is forbidden')
167
+ : resolve(httpStream(r, {
168
+ httpThrow, jar, proxy,
169
+ ...lodash_1.default.pick(options, ['agent', 'rejectUnauthorized', 'timeout']),
170
+ // forward some headers and exclude authorization if it's cross-origin
171
+ headers: options.headers && lodash_1.default.omit(options.headers, ['content-length', 'host', 'connection', 'transfer-encoding', sameOrigin ? '' : 'authorization']),
172
+ }, [...redirected, r]));
172
173
  }
173
174
  resolve(res);
175
+ function fail(message, cause) {
176
+ // preserve error responses because callers may inspect their body
177
+ if (!cause)
178
+ res.destroy();
179
+ return reject(Error(message, cause && { cause }));
180
+ }
174
181
  }).on('error', (e) => {
175
182
  if (proxy && e?.code === 'ECONNREFUSED')
176
183
  console.debug("Cannot connect to proxy ", proxy);
package/src/vfs.js CHANGED
@@ -337,7 +337,7 @@ async function setSourceNames(node, parent) {
337
337
  }
338
338
  function convertWindowsPath(path, isLong = false) {
339
339
  return new Promise(resolvePromise => {
340
- if (!fswin_1.default.convertPath(path, resolvePromise, isLong))
340
+ if (!fswin_1.default.convertPath(path, converted => resolvePromise(converted || undefined), isLong))
341
341
  resolvePromise(undefined);
342
342
  });
343
343
  }
package/src/walkDir.js CHANGED
@@ -51,23 +51,25 @@ function walkDir(path, { depth = 0, hidden = true, parallelizeRecursion = false,
51
51
  await new Promise((resolve, reject) => fswin_1.default.find(base + '\\*', (event, f) => {
52
52
  if (event !== 'FOUND') {
53
53
  Promise.all(entriesWorking).then(() => resolve());
54
- return;
54
+ return false;
55
55
  }
56
56
  if (stopped)
57
57
  return true; // stop signal
58
- if (!hidden && f.IS_HIDDEN)
59
- return;
58
+ const file = f; // fswin pairs FOUND with File, but its callback type doesn't express that relation
59
+ if (!hidden && file.IS_HIDDEN)
60
+ return false;
60
61
  entriesWorking.push(work(Object.assign(Object.create(direntMethods), {
61
- isDir: f.IS_DIRECTORY,
62
- name: f.LONG_NAME,
62
+ isDir: file.IS_DIRECTORY,
63
+ name: file.LONG_NAME,
63
64
  stats: {
64
- size: f.SIZE,
65
- birthtime: f.CREATION_TIME, birthtimeMs: f.CREATION_TIME.getTime(),
66
- mtime: f.LAST_WRITE_TIME, mtimeMs: f.LAST_WRITE_TIME.getTime(),
67
- isFile: () => !f.IS_DIRECTORY,
68
- isDirectory: () => f.IS_DIRECTORY,
65
+ size: file.SIZE,
66
+ birthtime: file.CREATION_TIME, birthtimeMs: file.CREATION_TIME.getTime(),
67
+ mtime: file.LAST_WRITE_TIME, mtimeMs: file.LAST_WRITE_TIME.getTime(),
68
+ isFile: () => !file.IS_DIRECTORY,
69
+ isDirectory: () => file.IS_DIRECTORY,
69
70
  }
70
- }), Boolean(f.REPARSE_POINT_TAG)).catch(reject));
71
+ }), Boolean(file.REPARSE_POINT_TAG)).catch(reject));
72
+ return false;
71
73
  }, true));
72
74
  }
73
75
  else
@@ -1,4 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{B as t,Bt as n,C as r,Dt as i,E as a,En as o,Et as s,F as c,G as l,H as u,J as d,Kt as f,L as p,Nt as m,O as h,Ot as g,Qt as _,Rt as v,St as y,U as b,Ut as x,V as S,X as C,Y as w,Yt as T,Z as E,Zt as D,_ as O,_r as k,_t as A,an as j,ar as M,at as ee,b as te,bn as ne,bt as N,cn as P,d as F,dt as I,et as re,fr as L,ft as R,gn as z,gr as B,h as V,hr as H,ht as ie,ir as ae,it as U,jn as oe,k as se,kn as ce,lr as W,lt as le,mn as ue,ot as de,p as fe,qt as pe,ur as G,v as me,vr as K,vt as q,xt as he,y as ge,yr as _e,z as ve,zt as ye}from"./index-BSSQOMG_.js";import{_ as be,g as xe,h as Se,m as Ce,v as we}from"./icons-C_ux1zLA.js";var J=e(_e());G();var Te=[`password`,`password2`,`adminActualAccess`,`hasPassword`,`invalidated`,`canLogin`,`members`];function Ee({account:e,done:n,groups:c,addToBar:l,reload:d}){var f,m;let{username:h}=R(),[g,v]=(0,J.useState)(e),[x,S]=(0,J.useState)([]),C=ce();(0,J.useEffect)(()=>{var t;v(e),S(c.filter(t=>t!==e.username)),C||(t=O.current)==null||(t=t.querySelector(`input`))==null||t.focus()},[JSON.stringify(e)]);let E=!e.username,{isGroup:D}=g,O=(0,J.useRef)(),{members:k}=e,M=(f=e.plugin)==null?void 0:f.auth;return(0,J.createElement)(A,{key:e.username,formRef:O,values:g,set(e,t){v(n=>W(W({},n),{},{[t]:e}))},barSx:W({gap:2,width:`100%`},le()),stickyBar:!0,addToBar:[!E&&(0,J.createElement)(t,W(W({icon:a,title:j`Delete`,confirm:j(`Delete {username}?`,{username:e.username})},h===e.username&&{disabled:!0,title:j`Cannot delete current account`}),{},{onClick:()=>L(`del_account`,{username:e.username}).then(d)})),(0,J.createElement)(t,{icon:Ce,title:j`Invalidate past sessions`+(e.invalidated?`
2
- `+j(`(already invalidated sessions before {timestamp})`,{timestamp:s(e.invalidated)}):``),confirm:j(`Invalidate all sessions up to now for "{username}"?`,{username:e.username}),doneMessage:!0,onClick:()=>L(`invalidate_sessions`,{username:e.username}).then(d)}),...ae(l)],fields:[{k:`username`,label:j(D?`Group name`:`Username`),autoComplete:`off`,required:!0,md:D&&!M?12:4,helperText:j`Case-insensitive`,getError:t=>t!==e.username&&L(`get_account`,{username:t}).then(t=>(t==null?void 0:t.username)===e.username?j`usernames are case-insensitive`:j`already used`,()=>!1)},M&&{k:``,md:8,comp:(0,J.createElement)(_,{severity:`info`},j`Authentication handled by a plugin`)},!D&&!M&&{k:`password`,xs:6,md:4,type:`password`,autoComplete:`new-password`,required:E,label:E?j`Password`:j`Change password`},!D&&!M&&{k:`password2`,xs:6,md:4,type:`password`,autoComplete:`new-password`,label:j`Repeat password`,getError:(e,{values:t})=>(e||``)!==(t.password||``)&&j`Enter same password`},{k:`disabled`,comp:q,fromField:e=>!e,toField:e=>!e,label:j`Enabled`,xs:12,sm:6,lg:4,helperText:g.disabled||g.canLogin!==!1?j`login_disabled_by_account_or_groups`:(0,J.createElement)(T,{sx:{color:`warning.main`},component:`span`},new Date(e.expire)<new Date?j`Login is prevented because account is expired`:j`login_disabled_by_groups`)},{k:`ignore_limits`,label:j`Ignore limits`,comp:q,xs:12,sm:6,lg:4,helperText:g.ignore_limits?j`Speed limits don't apply to this account`:j`Speed limits apply to this account`},W({k:`admin`,comp:q,fromField:e=>e||null,label:j`Admin-panel access`,xs:12,sm:6,lg:4,helperText:j`To access THIS interface you are using right now`},!e.admin&&e.adminActualAccess&&{value:!0,disabled:!0,helperText:j`inherited_permission_notice`}),!D&&{k:`require_password_change`,label:j`Require password change`,comp:q,xs:12,sm:6,lg:4,helperText:j`At next login, but can be dismissed`},{k:`disable_password_change`,label:j`Password change`,comp:y,xs:12,sm:6,lg:4,defaultValue:null,options:{[j(`default_setting`,{defaultValue:j(g.canChangePassword?`Allowed`:`Disabled`)})]:null,[j`Allowed`]:!1,[j`Disabled`]:!0}},k?D&&!k.length?(0,J.createElement)(T,{},j`No members`):k.length>0&&(0,J.createElement)(ve,{gap:0,flexWrap:`wrap`},j(`members_count`,{n:k.length}),o(`,\xA0`,(m=e.members)==null?void 0:m.map(e=>(0,J.createElement)(c.includes(e)?`i`:`span`,{},e))),(0,J.createElement)(p,{icon:a,confirm:j(`delete_items`,{n:e.members.length}),onClick:()=>L(`del_account`,{username:e.members}).then(d),sx:{verticalAlign:`text-top`}})):null,D&&(0,J.createElement)(_,{severity:`info`},j`group_add_members_hint`),{k:`belongs`,comp:he,label:j`Inherit from groups`,options:x,sm:6,lg:4,helperText:[j`Specify groups to inherit permissions from.`,D&&j`A group can inherit from another group.`,!x.length&&j`no_groups_available`].filter(Boolean).join(` `)},{k:`allow_net`,comp:b,label:j`Allowed network address`,sm:6,lg:4,placeholder:j`any address`},!D&&{k:`auto_login_net`,comp:b,label:j`Auto-login by IP address`,sm:6,lg:4,placeholder:j`none`,helperText:[j`Using a hostname?`,` `,(0,J.createElement)(u,{onClick:()=>U(j`auto_login_net_help`,{title:j`Auto-login by IP address`})},j`Configure it first`)]},{k:`redirect`,comp:F,label:j`Redirect`,placeholder:j`no`,sm:6,lg:4,helperText:j`account_redirect_hint`},{k:`expire`,label:j`Expiration`,sm:6,lg:4,comp:r,toField:e=>e&&new Date(e),helperText:j`When expired, login won't be allowed`},W(W({k:`days_to_live`,label:j`Days to live`,sm:6,lg:4,comp:N,step:`any`,min:1/1e3},g.expire&&{xs:12,disabled:!0,sx:{opacity:.2}}),{},{helperText:j`Used to set expiration on first login`}),{k:`notes`,label:j`Notes`,multiline:!0,sm:6,lg:4}],onError:U,save:W(W({children:j`Save`},w(i(g,e))),{},{onClick(){return K(function*(){var t;let{password:r=``,password2:i,adminActualAccess:a,hasPassword:o,invalidated:s,canLogin:c,members:l}=g,u=oe(g,Te),d=((t=O.current)==null?void 0:t.querySelector(`button.saveBtn`))||void 0;if(E){let e=yield L(`add_account`,u);if(r)try{yield P(g.username,r)}catch(e){throw L(`del_account`,{username:g.username}),e}n(e==null?void 0:e.username,d);return}let f=yield L(`set_account`,{username:e.username,changes:u});r&&(yield P(g.username,r),v(e=>W(W({},e),{},{password:``,password2:``}))),e.username===h&&(I.username=f.username),n(f==null?void 0:f.username,d)})()}})})}var Y=e(k());B(),G();var X={fieldSeparator:`,`,lineSeparator:`
3
- `,quote:`"`},Z={field:0,fieldOffset:0,line:0,lineOffset:0,quoted:!1,appendCell:!1,appendField:!1,appendRow:!1},De=class extends Error{constructor(e,t){super(`Invalid CSV at ${e}:${t}`)}},Oe=class{constructor(e=X){H(this,`_rows`,[]),H(this,`_row`,[]),H(this,`_cell`,``),H(this,`_options`,X),H(this,`_state`,W({},Z)),H(this,`_index`,0),H(this,`_current`,``),H(this,`_previous`,``),H(this,`_quoteState`,W({},Z)),this._options=Object.assign({},X,e)}parse(e){for(this.reset(),this._index=0;this._index<e.length;this._index++)this._state.appendCell=!0,this._previous=this._current,this._current=e[this._index],this.handleNext();if(this._row.length>0&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this.addRow(this._row,this._rows,this._state)),this._state.quoted)throw new De(this._quoteState.line,this._quoteState.lineOffset);return this.makeImmutable(),this._rows}get rows(){return this._rows}get json(){if(this.rows.length>0){let e=this.rows[0].filter(e=>typeof e==`string`);return Object.freeze(this.rows.filter((e,t)=>e&&t>0).map(t=>{let n={};return e.forEach((e,r)=>{n[e]=t[r]}),Object.freeze(n)}))}return Object.freeze([])}handleNext(){this.handleQuote()||this.handleFieldSeparator()||this.handleLineSeparator(),this.processState()}handleQuote(){return this._current===this._options.quote?(this._quoteState=W({},this._state),this._previous===`\\`?this.handleQuoteEscaped():this.handleQuoteNotEscaped(),!0):!1}handleQuoteEscaped(){this._cell=this._cell.slice(0,Math.max(0,this._cell.length-1))}handleQuoteNotEscaped(){if(this._cell.length===0||this._state.quoted)this._state.quoted=!this._state.quoted;else throw new De(this._state.line,this._state.lineOffset);this._state.appendCell=!1}handleFieldSeparator(){return this._current===this._options.fieldSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0),!0):!1}handleLineSeparator(){return this._current===this._options.lineSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0,this._state.appendRow=!0),!0):!1}processState(){this._state.appendCell&&(this._cell+=this._current),this._state.appendField&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this._cell=``),this._state.appendRow&&(this.addRow(this._row,this._rows,this._state),this._row=[]),this._state.lineOffset++,this._state.fieldOffset++}fieldValue(e){return e}addField(e,t,n){t.push(e),n.field++,n.fieldOffset=-1,n.appendField=!1}addRow(e,t,n){t.push(e),n.field=0,n.line++,n.lineOffset=-1,n.appendRow=!1}makeImmutable(){this.rows.forEach(e=>{e.forEach(e=>Object.freeze(e)),Object.freeze(e)}),Object.freeze(this._rows)}reset(){this._rows=[],this._row=[],this._cell=``,this._state=W({},Z),this._index=0,this._current=``,this._previous=``,this._quoteState=W({},Z)}};G();function ke(e){return Q.apply(this,arguments)}function Q(){return Q=K(function*(e){z(function(){var t=K(function*(t){let n=t==null?void 0:t[0];if(!n)return;let r=yield ue(n);if(!r)return;let i=new Oe().parse(r.trim()),a={comp:N,min:1,max:9,xs:6,typing:!0},o={skipFirstLines:0,usernameColumn:1,passwordColumn:2,groupColumn:3,redirectColumn:4,overwriteExistingAccounts:!1},s=yield de({title:j`Import accounts from CSV`,dialogProps:{maxWidth:`sm`},values:o,form:e=>{let t=i[e.skipFirstLines||0]||[],n=l(t,W(W({},o),e));return{save:{startIcon:(0,J.createElement)(V),children:j`Go`},fields:[(0,J.createElement)(T,{sx:{p:1}},j`Total lines:`,i.length),{k:`skipFirstLines`,label:j`Skip First Lines`,comp:N,max:i.length-1,typing:!0,md:6,getError:e=>e!=null&&!Number.isInteger(e)&&`Enter an integer`,helperText:(0,J.createElement)(J.Fragment,{},j`First line: `,(0,J.createElement)(`code`,{},t.join(`, `)))},{k:`overwriteExistingAccounts`,label:j`Overwrite Existing Accounts`,comp:q,md:6},W(W({k:`usernameColumn`,label:j`Username Column`},a),{},{helperText:(0,J.createElement)(J.Fragment,{},j`First username: `,n.u)}),W(W({k:`passwordColumn`,label:j`Password Column`},a),{},{helperText:(0,J.createElement)(J.Fragment,{},j`First password: `,n.p)}),W(W({k:`groupColumn`,label:j`Group Column`},a),{},{helperText:(0,J.createElement)(J.Fragment,{},j`First group: `,n.g)}),W(W({k:`redirectColumn`,label:j`Redirect Column`},a),{},{helperText:(0,J.createElement)(J.Fragment,{},j`First redirect: `,n.r)})]}}});if(!s)return;let{close:c}=ne({title:j`Importing...`,Content(){let[t,n]=(0,J.useState)(0),[r,a]=(0,J.useState)();return(0,J.useEffect)(()=>{let t=!1;return setTimeout(K(function*(){if(t)return;let r=0,o=0,u=s.skipFirstLines,d=i.length-u,f=0;try{for(let e of i){var p;if(t)return;if(u){u--;continue}let i=l(e,s);a(i),n(f++/d),yield L(`add_account`,{username:i.u,belongs:(p=i.g)==null?void 0:p.split(`,`),redirect:i.r,overwrite:s.overwriteExistingAccounts}).then(()=>{if(i.p)return P(i.u,i.p)}).catch(e=>{if(e.code===409)return o++;r++})}}finally{c();let t=f-r-o;U([j`Results:`,j(`account_import_failed`,{n:r}),j(`account_import_succeeded`,{n:t}),j(`account_import_skipped_existing`,{n:o})].join(`
4
- `),!t&&r?`error`:r||o?`warning`:`success`),e==null||e()}})),()=>{t=!0}},[]),(0,J.createElement)(T,{sx:{display:`flex`,gap:2,alignItems:`center`}},(0,J.createElement)(S,{icon:h,progress:t}),r==null?void 0:r.u)}});function l(e,t){return{u:e[t.usernameColumn-1],p:e[t.passwordColumn-1],g:e[t.groupColumn-1],r:e[t.redirectColumn-1]}}});return function(e){return t.apply(this,arguments)}}(),{multiple:!1,accept:`.csv`})}),Q.apply(this,arguments)}G();var Ae=` `,$=e=>e==null?void 0:e.split(Ae).at(-1);function je(){let{username:e,accountsAsTree:r}=R(),{data:i,reload:o,element:s}=c(`get_accounts`),[u,h]=(0,J.useState)([]),y=Array.isArray(u);(0,J.useEffect)(()=>{Array.isArray(i==null?void 0:i.list)&&y&&h(u.filter(e=>i.list.find(t=>(t==null?void 0:t.username)===$(e))))},[i]);let b=(0,J.useMemo)(()=>i&&Y.default.sortBy(i.list,[e=>!e.isGroup,e=>!e.adminActualAccess,`username`]),[i]),S=y&&Y.default.find(b,{username:$(u[0])}),w=E(`md`),k=!(u.length>0)||!b?null:y&&u.length>1?(0,J.createElement)(J.Fragment,{},(0,J.createElement)(ve,{},(0,J.createElement)(D,{variant:`h6`},j(`select_count`,{n:u.length})),(0,J.createElement)(p,{onClick:B,icon:a},j`Remove`)),(0,J.createElement)(n,{},Y.default.uniq(u.map($)).map(e=>(0,J.createElement)(ye,{key:e},(0,J.createElement)(v,{},e))))):M(S||F(),e=>(0,J.createElement)(Ee,{account:e,groups:b.filter(e=>e.isGroup).map(e=>e.username),addToBar:w&&[(0,J.createElement)(T,{sx:{flex:1}}),Me(e,{fontSize:`large`,sx:{p:1}}),(0,J.createElement)(t,{icon:ie,title:j`Close`,onClick:z})],reload:o,done(e,t){h(w?[e]:[]),o(),l(``,t)}}));(0,J.useEffect)(()=>{if(w||!k||!u.length)return;let{close:e}=ne({title:Y.default.isString(u)?Y.default.startCase(u):u.length>1?j`Multiple selection`:S?j(S.isGroup?`Group: `:`User: `)+S.username:`?`,Content:()=>k,onClose(e){e||z()}});return()=>void e(!0)},[w,u,S]);let A={height:`100%`,display:`flex`,flexDirection:`column`,overflow:`auto`},[N,P]=re(j`Show tree`,j`Show list`,()=>({icon:m}),r);return I.accountsAsTree=N,s||(0,J.createElement)(x,{container:!0,sx:{rowSpacing:1,columnSpacing:2,top:0,flex:`1 1 auto`,height:0}},(0,J.createElement)(x,{size:{xs:12,md:5,lg:4,xl:5},sx:A},(0,J.createElement)(T,{sx:{display:`flex`,flexWrap:`wrap`,gap:2,mb:2,boxShadow:e=>`0px -8px 4px 10px ${e.palette.background.paper}`,position:`sticky`,top:0,zIndex:2,backgroundColor:`background.paper`,width:`fit-content`}},(0,J.createElement)(fe,{variant:`contained`,startIcon:(0,J.createElement)(xe),items:[{children:j`user`,onClick:()=>h(`new-user`)},{children:j`group`,onClick:()=>h(`new-group`)},{children:j`from CSV`,onClick:()=>ke(o)}]},j`Add`),C(o),P,(b==null?void 0:b.length)>0&&(0,J.createElement)(D,{sx:{p:1}},j(`accounts_count`,{n:b.length}))),!(b!=null&&b.length)&&(0,J.createElement)(_,{severity:`info`},g(j`remote_admin_account_required`)),(0,J.createElement)(te,{multiSelect:!0,sx:{pr:4,pb:2,minWidth:`15em`},selectedItems:y?u:[],slots:{collapseIcon:O,expandIcon:me},onSelectedItemsChange(e,t){var n,r;!(e==null||(n=e.target)==null||(r=n.closest)==null)&&r.call(n,`.MuiTreeItem-iconContainer`)||h(t)}},b&&(function e(t,n=``){return t.map(t=>{var r,i;return(0,J.createElement)(ge,{key:t.username,itemId:n+t.username,label:(0,J.createElement)(T,{sx:{display:`flex`,flexWrap:`wrap`,padding:`.2em 0`,columnGap:`.5em`,alignItems:`center`}},Me(t),(t.disabled||t.canLogin===!1)&&d(we,t.disabled?j`Disabled`:j`Disabled by its groups`,t.disabled?void 0:{color:`text.secondary`}),(t.expire||t.days_to_live)&&(0,J.createElement)(Se),t.adminActualAccess&&d(se,j`Can login into Admin`),t.username,!!((r=t.belongs)!=null&&r.length)&&(0,J.createElement)(T,{sx:{color:`text.secondary`,fontSize:`small`}},`(`,(i=t.belongs)==null?void 0:i.join(`, `),`)`))},N&&e(b.filter(e=>{var n;return(n=t.directMembers)==null?void 0:n.includes(e.username)}),n+t.username+Ae))})})(N?b.filter(e=>!b.some(t=>{var n;return(n=t.members)==null?void 0:n.includes(e.username)})):b))),w&&k&&(0,J.createElement)(x,{size:`grow`,sx:W(W({},A),{},{maxWidth:`100%`})},(0,J.createElement)(pe,{sx:{overflow:`initial`}},(0,J.createElement)(f,{},k))));function F(){return{username:``,hasPassword:u===`new-user`,adminActualAccess:!1,invalidated:void 0,canLogin:!0,canChangePassword:!0,isGroup:u===`new-group`,members:[],directMembers:[]}}function z(){h([])}function B(){return V.apply(this,arguments)}function V(){return V=K(function*(){if(typeof u==`string`||u.some(t=>$(t)===e)&&!(yield ee(j`current_account_delete_warning`)))return;let t=Y.default.without(Y.default.uniq(u.map($)),e);if(!t.length)return U(j`Nothing to delete`,`info`);if(!(yield ee(j(`delete_items`,{n:t.length}))))return;let n=[];for(let e of t)(yield L(`del_account`,{username:e}).then(()=>1,()=>0))||n.push(e);if(o(),n.length)return U(j(`items_delete_failed`,{n:n.length,list:n.join(`, `)}),`error`)}),V.apply(this,arguments)}}function Me(e,t={}){return(0,J.createElement)(e.isGroup?h:be,t)}export{je as default};
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{$ as t,B as n,En as r,Et as i,F as a,I as o,J as s,K as c,L as l,Ln as u,Mn as d,Mt as f,Ot as p,Qt as m,R as h,Rn as g,St as _,Ut as v,V as ee,Vn as y,Xt as b,Yt as x,Z as S,_r as C,an as w,ar as T,at as E,ct as D,dt as O,et as k,f as A,fr as j,ft as te,g as ne,h as M,i as N,in as P,it as F,mr as I,on as L,or as R,q as z,un as B,v as V,w as H,yr as U,z as W,zn as G}from"./index-BSSQOMG_.js";import{c as K,n as q,r as J}from"./icons-C_ux1zLA.js";import{LogFile as Y,t as X}from"./LogsPage-CcjS12cP.js";var Z=e(U());function re(e,t){let n=(0,Z.useRef)(e);d(()=>{n.current=e},[e]),(0,Z.useEffect)(()=>{if(t===null)return;let e=setInterval(()=>n.current(),t);return()=>clearInterval(e)},[t])}var Q=e(C());function ie({setTitleSide:e}){return e((0,Z.useMemo)(()=>(0,Z.createElement)(m,{severity:`info`,sx:{display:{xs:`none`,sm:`inherit`}}},w`proxy_connections_notice`),[])),(0,Z.createElement)(Z.Fragment,{},(0,Z.createElement)(ae),(0,Z.createElement)(oe))}function ae(){var e,t;let{data:o,element:s,reload:c}=a(`get_status`);re(c,1e4);let{data:l}=I(`get_connection_stats`),[d,f]=(0,Z.useState)(!1),p=S(`md`),m=S(`sm`),h=S(`xl`),g=B({locale:P,maxTokens:2,skipZeroes:!0});return s||(0,Z.createElement)(x,{sx:{display:`flex`,flexWrap:`wrap`,gap:{xs:.5,md:1},mb:{xs:1,sm:2}}},(d||p)&&_(`started`,{label:w`Uptime`,render:e=>g(Date.now()-+new Date(e)),title:e=>w(`started_at_colon`,{startedAt:i(e)})}),(d||m)&&_(`sent_got`,{render:e=>({[w`Sent`]:u(e[0]),[w`Got`]:u(e[1])}),title:e=>w(`since_timestamp`,{timestamp:i(e[2])}),onDelete:()=>E(w`Reset stats?`).then(e=>e&&j(`clear_persistent`,{k:[`totalSent`,`totalGot`]}).then(()=>F(w`Done`,`success`),F))}),_(`outSpeedKb`,{label:w`Outgoing traffic`,render:$,minWidth:`8.5em`}),_(`inSpeedKb`,{label:w`Input`,render:$,minWidth:`8.5em`}),(d||m)&&_(`ips`,{label:w`IPs`,title:()=>l&&w(`connections_count`,{n:l.connections,count:l.connections.toLocaleString(P)})}),(p||d||(o==null||(e=o.http)==null?void 0:e.error))&&_(`http`,{label:w`HTTP`,render:v}),(p||d||(o==null||(t=o.https)==null?void 0:t.error))&&_(`https`,{label:w`HTTPS`,render:v}),(h||d)&&_(`ram`,{label:w`RAM`,render:u}),!h&&(0,Z.createElement)(n,{size:`small`,icon:d?q:V,title:w`Show more`,onClick:()=>f(e=>!e)}));function _(e,{label:t,minWidth:n,render:i,title:a,onDelete:s}={}){var c;let u=(c=Q.default.get(l,e))==null?Q.default.get(o,e):c;if(u===void 0)return null;let d,f=a==null?void 0:a(u);return i&&(u=i(u),Array.isArray(u)&&([u,d]=u)),t||(t=L(Q.default.capitalize(e.replaceAll(`_`,` `)))),z(f,void 0,(0,Z.createElement)(b,{variant:`filled`,color:d,onDelete:s,label:r(` – `,Q.default.map(Q.default.isPlainObject(u)?u:{[t]:u},(e,t)=>(0,Z.createElement)(`span`,{style:{display:`inline-block`,minWidth:n}},(0,Z.createElement)(`b`,{},t),`: `,e)))}))}function v(e){return e.listening?[`port `+e.port,`success`]:e.error?[e.error,`error`]:`off`}}function oe(){var e;let{list:r,error:i,props:d,initializing:m}=o(`get_connections`),b=a(`get_config`,{only:[R.geo_enable]}),{monitorOnlyFiles:C}=te(),{pause:E,pauseButton:F}=t(),I=(0,Z.useMemo)(()=>{var e;return(e=C?r==null?void 0:r.filter(e=>e.op):r)==null?[]:e},[!E&&r,C]),L=S(`md`),[z,B]=k(w`Show log`,w`Hide log`,e=>({icon:f,sx:{rotate:e?0:`180deg`}}),O.monitorWithLog);O.monitorWithLog=z;let V=L&&z?6:0;return(0,Z.createElement)(Z.Fragment,{},(0,Z.createElement)(W,{},(0,Z.createElement)(W,{flex:1},(0,Z.createElement)(_,{fullWidth:!1,value:C,onChange:e=>O.monitorOnlyFiles=e,options:{[w`Show downloads+uploads`]:!0,[w`Show all connections`]:!1}})),L&&(0,Z.createElement)(W,{flex:1,justifyContent:`space-between`},z?w`Live log`:(0,Z.createElement)(x),B)),(0,Z.createElement)(v,{container:!0,sx:{flex:1},columnSpacing:1},(0,Z.createElement)(v,{size:12-V,sx:c},(0,Z.createElement)(H,{persist:`connections`,error:i,initializing:m,rows:I,getRowId:e=>e.ip+`:`+e.port,fillFlex:!0,noRows:C&&`No downloads/uploads at the moment`,actionsHeader:F,footerSide:()=>(0,Z.createElement)(W,{},(0,Z.createElement)(l,{size:`small`,icon:K,labelIf:`xl`,confirm:w`Disconnecting all connections but localhost. Continue?`,onClick:()=>j(`disconnect`,{allButLocalhost:!0}).then(e=>D(w(`Disconnected: {result}`,{result:e.result})))},w`Disconnect all`)),columns:[{field:`ip`,headerName:w`Address`,flex:1,maxWidth:400,renderCell:({row:e,value:t})=>y(t)+` :`+e.port,mergeRender:{user:{sx:{display:`flex`,justifyContent:`space-between`,gap:`.5em`}},agent:{},country:{}}},{field:`country`,headerName:w`Country`,hideUnder:((e=b.data)==null?void 0:e[R.geo_enable])!==!0||`md`,renderCell:({value:e,row:t})=>(0,Z.createElement)(h,{code:e,ip:t.ip})},{field:`user`,headerName:w`User`,hideUnder:`md`},{field:`started`,headerName:w`Started`,type:`dateTime`,width:96,hideUnder:`lg`,valueFormatter:e=>new Date(e).toLocaleTimeString(P)},{field:`path`,headerName:w`File`,flex:1.5,renderCell({value:e,row:t}){var n;if(!e||!t.op)return;let r={display:`flex`,alignItems:`center`,height:`100%`,minWidth:0,gap:1};return t.op===`browsing`?(0,Z.createElement)(x,{sx:r},(0,Z.createElement)(x,{},e,(0,Z.createElement)(x,{sx:{fontSize:`x-small`}},w`browsing`))):(0,Z.createElement)(x,{sx:r},(0,Z.createElement)(ee,{icon:t.archive?J:t.op===`upload`?M:N,progress:(n=t.opProgress)==null?t.opOffset:n,offset:t.opOffset,title:p(g(t.opProgress)+(t.opTotal?`
2
- `+w(`total_size`,{totalSize:u(t.opTotal)}):``))}),(0,Z.createElement)(x,{sx:{lineHeight:`1.2em`,minWidth:0}},t.archive?(0,Z.createElement)(x,{},e,(0,Z.createElement)(x,{sx:{fontSize:`x-small`,color:`text.secondary`}},t.archive)):T(e==null?void 0:e.lastIndexOf(`/`),t=>(0,Z.createElement)(x,{},e.slice(t+1),t>0&&(0,Z.createElement)(x,{sx:{fontSize:`x-small`,color:`text.secondary`}},e.slice(0,t))))))}},{field:`outSpeedKb`,headerName:w`Speed`,width:110,hideUnder:`sm`,type:`number`,renderCell:({value:e,row:t})=>$(Math.max(e||0,t.inSpeedKb||0)||void 0),mergeRender:{sent:{sx:{fontSize:`small`,textAlign:`right`}}}},{field:`sent`,headerName:w`Sent`,type:`number`,hideUnder:`md`,renderCell:({value:e,row:t})=>u(Math.max(e||0,t.got||0))},{field:`v`,headerName:w`Protocol`,align:`center`,hideUnder:1/0,renderCell:({value:e,row:t})=>(0,Z.createElement)(Z.Fragment,{},w(`ip_version`,{version:e}),t.secure&&s(ne,w`HTTPS`,{opacity:.5}))},{field:`agent`,headerName:w`Agent`,hideUnder:`lg`,renderCell:({value:e})=>A(e)}],actionsProps:{hideUnder:`sm`},actions:({row:e})=>[(0,Z.createElement)(n,{icon:K,title:w`Disconnect`,doneMessage:!0,onClick:()=>j(`disconnect`,Q.default.pick(e,[`ip`,`port`])).then(e=>e.result>0)}),(0,Z.createElement)(X,{ip:e.ip,comment:`From monitoring`,disabled:e.ip===(d==null?void 0:d.you)})]})),L&&z&&(0,Z.createElement)(v,{size:V,sx:c},(0,Z.createElement)(Y,{file:`${R.log}|${R.error_log}`,filter:C?(e=>!e.uri.startsWith(`/~/`)):void 0,fillFlex:!0,compact:!1,limit:1e3,getRowClassName:({row:e})=>e.status<400?``:`isError`,sx:{"& .isError":{backgroundColor:`#a443`}}}))))}function $(e){return e===void 0?``:G(e*1e3,{digits:1})}export{ie as default};
@@ -1,3 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{Cn as t,Ct as n,F as r,Fn as i,Ft as a,G as o,H as s,J as c,Jt as l,M as u,N as d,Nn as f,On as p,Ot as m,Pn as h,Pt as g,Qn as _,S as v,Sn as y,St as b,Tt as ee,U as x,Vn as te,W as S,Wt as C,Y as ne,Yt as w,Z as re,_n as ie,_r as ae,_t as oe,a as T,an as E,ar as D,at as O,bt as k,ct as se,dt as A,fr as ce,ft as le,it as j,j as ue,l as de,lr as M,nn as fe,or as N,pt as pe,s as me,sn as he,t as ge,tr as _e,tt as P,u as F,ur as I,vr as ve,vt as L,xn as ye,yr as R}from"./index-BSSQOMG_.js";import{t as be}from"./icons-C_ux1zLA.js";import{t as xe}from"./routing-Be72yFmd.js";var z=e(R()),B=e(ae()),V=`//---`;function Se(e){let t=e.split(RegExp(`(?:^|
2
- )`+B.default.escapeRegExp(V),`g`)),n=[],r=!0;for(let e of t)if(r){r=!1;let t=e.trim();t&&n.push({name:``,code:t})}else{let[t,r]=_(`
3
- `,e);n.push({name:t,code:r})}return n}var H=F();I();var U,Ce=[`net`,`frontend`,`uploads`,`others`],we=y({changes:{}});t(A,e=>{e.some(e=>e[1][0]===`config`)&&Te()});function W(){var e,t,n;let{data:_,reload:y,element:C}=r(`get_config`,{omit:[`vfs`]}),ae=le(),{changes:F}=ye(we),I=r(_&&`get_status`),R=I.data,W=I.reload,ke=()=>d(e=>{U&&Object.assign(U,e),setTimeout(W,1e3),setTimeout(W,2e3)});(0,z.useEffect)(()=>void W(),[_]);let Ae=re(`sm`),je=(0,z.useRef)(null),Me=p(),[Ne,Pe]=xe(`options`,Ce),G={},K=(e=r(`get_admins`).data)==null?void 0:e.list,q=R==null?void 0:R.connectionAddress,J=window.location.hostname===`localhost`,Fe=q==null?void 0:q.includes(`:`),Ie=[{label:E`any`,value:``,disabled:!1},{label:E`any IPv4`,value:`0.0.0.0`,disabled:!J&&(!q||Fe)},{label:E`any IPv6`,value:`::`,disabled:!J&&(!q||!Fe)},...[`127.0.0.1`,`::1`].map(e=>({label:e,value:e,disabled:!J&&q!==e})),...(R==null||(t=R.ips)==null?void 0:t.map(e=>({value:e,disabled:q!==e})))||[]];if(C)return C;if(I.error)return I.element;let Y=U===_?ae.config:A.config=U=_,Le={comp:k,min:1,unit:`KB/s`,placeholder:E`no limit`,sm:6},X={comp:k,placeholder:E`no limit`,toField:e=>e||``,sm:4},Z=Y[N.https_port]>=0;return(0,z.createElement)(oe,{sx:{maxWidth:`60em`},values:Y,set(e,t){A.config[t]=e},stickyBar:!0,onError:j,onValidation(e,t){if(!t)return;let n=e&&Object.keys(e).find(t=>e[t]);n&&G[n]!==void 0&&Pe(G[n])},save:M({children:E`Save`,ref:je,onClick:Q},ne(Object.keys(F).length>0)),barSx:{gap:2},addToBar:[(0,z.createElement)(l,{onClick(){y(),W()},startIcon:(0,z.createElement)(ee)},E`Reload`),(0,z.createElement)(l,{component:fe,href:`/config`,startIcon:(0,z.createElement)(be)},Ae?E`Config file`:E`File`)],defaults(){return{xs:6}},fields:Re({Net:[{k:N.port,comp:Ee,xs:12,sm:4,label:E`HTTP port`,status:(R==null?void 0:R.http)||!0,suggestedPort:80},{k:N.https_port,comp:Ee,xs:12,sm:4,label:E`HTTPS port`,status:(R==null?void 0:R.https)||!0,suggestedPort:443,onChange(e){return e>=0&&!Z&&!Y[N.cert]&&ke(),e}},{k:N.upnp_enabled,comp:L,xs:12,sm:4,label:E`UPnP/SSDP`,helperText:E`Port forwarding and double-NAT detection`},Z&&{k:N.cert,comp:T,sm:4,label:E`HTTPS certificate file`,helperText:P(`HTTPS#certificate`,E`What is this?`),error:D(R==null?void 0:R.https.error,e=>ue(e)&&(R.https.listening?e:[e,` - `,(0,z.createElement)(s,{key:`fix`,onClick:ke},E`make one`)]))},Z&&M({k:N.private_key,comp:T,sm:4,label:E`HTTPS private key file`},D(R==null?void 0:R.https.error,e=>u(e)?{error:!0,helperText:e}:null)),Z&&{k:N.force_https,comp:L,label:E`Force HTTPS`,sm:4,disabled:!Z||Y[N.port]<0,helperText:E`Not applied to localhost. Doesn't work with proxies.`},{k:N.listen_interface,comp:b,label:E`Listen interface`,sm:4,afterList:Ie.some(e=>e.disabled)&&(0,z.createElement)(w,{sx:{p:`8px 16px 0`,borderTop:`1px solid`,fontSize:`small`}},E`If an address is disabled, connect through it to select it`),options:Ie},M(M({k:N.max_kbps},Le),{},{sm:4,label:E`Limit output`,helperText:E`Doesn't apply to localhost`}),M(M({k:N.max_kbps_per_ip},Le),{},{sm:4,label:E`Limit output per-IP`}),M(M({k:N.max_downloads},X),{},{label:E`Max downloads`,helperText:E`Number of simultaneous downloads`}),M(M({k:N.max_downloads_per_ip},X),{},{label:E`Max downloads per-IP`}),M(M({k:N.max_downloads_per_account},X),{},{label:E`Max downloads per-account`,helperText:E`Overrides other limits`}),{k:N.admin_net,comp:x,xs:12,sm:6,label:E`Admin-panel accessible from`,placeholder:E`any address`,helperText:E`admin_net_localhost_hint`},{k:N.localhost_admin,comp:L,xs:12,sm:6,label:E`Consider localhost access as Admin`,getError:e=>!e&&(K==null?void 0:K.length)===0&&E`First create at least one admin account`,helperText:E`Access admin-panel without entering credentials`},{k:N.proxies,comp:k,xs:6,md:3,max:9,label:E`Number of incoming HTTP proxies`,placeholder:E`none`,error:ge(Y,R),helperText:Y.proxies>0?(0,z.createElement)(w,{component:`span`,sx:{color:`warning.main`}},E`Configure your firewall to allow only trusted proxies to connect to HFS.`):E`Necessary to detect users' IP`},{k:N.outbound_interface,comp:b,xs:6,md:3,label:E`Outbound interface`,options:[{label:E`automatic`,value:``},...(R==null||(n=R.ips)==null?void 0:n.map(e=>({value:e})))||[]]},{k:N.outbound_proxy,xs:6,md:4,label:E`Outbound proxy`,placeholder:E`none`,helperText:E`URL form`,getError:e=>_e(()=>e&&new URL(e)&&``,()=>`Invalid URL`)},{k:N.allowed_referer,comp:De,md:2,placeholder:E`any`,label:E`Links from other websites`,helperText:E`In case another website is linking your files`},{k:N.block,label:!1,comp:v,xs:12,prepend:!0,sm:!0,autoRowHeight:!0,form:{sx:{maxWidth:`40em`}},fields:[{k:`ip`,label:E`Blocked IP`,sm:12,required:!0,wrap:!0,$width:2,comp:x,$column:{mergeRender:{comment:{},expire:{}}},helperText:E`block_self_warning`},{k:`expire`,label:E`Expire`,$type:`dateTime`,minDate:new Date,sm:6,$hideUnder:`sm`,helperText:E`Leave empty for no expiration`},{k:`disabled`,$type:`boolean`,label:E`Enabled`,helperText:E`geo_rule_disable_hint`,toField:e=>!e,fromField:e=>e?void 0:!0,sm:6,$width:80},{k:`comment`,label:E`Comment`,$hideUnder:`sm`}]}],"Front-end":[{k:N.file_menu_on_link,comp:b,label:E`Access file menu`,md:3,options:{[E`by clicking on file name`]:!0,[E`by dedicated button`]:!1}},{k:N.menu_at_top,comp:b,md:3,label:E`Menu panel`,options:{[E`at top`]:!0,[E`at bottom`]:!1}},{k:N.title,md:6,helperText:E`You can see this in the tab of your browser`},{k:N.auto_play_seconds,comp:k,xs:6,sm:3,min:1,max:1e4,required:!0,label:E`Auto-play seconds delay`,helperText:m(E(`show_interface_default_help`,{docsUrl:f+`discussions/270`}))},{k:N.tile_size,comp:k,xs:6,sm:3,max:10,required:!0,label:E`Default tiles size`,helperText:P(`Tiles`,E`To enable tiles-mode`)},{k:N.theme,comp:b,xs:6,sm:3,options:i},{k:N.sort_by,comp:b,xs:6,sm:3,options:h},{k:N.invert_order,comp:L,xs:6,md:3},{k:N.folders_first,comp:L,xs:6,md:3},{k:N.sort_numerics,comp:L,xs:6,md:3,label:E`Sort numeric names`},{k:N.title_with_path,comp:L,xs:6,md:3},{k:N.favicon,comp:T,placeholder:E`None`,fileMask:`*.ico|`+he,xs:12,sm:6,helperText:E`The icon associated to your website`},{k:N.show_uploader,label:E`Show uploader to`,comp:me,xs:!0},{k:N.page_size,comp:k,xs:!0,min:1,required:!0,helperText:E`Entries per page`}],Uploads:[{k:N.dont_overwrite_uploading,comp:L,md:4,label:E`Uploads don't overwrite`,helperText:E`Files are automatically numbered (frontend only)`},{k:N.split_uploads,comp:k,unit:`MB`,md:2,step:.1,min:.1,fromField:e=>e*1e6,toField:e=>e?e/1e6:null,placeholder:E`disabled`,label:E`Split uploads in chunks`,helperText:E`Overcome proxy limits (frontend only)`},{k:N.delete_unfinished_uploads_after,comp:k,md:3,min:0,unit:E`seconds`,required:!0,label:E`Delete unfinished uploads after`},{k:N.min_available_mb,comp:k,md:3,min:0,unit:`MBytes`,placeholder:E`None`,label:E`Min. available disk space`,helperText:E`Reject uploads that don't comply`},{k:N.require_upload_approval_for_active_content,comp:L,xs:12,sm:6,md:4,label:E`Require approval for uploaded HTML/SVG`,helperText:E`Prevents running scripts on your website`},{k:N.own_upload_delete_hours,comp:k,xs:12,sm:6,md:3,min:0,unit:E`hours`,required:!0,label:E`Uploaders can delete their files for`,helperText:E`Set to 0 to disable`}],Others:[{k:N.show_hidden_files,comp:L,sm:3,label:E`Include hidden files`},{k:N.descript_ion_encoding,sm:3,label:E`Encoding of file DESCRIPT.ION`,comp:b,disabled:Y[N.comments_storage]===`attr`,options:[`utf8`,720,775,819,850,852,862,869,874,808,...B.default.range(1250,1257),10029,20866,21866]},{k:N.comments_storage,comp:b,xs:12,sm:6,options:{[E`in file DESCRIPT.ION`]:``,[E`in file attributes`]:`attr`,[E`in file attributes + load DESCRIPT.ION`]:`attr+ion`}},{k:N.keep_session_alive,comp:L,sm:6,md:6,helperText:E`frontend_page_open_session_hint`},{k:N.session_duration,comp:k,sm:3,md:3,min:5,unit:`seconds`,required:!0},{k:N.size_1024,label:E`KB size`,comp:b,sm:3,options:{1e3:!1,1024:!0}},{k:N.open_browser_at_start,comp:L,label:E`Open Admin-panel at start`,xs:12,sm:6,md:3,helperText:E`Browser is automatically launched with HFS`},{k:N.zip_calculate_size_for_seconds,comp:k,xs:12,sm:6,md:3,unit:`seconds`,required:!0,label:E`Calculate ZIP size for`,helperText:E`download_progress_time_hint`},{k:N.mime,comp:v,label:E`Custom MIME types`,reorder:!0,prepend:!0,xs:12,sm:12,md:6,fields:[{k:`v`,label:E`Mime type`,placeholder:E`auto`,$width:2,helperText:E`Leave empty to get automatic value`},{k:`k`,label:E`File mask`,helperText:(0,z.createElement)(S),$width:1,$column:{renderCell:({value:e,id:t})=>(0,z.createElement)(`code`,{},e,e===`*`&&t<B.default.size(Y[N.mime])-1&&c(pe,m(E`mime_order_hint`),{color:`warning.main`,ml:1}))}}],toField:e=>Object.entries(e||{}).map(([e,t])=>({k:e,v:t})),fromField:e=>Object.fromEntries(e.map(e=>[e.k,e.v||`auto`])),helperText:E`Most MIME types are detected automatically`},{k:N.force_webdav_login,comp:Oe,sm:!0,label:E`WebDAV force login`,fallbackRE:`Microsoft-WebDAV`,helperText:[E`force_login_compat_help`,P(`webdav`,E`Why?`)]},Y[N.force_webdav_login]!==!0&&{k:N.webdav_initial_auth,comp:Oe,sm:6,label:E`WebDAV initial auth`,helperText:E`force_login_once_help`},{k:N.server_code,comp:v,xs:12,fields:[{k:`name`,label:E`Name`,$width:.4,$render:({value:e})=>e.trim()||(0,z.createElement)(`i`,{},E`no name`)},{k:`code`,label:E`Code`,comp:de,lang:`js`,$hideUnder:`sm`,$render:({value:e})=>typeof e==`string`?(0,z.createElement)(ie,{},(0,H.highlight)(e,H.languages.js,`js`)):`?`,helperText:m(E(`server_code_plugin_help`,{docsUrl:f+`blob/main/dev-plugins.md`}))}],toField:e=>!e||typeof e!=`string`?[]:Se(e),fromField:ze,applyButton:{onClick:e=>Q({[N.server_code]:ze(e)})}}]})});function Re(e){let t=Object.entries(e),n=[];for(let[e,[,r]]of t.entries())for(let t of r){if(!t){n.push(t);continue}G[t.k]=e,n.push(M(M({},t),{},{parentProps:M(M({},t.parentProps),{},{hidden:e!==Ne})}))}return[{k:``,xs:12,comp:(0,z.createElement)(g,{value:Ne,variant:`scrollable`,scrollButtons:`auto`,onChange(e,t){Pe(t)}},t.map(([e])=>(0,z.createElement)(a,{key:e,label:E(e),sx:{minWidth:0}}))),parentProps:{ref:Me,sx:{position:`sticky`,top:{xs:56,sm:64,lg:0},zIndex:2,bgcolor:`background.paper`}}},...n]}function ze(e){return e.map(({name:e=``,code:t=``},n)=>n||e?`${V}${e}\n${t}\n`:t).join(``)}function Q(){return $.apply(this,arguments)}function $(){return $=ve(function*(e={}){var t,n;let r=M(M({},F),e);if(B.default.isEmpty(r))return se(E`Nothing to save`);let i=window.location,a=[N.port,N.https_port];if(a.every(e=>r[e]!==void 0))return j(E`change_both_ports_warning`,`warning`);let s=[R==null||(t=R.http)==null?void 0:t.listening,R==null||(n=R.https)==null?void 0:n.listening],c=location.protocol===`https:`;c&&(a.reverse(),s.reverse());let l=r[a[0]],u=Y[a[1]],d=u>0&&s[1],f=c?`http`:`https`;if(l<0&&!d)return j(E(`cannot_disable_only_fixed_port`,{otherProtocol:f}),`warning`);if(l===0&&!d)return j(E(`cannot_randomize_only_fixed_port`,{otherProtocol:f}),`warning`);let p=l>0&&l!=i.port;if(p&&!(yield O(E`You are changing the port and you may be disconnected`)))return;let m=N.cert in r||N.private_key in r;if(c&&m&&!(yield O(E`You may disrupt https service, kicking you out`)))return;yield ce(`set_config`,{values:r}),N.split_uploads in r&&(yield j(E`split_uploads_reload_notice`,`warning`));let h=te(i.hostname),g=i.pathname+i.hash,v=l<=0?`${c?`http:`:`https:`}//${h}:${u}${g}`:p?`${i.protocol}//${h}:${l||Y[a[0]]}${g}`:yield D(`https://${h}:${i.port}${g}`,e=>{var t;return!c&&((t=r[N.force_https])==null?_[N.force_https]:t)&&fetch(e).then(()=>e,()=>0)});if(v)return yield j(E`redirect_warning`,`warning`),window.location.href=v;let y=N.port in r||N.https_port in r;setTimeout(W,y||m?1e3:0),Object.assign(U,r),Te(),o(!1,je.current)}),$.apply(this,arguments)}}function Te(){let e={};if(A.config)for(let[t,n]of Object.entries(A.config))JSON.stringify(n)!==JSON.stringify(U==null?void 0:U[t])&&(e[t]=n);we.changes=e}function Ee({label:e,value:t,onChange:n,setApi:r,status:i,suggestedPort:a=1,error:o,helperText:s}){var c;let l=(0,z.useRef)(a);t>0&&(l.current=t);let d=Number(t>0?l.current:t)||0,f=i==null?void 0:i.error;return f&&(ue(f)||u(f)?f=void 0:o=!0),(0,z.createElement)(w,{},(0,z.createElement)(w,{sx:{display:`flex`}},(0,z.createElement)(b,{sx:{flexGrow:1},label:e,error:o,value:d,options:[{label:E`off`,value:-1},{label:E`random`,value:0},{label:E`choose`,value:l.current}],onChange:n}),t>0&&(0,z.createElement)(k,{label:E`Number`,fullWidth:!1,value:t,onChange:n,setApi:r,error:o,min:1,max:65535,helperText:s,sx:{minWidth:`5.5em`}})),i&&(0,z.createElement)(C,{error:o},i===!0?`...`:(c=f)==null?(i==null?void 0:i.listening)&&E(`Correctly working on port {port}`,{port:i.port}):c))}function De({label:e,value:t,onChange:r,error:i}){let a=!t||t===`-`,o=`example.com`;return(0,z.createElement)(w,{sx:{display:`flex`}},(0,z.createElement)(b,{label:e,value:a?t:o,options:{[E`allow all`]:``,[E`forbid all`]:`-`,[E`allow some`]:o},onChange:r,error:i,sx:a?void 0:{maxWidth:`11em`}}),!a&&(0,z.createElement)(n,{label:E`Domain to allow`,value:t,placeholder:`example.com`,onChange:r,error:i,helperText:(0,z.createElement)(S)}))}function Oe({label:e,value:t,onChange:r,error:i,helperText:a,fallbackRE:o=`.*`}){let[s,c]=(0,z.useState)(``),l=typeof t==`string`;(0,z.useEffect)(()=>c(l?t:o),[t]);let u=(0,z.useId)();return(0,z.createElement)(w,{},(0,z.createElement)(w,{sx:{display:`flex`}},(0,z.createElement)(b,{label:e,value:t,onChange:r,error:i,"aria-describedby":u,options:{[E`Off`]:!1,[E`Always`]:!0,[E`RegEx`]:s},sx:l?{maxWidth:`9em`}:void 0}),l&&(0,z.createElement)(n,{label:E`User-Agent regex`,value:t,onChange:r,error:i})),(0,z.createElement)(C,{id:u},a))}export{W as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./esm-Dtaf0rWK.js";var t=`يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر`.split(`_`),n={1:`١`,2:`٢`,3:`٣`,4:`٤`,5:`٥`,6:`٦`,7:`٧`,8:`٨`,9:`٩`,0:`٠`},r={"١":`1`,"٢":`2`,"٣":`3`,"٤":`4`,"٥":`5`,"٦":`6`,"٧":`7`,"٨":`8`,"٩":`9`,"٠":`0`},i={name:`ar`,weekdays:`الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت`.split(`_`),weekdaysShort:`أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت`.split(`_`),weekdaysMin:`ح_ن_ث_ر_خ_ج_س`.split(`_`),months:t,monthsShort:t,weekStart:6,meridiem:function(e){return e>12?`م`:`ص`},relativeTime:{future:`بعد %s`,past:`منذ %s`,s:`ثانية واحدة`,m:`دقيقة واحدة`,mm:`%d دقائق`,h:`ساعة واحدة`,hh:`%d ساعات`,d:`يوم واحد`,dd:`%d أيام`,M:`شهر واحد`,MM:`%d أشهر`,y:`عام واحد`,yy:`%d أعوام`},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return r[e]}).replace(/،/g,`,`)},postformat:function(e){return e.replace(/\d/g,function(e){return n[e]}).replace(/,/g,`،`)},ordinal:function(e){return e},formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`D/‏M/‏YYYY`,LL:`D MMMM YYYY`,LLL:`D MMMM YYYY HH:mm`,LLLL:`dddd D MMMM YYYY HH:mm`}};e.locale(i,null,!0);export{i as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./esm-Dtaf0rWK.js";var t={name:`be`,weekdays:`нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу`.split(`_`),months:`студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня`.split(`_`),weekStart:1,weekdaysShort:`нд_пн_ат_ср_чц_пт_сб`.split(`_`),monthsShort:`студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж`.split(`_`),weekdaysMin:`нд_пн_ат_ср_чц_пт_сб`.split(`_`),ordinal:function(e){return e},formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`DD.MM.YYYY`,LL:`D MMMM YYYY г.`,LLL:`D MMMM YYYY г., HH:mm`,LLLL:`dddd, D MMMM YYYY г., HH:mm`}};e.locale(t,null,!0);export{t as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./esm-Dtaf0rWK.js";var t={name:`da`,weekdays:`søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag`.split(`_`),weekdaysShort:`søn._man._tirs._ons._tors._fre._lør.`.split(`_`),weekdaysMin:`sø._ma._ti._on._to._fr._lø.`.split(`_`),months:`januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december`.split(`_`),monthsShort:`jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.`.split(`_`),weekStart:1,ordinal:function(e){return e+`.`},formats:{LT:`HH:mm`,LTS:`HH:mm:ss`,L:`DD.MM.YYYY`,LL:`D. MMMM YYYY`,LLL:`D. MMMM YYYY HH:mm`,LLLL:`dddd [d.] D. MMMM YYYY [kl.] HH:mm`},relativeTime:{future:`om %s`,past:`%s siden`,s:`få sekunder`,m:`et minut`,mm:`%d minutter`,h:`en time`,hh:`%d timer`,d:`en dag`,dd:`%d dage`,M:`en måned`,MM:`%d måneder`,y:`et år`,yy:`%d år`}};e.locale(t,null,!0);export{t as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./esm-Dtaf0rWK.js";var t={name:`en-au`,weekdays:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),weekStart:1,weekdaysShort:`Sun_Mon_Tue_Wed_Thu_Fri_Sat`.split(`_`),monthsShort:`Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec`.split(`_`),weekdaysMin:`Su_Mo_Tu_We_Th_Fr_Sa`.split(`_`),ordinal:function(e){return e},formats:{LT:`h:mm A`,LTS:`h:mm:ss A`,L:`DD/MM/YYYY`,LL:`D MMMM YYYY`,LLL:`D MMMM YYYY h:mm A`,LLLL:`dddd, D MMMM YYYY h:mm A`},relativeTime:{future:`in %s`,past:`%s ago`,s:`a few seconds`,m:`a minute`,mm:`%d minutes`,h:`an hour`,hh:`%d hours`,d:`a day`,dd:`%d days`,M:`a month`,MM:`%d months`,y:`a year`,yy:`%d years`}};e.locale(t,null,!0);export{t as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./en-B26lXzkx.js";var t=3600,n=t*24,r=n*7,i=1e3,a=60*i,o=t*i,s=n*i,c=r*i,l=`millisecond`,u=`second`,d=`minute`,f=`hour`,p=`week`,m=`month`,h=`quarter`,g=`year`,_=`date`,v=`Invalid Date`,y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,b=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,x=function(e,t,n){var r=String(e);return!r||r.length>=t?e:``+Array(t+1-r.length).join(n)+e},S={s:x,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?`+`:`-`)+x(r,2,`0`)+`:`+x(i,2,`0`)},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=(n.year()-t.year())*12+(n.month()-t.month()),i=t.clone().add(r,m),a=n-i<0,o=t.clone().add(r+(a?-1:1),m);return+(-(r+(n-i)/(a?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:`month`,y:`year`,w:`week`,d:`day`,D:`date`,h:`hour`,m:`minute`,s:`second`,ms:`millisecond`,Q:`quarter`}[e]||String(e||``).toLowerCase().replace(/s$/,``)},u:function(e){return e===void 0}},C=`en`,w={};w[C]=e;var T=`$isDayjsObject`,E=function(e){return e instanceof M||!!(e&&e[T])},D=function e(t,n,r){var i;if(!t)return C;if(typeof t==`string`){var a=t.toLowerCase();w[a]&&(i=a),n&&(w[a]=n,i=a);var o=t.split(`-`);if(!i&&o.length>1)return e(o[0])}else{var s=t.name;w[s]=t,i=s}return!r&&i&&(C=i),i||!r&&C},O=function(e,t){if(E(e))return e.clone();var n=typeof t==`object`?t:{};return n.date=e,n.args=arguments,new M(n)},k=function(e,t){return O(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})},A=S;A.l=D,A.i=E,A.w=k;var j=function(e){var t=e.date,n=e.utc;if(t===null)return new Date(NaN);if(A.u(t))return new Date;if(t instanceof Date)return new Date(t);if(typeof t==`string`&&!/Z$/i.test(t)){var r=t.match(y);if(r){var i=r[2]-1||0,a=(r[7]||`0`).substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)},M=function(){function e(e){this.$L=D(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[T]=!0}var t=e.prototype;return t.parse=function(e){this.$d=j(e),this.init()},t.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},t.$utils=function(){return A},t.isValid=function(){return this.$d.toString()!==v},t.isSame=function(e,t){var n=O(e);return this.startOf(t)<=n&&n<=this.endOf(t)},t.isAfter=function(e,t){return O(e)<this.startOf(t)},t.isBefore=function(e,t){return this.endOf(t)<O(e)},t.$g=function(e,t,n){return A.u(e)?this[t]:this.set(n,e)},t.unix=function(){return Math.floor(this.valueOf()/1e3)},t.valueOf=function(){return this.$d.getTime()},t.startOf=function(e,t){var n=this,r=A.u(t)?!0:t,i=A.p(e),a=function(e,t){var i=A.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?i:i.endOf(`day`)},o=function(e,t){return A.w(n.toDate()[e].apply(n.toDate(`s`),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},s=this.$W,c=this.$M,l=this.$D,h=`set`+(this.$u?`UTC`:``);switch(i){case g:return r?a(1,0):a(31,11);case m:return r?a(1,c):a(0,c+1);case p:var v=this.$locale().weekStart||0,y=(s<v?s+7:s)-v;return a(r?l-y:l+(6-y),c);case`day`:case _:return o(h+`Hours`,0);case f:return o(h+`Minutes`,1);case d:return o(h+`Seconds`,2);case u:return o(h+`Milliseconds`,3);default:return this.clone()}},t.endOf=function(e){return this.startOf(e,!1)},t.$set=function(e,t){var n,r=A.p(e),i=`set`+(this.$u?`UTC`:``),a=(n={},n.day=i+`Date`,n[_]=i+`Date`,n[m]=i+`Month`,n[g]=i+`FullYear`,n[f]=i+`Hours`,n[d]=i+`Minutes`,n[u]=i+`Seconds`,n[l]=i+`Milliseconds`,n)[r],o=r===`day`?this.$D+(t-this.$W):t;if(r===`month`||r===`year`){var s=this.clone().set(_,1);s.$d[a](o),s.init(),this.$d=s.set(_,Math.min(this.$D,s.daysInMonth())).$d}else a&&this.$d[a](o);return this.init(),this},t.set=function(e,t){return this.clone().$set(e,t)},t.get=function(e){return this[A.p(e)]()},t.add=function(e,t){var n=this,r;e=Number(e);var i=A.p(t),a=function(t){var r=O(n);return A.w(r.date(r.date()+Math.round(t*e)),n)};if(i===`month`)return this.set(m,this.$M+e);if(i===`year`)return this.set(g,this.$y+e);if(i===`day`)return a(1);if(i===`week`)return a(7);var o=(r={},r.minute=6e4,r.hour=36e5,r.second=1e3,r)[i]||1,s=this.$d.getTime()+e*o;return A.w(s,this)},t.subtract=function(e,t){return this.add(e*-1,t)},t.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||`Invalid Date`;var r=e||`YYYY-MM-DDTHH:mm:ssZ`,i=A.z(this),a=this.$H,o=this.$m,s=this.$M,c=n.weekdays,l=n.months,u=n.meridiem,d=function(e,n,i,a){return e&&(e[n]||e(t,r))||i[n].slice(0,a)},f=function(e){return A.s(a%12||12,e,`0`)},p=u||function(e,t,n){var r=e<12?`AM`:`PM`;return n?r.toLowerCase():r},m=function(e){switch(e){case`YY`:return String(t.$y).slice(-2);case`YYYY`:return A.s(t.$y,4,`0`);case`M`:return s+1;case`MM`:return A.s(s+1,2,`0`);case`MMM`:return d(n.monthsShort,s,l,3);case`MMMM`:return d(l,s);case`D`:return t.$D;case`DD`:return A.s(t.$D,2,`0`);case`d`:return String(t.$W);case`dd`:return d(n.weekdaysMin,t.$W,c,2);case`ddd`:return d(n.weekdaysShort,t.$W,c,3);case`dddd`:return c[t.$W];case`H`:return String(a);case`HH`:return A.s(a,2,`0`);case`h`:return f(1);case`hh`:return f(2);case`a`:return p(a,o,!0);case`A`:return p(a,o,!1);case`m`:return String(o);case`mm`:return A.s(o,2,`0`);case`s`:return String(t.$s);case`ss`:return A.s(t.$s,2,`0`);case`SSS`:return A.s(t.$ms,3,`0`);case`Z`:return i;default:break}return null};return r.replace(b,function(e,t){return t||m(e)||i.replace(`:`,``)})},t.utcOffset=function(){return-Math.round(this.$d.getTimezoneOffset()/15)*15},t.diff=function(e,t,n){var r=this,l=A.p(t),_=O(e),v=(_.utcOffset()-this.utcOffset())*a,y=this-_,b=function(){return A.m(r,_)},x;switch(l){case g:x=b()/12;break;case m:x=b();break;case h:x=b()/3;break;case p:x=(y-v)/c;break;case`day`:x=(y-v)/s;break;case f:x=y/o;break;case d:x=y/a;break;case u:x=y/i;break;default:x=y;break}return n?x:A.a(x)},t.daysInMonth=function(){return this.endOf(m).$D},t.$locale=function(){return w[this.$L]},t.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=D(e,t,!0);return r&&(n.$L=r),n},t.clone=function(){return A.w(this.$d,this)},t.toDate=function(){return new Date(this.valueOf())},t.toJSON=function(){return this.isValid()?this.toISOString():null},t.toISOString=function(){return this.$d.toISOString()},t.toString=function(){return this.$d.toUTCString()},e}(),N=M.prototype;O.prototype=N,[[`$ms`,l],[`$s`,u],[`$m`,d],[`$H`,f],[`$W`,`day`],[`$M`,m],[`$y`,g],[`$D`,_]].forEach(function(e){N[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),O.extend=function(e,t){return e.$i||(e(t,M,O),e.$i=!0),O},O.locale=D,O.isDayjs=E,O.unix=function(e){return O(e*1e3)},O.en=w[C],O.Ls=w,O.p={};export{O as t};