@marineyachtradar/signalk-plugin 0.2.1 → 0.5.0-beta.2
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 +48 -70
- package/package.json +42 -6
- package/plugin/config/schema.d.ts +13 -0
- package/plugin/config/schema.d.ts.map +1 -0
- package/plugin/config/schema.js +48 -0
- package/plugin/config/schema.js.map +1 -0
- package/plugin/index.d.ts +2 -0
- package/plugin/index.d.ts.map +1 -0
- package/plugin/index.js +359 -289
- package/plugin/index.js.map +1 -0
- package/plugin/mayara-client.d.ts +28 -0
- package/plugin/mayara-client.d.ts.map +1 -0
- package/plugin/mayara-client.js +102 -194
- package/plugin/mayara-client.js.map +1 -0
- package/plugin/radar-provider.d.ts +5 -0
- package/plugin/radar-provider.d.ts.map +1 -0
- package/plugin/radar-provider.js +192 -305
- package/plugin/radar-provider.js.map +1 -0
- package/plugin/spoke-forwarder.d.ts +30 -0
- package/plugin/spoke-forwarder.d.ts.map +1 -0
- package/plugin/spoke-forwarder.js +104 -136
- package/plugin/spoke-forwarder.js.map +1 -0
- package/plugin/types.d.ts +21 -0
- package/plugin/types.d.ts.map +1 -0
- package/plugin/types.js +3 -0
- package/plugin/types.js.map +1 -0
- package/public/540.js +2 -0
- package/public/540.js.LICENSE.txt +9 -0
- package/public/805.js +1 -0
- package/public/index.html +27 -39
- package/public/main.js +1 -0
- package/public/remoteEntry.js +1 -0
- package/public/api.js +0 -402
- package/public/assets/mayara_logo.png +0 -0
- package/public/base.css +0 -91
- package/public/control.html +0 -23
- package/public/control.js +0 -1155
- package/public/controls.css +0 -538
- package/public/discovery.css +0 -478
- package/public/favicon.ico +0 -0
- package/public/layout.css +0 -87
- package/public/mayara.js +0 -510
- package/public/proto/RadarMessage.proto +0 -41
- package/public/protobuf/protobuf.js +0 -9112
- package/public/protobuf/protobuf.js.map +0 -1
- package/public/protobuf/protobuf.min.js +0 -8
- package/public/protobuf/protobuf.min.js.map +0 -1
- package/public/radar.svg +0 -29
- package/public/render_webgpu.js +0 -886
- package/public/responsive.css +0 -29
- package/public/van-1.5.2.debug.js +0 -126
- package/public/van-1.5.2.js +0 -140
- package/public/van-1.5.2.min.js +0 -1
- package/public/viewer.html +0 -30
- package/public/viewer.js +0 -797
package/plugin/radar-provider.js
CHANGED
|
@@ -1,308 +1,195 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Implements RadarProviderMethods interface by proxying calls to mayara-server.
|
|
5
|
-
* See: signalk-server/packages/server-api/src/radarapi.ts
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Create a RadarProvider that proxies to mayara-server
|
|
10
|
-
* @param {MayaraClient} client - The mayara-server HTTP client
|
|
11
|
-
* @param {object} app - SignalK app object
|
|
12
|
-
* @returns {object} - RadarProviderMethods implementation
|
|
13
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRadarProvider = createRadarProvider;
|
|
14
4
|
function createRadarProvider(client, app) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
5
|
+
const debug = app.debug.bind(app);
|
|
6
|
+
return {
|
|
7
|
+
async getRadars() {
|
|
8
|
+
try {
|
|
9
|
+
const radars = await client.getRadars();
|
|
10
|
+
return Object.keys(radars);
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
debug(`getRadars error: ${err instanceof Error ? err.message : String(err)}`);
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
async getRadarInfo(radarId) {
|
|
18
|
+
try {
|
|
19
|
+
const radars = await client.getRadars();
|
|
20
|
+
const radarEntry = radars[radarId];
|
|
21
|
+
if (!radarEntry)
|
|
22
|
+
return null;
|
|
23
|
+
const controls = await client.getControls(radarId);
|
|
24
|
+
const capabilities = (await client.getCapabilities(radarId));
|
|
25
|
+
const powerCtrl = controls.power;
|
|
26
|
+
const rangeCtrl = controls.range;
|
|
27
|
+
const status = powerCtrl?.value === 2 ? 'transmit' : powerCtrl?.value === 1 ? 'standby' : 'off';
|
|
28
|
+
return {
|
|
29
|
+
id: radarId,
|
|
30
|
+
name: typeof radarEntry.name === 'string'
|
|
31
|
+
? radarEntry.name
|
|
32
|
+
: typeof radarEntry.model === 'string'
|
|
33
|
+
? `${typeof radarEntry.brand === 'string' ? radarEntry.brand : ''} ${radarEntry.model}`.trim()
|
|
34
|
+
: radarId,
|
|
35
|
+
brand: typeof radarEntry.brand === 'string' ? radarEntry.brand : 'Unknown',
|
|
36
|
+
status: status,
|
|
37
|
+
spokesPerRevolution: Number(capabilities.spokesPerRevolution || 2048),
|
|
38
|
+
maxSpokeLen: Number(capabilities.maxSpokeLength || 512),
|
|
39
|
+
range: Number(rangeCtrl?.value ?? 1852),
|
|
40
|
+
controls: {
|
|
41
|
+
gain: controls.gain ?? {
|
|
42
|
+
auto: true,
|
|
43
|
+
value: 50
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
debug(`getRadarInfo error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
async getCapabilities(radarId) {
|
|
54
|
+
try {
|
|
55
|
+
return (await client.getCapabilities(radarId));
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
debug(`getCapabilities error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
async getState(radarId) {
|
|
63
|
+
try {
|
|
64
|
+
const controls = await client.getControls(radarId);
|
|
65
|
+
const powerCtrl = controls.power;
|
|
66
|
+
const status = powerCtrl?.value === 2 ? 'transmit' : powerCtrl?.value === 1 ? 'standby' : 'off';
|
|
67
|
+
return {
|
|
68
|
+
id: radarId,
|
|
69
|
+
timestamp: new Date().toISOString(),
|
|
70
|
+
status: status,
|
|
71
|
+
controls: controls
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
debug(`getState error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
async getControl(radarId, controlId) {
|
|
80
|
+
try {
|
|
81
|
+
const controls = await client.getControls(radarId);
|
|
82
|
+
return controls[controlId] ?? null;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
debug(`getControl error for ${radarId}/${controlId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
async setPower(radarId, state) {
|
|
90
|
+
try {
|
|
91
|
+
await client.setControl(radarId, 'power', state);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
debug(`setPower error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
async setRange(radarId, range) {
|
|
100
|
+
try {
|
|
101
|
+
await client.setControl(radarId, 'range', range);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
debug(`setRange error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
async setGain(radarId, gain) {
|
|
110
|
+
try {
|
|
111
|
+
const value = { mode: gain.auto ? 'auto' : 'manual', value: gain.value ?? 50 };
|
|
112
|
+
await client.setControl(radarId, 'gain', value);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
debug(`setGain error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
async setSea(radarId, sea) {
|
|
121
|
+
try {
|
|
122
|
+
const value = { mode: sea.auto ? 'auto' : 'manual', value: sea.value ?? 50 };
|
|
123
|
+
await client.setControl(radarId, 'sea', value);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
debug(`setSea error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
async setRain(radarId, rain) {
|
|
132
|
+
try {
|
|
133
|
+
const value = { mode: rain.auto ? 'auto' : 'manual', value: rain.value ?? 0 };
|
|
134
|
+
await client.setControl(radarId, 'rain', value);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
debug(`setRain error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
async setControl(radarId, controlId, value) {
|
|
143
|
+
try {
|
|
144
|
+
await client.setControl(radarId, controlId, value);
|
|
145
|
+
return { success: true };
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
149
|
+
debug(`setControl error for ${radarId}/${controlId}: ${message}`);
|
|
150
|
+
return { success: false, error: message };
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
async setControls(radarId, controls) {
|
|
154
|
+
try {
|
|
155
|
+
await client.setControls(radarId, controls);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
debug(`setControls error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
async getTargets(radarId) {
|
|
164
|
+
try {
|
|
165
|
+
return (await client.getTargets(radarId));
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
debug(`getTargets error for ${radarId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
async acquireTarget(radarId, bearing, distance) {
|
|
173
|
+
try {
|
|
174
|
+
const result = await client.acquireTarget(radarId, bearing, distance);
|
|
175
|
+
return { success: true, targetId: result.targetId };
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
179
|
+
debug(`acquireTarget error for ${radarId}: ${message}`);
|
|
180
|
+
return { success: false, error: message };
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
async cancelTarget(radarId, targetId) {
|
|
184
|
+
try {
|
|
185
|
+
await client.cancelTarget(radarId, targetId);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
debug(`cancelTarget error for ${radarId}/${targetId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
67
192
|
}
|
|
68
|
-
|
|
69
|
-
debug(`getRadarInfo error for ${radarId}: ${err.message}`)
|
|
70
|
-
return null
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
// ============================================
|
|
75
|
-
// Capability and State Methods
|
|
76
|
-
// ============================================
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Get capability manifest for a radar
|
|
80
|
-
* @param {string} radarId - The radar ID
|
|
81
|
-
* @returns {Promise<CapabilityManifest|null>}
|
|
82
|
-
*/
|
|
83
|
-
async getCapabilities(radarId) {
|
|
84
|
-
try {
|
|
85
|
-
return await client.getCapabilities(radarId)
|
|
86
|
-
} catch (err) {
|
|
87
|
-
debug(`getCapabilities error for ${radarId}: ${err.message}`)
|
|
88
|
-
return null
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Get current radar state
|
|
94
|
-
* @param {string} radarId - The radar ID
|
|
95
|
-
* @returns {Promise<RadarState|null>}
|
|
96
|
-
*/
|
|
97
|
-
async getState(radarId) {
|
|
98
|
-
try {
|
|
99
|
-
return await client.getState(radarId)
|
|
100
|
-
} catch (err) {
|
|
101
|
-
debug(`getState error for ${radarId}: ${err.message}`)
|
|
102
|
-
return null
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Get a single control value
|
|
108
|
-
* @param {string} radarId - The radar ID
|
|
109
|
-
* @param {string} controlId - The control ID
|
|
110
|
-
* @returns {Promise<any|null>}
|
|
111
|
-
*/
|
|
112
|
-
async getControl(radarId, controlId) {
|
|
113
|
-
try {
|
|
114
|
-
const state = await client.getState(radarId)
|
|
115
|
-
return state?.controls?.[controlId] ?? null
|
|
116
|
-
} catch (err) {
|
|
117
|
-
debug(`getControl error for ${radarId}/${controlId}: ${err.message}`)
|
|
118
|
-
return null
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
// ============================================
|
|
123
|
-
// Control Methods
|
|
124
|
-
// ============================================
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Set radar power state
|
|
128
|
-
* @param {string} radarId - The radar ID
|
|
129
|
-
* @param {string} state - Power state (off, standby, transmit)
|
|
130
|
-
* @returns {Promise<boolean>}
|
|
131
|
-
*/
|
|
132
|
-
async setPower(radarId, state) {
|
|
133
|
-
try {
|
|
134
|
-
await client.setControl(radarId, 'power', state)
|
|
135
|
-
return true
|
|
136
|
-
} catch (err) {
|
|
137
|
-
debug(`setPower error for ${radarId}: ${err.message}`)
|
|
138
|
-
return false
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Set radar range
|
|
144
|
-
* @param {string} radarId - The radar ID
|
|
145
|
-
* @param {number} range - Range in meters
|
|
146
|
-
* @returns {Promise<boolean>}
|
|
147
|
-
*/
|
|
148
|
-
async setRange(radarId, range) {
|
|
149
|
-
try {
|
|
150
|
-
await client.setControl(radarId, 'range', range)
|
|
151
|
-
return true
|
|
152
|
-
} catch (err) {
|
|
153
|
-
debug(`setRange error for ${radarId}: ${err.message}`)
|
|
154
|
-
return false
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Set radar gain
|
|
160
|
-
* @param {string} radarId - The radar ID
|
|
161
|
-
* @param {object} gain - { auto: boolean, value?: number }
|
|
162
|
-
* @returns {Promise<boolean>}
|
|
163
|
-
*/
|
|
164
|
-
async setGain(radarId, gain) {
|
|
165
|
-
try {
|
|
166
|
-
const value = {
|
|
167
|
-
mode: gain.auto ? 'auto' : 'manual',
|
|
168
|
-
value: gain.value ?? 50
|
|
169
|
-
}
|
|
170
|
-
await client.setControl(radarId, 'gain', value)
|
|
171
|
-
return true
|
|
172
|
-
} catch (err) {
|
|
173
|
-
debug(`setGain error for ${radarId}: ${err.message}`)
|
|
174
|
-
return false
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Set sea clutter
|
|
180
|
-
* @param {string} radarId - The radar ID
|
|
181
|
-
* @param {object} sea - { auto: boolean, value?: number }
|
|
182
|
-
* @returns {Promise<boolean>}
|
|
183
|
-
*/
|
|
184
|
-
async setSea(radarId, sea) {
|
|
185
|
-
try {
|
|
186
|
-
const value = {
|
|
187
|
-
mode: sea.auto ? 'auto' : 'manual',
|
|
188
|
-
value: sea.value ?? 50
|
|
189
|
-
}
|
|
190
|
-
await client.setControl(radarId, 'sea', value)
|
|
191
|
-
return true
|
|
192
|
-
} catch (err) {
|
|
193
|
-
debug(`setSea error for ${radarId}: ${err.message}`)
|
|
194
|
-
return false
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Set rain clutter
|
|
200
|
-
* @param {string} radarId - The radar ID
|
|
201
|
-
* @param {object} rain - { auto: boolean, value?: number }
|
|
202
|
-
* @returns {Promise<boolean>}
|
|
203
|
-
*/
|
|
204
|
-
async setRain(radarId, rain) {
|
|
205
|
-
try {
|
|
206
|
-
const value = {
|
|
207
|
-
mode: rain.auto ? 'auto' : 'manual',
|
|
208
|
-
value: rain.value ?? 0
|
|
209
|
-
}
|
|
210
|
-
await client.setControl(radarId, 'rain', value)
|
|
211
|
-
return true
|
|
212
|
-
} catch (err) {
|
|
213
|
-
debug(`setRain error for ${radarId}: ${err.message}`)
|
|
214
|
-
return false
|
|
215
|
-
}
|
|
216
|
-
},
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Set a single control value
|
|
220
|
-
* @param {string} radarId - The radar ID
|
|
221
|
-
* @param {string} controlId - The control ID
|
|
222
|
-
* @param {any} value - The value to set
|
|
223
|
-
* @returns {Promise<{success: boolean, error?: string}>}
|
|
224
|
-
*/
|
|
225
|
-
async setControl(radarId, controlId, value) {
|
|
226
|
-
try {
|
|
227
|
-
await client.setControl(radarId, controlId, value)
|
|
228
|
-
return { success: true }
|
|
229
|
-
} catch (err) {
|
|
230
|
-
debug(`setControl error for ${radarId}/${controlId}: ${err.message}`)
|
|
231
|
-
return { success: false, error: err.message }
|
|
232
|
-
}
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Set multiple controls at once
|
|
237
|
-
* @param {string} radarId - The radar ID
|
|
238
|
-
* @param {object} controls - Partial controls to update
|
|
239
|
-
* @returns {Promise<boolean>}
|
|
240
|
-
*/
|
|
241
|
-
async setControls(radarId, controls) {
|
|
242
|
-
try {
|
|
243
|
-
await client.setControls(radarId, controls)
|
|
244
|
-
return true
|
|
245
|
-
} catch (err) {
|
|
246
|
-
debug(`setControls error for ${radarId}: ${err.message}`)
|
|
247
|
-
return false
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
|
|
251
|
-
// ============================================
|
|
252
|
-
// ARPA Target Methods
|
|
253
|
-
// ============================================
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Get all tracked ARPA targets
|
|
257
|
-
* @param {string} radarId - The radar ID
|
|
258
|
-
* @returns {Promise<TargetListResponse|null>}
|
|
259
|
-
*/
|
|
260
|
-
async getTargets(radarId) {
|
|
261
|
-
try {
|
|
262
|
-
return await client.getTargets(radarId)
|
|
263
|
-
} catch (err) {
|
|
264
|
-
debug(`getTargets error for ${radarId}: ${err.message}`)
|
|
265
|
-
return null
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Manually acquire a target
|
|
271
|
-
* @param {string} radarId - The radar ID
|
|
272
|
-
* @param {number} bearing - Bearing in degrees (0-360)
|
|
273
|
-
* @param {number} distance - Distance in meters
|
|
274
|
-
* @returns {Promise<{success: boolean, targetId?: number, error?: string}>}
|
|
275
|
-
*/
|
|
276
|
-
async acquireTarget(radarId, bearing, distance) {
|
|
277
|
-
try {
|
|
278
|
-
const result = await client.acquireTarget(radarId, bearing, distance)
|
|
279
|
-
return { success: true, targetId: result.targetId }
|
|
280
|
-
} catch (err) {
|
|
281
|
-
debug(`acquireTarget error for ${radarId}: ${err.message}`)
|
|
282
|
-
return { success: false, error: err.message }
|
|
283
|
-
}
|
|
284
|
-
},
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Cancel tracking of a target
|
|
288
|
-
* @param {string} radarId - The radar ID
|
|
289
|
-
* @param {number} targetId - The target ID
|
|
290
|
-
* @returns {Promise<boolean>}
|
|
291
|
-
*/
|
|
292
|
-
async cancelTarget(radarId, targetId) {
|
|
293
|
-
try {
|
|
294
|
-
await client.cancelTarget(radarId, targetId)
|
|
295
|
-
return true
|
|
296
|
-
} catch (err) {
|
|
297
|
-
debug(`cancelTarget error for ${radarId}/${targetId}: ${err.message}`)
|
|
298
|
-
return false
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// Note: handleStreamConnection is NOT implemented here.
|
|
303
|
-
// Spoke streaming is handled by SpokeForwarder which uses
|
|
304
|
-
// app.binaryStreamManager.emitData() directly.
|
|
305
|
-
}
|
|
193
|
+
};
|
|
306
194
|
}
|
|
307
|
-
|
|
308
|
-
module.exports = createRadarProvider
|
|
195
|
+
//# sourceMappingURL=radar-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radar-provider.js","sourceRoot":"","sources":["../src/radar-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface BinaryStreamManager {
|
|
2
|
+
emitData(streamId: string, data: Buffer): void;
|
|
3
|
+
}
|
|
4
|
+
export interface SpokeForwarderOptions {
|
|
5
|
+
radarId: string;
|
|
6
|
+
url: string;
|
|
7
|
+
binaryStreamManager: BinaryStreamManager;
|
|
8
|
+
debug?: (msg: string) => void;
|
|
9
|
+
reconnectInterval?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class SpokeForwarder {
|
|
12
|
+
private radarId;
|
|
13
|
+
private url;
|
|
14
|
+
private binaryStreamManager;
|
|
15
|
+
private debug;
|
|
16
|
+
private reconnectMs;
|
|
17
|
+
private ws;
|
|
18
|
+
private reconnectTimer;
|
|
19
|
+
private closed;
|
|
20
|
+
private connected;
|
|
21
|
+
private streamId;
|
|
22
|
+
constructor(options: SpokeForwarderOptions);
|
|
23
|
+
start(): void;
|
|
24
|
+
private connect;
|
|
25
|
+
private scheduleReconnect;
|
|
26
|
+
isConnected(): boolean;
|
|
27
|
+
stop(): void;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=spoke-forwarder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spoke-forwarder.d.ts","sourceRoot":"","sources":["../src/spoke-forwarder.ts"],"names":[],"mappings":"AAEA,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAAQ;IAE3B,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,OAAO,EAAE,qBAAqB;IAS1C,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,OAAO;IAkDf,OAAO,CAAC,iBAAiB;IAazB,WAAW,IAAI,OAAO;IAItB,IAAI,IAAI,IAAI;CAoBb"}
|