tool-db 1.2.1 → 1.3.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 (140) hide show
  1. package/README.md +42 -3
  2. package/custom-test-env.js +18 -0
  3. package/dist/index.d.ts +10 -0
  4. package/dist/index.js +21 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/libp2p/create.d.ts +2 -0
  7. package/dist/libp2p/create.js +131 -0
  8. package/dist/libp2p/create.js.map +1 -0
  9. package/dist/libp2p/createLibP2p.d.ts +3 -0
  10. package/dist/libp2p/createLibP2p.js +130 -0
  11. package/dist/libp2p/createLibP2p.js.map +1 -0
  12. package/dist/libp2p/tooldb-protocol.d.ts +19 -0
  13. package/dist/libp2p/tooldb-protocol.js +156 -0
  14. package/dist/libp2p/tooldb-protocol.js.map +1 -0
  15. package/dist/messageHandlers/handleCrdt copy.d.ts +2 -0
  16. package/dist/messageHandlers/handleCrdt copy.js +15 -0
  17. package/dist/messageHandlers/handleCrdt copy.js.map +1 -0
  18. package/dist/messageHandlers/handleCrdt.d.ts +2 -0
  19. package/dist/messageHandlers/handleCrdt.js +15 -0
  20. package/dist/messageHandlers/handleCrdt.js.map +1 -0
  21. package/dist/messageHandlers/handleCrdtGet copy.d.ts +2 -0
  22. package/dist/messageHandlers/handleCrdtGet copy.js +22 -0
  23. package/dist/messageHandlers/handleCrdtGet copy.js.map +1 -0
  24. package/dist/messageHandlers/handleCrdtGet.d.ts +2 -0
  25. package/dist/messageHandlers/handleCrdtGet.js +22 -0
  26. package/dist/messageHandlers/handleCrdtGet.js.map +1 -0
  27. package/dist/messageHandlers/handleCrdtPut copy.d.ts +2 -0
  28. package/dist/messageHandlers/handleCrdtPut copy.js +83 -0
  29. package/dist/messageHandlers/handleCrdtPut copy.js.map +1 -0
  30. package/dist/messageHandlers/handleCrdtPut.d.ts +2 -0
  31. package/dist/messageHandlers/handleCrdtPut.js +83 -0
  32. package/dist/messageHandlers/handleCrdtPut.js.map +1 -0
  33. package/dist/messageHandlers/handleGet copy.d.ts +2 -0
  34. package/dist/messageHandlers/handleGet copy.js +37 -0
  35. package/dist/messageHandlers/handleGet copy.js.map +1 -0
  36. package/dist/messageHandlers/handleGet.d.ts +2 -0
  37. package/dist/messageHandlers/handleGet.js +37 -0
  38. package/dist/messageHandlers/handleGet.js.map +1 -0
  39. package/dist/messageHandlers/handleGetServers.d.ts +2 -0
  40. package/dist/messageHandlers/handleGetServers.js +23 -0
  41. package/dist/messageHandlers/handleGetServers.js.map +1 -0
  42. package/dist/messageHandlers/handleJoin copy.d.ts +2 -0
  43. package/dist/messageHandlers/handleJoin copy.js +37 -0
  44. package/dist/messageHandlers/handleJoin copy.js.map +1 -0
  45. package/dist/messageHandlers/handleJoin.d.ts +2 -0
  46. package/dist/messageHandlers/handleJoin.js +36 -0
  47. package/dist/messageHandlers/handleJoin.js.map +1 -0
  48. package/dist/messageHandlers/handlePing copy.d.ts +2 -0
  49. package/dist/messageHandlers/handlePing copy.js +13 -0
  50. package/dist/messageHandlers/handlePing copy.js.map +1 -0
  51. package/dist/messageHandlers/handlePing.d.ts +2 -0
  52. package/dist/messageHandlers/handlePing.js +20 -0
  53. package/dist/messageHandlers/handlePing.js.map +1 -0
  54. package/dist/messageHandlers/handlePong.d.ts +2 -0
  55. package/dist/messageHandlers/handlePong.js +30 -0
  56. package/dist/messageHandlers/handlePong.js.map +1 -0
  57. package/dist/messageHandlers/handlePut.d.ts +2 -0
  58. package/dist/messageHandlers/handlePut.js +61 -0
  59. package/dist/messageHandlers/handlePut.js.map +1 -0
  60. package/dist/messageHandlers/handleQuery.d.ts +2 -0
  61. package/dist/messageHandlers/handleQuery.js +18 -0
  62. package/dist/messageHandlers/handleQuery.js.map +1 -0
  63. package/dist/messageHandlers/handleServers copy.d.ts +2 -0
  64. package/dist/messageHandlers/handleServers copy.js +23 -0
  65. package/dist/messageHandlers/handleServers copy.js.map +1 -0
  66. package/dist/messageHandlers/handleServers.d.ts +2 -0
  67. package/dist/messageHandlers/handleServers.js +23 -0
  68. package/dist/messageHandlers/handleServers.js.map +1 -0
  69. package/dist/messageHandlers/handleSubscribe.d.ts +2 -0
  70. package/dist/messageHandlers/handleSubscribe.js +62 -0
  71. package/dist/messageHandlers/handleSubscribe.js.map +1 -0
  72. package/dist/metrics/metricsConfig.d.ts +6 -0
  73. package/dist/metrics/metricsConfig.js +35 -0
  74. package/dist/metrics/metricsConfig.js.map +1 -0
  75. package/dist/toolDbClientOnMessage.d.ts +2 -2
  76. package/dist/toolDbClientOnMessage.js +60 -259
  77. package/dist/toolDbClientOnMessage.js.map +1 -1
  78. package/dist/toolDbCrdtPut.js +1 -1
  79. package/dist/toolDbCrdtPut.js.map +1 -1
  80. package/dist/toolDbGet.js +1 -1
  81. package/dist/toolDbGet.js.map +1 -1
  82. package/dist/toolDbLibP2p.d.ts +34 -0
  83. package/dist/toolDbLibP2p.js +375 -0
  84. package/dist/toolDbLibP2p.js.map +1 -0
  85. package/dist/toolDbNetwork.d.ts +33 -0
  86. package/dist/toolDbNetwork.js +277 -0
  87. package/dist/toolDbNetwork.js.map +1 -0
  88. package/dist/toolDbPut.js +1 -1
  89. package/dist/toolDbPut.js.map +1 -1
  90. package/dist/toolDbQueryKeys.js +1 -1
  91. package/dist/toolDbQueryKeys.js.map +1 -1
  92. package/dist/toolDbSignUp.js +1 -1
  93. package/dist/toolDbSignUp.js.map +1 -1
  94. package/dist/toolDbSubscribe.js +1 -1
  95. package/dist/toolDbSubscribe.js.map +1 -1
  96. package/dist/toolDbVerificationWrapper.js +1 -1
  97. package/dist/toolDbVerificationWrapper.js.map +1 -1
  98. package/dist/tooldb.d.ts +29 -11
  99. package/dist/tooldb.js +119 -41
  100. package/dist/tooldb.js.map +1 -1
  101. package/dist/types/message.d.ts +11 -2
  102. package/dist/types/message.js.map +1 -1
  103. package/dist/types/tooldb.d.ts +34 -1
  104. package/dist/types/tooldb.js +19 -0
  105. package/dist/types/tooldb.js.map +1 -1
  106. package/dist/utils/indexedb.d.ts +2 -6
  107. package/dist/utils/indexedb.js +13 -3
  108. package/dist/utils/indexedb.js.map +1 -1
  109. package/dist/utils/leveldb.d.ts +2 -6
  110. package/dist/utils/leveldb.js +12 -2
  111. package/dist/utils/leveldb.js.map +1 -1
  112. package/dist/utils/verifyPeer.d.ts +2 -0
  113. package/dist/utils/verifyPeer.js +13 -0
  114. package/dist/utils/verifyPeer.js.map +1 -0
  115. package/dist/wss.d.ts +1 -1
  116. package/dist/wss.js +5 -5
  117. package/dist/wss.js.map +1 -1
  118. package/jest.config.ts +2 -1
  119. package/package.json +3 -2
  120. package/test-alice/000003.log +0 -0
  121. package/test-alice/CURRENT +1 -0
  122. package/test-alice/LOCK +0 -0
  123. package/test-alice/LOG +1 -0
  124. package/test-alice/MANIFEST-000002 +0 -0
  125. package/test-bob/000003.log +0 -0
  126. package/test-bob/CURRENT +1 -0
  127. package/test-bob/LOCK +0 -0
  128. package/test-bob/LOG +1 -0
  129. package/test-bob/MANIFEST-000002 +0 -0
  130. package/test-node-a/000003.log +0 -0
  131. package/test-node-a/CURRENT +1 -0
  132. package/test-node-a/LOCK +0 -0
  133. package/test-node-a/LOG +1 -0
  134. package/test-node-a/MANIFEST-000002 +0 -0
  135. package/test-node-b/000003.log +0 -0
  136. package/test-node-b/CURRENT +1 -0
  137. package/test-node-b/LOCK +0 -0
  138. package/test-node-b/LOG +1 -0
  139. package/test-node-b/MANIFEST-000002 +0 -0
  140. package/toolDbLibP2p.ts +206 -0
