@activeledger/activenetwork 2.15.6 → 4.3.3
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/es/network/cpus.d.ts +1 -0
- package/es/network/cpus.d.ts.map +1 -1
- package/es/network/cpus.js +26 -15
- package/es/network/cpus.js.map +1 -1
- package/es/network/endpoints.d.ts +7 -3
- package/es/network/endpoints.d.ts.map +1 -1
- package/es/network/endpoints.js +685 -172
- package/es/network/endpoints.js.map +1 -1
- package/es/network/home.d.ts.map +1 -1
- package/es/network/home.js +41 -19
- package/es/network/home.js.map +1 -1
- package/es/network/host.d.ts +15 -7
- package/es/network/host.d.ts.map +1 -1
- package/es/network/host.js +631 -240
- package/es/network/host.js.map +1 -1
- package/es/network/locker.d.ts +10 -5
- package/es/network/locker.d.ts.map +1 -1
- package/es/network/locker.js +50 -17
- package/es/network/locker.js.map +1 -1
- package/es/network/maintain.d.ts.map +1 -1
- package/es/network/maintain.js +42 -42
- package/es/network/maintain.js.map +1 -1
- package/es/network/neighbour.d.ts +8 -4
- package/es/network/neighbour.d.ts.map +1 -1
- package/es/network/neighbour.js +82 -18
- package/es/network/neighbour.js.map +1 -1
- package/es/network/neighbourhood.d.ts +1 -1
- package/es/network/neighbourhood.d.ts.map +1 -1
- package/es/network/neighbourhood.js +39 -42
- package/es/network/neighbourhood.js.map +1 -1
- package/es/network/p2pClient.d.ts +20 -0
- package/es/network/p2pClient.d.ts.map +1 -0
- package/es/network/p2pClient.js +84 -0
- package/es/network/p2pClient.js.map +1 -0
- package/es/network/process.js +99 -65
- package/es/network/process.js.map +1 -1
- package/es/network/utils.d.ts.map +1 -1
- package/es/network/utils.js +17 -21
- package/es/network/utils.js.map +1 -1
- package/lib/network/cpus.d.ts +1 -0
- package/lib/network/cpus.d.ts.map +1 -1
- package/lib/network/cpus.js +26 -15
- package/lib/network/cpus.js.map +1 -1
- package/lib/network/endpoints.d.ts +7 -3
- package/lib/network/endpoints.d.ts.map +1 -1
- package/lib/network/endpoints.js +684 -171
- package/lib/network/endpoints.js.map +1 -1
- package/lib/network/home.d.ts.map +1 -1
- package/lib/network/home.js +41 -19
- package/lib/network/home.js.map +1 -1
- package/lib/network/host.d.ts +15 -7
- package/lib/network/host.d.ts.map +1 -1
- package/lib/network/host.js +630 -239
- package/lib/network/host.js.map +1 -1
- package/lib/network/locker.d.ts +10 -5
- package/lib/network/locker.d.ts.map +1 -1
- package/lib/network/locker.js +50 -17
- package/lib/network/locker.js.map +1 -1
- package/lib/network/maintain.d.ts.map +1 -1
- package/lib/network/maintain.js +42 -42
- package/lib/network/maintain.js.map +1 -1
- package/lib/network/neighbour.d.ts +8 -4
- package/lib/network/neighbour.d.ts.map +1 -1
- package/lib/network/neighbour.js +82 -18
- package/lib/network/neighbour.js.map +1 -1
- package/lib/network/neighbourhood.d.ts +1 -1
- package/lib/network/neighbourhood.d.ts.map +1 -1
- package/lib/network/neighbourhood.js +39 -42
- package/lib/network/neighbourhood.js.map +1 -1
- package/lib/network/p2pClient.d.ts +20 -0
- package/lib/network/p2pClient.d.ts.map +1 -0
- package/lib/network/p2pClient.js +88 -0
- package/lib/network/p2pClient.js.map +1 -0
- package/lib/network/process.js +98 -64
- package/lib/network/process.js.map +1 -1
- package/lib/network/utils.d.ts.map +1 -1
- package/lib/network/utils.js +17 -21
- package/lib/network/utils.js.map +1 -1
- package/package.json +10 -8
package/lib/network/neighbour.js
CHANGED
|
@@ -4,15 +4,27 @@ exports.Neighbour = void 0;
|
|
|
4
4
|
const activeoptions_1 = require("@activeledger/activeoptions");
|
|
5
5
|
const activecrypto_1 = require("@activeledger/activecrypto");
|
|
6
6
|
const activelogger_1 = require("@activeledger/activelogger");
|
|
7
|
+
const activeutilities_1 = require("@activeledger/activeutilities");
|
|
7
8
|
const home_1 = require("./home");
|
|
8
9
|
const neighbourhood_1 = require("./neighbourhood");
|
|
10
|
+
const p2pClient_1 = require("./p2pClient");
|
|
9
11
|
class Neighbour {
|
|
12
|
+
host;
|
|
13
|
+
port;
|
|
14
|
+
isHome;
|
|
15
|
+
identity;
|
|
16
|
+
p2pClient;
|
|
17
|
+
reference;
|
|
18
|
+
graceStop = false;
|
|
10
19
|
constructor(host, port, isHome = false, identity) {
|
|
11
20
|
this.host = host;
|
|
12
21
|
this.port = port;
|
|
13
22
|
this.isHome = isHome;
|
|
14
23
|
this.identity = identity;
|
|
15
|
-
|
|
24
|
+
if (activeoptions_1.ActiveOptions.get("p2pStream", false)) {
|
|
25
|
+
this.p2pClient = new p2pClient_1.P2PClient(host, port + 1);
|
|
26
|
+
this.p2pClient.connect();
|
|
27
|
+
}
|
|
16
28
|
this.reference = activecrypto_1.ActiveCrypto.Hash.getHash(host + port + activeoptions_1.ActiveOptions.get("network", ""), "sha1");
|
|
17
29
|
if (neighbourhood_1.Neighbourhood.remapedAddr &&
|
|
18
30
|
neighbourhood_1.Neighbourhood.remapedAddr[this.reference]) {
|
|
@@ -31,17 +43,28 @@ class Neighbour {
|
|
|
31
43
|
}
|
|
32
44
|
return false;
|
|
33
45
|
}
|
|
34
|
-
|
|
46
|
+
bundle = [];
|
|
47
|
+
nextSend;
|
|
48
|
+
async knock(endpoint, params, external, resend, bundle) {
|
|
49
|
+
if (params &&
|
|
50
|
+
!external &&
|
|
51
|
+
this.p2pClient &&
|
|
52
|
+
this.p2pClient.ready &&
|
|
53
|
+
activeoptions_1.ActiveOptions.get("p2pStream", false) &&
|
|
54
|
+
endpoint === 'init') {
|
|
55
|
+
this.p2pClient.send(await activeutilities_1.ActiveClone.serialize(params, { enableCompression: true }), home_1.Home.reference);
|
|
56
|
+
return Promise.resolve({ ok: 1 });
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (endpoint === 'init-legacy') {
|
|
60
|
+
endpoint = 'init';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
35
63
|
if (!params) {
|
|
36
64
|
return new Promise((resolve, reject) => {
|
|
37
|
-
activeoptions_1.ActiveRequest.send(`http://${this.host}:${this.port}/a/${endpoint}`, "GET", ["X-Activeledger:" + home_1.Home.reference])
|
|
38
|
-
.then(
|
|
39
|
-
|
|
40
|
-
})
|
|
41
|
-
.catch((error) => {
|
|
42
|
-
activelogger_1.ActiveLogger.error(error, `${this.host}:${this.port}/${endpoint} - GET Failed`);
|
|
43
|
-
reject(error);
|
|
44
|
-
});
|
|
65
|
+
activeoptions_1.ActiveRequest.send(`http://${this.host}:${this.port}/a/${endpoint}`, "GET", ["X-Activeledger:" + home_1.Home.reference], null, false, 60)
|
|
66
|
+
.then(resolve)
|
|
67
|
+
.catch(reject);
|
|
45
68
|
});
|
|
46
69
|
}
|
|
47
70
|
else {
|
|
@@ -62,18 +85,23 @@ class Neighbour {
|
|
|
62
85
|
$enc: params.$encrypt ? true : false,
|
|
63
86
|
};
|
|
64
87
|
}
|
|
65
|
-
|
|
88
|
+
const sender = (postData, extraHeader) => new Promise((resolve, reject) => {
|
|
66
89
|
let attempt = (attempts) => {
|
|
67
|
-
activeoptions_1.ActiveRequest.send(url, "POST", [
|
|
90
|
+
activeoptions_1.ActiveRequest.send(url, "POST", [
|
|
91
|
+
"X-Activeledger:" + home_1.Home.reference,
|
|
92
|
+
"content-type: application/json",
|
|
93
|
+
extraHeader,
|
|
94
|
+
], postData, activeoptions_1.ActiveOptions.get("gzip", true), 60)
|
|
68
95
|
.then((response) => {
|
|
69
|
-
if (
|
|
70
|
-
response.data
|
|
96
|
+
if (!bundle) {
|
|
97
|
+
if (response.data?.$enc && response.data.$packet) {
|
|
98
|
+
response.data = JSON.parse(Buffer.from(home_1.Home.identity.decrypt(response.data.$packet), "base64").toString());
|
|
99
|
+
}
|
|
100
|
+
resolve(response);
|
|
71
101
|
}
|
|
72
|
-
resolve(response);
|
|
73
102
|
})
|
|
74
103
|
.catch((error) => {
|
|
75
104
|
if (error && error.response && error.response.data) {
|
|
76
|
-
activelogger_1.ActiveLogger.error(error.response.data, `${this.host}:${this.port}/${endpoint} - POST Failed`);
|
|
77
105
|
reject(error.response.data);
|
|
78
106
|
}
|
|
79
107
|
else {
|
|
@@ -85,14 +113,50 @@ class Neighbour {
|
|
|
85
113
|
}
|
|
86
114
|
else {
|
|
87
115
|
activelogger_1.ActiveLogger.fatal(error, `Network Error - ${this.host}:${this.port}/${endpoint}`);
|
|
88
|
-
|
|
89
|
-
|
|
116
|
+
if (extraHeader !== "X-Bundle: 1") {
|
|
117
|
+
reject("Network Communication Error");
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
resolve({ ok: 1 });
|
|
121
|
+
}
|
|
90
122
|
}
|
|
91
123
|
}
|
|
92
124
|
});
|
|
93
125
|
};
|
|
94
126
|
attempt(0);
|
|
95
127
|
});
|
|
128
|
+
if (bundle) {
|
|
129
|
+
this.bundle.push(JSON.stringify(post));
|
|
130
|
+
if (this.bundle.length >= 100) {
|
|
131
|
+
if (this.nextSend) {
|
|
132
|
+
clearTimeout(this.nextSend);
|
|
133
|
+
this.nextSend = null;
|
|
134
|
+
}
|
|
135
|
+
const bundled = Buffer.from(this.bundle.join(":$ALB:"));
|
|
136
|
+
this.bundle = [];
|
|
137
|
+
sender(bundled, "X-Bundle: 1").catch(() => {
|
|
138
|
+
activelogger_1.ActiveLogger.warn("X-Bundle Error");
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
if (!this.nextSend) {
|
|
143
|
+
this.nextSend = setTimeout(() => {
|
|
144
|
+
if (this.bundle.length > 0) {
|
|
145
|
+
this.nextSend = null;
|
|
146
|
+
const bundled = Buffer.from(this.bundle.join(":$ALB:"));
|
|
147
|
+
this.bundle = [];
|
|
148
|
+
sender(bundled, "X-Bundle: 1").catch(() => {
|
|
149
|
+
activelogger_1.ActiveLogger.warn("X-Bundle Error");
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}, 5);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return Promise.resolve();
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return sender(Buffer.from(JSON.stringify(post)), "X-Null: 0");
|
|
159
|
+
}
|
|
96
160
|
}
|
|
97
161
|
}
|
|
98
162
|
encryptKnock(data, encrypted = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbour.js","sourceRoot":"","sources":["../../src/network/neighbour.ts"],"names":[],"mappings":";;;AAuBA,+DAA2E;AAC3E,6DAA0D;AAC1D,6DAA0D;AAE1D,iCAA8B;AAC9B,mDAAgD;
|
|
1
|
+
{"version":3,"file":"neighbour.js","sourceRoot":"","sources":["../../src/network/neighbour.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export declare class Neighbourhood {
|
|
|
23
23
|
get(reference: string): Neighbour;
|
|
24
24
|
get(random: boolean, skip?: Neighbour): Neighbour;
|
|
25
25
|
keys(): string[];
|
|
26
|
-
checkFirewall(remote: string): boolean;
|
|
26
|
+
checkFirewall(remote: string, nodeRef?: string): boolean;
|
|
27
27
|
exists(reference: string): boolean;
|
|
28
28
|
count(): number;
|
|
29
29
|
knockAll(endpoint: string, params?: any, force?: boolean): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbourhood.d.ts","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWxC,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,OAAO,IAAA;IACP,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,MAAM,IAAA;CACP;AAQD,qBAAa,aAAa;IAOxB,OAAO,CAAC,UAAU,CAA0C;IAQ5D,OAAO,CAAC,cAAc,CAAW;IAQjC,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"neighbourhood.d.ts","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWxC,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,OAAO,IAAA;IACP,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,MAAM,IAAA;CACP;AAQD,qBAAa,aAAa;IAOxB,OAAO,CAAC,UAAU,CAA0C;IAQ5D,OAAO,CAAC,cAAc,CAAW;IAQjC,OAAO,CAAC,QAAQ,CAAuC;IAQvD,OAAO,CAAC,MAAM,CAAa;IAQ3B,OAAc,WAAW,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;;IA0CvD,OAAO,CAAC,GAAG;IAwCJ,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;IAkCnC,GAAG,IAAI;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IACzC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IACjC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS;IAkCjD,IAAI,IAAI,MAAM,EAAE;IAahB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBxD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAYlC,KAAK,IAAI,MAAM;IAYf,QAAQ,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,GAAG,EACZ,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,GAAG,CAAC;CAoBhB"}
|
|
@@ -14,19 +14,20 @@ var NeighbourStatus;
|
|
|
14
14
|
NeighbourStatus[NeighbourStatus["Stable"] = 4] = "Stable";
|
|
15
15
|
})(NeighbourStatus = exports.NeighbourStatus || (exports.NeighbourStatus = {}));
|
|
16
16
|
class Neighbourhood {
|
|
17
|
+
neighbours = {};
|
|
18
|
+
neighboursKeys;
|
|
19
|
+
firewall = {};
|
|
20
|
+
houses = 0;
|
|
21
|
+
static remapedAddr;
|
|
17
22
|
constructor() {
|
|
18
|
-
this.neighbours = {};
|
|
19
|
-
this.firewall = {};
|
|
20
|
-
this.houses = 0;
|
|
21
23
|
let neighbourhood = activeoptions_1.ActiveOptions.get("neighbourhood", false);
|
|
22
24
|
if (!Neighbourhood.remapedAddr) {
|
|
23
25
|
Neighbourhood.remapedAddr = activeoptions_1.ActiveOptions.get("neighbourhoodRemap", {});
|
|
24
26
|
}
|
|
25
27
|
if (!neighbourhood)
|
|
26
28
|
throw activelogger_1.ActiveLogger.fatal("Neighbourhood not found inside config");
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.add(new neighbour_1.Neighbour(neighbourhood[i].host, neighbourhood[i].port, false, new activecrypto_1.ActiveCrypto.KeyPair(neighbourhood[i].identity.type, neighbourhood[i].identity.public)));
|
|
29
|
+
for (const neighbour of neighbourhood) {
|
|
30
|
+
this.add(new neighbour_1.Neighbour(neighbour.host, neighbour.port, false, new activecrypto_1.ActiveCrypto.KeyPair(neighbour.identity.type, neighbour.identity.public)));
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
add(neighbour) {
|
|
@@ -36,7 +37,8 @@ class Neighbourhood {
|
|
|
36
37
|
if (!this.neighbours[neighbour[i].reference]) {
|
|
37
38
|
this.neighbours[neighbour[i].reference] = neighbour[i];
|
|
38
39
|
this.houses++;
|
|
39
|
-
this.firewall[neighbour[i].getAddress().host] =
|
|
40
|
+
this.firewall[neighbour[i].getAddress().host] = neighbour[i].reference;
|
|
41
|
+
this.firewall[neighbour[i].reference] = neighbour[i].getAddress().host;
|
|
40
42
|
}
|
|
41
43
|
else {
|
|
42
44
|
this.neighbours[neighbour[i].reference].graceStop = false;
|
|
@@ -47,7 +49,8 @@ class Neighbourhood {
|
|
|
47
49
|
if (!this.neighbours[neighbour.reference]) {
|
|
48
50
|
this.neighbours[neighbour.reference] = neighbour;
|
|
49
51
|
this.houses++;
|
|
50
|
-
this.firewall[neighbour.getAddress().host] =
|
|
52
|
+
this.firewall[neighbour.getAddress().host] = neighbour.reference;
|
|
53
|
+
this.firewall[neighbour.reference] = neighbour.getAddress().host;
|
|
51
54
|
}
|
|
52
55
|
else {
|
|
53
56
|
this.neighbours[neighbour.reference].graceStop = false;
|
|
@@ -57,30 +60,26 @@ class Neighbourhood {
|
|
|
57
60
|
reset(neighbours) {
|
|
58
61
|
activelogger_1.ActiveLogger.debug("Reload Request (Worker Resetting)");
|
|
59
62
|
let keys = this.keys();
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.neighbours[keys[i]].graceStop = true;
|
|
63
|
+
for (const key of keys) {
|
|
64
|
+
this.neighbours[key].graceStop = true;
|
|
63
65
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.add(new neighbour_1.Neighbour(neighbours[i].host, neighbours[i].port, false, new activecrypto_1.ActiveCrypto.KeyPair(neighbours[i].identity.type, neighbours[i].identity.public)));
|
|
66
|
+
for (const neighbour of neighbours) {
|
|
67
|
+
this.add(new neighbour_1.Neighbour(neighbour.host, neighbour.port, false, new activecrypto_1.ActiveCrypto.KeyPair(neighbour.identity.type, neighbour.identity.public)));
|
|
67
68
|
}
|
|
68
69
|
this.neighboursKeys = Object.keys(this.neighbours);
|
|
69
70
|
}
|
|
70
71
|
get(p1, p2) {
|
|
71
72
|
if (p1) {
|
|
72
73
|
if (typeof p1 == "boolean") {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
74
|
+
const keys = this.keys();
|
|
75
|
+
const getRandomNeighbour = () => this.neighbours[keys[(keys.length * Math.random()) << 0]];
|
|
76
|
+
let neighbour = getRandomNeighbour();
|
|
77
|
+
if (p2 && keys.length > 1) {
|
|
78
|
+
while (neighbour.reference === p2.reference) {
|
|
79
|
+
neighbour = getRandomNeighbour();
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
|
-
return
|
|
82
|
+
return neighbour;
|
|
84
83
|
}
|
|
85
84
|
else {
|
|
86
85
|
if (this.neighbours[p1])
|
|
@@ -98,10 +97,15 @@ class Neighbourhood {
|
|
|
98
97
|
}
|
|
99
98
|
return this.neighboursKeys;
|
|
100
99
|
}
|
|
101
|
-
checkFirewall(remote) {
|
|
100
|
+
checkFirewall(remote, nodeRef) {
|
|
102
101
|
if (remote.substr(0, 7) == "::ffff:")
|
|
103
102
|
remote = remote.substr(7);
|
|
104
|
-
|
|
103
|
+
if (nodeRef) {
|
|
104
|
+
return this.firewall[remote] === nodeRef ? true : this.firewall[nodeRef] === remote;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return this.firewall[remote] ? true : false;
|
|
108
|
+
}
|
|
105
109
|
}
|
|
106
110
|
exists(reference) {
|
|
107
111
|
if (this.neighbours[reference]) {
|
|
@@ -113,23 +117,16 @@ class Neighbourhood {
|
|
|
113
117
|
return this.houses;
|
|
114
118
|
}
|
|
115
119
|
knockAll(endpoint, params, force = false) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
})
|
|
127
|
-
.catch((e) => {
|
|
128
|
-
activelogger_1.ActiveLogger.debug(e, "Knock All Single Knock Failure");
|
|
129
|
-
resolve({ error: true });
|
|
130
|
-
});
|
|
131
|
-
}));
|
|
132
|
-
}
|
|
120
|
+
const neighbourKeys = this.keys();
|
|
121
|
+
const knocks = neighbourKeys
|
|
122
|
+
.filter(key => force || this.neighbours[key].isHome)
|
|
123
|
+
.map(key => this.neighbours[key]
|
|
124
|
+
.knock(endpoint, params)
|
|
125
|
+
.then(response => response.data)
|
|
126
|
+
.catch(e => {
|
|
127
|
+
activelogger_1.ActiveLogger.debug(e, `Knock failed for ${key} during knockAll`);
|
|
128
|
+
return { error: true, from: key };
|
|
129
|
+
}));
|
|
133
130
|
return Promise.all(knocks);
|
|
134
131
|
}
|
|
135
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbourhood.js","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":";;;AAuBA,6DAA0D;AAC1D,6DAA0D;AAC1D,+DAA4D;AAC5D,2CAAwC;AAWxC,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,iEAAU,CAAA;IACV,6DAAQ,CAAA;IACR,yDAAM,CAAA;AACR,CAAC,EANW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAM1B;AAQD,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"neighbourhood.js","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":";;;AAuBA,6DAA0D;AAC1D,6DAA0D;AAC1D,+DAA4D;AAC5D,2CAAwC;AAWxC,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,iEAAU,CAAA;IACV,6DAAQ,CAAA;IACR,yDAAM,CAAA;AACR,CAAC,EANW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAM1B;AAQD,MAAa,aAAa;IAOhB,UAAU,GAAuC,EAAE,CAAC;IAQpD,cAAc,CAAW;IAQzB,QAAQ,GAAoC,EAAE,CAAC;IAQ/C,MAAM,GAAW,CAAC,CAAC;IAQpB,MAAM,CAAC,WAAW,CAA8B;IAMvD;QAEE,IAAI,aAAa,GAAe,6BAAa,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAG1E,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,aAAa,CAAC,WAAW,GAAG,6BAAa,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;SACzE;QAID,IAAI,CAAC,aAAa;YAChB,MAAM,2BAAY,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAIpE,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;YACrC,IAAI,CAAC,GAAG,CACN,IAAI,qBAAS,CACX,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,KAAK,EACL,IAAI,2BAAY,CAAC,OAAO,CACtB,SAAS,CAAC,QAAQ,CAAC,IAAI,EACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC1B,CACF,CACF,CAAC;SACH;IACH,CAAC;IASO,GAAG,CAAC,SAAkC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YACzB,OAAO,CAAC,EAAE,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;oBAE5C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,EAAE,CAAC;oBAEd,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAEvE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;iBACxE;qBAAM;oBAEL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;iBAC3D;aACF;SACF;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;gBAEzC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;gBACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBAEd,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;gBAEjE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;aAClE;iBAAM;gBAEL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;aACxD;SACF;IACH,CAAC;IAOM,KAAK,CAAC,UAAsB;QACjC,2BAAY,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAGxD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;SACvC;QAGD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,IAAI,CAAC,GAAG,CACN,IAAI,qBAAS,CACX,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,KAAK,EACL,IAAI,2BAAY,CAAC,OAAO,CACtB,SAAS,CAAC,QAAQ,CAAC,IAAI,EACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAC1B,CACF,CACF,CAAC;SACH;QAGD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAWM,GAAG,CAAC,EAAqB,EAAE,EAAc;QAC9C,IAAI,EAAE,EAAE;YACN,IAAI,OAAO,EAAE,IAAI,SAAS,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzB,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE3F,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBAIrC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,OAAO,SAAS,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,EAAE;wBAC3C,SAAS,GAAG,kBAAkB,EAAE,CAAC;qBAClC;iBACF;gBAID,OAAO,SAAS,CAAC;aAClB;iBAAM;gBACL,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAAE,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;aACb;SACF;aAAM;YACL,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;IACH,CAAC;IAOM,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACpD;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAQM,aAAa,CAAC,MAAc,EAAE,OAAgB;QAEnD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS;YAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE;YACX,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,MAAM,CAAA;SACpF;aAAM;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;SAC5C;IACH,CAAC;IAQM,MAAM,CAAC,SAAiB;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAOM,KAAK;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAUM,QAAQ,CACb,QAAgB,EAChB,MAAY,EACZ,QAAiB,KAAK;QAGtB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAElC,MAAM,MAAM,GAAG,aAAa;aACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;aACnD,GAAG,CAAC,GAAG,CAAC,EAAE,CACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;aACjB,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;aACvB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC/B,KAAK,CAAC,CAAC,CAAC,EAAE;YAET,2BAAY,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC,CAAC,CACL,CAAC;QAGJ,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AA5QD,sCA4QC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { EventEmitter } from "events";
|
|
4
|
+
export declare class P2PClient extends EventEmitter {
|
|
5
|
+
private host;
|
|
6
|
+
private port;
|
|
7
|
+
private socket?;
|
|
8
|
+
private isConnected;
|
|
9
|
+
private hasEverConnected;
|
|
10
|
+
private startTime;
|
|
11
|
+
private chunks;
|
|
12
|
+
private bufferLength;
|
|
13
|
+
private reconnectTimer?;
|
|
14
|
+
constructor(host: string, port: number);
|
|
15
|
+
get ready(): boolean;
|
|
16
|
+
stop(): void;
|
|
17
|
+
connect(): void;
|
|
18
|
+
send(data: Buffer, senderRef: string): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=p2pClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2pClient.d.ts","sourceRoot":"","sources":["../../src/network/p2pClient.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,qBAAa,SAAU,SAAQ,YAAY;IAS7B,OAAO,CAAC,IAAI;IAAU,OAAO,CAAC,IAAI;IAR9C,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAEpB,IAAI,EAAE,MAAM,EAAU,IAAI,EAAE,MAAM;IAItD,IAAW,KAAK,IAAI,OAAO,CAE1B;IAEM,IAAI,IAAI,IAAI;IASZ,OAAO,IAAI,IAAI;IAuDf,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAanD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.P2PClient = void 0;
|
|
4
|
+
const net = require("net");
|
|
5
|
+
const activelogger_1 = require("@activeledger/activelogger");
|
|
6
|
+
const events_1 = require("events");
|
|
7
|
+
const activeutilities_1 = require("@activeledger/activeutilities");
|
|
8
|
+
class P2PClient extends events_1.EventEmitter {
|
|
9
|
+
host;
|
|
10
|
+
port;
|
|
11
|
+
socket;
|
|
12
|
+
isConnected = false;
|
|
13
|
+
hasEverConnected = false;
|
|
14
|
+
startTime = Date.now();
|
|
15
|
+
chunks = [];
|
|
16
|
+
bufferLength = 0;
|
|
17
|
+
reconnectTimer;
|
|
18
|
+
constructor(host, port) {
|
|
19
|
+
super();
|
|
20
|
+
this.host = host;
|
|
21
|
+
this.port = port;
|
|
22
|
+
}
|
|
23
|
+
get ready() {
|
|
24
|
+
return this.isConnected;
|
|
25
|
+
}
|
|
26
|
+
stop() {
|
|
27
|
+
if (this.reconnectTimer) {
|
|
28
|
+
clearTimeout(this.reconnectTimer);
|
|
29
|
+
}
|
|
30
|
+
if (this.socket) {
|
|
31
|
+
this.socket.destroy();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
connect() {
|
|
35
|
+
if (this.isConnected)
|
|
36
|
+
return;
|
|
37
|
+
const gracePeriodPassed = (Date.now() - this.startTime) > (10 * 60 * 1000);
|
|
38
|
+
if (gracePeriodPassed && !this.hasEverConnected) {
|
|
39
|
+
activelogger_1.ActiveLogger.warn(`P2P grace period expired for ${this.host}:${this.port}, disabling P2P.`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.socket = net.createConnection(this.port, this.host);
|
|
43
|
+
this.socket.on("connect", () => {
|
|
44
|
+
this.isConnected = true;
|
|
45
|
+
this.hasEverConnected = true;
|
|
46
|
+
activelogger_1.ActiveLogger.info(`Connected to peer at ${this.host}:${this.port}`);
|
|
47
|
+
});
|
|
48
|
+
this.chunks = [];
|
|
49
|
+
this.bufferLength = 0;
|
|
50
|
+
this.socket.on("data", (data) => {
|
|
51
|
+
this.chunks.push(data);
|
|
52
|
+
this.bufferLength += data.length;
|
|
53
|
+
let frame = activeutilities_1.ActiveFrame.read(this.chunks, this.bufferLength);
|
|
54
|
+
while (frame) {
|
|
55
|
+
this.emit("message", frame.item);
|
|
56
|
+
this.chunks = frame.remaining.length > 0 ? [frame.remaining] : [];
|
|
57
|
+
this.bufferLength = frame.remaining.length;
|
|
58
|
+
frame = activeutilities_1.ActiveFrame.read(this.chunks, this.bufferLength);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
this.socket.on("close", () => {
|
|
62
|
+
this.isConnected = false;
|
|
63
|
+
activelogger_1.ActiveLogger.warn(`Connection lost to ${this.host}:${this.port}, reconnecting...`);
|
|
64
|
+
if (this.hasEverConnected || (Date.now() - this.startTime) <= (10 * 60 * 1000)) {
|
|
65
|
+
this.reconnectTimer = setTimeout(() => this.connect(), 2000);
|
|
66
|
+
this.reconnectTimer.unref();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
activelogger_1.ActiveLogger.warn(`P2P reconnection window closed for ${this.host}:${this.port}`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
this.socket.on("error", (err) => {
|
|
73
|
+
activelogger_1.ActiveLogger.error(err, `Error with peer ${this.host}:${this.port}`);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
send(data, senderRef) {
|
|
77
|
+
if (this.socket && this.socket.writable) {
|
|
78
|
+
const refBuf = Buffer.alloc(40);
|
|
79
|
+
refBuf.write(senderRef.padEnd(40, ' '), 0, 'utf8');
|
|
80
|
+
const frame = Buffer.alloc(4 + data.length);
|
|
81
|
+
frame.writeUInt32BE(data.length, 0);
|
|
82
|
+
data.copy(frame, 4);
|
|
83
|
+
this.socket.write(Buffer.concat([refBuf, frame]));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.P2PClient = P2PClient;
|
|
88
|
+
//# sourceMappingURL=p2pClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2pClient.js","sourceRoot":"","sources":["../../src/network/p2pClient.ts"],"names":[],"mappings":"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"}
|