dsh-zen-remote 2.3.11 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +45 -78
  2. package/README.md +94 -84
  3. package/README.zh-CN.md +90 -81
  4. package/bin/zen-remote.mjs +5 -0
  5. package/docs/interface.md +6 -6
  6. package/docs/remote-access.en.md +6 -4
  7. package/docs/remote-access.md +6 -4
  8. package/dsh-push.mjs +96 -10
  9. package/lib/adapters/dsh-better-sidebar/index.js +7 -3
  10. package/lib/adapters/dsh-better-sidebar/index.js.map +1 -1
  11. package/lib/admin-routes.js +10 -2
  12. package/lib/admin-routes.js.map +1 -1
  13. package/lib/cli/args.js +251 -0
  14. package/lib/cli/args.js.map +1 -0
  15. package/lib/cli/bootstrap.js +449 -0
  16. package/lib/cli/bootstrap.js.map +1 -0
  17. package/lib/cli/command-setup.js +484 -0
  18. package/lib/cli/command-setup.js.map +1 -0
  19. package/lib/cli/commands-client.js +359 -0
  20. package/lib/cli/commands-client.js.map +1 -0
  21. package/lib/cli/commands-host.js +1108 -0
  22. package/lib/cli/commands-host.js.map +1 -0
  23. package/lib/cli/commands-status.js +279 -0
  24. package/lib/cli/commands-status.js.map +1 -0
  25. package/lib/cli/config-writer.js +334 -0
  26. package/lib/cli/config-writer.js.map +1 -0
  27. package/lib/cli/context.js +10 -0
  28. package/lib/cli/context.js.map +1 -0
  29. package/lib/cli/i18n.js +620 -0
  30. package/lib/cli/i18n.js.map +1 -0
  31. package/lib/cli/ipc-client.js +160 -0
  32. package/lib/cli/ipc-client.js.map +1 -0
  33. package/lib/cli/ipc-server.js +464 -0
  34. package/lib/cli/ipc-server.js.map +1 -0
  35. package/lib/cli/main.js +245 -0
  36. package/lib/cli/main.js.map +1 -0
  37. package/lib/cli/qr-terminal.js +48 -0
  38. package/lib/cli/qr-terminal.js.map +1 -0
  39. package/lib/client-data/qr.js +286 -0
  40. package/lib/client-data/qr.js.map +1 -0
  41. package/lib/client-routes.js +308 -25
  42. package/lib/client-routes.js.map +1 -1
  43. package/lib/client.js +1013 -229
  44. package/lib/config.js +50 -12
  45. package/lib/config.js.map +1 -1
  46. package/lib/debug-report.js +28 -1
  47. package/lib/debug-report.js.map +1 -1
  48. package/lib/fetch-route-intercept.js +334 -26
  49. package/lib/fetch-route-intercept.js.map +1 -1
  50. package/lib/index.js +608 -375
  51. package/lib/index.js.map +1 -1
  52. package/lib/intercept.js +1833 -280
  53. package/lib/intercept.js.map +1 -1
  54. package/lib/lan-gate-server.cjs +36 -10
  55. package/lib/merge-streams.js +103 -11
  56. package/lib/merge-streams.js.map +1 -1
  57. package/lib/plugin-route-intercept.js +93 -63
  58. package/lib/plugin-route-intercept.js.map +1 -1
  59. package/lib/relay-access.js +8 -1
  60. package/lib/relay-access.js.map +1 -1
  61. package/lib/relay-client.js +133 -4
  62. package/lib/relay-client.js.map +1 -1
  63. package/lib/relay-pool.js +275 -0
  64. package/lib/relay-pool.js.map +1 -0
  65. package/lib/relay-server.js +269 -17
  66. package/lib/relay-server.js.map +1 -1
  67. package/lib/restart-fields.js +6 -4
  68. package/lib/restart-fields.js.map +1 -1
  69. package/lib/share-ops.js +68 -0
  70. package/lib/share-ops.js.map +1 -1
  71. package/lib/share-store.js +65 -27
  72. package/lib/share-store.js.map +1 -1
  73. package/lib/state-store.js +400 -0
  74. package/lib/state-store.js.map +1 -0
  75. package/lib/types/adapters/dsh-better-sidebar/index.d.ts +3 -2
  76. package/lib/types/adapters/dsh-better-sidebar/index.d.ts.map +1 -1
  77. package/lib/types/admin-routes.d.ts.map +1 -1
  78. package/lib/types/cli/args.d.ts +78 -0
  79. package/lib/types/cli/args.d.ts.map +1 -0
  80. package/lib/types/cli/bootstrap.d.ts +170 -0
  81. package/lib/types/cli/bootstrap.d.ts.map +1 -0
  82. package/lib/types/cli/command-setup.d.ts +72 -0
  83. package/lib/types/cli/command-setup.d.ts.map +1 -0
  84. package/lib/types/cli/commands-client.d.ts +36 -0
  85. package/lib/types/cli/commands-client.d.ts.map +1 -0
  86. package/lib/types/cli/commands-host.d.ts +82 -0
  87. package/lib/types/cli/commands-host.d.ts.map +1 -0
  88. package/lib/types/cli/commands-status.d.ts +46 -0
  89. package/lib/types/cli/commands-status.d.ts.map +1 -0
  90. package/lib/types/cli/config-writer.d.ts +92 -0
  91. package/lib/types/cli/config-writer.d.ts.map +1 -0
  92. package/lib/types/cli/context.d.ts +39 -0
  93. package/lib/types/cli/context.d.ts.map +1 -0
  94. package/lib/types/cli/i18n.d.ts +32 -0
  95. package/lib/types/cli/i18n.d.ts.map +1 -0
  96. package/lib/types/cli/ipc-client.d.ts +83 -0
  97. package/lib/types/cli/ipc-client.d.ts.map +1 -0
  98. package/lib/types/cli/ipc-server.d.ts +113 -0
  99. package/lib/types/cli/ipc-server.d.ts.map +1 -0
  100. package/lib/types/cli/main.d.ts +57 -0
  101. package/lib/types/cli/main.d.ts.map +1 -0
  102. package/lib/types/cli/qr-terminal.d.ts +17 -0
  103. package/lib/types/cli/qr-terminal.d.ts.map +1 -0
  104. package/lib/types/client/RemoteStatusIcon.d.ts.map +1 -1
  105. package/lib/types/client/current-session-report.d.ts +4 -0
  106. package/lib/types/client/current-session-report.d.ts.map +1 -1
  107. package/lib/types/client/effects/model-group-side.d.ts.map +1 -1
  108. package/lib/types/client/effects/remote-session.d.ts.map +1 -1
  109. package/lib/types/client/locales.d.ts +47 -3
  110. package/lib/types/client/locales.d.ts.map +1 -1
  111. package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
  112. package/lib/types/client/settings/settings-css.d.ts +1 -1
  113. package/lib/types/client/settings/settings-css.d.ts.map +1 -1
  114. package/lib/types/client/styles/remote-session.css.d.ts +1 -1
  115. package/lib/types/client/styles/remote-session.css.d.ts.map +1 -1
  116. package/lib/types/client/wizard/GatewayWizard.d.ts.map +1 -1
  117. package/lib/types/client/wizard/cards/ProxyCard.d.ts.map +1 -1
  118. package/lib/types/client/wizard/wizard-css.d.ts +1 -1
  119. package/lib/types/client/wizard/wizard-css.d.ts.map +1 -1
  120. package/lib/types/client-data/model-group-side.d.ts +23 -2
  121. package/lib/types/client-data/model-group-side.d.ts.map +1 -1
  122. package/lib/types/client-data/remote-status.d.ts +47 -1
  123. package/lib/types/client-data/remote-status.d.ts.map +1 -1
  124. package/lib/types/client-data/settings-form.d.ts +85 -1
  125. package/lib/types/client-data/settings-form.d.ts.map +1 -1
  126. package/lib/types/client-data/wizard.d.ts +56 -1
  127. package/lib/types/client-data/wizard.d.ts.map +1 -1
  128. package/lib/types/client-routes.d.ts +25 -1
  129. package/lib/types/client-routes.d.ts.map +1 -1
  130. package/lib/types/config.d.ts +40 -14
  131. package/lib/types/config.d.ts.map +1 -1
  132. package/lib/types/debug-report.d.ts.map +1 -1
  133. package/lib/types/fetch-route-intercept.d.ts +66 -8
  134. package/lib/types/fetch-route-intercept.d.ts.map +1 -1
  135. package/lib/types/index.d.ts +9 -2
  136. package/lib/types/index.d.ts.map +1 -1
  137. package/lib/types/intercept.d.ts +72 -10
  138. package/lib/types/intercept.d.ts.map +1 -1
  139. package/lib/types/merge-streams.d.ts +79 -1
  140. package/lib/types/merge-streams.d.ts.map +1 -1
  141. package/lib/types/plugin-route-intercept.d.ts +25 -9
  142. package/lib/types/plugin-route-intercept.d.ts.map +1 -1
  143. package/lib/types/relay-access.d.ts +3 -1
  144. package/lib/types/relay-access.d.ts.map +1 -1
  145. package/lib/types/relay-client.d.ts +23 -2
  146. package/lib/types/relay-client.d.ts.map +1 -1
  147. package/lib/types/relay-pool.d.ts +148 -0
  148. package/lib/types/relay-pool.d.ts.map +1 -0
  149. package/lib/types/relay-server.d.ts +30 -3
  150. package/lib/types/relay-server.d.ts.map +1 -1
  151. package/lib/types/restart-fields.d.ts +5 -5
  152. package/lib/types/restart-fields.d.ts.map +1 -1
  153. package/lib/types/share-ops.d.ts +47 -1
  154. package/lib/types/share-ops.d.ts.map +1 -1
  155. package/lib/types/share-store.d.ts.map +1 -1
  156. package/lib/types/state-store.d.ts +179 -0
  157. package/lib/types/state-store.d.ts.map +1 -0
  158. package/lib/types/upload-limits.d.ts +15 -0
  159. package/lib/types/upload-limits.d.ts.map +1 -1
  160. package/lib/types/virtual-id.d.ts +21 -0
  161. package/lib/types/virtual-id.d.ts.map +1 -1
  162. package/lib/types/wizard/probe.d.ts.map +1 -1
  163. package/lib/types/wizard/proxy-snippets.d.ts +3 -0
  164. package/lib/types/wizard/proxy-snippets.d.ts.map +1 -1
  165. package/lib/types/wizard/routes.d.ts +1 -0
  166. package/lib/types/wizard/routes.d.ts.map +1 -1
  167. package/lib/types/wizard/status.d.ts +9 -0
  168. package/lib/types/wizard/status.d.ts.map +1 -1
  169. package/lib/types/wizard/verify.d.ts +3 -0
  170. package/lib/types/wizard/verify.d.ts.map +1 -1
  171. package/lib/upload-limits.js +15 -0
  172. package/lib/upload-limits.js.map +1 -1
  173. package/lib/virtual-id.js +60 -0
  174. package/lib/virtual-id.js.map +1 -1
  175. package/lib/wizard/probe.js +46 -1
  176. package/lib/wizard/probe.js.map +1 -1
  177. package/lib/wizard/proxy-snippets.js +14 -1
  178. package/lib/wizard/proxy-snippets.js.map +1 -1
  179. package/lib/wizard/routes.js +23 -4
  180. package/lib/wizard/routes.js.map +1 -1
  181. package/lib/wizard/status.js +21 -0
  182. package/lib/wizard/status.js.map +1 -1
  183. package/lib/wizard/verify.js +31 -8
  184. package/lib/wizard/verify.js.map +1 -1
  185. package/package.json +8 -4
  186. package/pwa/icons/badge-96.png +0 -0
  187. package/pwa/icons/badge.svg +1 -0
  188. package/pwa/manifest.json +2 -1
  189. package/pwa/sw.js +3 -1
  190. package/scripts/check-debug-report.mjs +41 -1
  191. package/scripts/check-settings-form.mjs +14 -3
  192. package/scripts/check-settings-view.mjs +247 -0
  193. package/scripts/check-wizard-ui.mjs +37 -0
  194. package/src/adapters/dsh-better-sidebar/index.ts +7 -3
  195. package/src/admin-routes.ts +10 -2
  196. package/src/cli/args.ts +289 -0
  197. package/src/cli/bootstrap.ts +569 -0
  198. package/src/cli/command-setup.ts +540 -0
  199. package/src/cli/commands-client.ts +369 -0
  200. package/src/cli/commands-host.ts +1127 -0
  201. package/src/cli/commands-status.ts +296 -0
  202. package/src/cli/config-writer.ts +354 -0
  203. package/src/cli/context.ts +38 -0
  204. package/src/cli/i18n.ts +645 -0
  205. package/src/cli/ipc-client.ts +216 -0
  206. package/src/cli/ipc-server.ts +531 -0
  207. package/src/cli/main.ts +285 -0
  208. package/src/cli/qr-terminal.ts +49 -0
  209. package/src/client/RemoteStatusIcon.tsx +4 -1
  210. package/src/client/current-session-report.ts +28 -4
  211. package/src/client/effects/model-group-side.ts +19 -5
  212. package/src/client/effects/remote-session.ts +26 -6
  213. package/src/client/locales.ts +96 -6
  214. package/src/client/settings/SettingsSection.tsx +287 -92
  215. package/src/client/settings/settings-css.ts +18 -0
  216. package/src/client/styles/remote-session.css.ts +15 -1
  217. package/src/client/wizard/GatewayWizard.tsx +470 -109
  218. package/src/client/wizard/cards/ProxyCard.tsx +2 -1
  219. package/src/client/wizard/wizard-css.ts +23 -0
  220. package/src/client-data/model-group-side.ts +37 -10
  221. package/src/client-data/remote-status.ts +112 -17
  222. package/src/client-data/settings-form.ts +164 -8
  223. package/src/client-data/wizard.ts +112 -2
  224. package/src/client-routes.ts +334 -26
  225. package/src/config.ts +62 -16
  226. package/src/debug-report.ts +27 -1
  227. package/src/fetch-route-intercept.ts +381 -32
  228. package/src/index.ts +608 -380
  229. package/src/intercept.ts +1866 -286
  230. package/src/merge-streams.ts +155 -10
  231. package/src/plugin-route-intercept.ts +120 -71
  232. package/src/relay-access.ts +14 -3
  233. package/src/relay-client.ts +163 -5
  234. package/src/relay-pool.ts +387 -0
  235. package/src/relay-server.ts +312 -16
  236. package/src/restart-fields.ts +6 -4
  237. package/src/share-ops.ts +82 -1
  238. package/src/share-store.ts +59 -26
  239. package/src/state-store.ts +428 -0
  240. package/src/upload-limits.ts +16 -0
  241. package/src/virtual-id.ts +57 -0
  242. package/src/wizard/probe.ts +54 -2
  243. package/src/wizard/proxy-snippets.ts +17 -2
  244. package/src/wizard/routes.ts +24 -5
  245. package/src/wizard/status.ts +28 -0
  246. package/src/wizard/verify.ts +33 -11
  247. package/AGENTS.md +0 -185
  248. package/docs/adr/0001-plugin-bridge-forwards-plugin-routes.md +0 -15
  249. package/docs/adr/0002-relay-emulates-websocket.md +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"share-store.js","sourceRoot":"","sources":["../src/share-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"share-store.js","sourceRoot":"","sources":["../src/share-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,400 @@
1
+ /**
2
+ * The three-in-one state file (MS-1): `<DSH_HOME>/zen-remote-state.json`
3
+ * holds the server's own identity (`serverId`), the shared-session table
4
+ * (`sessions`) and the list of paired relay servers (`servers`) in ONE file,
5
+ * so the three writers — relay-server.ts's loadServerId, share-store.ts's
6
+ * persist, and the pairing operations below — can never clobber each other's
7
+ * top-level fields. Every write goes through {@link writeStateFile}, which
8
+ * reads the CURRENT file first and hands it to the updater: a share-table
9
+ * write preserves `serverId` and `servers`, an identity write preserves the
10
+ * table and the list.
11
+ *
12
+ * The file is 0600 on purpose: `servers` rows carry pairing tokens. The write
13
+ * is the same atomic tmp+rename dance the share table has always used, with
14
+ * an explicit chmod in front of the rename (writeFileSync's `mode` only
15
+ * applies at creation — a leftover `.tmp` from a crashed run would keep its
16
+ * old mode).
17
+ *
18
+ * Migration (MS-1): the pre-multi-server layout kept three separate files —
19
+ * `zen-remote-server.json` (the identity) and `zen-remote-shares.json` (the
20
+ * table) — and the plugin row carried the one paired server's address+token.
21
+ * {@link ensureStateMigrated} folds all three into the state file exactly
22
+ * once, deleting a legacy file only after its data landed on disk. The
23
+ * migration parts are also exported singly: relay-server.ts runs the identity
24
+ * one at its `loadServerId` entry and share-store.ts runs the table one at
25
+ * its startup load, so each writer is correct even when nothing else called
26
+ * the combined migration first.
27
+ *
28
+ * Pure module discipline: no clocks of its own (`Date.now` at the two call
29
+ * sites that need a timestamp), every read tolerant, nothing throws out of
30
+ * the migration helpers — a damaged file degrades to an empty state, never a
31
+ * dead plugin.
32
+ */
33
+ import { randomBytes } from 'node:crypto';
34
+ import { chmodSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
35
+ import { dirname, join } from 'node:path';
36
+ import { normalizeServerUrl } from './client-pairing.js';
37
+ /** The one state file this module owns, always directly under DSH_HOME. */
38
+ export const STATE_FILE_NAME = 'zen-remote-state.json';
39
+ /** Pre-multi-server identity file, migrated into the state file and deleted. */
40
+ export const LEGACY_SERVER_ID_FILE = 'zen-remote-server.json';
41
+ /** Pre-multi-server share-table file, migrated into the state file and deleted. */
42
+ export const LEGACY_SHARES_FILE = 'zen-remote-shares.json';
43
+ /** How many relay servers one sub-client may keep paired at once (MS-2). */
44
+ export const MAX_PAIRED_SERVERS = 8;
45
+ /** The 8-hex short server id shape (`randomBytes(4).toString('hex')`). */
46
+ const SERVER_ID_PATTERN = /^[0-9a-f]{8}$/;
47
+ function isPlainObject(value) {
48
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
49
+ }
50
+ function isFiniteNumber(value) {
51
+ return typeof value === 'number' && Number.isFinite(value);
52
+ }
53
+ /** The one legal shape of a persisted server id (relay-server.ts mints it). */
54
+ export function isLegalServerId(value) {
55
+ return typeof value === 'string' && SERVER_ID_PATTERN.test(value);
56
+ }
57
+ /**
58
+ * Read and parse the state file. A missing file is the normal first run; a
59
+ * damaged file reads as empty — quarantined as `<file>.corrupt-<now>` UNLESS
60
+ * it still carries a migration source (a legal `serverId`, the one shape the
61
+ * migration paths know how to rescue): renaming that away would silently
62
+ * reset the server identity on the next load, so the file stays put and the
63
+ * salvageable field rides along in the returned state.
64
+ * Never throws.
65
+ */
66
+ export function readStateFile(filePath) {
67
+ let raw = null;
68
+ try {
69
+ raw = readFileSync(filePath, 'utf8');
70
+ }
71
+ catch {
72
+ return { version: 1 };
73
+ }
74
+ let parsed;
75
+ try {
76
+ parsed = JSON.parse(raw);
77
+ }
78
+ catch {
79
+ parsed = undefined;
80
+ }
81
+ if (isPlainObject(parsed) && parsed.version === 1) {
82
+ const state = { version: 1 };
83
+ if (isLegalServerId(parsed.serverId))
84
+ state.serverId = parsed.serverId;
85
+ // Row-level validity is each consumer's business (share-store validates
86
+ // rows, listPairedServers validates records) — a legal container with a
87
+ // bad field just drops the field here.
88
+ if (isPlainObject(parsed.sessions))
89
+ state.sessions = parsed.sessions;
90
+ if (Array.isArray(parsed.servers))
91
+ state.servers = parsed.servers;
92
+ return state;
93
+ }
94
+ // Not a legal version:1 container. Salvage a bare legal serverId (the
95
+ // identity is the one thing a shape-less state file can still be carrying);
96
+ // anything else gets quarantined with its content preserved.
97
+ if (isPlainObject(parsed) && isLegalServerId(parsed.serverId)) {
98
+ return { version: 1, serverId: parsed.serverId };
99
+ }
100
+ try {
101
+ renameSync(filePath, `${filePath}.corrupt-${Date.now()}`);
102
+ }
103
+ catch {
104
+ // Keep the empty state either way; startup must not fail here.
105
+ }
106
+ return { version: 1 };
107
+ }
108
+ /**
109
+ * The one write door: read the CURRENT file, let `updater` produce the next
110
+ * state from it, then atomically replace the file (tmp at 0600, best-effort
111
+ * chmod, rename). Belt AND braces: the braces are the updaters in this module
112
+ * spreading `current` explicitly; the belt is the merge below — an updater
113
+ * that names only the field it owns must never erase the top-level fields it
114
+ * did not name (the partial-updater shape caught in the MS-phase1 review). A
115
+ * field the updater explicitly sets to `undefined` still goes away, so
116
+ * removal stays expressible. The result is normalized to the four known
117
+ * top-level fields before it reaches disk. Throws on I/O failure; callers
118
+ * decide what that means (share-store records it, loadServerId degrades, the
119
+ * migration helpers swallow it).
120
+ */
121
+ export function writeStateFile(filePath, updater) {
122
+ const current = readStateFile(filePath);
123
+ const next = updater(current);
124
+ const safe = isPlainObject(next) ? next : { version: 1 };
125
+ const merged = { ...current, ...safe, version: 1 };
126
+ const out = { version: 1 };
127
+ if (isLegalServerId(merged.serverId))
128
+ out.serverId = merged.serverId;
129
+ if (isPlainObject(merged.sessions))
130
+ out.sessions = merged.sessions;
131
+ if (Array.isArray(merged.servers))
132
+ out.servers = merged.servers;
133
+ mkdirSync(dirname(filePath), { recursive: true });
134
+ writeFileSync(`${filePath}.tmp`, JSON.stringify(out), { mode: 0o600 });
135
+ // writeFileSync's mode only applies at creation; a leftover tmp from a
136
+ // crashed run keeps its old mode, so the rename must not trust it.
137
+ try {
138
+ chmodSync(`${filePath}.tmp`, 0o600);
139
+ }
140
+ catch {
141
+ // Best effort — the fresh-file mode above already covers the common path.
142
+ }
143
+ renameSync(`${filePath}.tmp`, filePath);
144
+ }
145
+ /**
146
+ * Move a legacy `zen-remote-server.json` identity into the state file — but
147
+ * only when the state file has no legal identity of its own yet. The legacy
148
+ * file is deleted only after the write succeeded; a failed write leaves both
149
+ * files alone so the next start can try again. Never throws.
150
+ */
151
+ export function ensureServerIdMigrated(stateFile) {
152
+ try {
153
+ const state = readStateFile(stateFile);
154
+ if (state.serverId !== undefined)
155
+ return;
156
+ const legacyFile = join(dirname(stateFile), LEGACY_SERVER_ID_FILE);
157
+ let legacyId;
158
+ try {
159
+ const parsed = JSON.parse(readFileSync(legacyFile, 'utf8'));
160
+ const id = parsed?.serverId;
161
+ if (typeof id === 'string' && SERVER_ID_PATTERN.test(id))
162
+ legacyId = id;
163
+ }
164
+ catch {
165
+ return;
166
+ }
167
+ if (legacyId === undefined)
168
+ return;
169
+ writeStateFile(stateFile, (current) => ({ ...current, version: 1, serverId: legacyId }));
170
+ try {
171
+ unlinkSync(legacyFile);
172
+ }
173
+ catch {
174
+ // Already gone is fine — the data is in the state file now.
175
+ }
176
+ }
177
+ catch {
178
+ // Best effort: an unwritable home keeps its legacy files for next time.
179
+ }
180
+ }
181
+ /** Share-store's row validity, mirrored here so migrated rows load cleanly. */
182
+ const MAX_ID_LENGTH = 200;
183
+ /**
184
+ * Move a legacy `zen-remote-shares.json` table into the state file — but only
185
+ * when the state file carries no sessions yet. Legal rows only; the legacy
186
+ * file is deleted only after the write succeeded. Never throws.
187
+ */
188
+ export function ensureSharesMigrated(stateFile) {
189
+ try {
190
+ const state = readStateFile(stateFile);
191
+ if (state.sessions !== undefined)
192
+ return;
193
+ const legacyFile = join(dirname(stateFile), LEGACY_SHARES_FILE);
194
+ let rows;
195
+ try {
196
+ const parsed = JSON.parse(readFileSync(legacyFile, 'utf8'));
197
+ if (isPlainObject(parsed) && parsed.version === 1 && isPlainObject(parsed.sessions)) {
198
+ const out = Object.create(null);
199
+ for (const [id, value] of Object.entries(parsed.sessions)) {
200
+ if (typeof id !== 'string' || id === '' || id.length > MAX_ID_LENGTH || !isPlainObject(value))
201
+ continue;
202
+ const { sharedAt, lastActivityAt } = value;
203
+ if (!isFiniteNumber(sharedAt) || !isFiniteNumber(lastActivityAt))
204
+ continue;
205
+ out[id] = { sharedAt, lastActivityAt };
206
+ }
207
+ rows = out;
208
+ }
209
+ }
210
+ catch {
211
+ return;
212
+ }
213
+ if (rows === undefined)
214
+ return;
215
+ writeStateFile(stateFile, (current) => ({ ...current, version: 1, sessions: rows }));
216
+ try {
217
+ unlinkSync(legacyFile);
218
+ }
219
+ catch {
220
+ // Already gone is fine — the data is in the state file now.
221
+ }
222
+ }
223
+ catch {
224
+ // Best effort: an unwritable home keeps its legacy files for next time.
225
+ }
226
+ }
227
+ function newPairedServerRecord(serverUrl, token, now, deviceId, deviceName) {
228
+ return {
229
+ id: randomBytes(4).toString('hex'),
230
+ serverUrl,
231
+ token,
232
+ createdAt: now ?? Date.now(),
233
+ ...(deviceId !== undefined ? { deviceId } : {}),
234
+ ...(deviceName !== undefined ? { deviceName } : {}),
235
+ };
236
+ }
237
+ /** Validate one raw persisted record; anything hostile drops out of the list. */
238
+ function normalizeRecord(value) {
239
+ if (!isPlainObject(value))
240
+ return undefined;
241
+ const { id, serverUrl, token, createdAt } = value;
242
+ if (typeof id !== 'string' || id === '' || id.length > 64)
243
+ return undefined;
244
+ if (typeof serverUrl !== 'string' || serverUrl === '')
245
+ return undefined;
246
+ if (typeof token !== 'string')
247
+ return undefined;
248
+ if (!isFiniteNumber(createdAt))
249
+ return undefined;
250
+ const record = { id, serverUrl, token, createdAt };
251
+ if (isLegalServerId(value.serverId))
252
+ record.serverId = value.serverId;
253
+ if (typeof value.serverName === 'string' && value.serverName !== '')
254
+ record.serverName = value.serverName;
255
+ if (typeof value.deviceId === 'string' && value.deviceId !== '')
256
+ record.deviceId = value.deviceId;
257
+ if (typeof value.deviceName === 'string' && value.deviceName !== '')
258
+ record.deviceName = value.deviceName;
259
+ return record;
260
+ }
261
+ /**
262
+ * The paired-servers list, in file (pairing) order, as validated copies.
263
+ * Invalid rows are skipped — one hostile record must not hide the rest.
264
+ */
265
+ export function listPairedServers(filePath) {
266
+ const state = readStateFile(filePath);
267
+ if (!Array.isArray(state.servers))
268
+ return [];
269
+ const records = [];
270
+ for (const value of state.servers) {
271
+ const record = normalizeRecord(value);
272
+ if (record !== undefined)
273
+ records.push(record);
274
+ }
275
+ return records;
276
+ }
277
+ /**
278
+ * Add or re-pair one server. A NEW address appends (refused past
279
+ * {@link MAX_PAIRED_SERVERS}); an EXISTING address updates in place — same
280
+ * entry id, same position, same `createdAt`, fresh token and device fields —
281
+ * which is why the cap never blocks a re-pair.
282
+ */
283
+ export function upsertPairedServer(filePath, input) {
284
+ const normalized = normalizeServerUrl(input.serverUrl);
285
+ if (!normalized.ok)
286
+ return { ok: false, code: 'invalid-url' };
287
+ const deviceId = typeof input.deviceId === 'string' && input.deviceId !== '' ? input.deviceId : undefined;
288
+ const deviceName = typeof input.deviceName === 'string' && input.deviceName !== '' ? input.deviceName : undefined;
289
+ const token = typeof input.token === 'string' ? input.token : '';
290
+ const records = listPairedServers(filePath);
291
+ const existingIndex = records.findIndex((record) => record.serverUrl === normalized.url);
292
+ if (existingIndex !== -1) {
293
+ const updated = {
294
+ ...records[existingIndex],
295
+ token,
296
+ ...(deviceId !== undefined ? { deviceId } : {}),
297
+ ...(deviceName !== undefined ? { deviceName } : {}),
298
+ };
299
+ const nextServers = [...records];
300
+ nextServers[existingIndex] = updated;
301
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: nextServers }));
302
+ return { ok: true, record: updated, replaced: true };
303
+ }
304
+ if (records.length >= MAX_PAIRED_SERVERS)
305
+ return { ok: false, code: 'limit-reached' };
306
+ const created = newPairedServerRecord(normalized.url, token, input.now, deviceId, deviceName);
307
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: [...records, created] }));
308
+ return { ok: true, record: created, replaced: false };
309
+ }
310
+ /**
311
+ * Fold one completed handshake into the record: `serverId`, `serverName` and
312
+ * (when the server speaks it) `deviceName`. The second dedupe layer lives
313
+ * here too: a DIFFERENT entry already carrying the same `serverId` is a stale
314
+ * duplicate (the same server re-paired under a new address) — it is removed
315
+ * from the list and reported in `removedEntryIds`, the handshaking entry
316
+ * kept. A non-8-hex `serverId` is not recorded and dedupes nothing.
317
+ */
318
+ export function recordServerHandshake(filePath, entryId, handshake) {
319
+ if (!isLegalServerId(handshake.serverId))
320
+ return { removedEntryIds: [] };
321
+ const records = listPairedServers(filePath);
322
+ if (!records.some((record) => record.id === entryId))
323
+ return { removedEntryIds: [] };
324
+ const removed = [];
325
+ const nextServers = [];
326
+ for (const record of records) {
327
+ if (record.id === entryId) {
328
+ nextServers.push({
329
+ ...record,
330
+ serverId: handshake.serverId,
331
+ ...(typeof handshake.serverName === 'string' && handshake.serverName !== '' ? { serverName: handshake.serverName } : {}),
332
+ ...(typeof handshake.deviceName === 'string' && handshake.deviceName !== '' ? { deviceName: handshake.deviceName } : {}),
333
+ });
334
+ continue;
335
+ }
336
+ if (record.serverId === handshake.serverId) {
337
+ removed.push(record.id);
338
+ continue;
339
+ }
340
+ nextServers.push(record);
341
+ }
342
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: nextServers }));
343
+ return { removedEntryIds: removed };
344
+ }
345
+ /** Remove one entry by id; true when it was actually on the list. */
346
+ export function removePairedServer(filePath, entryId) {
347
+ const records = listPairedServers(filePath);
348
+ const next = records.filter((record) => record.id !== entryId);
349
+ if (next.length === records.length)
350
+ return false;
351
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: next }));
352
+ return true;
353
+ }
354
+ /** Empty the list; answers how many records went away. */
355
+ export function clearPairedServers(filePath) {
356
+ const records = listPairedServers(filePath);
357
+ if (records.length === 0)
358
+ return 0;
359
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: [] }));
360
+ return records.length;
361
+ }
362
+ /**
363
+ * The third migration: the pre-multi-server row carried exactly one server's
364
+ * address and pairing token. When the state file has no paired servers yet,
365
+ * they become `servers[0]`; the address must pass the claim route's
366
+ * normalizer and the token must be a non-empty string, or nothing is written.
367
+ * Runs at most once in practice — a non-empty list is never re-migrated.
368
+ */
369
+ export function migrateLegacyClientIntoServers(filePath, legacyClient) {
370
+ if (listPairedServers(filePath).length > 0)
371
+ return;
372
+ const serverUrl = typeof legacyClient?.serverUrl === 'string' ? legacyClient.serverUrl : undefined;
373
+ const token = typeof legacyClient?.deviceToken === 'string' ? legacyClient.deviceToken : undefined;
374
+ if (serverUrl === undefined || token === undefined || token.trim() === '')
375
+ return;
376
+ const normalized = normalizeServerUrl(serverUrl);
377
+ if (!normalized.ok)
378
+ return;
379
+ writeStateFile(filePath, (current) => ({ ...current, version: 1, servers: [newPairedServerRecord(normalized.url, token)] }));
380
+ }
381
+ /**
382
+ * The combined one-shot migration for a DSH home: identity, share table and
383
+ * (when handed the row's legacy client credentials) the paired-servers seed.
384
+ * Best effort end to end — any failure leaves the files as they are for the
385
+ * next start.
386
+ */
387
+ export function ensureStateMigrated(home, legacyClient) {
388
+ const stateFile = join(home, STATE_FILE_NAME);
389
+ ensureServerIdMigrated(stateFile);
390
+ ensureSharesMigrated(stateFile);
391
+ if (legacyClient !== undefined) {
392
+ try {
393
+ migrateLegacyClientIntoServers(stateFile, legacyClient);
394
+ }
395
+ catch {
396
+ // Best effort — the legacy row credentials stay where they are.
397
+ }
398
+ }
399
+ }
400
+ //# sourceMappingURL=state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * The dsh-better-sidebar adapter (PB-12), written against EXACTLY
3
- * versions 0.25.0, 0.26.0, 0.26.1, 0.28.0-alpha.0, 0.28.0, 0.28.1, 0.28.2 and 0.30.0 (PB-15 widened the list; 0.26.1 is a
3
+ * versions 0.25.0, 0.26.0, 0.26.1, 0.28.0-alpha.0, 0.28.0, 0.28.1, 0.28.2,
4
+ * 0.30.0 and 0.30.1 (PB-15 widened the list; 0.26.1 is a
4
5
  * perf-only patch with the same wire surface as 0.26.0; 0.26.0 is a JSON-api
5
6
  * superset of 0.25.0 — it grows fs.readPage and the sidechat dequeue/model/
6
7
  * models methods, and moves fs.write's content onto the new raw-text
7
- * /sidebar/write route). Everything the adapter knows about the plugin came
8
+ * /sidebar/write route; 0.30.1 is a wire-identical patch of 0.30.0). Everything the adapter knows about the plugin came
8
9
  * off `/tmp/bs-versions/{0.25.0,0.26.0}/lib/index.js`; the method table
