most-box 0.2.2 → 0.2.4

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 (109) hide show
  1. package/README.md +3 -26
  2. package/electron/main.js +366 -30
  3. package/electron/preload.js +16 -1
  4. package/electron/updateChecker.js +18 -11
  5. package/electron/updateChecker.test.js +23 -7
  6. package/out/admin/index.html +0 -0
  7. package/out/app/index.html +0 -0
  8. package/out/assets/AppShell-gILTcRs-.js +1 -0
  9. package/out/assets/FilePreviewOverlay-CM-fcIaD.js +1 -0
  10. package/out/assets/LanguageToggle-B99eQcTE.js +1 -0
  11. package/out/assets/MarketingHeader-Q2cpkqAM.js +1 -0
  12. package/out/assets/MarketingLayout-X3Nj2JvA.js +1 -0
  13. package/out/assets/{MarketingThemeToggle-C6fggkl7.js → MarketingThemeToggle-z4jr4-vt.js} +1 -1
  14. package/out/assets/{MilkdownEditor-Cfze75zl.js → MilkdownEditor-Bv2VA3bu.js} +1 -1
  15. package/out/assets/{OpenSidebarButton-DDuALgJ2.js → OpenSidebarButton-CaQJk5LD.js} +1 -1
  16. package/out/assets/{SidebarAccount-bo1ypzrJ.js → SidebarAccount-CpNVqNva.js} +1 -1
  17. package/out/assets/arrow-right-mNO53HQi.js +1 -0
  18. package/out/assets/{circle-alert-BQoSDxUe.js → circle-alert-CofRTRHr.js} +1 -1
  19. package/out/assets/cloud-DAGFCFIp.js +1 -0
  20. package/out/assets/{copy-BtJHJnqH.js → copy-5aEv78Eq.js} +1 -1
  21. package/out/assets/{download-Bg-OdoxM.js → download-Bhqn6hL1.js} +1 -1
  22. package/out/assets/{downloadValidation-CUvbvj9f.js → downloadValidation-xzpa5rap.js} +1 -1
  23. package/out/assets/{external-link-m8ZIQe4p.js → external-link-CNR21yFA.js} +1 -1
  24. package/out/assets/{file-text-DG1orIkZ.js → file-text-CFfvvCnM.js} +1 -1
  25. package/out/assets/folder-BGJCjyba.js +1 -0
  26. package/out/assets/{hard-drive-BB-sllXA.js → hard-drive-4vHpA5kz.js} +1 -1
  27. package/out/assets/index-CgErXULe.css +1 -0
  28. package/out/assets/index-DN0kD5zr.js +31 -0
  29. package/out/assets/{index.lazy-BTndBeBF.js → index.lazy-0DsJzEoI.js} +1 -1
  30. package/out/assets/{index.lazy-DfsgyiMN.js → index.lazy-CJBRtbWA.js} +1 -1
  31. package/out/assets/{index.lazy-DejOniAm.js → index.lazy-CPV-dZxo.js} +1 -1
  32. package/out/assets/{index.lazy-DVOcrcEB.js → index.lazy-CQavt0-9.js} +2 -2
  33. package/out/assets/index.lazy-CUq9lbK_.js +1 -0
  34. package/out/assets/index.lazy-CxpNXlwa.js +1 -0
  35. package/out/assets/index.lazy-DOgKxDuF.js +1 -0
  36. package/out/assets/index.lazy-Dzf-q-Vf.js +1 -0
  37. package/out/assets/index.lazy-GtegOPkJ.js +2 -0
  38. package/out/assets/index.lazy-H7NATHUs.js +1 -0
  39. package/out/assets/index.lazy-b_N8nrYw.js +1 -0
  40. package/out/assets/index.lazy-erexqght.js +3 -0
  41. package/out/assets/index.lazy-s3nUpCQ1.js +1 -0
  42. package/out/assets/{key-round-DIQ3Xt5F.js → key-round-BpSdpOHi.js} +1 -1
  43. package/out/assets/loader-ByMmV2_4.js +1 -0
  44. package/out/assets/{lock-tf1t2yuy.js → lock-C0pdaery.js} +1 -1
  45. package/out/assets/{message-square-DaQH7q-P.js → message-square-Eu86zZup.js} +1 -1
  46. package/out/assets/{mp-DvFTsIL9.js → mp-DjXDNjls.js} +1 -1
  47. package/out/assets/{music-DaFvU2DL.js → music-Btrhub6z.js} +1 -1
  48. package/out/assets/{notebook-pen-CqEFOHKx.js → notebook-pen-CfdFgaDE.js} +1 -1
  49. package/out/assets/play-D5r9Yvbq.js +1 -0
  50. package/out/assets/plus-Mlh7r_bm.js +1 -0
  51. package/out/assets/{refresh-cw-roxAhABl.js → refresh-cw--JB8k6mH.js} +1 -1
  52. package/out/assets/{save-DR0O9ReR.js → save-DN4eprSt.js} +1 -1
  53. package/out/assets/search-CbzMyENy.js +1 -0
  54. package/out/assets/{send-m1XCcuPn.js → send-D8p6f8OD.js} +1 -1
  55. package/out/assets/{shield-check-BwcvTU4U.js → shield-check-c0labdRH.js} +1 -1
  56. package/out/assets/{trash-2-CNpsqYc1.js → trash-2-zdhWec_U.js} +1 -1
  57. package/out/assets/{triangle-alert-DP9EP7IM.js → triangle-alert-D-qigSSn.js} +1 -1
  58. package/out/assets/upload-BD23c5Pz.js +1 -0
  59. package/out/assets/{useChannelMessages-46C52EyL.js → useChannelMessages-DS1ntAKN.js} +2 -2
  60. package/out/assets/useGameRoom-BSPkCY3n.js +1 -0
  61. package/out/assets/userProfile-BmzBA_Bk.js +1 -0
  62. package/out/assets/{userStore-C4vdYsQp.js → userStore-q0BBZsIV.js} +1 -1
  63. package/out/assets/{wallet-CozFU6yK.js → wallet-DmZMdK9A.js} +1 -1
  64. package/out/assets/{wifi-DIR3g_8A.js → wifi-CVqaPDcv.js} +1 -1
  65. package/out/chat/index.html +0 -0
  66. package/out/chat/join/index.html +0 -0
  67. package/out/download/index.html +2 -2
  68. package/out/game/gandengyan/index.html +0 -0
  69. package/out/game/index.html +0 -0
  70. package/out/game/zhajinhua/index.html +0 -0
  71. package/out/index.html +2 -2
  72. package/out/note/index.html +0 -0
  73. package/out/ping/index.html +2 -2
  74. package/out/profile/index.html +0 -0
  75. package/out/web3/index.html +0 -0
  76. package/package.json +8 -1
  77. package/server/index.js +2 -2
  78. package/server/src/core/syncTimestamp.js +10 -0
  79. package/server/src/http/nodeStatus.js +16 -16
  80. package/server/src/http/routePolicy.js +2 -2
  81. package/server/src/http/routes/nodeRoutes.js +21 -19
  82. package/server/src/index.js +578 -960
  83. package/server/src/utils/accountBackup.js +134 -0
  84. package/server/src/utils/api.js +27 -1
  85. package/out/assets/AppShell-BOtfY12t.js +0 -1
  86. package/out/assets/FilePreviewOverlay-C5qK9HAE.js +0 -1
  87. package/out/assets/LanguageToggle-Di5b88mK.js +0 -1
  88. package/out/assets/MarketingHeader-BOytKcCc.js +0 -1
  89. package/out/assets/MarketingLayout-B8m1Q7Pa.js +0 -1
  90. package/out/assets/arrow-right-RldN7Rwi.js +0 -1
  91. package/out/assets/cloud-DHoTMeZY.js +0 -1
  92. package/out/assets/index-C0xqKeu-.css +0 -1
  93. package/out/assets/index-CrAXrmfP.js +0 -31
  94. package/out/assets/index.lazy-0Njp0U6I.js +0 -1
  95. package/out/assets/index.lazy-Bq39jYTl.js +0 -1
  96. package/out/assets/index.lazy-Bu93oGzJ.js +0 -2
  97. package/out/assets/index.lazy-BvdBwgHx.js +0 -1
  98. package/out/assets/index.lazy-CIx8ist6.js +0 -3
  99. package/out/assets/index.lazy-DK7R297q.js +0 -1
  100. package/out/assets/index.lazy-DpNIiSXF.js +0 -1
  101. package/out/assets/index.lazy-Vnvz-t7T.js +0 -1
  102. package/out/assets/index.lazy-v7nBJ-sF.js +0 -1
  103. package/out/assets/play-B7q6F75-.js +0 -1
  104. package/out/assets/plus-H2i2mspM.js +0 -1
  105. package/out/assets/search-ncblG-zw.js +0 -1
  106. package/out/assets/upload-V--8p13l.js +0 -1
  107. package/out/assets/useGameRoom-BtxPpfck.js +0 -1
  108. package/server/src/core/userSyncKeys.js +0 -36
  109. package/server/src/utils/noteBackup.js +0 -116
