@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.
Files changed (55) hide show
  1. package/README.md +48 -70
  2. package/package.json +42 -6
  3. package/plugin/config/schema.d.ts +13 -0
  4. package/plugin/config/schema.d.ts.map +1 -0
  5. package/plugin/config/schema.js +48 -0
  6. package/plugin/config/schema.js.map +1 -0
  7. package/plugin/index.d.ts +2 -0
  8. package/plugin/index.d.ts.map +1 -0
  9. package/plugin/index.js +359 -289
  10. package/plugin/index.js.map +1 -0
  11. package/plugin/mayara-client.d.ts +28 -0
  12. package/plugin/mayara-client.d.ts.map +1 -0
  13. package/plugin/mayara-client.js +102 -194
  14. package/plugin/mayara-client.js.map +1 -0
  15. package/plugin/radar-provider.d.ts +5 -0
  16. package/plugin/radar-provider.d.ts.map +1 -0
  17. package/plugin/radar-provider.js +192 -305
  18. package/plugin/radar-provider.js.map +1 -0
  19. package/plugin/spoke-forwarder.d.ts +30 -0
  20. package/plugin/spoke-forwarder.d.ts.map +1 -0
  21. package/plugin/spoke-forwarder.js +104 -136
  22. package/plugin/spoke-forwarder.js.map +1 -0
  23. package/plugin/types.d.ts +21 -0
  24. package/plugin/types.d.ts.map +1 -0
  25. package/plugin/types.js +3 -0
  26. package/plugin/types.js.map +1 -0
  27. package/public/540.js +2 -0
  28. package/public/540.js.LICENSE.txt +9 -0
  29. package/public/805.js +1 -0
  30. package/public/index.html +27 -39
  31. package/public/main.js +1 -0
  32. package/public/remoteEntry.js +1 -0
  33. package/public/api.js +0 -402
  34. package/public/assets/mayara_logo.png +0 -0
  35. package/public/base.css +0 -91
  36. package/public/control.html +0 -23
  37. package/public/control.js +0 -1155
  38. package/public/controls.css +0 -538
  39. package/public/discovery.css +0 -478
  40. package/public/favicon.ico +0 -0
  41. package/public/layout.css +0 -87
  42. package/public/mayara.js +0 -510
  43. package/public/proto/RadarMessage.proto +0 -41
  44. package/public/protobuf/protobuf.js +0 -9112
  45. package/public/protobuf/protobuf.js.map +0 -1
  46. package/public/protobuf/protobuf.min.js +0 -8
  47. package/public/protobuf/protobuf.min.js.map +0 -1
  48. package/public/radar.svg +0 -29
  49. package/public/render_webgpu.js +0 -886
  50. package/public/responsive.css +0 -29
  51. package/public/van-1.5.2.debug.js +0 -126
  52. package/public/van-1.5.2.js +0 -140
  53. package/public/van-1.5.2.min.js +0 -1
  54. package/public/viewer.html +0 -30
  55. package/public/viewer.js +0 -797
@@ -1,308 +1,195 @@
1
- /**
2
- * RadarProvider implementation for SignalK Radar API
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
- const debug = app.debug.bind(app)
16
-
17
- return {
18
- // ============================================
19
- // Required Methods
20
- // ============================================
21
-
22
- /**
23
- * Get list of radar IDs this provider manages
24
- * @returns {Promise<string[]>} - Array of radar IDs
25
- */
26
- async getRadars() {
27
- try {
28
- const radars = await client.getRadars()
29
- // mayara-server returns object keyed by ID
30
- return Object.keys(radars)
31
- } catch (err) {
32
- debug(`getRadars error: ${err.message}`)
33
- return []
34
- }
35
- },
36
-
37
- /**
38
- * Get detailed info for a specific radar
39
- * @param {string} radarId - The radar ID
40
- * @returns {Promise<RadarInfo|null>} - Radar info or null
41
- */
42
- async getRadarInfo(radarId) {
43
- try {
44
- const state = await client.getState(radarId)
45
- if (!state) return null
46
-
47
- const capabilities = await client.getCapabilities(radarId)
48
-
49
- // Build RadarInfo from state and capabilities
50
- return {
51
- id: radarId,
52
- name: capabilities?.model
53
- ? `${capabilities.make || ''} ${capabilities.model}`.trim()
54
- : radarId,
55
- brand: capabilities?.make || 'Unknown',
56
- status: state.status || 'standby',
57
- spokesPerRevolution: capabilities?.characteristics?.spokesPerRevolution || 2048,
58
- maxSpokeLen: capabilities?.characteristics?.maxSpokeLength || 512,
59
- range: state.controls?.range || 1852,
60
- controls: {
61
- gain: state.controls?.gain || { auto: true, value: 50 },
62
- sea: state.controls?.sea || { auto: true, value: 50 },
63
- rain: state.controls?.rain || { value: 0 }
64
- },
65
- // streamUrl undefined = use SignalK's built-in stream endpoint
66
- streamUrl: undefined
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
- } catch (err) {
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"}