@@ -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;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function handleQuery(message, remotePeerId) {
4
+ var _this = this;
5
+ this.store.query(message.key).then(function (keys) {
6
+ _this.network.sendToClientId(remotePeerId, {
7
+ type: "queryAck",
8
+ id: message.id,
9
+ to: [],
10
+ keys: keys,
11
+ });
12
+ });
13
+ if (this.options.server) {
14
+ this.network.sendToAll(message, true, true);
15
+ }
16
+ }
17
+ exports.default = handleQuery;
18
+ //# sourceMappingURL=handleQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleQuery.js","sourceRoot":"","sources":["../../src/messageHandlers/handleQuery.ts"],"names":[],"mappings":";;AAEA,SAAwB,WAAW,CAEjC,OAAqB,EACrB,YAAoB;IAHtB,iBAiBC;IAZC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI;QACtC,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;YACxC,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,EAAE,EAAE,EAAE;YACN,IAAI,MAAA;SACc,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC7C;AACH,CAAC;AAjBD,8BAiBC"}
@@ -0,0 +1,2 @@
1
+ import { ServersMessage, ToolDb } from "..";
2
+ export default function handleServers(this: ToolDb, message: ServersMessage, remotePeerId: string): void;
@@ -0,0 +1,23 @@
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 handleServers(message, remotePeerId) {
8
+ var _this = this;
9
+ message.servers.forEach(function (peer) {
10
+ (0, verifyPeer_1.default)(peer).then(function (verified) {
11
+ // Add this peer to our list of peers
12
+ if (verified) {
13
+ var filteredPeers = _this.peers.findIndex(function (p) { return p.pubkey === peer.pubkey; });
14
+ if (filteredPeers === -1) {
15
+ // Add this peer to the list
16
+ _this.peers.push(peer);
17
+ }
18
+ }
19
+ });
20
+ });
21
+ }
22
+ exports.default = handleServers;
23
+ //# sourceMappingURL=handleServers%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleServers copy.js","sourceRoot":"","sources":["../../src/messageHandlers/handleServers copy.ts"],"names":[],"mappings":";;;;;AACA,mEAA6C;AAE7C,SAAwB,aAAa,CAEnC,OAAuB,EACvB,YAAoB;IAHtB,iBAmBC;IAdC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,IAAI;QAC3B,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC7B,qCAAqC;YACrC,IAAI,QAAQ,EAAE;gBACZ,IAAM,aAAa,GAAG,KAAI,CAAC,KAAK,CAAC,SAAS,CACxC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAxB,CAAwB,CAChC,CAAC;gBACF,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;oBACxB,4BAA4B;oBAC5B,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvB;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAnBD,gCAmBC"}
@@ -0,0 +1,2 @@
1
+ import { ServersMessage, ToolDb } from "..";
2
+ export default function handleServers(this: ToolDb, message: ServersMessage, remotePeerId: string): void;
@@ -0,0 +1,23 @@
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 handleServers(message, remotePeerId) {
8
+ var _this = this;
9
+ message.servers.forEach(function (peer) {
10
+ (0, verifyPeer_1.default)(peer).then(function (verified) {
11
+ // Add this peer to our list of peers
12
+ if (verified) {
13
+ var filteredPeers = _this.peers.findIndex(function (p) { return p.pubkey === peer.pubkey; });
14
+ if (filteredPeers === -1) {
15
+ // Add this peer to the list
16
+ _this.peers.push(peer);
17
+ }
18
+ }
19
+ });
20
+ });
21
+ }
22
+ exports.default = handleServers;
23
+ //# sourceMappingURL=handleServers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleServers.js","sourceRoot":"","sources":["../../src/messageHandlers/handleServers.ts"],"names":[],"mappings":";;;;;AACA,mEAA6C;AAE7C,SAAwB,aAAa,CAEnC,OAAuB,EACvB,YAAoB;IAHtB,iBAmBC;IAdC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,IAAI;QAC3B,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC7B,qCAAqC;YACrC,IAAI,QAAQ,EAAE;gBACZ,IAAM,aAAa,GAAG,KAAI,CAAC,KAAK,CAAC,SAAS,CACxC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAxB,CAAwB,CAChC,CAAC;gBACF,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;oBACxB,4BAA4B;oBAC5B,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvB;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAnBD,gCAmBC"}
@@ -0,0 +1,2 @@
1
+ import { SubscribeMessage, ToolDb } from "..";
2
+ export default function handleSubscribe(this: ToolDb, message: SubscribeMessage, remotePeerId: string): void;
@@ -0,0 +1,62 @@
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 automerge_1 = __importDefault(require("automerge"));
18
+ var __1 = require("..");
19
+ function handleSubscribe(message, remotePeerId) {
20
+ var _this = this;
21
+ if (remotePeerId) {
22
+ var subId = remotePeerId + "-" + message.key;
23
+ if (!this.subscriptions.includes(subId)) {
24
+ this.subscriptions.push(subId);
25
+ this.addKeyListener(message.key, function (msg) {
26
+ if ((msg.type === "put" || msg.type === "crdt") && remotePeerId) {
27
+ // We do not reply to the socket directly
28
+ // instead we use the client id, in case the socket reconnects
29
+ _this.network.sendToClientId(remotePeerId, msg);
30
+ }
31
+ });
32
+ }
33
+ }
34
+ // basically the exact same as GET, below
35
+ this.store.get(message.key, function (err, data) {
36
+ if (data) {
37
+ try {
38
+ var oldData = __assign(__assign({}, JSON.parse(data)), { id: message.id });
39
+ _this.network.sendToClientId(remotePeerId, oldData);
40
+ }
41
+ catch (e) {
42
+ // do nothing
43
+ }
44
+ }
45
+ });
46
+ this.loadCrdtDocument(message.key, false).then(function (doc) {
47
+ // console.log("Load crdt from subscribe", message.key, doc);
48
+ if (doc) {
49
+ var savedDoc = automerge_1.default.save(doc);
50
+ var msg = {
51
+ type: "crdt",
52
+ key: message.key,
53
+ to: [],
54
+ id: (0, __1.textRandom)(10),
55
+ doc: (0, __1.uint8ToBase64)(savedDoc),
56
+ };
57
+ _this.network.sendToClientId(remotePeerId, msg);
58
+ }
59
+ });
60
+ }
61
+ exports.default = handleSubscribe;
62
+ //# sourceMappingURL=handleSubscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleSubscribe.js","sourceRoot":"","sources":["../../src/messageHandlers/handleSubscribe.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAkC;AAClC,wBAMY;AAEZ,SAAwB,eAAe,CAErC,OAAyB,EACzB,YAAoB;IAHtB,iBA8CC;IAzCC,IAAI,YAAY,EAAE;QAChB,IAAM,KAAK,GAAG,YAAY,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,UAAC,GAAG;gBACnC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;oBAC/D,yCAAyC;oBACzC,8DAA8D;oBAC9D,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;iBAChD;YACH,CAAC,CAAC,CAAC;SACJ;KACF;IAED,yCAAyC;IACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAC,GAAG,EAAE,IAAI;QACpC,IAAI,IAAI,EAAE;YACR,IAAI;gBACF,IAAM,OAAO,yBAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAE,EAAE,EAAE,OAAO,CAAC,EAAE,GAAE,CAAC;gBACxD,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;aACpD;YAAC,OAAO,CAAC,EAAE;gBACV,aAAa;aACd;SACF;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;QACjD,6DAA6D;QAC7D,IAAI,GAAG,EAAE;YACP,IAAM,QAAQ,GAAG,mBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,IAAM,GAAG,GAAgB;gBACvB,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,IAAA,cAAU,EAAC,EAAE,CAAC;gBAClB,GAAG,EAAE,IAAA,iBAAa,EAAC,QAAQ,CAAC;aAC7B,CAAC;YACF,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;SAChD;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA9CD,kCA8CC"}
@@ -0,0 +1,6 @@
1
+ export declare const activeListenersCounter: import("@opentelemetry/api-metrics").UpDownCounter;
2
+ export declare const idListenersCounter: import("@opentelemetry/api-metrics").UpDownCounter;
3
+ export declare const messagesCounter: import("@opentelemetry/api-metrics").Counter;
4
+ export declare const messagesGetCounter: import("@opentelemetry/api-metrics").Counter;
5
+ export declare const messagesPutCounter: import("@opentelemetry/api-metrics").Counter;
6
+ export declare const clientsCounter: import("@opentelemetry/api-metrics").Histogram;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clientsCounter = exports.messagesPutCounter = exports.messagesGetCounter = exports.messagesCounter = exports.idListenersCounter = exports.activeListenersCounter = void 0;
4
+ var exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
5
+ var sdk_metrics_base_1 = require("@opentelemetry/sdk-metrics-base");
6
+ var prometheusPort = exporter_prometheus_1.PrometheusExporter.DEFAULT_OPTIONS.port;
7
+ var prometheusEndpoint = exporter_prometheus_1.PrometheusExporter.DEFAULT_OPTIONS.endpoint;
8
+ var exporter = new exporter_prometheus_1.PrometheusExporter({
9
+ port: 9464,
10
+ }, function () {
11
+ console.log("prometheus scrape endpoint: http://localhost:" + prometheusPort + prometheusEndpoint);
12
+ });
13
+ var meter = new sdk_metrics_base_1.MeterProvider({
14
+ exporter: exporter,
15
+ interval: 1000,
16
+ }).getMeter("tooldb");
17
+ exports.activeListenersCounter = meter.createUpDownCounter("tooldb_active_listeners", {
18
+ description: "Current active listeners count",
19
+ });
20
+ exports.idListenersCounter = meter.createUpDownCounter("tooldb_id_listeners", {
21
+ description: "Current ID listeners count",
22
+ });
23
+ exports.messagesCounter = meter.createCounter("tooldb_messages", {
24
+ description: "Messages counter",
25
+ });
26
+ exports.messagesGetCounter = meter.createCounter("tooldb_get", {
27
+ description: "Messages GET counter",
28
+ });
29
+ exports.messagesPutCounter = meter.createCounter("tooldb_put", {
30
+ description: "Messages PUT counter",
31
+ });
32
+ exports.clientsCounter = meter.createHistogram("tooldb_connected_peers", {
33
+ description: "Current connected clients",
34
+ });
35
+ //# sourceMappingURL=metricsConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metricsConfig.js","sourceRoot":"","sources":["../../src/metrics/metricsConfig.ts"],"names":[],"mappings":";;;AAAA,0EAAwE;AACxE,oEAAgE;AAEhE,IAAM,cAAc,GAAG,wCAAkB,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/D,IAAM,kBAAkB,GAAG,wCAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC;AAEvE,IAAM,QAAQ,GAAG,IAAI,wCAAkB,CACrC;IACE,IAAI,EAAE,IAAI;CACX,EACD;IACE,OAAO,CAAC,GAAG,CACT,kDAAgD,cAAc,GAAG,kBAAoB,CACtF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,IAAM,KAAK,GAAG,IAAI,gCAAa,CAAC;IAC9B,QAAQ,UAAA;IACR,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAET,QAAA,sBAAsB,GAAG,KAAK,CAAC,mBAAmB,CAC7D,yBAAyB,EACzB;IACE,WAAW,EAAE,gCAAgC;CAC9C,CACF,CAAC;AAEW,QAAA,kBAAkB,GAAG,KAAK,CAAC,mBAAmB,CACzD,qBAAqB,EACrB;IACE,WAAW,EAAE,4BAA4B;CAC1C,CACF,CAAC;AAEW,QAAA,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE;IACpE,WAAW,EAAE,kBAAkB;CAChC,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;IAClE,WAAW,EAAE,sBAAsB;CACpC,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;IAClE,WAAW,EAAE,sBAAsB;CACpC,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,wBAAwB,EAAE;IAC5E,WAAW,EAAE,2BAA2B;CACzC,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
+ import { ToolDbMessage } from ".";
1
2
  import ToolDb from "./tooldb";
