@interncom/diplomatic 0.0.69 → 0.0.71

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 CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { EntityID, GroupID, IOp, KeyPair } from "./shared/types";
2
2
  import type { IClientStateStore, IDiplomaticClientState, IDiplomaticClientXferState } from "./types";
3
3
  import type { StateManager } from "./state";
4
+ import TypedEventEmitter from "./typedEventEmitter";
4
5
  export interface IDiplomaticClientParams {
5
6
  store: IClientStateStore;
6
7
  stateManager: StateManager;
@@ -11,13 +12,15 @@ export interface IDiplomaticClientParams {
11
12
  export default class DiplomaticClient {
12
13
  store: IClientStateStore;
13
14
  stateManager: StateManager;
14
- listener?: (state: IDiplomaticClientState) => void;
15
- xferListener?: (state: IDiplomaticClientXferState) => void;
15
+ stateEmitter: TypedEventEmitter<IDiplomaticClientState>;
16
+ xferStateEmitter: TypedEventEmitter<IDiplomaticClientXferState>;
16
17
  seed?: Uint8Array;
17
18
  encKey?: Uint8Array;
18
19
  hostURL?: URL;
19
20
  hostKeyPair?: KeyPair;
20
21
  constructor(params: IDiplomaticClientParams);
22
+ addEventListener(func: (state: IDiplomaticClientState) => void): () => void;
23
+ addXferEventListener(func: (state: IDiplomaticClientXferState) => void): () => void;
21
24
  wipe: () => Promise<void>;
22
25
  websocket?: WebSocket;
23
26
  connect: (hostURL: URL) => Promise<void>;
package/dist/index.mjs CHANGED
@@ -2488,10 +2488,10 @@ function useClientState(client) {
2488
2488
  const state2 = await client.getState();
2489
2489
  setState(state2);
2490
2490
  }
2491
- client.listener = updateState;
2491
+ const unsubscribe = client.addEventListener(updateState);
2492
2492
  updateState();
2493
2493
  return () => {
2494
- client.listener = void 0;
2494
+ unsubscribe();
2495
2495
  };
2496
2496
  }, [client]);
2497
2497
  return state;
@@ -2503,10 +2503,10 @@ function useClientXferState(client) {
2503
2503
  const state2 = await client.getXferState();
2504
2504
  setState(state2);
2505
2505
  }
2506
- client.xferListener = updateState;
2506
+ const unsubscribe = client.addXferEventListener(updateState);
2507
2507
  updateState();
2508
2508
  return () => {
2509
- client.xferListener = void 0;
2509
+ unsubscribe();
2510
2510
  };
2511
2511
  }, [client]);
2512
2512
  return state;
@@ -11363,20 +11363,67 @@ function genDeleteOp(eid, type, version = 0) {
11363
11363
  // src/client.ts
11364
11364
  var import_jszip = __toESM(require_jszip_min(), 1);
11365
11365
  var import_file_saver = __toESM(require_FileSaver_min(), 1);
11366
+
11367
+ // src/typedEventEmitter.ts
11368
+ var TypedEventEmitter = class {
11369
+ listeners = /* @__PURE__ */ new Map();
11370
+ // Add an event listener for a specific event type
11371
+ addEventListener(eventType, listener) {
11372
+ let listeners = this.listeners.get(eventType);
11373
+ if (!listeners) {
11374
+ listeners = /* @__PURE__ */ new Set();
11375
+ this.listeners.set(eventType, listeners);
11376
+ }
11377
+ listeners.add(listener);
11378
+ return () => {
11379
+ this.removeEventListener(eventType, listener);
11380
+ };
11381
+ }
11382
+ // Remove an event listener
11383
+ removeEventListener(eventType, listener) {
11384
+ const listenerSet = this.listeners.get(eventType);
11385
+ if (listenerSet) {
11386
+ listenerSet.delete(listener);
11387
+ if (listenerSet.size === 0) {
11388
+ this.listeners.delete(eventType);
11389
+ }
11390
+ }
11391
+ }
11392
+ // Emit an event to all subscribers
11393
+ emit(eventType, data) {
11394
+ const listenerSet = this.listeners.get(eventType);
11395
+ if (listenerSet) {
11396
+ const listeners = Array.from(listenerSet);
11397
+ for (const listener of listeners) {
11398
+ listener(data);
11399
+ }
11400
+ }
11401
+ }
11402
+ };
11403
+
11404
+ // src/client.ts
11366
11405
  var DiplomaticClient = class {
11367
11406
  store;
11368
11407
  stateManager;
11369
- listener;
11370
- xferListener;
11408
+ stateEmitter;
11409
+ xferStateEmitter;
11371
11410
  seed;
11372
11411
  encKey;
11373
11412
  hostURL;
11374
11413
  hostKeyPair;
11375
11414
  constructor(params) {
11415
+ this.stateEmitter = new TypedEventEmitter();
11416
+ this.xferStateEmitter = new TypedEventEmitter();
11376
11417
  this.store = params.store;
11377
11418
  this.stateManager = params.stateManager;
11378
11419
  this.init(params);
11379
11420
  }
11421
+ addEventListener(func) {
11422
+ return this.stateEmitter.addEventListener("update", func);
11423
+ }
11424
+ addXferEventListener(func) {
11425
+ return this.xferStateEmitter.addEventListener("update", func);
11426
+ }
11380
11427
  wipe = async () => {
11381
11428
  this.seed = void 0;
11382
11429
  this.encKey = void 0;
@@ -11514,11 +11561,11 @@ var DiplomaticClient = class {
11514
11561
  }
11515
11562
  async emitUpdate() {
11516
11563
  const state = await this.getState();
11517
- this.listener?.(state);
11564
+ this.stateEmitter.emit("update", state);
11518
11565
  }
11519
11566
  async emitXferUpdate() {
11520
11567
  const state = await this.getXferState();
11521
- this.xferListener?.(state);
11568
+ this.xferStateEmitter.emit("update", state);
11522
11569
  }
11523
11570
  async getState() {
11524
11571
  const hasSeed = this.seed !== void 0 && this.encKey !== void 0;
@@ -0,0 +1,8 @@
1
+ type Listener<T> = (data: T) => void;
2
+ export default class TypedEventEmitter<T> {
3
+ private listeners;
4
+ addEventListener(eventType: string, listener: Listener<T>): () => void;
5
+ removeEventListener(eventType: string, listener: Listener<T>): void;
6
+ emit(eventType: string, data: T): void;
7
+ }
8
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interncom/diplomatic",
3
- "version": "0.0.69",
3
+ "version": "0.0.71",
4
4
  "type": "module",
5
5
  "description": "Secure sync layer",
6
6
  "main": "dist/index.mjs",