@vex-chat/spire 2.3.3 → 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.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/dist/CallManager.d.ts +38 -0
  3. package/dist/CallManager.js +243 -0
  4. package/dist/CallManager.js.map +1 -0
  5. package/dist/ClientManager.d.ts +3 -1
  6. package/dist/ClientManager.js +23 -2
  7. package/dist/ClientManager.js.map +1 -1
  8. package/dist/IceServers.d.ts +7 -0
  9. package/dist/IceServers.js +143 -0
  10. package/dist/IceServers.js.map +1 -0
  11. package/dist/NotificationService.js +4 -0
  12. package/dist/NotificationService.js.map +1 -1
  13. package/dist/Spire.d.ts +1 -0
  14. package/dist/Spire.js +16 -1
  15. package/dist/Spire.js.map +1 -1
  16. package/dist/server/cliPasskeyPage.d.ts +7 -0
  17. package/dist/server/cliPasskeyPage.js +504 -0
  18. package/dist/server/cliPasskeyPage.js.map +1 -0
  19. package/dist/server/index.js +5 -0
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/server/passkey.js +9 -9
  22. package/dist/server/passkey.js.map +1 -1
  23. package/dist/server/passkeyDevices.js +3 -3
  24. package/dist/server/passkeyDevices.js.map +1 -1
  25. package/dist/server/wireResponse.d.ts +12 -0
  26. package/dist/server/wireResponse.js +19 -0
  27. package/dist/server/wireResponse.js.map +1 -0
  28. package/package.json +5 -4
  29. package/src/CallManager.ts +370 -0
  30. package/src/ClientManager.ts +26 -1
  31. package/src/IceServers.ts +185 -0
  32. package/src/NotificationService.ts +2 -0
  33. package/src/Spire.ts +21 -0
  34. package/src/__tests__/CallManager.spec.ts +208 -0
  35. package/src/__tests__/IceServers.spec.ts +151 -0
  36. package/src/__tests__/cliPasskeyPage.spec.ts +53 -0
  37. package/src/__tests__/wireResponse.spec.ts +46 -0
  38. package/src/server/cliPasskeyPage.ts +510 -0
  39. package/src/server/index.ts +7 -0
  40. package/src/server/passkey.ts +16 -22
  41. package/src/server/passkeyDevices.ts +3 -4
  42. package/src/server/wireResponse.ts +26 -0
@@ -10,11 +10,11 @@ import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthe
10
10
  import jwt from "jsonwebtoken";
11
11
  import { JWT_EXPIRY_PASSKEY } from "../Spire.js";
12
12
  import { getJwtSecret } from "../utils/jwtSecret.js";
13
- import { msgpack } from "../utils/msgpack.js";
14
13
  import { AppError } from "./errors.js";
15
14
  import { authLimiter } from "./rateLimit.js";
16
15
  import { censorUser, getParam, getUser } from "./utils.js";
17
16
  import { buildAndroidApkKeyHashOrigins } from "./wellKnown.js";
17
+ import { sendWireResponse } from "./wireResponse.js";
18
18
  import { protect } from "./index.js";
19
19
  const REGISTRATION_TTL_MS = 5 * 60 * 1000; // 5 min
20
20
  const AUTHENTICATION_TTL_MS = 5 * 60 * 1000;
@@ -179,10 +179,10 @@ export const getPasskeyRouter = (db) => {
179
179
  // shared types package doesn't take a runtime dep on
180
180
  // SimpleWebAuthn). The wire shape is identical — both
181
181
  // sides hand the JSON straight to navigator.credentials.
182
- res.send(msgpack.encode({
182
+ sendWireResponse(req, res, {
183
183
  options,
184
184
  requestID,
185
- }));
185
+ });
186
186
  });
187
187
  router.post("/user/:id/passkeys/register/finish", protect, async (req, res) => {
188
188
  const userDetails = getUser(req);
@@ -274,7 +274,7 @@ export const getPasskeyRouter = (db) => {
274
274
  // refuse no algorithms here — verification time is
275
275
  // where the real check happens.
276
276
  0, transports);
277
- res.send(msgpack.encode(created));
277
+ sendWireResponse(req, res, created);
278
278
  });
279
279
  router.get("/user/:id/passkeys", protect, async (req, res) => {
280
280
  const userDetails = getUser(req);
@@ -284,7 +284,7 @@ export const getPasskeyRouter = (db) => {
284
284
  return;
285
285
  }
286
286
  const list = await db.retrievePasskeysByUser(userID);
287
- res.send(msgpack.encode(list));
287
+ sendWireResponse(req, res, list);
288
288
  });