2
- import { ToolDbWebSocket } from "./wss";
3
- export default function toolDbClientOnMessage(this: ToolDb, data: string, socket: ToolDbWebSocket): void;
3
+ export default function toolDbClientOnMessage(this: ToolDb, message: ToolDbMessage, remotePeerId: string): void;
@@ -1,266 +1,67 @@
1
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
2
  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) {
22
- var _this = this;
23
- var originalData = data;
24
- if (typeof data === "string") {
25
- try {
26
- var message_1 = JSON.parse(data);
27
- console.warn("Got message > ", message_1.type, message_1.k || "", message_1);
28
- // Check if we are listening for this ID
29
- if (message_1.id) {
30
- var msgId = message_1.id;
31
- if (this._idListeners[msgId]) {
32
- this._idListeners[msgId](message_1);
33
- this.removeIdListener(msgId);
34
- }
35
- }
36
- if (message_1.type === "ping") {
37
- socket.toolDbId = message_1.clientId;
38
- this.websockets._clientSockets[message_1.clientId] = socket;
39
- socket.isServer = message_1.isServer;
40
- this.websockets.sendToClientId(socket.toolDbId || "", {
41
- type: "pong",
42
- isServer: this.options.server,
43
- clientId: this.options.id,
44
- to: [],
45
- id: (0, _1.textRandom)(10),
46
- });
47
- }
48
- if (message_1.type === "pong") {
49
- socket.toolDbId = message_1.clientId;
50
- socket.isServer = message_1.isServer;
51
- this.websockets._clientSockets[message_1.clientId] = socket;
52
- this.onConnect();
53
- }
54
- if (message_1.type === "subscribe") {
55
- if (socket.toolDbId) {
56
- var subId = socket.toolDbId + "-" + message_1.key;
57
- if (!this.subscriptions.includes(subId)) {
58
- this.subscriptions.push(subId);
59
- this.addKeyListener(message_1.key, function (msg) {
60
- if ((msg.type === "put" || msg.type === "crdt") &&
61
- socket.toolDbId) {
62
- // We do not reply to the socket directly
63
- // instead we use the client id, in case the socket reconnects
64
- _this.websockets.sendToClientId(socket.toolDbId, msg);
65
- }
66
- });
67
- }
68
- }
69
- // basically the exact same as GET, below
70
- this.store.get(message_1.key, function (err, data) {
71
- if (data) {
72
- try {
73
- var oldData = __assign(__assign({}, JSON.parse(data)), { id: message_1.id });
74
- _this.websockets.sendToClientId(socket.toolDbId || "", oldData);
75
- }
76
- catch (e) {
77
- // do nothing
78
- }
79
- }
80
- });
81
- this.loadCrdtDocument(message_1.key, false).then(function (doc) {
82
- // console.log("Load crdt from subscribe", message.key, doc);
83
- if (doc) {
84
- var savedDoc = automerge_1.default.save(doc);
85
- // console.log("saved", savedDoc);
86
- var msg = {
87
- type: "crdt",
88
- key: message_1.key,
89
- to: [],
90
- id: (0, _1.textRandom)(10),
91
- doc: (0, _1.uint8ToBase64)(savedDoc),
92
- };
93
- _this.websockets.sendToClientId(socket.toolDbId || "", msg);
94
- }
95
- });
96
- }
97
- if (message_1.type === "get") {
98
- this.store.get(message_1.key, function (err, data) {
99
- if (data) {
100
- try {
101
- // Use the id of the get so the other client knows we are replying
102
- var oldData = __assign(__assign({ type: "put" }, JSON.parse(data)), { id: message_1.id });
103
- _this.websockets.sendToClientId(socket.toolDbId || "", oldData);
104
- }
105
- catch (e) {
106
- // socket.send(data);
107
- // do nothing
108
- }
109
- }
110
- else {
111
- if (_this.options.debug) {
112
- console.log("Local key not found, relay", originalData);
113
- }
114
- _this.websockets.send(message_1);
115
- }
116
- });
117
- }
118
- if (message_1.type === "put") {
119
- toolDbVerificationWrapper_1.default.call(this, message_1).then(function (value) {
120
- // console.log("Verification wrapper result: ", value, message.k);
121
- if (value === _1.VerifyResult.Verified) {
122
- // relay to other servers !!!
123
- _this.websockets.send(message_1);
124
- _this.store.get(message_1.k, function (err, oldData) {
125
- if (oldData) {
126
- var parsedOldData = __assign({ type: "put" }, JSON.parse(oldData));
127
- if (parsedOldData.t < message_1.t) {
128
- var key = message_1.k;
129
- _this.triggerKeyListener(key, message_1);
130
- _this.store.put(message_1.k, JSON.stringify(message_1), function (err, data) {
131
- //
132
- });
133
- }
134
- else {
135
- var key = message_1.k;
136
- _this.triggerKeyListener(key, parsedOldData);
137
- }
138
- // } else if (this.options.debug) {
139
- // console.log(
140
- // `${message.k} has old data, but its newer. old ${parsedOldData.t} < new ${message.t}`
141
- // );
142
- // }
143
- }
144
- else {
145
- var key = message_1.k;
146
- _this.triggerKeyListener(key, message_1);
147
- _this.store.put(message_1.k, JSON.stringify(message_1), function (err, data) {
148
- //
149
- });
150
- }
151
- });
152
- }
153
- else {
154
- console.warn("unverified message: ", value, message_1);
155
- }
156
- });
157
- }
158
- if (message_1.type === "crdtPut") {
159
- // key = aggregated, final value
160
- // key.crdt = automerge doc with changes
161
- // const writeStart = new Date().getTime();
162
- toolDbVerificationWrapper_1.default.call(this, message_1).then(function (value) {
163
- // console.log("CRDT Verification wrapper result: ", value);
164
- if (value === _1.VerifyResult.Verified) {
165
- var key_1 = message_1.k;
166
- var data_1 = [];
167
- try {
168
- data_1 = JSON.parse(message_1.v);
169
- }
170
- catch (e) {
171
- //
172
- }
173
- var changes_1 = data_1.map(base64ToBinaryChange_1.default);
174
- _this.loadCrdtDocument(key_1).then(function (currentDoc) {
175
- // if (currentDoc) {
176
- // console.log(
177
- // "loaded",
178
- // key,
179
- // currentDoc,
180
- // Automerge.getHistory(currentDoc)
181
- // );
182
- // }
183
- var newDoc = automerge_1.default.init();
184
- try {
185
- newDoc = automerge_1.default.applyChanges(currentDoc || automerge_1.default.init(), changes_1)[0];
186
- }
187
- catch (e) {
188
- try {
189
- newDoc = automerge_1.default.applyChanges(automerge_1.default.init(), changes_1)[0];
190
- }
191
- catch (ee) {
192
- if (_this.options.debug) {
193
- console.log(ee);
194
- }
195
- }
196
- }
197
- // if (newDoc) {
198
- // console.log(
199
- // "new document changes:",
200
- // Automerge.getHistory(newDoc)
201
- // );
202
- // }
203
- // persist
204
- _this.documents[key_1] = newDoc;
205
- var savedDoc = automerge_1.default.save(newDoc);
206
- _this.store.put(key_1 + ".crdt", savedDoc, function (err, data) {
207
- // const writeEnd = new Date().getTime();
208
- // console.log("CRDT write: ", (writeEnd - writeStart) / 1000);
209
- });
210
- var crdtMessage = {
211
- type: "crdt",
212
- key: key_1,
213
- id: message_1.id,
214
- to: [],
215
- doc: (0, _1.uint8ToBase64)(savedDoc),
216
- };
217
- _this.triggerKeyListener(key_1, crdtMessage);
218
- // relay to other servers
219
- // !!!
220
- _this.websockets.send(crdtMessage);
221
- });
222
- }
223
- else {
224
- console.log("unverified message", value, message_1);
225
- }
226
- });
227
- }
228
- if (message_1.type === "crdtGet") {
229
- this.loadCrdtDocument(message_1.key).then(function (currentDoc) {
230
- var saved = automerge_1.default.save(currentDoc || automerge_1.default.init());
231
- _this.websockets.sendToClientId(socket.toolDbId || "", {
232
- type: "crdt",
233
- id: message_1.id,
234
- key: message_1.key,
235
- to: [],
236
- doc: (0, _1.uint8ToBase64)(saved),
237
- });
238
- });
239
- }
240
- if (message_1.type === "query") {
241
- this.store.query(message_1.key).then(function (keys) {
242
- _this.websockets.sendToClientId(socket.toolDbId || "", {
243
- type: "queryAck",
244
- id: message_1.id,
245
- to: [],
246
- keys: keys,
247
- });
248
- });
249
- }
250
- if (message_1.type === "crdt") {
251
- var key = message_1.key;
252
- this.triggerKeyListener(key, message_1);
253
- var savedDoc = (0, _1.base64ToBinaryDocument)(message_1.doc);
254
- this.store.put(key + ".crdt", savedDoc, function (err, data) {
255
- //
256
- });
257
- }
258
- }
259
- catch (e) {
260
- console.log("Got message ERR > ", data);
261
- console.log(e);
3
+ function toolDbClientOnMessage(message, remotePeerId) {
4
+ if (!this.processedIds[message.type]) {
5
+ this.processedIds[message.type] = [];
6
+ }
7
+ if (this.processedIds[message.type].includes(message.id)) {
8
+ // console.warn(
9
+ // `Already processed this message > ${message.type} from ${remotePeerId}`
10
+ // );
11
+ return;
12
+ }
13
+ this.emit("message", message, remotePeerId);
14
+ this.processedIds[message.type].push(message.id);
15
+ // console.warn(
16
+ // `Got message > ${remotePeerId}`,
17
+ // message.type,
18
+ // (message as any).k || ""
19
+ // // message
20
+ // );
21
+ // console.warn(`Got message ${message.type} from ${remotePeerId}`);
22
+ // Check if we are listening for this ID
23
+ if (message.id) {
24
+ var msgId = message.id;
25
+ if (this._idListeners[msgId]) {
26
+ this._idListeners[msgId](message);
27
+ this.removeIdListener(msgId);
262
28
  }
263
29
  }
30
+ if (message === undefined || message.type === undefined) {
31
+ console.warn("Message is invalid!", message, typeof message);
32
+ return;
33
+ }
34
+ switch (message.type) {
35
+ case "ping":
36
+ this.handlePing(message, remotePeerId);
37
+ break;
38
+ case "pong":
39
+ this.handlePong(message, remotePeerId);
40
+ break;
41
+ case "subscribe":
42
+ this.handleSubscribe(message, remotePeerId);
43
+ break;
44
+ case "get":
45
+ this.handleGet(message, remotePeerId);
46
+ break;
47
+ case "put":
48
+ this.handlePut(message, remotePeerId);
49
+ break;
50
+ case "crdtPut":
51
+ this.handleCrdtPut(message, remotePeerId);
52
+ break;
53
+ case "crdtGet":
54
+ this.handleCrdtGet(message, remotePeerId);
55
+ break;
56
+ case "query":
57
+ this.handleQuery(message, remotePeerId);
58
+ break;
59
+ case "crdt":
60
+ this.handleCrdt(message, remotePeerId);
61
+ break;
62
+ default:
63
+ break;
64
+ }
264
65
  }
265
66
  exports.default = toolDbClientOnMessage;
266
67
  //# sourceMappingURL=toolDbClientOnMessage.js.map