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.
- package/CHANGELOG.md +45 -78
- package/README.md +94 -84
- package/README.zh-CN.md +90 -81
- package/bin/zen-remote.mjs +5 -0
- package/docs/interface.md +6 -6
- package/docs/remote-access.en.md +6 -4
- package/docs/remote-access.md +6 -4
- package/dsh-push.mjs +96 -10
- package/lib/adapters/dsh-better-sidebar/index.js +7 -3
- package/lib/adapters/dsh-better-sidebar/index.js.map +1 -1
- package/lib/admin-routes.js +10 -2
- package/lib/admin-routes.js.map +1 -1
- package/lib/cli/args.js +251 -0
- package/lib/cli/args.js.map +1 -0
- package/lib/cli/bootstrap.js +449 -0
- package/lib/cli/bootstrap.js.map +1 -0
- package/lib/cli/command-setup.js +484 -0
- package/lib/cli/command-setup.js.map +1 -0
- package/lib/cli/commands-client.js +359 -0
- package/lib/cli/commands-client.js.map +1 -0
- package/lib/cli/commands-host.js +1108 -0
- package/lib/cli/commands-host.js.map +1 -0
- package/lib/cli/commands-status.js +279 -0
- package/lib/cli/commands-status.js.map +1 -0
- package/lib/cli/config-writer.js +334 -0
- package/lib/cli/config-writer.js.map +1 -0
- package/lib/cli/context.js +10 -0
- package/lib/cli/context.js.map +1 -0
- package/lib/cli/i18n.js +620 -0
- package/lib/cli/i18n.js.map +1 -0
- package/lib/cli/ipc-client.js +160 -0
- package/lib/cli/ipc-client.js.map +1 -0
- package/lib/cli/ipc-server.js +464 -0
- package/lib/cli/ipc-server.js.map +1 -0
- package/lib/cli/main.js +245 -0
- package/lib/cli/main.js.map +1 -0
- package/lib/cli/qr-terminal.js +48 -0
- package/lib/cli/qr-terminal.js.map +1 -0
- package/lib/client-data/qr.js +286 -0
- package/lib/client-data/qr.js.map +1 -0
- package/lib/client-routes.js +308 -25
- package/lib/client-routes.js.map +1 -1
- package/lib/client.js +1013 -229
- package/lib/config.js +50 -12
- package/lib/config.js.map +1 -1
- package/lib/debug-report.js +28 -1
- package/lib/debug-report.js.map +1 -1
- package/lib/fetch-route-intercept.js +334 -26
- package/lib/fetch-route-intercept.js.map +1 -1
- package/lib/index.js +608 -375
- package/lib/index.js.map +1 -1
- package/lib/intercept.js +1833 -280
- package/lib/intercept.js.map +1 -1
- package/lib/lan-gate-server.cjs +36 -10
- package/lib/merge-streams.js +103 -11
- package/lib/merge-streams.js.map +1 -1
- package/lib/plugin-route-intercept.js +93 -63
- package/lib/plugin-route-intercept.js.map +1 -1
- package/lib/relay-access.js +8 -1
- package/lib/relay-access.js.map +1 -1
- package/lib/relay-client.js +133 -4
- package/lib/relay-client.js.map +1 -1
- package/lib/relay-pool.js +275 -0
- package/lib/relay-pool.js.map +1 -0
- package/lib/relay-server.js +269 -17
- package/lib/relay-server.js.map +1 -1
- package/lib/restart-fields.js +6 -4
- package/lib/restart-fields.js.map +1 -1
- package/lib/share-ops.js +68 -0
- package/lib/share-ops.js.map +1 -1
- package/lib/share-store.js +65 -27
- package/lib/share-store.js.map +1 -1
- package/lib/state-store.js +400 -0
- package/lib/state-store.js.map +1 -0
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts +3 -2
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts.map +1 -1
- package/lib/types/admin-routes.d.ts.map +1 -1
- package/lib/types/cli/args.d.ts +78 -0
- package/lib/types/cli/args.d.ts.map +1 -0
- package/lib/types/cli/bootstrap.d.ts +170 -0
- package/lib/types/cli/bootstrap.d.ts.map +1 -0
- package/lib/types/cli/command-setup.d.ts +72 -0
- package/lib/types/cli/command-setup.d.ts.map +1 -0
- package/lib/types/cli/commands-client.d.ts +36 -0
- package/lib/types/cli/commands-client.d.ts.map +1 -0
- package/lib/types/cli/commands-host.d.ts +82 -0
- package/lib/types/cli/commands-host.d.ts.map +1 -0
- package/lib/types/cli/commands-status.d.ts +46 -0
- package/lib/types/cli/commands-status.d.ts.map +1 -0
- package/lib/types/cli/config-writer.d.ts +92 -0
- package/lib/types/cli/config-writer.d.ts.map +1 -0
- package/lib/types/cli/context.d.ts +39 -0
- package/lib/types/cli/context.d.ts.map +1 -0
- package/lib/types/cli/i18n.d.ts +32 -0
- package/lib/types/cli/i18n.d.ts.map +1 -0
- package/lib/types/cli/ipc-client.d.ts +83 -0
- package/lib/types/cli/ipc-client.d.ts.map +1 -0
- package/lib/types/cli/ipc-server.d.ts +113 -0
- package/lib/types/cli/ipc-server.d.ts.map +1 -0
- package/lib/types/cli/main.d.ts +57 -0
- package/lib/types/cli/main.d.ts.map +1 -0
- package/lib/types/cli/qr-terminal.d.ts +17 -0
- package/lib/types/cli/qr-terminal.d.ts.map +1 -0
- package/lib/types/client/RemoteStatusIcon.d.ts.map +1 -1
- package/lib/types/client/current-session-report.d.ts +4 -0
- package/lib/types/client/current-session-report.d.ts.map +1 -1
- package/lib/types/client/effects/model-group-side.d.ts.map +1 -1
- package/lib/types/client/effects/remote-session.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +47 -3
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
- package/lib/types/client/settings/settings-css.d.ts +1 -1
- package/lib/types/client/settings/settings-css.d.ts.map +1 -1
- package/lib/types/client/styles/remote-session.css.d.ts +1 -1
- package/lib/types/client/styles/remote-session.css.d.ts.map +1 -1
- package/lib/types/client/wizard/GatewayWizard.d.ts.map +1 -1
- package/lib/types/client/wizard/cards/ProxyCard.d.ts.map +1 -1
- package/lib/types/client/wizard/wizard-css.d.ts +1 -1
- package/lib/types/client/wizard/wizard-css.d.ts.map +1 -1
- package/lib/types/client-data/model-group-side.d.ts +23 -2
- package/lib/types/client-data/model-group-side.d.ts.map +1 -1
- package/lib/types/client-data/remote-status.d.ts +47 -1
- package/lib/types/client-data/remote-status.d.ts.map +1 -1
- package/lib/types/client-data/settings-form.d.ts +85 -1
- package/lib/types/client-data/settings-form.d.ts.map +1 -1
- package/lib/types/client-data/wizard.d.ts +56 -1
- package/lib/types/client-data/wizard.d.ts.map +1 -1
- package/lib/types/client-routes.d.ts +25 -1
- package/lib/types/client-routes.d.ts.map +1 -1
- package/lib/types/config.d.ts +40 -14
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/debug-report.d.ts.map +1 -1
- package/lib/types/fetch-route-intercept.d.ts +66 -8
- package/lib/types/fetch-route-intercept.d.ts.map +1 -1
- package/lib/types/index.d.ts +9 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/intercept.d.ts +72 -10
- package/lib/types/intercept.d.ts.map +1 -1
- package/lib/types/merge-streams.d.ts +79 -1
- package/lib/types/merge-streams.d.ts.map +1 -1
- package/lib/types/plugin-route-intercept.d.ts +25 -9
- package/lib/types/plugin-route-intercept.d.ts.map +1 -1
- package/lib/types/relay-access.d.ts +3 -1
- package/lib/types/relay-access.d.ts.map +1 -1
- package/lib/types/relay-client.d.ts +23 -2
- package/lib/types/relay-client.d.ts.map +1 -1
- package/lib/types/relay-pool.d.ts +148 -0
- package/lib/types/relay-pool.d.ts.map +1 -0
- package/lib/types/relay-server.d.ts +30 -3
- package/lib/types/relay-server.d.ts.map +1 -1
- package/lib/types/restart-fields.d.ts +5 -5
- package/lib/types/restart-fields.d.ts.map +1 -1
- package/lib/types/share-ops.d.ts +47 -1
- package/lib/types/share-ops.d.ts.map +1 -1
- package/lib/types/share-store.d.ts.map +1 -1
- package/lib/types/state-store.d.ts +179 -0
- package/lib/types/state-store.d.ts.map +1 -0
- package/lib/types/upload-limits.d.ts +15 -0
- package/lib/types/upload-limits.d.ts.map +1 -1
- package/lib/types/virtual-id.d.ts +21 -0
- package/lib/types/virtual-id.d.ts.map +1 -1
- package/lib/types/wizard/probe.d.ts.map +1 -1
- package/lib/types/wizard/proxy-snippets.d.ts +3 -0
- package/lib/types/wizard/proxy-snippets.d.ts.map +1 -1
- package/lib/types/wizard/routes.d.ts +1 -0
- package/lib/types/wizard/routes.d.ts.map +1 -1
- package/lib/types/wizard/status.d.ts +9 -0
- package/lib/types/wizard/status.d.ts.map +1 -1
- package/lib/types/wizard/verify.d.ts +3 -0
- package/lib/types/wizard/verify.d.ts.map +1 -1
- package/lib/upload-limits.js +15 -0
- package/lib/upload-limits.js.map +1 -1
- package/lib/virtual-id.js +60 -0
- package/lib/virtual-id.js.map +1 -1
- package/lib/wizard/probe.js +46 -1
- package/lib/wizard/probe.js.map +1 -1
- package/lib/wizard/proxy-snippets.js +14 -1
- package/lib/wizard/proxy-snippets.js.map +1 -1
- package/lib/wizard/routes.js +23 -4
- package/lib/wizard/routes.js.map +1 -1
- package/lib/wizard/status.js +21 -0
- package/lib/wizard/status.js.map +1 -1
- package/lib/wizard/verify.js +31 -8
- package/lib/wizard/verify.js.map +1 -1
- package/package.json +8 -4
- package/pwa/icons/badge-96.png +0 -0
- package/pwa/icons/badge.svg +1 -0
- package/pwa/manifest.json +2 -1
- package/pwa/sw.js +3 -1
- package/scripts/check-debug-report.mjs +41 -1
- package/scripts/check-settings-form.mjs +14 -3
- package/scripts/check-settings-view.mjs +247 -0
- package/scripts/check-wizard-ui.mjs +37 -0
- package/src/adapters/dsh-better-sidebar/index.ts +7 -3
- package/src/admin-routes.ts +10 -2
- package/src/cli/args.ts +289 -0
- package/src/cli/bootstrap.ts +569 -0
- package/src/cli/command-setup.ts +540 -0
- package/src/cli/commands-client.ts +369 -0
- package/src/cli/commands-host.ts +1127 -0
- package/src/cli/commands-status.ts +296 -0
- package/src/cli/config-writer.ts +354 -0
- package/src/cli/context.ts +38 -0
- package/src/cli/i18n.ts +645 -0
- package/src/cli/ipc-client.ts +216 -0
- package/src/cli/ipc-server.ts +531 -0
- package/src/cli/main.ts +285 -0
- package/src/cli/qr-terminal.ts +49 -0
- package/src/client/RemoteStatusIcon.tsx +4 -1
- package/src/client/current-session-report.ts +28 -4
- package/src/client/effects/model-group-side.ts +19 -5
- package/src/client/effects/remote-session.ts +26 -6
- package/src/client/locales.ts +96 -6
- package/src/client/settings/SettingsSection.tsx +287 -92
- package/src/client/settings/settings-css.ts +18 -0
- package/src/client/styles/remote-session.css.ts +15 -1
- package/src/client/wizard/GatewayWizard.tsx +470 -109
- package/src/client/wizard/cards/ProxyCard.tsx +2 -1
- package/src/client/wizard/wizard-css.ts +23 -0
- package/src/client-data/model-group-side.ts +37 -10
- package/src/client-data/remote-status.ts +112 -17
- package/src/client-data/settings-form.ts +164 -8
- package/src/client-data/wizard.ts +112 -2
- package/src/client-routes.ts +334 -26
- package/src/config.ts +62 -16
- package/src/debug-report.ts +27 -1
- package/src/fetch-route-intercept.ts +381 -32
- package/src/index.ts +608 -380
- package/src/intercept.ts +1866 -286
- package/src/merge-streams.ts +155 -10
- package/src/plugin-route-intercept.ts +120 -71
- package/src/relay-access.ts +14 -3
- package/src/relay-client.ts +163 -5
- package/src/relay-pool.ts +387 -0
- package/src/relay-server.ts +312 -16
- package/src/restart-fields.ts +6 -4
- package/src/share-ops.ts +82 -1
- package/src/share-store.ts +59 -26
- package/src/state-store.ts +428 -0
- package/src/upload-limits.ts +16 -0
- package/src/virtual-id.ts +57 -0
- package/src/wizard/probe.ts +54 -2
- package/src/wizard/proxy-snippets.ts +17 -2
- package/src/wizard/routes.ts +24 -5
- package/src/wizard/status.ts +28 -0
- package/src/wizard/verify.ts +33 -11
- package/AGENTS.md +0 -185
- package/docs/adr/0001-plugin-bridge-forwards-plugin-routes.md +0 -15
- 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 `` 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
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
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',
|
|
379
|
+
return uploadFailure('payload-too-large', copy().oversize);
|
|
253
380
|
}
|
|
254
|
-
const
|
|
255
|
-
if (
|
|
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',
|
|
386
|
+
return uploadFailure('remote-offline', copy().offlineUpload);
|
|
260
387
|
}
|
|
261
|
-
if (
|
|
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',
|
|
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
|
|
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',
|
|
423
|
+
return uploadFailure('upload-interrupted', copy().interrupted);
|
|
297
424
|
}
|
|
298
|
-
return uploadFailure('remote-offline',
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|