ds-harness-remote 0.3.8

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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/cordis.patch.yml +7 -0
  4. package/dist/adapters/agent-adapter.d.ts +35 -0
  5. package/dist/adapters/agent-adapter.d.ts.map +1 -0
  6. package/dist/adapters/agent-adapter.js +80 -0
  7. package/dist/adapters/agent-adapter.js.map +1 -0
  8. package/dist/adapters/permission-adapter.d.ts +13 -0
  9. package/dist/adapters/permission-adapter.d.ts.map +1 -0
  10. package/dist/adapters/permission-adapter.js +67 -0
  11. package/dist/adapters/permission-adapter.js.map +1 -0
  12. package/dist/adapters/session-adapter.d.ts +38 -0
  13. package/dist/adapters/session-adapter.d.ts.map +1 -0
  14. package/dist/adapters/session-adapter.js +230 -0
  15. package/dist/adapters/session-adapter.js.map +1 -0
  16. package/dist/adapters/workspace-adapter.d.ts +13 -0
  17. package/dist/adapters/workspace-adapter.d.ts.map +1 -0
  18. package/dist/adapters/workspace-adapter.js +21 -0
  19. package/dist/adapters/workspace-adapter.js.map +1 -0
  20. package/dist/api-proxy-switch.d.ts +33 -0
  21. package/dist/api-proxy-switch.d.ts.map +1 -0
  22. package/dist/api-proxy-switch.js +107 -0
  23. package/dist/api-proxy-switch.js.map +1 -0
  24. package/dist/bin/doctor.d.ts +3 -0
  25. package/dist/bin/doctor.d.ts.map +1 -0
  26. package/dist/bin/doctor.js +13 -0
  27. package/dist/bin/doctor.js.map +1 -0
  28. package/dist/client-runtime.d.ts +98 -0
  29. package/dist/client-runtime.d.ts.map +1 -0
  30. package/dist/client-runtime.js +421 -0
  31. package/dist/client-runtime.js.map +1 -0
  32. package/dist/client-secure-transport.d.ts +22 -0
  33. package/dist/client-secure-transport.d.ts.map +1 -0
  34. package/dist/client-secure-transport.js +129 -0
  35. package/dist/client-secure-transport.js.map +1 -0
  36. package/dist/client.d.ts +12 -0
  37. package/dist/client.d.ts.map +1 -0
  38. package/dist/client.github.js +2938 -0
  39. package/dist/client.js +2938 -0
  40. package/dist/client.js.map +1 -0
  41. package/dist/config.d.ts +33 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +80 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/connection-controller.d.ts +39 -0
  46. package/dist/connection-controller.d.ts.map +1 -0
  47. package/dist/connection-controller.js +170 -0
  48. package/dist/connection-controller.js.map +1 -0
  49. package/dist/control-runtime.d.ts +36 -0
  50. package/dist/control-runtime.d.ts.map +1 -0
  51. package/dist/control-runtime.js +265 -0
  52. package/dist/control-runtime.js.map +1 -0
  53. package/dist/event-sequencer.d.ts +23 -0
  54. package/dist/event-sequencer.d.ts.map +1 -0
  55. package/dist/event-sequencer.js +54 -0
  56. package/dist/event-sequencer.js.map +1 -0
  57. package/dist/harness-api-bridge.d.ts +55 -0
  58. package/dist/harness-api-bridge.d.ts.map +1 -0
  59. package/dist/harness-api-bridge.js +387 -0
  60. package/dist/harness-api-bridge.js.map +1 -0
  61. package/dist/identity-store.d.ts +45 -0
  62. package/dist/identity-store.d.ts.map +1 -0
  63. package/dist/identity-store.js +183 -0
  64. package/dist/identity-store.js.map +1 -0
  65. package/dist/ids.d.ts +2 -0
  66. package/dist/ids.d.ts.map +1 -0
  67. package/dist/ids.js +17 -0
  68. package/dist/ids.js.map +1 -0
  69. package/dist/index.d.ts +38 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +16091 -0
  72. package/dist/index.js.map +7 -0
  73. package/dist/logging.d.ts +18 -0
  74. package/dist/logging.d.ts.map +1 -0
  75. package/dist/logging.js +30 -0
  76. package/dist/logging.js.map +1 -0
  77. package/dist/pairing-controller.d.ts +52 -0
  78. package/dist/pairing-controller.d.ts.map +1 -0
  79. package/dist/pairing-controller.js +73 -0
  80. package/dist/pairing-controller.js.map +1 -0
  81. package/dist/pending-approvals.d.ts +14 -0
  82. package/dist/pending-approvals.d.ts.map +1 -0
  83. package/dist/pending-approvals.js +52 -0
  84. package/dist/pending-approvals.js.map +1 -0
  85. package/dist/remote-api-proxy.d.ts +12 -0
  86. package/dist/remote-api-proxy.d.ts.map +1 -0
  87. package/dist/remote-api-proxy.js +191 -0
  88. package/dist/remote-api-proxy.js.map +1 -0
  89. package/dist/remote-directory-browser.d.ts +16 -0
  90. package/dist/remote-directory-browser.d.ts.map +1 -0
  91. package/dist/remote-directory-browser.js +48 -0
  92. package/dist/remote-directory-browser.js.map +1 -0
  93. package/dist/rpc-router.d.ts +21 -0
  94. package/dist/rpc-router.d.ts.map +1 -0
  95. package/dist/rpc-router.js +93 -0
  96. package/dist/rpc-router.js.map +1 -0
  97. package/dist/server-api.d.ts +80 -0
  98. package/dist/server-api.d.ts.map +1 -0
  99. package/dist/server-api.js +405 -0
  100. package/dist/server-api.js.map +1 -0
  101. package/dist/server-connection.d.ts +70 -0
  102. package/dist/server-connection.d.ts.map +1 -0
  103. package/dist/server-connection.js +759 -0
  104. package/dist/server-connection.js.map +1 -0
  105. package/dist/server-credentials.d.ts +46 -0
  106. package/dist/server-credentials.d.ts.map +1 -0
  107. package/dist/server-credentials.js +71 -0
  108. package/dist/server-credentials.js.map +1 -0
  109. package/dist/service.d.ts +56 -0
  110. package/dist/service.d.ts.map +1 -0
  111. package/dist/service.js +162 -0
  112. package/dist/service.js.map +1 -0
  113. package/dist/typert-gateway-switch.d.ts +19 -0
  114. package/dist/typert-gateway-switch.d.ts.map +1 -0
  115. package/dist/typert-gateway-switch.js +41 -0
  116. package/dist/typert-gateway-switch.js.map +1 -0
  117. package/dist/types.d.ts +20 -0
  118. package/dist/types.d.ts.map +1 -0
  119. package/dist/types.js +2 -0
  120. package/dist/types.js.map +1 -0
  121. package/dist/version.d.ts +12 -0
  122. package/dist/version.d.ts.map +1 -0
  123. package/dist/version.js +12 -0
  124. package/dist/version.js.map +1 -0
  125. package/dist/werift-rtc.d.ts +85 -0
  126. package/dist/werift-rtc.d.ts.map +1 -0
  127. package/dist/werift-rtc.js +164 -0
  128. package/dist/werift-rtc.js.map +1 -0
  129. package/package.json +98 -0
  130. package/public.d.ts +19 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * werift-backed Node RTC factory (webrtc-implementation-plan.md §6.2).
