tool-db 1.2.3 → 1.4.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 (163) hide show
  1. package/.github/workflows/main.yml +1 -1
  2. package/README.md +53 -6
  3. package/custom-test-env.js +28 -0
  4. package/dist/index.d.ts +11 -1
  5. package/dist/index.js +23 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/messageHandlers/handleCrdt.d.ts +2 -0
  8. package/dist/messageHandlers/handleCrdt.js +15 -0
  9. package/dist/messageHandlers/handleCrdt.js.map +1 -0
  10. package/dist/messageHandlers/handleCrdtGet.d.ts +2 -0
  11. package/dist/messageHandlers/handleCrdtGet.js +30 -0
  12. package/dist/messageHandlers/handleCrdtGet.js.map +1 -0
  13. package/dist/messageHandlers/handleCrdtPut.d.ts +2 -0
  14. package/dist/messageHandlers/handleCrdtPut.js +85 -0
  15. package/dist/messageHandlers/handleCrdtPut.js.map +1 -0
  16. package/dist/messageHandlers/handleGet.d.ts +2 -0
  17. package/dist/messageHandlers/handleGet.js +37 -0
  18. package/dist/messageHandlers/handleGet.js.map +1 -0
  19. package/dist/messageHandlers/handleJoin.d.ts +2 -0
  20. package/dist/messageHandlers/handleJoin.js +36 -0
  21. package/dist/messageHandlers/handleJoin.js.map +1 -0
  22. package/dist/messageHandlers/handlePing.d.ts +2 -0
  23. package/dist/messageHandlers/handlePing.js +20 -0
  24. package/dist/messageHandlers/handlePing.js.map +1 -0
  25. package/dist/messageHandlers/handlePong.d.ts +2 -0
  26. package/dist/messageHandlers/handlePong.js +32 -0
  27. package/dist/messageHandlers/handlePong.js.map +1 -0
  28. package/dist/messageHandlers/handlePut.d.ts +2 -0
  29. package/dist/messageHandlers/handlePut.js +61 -0
  30. package/dist/messageHandlers/handlePut.js.map +1 -0
  31. package/dist/messageHandlers/handleQuery.d.ts +2 -0
  32. package/dist/messageHandlers/handleQuery.js +18 -0
  33. package/dist/messageHandlers/handleQuery.js.map +1 -0
  34. package/dist/messageHandlers/handleServers.d.ts +2 -0
  35. package/dist/messageHandlers/handleServers.js +23 -0
  36. package/dist/messageHandlers/handleServers.js.map +1 -0
  37. package/dist/messageHandlers/handleSubscribe.d.ts +2 -0
  38. package/dist/messageHandlers/handleSubscribe.js +62 -0
  39. package/dist/messageHandlers/handleSubscribe.js.map +1 -0
  40. package/dist/toolDbClientOnMessage.d.ts +2 -2
  41. package/dist/toolDbClientOnMessage.js +57 -264
  42. package/dist/toolDbClientOnMessage.js.map +1 -1
  43. package/dist/toolDbCrdtGet.d.ts +9 -0
  44. package/dist/toolDbCrdtGet.js +61 -0
  45. package/dist/toolDbCrdtGet.js.map +1 -0
  46. package/dist/toolDbCrdtPut.js +1 -1
  47. package/dist/toolDbCrdtPut.js.map +1 -1
  48. package/dist/toolDbGet.js +1 -1
  49. package/dist/toolDbGet.js.map +1 -1
  50. package/dist/{wss.d.ts → toolDbNetwork.d.ts} +5 -7
  51. package/dist/{wss.js → toolDbNetwork.js} +106 -73
  52. package/dist/toolDbNetwork.js.map +1 -0
  53. package/dist/toolDbPut.js +1 -1
  54. package/dist/toolDbPut.js.map +1 -1
  55. package/dist/toolDbQueryKeys.js +1 -1
  56. package/dist/toolDbQueryKeys.js.map +1 -1
  57. package/dist/toolDbSignIn.js +2 -2
  58. package/dist/toolDbSignIn.js.map +1 -1
  59. package/dist/toolDbSignUp.js +1 -1
  60. package/dist/toolDbSignUp.js.map +1 -1
  61. package/dist/toolDbSubscribe.js +1 -1
  62. package/dist/toolDbSubscribe.js.map +1 -1
  63. package/dist/toolDbVerificationWrapper.js +1 -1
  64. package/dist/toolDbVerificationWrapper.js.map +1 -1
  65. package/dist/toolDbWebrtc.d.ts +66 -0
  66. package/dist/toolDbWebrtc.js +453 -0
  67. package/dist/toolDbWebrtc.js.map +1 -0
  68. package/dist/tooldb.d.ts +38 -18
  69. package/dist/tooldb.js +127 -47
  70. package/dist/tooldb.js.map +1 -1
  71. package/dist/types/graph.d.ts +4 -0
  72. package/dist/types/message.d.ts +11 -2
  73. package/dist/types/message.js.map +1 -1
  74. package/dist/types/tooldb.d.ts +34 -1
  75. package/dist/types/tooldb.js +19 -0
  76. package/dist/types/tooldb.js.map +1 -1
  77. package/dist/utils/catchReturn.js +1 -1
  78. package/dist/utils/catchReturn.js.map +1 -1
  79. package/dist/utils/crypto/loadSignKeys.d.ts +2 -0
  80. package/dist/utils/crypto/loadSignKeys.js +78 -0
  81. package/dist/utils/crypto/loadSignKeys.js.map +1 -0
  82. package/dist/utils/crypto/saveSignKeys.d.ts +2 -0
  83. package/dist/utils/crypto/saveSignKeys.js +67 -0
  84. package/dist/utils/crypto/saveSignKeys.js.map +1 -0
  85. package/dist/utils/crypto/verifyData.d.ts +1 -1
  86. package/dist/utils/crypto/verifyData.js +3 -2
  87. package/dist/utils/crypto/verifyData.js.map +1 -1
  88. package/dist/utils/getPeerSignature.d.ts +1 -0
  89. package/dist/utils/getPeerSignature.js +9 -0
  90. package/dist/utils/getPeerSignature.js.map +1 -0
  91. package/dist/utils/indexedb.d.ts +2 -6
  92. package/dist/utils/indexedb.js +13 -3
  93. package/dist/utils/indexedb.js.map +1 -1
  94. package/dist/utils/leveldb.d.ts +2 -6
  95. package/dist/utils/leveldb.js +12 -2
  96. package/dist/utils/leveldb.js.map +1 -1
  97. package/dist/utils/randomAnimal.js.map +1 -1
  98. package/dist/utils/signData.d.ts +1 -1
  99. package/dist/utils/signData.js +3 -2
  100. package/dist/utils/signData.js.map +1 -1
  101. package/dist/utils/verifyMessage.js +4 -4
  102. package/dist/utils/verifyMessage.js.map +1 -1
  103. package/dist/utils/verifyPeer.d.ts +2 -0
  104. package/dist/utils/verifyPeer.js +13 -0
  105. package/dist/utils/verifyPeer.js.map +1 -0
  106. package/dist/webrtc/joinWebrtcTorrent.d.ts +3 -0
  107. package/dist/webrtc/joinWebrtcTorrent.js +312 -0
  108. package/dist/webrtc/joinWebrtcTorrent.js.map +1 -0
  109. package/jest.config.ts +2 -1
  110. package/package.json +6 -3
  111. package/pvutils-tests-replacement.js +777 -0
  112. package/test-alice/000236.ldb +0 -0
  113. package/test-alice/000344.ldb +0 -0
  114. package/test-alice/000520.ldb +0 -0
  115. package/test-alice/000522.ldb +0 -0
  116. package/test-alice/000525.ldb +0 -0
  117. package/test-alice/000528.ldb +0 -0
  118. package/test-alice/000529.log +0 -0
  119. package/test-alice/CURRENT +1 -0
  120. package/test-alice/LOCK +0 -0
  121. package/test-alice/LOG +5 -0
  122. package/test-alice/LOG.old +5 -0
  123. package/test-alice/MANIFEST-000527 +0 -0
  124. package/test-bob/000520.ldb +0 -0
  125. package/test-bob/000522.ldb +0 -0
  126. package/test-bob/000525.ldb +0 -0
  127. package/test-bob/000526.log +0 -0
  128. package/test-bob/CURRENT +1 -0
  129. package/test-bob/LOCK +0 -0
  130. package/test-bob/LOG +5 -0
  131. package/test-bob/LOG.old +5 -0
  132. package/test-bob/MANIFEST-000524 +0 -0
  133. package/test-node-a/000524.ldb +0 -0
  134. package/test-node-a/000526.ldb +0 -0
  135. package/test-node-a/000529.ldb +0 -0
  136. package/test-node-a/000532.ldb +0 -0
  137. package/test-node-a/000533.log +0 -0
  138. package/test-node-a/CURRENT +1 -0
  139. package/test-node-a/LOCK +0 -0
  140. package/test-node-a/LOG +5 -0
  141. package/test-node-a/LOG.old +5 -0
  142. package/test-node-a/MANIFEST-000531 +0 -0
  143. package/test-node-b/000524.ldb +0 -0
  144. package/test-node-b/000526.ldb +0 -0
  145. package/test-node-b/000529.ldb +0 -0
  146. package/test-node-b/000532.ldb +0 -0
  147. package/test-node-b/000533.log +0 -0
  148. package/test-node-b/CURRENT +1 -0
  149. package/test-node-b/LOCK +0 -0
  150. package/test-node-b/LOG +5 -0
  151. package/test-node-b/LOG.old +5 -0
  152. package/test-node-b/MANIFEST-000531 +0 -0
  153. package/toolDbLibP2p.ts +206 -0
  154. package/dist/deduplicator.d.ts +0 -19
  155. package/dist/deduplicator.js +0 -60
  156. package/dist/deduplicator.js.map +0 -1
  157. package/dist/utils/getIpFromUrl.d.ts +0 -1
  158. package/dist/utils/getIpFromUrl.js +0 -7
  159. package/dist/utils/getIpFromUrl.js.map +0 -1
  160. package/dist/wss.js.map +0 -1
  161. package/dist/zkp.d.ts +0 -1
  162. package/dist/zkp.js +0 -29
  163. package/dist/zkp.js.map +0 -1
