@vex-chat/libvex 1.0.1 → 1.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.
Files changed (60) hide show
  1. package/dist/Client.d.ts +25 -15
  2. package/dist/Client.js +210 -159
  3. package/dist/Client.js.map +1 -1
  4. package/dist/IStorage.d.ts +1 -1
  5. package/dist/IStorage.js +1 -1
  6. package/dist/IStorage.js.map +1 -1
  7. package/dist/__tests__/harness/memory-storage.d.ts +45 -0
  8. package/dist/__tests__/harness/memory-storage.js +181 -0
  9. package/dist/__tests__/harness/memory-storage.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/keystore/memory.d.ts +11 -0
  12. package/dist/keystore/memory.js +18 -0
  13. package/dist/keystore/memory.js.map +1 -0
  14. package/dist/keystore/node.d.ts +10 -0
  15. package/dist/keystore/node.js +64 -0
  16. package/dist/keystore/node.js.map +1 -0
  17. package/dist/keystore/types.d.ts +4 -0
  18. package/dist/keystore/types.js +2 -0
  19. package/dist/keystore/types.js.map +1 -0
  20. package/dist/preset/expo.d.ts +2 -0
  21. package/dist/preset/expo.js +39 -0
  22. package/dist/preset/expo.js.map +1 -0
  23. package/dist/preset/node.d.ts +12 -0
  24. package/dist/preset/node.js +17 -0
  25. package/dist/preset/node.js.map +1 -0
  26. package/dist/preset/tauri.d.ts +2 -0
  27. package/dist/preset/tauri.js +36 -0
  28. package/dist/preset/tauri.js.map +1 -0
  29. package/dist/preset/test.d.ts +10 -0
  30. package/dist/preset/test.js +29 -0
  31. package/dist/preset/test.js.map +1 -0
  32. package/dist/preset/types.d.ts +14 -0
  33. package/dist/preset/types.js +2 -0
  34. package/dist/preset/types.js.map +1 -0
  35. package/dist/storage/expo.d.ts +3 -0
  36. package/dist/storage/expo.js +18 -0
  37. package/dist/storage/expo.js.map +1 -0
  38. package/dist/storage/node.d.ts +3 -0
  39. package/dist/storage/node.js +24 -0
  40. package/dist/storage/node.js.map +1 -0
  41. package/dist/storage/schema.d.ts +76 -0
  42. package/dist/storage/schema.js +2 -0
  43. package/dist/storage/schema.js.map +1 -0
  44. package/dist/{Storage.d.ts → storage/sqlite.d.ts} +19 -21
  45. package/dist/storage/sqlite.js +488 -0
  46. package/dist/storage/sqlite.js.map +1 -0
  47. package/dist/storage/tauri.d.ts +3 -0
  48. package/dist/storage/tauri.js +21 -0
  49. package/dist/storage/tauri.js.map +1 -0
  50. package/dist/transport/browser.d.ts +17 -0
  51. package/dist/transport/browser.js +56 -0
  52. package/dist/transport/browser.js.map +1 -0
  53. package/dist/transport/types.d.ts +20 -0
  54. package/dist/transport/types.js +2 -0
  55. package/dist/transport/types.js.map +1 -0
  56. package/dist/utils/createLogger.js +1 -8
  57. package/dist/utils/createLogger.js.map +1 -1
  58. package/package.json +100 -16
  59. package/dist/Storage.js +0 -444
  60. package/dist/Storage.js.map +0 -1
package/dist/Client.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { IChannel, IDevice, IEmoji, IFileResponse, IFileSQL, IInvite, IPermission, IServer, ISessionSQL } from "@vex-chat/types";
2
2
  import { AxiosError } from "axios";
3
- import { EventEmitter } from "events";
3
+ import { EventEmitter } from "eventemitter3";
4
+ import type { IClientAdapters } from "./transport/types.js";
4
5
  import type { IStorage } from "./IStorage.js";
5
6
  /**
6
7
  * IMessage is a chat message.
@@ -176,7 +177,7 @@ export interface IMe {
176
177
  /** Returns metadata for the currently authenticated device. */
177
178
  device: () => IDevice;
178
179
  /** Uploads and sets a new avatar image for the current user. */
179
- setAvatar: (avatar: Buffer) => Promise<void>;
180
+ setAvatar: (avatar: Uint8Array) => Promise<void>;
180
181
  }
181
182
  /**
182
183
  * @ignore
@@ -292,7 +293,7 @@ export interface IDevices {
292
293
  */
293
294
  export interface IFiles {
294
295
  /** Uploads and encrypts a file. */
295
- create: (file: Buffer) => Promise<[IFileSQL, string]>;
296
+ create: (file: Uint8Array) => Promise<[IFileSQL, string]>;
296
297
  /** Downloads and decrypts a file using a file ID and key. */
297
298
  retrieve: (fileID: string, key: string) => Promise<IFileResponse | null>;
298
299
  }
