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
package/README.md CHANGED
@@ -2,15 +2,45 @@
2
2
 
3
3
  ## WIP
4
4
 
5
- ToolDb is a peer-to-peer model for a decentralized database, built on top of Gun, by Mark Nadal: https://gun.eco/
5
+ ToolDb is a peer-to-peer model for a decentralized database, inspired by Gun (Mark Nadal): https://gun.eco/
6
6
 
7
- Base usage;
7
+ 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.
8
8
 
9
- Initializing;
9
+ We push towards of the concept of federated servers, where we set up a p2p mesh network between any servers who want to join the swarm, and have those servers manage the connection and data sharing between them, while allowing client peers to connect to them to push updates to the database.
10
+ This setup IS NOT a requirement! It is just what I think is the best and most reliable way of creating a p2p network for dApps using both desktop and web compatible technologies. Any peer has the capability of connecting to any other peer trough websockets, and modifiying the code to allow webRtc connections between web peers is absolutely possible.
11
+
12
+ 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
+
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.
16
+
17
+ ## Base usage
18
+ Connect to the selected gun db peers;
10
19
  ```
11
- const client = new ToolChainClient([gunPeers]);
20
+ const client = new ToolChainClient({ peers: [gunPeers] });
21
+ ```
22
+
23
+ These are the options you can pass to the constructor:
24
+ ```
25
+ {
26
+ // Database name to use
27
+ db: string;
28
+ // Show debug console logs
29
+ debug: boolean;
30
+ // List of peers to connect to (full URL with port like "http://127.0.0.1:9000")
31
+ peers: string[];
32
+ // Max number of tries when a connection fails
33
+ maxRetries: number;
34
+ // How long to wait between retries
35
+ wait: number;
36
+ // If you want to force a Proof of Work on all messages, set how much (zero is no POW)
37
+ pow: number;
38
+ // Weter we are a server or not
39
+ server: boolean;
40
+ // Port to listen incoming connections (server only)
41
+ port: number;
42
+ }
12
43
  ```
13
- Connects to the selected gun db peers. These can be normal gun relays or tool-db for a tighter protocol enforcement.
14
44
 
15
45
  You can create a user, sign in or create a random set of keys for anonymous usage;
16
46
  ```
@@ -33,15 +63,19 @@ if (client.user) {
33
63
  }
34
64
  ```
35
65
 
36
-
37
- Simple put and get:
66
+ To PUT and GET:
38
67
  ```
39
68
  client.getData("key", userNamespaced?, timeout?).then();
40
69
  client.putData("key", value, userNamespaced?).then();
70
+ client.putCrdt("key", documentChanges, userNamespaced?).then();
41
71
  ```
42
72
  UserNamespaced will check for the user namespace, so it will transform the key used to ":user.key", This way all peers reading this entry will understand the key belongs to this user and will enforce the verifications required to namespaced entries.
43
73
 