@@ -12,7 +12,7 @@ jobs:
12
12
  name: "Build and test ${{ matrix.os }}"
13
13
  strategy:
14
14
  matrix:
15
- os: [ubuntu-latest, windows-latest, macos-latest]
15
+ os: [ubuntu-latest]
16
16
 
17
17
  steps:
18
18
  - name: "Setup node"
package/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Tool Db
2
2
 
3
- ## WIP
4
-
5
3
  ToolDb is a peer-to-peer model for a decentralized database, inspired by Gun (Mark Nadal): https://gun.eco/
6
4
 
7
5
  Unlike Gun we dont rely on CRDTs as a requirement, but rather make them optional using [automerge](https://github.com/automerge/automerge). In my experience, crdts are great, but having to rely on them for every bit of data was making everything much more complex and unreliable.
@@ -11,8 +9,18 @@ This setup IS NOT a requirement! It is just what I think is the best and most re
11
9
 
12
10
  Since anyone can join a federated server swarm to help growing the network we use cryptography (basic public and private key authenthication and signature validation) to ensure all messages are coming from the real authors of the data that they intend to modify; this way by joining a swarm all peers in it can help validate without even having full data; even a new server peer can help, because all information is stored on each message and we dont rely on any centralized database to fetch users data.
13
11
 
14
- Please check the [chain-swarm](https://github.com/Manuel-777/chain-swarm) repository to see how a federated server swarm would look like, Tool Db only handles the connection and messaging between peers, but it does not have any logic for peer discovery.
15
- We do that using [discovery-channel](https://www.npmjs.com/package/discovery-channel), but you can use any DHT solution you want! Theoretically, even WebRTC between browsers would work.
12
+ Please check the [chain-swarm](https://github.com/Manwe-777/chain-swarm) repository to see how a federated server swarm would look like, Tool Db only handles the connection and messaging between peers, but it does not have any logic for peer discovery.
13
+ We do that using [discovery-channel](https://www.npmjs.com/package/discovery-channel), but you can use any DHT solution you want! even WebRTC between browsers could work.
14
+
15
+ # Future work
16
+
17
+ While the database is currently functioning as expected, there are many things that could be added or improved to make it even better!
18
+
19
+ [ ] Use a common web3 format for users identity, or a more standarized key pair.
20
+ [ ] Allow messages encryption, add methods for Elliptic Curves, shared keys, etc.
21
+ [ ] Allow adding Noise/encryption to connections (probably based on the ECC)
22
+ [ ]
23
+
16
24
 
17
25
  ## Base usage
18
26
  Connect to the selected toolDb peers;
@@ -21,26 +29,65 @@ const client = new ToolDb(options);
21
29
  ```
22
30
 
23
31
  These are the options you can pass to the constructor:
32
+
24
33
  ```
25
34
  {
26
35
  // Database name to use
27
36
  db: string;
37
+
28
38
  // Show debug console logs
29
39
  debug: boolean;
30
- // List of peers to connect to (full URL with port like "http://127.0.0.1:9000")
31
- peers: string[];
40
+
41
+ // Array of peers to connect to, each one in the form of { host: "127.0.0.1", port: 9000 }
42
+ peers: { host: "127.0.0.1", port: 9000 }[];
43
+
32
44
  // Max number of tries when a connection fails
33
45
  maxRetries: number;
46
+
47
+ // How long to wait (max) for a debounced key listener recv
48
+ triggerDebouce: number;
49
+
34
50
  // How long to wait between retries
35
51
  wait: number;
52
+
36
53
  // If you want to force a Proof of Work on all messages, set how much (zero is no POW)
37
54
  pow: number;
55
+
38
56
  // Weter we are a server or not
39
57
  server: boolean;
58
+
59
+ // Our hostname (server only)
60
+ host: string
61
+
40
62
  // Port to listen incoming connections (server only)
41
63
  port: number;
64
+
65
+ // A server instance like Express (server only)
66
+ httpServer: HTTPServer | HTTPSServer | undefined;
67
+
68
+ // Our storage namespace (default is "tooldb")
69
+ storageName: string;
70
+
71
+ // A custom network adapter class
72
+ networkAdapter: typeof ToolDbNetworkAdapter;
73
+
74
+ // A custom storage adapter function
75
+ storageAdapter: ToolDbStorageAdapter;
76
+
77
+ // Our client ID (defaults to a random ID)
78
+ id: string;
79
+
80
+ // The namespace/topic of our app
81
+ topic: string;
82
+
83
+ // Public and private (ECDSA) keys of our client. In the default network adapter these are used to sign
84
+ // our messages as we join and leave the network, and public key should match the client ID.
85
+ publicKey: CryptoKey | undefined;
86
+ privateKey: CryptoKey | undefined;
42
87
  }
43
88
  ```
89
+ Notice you can use your own network and storage modules if you would like to implement custom solutions for peers discovery, connections, storage, etc, the default adapters will work both on nodejs and the browser.
90
+
44
91
 
45
92
  You can create a user, sign in or create a random set of keys for anonymous usage;
46
93
  ```
@@ -0,0 +1,28 @@
1
+ const fs = require("fs");
2
+ const Environment = require("jest-environment-jsdom");
3
+
4
+ /**
5
+ * A custom environment to set the TextEncoder.
6
+ */
7
+ module.exports = class CustomTestEnvironment extends Environment {
8
+ async setup() {
9
+ try {
10
+ fs.copyFileSync(
11
+ "pvutils-tests-replacement.js",
12
+ "node_modules/pvutils/build/utils.js"
13
+ );
14
+ } catch (e) {
15
+ //
16
+ }
17
+
18
+ await super.setup();
19
+ if (typeof this.global.TextEncoder === "undefined") {
20
+ const { TextEncoder } = require("util");
21
+ this.global.TextEncoder = TextEncoder;
22
+ }
23
+ if (typeof this.global.TextDecoder === "undefined") {
24
+ const { TextDecoder } = require("util");
25
+ this.global.TextDecoder = TextDecoder;
26
+ }
27
+ }
28
+ };
package/dist/index.d.ts CHANGED
@@ -18,7 +18,6 @@ export { default as textRandom } from "./utils/textRandom";
18
18
  export { default as toBase64 } from "./utils/toBase64";
19
19
  export { default as uint8ToBase64 } from "./utils/uint8ToBase64";
20
20
  export { default as verifyMessage } from "./utils/verifyMessage";
21
- export { default as getIpFromUrl } from "./utils/getIpFromUrl";
22
21
  export { default as decodeKeyString } from "./utils/crypto/decodeKeyString";
23
22
  export { default as decryptData } from "./utils/crypto/decryptData";
24
23
  export { default as decryptWithPass } from "./utils/crypto/decryptWithPass";
@@ -34,4 +33,15 @@ export { default as importKey } from "./utils/crypto/importKey";
34
33
  export { default as loadKeysComb } from "./utils/crypto/loadKeysComb";
35
34
  export { default as saveKeysComb } from "./utils/crypto/saveKeysComb";
36
35
  export { default as verifyData } from "./utils/crypto/verifyData";
36
+ export { default as toolDbNetwork } from "./toolDbNetwork";
37
+ export { default as toolDbWebrtc } from "./toolDbWebrtc";
38
+ export { default as handleCrdt } from "./messageHandlers/handleCrdt";
39
+ export { default as handleCrdtGet } from "./messageHandlers/handleCrdtGet";
40
+ export { default as handleCrdtPut } from "./messageHandlers/handleCrdtPut";
41
+ export { default as handleGet } from "./messageHandlers/handleGet";
42
+ export { default as handlePing } from "./messageHandlers/handlePing";
43
+ export { default as handlePong } from "./messageHandlers/handlePong";
44
+ export { default as handlePut } from "./messageHandlers/handlePut";
45
+ export { default as handleQuery } from "./messageHandlers/handleQuery";
46
+ export { default as handleSubscribe } from "./messageHandlers/handleSubscribe";
37
47
  export { default as ToolDb } from "./tooldb";
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
14
  };
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ToolDb = exports.verifyData = exports.saveKeysComb = exports.loadKeysComb = exports.importKey = exports.generateKeysComb = exports.generateKeyPair = exports.generateKeyFromPassword = exports.exportKey = exports.encryptWithPass = exports.encryptData = exports.encodeKeyString = exports.deriveSecret = exports.decryptWithPass = exports.decryptData = exports.decodeKeyString = exports.getIpFromUrl = exports.verifyMessage = exports.uint8ToBase64 = exports.toBase64 = exports.textRandom = exports.stringToArrayBuffer = exports.randomAnimal = exports.generateIv = exports.fromBase64 = exports.base64ToUint8 = exports.base64ToBinaryDocument = exports.base64ToBinaryChange = exports.base64ToArrayBuffer = exports.arrayBufferToString = exports.arrayBufferToBase64 = exports.signData = exports.sha256 = exports.sha1 = exports.proofOfWork = void 0;
16
+ exports.ToolDb = exports.handleSubscribe = exports.handleQuery = exports.handlePut = exports.handlePong = exports.handlePing = exports.handleGet = exports.handleCrdtPut = exports.handleCrdtGet = exports.handleCrdt = exports.toolDbWebrtc = exports.toolDbNetwork = exports.verifyData = exports.saveKeysComb = exports.loadKeysComb = exports.importKey = exports.generateKeysComb = exports.generateKeyPair = exports.generateKeyFromPassword = exports.exportKey = exports.encryptWithPass = exports.encryptData = exports.encodeKeyString = exports.deriveSecret = exports.decryptWithPass = exports.decryptData = exports.decodeKeyString = exports.verifyMessage = exports.uint8ToBase64 = exports.toBase64 = exports.textRandom = exports.stringToArrayBuffer = exports.randomAnimal = exports.generateIv = exports.fromBase64 = exports.base64ToUint8 = exports.base64ToBinaryDocument = exports.base64ToBinaryChange = exports.base64ToArrayBuffer = exports.arrayBufferToString = exports.arrayBufferToBase64 = exports.signData = exports.sha256 = exports.sha1 = exports.proofOfWork = void 0;
17
17
  /* eslint-disable no-undef */
18
18
  /* eslint-disable global-require */
19
19
  __exportStar(require("./types/graph"), exports);
@@ -68,8 +68,6 @@ var uint8ToBase64_1 = require("./utils/uint8ToBase64");
68
68
  Object.defineProperty(exports, "uint8ToBase64", { enumerable: true, get: function () { return __importDefault(uint8ToBase64_1).default; } });
69
69
  var verifyMessage_1 = require("./utils/verifyMessage");
70
70
  Object.defineProperty(exports, "verifyMessage", { enumerable: true, get: function () { return __importDefault(verifyMessage_1).default; } });
71
- var getIpFromUrl_1 = require("./utils/getIpFromUrl");
72
- Object.defineProperty(exports, "getIpFromUrl", { enumerable: true, get: function () { return __importDefault(getIpFromUrl_1).default; } });
73
71
  var decodeKeyString_1 = require("./utils/crypto/decodeKeyString");
74
72
  Object.defineProperty(exports, "decodeKeyString", { enumerable: true, get: function () { return __importDefault(decodeKeyString_1).default; } });
75
73
  var decryptData_1 = require("./utils/crypto/decryptData");
@@ -100,6 +98,28 @@ var saveKeysComb_1 = require("./utils/crypto/saveKeysComb");
100
98
  Object.defineProperty(exports, "saveKeysComb", { enumerable: true, get: function () { return __importDefault(saveKeysComb_1).default; } });
101
99
  var verifyData_1 = require("./utils/crypto/verifyData");
102
100
  Object.defineProperty(exports, "verifyData", { enumerable: true, get: function () { return __importDefault(verifyData_1).default; } });
101
+ var toolDbNetwork_1 = require("./toolDbNetwork");
102
+ Object.defineProperty(exports, "toolDbNetwork", { enumerable: true, get: function () { return __importDefault(toolDbNetwork_1).default; } });
103
+ var toolDbWebrtc_1 = require("./toolDbWebrtc");
104
+ Object.defineProperty(exports, "toolDbWebrtc", { enumerable: true, get: function () { return __importDefault(toolDbWebrtc_1).default; } });
105
+ var handleCrdt_1 = require("./messageHandlers/handleCrdt");
106
+ Object.defineProperty(exports, "handleCrdt", { enumerable: true, get: function () { return __importDefault(handleCrdt_1).default; } });
107
+ var handleCrdtGet_1 = require("./messageHandlers/handleCrdtGet");
108
+ Object.defineProperty(exports, "handleCrdtGet", { enumerable: true, get: function () { return __importDefault(handleCrdtGet_1).default; } });
109
+ var handleCrdtPut_1 = require("./messageHandlers/handleCrdtPut");
110
+ Object.defineProperty(exports, "handleCrdtPut", { enumerable: true, get: function () { return __importDefault(handleCrdtPut_1).default; } });
111
+ var handleGet_1 = require("./messageHandlers/handleGet");
112
+ Object.defineProperty(exports, "handleGet", { enumerable: true, get: function () { return __importDefault(handleGet_1).default; } });
113
+ var handlePing_1 = require("./messageHandlers/handlePing");
114
+ Object.defineProperty(exports, "handlePing", { enumerable: true, get: function () { return __importDefault(handlePing_1).default; } });
115
+ var handlePong_1 = require("./messageHandlers/handlePong");
116
+ Object.defineProperty(exports, "handlePong", { enumerable: true, get: function () { return __importDefault(handlePong_1).default; } });
117
+ var handlePut_1 = require("./messageHandlers/handlePut");
118
+ Object.defineProperty(exports, "handlePut", { enumerable: true, get: function () { return __importDefault(handlePut_1).default; } });
119
+ var handleQuery_1 = require("./messageHandlers/handleQuery");
120
+ Object.defineProperty(exports, "handleQuery", { enumerable: true, get: function () { return __importDefault(handleQuery_1).default; } });
121
+ var handleSubscribe_1 = require("./messageHandlers/handleSubscribe");
122
+ Object.defineProperty(exports, "handleSubscribe", { enumerable: true, get: function () { return __importDefault(handleSubscribe_1).default; } });
103
123
  var tooldb_1 = require("./tooldb");
104
124
  Object.defineProperty(exports, "ToolDb", { enumerable: true, get: function () { return __importDefault(tooldb_1).default; } });
105
125
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6BAA6B;AAC7B,mCAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAEhC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAE1D,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IAC/B,MAAM,CAAC,IAAI,GAAG,UAAC,GAAG;QAChB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC;CACH;AAED,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IAC/B,MAAM,CAAC,IAAI,GAAG,UAAC,UAAU;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC;CACH;AAED,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACjC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;CAC7C;AAED,mDAA6D;AAApD,2HAAA,OAAO,OAAe;AAC/B,qCAA+C;AAAtC,6GAAA,OAAO,OAAQ;AACxB,yCAAmD;AAA1C,iHAAA,OAAO,OAAU;AAC1B,6CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAC5B,mEAA6E;AAApE,2IAAA,OAAO,OAAuB;AACvC,mEAA6E;AAApE,2IAAA,OAAO,OAAuB;AACvC,mEAA6E;AAApE,2IAAA,OAAO,OAAuB;AACvC,qEAA+E;AAAtE,6IAAA,OAAO,OAAwB;AACxC,yEAAmF;AAA1E,iJAAA,OAAO,OAA0B;AAC1C,uDAAiE;AAAxD,+HAAA,OAAO,OAAiB;AACjC,iDAA2D;AAAlD,yHAAA,OAAO,OAAc;AAC9B,iDAA2D;AAAlD,yHAAA,OAAO,OAAc;AAC9B,qDAA+D;AAAtD,6HAAA,OAAO,OAAgB;AAChC,mEAA6E;AAApE,2IAAA,OAAO,OAAuB;AACvC,iDAA2D;AAAlD,yHAAA,OAAO,OAAc;AAC9B,6CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAC5B,uDAAiE;AAAxD,+HAAA,OAAO,OAAiB;AACjC,uDAAiE;AAAxD,+HAAA,OAAO,OAAiB;AACjC,qDAA+D;AAAtD,6HAAA,OAAO,OAAgB;AAEhC,kEAA4E;AAAnE,mIAAA,OAAO,OAAmB;AACnC,0DAAoE;AAA3D,2HAAA,OAAO,OAAe;AAC/B,kEAA4E;AAAnE,mIAAA,OAAO,OAAmB;AACnC,4DAAsE;AAA7D,6HAAA,OAAO,OAAgB;AAChC,kEAA4E;AAAnE,mIAAA,OAAO,OAAmB;AACnC,0DAAoE;AAA3D,2HAAA,OAAO,OAAe;AAC/B,kEAA4E;AAAnE,mIAAA,OAAO,OAAmB;AACnC,sDAAgE;AAAvD,uHAAA,OAAO,OAAa;AAC7B,kFAA4F;AAAnF,mJAAA,OAAO,OAA2B;AAC3C,kEAA4E;AAAnE,mIAAA,OAAO,OAAmB;AACnC,oEAA8E;AAArE,qIAAA,OAAO,OAAoB;AACpC,sDAAgE;AAAvD,uHAAA,OAAO,OAAa;AAC7B,4DAAsE;AAA7D,6HAAA,OAAO,OAAgB;AAChC,4DAAsE;AAA7D,6HAAA,OAAO,OAAgB;AAChC,wDAAkE;AAAzD,yHAAA,OAAO,OAAc;AAE9B,mCAA6C;AAApC,iHAAA,OAAO,OAAU"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { CrdtMessage, ToolDb } from "..";
2
+ export default function handleCrdt(this: ToolDb, message: CrdtMessage, remotePeerId: string): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var __1 = require("..");
4
+ function handleCrdt(message, remotePeerId) {
5
+ var key = message.key;
6
+ this.triggerKeyListener(key, message);
7
+ // OOHH THE TYPECAST PAIN
8
+ // This works but the hacking is awful, we need a better solution for storing the crdts
9
+ var savedDoc = (0, __1.base64ToBinaryDocument)(message.doc);
10
+ this.store.put(key + ".crdt", savedDoc, function (err, data) {
11
+ //
12
+ });
13
+ }
14
+ exports.default = handleCrdt;
15
+ //# sourceMappingURL=handleCrdt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCrdt.js","sourceRoot":"","sources":["../../src/messageHandlers/handleCrdt.ts"],"names":[],"mappings":";;AAAA,wBAAiE;AAEjE,SAAwB,UAAU,CAEhC,OAAoB,EACpB,YAAoB;IAEpB,IAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEtC,yBAAyB;IACzB,uFAAuF;IACvF,IAAM,QAAQ,GAAG,IAAA,0BAAsB,EAAC,OAAO,CAAC,GAAG,CAAQ,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,UAAO,EAAE,QAAQ,EAAE,UAAC,GAAG,EAAE,IAAI;QAChD,EAAE;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAdD,6BAcC"}
@@ -0,0 +1,2 @@
1
+ import { CrdtGetMessage, ToolDb } from "..";
2
+ export default function handleCrdtGet(this: ToolDb, message: CrdtGetMessage, remotePeerId: string): void;
@@ -0,0 +1,30 @@
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 automerge_1 = __importDefault(require("automerge"));
7
+ var __1 = require("..");
8
+ function handleCrdtGet(message, remotePeerId) {
9
+ var _this = this;
10
+ this.loadCrdtDocument(message.key, false).then(function (currentDoc) {
11
+ if (currentDoc) {
12
+ var saved = automerge_1.default.save(currentDoc || automerge_1.default.init());
13
+ _this.network.sendToClientId(remotePeerId, {
14
+ type: "crdt",
15
+ id: message.id,
16
+ key: message.key,
17
+ to: [],
18
+ doc: (0, __1.uint8ToBase64)(saved),
19
+ });
20
+ }
21
+ else {
22
+ if (_this.options.debug) {
23
+ console.log("Local key not found, relay", JSON.stringify(message));
24
+ }
25
+ _this.network.sendToAll(message, false, true);
26
+ }
27
+ });
28
+ }
29
+ exports.default = handleCrdtGet;
30
+ //# sourceMappingURL=handleCrdtGet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCrdtGet.js","sourceRoot":"","sources":["../../src/messageHandlers/handleCrdtGet.ts"],"names":[],"mappings":";;;;;AAAA,wDAAkC;AAClC,wBAAwE;AAExE,SAAwB,aAAa,CAEnC,OAAuB,EACvB,YAAoB;IAHtB,iBAsBC;IAjBC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,UAAC,UAAU;QACxD,IAAI,UAAU,EAAE;YACd,IAAM,KAAK,GAAG,mBAAS,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;gBACxC,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,EAAE,EAAE,EAAE;gBACN,GAAG,EAAE,IAAA,iBAAa,EAAC,KAAK,CAAC;aACX,CAAC,CAAC;SACnB;aAAM;YACL,IAAI,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;aACpE;YACD,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9C;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAtBD,gCAsBC"}
@@ -0,0 +1,2 @@
1
+ import { CrdtPutMessage, ToolDb } from "..";
2
+ export default function handleCrdtPut(this: ToolDb, message: CrdtPutMessage, remotePeerId: string): void;
@@ -0,0 +1,85 @@
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 automerge_1 = __importDefault(require("automerge"));
7
+ var __1 = require("..");
8
+ var toolDbVerificationWrapper_1 = __importDefault(require("../toolDbVerificationWrapper"));
9
+ function handleCrdtPut(message, remotePeerId) {
10
+ var _this = this;
11
+ // key = aggregated, final value
12
+ // key.crdt = automerge doc with changes
13
+ // const writeStart = new Date().getTime();
14
+ toolDbVerificationWrapper_1.default.call(this, message).then(function (value) {
15
+ // console.log("CRDT Verification wrapper result: ", value);
16
+ if (value === __1.VerifyResult.Verified) {
17
+ var key_1 = message.k;
18
+ var data = [];
19
+ try {
20
+ data = JSON.parse(message.v);
21
+ }
22
+ catch (e) {
23
+ //
24
+ }
25
+ var changes_1 = data.map(__1.base64ToBinaryChange);
26
+ _this.loadCrdtDocument(key_1).then(function (currentDoc) {
27
+ // if (currentDoc) {
28
+ // console.log(
29
+ // "loaded",
30
+ // key,
31
+ // currentDoc,
32
+ // Automerge.getHistory(currentDoc)
33
+ // );
34
+ // }
35
+ var newDoc = automerge_1.default.init();
36
+ try {
37
+ newDoc = automerge_1.default.applyChanges(currentDoc || automerge_1.default.init(), changes_1)[0];
38
+ }
39
+ catch (e) {
40
+ try {
41
+ newDoc = automerge_1.default.applyChanges(automerge_1.default.init(), changes_1)[0];
42
+ }
43
+ catch (ee) {
44
+ if (_this.options.debug) {
45
+ console.log(ee);
46
+ }
47
+ }
48
+ }
49
+ // if (newDoc) {
50
+ // console.log(
51
+ // "new document changes:",
52
+ // Automerge.getHistory(newDoc),
53
+ // "final: ",
54
+ // newDoc
55
+ // );
56
+ // }
57
+ // persist
58
+ _this.documents[key_1] = newDoc;
59
+ // OOHH THE TYPECAST PAIN
60
+ // This works but the hacking is awful, we need a better solution for storing the crdts
61
+ var savedDoc = automerge_1.default.save(newDoc);
62
+ _this.store.put(key_1 + ".crdt", savedDoc, function (err, data) {
63
+ // const writeEnd = new Date().getTime();
64
+ // console.log("CRDT write: ", (writeEnd - writeStart) / 1000);
65
+ });
66
+ var crdtMessage = {
67
+ type: "crdt",
68
+ key: key_1,
69
+ id: message.id,
70
+ to: [],
71
+ doc: (0, __1.uint8ToBase64)(savedDoc),
72
+ };
73
+ _this.triggerKeyListener(key_1, crdtMessage);
74
+ // relay to other servers
75
+ // !!!
76
+ _this.network.sendToAll(crdtMessage, true);
77
+ });
78
+ }
79
+ else {
80
+ console.log("unverified message", value, message);
81
+ }
82
+ });
83
+ }
84
+ exports.default = handleCrdtPut;
85
+ //# sourceMappingURL=handleCrdtPut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCrdtPut.js","sourceRoot":"","sources":["../../src/messageHandlers/handleCrdtPut.ts"],"names":[],"mappings":";;;;;AAAA,wDAAkC;AAClC,wBAOY;AACZ,2FAAqE;AAErE,SAAwB,aAAa,CAEnC,OAAuB,EACvB,YAAoB;IAHtB,iBAmFC;IA9EC,gCAAgC;IAChC,wCAAwC;IACxC,2CAA2C;IAC3C,mCAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,KAAK;QACvD,4DAA4D;QAC5D,IAAI,KAAK,KAAK,gBAAY,CAAC,QAAQ,EAAE;YACnC,IAAM,KAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI;gBACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC9B;YAAC,OAAO,CAAC,EAAE;gBACV,EAAE;aACH;YACD,IAAM,SAAO,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAoB,CAAC,CAAC;YAE/C,KAAI,CAAC,gBAAgB,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,UAAC,UAAU;gBACzC,oBAAoB;gBACpB,iBAAiB;gBACjB,gBAAgB;gBAChB,WAAW;gBACX,kBAAkB;gBAClB,uCAAuC;gBACvC,OAAO;gBACP,IAAI;gBAEJ,IAAI,MAAM,GAAG,mBAAS,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI;oBACD,MAAM,GAAI,mBAAS,CAAC,YAAY,CAC/B,UAAU,IAAI,mBAAS,CAAC,IAAI,EAAE,EAC9B,SAAO,CACR,GAHM,CAGL;iBACH;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI;wBACD,MAAM,GAAI,mBAAS,CAAC,YAAY,CAAC,mBAAS,CAAC,IAAI,EAAE,EAAE,SAAO,CAAC,GAArD,CAAsD;qBAC9D;oBAAC,OAAO,EAAE,EAAE;wBACX,IAAI,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE;4BACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;yBACjB;qBACF;iBACF;gBAED,gBAAgB;gBAChB,iBAAiB;gBACjB,+BAA+B;gBAC/B,oCAAoC;gBACpC,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,IAAI;gBAEJ,UAAU;gBACV,KAAI,CAAC,SAAS,CAAC,KAAG,CAAC,GAAG,MAAM,CAAC;gBAE7B,yBAAyB;gBACzB,uFAAuF;gBACvF,IAAM,QAAQ,GAAG,mBAAS,CAAC,IAAI,CAAC,MAAM,CAAQ,CAAC;gBAC/C,KAAI,CAAC,KAAK,CAAC,GAAG,CAAI,KAAG,UAAO,EAAE,QAAQ,EAAE,UAAC,GAAG,EAAE,IAAI;oBAChD,yCAAyC;oBACzC,+DAA+D;gBACjE,CAAC,CAAC,CAAC;gBAEH,IAAM,WAAW,GAAgB;oBAC/B,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,KAAG;oBACR,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,EAAE,EAAE,EAAE;oBACN,GAAG,EAAE,IAAA,iBAAa,EAAC,QAAQ,CAAC;iBAC7B,CAAC;gBACF,KAAI,CAAC,kBAAkB,CAAC,KAAG,EAAE,WAAW,CAAC,CAAC;gBAE1C,yBAAyB;gBACzB,MAAM;gBACN,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACnD;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAnFD,gCAmFC"}
@@ -0,0 +1,2 @@
1
+ import { GetMessage, ToolDb } from "..";
2
+ export default function handleGet(this: ToolDb, message: GetMessage, remotePeerId: string): void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ function handleGet(message, remotePeerId) {
15
+ var _this = this;
16
+ this.store.get(message.key, function (err, data) {
17
+ if (data) {
18
+ try {
19
+ // Use the id of the get so the other client knows we are replying
20
+ var oldData = __assign(__assign({ type: "put" }, JSON.parse(data)), { id: message.id });
21
+ _this.network.sendToClientId(remotePeerId, oldData);
22
+ }
23
+ catch (e) {
24
+ // socket.send(data);
25
+ // do nothing
26
+ }
27
+ }
28
+ else {
29
+ if (_this.options.debug) {
30
+ console.log("Local key not found, relay", JSON.stringify(message));
31
+ }
32
+ _this.network.sendToAll(message, false, true);
33
+ }
34
+ });
35
+ }
36
+ exports.default = handleGet;
37
+ //# sourceMappingURL=handleGet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleGet.js","sourceRoot":"","sources":["../../src/messageHandlers/handleGet.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,SAAwB,SAAS,CAE/B,OAAmB,EACnB,YAAoB;IAHtB,iBA0BC;IArBC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAC,GAAG,EAAE,IAAI;QACpC,IAAI,IAAI,EAAE;YACR,IAAI;gBACF,kEAAkE;gBAClE,IAAM,OAAO,GAAG,oBACd,IAAI,EAAE,KAAK,IACR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KACnB,EAAE,EAAE,OAAO,CAAC,EAAE,GACD,CAAC;gBAChB,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;aACpD;YAAC,OAAO,CAAC,EAAE;gBACV,qBAAqB;gBACrB,aAAa;aACd;SACF;aAAM;YACL,IAAI,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;aACpE;YACD,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9C;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA1BD,4BA0BC"}
@@ -0,0 +1,2 @@
1
+ import { JoinMessage, ToolDb } from "..";
2
+ export default function handleJoin(this: ToolDb, message: JoinMessage, remotePeerId: string): void;
@@ -0,0 +1,36 @@
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 verifyPeer_1 = __importDefault(require("../utils/verifyPeer"));
7
+ function handleJoin(message, remotePeerId) {
8
+ var _this = this;
9
+ (0, verifyPeer_1.default)(message.peer).then(function (verified) {
10
+ // Add this peer to our list of peers
11
+ if (verified) {
12
+ var filteredPeers = _this.peers.filter(function (p) { return p.pubkey !== message.peer.pubkey; });
13
+ if (filteredPeers.length === 0 &&
14
+ message.peer.host &&
15
+ message.peer.port) {
16
+ // Add this peer to the list
17
+ _this.peers.push(message.peer);
18
+ // Reply with our servers list
19
+ _this.network.sendToClientId(remotePeerId, {
20
+ type: "servers",
21
+ servers: _this.peers.filter(function (p) { return p.topic === message.peer.topic; }),
22
+ id: message.id,
23
+ });
24
+ // If we are a server ourselves we broadcast this message
25
+ if (_this.options.server) {
26
+ _this.network.sendToAll(message, true);
27
+ }
28
+ }
29
+ }
30
+ else {
31
+ console.warn("Blocked a remote peer from joining; ", message);
32
+ }
33
+ });
34
+ }
35
+ exports.default = handleJoin;
36
+ //# sourceMappingURL=handleJoin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleJoin.js","sourceRoot":"","sources":["../../src/messageHandlers/handleJoin.ts"],"names":[],"mappings":";;;;;AACA,mEAA6C;AAE7C,SAAwB,UAAU,CAEhC,OAAoB,EACpB,YAAoB;IAHtB,iBAkCC;IA7BC,IAAA,oBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;QACrC,qCAAqC;QACrC,IAAI,QAAQ,EAAE;YACZ,IAAM,aAAa,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CACrC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,EAAhC,CAAgC,CACxC,CAAC;YACF,IACE,aAAa,CAAC,MAAM,KAAK,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,IAAI;gBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,EACjB;gBACA,4BAA4B;gBAC5B,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9B,8BAA8B;gBAC9B,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;oBACxC,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,EAA9B,CAA8B,CAAC;oBACjE,EAAE,EAAE,OAAO,CAAC,EAAE;iBACG,CAAC,CAAC;gBAErB,yDAAyD;gBACzD,IAAI,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE;oBACvB,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBACvC;aACF;SACF;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC;SAC/D;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAlCD,6BAkCC"}
@@ -0,0 +1,2 @@
1
+ import { PingMessage, ToolDb } from "..";
2
+ export default function handlePing(this: ToolDb, message: PingMessage, remotePeerId: string): void;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var __1 = require("..");
4
+ function handlePing(message, remotePeerId) {
5
+ this.network.sendToClientId(remotePeerId, {
6
+ type: "pong",
7
+ isServer: this.options.server,
8
+ clientId: this.options.id,
9
+ to: [],
10
+ id: message.id,
11
+ });
12
+ this.network.sendToClientId(remotePeerId, {
13
+ type: "servers",
14
+ servers: this.peers,
15
+ to: [],
16
+ id: (0, __1.textRandom)(10),
17
+ });
18
+ }
19
+ exports.default = handlePing;
20
+ //# sourceMappingURL=handlePing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlePing.js","sourceRoot":"","sources":["../../src/messageHandlers/handlePing.ts"],"names":[],"mappings":";;AAAA,wBAMY;AAEZ,SAAwB,UAAU,CAEhC,OAAoB,EACpB,YAAoB;IAEpB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;QACxC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;QACzB,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,OAAO,CAAC,EAAE;KACA,CAAC,CAAC;IAElB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,IAAA,cAAU,EAAC,EAAE,CAAC;KACD,CAAC,CAAC;AACvB,CAAC;AAnBD,6BAmBC"}
@@ -0,0 +1,2 @@
1
+ import { PongMessage, ToolDb } from "..";
2
+ export default function handlePong(this: ToolDb, message: PongMessage, remotePeerId: string): void;
@@ -0,0 +1,32 @@
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 __1 = require("..");
7
+ var getPeerSignature_1 = __importDefault(require("../utils/getPeerSignature"));
8
+ function handlePong(message, remotePeerId) {
9
+ var _this = this;
10
+ this.onConnect();
11
+ if (this.options.server && this.options.privateKey) {
12
+ var timestamp_1 = new Date().getTime();
13
+ (0, getPeerSignature_1.default)(this.options.privateKey, this.options.topic, timestamp_1, this.options.host, this.options.port).then(function (signature) {
14
+ var meAsPeer = {
15
+ topic: _this.options.topic,
16
+ timestamp: timestamp_1,
17
+ host: _this.options.host,
18
+ port: _this.options.port,
19
+ pubkey: _this.options.id,
20
+ sig: signature,
21
+ };
22
+ _this.network.sendToClientId(remotePeerId, {
23
+ type: "join",
24
+ peer: meAsPeer,
25
+ to: [],
26
+ id: (0, __1.textRandom)(10),
27
+ });
28
+ });
29
+ }
30
+ }
31
+ exports.default = handlePong;
32
+ //# sourceMappingURL=handlePong.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlePong.js","sourceRoot":"","sources":["../../src/messageHandlers/handlePong.ts"],"names":[],"mappings":";;;;;AAAA,wBAQY;AAEZ,+EAAyD;AAEzD,SAAwB,UAAU,CAEhC,OAAoB,EACpB,YAAoB;IAHtB,iBAkCC;IA7BC,IAAI,CAAC,SAAS,EAAE,CAAC;IAEjB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QAClD,IAAM,WAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAEvC,IAAA,0BAAgB,EACd,IAAI,CAAC,OAAO,CAAC,UAAU,EACvB,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,WAAS,EACT,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAClB,CAAC,IAAI,CAAC,UAAC,SAAS;YACf,IAAM,QAAQ,GAAS;gBACrB,KAAK,EAAE,KAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,SAAS,EAAE,WAAS;gBACpB,IAAI,EAAE,KAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,KAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,MAAM,EAAE,KAAI,CAAC,OAAO,CAAC,EAAE;gBACvB,GAAG,EAAE,SAAS;aACf,CAAC;YAEF,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;gBACxC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,IAAA,cAAU,EAAC,EAAE,CAAC;aACJ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAlCD,6BAkCC"}
@@ -0,0 +1,2 @@
1
+ import { PutMessage, ToolDb } from "..";
2
+ export default function handlePut(this: ToolDb, message: PutMessage, remotePeerId: string): void;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var __1 = require("..");
18
+ var toolDbVerificationWrapper_1 = __importDefault(require("../toolDbVerificationWrapper"));
19
+ function handlePut(message, remotePeerId) {
20
+ var _this = this;
21
+ toolDbVerificationWrapper_1.default.call(this, message).then(function (value) {
22
+ // console.log("Verification wrapper result: ", value, message.k);
23
+ if (value === __1.VerifyResult.Verified) {
24
+ // relay to other servers !!!
25
+ _this.network.sendToAll(message, true);
26
+ _this.store.get(message.k, function (err, oldData) {
27
+ if (oldData) {
28
+ var parsedOldData = __assign({ type: "put" }, JSON.parse(oldData));
29
+ if (parsedOldData.t < message.t) {
30
+ var key = message.k;
31
+ _this.triggerKeyListener(key, message);
32
+ _this.store.put(message.k, JSON.stringify(message), function (err, data) {
33
+ //
34
+ });
35
+ }
36
+ else {
37
+ var key = message.k;
38
+ _this.triggerKeyListener(key, parsedOldData);
39
+ }
40
+ // } else if (this.options.debug) {
41
+ // console.log(
42
+ // `${message.k} has old data, but its newer. old ${parsedOldData.t} < new ${message.t}`
43
+ // );
44
+ // }
45
+ }
46
+ else {
47
+ var key = message.k;
48
+ _this.triggerKeyListener(key, message);
49
+ _this.store.put(message.k, JSON.stringify(message), function (err, data) {
50
+ //
51
+ });
52
+ }
53
+ });
54
+ }
55
+ else {
56
+ console.warn("unverified message: ", value, message);
57
+ }
58
+ });
59
+ }
60
+ exports.default = handlePut;
61
+ //# sourceMappingURL=handlePut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlePut.js","sourceRoot":"","sources":["../../src/messageHandlers/handlePut.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAsD;AACtD,2FAAqE;AAErE,SAAwB,SAAS,CAE/B,OAAmB,EACnB,YAAoB;IAHtB,iBA4CC;IAvCC,mCAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAC,KAAK;QACvD,kEAAkE;QAClE,IAAI,KAAK,KAAK,gBAAY,CAAC,QAAQ,EAAE;YACnC,6BAA6B;YAC7B,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEtC,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,UAAC,GAAG,EAAE,OAAgB;gBAC9C,IAAI,OAAO,EAAE;oBACX,IAAM,aAAa,cACjB,IAAI,EAAE,KAAK,IACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACvB,CAAC;oBACF,IAAI,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE;wBAC/B,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;wBACtB,KAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;wBACtC,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAC,GAAG,EAAE,IAAI;4BAC3D,EAAE;wBACJ,CAAC,CAAC,CAAC;qBACJ;yBAAM;wBACL,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;wBACtB,KAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;qBAC7C;oBACD,mCAAmC;oBACnC,iBAAiB;oBACjB,4FAA4F;oBAC5F,OAAO;oBACP,IAAI;iBACL;qBAAM;oBACL,IAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;oBACtB,KAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBACtC,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAC,GAAG,EAAE,IAAI;wBAC3D,EAAE;oBACJ,CAAC,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACtD;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA5CD,4BA4CC"}
@@ -0,0 +1,2 @@
1
+ import { QueryMessage, ToolDb } from "..";
2
+ export default function handleQuery(this: ToolDb, message: QueryMessage, remotePeerId: string): void;