dsh-zen-remote 2.3.10 → 2.4.0

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 (244) hide show
  1. package/CHANGELOG.md +44 -72
  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 +573 -366
  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-store.js +65 -27
  70. package/lib/share-store.js.map +1 -1
  71. package/lib/state-store.js +400 -0
  72. package/lib/state-store.js.map +1 -0
  73. package/lib/types/adapters/dsh-better-sidebar/index.d.ts +3 -2
  74. package/lib/types/adapters/dsh-better-sidebar/index.d.ts.map +1 -1
  75. package/lib/types/admin-routes.d.ts.map +1 -1
  76. package/lib/types/cli/args.d.ts +78 -0
  77. package/lib/types/cli/args.d.ts.map +1 -0
  78. package/lib/types/cli/bootstrap.d.ts +170 -0
  79. package/lib/types/cli/bootstrap.d.ts.map +1 -0
  80. package/lib/types/cli/command-setup.d.ts +72 -0
  81. package/lib/types/cli/command-setup.d.ts.map +1 -0
  82. package/lib/types/cli/commands-client.d.ts +36 -0
  83. package/lib/types/cli/commands-client.d.ts.map +1 -0
  84. package/lib/types/cli/commands-host.d.ts +82 -0
  85. package/lib/types/cli/commands-host.d.ts.map +1 -0
  86. package/lib/types/cli/commands-status.d.ts +46 -0
  87. package/lib/types/cli/commands-status.d.ts.map +1 -0
  88. package/lib/types/cli/config-writer.d.ts +92 -0
  89. package/lib/types/cli/config-writer.d.ts.map +1 -0
  90. package/lib/types/cli/context.d.ts +39 -0
  91. package/lib/types/cli/context.d.ts.map +1 -0
  92. package/lib/types/cli/i18n.d.ts +32 -0
  93. package/lib/types/cli/i18n.d.ts.map +1 -0
  94. package/lib/types/cli/ipc-client.d.ts +83 -0
  95. package/lib/types/cli/ipc-client.d.ts.map +1 -0
  96. package/lib/types/cli/ipc-server.d.ts +113 -0
  97. package/lib/types/cli/ipc-server.d.ts.map +1 -0
  98. package/lib/types/cli/main.d.ts +57 -0
  99. package/lib/types/cli/main.d.ts.map +1 -0
  100. package/lib/types/cli/qr-terminal.d.ts +17 -0
  101. package/lib/types/cli/qr-terminal.d.ts.map +1 -0
  102. package/lib/types/client/RemoteStatusIcon.d.ts.map +1 -1
  103. package/lib/types/client/current-session-report.d.ts +4 -0
  104. package/lib/types/client/current-session-report.d.ts.map +1 -1
  105. package/lib/types/client/effects/model-group-side.d.ts.map +1 -1
  106. package/lib/types/client/effects/remote-session.d.ts.map +1 -1
  107. package/lib/types/client/locales.d.ts +47 -3
  108. package/lib/types/client/locales.d.ts.map +1 -1
  109. package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
  110. package/lib/types/client/settings/settings-css.d.ts +1 -1
  111. package/lib/types/client/settings/settings-css.d.ts.map +1 -1
  112. package/lib/types/client/styles/remote-session.css.d.ts +1 -1
  113. package/lib/types/client/styles/remote-session.css.d.ts.map +1 -1
  114. package/lib/types/client/wizard/GatewayWizard.d.ts.map +1 -1
  115. package/lib/types/client/wizard/cards/ProxyCard.d.ts.map +1 -1
  116. package/lib/types/client/wizard/wizard-css.d.ts +1 -1
  117. package/lib/types/client/wizard/wizard-css.d.ts.map +1 -1
  118. package/lib/types/client-data/model-group-side.d.ts +23 -2
  119. package/lib/types/client-data/model-group-side.d.ts.map +1 -1
  120. package/lib/types/client-data/remote-status.d.ts +47 -1
  121. package/lib/types/client-data/remote-status.d.ts.map +1 -1
  122. package/lib/types/client-data/settings-form.d.ts +85 -1
  123. package/lib/types/client-data/settings-form.d.ts.map +1 -1
  124. package/lib/types/client-data/wizard.d.ts +56 -1
  125. package/lib/types/client-data/wizard.d.ts.map +1 -1
  126. package/lib/types/client-routes.d.ts +25 -1
  127. package/lib/types/client-routes.d.ts.map +1 -1
  128. package/lib/types/config.d.ts +40 -14
  129. package/lib/types/config.d.ts.map +1 -1
  130. package/lib/types/debug-report.d.ts.map +1 -1
  131. package/lib/types/fetch-route-intercept.d.ts +66 -8
  132. package/lib/types/fetch-route-intercept.d.ts.map +1 -1
  133. package/lib/types/index.d.ts +9 -2
  134. package/lib/types/index.d.ts.map +1 -1
  135. package/lib/types/intercept.d.ts +72 -10
  136. package/lib/types/intercept.d.ts.map +1 -1
  137. package/lib/types/merge-streams.d.ts +79 -1
  138. package/lib/types/merge-streams.d.ts.map +1 -1
  139. package/lib/types/plugin-route-intercept.d.ts +25 -9
  140. package/lib/types/plugin-route-intercept.d.ts.map +1 -1
  141. package/lib/types/relay-access.d.ts +3 -1
  142. package/lib/types/relay-access.d.ts.map +1 -1
  143. package/lib/types/relay-client.d.ts +23 -2
  144. package/lib/types/relay-client.d.ts.map +1 -1
  145. package/lib/types/relay-pool.d.ts +148 -0
  146. package/lib/types/relay-pool.d.ts.map +1 -0
  147. package/lib/types/relay-server.d.ts +30 -3
  148. package/lib/types/relay-server.d.ts.map +1 -1
  149. package/lib/types/restart-fields.d.ts +5 -5
  150. package/lib/types/restart-fields.d.ts.map +1 -1
  151. package/lib/types/share-store.d.ts.map +1 -1
  152. package/lib/types/state-store.d.ts +179 -0
  153. package/lib/types/state-store.d.ts.map +1 -0
  154. package/lib/types/upload-limits.d.ts +15 -0
  155. package/lib/types/upload-limits.d.ts.map +1 -1
  156. package/lib/types/virtual-id.d.ts +21 -0
  157. package/lib/types/virtual-id.d.ts.map +1 -1
  158. package/lib/types/wizard/probe.d.ts.map +1 -1
  159. package/lib/types/wizard/proxy-snippets.d.ts +3 -0
  160. package/lib/types/wizard/proxy-snippets.d.ts.map +1 -1
  161. package/lib/types/wizard/routes.d.ts +1 -0
  162. package/lib/types/wizard/routes.d.ts.map +1 -1
  163. package/lib/types/wizard/status.d.ts +9 -0
  164. package/lib/types/wizard/status.d.ts.map +1 -1
  165. package/lib/types/wizard/verify.d.ts +3 -0
  166. package/lib/types/wizard/verify.d.ts.map +1 -1
  167. package/lib/upload-limits.js +15 -0
  168. package/lib/upload-limits.js.map +1 -1
  169. package/lib/virtual-id.js +60 -0
  170. package/lib/virtual-id.js.map +1 -1
  171. package/lib/wizard/probe.js +46 -1
  172. package/lib/wizard/probe.js.map +1 -1
  173. package/lib/wizard/proxy-snippets.js +14 -1
  174. package/lib/wizard/proxy-snippets.js.map +1 -1
  175. package/lib/wizard/routes.js +23 -4
  176. package/lib/wizard/routes.js.map +1 -1
  177. package/lib/wizard/status.js +21 -0
  178. package/lib/wizard/status.js.map +1 -1
  179. package/lib/wizard/verify.js +31 -8
  180. package/lib/wizard/verify.js.map +1 -1
  181. package/package.json +8 -4
  182. package/pwa/icons/badge-96.png +0 -0
  183. package/pwa/icons/badge.svg +1 -0
  184. package/pwa/manifest.json +2 -1
  185. package/pwa/sw.js +3 -1
  186. package/scripts/check-debug-report.mjs +41 -1
  187. package/scripts/check-settings-form.mjs +14 -3
  188. package/scripts/check-settings-view.mjs +247 -0
  189. package/scripts/check-wizard-ui.mjs +37 -0
  190. package/src/adapters/dsh-better-sidebar/index.ts +7 -3
  191. package/src/admin-routes.ts +10 -2
  192. package/src/cli/args.ts +289 -0
  193. package/src/cli/bootstrap.ts +569 -0
  194. package/src/cli/command-setup.ts +540 -0
  195. package/src/cli/commands-client.ts +369 -0
  196. package/src/cli/commands-host.ts +1127 -0
  197. package/src/cli/commands-status.ts +296 -0
  198. package/src/cli/config-writer.ts +354 -0
  199. package/src/cli/context.ts +38 -0
  200. package/src/cli/i18n.ts +645 -0
  201. package/src/cli/ipc-client.ts +216 -0
  202. package/src/cli/ipc-server.ts +531 -0
  203. package/src/cli/main.ts +285 -0
  204. package/src/cli/qr-terminal.ts +49 -0
  205. package/src/client/RemoteStatusIcon.tsx +4 -1
  206. package/src/client/current-session-report.ts +28 -4
  207. package/src/client/effects/model-group-side.ts +19 -5
  208. package/src/client/effects/remote-session.ts +26 -6
  209. package/src/client/locales.ts +96 -6
  210. package/src/client/settings/SettingsSection.tsx +287 -92
  211. package/src/client/settings/settings-css.ts +18 -0
  212. package/src/client/styles/remote-session.css.ts +15 -1
  213. package/src/client/wizard/GatewayWizard.tsx +470 -109
  214. package/src/client/wizard/cards/ProxyCard.tsx +2 -1
  215. package/src/client/wizard/wizard-css.ts +23 -0
  216. package/src/client-data/model-group-side.ts +37 -10
  217. package/src/client-data/remote-status.ts +112 -17
  218. package/src/client-data/settings-form.ts +164 -8
  219. package/src/client-data/wizard.ts +112 -2
  220. package/src/client-routes.ts +334 -26
  221. package/src/config.ts +62 -16
  222. package/src/debug-report.ts +27 -1
  223. package/src/fetch-route-intercept.ts +381 -32
  224. package/src/index.ts +575 -370
  225. package/src/intercept.ts +1866 -286
  226. package/src/merge-streams.ts +155 -10
  227. package/src/plugin-route-intercept.ts +120 -71
  228. package/src/relay-access.ts +14 -3
  229. package/src/relay-client.ts +163 -5
  230. package/src/relay-pool.ts +387 -0
  231. package/src/relay-server.ts +312 -16
  232. package/src/restart-fields.ts +6 -4
  233. package/src/share-store.ts +59 -26
  234. package/src/state-store.ts +428 -0
  235. package/src/upload-limits.ts +16 -0
  236. package/src/virtual-id.ts +57 -0
  237. package/src/wizard/probe.ts +54 -2
  238. package/src/wizard/proxy-snippets.ts +17 -2
  239. package/src/wizard/routes.ts +24 -5
  240. package/src/wizard/status.ts +28 -0
  241. package/src/wizard/verify.ts +33 -11
  242. package/AGENTS.md +0 -185
  243. package/docs/adr/0001-plugin-bridge-forwards-plugin-routes.md +0 -15
  244. package/docs/adr/0002-relay-emulates-websocket.md +0 -8