44
- To listen for a value you can set up a listener on a key. Beware the listener will check for all keys *starting with* the supplied key, so for example, if you use "value." as your listener if will execute on every key that starts with "value.". This is useful for checking against a public key or use namespace.
74
+ You can use `client.getUserNamespacedKey(key)` to convert any key to a private namespaced key of the current logged in user.
75
+
76
+ Note the third function (putCrdt); For p2p networks some times you want to have conflict resolution on certain documents, to do this we use [automerge](https://github.com/automerge/automerge). Please take a look at it to know how it works in detail! The only thing you need to know on Tool Db is that you have to send an `Automerge.BinaryChange[]` (you get it using `Automerge.change()`). The recieving peer will process the changes, compare it to its stored documents and generate a new document with JSON CRDT applied to it, then relay the final document back to you.
77
+
78
+ To listen for a value changes you can set up a listener on a key. Beware the listener will check for all keys *starting with* the supplied key, so for example, if you use "value." as your listener if will execute on every key that starts with "value.". This is useful for checking against a public key or namespace.
45
79
  ```
46
80
  const listenerId = client.addKeyListener("value", console.log);
47
81
  client.removeKeyListener(listenerId);
@@ -63,4 +97,32 @@ const validatorId = client.addCustomVerification("value", validateFn);
63
97
  client.removeCustomVerification(validatorId);
64
98
  ```
65
99
 
66
- Keep in mind validators should run on all client nodes, and even though the nodes not running your validator will be able to store and relay invalid messages its up to each client and peer to check these messages on arrival. ToolDb does this automatically when using the custom validation, but its important to make sure every peer runs the same code to avoid issues.
100
+ Keep in mind custom validators should run on all client and server nodes, and even though the nodes not running your validator will be able to store and relay invalid messages its up to each peer to check these messages on arrival. ToolDb does this automatically when using the custom validation, but its important to make sure every peer runs the same code to avoid tampered messages flowing in the network.
101
+
102
+ Some times you want to subscribe to the changes made on a certain key, this is possible via subscribeData;
103
+ ```
104
+ client.subscribeData("key", userNamespaced?);
105
+ ```
106
+
107
+ This will relay back to you all Put and CrdtPut messages on that key.
108
+
109
+ When subscribing to a CRDT document you will need to load the data like so;
110
+ ```
111
+ window.toolDb.addKeyListener("documentKey", handleDocumentKeyCrdt);
112
+ function handleDocumentKeyCrdt(msg) {
113
+ if (msg && msg.type === "crdt") {
114
+ // Load the document from the message (msg.doc)
115
+ const incomingDocument = Automerge.load(
116
+ base64ToBinaryDocument(msg.doc)
117
+ );
118
+
119
+ if (globalData.myCrdtDocument) {
120
+ // Merge the local doc vs the incoming one and store it somewhere locally
121
+ globalData.myCrdtDocument = Automerge.merge(globalData.myCrdtDocument, incomingDocument);
122
+ } else {
123
+ // New document! Just store it
124
+ globalData.myCrdtDocument = incomingDocument;
125
+ }
126
+ }
127
+ }
128
+ ```
@@ -0,0 +1,19 @@
1
+ import { ToolDbMessage } from ".";
2
+ export interface DeduplicatedEntry {
3
+ time: number;
4
+ }
5
+ export interface DupOptions {
6
+ age: number;
7
+ max: number;
8
+ }
9
+ export default class Deduplicator {
10
+ private entries;
11
+ private timeout;
12
+ private now;
13
+ private options;
14
+ constructor(opt?: Partial<DupOptions>);
15
+ getEntry(id: string): DeduplicatedEntry;
16
+ check: (id: string) => false | DeduplicatedEntry;
17
+ add: (id: string, _entry: ToolDbMessage) => void;
18
+ drop: (age: number) => void;
19
+ }
@@ -0,0 +1,60 @@
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
+ var Deduplicator = /** @class */ (function () {
15
+ function Deduplicator(opt) {
16
+ var _this = this;
17
+ if (opt === void 0) { opt = {}; }
18
+ this.entries = {};
19
+ this.timeout = null;
20
+ this.now = +new Date();
21
+ this.options = { max: 999, age: 1000 * 9 };
22
+ this.check = function (id) {
23
+ if (!_this.entries[id]) {
24
+ return false;
25
+ }
26
+ return _this.getEntry(id);
27
+ };
28
+ this.add = function (id, _entry) {
29
+ _this.entries[id] = {
30
+ time: (_this.now = +new Date()),
31
+ };
32
+ };
33
+ this.drop = function (age) {
34
+ _this.timeout = null;
35
+ _this.now = +new Date();
36
+ Object.keys(_this.entries).forEach(function (_id) {
37
+ var it = _this.entries[_id];
38
+ if (it && (age || _this.options.age) > _this.now - it.time) {
39
+ return;
40
+ }
41
+ delete _this.entries[_id];
42
+ });
43
+ };
44
+ this.options = __assign(__assign({}, this.options), opt);
45
+ }
46
+ Deduplicator.prototype.getEntry = function (id) {
47
+ var it = this.entries[id] ||
48
+ (this.entries[id] = {
49
+ time: 0,
50
+ });
51
+ it.time = this.now = +new Date();
52
+ if (!this.timeout) {
53
+ this.timeout = setTimeout(this.drop, this.options.age + 9);
54
+ }
55
+ return it;
56
+ };
57
+ return Deduplicator;
58
+ }());
59
+ exports.default = Deduplicator;
60
+ //# sourceMappingURL=deduplicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplicator.js","sourceRoot":"","sources":["../src/deduplicator.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAWA;IASE,sBAAY,GAA6B;QAAzC,iBAEC;QAFW,oBAAA,EAAA,QAA6B;QARjC,YAAO,GAAsC,EAAE,CAAC;QAEhD,YAAO,GAAkB,IAAI,CAAC;QAE9B,QAAG,GAAW,CAAC,IAAI,IAAI,EAAE,CAAC;QAE1B,YAAO,GAAe,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QAsBnD,UAAK,GAAG,UAAC,EAAU;YACxB,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACrB,OAAO,KAAK,CAAC;aACd;YAED,OAAO,KAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEK,QAAG,GAAG,UAAC,EAAU,EAAE,MAAqB;YAC7C,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;gBACjB,IAAI,EAAE,CAAC,KAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;aAC/B,CAAC;QACJ,CAAC,CAAC;QAEK,SAAI,GAAG,UAAC,GAAW;YACxB,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,KAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAEvB,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;gBACpC,IAAM,EAAE,GAAG,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE7B,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE;oBACxD,OAAO;iBACR;gBACD,OAAO,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QA7CA,IAAI,CAAC,OAAO,yBAAQ,IAAI,CAAC,OAAO,GAAK,GAAG,CAAE,CAAC;IAC7C,CAAC;IAED,+BAAQ,GAAR,UAAS,EAAU;QACjB,IAAM,EAAE,GACN,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;gBAClB,IAAI,EAAE,CAAC;aACR,CAAC,CAAC;QAEL,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;SAC5D;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IA6BH,mBAAC;AAAD,CAAC,AAxDD,IAwDC"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,8 @@ export { default as signData } from "./utils/signData";
7
7
  export { default as arrayBufferToBase64 } from "./utils/arrayBufferToBase64";
8
8
  export { default as arrayBufferToString } from "./utils/arrayBufferToString";
9
9
  export { default as base64ToArrayBuffer } from "./utils/base64ToArrayBuffer";
10
+ export { default as base64ToBinaryChange } from "./utils/base64ToBinaryChange";
11
+ export { default as base64ToBinaryDocument } from "./utils/base64ToBinaryDocument";
10
12
  export { default as base64ToUint8 } from "./utils/base64ToUint8";
11
13
  export { default as fromBase64 } from "./utils/fromBase64";
12
14
  export { default as generateIv } from "./utils/generateIv";
@@ -16,6 +18,7 @@ export { default as textRandom } from "./utils/textRandom";
16
18
  export { default as toBase64 } from "./utils/toBase64";
17
19
  export { default as uint8ToBase64 } from "./utils/uint8ToBase64";
18
20
  export { default as verifyMessage } from "./utils/verifyMessage";
21
+ export { default as getIpFromUrl } from "./utils/getIpFromUrl";
19
22
  export { default as decodeKeyString } from "./utils/crypto/decodeKeyString";
20
23
  export { default as decryptData } from "./utils/crypto/decryptData";
21
24
  export { default as decryptWithPass } from "./utils/crypto/decryptWithPass";
@@ -31,5 +34,4 @@ export { default as importKey } from "./utils/crypto/importKey";
31
34
  export { default as loadKeysComb } from "./utils/crypto/loadKeysComb";
32
35
  export { default as saveKeysComb } from "./utils/crypto/saveKeysComb";
33
36
  export { default as verifyData } from "./utils/crypto/verifyData";
34
- export { default as customGun } from "./customGun";
35
- export { default as ToolDbClient } from "./toolDbClient";
37
+ 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.ToolDbClient = exports.customGun = 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.base64ToArrayBuffer = exports.arrayBufferToString = exports.arrayBufferToBase64 = exports.signData = exports.sha256 = exports.sha1 = exports.proofOfWork = void 0;
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;
17
17
  /* eslint-disable no-undef */
18
18
  /* eslint-disable global-require */
19
19
  __exportStar(require("./types/graph"), exports);
@@ -46,6 +46,10 @@ var arrayBufferToString_1 = require("./utils/arrayBufferToString");
46
46
  Object.defineProperty(exports, "arrayBufferToString", { enumerable: true, get: function () { return __importDefault(arrayBufferToString_1).default; } });
47
47
  var base64ToArrayBuffer_1 = require("./utils/base64ToArrayBuffer");
48
48
  Object.defineProperty(exports, "base64ToArrayBuffer", { enumerable: true, get: function () { return __importDefault(base64ToArrayBuffer_1).default; } });
49
+ var base64ToBinaryChange_1 = require("./utils/base64ToBinaryChange");
50
+ Object.defineProperty(exports, "base64ToBinaryChange", { enumerable: true, get: function () { return __importDefault(base64ToBinaryChange_1).default; } });
51
+ var base64ToBinaryDocument_1 = require("./utils/base64ToBinaryDocument");
52
+ Object.defineProperty(exports, "base64ToBinaryDocument", { enumerable: true, get: function () { return __importDefault(base64ToBinaryDocument_1).default; } });
49
53
  var base64ToUint8_1 = require("./utils/base64ToUint8");
50
54
  Object.defineProperty(exports, "base64ToUint8", { enumerable: true, get: function () { return __importDefault(base64ToUint8_1).default; } });
51
55
  var fromBase64_1 = require("./utils/fromBase64");
@@ -64,6 +68,8 @@ var uint8ToBase64_1 = require("./utils/uint8ToBase64");
64
68
  Object.defineProperty(exports, "uint8ToBase64", { enumerable: true, get: function () { return __importDefault(uint8ToBase64_1).default; } });
65
69
  var verifyMessage_1 = require("./utils/verifyMessage");
66
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; } });
67
73
  var decodeKeyString_1 = require("./utils/crypto/decodeKeyString");