@@ -301,7 +302,7 @@ export interface IFiles {
301
302
  */
302
303
  export interface IEmojis {
303
304
  /** Uploads a custom emoji to a server. */
304
- create: (emoji: Buffer, name: string, serverID: string) => Promise<IEmoji | null>;
305
+ create: (emoji: Uint8Array, name: string, serverID: string) => Promise<IEmoji | null>;
305
306
  /** Lists emojis available on a server. */
306
307
  retrieveList: (serverID: string) => Promise<IEmoji[]>;
307
308
  /** Fetches one emoji's metadata by ID. */
@@ -340,6 +341,10 @@ export interface IClientOptions {
340
341
  unsafeHttp?: boolean;
341
342
  /** Whether local message history should be persisted by default storage. */
342
343
  saveHistory?: boolean;
344
+ /** Platform-specific adapters (WebSocket + Logger). When omitted, defaults to Node.js ws. */
345
+ adapters?: IClientAdapters;
346
+ /** Platform label for device registration (e.g. "ios", "macos", "linux"). */
347
+ deviceName?: string;
343
348
  }
344
349
  export declare interface Client {
345
350
  /**
@@ -518,17 +523,17 @@ export declare interface Client {
518
523
  */
519
524
  export declare class Client extends EventEmitter {
520
525
  /**
521
- * Loads a key file from disk.
526
+ * Encrypts a secret key with a password.
522
527
  *
523
528
  * Pass-through utility from `@vex-chat/crypto`.
524
529
  */
525
- static loadKeyFile: (path: string, password: string) => string;
530
+ static encryptKeyData: (password: string, keyToSave: string, iterationOverride?: number) => Uint8Array;
526
531
  /**
527
- * Saves a key file to disk.
532
+ * Decrypts a secret key from encrypted data produced by encryptKeyData().
528
533
  *
529
534
  * Pass-through utility from `@vex-chat/crypto`.
530
535
  */
531
- static saveKeyFile: (path: string, password: string, keyToSave: string, iterationOverride?: number) => void;
536
+ static decryptKeyData: (keyData: Uint8Array, password: string) => string;
532
537
  /**
533
538
  * Creates and initializes a client in one step.
534
539
  *
@@ -641,6 +646,7 @@ export declare class Client extends EventEmitter {
641
646
  private dbPath;
642
647
  private conn;
643
648
  private host;
649
+ private adapters;
644
650
  private firstMailFetch;
645
651
  private signKeys;
646
652
  private idKeys;
@@ -653,7 +659,7 @@ export declare class Client extends EventEmitter {
653
659
  private isAlive;
654
660
  private reading;
655
661
  private fetchingMail;
656
- private cookies;
662
+ private ax;
657
663
  private log;
658
664
  private pingInterval;
659
665
  private mailInterval?;
@@ -661,6 +667,7 @@ export declare class Client extends EventEmitter {
661
667
  private token;
662
668
  private forwarded;
663
669
  private prefixes;
670
+ private options?;
664
671
  private constructor();
665
672
  /**
666
673
  * Returns the current HTTP API origin with protocol.
@@ -680,7 +687,7 @@ export declare class Client extends EventEmitter {
680
687
  */
681
688
  getKeys(): IKeys;
682
689
  /**
683
- * Authenticates with username/password and stores the auth token/cookie.
690
+ * Authenticates with username/password and stores the Bearer auth token.
684
691
  *
685
692
  * @param username Account username.
686
693
  * @param password Account password.
@@ -694,9 +701,14 @@ export declare class Client extends EventEmitter {
694
701
  */
695
702
  login(username: string, password: string): Promise<Error | null>;
696
703
  /**
697
- * Returns the authorization cookie details. Throws if you don't have a
698
- * valid authorization cookie.
704
+ * Authenticates using the device's Ed25519 signing key.
705
+ * No password needed — proves possession of the private key via
706
+ * challenge-response. Issues a short-lived (1-hour) JWT.
707
+ *
708
+ * Used by auto-login when stored credentials have a deviceKey
709
+ * but no valid session.
699
710
  */
711
+ loginWithDeviceKey(deviceID?: string): Promise<Error | null>;
700
712
  /**
701
713
  * Returns details about the currently authenticated session.
702
714
  *
@@ -718,7 +730,7 @@ export declare class Client extends EventEmitter {
718
730
  */
719
731
  logout(): Promise<void>;
720
732
  /**
721
- * Connects your device to the chat. You must have an valid authorization cookie.
733
+ * Connects your device to the chat. You must have a valid Bearer token.
722
734
  * You can check whoami() to see before calling connect().
723
735
  */
724
736
  connect(): Promise<void>;
@@ -742,8 +754,6 @@ export declare class Client extends EventEmitter {
742
754
  private retrieveEmojiByID;
743
755
  private leaveServer;
744
756
  private kickUser;
745
- private addCookie;
746
- private getCookies;
747
757
  private uploadEmoji;
748
758
  private retrieveOrCreateDevice;
749
759
  private registerDevice;