@@ -1,116 +0,0 @@
1
- import { mostDecode, mostEncode, mostSignMessage } from './mostWallet.js'
2
- import { calculateNoteCid } from './noteUtils.js'
3
-
4
- export const NOTE_BACKUP_API_URL = 'https://api.most.box/auth/backup'
5
-
6
- async function readBackupApiError(response, fallback) {
7
- const data = await response
8
- .clone()
9
- .json()
10
- .catch(() => null)
11
- return data?.error || fallback
12
- }
13
-
14
- export function encryptNotesBackup(notes, danger) {
15
- return mostEncode(JSON.stringify({ notes: notes || [] }), danger)
16
- }
17
-
18
- export function decryptNotesBackup(content, danger) {
19
- if (!String(content || '').startsWith('mp://1')) {
20
- throw new Error('无效的备份数据格式')
21
- }
22
-
23
- const decrypted = mostDecode(content, danger)
24
- if (!decrypted) {
25
- throw new Error('解密失败,请确认当前 Web3 登录账号正确')
26
- }
27
-
28
- const data = JSON.parse(decrypted)
29
- if (!Array.isArray(data.notes)) {
30
- throw new Error('备份数据缺少 notes')
31
- }
32
- return data
33
- }
34
-
35
- export async function calculateNotesBackupCid(notes) {
36
- return calculateNoteCid(JSON.stringify({ notes: notes || [] }))
37
- }
38
-
39
- export async function getBackupAuthHeaders(
40
- wallet,
41
- method,
42
- url = NOTE_BACKUP_API_URL
43
- ) {
44
- const timestamp = Date.now().toString()
45
- const path = new URL(url).pathname
46
- const message = `${timestamp}:${String(method).toUpperCase()}:${path}`
47
- const { address, signature } = await mostSignMessage(wallet.danger, message)
48
- return {
49
- Authorization: `${address},${timestamp},${signature}`,
50
- }
51
- }
52
-
53
- export async function buildNotesBackupUpload(wallet, notes) {
54
- const payload = JSON.stringify({ notes: notes || [] })
55
- const cid = await calculateNoteCid(payload)
56
- const encrypted = encryptNotesBackup(notes, wallet.danger)
57
- return {
58
- cid,
59
- body: encrypted,
60
- headers: {
61
- 'Content-Type': 'text/plain',
62
- 'x-backup-cid': cid,
63
- ...(await getBackupAuthHeaders(wallet, 'PUT', NOTE_BACKUP_API_URL)),
64
- },
65
- }
66
- }
67
-
68
- export async function uploadNotesBackup(
69
- wallet,
70
- notes,
71
- url = NOTE_BACKUP_API_URL
72
- ) {
73
- const upload = await buildNotesBackupUpload(wallet, notes)
74
- const response = await fetch(url, {
75
- method: 'PUT',
76
- headers: upload.headers,
77
- body: upload.body,
78
- })
79
- if (!response.ok) {
80
- throw new Error(await readBackupApiError(response, '云备份失败'))
81
- }
82
- return {
83
- cid: upload.cid,
84
- }
85
- }
86
-
87
- export async function downloadNotesBackup(wallet, url = NOTE_BACKUP_API_URL) {
88
- const response = await fetch(url, {
89
- method: 'GET',
90
- headers: await getBackupAuthHeaders(wallet, 'GET', url),
91
- })
92
- if (response.status === 404) {
93
- return {
94
- found: false,
95
- cid: '',
96
- time: 0,
97
- notes: [],
98
- }
99
- }
100
- if (!response.ok) {
101
- throw new Error(await readBackupApiError(response, '云端恢复失败'))
102
- }
103
-
104
- const encrypted = await response.text()
105
- if (!encrypted) {
106
- throw new Error('云端无备份数据')
107
- }
108
-
109
- const data = decryptNotesBackup(encrypted, wallet.danger)
110
- return {
111
- found: true,
112
- cid: response.headers.get('x-backup-cid') || '',
113
- time: Number(response.headers.get('x-backup-time') || 0),
114
- notes: data.notes,
115
- }
116
- }