289
289
  router.delete("/user/:id/passkeys/:passkeyID", protect, async (req, res) => {
290
290
  const userDetails = getUser(req);
@@ -354,10 +354,10 @@ export const getPasskeyRouter = (db) => {
354
354
  createdAt: Date.now(),
355
355
  userID: user.userID,
356
356
  });
357
- res.send(msgpack.encode({
357
+ sendWireResponse(req, res, {
358
358
  options,
359
359
  requestID,
360
- }));
360
+ });
361
361
  });
362
362
  router.post("/auth/passkey/finish", authLimiter, async (req, res) => {
363
363
  const parsed = PasskeyAuthFinishPayloadSchema.safeParse(req.body);
@@ -456,11 +456,11 @@ export const getPasskeyRouter = (db) => {
456
456
  passkeyID: passkeyRow.passkeyID,
457
457
  user: censored,
458
458
  });
459
- res.send(msgpack.encode({
459
+ sendWireResponse(req, res, {
460
460
  passkeyID: passkeyRow.passkeyID,
461
461
  token,
462
462
  user: censored,
463
- }));
463
+ });
464
464
  });
465
465
  return router;
466
466
  };
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../src/server/passkey.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../src/server/passkey.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,9 @@
4
4
  * Commercial licenses available at vex.wtf
5
5
  */
6
6
  import express from "express";
7
- import { msgpack } from "../utils/msgpack.js";
8
7
  import { recoverDeviceEnrollmentRequest, resolveDeviceEnrollmentRequest, } from "./user.js";
9
8
  import { getParam, getUser } from "./utils.js";
9
+ import { sendWireResponse } from "./wireResponse.js";
10
10
  import { protectPasskey } from "./index.js";
11
11
  /**
12
12
  * Routes that grant a passkey-authenticated session a strictly
@@ -36,7 +36,7 @@ export const getPasskeyDeviceRouter = (db, notify, disconnectDevices) => {
36
36
  return;
37
37
  }
38
38
  const list = await db.retrieveUserDeviceList([userID]);
39
- res.send(msgpack.encode(list));
39
+ sendWireResponse(req, res, list);
40
40
  });
41
41
  router.delete("/user/:id/passkey/devices/:deviceID", protectPasskey, async (req, res) => {
42
42
  const userDetails = getUser(req);
@@ -92,7 +92,7 @@ export const getPasskeyDeviceRouter = (db, notify, disconnectDevices) => {
92
92
  if (result.kind === "ok") {
93
93
  notify(userID, "deviceListChanged", crypto.randomUUID());
94
94
  disconnectDevices?.(result.revokedDeviceIDs);
95
- res.send(msgpack.encode(result.device));
95
+ sendWireResponse(req, res, result.device);
96
96
  return;
97
97
  }
98
98
  res.status(result.status).send({ error: result.error });
@@ -1 +1 @@
1
- {"version":3,"file":"passkeyDevices.js","sourceRoot":"","sources":["../../src/server/passkeyDevices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passkeyDevices.js","sourceRoot":"","sources":["../../src/server/passkeyDevices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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 express from "express";
7
+ /**
8
+ * Normal SDK clients expect msgpack from Spire. Browser-only helpers
9
+ * can opt into JSON with `?format=json` so they do not need to ship a
10
+ * msgpack codec just to complete a short WebAuthn bridge ceremony.
11
+ */
12
+ export declare function sendWireResponse(req: express.Request, res: express.Response, payload: unknown): void;
@@ -0,0 +1,19 @@
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 { msgpack } from "../utils/msgpack.js";
7
+ /**
8
+ * Normal SDK clients expect msgpack from Spire. Browser-only helpers
9
+ * can opt into JSON with `?format=json` so they do not need to ship a
10
+ * msgpack codec just to complete a short WebAuthn bridge ceremony.
11
+ */
12
+ export function sendWireResponse(req, res, payload) {
13
+ if (req.query["format"] === "json") {
14
+ res.json(payload);
15
+ return;
16
+ }
17
+ res.send(msgpack.encode(payload));
18
+ }
19
+ //# sourceMappingURL=wireResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireResponse.js","sourceRoot":"","sources":["../../src/server/wireResponse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC5B,GAAoB,EACpB,GAAqB,EACrB,OAAgB;IAEhB,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO;IACX,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vex-chat/spire",
3
- "version": "2.3.3",
3
+ "version": "2.4.0",
4
4
  "description": "Vex server implementation in NodeJS.",
