most-box 0.1.4 → 0.1.6

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 (400) hide show
  1. package/README.md +22 -12
  2. package/electron/main.js +31 -10
  3. package/out/404/index.html +3 -3
  4. package/out/404.html +3 -3
  5. package/out/__next.__PAGE__.txt +6 -6
  6. package/out/__next._full.txt +16 -16
  7. package/out/__next._head.txt +3 -3
  8. package/out/__next._index.txt +8 -8
  9. package/out/__next._tree.txt +5 -5
  10. package/out/_next/static/chunks/{06lttvu7563zo.css → 0-ryc9icn6dql.css} +1 -1
  11. package/out/_next/static/chunks/088-v8tzobg5g.js +1 -0
  12. package/out/_next/static/chunks/0g9303i8psy6z.js +1 -0
  13. package/out/_next/static/chunks/0nwdp-n94owg0.css +1 -0
  14. package/out/_next/static/chunks/{0pt.5cg1t09qs.js → 0s7i7nfr9j3b1.js} +1 -1
  15. package/out/_next/static/chunks/0vmjat-s4a3yj.css +1 -0
  16. package/out/_next/static/chunks/10p6-qnuk3p9x.js +1 -0
  17. package/out/_next/static/chunks/1ei8b9nw-ea8p.css +1 -0
  18. package/out/_next/static/chunks/1lxjpnw925-0p.css +1 -0
  19. package/out/_next/static/chunks/1v-molv0hbcjl.js +1 -0
  20. package/out/_next/static/chunks/23kls47vn_rpg.css +23 -0
  21. package/out/_next/static/chunks/2524ggtr3e4fp.js +1 -0
  22. package/out/_next/static/chunks/2fmkcw8ui5xp3.js +5 -0
  23. package/out/_next/static/chunks/2mcmt4yla_xle.js +1 -0
  24. package/out/_next/static/chunks/2uget3ephe4e3.js +736 -0
  25. package/out/_next/static/chunks/2v7_4ps1l4a8o.css +1 -0
  26. package/out/_next/static/chunks/2va-v1iiap4zv.js +1 -0
  27. package/out/_next/static/chunks/2vk2ln79gpvm4.js +1 -0
  28. package/out/_next/static/chunks/2vm9uslik2wfi.css +5 -0
  29. package/out/_next/static/chunks/37msy2-4ucgts.js +1 -0
  30. package/out/_next/static/chunks/384w3w4qvhw61.js +1 -0
  31. package/out/_next/static/chunks/3aa-weedhv4e0.js +1 -0
  32. package/out/_next/static/chunks/3erbaukgkw8f2.js +1 -0
  33. package/out/_next/static/chunks/3fea100s764m-.js +1 -0
  34. package/out/_next/static/chunks/3g0c367tk4esf.js +1 -0
  35. package/out/_next/static/chunks/{0gcsdf57gcm6h.js → 3oe03qxgd_rid.js} +1 -1
  36. package/out/_next/static/chunks/3qj5xz_d4cbk6.js +1 -0
  37. package/out/_next/static/chunks/3r5wf57k0gys9.js +1 -0
  38. package/out/_next/static/chunks/3yc_zd5vxq0j7.css +1 -0
  39. package/out/_next/static/chunks/{turbopack-0xta0kqwzkf28.js → turbopack-026p0g9v9_pva.js} +1 -1
  40. package/out/_not-found/__next._full.txt +13 -13
  41. package/out/_not-found/__next._head.txt +3 -3
  42. package/out/_not-found/__next._index.txt +8 -8
  43. package/out/_not-found/__next._not-found.__PAGE__.txt +4 -4
  44. package/out/_not-found/__next._not-found.txt +3 -3
  45. package/out/_not-found/__next._tree.txt +3 -3
  46. package/out/_not-found/index.html +3 -3
  47. package/out/_not-found/index.txt +13 -13
  48. package/out/admin/__next._full.txt +15 -15
  49. package/out/admin/__next._head.txt +3 -3
  50. package/out/admin/__next._index.txt +8 -8
  51. package/out/admin/__next._tree.txt +4 -4
  52. package/out/admin/__next.admin.__PAGE__.txt +4 -4
  53. package/out/admin/__next.admin.txt +4 -4
  54. package/out/admin/index.html +3 -3
  55. package/out/admin/index.txt +15 -15
  56. package/out/app/__next._full.txt +14 -14
  57. package/out/app/__next._head.txt +3 -3
  58. package/out/app/__next._index.txt +8 -8
  59. package/out/app/__next._tree.txt +3 -3
  60. package/out/app/__next.app.__PAGE__.txt +4 -4
  61. package/out/app/__next.app.txt +3 -3
  62. package/out/app/index.html +3 -3
  63. package/out/app/index.txt +14 -14
  64. package/out/chat/__next._full.txt +15 -15
  65. package/out/chat/__next._head.txt +3 -3
  66. package/out/chat/__next._index.txt +8 -8
  67. package/out/chat/__next._tree.txt +4 -4
  68. package/out/chat/__next.chat.__PAGE__.txt +4 -4
  69. package/out/chat/__next.chat.txt +4 -4
  70. package/out/chat/index.html +3 -3
  71. package/out/chat/index.txt +15 -15
  72. package/out/chat/join/__next._full.txt +15 -15
  73. package/out/chat/join/__next._head.txt +3 -3
  74. package/out/chat/join/__next._index.txt +8 -8
  75. package/out/chat/join/__next._tree.txt +4 -4
  76. package/out/chat/join/__next.chat.join.__PAGE__.txt +4 -4
  77. package/out/chat/join/__next.chat.join.txt +3 -3
  78. package/out/chat/join/__next.chat.txt +4 -4
  79. package/out/chat/join/index.html +3 -3
  80. package/out/chat/join/index.txt +15 -15
  81. package/out/demo/__next._full.txt +27 -0
  82. package/out/demo/__next._head.txt +5 -0
  83. package/out/demo/__next._index.txt +9 -0
  84. package/out/demo/__next._tree.txt +7 -0
  85. package/out/demo/__next.demo.__PAGE__.txt +12 -0
  86. package/out/demo/__next.demo.txt +5 -0
  87. package/out/demo/index.html +17 -0
  88. package/out/demo/index.txt +27 -0
  89. package/out/download/__next._full.txt +35 -37
  90. package/out/download/__next._head.txt +3 -3
  91. package/out/download/__next._index.txt +8 -8
  92. package/out/download/__next._tree.txt +5 -5
  93. package/out/download/__next.download.__PAGE__.txt +7 -7
  94. package/out/download/__next.download.txt +3 -3
  95. package/out/download/index.html +3 -3
  96. package/out/download/index.txt +35 -37
  97. package/out/favicon.ico +0 -0
  98. package/out/game/__next._full.txt +13 -13
  99. package/out/game/__next._head.txt +3 -3
  100. package/out/game/__next._index.txt +8 -8
  101. package/out/game/__next._tree.txt +4 -4
  102. package/out/game/__next.game.__PAGE__.txt +2 -2
  103. package/out/game/__next.game.txt +4 -4
  104. package/out/game/gandengyan/__next._full.txt +16 -16
  105. package/out/game/gandengyan/__next._head.txt +3 -3
  106. package/out/game/gandengyan/__next._index.txt +8 -8
  107. package/out/game/gandengyan/__next._tree.txt +5 -5
  108. package/out/game/gandengyan/__next.game.gandengyan.__PAGE__.txt +5 -5
  109. package/out/game/gandengyan/__next.game.gandengyan.txt +3 -3
  110. package/out/game/gandengyan/__next.game.txt +4 -4
  111. package/out/game/gandengyan/index.html +3 -3
  112. package/out/game/gandengyan/index.txt +16 -16
  113. package/out/game/index.html +1 -1
  114. package/out/game/index.txt +13 -13
  115. package/out/game/zhajinhua/__next._full.txt +15 -15
  116. package/out/game/zhajinhua/__next._head.txt +3 -3
  117. package/out/game/zhajinhua/__next._index.txt +8 -8
  118. package/out/game/zhajinhua/__next._tree.txt +4 -4
  119. package/out/game/zhajinhua/__next.game.txt +4 -4
  120. package/out/game/zhajinhua/__next.game.zhajinhua.__PAGE__.txt +4 -4
  121. package/out/game/zhajinhua/__next.game.zhajinhua.txt +3 -3
  122. package/out/game/zhajinhua/index.html +3 -3
  123. package/out/game/zhajinhua/index.txt +15 -15
  124. package/out/index.html +3 -3
  125. package/out/index.txt +16 -16
  126. package/out/logo-512.png +0 -0
  127. package/out/logo.ico +0 -0
  128. package/out/logo.svg +12 -0
  129. package/out/note/__next._full.txt +14 -14
  130. package/out/note/__next._head.txt +3 -3
  131. package/out/note/__next._index.txt +8 -8
  132. package/out/note/__next._tree.txt +3 -3
  133. package/out/note/__next.note.__PAGE__.txt +4 -4
  134. package/out/note/__next.note.txt +3 -3
  135. package/out/note/index.html +3 -3
  136. package/out/note/index.txt +14 -14
  137. package/out/ping/__next._full.txt +16 -16
  138. package/out/ping/__next._head.txt +3 -3
  139. package/out/ping/__next._index.txt +8 -8
  140. package/out/ping/__next._tree.txt +5 -5
  141. package/out/ping/__next.ping.__PAGE__.txt +5 -5
  142. package/out/ping/__next.ping.txt +4 -4
  143. package/out/ping/index.html +3 -3
  144. package/out/ping/index.txt +16 -16
  145. package/out/web3/__next._full.txt +15 -15
  146. package/out/web3/__next._head.txt +3 -3
  147. package/out/web3/__next._index.txt +8 -8
  148. package/out/web3/__next._tree.txt +4 -4
  149. package/out/web3/__next.web3.__PAGE__.txt +4 -4
  150. package/out/web3/__next.web3.txt +4 -4
  151. package/out/web3/ed25519/__next._full.txt +13 -13
  152. package/out/web3/ed25519/__next._head.txt +3 -3
  153. package/out/web3/ed25519/__next._index.txt +8 -8
  154. package/out/web3/ed25519/__next._tree.txt +4 -4
  155. package/out/web3/ed25519/__next.web3.ed25519.__PAGE__.txt +2 -2
  156. package/out/web3/ed25519/__next.web3.ed25519.txt +3 -3
  157. package/out/web3/ed25519/__next.web3.txt +4 -4
  158. package/out/web3/ed25519/index.html +1 -1
  159. package/out/web3/ed25519/index.txt +13 -13
  160. package/out/web3/index.html +3 -3
  161. package/out/web3/index.txt +15 -15
  162. package/out/web3/tools/__next._full.txt +13 -13
  163. package/out/web3/tools/__next._head.txt +3 -3
  164. package/out/web3/tools/__next._index.txt +8 -8
  165. package/out/web3/tools/__next._tree.txt +4 -4
  166. package/out/web3/tools/__next.web3.tools.__PAGE__.txt +2 -2
  167. package/out/web3/tools/__next.web3.tools.txt +3 -3
  168. package/out/web3/tools/__next.web3.txt +4 -4
  169. package/out/web3/tools/index.html +1 -1
  170. package/out/web3/tools/index.txt +13 -13
  171. package/package.json +27 -27
  172. package/public/favicon.ico +0 -0
  173. package/public/logo-512.png +0 -0
  174. package/public/logo.ico +0 -0
  175. package/public/logo.svg +12 -0
  176. package/server/src/core/mostLink.js +1 -1
  177. package/server/src/games/gandengyan.js +49 -19
  178. package/server/src/http/app.js +40 -15
  179. package/server/src/http/nodeStatus.js +37 -0
  180. package/server/src/http/uploads.js +1 -0
  181. package/server/src/index.js +417 -112
  182. package/server/src/utils/avatar.js +3 -2
  183. package/out/_next/static/chunks/03gsbg0fr00ey.js +0 -1
  184. package/out/_next/static/chunks/0adx~d-j05c9d.css +0 -24
  185. package/out/_next/static/chunks/0ao1lbi4b.sfa.js +0 -1
  186. package/out/_next/static/chunks/0fo9-h4knidcz.js +0 -1
  187. package/out/_next/static/chunks/0g_a~e050bgzg.css +0 -1
  188. package/out/_next/static/chunks/0h4r.qtmpa6eh.js +0 -1
  189. package/out/_next/static/chunks/0hpev4am9jpmu.css +0 -1
  190. package/out/_next/static/chunks/0hyds~bp.auvh.js +0 -1
  191. package/out/_next/static/chunks/0i9sfdypwuw8~.js +0 -1
  192. package/out/_next/static/chunks/0o9ce4cyf76by.js +0 -736
  193. package/out/_next/static/chunks/0olqjomda37-e.js +0 -1
  194. package/out/_next/static/chunks/0puk.7e.tr2zy.js +0 -1
  195. package/out/_next/static/chunks/0qgx9t4jx16ua.css +0 -1
  196. package/out/_next/static/chunks/0s1k6rlwy02c2.js +0 -1
  197. package/out/_next/static/chunks/0sgltmtk_9s8p.css +0 -1
  198. package/out/_next/static/chunks/0snehvtvu1n4q.js +0 -1
  199. package/out/_next/static/chunks/0s~g.l~x049o2.js +0 -1
  200. package/out/_next/static/chunks/0t_3xxx4zkerp.js +0 -5
  201. package/out/_next/static/chunks/0u38kke9vhobe.js +0 -1
  202. package/out/_next/static/chunks/0vd4_a5x-wpdh.js +0 -1
  203. package/out/_next/static/chunks/0xdwau5k2augv.css +0 -4
  204. package/out/_next/static/chunks/0xx_10jns1.s7.css +0 -1
  205. package/out/_next/static/chunks/10f-t2n4y1zx8.js +0 -1
  206. package/out/_next/static/chunks/13jdyag9a-~kk.js +0 -1
  207. package/out/_next/static/chunks/153-sz7s.qml2.js +0 -1
  208. package/out/_next/static/chunks/17cwkb2yn_akx.js +0 -1
  209. /package/out/_next/static/{sSvbBrwXZY-4lBmcHshga → NPIlpdzQWkiVZpgfhlypH}/_buildManifest.js +0 -0
  210. /package/out/_next/static/{sSvbBrwXZY-4lBmcHshga → NPIlpdzQWkiVZpgfhlypH}/_clientMiddlewareManifest.js +0 -0
  211. /package/out/_next/static/{sSvbBrwXZY-4lBmcHshga → NPIlpdzQWkiVZpgfhlypH}/_ssgManifest.js +0 -0
  212. /package/out/_next/static/chunks/{0bld2u_ld~va2.js → 0-jy8rfo075fy.js} +0 -0
  213. /package/out/_next/static/chunks/{0bliugh5lxw55.js → 0-kczrcxjk7lc.js} +0 -0
  214. /package/out/_next/static/chunks/{00d9h1tddnnnd.js → 012yllpioyi-k.js} +0 -0
  215. /package/out/_next/static/chunks/{00tkdqwxch-3s.js → 02f7w-ybfnvpd.js} +0 -0
  216. /package/out/_next/static/chunks/{01l3o90g~1z42.js → 04_v8i3c2y4ni.js} +0 -0
  217. /package/out/_next/static/chunks/{01xlw8hd842-c.js → 05-c3ty_6dwfk.js} +0 -0
  218. /package/out/_next/static/chunks/{01mfky9camw6i.js → 052vp9tk7oqx6.js} +0 -0
  219. /package/out/_next/static/chunks/{01r.v-pqs1vrm.js → 05k6874y7n0cw.js} +0 -0
  220. /package/out/_next/static/chunks/{02zzxfop_k6tl.css → 09g8c9-u_uh1z.css} +0 -0
  221. /package/out/_next/static/chunks/{03edqrb4zdj~g.js → 0az8vxg2gfuhm.js} +0 -0
  222. /package/out/_next/static/chunks/{03h_6oo-gqkhz.js → 0b899y85ei3i_.js} +0 -0
  223. /package/out/_next/static/chunks/{03~yq9q893hmn.js → 0cz1d0mv5g_q7.js} +0 -0
  224. /package/out/_next/static/chunks/{04hcgsanv1hhu.js → 0eg1osglq6nq7.js} +0 -0
  225. /package/out/_next/static/chunks/{05g2q0w5b34.g.js → 0hlvocunlbrjs.js} +0 -0
  226. /package/out/_next/static/chunks/{05of77xycbt8~.js → 0i9k23rx749fx.js} +0 -0
  227. /package/out/_next/static/chunks/{05zwemzfjx3sh.js → 0j6wiyqf1637r.js} +0 -0
  228. /package/out/_next/static/chunks/{06dpc5df94.v1.js → 0knzyzd1jvley.js} +0 -0
  229. /package/out/_next/static/chunks/{06e1~1-z_ic9a.js → 0kp8ujaqwut11.js} +0 -0
  230. /package/out/_next/static/chunks/{075s7sn.ns~u5.js → 0n92y9hb-ta0u.js} +0 -0
  231. /package/out/_next/static/chunks/{07dynrbvd3.f4.js → 0nybb-z3ufrbx.js} +0 -0
  232. /package/out/_next/static/chunks/{07r9nn-pzlgg1.js → 0o-o9af-grvj8.js} +0 -0
  233. /package/out/_next/static/chunks/{07p~uva5pwgwe.js → 0oxr0r0aewn99.js} +0 -0
  234. /package/out/_next/static/chunks/{08576xhv~~jck.js → 0qh3b90ouc9bd.js} +0 -0
  235. /package/out/_next/static/chunks/{08u211~k~qu52.js → 0sh_jm8siqvek.js} +0 -0
  236. /package/out/_next/static/chunks/{08.72abkgwy9g.js → 0t86ducxkqweb.js} +0 -0
  237. /package/out/_next/static/chunks/{098.p.2-zm4p7.js → 0u0j5i6-n4oqd.js} +0 -0
  238. /package/out/_next/static/chunks/{09ngvtajm7e5y.js → 0v73vfxjds7sj.js} +0 -0
  239. /package/out/_next/static/chunks/{09ps~-43n5qyo.js → 0ve8ixremhwy0.js} +0 -0
  240. /package/out/_next/static/chunks/{09v7_0gclxr46.js → 0vv5cwj6kr506.js} +0 -0
  241. /package/out/_next/static/chunks/{09yql86dir9c4.js → 0w3wf8o-ewec9.js} +0 -0
  242. /package/out/_next/static/chunks/{09zmlfljowj1~.js → 0w6o4o76scrb2.js} +0 -0
  243. /package/out/_next/static/chunks/{0n4t80gjc3q5h.js → 1-88dio6azz54.js} +0 -0
  244. /package/out/_next/static/chunks/{0cn9a7aimbdzq.js → 12zg24u7mbv4z.js} +0 -0
  245. /package/out/_next/static/chunks/{0d3f-nk3c.2re.js → 14lsse587-ccf.js} +0 -0
  246. /package/out/_next/static/chunks/{0dtohpf7~3d12.js → 16qtikqm_sate.js} +0 -0
  247. /package/out/_next/static/chunks/{0e531nije_ln2.js → 17_ly1mk2z3q8.js} +0 -0
  248. /package/out/_next/static/chunks/{0e5zvj_rh0z3m.js → 181421-y2xzj7.js} +0 -0
  249. /package/out/_next/static/chunks/{0myp4sjagr~h0.js → 1_e-vuvfsntao.js} +0 -0
  250. /package/out/_next/static/chunks/{0e-3e8h7g99yf.js → 1aljc62wfhqhr.js} +0 -0
  251. /package/out/_next/static/chunks/{0f4y~rkk-n81e.js → 1b7mbzsylsn-m.js} +0 -0
  252. /package/out/_next/static/chunks/{0fk~0~p7ivfn1.js → 1cjakikh0o1tm.js} +0 -0
  253. /package/out/_next/static/chunks/{0fw6juc~lsj3z.js → 1dfzez629llzh.js} +0 -0
  254. /package/out/_next/static/chunks/{0g0u7785a73vo.js → 1e4ilit3ave6c.js} +0 -0
  255. /package/out/_next/static/chunks/{0gze5uso1mbe9.js → 1gzgcv355ziff.js} +0 -0
  256. /package/out/_next/static/chunks/{0g_fpgh7drfda.js → 1h0o6fj73le9_.js} +0 -0
  257. /package/out/_next/static/chunks/{0hf.aosc-7172.js → 1in766ibz5l-p.js} +0 -0
  258. /package/out/_next/static/chunks/{0hgz35c1ejbs9.js → 1ip_c70si4tj2.js} +0 -0
  259. /package/out/_next/static/chunks/{0hrw-r.xmvmsq.js → 1jlu197-yog_n.js} +0 -0
  260. /package/out/_next/static/chunks/{0hzg4al.v~8~m.js → 1k788fny29y_j.js} +0 -0
  261. /package/out/_next/static/chunks/{0ip9xrols_83o.js → 1mnhfyfn52md5.js} +0 -0
  262. /package/out/_next/static/chunks/{0j4-d0qf.v~kn.js → 1o8brm8yipzn4.js} +0 -0
  263. /package/out/_next/static/chunks/{0jhdeq.j9_02m.js → 1p8oa39bqu6ed.js} +0 -0
  264. /package/out/_next/static/chunks/{0jy63h3i-y69i.js → 1qmnmb_dutuw8.js} +0 -0
  265. /package/out/_next/static/chunks/{0kdnx_u-60k9s.js → 1s6rdcw0q185p.js} +0 -0
  266. /package/out/_next/static/chunks/{0kq~edq42o1-c.js → 1ta0w8zc7tae7.js} +0 -0
  267. /package/out/_next/static/chunks/{0l682p362d-5w.js → 1uvi_hie0s3z5.js} +0 -0
  268. /package/out/_next/static/chunks/{0m68p9txef5rs.js → 1y36s6sv2z7r4.js} +0 -0
  269. /package/out/_next/static/chunks/{0mme-fm5d2oz2.js → 1zf4i-oj7n-ll.js} +0 -0
  270. /package/out/_next/static/chunks/{0y.li-~3oybew.js → 2-vtwv8h_uokj.js} +0 -0
  271. /package/out/_next/static/chunks/{0n.qlfk~z7o.6.js → 2227enga_0c-6.js} +0 -0
  272. /package/out/_next/static/chunks/{0oz3yl6_-716p.js → 24zr4q96g-eii.js} +0 -0
  273. /package/out/_next/static/chunks/{0pqt~8bl3ukh4.js → 27jktro2p5rq9.js} +0 -0
  274. /package/out/_next/static/chunks/{0yl2t7cs-n_ng.js → 2_cqphhur0a6t.js} +0 -0
  275. /package/out/_next/static/chunks/{0yq3kh.hchtm_.js → 2_s88st3j0tql.js} +0 -0
  276. /package/out/_next/static/chunks/{0ys0l5au.9c2c.js → 2_y6edbaubqrt.js} +0 -0
  277. /package/out/_next/static/chunks/{0qqupeexg83u7.js → 2at8y3pbt5cue.js} +0 -0
  278. /package/out/_next/static/chunks/{0rb-ri481.kc9.js → 2cv1zex4has67.js} +0 -0
  279. /package/out/_next/static/chunks/{0rsnmahfd.59p.js → 2e6j5h4ftd4jd.js} +0 -0
  280. /package/out/_next/static/chunks/{0rt6rgnvr-s_p.js → 2e8b26r0td7ou.js} +0 -0
  281. /package/out/_next/static/chunks/{0runh28p_gg6..js → 2ecppdrjm9cs4.js} +0 -0
  282. /package/out/_next/static/chunks/{0shy.t1fwqcev.js → 2gl0wusc9zf3d.js} +0 -0
  283. /package/out/_next/static/chunks/{0t2xr05rlu96l.js → 2im7c515bo69p.js} +0 -0
  284. /package/out/_next/static/chunks/{0t6h56rhg1y5i.js → 2ixaku9ie8hym.js} +0 -0
  285. /package/out/_next/static/chunks/{0tdqd1zunusgk.js → 2jhnrjgj_k2-z.js} +0 -0
  286. /package/out/_next/static/chunks/{0ujbnp38x63ek.js → 2n6pb94vmohgf.js} +0 -0
  287. /package/out/_next/static/chunks/{0ukyg~tkm~h2m.css → 2nbju8t9-ux58.css} +0 -0
  288. /package/out/_next/static/chunks/{0v68pdrp54lb-.js → 2pdxw43rsbho0.js} +0 -0
  289. /package/out/_next/static/chunks/{0vsm0m5sxrb.3.js → 2r6z3vlfw0ppd.js} +0 -0
  290. /package/out/_next/static/chunks/{0vzlz.iboqo3c.js → 2rskzmv3skmq3.js} +0 -0
  291. /package/out/_next/static/chunks/{0w87vbpkf-ogd.js → 2stoe6xiau1b3.js} +0 -0
  292. /package/out/_next/static/chunks/{0xgg0~kmf3gd-.js → 2wqoc60afpg_5.js} +0 -0
  293. /package/out/_next/static/chunks/{0xj24-70ptdzp.js → 2wyvwsayrr98o.js} +0 -0
  294. /package/out/_next/static/chunks/{0xxlx772fr3x4.js → 2y3o2mnyfnx68.js} +0 -0
  295. /package/out/_next/static/chunks/{16i.qbk8t8gf_.js → 3-7y7sjol3yto.js} +0 -0
  296. /package/out/_next/static/chunks/{0z48pmi6buytt.js → 3089gugfv3ov9.js} +0 -0
  297. /package/out/_next/static/chunks/{0zapnvgy89mg..js → 30s3_0brd77ky.js} +0 -0
  298. /package/out/_next/static/chunks/{0_s~ebb-7b2hr.js → 35idql3ziq0wz.js} +0 -0
  299. /package/out/_next/static/chunks/{0_w-0-2z5oqd_.js → 35unmm4isvqg5.js} +0 -0
  300. /package/out/_next/static/chunks/{0-n3pg7th.zza.js → 389wmv2b6x2nn.js} +0 -0
  301. /package/out/_next/static/chunks/{0~4f5p6tvn1lq.js → 39-oy5n969lo6.js} +0 -0
  302. /package/out/_next/static/chunks/{0~3ik-hfp9s-7.js → 39yvee40syj70.js} +0 -0
  303. /package/out/_next/static/chunks/{0~_0ys.2whxbw.js → 3clhij8e1eul0.js} +0 -0
  304. /package/out/_next/static/chunks/{0~_ui9l7.2sxf.js → 3cnsdzbvm3q7p.js} +0 -0
  305. /package/out/_next/static/chunks/{0~.-vxi5oc.r0.js → 3cxmalqqghdac.js} +0 -0
  306. /package/out/_next/static/chunks/{0.4j.0k5a64vg.js → 3d9p88evh2scq.js} +0 -0
  307. /package/out/_next/static/chunks/{0.ozi1_x2.m.~.js → 3eyprczj7yrg6.js} +0 -0
  308. /package/out/_next/static/chunks/{0.t5wlt51zou5.js → 3f9v_gtppe4hs.js} +0 -0
  309. /package/out/_next/static/chunks/{0.w4hkvap~bva.js → 3fj0amtzqae6f.js} +0 -0
  310. /package/out/_next/static/chunks/{1037jlyw5~7ht.js → 3gf98e08a-l_e.js} +0 -0
  311. /package/out/_next/static/chunks/{1045hfzu533z0.js → 3gi6og9m_yaak.js} +0 -0
  312. /package/out/_next/static/chunks/{104e5nmc.c-pl.js → 3giw7r1lii84y.js} +0 -0
  313. /package/out/_next/static/chunks/{109taw1pbh-0b.js → 3gzhy1cs_f2oi.js} +0 -0
  314. /package/out/_next/static/chunks/{10ynz1dy483wf.js → 3i_ceknny1oqt.js} +0 -0
  315. /package/out/_next/static/chunks/{10x7~onqwp338.js → 3iw0815ssih3b.js} +0 -0
  316. /package/out/_next/static/chunks/{11hds.mg~4_r-.js → 3kun-vwr7nzd4.js} +0 -0
  317. /package/out/_next/static/chunks/{11ibzaklcauw~.js → 3kxm1e-b1er3_.js} +0 -0
  318. /package/out/_next/static/chunks/{11z.0s6.42b.p.js → 3mc8fynmv71yg.js} +0 -0
  319. /package/out/_next/static/chunks/{126enaq~f7scl.js → 3n6cor2n9zyn7.js} +0 -0
  320. /package/out/_next/static/chunks/{12pep-2t-qg4n.css → 3or2h8swxfxyj.css} +0 -0
  321. /package/out/_next/static/chunks/{12-9n56l0y3yr.js → 3ppt04b6xqz29.js} +0 -0
  322. /package/out/_next/static/chunks/{1380op_pfk.qo.js → 3ql2pi_m5_5p_.js} +0 -0
  323. /package/out/_next/static/chunks/{14a4fwbiq.l3z.js → 3t-6u8caafiu9.js} +0 -0
  324. /package/out/_next/static/chunks/{146oiw1bggtn4.js → 3tqdzb_n12tdm.js} +0 -0
  325. /package/out/_next/static/chunks/{14cowsqn95m1k.js → 3u6zpg943kpst.js} +0 -0
  326. /package/out/_next/static/chunks/{14dtd3l03v.kx.js → 3uaedu2hf291z.js} +0 -0
  327. /package/out/_next/static/chunks/{14tm3qa-v9o-4.js → 3vladx3wh0d4k.js} +0 -0
  328. /package/out/_next/static/chunks/{14_inksek_rth.js → 3w4o9hklow6fg.js} +0 -0
  329. /package/out/_next/static/chunks/{14_po2rb_arn4.js → 3w56w25z6u89b.js} +0 -0
  330. /package/out/_next/static/chunks/{157z7bowux3xj.js → 3x1y_gkazt6kx.js} +0 -0
  331. /package/out/_next/static/chunks/{15m1_677az2cm.js → 3y7r1h96dtcov.js} +0 -0
  332. /package/out/_next/static/chunks/{15v.~.ne6ogkk.js → 3z0hydntmwg19.js} +0 -0
  333. /package/out/_next/static/chunks/{15-o4kb-evqd7.js → 3zhu1svjr0bc5.js} +0 -0
  334. /package/out/_next/static/chunks/{16u9f35gylw8l.js → 404orp1erq__7.js} +0 -0
  335. /package/out/_next/static/chunks/{17ajyb5ogk5yj.js → 41talcs-dc2tc.js} +0 -0
  336. /package/out/_next/static/chunks/{17dyfxbq8yz8n.js → 421pn8weymo-b.js} +0 -0
  337. /package/out/_next/static/chunks/{180zln9pcq9ih.js → 44987pmr20now.js} +0 -0
  338. /package/out/_next/static/chunks/{1814izi5gh.kp.js → 449ygeh62gitc.js} +0 -0
  339. /package/out/_next/static/media/{KaTeX_AMS-Regular.0b~8ki5y928w2.woff → KaTeX_AMS-Regular.10y3kupq4t663.woff} +0 -0
  340. /package/out/_next/static/media/{KaTeX_AMS-Regular.0p1vbqd84i2~o.woff2 → KaTeX_AMS-Regular.25ieegmnh38ts.woff2} +0 -0
  341. /package/out/_next/static/media/{KaTeX_AMS-Regular.173t6ktr7uf-w.ttf → KaTeX_AMS-Regular.418dr7cz3fo2x.ttf} +0 -0
  342. /package/out/_next/static/media/{KaTeX_Caligraphic-Bold.01-pzluls4zgb.woff2 → KaTeX_Caligraphic-Bold.06b-ya9t43ioz.woff2} +0 -0
  343. /package/out/_next/static/media/{KaTeX_Caligraphic-Bold.0x2v1lwn~880f.woff → KaTeX_Caligraphic-Bold.2vmk2hva4ctha.woff} +0 -0
  344. /package/out/_next/static/media/{KaTeX_Caligraphic-Bold.16zv5fax0h0ka.ttf → KaTeX_Caligraphic-Bold.40ltxhe834pns.ttf} +0 -0
  345. /package/out/_next/static/media/{KaTeX_Caligraphic-Regular.02i3z7wig438t.ttf → KaTeX_Caligraphic-Regular.07-7u27-nhn_r.ttf} +0 -0
  346. /package/out/_next/static/media/{KaTeX_Caligraphic-Regular.0rysu1t-ncjq8.woff2 → KaTeX_Caligraphic-Regular.2eph4dlhid_m9.woff2} +0 -0
  347. /package/out/_next/static/media/{KaTeX_Caligraphic-Regular.10927swgekwun.woff → KaTeX_Caligraphic-Regular.3gxeetazf831f.woff} +0 -0
  348. /package/out/_next/static/media/{KaTeX_Fraktur-Bold.0et27v~3~4uhe.ttf → KaTeX_Fraktur-Bold.19yqa_tc9d_gx.ttf} +0 -0
  349. /package/out/_next/static/media/{KaTeX_Fraktur-Bold.0e-16u10iuyyf.woff → KaTeX_Fraktur-Bold.1alcy76__wdj2.woff} +0 -0
  350. /package/out/_next/static/media/{KaTeX_Fraktur-Bold.0w23i72~hprpq.woff2 → KaTeX_Fraktur-Bold.2sasz-d-jtw8y.woff2} +0 -0
  351. /package/out/_next/static/media/{KaTeX_Fraktur-Regular.0b.riegzdfue2.woff → KaTeX_Fraktur-Regular.110oo81prr9n5.woff} +0 -0
  352. /package/out/_next/static/media/{KaTeX_Fraktur-Regular.0rekyoa-52fj_.woff2 → KaTeX_Fraktur-Regular.2d10y4xmjvzlf.woff2} +0 -0
  353. /package/out/_next/static/media/{KaTeX_Fraktur-Regular.0vjwa15znhk~4.ttf → KaTeX_Fraktur-Regular.2qhy34r6a05dn.ttf} +0 -0
  354. /package/out/_next/static/media/{KaTeX_Main-Bold.09i7~607shf-h.ttf → KaTeX_Main-Bold.0us_n0tnxlxu7.ttf} +0 -0
  355. /package/out/_next/static/media/{KaTeX_Main-Bold.09lmynrorhcbw.woff → KaTeX_Main-Bold.0v1esh257kqpe.woff} +0 -0
  356. /package/out/_next/static/media/{KaTeX_Main-Bold.16pfc63_du6mx.woff2 → KaTeX_Main-Bold.3-rowy8o6_4ky.woff2} +0 -0
  357. /package/out/_next/static/media/{KaTeX_Main-BoldItalic.0cp37g7x1q8h6.woff → KaTeX_Main-BoldItalic.13355ck5zr48q.woff} +0 -0
  358. /package/out/_next/static/media/{KaTeX_Main-BoldItalic.0d54rk08rx11s.woff2 → KaTeX_Main-BoldItalic.14r2naom8mrec.woff2} +0 -0
  359. /package/out/_next/static/media/{KaTeX_Main-BoldItalic.15j6k~hix2t_0.ttf → KaTeX_Main-BoldItalic.3x_u9cepaced0.ttf} +0 -0
  360. /package/out/_next/static/media/{KaTeX_Main-Italic.0382gqciexmbu.woff → KaTeX_Main-Italic.0afv392dj4w59.woff} +0 -0
  361. /package/out/_next/static/media/{KaTeX_Main-Italic.06o5nq0_91v60.woff2 → KaTeX_Main-Italic.0lig0v9j0700p.woff2} +0 -0
  362. /package/out/_next/static/media/{KaTeX_Main-Italic.0su4i6mm18-wo.ttf → KaTeX_Main-Italic.2hkw3230mfwcv.ttf} +0 -0
  363. /package/out/_next/static/media/{KaTeX_Main-Regular.08zh8z.7shijf.ttf → KaTeX_Main-Regular.0symfa7dqj6jd.ttf} +0 -0
  364. /package/out/_next/static/media/{KaTeX_Main-Regular.0diheg01zyoph.woff → KaTeX_Main-Regular.15u8r3b2y7fv4.woff} +0 -0
  365. /package/out/_next/static/media/{KaTeX_Main-Regular.0kaf-ag2_wkm-.woff2 → KaTeX_Main-Regular.1ryvsdzh2w1_e.woff2} +0 -0
  366. /package/out/_next/static/media/{KaTeX_Math-BoldItalic.0ajzxypnbx1h1.ttf → KaTeX_Math-BoldItalic.0y5w36a5aq__2.ttf} +0 -0
  367. /package/out/_next/static/media/{KaTeX_Math-BoldItalic.0ck1myuerwyqw.woff → KaTeX_Math-BoldItalic.12pl58orkw9rg.woff} +0 -0
  368. /package/out/_next/static/media/{KaTeX_Math-BoldItalic.0ja97dn.cpc87.woff2 → KaTeX_Math-BoldItalic.1oopuu636h4il.woff2} +0 -0
  369. /package/out/_next/static/media/{KaTeX_Math-Italic.09xkhecjcn5r9.woff → KaTeX_Math-Italic.0w0b1ugh62cfr.woff} +0 -0
  370. /package/out/_next/static/media/{KaTeX_Math-Italic.0x23a-bmp-5tg.ttf → KaTeX_Math-Italic.2vkekfblmz5nb.ttf} +0 -0
  371. /package/out/_next/static/media/{KaTeX_Math-Italic.0zrha2c4sl2je.woff2 → KaTeX_Math-Italic.32405s1aq8vas.woff2} +0 -0
  372. /package/out/_next/static/media/{KaTeX_SansSerif-Bold.05a9.pc1j_zx9.woff2 → KaTeX_SansSerif-Bold.0h3wi2z_eouyg.woff2} +0 -0
  373. /package/out/_next/static/media/{KaTeX_SansSerif-Bold.0jcl-ayi1uun0.woff → KaTeX_SansSerif-Bold.1ovw5p-yjp56g.woff} +0 -0
  374. /package/out/_next/static/media/{KaTeX_SansSerif-Bold.0re8y.dm7.mt5.ttf → KaTeX_SansSerif-Bold.2d03q85pwxpti.ttf} +0 -0
  375. /package/out/_next/static/media/{KaTeX_SansSerif-Italic.0a0234dc3s62j.woff2 → KaTeX_SansSerif-Italic.0wkjc4dm2kcit.woff2} +0 -0
  376. /package/out/_next/static/media/{KaTeX_SansSerif-Italic.0judofdln9731.woff → KaTeX_SansSerif-Italic.1qavw__2zz8gk.woff} +0 -0
  377. /package/out/_next/static/media/{KaTeX_SansSerif-Italic.10z1iap9pfus8.ttf → KaTeX_SansSerif-Italic.3i-q087b23-m8.ttf} +0 -0
  378. /package/out/_next/static/media/{KaTeX_SansSerif-Regular.0h9yjlugq4q_e.woff → KaTeX_SansSerif-Regular.1i4afx8nk8n4r.woff} +0 -0
  379. /package/out/_next/static/media/{KaTeX_SansSerif-Regular.0v6gcj32-czft.woff2 → KaTeX_SansSerif-Regular.2peiewu59z3d-.woff2} +0 -0
  380. /package/out/_next/static/media/{KaTeX_SansSerif-Regular.0zm18kga42ebc.ttf → KaTeX_SansSerif-Regular.31pbu25feko_c.ttf} +0 -0
  381. /package/out/_next/static/media/{KaTeX_Script-Regular.0c4.h-mer83d_.woff2 → KaTeX_Script-Regular.11h14300o9pd0.woff2} +0 -0
  382. /package/out/_next/static/media/{KaTeX_Script-Regular.0q14y6zkzlpob.ttf → KaTeX_Script-Regular.28p_x7iz71ofe.ttf} +0 -0
  383. /package/out/_next/static/media/{KaTeX_Script-Regular.0ze6v4r_-99oy.woff → KaTeX_Script-Regular.3110jb9c-bxna.woff} +0 -0
  384. /package/out/_next/static/media/{KaTeX_Size1-Regular.013x6a4ierotp.woff2 → KaTeX_Size1-Regular.03lhvx36ekcou.woff2} +0 -0
  385. /package/out/_next/static/media/{KaTeX_Size1-Regular.0kidw0oi.m68o.woff → KaTeX_Size1-Regular.1slf4bh0hc6vm.woff} +0 -0
  386. /package/out/_next/static/media/{KaTeX_Size1-Regular.0m6y-i6wfokni.ttf → KaTeX_Size1-Regular.1y57-ck23ey8c.ttf} +0 -0
  387. /package/out/_next/static/media/{KaTeX_Size2-Regular.0blpmluwilgbg.woff → KaTeX_Size2-Regular.0-kwyvx03omo8.woff} +0 -0
  388. /package/out/_next/static/media/{KaTeX_Size2-Regular.0d5inmyp-tyv3.woff2 → KaTeX_Size2-Regular.14s5gg-puz6h-.woff2} +0 -0
  389. /package/out/_next/static/media/{KaTeX_Size2-Regular.0wnhnvj-.k9d5.ttf → KaTeX_Size2-Regular.2u0s-b07k2o9m.ttf} +0 -0
  390. /package/out/_next/static/media/{KaTeX_Size3-Regular.01h0xm_sfctj3.woff → KaTeX_Size3-Regular.04o9a_02gu_e8.woff} +0 -0
  391. /package/out/_next/static/media/{KaTeX_Size3-Regular.0iukctyhw5j56.woff2 → KaTeX_Size3-Regular.1n1rgzz84z8r9.woff2} +0 -0
  392. /package/out/_next/static/media/{KaTeX_Size3-Regular.0jl8mqyf4gzpn.ttf → KaTeX_Size3-Regular.1pkn-dge4q0fv.ttf} +0 -0
  393. /package/out/_next/static/media/{KaTeX_Size4-Regular.0w3.rb_c4stzk.woff2 → KaTeX_Size4-Regular.2sgotkdv3dcyv.woff2} +0 -0
  394. /package/out/_next/static/media/{KaTeX_Size4-Regular.0wr_9l81-mu06.ttf → KaTeX_Size4-Regular.2uelkfk2yna5e.ttf} +0 -0
  395. /package/out/_next/static/media/{KaTeX_Size4-Regular.12tvaesf3.zl3.woff → KaTeX_Size4-Regular.3p2r1l7xmebxv.woff} +0 -0
  396. /package/out/_next/static/media/{KaTeX_Typewriter-Regular.0c4zdxz~8frhm.woff2 → KaTeX_Typewriter-Regular.11gr2d2wuwz77.woff2} +0 -0
  397. /package/out/_next/static/media/{KaTeX_Typewriter-Regular.0cgrzn5l3kao5.woff → KaTeX_Typewriter-Regular.12f8myjij3617.woff} +0 -0
  398. /package/out/_next/static/media/{KaTeX_Typewriter-Regular.128~qc3858otl.ttf → KaTeX_Typewriter-Regular.3nee9kjfy6nm8.ttf} +0 -0
  399. /package/out/{pwa-512x512.png → avatar.png} +0 -0
  400. /package/public/{pwa-512x512.png → avatar.png} +0 -0
