@vex-chat/spire 1.0.1 → 1.0.2
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 +12 -11
- package/dist/ClientManager.js +1 -2
- package/dist/ClientManager.js.map +1 -1
- package/dist/Database.d.ts +24 -1
- package/dist/Database.js +201 -64
- package/dist/Database.js.map +1 -1
- package/dist/Spire.js +81 -8
- package/dist/Spire.js.map +1 -1
- package/dist/server/index.js +15 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/rateLimit.d.ts +10 -0
- package/dist/server/rateLimit.js +51 -0
- package/dist/server/rateLimit.js.map +1 -1
- package/dist/server/user.js +7 -3
- package/dist/server/user.js.map +1 -1
- package/package.json +12 -5
- package/src/ClientManager.ts +1 -2
- package/src/Database.ts +225 -68
- package/src/Spire.ts +85 -11
- package/src/server/index.ts +16 -2
- package/src/server/rateLimit.ts +37 -3
- package/src/server/user.ts +7 -3
- package/dist/__tests__/Database.spec.d.ts +0 -1
- package/dist/__tests__/Database.spec.js +0 -122
- package/dist/__tests__/Database.spec.js.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { XUtils } from "@vex-chat/crypto";
|
|
2
|
-
import * as uuid from "uuid";
|
|
3
|
-
import { describe, expect, it, vi } from "vitest";
|
|
4
|
-
import { Database } from "../Database.js";
|
|
5
|
-
// vi.mock is hoisted above all imports automatically.
|
|
6
|
-
// Minimal stubs for uuid functions used by spire src: v4, parse, stringify.
|
|
7
|
-
vi.mock("uuid", () => ({
|
|
8
|
-
parse: (s) => {
|
|
9
|
-
const matches = s.replace(/-/g, "").match(/.{2}/g);
|
|
10
|
-
if (!matches)
|
|
11
|
-
throw new Error("Invalid UUID");
|
|
12
|
-
return Uint8Array.from(matches.map((b) => parseInt(b, 16)));
|
|
13
|
-
},
|
|
14
|
-
stringify: (b) => {
|
|
15
|
-
const hex = Array.from(b)
|
|
16
|
-
.map((x) => x.toString(16).padStart(2, "0"))
|
|
17
|
-
.join("");
|
|
18
|
-
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
|
|
19
|
-
},
|
|
20
|
-
v4: vi.fn(() => "93ce482b-a0f2-4f6e-b1df-3aed61073552"),
|
|
21
|
-
validate: () => true,
|
|
22
|
-
}));
|
|
23
|
-
describe("Database", () => {
|
|
24
|
-
// Reusable test data
|
|
25
|
-
const keyID = "de459e05-aa63-4dfa-97b4-ed43d5c7a5f7";
|
|
26
|
-
const userID = "4e67b90f-cbf8-44bc-8ce3-d3b248f033f1";
|
|
27
|
-
const deviceID = "23cb0b27-7d0c-43b2-87e1-c2b93e0095e5";
|
|
28
|
-
const publicKey = XUtils.decodeHex("30c2d0294c1cfdbb73c6b3bbe6010088c2dba8384b04ff2e2b92172431d66b5e");
|
|
29
|
-
const signature = XUtils.decodeHex("dd0665079426c3efcf4dce9b1487e4aca132f8147581b3294c3f23ddd2b4ba8240a10082bd06805d7eb320d91af971da3306e11b60073ccc3d829710f5036004000030c2d0294c1cfdbb73c6b3bbe6010088c2dba8384b04ff2e2b92172431d66b5e");
|
|
30
|
-
const testSQLPreKey = {
|
|
31
|
-
deviceID,
|
|
32
|
-
index: 1,
|
|
33
|
-
keyID,
|
|
34
|
-
publicKey: "30c2d0294c1cfdbb73c6b3bbe6010088c2dba8384b04ff2e2b92172431d66b5e",
|
|
35
|
-
signature: "dd0665079426c3efcf4dce9b1487e4aca132f8147581b3294c3f23ddd2b4ba8240a10082bd06805d7eb320d91af971da3306e11b60073ccc3d829710f5036004000030c2d0294c1cfdbb73c6b3bbe6010088c2dba8384b04ff2e2b92172431d66b5e",
|
|
36
|
-
userID,
|
|
37
|
-
};
|
|
38
|
-
const testWSPreKey = {
|
|
39
|
-
deviceID,
|
|
40
|
-
index: 1,
|
|
41
|
-
publicKey,
|
|
42
|
-
signature,
|
|
43
|
-
};
|
|
44
|
-
const options = {
|
|
45
|
-
dbType: "sqlite3mem",
|
|
46
|
-
};
|
|
47
|
-
describe("saveOTK", () => {
|
|
48
|
-
it("takes a userId and one time key, adds a keyId and saves it to oneTimeKey table", async () => {
|
|
49
|
-
expect.assertions(1);
|
|
50
|
-
vi.mocked(uuid.v4).mockReturnValueOnce(keyID);
|
|
51
|
-
const provider = new Database(options);
|
|
52
|
-
await new Promise((resolve, reject) => {
|
|
53
|
-
provider.once("ready", () => {
|
|
54
|
-
void (async () => {
|
|
55
|
-
try {
|
|
56
|
-
await provider.saveOTK(testSQLPreKey.userID, testSQLPreKey.deviceID, [
|
|
57
|
-
{
|
|
58
|
-
deviceID,
|
|
59
|
-
index: 1,
|
|
60
|
-
publicKey,
|
|
61
|
-
signature,
|
|
62
|
-
},
|
|
63
|
-
]);
|
|
64
|
-
const oneTimeKey = await provider.getOTK(deviceID);
|
|
65
|
-
expect(oneTimeKey).toEqual(testWSPreKey);
|
|
66
|
-
await provider.close();
|
|
67
|
-
resolve();
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
reject(e instanceof Error ? e : new Error(String(e)));
|
|
71
|
-
}
|
|
72
|
-
})();
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
describe("getPreKeys", () => {
|
|
78
|
-
it("returns a preKey by deviceID if said preKey exists.", async () => {
|
|
79
|
-
expect.assertions(1);
|
|
80
|
-
const provider = new Database(options);
|
|
81
|
-
await new Promise((resolve, reject) => {
|
|
82
|
-
provider.once("ready", () => {
|
|
83
|
-
void (async () => {
|
|
84
|
-
try {
|
|
85
|
-
await provider["db"]
|
|
86
|
-
.insertInto("preKeys")
|
|
87
|
-
.values(testSQLPreKey)
|
|
88
|
-
.execute();
|
|
89
|
-
const result = await provider.getPreKeys(deviceID);
|
|
90
|
-
expect(result).toEqual(testWSPreKey);
|
|
91
|
-
await provider.close();
|
|
92
|
-
resolve();
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
reject(e instanceof Error ? e : new Error(String(e)));
|
|
96
|
-
}
|
|
97
|
-
})();
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
it("return null if there are no preKeys with deviceID param", async () => {
|
|
102
|
-
expect.assertions(1);
|
|
103
|
-
const provider = new Database(options);
|
|
104
|
-
await new Promise((resolve, reject) => {
|
|
105
|
-
provider.once("ready", () => {
|
|
106
|
-
void (async () => {
|
|
107
|
-
try {
|
|
108
|
-
const result = await provider.getPreKeys(deviceID);
|
|
109
|
-
expect(result).toBeNull();
|
|
110
|
-
await provider.close();
|
|
111
|
-
resolve();
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
reject(e instanceof Error ? e : new Error(String(e)));
|
|
115
|
-
}
|
|
116
|
-
})();
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
//# sourceMappingURL=Database.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Database.spec.js","sourceRoot":"","sources":["../../src/__tests__/Database.spec.ts"],"names":[],"mappings":"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"}
|