@vex-chat/libvex 9.0.0 → 9.1.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 +20 -0
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +105 -33
- package/dist/Client.js.map +1 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +52 -59
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +3 -3
- package/src/Client.ts +181 -40
- package/src/__tests__/harness/shared-suite.ts +34 -0
- package/src/__tests__/multi-device-delivery.test.ts +147 -0
- package/src/__tests__/storage-sqlite.test.ts +27 -0
- package/src/storage/sqlite.ts +55 -57
package/src/storage/sqlite.ts
CHANGED
|
@@ -661,61 +661,53 @@ export class SqliteStorage extends EventEmitter implements Storage {
|
|
|
661
661
|
const sealedSkippedKeys = await this.sealSecretText(
|
|
662
662
|
session.skippedKeys,
|
|
663
663
|
);
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
.
|
|
693
|
-
.
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
verified: session.verified ? 1 : 0,
|
|
712
|
-
})
|
|
713
|
-
.where("sessionID", "=", session.sessionID)
|
|
714
|
-
.execute();
|
|
715
|
-
} else {
|
|
716
|
-
throw err;
|
|
717
|
-
}
|
|
718
|
-
}
|
|
664
|
+
const values = {
|
|
665
|
+
CKr: sealedCKr,
|
|
666
|
+
CKs: sealedCKs,
|
|
667
|
+
deviceID: session.deviceID,
|
|
668
|
+
DHr: session.DHr,
|
|
669
|
+
DHsPrivate: sealedDHsPrivate,
|
|
670
|
+
DHsPublic: session.DHsPublic,
|
|
671
|
+
fingerprint: session.fingerprint,
|
|
672
|
+
lastUsed: session.lastUsed,
|
|
673
|
+
mode: session.mode,
|
|
674
|
+
Nr: session.Nr,
|
|
675
|
+
Ns: session.Ns,
|
|
676
|
+
PN: session.PN,
|
|
677
|
+
publicKey: session.publicKey,
|
|
678
|
+
RK: sealedRK,
|
|
679
|
+
sessionID: session.sessionID,
|
|
680
|
+
SK: sealedSK,
|
|
681
|
+
skippedKeys: sealedSkippedKeys,
|
|
682
|
+
userID: session.userID,
|
|
683
|
+
verified: session.verified ? 1 : 0,
|
|
684
|
+
};
|
|
685
|
+
await this.db
|
|
686
|
+
.insertInto("sessions")
|
|
687
|
+
.values(values)
|
|
688
|
+
.onConflict((conflict) =>
|
|
689
|
+
conflict.column("sessionID").doUpdateSet({
|
|
690
|
+
CKr: values.CKr,
|
|
691
|
+
CKs: values.CKs,
|
|
692
|
+
deviceID: values.deviceID,
|
|
693
|
+
DHr: values.DHr,
|
|
694
|
+
DHsPrivate: values.DHsPrivate,
|
|
695
|
+
DHsPublic: values.DHsPublic,
|
|
696
|
+
fingerprint: values.fingerprint,
|
|
697
|
+
lastUsed: values.lastUsed,
|
|
698
|
+
mode: values.mode,
|
|
699
|
+
Nr: values.Nr,
|
|
700
|
+
Ns: values.Ns,
|
|
701
|
+
PN: values.PN,
|
|
702
|
+
publicKey: values.publicKey,
|
|
703
|
+
RK: values.RK,
|
|
704
|
+
SK: values.SK,
|
|
705
|
+
skippedKeys: values.skippedKeys,
|
|
706
|
+
userID: values.userID,
|
|
707
|
+
verified: values.verified,
|
|
708
|
+
}),
|
|
709
|
+
)
|
|
710
|
+
.execute();
|
|
719
711
|
}
|
|
720
712
|
|
|
721
713
|
async updateMessage(
|
|
@@ -910,8 +902,14 @@ export class SqliteStorage extends EventEmitter implements Storage {
|
|
|
910
902
|
}
|
|
911
903
|
|
|
912
904
|
private isDuplicateError(err: unknown): boolean {
|
|
913
|
-
|
|
914
|
-
|
|
905
|
+
const message =
|
|
906
|
+
err instanceof Error
|
|
907
|
+
? err.message
|
|
908
|
+
: typeof err === "string"
|
|
909
|
+
? err
|
|
910
|
+
: "";
|
|
911
|
+
if (message.toUpperCase().includes("UNIQUE")) {
|
|
912
|
+
return true;
|
|
915
913
|
}
|
|
916
914
|
if (typeof err === "object" && err !== null && "errno" in err) {
|
|
917
915
|
return err.errno === 19;
|