@@ -1,19 +1,19 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[14232,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"ErrorBoundary"]
3
- 3:I[52925,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"default"]
4
- 4:I[39756,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"default"]
5
- 5:I[37457,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"default"]
6
- 6:I[36768,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js","/_next/static/chunks/0ao1lbi4b.sfa.js"],"default"]
7
- 8:I[97367,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"OutletBoundary"]
2
+ 2:I[14232,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"ErrorBoundary"]
3
+ 3:I[52925,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"default"]
4
+ 4:I[39756,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"default"]
5
+ 5:I[37457,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"default"]
6
+ 6:I[36768,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js","/_next/static/chunks/1v-molv0hbcjl.js"],"default"]
7
+ 8:I[97367,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"OutletBoundary"]
8
8
  9:"$Sreact.suspense"
9
- c:I[97367,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"ViewportBoundary"]
10
- e:I[97367,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"MetadataBoundary"]
11
- 10:I[68027,["/_next/static/chunks/0puk.7e.tr2zy.js","/_next/static/chunks/0snehvtvu1n4q.js","/_next/static/chunks/0t2xr05rlu96l.js","/_next/static/chunks/10f-t2n4y1zx8.js"],"default",1]
12
- :HL["/_next/static/chunks/0adx~d-j05c9d.css","style"]
13
- :HL["/_next/static/chunks/0xdwau5k2augv.css","style"]
14
- :HL["/_next/static/chunks/0ukyg~tkm~h2m.css","style"]
9
+ c:I[97367,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"ViewportBoundary"]
10
+ e:I[97367,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"MetadataBoundary"]
11
+ 10:I[68027,["/_next/static/chunks/088-v8tzobg5g.js","/_next/static/chunks/3g0c367tk4esf.js","/_next/static/chunks/2im7c515bo69p.js"],"default",1]
12
+ :HL["/_next/static/chunks/23kls47vn_rpg.css","style"]
13
+ :HL["/_next/static/chunks/2vm9uslik2wfi.css","style"]
14
+ :HL["/_next/static/chunks/2nbju8t9-ux58.css","style"]
15
15
  :HC["/",""]
16
- 0:{"P":null,"c":["","web3","tools",""],"q":"","i":false,"f":[[["",{"children":["web3",{"children":["tools",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0adx~d-j05c9d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0xdwau5k2augv.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0puk.7e.tr2zy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0snehvtvu1n4q.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0t2xr05rlu96l.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/10f-t2n4y1zx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"zh-CN","suppressHydrationWarning":true,"data-scroll-behavior":"smooth","children":[["$","head",null,{"children":[["$","meta",null,{"charSet":"UTF-8"}],["$","meta",null,{"name":"viewport","content":"width=device-width, initial-scale=1.0"}],["$","link",null,{"rel":"icon","href":"/favicon.ico"}],["$","meta",null,{"name":"theme-color","content":"#5e6ad2"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n var theme = localStorage.getItem('theme');\n if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {\n document.documentElement.setAttribute('data-theme', 'dark');\n }\n })();\n "}}]]}],["$","body",null,{"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n window.onerror = function(message, source, lineno, colno, error) {\n console.error('[Global Error]', { message, source, lineno, colno, error });\n };\n window.onunhandledrejection = function(event) {\n console.error('[Unhandled Promise Rejection]', event.reason);\n };\n "}}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$L6",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}]]}],{"children":[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0ukyg~tkm~h2m.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L7",null,["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,"$@b"]},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lc",null,{"children":"$Ld"}],["$","div",null,{"hidden":true,"children":["$","$Le",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Lf"}]}]}],null]}],false]],"m":"$undefined","G":["$10",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0adx~d-j05c9d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/0xdwau5k2augv.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"sSvbBrwXZY-4lBmcHshga"}
16
+ 0:{"P":null,"c":["","web3","tools",""],"q":"","i":false,"f":[[["",{"children":["web3",{"children":["tools",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/23kls47vn_rpg.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/2vm9uslik2wfi.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/088-v8tzobg5g.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3g0c367tk4esf.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/2im7c515bo69p.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"zh-CN","suppressHydrationWarning":true,"data-scroll-behavior":"smooth","children":[["$","head",null,{"children":[["$","meta",null,{"charSet":"UTF-8"}],["$","meta",null,{"name":"viewport","content":"width=device-width, initial-scale=1.0"}],["$","link",null,{"rel":"icon","href":"/logo.svg","type":"image/svg+xml"}],["$","meta",null,{"name":"theme-color","content":"#5e6ad2"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n var theme = localStorage.getItem('theme');\n if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {\n document.documentElement.setAttribute('data-theme', 'dark');\n }\n })();\n "}}]]}],["$","body",null,{"children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n window.onerror = function(message, source, lineno, colno, error) {\n console.error('[Global Error]', { message, source, lineno, colno, error });\n };\n window.onunhandledrejection = function(event) {\n console.error('[Unhandled Promise Rejection]', event.reason);\n };\n "}}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$L6",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}]]}],{"children":[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2nbju8t9-ux58.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L7",null,["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,"$@b"]},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lc",null,{"children":"$Ld"}],["$","div",null,{"hidden":true,"children":["$","$Le",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Lf"}]}]}],null]}],false]],"m":"$undefined","G":["$10",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/23kls47vn_rpg.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/2vm9uslik2wfi.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NPIlpdzQWkiVZpgfhlypH"}
17
17
  7:E{"digest":"NEXT_REDIRECT;replace;/web3;307;"}
18
18
  11:[]
19
19
  b:"$W11"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "most-box",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "MostBox - P2P file sharing application",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
@@ -17,9 +17,9 @@
17
17
  ],
