@vex-chat/libvex 6.2.3 → 6.3.1
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/dist/Client.d.ts +56 -8
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +167 -30
- package/dist/Client.js.map +1 -1
- package/dist/Storage.d.ts +6 -0
- package/dist/Storage.d.ts.map +1 -1
- package/dist/__tests__/harness/memory-storage.d.ts +2 -1
- package/dist/__tests__/harness/memory-storage.d.ts.map +1 -1
- package/dist/__tests__/harness/memory-storage.js +17 -1
- package/dist/__tests__/harness/memory-storage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/retention.d.ts +32 -0
- package/dist/retention.d.ts.map +1 -0
- package/dist/retention.js +62 -0
- package/dist/retention.js.map +1 -0
- package/dist/storage/schema.d.ts +2 -0
- package/dist/storage/schema.d.ts.map +1 -1
- package/dist/storage/sqlite.d.ts +2 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +72 -2
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +2 -2
- package/src/Client.ts +292 -40
- package/src/Storage.ts +8 -0
- package/src/__tests__/harness/memory-storage.ts +25 -1
- package/src/__tests__/retention.test.ts +50 -0
- package/src/index.ts +5 -0
- package/src/retention.ts +85 -0
- package/src/storage/schema.ts +2 -0
- package/src/storage/sqlite.ts +92 -2
package/dist/Client.d.ts
CHANGED
|
@@ -103,6 +103,13 @@ export interface ClientOptions {
|
|
|
103
103
|
host?: string;
|
|
104
104
|
/** Use sqlite in-memory mode (`:memory:`) instead of a file. */
|
|
105
105
|
inMemoryDb?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Maximum age (in days) for messages kept in local storage. Values above
|
|
108
|
+
* 30 are clamped to 30 to match server retention. Peers may request a
|
|
109
|
+
* shorter window via an optional plaintext hint; this setting is still
|
|
110
|
+
* capped at 30 and is not enforceable against a modified client.
|
|
111
|
+
*/
|
|
112
|
+
localMessageRetentionDays?: number;
|
|
106
113
|
/** Whether local message history should be persisted by default storage. */
|
|
107
114
|
saveHistory?: boolean;
|
|
108
115
|
/** Use `http/ws` instead of `https/wss`. Intended for local/dev environments. */
|
|
@@ -113,6 +120,14 @@ export type DeviceRegistrationResult = Device | PendingDeviceRegistration;
|
|
|
113
120
|
* @ignore
|
|
114
121
|
*/
|
|
115
122
|
export interface Devices {
|
|
123
|
+
/**
|
|
124
|
+
* Deletes an unpublished enrollment before any owner notification
|
|
125
|
+
* (e.g. user picked "not my account").
|
|
126
|
+
*/
|
|
127
|
+
abortPendingRegistration: (args: {
|
|
128
|
+
challenge: string;
|
|
129
|
+
requestID: string;
|
|
130
|
+
}) => Promise<void>;
|
|
116
131
|
/** Approves a pending device registration request as the current device. */
|
|
117
132
|
approveRequest: (requestID: string) => Promise<Device>;
|
|
118
133
|
/** Deletes one of the account's devices (except the currently active one). */
|
|
@@ -140,6 +155,14 @@ export interface Devices {
|
|
|
140
155
|
challenge: string;
|
|
141
156
|
requestID: string;
|
|
142
157
|
}) => Promise<null | PendingDeviceRequest>;
|
|
158
|
+
/**
|
|
159
|
+
* After the user confirms the pending enrollment is theirs, notifies
|
|
160
|
+
* their existing devices (same proof as poll).
|
|
161
|
+
*/
|
|
162
|
+
publishPendingRegistration: (args: {
|
|
163
|
+
challenge: string;
|
|
164
|
+
requestID: string;
|
|
165
|
+
}) => Promise<void>;
|
|
143
166
|
/** Registers the current key material as a new device. */
|
|
144
167
|
register: () => Promise<DeviceRegistrationResult | null>;
|
|
145
168
|
/** Rejects a pending device registration request as the current device. */
|
|
@@ -276,6 +299,12 @@ export interface Message {
|
|
|
276
299
|
readerID: string;
|
|
277
300
|
/** Recipient device ID. */
|
|
278
301
|
recipient: string;
|
|
302
|
+
/**
|
|
303
|
+
* Optional peer hint (1–30): cooperative senders prefix plaintext; used
|
|
304
|
+
* with {@link ClientOptions.localMessageRetentionDays} to pick the
|
|
305
|
+
* shorter local retention window. Ignored when absent.
|
|
306
|
+
*/
|
|
307
|
+
retentionHintDays?: number;
|
|
279
308
|
/** Sender device ID. */
|
|
280
309
|
sender: string;
|
|
281
310
|
/** Time the message was created/received. */
|
|
@@ -411,7 +440,9 @@ export interface Messages {
|
|
|
411
440
|
/** Deletes local history for a user/channel. */
|
|
412
441
|
delete: (userOrChannelID: string) => Promise<void>;
|
|
413
442
|
/** Sends an encrypted message to all members of a channel. */
|
|
414
|
-
group: (channelID: string, message: string
|
|
443
|
+
group: (channelID: string, message: string, opts?: {
|
|
444
|
+
retentionHintDays?: number;
|
|
445
|
+
}) => Promise<void>;
|
|
415
446
|
/** Deletes all locally stored message history. */
|
|
416
447
|
purge: () => Promise<void>;
|
|
417
448
|
/** Returns local direct-message history with one user. */
|
|
@@ -419,7 +450,9 @@ export interface Messages {
|
|
|
419
450
|
/** Returns local group-message history for one channel. */
|
|
420
451
|
retrieveGroup: (channelID: string) => Promise<Message[]>;
|
|
421
452
|
/** Sends an encrypted direct message to one user. */
|
|
422
|
-
send: (userID: string, message: string
|
|
453
|
+
send: (userID: string, message: string, opts?: {
|
|
454
|
+
retentionHintDays?: number;
|
|
455
|
+
}) => Promise<void>;
|
|
423
456
|
}
|
|
424
457
|
/**
|
|
425
458
|
* @ignore
|
|
@@ -704,6 +737,8 @@ export declare class Client {
|
|
|
704
737
|
private readonly httpAbortController;
|
|
705
738
|
private readonly idKeys;
|
|
706
739
|
private isAlive;
|
|
740
|
+
private localMessageRetentionDays;
|
|
741
|
+
private localRetentionPurgeTimer;
|
|
707
742
|
private readonly mailInterval?;
|
|
708
743
|
private manuallyClosing;
|
|
709
744
|
/**
|
|
@@ -722,6 +757,7 @@ export declare class Client {
|
|
|
722
757
|
private postAuthVersion;
|
|
723
758
|
private readonly prefixes;
|
|
724
759
|
private reading;
|
|
760
|
+
private retentionPurgeDebounce;
|
|
725
761
|
private readonly seenMailIDs;
|
|
726
762
|
private sessionRecords;
|
|
727
763
|
private readonly signKeys;
|
|
@@ -810,6 +846,8 @@ export declare class Client {
|
|
|
810
846
|
* Gets the hex string representations of the public and private keys.
|
|
811
847
|
*/
|
|
812
848
|
getKeys(): Keys;
|
|
849
|
+
/** Current local retention cap in days (always 1–30). */
|
|
850
|
+
getLocalMessageRetentionDays(): number;
|
|
813
851
|
/**
|
|
814
852
|
* Authenticates with username/password and stores the Bearer auth token.
|
|
815
853
|
*
|
|
@@ -867,6 +905,11 @@ export declare class Client {
|
|
|
867
905
|
*/
|
|
868
906
|
register(username?: string, password?: string): Promise<[null | User, Error | null]>;
|
|
869
907
|
removeAllListeners(event?: keyof ClientEvents): this;
|
|
908
|
+
/**
|
|
909
|
+
* Updates the local retention cap (1–30 days) and prunes immediately.
|
|
910
|
+
* Does not affect server-side storage.
|
|
911
|
+
*/
|
|
912
|
+
setLocalMessageRetentionDays(days: number): void;
|
|
870
913
|
/**
|
|
871
914
|
* Triggers an immediate inbox sync by fetching `/mail` once.
|
|
872
915
|
* Useful on mobile foreground resume where background work may pause.
|
|
@@ -891,6 +934,7 @@ export declare class Client {
|
|
|
891
934
|
exp: number;
|
|
892
935
|
user: User;
|
|
893
936
|
}>;
|
|
937
|
+
private abortPendingDeviceRegistration;
|
|
894
938
|
private acknowledgeInboundMail;
|
|
895
939
|
private approveDeviceRequest;
|
|
896
940
|
private beginPasskeyAuthentication;
|
|
@@ -999,16 +1043,11 @@ export declare class Client {
|
|
|
999
1043
|
private passkeyListDevices;
|
|
1000
1044
|
private passkeyRejectDeviceRequest;
|
|
1001
1045
|
private ping;
|
|
1002
|
-
/**
|
|
1003
|
-
* Polls the public unauthenticated request status endpoint as the
|
|
1004
|
-
* requesting device. Signs the server-issued challenge with the local
|
|
1005
|
-
* private signing key so the server can verify ownership of the pending
|
|
1006
|
-
* request without us needing a user token.
|
|
1007
|
-
*/
|
|
1008
1046
|
private pollPendingDeviceRegistration;
|
|
1009
1047
|
private pong;
|
|
1010
1048
|
private populateKeyRing;
|
|
1011
1049
|
private postAuth;
|
|
1050
|
+
private publishPendingDeviceRegistration;
|
|
1012
1051
|
private purgeHistory;
|
|
1013
1052
|
private readMail;
|
|
1014
1053
|
private redeemInvite;
|
|
@@ -1021,6 +1060,7 @@ export declare class Client {
|
|
|
1021
1060
|
private retrieveInvites;
|
|
1022
1061
|
private retrieveKeyBundle;
|
|
1023
1062
|
private retrieveOrCreateDevice;
|
|
1063
|
+
private runLocalRetentionPurge;
|
|
1024
1064
|
/**
|
|
1025
1065
|
* `xDHAsync` and other helpers in `@vex-chat/crypto` use the process-wide
|
|
1026
1066
|
* active profile. When several {@link Client} instances use different
|
|
@@ -1028,6 +1068,7 @@ export declare class Client {
|
|
|
1028
1068
|
* of that crypto work.
|
|
1029
1069
|
*/
|
|
1030
1070
|
private runWithThisCryptoProfile;
|
|
1071
|
+
private scheduleRetentionPurge;
|
|
1031
1072
|
private send;
|
|
1032
1073
|
private sendGroupMessage;
|
|
1033
1074
|
private sendMail;
|
|
@@ -1035,6 +1076,13 @@ export declare class Client {
|
|
|
1035
1076
|
private sendReceipt;
|
|
1036
1077
|
private setAlive;
|
|
1037
1078
|
private setUser;
|
|
1079
|
+
/**
|
|
1080
|
+
* Polls the public unauthenticated request status endpoint as the
|
|
1081
|
+
* requesting device. Signs the server-issued challenge with the local
|
|
1082
|
+
* private signing key so the server can verify ownership of the pending
|
|
1083
|
+
* request without us needing a user token.
|
|
1084
|
+
*/
|
|
1085
|
+
private signPendingRegistrationChallenge;
|
|
1038
1086
|
private submitOTK;
|
|
1039
1087
|
private uploadAvatar;
|
|
1040
1088
|
private uploadEmoji;
|
package/dist/Client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
|
package/dist/Client.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* Licensed under AGPL-3.0. See LICENSE for details.
|
|
4
4
|
* Commercial licenses available at vex.wtf
|
|
5
5
|
*/
|
|
6
|
-
import { getCryptoProfile, setCryptoProfile, xBoxKeyPairAsync, xBoxKeyPairFromSecretAsync, xConcat, xConstants, xDHAsync, xEcdhKeyPairFromEcdsaKeyPairAsync, xEncode, xHMAC, xKDF, XKeyConvert, xMakeNonce, xMnemonic, xRandomBytes, xSecretboxAsync, xSecretboxOpenAsync, xSignAsync, xSignKeyPair, xSignKeyPairAsync, xSignKeyPairFromSecret, xSignKeyPairFromSecretAsync, XUtils, } from "@vex-chat/crypto";
|
|
6
|
+
import { enterCryptoProfileScope, getCryptoProfile, leaveCryptoProfileScope, setCryptoProfile, xBoxKeyPairAsync, xBoxKeyPairFromSecretAsync, xConcat, xConstants, xDHAsync, xEcdhKeyPairFromEcdsaKeyPairAsync, xEncode, xHMAC, xKDF, XKeyConvert, xMakeNonce, xMnemonic, xRandomBytes, xSecretboxAsync, xSecretboxOpenAsync, xSignAsync, xSignKeyPair, xSignKeyPairAsync, xSignKeyPairFromSecret, xSignKeyPairFromSecretAsync, XUtils, } from "@vex-chat/crypto";
|
|
7
7
|
import { MailType, MailWSSchema, PermissionSchema, WSMessageSchema, } from "@vex-chat/types";
|
|
8
8
|
import axios, { isAxiosError } from "axios";
|
|
9
9
|
import { EventEmitter } from "eventemitter3";
|
|
10
10
|
import * as uuid from "uuid";
|
|
11
11
|
import { z } from "zod/v4";
|
|
12
|
+
import { clampLocalMessageRetentionDays, formatVexRetentionEnvelope, stripVexRetentionEnvelope, } from "./retention.js";
|
|
12
13
|
import { WebSocketAdapter, WebSocketNotOpenError, } from "./transport/websocket.js";
|
|
13
14
|
import { decodeFipsInitialExtraV1, encodeFipsInitialExtraV1, fipsP256AdFromIdentityPubs, fipsP256PreKeySignPayload, isFipsInitialExtraV1, } from "./utils/fipsMailExtra.js";
|
|
14
15
|
import { decodeRatchetHeader, deriveBootstrapSendChain, encodeRatchetHeader, hasRemoteDhChanged, initRatchetSession, ratchetStepReceive, ratchetStepSend, sessionToSqlPatch, takeReceiveMessageKey, takeSendMessageKey, } from "./utils/ratchet.js";
|
|
@@ -245,12 +246,14 @@ export class Client {
|
|
|
245
246
|
* Device management methods.
|
|
246
247
|
*/
|
|
247
248
|
devices = {
|
|
249
|
+
abortPendingRegistration: this.abortPendingDeviceRegistration.bind(this),
|
|
248
250
|
approveRequest: this.approveDeviceRequest.bind(this),
|
|
249
251
|
delete: this.deleteDevice.bind(this),
|
|
250
252
|
getRequest: this.getDeviceRegistrationRequest.bind(this),
|
|
251
253
|
list: this.listDevices.bind(this),
|
|
252
254
|
listRequests: this.listDeviceRegistrationRequests.bind(this),
|
|
253
255
|
pollPendingRegistration: this.pollPendingDeviceRegistration.bind(this),
|
|
256
|
+
publishPendingRegistration: this.publishPendingDeviceRegistration.bind(this),
|
|
254
257
|
register: this.registerDevice.bind(this),
|
|
255
258
|
rejectRequest: this.rejectDeviceRequest.bind(this),
|
|
256
259
|
retrieve: this.getDeviceByID.bind(this),
|
|
@@ -333,7 +336,7 @@ export class Client {
|
|
|
333
336
|
* @param channelID - The channel to send a message to.
|
|
334
337
|
* @param message - The message to send.
|
|
335
338
|
*/
|
|
336
|
-
group: this.sendGroupMessage
|
|
339
|
+
group: (channelID, message, opts) => this.sendGroupMessage(channelID, message, opts),
|
|
337
340
|
purge: this.purgeHistory.bind(this),
|
|
338
341
|
/**
|
|
339
342
|
* Gets the message history with a specific userID.
|
|
@@ -354,7 +357,7 @@ export class Client {
|
|
|
354
357
|
* @param userID - The user to send a message to.
|
|
355
358
|
* @param message - The message to send.
|
|
356
359
|
*/
|
|
357
|
-
send: this.sendMessage
|
|
360
|
+
send: (userID, message, opts) => this.sendMessage(userID, message, opts),
|
|
358
361
|
};
|
|
359
362
|
/**
|
|
360
363
|
* Server moderation helper methods.
|
|
@@ -495,6 +498,8 @@ export class Client {
|
|
|
495
498
|
httpAbortController = new AbortController();
|
|
496
499
|
idKeys;
|
|
497
500
|
isAlive = true;
|
|
501
|
+
localMessageRetentionDays;
|
|
502
|
+
localRetentionPurgeTimer = null;
|
|
498
503
|
mailInterval;
|
|
499
504
|
manuallyClosing = false;
|
|
500
505
|
/**
|
|
@@ -516,6 +521,7 @@ export class Client {
|
|
|
516
521
|
postAuthVersion = 0;
|
|
517
522
|
prefixes;
|
|
518
523
|
reading = false;
|
|
524
|
+
retentionPurgeDebounce = null;
|
|
519
525
|
seenMailIDs = new Set();
|
|
520
526
|
sessionRecords = {};
|
|
521
527
|
// these are created from one set of sign keys
|
|
@@ -527,6 +533,7 @@ export class Client {
|
|
|
527
533
|
xKeyRing;
|
|
528
534
|
constructor(material, options, storage) {
|
|
529
535
|
this.options = options;
|
|
536
|
+
this.localMessageRetentionDays = clampLocalMessageRetentionDays(options?.localMessageRetentionDays);
|
|
530
537
|
this.cryptoProfile = material.cryptoProfile;
|
|
531
538
|
this.signKeys = material.signKeys;
|
|
532
539
|
this.idKeys = material.idKeys;
|
|
@@ -770,6 +777,14 @@ export class Client {
|
|
|
770
777
|
if (this.mailInterval) {
|
|
771
778
|
clearInterval(this.mailInterval);
|
|
772
779
|
}
|
|
780
|
+
if (this.localRetentionPurgeTimer) {
|
|
781
|
+
clearInterval(this.localRetentionPurgeTimer);
|
|
782
|
+
this.localRetentionPurgeTimer = null;
|
|
783
|
+
}
|
|
784
|
+
if (this.retentionPurgeDebounce) {
|
|
785
|
+
clearTimeout(this.retentionPurgeDebounce);
|
|
786
|
+
this.retentionPurgeDebounce = null;
|
|
787
|
+
}
|
|
773
788
|
delete this.xKeyRing;
|
|
774
789
|
if (!muteEvent) {
|
|
775
790
|
this.emitter.emit("closed");
|
|
@@ -830,6 +845,10 @@ export class Client {
|
|
|
830
845
|
public: XUtils.encodeHex(this.signKeys.publicKey),
|
|
831
846
|
};
|
|
832
847
|
}
|
|
848
|
+
/** Current local retention cap in days (always 1–30). */
|
|
849
|
+
getLocalMessageRetentionDays() {
|
|
850
|
+
return this.localMessageRetentionDays;
|
|
851
|
+
}
|
|
833
852
|
/**
|
|
834
853
|
* Authenticates with username/password and stores the Bearer auth token.
|
|
835
854
|
*
|
|
@@ -1085,6 +1104,14 @@ export class Client {
|
|
|
1085
1104
|
this.emitter.removeAllListeners(event);
|
|
1086
1105
|
return this;
|
|
1087
1106
|
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Updates the local retention cap (1–30 days) and prunes immediately.
|
|
1109
|
+
* Does not affect server-side storage.
|
|
1110
|
+
*/
|
|
1111
|
+
setLocalMessageRetentionDays(days) {
|
|
1112
|
+
this.localMessageRetentionDays = clampLocalMessageRetentionDays(days);
|
|
1113
|
+
void this.runLocalRetentionPurge();
|
|
1114
|
+
}
|
|
1088
1115
|
/**
|
|
1089
1116
|
* Triggers an immediate inbox sync by fetching `/mail` once.
|
|
1090
1117
|
* Useful on mobile foreground resume where background work may pause.
|
|
@@ -1117,6 +1144,13 @@ export class Client {
|
|
|
1117
1144
|
const whoami = decodeAxios(WhoamiCodec, res.data);
|
|
1118
1145
|
return whoami;
|
|
1119
1146
|
}
|
|
1147
|
+
async abortPendingDeviceRegistration(args) {
|
|
1148
|
+
const signed = await this.signPendingRegistrationChallenge(args.challenge);
|
|
1149
|
+
await this.http.post(this.getHost() +
|
|
1150
|
+
"/user/devices/requests/" +
|
|
1151
|
+
args.requestID +
|
|
1152
|
+
"/abort", msgpack.encode({ signed }), { headers: { "Content-Type": "application/msgpack" } });
|
|
1153
|
+
}
|
|
1120
1154
|
acknowledgeInboundMail(mail) {
|
|
1121
1155
|
this.seenMailIDs.add(mail.mailID);
|
|
1122
1156
|
this.sendReceipt(new Uint8Array(mail.nonce));
|
|
@@ -1813,6 +1847,7 @@ export class Client {
|
|
|
1813
1847
|
const res = await this.http.post(this.getHost() + "/userList/" + channelID);
|
|
1814
1848
|
return decodeAxios(UserArrayCodec, res.data);
|
|
1815
1849
|
}
|
|
1850
|
+
// ── Passkeys ────────────────────────────────────────────────────────
|
|
1816
1851
|
async handleNotify(msg) {
|
|
1817
1852
|
switch (msg.event) {
|
|
1818
1853
|
case "deviceRequest": {
|
|
@@ -1847,6 +1882,7 @@ export class Client {
|
|
|
1847
1882
|
break;
|
|
1848
1883
|
}
|
|
1849
1884
|
}
|
|
1885
|
+
// ── Passkeys ────────────────────────────────────────────────────────
|
|
1850
1886
|
/**
|
|
1851
1887
|
* Initializes the keyring. This must be called before anything else.
|
|
1852
1888
|
*/
|
|
@@ -1863,9 +1899,10 @@ export class Client {
|
|
|
1863
1899
|
}
|
|
1864
1900
|
await this.populateKeyRing();
|
|
1865
1901
|
this.emitter.on("message", this.onInternalMessage);
|
|
1902
|
+
void this.runLocalRetentionPurge();
|
|
1903
|
+
this.localRetentionPurgeTimer = setInterval(() => void this.runLocalRetentionPurge(), 6 * 60 * 60 * 1000);
|
|
1866
1904
|
this.emitter.emit("ready");
|
|
1867
1905
|
}
|
|
1868
|
-
// ── Passkeys ────────────────────────────────────────────────────────
|
|
1869
1906
|
initSocket() {
|
|
1870
1907
|
try {
|
|
1871
1908
|
if (!this.token) {
|
|
@@ -2042,6 +2079,7 @@ export class Client {
|
|
|
2042
2079
|
return;
|
|
2043
2080
|
}
|
|
2044
2081
|
void this.database.saveMessage(message);
|
|
2082
|
+
this.scheduleRetentionPurge();
|
|
2045
2083
|
};
|
|
2046
2084
|
async passkeyApproveDeviceRequest(requestID) {
|
|
2047
2085
|
const userID = this.getUser().userID;
|
|
@@ -2101,14 +2139,8 @@ export class Client {
|
|
|
2101
2139
|
// we re-throw anything that isn't `WebSocketNotOpenError`.
|
|
2102
2140
|
this.send({ transmissionID: uuid.v4(), type: "ping" }).catch(ignoreSocketTeardown);
|
|
2103
2141
|
}
|
|
2104
|
-
/**
|
|
2105
|
-
* Polls the public unauthenticated request status endpoint as the
|
|
2106
|
-
* requesting device. Signs the server-issued challenge with the local
|
|
2107
|
-
* private signing key so the server can verify ownership of the pending
|
|
2108
|
-
* request without us needing a user token.
|
|
2109
|
-
*/
|
|
2110
2142
|
async pollPendingDeviceRegistration(args) {
|
|
2111
|
-
const signed =
|
|
2143
|
+
const signed = await this.signPendingRegistrationChallenge(args.challenge);
|
|
2112
2144
|
try {
|
|
2113
2145
|
const response = await this.http.post(this.getHost() +
|
|
2114
2146
|
"/user/devices/requests/" +
|
|
@@ -2200,6 +2232,13 @@ export class Client {
|
|
|
2200
2232
|
}
|
|
2201
2233
|
}
|
|
2202
2234
|
}
|
|
2235
|
+
async publishPendingDeviceRegistration(args) {
|
|
2236
|
+
const signed = await this.signPendingRegistrationChallenge(args.challenge);
|
|
2237
|
+
await this.http.post(this.getHost() +
|
|
2238
|
+
"/user/devices/requests/" +
|
|
2239
|
+
args.requestID +
|
|
2240
|
+
"/publish", msgpack.encode({ signed }), { headers: { "Content-Type": "application/msgpack" } });
|
|
2241
|
+
}
|
|
2203
2242
|
async purgeHistory() {
|
|
2204
2243
|
await this.database.purgeHistory();
|
|
2205
2244
|
}
|
|
@@ -2360,12 +2399,33 @@ export class Client {
|
|
|
2360
2399
|
if (!mail.forward) {
|
|
2361
2400
|
plaintext = XUtils.encodeUTF8(unsealed);
|
|
2362
2401
|
}
|
|
2402
|
+
let incomingPlain = plaintext;
|
|
2403
|
+
let hintFromEnvelope;
|
|
2404
|
+
if (!mail.forward && plaintext.length > 0) {
|
|
2405
|
+
const stripped = stripVexRetentionEnvelope(plaintext);
|
|
2406
|
+
incomingPlain = stripped.body;
|
|
2407
|
+
hintFromEnvelope = stripped.retentionHintDays;
|
|
2408
|
+
}
|
|
2363
2409
|
// emit the message
|
|
2364
2410
|
const fwdMsg1 = mail.forward
|
|
2365
2411
|
? messageSchema.parse(msgpack.decode(unsealed))
|
|
2366
2412
|
: null;
|
|
2367
2413
|
const message = fwdMsg1
|
|
2368
|
-
?
|
|
2414
|
+
? (() => {
|
|
2415
|
+
const stripped = stripVexRetentionEnvelope(fwdMsg1.message);
|
|
2416
|
+
const base = {
|
|
2417
|
+
...fwdMsg1,
|
|
2418
|
+
forward: true,
|
|
2419
|
+
message: stripped.body,
|
|
2420
|
+
};
|
|
2421
|
+
return stripped.retentionHintDays !==
|
|
2422
|
+
undefined
|
|
2423
|
+
? {
|
|
2424
|
+
...base,
|
|
2425
|
+
retentionHintDays: stripped.retentionHintDays,
|
|
2426
|
+
}
|
|
2427
|
+
: base;
|
|
2428
|
+
})()
|
|
2369
2429
|
: {
|
|
2370
2430
|
authorID: mail.authorID,
|
|
2371
2431
|
decrypted: true,
|
|
@@ -2375,10 +2435,15 @@ export class Client {
|
|
|
2375
2435
|
? uuid.stringify(mail.group)
|
|
2376
2436
|
: null,
|
|
2377
2437
|
mailID: mail.mailID,
|
|
2378
|
-
message:
|
|
2438
|
+
message: incomingPlain,
|
|
2379
2439
|
nonce: XUtils.encodeHex(new Uint8Array(mail.nonce)),
|
|
2380
2440
|
readerID: mail.readerID,
|
|
2381
2441
|
recipient: mail.recipient,
|
|
2442
|
+
...(hintFromEnvelope !== undefined
|
|
2443
|
+
? {
|
|
2444
|
+
retentionHintDays: hintFromEnvelope,
|
|
2445
|
+
}
|
|
2446
|
+
: {}),
|
|
2382
2447
|
sender: mail.sender,
|
|
2383
2448
|
timestamp: timestamp,
|
|
2384
2449
|
};
|
|
@@ -2490,11 +2555,30 @@ export class Client {
|
|
|
2490
2555
|
const fwdMsg2 = mail.forward
|
|
2491
2556
|
? messageSchema.parse(msgpack.decode(decrypted))
|
|
2492
2557
|
: null;
|
|
2558
|
+
const rawIncoming = XUtils.encodeUTF8(decrypted);
|
|
2559
|
+
let bodyIncoming = rawIncoming;
|
|
2560
|
+
let hintIncoming;
|
|
2561
|
+
if (!mail.forward) {
|
|
2562
|
+
const stripped = stripVexRetentionEnvelope(rawIncoming);
|
|
2563
|
+
bodyIncoming = stripped.body;
|
|
2564
|
+
hintIncoming = stripped.retentionHintDays;
|
|
2565
|
+
}
|
|
2493
2566
|
const message = fwdMsg2
|
|
2494
|
-
? {
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2567
|
+
? (() => {
|
|
2568
|
+
const stripped = stripVexRetentionEnvelope(fwdMsg2.message);
|
|
2569
|
+
const base = {
|
|
2570
|
+
...fwdMsg2,
|
|
2571
|
+
forward: true,
|
|
2572
|
+
message: stripped.body,
|
|
2573
|
+
};
|
|
2574
|
+
return stripped.retentionHintDays !==
|
|
2575
|
+
undefined
|
|
2576
|
+
? {
|
|
2577
|
+
...base,
|
|
2578
|
+
retentionHintDays: stripped.retentionHintDays,
|
|
2579
|
+
}
|
|
2580
|
+
: base;
|
|
2581
|
+
})()
|
|
2498
2582
|
: {
|
|
2499
2583
|
authorID: mail.authorID,
|
|
2500
2584
|
decrypted: true,
|
|
@@ -2504,10 +2588,13 @@ export class Client {
|
|
|
2504
2588
|
? uuid.stringify(mail.group)
|
|
2505
2589
|
: null,
|
|
2506
2590
|
mailID: mail.mailID,
|
|
2507
|
-
message:
|
|
2591
|
+
message: bodyIncoming,
|
|
2508
2592
|
nonce: XUtils.encodeHex(new Uint8Array(mail.nonce)),
|
|
2509
2593
|
readerID: mail.readerID,
|
|
2510
2594
|
recipient: mail.recipient,
|
|
2595
|
+
...(hintIncoming !== undefined
|
|
2596
|
+
? { retentionHintDays: hintIncoming }
|
|
2597
|
+
: {}),
|
|
2511
2598
|
sender: mail.sender,
|
|
2512
2599
|
timestamp: timestamp,
|
|
2513
2600
|
};
|
|
@@ -2695,6 +2782,17 @@ export class Client {
|
|
|
2695
2782
|
}
|
|
2696
2783
|
return device;
|
|
2697
2784
|
}
|
|
2785
|
+
async runLocalRetentionPurge() {
|
|
2786
|
+
if (this.isManualCloseInFlight()) {
|
|
2787
|
+
return;
|
|
2788
|
+
}
|
|
2789
|
+
try {
|
|
2790
|
+
await this.database.pruneExpiredLocalMessages(this.localMessageRetentionDays);
|
|
2791
|
+
}
|
|
2792
|
+
catch {
|
|
2793
|
+
/* best-effort */
|
|
2794
|
+
}
|
|
2795
|
+
}
|
|
2698
2796
|
/**
|
|
2699
2797
|
* `xDHAsync` and other helpers in `@vex-chat/crypto` use the process-wide
|
|
2700
2798
|
* active profile. When several {@link Client} instances use different
|
|
@@ -2702,17 +2800,22 @@ export class Client {
|
|
|
2702
2800
|
* of that crypto work.
|
|
2703
2801
|
*/
|
|
2704
2802
|
async runWithThisCryptoProfile(fn) {
|
|
2705
|
-
|
|
2706
|
-
if (prev === this.cryptoProfile) {
|
|
2707
|
-
return await fn();
|
|
2708
|
-
}
|
|
2709
|
-
setCryptoProfile(this.cryptoProfile);
|
|
2803
|
+
enterCryptoProfileScope(this.cryptoProfile);
|
|
2710
2804
|
try {
|
|
2711
2805
|
return await fn();
|
|
2712
2806
|
}
|
|
2713
2807
|
finally {
|
|
2714
|
-
|
|
2808
|
+
leaveCryptoProfileScope();
|
|
2809
|
+
}
|
|
2810
|
+
}
|
|
2811
|
+
scheduleRetentionPurge() {
|
|
2812
|
+
if (this.retentionPurgeDebounce) {
|
|
2813
|
+
clearTimeout(this.retentionPurgeDebounce);
|
|
2715
2814
|
}
|
|
2815
|
+
this.retentionPurgeDebounce = setTimeout(() => {
|
|
2816
|
+
this.retentionPurgeDebounce = null;
|
|
2817
|
+
void this.runLocalRetentionPurge();
|
|
2818
|
+
}, 3000);
|
|
2716
2819
|
}
|
|
2717
2820
|
/* header is 32 bytes and is either empty
|
|
2718
2821
|
or contains an HMAC of the message with
|
|
@@ -2742,13 +2845,14 @@ export class Client {
|
|
|
2742
2845
|
// can choose to retry on the next reconnect.
|
|
2743
2846
|
this.socket.send(XUtils.packMessage(msg, header));
|
|
2744
2847
|
}
|
|
2745
|
-
async sendGroupMessage(channelID, message) {
|
|
2848
|
+
async sendGroupMessage(channelID, message, opts) {
|
|
2746
2849
|
const userList = await this.getUserList(channelID);
|
|
2747
2850
|
for (const user of userList) {
|
|
2748
2851
|
this.userRecords[user.userID] = user;
|
|
2749
2852
|
}
|
|
2750
2853
|
const mailID = uuid.v4();
|
|
2751
|
-
const
|
|
2854
|
+
const payload = formatVexRetentionEnvelope(message, opts?.retentionHintDays);
|
|
2855
|
+
const msgBytes = XUtils.decodeUTF8(payload);
|
|
2752
2856
|
const myUserID = this.getUser().userID;
|
|
2753
2857
|
// Fan-out only to *other* server members. The current account's other
|
|
2754
2858
|
// devices receive the same group mail via `forward()` on the outgoing
|
|
@@ -2875,8 +2979,23 @@ export class Client {
|
|
|
2875
2979
|
const fwdOut = forward
|
|
2876
2980
|
? messageSchema.parse(msgpack.decode(msg))
|
|
2877
2981
|
: null;
|
|
2982
|
+
const rawUtf8 = XUtils.encodeUTF8(msg);
|
|
2983
|
+
const strippedOut = stripVexRetentionEnvelope(rawUtf8);
|
|
2878
2984
|
const outMsg = fwdOut
|
|
2879
|
-
?
|
|
2985
|
+
? (() => {
|
|
2986
|
+
const stripped = stripVexRetentionEnvelope(fwdOut.message);
|
|
2987
|
+
const base = {
|
|
2988
|
+
...fwdOut,
|
|
2989
|
+
forward: true,
|
|
2990
|
+
message: stripped.body,
|
|
2991
|
+
};
|
|
2992
|
+
return stripped.retentionHintDays !== undefined
|
|
2993
|
+
? {
|
|
2994
|
+
...base,
|
|
2995
|
+
retentionHintDays: stripped.retentionHintDays,
|
|
2996
|
+
}
|
|
2997
|
+
: base;
|
|
2998
|
+
})()
|
|
2880
2999
|
: {
|
|
2881
3000
|
authorID: mail.authorID,
|
|
2882
3001
|
decrypted: true,
|
|
@@ -2884,10 +3003,15 @@ export class Client {
|
|
|
2884
3003
|
forward: mail.forward,
|
|
2885
3004
|
group: mail.group ? uuid.stringify(mail.group) : null,
|
|
2886
3005
|
mailID: mail.mailID,
|
|
2887
|
-
message:
|
|
3006
|
+
message: strippedOut.body,
|
|
2888
3007
|
nonce: XUtils.encodeHex(new Uint8Array(mail.nonce)),
|
|
2889
3008
|
readerID: mail.readerID,
|
|
2890
3009
|
recipient: mail.recipient,
|
|
3010
|
+
...(strippedOut.retentionHintDays !== undefined
|
|
3011
|
+
? {
|
|
3012
|
+
retentionHintDays: strippedOut.retentionHintDays,
|
|
3013
|
+
}
|
|
3014
|
+
: {}),
|
|
2891
3015
|
sender: mail.sender,
|
|
2892
3016
|
timestamp: new Date().toISOString(),
|
|
2893
3017
|
};
|
|
@@ -2946,7 +3070,8 @@ export class Client {
|
|
|
2946
3070
|
this.sending.delete(device.deviceID);
|
|
2947
3071
|
}
|
|
2948
3072
|
}
|
|
2949
|
-
async sendMessage(userID, message) {
|
|
3073
|
+
async sendMessage(userID, message, opts) {
|
|
3074
|
+
const payload = formatVexRetentionEnvelope(message, opts?.retentionHintDays);
|
|
2950
3075
|
try {
|
|
2951
3076
|
const [userEntry, err] = await this.fetchUser(userID);
|
|
2952
3077
|
if (err) {
|
|
@@ -3006,7 +3131,7 @@ export class Client {
|
|
|
3006
3131
|
recipientDevice: device.deviceID,
|
|
3007
3132
|
});
|
|
3008
3133
|
}
|
|
3009
|
-
await this.sendMail(device, userEntry, XUtils.decodeUTF8(
|
|
3134
|
+
await this.sendMail(device, userEntry, XUtils.decodeUTF8(payload), null, messageMailID, false);
|
|
3010
3135
|
if (libvexDebugDmEnabled()) {
|
|
3011
3136
|
debugLibvexDm("sendMessage: sendMail ok", {
|
|
3012
3137
|
recipientDevice: device.deviceID,
|
|
@@ -3057,6 +3182,18 @@ export class Client {
|
|
|
3057
3182
|
}
|
|
3058
3183
|
setUser(user) {
|
|
3059
3184
|
this.user = user;
|
|
3185
|
+
// Fresh identity / token: drop stale 404 negative-cache entries so a
|
|
3186
|
+
// prior transient miss (or wrong host) cannot block DM sends for 30m.
|
|
3187
|
+
this.notFoundUsers.clear();
|
|
3188
|
+
}
|
|
3189
|
+
/**
|
|
3190
|
+
* Polls the public unauthenticated request status endpoint as the
|
|
3191
|
+
* requesting device. Signs the server-issued challenge with the local
|
|
3192
|
+
* private signing key so the server can verify ownership of the pending
|
|
3193
|
+
* request without us needing a user token.
|
|
3194
|
+
*/
|
|
3195
|
+
async signPendingRegistrationChallenge(challengeHex) {
|
|
3196
|
+
return XUtils.encodeHex(await xSignAsync(XUtils.decodeHex(challengeHex), this.signKeys.secretKey));
|
|
3060
3197
|
}
|
|
3061
3198
|
async submitOTK(amount) {
|
|
3062
3199
|
const otks = [];
|