tool-db 1.0.22 → 1.1.1

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 (90) hide show
  1. package/README.md +71 -9
  2. package/dist/deduplicator.d.ts +19 -0
  3. package/dist/deduplicator.js +60 -0
  4. package/dist/deduplicator.js.map +1 -0
  5. package/dist/index.d.ts +4 -2
  6. package/dist/index.js +9 -5
  7. package/dist/index.js.map +1 -1
  8. package/dist/loadCrdtDocument.d.ts +3 -0
  9. package/dist/loadCrdtDocument.js +43 -0
  10. package/dist/loadCrdtDocument.js.map +1 -0
  11. package/dist/server.d.ts +1 -0
  12. package/dist/server.js +12 -0
  13. package/dist/server.js.map +1 -0
  14. package/dist/shared.js +0 -1
  15. package/dist/shared.js.map +1 -1
  16. package/dist/toolDbAnonSignIn.d.ts +2 -2
  17. package/dist/toolDbClientOnMessage.d.ts +2 -0
  18. package/dist/toolDbClientOnMessage.js +204 -0
  19. package/dist/toolDbClientOnMessage.js.map +1 -0
  20. package/dist/toolDbCrdtPut.d.ts +11 -0
  21. package/dist/toolDbCrdtPut.js +118 -0
  22. package/dist/toolDbCrdtPut.js.map +1 -0
  23. package/dist/toolDbGet.d.ts +2 -2
  24. package/dist/toolDbGet.js +46 -19
  25. package/dist/toolDbGet.js.map +1 -1
  26. package/dist/toolDbGetPubKey.d.ts +2 -2
  27. package/dist/toolDbKeysSignIn.d.ts +8 -0
  28. package/dist/toolDbKeysSignIn.js +23 -0
  29. package/dist/toolDbKeysSignIn.js.map +1 -0
  30. package/dist/toolDbPut.d.ts +3 -3
  31. package/dist/toolDbPut.js +33 -22
  32. package/dist/toolDbPut.js.map +1 -1
  33. package/dist/toolDbSignIn.d.ts +2 -2
  34. package/dist/toolDbSignIn.js +1 -1
  35. package/dist/toolDbSignIn.js.map +1 -1
  36. package/dist/toolDbSignUp.d.ts +2 -2
  37. package/dist/toolDbSignUp.js +25 -18
  38. package/dist/toolDbSignUp.js.map +1 -1
  39. package/dist/toolDbSubscribe.d.ts +8 -0
  40. package/dist/toolDbSubscribe.js +61 -0
  41. package/dist/toolDbSubscribe.js.map +1 -0
  42. package/dist/toolDbVerificationWrapper.d.ts +2 -2
  43. package/dist/toolDbVerificationWrapper.js +2 -2
  44. package/dist/toolDbVerificationWrapper.js.map +1 -1
  45. package/dist/tooldb.d.ts +85 -0
  46. package/dist/tooldb.js +164 -0
  47. package/dist/tooldb.js.map +1 -0
  48. package/dist/types/graph.d.ts +0 -9
  49. package/dist/types/message.d.ts +56 -0
  50. package/dist/types/tooldb.d.ts +10 -0
  51. package/dist/types/tooldb.js +3 -0
  52. package/dist/types/tooldb.js.map +1 -0
  53. package/dist/utils/base64ToBinaryChange.d.ts +2 -0
  54. package/dist/utils/base64ToBinaryChange.js +18 -0
  55. package/dist/utils/base64ToBinaryChange.js.map +1 -0
  56. package/dist/utils/base64ToBinaryDocument.d.ts +2 -0
  57. package/dist/utils/base64ToBinaryDocument.js +18 -0
  58. package/dist/utils/base64ToBinaryDocument.js.map +1 -0
  59. package/dist/utils/crypto/loadKeysComb.d.ts +2 -1
  60. package/dist/utils/crypto/loadKeysComb.js +19 -26
  61. package/dist/utils/crypto/loadKeysComb.js.map +1 -1
  62. package/dist/utils/getIpFromUrl.d.ts +1 -0
  63. package/dist/utils/getIpFromUrl.js +7 -0
  64. package/dist/utils/getIpFromUrl.js.map +1 -0
  65. package/dist/utils/indexedb.d.ts +5 -0
  66. package/dist/utils/indexedb.js +83 -0
  67. package/dist/utils/indexedb.js.map +1 -0
  68. package/dist/utils/leveldb.d.ts +5 -0
  69. package/dist/utils/leveldb.js +47 -0
  70. package/dist/utils/leveldb.js.map +1 -0
  71. package/dist/utils/proofOfWork.js +1 -1
  72. package/dist/utils/proofOfWork.js.map +1 -1
  73. package/dist/utils/uint8ToBase64.d.ts +2 -1
  74. package/dist/utils/uint8ToBase64.js.map +1 -1
  75. package/dist/utils/verifyMessage.d.ts +3 -3
  76. package/dist/utils/verifyMessage.js +29 -12
  77. package/dist/utils/verifyMessage.js.map +1 -1
  78. package/dist/wss.d.ts +28 -0
  79. package/dist/wss.js +176 -0
  80. package/dist/wss.js.map +1 -0
  81. package/package.json +14 -11
  82. package/dist/customGun.d.ts +0 -1
  83. package/dist/customGun.js +0 -147
  84. package/dist/customGun.js.map +0 -1
  85. package/dist/toolDbClient.d.ts +0 -46
  86. package/dist/toolDbClient.js +0 -83
  87. package/dist/toolDbClient.js.map +0 -1
  88. package/dist/toolDbService.d.ts +0 -29
  89. package/dist/toolDbService.js +0 -149
  90. package/dist/toolDbService.js.map +0 -1
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-nocheck
4
+ function leveldb(dbName) {
5
+ if (dbName === void 0) { dbName = "tooldb"; }
6
+ var level = require("level");
7
+ var db = null;
8
+ var store = {};
9
+ store.start = function () {
10
+ db = level(dbName);
11
+ };
12
+ store.start();
13
+ store.put = function (key, data, cb) {
14
+ db.put(key, data, function (err) {
15
+ if (err) {
16
+ if (cb)
17
+ cb(err);
18
+ }
19
+ else {
20
+ if (cb)
21
+ cb(false);
22
+ }
23
+ });
24
+ };
25
+ store.get = function (key, cb) {
26
+ // console.warn("store get", key);
27
+ if (!db) {
28
+ setTimeout(function () {
29
+ store.get(key, cb);
30
+ }, 9);
31
+ return;
32
+ }
33
+ db.get(key, function (err, value) {
34
+ if (err) {
35
+ if (cb)
36
+ cb(err);
37
+ }
38
+ else {
39
+ if (cb)
40
+ cb(false, value);
41
+ }
42
+ });
43
+ };
44
+ return store;
45
+ }
46
+ exports.default = leveldb;
47
+ //# sourceMappingURL=leveldb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leveldb.js","sourceRoot":"","sources":["../../src/utils/leveldb.ts"],"names":[],"mappings":";;AAAA,cAAc;AACd,SAAwB,OAAO,CAAC,MAAiB;IAAjB,uBAAA,EAAA,iBAAiB;IAS/C,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,GAAG,IAAI,CAAC;IAEd,IAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,KAAK,CAAC,KAAK,GAAG;QACZ,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,KAAK,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE,EAAE;QACjC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,GAAG;YAC7B,IAAI,GAAG,EAAE;gBACP,IAAI,EAAE;oBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAI,EAAE;oBAAE,EAAE,CAAC,KAAK,CAAC,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE,EAAE;QAC3B,kCAAkC;QAClC,IAAI,CAAC,EAAE,EAAE;YACP,UAAU,CAAC;gBACT,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,OAAO;SACR;QACD,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,KAAK;YAC9B,IAAI,GAAG,EAAE;gBACP,IAAI,EAAE;oBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAI,EAAE;oBAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AA/CD,0BA+CC"}
@@ -7,7 +7,7 @@ var sha256_1 = __importDefault(require("./sha256"));
7
7
  function proofOfWork(value, difficulty) {
8
8
  return new Promise(function (resolve) {
9
9
  var nonce = 0;
10
- var hash = "";
10
+ var hash = (0, sha256_1.default)("" + value + nonce);
11
11
  while (hash.substring(0, difficulty) !== Array(difficulty + 1).join("0")) {
12
12
  nonce += 1;
13
13
  hash = (0, sha256_1.default)("" + value + nonce);
@@ -1 +1 @@
1
- {"version":3,"file":"proofOfWork.js","sourceRoot":"","sources":["../../src/utils/proofOfWork.ts"],"names":[],"mappings":";;;;;AAAA,oDAA8B;AAE9B,SAAwB,WAAW,CACjC,KAAa,EACb,UAAkB;IAElB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACxE,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,GAAG,IAAA,gBAAM,EAAC,KAAG,KAAK,GAAG,KAAO,CAAC,CAAC;SACnC;QACD,OAAO,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,8BAaC"}
1
+ {"version":3,"file":"proofOfWork.js","sourceRoot":"","sources":["../../src/utils/proofOfWork.ts"],"names":[],"mappings":";;;;;AAAA,oDAA8B;AAE9B,SAAwB,WAAW,CACjC,KAAa,EACb,UAAkB;IAElB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,IAAA,gBAAM,EAAC,KAAG,KAAK,GAAG,KAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACxE,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,GAAG,IAAA,gBAAM,EAAC,KAAG,KAAK,GAAG,KAAO,CAAC,CAAC;SACnC;QACD,OAAO,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,8BAaC"}
@@ -1 +1,2 @@
1
- export default function uint8ToBase64(byteArray: Uint8Array): string;
1
+ import { BinaryChange } from "automerge";
2
+ export default function uint8ToBase64(byteArray: Uint8Array | BinaryChange): string;
@@ -1 +1 @@
1
- {"version":3,"file":"uint8ToBase64.js","sourceRoot":"","sources":["../../src/utils/uint8ToBase64.ts"],"names":[],"mappings":";;;;;AAAA,wDAAkC;AAElC,SAAwB,aAAa,CAAC,SAAqB;IACzD,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;QAChD,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAClD;IAED,OAAO,IAAA,kBAAQ,EAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAPD,gCAOC"}
1
+ {"version":3,"file":"uint8ToBase64.js","sourceRoot":"","sources":["../../src/utils/uint8ToBase64.ts"],"names":[],"mappings":";;;;;AACA,wDAAkC;AAElC,SAAwB,aAAa,CACnC,SAAoC;IAEpC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;QAChD,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAClD;IAED,OAAO,IAAA,kBAAQ,EAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AATD,gCASC"}
@@ -1,8 +1,8 @@
1
- import { GraphEntryValue } from "../types/graph";
2
- import { VerifyResult } from "../types/message";
1
+ import { VerifyResult, VerificationData } from "../types/message";
3
2
  /**
4
3
  * Verifies a message validity (PoW, pubKey, timestamp, signatures)
5
4
  * @param msg AnyMessage
5
+ * @param pow amount of proof of work required, number of leading zeroes (default is 0/no pow)
6
6
  * @returns boolean or undefined if the message type does not match
7
7
  */
8
- export default function verifyMessage<T>(msg: Partial<GraphEntryValue<T>>): Promise<VerifyResult>;
8
+ export default function verifyMessage<T>(msg: Partial<VerificationData<T>>, pow?: number): Promise<VerifyResult>;
@@ -39,6 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
+ var sha256_1 = __importDefault(require("./sha256"));
42
43
  var message_1 = require("../types/message");
43
44
  var decodeKeyString_1 = __importDefault(require("./crypto/decodeKeyString"));
44
45
  var importKey_1 = __importDefault(require("./crypto/importKey"));
@@ -48,40 +49,56 @@ var fromBase64_1 = __importDefault(require("./fromBase64"));
48
49
  /**
49
50
  * Verifies a message validity (PoW, pubKey, timestamp, signatures)
50
51
  * @param msg AnyMessage
52
+ * @param pow amount of proof of work required, number of leading zeroes (default is 0/no pow)
51
53
  * @returns boolean or undefined if the message type does not match
52
54
  */
53
- function verifyMessage(msg) {
55
+ function verifyMessage(msg, pow) {
56
+ if (pow === void 0) { pow = 0; }
54
57
  return __awaiter(this, void 0, void 0, function () {
55
58
  var strData, publicKeyNamespace, pubKeyString, pubKey, verified;
56
59
  return __generator(this, function (_a) {
57
60
  switch (_a.label) {
58
61
  case 0:
59
- strData = JSON.stringify(msg.value);
60
- if (msg.timestamp === undefined ||
61
- msg.key === undefined ||
62
- msg.hash === undefined ||
63
- msg.pub === undefined ||
64
- msg.sig === undefined) {
62
+ strData = JSON.stringify(msg.v);
63
+ if (msg.t === undefined ||
64
+ msg.k === undefined ||
65
+ msg.h === undefined ||
66
+ msg.p === undefined ||
67
+ msg.s === undefined) {
65
68
  return [2 /*return*/, message_1.VerifyResult.InvalidData];
66
69
  }
67
70
  // Max clock shift allowed is ten seconds
68
- if (msg.timestamp > new Date().getTime() + 10000) {
71
+ if (msg.t > new Date().getTime() + 10000) {
69
72
  // console.warn("Invalid message timestamp.");
70
73
  return [2 /*return*/, message_1.VerifyResult.InvalidTimestamp];
71
74
  }
72
75
  publicKeyNamespace = false;
73
- if (msg.key.slice(0, 1) == ":") {
74
- publicKeyNamespace = msg.key.split(".")[0].slice(1);
76
+ if (msg.k.slice(0, 1) == ":") {
77
+ publicKeyNamespace = msg.k.split(".")[0].slice(1);
75
78
  }
76
- pubKeyString = msg.pub;
79
+ pubKeyString = msg.p;
77
80
  if (publicKeyNamespace && publicKeyNamespace !== pubKeyString) {
78
81
  // console.warn("Provided pub keys do not match");
79
82
  return [2 /*return*/, message_1.VerifyResult.PubKeyMismatch];
80
83
  }
84
+ // Verify hash and nonce (adjust zeroes for difficulty of the network)
85
+ // While this POW does not enforce security per-se, it does make it harder
86
+ // for attackers to spam the network, and could be adjusted by peers.
87
+ // Disabled for now because it is painful on large requests
88
+ if (pow > 0) {
89
+ if (msg.h.slice(0, pow) !== new Array(pow).fill("0").join("")) {
90
+ console.warn("No valid hash (no pow)");
91
+ return [2 /*return*/, message_1.VerifyResult.NoProofOfWork];
92
+ }
93
+ if ((0, sha256_1.default)("" + strData + pubKeyString + msg.t + msg.n) !== msg.h) {
94
+ // console.warn("Specified hash does not generate a valid pow");
95
+ return [2 /*return*/, message_1.VerifyResult.InvalidHashNonce];
96
+ }
97
+ }
81
98
  return [4 /*yield*/, (0, importKey_1.default)((0, decodeKeyString_1.default)(pubKeyString), "spki", "ECDSA", ["verify"])];
82
99
  case 1:
83
100
  pubKey = _a.sent();
84
- return [4 /*yield*/, (0, verifyData_1.default)(msg.hash, (0, fromBase64_1.default)(msg.sig), pubKey)];
101
+ return [4 /*yield*/, (0, verifyData_1.default)(msg.h, (0, fromBase64_1.default)(msg.s), pubKey)];
85
102
  case 2:
86
103
  verified = _a.sent();
87
104
  // console.warn(`Signature validation: ${verified ? "Sucess" : "Failed"}`);
@@ -1 +1 @@
1
- {"version":3,"file":"verifyMessage.js","sourceRoot":"","sources":["../../src/utils/verifyMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4CAAgD;AAChD,6EAAuD;AACvD,iEAA2C;AAC3C,mEAA6C;AAC7C,4DAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AACH,SAA8B,aAAa,CACzC,GAAgC;;;;;;oBAG1B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAE1C,IACE,GAAG,CAAC,SAAS,KAAK,SAAS;wBAC3B,GAAG,CAAC,GAAG,KAAK,SAAS;wBACrB,GAAG,CAAC,IAAI,KAAK,SAAS;wBACtB,GAAG,CAAC,GAAG,KAAK,SAAS;wBACrB,GAAG,CAAC,GAAG,KAAK,SAAS,EACrB;wBACA,sBAAO,sBAAY,CAAC,WAAW,EAAC;qBACjC;oBAED,yCAAyC;oBACzC,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE;wBAChD,8CAA8C;wBAC9C,sBAAO,sBAAY,CAAC,gBAAgB,EAAC;qBACtC;oBAGG,kBAAkB,GAAmB,KAAK,CAAC;oBAC/C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE;wBAC9B,kBAAkB,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBACrD;oBAEK,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC;oBAE7B,IAAI,kBAAkB,IAAI,kBAAkB,KAAK,YAAY,EAAE;wBAC7D,kDAAkD;wBAClD,sBAAO,sBAAY,CAAC,cAAc,EAAC;qBACpC;oBAkBc,qBAAM,IAAA,mBAAS,EAC5B,IAAA,yBAAe,EAAC,YAAY,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,CAAC,QAAQ,CAAC,CACX,EAAA;;oBALK,MAAM,GAAG,SAKd;oBAIgB,qBAAM,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,EAAE,IAAA,oBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAA;;oBAAlE,QAAQ,GAAG,SAAuD;oBACxE,2EAA2E;oBAE3E,sBAAO,QAAQ,CAAC,CAAC,CAAC,sBAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAY,CAAC,gBAAgB,EAAC;;;;CACzE;AAhED,gCAgEC"}
1
+ {"version":3,"file":"verifyMessage.js","sourceRoot":"","sources":["../../src/utils/verifyMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA8B;AAC9B,4CAAkE;AAClE,6EAAuD;AACvD,iEAA2C;AAC3C,mEAA6C;AAC7C,4DAAsC;AACtC,iCAAiC;AAEjC;;;;;GAKG;AACH,SAA8B,aAAa,CACzC,GAAiC,EACjC,GAAO;IAAP,oBAAA,EAAA,OAAO;;;;;;oBAGD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEtC,IACE,GAAG,CAAC,CAAC,KAAK,SAAS;wBACnB,GAAG,CAAC,CAAC,KAAK,SAAS;wBACnB,GAAG,CAAC,CAAC,KAAK,SAAS;wBACnB,GAAG,CAAC,CAAC,KAAK,SAAS;wBACnB,GAAG,CAAC,CAAC,KAAK,SAAS,EACnB;wBACA,sBAAO,sBAAY,CAAC,WAAW,EAAC;qBACjC;oBAED,yCAAyC;oBACzC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE;wBACxC,8CAA8C;wBAC9C,sBAAO,sBAAY,CAAC,gBAAgB,EAAC;qBACtC;oBAGG,kBAAkB,GAAmB,KAAK,CAAC;oBAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE;wBAC5B,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBACnD;oBAEK,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;oBAE3B,IAAI,kBAAkB,IAAI,kBAAkB,KAAK,YAAY,EAAE;wBAC7D,kDAAkD;wBAClD,sBAAO,sBAAY,CAAC,cAAc,EAAC;qBACpC;oBAED,sEAAsE;oBACtE,0EAA0E;oBAC1E,qEAAqE;oBACrE,2DAA2D;oBAC3D,IAAI,GAAG,GAAG,CAAC,EAAE;wBACX,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;4BAC7D,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;4BACvC,sBAAO,sBAAY,CAAC,aAAa,EAAC;yBACnC;wBAED,IAAI,IAAA,gBAAM,EAAC,KAAG,OAAO,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;4BACjE,gEAAgE;4BAChE,sBAAO,sBAAY,CAAC,gBAAgB,EAAC;yBACtC;qBACF;oBAEc,qBAAM,IAAA,mBAAS,EAC5B,IAAA,yBAAe,EAAC,YAAY,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,CAAC,QAAQ,CAAC,CACX,EAAA;;oBALK,MAAM,GAAG,SAKd;oBAIgB,qBAAM,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC,EAAE,IAAA,oBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAA;;oBAA7D,QAAQ,GAAG,SAAkD;oBACnE,2EAA2E;oBAE3E,sBAAO,QAAQ,CAAC,CAAC,CAAC,sBAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAY,CAAC,gBAAgB,EAAC;;;;CACzE;AAjED,gCAiEC"}
package/dist/wss.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import WebSocket from "ws";
2
+ import { ToolDbMessage } from ".";
3
+ import ToolDb from "./tooldb";
4
+ export default class WSS {
5
+ private wnd;
6
+ private _wss;
7
+ private options;
8
+ private server;
9
+ private _tooldb;
10
+ private _connections;
11
+ get allPeers(): string[];
12
+ private _activePeers;
13
+ get activePeers(): string[];
14
+ private _newPeerId;
15
+ private _clientSockets;
16
+ get clientSockets(): Record<number, WebSocket>;
17
+ constructor(db: ToolDb);
18
+ connectTo(url: string): void;
19
+ /**
20
+ * Open a connection to a federated server
21
+ * @param url URL of the server (including port)
22
+ * @returns websocket
23
+ */
24
+ open: (url: string) => any | undefined;
25
+ send(msg: ToolDbMessage, filterUrls?: string[]): void;
26
+ private reconnect;
27
+ get tooldb(): ToolDb;
28
+ }
package/dist/wss.js ADDED
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var ws_1 = __importDefault(require("ws"));
7
+ var _1 = require(".");
8
+ var WSS = /** @class */ (function () {
9
+ function WSS(db) {
10
+ var _this = this;
11
+ // eslint-disable-next-line no-undef
12
+ this.wnd = typeof window === "undefined" ? undefined : window;
13
+ this._wss = this.wnd
14
+ ? this.wnd.WebSocket || this.wnd.webkitWebSocket || this.wnd.mozWebSocket
15
+ : ws_1.default;
16
+ this.server = null;
17
+ this._connections = {};
18
+ this._activePeers = [];
19
+ this._newPeerId = 1;
20
+ this._clientSockets = {};
21
+ /**
22
+ * Open a connection to a federated server
23
+ * @param url URL of the server (including port)
24
+ * @returns websocket
25
+ */
26
+ this.open = function (url) {
27
+ try {
28
+ var wsUrl = url.replace(/^http/, "ws");
29
+ var wss_1 = new _this._wss(wsUrl);
30
+ if (!_this._connections[url]) {
31
+ _this._connections[url] = { tries: 0, peer: wss_1, defer: null };
32
+ }
33
+ wss_1.onclose = function (e) {
34
+ if (_this._activePeers.includes(url)) {
35
+ _this._activePeers.splice(_this._activePeers.indexOf(url), 1);
36
+ }
37
+ _this.reconnect(url);
38
+ };
39
+ wss_1.onerror = function (_error) {
40
+ var _a;
41
+ if (_this._activePeers.includes(url)) {
42
+ _this._activePeers.splice(_this._activePeers.indexOf(url), 1);
43
+ }
44
+ if (((_a = _error === null || _error === void 0 ? void 0 : _error.error) === null || _a === void 0 ? void 0 : _a.code) !== "ETIMEDOUT") {
45
+ _this.reconnect(url);
46
+ }
47
+ };
48
+ wss_1.onopen = function () {
49
+ if (!_this._activePeers.includes(url)) {
50
+ _this._activePeers.push(url);
51
+ }
52
+ // hi peer
53
+ wss_1.send(JSON.stringify({
54
+ type: "ping",
55
+ id: (0, _1.textRandom)(10),
56
+ }));
57
+ };
58
+ wss_1.onmessage = function (msg) {
59
+ if (!msg) {
60
+ return;
61
+ }
62
+ _this.tooldb.clientOnMessage(msg.data.toString(), wss_1);
63
+ };
64
+ return wss_1;
65
+ }
66
+ catch (e) {
67
+ console.warn(e);
68
+ }
69
+ return undefined;
70
+ };
71
+ this.reconnect = function (url) {
72
+ var peer = _this._connections[url];
73
+ if (peer) {
74
+ if (peer.defer) {
75
+ clearTimeout(peer.defer);
76
+ }
77
+ if (peer.tries < _this.options.maxRetries) {
78
+ var defer = function () {
79
+ peer.tries += 1;
80
+ console.warn("Connection to " + url + " retry.");
81
+ _this.open(url);
82
+ };
83
+ peer.defer = setTimeout(defer, _this.options.wait);
84
+ }
85
+ else {
86
+ console.warn("Connection attempts to " + url + " exceeded.");
87
+ if (_this._activePeers.includes(url)) {
88
+ _this._activePeers.splice(_this._activePeers.indexOf(url), 1);
89
+ }
90
+ delete _this._connections[url];
91
+ // There are no more peers to connect!
92
+ if (Object.keys(_this._connections).length === 0) {
93
+ _this._tooldb.onDisconnect();
94
+ }
95
+ }
96
+ }
97
+ else {
98
+ // no peer at url?
99
+ }
100
+ };
101
+ this._tooldb = db;
102
+ this.options = db.options;
103
+ this.options.peers.forEach(function (url) {
104
+ var conn = _this.open(url);
105
+ _this._connections[url] = { tries: 0, peer: conn, defer: null };
106
+ });
107
+ if (this.options.server) {
108
+ this.server = new ws_1.default.Server({ port: this.options.port });
109
+ this.server.on("connection", function (socket) {
110
+ var peerId = _this._newPeerId;
111
+ _this._clientSockets[peerId] = socket;
112
+ _this._newPeerId += 1;
113
+ socket.on("close", function () {
114
+ delete _this._clientSockets[peerId];
115
+ });
116
+ socket.on("error", function () {
117
+ delete _this._clientSockets[peerId];
118
+ });
119
+ socket.on("message", function (message) {
120
+ _this.tooldb.clientOnMessage(message, socket);
121
+ });
122
+ });
123
+ }
124
+ }
125
+ Object.defineProperty(WSS.prototype, "allPeers", {
126
+ get: function () {
127
+ return Object.keys(this._connections).map(_1.getIpFromUrl);
128
+ },
129
+ enumerable: false,
130
+ configurable: true
131
+ });
132
+ Object.defineProperty(WSS.prototype, "activePeers", {
133
+ get: function () {
134
+ return this._activePeers;
135
+ },
136
+ enumerable: false,
137
+ configurable: true
138
+ });
139
+ Object.defineProperty(WSS.prototype, "clientSockets", {
140
+ get: function () {
141
+ return this._clientSockets;
142
+ },
143
+ enumerable: false,
144
+ configurable: true
145
+ });
146
+ WSS.prototype.connectTo = function (url) {
147
+ this.open(url);
148
+ };
149
+ WSS.prototype.send = function (msg, filterUrls) {
150
+ var _this = this;
151
+ if (filterUrls === void 0) { filterUrls = []; }
152
+ var filteredConns = Object.keys(this._connections)
153
+ .filter(function (url) { return !filterUrls.includes((0, _1.getIpFromUrl)(url)); })
154
+ .map(function (url) { return _this._connections[url]; })
155
+ .filter(function (conn) { return conn.peer && conn.peer.readyState === conn.peer.OPEN; });
156
+ // console.log(
157
+ // "Send to ",
158
+ // filteredConns.map((c) => c.peer.url),
159
+ // "but not to",
160
+ // filterUrls
161
+ // );
162
+ filteredConns.forEach(function (conn) {
163
+ conn.peer.send(JSON.stringify(msg));
164
+ });
165
+ };
166
+ Object.defineProperty(WSS.prototype, "tooldb", {
167
+ get: function () {
168
+ return this._tooldb;
169
+ },
170
+ enumerable: false,
171
+ configurable: true
172
+ });
173
+ return WSS;
174
+ }());
175
+ exports.default = WSS;
176
+ //# sourceMappingURL=wss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wss.js","sourceRoot":"","sources":["../src/wss.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "tool-db",
3
- "version": "1.0.22",
3
+ "version": "1.1.1",
4
4
  "private": false,
5
- "description": "A decentralized database model for p2p networks.",
5
+ "description": "A decentralized database model for federated p2p networks.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "scripts": {
@@ -11,39 +11,42 @@
11
11
  "publish": "np",
12
12
  "prepublish": "npm run build",
13
13
  "test": "jest",
14
- "test:watch": "jest --watch ./src"
14
+ "test:watch": "jest --watch ./src",
15
+ "server": "npm run build && node dist/server.js"
15
16
  },
16
17
  "author": "Manuel Etchegaray",
17
18
  "license": "ISC",
18
19
  "dependencies": {
19
20
  "@peculiar/webcrypto": "^1.1.7",
21
+ "automerge": "^1.0.1-preview.4",
20
22
  "axios": "^0.21.1",
21
23
  "babel": "^6.23.0",
22
24
  "buffer": "^6.0.3",
23
25
  "crypto": "^1.0.1",
24
- "gun": "^0.2020.1235",
26
+ "level": "^7.0.0",
25
27
  "lodash": "^4.17.21",
26
- "npm-watch": "^0.11.0"
28
+ "ws": "^7.5.5"
27
29
  },
28
30
  "devDependencies": {
29
- "@types/gun": "^0.9.3",
31
+ "@babel/preset-env": "^7.15.0",
32
+ "@babel/preset-typescript": "^7.15.0",
30
33
  "@types/jest": "^26.0.24",
31
34
  "@types/lodash": "^4.14.172",
32
35
  "@types/node": "^15.0.1",
36
+ "@types/ws": "^7.4.7",
33
37
  "@typescript-eslint/eslint-plugin": "^4.29.1",
34
- "@babel/preset-env": "^7.15.0",
35
- "@babel/preset-typescript": "^7.15.0",
36
- "jest": "^27.0.6",
37
- "typescript": "^4.1.2",
38
- "ts-node": "^10.2.0",
38
+ "npm-watch": "^0.11.0",
39
39
  "eslint": "^7.32.0",
40
40
  "eslint-config-airbnb": "^18.2.1",
41
41
  "eslint-config-prettier": "^8.3.0",
42
42
  "eslint-plugin-import": "^2.23.4",
43
43
  "eslint-plugin-jest": "^24.3.6",
44
44
  "eslint-plugin-prettier": "^3.4.0",
45
+ "jest": "^27.0.6",
45
46
  "np": "^7.5.0",
46
47
  "prettier": "^2.3.2",
48
+ "ts-node": "^10.2.0",
49
+ "typescript": "^4.1.2",
47
50
  "typescript-eslint": "0.0.1-alpha.0"
48
51
  },
49
52
  "watch": {
@@ -1 +0,0 @@
1
- export default function customGun(toolDb: any, _gun?: any): void;
package/dist/customGun.js DELETED
@@ -1,147 +0,0 @@
1
- "use strict";
2
- // @ts-nocheck
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __generator = (this && this.__generator) || function (thisArg, body) {
13
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15
- function verb(n) { return function (v) { return step([n, v]); }; }
16
- function step(op) {
17
- if (f) throw new TypeError("Generator is already executing.");
18
- while (_) try {
19
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20
- if (y = 0, t) op = [op[0] & 2, t.value];
21
- switch (op[0]) {
22
- case 0: case 1: t = op; break;
23
- case 4: _.label++; return { value: op[1], done: false };
24
- case 5: _.label++; y = op[1]; op = [0]; continue;
25
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
26
- default:
27
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31
- if (t[2]) _.ops.pop();
32
- _.trys.pop(); continue;
33
- }
34
- op = body.call(thisArg, _);
35
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37
- }
38
- };
39
- var __importDefault = (this && this.__importDefault) || function (mod) {
40
- return (mod && mod.__esModule) ? mod : { "default": mod };
41
- };
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- var _1 = require(".");
44
- var shared_1 = __importDefault(require("./shared"));
45
- function verification(msg) {
46
- return __awaiter(this, void 0, void 0, function () {
47
- var keys, promises, verifiedList;
48
- var _this = this;
49
- return __generator(this, function (_a) {
50
- switch (_a.label) {
51
- case 0:
52
- if (!msg.put) return [3 /*break*/, 2];
53
- keys = Object.keys(msg.put);
54
- promises = keys.map(function (key) { return __awaiter(_this, void 0, void 0, function () {
55
- var data, toolDb;
56
- var _a;
57
- return __generator(this, function (_b) {
58
- switch (_b.label) {
59
- case 0:
60
- data = {};
61
- if ((_a = msg.put[key]) === null || _a === void 0 ? void 0 : _a.v) {
62
- try {
63
- data = JSON.parse(msg.put[key].v);
64
- }
65
- catch (e) {
66
- //
67
- }
68
- }
69
- toolDb = shared_1.default.toolDb;
70
- return [4 /*yield*/, toolDb.verify(data)];
71
- case 1: return [2 /*return*/, _b.sent()];
72
- }
73
- });
74
- }); });
75
- return [4 /*yield*/, Promise.all(promises).catch(console.error)];
76
- case 1:
77
- verifiedList = _a.sent();
78
- if (verifiedList.filter(function (r) { return r === _1.VerifyResult.Verified; }).length ===
79
- keys.length) {
80
- this.to.next(msg);
81
- // console.log("Verification > OK", msg);
82
- return [2 /*return*/];
83
- }
84
- // console.log("Verification > NOT OK", msg, verifiedList);
85
- return [2 /*return*/];
86
- case 2:
87
- // console.log("Verification > Skipped", msg);
88
- this.to.next(msg);
89
- _a.label = 3;
90
- case 3: return [2 /*return*/];
91
- }
92
- });
93
- });
94
- }
95
- function putCheck(msg) {
96
- return __awaiter(this, void 0, void 0, function () {
97
- var key_1, data_1, toolDb, verify;
98
- return __generator(this, function (_a) {
99
- switch (_a.label) {
100
- case 0:
101
- if (!msg.put) return [3 /*break*/, 2];
102
- key_1 = msg.put["#"];
103
- data_1 = {};
104
- try {
105
- data_1 = JSON.parse(msg.put[":"]);
106
- }
107
- catch (e) {
108
- // console.warn(e);
109
- }
110
- if (!(data_1 && data_1.value)) return [3 /*break*/, 2];
111
- toolDb = shared_1.default.toolDb;
112
- return [4 /*yield*/, toolDb.verify(data_1)];
113
- case 1:
114
- verify = _a.sent();
115
- if (verify !== _1.VerifyResult.Verified) {
116
- return [2 /*return*/];
117
- }
118
- // Check listeners
119
- toolDb._keyListeners.forEach(function (listener) {
120
- if (key_1.startsWith(listener.key)) {
121
- if (listener.timeout)
122
- clearTimeout(listener.timeout);
123
- listener.timeout = setTimeout(function () {
124
- listener.fn(data_1.value);
125
- listener.timeout = null;
126
- }, 250);
127
- }
128
- });
129
- _a.label = 2;
130
- case 2:
131
- this.to.next(msg);
132
- return [2 /*return*/];
133
- }
134
- });
135
- });
136
- }
137
- function customGun(toolDb, _gun) {
138
- if (_gun === void 0) { _gun = undefined; }
139
- (_gun || require("gun")).on("create", function (ctx) {
140
- ctx.on("in", verification);
141
- ctx.on("out", verification);
142
- ctx.on("put", putCheck);
143
- this.to.next(ctx);
144
- });
145
- }
146
- exports.default = customGun;
147
- //# sourceMappingURL=customGun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customGun.js","sourceRoot":"","sources":["../src/customGun.ts"],"names":[],"mappings":"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"}