@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.
- package/README.md +1 -1
- package/dist/CallManager.d.ts +38 -0
- package/dist/CallManager.js +243 -0
- package/dist/CallManager.js.map +1 -0
- package/dist/ClientManager.d.ts +3 -1
- package/dist/ClientManager.js +23 -2
- package/dist/ClientManager.js.map +1 -1
- package/dist/IceServers.d.ts +7 -0
- package/dist/IceServers.js +143 -0
- package/dist/IceServers.js.map +1 -0
- package/dist/NotificationService.js +4 -0
- package/dist/NotificationService.js.map +1 -1
- package/dist/Spire.d.ts +1 -0
- package/dist/Spire.js +16 -1
- package/dist/Spire.js.map +1 -1
- package/dist/server/cliPasskeyPage.d.ts +7 -0
- package/dist/server/cliPasskeyPage.js +504 -0
- package/dist/server/cliPasskeyPage.js.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/passkey.js +9 -9
- package/dist/server/passkey.js.map +1 -1
- package/dist/server/passkeyDevices.js +3 -3
- package/dist/server/passkeyDevices.js.map +1 -1
- package/dist/server/wireResponse.d.ts +12 -0
- package/dist/server/wireResponse.js +19 -0
- package/dist/server/wireResponse.js.map +1 -0
- package/package.json +5 -4
- package/src/CallManager.ts +370 -0
- package/src/ClientManager.ts +26 -1
- package/src/IceServers.ts +185 -0
- package/src/NotificationService.ts +2 -0
- package/src/Spire.ts +21 -0
- package/src/__tests__/CallManager.spec.ts +208 -0
- package/src/__tests__/IceServers.spec.ts +151 -0
- package/src/__tests__/cliPasskeyPage.spec.ts +53 -0
- package/src/__tests__/wireResponse.spec.ts +46 -0
- package/src/server/cliPasskeyPage.ts +510 -0
- package/src/server/index.ts +7 -0
- package/src/server/passkey.ts +16 -22
- package/src/server/passkeyDevices.ts +3 -4
- package/src/server/wireResponse.ts +26 -0
package/src/server/passkey.ts
CHANGED
|
@@ -32,12 +32,12 @@ import jwt from "jsonwebtoken";
|
|
|
32
32
|
|
|
33
33
|
import { JWT_EXPIRY_PASSKEY } from "../Spire.ts";
|
|
34
34
|
import { getJwtSecret } from "../utils/jwtSecret.ts";
|
|
35
|
-
import { msgpack } from "../utils/msgpack.ts";
|
|
36
35
|
|
|
37
36
|
import { AppError } from "./errors.ts";
|
|
38
37
|
import { authLimiter } from "./rateLimit.ts";
|
|
39
38
|
import { censorUser, getParam, getUser } from "./utils.ts";
|
|
40
39
|
import { buildAndroidApkKeyHashOrigins } from "./wellKnown.ts";
|
|
40
|
+
import { sendWireResponse } from "./wireResponse.ts";
|
|
41
41
|
|
|
42
42
|
import { protect } from "./index.ts";
|
|
43
43
|
|
|
@@ -257,12 +257,10 @@ export const getPasskeyRouter = (db: Database) => {
|
|
|
257
257
|
// shared types package doesn't take a runtime dep on
|
|
258
258
|
// SimpleWebAuthn). The wire shape is identical — both
|
|
259
259
|
// sides hand the JSON straight to navigator.credentials.
|
|
260
|
-
res
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}),
|
|
265
|
-
);
|
|
260
|
+
sendWireResponse(req, res, {
|
|
261
|
+
options,
|
|
262
|
+
requestID,
|
|
263
|
+
});
|
|
266
264
|
},
|
|
267
265
|
);
|
|
268
266
|
|
|
@@ -379,7 +377,7 @@ export const getPasskeyRouter = (db: Database) => {
|
|
|
379
377
|
transports,
|
|
380
378
|
);
|
|
381
379
|
|
|
382
|
-
res
|
|
380
|
+
sendWireResponse(req, res, created);
|
|
383
381
|
},
|
|
384
382
|
);
|
|
385
383
|
|
|
@@ -391,7 +389,7 @@ export const getPasskeyRouter = (db: Database) => {
|
|
|
391
389
|
return;
|
|
392
390
|
}
|
|
393
391
|
const list: Passkey[] = await db.retrievePasskeysByUser(userID);
|
|
394
|
-
res
|
|
392
|
+
sendWireResponse(req, res, list);
|
|
395
393
|
});
|
|
396
394
|
|
|
397
395
|
router.delete(
|
|
@@ -477,12 +475,10 @@ export const getPasskeyRouter = (db: Database) => {
|
|
|
477
475
|
userID: user.userID,
|
|
478
476
|
});
|
|
479
477
|
|
|
480
|
-
res
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}),
|
|
485
|
-
);
|
|
478
|
+
sendWireResponse(req, res, {
|
|
479
|
+
options,
|
|
480
|
+
requestID,
|
|
481
|
+
});
|
|
486
482
|
});
|
|
487
483
|
|
|
488
484
|
router.post("/auth/passkey/finish", authLimiter, async (req, res) => {
|
|
@@ -596,13 +592,11 @@ export const getPasskeyRouter = (db: Database) => {
|
|
|
596
592
|
passkeyID: passkeyRow.passkeyID,
|
|
597
593
|
user: censored,
|
|
598
594
|
});
|
|
599
|
-
res
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
}),
|
|
605
|
-
);
|
|
595
|
+
sendWireResponse(req, res, {
|
|
596
|
+
passkeyID: passkeyRow.passkeyID,
|
|
597
|
+
token,
|
|
598
|
+
user: censored,
|
|
599
|
+
});
|
|
606
600
|
});
|
|
607
601
|
|
|
608
602
|
return router;
|
|
@@ -8,13 +8,12 @@ import type { Database } from "../Database.ts";
|
|
|
8
8
|
|
|
9
9
|
import express from "express";
|
|
10
10
|
|
|
11
|
-
import { msgpack } from "../utils/msgpack.ts";
|
|
12
|
-
|
|
13
11
|
import {
|
|
14
12
|
recoverDeviceEnrollmentRequest,
|
|
15
13
|
resolveDeviceEnrollmentRequest,
|
|
16
14
|
} from "./user.ts";
|
|
17
15
|
import { getParam, getUser } from "./utils.ts";
|
|
16
|
+
import { sendWireResponse } from "./wireResponse.ts";
|
|
18
17
|
|
|
19
18
|
import { protectPasskey } from "./index.ts";
|
|
20
19
|
|
|
@@ -60,7 +59,7 @@ export const getPasskeyDeviceRouter = (
|
|
|
60
59
|
return;
|
|
61
60
|
}
|
|
62
61
|
const list = await db.retrieveUserDeviceList([userID]);
|
|
63
|
-
res
|
|
62
|
+
sendWireResponse(req, res, list);
|
|
64
63
|
},
|
|
65
64
|
);
|
|
66
65
|
|
|
@@ -126,7 +125,7 @@ export const getPasskeyDeviceRouter = (
|
|
|
126
125
|
if (result.kind === "ok") {
|
|
127
126
|
notify(userID, "deviceListChanged", crypto.randomUUID());
|
|
128
127
|
disconnectDevices?.(result.revokedDeviceIDs);
|
|
129
|
-
res
|
|
128
|
+
sendWireResponse(req, res, result.device);
|
|
130
129
|
return;
|
|
131
130
|
}
|
|
132
131
|
res.status(result.status).send({ error: result.error });
|
|
@@ -0,0 +1,26 @@
|
|
|
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 express from "express";
|
|
8
|
+
|
|
9
|
+
import { msgpack } from "../utils/msgpack.ts";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Normal SDK clients expect msgpack from Spire. Browser-only helpers
|
|
13
|
+
* can opt into JSON with `?format=json` so they do not need to ship a
|
|
14
|
+
* msgpack codec just to complete a short WebAuthn bridge ceremony.
|
|
15
|
+
*/
|
|
16
|
+
export function sendWireResponse(
|
|
17
|
+
req: express.Request,
|
|
18
|
+
res: express.Response,
|
|
19
|
+
payload: unknown,
|
|
20
|
+
): void {
|
|
21
|
+
if (req.query["format"] === "json") {
|
|
22
|
+
res.json(payload);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
res.send(msgpack.encode(payload));
|
|
26
|
+
}
|