@interncom/diplomatic 0.0.16 → 0.0.17

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
@@ -18,6 +18,7 @@ export default class DiplomaticClient {
18
18
  hostKeyPair?: KeyPair;
19
19
  lastFetchedAt?: string;
20
20
  constructor(params: IDiplomaticClientParams);
21
+ wipe(): Promise<void>;
21
22
  websocket?: WebSocket;
22
23
  connect: (hostURL: URL) => Promise<void>;
23
24
  init(params: IDiplomaticClientParams): Promise<void>;
package/dist/index.mjs CHANGED
@@ -16,12 +16,17 @@ function useClientState(client) {
16
16
  const [state, setState] = useState();
17
17
  useEffect(() => {
18
18
  async function updateState() {
19
+ console.log("updating");
19
20
  const state2 = await client.getState();
21
+ console.log("updated", state2);
20
22
  setState(state2);
23
+ console.log("updated and set state");
21
24
  }
25
+ console.log("hooking");
22
26
  client.listener = updateState;
23
27
  updateState();
24
28
  return () => {
29
+ console.log("unhooking");
25
30
  client.listener = void 0;
26
31
  };
27
32
  }, [client]);
@@ -316,27 +321,16 @@ function openDB(name, version, { blocked, upgrade, blocking, terminated } = {})
316
321
  event
317
322
  ));
318
323
  }
