@vex-chat/spire 2.3.4 → 2.4.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.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Copyright (c) 2020-2026 Vex Heavy Industries LLC
3
+ * Licensed under AGPL-3.0. See LICENSE for details.
4
+ * Commercial licenses available at vex.wtf
5
+ */
6
+ import type { Database } from "./Database.ts";
7
+ import type { CallEvent, CallSession, Device, User } from "@vex-chat/types";
8
+ interface Actor {
9
+ device: Device;
10
+ user: User;
11
+ }
12
+ type NotifyFn = (userID: string, event: string, transmissionID: string, data?: unknown, deviceID?: string, headlessPushUserID?: string) => void;
13
+ export declare class CallManager {
14
+ private readonly calls;
15
+ private readonly db;
16
+ private readonly notify;
17
+ constructor(db: Database, notify: NotifyFn);
18
+ activeCallsForUser(userID: string): CallSession[];
19
+ handleResource(args: {
20
+ action: string;
21
+ actor: Actor;
22
+ data: unknown;
23
+ transmissionID: string;
24
+ }): Promise<CallEvent>;
25
+ private accept;
26
+ private clearExpiry;
27
+ private endCall;
28
+ private event;
29
+ private invite;
30
+ private notifyParticipants;
31
+ private pruneExpired;
32
+ private requireExistingCall;
33
+ private requireParticipant;
34
+ private scheduleExpiry;
35
+ private signal;
36
+ private timeout;
37
+ }
38
+ export {};
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Copyright (c) 2020-2026 Vex Heavy Industries LLC
3
+ * Licensed under AGPL-3.0. See LICENSE for details.
4
+ * Commercial licenses available at vex.wtf
5
+ */
6
+ import { CallResourceDataSchema } from "@vex-chat/types";
7
+ const CALL_INVITE_TTL_MS = 60_000;
8
+ const CALL_MAX_TTL_MS = 2 * 60 * 60 * 1000;
9
+ export class CallManager {
10
+ calls = new Map();
11
+ db;
12
+ notify;
13
+ constructor(db, notify) {
14
+ this.db = db;
15
+ this.notify = notify;
16
+ }
17
+ activeCallsForUser(userID) {
18
+ this.pruneExpired();
19
+ const calls = [];
20
+ for (const call of this.calls.values()) {
21
+ if (call.session.status !== "ended" &&
22
+ call.session.participants.some((p) => p.userID === userID)) {
23
+ calls.push(cloneCallSession(call.session));
24
+ }
25
+ }
26
+ return calls;
27
+ }
28
+ async handleResource(args) {
29
+ this.pruneExpired();
30
+ const action = normalizeAction(args.action);
31
+ const parsed = CallResourceDataSchema.safeParse(args.data);
32
+ if (!parsed.success) {
33
+ throw new Error("Invalid call payload: " + JSON.stringify(parsed.error.issues));
34
+ }
35
+ switch (action) {
36
+ case "accept":
37
+ return this.accept(args.actor, parsed.data, args.transmissionID);
38
+ case "cancel":
39
+ case "hangup":
40
+ case "reject":
41
+ return this.endCall(action, args.actor, parsed.data, args.transmissionID);
42
+ case "ice":
43
+ case "signal":
44
+ return this.signal(action, args.actor, parsed.data, args.transmissionID);
45
+ case "invite":
46
+ return this.invite(args.actor, parsed.data, args.transmissionID);
47
+ case "end":
48
+ case "timeout":
49
+ throw new Error("Call action is server-owned: " + action);
50
+ default:
51
+ action;
52
+ throw new Error("Unsupported call action.");
53
+ }
54
+ }
55
+ accept(actor, data, transmissionID) {
56
+ const call = this.requireExistingCall(data);
57
+ this.requireParticipant(call.session, actor.user.userID);
58
+ if (call.session.status === "ended") {
59
+ throw new Error("Call has already ended.");
60
+ }
61
+ const now = new Date().toISOString();
62
+ call.session.status = "active";
63
+ call.session.expiresAt = new Date(Date.now() + CALL_MAX_TTL_MS).toISOString();
64
+ call.session.participants = call.session.participants.map((p) => p.userID === actor.user.userID
65
+ ? {
66
+ ...p,
67
+ acceptedAt: p.acceptedAt ?? now,
68
+ deviceID: actor.device.deviceID,
69
+ joinedAt: p.joinedAt ?? now,
70
+ state: "accepted",
71
+ }
72
+ : p);
73
+ this.scheduleExpiry(call, CALL_MAX_TTL_MS);
74
+ const event = this.event("accept", call.session, actor, data.signal);
75
+ this.notifyParticipants(call.session, "call", transmissionID, event);
76
+ return event;
77
+ }
78
+ clearExpiry(call) {
79
+ if (call.timeout) {
80
+ clearTimeout(call.timeout);
81
+ delete call.timeout;
82
+ }
83
+ }
84
+ endCall(action, actor, data, transmissionID) {
85
+ const call = this.requireExistingCall(data);
86
+ this.requireParticipant(call.session, actor.user.userID);
87
+ const now = new Date().toISOString();
88
+ call.session.status = "ended";
89
+ call.session.endedAt = now;
90
+ call.session.participants = call.session.participants.map((p) => p.userID === actor.user.userID
91
+ ? {
92
+ ...p,
93
+ leftAt: p.leftAt ?? now,
94
+ state: action === "reject" ? "rejected" : "left",
95
+ }
96
+ : p);
97
+ this.clearExpiry(call);
98
+ this.calls.delete(call.session.callID);
99
+ const event = this.event(action, call.session, actor, data.signal);
100
+ this.notifyParticipants(call.session, "call", transmissionID, event);
101
+ return event;
102
+ }
103
+ event(action, session, actor, signal) {
104
+ return {
105
+ action,
106
+ call: cloneCallSession(session),
107
+ fromDeviceID: actor.device.deviceID,
108
+ fromUserID: actor.user.userID,
109
+ ...(signal ? { signal } : {}),
110
+ };
111
+ }
112
+ async invite(actor, data, transmissionID) {
113
+ if (!("conversationType" in data)) {
114
+ throw new Error("Only one-to-one voice calls are supported.");
115
+ }
116
+ const recipient = await this.db.retrieveUser(data.recipientUserID);
117
+ if (!recipient) {
118
+ throw new Error("Call recipient not found.");
119
+ }
120
+ const now = new Date();
121
+ const call = {
122
+ session: {
123
+ callID: crypto.randomUUID(),
124
+ conversationID: recipient.userID,
125
+ conversationType: "dm",
126
+ createdAt: now.toISOString(),
127
+ createdBy: actor.user.userID,
128
+ createdByDeviceID: actor.device.deviceID,
129
+ expiresAt: new Date(now.getTime() + CALL_INVITE_TTL_MS).toISOString(),
130
+ media: "audio",
131
+ participants: [
132
+ {
133
+ acceptedAt: now.toISOString(),
134
+ deviceID: actor.device.deviceID,
135
+ joinedAt: now.toISOString(),
136
+ state: "accepted",
137
+ userID: actor.user.userID,
138
+ },
139
+ {
140
+ state: "ringing",
141
+ userID: recipient.userID,
142
+ },
143
+ ],
144
+ status: "ringing",
145
+ },
146
+ };
147
+ this.calls.set(call.session.callID, call);
148
+ this.scheduleExpiry(call, CALL_INVITE_TTL_MS);
149
+ const event = this.event("invite", call.session, actor, data.signal);
150
+ this.notify(recipient.userID, "callInvite", transmissionID, event);
151
+ return event;
152
+ }
153
+ notifyParticipants(session, event, transmissionID, data) {
154
+ for (const userID of new Set(session.participants.map((p) => p.userID))) {
155
+ this.notify(userID, event, transmissionID, data);
156
+ }
157
+ }
158
+ pruneExpired() {
159
+ const now = Date.now();
160
+ for (const call of [...this.calls.values()]) {
161
+ if (Date.parse(call.session.expiresAt) <= now) {
162
+ this.timeout(call);
163
+ }
164
+ }
165
+ }
166
+ requireExistingCall(data) {
167
+ if (!("callID" in data)) {
168
+ throw new Error("callID is required for this action.");
169
+ }
170
+ const call = this.calls.get(data.callID);
171
+ if (!call) {
172
+ throw new Error("Call not found.");
173
+ }
174
+ return call;
175
+ }
176
+ requireParticipant(session, userID) {
177
+ if (!session.participants.some((p) => p.userID === userID)) {
178
+ throw new Error("You are not a participant in this call.");
179
+ }
180
+ }
181
+ scheduleExpiry(call, ttlMs) {
182
+ this.clearExpiry(call);
183
+ call.timeout = setTimeout(() => {
184
+ this.timeout(call);
185
+ }, ttlMs);
186
+ call.timeout.unref();
187
+ }
188
+ signal(action, actor, data, transmissionID) {
189
+ const call = this.requireExistingCall(data);
190
+ this.requireParticipant(call.session, actor.user.userID);
191
+ if (!("signal" in data) || !data.signal) {
192
+ throw new Error("signal is required.");
193
+ }
194
+ const event = this.event(action, call.session, actor, data.signal);
195
+ this.notifyParticipants(call.session, "call", transmissionID, event);
196
+ return event;
197
+ }
198
+ timeout(call) {
199
+ if (!this.calls.has(call.session.callID)) {
200
+ return;
201
+ }
202
+ const now = new Date().toISOString();
203
+ call.session.status = "ended";
204
+ call.session.endedAt = now;
205
+ call.session.participants = call.session.participants.map((p) => p.state === "ringing" ? { ...p, leftAt: now, state: "left" } : p);
206
+ this.calls.delete(call.session.callID);
207
+ this.clearExpiry(call);
208
+ const event = {
209
+ action: "timeout",
210
+ call: cloneCallSession(call.session),
211
+ fromDeviceID: call.session.createdByDeviceID,
212
+ fromUserID: call.session.createdBy,
213
+ };
214
+ this.notifyParticipants(call.session, "call", crypto.randomUUID(), event);
215
+ }
216
+ }
217
+ function cloneCallSession(session) {
218
+ return {
219
+ ...session,
220
+ participants: session.participants.map((p) => ({ ...p })),
221
+ };
222
+ }
223
+ function normalizeAction(action) {
224
+ switch (action.toLowerCase()) {
225
+ case "accept":
226
+ return "accept";
227
+ case "cancel":
228
+ return "cancel";
229
+ case "hangup":
230
+ return "hangup";
231
+ case "ice":
232
+ return "ice";
233
+ case "invite":
234
+ return "invite";
235
+ case "reject":
236
+ return "reject";
237
+ case "signal":
238
+ return "signal";
239
+ default:
240
+ throw new Error("Unsupported call action: " + action);
241
+ }
242
+ }
243
+ //# sourceMappingURL=CallManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CallManager.js","sourceRoot":"","sources":["../src/CallManager.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * Licensed under AGPL-3.0. See LICENSE for details.
4
4
  * Commercial licenses available at vex.wtf