@@ -47,25 +47,107 @@
47
47
  */
48
48
  import { RelayError } from './relay-client.js';
49
49
  import { fromVirtual } from './virtual-id.js';
50
+ import { restoreInvokeBinary } from './invoke-binary.js';
50
51
  import { MAX_UPLOAD_BYTES } from './relay-server.js';
52
+ import { MAX_FILE_MEDIA_BYTES } from './upload-limits.js';
51
53
  /** The host's upload route, verbatim from its registration (RT
52
54
  * dsh-client-file-upload lib/index.js:73). */
53
55
  export const FILE_UPLOAD_PATH = '/api/session/uploadFileBinary';
54
56
  /** The host's session-log export route (RT dsh-session-log-export
55
57
  * lib/index.js:488). */
56
58
  export const SESSION_EXPORT_PATH = '/api/session.export';
59
+ /** The host's media route (P55-2): how a Markdown image `![a](path)` in a
60
+ * session body actually loads — the renderer resolves the path against the
61
+ * session cwd into an ABSOLUTE server path and the browser's `<img>` asks
62
+ * for `/api/file?path=<encoded>` natively (no `window.fetch`, no
63
+ * `sessionId`), landing in this very table (RT
64
+ * dsh-api-session-controller lib/types/media-references.js:
65
+ * `registerFetchRoute({ path: '/api/file', methods: ['GET','HEAD'],
66
+ * requestBody: 'buffered', … })`). */
67
+ export const FILE_MEDIA_PATH = '/api/file';
68
+ /** The byte cap one forwarded file may answer with — defined once in
69
+ * src/upload-limits.ts (the one home of every MiB-scale ceiling, per the
70
+ * upload unification and scripts/check-upload-limits.mjs), re-exported
71
+ * here for the consumers the route narrative belongs to. */
72
+ export { MAX_FILE_MEDIA_BYTES };
73
+ /** The response headers every forwarded file answer carries — the host's
74
+ * own /api/file set (RT lib/types/media-references.js BASE_HEADERS +
75
+ * NO_STORE), so a remote-served image meets exactly the sandbox the local
76
+ * route would have given it. */
77
+ const FILE_BASE_HEADERS = {
78
+ 'Cache-Control': 'private, no-store',
79
+ 'X-Content-Type-Options': 'nosniff',
80
+ 'Content-Security-Policy': "sandbox; default-src 'none'",
81
+ };
82
+ /** Extension → Content-Type for the forwarded answers. A fixed table (the
83
+ * host routes through `mime-types`; the reply-body vocabulary fits a table)
84
+ * with the same conservative default. */
85
+ const FILE_MEDIA_TYPES = {
86
+ png: 'image/png',
87
+ jpg: 'image/jpeg',
88
+ jpeg: 'image/jpeg',
89
+ gif: 'image/gif',
90
+ webp: 'image/webp',
91
+ svg: 'image/svg+xml',
92
+ bmp: 'image/bmp',
93
+ ico: 'image/x-icon',
94
+ avif: 'image/avif',
95
+ pdf: 'application/pdf',
96
+ mp4: 'video/mp4',
97
+ webm: 'video/webm',
98
+ mov: 'video/quicktime',
99
+ mp3: 'audio/mpeg',
100
+ wav: 'audio/wav',
101
+ ogg: 'audio/ogg',
102
+ json: 'application/json',
103
+ txt: 'text/plain; charset=utf-8',
104
+ log: 'text/plain; charset=utf-8',
105
+ md: 'text/markdown; charset=utf-8',
106
+ html: 'text/html; charset=utf-8',
107
+ };
108
+ /** The Content-Type one forwarded file answers with, read from its path
109
+ * extension (case-folded; no extension → the stream default). */
110
+ function mediaTypeOfPath(filePath) {
111
+ const dot = filePath.lastIndexOf('.');
112
+ if (dot === -1)
113
+ return 'application/octet-stream';
114
+ return FILE_MEDIA_TYPES[filePath.slice(dot + 1).toLowerCase()] ?? 'application/octet-stream';
115
+ }
57
116
  /** The remote upload cap, the relay's own 500 MiB (relay-server.ts explains
58
117
  * why the host has no number to mirror). Interpolated into the local
59
118
  * oversize refusal so the card names the real limit. */
