@interncom/diplomatic 0.0.16 → 0.0.18

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
@@ -316,27 +316,16 @@ function openDB(name, version, { blocked, upgrade, blocking, terminated } = {})
316
316
  event
317
317
  ));
318
318
  }
319
- openPromise.then((db) => {
319
+ openPromise.then((db2) => {
320
320
  if (terminated)
321
- db.addEventListener("close", () => terminated());
321
+ db2.addEventListener("close", () => terminated());
322
322
  if (blocking) {
323
- db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
323
+ db2.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
324
324
  }
325
325
  }).catch(() => {
326
326
  });
327
327
  return openPromise;
328
328
  }
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
329
  var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"];
341
330
  var writeMethods = ["put", "add", "delete", "clear"];
342
331
  var cachedMethods = /* @__PURE__ */ new Map();
@@ -423,13 +412,13 @@ replaceTraps((oldTraps) => ({
423
412
  }));
424
413
 
425
414
  // src/idbStore.ts
426
- var dbPromise = openDB("client-store-db", 1, {
427
- upgrade(db) {
428
- db.createObjectStore("metaKV");
429
- db.createObjectStore("uploadQueue", {
415
+ var db = await openDB("client-store-db", 2, {
416
+ upgrade(db2) {
417
+ db2.createObjectStore("metaKV");
418
+ db2.createObjectStore("uploadQueue", {
430
419
  keyPath: "sha256"
431
420
  });
432
- db.createObjectStore("downloadQueue", {
421
+ db2.createObjectStore("downloadQueue", {
433
422
  keyPath: "path"
434
423
  });
435
424
  }
@@ -439,10 +428,11 @@ var IDBStore = class {
439
428
  hostURL;
440
429
  hostID;
441
430
  async wipe() {
442
- await deleteDB("client-store-db");
431
+ await db.clear("metaKV");
432
+ await db.clear("uploadQueue");
433
+ await db.clear("downloadQueue");
443
434
  }
444
435
  async getSeed() {
445
- const db = await dbPromise;
446
436
  const hex = await db.get("metaKV", "seed");
447
437
  if (!hex) {
448
438
  return;
@@ -452,68 +442,56 @@ var IDBStore = class {
452
442
  }
453
443
  async setSeed(seed) {
454
444
  const hex = btoh(seed);
455
- const db = await dbPromise;
456
445
  await db.put("metaKV", hex, "seed");
457
446
  this.seed = seed;
458
447
  }
459
448
  async getHostURL() {
460
- const db = await dbPromise;
461
449
  const url = await db.get("metaKV", "hostURL");
462
450
  return url;
463
451
  }
464
452
  async setHostURL(url) {
465
- const db = await dbPromise;
466
453
  db.put("metaKV", url, "hostURL");
467
454
  }
468
455
  async getHostID() {
469
- const db = await dbPromise;
470
456
  const id = await db.get("metaKV", "hostID");
471
457
  return id;
472
458
  }
473
459
  async setHostID(id) {
474
- const db = await dbPromise;
475
460
  await db.put("metaKV", id, "hostID");
476
461
  }
477
462
  uploadQueue = /* @__PURE__ */ new Map();
478
463
  enqueueUpload = async (sha256, cipherOp) => {
479
- const db = await dbPromise;
480
464
  await db.put("uploadQueue", { sha256, cipherOp });
481
465
  };
482
466
  dequeueUpload = async (sha256) => {
483
- const db = await dbPromise;
484
467
  await db.delete("uploadQueue", sha256);
485
468
  };
486
469
  peekUpload = async (sha256) => {
487
- const db = await dbPromise;
488
470
  const row = await db.get("uploadQueue", sha256);
489
471
  return row?.cipherOp;
490
472
  };
491
473
  listUploads = async () => {
492
- const db = await dbPromise;
493
474
  const sha256s = await db.getAllKeys("uploadQueue");
494
475
  return sha256s;
495
476
  };
496
477
  numUploads = async () => {
497
- const db = await dbPromise;
498
- return db.count("uploadQueue");
478
+ const num = await db.count("uploadQueue");
479
+ return num;
499
480
  };
500
481
  downloadQueue = /* @__PURE__ */ new Set();
501
482
  enqueueDownload = async (path) => {
502
- const db = await dbPromise;
503
483
  await db.put("downloadQueue", { path });
504
484
  };
505
485
  dequeueDownload = async (path) => {
506
- const db = await dbPromise;
507
486
  await db.delete("downloadQueue", path);
508
487
  };
509
488
  listDownloads = async () => {
510
- const db = await dbPromise;
511
489
  const paths = await db.getAllKeys("downloadQueue");
512
490
  return paths;
513
491
  };
514
492
  numDownloads = async () => {
515
- const db = await dbPromise;
516
- return db.count("downloadQueue");
493
+ const num = await db.count("downloadQueue");
494
+ return num;
517
495
  };
518
496
  };
519
497
  var idbStore = new IDBStore();
@@ -8810,6 +8788,17 @@ var DiplomaticClient = class {
8810
8788
  this.applier = params.stateManager.apply;
8811
8789
  this.init(params);
8812
8790
  }
8791
+ async wipe() {
8792
+ this.seed = void 0;
8793
+ this.encKey = void 0;
8794
+ this.hostURL = void 0;
8795
+ this.hostKeyPair = void 0;
8796
+ this.lastFetchedAt = void 0;
8797
+ this.websocket?.close();
8798
+ this.websocket = void 0;
8799
+ await this.store.wipe();
8800
+ this.emitUpdate();
8801
+ }
8813
8802
  websocket;
8814
8803
  connect = async (hostURL) => {
8815
8804
  if (!this.hostKeyPair) {
@@ -8842,6 +8831,7 @@ var DiplomaticClient = class {
8842
8831
  };
8843
8832
  };
8844
8833
  async init(params) {
8834
+ await this.store.init?.();
8845
8835
  if (params.seed) {
8846
8836
  const bytes = typeof params.seed === "string" ? htob(params.seed) : params.seed;
8847
8837
  await this.store.setSeed(bytes);
@@ -8904,13 +8894,12 @@ var DiplomaticClient = class {
8904
8894
  this.listener?.(state);
8905
8895
  }
8906
8896
  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
- };
8897
+ const hasSeed = this.seed !== void 0 && this.encKey !== void 0;
8898
+ const hasHost = this.hostURL !== void 0 && this.hostKeyPair !== void 0;
8899
+ const connected = this.websocket === void 0 ? false : this.websocket.readyState === this.websocket.OPEN;
8900
+ const numUploads = await this.store.numUploads();
8901
+ const numDownloads = await this.store.numDownloads();
8902
+ return { hasSeed, hasHost, connected, numDownloads, numUploads };
8914
8903
  }
8915
8904
  async processOps() {
8916
8905
  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.18",
4
4
  "type": "module",
5
5
  "description": "Secure sync layer",
6
6
  "main": "dist/index.mjs",