@blue-soda/dsh-remote 0.5.5 → 0.5.7
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/README.md +2 -2
- package/cordis.patch.yml +30 -30
- package/dist/client.github.js +1 -1
- package/dist/client.js +1 -1
- package/dist/index.js +371 -80
- package/dist/index.js.map +4 -4
- package/dsh-plugin.json +41 -41
- package/package.json +165 -165
- package/dist/acp.d.ts +0 -75
- package/dist/acp.d.ts.map +0 -1
- package/dist/acp.js +0 -61
- package/dist/acp.js.map +0 -1
- package/dist/api-proxy-switch.d.ts +0 -33
- package/dist/api-proxy-switch.d.ts.map +0 -1
- package/dist/api-proxy-switch.js +0 -109
- package/dist/api-proxy-switch.js.map +0 -1
- package/dist/atomic-file.d.ts +0 -16
- package/dist/atomic-file.d.ts.map +0 -1
- package/dist/atomic-file.js +0 -81
- package/dist/atomic-file.js.map +0 -1
- package/dist/bin/doctor.d.ts +0 -3
- package/dist/bin/doctor.d.ts.map +0 -1
- package/dist/bin/doctor.js +0 -13
- package/dist/bin/doctor.js.map +0 -1
- package/dist/cli.d.ts +0 -32
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -289
- package/dist/cli.js.map +0 -1
- package/dist/client-runtime.d.ts +0 -375
- package/dist/client-runtime.d.ts.map +0 -1
- package/dist/client-runtime.js +0 -1768
- package/dist/client-runtime.js.map +0 -1
- package/dist/client-secure-transport.d.ts +0 -23
- package/dist/client-secure-transport.d.ts.map +0 -1
- package/dist/client-secure-transport.js +0 -144
- package/dist/client-secure-transport.js.map +0 -1
- package/dist/client-target-store.d.ts +0 -40
- package/dist/client-target-store.d.ts.map +0 -1
- package/dist/client-target-store.js +0 -79
- package/dist/client-target-store.js.map +0 -1
- package/dist/client.d.ts +0 -13
- package/dist/client.d.ts.map +0 -1
- package/dist/codex/app-server.d.ts +0 -71
- package/dist/codex/app-server.d.ts.map +0 -1
- package/dist/codex/app-server.js +0 -268
- package/dist/codex/app-server.js.map +0 -1
- package/dist/codex/codex-image-codec.d.ts +0 -7
- package/dist/codex/codex-image-codec.d.ts.map +0 -1
- package/dist/codex/codex-image-codec.js +0 -288
- package/dist/codex/codex-image-codec.js.map +0 -1
- package/dist/codex/domain.d.ts +0 -102
- package/dist/codex/domain.d.ts.map +0 -1
- package/dist/codex/domain.js +0 -1323
- package/dist/codex/domain.js.map +0 -1
- package/dist/codex/method-policy.d.ts +0 -338
- package/dist/codex/method-policy.d.ts.map +0 -1
- package/dist/codex/method-policy.js +0 -141
- package/dist/codex/method-policy.js.map +0 -1
- package/dist/codex/peer-bridge.d.ts +0 -57
- package/dist/codex/peer-bridge.d.ts.map +0 -1
- package/dist/codex/peer-bridge.js +0 -299
- package/dist/codex/peer-bridge.js.map +0 -1
- package/dist/codex/permissions.d.ts +0 -4
- package/dist/codex/permissions.d.ts.map +0 -1
- package/dist/codex/permissions.js +0 -21
- package/dist/codex/permissions.js.map +0 -1
- package/dist/codex/session-id.d.ts +0 -10
- package/dist/codex/session-id.d.ts.map +0 -1
- package/dist/codex/session-id.js +0 -15
- package/dist/codex/session-id.js.map +0 -1
- package/dist/codex/virtual-harness.d.ts +0 -209
- package/dist/codex/virtual-harness.d.ts.map +0 -1
- package/dist/codex/virtual-harness.js +0 -2650
- package/dist/codex/virtual-harness.js.map +0 -1
- package/dist/codex-workspace-bridge.d.ts +0 -108
- package/dist/codex-workspace-bridge.d.ts.map +0 -1
- package/dist/codex-workspace-bridge.js +0 -502
- package/dist/codex-workspace-bridge.js.map +0 -1
- package/dist/config.d.ts +0 -99
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -127
- package/dist/config.js.map +0 -1
- package/dist/connection-controller.d.ts +0 -44
- package/dist/connection-controller.d.ts.map +0 -1
- package/dist/connection-controller.js +0 -185
- package/dist/connection-controller.js.map +0 -1
- package/dist/control-route.d.ts +0 -34
- package/dist/control-route.d.ts.map +0 -1
- package/dist/control-route.js +0 -136
- package/dist/control-route.js.map +0 -1
- package/dist/control-runtime.d.ts +0 -138
- package/dist/control-runtime.d.ts.map +0 -1
- package/dist/control-runtime.js +0 -543
- package/dist/control-runtime.js.map +0 -1
- package/dist/control-stream.d.ts +0 -67
- package/dist/control-stream.d.ts.map +0 -1
- package/dist/control-stream.js +0 -179
- package/dist/control-stream.js.map +0 -1
- package/dist/defaults.d.ts +0 -9
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js +0 -9
- package/dist/defaults.js.map +0 -1
- package/dist/file-viewer-bridge.d.ts +0 -30
- package/dist/file-viewer-bridge.d.ts.map +0 -1
- package/dist/file-viewer-bridge.js +0 -128
- package/dist/file-viewer-bridge.js.map +0 -1
- package/dist/file-viewer-contract.d.ts +0 -5
- package/dist/file-viewer-contract.d.ts.map +0 -1
- package/dist/file-viewer-contract.js +0 -4
- package/dist/file-viewer-contract.js.map +0 -1
- package/dist/harness-api-bridge.d.ts +0 -81
- package/dist/harness-api-bridge.d.ts.map +0 -1
- package/dist/harness-api-bridge.js +0 -862
- package/dist/harness-api-bridge.js.map +0 -1
- package/dist/harness-api-history.d.ts +0 -3
- package/dist/harness-api-history.d.ts.map +0 -1
- package/dist/harness-api-history.js +0 -59
- package/dist/harness-api-history.js.map +0 -1
- package/dist/harness-remote-bridge.d.ts +0 -60
- package/dist/harness-remote-bridge.d.ts.map +0 -1
- package/dist/harness-remote-bridge.js +0 -540
- package/dist/harness-remote-bridge.js.map +0 -1
- package/dist/harness-version.d.ts +0 -23
- package/dist/harness-version.d.ts.map +0 -1
- package/dist/harness-version.js +0 -95
- package/dist/harness-version.js.map +0 -1
- package/dist/identity-store.d.ts +0 -45
- package/dist/identity-store.d.ts.map +0 -1
- package/dist/identity-store.js +0 -186
- package/dist/identity-store.js.map +0 -1
- package/dist/ids.d.ts +0 -2
- package/dist/ids.d.ts.map +0 -1
- package/dist/ids.js +0 -17
- package/dist/ids.js.map +0 -1
- package/dist/index.d.ts +0 -78
- package/dist/index.d.ts.map +0 -1
- package/dist/logging.d.ts +0 -18
- package/dist/logging.d.ts.map +0 -1
- package/dist/logging.js +0 -30
- package/dist/logging.js.map +0 -1
- package/dist/loopback-host.d.ts +0 -20
- package/dist/loopback-host.d.ts.map +0 -1
- package/dist/loopback-host.js +0 -245
- package/dist/loopback-host.js.map +0 -1
- package/dist/loopback-preview.d.ts +0 -19
- package/dist/loopback-preview.d.ts.map +0 -1
- package/dist/loopback-preview.js +0 -232
- package/dist/loopback-preview.js.map +0 -1
- package/dist/native-rtc-helper.d.ts +0 -14
- package/dist/native-rtc-helper.d.ts.map +0 -1
- package/dist/native-rtc-helper.js +0 -575
- package/dist/native-rtc-helper.js.map +0 -1
- package/dist/remote-api-proxy.d.ts +0 -17
- package/dist/remote-api-proxy.d.ts.map +0 -1
- package/dist/remote-api-proxy.js +0 -451
- package/dist/remote-api-proxy.js.map +0 -1
- package/dist/remote-directory-browser.d.ts +0 -16
- package/dist/remote-directory-browser.d.ts.map +0 -1
- package/dist/remote-directory-browser.js +0 -48
- package/dist/remote-directory-browser.js.map +0 -1
- package/dist/remote-file-content-provider.d.ts +0 -48
- package/dist/remote-file-content-provider.d.ts.map +0 -1
- package/dist/remote-file-content-provider.js +0 -93
- package/dist/remote-file-content-provider.js.map +0 -1
- package/dist/remote-typert-gateway.d.ts +0 -20
- package/dist/remote-typert-gateway.d.ts.map +0 -1
- package/dist/remote-typert-gateway.js +0 -334
- package/dist/remote-typert-gateway.js.map +0 -1
- package/dist/rpc-binary-attachments.d.ts +0 -33
- package/dist/rpc-binary-attachments.d.ts.map +0 -1
- package/dist/rpc-binary-attachments.js +0 -142
- package/dist/rpc-binary-attachments.js.map +0 -1
- package/dist/rpc-router.d.ts +0 -31
- package/dist/rpc-router.d.ts.map +0 -1
- package/dist/rpc-router.js +0 -201
- package/dist/rpc-router.js.map +0 -1
- package/dist/safe-error.d.ts +0 -8
- package/dist/safe-error.d.ts.map +0 -1
- package/dist/safe-error.js +0 -20
- package/dist/safe-error.js.map +0 -1
- package/dist/server-api.d.ts +0 -109
- package/dist/server-api.d.ts.map +0 -1
- package/dist/server-api.js +0 -520
- package/dist/server-api.js.map +0 -1
- package/dist/server-connection.d.ts +0 -79
- package/dist/server-connection.d.ts.map +0 -1
- package/dist/server-connection.js +0 -1023
- package/dist/server-connection.js.map +0 -1
- package/dist/server-credentials.d.ts +0 -55
- package/dist/server-credentials.d.ts.map +0 -1
- package/dist/server-credentials.js +0 -108
- package/dist/server-credentials.js.map +0 -1
- package/dist/service.d.ts +0 -151
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -448
- package/dist/service.js.map +0 -1
- package/dist/session-format-compat.d.ts +0 -3
- package/dist/session-format-compat.d.ts.map +0 -1
- package/dist/session-format-compat.js +0 -183
- package/dist/session-format-compat.js.map +0 -1
- package/dist/status-stream.d.ts +0 -48
- package/dist/status-stream.d.ts.map +0 -1
- package/dist/status-stream.js +0 -133
- package/dist/status-stream.js.map +0 -1
- package/dist/terminal-policy.d.ts +0 -21
- package/dist/terminal-policy.d.ts.map +0 -1
- package/dist/terminal-policy.js +0 -68
- package/dist/terminal-policy.js.map +0 -1
- package/dist/tui-command.d.ts +0 -13
- package/dist/tui-command.d.ts.map +0 -1
- package/dist/tui-command.js +0 -392
- package/dist/tui-command.js.map +0 -1
- package/dist/typert-gateway-contract.d.ts +0 -59
- package/dist/typert-gateway-contract.d.ts.map +0 -1
- package/dist/typert-gateway-contract.js +0 -2
- package/dist/typert-gateway-contract.js.map +0 -1
- package/dist/typert-gateway-switch.d.ts +0 -85
- package/dist/typert-gateway-switch.d.ts.map +0 -1
- package/dist/typert-gateway-switch.js +0 -448
- package/dist/typert-gateway-switch.js.map +0 -1
- package/dist/types.d.ts +0 -20
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/version.d.ts +0 -12
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -12
- package/dist/version.js.map +0 -1
- package/dist/werift-rtc.d.ts +0 -121
- package/dist/werift-rtc.d.ts.map +0 -1
- package/dist/werift-rtc.js +0 -490
- package/dist/werift-rtc.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-stream.d.ts","sourceRoot":"","sources":["../src/control-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,iFAAiF;AACjF,eAAO,MAAM,gCAAgC,OAAQ,CAAA;AAErD,kFAAkF;AAClF,eAAO,MAAM,mCAAmC,QAAS,CAAA;AAEzD,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,OAAQ,CAAA;AAE3C,sEAAsE;AACtE,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAUD;;;;GAIG;AACH,qBAAa,mBAAmB;IAgB5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAf7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,MAAM,CAAQ;IAEtB;;;OAGG;gBAEgB,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EACnD,OAAO,GAAE,0BAA+B;IAO1C;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD,+CAA+C;IAC/C,KAAK,IAAI,IAAI;IAcb,2EAA2E;IAC3E,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;YAMN,MAAM;YAWN,YAAY;IAW1B;;;OAGG;IACH,OAAO,CAAC,KAAK;IAqBb,4DAA4D;IAC5D,OAAO,CAAC,UAAU;CAWnB"}
|
package/dist/control-stream.js
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loopback status event stream. One `text/event-stream` response per browser
|
|
3
|
-
* control client, fed by an in-process sampler that writes a frame only when the
|
|
4
|
-
* serialized Host status changes, so an idle Local-mode page receives nothing
|
|
5
|
-
* but keep-alive comments.
|
|
6
|
-
*
|
|
7
|
-
* The stream is a push carrier for the same value the unary `status` control
|
|
8
|
-
* endpoint returns; a reconnecting browser therefore receives the complete
|
|
9
|
-
* current status as its first frame instead of waiting for the next change.
|
|
10
|
-
*/
|
|
11
|
-
/** Status sampling period used to detect a change without any client request. */
|
|
12
|
-
export const STATUS_STREAM_SAMPLE_INTERVAL_MS = 1_500;
|
|
13
|
-
/** Comment-frame period that keeps an idle connection observable to both ends. */
|
|
14
|
-
export const STATUS_STREAM_HEARTBEAT_INTERVAL_MS = 15_000;
|
|
15
|
-
/** Reconnect delay advertised to the browser through the SSE `retry` field. */
|
|
16
|
-
export const STATUS_STREAM_RETRY_MS = 3_000;
|
|
17
|
-
const KEEP_ALIVE_FRAME = ': keep-alive\n\n';
|
|
18
|
-
/**
|
|
19
|
-
* Owns the loopback status event stream: subscribers, change-detecting sampler,
|
|
20
|
-
* and keep-alive frames. Sampling runs only while at least one subscriber is
|
|
21
|
-
* attached and stops with the last disconnect.
|
|
22
|
-
*/
|
|
23
|
-
export class ControlStatusStream {
|
|
24
|
-
readStatus;
|
|
25
|
-
subscribers = new Set();
|
|
26
|
-
sampleIntervalMs;
|
|
27
|
-
heartbeatIntervalMs;
|
|
28
|
-
retryMs;
|
|
29
|
-
timer;
|
|
30
|
-
sampling = false;
|
|
31
|
-
payload;
|
|
32
|
-
writtenAt = 0;
|
|
33
|
-
closed = false;
|
|
34
|
-
/**
|
|
35
|
-
* @param readStatus - reads the current status value, the same value the unary control endpoint returns.
|
|
36
|
-
* @param options - sampling, keep-alive, and reconnect periods.
|
|
37
|
-
*/
|
|
38
|
-
constructor(readStatus, options = {}) {
|
|
39
|
-
this.readStatus = readStatus;
|
|
40
|
-
this.sampleIntervalMs = options.sampleIntervalMs ?? STATUS_STREAM_SAMPLE_INTERVAL_MS;
|
|
41
|
-
this.heartbeatIntervalMs = options.heartbeatIntervalMs ?? STATUS_STREAM_HEARTBEAT_INTERVAL_MS;
|
|
42
|
-
this.retryMs = options.retryMs ?? STATUS_STREAM_RETRY_MS;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Write the SSE response head, the current status as its first frame, and keep
|
|
46
|
-
* pushing until the client disconnects or {@link close} runs.
|
|
47
|
-
* @param response - the loopback route response, owned for the connection lifetime.
|
|
48
|
-
*/
|
|
49
|
-
async handle(response) {
|
|
50
|
-
if (this.closed) {
|
|
51
|
-
response.writeHead(503);
|
|
52
|
-
response.end();
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
response.writeHead(200, {
|
|
56
|
-
'content-type': 'text/event-stream',
|
|
57
|
-
'cache-control': 'no-store',
|
|
58
|
-
connection: 'keep-alive',
|
|
59
|
-
});
|
|
60
|
-
try {
|
|
61
|
-
response.write(`retry: ${String(this.retryMs)}\n\n`);
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// A client that vanished before its first frame leaves no stream to own.
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const subscriber = { response, payload: undefined };
|
|
68
|
-
this.subscribers.add(subscriber);
|
|
69
|
-
const detach = () => { this.detach(subscriber); };
|
|
70
|
-
response.on('close', detach);
|
|
71
|
-
response.on('error', detach);
|
|
72
|
-
this.startSampling();
|
|
73
|
-
// The first frame is the current status: a fresh page paints from one pushed
|
|
74
|
-
// value, and a reconnecting page recovers the latest state immediately. A
|
|
75
|
-
// failed read leaves the reader on the last known frame instead of opening
|
|
76
|
-
// with nothing.
|
|
77
|
-
this.write((await this.readSnapshot()) ?? this.payload);
|
|
78
|
-
}
|
|
79
|
-
/** End every open stream and stop sampling. */
|
|
80
|
-
close() {
|
|
81
|
-
this.closed = true;
|
|
82
|
-
this.stopSampling();
|
|
83
|
-
for (const subscriber of [...this.subscribers]) {
|
|
84
|
-
try {
|
|
85
|
-
subscriber.response.end();
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// A client that vanished mid-close has no stream left to end.
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
this.subscribers.clear();
|
|
92
|
-
this.payload = undefined;
|
|
93
|
-
}
|
|
94
|
-
/** Forget one subscriber; the last one to leave also stops the sampler. */
|
|
95
|
-
detach(subscriber) {
|
|
96
|
-
this.subscribers.delete(subscriber);
|
|
97
|
-
if (this.subscribers.size === 0)
|
|
98
|
-
this.stopSampling();
|
|
99
|
-
}
|
|
100
|
-
startSampling() {
|
|
101
|
-
if (this.closed || this.timer !== undefined)
|
|
102
|
-
return;
|
|
103
|
-
this.timer = setInterval(() => { void this.sample(); }, this.sampleIntervalMs);
|
|
104
|
-
}
|
|
105
|
-
stopSampling() {
|
|
106
|
-
if (this.timer === undefined)
|
|
107
|
-
return;
|
|
108
|
-
clearInterval(this.timer);
|
|
109
|
-
this.timer = undefined;
|
|
110
|
-
}
|
|
111
|
-
async sample() {
|
|
112
|
-
if (this.sampling || this.closed)
|
|
113
|
-
return;
|
|
114
|
-
this.sampling = true;
|
|
115
|
-
try {
|
|
116
|
-
const snapshot = await this.readSnapshot();
|
|
117
|
-
if (snapshot !== undefined && !this.closed)
|
|
118
|
-
this.write(snapshot);
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
this.sampling = false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
async readSnapshot() {
|
|
125
|
-
try {
|
|
126
|
-
const value = await this.readStatus();
|
|
127
|
-
return value === undefined ? undefined : JSON.stringify(value) ?? undefined;
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// An unreadable status keeps the last frame; the unary control endpoint
|
|
131
|
-
// reports the same failure to its own caller.
|
|
132
|
-
return undefined;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Write the payload to every subscriber that has not seen it, or one
|
|
137
|
-
* keep-alive comment when the whole connection set is idle.
|
|
138
|
-
*/
|
|
139
|
-
write(snapshot) {
|
|
140
|
-
if (snapshot === undefined || this.subscribers.size === 0)
|
|
141
|
-
return;
|
|
142
|
-
const now = Date.now();
|
|
143
|
-
const fresh = [...this.subscribers].filter(subscriber => subscriber.payload !== snapshot);
|
|
144
|
-
if (fresh.length > 0) {
|
|
145
|
-
const frame = `data: ${snapshot}\n\n`;
|
|
146
|
-
for (const subscriber of fresh) {
|
|
147
|
-
if (this.writeChunk(subscriber, frame))
|
|
148
|
-
subscriber.payload = snapshot;
|
|
149
|
-
else
|
|
150
|
-
this.detach(subscriber);
|
|
151
|
-
}
|
|
152
|
-
this.payload = snapshot;
|
|
153
|
-
this.writtenAt = now;
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (now - this.writtenAt < this.heartbeatIntervalMs)
|
|
157
|
-
return;
|
|
158
|
-
for (const subscriber of [...this.subscribers]) {
|
|
159
|
-
if (!this.writeChunk(subscriber, KEEP_ALIVE_FRAME))
|
|
160
|
-
this.detach(subscriber);
|
|
161
|
-
}
|
|
162
|
-
this.writtenAt = now;
|
|
163
|
-
}
|
|
164
|
-
/** @returns true when the chunk reached a live response. */
|
|
165
|
-
writeChunk(subscriber, chunk) {
|
|
166
|
-
if (subscriber.response.destroyed || subscriber.response.writableEnded)
|
|
167
|
-
return false;
|
|
168
|
-
try {
|
|
169
|
-
subscriber.response.write(chunk);
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
// A socket error surfaces through the response `error` listener, which
|
|
174
|
-
// detaches the subscriber.
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=control-stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-stream.js","sourceRoot":"","sources":["../src/control-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,iFAAiF;AACjF,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAA;AAErD,kFAAkF;AAClF,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAA;AAEzD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAe3C,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAE3C;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAgBX;IAfF,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAA;IACzC,gBAAgB,CAAQ;IACxB,mBAAmB,CAAQ;IAC3B,OAAO,CAAQ;IACxB,KAAK,CAA4C;IACjD,QAAQ,GAAG,KAAK,CAAA;IAChB,OAAO,CAAoB;IAC3B,SAAS,GAAG,CAAC,CAAA;IACb,MAAM,GAAG,KAAK,CAAA;IAEtB;;;OAGG;IACH,YACmB,UAAkC,EACnD,UAAsC,EAAE;QADvB,eAAU,GAAV,UAAU,CAAwB;QAGnD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,gCAAgC,CAAA;QACpF,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,mCAAmC,CAAA;QAC7F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,sBAAsB,CAAA;IAC1D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,QAAwB;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACvB,QAAQ,CAAC,GAAG,EAAE,CAAA;YACd,OAAM;QACR,CAAC;QACD,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;YACtB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB,CAAC,CAAA;QACF,IAAI,CAAC;YACH,QAAQ,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,OAAM;QACR,CAAC;QACD,MAAM,UAAU,GAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;QACrE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC,CAAA;QACtD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC5B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAE5B,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,gBAAgB;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;IAED,+CAA+C;IAC/C,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC1B,CAAC;IAED,2EAA2E;IACnE,MAAM,CAAC,UAA4B;QACzC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACnC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE,CAAA;IACtD,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAM;QACnD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAA,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC/E,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAM;QACpC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;YACrC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,8CAA8C;YAC9C,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,QAA4B;QACxC,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAM;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAA;QACzF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,SAAS,QAAQ,MAAM,CAAA;YACrC,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;oBAAE,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAA;;oBAChE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAA;YACvB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;YACpB,OAAM;QACR,CAAC;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB;YAAE,OAAM;QAC3D,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;IACtB,CAAC;IAED,4DAA4D;IACpD,UAAU,CAAC,UAA4B,EAAE,KAAa;QAC5D,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa;YAAE,OAAO,KAAK,CAAA;QACpF,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,2BAA2B;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
|
package/dist/defaults.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deployment defaults shared by the Host config and the browser bundle.
|
|
3
|
-
*
|
|
4
|
-
* This lives in its own module because the browser bundle cannot import
|
|
5
|
-
* `config.ts`, which resolves the DSH home through Node globals. Both halves
|
|
6
|
-
* must agree on the default Server, so it is declared exactly once here.
|
|
7
|
-
*/
|
|
8
|
-
export declare const DEFAULT_REMOTE_SERVER_URL = "https://sakakibara.ink:8443";
|
|
9
|
-
//# sourceMappingURL=defaults.d.ts.map
|
package/dist/defaults.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,gCAAgC,CAAA"}
|
package/dist/defaults.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deployment defaults shared by the Host config and the browser bundle.
|
|
3
|
-
*
|
|
4
|
-
* This lives in its own module because the browser bundle cannot import
|
|
5
|
-
* `config.ts`, which resolves the DSH home through Node globals. Both halves
|
|
6
|
-
* must agree on the default Server, so it is declared exactly once here.
|
|
7
|
-
*/
|
|
8
|
-
export const DEFAULT_REMOTE_SERVER_URL = 'https://sakakibara.ink:8443';
|
|
9
|
-
//# sourceMappingURL=defaults.js.map
|
package/dist/defaults.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,6BAA6B,CAAA"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { MAX_REMOTE_DIRECTORY_ENTRIES, MAX_REMOTE_FILE_LOCATOR_CHARS, REMOTE_FILE_CHUNK_BYTES, type RemoteFileViewerEndpoint } from './file-viewer-contract.js';
|
|
2
|
-
import type { SafeLogger } from './logging.js';
|
|
3
|
-
export { MAX_REMOTE_DIRECTORY_ENTRIES, MAX_REMOTE_FILE_LOCATOR_CHARS, REMOTE_FILE_CHUNK_BYTES, };
|
|
4
|
-
export type { RemoteFileViewerEndpoint };
|
|
5
|
-
export interface FileViewerHostResult {
|
|
6
|
-
ok: boolean;
|
|
7
|
-
value?: unknown;
|
|
8
|
-
error?: {
|
|
9
|
-
code?: string;
|
|
10
|
-
message?: string;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
export interface FileViewerHostServiceLike {
|
|
14
|
-
handle(endpoint: string, payload: unknown, signal: AbortSignal): Promise<unknown>;
|
|
15
|
-
}
|
|
16
|
-
export interface RemoteFileViewerCallParams {
|
|
17
|
-
endpoint: RemoteFileViewerEndpoint;
|
|
18
|
-
payload: unknown;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Adapts dsh-file-viewer's bounded Host service to the authenticated Remote
|
|
22
|
-
* business channel. Only preview-safe read operations are reachable here.
|
|
23
|
-
*/
|
|
24
|
-
export declare class RemoteFileViewerBridge {
|
|
25
|
-
private readonly service;
|
|
26
|
-
private readonly logger?;
|
|
27
|
-
constructor(service: () => FileViewerHostServiceLike | undefined, logger?: SafeLogger | undefined);
|
|
28
|
-
call(input: unknown): Promise<unknown>;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=file-viewer-bridge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-viewer-bridge.d.ts","sourceRoot":"","sources":["../src/file-viewer-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,GACxB,CAAA;AACD,YAAY,EAAE,wBAAwB,EAAE,CAAA;AAExC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAClF;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,wBAAwB,CAAA;IAClC,OAAO,EAAE,OAAO,CAAA;CACjB;AAqDD;;;GAGG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBADP,OAAO,EAAE,MAAM,yBAAyB,GAAG,SAAS,EACpD,MAAM,CAAC,EAAE,UAAU,YAAA;IAGhC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAyC7C"}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { MAX_REMOTE_DIRECTORY_ENTRIES, MAX_REMOTE_FILE_LOCATOR_CHARS, REMOTE_FILE_CHUNK_BYTES, } from './file-viewer-contract.js';
|
|
3
|
-
import { RpcError } from './rpc-router.js';
|
|
4
|
-
export { MAX_REMOTE_DIRECTORY_ENTRIES, MAX_REMOTE_FILE_LOCATOR_CHARS, REMOTE_FILE_CHUNK_BYTES, };
|
|
5
|
-
const locatorSchema = z.string().min(1).max(MAX_REMOTE_FILE_LOCATOR_CHARS);
|
|
6
|
-
const callSchema = z.discriminatedUnion('endpoint', [
|
|
7
|
-
z.object({
|
|
8
|
-
endpoint: z.literal('stat'),
|
|
9
|
-
payload: z.object({ path: locatorSchema }).strict(),
|
|
10
|
-
}).strict(),
|
|
11
|
-
z.object({
|
|
12
|
-
endpoint: z.literal('readRange'),
|
|
13
|
-
payload: z.object({
|
|
14
|
-
path: locatorSchema,
|
|
15
|
-
offset: z.number().int().nonnegative().safe(),
|
|
16
|
-
length: z.number().int().positive().max(REMOTE_FILE_CHUNK_BYTES),
|
|
17
|
-
}).strict(),
|
|
18
|
-
}).strict(),
|
|
19
|
-
z.object({
|
|
20
|
-
endpoint: z.literal('list'),
|
|
21
|
-
payload: z.object({ path: locatorSchema }).strict(),
|
|
22
|
-
}).strict(),
|
|
23
|
-
]);
|
|
24
|
-
const statResultSchema = z.object({
|
|
25
|
-
path: locatorSchema,
|
|
26
|
-
name: z.string().min(1).max(1024),
|
|
27
|
-
ext: z.string().max(128),
|
|
28
|
-
mime: z.string().min(1).max(256),
|
|
29
|
-
size: z.number().int().nonnegative().safe(),
|
|
30
|
-
mtimeMs: z.number().nonnegative().optional(),
|
|
31
|
-
isDirectory: z.boolean(),
|
|
32
|
-
exists: z.boolean(),
|
|
33
|
-
}).strict();
|
|
34
|
-
const rangeResultSchema = z.object({
|
|
35
|
-
data: z.string().max(Math.ceil(REMOTE_FILE_CHUNK_BYTES / 3) * 4 + 4),
|
|
36
|
-
offset: z.number().int().nonnegative().safe(),
|
|
37
|
-
size: z.number().int().nonnegative().safe(),
|
|
38
|
-
eof: z.boolean(),
|
|
39
|
-
}).strict();
|
|
40
|
-
const directoryEntrySchema = z.object({
|
|
41
|
-
name: z.string().min(1).max(1024),
|
|
42
|
-
path: locatorSchema,
|
|
43
|
-
isDirectory: z.boolean(),
|
|
44
|
-
size: z.number().int().nonnegative().safe().optional(),
|
|
45
|
-
mtimeMs: z.number().nonnegative().optional(),
|
|
46
|
-
}).strict();
|
|
47
|
-
const listResultSchema = z.object({
|
|
48
|
-
path: locatorSchema,
|
|
49
|
-
entries: z.array(directoryEntrySchema).max(MAX_REMOTE_DIRECTORY_ENTRIES),
|
|
50
|
-
}).strict();
|
|
51
|
-
/**
|
|
52
|
-
* Adapts dsh-file-viewer's bounded Host service to the authenticated Remote
|
|
53
|
-
* business channel. Only preview-safe read operations are reachable here.
|
|
54
|
-
*/
|
|
55
|
-
export class RemoteFileViewerBridge {
|
|
56
|
-
service;
|
|
57
|
-
logger;
|
|
58
|
-
constructor(service, logger) {
|
|
59
|
-
this.service = service;
|
|
60
|
-
this.logger = logger;
|
|
61
|
-
}
|
|
62
|
-
async call(input) {
|
|
63
|
-
const params = callSchema.parse(input);
|
|
64
|
-
const service = this.service();
|
|
65
|
-
if (service === undefined) {
|
|
66
|
-
throw new RpcError('FILE_VIEWER_UNAVAILABLE', 'The Remote Host does not have DSH File Viewer available.');
|
|
67
|
-
}
|
|
68
|
-
const startedAt = performance.now();
|
|
69
|
-
const signal = AbortSignal.timeout(30_000);
|
|
70
|
-
let raw;
|
|
71
|
-
try {
|
|
72
|
-
raw = await service.handle(params.endpoint, params.payload, signal);
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
this.logger?.warn('remote file viewer service failed', { endpoint: params.endpoint });
|
|
76
|
-
throw new RpcError('FILE_VIEWER_ERROR', 'The Remote File Viewer could not complete the request.');
|
|
77
|
-
}
|
|
78
|
-
const result = parseHostResult(raw);
|
|
79
|
-
if (!result.ok)
|
|
80
|
-
throw hostFailure(result);
|
|
81
|
-
try {
|
|
82
|
-
const value = params.endpoint === 'stat'
|
|
83
|
-
? statResultSchema.parse(result.value)
|
|
84
|
-
: params.endpoint === 'readRange'
|
|
85
|
-
? rangeResultSchema.parse(result.value)
|
|
86
|
-
: listResultSchema.parse(result.value);
|
|
87
|
-
this.logger?.debug('remote file viewer call ok', {
|
|
88
|
-
endpoint: params.endpoint,
|
|
89
|
-
durationMs: Math.round(performance.now() - startedAt),
|
|
90
|
-
});
|
|
91
|
-
return value;
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
if (error instanceof z.ZodError && params.endpoint === 'list'
|
|
95
|
-
&& isOversizedListing(result.value)) {
|
|
96
|
-
throw new RpcError('RESPONSE_TOO_LARGE', `The remote directory contains more than ${MAX_REMOTE_DIRECTORY_ENTRIES} entries.`, { maxEntries: MAX_REMOTE_DIRECTORY_ENTRIES }, true);
|
|
97
|
-
}
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function parseHostResult(input) {
|
|
103
|
-
if (typeof input !== 'object' || input === null || !('ok' in input) || typeof input.ok !== 'boolean') {
|
|
104
|
-
throw new RpcError('FILE_VIEWER_INVALID_RESPONSE', 'The Remote Host File Viewer returned an invalid response.');
|
|
105
|
-
}
|
|
106
|
-
return input;
|
|
107
|
-
}
|
|
108
|
-
function hostFailure(result) {
|
|
109
|
-
const message = result.error?.message ?? '';
|
|
110
|
-
if (/access denied/i.test(message)) {
|
|
111
|
-
return new RpcError('ACCESS_DENIED', 'The Remote File Viewer denied access to this locator.');
|
|
112
|
-
}
|
|
113
|
-
if (/does not exist|not exist|not found/i.test(message)) {
|
|
114
|
-
return new RpcError('NOT_FOUND', 'The requested remote file does not exist.');
|
|
115
|
-
}
|
|
116
|
-
if (result.error?.code === 'cancelled') {
|
|
117
|
-
return new RpcError('CANCELLED', 'The Remote File Viewer request was cancelled.', undefined, true);
|
|
118
|
-
}
|
|
119
|
-
if (result.error?.code === 'bad-request') {
|
|
120
|
-
return new RpcError('INVALID_MESSAGE', 'The Remote File Viewer request is invalid.');
|
|
121
|
-
}
|
|
122
|
-
return new RpcError('FILE_VIEWER_ERROR', 'The Remote File Viewer could not complete the request.');
|
|
123
|
-
}
|
|
124
|
-
function isOversizedListing(value) {
|
|
125
|
-
return typeof value === 'object' && value !== null && 'entries' in value
|
|
126
|
-
&& Array.isArray(value.entries) && value.entries.length > MAX_REMOTE_DIRECTORY_ENTRIES;
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=file-viewer-bridge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-viewer-bridge.js","sourceRoot":"","sources":["../src/file-viewer-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare const REMOTE_FILE_CHUNK_BYTES: number;
|
|
2
|
-
export declare const MAX_REMOTE_FILE_LOCATOR_CHARS = 4096;
|
|
3
|
-
export declare const MAX_REMOTE_DIRECTORY_ENTRIES = 1000;
|
|
4
|
-
export type RemoteFileViewerEndpoint = 'stat' | 'readRange' | 'list';
|
|
5
|
-
//# sourceMappingURL=file-viewer-contract.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-viewer-contract.d.ts","sourceRoot":"","sources":["../src/file-viewer-contract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,QAAa,CAAA;AACjD,eAAO,MAAM,6BAA6B,OAAO,CAAA;AACjD,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-viewer-contract.js","sourceRoot":"","sources":["../src/file-viewer-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,CAAA;AACjD,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAA;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import type { ApiProxy, RpcResponse } from '@deepseek-ai/dsh-host-apiproxy/api';
|
|
2
|
-
import type { HarnessApiFrameData, HarnessApiStreamClosedData, HarnessApiTransferCommitResult, HarnessApiTransferReadResult } from '@dsh-remote/protocol';
|
|
3
|
-
import type { SafeLogger } from './logging.js';
|
|
4
|
-
import type { TypertGatewayLike } from './typert-gateway-contract.js';
|
|
5
|
-
type PublishFrame = (event: 'harness.api.frame' | 'harness.api.stream.closed', data: HarnessApiFrameData | HarnessApiStreamClosedData) => Promise<void>;
|
|
6
|
-
/**
|
|
7
|
-
* Harness API methods that are safe to expose to an authenticated remote UI.
|
|
8
|
-
* Native open/picker calls, directory mutation, file contents, downloads,
|
|
9
|
-
* attachment upload, and `settings.openDocument` intentionally remain outside
|
|
10
|
-
* this bridge. `session.attachment` is the native read-only lookup used by
|
|
11
|
-
* Harness rc.2 to render an image already referenced by that same session.
|
|
12
|
-
* Directory listing exposes metadata only for workspace picking.
|
|
13
|
-
* `commands.*` follows the official Host registry so the authenticated Remote
|
|
14
|
-
* UI sees the same effective command catalog and handlers as the local UI.
|
|
15
|
-
*
|
|
16
|
-
* The authenticated Remote UI may configure every namespace currently
|
|
17
|
-
* registered with the official Host settings seam. Writes remain bounded and
|
|
18
|
-
* must target that live directory; credential values remain write-only;
|
|
19
|
-
* `settings.openDocument` stays local-only; and `discoverModels` endpoints must
|
|
20
|
-
* be HTTPS (HTTP only for localhost). Anything outside that scope fails closed.
|
|
21
|
-
*/
|
|
22
|
-
export declare const HARNESS_API_ALLOWLIST: readonly ["session.list", "session.search", "session.create", "session.history", "session.models", "session.selectModel", "session.rename", "session.fork", "session.prompt", "session.attachment", "session.updateQueue", "session.cancel", "subagent.list", "subagent.history", "subagent.prompt", "subagent.interrupt", "host.describe", "host.listDirectory", "workspace.list", "workspace.create", "workspace.rename", "workspace.delete", "workspace.insertBefore", "workspace.insertSessionBefore", "workspace.archiveSession", "skill.list", "agentPreset.list", "agentPreset.select", "agentPreset.read", "goal.create", "goal.edit", "goal.pause", "goal.resume", "goal.complete", "goal.clear", "commands.execute", "commands.list", "llm.providers", "llm.models", "llm.discoverModels", "settings.describe", "settings.update", "settings.replace", "settings.mutate", "credentials.describe", "credentials.set", "credentials.unset"];
|
|
23
|
-
export type AllowedHarnessApiMethod = typeof HARNESS_API_ALLOWLIST[number];
|
|
24
|
-
/**
|
|
25
|
-
* The official Typert gateway surface (`typertGateway` service from
|
|
26
|
-
* `dsh-api-gateway`) used to dispatch Harness command endpoints. The ApiProxy
|
|
27
|
-
* has no `commands` domain — commands live behind the Typert registry, which
|
|
28
|
-
* is exactly the path the official Web UI exercises via `/api/commands/*`.
|
|
29
|
-
*/
|
|
30
|
-
export type { TypertGatewayLike } from './typert-gateway-contract.js';
|
|
31
|
-
export declare class HarnessApiBridge {
|
|
32
|
-
private readonly api;
|
|
33
|
-
private readonly publish;
|
|
34
|
-
private readonly maxStreams;
|
|
35
|
-
private readonly logger?;
|
|
36
|
-
private readonly harnessVersion?;
|
|
37
|
-
private readonly methods;
|
|
38
|
-
private readonly streams;
|
|
39
|
-
private readonly respondable;
|
|
40
|
-
private readonly incomingTransfers;
|
|
41
|
-
private readonly outgoingTransfers;
|
|
42
|
-
private readonly mux;
|
|
43
|
-
private readonly host;
|
|
44
|
-
private readonly answer;
|
|
45
|
-
constructor(api: ApiProxy, publish: PublishFrame, maxStreams?: number, logger?: SafeLogger | undefined, typertGateway?: TypertGatewayLike, harnessVersion?: string | undefined);
|
|
46
|
-
/** Answer one ApiProxy call, sending bytes in the form DSH's own connection layer expects. */
|
|
47
|
-
call(input: unknown): Promise<RpcResponse<unknown>>;
|
|
48
|
-
private dispatchCall;
|
|
49
|
-
private callDirectoryFallback;
|
|
50
|
-
private describeFallback;
|
|
51
|
-
openTransfer(input: unknown): {
|
|
52
|
-
opened: true;
|
|
53
|
-
transferId: string;
|
|
54
|
-
};
|
|
55
|
-
appendTransfer(input: unknown): {
|
|
56
|
-
accepted: true;
|
|
57
|
-
transferId: string;
|
|
58
|
-
index: number;
|
|
59
|
-
};
|
|
60
|
-
commitTransfer(input: unknown): Promise<HarnessApiTransferCommitResult>;
|
|
61
|
-
readTransfer(input: unknown): HarnessApiTransferReadResult;
|
|
62
|
-
closeTransfer(input: unknown): {
|
|
63
|
-
closed: boolean;
|
|
64
|
-
transferId: string;
|
|
65
|
-
};
|
|
66
|
-
respond(input: unknown): Promise<unknown>;
|
|
67
|
-
openStream(input: unknown): {
|
|
68
|
-
opened: true;
|
|
69
|
-
streamId: string;
|
|
70
|
-
};
|
|
71
|
-
closeStream(input: unknown): {
|
|
72
|
-
closed: boolean;
|
|
73
|
-
streamId: string;
|
|
74
|
-
};
|
|
75
|
-
closeAll(reason?: HarnessApiStreamClosedData['reason']): Promise<void>;
|
|
76
|
-
private pruneTransfers;
|
|
77
|
-
private pump;
|
|
78
|
-
private trackRespondable;
|
|
79
|
-
private deleteRespondable;
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=harness-api-bridge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"harness-api-bridge.d.ts","sourceRoot":"","sources":["../src/harness-api-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAKR,WAAW,EACZ,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EAEV,mBAAmB,EAEnB,0BAA0B,EAG1B,8BAA8B,EAG9B,4BAA4B,EAC7B,MAAM,sBAAsB,CAAA;AAe7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAK9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,mBAAmB,GAAG,2BAA2B,EAAE,IAAI,EAAE,mBAAmB,GAAG,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AA4IvJ;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,qBAAqB,q5BAgDxB,CAAA;AAEV,MAAM,MAAM,uBAAuB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;AAqC1E;;;;;GAKG;AACH,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAflC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAGzB,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,UAAU,SAAI,EACd,MAAM,CAAC,EAAE,UAAU,YAAA,EACpC,aAAa,CAAC,EAAE,iBAAiB,EAChB,cAAc,CAAC,EAAE,MAAM,YAAA;IAQ1C,8FAA8F;IACxF,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAQ3C,YAAY;YAsDZ,qBAAqB;IASnC,OAAO,CAAC,gBAAgB;IAgBxB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAsBlE,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IA8B/E,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAyC7E,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B;IAoB1D,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAOhE,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAoB9D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAgB5D,QAAQ,CAAC,MAAM,GAAE,0BAA0B,CAAC,QAAQ,CAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjG,OAAO,CAAC,cAAc;YAUR,IAAI;IA4BlB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,iBAAiB;CAK1B"}
|