68
74
  Object.defineProperty(exports, "decodeKeyString", { enumerable: true, get: function () { return __importDefault(decodeKeyString_1).default; } });
69
75
  var decryptData_1 = require("./utils/crypto/decryptData");
@@ -94,8 +100,6 @@ var saveKeysComb_1 = require("./utils/crypto/saveKeysComb");
94
100
  Object.defineProperty(exports, "saveKeysComb", { enumerable: true, get: function () { return __importDefault(saveKeysComb_1).default; } });
95
101
  var verifyData_1 = require("./utils/crypto/verifyData");
96
102
  Object.defineProperty(exports, "verifyData", { enumerable: true, get: function () { return __importDefault(verifyData_1).default; } });
97
- var customGun_1 = require("./customGun");
98
- Object.defineProperty(exports, "customGun", { enumerable: true, get: function () { return __importDefault(customGun_1).default; } });
99
- var toolDbClient_1 = require("./toolDbClient");
100
- Object.defineProperty(exports, "ToolDbClient", { enumerable: true, get: function () { return __importDefault(toolDbClient_1).default; } });
103
+ var tooldb_1 = require("./tooldb");
104
+ Object.defineProperty(exports, "ToolDb", { enumerable: true, get: function () { return __importDefault(tooldb_1).default; } });
101
105
  //# 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,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;AAEjC,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,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAE7B,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB"}
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"}
@@ -0,0 +1,3 @@
1
+ import { ToolDb } from ".";
2
+ import Automerge from "automerge";
3
+ export default function loadCrdtDocument(this: ToolDb, key: string, doDefault?: boolean): Promise<Automerge.FreezeObject<any> | null>;
@@ -0,0 +1,43 @@
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
+ function loadCrdtDocument(key, doDefault) {
8
+ var _this = this;
9
+ if (doDefault === void 0) { doDefault = true; }
10
+ return new Promise(function (resolve, reject) {
11
+ if (_this.documents[key]) {
12
+ resolve(_this.documents[key]);
13
+ }
14
+ else {
15
+ _this.store.get(key + ".crdt", function (err, data) {
16
+ var currentDoc = null;
17
+ if (data) {
18
+ // De-serealize stored crdt document
19
+ // console.log("data", typeof data, data);
20
+ var loaded_1 = data;
21
+ if (typeof data === "string") {
22
+ var split = data.split(",");
23
+ loaded_1 = new Uint8Array(split.length);
24
+ split.forEach(function (s, i) {
25
+ loaded_1[i] = parseInt(s);
26
+ });
27
+ }
28
+ currentDoc = automerge_1.default.load(loaded_1);
29
+ // console.log("CRDT LOADED", key, currentDoc);
30
+ }
31
+ else {
32
+ // console.log("CRDT not found for", key);
33
+ if (doDefault) {
34
+ currentDoc = automerge_1.default.init();
35
+ }
36
+ }
37
+ resolve(currentDoc);
38
+ });
39
+ }
40
+ });
41
+ }
42
+ exports.default = loadCrdtDocument;
43
+ //# sourceMappingURL=loadCrdtDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadCrdtDocument.js","sourceRoot":"","sources":["../src/loadCrdtDocument.ts"],"names":[],"mappings":";;;;;AACA,wDAAkC;AAElC,SAAwB,gBAAgB,CAEtC,GAAW,EACX,SAAgB;IAHlB,iBAoCC;IAjCC,0BAAA,EAAA,gBAAgB;IAEhB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAI,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,CAAC,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9B;aAAM;YACL,KAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,UAAO,EAAE,UAAC,GAAG,EAAE,IAAa;gBAC/C,IAAI,UAAU,GAAG,IAAI,CAAC;gBACtB,IAAI,IAAI,EAAE;oBACR,oCAAoC;oBACpC,0CAA0C;oBAC1C,IAAI,QAAM,GAAG,IAAkB,CAAC;oBAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC9B,QAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAEtC,KAAK,CAAC,OAAO,CAAC,UAAC,CAAC,EAAE,CAAC;4BACjB,QAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC1B,CAAC,CAAC,CAAC;qBACJ;oBACD,UAAU,GAAG,mBAAS,CAAC,IAAI,CAAC,QAAa,CAAC,CAAC;oBAC3C,+CAA+C;iBAChD;qBAAM;oBACL,0CAA0C;oBAC1C,IAAI,SAAS,EAAE;wBACb,UAAU,GAAG,mBAAS,CAAC,IAAI,EAAE,CAAC;qBAC/B;iBACF;gBAED,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AApCD,mCAoCC"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,12 @@
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 tooldb_1 = __importDefault(require("./tooldb"));
7
+ console.log("Starting server..");
8
+ var server = new tooldb_1.default({
9
+ port: 8080,
10
+ server: true,
11
+ });
12
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAAA,oDAA8B;AAE9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACjC,IAAM,MAAM,GAAG,IAAI,gBAAM,CAAC;IACxB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;CACb,CAAC,CAAC"}
package/dist/shared.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var shared = {
4
- gun: undefined,
5
4
  toolDb: undefined,
6
5
  };