60
119
  const UPLOAD_CAP_MIB = Math.floor(MAX_UPLOAD_BYTES / (1024 * 1024));
61
- const OVERSIZE_MESSAGE = `文件超过远程上传上限(${UPLOAD_CAP_MIB} MiB)`;
62
- const OFFLINE_MESSAGE = '服务端离线,远程会话暂时无法上传文件';
63
- const MISMATCH_MESSAGE = '此远程会话属于其他主服务端';
64
- /** The mid-upload transport death (T5x): the socket died UNDER the body —
65
- * most plausibly the server's size gate cutting an undeclared oversize
66
- * upload, possibly a network fault. Not a link verdict (the upload route
67
- * never judges the link, T51-fix), so the card must not say 服务端离线. */
68
- const INTERRUPTED_MESSAGE = `上传中断,文件可能超过远程上传上限(${UPLOAD_CAP_MIB} MiB)或网络不稳定`;
120
+ const FILE_MEDIA_CAP_MIB = Math.floor(MAX_FILE_MEDIA_BYTES / (1024 * 1024));
121
+ const FETCH_ROUTE_COPY = {
122
+ zh: {
123
+ oversize: `文件超过远程上传上限(${UPLOAD_CAP_MIB} MiB)`,
124
+ fileMediaOversize: `文件超过远程读取上限(${FILE_MEDIA_CAP_MIB} MiB)`,
125
+ offlineUpload: '服务端离线,远程会话暂时无法上传文件',
126
+ mismatch: '此远程会话属于其他主服务端',
127
+ interrupted: `上传中断,文件可能超过远程上传上限(${UPLOAD_CAP_MIB} MiB)或网络不稳定`,
128
+ exportUnsupported: '远程会话不支持导出',
129
+ offlineFile: '服务端离线,远程文件暂时无法读取',
130
+ fileFailed: '远程文件读取失败',
131
+ fileNotFound: '远程与本机都不存在该文件',
132
+ fileForbidden: '远程文件不可读取',
133
+ },
134
+ en: {
135
+ oversize: `File exceeds the remote upload limit (${UPLOAD_CAP_MIB} MiB)`,
136
+ fileMediaOversize: `File exceeds the remote read limit (${FILE_MEDIA_CAP_MIB} MiB)`,
137
+ offlineUpload: 'Server offline — cannot upload files to this remote session right now',
138
+ mismatch: 'This remote session belongs to another server',
139
+ interrupted: `Upload interrupted — the file may exceed the remote upload limit (${UPLOAD_CAP_MIB} MiB) or the connection dropped`,
140
+ exportUnsupported: 'Export is not supported for remote sessions',
141
+ offlineFile: 'Server offline — remote file cannot be read right now',
142
+ fileFailed: 'Failed to read remote file',
143
+ fileNotFound: 'File not found on the server or on this machine',
144
+ fileForbidden: 'Remote file is not readable',
145
+ },
146
+ };
147
+ function resolveFetchRouteLang(lang) {
148
+ const value = typeof lang === 'function' ? lang() : lang;
149
+ return value === 'en' ? 'en' : 'zh';
150
+ }
69
151
  function isRecord(value) {
70
152
  return typeof value === 'object' && value !== null;
71
153
  }