18
18
  "scripts": {
19
19
  "start": "next dev",
20
+ "server": "node --watch server/index.js",
20
21
  "dev": "next dev",
21
22
  "build": "next build",
22
- "server": "node --watch server/index.js",
23
23
  "serve": "next build && node server/index.js",
24
24
  "test": "node --test server/tests/**/*.test.js",
25
25
  "test:unit": "node --test server/tests/unit/*.test.js",
@@ -48,19 +48,19 @@
48
48
  "dependencies": {
49
49
  "@dicebear/collection": "^9.4.2",
50
50
  "@dicebear/core": "^9.4.2",
51
- "@hono/node-server": "^2.0.0",
52
- "b4a": "^1.8.0",
51
+ "@hono/node-server": "^2.0.4",
52
+ "b4a": "^1.8.1",
53
53
  "busboy": "^1.6.0",
54
- "corestore": "^7.9.2",
55
- "dayjs": "^1.11.20",
54
+ "corestore": "^7.10.0",
55
+ "dayjs": "^1.11.21",
56
56
  "ethers": "^6.16.0",
57
57
  "eventemitter3": "^5.0.4",
58
58
  "hono": "^4.12.23",
59
- "hypercore": "^11.28.1",
59
+ "hypercore": "^11.33.1",
60
60
  "hyperdrive": "^13.3.2",
61
61
  "hyperswarm": "^4.17.0",
62
- "ipfs-unixfs-importer": "^16.1.5",
63
- "multiformats": "^13.4.2",
62
+ "ipfs-unixfs-importer": "^17.0.1",
63
+ "multiformats": "^14.0.0",
64
64
  "tweetnacl": "^1.0.3",
65
65
  "ws": "^8.21.0"
66
66
  },
@@ -68,27 +68,27 @@
68
68
  "@electron/rebuild": "^4.0.4",
69
69
  "@eslint/js": "^10.0.1",
70
70
  "@iconify/react": "^6.0.2",
71
- "@mantine/hooks": "^9.1.0",
72
- "@milkdown/crepe": "^7.21.1",
73
- "@milkdown/utils": "^7.21.1",
74
- "@types/react": "19.2.14",
75
- "concurrently": "^9.2.1",
76
- "electron": "^41.3.0",
71
+ "@mantine/hooks": "^9.3.0",
72
+ "@milkdown/crepe": "^7.21.2",
73
+ "@milkdown/utils": "^7.21.2",
74
+ "@types/react": "^19.2.16",
75
+ "concurrently": "^10.0.3",
76
+ "electron": "^42.3.3",
77
77
  "electron-builder": "^26.8.1",
78
78
  "esbuild": "^0.28.0",
79
- "eslint": "^10.2.1",
80
- "globals": "^17.5.0",
79
+ "eslint": "^10.4.1",
80
+ "globals": "^17.6.0",
81
81
  "ky": "^2.0.2",
82
- "lucide-react": "^1.9.0",
83
- "next": "^16.2.6",
82
+ "lucide-react": "^1.17.0",
83
+ "next": "^16.2.7",
84
84
  "prettier": "^3.8.3",
85
85
  "qrcode.react": "^4.2.0",
86
- "react": "^19.2.5",
87
- "react-dom": "^19.2.5",
86
+ "react": "^19.2.7",
87
+ "react-dom": "^19.2.7",
88
88
  "typescript": "6.0.3",
89
- "typescript-eslint": "^8.59.2",
90
- "wait-on": "^9.0.5",
91
- "zustand": "^5.0.12"
89
+ "typescript-eslint": "^8.60.1",
90
+ "wait-on": "^9.0.10",
91
+ "zustand": "^5.0.14"
92
92
  },