3
+ *
4
+ * werift is a pure-TypeScript WebRTC implementation with no native addons, so
5
+ * it installs and runs on Linux x64/ARM64 without toolchains. The factory is
6
+ * loaded lazily: `loadWeriftFactory` dynamically imports werift on first use,
7
+ * keeping DSH startup time and memory unaffected for hosts that never receive
8
+ * a WebRTC offer (or run with `forceRelay`).
9
+ */
10
+ import type { RtcIceCandidateInit, RtcPeerConnectionFactory, RtcStats } from '@dsh-remote/webrtc';
11
+ interface WeriftModule {
12
+ RTCPeerConnection: new (config?: WeriftConfig) => WeriftPeerConnection;
13
+ }
14
+ interface WeriftConfig {
15
+ iceServers?: Array<{
16
+ urls: string | string[];
17
+ username?: string;
18
+ credential?: string;
19
+ }>;
20
+ iceUseIpv6?: boolean;
21
+ iceUseLinkLocalAddress?: boolean;
22
+ iceInterfaceAddresses?: {
23
+ udp4?: string;
24
+ udp6?: string;
25
+ };
26
+ }
27
+ interface WeriftPeerConnection {
28
+ connectionState: string;
29
+ iceConnectionState: string;
30
+ iceGatheringState: string;
31
+ signalingState: string;
32
+ onconnectionstatechange: (() => void) | null;
33
+ oniceconnectionstatechange: (() => void) | null;
34
+ onicegatheringstatechange: (() => void) | null;
35
+ onicecandidate: ((event: {
36
+ candidate?: {
37
+ toJSON(): RtcIceCandidateInit;
38
+ };
39
+ }) => void) | null;
40
+ ondatachannel: ((event: {
41
+ channel: WeriftDataChannel;
42
+ }) => void) | null;
43
+ createDataChannel(label: string, options: {
44
+ ordered: boolean;
45
+ }): WeriftDataChannel;
46
+ createOffer(): Promise<{
47
+ type: 'offer' | 'answer';
48
+ sdp: string;
49
+ }>;
50
+ createAnswer(): Promise<{
51
+ type: 'offer' | 'answer';
52
+ sdp: string;
53
+ }>;
54
+ setLocalDescription(description?: {
55
+ type: string;
56
+ sdp?: string;
57
+ }): Promise<unknown>;
58
+ setRemoteDescription(description: {
59
+ type: string;
60
+ sdp?: string;
61
+ }): Promise<void>;
62
+ addIceCandidate(candidate?: RtcIceCandidateInit | null): Promise<void>;
63
+ getStats(): Promise<RtcStats>;
64
+ close(): Promise<void>;
65
+ }
66
+ interface WeriftDataChannel {
67
+ readonly label: string;
68
+ readonly ordered: boolean;
69
+ readyState: string;
70
+ bufferedAmount: number;
71
+ onopen: (() => void) | null;
72
+ onclose: (() => void) | null;
73
+ onerror: (() => void) | null;
74
+ onmessage: ((event: {
75
+ data: string | Uint8Array;
76
+ }) => void) | null;
77
+ send(data: Buffer | string): void;
78
+ close(): void;
79
+ }
80
+ /** Load (once) a werift-backed factory, or `undefined` when it cannot be loaded. */
81
+ export declare function loadWeriftFactory(): Promise<RtcPeerConnectionFactory | undefined>;
82
+ /** Synchronous factory for tests and callers that already resolved werift. */
83
+ export declare function buildWeriftFactory(werift: WeriftModule): RtcPeerConnectionFactory;
84
+ export {};
85
+ //# sourceMappingURL=werift-rtc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"werift-rtc.d.ts","sourceRoot":"","sources":["../src/werift-rtc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * werift-backed Node RTC factory (webrtc-implementation-plan.md §6.2).
3
+ *
4
+ * werift is a pure-TypeScript WebRTC implementation with no native addons, so
5
+ * it installs and runs on Linux x64/ARM64 without toolchains. The factory is
6
+ * loaded lazily: `loadWeriftFactory` dynamically imports werift on first use,
7
+ * keeping DSH startup time and memory unaffected for hosts that never receive
8
+ * a WebRTC offer (or run with `forceRelay`).
9
+ */
10
+ import { networkInterfaces } from 'node:os';
11
+ let cachedFactory;
12
+ /** Load (once) a werift-backed factory, or `undefined` when it cannot be loaded. */
13
+ export async function loadWeriftFactory() {
14
+ if (cachedFactory !== undefined)
15
+ return cachedFactory;
16
+ try {
17
+ const werift = (await import('werift'));
18
+ cachedFactory = buildWeriftFactory(werift);
19
+ return cachedFactory;
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ }
25
+ /** Synchronous factory for tests and callers that already resolved werift. */
26
+ export function buildWeriftFactory(werift) {
27
+ return {
28
+ create(configuration) {
29
+ const hostIpv4 = detectHostIpv4();
30
+ const raw = new werift.RTCPeerConnection({
31
+ iceServers: (configuration.iceServers ?? []),
32
+ iceUseIpv6: false,
33
+ iceUseLinkLocalAddress: false,
34
+ ...(hostIpv4 === undefined ? {} : { iceInterfaceAddresses: { udp4: hostIpv4 } }),
35
+ });
36
+ let onIceCandidate = null;
37
+ let onDataChannel = null;
38
+ raw.onicecandidate = event => {
39
+ if (onIceCandidate === null)
40
+ return;
41
+ onIceCandidate({ candidate: event.candidate === undefined ? null : event.candidate.toJSON() });
42
+ };
43
+ raw.ondatachannel = event => {
44
+ if (onDataChannel === null)
45
+ return;
46
+ onDataChannel({ channel: adaptDataChannel(event.channel) });
47
+ };
48
+ const pc = {
49
+ get connectionState() { return raw.connectionState; },
50
+ get iceConnectionState() { return raw.iceConnectionState; },
51
+ get iceGatheringState() { return raw.iceGatheringState; },
52
+ get signalingState() { return raw.signalingState; },
53
+ set onconnectionstatechange(value) { raw.onconnectionstatechange = value; },
54
+ get onconnectionstatechange() { return raw.onconnectionstatechange; },
55
+ set oniceconnectionstatechange(value) { raw.oniceconnectionstatechange = value; },
56
+ get oniceconnectionstatechange() { return raw.oniceconnectionstatechange; },
57
+ set onicegatheringstatechange(value) { raw.onicegatheringstatechange = value; },
58
+ get onicegatheringstatechange() { return raw.onicegatheringstatechange; },
59
+ set onicecandidate(value) { onIceCandidate = value; },
60
+ get onicecandidate() { return onIceCandidate; },
61
+ set ondatachannel(value) { onDataChannel = value; },
62
+ get ondatachannel() { return onDataChannel; },
63
+ createDataChannel(label, options) {
64
+ return adaptDataChannel(raw.createDataChannel(label, { ordered: options?.ordered ?? true }));
65
+ },
66
+ createOffer() { return raw.createOffer(); },
67
+ createAnswer() { return raw.createAnswer(); },
68
+ setLocalDescription(description) { return raw.setLocalDescription(description).then(() => undefined); },
69
+ setRemoteDescription(description) { return raw.setRemoteDescription(description); },
70
+ addIceCandidate(candidate) { return raw.addIceCandidate(candidate); },
71
+ getStats() { return raw.getStats(); },
72
+ close() { void raw.close().catch(() => undefined); },
73
+ };
74
+ return pc;
75
+ },
76
+ };
77
+ }
78
+ function adaptDataChannel(raw) {
79
+ return {
80
+ get label() { return raw.label; },
81
+ get ordered() { return raw.ordered; },
82
+ get readyState() { return raw.readyState; },
83
+ get bufferedAmount() { return raw.bufferedAmount; },
84
+ binaryType: 'arraybuffer',
85
+ set onopen(value) { raw.onopen = value; },
86
+ get onopen() { return raw.onopen; },
87
+ set onmessage(value) {
88
+ raw.onmessage = value === null ? null : event => value({ data: toArrayBuffer(event.data) });
89
+ },
90
+ get onmessage() { return null; },
91
+ set onclose(value) { raw.onclose = value; },
92
+ get onclose() { return raw.onclose; },
93
+ set onerror(value) { raw.onerror = value; },
94
+ get onerror() { return raw.onerror; },
95
+ onbufferedamountlow: null,
96
+ send(data) {
97
+ const bytes = typeof data === 'string' ? Buffer.byteLength(data) : data.byteLength;
98
+ try {
99
+ raw.send(typeof data === 'string' ? data : Buffer.from(data));
100
+ }
101
+ catch (error) {
102
+ console.error('[werift-send-error] bytes=' + bytes, error instanceof Error ? error.message : error);
103
+ throw error;
104
+ }
105
+ },
106
+ close() { raw.close(); },
107
+ };
108
+ }
109
+ function toArrayBuffer(data) {
110
+ if (typeof data === 'string')
111
+ return data;
112
+ // `Buffer.prototype.slice()` (unlike `Uint8Array.prototype.slice()`) returns a
113
+ // *view* over the pooled 8 KiB receive buffer, so slicing the underlying
114
+ // ArrayBuffer by byte offset/length is required to extract just the message.
115
+ return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
116
+ }
117
+ /**
118
+ * Pick the single best IPv4 host address for ICE gathering.
119
+ *
120
+ * On macOS a host exposes many interfaces (WiFi `en0`, Thunderbolt `en1-4`,
121
+ * `bridge*`, Apple Wireless Direct Link `awdl0`/`llw0`, and several VPN `utun*`
122
+ * tunnels whose small MTUs drop large SCTP packets). Gathering a candidate for
123
+ * every interface lets ICE select a bad path. Restrict werift to one real
124
+ * interface and disable IPv6/link-local so the DataChannel rides the same
125
+ * interface as the Server control connection.
126
+ */
127
+ function detectHostIpv4() {
128
+ const preferred = [];
129
+ const fallback = [];
130
+ for (const [name, addresses] of Object.entries(networkInterfaces())) {
131
+ if (isVirtualInterface(name))
132
+ continue;
133
+ for (const address of addresses ?? []) {
134
+ if (address.internal || address.family !== 'IPv4')
135
+ continue;
136
+ const ip = address.address;
137
+ if (ip.startsWith('127.') || ip.startsWith('169.254.') || isCgnat(ip))
138
+ continue;
139
+ if (isPrivate(ip))
140
+ preferred.push(ip);
141
+ else
142
+ fallback.push(ip);
143
+ }
144
+ }
145
+ return preferred[0] ?? fallback[0];
146
+ }
147
+ function isVirtualInterface(name) {
148
+ return /^(utun|ppp|bridge|awdl|llw|gif|stf|anpi|ap\d|en[1-9]\d*$)/i.test(name);
149
+ }
150
+ function isCgnat(ip) {
151
+ const parts = ip.split('.').map(Number);
152
+ return parts.length === 4 && parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127;
153
+ }
154
+ function isPrivate(ip) {
155
+ const parts = ip.split('.').map(Number);
156
+ if (parts.length !== 4)
157
+ return false;
158
+ if (parts[0] === 10)
159
+ return true;
160
+ if (parts[0] === 192 && parts[1] === 168)
161
+ return true;
162
+ return parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31;
163
+ }
164
+ //# sourceMappingURL=werift-rtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"werift-rtc.js","sourceRoot":"","sources":["../src/werift-rtc.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "ds-harness-remote",
3
+ "version": "0.3.8",
4
+ "description": "DeepSeek 远程连接",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./public.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./public.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./cordis.patch.yml": "./cordis.patch.yml",
14
+ "./client": "./dist/client.js",
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "cordis.patch.yml",
20
+ "public.d.ts",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "dsh": {
25
+ "bundle": {
26
+ "patch": "./cordis.patch.yml"
27
+ },
28
+ "client": {
29
+ "inject": [
30
+ "@deepseek-ai/dsh-client-connection",
31
+ "@deepseek-ai/dsh-client-locale",
32
+ "@deepseek-ai/dsh-client-ui-sidebar",
33
+ "@deepseek-ai/dsh-client-ui-slots",
34
+ "@deepseek-ai/dsh-client-ui-settings",
35
+ "@deepseek-ai/dsh-client-ui-settings-plugins"
36
+ ],
37
+ "platform": "web"
38
+ }
39
+ },
40
+ "dependencies": {
41
+ "@deepseek-ai/schemastery": "^3.18.1",
42
+ "qrcode": "^1.5.4",
43
+ "werift": "0.24.4",
44
+ "zod": "^3.24.1"
45
+ },
46
+ "peerDependencies": {
47
+ "@deepseek-ai/cordis": ">=4.0.1 <5",
48
+ "@deepseek-ai/dsh-client-connection": ">=0.1.0-rc.6 <0.2.0",
49
+ "@deepseek-ai/dsh-client-locale": ">=0.1.0-rc.6 <0.2.0",
50
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.1.0-rc.6 <0.2.0",
51
+ "@deepseek-ai/dsh-client-ui-settings-plugins": ">=0.1.0-rc.6 <0.2.0",
52
+ "@deepseek-ai/dsh-client-ui-sidebar": ">=0.1.0-rc.6 <0.2.0",
53
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.1.0-rc.6 <0.2.0",
54
+ "@deepseek-ai/dsh-host-apiproxy": ">=0.1.0-rc.6 <0.2.0",
55
+ "@deepseek-ai/dsh-settings": ">=0.1.0-rc.6 <0.2.0",
56
+ "react": ">=18.2.0 <19"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@deepseek-ai/dsh-client-connection": {
60
+ "optional": true
61
+ },
62
+ "@deepseek-ai/dsh-client-locale": {
63
+ "optional": true
64
+ },
65
+ "@deepseek-ai/dsh-client-ui-sidebar": {
66
+ "optional": true
67
+ },
68
+ "@deepseek-ai/dsh-client-ui-slots": {
69
+ "optional": true
70
+ },
71
+ "@deepseek-ai/dsh-client-ui-settings": {
72
+ "optional": true
73
+ },
74
+ "@deepseek-ai/dsh-client-ui-settings-plugins": {
75
+ "optional": true
76
+ }
77
+ },
78
+ "devDependencies": {
79
+ "@deepseek-ai/cordis": "4.0.1",
80
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.6",
81
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.0-rc.6",
82
+ "@deepseek-ai/dsh-host-apiproxy": "0.1.0-rc.6",
83
+ "@deepseek-ai/dsh-settings": "0.1.0-rc.6",
84
+ "@types/qrcode": "^1.5.5",
85
+ "esbuild": "^0.25.0",
86
+ "typescript": "^5.7.3",
87
+ "vitest": "^2.1.8",
88
+ "@dsh-remote/crypto": "0.1.0",
89
+ "@dsh-remote/webrtc": "0.1.0",
90
+ "@dsh-remote/client-core": "0.1.0",
91
+ "@dsh-remote/protocol": "0.1.0"
92
+ },
93
+ "scripts": {
94
+ "build": "node scripts/verify-version-sync.mjs && tsc -p tsconfig.json && node scripts/build-bundles.mjs",
95
+ "check": "node scripts/verify-version-sync.mjs && tsc -p tsconfig.test.json",
96
+ "test": "node scripts/verify-version-sync.mjs && vitest run"
97
+ }
98
+ }
package/public.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { Context } from '@deepseek-ai/cordis'
2
+
3
+ export interface Config {
4
+ enabled?: boolean
5
+ role?: 'host' | 'client' | 'both'
6
+ serverUrl?: string
7
+ deviceName?: string
8
+ forceRelay?: boolean
9
+ logLevel?: 'debug' | 'info' | 'warn' | 'error'
10
+ reconnect?: boolean | {
11
+ initialDelayMs?: number
12
+ maxDelayMs?: number
13
+ jitter?: number
14
+ }
15
+ }
16
+
17
+ export declare const name: 'dsh-remote'
18
+ export declare const Config: unknown
19
+ export declare function apply(ctx: Context, config?: Config): void