@marineyachtradar/signalk-plugin 1.1.1 → 1.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -4
- package/plugin/index.js +204 -95
- package/plugin/index.js.map +1 -1
- package/plugin/mayara-client.d.ts +6 -0
- package/plugin/mayara-client.d.ts.map +1 -1
- package/plugin/mayara-client.js +9 -0
- package/plugin/mayara-client.js.map +1 -1
- package/plugin/notification-forwarder.d.ts +91 -0
- package/plugin/notification-forwarder.d.ts.map +1 -0
- package/plugin/notification-forwarder.js +200 -0
- package/plugin/notification-forwarder.js.map +1 -0
- package/public/index.html +2 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marineyachtradar/signalk-plugin",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-beta.1",
|
|
4
4
|
"description": "MaYaRa Radar - Connect SignalK to mayara-server",
|
|
5
5
|
"main": "plugin/index.js",
|
|
6
6
|
"signalk-plugin-enabled-by-default": true,
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@sinclair/typebox": "^0.34.0",
|
|
51
|
+
"http-proxy-middleware": "^3.0.5",
|
|
51
52
|
"ws": "^8.14.0"
|
|
52
53
|
},
|
|
53
54
|
"peerDependencies": {
|
|
@@ -66,15 +67,15 @@
|
|
|
66
67
|
"@types/express": "^5.0.0",
|
|
67
68
|
"@types/node": "^22.0.0",
|
|
68
69
|
"@types/ws": "^8.5.0",
|
|
70
|
+
"babel-loader": "^10.1.1",
|
|
69
71
|
"eslint": "^10.3.0",
|
|
70
72
|
"eslint-config-prettier": "^10.0.0",
|
|
71
73
|
"eslint-plugin-prettier": "^5.0.0",
|
|
72
74
|
"prettier": "^3.0.0",
|
|
73
|
-
"typescript": "^6.0.3",
|
|
74
|
-
"typescript-eslint": "^8.0.0",
|
|
75
|
-
"babel-loader": "^10.1.1",
|
|
76
75
|
"react": "^19.2.4",
|
|
77
76
|
"react-dom": "^19.2.4",
|
|
77
|
+
"typescript": "^6.0.3",
|
|
78
|
+
"typescript-eslint": "^8.0.0",
|
|
78
79
|
"vitest": "^4.1.5",
|
|
79
80
|
"webpack": "^5.105.4",
|
|
80
81
|
"webpack-cli": "^7.0.2"
|
package/plugin/index.js
CHANGED
|
@@ -1,54 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
const
|
|
3
|
+
const http_1 = require("http");
|
|
4
|
+
const http_proxy_middleware_1 = require("http-proxy-middleware");
|
|
37
5
|
const mayara_client_1 = require("./mayara-client");
|
|
38
6
|
const radar_provider_1 = require("./radar-provider");
|
|
39
7
|
const spoke_forwarder_1 = require("./spoke-forwarder");
|
|
8
|
+
const notification_forwarder_1 = require("./notification-forwarder");
|
|
40
9
|
const schema_1 = require("./config/schema");
|
|
41
10
|
const signalk_token_1 = require("./signalk-token");
|
|
42
11
|
const MAYARA_IMAGE = 'ghcr.io/marineyachtradar/mayara-server';
|
|
43
12
|
const CONTAINER_NAME = 'mayara-server';
|
|
44
13
|
const PLUGIN_ID = 'mayara-server-signalk-plugin';
|
|
45
14
|
const SAFE_TAG = /^[a-zA-Z0-9._-]+$/;
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
// by `containers.resolveHostPath()`.
|
|
51
|
-
const TOKEN_DIR_IN_CONTAINER = '/run/mayara';
|
|
15
|
+
// Same-origin path the SK server forwards to mayara-server's :6502.
|
|
16
|
+
// Keeps the browser on the SK port (3000 / 443), so HTTPS works and
|
|
17
|
+
// only one firewall port needs to be open.
|
|
18
|
+
const GUI_PROXY_PATH = `/plugins/${PLUGIN_ID}/gui`;
|
|
52
19
|
/**
|
|
53
20
|
* Sensible default resource limits for the mayara-server container.
|
|
54
21
|
* Tested on a Pi 5 8GB with a Garmin xHD2 radar at 24 NM range.
|
|
@@ -78,12 +45,22 @@ module.exports = function (app) {
|
|
|
78
45
|
let client = null;
|
|
79
46
|
let currentSettings = null;
|
|
80
47
|
const spokeForwarders = new Map();
|
|
48
|
+
// Single instance: mayara emits notifications on the server-wide v1
|
|
49
|
+
// stream, not per-radar, so we only need one connection regardless of
|
|
50
|
+
// how many radars are discovered.
|
|
51
|
+
let notificationForwarder = null;
|
|
81
52
|
let discoveryInterval = null;
|
|
82
53
|
// Set true on stop() so the in-flight token poller exits its loop.
|
|
83
54
|
let tokenPollerCancelled = false;
|
|
84
55
|
let reconnectInterval = null;
|
|
85
56
|
let isConnected = false;
|
|
86
57
|
const knownRadars = new Set();
|
|
58
|
+
// Track the WebSocket upgrade listener so stop() can detach it.
|
|
59
|
+
// The HTTP server outlives plugin restarts (disable/enable, config
|
|
60
|
+
// saves), so leaving the listener registered would accumulate one
|
|
61
|
+
// per restart cycle and cause duplicate proxy.upgrade() calls.
|
|
62
|
+
let upgradeListener = null;
|
|
63
|
+
let upgradeListenerServer = null;
|
|
87
64
|
const plugin = {
|
|
88
65
|
id: PLUGIN_ID,
|
|
89
66
|
name: 'MaYaRa Radar (Server)',
|
|
@@ -129,6 +106,10 @@ module.exports = function (app) {
|
|
|
129
106
|
}
|
|
130
107
|
spokeForwarders.clear();
|
|
131
108
|
knownRadars.clear();
|
|
109
|
+
if (notificationForwarder) {
|
|
110
|
+
notificationForwarder.stop();
|
|
111
|
+
notificationForwarder = null;
|
|
112
|
+
}
|
|
132
113
|
if (client) {
|
|
133
114
|
client.close();
|
|
134
115
|
client = null;
|
|
@@ -151,10 +132,143 @@ module.exports = function (app) {
|
|
|
151
132
|
app.debug(`Error stopping mayara-server container: ${errMsg(err)}`);
|
|
152
133
|
}
|
|
153
134
|
}
|
|
135
|
+
if (upgradeListener && upgradeListenerServer) {
|
|
136
|
+
upgradeListenerServer.removeListener('upgrade', upgradeListener);
|
|
137
|
+
upgradeListener = null;
|
|
138
|
+
upgradeListenerServer = null;
|
|
139
|
+
}
|
|
154
140
|
isConnected = false;
|
|
155
141
|
app.setPluginStatus('Stopped');
|
|
156
142
|
},
|
|
157
143
|
registerWithRouter(router) {
|
|
144
|
+
// Same-origin reverse proxy to mayara-server's :6502. The icon
|
|
145
|
+
// click in the SK admin lands on the splash page (public/
|
|
146
|
+
// index.html), which redirects to `${GUI_PROXY_PATH}/`. From
|
|
147
|
+
// there the browser only ever talks to the SK server, so HTTPS
|
|
148
|
+
// works without mixed content and only the SK port needs to be
|
|
149
|
+
// open externally.
|
|
150
|
+
//
|
|
151
|
+
// `router` flag rewriter resolves the target on every request,
|
|
152
|
+
// so changes to host/port in the plugin config take effect
|
|
153
|
+
// without restarting the plugin (matches the live read in
|
|
154
|
+
// /api/gui-url).
|
|
155
|
+
// Rewrite the absolute `ws://host:port/...` URLs mayara puts in
|
|
156
|
+
// its radar-list JSON to same-origin paths the browser can reach
|
|
157
|
+
// via this proxy. control.js opens `new WebSocket(streamUrl)` on
|
|
158
|
+
// the value verbatim, so without this the GUI would try to talk
|
|
159
|
+
// directly to mayara's port (defeating the whole point).
|
|
160
|
+
const rewriteStreamUrl = (raw) => {
|
|
161
|
+
try {
|
|
162
|
+
const u = new URL(raw);
|
|
163
|
+
// Map mayara's /signalk/... paths to /plugins/<id>/gui/signalk/...
|
|
164
|
+
// (the `/gui` mount is where ws-upgrade dispatch hooks in).
|
|
165
|
+
return `${GUI_PROXY_PATH}${u.pathname}${u.search}`;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return raw;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const guiProxy = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
172
|
+
router: () => {
|
|
173
|
+
const host = currentSettings?.host ?? 'localhost';
|
|
174
|
+
const port = currentSettings?.port ?? 6502;
|
|
175
|
+
const proto = currentSettings?.secure ? 'https' : 'http';
|
|
176
|
+
return `${proto}://${host}:${port}`;
|
|
177
|
+
},
|
|
178
|
+
// `router.use('/gui', guiProxy)` strips the `/gui` prefix
|
|
179
|
+
// before the middleware sees the request, so the proxy
|
|
180
|
+
// receives paths like `/` (for the GUI root) and
|
|
181
|
+
// `/signalk/v2/api/...` (for the WebSocket-emitting REST API).
|
|
182
|
+
// mayara-server serves its UI at `/gui/...` but its API +
|
|
183
|
+
// WebSockets at `/signalk/...`. We need both classes of
|
|
184
|
+
// request to reach mayara, so prepend `/gui` ONLY for paths
|
|
185
|
+
// that aren't already `/signalk/...`.
|
|
186
|
+
target: 'http://localhost:6502', // overridden by `router`
|
|
187
|
+
changeOrigin: true,
|
|
188
|
+
ws: true,
|
|
189
|
+
xfwd: true,
|
|
190
|
+
followRedirects: false,
|
|
191
|
+
pathRewrite: (path) => (path.startsWith('/signalk/') ? path : `/gui${path}`),
|
|
192
|
+
selfHandleResponse: true,
|
|
193
|
+
on: {
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises -- responseInterceptor returns a function whose Promise return value is awaited by node-http-proxy internally.
|
|
195
|
+
proxyRes: (0, http_proxy_middleware_1.responseInterceptor)((buffer, proxyRes, req) => {
|
|
196
|
+
const ct = proxyRes.headers['content-type'] ?? '';
|
|
197
|
+
// Only the radar-list JSON contains stream URLs we need
|
|
198
|
+
// to rewrite. Everything else (HTML, JS, CSS, binary
|
|
199
|
+
// images, other JSON) passes through untouched.
|
|
200
|
+
if (ct.includes('application/json') &&
|
|
201
|
+
req.url?.includes('/signalk/v2/api/vessels/self/radars')) {
|
|
202
|
+
try {
|
|
203
|
+
const json = JSON.parse(buffer.toString('utf8'));
|
|
204
|
+
for (const radar of Object.values(json)) {
|
|
205
|
+
if (radar.streamUrl)
|
|
206
|
+
radar.streamUrl = rewriteStreamUrl(radar.streamUrl);
|
|
207
|
+
if (radar.spokeDataUrl)
|
|
208
|
+
radar.spokeDataUrl = rewriteStreamUrl(radar.spokeDataUrl);
|
|
209
|
+
}
|
|
210
|
+
return Promise.resolve(JSON.stringify(json));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return Promise.resolve(buffer);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return Promise.resolve(buffer);
|
|
217
|
+
})
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
// WebSocket upgrades fire at the Node HTTP-server level, not
|
|
221
|
+
// through Express, so we need an `upgrade` listener on the
|
|
222
|
+
// server itself. The server isn't exposed through the documented
|
|
223
|
+
// Plugin API — but every incoming Express request reaches it via
|
|
224
|
+
// `req.socket.server`, which is Node's public HTTP API. Wrap the
|
|
225
|
+
// proxy with a one-shot middleware that captures the server on
|
|
226
|
+
// the first request and installs a path-filtered upgrade handler.
|
|
227
|
+
// Other plugins / SK itself add their own upgrade listeners for
|
|
228
|
+
// their own paths; they coexist because each returns early on
|
|
229
|
+
// non-matching URLs.
|
|
230
|
+
// Install the WS upgrade listener as soon as any HTTP request
|
|
231
|
+
// hits the plugin router. WebSocket upgrades fire at the Node
|
|
232
|
+
// HTTP-server level (not through Express), and the documented
|
|
233
|
+
// Plugin API doesn't expose the server. Every incoming Express
|
|
234
|
+
// request reaches it via `req.socket.server` (Node's public
|
|
235
|
+
// HTTP API), so we grab it on first hit and register a
|
|
236
|
+
// path-filtered upgrade handler. The handler reference is
|
|
237
|
+
// stored in module scope so stop() can detach it on plugin
|
|
238
|
+
// restart.
|
|
239
|
+
router.use((req, _res, next) => {
|
|
240
|
+
if (!upgradeListener) {
|
|
241
|
+
// Express types `req.socket` as net.Socket, but at runtime
|
|
242
|
+
// it's an http.Socket with a `.server` back-reference to
|
|
243
|
+
// the Node HTTP server. That's the only documented public
|
|
244
|
+
// path to reach the server from a plugin (app.server is
|
|
245
|
+
// SK-internal and flagged by the upstream plugin-CI lint).
|
|
246
|
+
const httpServer = req.socket.server;
|
|
247
|
+
if (httpServer instanceof http_1.Server) {
|
|
248
|
+
const prefix = `${GUI_PROXY_PATH}/`;
|
|
249
|
+
upgradeListener = (upReq, socket, head) => {
|
|
250
|
+
if (upReq.url && upReq.url.startsWith(prefix)) {
|
|
251
|
+
// Strip the `/plugins/<id>/gui` prefix so the proxy
|
|
252
|
+
// sees the same path shape as for HTTP requests
|
|
253
|
+
// (where Express' router.use('/gui', ...) does the
|
|
254
|
+
// stripping). pathRewrite then handles the
|
|
255
|
+
// `/signalk/` vs `/gui/...` split uniformly.
|
|
256
|
+
const stripped = upReq.url.slice(GUI_PROXY_PATH.length) || '/';
|
|
257
|
+
upReq.url = stripped;
|
|
258
|
+
guiProxy.upgrade(upReq, socket, head);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
httpServer.on('upgrade', upgradeListener);
|
|
262
|
+
upgradeListenerServer = httpServer;
|
|
263
|
+
app.debug(`Mounted mayara GUI proxy at ${GUI_PROXY_PATH} (with WS upgrade)`);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
app.debug('HTTP server unavailable on req.socket; WS streams to mayara GUI will not be proxied');
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
next();
|
|
270
|
+
});
|
|
271
|
+
router.use('/gui', guiProxy);
|
|
158
272
|
router.get('/status', async (_req, res) => {
|
|
159
273
|
const containers = getContainerManager();
|
|
160
274
|
let containerState = 'unknown';
|
|
@@ -188,6 +302,9 @@ module.exports = function (app) {
|
|
|
188
302
|
radarId: id,
|
|
189
303
|
connected: spokeForwarders.get(id)?.isConnected() ?? false
|
|
190
304
|
})),
|
|
305
|
+
notificationForwarder: {
|
|
306
|
+
connected: notificationForwarder?.isConnected() ?? false
|
|
307
|
+
},
|
|
191
308
|
container: {
|
|
192
309
|
state: containerState,
|
|
193
310
|
image: containerImage,
|
|
@@ -242,7 +359,7 @@ module.exports = function (app) {
|
|
|
242
359
|
// ID and config are gone. Surface a clear error so the user knows
|
|
243
360
|
// they need to retry the apply rather than seeing a generic 500.
|
|
244
361
|
try {
|
|
245
|
-
await containers.ensureRunning(CONTAINER_NAME,
|
|
362
|
+
await containers.ensureRunning(CONTAINER_NAME, buildContainerConfig(tag));
|
|
246
363
|
}
|
|
247
364
|
catch (recreateErr) {
|
|
248
365
|
const msg = `Container removed but recreation failed: ${errMsg(recreateErr)}. Click Update again to retry.`;
|
|
@@ -283,10 +400,7 @@ module.exports = function (app) {
|
|
|
283
400
|
}
|
|
284
401
|
});
|
|
285
402
|
router.get('/api/gui-url', (_req, res) => {
|
|
286
|
-
|
|
287
|
-
const port = currentSettings?.port ?? 6502;
|
|
288
|
-
const proto = currentSettings?.secure ? 'https' : 'http';
|
|
289
|
-
res.json({ url: `${proto}://${host}:${port}/gui/` });
|
|
403
|
+
res.json({ url: `${GUI_PROXY_PATH}/` });
|
|
290
404
|
});
|
|
291
405
|
// Lists available release tags for the version dropdown in the
|
|
292
406
|
// config panel. signalk-container's update service exposes "what
|
|
@@ -321,61 +435,44 @@ module.exports = function (app) {
|
|
|
321
435
|
* Build a ContainerConfig for the mayara-server container with the
|
|
322
436
|
* given tag. Used at startup, when applying updates, and after a
|
|
323
437
|
* background token mint completes — signalk-container drift-detects
|
|
324
|
-
* the resulting `command`/`
|
|
325
|
-
*
|
|
438
|
+
* the resulting `command`/`env` changes and recreates the container
|
|
439
|
+
* transparently.
|
|
326
440
|
*
|
|
327
441
|
* Default nav-address is the upstream Signal K server itself:
|
|
328
|
-
* - `ws:127.0.0.1:${SK_PORT}` plus
|
|
329
|
-
* cached device token exists (full WS path → AIS REST
|
|
330
|
-
* works inside the container).
|
|
442
|
+
* - `ws:127.0.0.1:${SK_PORT}` plus `MAYARA_SIGNALK_TOKEN` env var
|
|
443
|
+
* when a cached device token exists (full WS path → AIS REST
|
|
444
|
+
* seeding works inside the container).
|
|
331
445
|
* - `tcp:127.0.0.1:${TCPSTREAMPORT}` otherwise (legacy delta
|
|
332
446
|
* stream; AIS overlay still works but only fills from live
|
|
333
447
|
* deltas, not the initial REST snapshot).
|
|
334
448
|
*
|
|
335
449
|
* Either way, `mayaraArgs` may override `-n` entirely, in which case
|
|
336
|
-
* we don't inject our default
|
|
450
|
+
* we don't inject our default — and we also drop the token env so
|
|
451
|
+
* the operator's explicit config isn't shadowed.
|
|
452
|
+
*
|
|
453
|
+
* The token is delivered via env, not as a bind-mounted file, because
|
|
454
|
+
* on Docker (and rootful podman) signalk-container emits `--user
|
|
455
|
+
* 1000:1000` so the in-container mayara user can write its own home —
|
|
456
|
+
* but that means the in-container UID (1000) differs from the host
|
|
457
|
+
* caller's UID and a bind-mounted 0600 token written by the host SK
|
|
458
|
+
* user would be unreadable from inside the container. Env vars cross
|
|
459
|
+
* the UID boundary unconditionally. The on-disk cache file under
|
|
460
|
+
* `${dataDir}/signalk-token` (mode 0600) stays as the plugin's own
|
|
461
|
+
* cache so the token survives SK restarts.
|
|
337
462
|
*/
|
|
338
|
-
|
|
463
|
+
function buildContainerConfig(tag) {
|
|
339
464
|
const userArgs = currentSettings?.mayaraArgs ?? [];
|
|
340
465
|
const userOverridesNav = userArgs.some((a) => a === '-n' || a === '--navigation-address');
|
|
341
466
|
const skPort = Number(process.env.PORT) || 3000;
|
|
342
467
|
const tcpPort = Number(process.env.TCPSTREAMPORT) || 8375;
|
|
343
468
|
const dataDir = app.getDataDirPath();
|
|
344
|
-
const
|
|
469
|
+
const cachedToken = userOverridesNav ? undefined : (0, signalk_token_1.readCachedToken)(dataDir);
|
|
345
470
|
const injected = [];
|
|
346
|
-
const
|
|
471
|
+
const env = {};
|
|
347
472
|
if (!userOverridesNav) {
|
|
348
|
-
if (
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
// actually reach. Critical when SK runs inside a container —
|
|
352
|
-
// `app.getDataDirPath()` returns a path inside that container,
|
|
353
|
-
// not on the host where podman/docker actually lives. On
|
|
354
|
-
// bare-metal SK the resolver returns the path unchanged.
|
|
355
|
-
const tokenAbsPath = (0, signalk_token_1.tokenFilePath)(dataDir);
|
|
356
|
-
const resolved = await containers.resolveHostPath(tokenAbsPath);
|
|
357
|
-
if (resolved !== null) {
|
|
358
|
-
// Mount the resolved source (typically the plugin's own
|
|
359
|
-
// data dir, since SK gives each plugin a private subtree)
|
|
360
|
-
// and tell mayara where to find the token file inside it.
|
|
361
|
-
// `subPath` is relative to `source`; when source already
|
|
362
|
-
// equals tokenAbsPath, subPath is "" (file mount).
|
|
363
|
-
const tokenPathInContainer = path.posix.join(TOKEN_DIR_IN_CONTAINER, resolved.subPath);
|
|
364
|
-
injected.push('-n', `ws:127.0.0.1:${skPort}`, '--signalk-token-file', tokenPathInContainer);
|
|
365
|
-
volumes[TOKEN_DIR_IN_CONTAINER] = resolved.source;
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
// SK is containerized and no host mount covers the token
|
|
369
|
-
// path. Fall back to TCP rather than fail startup; surface
|
|
370
|
-
// the gap so the operator knows AIS REST seeding won't
|
|
371
|
-
// happen until they fix the mount.
|
|
372
|
-
app.setPluginError('Signal K token cached but the data directory is not bind-mounted ' +
|
|
373
|
-
'from the host — managed mayara container cannot read it. ' +
|
|
374
|
-
'Falling back to anonymous TCP transport (AIS overlay fills ' +
|
|
375
|
-
'from live deltas only). Bind-mount your SK data directory ' +
|
|
376
|
-
'into the SK container to enable WS+token mode.');
|
|
377
|
-
injected.push('-n', `tcp:127.0.0.1:${tcpPort}`);
|
|
378
|
-
}
|
|
473
|
+
if (cachedToken !== undefined) {
|
|
474
|
+
injected.push('-n', `ws:127.0.0.1:${skPort}`);
|
|
475
|
+
env.MAYARA_SIGNALK_TOKEN = cachedToken;
|
|
379
476
|
}
|
|
380
477
|
else {
|
|
381
478
|
injected.push('-n', `tcp:127.0.0.1:${tcpPort}`);
|
|
@@ -394,13 +491,12 @@ module.exports = function (app) {
|
|
|
394
491
|
// (`--userns=keep-id:uid=1000,gid=1000` on rootless podman,
|
|
395
492
|
// `--user 1000:1000` on docker / rootful podman). Without this
|
|
396
493
|
// hint signalk-container assumes inImageUid=0, the in-image
|
|
397
|
-
// mayara user runs under the subuid range, and the
|
|
398
|
-
//
|
|
399
|
-
// unreadable from inside the container.
|
|
494
|
+
// mayara user runs under the subuid range, and the in-container
|
|
495
|
+
// mayara process cannot write to the in-image XDG data dir.
|
|
400
496
|
user: { inImageUid: 1000, inImageGid: 1000 }
|
|
401
497
|
};
|
|
402
|
-
if (Object.keys(
|
|
403
|
-
config.
|
|
498
|
+
if (Object.keys(env).length > 0) {
|
|
499
|
+
config.env = env;
|
|
404
500
|
}
|
|
405
501
|
return config;
|
|
406
502
|
}
|
|
@@ -417,8 +513,8 @@ module.exports = function (app) {
|
|
|
417
513
|
* Slow path: POST a request, surface "Awaiting approval" plugin
|
|
418
514
|
* status, poll until admin approves (or denies, or stop() is
|
|
419
515
|
* called). On approval, write the token and re-call ensureRunning
|
|
420
|
-
* so signalk-container drift-detects the new `command`/`
|
|
421
|
-
*
|
|
516
|
+
* so signalk-container drift-detects the new `command`/`env` and
|
|
517
|
+
* recreates the container.
|
|
422
518
|
*/
|
|
423
519
|
async function ensureSignalkToken(containers, tag) {
|
|
424
520
|
const dataDir = app.getDataDirPath();
|
|
@@ -445,7 +541,7 @@ module.exports = function (app) {
|
|
|
445
541
|
case 'cached':
|
|
446
542
|
// Race: token landed between the readCachedToken above and the
|
|
447
543
|
// POST. Recreate to pick up WS transport.
|
|
448
|
-
await containers.ensureRunning(CONTAINER_NAME,
|
|
544
|
+
await containers.ensureRunning(CONTAINER_NAME, buildContainerConfig(tag));
|
|
449
545
|
return;
|
|
450
546
|
case 'no-security':
|
|
451
547
|
app.debug('Signal K security disabled; no token needed');
|
|
@@ -486,7 +582,7 @@ module.exports = function (app) {
|
|
|
486
582
|
app.debug('Signal K token approved and cached; recreating container with WS transport');
|
|
487
583
|
app.setPluginStatus('Signal K token approved — recreating container...');
|
|
488
584
|
try {
|
|
489
|
-
await containers.ensureRunning(CONTAINER_NAME,
|
|
585
|
+
await containers.ensureRunning(CONTAINER_NAME, buildContainerConfig(tag));
|
|
490
586
|
app.setPluginStatus('Running');
|
|
491
587
|
}
|
|
492
588
|
catch (err) {
|
|
@@ -533,7 +629,7 @@ module.exports = function (app) {
|
|
|
533
629
|
app.debug('Container runtime ready, starting mayara-server');
|
|
534
630
|
app.setPluginStatus('Starting mayara-server container...');
|
|
535
631
|
const tag = settings.mayaraVersion ?? 'latest';
|
|
536
|
-
const config =
|
|
632
|
+
const config = buildContainerConfig(tag);
|
|
537
633
|
// signalk-container ≥1.6.0 diffs ContainerConfig against the live
|
|
538
634
|
// container on every ensureRunning call and recreates transparently
|
|
539
635
|
// on drift across image+tag, command, networkMode, env, volumes,
|
|
@@ -610,6 +706,19 @@ module.exports = function (app) {
|
|
|
610
706
|
}
|
|
611
707
|
}
|
|
612
708
|
}
|
|
709
|
+
// Bring up the notification forwarder before discovery so the very
|
|
710
|
+
// first guard-zone alarm a radar fires reaches the upstream Signal
|
|
711
|
+
// K server. The forwarder owns its own reconnect loop, so failing
|
|
712
|
+
// here just means it'll reach mayara on a later attempt.
|
|
713
|
+
if (!notificationForwarder) {
|
|
714
|
+
notificationForwarder = new notification_forwarder_1.NotificationForwarder(app, {
|
|
715
|
+
pluginId: PLUGIN_ID,
|
|
716
|
+
url: client.getStateStreamUrl(),
|
|
717
|
+
debug: app.debug.bind(app),
|
|
718
|
+
reconnectInterval: (settings.reconnectInterval || 5) * 1000
|
|
719
|
+
});
|
|
720
|
+
notificationForwarder.start();
|
|
721
|
+
}
|
|
613
722
|
await connectAndDiscover(settings);
|
|
614
723
|
}
|
|
615
724
|
async function connectAndDiscover(settings) {
|
package/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,12 @@ export declare class MayaraClient {
|
|
|
23
23
|
cancelTarget(radarId: string, targetId: number): Promise<unknown>;
|
|
24
24
|
getSpokeStreamUrl(radarId: string): string;
|
|
25
25
|
getTargetStreamUrl(radarId: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Signal K v1 stream — the same WebSocket the built-in GUI subscribes
|
|
28
|
+
* to. Used by NotificationForwarder to listen for `notifications.*`
|
|
29
|
+
* deltas (e.g. guard-zone alarms) and republish them upstream.
|
|
30
|
+
*/
|
|
31
|
+
getStateStreamUrl(): string;
|
|
26
32
|
close(): void;
|
|
27
33
|
}
|
|
28
34
|
//# sourceMappingURL=mayara-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mayara-client.d.ts","sourceRoot":"","sources":["../src/mayara-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAuB;gBAExB,OAAO,EAAE,mBAAmB;IAQlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA6C7E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI9D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK3C,KAAK,IAAI,IAAI;CAGd"}
|
|
1
|
+
{"version":3,"file":"mayara-client.d.ts","sourceRoot":"","sources":["../src/mayara-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAuB;gBAExB,OAAO,EAAE,mBAAmB;IAQlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA6C7E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI9D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK3C;;;;OAIG;IACH,iBAAiB,IAAI,MAAM;IAK3B,KAAK,IAAI,IAAI;CAGd"}
|
package/plugin/mayara-client.js
CHANGED
|
@@ -97,6 +97,15 @@ class MayaraClient {
|
|
|
97
97
|
const wsProtocol = this.secure ? 'wss' : 'ws';
|
|
98
98
|
return `${wsProtocol}://${this.host}:${this.port}${API_BASE}/${radarId}/targets/stream`;
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Signal K v1 stream — the same WebSocket the built-in GUI subscribes
|
|
102
|
+
* to. Used by NotificationForwarder to listen for `notifications.*`
|
|
103
|
+
* deltas (e.g. guard-zone alarms) and republish them upstream.
|
|
104
|
+
*/
|
|
105
|
+
getStateStreamUrl() {
|
|
106
|
+
const wsProtocol = this.secure ? 'wss' : 'ws';
|
|
107
|
+
return `${wsProtocol}://${this.host}:${this.port}/signalk/v1/stream`;
|
|
108
|
+
}
|
|
100
109
|
close() {
|
|
101
110
|
// No persistent connections to close for HTTP client
|
|
102
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mayara-client.js","sourceRoot":"","sources":["../src/mayara-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mayara-client.js","sourceRoot":"","sources":["../src/mayara-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import type { Delta } from '@signalk/server-api';
|
|
3
|
+
/**
|
|
4
|
+
* Subset of the Signal K app surface this forwarder needs. We pin to the
|
|
5
|
+
* minimum so the unit tests can pass a stub without dragging in the full
|
|
6
|
+
* server-api types.
|
|
7
|
+
*/
|
|
8
|
+
export interface NotificationForwarderApp {
|
|
9
|
+
handleMessage(id: string, msg: Partial<Delta>): void;
|
|
10
|
+
debug?(msg: string): void;
|
|
11
|
+
}
|
|
12
|
+
export interface NotificationForwarderOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Plugin id used when calling `app.handleMessage`. Signal K stamps
|
|
15
|
+
* the republished delta's `$source` from this; passing the same id
|
|
16
|
+
* the plugin registers with keeps all forwarded data attributed to
|
|
17
|
+
* one provider in the SK admin UI.
|
|
18
|
+
*/
|
|
19
|
+
pluginId: string;
|
|
20
|
+
/** ws:// URL of mayara-server's `/signalk/v1/stream` endpoint. */
|
|
21
|
+
url: string;
|
|
22
|
+
/** Optional logger; defaults to a no-op. */
|
|
23
|
+
debug?: (msg: string) => void;
|
|
24
|
+
reconnectInterval?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Constructor override used by tests; in production this is just the
|
|
27
|
+
* `ws` package's `WebSocket` class. Typed minimally to avoid pulling
|
|
28
|
+
* the full ws.d.ts surface into the public API.
|
|
29
|
+
*/
|
|
30
|
+
webSocketFactory?: (url: string) => WebSocketLike;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Bridges `notifications.*` deltas from mayara-server's Signal K v1
|
|
34
|
+
* stream into the host Signal K server via `app.handleMessage`. Mayara
|
|
35
|
+
* emits e.g. `notifications.radar.<key>.guardZone.<n>` on its own
|
|
36
|
+
* stream; without this forwarder, those alarms reach mayara's built-in
|
|
37
|
+
* GUI but not the SK admin notifications panel, the chart plotter, or
|
|
38
|
+
* any other SK consumer.
|
|
39
|
+
*
|
|
40
|
+
* On connect we send a `notifications.*` subscription so mayara filters
|
|
41
|
+
* appropriately. Each incoming delta is forwarded as-is — mayara has
|
|
42
|
+
* already shaped it to the SK spec (state / method / message), and the
|
|
43
|
+
* SK server stamps `$source` from `pluginId` on republish.
|
|
44
|
+
*/
|
|
45
|
+
export declare class NotificationForwarder {
|
|
46
|
+
private readonly pluginId;
|
|
47
|
+
private readonly url;
|
|
48
|
+
private readonly debug;
|
|
49
|
+
private readonly reconnectMs;
|
|
50
|
+
private readonly webSocketFactory;
|
|
51
|
+
private ws;
|
|
52
|
+
private reconnectTimer;
|
|
53
|
+
private closed;
|
|
54
|
+
private connected;
|
|
55
|
+
private readonly app;
|
|
56
|
+
constructor(app: NotificationForwarderApp, options: NotificationForwarderOptions);
|
|
57
|
+
start(): void;
|
|
58
|
+
private connect;
|
|
59
|
+
/**
|
|
60
|
+
* Parse one inbound text frame and forward every notification-pathed
|
|
61
|
+
* value entry to the host SK server. Non-text frames, non-JSON
|
|
62
|
+
* payloads, deltas with no notification entries, and the upstream
|
|
63
|
+
* "hello" handshake are all silently dropped.
|
|
64
|
+
*
|
|
65
|
+
* Exposed `protected` so the tests can inject frames without going
|
|
66
|
+
* through the real WebSocket.
|
|
67
|
+
*/
|
|
68
|
+
protected handleMessage(data: WebSocket.RawData): void;
|
|
69
|
+
/**
|
|
70
|
+
* Returns a copy of `parsed` containing only the notification values.
|
|
71
|
+
* Returns null if `parsed` isn't a Signal K delta, has no `updates`,
|
|
72
|
+
* or carries no `notifications.*` paths after filtering.
|
|
73
|
+
*/
|
|
74
|
+
private extractNotificationDelta;
|
|
75
|
+
private scheduleReconnect;
|
|
76
|
+
isConnected(): boolean;
|
|
77
|
+
stop(): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Minimum WebSocket surface this module touches. Lets tests inject a
|
|
81
|
+
* stub without importing the full `ws` type tree.
|
|
82
|
+
*/
|
|
83
|
+
export interface WebSocketLike {
|
|
84
|
+
on(event: 'open', listener: () => void): void;
|
|
85
|
+
on(event: 'message', listener: (data: WebSocket.RawData) => void): void;
|
|
86
|
+
on(event: 'error', listener: (err: Error) => void): void;
|
|
87
|
+
on(event: 'close', listener: (code: number) => void): void;
|
|
88
|
+
send(data: string): void;
|
|
89
|
+
close(): void;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=notification-forwarder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-forwarder.d.ts","sourceRoot":"","sources":["../src/notification-forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAA;IACX,4CAA4C;IAC5C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAA;CAClD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IAEjE,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0B;gBAElC,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,4BAA4B;IAUhF,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,OAAO;IAqDf;;;;;;;;OAQG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI;IA6BtD;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAiChC,OAAO,CAAC,iBAAiB;IAazB,WAAW,IAAI,OAAO;IAItB,IAAI,IAAI,IAAI;CAoBb;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;IAC7C,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IACvE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;IACxD,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,IAAI,IAAI,CAAA;CACd"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NotificationForwarder = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
/**
|
|
9
|
+
* Bridges `notifications.*` deltas from mayara-server's Signal K v1
|
|
10
|
+
* stream into the host Signal K server via `app.handleMessage`. Mayara
|
|
11
|
+
* emits e.g. `notifications.radar.<key>.guardZone.<n>` on its own
|
|
12
|
+
* stream; without this forwarder, those alarms reach mayara's built-in
|
|
13
|
+
* GUI but not the SK admin notifications panel, the chart plotter, or
|
|
14
|
+
* any other SK consumer.
|
|
15
|
+
*
|
|
16
|
+
* On connect we send a `notifications.*` subscription so mayara filters
|
|
17
|
+
* appropriately. Each incoming delta is forwarded as-is — mayara has
|
|
18
|
+
* already shaped it to the SK spec (state / method / message), and the
|
|
19
|
+
* SK server stamps `$source` from `pluginId` on republish.
|
|
20
|
+
*/
|
|
21
|
+
class NotificationForwarder {
|
|
22
|
+
pluginId;
|
|
23
|
+
url;
|
|
24
|
+
debug;
|
|
25
|
+
reconnectMs;
|
|
26
|
+
webSocketFactory;
|
|
27
|
+
ws = null;
|
|
28
|
+
reconnectTimer = null;
|
|
29
|
+
closed = false;
|
|
30
|
+
connected = false;
|
|
31
|
+
app;
|
|
32
|
+
constructor(app, options) {
|
|
33
|
+
this.app = app;
|
|
34
|
+
this.pluginId = options.pluginId;
|
|
35
|
+
this.url = options.url;
|
|
36
|
+
this.debug = options.debug ?? (() => { });
|
|
37
|
+
this.reconnectMs = options.reconnectInterval ?? 5000;
|
|
38
|
+
this.webSocketFactory =
|
|
39
|
+
options.webSocketFactory ?? ((url) => new ws_1.default(url));
|
|
40
|
+
}
|
|
41
|
+
start() {
|
|
42
|
+
if (this.closed)
|
|
43
|
+
return;
|
|
44
|
+
this.connect();
|
|
45
|
+
}
|
|
46
|
+
connect() {
|
|
47
|
+
if (this.closed)
|
|
48
|
+
return;
|
|
49
|
+
this.debug(`Connecting to notification stream: ${this.url}`);
|
|
50
|
+
try {
|
|
51
|
+
const ws = this.webSocketFactory(this.url);
|
|
52
|
+
this.ws = ws;
|
|
53
|
+
ws.on('open', () => {
|
|
54
|
+
this.connected = true;
|
|
55
|
+
this.debug('Connected to mayara notification stream');
|
|
56
|
+
// Tell mayara we only care about notification deltas. Using a
|
|
57
|
+
// wildcard means we pick up every radar's guard-zone alarms (and
|
|
58
|
+
// any future per-radar notification types mayara adds) without
|
|
59
|
+
// having to know radar ids up front.
|
|
60
|
+
const subscription = JSON.stringify({
|
|
61
|
+
subscribe: [{ path: 'notifications.*', policy: 'instant' }]
|
|
62
|
+
});
|
|
63
|
+
try {
|
|
64
|
+
ws.send(subscription);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
this.debug(`Failed to send notification subscription: ${err instanceof Error ? err.message : String(err)}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
ws.on('message', (data) => {
|
|
71
|
+
this.handleMessage(data);
|
|
72
|
+
});
|
|
73
|
+
ws.on('error', (err) => {
|
|
74
|
+
this.connected = false;
|
|
75
|
+
this.debug(`Notification stream error: ${err.message}`);
|
|
76
|
+
});
|
|
77
|
+
ws.on('close', (code) => {
|
|
78
|
+
this.connected = false;
|
|
79
|
+
this.debug(`Notification stream closed: ${code}`);
|
|
80
|
+
if (!this.closed) {
|
|
81
|
+
this.scheduleReconnect();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
this.debug(`Failed to connect to notification stream: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
this.scheduleReconnect();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse one inbound text frame and forward every notification-pathed
|
|
92
|
+
* value entry to the host SK server. Non-text frames, non-JSON
|
|
93
|
+
* payloads, deltas with no notification entries, and the upstream
|
|
94
|
+
* "hello" handshake are all silently dropped.
|
|
95
|
+
*
|
|
96
|
+
* Exposed `protected` so the tests can inject frames without going
|
|
97
|
+
* through the real WebSocket.
|
|
98
|
+
*/
|
|
99
|
+
handleMessage(data) {
|
|
100
|
+
let text;
|
|
101
|
+
if (typeof data === 'string') {
|
|
102
|
+
text = data;
|
|
103
|
+
}
|
|
104
|
+
else if (Buffer.isBuffer(data)) {
|
|
105
|
+
text = data.toString('utf8');
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = JSON.parse(text);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const delta = this.extractNotificationDelta(parsed);
|
|
118
|
+
if (!delta)
|
|
119
|
+
return;
|
|
120
|
+
try {
|
|
121
|
+
this.app.handleMessage(this.pluginId, delta);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
this.debug(`Failed to forward notification delta: ${err instanceof Error ? err.message : String(err)}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Returns a copy of `parsed` containing only the notification values.
|
|
129
|
+
* Returns null if `parsed` isn't a Signal K delta, has no `updates`,
|
|
130
|
+
* or carries no `notifications.*` paths after filtering.
|
|
131
|
+
*/
|
|
132
|
+
extractNotificationDelta(parsed) {
|
|
133
|
+
if (!parsed || typeof parsed !== 'object')
|
|
134
|
+
return null;
|
|
135
|
+
const root = parsed;
|
|
136
|
+
if (!Array.isArray(root.updates))
|
|
137
|
+
return null;
|
|
138
|
+
const filteredUpdates = [];
|
|
139
|
+
for (const update of root.updates) {
|
|
140
|
+
if (!update || typeof update !== 'object')
|
|
141
|
+
continue;
|
|
142
|
+
const values = update.values;
|
|
143
|
+
if (!Array.isArray(values))
|
|
144
|
+
continue;
|
|
145
|
+
const notificationValues = values.filter((v) => {
|
|
146
|
+
if (!v || typeof v !== 'object')
|
|
147
|
+
return false;
|
|
148
|
+
const path = v.path;
|
|
149
|
+
return typeof path === 'string' && path.startsWith('notifications.');
|
|
150
|
+
});
|
|
151
|
+
if (notificationValues.length > 0) {
|
|
152
|
+
// Preserve $source / timestamp from upstream; the SK server
|
|
153
|
+
// will overlay `$source = <pluginId>` on its own, but the
|
|
154
|
+
// upstream timestamp is the moment the alarm fired and is
|
|
155
|
+
// worth keeping.
|
|
156
|
+
filteredUpdates.push({
|
|
157
|
+
...update,
|
|
158
|
+
values: notificationValues
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (filteredUpdates.length === 0)
|
|
163
|
+
return null;
|
|
164
|
+
return { updates: filteredUpdates };
|
|
165
|
+
}
|
|
166
|
+
scheduleReconnect() {
|
|
167
|
+
if (this.closed || this.reconnectTimer)
|
|
168
|
+
return;
|
|
169
|
+
this.debug(`Scheduling notification stream reconnect in ${this.reconnectMs}ms`);
|
|
170
|
+
this.reconnectTimer = setTimeout(() => {
|
|
171
|
+
this.reconnectTimer = null;
|
|
172
|
+
if (!this.closed) {
|
|
173
|
+
this.connect();
|
|
174
|
+
}
|
|
175
|
+
}, this.reconnectMs);
|
|
176
|
+
}
|
|
177
|
+
isConnected() {
|
|
178
|
+
return this.connected;
|
|
179
|
+
}
|
|
180
|
+
stop() {
|
|
181
|
+
this.closed = true;
|
|
182
|
+
if (this.reconnectTimer) {
|
|
183
|
+
clearTimeout(this.reconnectTimer);
|
|
184
|
+
this.reconnectTimer = null;
|
|
185
|
+
}
|
|
186
|
+
if (this.ws) {
|
|
187
|
+
try {
|
|
188
|
+
this.ws.close();
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Ignore close errors
|
|
192
|
+
}
|
|
193
|
+
this.ws = null;
|
|
194
|
+
}
|
|
195
|
+
this.connected = false;
|
|
196
|
+
this.debug('Stopped notification forwarder');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.NotificationForwarder = NotificationForwarder;
|
|
200
|
+
//# sourceMappingURL=notification-forwarder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-forwarder.js","sourceRoot":"","sources":["../src/notification-forwarder.ts"],"names":[],"mappings":"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"}
|
package/public/index.html
CHANGED
|
@@ -4,19 +4,7 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<title>MaYaRa Radar</title>
|
|
6
6
|
<script>
|
|
7
|
-
|
|
8
|
-
.then(r => r.json())
|
|
9
|
-
.then(data => {
|
|
10
|
-
// Replace localhost/127.0.0.1 with browser's hostname (for managed containers)
|
|
11
|
-
const url = new URL(data.url);
|
|
12
|
-
if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') {
|
|
13
|
-
url.hostname = window.location.hostname;
|
|
14
|
-
}
|
|
15
|
-
window.location.href = url.href;
|
|
16
|
-
})
|
|
17
|
-
.catch(() => {
|
|
18
|
-
document.getElementById('msg').textContent = 'mayara-server not reachable. Check plugin configuration.';
|
|
19
|
-
});
|
|
7
|
+
window.location.replace('/plugins/mayara-server-signalk-plugin/gui/');
|
|
20
8
|
</script>
|
|
21
9
|
<style>
|
|
22
10
|
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #111; color: #ccc; }
|
|
@@ -27,7 +15,7 @@
|
|
|
27
15
|
<body>
|
|
28
16
|
<div class="box">
|
|
29
17
|
<img src="assets/mayara_logo.png" alt="MaYaRa">
|
|
30
|
-
<p id="msg">
|
|
18
|
+
<p id="msg">Opening radar UI...</p>
|
|
31
19
|
</div>
|
|
32
20
|
</body>
|
|
33
21
|
</html>
|