@vex-chat/spire 2.4.0 → 2.5.0

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.
@@ -3,8 +3,12 @@
3
3
  * Licensed under AGPL-3.0. See LICENSE for details.
4
4
  * Commercial licenses available at vex.wtf
5
5
  */
6
+ import { readFileSync } from "node:fs";
7
+ import * as http2 from "node:http2";
8
+ import jwt from "jsonwebtoken";
6
9
  const EXPO_PUSH_ENDPOINT = "https://exp.host/--/api/v2/push/send";
7
10
  const EXPO_RECEIPT_ENDPOINT = "https://exp.host/--/api/v2/push/getReceipts";
11
+ const FCM_TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token";
8
12
  const EXPO_BATCH_SIZE = 100;
9
13
  const EXPO_RECEIPT_DELAY_MS = 15 * 60 * 1000;
10
14
  const EXPO_REQUEST_TIMEOUT_MS = 10_000;
@@ -111,9 +115,13 @@ export class NotificationService {
111
115
  const subscriptions = await this.db.retrieveNotificationSubscriptions(dispatch.deviceID
112
116
  ? { ...query, deviceID: dispatch.deviceID }
113
117
  : query);
114
- const expoSubscriptions = subscriptions;
115
- if (expoSubscriptions.length === 0) {
116
- console.info("[spire-notify] no Expo push subscriptions", {
118
+ const expoSubscriptions = subscriptions.filter((sub) => sub.channel === "expo");
119
+ const apnsSubscriptions = subscriptions.filter((sub) => sub.channel === "apnsVoip");
120
+ const fcmSubscriptions = subscriptions.filter((sub) => sub.channel === "fcmCall");
121
+ if (expoSubscriptions.length === 0 &&
122
+ apnsSubscriptions.length === 0 &&
123
+ fcmSubscriptions.length === 0) {
124
+ console.info("[spire-notify] no push subscriptions", {
117
125
  deviceScoped: Boolean(dispatch.deviceID),
118
126
  event: dispatch.event,
119
127
  transmissionID: dispatch.transmissionID,
@@ -125,6 +133,14 @@ export class NotificationService {
125
133
  const batch = expoSubscriptions.slice(i, i + EXPO_BATCH_SIZE);
126
134
  await this.sendExpoBatch(batch, dispatch);
127
135
  }
136
+ if (dispatch.event === "callWake") {
137
+ if (apnsSubscriptions.length > 0) {
138
+ await this.sendApnsVoipBatch(apnsSubscriptions, dispatch);
139
+ }
140
+ if (fcmSubscriptions.length > 0) {
141
+ await this.sendFcmCallBatch(fcmSubscriptions, dispatch);
142
+ }
143
+ }
128
144
  }
129
145
  async notifyPushIfMailPending(dispatch) {
130
146
  const pending = await this.db.hasMail(dispatch.mailNonce, dispatch.deviceID);
@@ -203,6 +219,45 @@ export class NotificationService {
203
219
  }, this.receiptDelayMs);
204
220
  timer.unref?.();
205
221
  }
222
+ async sendApnsVoipBatch(subscriptions, dispatch) {
223
+ const config = readApnsConfig();
224
+ if (!config) {
225
+ console.warn("[spire-notify] APNs VoIP env is not configured", {
226
+ event: dispatch.event,
227
+ size: subscriptions.length,
228
+ transmissionID: dispatch.transmissionID,
229
+ });
230
+ return;
231
+ }
232
+ const providerToken = jwt.sign({}, config.privateKey, {
233
+ algorithm: "ES256",
234
+ expiresIn: "50m",
235
+ header: { alg: "ES256", kid: config.keyID },
236
+ issuer: config.teamID,
237
+ });
238
+ for (const subscription of subscriptions) {
239
+ const response = await sendApnsVoipNotification(config, providerToken, subscription, dispatch);
240
+ if (response.status >= 200 && response.status < 300) {
241
+ continue;
242
+ }
243
+ console.warn("[spire-notify] APNs VoIP delivery failed", {
244
+ body: response.body.slice(0, 500),
245
+ status: response.status,
246
+ subscriptionID: subscription.subscriptionID,
247
+ transmissionID: dispatch.transmissionID,
248
+ });
249
+ if (response.status === 400 ||
250
+ response.status === 410 ||
251
+ response.body.includes("BadDeviceToken") ||
252
+ response.body.includes("Unregistered")) {
253
+ await this.db.removeNotificationSubscription({
254
+ deviceID: subscription.deviceID,
255
+ subscriptionID: subscription.subscriptionID,
256
+ userID: subscription.userID,
257
+ });
258
+ }
259
+ }
260
+ }
206
261
  async sendExpoBatch(subscriptions, dispatch) {
207
262
  const headless = shouldSendHeadlessPush(dispatch);
208
263
  const messages = subscriptions.map((sub) => expoMessageForSubscription(sub, dispatch, headless));
@@ -267,10 +322,52 @@ export class NotificationService {
267
322
  this.scheduleReceiptCheck(receiptIDs);
268
323
  }
269
324
  }
325
+ async sendFcmCallBatch(subscriptions, dispatch) {
326
+ const config = readFcmConfig();
327
+ if (!config) {
328
+ console.warn("[spire-notify] FCM call env is not configured", {
329
+ event: dispatch.event,
330
+ size: subscriptions.length,
331
+ transmissionID: dispatch.transmissionID,
332
+ });
333
+ return;
334
+ }
335
+ const accessToken = await fetchFcmAccessToken(config);
336
+ for (const subscription of subscriptions) {
337
+ const res = await fetchWithTimeout(`https://fcm.googleapis.com/v1/projects/${encodeURIComponent(config.projectID)}/messages:send`, {
338
+ body: JSON.stringify(fcmCallMessageForSubscription(subscription, dispatch)),
339
+ headers: {
340
+ Authorization: `Bearer ${accessToken}`,
341
+ "Content-Type": "application/json",
342
+ },
343
+ method: "POST",
344
+ }, "FCM call push request");
345
+ if (res.ok) {
346
+ continue;
347
+ }
348
+ const body = await res.text().catch(() => "");
349
+ console.warn("[spire-notify] FCM call delivery failed", {
350
+ body: body.slice(0, 500),
351
+ status: res.status,
352
+ subscriptionID: subscription.subscriptionID,
353
+ transmissionID: dispatch.transmissionID,
354
+ });
355
+ if (res.status === 400 ||
356
+ res.status === 404 ||
357
+ body.includes("UNREGISTERED") ||
358
+ body.includes("registration-token-not-registered")) {
359
+ await this.db.removeNotificationSubscription({
360
+ deviceID: subscription.deviceID,
361
+ subscriptionID: subscription.subscriptionID,
362
+ userID: subscription.userID,
363
+ });
364
+ }
365
+ }
366
+ }
270
367
  startPush(dispatch) {
271
368
  void this.notifyPush(dispatch).catch((err) => {
272
369
  // Push is best-effort; websocket/inbox delivery remain authoritative.
273
- console.warn("[spire-notify] Expo push fanout failed", {
370
+ console.warn("[spire-notify] push fanout failed", {
274
371
  event: dispatch.event,
275
372
  message: err instanceof Error ? err.message : String(err),
276
373
  transmissionID: dispatch.transmissionID,
@@ -279,7 +376,19 @@ export class NotificationService {
279
376
  });
280
377
  }
281
378
  }
379
+ function apnsExpiration(dispatch) {
380
+ const expiresAt = notifyDataFields(dispatch.data)["expiresAt"];
381
+ if (typeof expiresAt === "string") {
382
+ const epochSeconds = Math.floor(Date.parse(expiresAt) / 1000);
383
+ if (Number.isFinite(epochSeconds) && epochSeconds > 0) {
384
+ return String(epochSeconds);
385
+ }
386
+ }
387
+ return String(Math.floor((Date.now() + 60_000) / 1000));
388
+ }
282
389
  function bodyForEvent(event) {
390
+ if (event === "callWake")
391
+ return "Incoming voice call.";
283
392
  if (event === "callInvite")
284
393
  return "Incoming voice call.";
285
394
  if (event === "mail")
@@ -290,6 +399,17 @@ function bodyForEvent(event) {
290
399
  return "Your device list changed.";
291
400
  return "Open Vex for the latest update.";
292
401
  }
402
+ function callWakeTtl(dispatch) {
403
+ const expiresAt = notifyDataFields(dispatch.data)["expiresAt"];
404
+ if (typeof expiresAt !== "string") {
405
+ return "60s";
406
+ }
407
+ const ms = Date.parse(expiresAt) - Date.now();
408
+ if (!Number.isFinite(ms) || ms <= 0) {
409
+ return "1s";
410
+ }
411
+ return `${Math.max(1, Math.ceil(ms / 1000)).toString()}s`;
412
+ }
293
413
  function expoMessageForSubscription(subscription, dispatch, headless) {
294
414
  if (headless) {
295
415
  return {
@@ -307,6 +427,7 @@ function expoMessageForSubscription(subscription, dispatch, headless) {
307
427
  const title = titleForEvent(dispatch.event);
308
428
  const body = bodyForEvent(dispatch.event);
309
429
  const data = {
430
+ ...notifyDataFields(dispatch.data),
310
431
  deviceID: dispatch.deviceID ?? null,
311
432
  event: dispatch.event,
312
433
  title,
@@ -335,6 +456,54 @@ function expoMessageForSubscription(subscription, dispatch, headless) {
335
456
  }
336
457
  return message;
337
458
  }
459
+ function fcmCallMessageForSubscription(subscription, dispatch) {
460
+ return {
461
+ message: {
462
+ android: {
463
+ priority: "HIGH",
464
+ ttl: callWakeTtl(dispatch),
465
+ },
466
+ data: stringRecord({
467
+ ...notifyDataFields(dispatch.data),
468
+ deviceID: dispatch.deviceID ?? "",
469
+ event: dispatch.event,
470
+ transmissionID: dispatch.transmissionID,
471
+ }),
472
+ token: subscription.token,
473
+ },
474
+ };
475
+ }
476
+ async function fetchFcmAccessToken(config) {
477
+ const assertion = jwt.sign({
478
+ scope: "https://www.googleapis.com/auth/firebase.messaging",
479
+ }, config.privateKey, {
480
+ algorithm: "RS256",
481
+ audience: FCM_TOKEN_ENDPOINT,
482
+ expiresIn: "55m",
483
+ issuer: config.clientEmail,
484
+ subject: config.clientEmail,
485
+ });
486
+ const body = new URLSearchParams({
487
+ assertion,
488
+ grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
489
+ });
490
+ const res = await fetchWithTimeout(FCM_TOKEN_ENDPOINT, {
491
+ body,
492
+ headers: {
493
+ "Content-Type": "application/x-www-form-urlencoded",
494
+ },
495
+ method: "POST",
496
+ }, "FCM OAuth token request");
497
+ if (!res.ok) {
498
+ const responseBody = await res.text().catch(() => "");
499
+ throw new Error(`FCM OAuth token request failed with status ${res.status.toString()}${responseBody ? `: ${responseBody.slice(0, 500)}` : ""}`);
500
+ }
501
+ const raw = await res.json();
502
+ if (!isRecord(raw) || typeof raw["access_token"] !== "string") {
503
+ throw new Error("FCM OAuth token response did not include access_token");
504
+ }
505
+ return raw["access_token"];
506
+ }
338
507
  async function fetchWithTimeout(input, init, label) {
339
508
  const controller = new AbortController();
340
509
  const timer = setTimeout(() => {
@@ -380,6 +549,22 @@ function normalizeExpoTickets(data) {
380
549
  const tickets = Array.isArray(data) ? data : [data];
381
550
  return tickets.filter(isExpoPushTicket);
382
551
  }
552
+ function normalizePrivateKey(value) {
553
+ return value.replaceAll("\\n", "\n");
554
+ }
555
+ function notifyDataFields(data) {
556
+ if (!isRecord(data)) {
557
+ return {};
558
+ }
559
+ const out = {};
560
+ for (const key of ["callID", "expiresAt", "mailID", "mailNonce"]) {
561
+ const value = data[key];
562
+ if (typeof value === "string") {
563
+ out[key] = value;
564
+ }
565
+ }
566
+ return out;
567
+ }
383
568
  function parseExpoPushResponse(raw) {
384
569
  if (!isRecord(raw)) {
385
570
  return { errors: [], tickets: [] };
@@ -409,6 +594,127 @@ function parseExpoReceipts(data) {
409
594
  }
410
595
  return receipts;
411
596
  }
597
+ function readApnsConfig() {
598
+ const teamID = readEnv("SPIRE_APNS_TEAM_ID");
599
+ const keyID = readEnv("SPIRE_APNS_KEY_ID");
600
+ const bundleID = readEnv("SPIRE_APNS_BUNDLE_ID");
601
+ const topic = readEnv("SPIRE_APNS_TOPIC") ?? `${bundleID ?? ""}.voip`;
602
+ const privateKey = readPrivateKeyEnv("SPIRE_APNS_PRIVATE_KEY", "SPIRE_APNS_PRIVATE_KEY_FILE");
603
+ if (!teamID || !keyID || !bundleID || !topic || !privateKey) {
604
+ return null;
605
+ }
606
+ const environment = readEnv("SPIRE_APNS_ENV") === "sandbox" ? "sandbox" : "production";
607
+ return {
608
+ environment,
609
+ keyID,
610
+ privateKey,
611
+ teamID,
612
+ topic,
613
+ };
614
+ }
615
+ function readEnv(name) {
616
+ const value = process.env[name]?.trim();
617
+ return value && value.length > 0 ? value : null;
618
+ }
619
+ function readFcmConfig() {
620
+ const json = readEnv("SPIRE_FCM_SERVICE_ACCOUNT_JSON");
621
+ if (json) {
622
+ try {
623
+ const raw = JSON.parse(json);
624
+ if (isRecord(raw) &&
625
+ typeof raw["client_email"] === "string" &&
626
+ typeof raw["private_key"] === "string" &&
627
+ typeof raw["project_id"] === "string") {
628
+ return {
629
+ clientEmail: raw["client_email"],
630
+ privateKey: normalizePrivateKey(raw["private_key"]),
631
+ projectID: raw["project_id"],
632
+ };
633
+ }
634
+ }
635
+ catch {
636
+ return null;
637
+ }
638
+ }
639
+ const clientEmail = readEnv("SPIRE_FCM_CLIENT_EMAIL");
640
+ const projectID = readEnv("SPIRE_FCM_PROJECT_ID");
641
+ const privateKey = readPrivateKeyEnv("SPIRE_FCM_PRIVATE_KEY", "SPIRE_FCM_PRIVATE_KEY_FILE");
642
+ if (!clientEmail || !projectID || !privateKey) {
643
+ return null;
644
+ }
645
+ return { clientEmail, privateKey, projectID };
646
+ }
647
+ function readPrivateKeyEnv(valueName, fileName) {
648
+ const inline = readEnv(valueName);
649
+ if (inline) {
650
+ return normalizePrivateKey(inline);
651
+ }
652
+ const file = readEnv(fileName);
653
+ if (!file) {
654
+ return null;
655
+ }
656
+ try {
657
+ return normalizePrivateKey(readFileSync(file, "utf8"));
658
+ }
659
+ catch {
660
+ return null;
661
+ }
662
+ }
663
+ function sendApnsVoipNotification(config, providerToken, subscription, dispatch) {
664
+ const host = config.environment === "sandbox"
665
+ ? "api.sandbox.push.apple.com"
666
+ : "api.push.apple.com";
667
+ const payload = JSON.stringify({
668
+ aps: {
669
+ "content-available": 1,
670
+ },
671
+ ...notifyDataFields(dispatch.data),
672
+ event: dispatch.event,
673
+ transmissionID: dispatch.transmissionID,
674
+ });
675
+ return new Promise((resolve, reject) => {
676
+ const client = http2.connect(`https://${host}`);
677
+ const timer = setTimeout(() => {
678
+ client.close();
679
+ reject(new Error(`APNs VoIP request timed out after ${EXPO_REQUEST_TIMEOUT_MS.toString()}ms`));
680
+ }, EXPO_REQUEST_TIMEOUT_MS);
681
+ timer.unref?.();
682
+ client.once("error", (err) => {
683
+ clearTimeout(timer);
684
+ reject(err);
685
+ });
686
+ const req = client.request({
687
+ ":method": "POST",
688
+ ":path": `/3/device/${subscription.token}`,
689
+ "apns-expiration": apnsExpiration(dispatch),
690
+ "apns-priority": "10",
691
+ "apns-push-type": "voip",
692
+ "apns-topic": config.topic,
693
+ authorization: `bearer ${providerToken}`,
694
+ });
695
+ let status = 0;
696
+ let body = "";
697
+ req.setEncoding("utf8");
698
+ req.on("response", (headers) => {
699
+ const rawStatus = headers[":status"];
700
+ status = typeof rawStatus === "number" ? rawStatus : 0;
701
+ });
702
+ req.on("data", (chunk) => {
703
+ body += chunk;
704
+ });
705
+ req.on("error", (err) => {
706
+ clearTimeout(timer);
707
+ client.close();
708
+ reject(err);
709
+ });
710
+ req.on("end", () => {
711
+ clearTimeout(timer);
712
+ client.close();
713
+ resolve({ body, status });
714
+ });
715
+ req.end(payload);
716
+ });
717
+ }
412
718
  function shouldDeferMailPush(dispatch, websocketDeliveries) {
413
719
  return (dispatch.event === "mail" &&
414
720
  websocketDeliveries > 0 &&
@@ -419,7 +725,18 @@ function shouldSendHeadlessPush(dispatch) {
419
725
  return (dispatch.headlessPushUserID !== undefined &&
420
726
  dispatch.userID === dispatch.headlessPushUserID);
421
727
  }
728
+ function stringRecord(input) {
729
+ const out = {};
730
+ for (const [key, value] of Object.entries(input)) {
731
+ if (typeof value === "string") {
732
+ out[key] = value;
733
+ }
734
+ }
735
+ return out;
736
+ }
422
737
  function titleForEvent(event) {
738
+ if (event === "callWake")
739
+ return "Incoming Vex call";
423
740
  if (event === "callInvite")
424
741
  return "Incoming Vex call";
425
742
  if (event === "mail")
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationService.js","sourceRoot":"","sources":["../src/NotificationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotificationService.js","sourceRoot":"","sources":["../src/NotificationService.ts"],"names":[],"mappings":"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"}
package/dist/Spire.js CHANGED
@@ -23,6 +23,7 @@ import { ClientManager } from "./ClientManager.js";
23
23
  import { Database, hashPasswordArgon2, verifyPassword } from "./Database.js";
24
24
  import { resolveIceServersFromEnv } from "./IceServers.js";
25
25
  import { NotificationService } from "./NotificationService.js";
26
+ import { callWakeDispatchData } from "./server/callWake.js";
26
27
  import { initApp, protect } from "./server/index.js";
27
28
  import { MailIngressValidationError, validateMailIngress, } from "./server/mailIngress.js";
28
29
  import { passkeySecondFactorError } from "./server/passkeySecondFactor.js";
@@ -79,8 +80,8 @@ const mailBatchPostPayload = z.object({
79
80
  mails: z.array(mailPostPayload).min(1).max(MAIL_BATCH_MAX_ITEMS),
80
81
  });
81
82
  const notificationSubscribePayload = z.object({
82
- channel: z.literal("expo"),
83
- events: z.array(z.string().min(1)).default(["mail"]),
83
+ channel: z.enum(["apnsVoip", "expo", "fcmCall"]),
84
+ events: z.array(z.string().min(1)).optional(),
84
85
  platform: z.enum(["android", "ios", "web"]).optional(),
85
86
  token: z.string().min(1),
86
87
  });
@@ -660,7 +661,13 @@ export class Spire extends EventEmitter {
660
661
  }
661
662
  await this.db.saveMail(mail, header, senderDeviceDetails.deviceID, authorUserDetails.userID);
662
663
  res.sendStatus(200);
663
- this.notify(recipientDeviceDetails.owner, "mail", crypto.randomUUID(), null, mail.recipient, mail.authorID, mail.nonce);
664
+ const callWake = callWakeDispatchData(mail);
665
+ if (callWake) {
666
+ this.notify(recipientDeviceDetails.owner, "callWake", crypto.randomUUID(), callWake, mail.recipient, undefined, mail.nonce);
667
+ }
668
+ else {
669
+ this.notify(recipientDeviceDetails.owner, "mail", crypto.randomUUID(), null, mail.recipient, mail.authorID, mail.nonce);
670
+ }
664
671
  });
665
672
  this.api.post("/mail/batch", protect, async (req, res) => {
666
673
  const senderDeviceDetails = req.device;
@@ -753,7 +760,13 @@ export class Spire extends EventEmitter {
753
760
  }
754
761
  res.send(msgpack.encode({ results }));
755
762
  for (const entry of deliveredEntries) {
756
- this.notify(entry.recipientDevice.owner, "mail", crypto.randomUUID(), null, entry.mail.recipient, entry.mail.authorID, entry.mail.nonce);
763
+ const callWake = callWakeDispatchData(entry.mail);
764
+ if (callWake) {
765
+ this.notify(entry.recipientDevice.owner, "callWake", crypto.randomUUID(), callWake, entry.mail.recipient, undefined, entry.mail.nonce);
766
+ }
767
+ else {
768
+ this.notify(entry.recipientDevice.owner, "mail", crypto.randomUUID(), null, entry.mail.recipient, entry.mail.authorID, entry.mail.nonce);
769
+ }
757
770
  }
758
771
  });
759
772
  this.api.get("/calls/active", protect, (req, res) => {
@@ -787,7 +800,10 @@ export class Spire extends EventEmitter {
787
800
  const subscription = await this.db.saveNotificationSubscription({
788
801
  channel: parsed.data.channel,
789
802
  deviceID: device.deviceID,
790
- events: parsed.data.events,
803
+ events: parsed.data.events ??
804
+ (parsed.data.channel === "expo"
805
+ ? ["mail"]
806
+ : ["callWake"]),
791
807
  platform: parsed.data.platform ?? null,
792
808
  token: parsed.data.token,
793
809
  userID: getUser(req).userID,