5
5
  */
6
+ import type { CallManager } from "./CallManager.ts";
6
7
  import type { Database } from "./Database.ts";
7
8
  import type { BaseMsg, Device, User, UserRecord } from "@vex-chat/types";
8
9
  import type WebSocket from "ws";
@@ -16,6 +17,7 @@ export declare const POWER_LEVELS: {
16
17
  export declare class ClientManager extends EventEmitter {
17
18
  private alive;
18
19
  private authed;
20
+ private callManager;
19
21
  private challengeID;
20
22
  private conn;
21
23
  private db;
@@ -25,7 +27,7 @@ export declare class ClientManager extends EventEmitter {
25
27
  private notify;
26
28
  private user;
27
29
  private userDetails;
28
- constructor(ws: WebSocket, db: Database, notify: (userID: string, event: string, transmissionID: string, data?: unknown, deviceID?: string, headlessPushUserID?: string, mailNonce?: Uint8Array) => void, userDetails: User);
30
+ constructor(ws: WebSocket, db: Database, callManager: CallManager, notify: (userID: string, event: string, transmissionID: string, data?: unknown, deviceID?: string, headlessPushUserID?: string, mailNonce?: Uint8Array) => void, userDetails: User);
29
31
  disconnect(): void;
30
32
  getDevice(): Device;
31
33
  getDeviceID(): null | string;
@@ -22,7 +22,9 @@ export const POWER_LEVELS = {
22
22
  function emptyHeader() {
23
23
  return new Uint8Array(32);
24
24
  }
25
- const MAX_MSG_SIZE = 2048;
25
+ // WebRTC SDP offers/answers are commonly several KB before encryption/packing.
26
+ // Keep this well below HTTP body limits while allowing first-party call signals.
27
+ const MAX_MSG_SIZE = 64 * 1024;
26
28
  // How many ping cycles in a row are allowed to go without a pong
27
29
  // before we declare the connection dead. With a 5s ping interval
28
30
  // this gives ~15s of grace, which is enough to absorb a normal
@@ -44,6 +46,7 @@ const PING_INTERVAL_MS = 5000;
44
46
  export class ClientManager extends EventEmitter {
45
47
  alive = true;
46
48
  authed = false;
49
+ callManager;
47
50
  challengeID = createUint8UUID();
48
51
  conn;
49
52
  db;
@@ -53,10 +56,11 @@ export class ClientManager extends EventEmitter {
53
56
  notify;
54
57
  user;
55
58
  userDetails;
56
- constructor(ws, db, notify, userDetails) {
59
+ constructor(ws, db, callManager, notify, userDetails) {
57
60
  super();
58
61
  this.conn = ws;
59
62
  this.db = db;
63
+ this.callManager = callManager;
60
64
  this.user = null;
61
65
  this.userDetails = userDetails;
62
66
  this.device = null;
@@ -207,6 +211,23 @@ export class ClientManager extends EventEmitter {
207
211
  }
208
212
  async parseResourceMsg(msg, header) {
209
213
  switch (msg.resourceType) {
214
+ case "call":
215
+ try {
216
+ const event = await this.callManager.handleResource({
217
+ action: msg.action,
218
+ actor: {
219
+ device: this.getDevice(),
220
+ user: this.getUser(),
221
+ },
222
+ data: msg.data,
223
+ transmissionID: msg.transmissionID,
224
+ });
225
+ this.sendSuccess(msg.transmissionID, event);
226
+ }
227
+ catch (err) {
228
+ this.sendErr(msg.transmissionID, err instanceof Error ? err.message : String(err));
229
+ }
230
+ break;
210
231
  case "mail":
211
232
  if (msg.action === "CREATE") {
212
233
  const mailResult = MailWSSchema.safeParse(msg.data);
@@ -1 +1 @@
1
- {"version":3,"file":"ClientManager.js","sourceRoot":"","sources":["../src/ClientManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClientManager.js","sourceRoot":"","sources":["../src/ClientManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright (c) 2020-2026 Vex Heavy Industries LLC
3
+ * Licensed under AGPL-3.0. See LICENSE for details.
4
+ * Commercial licenses available at vex.wtf
5
+ */
6
+ import type { IceServerConfig } from "@vex-chat/types";
7
+ export declare function resolveIceServersFromEnv(): Promise<IceServerConfig[]>;
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Copyright (c) 2020-2026 Vex Heavy Industries LLC
3
+ * Licensed under AGPL-3.0. See LICENSE for details.
4
+ * Commercial licenses available at vex.wtf
5
+ */
6
+ import { IceServerConfigSchema } from "@vex-chat/types";
7
+ import { z } from "zod/v4";
8
+ const CLOUDFLARE_TURN_ENDPOINT = "https://rtc.live.cloudflare.com/v1/turn/keys";
9
+ const DEFAULT_CLOUDFLARE_TURN_TIMEOUT_MS = 5_000;
10
+ const DEFAULT_CLOUDFLARE_TURN_TTL_SECONDS = 86_400;
11
+ const cloudflareIceServersResponseSchema = z.object({
12
+ iceServers: z.array(IceServerConfigSchema),
13
+ });
14
+ export async function resolveIceServersFromEnv() {
15
+ const jsonOverride = readJsonIceServersFromEnv();
16
+ if (jsonOverride) {
17
+ return jsonOverride;
18
+ }
19
+ const staticServers = readStaticIceServersFromEnv();
20
+ const cloudflareServers = await readCloudflareIceServersFromEnv();
21
+ return [...staticServers, ...cloudflareServers];
22
+ }
23
+ async function readCloudflareIceServersFromEnv() {
24
+ const keyID = readEnv([
25
+ "SPIRE_CLOUDFLARE_TURN_KEY_ID",
26
+ "CLOUDFLARE_TURN_KEY_ID",
27
+ "TURN_KEY_ID",
28
+ ]);
29
+ const apiToken = readEnv([
30
+ "SPIRE_CLOUDFLARE_TURN_API_TOKEN",
31
+ "CLOUDFLARE_TURN_API_TOKEN",
32
+ "TURN_KEY_API_TOKEN",
33
+ ]);
34
+ const endpointOverride = readEnv(["SPIRE_CLOUDFLARE_TURN_ENDPOINT"]);
35
+ if (!keyID && !apiToken && !endpointOverride) {
36
+ return [];
37
+ }
38
+ if (!apiToken || (!keyID && !endpointOverride)) {
39
+ console.warn("[spire-calls] Cloudflare TURN is partially configured; set SPIRE_CLOUDFLARE_TURN_KEY_ID and SPIRE_CLOUDFLARE_TURN_API_TOKEN");
40
+ return [];
41
+ }
42
+ let endpoint = endpointOverride;
43
+ if (!endpoint) {
44
+ if (!keyID) {
45
+ console.warn("[spire-calls] Cloudflare TURN is partially configured; set SPIRE_CLOUDFLARE_TURN_KEY_ID and SPIRE_CLOUDFLARE_TURN_API_TOKEN");
46
+ return [];
47
+ }
48
+ endpoint = `${CLOUDFLARE_TURN_ENDPOINT}/${encodeURIComponent(keyID)}/credentials/generate-ice-servers`;
49
+ }
50
+ const ttl = readPositiveIntegerEnv("SPIRE_CLOUDFLARE_TURN_TTL_SECONDS", DEFAULT_CLOUDFLARE_TURN_TTL_SECONDS);
51
+ const timeoutMs = readPositiveIntegerEnv("SPIRE_CLOUDFLARE_TURN_TIMEOUT_MS", DEFAULT_CLOUDFLARE_TURN_TIMEOUT_MS);
52
+ const controller = new AbortController();
53
+ const timeout = setTimeout(() => {
54
+ controller.abort();
55
+ }, timeoutMs);
56
+ try {
57
+ const response = await fetch(endpoint, {
58
+ body: JSON.stringify({ ttl }),
59
+ headers: {
60
+ Authorization: `Bearer ${apiToken}`,
61
+ "Content-Type": "application/json",
62
+ },
63
+ method: "POST",
64
+ signal: controller.signal,
65
+ });
66
+ if (!response.ok) {
67
+ throw new Error(`Cloudflare TURN credential request failed with ${response.status}`);
68
+ }
69
+ const payload = await response.json();
70
+ return cloudflareIceServersResponseSchema.parse(payload).iceServers;
71
+ }
72
+ catch (err) {
73
+ console.warn("[spire-calls] failed to fetch Cloudflare TURN credentials", err instanceof Error ? err.message : String(err));
74
+ return [];
75
+ }
76
+ finally {
77
+ clearTimeout(timeout);
78
+ }
79
+ }
80
+ function readEnv(names) {
81
+ for (const name of names) {
82
+ const value = process.env[name]?.trim();
83
+ if (value) {
84
+ return value;
85
+ }
86
+ }
87
+ return undefined;
88
+ }
89
+ function readJsonIceServersFromEnv() {
90
+ const json = process.env["SPIRE_ICE_SERVERS"]?.trim();
91
+ if (!json) {
92
+ return null;
93
+ }
94
+ try {
95
+ const parsed = JSON.parse(json);
96
+ return z.array(IceServerConfigSchema).parse(parsed);
97
+ }
98
+ catch (err) {
99
+ console.warn("[spire-calls] ignoring invalid SPIRE_ICE_SERVERS", err instanceof Error ? err.message : String(err));
100
+ return null;
101
+ }
102
+ }
103
+ function readPositiveIntegerEnv(name, fallback) {
104
+ const raw = process.env[name]?.trim();
105
+ if (!raw) {
106
+ return fallback;
107
+ }
108
+ const parsed = Number.parseInt(raw, 10);
109
+ if (Number.isInteger(parsed) && parsed > 0) {
110
+ return parsed;
111
+ }
112
+ console.warn(`[spire-calls] ignoring invalid ${name}; expected a positive integer`);
113
+ return fallback;
114
+ }
115
+ function readStaticIceServersFromEnv() {
116
+ const servers = [];
117
+ for (const url of splitCsvEnv("SPIRE_STUN_URLS")) {
118
+ servers.push({ urls: url });
119
+ }
120
+ const turnUrls = splitCsvEnv("SPIRE_TURN_URLS");
121
+ if (turnUrls.length > 0) {
122
+ const username = process.env["SPIRE_TURN_USERNAME"]?.trim();
123
+ const credential = process.env["SPIRE_TURN_CREDENTIAL"]?.trim();
124
+ const [firstTurnUrl] = turnUrls;
125
+ if (!firstTurnUrl) {
126
+ return servers;
127
+ }
128
+ const urls = turnUrls.length === 1 ? firstTurnUrl : turnUrls;
129
+ servers.push({
130
+ ...(credential ? { credential } : {}),
131
+ urls,
132
+ ...(username ? { username } : {}),
133
+ });
134
+ }
135
+ return servers;
136
+ }
137
+ function splitCsvEnv(name) {
138
+ return (process.env[name] ?? "")
139
+ .split(",")
140
+ .map((value) => value.trim())
141
+ .filter((value) => value.length > 0);
142
+ }
143
+ //# sourceMappingURL=IceServers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IceServers.js","sourceRoot":"","sources":["../src/IceServers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,wBAAwB,GAAG,8CAA8C,CAAC;AAChF,MAAM,kCAAkC,GAAG,KAAK,CAAC;AACjD,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAEnD,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC1C,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAC;IACjD,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,2BAA2B,EAAE,CAAC;IACpD,MAAM,iBAAiB,GAAG,MAAM,+BAA+B,EAAE,CAAC;IAClE,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,iBAAiB,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,+BAA+B;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC;QAClB,8BAA8B;QAC9B,wBAAwB;QACxB,aAAa;KAChB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC;QACrB,iCAAiC;QACjC,2BAA2B;QAC3B,oBAAoB;KACvB,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CACR,6HAA6H,CAChI,CAAC;QACF,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,GAAG,gBAAgB,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CACR,6HAA6H,CAChI,CAAC;YACF,OAAO,EAAE,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,GAAG,wBAAwB,IAAI,kBAAkB,CAAC,KAAK,CAAC,mCAAmC,CAAC;IAC3G,CAAC;IACD,MAAM,GAAG,GAAG,sBAAsB,CAC9B,mCAAmC,EACnC,mCAAmC,CACtC,CAAC;IACF,MAAM,SAAS,GAAG,sBAAsB,CACpC,kCAAkC,EAClC,kCAAkC,CACrC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;YAC7B,OAAO,EAAE;gBACL,aAAa,EAAE,UAAU,QAAQ,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACrC;YACD,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,kDAAkD,QAAQ,CAAC,MAAM,EAAE,CACtE,CAAC;QACN,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IACxE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CACR,2DAA2D,EAC3D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACnD,CAAC;QACF,OAAO,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACP,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,KAAe;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,yBAAyB;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;IACtD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CACR,kDAAkD,EAClD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACnD,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,QAAgB;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,CACR,kCAAkC,IAAI,+BAA+B,CACxE,CAAC;IACF,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,2BAA2B;IAChC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC;QAChE,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GACN,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC;YACT,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC7B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -280,6 +280,8 @@ export class NotificationService {
280
280
  }
281
281
  }
282
282
  function bodyForEvent(event) {
283
+ if (event === "callInvite")
284
+ return "Incoming voice call.";
283
285
  if (event === "mail")
284
286
  return undefined;
285
287
  if (event === "deviceRequest")
@@ -418,6 +420,8 @@ function shouldSendHeadlessPush(dispatch) {
418
420
  dispatch.userID === dispatch.headlessPushUserID);
419
421
  }
420
422
  function titleForEvent(event) {
423
+ if (event === "callInvite")
424
+ return "Incoming Vex call";
421
425
  if (event === "mail")
422
426
  return "New Message";
423
427
  if (event === "deviceRequest")