@@ -96,9 +178,14 @@ export function shouldFallbackInstall(state) {
96
178
  * Check the RAW connection service instance against the shape the wrap
97
179
  * depends on. Pure inspection — nothing is mutated, so a failed check
98
180
  * leaves every route exactly as it was. Only the structural facts refuse;
99
- * the two entries' facts are described in `notes` (they attach lazily).
181
+ * the entries' facts are described in `notes` (they attach lazily).
182
+ *
183
+ * `probeFileMedia` (P55-2) adds the `/api/file` entry's note and — load-
184
+ * bearing for the legacy probe-count pins — its table READ. It defaults to
185
+ * false so a caller without a `resolveRemoteFileScope` (every pre-P55-2
186
+ * call site and test) touches exactly the two routes it always did.
100
187
  */
101
- export function checkFetchRouteShape(connection) {
188
+ export function checkFetchRouteShape(connection, probeFileMedia = false) {
102
189
  if (!isRecord(connection) || Array.isArray(connection)) {
103
190
  return { ok: false, reasons: ['connection: not an object'] };
104
191
  }
@@ -111,6 +198,7 @@ export function checkFetchRouteShape(connection) {
111
198
  notes: [
112
199
  describeEntry(routes.get(FILE_UPLOAD_PATH), 'upload', ['POST'], 'streaming'),
113
200
  describeEntry(routes.get(SESSION_EXPORT_PATH), 'export', ['GET', 'HEAD'], 'buffered'),
201
+ ...(probeFileMedia ? [describeEntry(routes.get(FILE_MEDIA_PATH), 'file', ['GET', 'HEAD'], 'buffered')] : []),
114
202
  ],
115
203
  };
116
204
  }
@@ -190,14 +278,30 @@ const LINK_DOWN_CODES = new Set(['offline', 'unpaired', 'revoked', 'incompatible
190
278
  * present-but-misshaped.
191
279
  */
192
280
  export function installFetchRouteIntercept(options) {
193
- const { connection, relay, getServerId, log } = options;
281
+ const { connection, relay, getServerId, getRelayForServer, log } = options;
282
+ // Exactly one mode, like installIntercept: the pool face or the single
283
+ // row client — a wiring that passes neither would silently send every
284
+ // remote upload to remote-offline, so it is refused here instead.
285
+ if (getRelayForServer === undefined && (relay === undefined || getServerId === undefined)) {
286
+ throw new Error('installFetchRouteIntercept requires either `relay` + `getServerId` (single server) or `getRelayForServer`');
287
+ }
288
+ // The single-server facts, proven present by the guard above. The
289
+ // single-server code path reads THESE (never the optionals), so the old
290
+ // behavior stays byte-identical without a narrowing dance.
291
+ const singleRelay = relay;
292
+ const singleGetServerId = getServerId;
293
+ const resolveRemoteFileScope = options.resolveRemoteFileScope;
294
+ // The media mount's switch (P55-2): its presence probes, wraps and counts
295
+ // `/api/file`; its absence keeps every pre-P55-2 behavior byte-identical —
296
+ // including the exact fetchRoutes probe counts the legacy tests pin.
297
+ const fileMediaEnabled = resolveRemoteFileScope !== undefined;
194
298
  const attachRetryMs = options.attachRetryMs ?? DEFAULT_ATTACH_RETRY_MS;
195
299
  const attachAttempts = options.attachAttempts ?? DEFAULT_ATTACH_ATTEMPTS;
196
- const shape = checkFetchRouteShape(connection);
300
+ const shape = checkFetchRouteShape(connection, fileMediaEnabled);
197
301
  const routes = connection.fetchRoutes;
198
302
  let installed = true;
199
303
  const failures = [];
200
- const counters = { uploadCalls: 0, uploadForwarded: 0, uploadRefused: 0, exportBlocked: 0 };
304
+ const counters = { uploadCalls: 0, uploadForwarded: 0, uploadRefused: 0, exportBlocked: 0, fileCalls: 0, fileForwarded: 0, fileRefused: 0 };
201
305
  // The per-route attach state. `undefined` entry = absent so far (the
202
306
  // retry may still land it); a refusal string = present-but-misshaped,
203
307
  // permanent for this install.
@@ -207,17 +311,40 @@ export function installFetchRouteIntercept(options) {
207
311
  let exportEntry;
208
312
  let savedExport;
209
313
  let exportAttachRefused;
314
+ let fileEntry;
315
+ let savedFile;
316
+ let fileAttachRefused;
317
+ const copy = () => FETCH_ROUTE_COPY[resolveFetchRouteLang(options.lang)];
210
318
  const recordFailure = (route, code) => {
211
319
  if (failures.length >= MAX_FAILURES)
212
320
  failures.shift();
213
321
  failures.push({ time: new Date().toISOString(), route, code });
214
322
  };
323
+ /** The relay client one virtual id's upload travels through, or the
324
+ * refusal. Single-server mode keeps the original order (offline before
325
+ * mismatch); pool mode (MS-4) asks the pool for the id's own server. */
326
+ const uploadRelayFor = (serverId) => {
327
+ if (getRelayForServer !== undefined) {
328
+ const target = getRelayForServer(serverId);
329
+ if (target === undefined)
330
+ return 'remote-mismatch';
331
+ return target.state === 'online' ? target : 'remote-offline';
332
+ }
333
+ const current = singleGetServerId();
334
+ if (singleRelay.state !== 'online' || current === undefined)
335
+ return 'remote-offline';
336
+ if (serverId !== current)
337
+ return 'remote-mismatch';
338
+ return singleRelay;
339
+ };
215
340
  const wrappedUpload = async (request) => {
216
341
  counters.uploadCalls += 1;
217
342
  // The other half may have registered while we were installing: every
218
343
  // real call re-probes a still-missing route before doing anything else.
219
344
  if (installed && exportEntry === undefined && exportAttachRefused === undefined)
220
345
  attachExport();
346
+ if (installed && fileMediaEnabled && fileEntry === undefined && fileAttachRefused === undefined)
347
+ attachFile();
221
348
  const passthrough = () => savedUpload.call(uploadEntry, request);
222
349
  // An uninstalled (chained-over) wrap is INERT, not absent.
223
350
  if (!installed)
@@ -249,27 +376,27 @@ export function installFetchRouteIntercept(options) {
249
376
  counters.uploadRefused += 1;
250
377
  recordFailure('upload', 'payload-too-large');
251
378
  log?.('upload for %s refused locally: payload-too-large (%s declared)', sessionId, declaredLength);
252
- return uploadFailure('payload-too-large', OVERSIZE_MESSAGE);
379
+ return uploadFailure('payload-too-large', copy().oversize);
253
380
  }
254
- const serverId = getServerId();
255
- if (relay.state !== 'online' || serverId === undefined) {
381
+ const target = uploadRelayFor(parts.serverId);
382
+ if (target === 'remote-offline') {
256
383
  counters.uploadRefused += 1;
257
384
  recordFailure('upload', 'remote-offline');
258
385
  log?.('upload for %s refused: relay not online', sessionId);
259
- return uploadFailure('remote-offline', OFFLINE_MESSAGE);
386
+ return uploadFailure('remote-offline', copy().offlineUpload);
260
387
  }
261
- if (parts.serverId !== serverId) {
388
+ if (target === 'remote-mismatch') {
262
389
  counters.uploadRefused += 1;
263
390
  recordFailure('upload', 'remote-mismatch');
264
391
  log?.('upload for %s refused: belongs to another server', sessionId);
265
- return uploadFailure('remote-mismatch', MISMATCH_MESSAGE);
392
+ return uploadFailure('remote-mismatch', copy().mismatch);
266
393
  }
267
394
  counters.uploadForwarded += 1;
268
395
  try {
269
396
  // The request's own body stream rides to the server UNREAD by us; the
270
397
  // browser's abort signal rides along so a cancelled picker closes the
271
398
  // relay round-trip too.
272
- const result = await relay.upload({ sessionId: parts.id, name: firstQuery(url, 'name'), body: request.body, bytes: declared }, request.signal);
399
+ const result = await target.upload({ sessionId: parts.id, name: firstQuery(url, 'name'), body: request.body, bytes: declared }, request.signal);
273
400
  return new Response(result.body, {
274
401
  status: result.status,
275
402
  headers: {
@@ -293,9 +420,9 @@ export function installFetchRouteIntercept(options) {
293
420
  // judges the link — while a status-carrying `offline` is the relay
294
421
  // CHAIN answering 502/503/504, which IS the gateway being down.
295
422
  if (error.code === 'offline' && error.status === undefined) {
296
- return uploadFailure('upload-interrupted', INTERRUPTED_MESSAGE);
423
+ return uploadFailure('upload-interrupted', copy().interrupted);
297
424
  }
298
- return uploadFailure('remote-offline', OFFLINE_MESSAGE);
425
+ return uploadFailure('remote-offline', copy().offlineUpload);
299
426
  }
300
427
  // A business answer — the relay's own refusal (`not-shared`,
301
428
  // `payload-too-large`, …) or the upstream route's failure envelope —
@@ -308,6 +435,8 @@ export function installFetchRouteIntercept(options) {
308
435
  const wrappedExport = async (request) => {
309
436
  if (installed && uploadEntry === undefined && uploadAttachRefused === undefined)
310
437
  attachUpload();
438
+ if (installed && fileMediaEnabled && fileEntry === undefined && fileAttachRefused === undefined)
439
+ attachFile();
311
440
  const passthrough = () => savedExport !== undefined ? savedExport.call(exportEntry, request) : Promise.resolve(new Response('not found', { status: 404 }));
312
441
  if (!installed)
313
442
  return passthrough();
@@ -326,7 +455,140 @@ export function installFetchRouteIntercept(options) {
326
455
  return passthrough();
327
456
  counters.exportBlocked += 1;
328
457
  recordFailure('export', 'remote-unsupported');
329
- return statusFailure(403, 'remote-unsupported', '远程会话不支持导出');
458
+ return statusFailure(403, 'remote-unsupported', copy().exportUnsupported);
459
+ };
460
+ /** One /api/file answer the relay could not serve, with the honest
461
+ * status. The `<img>` consumer reads the status alone (it renders no
462
+ * error body), so unlike the upload wrap these keep real statuses — a
463
+ * 200-with-envelope here would render a BROKEN image while pretending
464
+ * success. */
465
+ const fetchRemoteFile = async (scope, filePath, request, passthrough) => {
466
+ const target = uploadRelayFor(scope.serverId);
467
+ if (target === 'remote-offline') {
468
+ counters.fileRefused += 1;
469
+ recordFailure('file', 'remote-offline');
470
+ return statusFailure(503, 'remote-offline', copy().offlineFile);
471
+ }
472
+ if (target === 'remote-mismatch') {
473
+ counters.fileRefused += 1;
474
+ recordFailure('file', 'remote-mismatch');
475
+ return statusFailure(403, 'remote-mismatch', copy().mismatch);
476
+ }
477
+ if (typeof target.invoke !== 'function') {
478
+ counters.fileRefused += 1;
479
+ recordFailure('file', 'internal');
480
+ return statusFailure(502, 'internal', copy().fileFailed);
481
+ }
482
+ const mediaType = mediaTypeOfPath(filePath);
483
+ try {
484
+ if (request.method === 'HEAD') {
485
+ // Size only: stat answers `bytes` (RT dsh-api-workspace-files
486
+ // lib/typert.remote-client.js — the result carries
487
+ // absolutePath/version and an OPTIONAL `bytes`).
488
+ const stat = await target.invoke('workspaceFiles', 'stat', { workspaceFileScopeId: scope.sessionId, path: filePath }, request.signal);
489
+ const size = isRecord(stat) && typeof stat.bytes === 'number' ? stat.bytes : undefined;
490
+ if (size !== undefined && size > MAX_FILE_MEDIA_BYTES) {
491
+ counters.fileRefused += 1;
492
+ return statusFailure(413, 'file-too-large', copy().fileMediaOversize);
493
+ }
494
+ return new Response(null, {
495
+ status: 200,
496
+ headers: {
497
+ ...FILE_BASE_HEADERS,
498
+ 'Content-Type': mediaType,
499
+ ...(size !== undefined ? { 'Content-Length': String(size) } : {}),
500
+ },
501
+ });
502
+ }
503
+ // Whole file: readBytes answers a marker-encoded result
504
+ // (`data: {$zr-u8: base64}` on the JSON channel), restored here.
505
+ const raw = await target.invoke('workspaceFiles', 'readBytes', { workspaceFileScopeId: scope.sessionId, path: filePath, options: {} }, request.signal);
506
+ const restored = restoreInvokeBinary(raw);
507
+ const data = isRecord(restored) && restored.data instanceof Uint8Array ? restored.data : undefined;
508
+ if (data === undefined) {
509
+ counters.fileRefused += 1;
510
+ recordFailure('file', 'internal');
511
+ return statusFailure(502, 'internal', copy().fileFailed);
512
+ }
513
+ if (data.byteLength > MAX_FILE_MEDIA_BYTES) {
514
+ counters.fileRefused += 1;
515
+ return statusFailure(413, 'file-too-large', copy().fileMediaOversize);
516
+ }
517
+ return new Response(data.slice(), {
518
+ status: 200,
519
+ headers: { ...FILE_BASE_HEADERS, 'Content-Type': mediaType, 'Content-Length': String(data.byteLength) },
520
+ });
521
+ }
522
+ catch (error) {
523
+ const code = error instanceof RelayError ? error.code : 'internal';
524
+ recordFailure('file', code);
525
+ log?.('file %s for %s failed through the relay: %s', filePath, scope.sessionId, code);
526
+ // The file the session cited may exist on BOTH machines (the reply
527
+ // quoted a path the sub-client also has, or the remote record is
528
+ // stale): a not-found answer falls back to the LOCAL route once —
529
+ // its 200 is adopted, anything else becomes our 404.
530
+ if (code === 'workspace-file/not-found' || code === 'FS_NOT_FOUND') {
531
+ const local = await passthrough();
532
+ if (local.status === 200)
533
+ return local;
534
+ counters.fileRefused += 1;
535
+ return statusFailure(404, 'file-not-found', copy().fileNotFound);
536
+ }
537
+ counters.fileRefused += 1;
538
+ if (code === 'workspace-file/too-large' || code === 'FS_TOO_LARGE') {
539
+ return statusFailure(413, 'file-too-large', copy().fileMediaOversize);
540
+ }
541
+ if (code === 'workspace-file/not-regular-file' ||
542
+ code === 'FS_NOT_REGULAR_FILE' ||
543
+ code === 'FS_PERMISSION_DENIED' ||
544
+ code === 'FS_SANDBOX_DENIED' ||
545
+ code === 'not-shared') {
546
+ return statusFailure(403, code, copy().fileForbidden);
547
+ }
548
+ if (LINK_DOWN_CODES.has(code))
549
+ return statusFailure(503, code, copy().offlineFile);
550
+ return statusFailure(502, code, copy().fileFailed);
551
+ }
552
+ };
553
+ const wrappedFile = async (request) => {
554
+ counters.fileCalls += 1;
555
+ // The other halves may have registered while we were installing (the
556
+ // same courtesy the upload and export wrappers pay each other).
557
+ if (installed && uploadEntry === undefined && uploadAttachRefused === undefined)
558
+ attachUpload();
559
+ if (installed && exportEntry === undefined && exportAttachRefused === undefined)
560
+ attachExport();
561
+ const passthrough = () => savedFile !== undefined ? savedFile.call(fileEntry, request) : Promise.resolve(new Response('not found', { status: 404 }));
562
+ // An uninstalled (chained-over) wrap is INERT, not absent.
563
+ if (!installed)
564
+ return passthrough();
565
+ if (request.method !== 'GET' && request.method !== 'HEAD')
566
+ return passthrough();
567
+ let url;
568
+ try {
569
+ url = new URL(request.url);
570
+ }
571
+ catch {
572
+ return passthrough();
573
+ }
574
+ if (url.pathname !== FILE_MEDIA_PATH)
575
+ return passthrough();
576
+ const filePath = firstQuery(url, 'path');
577
+ if (filePath === undefined || filePath === '' || filePath.includes('\0'))
578
+ return passthrough();
579
+ // Which remote session owns this path — an explicit VIRTUAL sessionId
580
+ // in the URL decides on its own (forward-compat for callers that know
581
+ // their session); otherwise the intercept handle attributes by cwd and
582
+ // current-session. `undefined` = the LOCAL route's business.
583
+ const explicit = firstQuery(url, 'sessionId');
584
+ const explicitParts = explicit === undefined || explicit === '' ? undefined : fromVirtual(explicit);
585
+ const scope = explicitParts !== undefined
586
+ ? { serverId: explicitParts.serverId, sessionId: explicitParts.id }
587
+ : resolveRemoteFileScope?.(filePath);
588
+ if (scope === undefined)
589
+ return passthrough();
590
+ counters.fileForwarded += 1;
591
+ return fetchRemoteFile(scope, filePath, request, passthrough);
330
592
  };
331
593
  // ---- the per-route attach (T51-fix) --------------------------------------
332
594
  /** Attach the upload wrapper to its entry, or answer whether the retry
@@ -373,10 +635,35 @@ export function installFetchRouteIntercept(options) {
373
635
  log?.('export route attached');
374
636
  return true;
375
637
  };
638
+ /** The media half of {@link attachUpload} (P55-2). Runs only when the
639
+ * wiring handed a `resolveRemoteFileScope` over — without it the route is
640
+ * never probed at all, which is what keeps the legacy installs (and the
641
+ * probe-count pins) byte-identical. */
642
+ const attachFile = () => {
643
+ if (!fileMediaEnabled || !installed)
644
+ return true;
645
+ if (fileEntry !== undefined)
646
+ return true;
647
+ const candidate = routes.get(FILE_MEDIA_PATH);
648
+ if (candidate === undefined)
649
+ return false;
650
+ const problem = entryProblem(candidate, ['GET', 'HEAD'], 'buffered');
651
+ if (problem !== undefined) {
652
+ fileAttachRefused = problem;
653
+ log?.('file media route attach refused: %s', problem);
654
+ return true;
655
+ }
656
+ fileEntry = candidate;
657
+ savedFile = fileEntry.fetch;
658
+ fileEntry.fetch = wrappedFile;
659
+ log?.('file media route attached');
660
+ return true;
661
+ };
376
662
  // First attach, right now: whatever the table already held is wrapped
377
663
  // before this returns.
378
664
  attachUpload();
379
665
  attachExport();
666
+ attachFile();
380
667
  // The bounded retry for what was absent (T51-fix): a probe every
381
668
  // attachRetryMs, at most attachAttempts of them, stopped early once
382
669
  // nothing is pending. `unref()`ed — startup ordering must never hold the
@@ -394,14 +681,17 @@ export function installFetchRouteIntercept(options) {
394
681
  // itself, so once a route's attach is refused it must not keep the
395
682
  // bounded retry spinning idle past it — only a route that is still
396
683
  // genuinely absent counts as pending. (Mirrors the `uploadPending` /
397
- // `exportPending` diagnostics flags.)
398
- (uploadEntry === undefined && uploadAttachRefused === undefined) ||
684
+ // `exportPending` / `filePending` diagnostics flags.) The media clause
685
+ // exists only when the scope resolver was handed over (P55-2).
686
+ (fileMediaEnabled && fileEntry === undefined && fileAttachRefused === undefined) ||
687
+ (uploadEntry === undefined && uploadAttachRefused === undefined) ||
399
688
  (exportEntry === undefined && exportAttachRefused === undefined);
400
689
  if (stillPending() && attempts < attachAttempts) {
401
690
  retryTimer = setInterval(() => {
402
691
  attempts += 1;
403
692
  attachUpload();
404
693
  attachExport();
694
+ attachFile();
405
695
  if (!stillPending() || attempts >= attachAttempts)
406
696
  stopRetrying();
407
697
  }, attachRetryMs);
@@ -421,6 +711,8 @@ export function installFetchRouteIntercept(options) {
421
711
  uploadEntry.fetch = savedUpload;
422
712
  if (exportEntry !== undefined && exportEntry.fetch === wrappedExport)
423
713
  exportEntry.fetch = savedExport;
714
+ if (fileEntry !== undefined && fileEntry.fetch === wrappedFile)
715
+ fileEntry.fetch = savedFile;
424
716
  },
425
717
  diagnostics() {
426
718
  return {
@@ -432,7 +724,23 @@ export function installFetchRouteIntercept(options) {
432
724
  exportPending: installed && exportEntry === undefined && exportAttachRefused === undefined,
433
725
  uploadAttachRefused,
434
726
  exportAttachRefused,
435
- ...counters,
727
+ // The upload/export counters spread verbatim; the file counters and
728
+ // flags stay ABSENT unless the media mount is enabled (P55-2), so a
729
+ // pre-P55-2 diagnostics consumer sees the exact old key set.
730
+ uploadCalls: counters.uploadCalls,
731
+ uploadForwarded: counters.uploadForwarded,
732
+ uploadRefused: counters.uploadRefused,
733
+ exportBlocked: counters.exportBlocked,
734
+ ...(fileMediaEnabled
735
+ ? {
736
+ fileWrapped: fileEntry !== undefined && fileEntry.fetch === wrappedFile,
737
+ filePending: installed && fileEntry === undefined && fileAttachRefused === undefined,
738
+ fileAttachRefused,
739
+ fileCalls: counters.fileCalls,
740
+ fileForwarded: counters.fileForwarded,
741
+ fileRefused: counters.fileRefused,
742
+ }
743
+ : {}),
436
744
  recentFailures: [...failures],
437
745
  };
438
746
  },
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-route-intercept.js","sourceRoot":"","sources":["../src/fetch-route-intercept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-route-intercept.js","sourceRoot":"","sources":["../src/fetch-route-intercept.ts"],"names":[],"mappings":"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"}