aibroker 0.7.4 → 0.7.6
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/dist/adapters/pailot/gateway.d.ts.map +1 -1
- package/dist/adapters/pailot/gateway.js +82 -1
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/adapters/pailot/mqtt-broker.d.ts +2 -0
- package/dist/adapters/pailot/mqtt-broker.d.ts.map +1 -1
- package/dist/adapters/pailot/mqtt-broker.js +153 -18
- package/dist/adapters/pailot/mqtt-broker.js.map +1 -1
- package/dist/apns/client.d.ts +43 -0
- package/dist/apns/client.d.ts.map +1 -0
- package/dist/apns/client.js +176 -0
- package/dist/apns/client.js.map +1 -0
- package/dist/daemon/core-handlers.d.ts.map +1 -1
- package/dist/daemon/core-handlers.js +16 -0
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +16 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/trace-log.d.ts +23 -0
- package/dist/daemon/trace-log.d.ts.map +1 -0
- package/dist/daemon/trace-log.js +24 -0
- package/dist/daemon/trace-log.js.map +1 -0
- package/dist/mcp/index.js +11 -4
- package/dist/mcp/index.js.map +1 -1
- package/package.json +3 -1
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
*
|
|
9
9
|
* See Notes/SPEC-mqtt-pailot.md for the full protocol specification.
|
|
10
10
|
*/
|
|
11
|
-
import { createServer } from "node:
|
|
11
|
+
import { createServer as createTlsServer } from "node:tls";
|
|
12
12
|
import { randomUUID } from "node:crypto";
|
|
13
|
-
import { dirname } from "node:path";
|
|
13
|
+
import { join, dirname } from "node:path";
|
|
14
14
|
import { fileURLToPath } from "node:url";
|
|
15
15
|
import { createRequire } from "node:module";
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
17
|
+
import { execFileSync } from "node:child_process";
|
|
16
18
|
import { log } from "../../core/log.js";
|
|
17
19
|
import { enqueue } from "./message-queue.js";
|
|
18
20
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -39,11 +41,60 @@ async function loadAedes() {
|
|
|
39
41
|
return false;
|
|
40
42
|
}
|
|
41
43
|
}
|
|
44
|
+
// --- TLS certificate management ---
|
|
45
|
+
const TLS_DIR = join(process.env.HOME ?? "/tmp", ".aibroker", "tls");
|
|
46
|
+
const TLS_CERT = join(TLS_DIR, "cert.pem");
|
|
47
|
+
const TLS_KEY = join(TLS_DIR, "key.pem");
|
|
48
|
+
/**
|
|
49
|
+
* Ensure a self-signed TLS certificate exists at ~/.aibroker/tls/.
|
|
50
|
+
* Generates one using openssl if missing. Returns { key, cert } buffers.
|
|
51
|
+
*/
|
|
52
|
+
function ensureTlsCert() {
|
|
53
|
+
try {
|
|
54
|
+
if (!existsSync(TLS_CERT) || !existsSync(TLS_KEY)) {
|
|
55
|
+
log("[MQTT] TLS: generating self-signed certificate...");
|
|
56
|
+
mkdirSync(TLS_DIR, { recursive: true });
|
|
57
|
+
// Generate a 2048-bit RSA key and a self-signed cert valid for 10 years
|
|
58
|
+
execFileSync("openssl", [
|
|
59
|
+
"req",
|
|
60
|
+
"-x509",
|
|
61
|
+
"-newkey", "rsa:2048",
|
|
62
|
+
"-keyout", TLS_KEY,
|
|
63
|
+
"-out", TLS_CERT,
|
|
64
|
+
"-days", "3650",
|
|
65
|
+
"-nodes",
|
|
66
|
+
"-subj", "/CN=aibroker.local/O=AIBroker/C=CH",
|
|
67
|
+
"-addext", "subjectAltName=DNS:aibroker.local,DNS:localhost,IP:127.0.0.1",
|
|
68
|
+
], { stdio: "pipe" });
|
|
69
|
+
log(`[MQTT] TLS: certificate generated at ${TLS_DIR}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
log("[MQTT] TLS: using existing certificate");
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
key: readFileSync(TLS_KEY),
|
|
76
|
+
cert: readFileSync(TLS_CERT),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
log(`[MQTT] TLS: certificate setup failed: ${err instanceof Error ? err.message : err}`);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// --- Loopback MQTT client for server-side publishing ---
|
|
85
|
+
let loopbackClient = null;
|
|
86
|
+
let loopbackReady = false;
|
|
42
87
|
// --- State ---
|
|
43
88
|
let broker = null;
|
|
44
89
|
let mqttServer = null;
|
|
45
90
|
let bonjourInstance = null;
|
|
46
91
|
let bonjourService = null;
|
|
92
|
+
/** Set of currently connected MQTT client IDs. */
|
|
93
|
+
const connectedClients = new Set();
|
|
94
|
+
/** Returns the number of currently connected MQTT clients. */
|
|
95
|
+
export function getMqttClientCount() {
|
|
96
|
+
return connectedClients.size;
|
|
97
|
+
}
|
|
47
98
|
/** Dedup set for inbound messages from app clients. */
|
|
48
99
|
const seenInboundIds = new Set();
|
|
49
100
|
const SEEN_MAX = 500;
|
|
@@ -66,10 +117,18 @@ function mqttPublish(topic, payload, opts) {
|
|
|
66
117
|
log(`[MQTT] publish skipped (no broker): ${topic}`);
|
|
67
118
|
return;
|
|
68
119
|
}
|
|
69
|
-
|
|
120
|
+
const json = JSON.stringify(payload);
|
|
121
|
+
log(`[MQTT] → ${topic} (${json.length} bytes)`);
|
|
70
122
|
const qos = opts?.qos ?? 1;
|
|
71
123
|
const retain = opts?.retain ?? false;
|
|
72
|
-
|
|
124
|
+
if (loopbackClient && loopbackReady) {
|
|
125
|
+
loopbackClient.publish(topic, json, { qos, retain }, (err) => {
|
|
126
|
+
if (err)
|
|
127
|
+
log(`[MQTT] loopback publish error on ${topic}: ${err.message}`);
|
|
128
|
+
});
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const buf = Buffer.from(json);
|
|
73
132
|
broker.publish({ topic, payload: buf, qos, retain, cmd: "publish" }, (err) => {
|
|
74
133
|
if (err)
|
|
75
134
|
log(`[MQTT] publish error on ${topic}: ${err.message}`);
|
|
@@ -88,7 +147,7 @@ export function mqttPublishText(sessionId, content, messageId) {
|
|
|
88
147
|
const seq = enqueue(sessionId, "text", payload);
|
|
89
148
|
if (seq > 0)
|
|
90
149
|
payload.seq = seq;
|
|
91
|
-
mqttPublish(
|
|
150
|
+
mqttPublish("pailot/out", payload);
|
|
92
151
|
}
|
|
93
152
|
/** Publish a voice message to a session output topic. */
|
|
94
153
|
export function mqttPublishVoice(sessionId, audioBase64, transcript, messageId, chunkMeta) {
|
|
@@ -109,7 +168,7 @@ export function mqttPublishVoice(sessionId, audioBase64, transcript, messageId,
|
|
|
109
168
|
const seq = enqueue(sessionId, "voice", payload);
|
|
110
169
|
if (seq > 0)
|
|
111
170
|
payload.seq = seq;
|
|
112
|
-
mqttPublish(
|
|
171
|
+
mqttPublish("pailot/out", payload);
|
|
113
172
|
}
|
|
114
173
|
/** Publish an image message to a session output topic. */
|
|
115
174
|
export function mqttPublishImage(sessionId, imageBase64, caption, messageId) {
|
|
@@ -126,11 +185,11 @@ export function mqttPublishImage(sessionId, imageBase64, caption, messageId) {
|
|
|
126
185
|
const seq = enqueue(sessionId, "image", payload);
|
|
127
186
|
if (seq > 0)
|
|
128
187
|
payload.seq = seq;
|
|
129
|
-
mqttPublish(
|
|
188
|
+
mqttPublish("pailot/out", payload);
|
|
130
189
|
}
|
|
131
190
|
/** Publish a typing indicator (QoS 0, no msgId — ephemeral). */
|
|
132
191
|
export function mqttPublishTyping(sessionId, active) {
|
|
133
|
-
mqttPublish(
|
|
192
|
+
mqttPublish("pailot/out", {
|
|
134
193
|
type: "typing",
|
|
135
194
|
sessionId,
|
|
136
195
|
active,
|
|
@@ -148,7 +207,7 @@ export function mqttPublishSessions(sessions) {
|
|
|
148
207
|
}
|
|
149
208
|
/** Publish a screenshot for a session (retained). */
|
|
150
209
|
export function mqttPublishScreenshot(sessionId, imageBase64) {
|
|
151
|
-
mqttPublish(
|
|
210
|
+
mqttPublish("pailot/out", {
|
|
152
211
|
msgId: randomUUID(),
|
|
153
212
|
type: "screenshot",
|
|
154
213
|
sessionId,
|
|
@@ -159,7 +218,7 @@ export function mqttPublishScreenshot(sessionId, imageBase64) {
|
|
|
159
218
|
}
|
|
160
219
|
/** Publish a voice transcript reflection. */
|
|
161
220
|
export function mqttPublishTranscript(messageId, content, sessionId) {
|
|
162
|
-
mqttPublish("pailot/
|
|
221
|
+
mqttPublish("pailot/out", {
|
|
163
222
|
msgId: randomUUID(),
|
|
164
223
|
type: "transcript",
|
|
165
224
|
messageId,
|
|
@@ -222,6 +281,7 @@ export async function startMqttBroker(version) {
|
|
|
222
281
|
}
|
|
223
282
|
// Authorization: only allow pailot/ topics
|
|
224
283
|
aedesOpts.authorizePublish = (_client, packet, callback) => {
|
|
284
|
+
// Allow pailot/ topics and the device token registration topic
|
|
225
285
|
if (packet.topic.startsWith("pailot/")) {
|
|
226
286
|
callback(null);
|
|
227
287
|
}
|
|
@@ -271,6 +331,22 @@ export async function startMqttBroker(version) {
|
|
|
271
331
|
}
|
|
272
332
|
return;
|
|
273
333
|
}
|
|
334
|
+
// Match pailot/device/token — APNs device token registration from app
|
|
335
|
+
if (topic === "pailot/device/token") {
|
|
336
|
+
try {
|
|
337
|
+
const raw = packet.payload.toString();
|
|
338
|
+
const sanitized = raw.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g, "");
|
|
339
|
+
const payload = JSON.parse(sanitized);
|
|
340
|
+
const token = payload.token;
|
|
341
|
+
if (token) {
|
|
342
|
+
inboundHandler?.(undefined, "apns_token", { token });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
log(`[MQTT] invalid device token message: ${err}`);
|
|
347
|
+
}
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
274
350
|
// Match pailot/control/in — commands from app
|
|
275
351
|
if (topic === "pailot/control/in") {
|
|
276
352
|
try {
|
|
@@ -297,25 +373,76 @@ export async function startMqttBroker(version) {
|
|
|
297
373
|
return;
|
|
298
374
|
}
|
|
299
375
|
});
|
|
376
|
+
// --- Delivery confirmation: log when broker delivers to a subscriber ---
|
|
377
|
+
broker.on("delivered", (packet, client) => {
|
|
378
|
+
const clientId = client?.id ?? "unknown";
|
|
379
|
+
const topic = packet?.topic ?? "?";
|
|
380
|
+
log(`[TRACE] delivered to ${clientId} on ${topic}`);
|
|
381
|
+
});
|
|
300
382
|
// --- Connection events ---
|
|
301
383
|
broker.on("client", (client) => {
|
|
302
|
-
|
|
384
|
+
const id = client?.id ?? "unknown";
|
|
385
|
+
connectedClients.add(id);
|
|
386
|
+
log(`[MQTT] client connected: ${id} (total: ${connectedClients.size})`);
|
|
387
|
+
// Reset APNs badge counter when a real PAILot app connects
|
|
388
|
+
if (id.startsWith("pailot")) {
|
|
389
|
+
import("../../apns/client.js").then(m => m.resetBadge()).catch(() => { });
|
|
390
|
+
}
|
|
303
391
|
});
|
|
304
392
|
broker.on("clientDisconnect", (client) => {
|
|
305
|
-
|
|
393
|
+
const id = client?.id ?? "unknown";
|
|
394
|
+
connectedClients.delete(id);
|
|
395
|
+
log(`[MQTT] client disconnected: ${id} (total: ${connectedClients.size})`);
|
|
306
396
|
});
|
|
307
397
|
broker.on("clientError", (client, err) => {
|
|
308
398
|
log(`[MQTT] client error (${client?.id ?? "unknown"}): ${err.message}`);
|
|
309
399
|
});
|
|
310
|
-
// --- Start
|
|
311
|
-
|
|
400
|
+
// --- Start TLS server ---
|
|
401
|
+
const tlsCreds = ensureTlsCert();
|
|
402
|
+
if (tlsCreds) {
|
|
403
|
+
mqttServer = createTlsServer({ key: tlsCreds.key, cert: tlsCreds.cert }, broker.handle);
|
|
404
|
+
log("[MQTT] TLS enabled");
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
// Fallback: plain TCP if TLS setup fails (openssl not available, etc.)
|
|
408
|
+
log("[MQTT] WARNING: TLS setup failed — falling back to plain TCP (not recommended)");
|
|
409
|
+
const { createServer: createTcpServer } = await import("node:net");
|
|
410
|
+
mqttServer = createTcpServer(broker.handle);
|
|
411
|
+
}
|
|
312
412
|
mqttServer.on("error", (err) => {
|
|
313
413
|
log(`[MQTT] server error: ${err.message}`);
|
|
314
414
|
});
|
|
315
|
-
mqttServer.listen(MQTT_PORT, () => {
|
|
316
|
-
log(`[MQTT] broker listening on port ${MQTT_PORT}${MQTT_TOKEN ? " (auth enabled)" : " (no auth)"}`);
|
|
317
|
-
//
|
|
318
|
-
|
|
415
|
+
mqttServer.listen(MQTT_PORT, async () => {
|
|
416
|
+
log(`[MQTT] broker listening on port ${MQTT_PORT}${MQTT_TOKEN ? " (auth enabled)" : " (no auth)"}${tlsCreds ? " [TLS]" : " [PLAIN TCP]"}`);
|
|
417
|
+
// Start loopback MQTT client for server-side publishing.
|
|
418
|
+
// broker.publish() doesn't deliver to MQTT protocol clients in aedes 1.0.x.
|
|
419
|
+
try {
|
|
420
|
+
const mqtt = await import("mqtt");
|
|
421
|
+
const connectOpts = {
|
|
422
|
+
clientId: "aibroker-loopback",
|
|
423
|
+
clean: true,
|
|
424
|
+
connectTimeout: 3000,
|
|
425
|
+
};
|
|
426
|
+
if (MQTT_TOKEN) {
|
|
427
|
+
connectOpts.username = "pailot";
|
|
428
|
+
connectOpts.password = MQTT_TOKEN;
|
|
429
|
+
}
|
|
430
|
+
const protocol = tlsCreds ? "mqtts" : "mqtt";
|
|
431
|
+
if (tlsCreds)
|
|
432
|
+
connectOpts.rejectUnauthorized = false;
|
|
433
|
+
loopbackClient = mqtt.connect(`${protocol}://localhost:${MQTT_PORT}`, connectOpts);
|
|
434
|
+
loopbackClient.on("connect", () => {
|
|
435
|
+
loopbackReady = true;
|
|
436
|
+
log("[MQTT] loopback client connected");
|
|
437
|
+
});
|
|
438
|
+
loopbackClient.on("error", (err) => log(`[MQTT] loopback error: ${err.message}`));
|
|
439
|
+
loopbackClient.on("close", () => { loopbackReady = false; });
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
log(`[MQTT] loopback client failed: ${err instanceof Error ? err.message : err}`);
|
|
443
|
+
}
|
|
444
|
+
// Publish initial "ready" status — delay for loopback to connect
|
|
445
|
+
setTimeout(() => mqttPublishStatus("ready", version), 500);
|
|
319
446
|
// Advertise via Bonjour/mDNS so PAILot app can auto-discover on LAN
|
|
320
447
|
try {
|
|
321
448
|
const { Bonjour } = require("bonjour-service");
|
|
@@ -336,6 +463,14 @@ export async function startMqttBroker(version) {
|
|
|
336
463
|
* Stop the MQTT broker and TCP server.
|
|
337
464
|
*/
|
|
338
465
|
export function stopMqttBroker() {
|
|
466
|
+
if (loopbackClient) {
|
|
467
|
+
try {
|
|
468
|
+
loopbackClient.end(true);
|
|
469
|
+
}
|
|
470
|
+
catch { /* ignore */ }
|
|
471
|
+
loopbackClient = null;
|
|
472
|
+
loopbackReady = false;
|
|
473
|
+
}
|
|
339
474
|
if (bonjourService) {
|
|
340
475
|
try {
|
|
341
476
|
bonjourService.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mqtt-broker.js","sourceRoot":"","sources":["../../../src/adapters/pailot/mqtt-broker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mqtt-broker.js","sourceRoot":"","sources":["../../../src/adapters/pailot/mqtt-broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* apns/client.ts — Apple Push Notification service (APNs) client for AIBroker.
|
|
3
|
+
*
|
|
4
|
+
* Sends push notifications to PAILot devices when no MQTT clients are connected.
|
|
5
|
+
* Device tokens are stored in ~/.aibroker/apns-tokens.json.
|
|
6
|
+
*
|
|
7
|
+
* Configuration (loaded from ~/.aibroker/env or process.env):
|
|
8
|
+
* APNS_KEY_PATH — path to the .p8 auth key file
|
|
9
|
+
* APNS_KEY_ID — 10-character key ID (e.g., C9Z39FRQ2N)
|
|
10
|
+
* APNS_TEAM_ID — 10-character Apple Team ID (e.g., 7KU642K5ZL)
|
|
11
|
+
* APNS_PRODUCTION — set to "1" or "true" to use production APNs host
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Register a device token. Silently ignores duplicates.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerToken(token: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Remove a device token (e.g., on InvalidToken APNs error).
|
|
19
|
+
*/
|
|
20
|
+
export declare function removeToken(token: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Returns all registered device tokens.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getTokens(): string[];
|
|
25
|
+
/** Reset badge counter — call when the app connects via MQTT. */
|
|
26
|
+
export declare function resetBadge(): void;
|
|
27
|
+
export interface PushPayload {
|
|
28
|
+
title: string;
|
|
29
|
+
body: string;
|
|
30
|
+
badge?: number;
|
|
31
|
+
data?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Send a push notification to a single device token.
|
|
35
|
+
* Returns true on success, false on failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function sendPushToToken(token: string, payload: PushPayload): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Send a push notification to all registered device tokens.
|
|
40
|
+
* Returns the number of tokens that succeeded.
|
|
41
|
+
*/
|
|
42
|
+
export declare function sendPush(title: string, body: string, data?: Record<string, unknown>, badge?: number): Promise<number>;
|
|
43
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/apns/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsFH;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAOD,iEAAiE;AACjE,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B3F;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* apns/client.ts — Apple Push Notification service (APNs) client for AIBroker.
|
|
3
|
+
*
|
|
4
|
+
* Sends push notifications to PAILot devices when no MQTT clients are connected.
|
|
5
|
+
* Device tokens are stored in ~/.aibroker/apns-tokens.json.
|
|
6
|
+
*
|
|
7
|
+
* Configuration (loaded from ~/.aibroker/env or process.env):
|
|
8
|
+
* APNS_KEY_PATH — path to the .p8 auth key file
|
|
9
|
+
* APNS_KEY_ID — 10-character key ID (e.g., C9Z39FRQ2N)
|
|
10
|
+
* APNS_TEAM_ID — 10-character Apple Team ID (e.g., 7KU642K5ZL)
|
|
11
|
+
* APNS_PRODUCTION — set to "1" or "true" to use production APNs host
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { homedir } from "node:os";
|
|
16
|
+
import { createRequire } from "node:module";
|
|
17
|
+
import { log } from "../core/log.js";
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
const APNS_BUNDLE_ID = "com.tekmidian.pailot";
|
|
20
|
+
const TOKENS_FILE = join(homedir(), ".aibroker", "apns-tokens.json");
|
|
21
|
+
// Lazy-loaded APNs client instance.
|
|
22
|
+
let apnsClient = null;
|
|
23
|
+
let apnsLoaded = false;
|
|
24
|
+
/**
|
|
25
|
+
* Load and initialise the APNs client from environment variables.
|
|
26
|
+
* Returns null if required config is missing or apns2 fails to load.
|
|
27
|
+
*/
|
|
28
|
+
function getApnsClient() {
|
|
29
|
+
if (apnsLoaded)
|
|
30
|
+
return apnsClient;
|
|
31
|
+
apnsLoaded = true;
|
|
32
|
+
const keyPath = process.env.APNS_KEY_PATH;
|
|
33
|
+
const keyId = process.env.APNS_KEY_ID;
|
|
34
|
+
const teamId = process.env.APNS_TEAM_ID;
|
|
35
|
+
if (!keyPath || !keyId || !teamId) {
|
|
36
|
+
log("[APNs] missing config (APNS_KEY_PATH / APNS_KEY_ID / APNS_TEAM_ID) — push disabled");
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
if (!existsSync(keyPath)) {
|
|
40
|
+
log(`[APNs] key file not found: ${keyPath} — push disabled`);
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const { ApnsClient, Host } = require("apns2");
|
|
45
|
+
const production = process.env.APNS_PRODUCTION === "1" || process.env.APNS_PRODUCTION === "true";
|
|
46
|
+
const host = production ? Host.production : Host.development;
|
|
47
|
+
const signingKey = readFileSync(keyPath, "utf-8");
|
|
48
|
+
apnsClient = new ApnsClient({
|
|
49
|
+
team: teamId,
|
|
50
|
+
keyId,
|
|
51
|
+
signingKey,
|
|
52
|
+
host,
|
|
53
|
+
defaultTopic: APNS_BUNDLE_ID,
|
|
54
|
+
});
|
|
55
|
+
log(`[APNs] client initialised (${production ? "production" : "sandbox"}, key=${keyId}, team=${teamId})`);
|
|
56
|
+
return apnsClient;
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
log(`[APNs] failed to initialise client: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// --- Token storage ---
|
|
64
|
+
function loadTokens() {
|
|
65
|
+
try {
|
|
66
|
+
if (!existsSync(TOKENS_FILE))
|
|
67
|
+
return [];
|
|
68
|
+
const raw = readFileSync(TOKENS_FILE, "utf-8");
|
|
69
|
+
const parsed = JSON.parse(raw);
|
|
70
|
+
return Array.isArray(parsed) ? parsed.filter((t) => typeof t === "string") : [];
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function saveTokens(tokens) {
|
|
77
|
+
try {
|
|
78
|
+
const dir = join(homedir(), ".aibroker");
|
|
79
|
+
mkdirSync(dir, { recursive: true });
|
|
80
|
+
writeFileSync(TOKENS_FILE, JSON.stringify(tokens, null, 2), "utf-8");
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
log(`[APNs] failed to save tokens: ${err instanceof Error ? err.message : String(err)}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Register a device token. Silently ignores duplicates.
|
|
88
|
+
*/
|
|
89
|
+
export function registerToken(token) {
|
|
90
|
+
if (!token || typeof token !== "string")
|
|
91
|
+
return;
|
|
92
|
+
const tokens = loadTokens();
|
|
93
|
+
if (!tokens.includes(token)) {
|
|
94
|
+
tokens.push(token);
|
|
95
|
+
saveTokens(tokens);
|
|
96
|
+
log(`[APNs] registered token: ${token.slice(0, 16)}... (total: ${tokens.length})`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Remove a device token (e.g., on InvalidToken APNs error).
|
|
101
|
+
*/
|
|
102
|
+
export function removeToken(token) {
|
|
103
|
+
const tokens = loadTokens().filter((t) => t !== token);
|
|
104
|
+
saveTokens(tokens);
|
|
105
|
+
log(`[APNs] removed token: ${token.slice(0, 16)}...`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Returns all registered device tokens.
|
|
109
|
+
*/
|
|
110
|
+
export function getTokens() {
|
|
111
|
+
return loadTokens();
|
|
112
|
+
}
|
|
113
|
+
// --- Badge counter ---
|
|
114
|
+
// Tracks pending (unseen) push count. Incremented with each push,
|
|
115
|
+
// reset to 0 when an MQTT client connects (app is opened).
|
|
116
|
+
let pendingBadge = 0;
|
|
117
|
+
/** Reset badge counter — call when the app connects via MQTT. */
|
|
118
|
+
export function resetBadge() {
|
|
119
|
+
pendingBadge = 0;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Send a push notification to a single device token.
|
|
123
|
+
* Returns true on success, false on failure.
|
|
124
|
+
*/
|
|
125
|
+
export async function sendPushToToken(token, payload) {
|
|
126
|
+
const client = getApnsClient();
|
|
127
|
+
if (!client)
|
|
128
|
+
return false;
|
|
129
|
+
try {
|
|
130
|
+
const { Notification } = require("apns2");
|
|
131
|
+
const notification = new Notification(token, {
|
|
132
|
+
alert: {
|
|
133
|
+
title: payload.title,
|
|
134
|
+
body: payload.body,
|
|
135
|
+
},
|
|
136
|
+
badge: payload.badge ?? 1,
|
|
137
|
+
sound: "default",
|
|
138
|
+
data: payload.data ?? {},
|
|
139
|
+
});
|
|
140
|
+
await client.send(notification);
|
|
141
|
+
log(`[APNs] push sent to ${token.slice(0, 16)}... — "${payload.title}: ${payload.body.slice(0, 40)}"`);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
const reason = err?.response?.reason ?? err?.message ?? String(err);
|
|
146
|
+
log(`[APNs] push failed for ${token.slice(0, 16)}...: ${reason}`);
|
|
147
|
+
// Clean up stale/invalid tokens automatically
|
|
148
|
+
if (reason === "BadDeviceToken" || reason === "Unregistered" || reason === "DeviceTokenNotForTopic") {
|
|
149
|
+
removeToken(token);
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Send a push notification to all registered device tokens.
|
|
156
|
+
* Returns the number of tokens that succeeded.
|
|
157
|
+
*/
|
|
158
|
+
export async function sendPush(title, body, data, badge) {
|
|
159
|
+
const tokens = getTokens();
|
|
160
|
+
if (tokens.length === 0) {
|
|
161
|
+
log("[APNs] no registered tokens — skipping push");
|
|
162
|
+
return 0;
|
|
163
|
+
}
|
|
164
|
+
const client = getApnsClient();
|
|
165
|
+
if (!client)
|
|
166
|
+
return 0;
|
|
167
|
+
// Increment pending badge counter
|
|
168
|
+
pendingBadge++;
|
|
169
|
+
const actualBadge = badge ?? pendingBadge;
|
|
170
|
+
log(`[APNs] sending push to ${tokens.length} token(s): "${title}" (badge=${actualBadge})`);
|
|
171
|
+
const results = await Promise.allSettled(tokens.map((token) => sendPushToToken(token, { title, body, badge: actualBadge, data })));
|
|
172
|
+
const succeeded = results.filter((r) => r.status === "fulfilled" && r.value === true).length;
|
|
173
|
+
log(`[APNs] push delivery: ${succeeded}/${tokens.length} succeeded`);
|
|
174
|
+
return succeeded;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/apns/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-handlers.d.ts","sourceRoot":"","sources":["../../src/daemon/core-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"core-handlers.d.ts","sourceRoot":"","sources":["../../src/daemon/core-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAmC9D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAg+BN"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* status — hub health/connection summary
|
|
18
18
|
*/
|
|
19
19
|
import { randomUUID } from "node:crypto";
|
|
20
|
+
import { registerToken as apnsRegisterToken, getTokens as apnsGetTokens } from "../apns/client.js";
|
|
20
21
|
import { createBrokerMessage } from "../types/broker.js";
|
|
21
22
|
import { broadcastStatus, broadcastVoice, broadcastImage, broadcastText } from "../adapters/pailot/gateway.js";
|
|
22
23
|
import { WatcherClient } from "../ipc/client.js";
|
|
@@ -915,5 +916,20 @@ export function registerCoreHandlers(server, registry, _apiBackend, manager) {
|
|
|
915
916
|
}
|
|
916
917
|
return { ok: false, error: result.error ?? "Routing failed" };
|
|
917
918
|
});
|
|
919
|
+
// APNs device token registration (from MCP or direct IPC callers)
|
|
920
|
+
server.on("apns_register_token", async (req) => {
|
|
921
|
+
const { token } = req.params;
|
|
922
|
+
if (!token || typeof token !== "string") {
|
|
923
|
+
return { ok: false, error: "token is required" };
|
|
924
|
+
}
|
|
925
|
+
apnsRegisterToken(token);
|
|
926
|
+
return { ok: true, result: { tokens: apnsGetTokens().length } };
|
|
927
|
+
});
|
|
928
|
+
// trace_log — return the last 100 message delivery trace entries
|
|
929
|
+
server.on("trace_log", async (_req) => {
|
|
930
|
+
const { getTraces } = await import("./trace-log.js");
|
|
931
|
+
const traces = getTraces();
|
|
932
|
+
return { ok: true, result: { traces, count: traces.length } };
|
|
933
|
+
});
|
|
918
934
|
}
|
|
919
935
|
//# sourceMappingURL=core-handlers.js.map
|