93
93
  "overrides": {
94
94
  "brace-expansion": "5.0.6",
@@ -128,7 +128,7 @@
128
128
  "nsis"
129
129
  ],
130
130
  "artifactName": "${productName}-${version}-win-${arch}-setup.${ext}",
131
- "icon": "public/favicon.ico"
131
+ "icon": "public/logo.ico"
132
132
  },
133
133
  "nsis": {
134
134
  "oneClick": false,
@@ -148,7 +148,7 @@
148
148
  ]
149
149
  }
150
150
  ],
151
- "icon": "public/pwa-512x512.png",
151
+ "icon": "public/logo-512.png",
152
152
  "category": "public.app-category.utilities"
153
153
  },
154
154
  "dmg": {
@@ -176,7 +176,7 @@
176
176
  ]
177
177
  }
178
178
  ],
179
- "icon": "public/pwa-512x512.png",
179
+ "icon": "public/logo-512.png",
180
180
  "category": "Utility"
181
181
  }
182
182
  }
Binary file
Binary file
Binary file
@@ -0,0 +1,12 @@
1
+ <svg
2
+ width="512"
3
+ height="512"
4
+ viewBox="0 0 24 24"
5
+ fill="none"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <rect x="2" y="2" width="8" height="8" rx="2" fill="#5e6ad2" opacity="0.4" />
9
+ <rect x="14" y="2" width="8" height="8" rx="2" fill="#5e6ad2" opacity="0.7" />
10
+ <rect x="2" y="14" width="8" height="8" rx="2" fill="#5e6ad2" opacity="0.7" />
11
+ <rect x="14" y="14" width="8" height="8" rx="2" fill="#5e6ad2" />
12
+ </svg>
@@ -73,7 +73,7 @@ export function parseMostLink(link) {
73
73
  return { cid: '', error: validation.error }
74
74
  }