5
5
  "type": "module",
6
6
  "files": [
@@ -55,7 +55,7 @@
55
55
  "typescript-eslint": "8.58.1",
56
56
  "vitest": "4.1.4",
57
57
  "@vex-chat/eslint-config": "0.0.1",
58
- "@vex-chat/libvex": "^7.1.4"
58
+ "@vex-chat/libvex": "^7.2.0"
59
59
  },
60
60
  "typeCoverage": {
61
61
  "atLeast": 95,
@@ -83,12 +83,13 @@
83
83
  "uuid": "^14.0.0",
84
84
  "ws": "8.20.1",
85
85
  "zod": "^4.3.6",
86
- "@vex-chat/crypto": "^7.0.0",
87
- "@vex-chat/types": "^4.0.0"
86
+ "@vex-chat/types": "^4.1.0",
87
+ "@vex-chat/crypto": "^8.0.0"
88
88
  },
89
89
  "scripts": {
90
90
  "rebuild:sqlite": "pnpm rebuild better-sqlite3",
91
91
  "start": "node --experimental-strip-types src/run.ts",
92
+ "start:local": "bash scripts/start-local.sh",
92
93
  "restart": "pm2 restart spire && pm2 logs spire",
93
94
  "build": "tsc && node scripts/clean-dist-tests.mjs",
94
95
  "format": "prettier --write .",
@@ -0,0 +1,370 @@
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
+
7
+ import type { Database } from "./Database.ts";
8
+ import type {
9
+ CallAction,
10
+ CallEvent,
11
+ CallResourceData,
12
+ CallSession,
13
+ CallSignalPayload,
14
+ Device,
15
+ User,
16
+ } from "@vex-chat/types";
17
+
18
+ import { CallResourceDataSchema } from "@vex-chat/types";
19
+
20
+ const CALL_INVITE_TTL_MS = 60_000;
21
+ const CALL_MAX_TTL_MS = 2 * 60 * 60 * 1000;
22
+
23
+ interface Actor {
24
+ device: Device;
25
+ user: User;
26
+ }
27
+
28
+ interface InternalCall {
29
+ session: CallSession;
30
+ timeout?: ReturnType<typeof setTimeout>;
31
+ }
32
+
33
+ type NotifyFn = (
34
+ userID: string,
35
+ event: string,
36
+ transmissionID: string,
37
+ data?: unknown,
38
+ deviceID?: string,
39
+ headlessPushUserID?: string,
40
+ ) => void;
41
+
42
+ export class CallManager {
43
+ private readonly calls = new Map<string, InternalCall>();
44
+ private readonly db: Database;
45
+ private readonly notify: NotifyFn;
46
+
47
+ constructor(db: Database, notify: NotifyFn) {
48
+ this.db = db;
49
+ this.notify = notify;
50
+ }
51
+
52
+ public activeCallsForUser(userID: string): CallSession[] {
53
+ this.pruneExpired();
54
+ const calls: CallSession[] = [];
55
+ for (const call of this.calls.values()) {
56
+ if (
57
+ call.session.status !== "ended" &&
58
+ call.session.participants.some((p) => p.userID === userID)
59
+ ) {
60
+ calls.push(cloneCallSession(call.session));
61
+ }
62
+ }
63
+ return calls;
64
+ }
65
+
66
+ public async handleResource(args: {
67
+ action: string;
68
+ actor: Actor;
69
+ data: unknown;
70
+ transmissionID: string;
71
+ }): Promise<CallEvent> {
72
+ this.pruneExpired();
73
+ const action = normalizeAction(args.action);
74
+ const parsed = CallResourceDataSchema.safeParse(args.data);
75
+ if (!parsed.success) {
76
+ throw new Error(
77
+ "Invalid call payload: " + JSON.stringify(parsed.error.issues),
78
+ );
79
+ }
80
+
81
+ switch (action) {
82
+ case "accept":
83
+ return this.accept(
84
+ args.actor,
85
+ parsed.data,
86
+ args.transmissionID,
87
+ );
88
+ case "cancel":
89
+ case "hangup":
90
+ case "reject":
91
+ return this.endCall(
92
+ action,
93
+ args.actor,
94
+ parsed.data,
95
+ args.transmissionID,
96
+ );
97
+ case "ice":
98
+ case "signal":
99
+ return this.signal(
100
+ action,
101
+ args.actor,
102
+ parsed.data,
103
+ args.transmissionID,
104
+ );
105
+ case "invite":
106
+ return this.invite(
107
+ args.actor,
108
+ parsed.data,
109
+ args.transmissionID,
110
+ );
111
+ case "end":
112
+ case "timeout":
113
+ throw new Error("Call action is server-owned: " + action);
114
+ default:
115
+ action satisfies never;
116
+ throw new Error("Unsupported call action.");
117
+ }
118
+ }
119
+
120
+ private accept(
121
+ actor: Actor,
122
+ data: CallResourceData,
123
+ transmissionID: string,
124
+ ): CallEvent {
125
+ const call = this.requireExistingCall(data);
126
+ this.requireParticipant(call.session, actor.user.userID);
127
+ if (call.session.status === "ended") {
128
+ throw new Error("Call has already ended.");
129
+ }
130
+
131
+ const now = new Date().toISOString();
132
+ call.session.status = "active";
133
+ call.session.expiresAt = new Date(
134
+ Date.now() + CALL_MAX_TTL_MS,
135
+ ).toISOString();
136
+ call.session.participants = call.session.participants.map((p) =>
137
+ p.userID === actor.user.userID
138
+ ? {
139
+ ...p,
140
+ acceptedAt: p.acceptedAt ?? now,
141
+ deviceID: actor.device.deviceID,
142
+ joinedAt: p.joinedAt ?? now,
143
+ state: "accepted",
144
+ }
145
+ : p,
146
+ );
147
+ this.scheduleExpiry(call, CALL_MAX_TTL_MS);
148
+
149
+ const event = this.event("accept", call.session, actor, data.signal);
150
+ this.notifyParticipants(call.session, "call", transmissionID, event);
151
+ return event;
152
+ }
153
+
154
+ private clearExpiry(call: InternalCall): void {
155
+ if (call.timeout) {
156
+ clearTimeout(call.timeout);
157
+ delete call.timeout;
158
+ }
159
+ }
160
+
161
+ private endCall(
162
+ action: Extract<CallAction, "cancel" | "hangup" | "reject">,
163
+ actor: Actor,
164
+ data: CallResourceData,
165
+ transmissionID: string,
166
+ ): CallEvent {
167
+ const call = this.requireExistingCall(data);
168
+ this.requireParticipant(call.session, actor.user.userID);
169
+ const now = new Date().toISOString();
170
+ call.session.status = "ended";
171
+ call.session.endedAt = now;
172
+ call.session.participants = call.session.participants.map((p) =>
173
+ p.userID === actor.user.userID
174
+ ? {
175
+ ...p,
176
+ leftAt: p.leftAt ?? now,
177
+ state: action === "reject" ? "rejected" : "left",
178
+ }
179
+ : p,
180
+ );
181
+ this.clearExpiry(call);
182
+ this.calls.delete(call.session.callID);
183
+
184
+ const event = this.event(action, call.session, actor, data.signal);
185
+ this.notifyParticipants(call.session, "call", transmissionID, event);
186
+ return event;
187
+ }
188
+
189
+ private event(
190
+ action: CallAction,
191
+ session: CallSession,
192
+ actor: Actor,
193
+ signal?: CallSignalPayload,
194
+ ): CallEvent {
195
+ return {
196
+ action,
197
+ call: cloneCallSession(session),
198
+ fromDeviceID: actor.device.deviceID,
199
+ fromUserID: actor.user.userID,
200
+ ...(signal ? { signal } : {}),
201
+ };
202
+ }
203
+
204
+ private async invite(
205
+ actor: Actor,
206
+ data: CallResourceData,
207
+ transmissionID: string,
208
+ ): Promise<CallEvent> {
209
+ if (!("conversationType" in data)) {
210
+ throw new Error("Only one-to-one voice calls are supported.");
211
+ }
212
+ const recipient = await this.db.retrieveUser(data.recipientUserID);
213
+ if (!recipient) {
214
+ throw new Error("Call recipient not found.");
215
+ }
216
+
217
+ const now = new Date();
218
+ const call: InternalCall = {
219
+ session: {
220
+ callID: crypto.randomUUID(),
221
+ conversationID: recipient.userID,
222
+ conversationType: "dm",
223
+ createdAt: now.toISOString(),
224
+ createdBy: actor.user.userID,
225
+ createdByDeviceID: actor.device.deviceID,
226
+ expiresAt: new Date(
227
+ now.getTime() + CALL_INVITE_TTL_MS,
228
+ ).toISOString(),
229
+ media: "audio",
230
+ participants: [
231
+ {
232
+ acceptedAt: now.toISOString(),
233
+ deviceID: actor.device.deviceID,
234
+ joinedAt: now.toISOString(),
235
+ state: "accepted",
236
+ userID: actor.user.userID,
237
+ },
238
+ {
239
+ state: "ringing",
240
+ userID: recipient.userID,
241
+ },
242
+ ],
243
+ status: "ringing",
244
+ },
245
+ };
246
+ this.calls.set(call.session.callID, call);
247
+ this.scheduleExpiry(call, CALL_INVITE_TTL_MS);
248
+
249
+ const event = this.event("invite", call.session, actor, data.signal);
250
+ this.notify(recipient.userID, "callInvite", transmissionID, event);
251
+ return event;
252
+ }
253
+
254
+ private notifyParticipants(
255
+ session: CallSession,
256
+ event: string,
257
+ transmissionID: string,
258
+ data: CallEvent,
259
+ ): void {
260
+ for (const userID of new Set(
261
+ session.participants.map((p) => p.userID),
262
+ )) {
263
+ this.notify(userID, event, transmissionID, data);
264
+ }
265
+ }
266
+
267
+ private pruneExpired(): void {
268
+ const now = Date.now();
269
+ for (const call of [...this.calls.values()]) {
270
+ if (Date.parse(call.session.expiresAt) <= now) {
271
+ this.timeout(call);
272
+ }
273
+ }
274
+ }
275
+
276
+ private requireExistingCall(data: CallResourceData): InternalCall {
277
+ if (!("callID" in data)) {
278
+ throw new Error("callID is required for this action.");
279
+ }
280
+ const call = this.calls.get(data.callID);
281
+ if (!call) {
282
+ throw new Error("Call not found.");
283
+ }
284
+ return call;
285
+ }
286
+
287
+ private requireParticipant(session: CallSession, userID: string): void {
288
+ if (!session.participants.some((p) => p.userID === userID)) {
289
+ throw new Error("You are not a participant in this call.");
290
+ }
291
+ }
292
+
293
+ private scheduleExpiry(call: InternalCall, ttlMs: number): void {
294
+ this.clearExpiry(call);
295
+ call.timeout = setTimeout(() => {
296
+ this.timeout(call);
297
+ }, ttlMs);
298
+ call.timeout.unref();
299
+ }
300
+
301
+ private signal(
302
+ action: Extract<CallAction, "ice" | "signal">,
303
+ actor: Actor,
304
+ data: CallResourceData,
305
+ transmissionID: string,
306
+ ): CallEvent {
307
+ const call = this.requireExistingCall(data);
308
+ this.requireParticipant(call.session, actor.user.userID);
309
+ if (!("signal" in data) || !data.signal) {
310
+ throw new Error("signal is required.");
311
+ }
312
+ const event = this.event(action, call.session, actor, data.signal);
313
+ this.notifyParticipants(call.session, "call", transmissionID, event);
314
+ return event;
315
+ }
316
+
317
+ private timeout(call: InternalCall): void {
318
+ if (!this.calls.has(call.session.callID)) {
319
+ return;
320
+ }
321
+ const now = new Date().toISOString();
322
+ call.session.status = "ended";
323
+ call.session.endedAt = now;
324
+ call.session.participants = call.session.participants.map((p) =>
325
+ p.state === "ringing" ? { ...p, leftAt: now, state: "left" } : p,
326
+ );
327
+ this.calls.delete(call.session.callID);
328
+ this.clearExpiry(call);
329
+ const event: CallEvent = {
330
+ action: "timeout",
331
+ call: cloneCallSession(call.session),
332
+ fromDeviceID: call.session.createdByDeviceID,
333
+ fromUserID: call.session.createdBy,
334
+ };
335
+ this.notifyParticipants(
336
+ call.session,
337
+ "call",
338
+ crypto.randomUUID(),
339
+ event,
340
+ );
341
+ }
342
+ }
343
+
344
+ function cloneCallSession(session: CallSession): CallSession {
345
+ return {
346
+ ...session,
347
+ participants: session.participants.map((p) => ({ ...p })),
348
+ };
349
+ }
350
+
351
+ function normalizeAction(action: string): CallAction {
352
+ switch (action.toLowerCase()) {
353
+ case "accept":
354
+ return "accept";
355
+ case "cancel":
356
+ return "cancel";
357
+ case "hangup":
358
+ return "hangup";
359
+ case "ice":
360
+ return "ice";
361
+ case "invite":
362
+ return "invite";
363
+ case "reject":
364
+ return "reject";
365
+ case "signal":
366
+ return "signal";
367
+ default:
368
+ throw new Error("Unsupported call action: " + action);
369
+ }
370
+ }