@vex-chat/libvex 9.0.0 → 9.1.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.
@@ -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
- try {
665
- await this.db
666
- .insertInto("sessions")
667
- .values({
668
- CKr: sealedCKr,
669
- CKs: sealedCKs,
670
- deviceID: session.deviceID,
671
- DHr: session.DHr,
672
- DHsPrivate: sealedDHsPrivate,
673
- DHsPublic: session.DHsPublic,
674
- fingerprint: session.fingerprint,
675
- lastUsed: session.lastUsed,
676
- mode: session.mode,
677
- Nr: session.Nr,
678
- Ns: session.Ns,
679
- PN: session.PN,
680
- publicKey: session.publicKey,
681
- RK: sealedRK,
682
- sessionID: session.sessionID,
683
- SK: sealedSK,
684
- skippedKeys: sealedSkippedKeys,
685
- userID: session.userID,
686
- verified: session.verified ? 1 : 0,
687
- })
688
- .execute();
689
- } catch (err: unknown) {
690
- if (this.isDuplicateError(err)) {
691
- await this.db
692
- .updateTable("sessions")
693
- .set({
694
- CKr: sealedCKr,
695
- CKs: sealedCKs,
696
- deviceID: session.deviceID,
697
- DHr: session.DHr,
698
- DHsPrivate: sealedDHsPrivate,
699
- DHsPublic: session.DHsPublic,
700
- fingerprint: session.fingerprint,
701
- lastUsed: session.lastUsed,
702
- mode: session.mode,
703
- Nr: session.Nr,
704
- Ns: session.Ns,
705
- PN: session.PN,
706
- publicKey: session.publicKey,
707
- RK: sealedRK,
708
- SK: sealedSK,
709
- skippedKeys: sealedSkippedKeys,
710
- userID: session.userID,
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
- if (err instanceof Error) {
914
- return err.message.includes("UNIQUE");
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;