75
75
 
76
- if (!fileName) {
76
+ if (!fileName || !fileName.trim()) {
77
77
  return { cid: '', error: 'filename is required' }
78
78
  }
79
79
 
@@ -3,7 +3,8 @@ const RANKS = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
3
3
  const STRAIGHT_RANKS = RANKS.filter(rank => rank !== '2')
4
4
  const RANK_VALUE = new Map(RANKS.map((rank, index) => [rank, index + 3]))
5
5
  const INITIAL_HAND_SIZE = 5
6
- const SEALED_PENALTY = 15
6
+ const SEALED_PENALTY = 20
7
+ const INITIAL_SCORE = 1000
7
8
 
8
9
  export function createGanDengYanRoom({
9
10
  roomCode,
@@ -31,7 +32,7 @@ export function createGanDengYanRoom({
31
32
  seat,
32
33
  hand: [],
33
34
  handCount: 0,
34
- score: 0,
35
+ score: INITIAL_SCORE,
35
36
  playedCards: 0,
36
37
  })),
37
38
  deck: [],
@@ -64,7 +65,7 @@ export function syncGanDengYanLobby(room, players = []) {
64
65
  seat,
65
66
  hand: [],
66
67
  handCount: 0,
67
- score: currentScores.get(player.address) || 0,
68
+ score: currentScores.get(player.address) ?? INITIAL_SCORE,
68
69
  playedCards: 0,
69
70
  }))