319
- openPromise.then((db) => {
324
+ openPromise.then((db2) => {
320
325
  if (terminated)
321
- db.addEventListener("close", () => terminated());
326
+ db2.addEventListener("close", () => terminated());
322
327
  if (blocking) {
323
- db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
328
+ db2.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
324
329
  }
325
330
  }).catch(() => {
326
331
  });
327
332
  return openPromise;
328
333
  }
329
- function deleteDB(name, { blocked } = {}) {
330
- const request = indexedDB.deleteDatabase(name);
331
- if (blocked) {
332
- request.addEventListener("blocked", (event) => blocked(
333
- // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
334
- event.oldVersion,
335
- event
336
- ));
337
- }
338
- return wrap(request).then(() => void 0);
339
- }
340
334
  var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"];
341
335
  var writeMethods = ["put", "add", "delete", "clear"];
342
336
  var cachedMethods = /* @__PURE__ */ new Map();
@@ -423,13 +417,13 @@ replaceTraps((oldTraps) => ({
423
417
  }));
424
418
 
425
419
  // src/idbStore.ts
426
- var dbPromise = openDB("client-store-db", 1, {
427
- upgrade(db) {
428
- db.createObjectStore("metaKV");
429
- db.createObjectStore("uploadQueue", {
420
+ var db = await openDB("client-store-db", 2, {
421
+ upgrade(db2) {
422
+ db2.createObjectStore("metaKV");
423
+ db2.createObjectStore("uploadQueue", {
430
424
  keyPath: "sha256"
431
425
  });
432
- db.createObjectStore("downloadQueue", {
426
+ db2.createObjectStore("downloadQueue", {
433
427
  keyPath: "path"
434
428
  });
435
429
  }
@@ -439,10 +433,11 @@ var IDBStore = class {
439
433
  hostURL;
440
434
  hostID;
441
435
  async wipe() {
442
- await deleteDB("client-store-db");
436
+ await db.clear("metaKV");
437
+ await db.clear("uploadQueue");
438
+ await db.clear("downloadQueue");
443
439
  }
444
440
  async getSeed() {
445
- const db = await dbPromise;
446
441
  const hex = await db.get("metaKV", "seed");
447
442
  if (!hex) {
448
443
  return;
@@ -452,68 +447,56 @@ var IDBStore = class {
452
447
  }
453
448
  async setSeed(seed) {
454
449
  const hex = btoh(seed);
455
- const db = await dbPromise;
456
450
  await db.put("metaKV", hex, "seed");
457
451
  this.seed = seed;
458
452
  }
459
453
  async getHostURL() {
460
- const db = await dbPromise;
461
454
  const url = await db.get("metaKV", "hostURL");
462
455
  return url;
463
456
  }
464
457
  async setHostURL(url) {
465
- const db = await dbPromise;
466
458
  db.put("metaKV", url, "hostURL");
467
459
  }
468
460
  async getHostID() {
469
- const db = await dbPromise;
470
461
  const id = await db.get("metaKV", "hostID");
471
462
  return id;
472
463
  }
473
464
  async setHostID(id) {
474
- const db = await dbPromise;
475
465
  await db.put("metaKV", id, "hostID");
476
466
  }
477
467
  uploadQueue = /* @__PURE__ */ new Map();
478
468
  enqueueUpload = async (sha256, cipherOp) => {
479
- const db = await dbPromise;
480
469
  await db.put("uploadQueue", { sha256, cipherOp });
481
470
  };
482
471
  dequeueUpload = async (sha256) => {
483
- const db = await dbPromise;
484
472
  await db.delete("uploadQueue", sha256);
485
473
  };
486
474
  peekUpload = async (sha256) => {
487
- const db = await dbPromise;
488
475
  const row = await db.get("uploadQueue", sha256);
489
476
  return row?.cipherOp;
490
477
  };
491
478
  listUploads = async () => {
492
- const db = await dbPromise;
493
479
  const sha256s = await db.getAllKeys("uploadQueue");
494
480
  return sha256s;
495
481
  };
496
482
  numUploads = async () => {
497
- const db = await dbPromise;
498
- return db.count("uploadQueue");
483
+ const num = await db.count("uploadQueue");
484
+ return num;
499
485
  };
500
486
  downloadQueue = /* @__PURE__ */ new Set();
501
487
  enqueueDownload = async (path) => {
502
- const db = await dbPromise;
503
488
  await db.put("downloadQueue", { path });
504
489
  };
505
490
  dequeueDownload = async (path) => {
506
- const db = await dbPromise;
507
491
  await db.delete("downloadQueue", path);
508
492
  };
509
493
  listDownloads = async () => {
510
- const db = await dbPromise;
511
494
  const paths = await db.getAllKeys("downloadQueue");
512
495
  return paths;
513
496
  };
514
497
  numDownloads = async () => {
515
- const db = await dbPromise;
516
- return db.count("downloadQueue");
498
+ const num = await db.count("downloadQueue");
499
+ return num;
517
500
  };
518
501
  };
519
502
  var idbStore = new IDBStore();
@@ -8810,6 +8793,17 @@ var DiplomaticClient = class {
8810
8793
  this.applier = params.stateManager.apply;
8811
8794
  this.init(params);
8812
8795
  }
8796
+ async wipe() {
8797
+ this.seed = void 0;
8798
+ this.encKey = void 0;
8799
+ this.hostURL = void 0;
8800
+ this.hostKeyPair = void 0;
8801
+ this.lastFetchedAt = void 0;
8802
+ this.websocket?.close();
8803
+ this.websocket = void 0;
8804
+ await this.store.wipe();
8805
+ this.emitUpdate();
8806
+ }
8813
8807
  websocket;
8814
8808
  connect = async (hostURL) => {
8815
8809
  if (!this.hostKeyPair) {
@@ -8842,6 +8836,7 @@ var DiplomaticClient = class {
8842
8836
  };
8843
8837
  };
8844
8838
  async init(params) {
8839
+ await this.store.init?.();
8845
8840
  if (params.seed) {
8846
8841
  const bytes = typeof params.seed === "string" ? htob(params.seed) : params.seed;
8847
8842
  await this.store.setSeed(bytes);
@@ -8904,13 +8899,12 @@ var DiplomaticClient = class {
8904
8899
  this.listener?.(state);
8905
8900
  }
8906
8901
  async getState() {
8907
- return {
8908
- hasSeed: this.seed !== void 0 && this.encKey !== void 0,
8909
- hasHost: this.hostURL !== void 0 && this.hostKeyPair !== void 0,
8910
- connected: this.websocket?.readyState === WebSocket.OPEN,
8911
- numUploads: await this.store.numUploads(),
8912
- numDownloads: await this.store.numDownloads()
8913
- };
8902
+ const hasSeed = this.seed !== void 0 && this.encKey !== void 0;
8903
+ const hasHost = this.hostURL !== void 0 && this.hostKeyPair !== void 0;
8904
+ const connected = this.websocket === void 0 ? false : this.websocket.readyState === this.websocket.OPEN;
8905
+ const numUploads = await this.store.numUploads();
8906
+ const numDownloads = await this.store.numDownloads();
8907
+ return { hasSeed, hasHost, connected, numDownloads, numUploads };
8914
8908
  }
8915
8909
  async processOps() {
8916
8910
  await this.pullOpPaths();
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { IOp } from "./shared/types";
2
2
  export interface IClientStateStore {
3
+ init?: () => Promise<void>;
3
4
  getSeed: () => Promise<Uint8Array | undefined>;
4
5
  setSeed: (seed: Uint8Array) => Promise<void>;
5
6
  getHostURL: () => Promise<string | undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interncom/diplomatic",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "type": "module",
5
5
  "description": "Secure sync layer",
6
6
  "main": "dist/index.mjs",