7
6
  exports.default = shared;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":";;AAAA,IAAM,MAAM,GAAG;IACb,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,SAAS;CACX,CAAC;AAET,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":";;AAAA,IAAM,MAAM,GAAG;IACb,MAAM,EAAE,SAAS;CACX,CAAC;AAET,kBAAe,MAAM,CAAC"}
@@ -1,5 +1,5 @@
1
- import ToolDbClient from "./toolDbClient";
2
- export default function toolDbAnonSignIn(this: ToolDbClient): Promise<{
1
+ import ToolDb from "./tooldb";
2
+ export default function toolDbAnonSignIn(this: ToolDb): Promise<{
3
3
  signKeys: CryptoKeyPair;
4
4
  encryptionKeys: CryptoKeyPair;
5
5
  }>;
@@ -0,0 +1,2 @@
1
+ import ToolDb from "./tooldb";
2
+ export default function toolDbClientOnMessage(this: ToolDb, data: string, socket: any): void;
@@ -0,0 +1,204 @@
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
+ var automerge_1 = __importDefault(require("automerge"));
20
+ var base64ToBinaryChange_1 = __importDefault(require("./utils/base64ToBinaryChange"));
21
+ function toolDbClientOnMessage(data, socket // Hm browser websocket types??
22
+ ) {
23
+ var _this = this;
24
+ if (typeof data === "string") {
25
+ var message_1 = JSON.parse(data);
26
+ // console.log("Got message > ", message.type, (message as any).key || "");
27
+ // Check if we are listening for this ID
28
+ if (message_1.id) {
29
+ var msgId = message_1.id;
30
+ if (this._idListeners[msgId]) {
31
+ this._idListeners[msgId](message_1);
32
+ this.removeIdListener(msgId);
33
+ }
34
+ }
35
+ if (message_1.type === "ping") {
36
+ socket.send(JSON.stringify({
37
+ type: "pong",
38
+ id: message_1.id,
39
+ }));
40
+ }
41
+ if (message_1.type === "subscribe") {
42
+ this.addKeyListener(message_1.key, function (msg) {
43
+ if (msg.type === "put" || msg.type === "crdt") {
44
+ socket.send(JSON.stringify(msg));
45
+ }
46
+ });
47
+ // basically the exact same as GET, below
48
+ this.store.get(message_1.key, function (err, data) {
49
+ if (data) {
50
+ try {
51
+ var oldData = __assign(__assign({}, JSON.parse(data)), { id: message_1.id });
52
+ socket.send(JSON.stringify(oldData));
53
+ }
54
+ catch (e) {
55
+ // do nothing
56
+ }
57
+ }
58
+ });
59
+ this.loadCrdtDocument(message_1.key, false).then(function (doc) {
60
+ // console.log("Load crdt from subscribe", message.key, doc);
61
+ if (doc) {
62
+ var savedDoc = automerge_1.default.save(doc);
63
+ // console.log("saved", savedDoc);
64
+ var msg = {
65
+ type: "crdt",
66
+ key: message_1.key,
67
+ id: (0, _1.textRandom)(10),
68
+ doc: (0, _1.uint8ToBase64)(savedDoc),
69
+ };
70
+ socket.send(JSON.stringify(msg));
71
+ }
72
+ });
73
+ }
74
+ if (message_1.type === "get") {
75
+ this.store.get(message_1.key, function (err, data) {
76
+ if (data) {
77
+ try {
78
+ // Use the id of the get so the other client knows we are replying
79
+ var oldData = __assign(__assign({}, JSON.parse(data)), { id: message_1.id });
80
+ socket.send(JSON.stringify(oldData));
81
+ }
82
+ catch (e) {
83
+ // socket.send(data);
84
+ // do nothing
85
+ }
86
+ }
87
+ else {
88
+ Object.values(_this.websockets.clientSockets).forEach(function (socket) {
89
+ socket.send(data);
90
+ });
91
+ }
92
+ });
93
+ }
94
+ if (message_1.type === "put") {
95
+ toolDbVerificationWrapper_1.default.call(this, message_1).then(function (value) {
96
+ if (value === _1.VerifyResult.Verified) {
97
+ // relay to other servers
98
+ _this.websockets.send(message_1, message_1.to);
99
+ _this.store.get(message_1.k, function (err, oldData) {
100
+ if (oldData) {
101
+ var parsedOldData = JSON.parse(oldData);
102
+ if (parsedOldData.t < message_1.t) {
103
+ var key = message_1.k;
104
+ _this.triggerKeyListener(key, message_1);
105
+ _this.store.put(message_1.k, JSON.stringify(message_1), function (err, data) {
106
+ //
107
+ });
108
+ }
109
+ // } else if (this.options.debug) {
110
+ // console.log(
111
+ // `${message.k} has old data, but its newer. old ${parsedOldData.t} < new ${message.t}`
112
+ // );
113
+ // }
114
+ }
115
+ else {
116
+ var key = message_1.k;
117
+ _this.triggerKeyListener(key, message_1);
118
+ _this.store.put(message_1.k, JSON.stringify(message_1), function (err, data) {
119
+ //
120
+ });
121
+ }
122
+ });
123
+ }
124
+ else {
125
+ console.log("unverified message", value, message_1);
126
+ }
127
+ });
128
+ }
129
+ if (message_1.type === "crdtPut") {
130
+ // key = aggregated, final value
131
+ // key.crdt = automerge doc with changes
132
+ var writeStart_1 = new Date().getTime();
133
+ toolDbVerificationWrapper_1.default.call(this, message_1).then(function (value) {
134
+ if (value === _1.VerifyResult.Verified) {
135
+ // relay to other servers
136
+ _this.websockets.send(message_1, message_1.to);
137
+ var key_1 = message_1.k;
138
+ var data_1 = [];
139
+ try {
140
+ data_1 = JSON.parse(message_1.v);
141
+ }
142
+ catch (e) {
143
+ //
144
+ }
145
+ var changes_1 = data_1.map(base64ToBinaryChange_1.default);
146
+ _this.loadCrdtDocument(key_1).then(function (currentDoc) {
147
+ // if (currentDoc) {
148
+ // console.log(
149
+ // "loaded",
150
+ // key,
151
+ // currentDoc,
152
+ // Automerge.getHistory(currentDoc)
153
+ // );
154
+ // }
155
+ var _a = automerge_1.default.applyChanges(currentDoc || automerge_1.default.init(), changes_1), newDoc = _a[0], patch = _a[1];
156
+ // if (newDoc) {
157
+ // console.log(
158
+ // "new document changes:",
159
+ // Automerge.getHistory(newDoc)
160
+ // );
161
+ // }
162
+ // persist
163
+ _this.documents[key_1] = newDoc;
164
+ var savedDoc = automerge_1.default.save(newDoc);
165
+ _this.store.put(key_1 + ".crdt", savedDoc, function (err, data) {
166
+ var writeEnd = new Date().getTime();
167
+ console.log("CRDT write: ", (writeEnd - writeStart_1) / 1000);
168
+ });
169
+ _this.triggerKeyListener(key_1, {
170
+ type: "crdt",
171
+ key: key_1,
172
+ id: message_1.id,
173
+ doc: (0, _1.uint8ToBase64)(savedDoc),
174
+ });
175
+ });
176
+ }
177
+ else {
178
+ console.log("unverified message", value, message_1);
179
+ }
180
+ });
181
+ }
182
+ if (message_1.type === "crdtGet") {
183
+ this.loadCrdtDocument(message_1.key).then(function (currentDoc) {
184
+ var saved = automerge_1.default.save(currentDoc || automerge_1.default.init());
185
+ socket.send(JSON.stringify({
186
+ type: "crdt",
187
+ id: message_1.id,
188
+ key: message_1.key,
189
+ doc: (0, _1.uint8ToBase64)(saved),
190
+ }));
191
+ });
192
+ }
193
+ if (message_1.type === "crdt") {
194
+ var key = message_1.key;
195
+ this.triggerKeyListener(key, message_1);
196
+ var savedDoc = (0, _1.base64ToBinaryDocument)(message_1.doc);
197
+ this.store.put(key + ".crdt", savedDoc, function (err, data) {
198
+ //
199
+ });
200
+ }
201
+ }
202
+ }
203
+ exports.default = toolDbClientOnMessage;
204
+ //# sourceMappingURL=toolDbClientOnMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolDbClientOnMessage.js","sourceRoot":"","sources":["../src/toolDbClientOnMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BinaryChange } from "automerge";
2
+ import { CrdtPutMessage } from ".";
3
+ import ToolDb from "./tooldb";
4
+ /**
5
+ * Triggers a PUT request to other peers.
6
+ * @param key key where we want to put the data at.
7
+ * @param value Data we want to any (any type)
8
+ * @param userNamespaced If this key bolongs to a user or its public. Making it private will enforce validation for our public key and signatures.
9
+ * @returns Promise<Data | null>
10
+ */
11
+ export default function toolDbCrdtPut<T = any>(this: ToolDb, key: string, value: BinaryChange[], userNamespaced?: boolean): Promise<CrdtPutMessage | null>;