70
71
  state.seq += 1
@@ -127,6 +128,7 @@ export function playGanDengYanCards(room, address, cardIds) {
127
128
  return { ok: false, error: '出的牌压不过上一手', state: publicGanDengYanRoom(state) }
128
129
  }
129
130
 
131
+ cards.sort(compareCards)
130
132
  player.hand = player.hand.filter(card => !cardIds.includes(card.id))
131
133
  player.handCount = player.hand.length
132
134
  player.playedCards += cards.length
@@ -187,7 +189,9 @@ export function publicGanDengYanRoom(room) {
187
189
  ownerAddress: room.ownerAddress,
188
190
  status: room.status,
189
191
  seq: Number(room.seq || 1),
192
+ deck: Array.isArray(room.deck) ? room.deck.map(publicCard) : [],
190
193
  deckCount: room.deck?.length || Number(room.deckCount || 0),
194
+ discard: Array.isArray(room.discard) ? room.discard.map(publicCard) : [],
191
195
  discardCount: room.discard?.length || Number(room.discardCount || 0),
192
196
  currentSeat: Number(room.currentSeat || 0),
193
197
  lastWinnerSeat:
@@ -216,7 +220,7 @@ export function publicGanDengYanRoom(room) {
216
220
  name: player.name,
217
221
  seat: player.seat,
218
222
  handCount: player.hand?.length ?? player.handCount ?? 0,
219
- score: Number(player.score || 0),
223
+ score: Number(player.score ?? INITIAL_SCORE),
220
224
  playedCards: Number(player.playedCards || 0),
221
225
  hand: Array.isArray(player.hand) ? player.hand.map(publicCard) : [],
222
226
  })),