9
10
  * lives in `methods.ts` beside this file, and the test suite re-extracts
10
11
  * the plugin's real method-name set (the two-version UNION) to catch a
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dsh-better-sidebar/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAsBhD,eAAO,MAAM,uBAAuB,EAAE,aAmMrC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dsh-better-sidebar/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAsBhD,eAAO,MAAM,uBAAuB,EAAE,aAsMrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-routes.d.ts","sourceRoot":"","sources":["../../src/admin-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-routes.d.ts","sourceRoot":"","sources":["../../src/admin-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * CLI-2 command-line parsing: the whole `dsh-zen-remote` grammar in one pure
3
+ * function. It answers WHAT the user asked for — command routing, option
4
+ * values, targets — and deliberately does not VALIDATE cross-field rules
5
+ * (role gates, required targets): the command layer renders those verdicts
6
+ * through the i18n dictionary. Two things the parser does decide on its own:
7
+ * `--role peer` (and any unknown role value) is flagged `roleIssue` because
8
+ * SPEC pins the "peer is not enabled" refusal at every entry point, and
9
+ * `--debug`'s optional path argument is consumed only when it does not look
10
+ * like another flag.
11
+ *
12
+ * Global flags may appear before or after the command word; the leading
13
+ * positional tokens ARE the command (`host device revoke dev-7` → three
14
+ * command words + one target), everything flag-like is an option.
15
+ */
16
+ export type CliCommand = 'help' | 'version' | 'unknown' | 'setup' | 'status' | 'host.device.pair' | 'host.device.list' | 'host.device.revoke' | 'host.ingress.start' | 'host.ingress.stop' | 'host.ingress.verify' | 'host.ingress.snippet' | 'client.pair' | 'client.unpair' | 'client.list';
17
+ /** Why a `--role` value cannot be used as-is. `peer-not-enabled` covers the
18
+ * SPEC's reserved role; `invalid` covers everything the vocabulary does not
19
+ * know. Absent when the value is `host` or `client`. */
20
+ export type CliRoleIssue = 'peer-not-enabled' | 'invalid';
21
+ export interface CliOptions {
22
+ /** Raw `--lang` value — `resolveCliLang` (i18n.ts) interprets it later. */
23
+ lang?: string;
24
+ json: boolean;
25
+ yes: boolean;
26
+ noWait: boolean;
27
+ /** Explicit IPC socket path; discovery probes only this when present. */
28
+ socket?: string;
29
+ /** Seconds to wait for DSH to come up; default 20. */
30
+ wait: number;
31
+ /** `status --debug` without a path: write the default filename. */
32
+ debug: boolean;
33
+ /** `status --debug <outPath>`: the exact output file. */
34
+ debugPath?: string;
35
+ /** Raw `--role` value, preserved verbatim. */
36
+ role?: string;
37
+ roleIssue?: CliRoleIssue;
38
+ /** `--profile p1,p2` split on commas, trimmed, empties dropped. */
39
+ profile?: string[];
40
+ /** `--ingress` value (caddy | cloudflared | external | lan). */
41
+ ingress?: string;
42
+ /** `--mode` — a synonym of `--ingress`, kept separately for callers that
43
+ * want to know which spelling the user used. */
44
+ mode?: string;
45
+ domain?: string;
46
+ cfToken?: string;
47
+ email?: string;
48
+ httpsPort?: number;
49
+ publicUrl?: string;
50
+ tunnelId?: string;
51
+ proxy?: string;
52
+ deviceRole?: string;
53
+ hostUrl?: string;
54
+ code?: string;
55
+ name?: string;
56
+ all: boolean;
57
+ /** Unrecognized `--flags`, collected instead of crashing — the command
58
+ * layer decides whether to warn. */
59
+ unknownFlags: string[];
60
+ }
61
+ export interface ParsedCliArgs {
62
+ command: CliCommand;
63
+ options: CliOptions;
64
+ /** The positional argument after the command words (a device id, a host
65
+ * URL, an entry id). `--all` as the revoke/unpair target becomes
66
+ * `options.all` instead. */
67
+ target?: string;
68
+ /** The unrecognized command words, joined for the error message. */
69
+ unknownCommand?: string;
70
+ }
71
+ /**
72
+ * Parse `argv` (without the node binary and script path) into a structured
73
+ * command. `--help` / `-h` anywhere wins over everything, then `--version` /
74
+ * `-v`; flags with no command still route to `help` (running the binary bare
75
+ * must not fall into the interactive wizard).
76
+ */
77
+ export declare function parseCliArgs(argv: readonly string[]): ParsedCliArgs;
78
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,GACR,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,sBAAsB,GACtB,aAAa,GACb,eAAe,GACf,aAAa,CAAA;AAEjB;;wDAEwD;AACxD,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAAA;AAEzD,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,KAAK,EAAE,OAAO,CAAA;IACd,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;oDACgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ;wCACoC;IACpC,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,CAAA;IACnB,OAAO,EAAE,UAAU,CAAA;IACnB;;gCAE4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAmJD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CA+CnE"}