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