@@ -236,7 +240,7 @@ export function hydrateGanDengYanRoom(input) {
236
240
  players: Array.isArray(input.players)
237
241
  ? input.players.map(normalizeRoundPlayer).filter(Boolean)
238
242
  : [],
239
- deck: Array.isArray(input.deck) ? input.deck.map(normalizeCard).filter(Boolean) : [],
243
+ deck: Array.isArray(input.deck) ? input.deck.map(expandCompactCard).filter(Boolean) : [],
240
244
  discard: Array.isArray(input.discard)
241
245
  ? input.discard.map(normalizeCard).filter(Boolean)
242
246
  : [],
@@ -273,6 +277,7 @@ export function hydrateGanDengYanRoom(input) {
273
277
 
274
278
  export function analyzeCards(cards) {
275
279
  if (!cards?.length) return null
280
+ cards = [...cards].sort(compareCards)
276
281
  const jokerCount = cards.filter(isJoker).length
277
282
  const normals = cards.filter(card => !isJoker(card))
278
283
  if (normals.length === 0) return null
@@ -302,15 +307,22 @@ function analyzeBomb(cards, normals, jokerCount) {
302
307
 
303
308
  function analyzeStraight(cards) {
304
309
  if (cards.length < 3) return null
310
+ const jokerCount = cards.filter(isJoker).length
311
+ const normals = cards.filter(card => !isJoker(card))
305
312
  for (let start = 0; start <= STRAIGHT_RANKS.length - cards.length; start += 1) {
306
313
  const values = STRAIGHT_RANKS.slice(start, start + cards.length).map(rank =>
307
314
  RANK_VALUE.get(rank)
308
315
  )
309
- if (
310
- cards.every(
311
- (card, index) => isJoker(card) || cardValue(card) === values[index]
312
- )
313
- ) {
316
+ const remaining = [...values]
317
+ let matched = 0
318
+ for (const card of normals) {
319
+ const idx = remaining.indexOf(cardValue(card))
320
+ if (idx !== -1) {
321
+ remaining.splice(idx, 1)
322
+ matched += 1
323
+ }
324
+ }
325
+ if (matched + jokerCount === cards.length && remaining.length === jokerCount) {
314
326
  return makeCombo('straight', values.at(-1), cards.length, values)
315
327
  }
316
328
  }
@@ -320,16 +332,23 @@ function analyzeStraight(cards) {
320
332
  function analyzePairStraight(cards) {
321
333
  if (cards.length < 4 || cards.length % 2 !== 0) return null
322
334
  const pairCount = cards.length / 2
335
+ const jokerCount = cards.filter(isJoker).length
336
+ const normals = cards.filter(card => !isJoker(card))
323
337
  for (let start = 0; start <= STRAIGHT_RANKS.length - pairCount; start += 1) {
324
338
  const pairValues = STRAIGHT_RANKS.slice(start, start + pairCount).map(rank =>
325
339
  RANK_VALUE.get(rank)
326
340
  )
327
- const values = pairValues.flatMap(value => [value, value])
328
- if (
329
- cards.every(
330
- (card, index) => isJoker(card) || cardValue(card) === values[index]
331
- )
332
- ) {
341
+ const remaining = pairValues.flatMap(value => [value, value])
342
+ let matched = 0
343
+ for (const card of normals) {
344
+ const idx = remaining.indexOf(cardValue(card))
345
+ if (idx !== -1) {
346
+ remaining.splice(idx, 1)
347
+ matched += 1
348
+ }
349
+ }
350
+ if (matched + jokerCount === cards.length && remaining.length === jokerCount) {
351
+ const values = pairValues.flatMap(value => [value, value])
333
352
  return makeCombo('pairStraight', pairValues.at(-1), cards.length, values)
334
353
  }
335
354
  }
@@ -359,7 +378,10 @@ function canBeat(combo, tableCombo) {
359
378
  }
360
379
  if (combo.length !== tableCombo.length) return false
361
380
  if (combo.type === 'single' || combo.type === 'pair') {
362
- return combo.value === nextValue(tableCombo.value) || combo.value === RANK_VALUE.get('2')
381
+ return (
382
+ combo.value === nextValue(tableCombo.value) ||
383
+ (combo.value === RANK_VALUE.get('2') && tableCombo.value !== RANK_VALUE.get('2'))
384
+ )
363
385
  }
364
386
  return combo.value === nextValue(tableCombo.value)
365
387
  }
@@ -388,7 +410,7 @@ function normalizeRoundPlayer(input) {
388
410
  seat: Number(input.seat || 0),
389
411
  hand: Array.isArray(input.hand) ? input.hand.map(normalizeCard).filter(Boolean) : [],
390
412
  handCount: Number(input.handCount || 0),
391
- score: Number(input.score || 0),
413
+ score: Number(input.score ?? INITIAL_SCORE),
392
414
  playedCards: Number(input.playedCards || 0),
393
415
  }
394
416
  }
@@ -444,7 +466,7 @@ function finishGame(room, winner) {
444
466
  for (const player of orderedPlayers(room)) {
445
467
  if (player.seat === winner.seat) continue
446
468
  const sealed = player.playedCards === 0
447
- const loss = sealed ? SEALED_PENALTY : player.hand.length * room.baseScore
469
+ const loss = sealed ? SEALED_PENALTY : player.hand.length * room.baseScore * 0.5
448
470
  player.score -= loss
449
471
  winnerGain += loss
450
472
  losers.push({
@@ -549,6 +571,14 @@ function suitValue(suit) {
549
571
  return { D: 0, C: 1, H: 2, S: 3, Joker: 4 }[suit] || 0
550
572
  }
551
573
 
574
+ function expandCompactCard(input) {
575
+ if (typeof input === 'string') {
576
+ const [suit, rank] = input.split('-')
577
+ return normalizeCard({ id: input, suit, rank })
578
+ }
579
+ return normalizeCard(input)
580
+ }
581
+
552
582
  function publicCard(card) {
553
583
  return {
554
584
  id: card.id,
@@ -672,16 +672,16 @@ export function createApp(engine, options = {}) {
672
672
  return c.json({ error: parsed.error }, 400)
673
673
  }
674
674
 
675
- const existingFile = engine
676
- .getPublishedFiles({ ownerAddress: c.get('userAddress') })
677
- .find(f => f.cid === parsed.cid)
678
- if (existingFile) {
675
+ const localAvailability = await engine.getLocalCidAvailability(body.link, {
676
+ ownerAddress: c.get('userAddress'),
677
+ })
678
+ if (localAvailability) {
679
679
  return c.json({
680
680
  success: true,
681
681
  available: true,
682
682
  cid: parsed.cid,
683
- fileName: existingFile.fileName,
684
- size: Number(existingFile.size) || null,
683
+ fileName: localAvailability.fileName,
684
+ size: Number(localAvailability.size) || null,
685
685
  alreadyExists: true,
686
686
  })
687
687
  }
@@ -697,8 +697,11 @@ export function createApp(engine, options = {}) {
697
697
  }
698
698
 
699
699
  try {
700
+ const timeout =
701
+ body.timeout === undefined ? undefined : Number(body.timeout)
700
702
  const result = await engine.checkDownloadAvailability(body.link, {
701
703
  ownerAddress: c.get('userAddress'),
704
+ timeout: Number.isFinite(timeout) && timeout > 0 ? timeout : undefined,
702
705
  })
703
706
  return c.json({ success: true, ...result })
704
707
  } catch (err) {
@@ -719,11 +722,13 @@ export function createApp(engine, options = {}) {
719
722
  return c.json({ error: parsed.error }, 400)
720
723
  }
721
724
 
722
- const existingFile = engine
723
- .getPublishedFiles({ ownerAddress: c.get('userAddress') })
724
- .find(f => f.cid === parsed.cid)
725
- if (existingFile) {
726
- console.log(`[MostBox] File already exists: ${existingFile.fileName}`)
725
+ const localAvailability = await engine.getLocalCidAvailability(body.link, {
726
+ ownerAddress: c.get('userAddress'),
727
+ })
728
+ if (localAvailability) {
729
+ console.log(
730
+ `[MostBox] CID content already exists locally: ${parsed.cid}`
731
+ )
727
732
  try {
728
733
  const result = await engine.downloadFile(body.link, taskId, {
729
734
  ownerAddress: c.get('userAddress'),
@@ -801,7 +806,7 @@ export function createApp(engine, options = {}) {
801
806
  })
802
807
  return c.json({ success: true, ...result })
803
808
  } catch (err) {
804
- return c.json({ error: err.message }, 400)
809
+ return badRequestOrAppError(c, err)
805
810
  }
806
811
  })
807
812
 
@@ -950,7 +955,11 @@ export function createApp(engine, options = {}) {
950
955
  const result = await engine.createChannel(
951
956
  body.name.trim(),
952
957
  body.type || 'personal',
953
- { ownerAddress: c.get('userAddress') }
958
+ {
959
+ ownerAddress: c.get('userAddress'),
960
+ displayName: body.displayName,
961
+ avatar: body.avatar,
962
+ }
954
963
  )
955
964
  return c.json({ success: true, ...result })
956
965
  } catch (err) {
@@ -996,6 +1005,18 @@ export function createApp(engine, options = {}) {
996
1005
  }
997
1006
  })
998
1007
 
1008
+ app.get('/api/channels/:name/members', c => {
1009
+ try {
1010
+ return c.json(
1011
+ engine.getChannelMembers(c.req.param('name'), {
1012
+ ownerAddress: c.get('userAddress'),
1013
+ })
1014
+ )
1015
+ } catch (err) {
1016
+ return badRequestOrAppError(c, err)
1017
+ }
1018
+ })
1019
+
999
1020
  app.post('/api/channels/:name/messages', async c => {
1000
1021
  const name = c.req.param('name')
1001
1022
  const body = await c.req.json()
@@ -1020,7 +1041,11 @@ export function createApp(engine, options = {}) {
1020
1041
  body.content,
1021
1042
  body.author,
1022
1043
  body.authorName,
1023
- { ownerAddress: c.get('userAddress'), attachment: body.attachment }
1044
+ {
1045
+ ownerAddress: c.get('userAddress'),
1046
+ attachment: body.attachment,
1047
+ avatar: body.avatar,
1048
+ }
1024
1049
  )
1025
1050
  return c.json({ success: true, message })
1026
1051
  } catch (err) {
@@ -1071,7 +1096,7 @@ export function createApp(engine, options = {}) {
1071
1096
  })
1072
1097
  return c.json({ success: true, ...result })
1073
1098
  } catch (err) {
1074
- return c.json({ error: err.message }, 400)
1099
+ return badRequestOrAppError(c, err)
1075
1100
  }
1076
1101
  })
1077
1102
 
@@ -137,6 +137,43 @@ export function buildOpenApiSpec(appPort) {
137
137
  responses: { 200: { description: 'Pull task result' } },
138
138
  },
139
139
  },
140
+ '/api/files': {
141
+ get: {
142
+ summary: 'List published files for the authenticated local user',
143
+ responses: { 200: { description: 'Published file list' } },
144
+ },
145
+ },
146
+ '/api/publish': {
147
+ post: {
148
+ summary: 'Publish a file and start seeding by CID',
149
+ responses: { 200: { description: 'Published CID and most:// link' } },
150
+ },
151
+ },
152
+ '/api/download/check': {
153
+ post: {
154
+ summary:
155
+ 'Check whether a most:// link is locally available or discoverable',
156
+ responses: { 200: { description: 'Download availability result' } },
157
+ },
158
+ },
159
+ '/api/download': {
160
+ post: {
161
+ summary: 'Start downloading a most:// link',
162
+ responses: { 200: { description: 'Download task result' } },
163
+ },
164
+ },
165
+ '/api/download/cancel': {
166
+ post: {
167
+ summary: 'Cancel an active download task',
168
+ responses: { 200: { description: 'Cancellation result' } },
169
+ },
170
+ },
171
+ '/api/files/{cid}/download': {
172
+ get: {
173
+ summary: 'Read a locally held file by CID',
174
+ responses: { 200: { description: 'File bytes' } },
175
+ },
176
+ },
140
177
  },
141
178
  }
142
179
  }
@@ -46,6 +46,7 @@ export async function parseMultipartBusboy(req, maxUploadSize = MAX_FILE_SIZE) {
46
46
 
47
47
  const busboy = Busboy({
48
48
  headers: req.headers,
49
+ preservePath: true,
49
50
  limits: {
50
51
  fileSize: maxUploadSize,
51
52
  files: 1,