@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/es/network/neighbour.js
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { ActiveOptions, ActiveRequest } from "@activeledger/activeoptions";
|
|
2
2
|
import { ActiveCrypto } from "@activeledger/activecrypto";
|
|
3
3
|
import { ActiveLogger } from "@activeledger/activelogger";
|
|
4
|
+
import { ActiveClone } from "@activeledger/activeutilities";
|
|
4
5
|
import { Home } from "./home";
|
|
5
6
|
import { Neighbourhood } from "./neighbourhood";
|
|
7
|
+
import { P2PClient } from "./p2pClient";
|
|
6
8
|
export class Neighbour {
|
|
9
|
+
host;
|
|
10
|
+
port;
|
|
11
|
+
isHome;
|
|
12
|
+
identity;
|
|
13
|
+
p2pClient;
|
|
14
|
+
reference;
|
|
15
|
+
graceStop = false;
|
|
7
16
|
constructor(host, port, isHome = false, identity) {
|
|
8
17
|
this.host = host;
|
|
9
18
|
this.port = port;
|
|
10
19
|
this.isHome = isHome;
|
|
11
20
|
this.identity = identity;
|
|
12
|
-
|
|
21
|
+
if (ActiveOptions.get("p2pStream", false)) {
|
|
22
|
+
this.p2pClient = new P2PClient(host, port + 1);
|
|
23
|
+
this.p2pClient.connect();
|
|
24
|
+
}
|
|
13
25
|
this.reference = ActiveCrypto.Hash.getHash(host + port + ActiveOptions.get("network", ""), "sha1");
|
|
14
26
|
if (Neighbourhood.remapedAddr &&
|
|
15
27
|
Neighbourhood.remapedAddr[this.reference]) {
|
|
@@ -28,17 +40,28 @@ export class Neighbour {
|
|
|
28
40
|
}
|
|
29
41
|
return false;
|
|
30
42
|
}
|
|
31
|
-
|
|
43
|
+
bundle = [];
|
|
44
|
+
nextSend;
|
|
45
|
+
async knock(endpoint, params, external, resend, bundle) {
|
|
46
|
+
if (params &&
|
|
47
|
+
!external &&
|
|
48
|
+
this.p2pClient &&
|
|
49
|
+
this.p2pClient.ready &&
|
|
50
|
+
ActiveOptions.get("p2pStream", false) &&
|
|
51
|
+
endpoint === 'init') {
|
|
52
|
+
this.p2pClient.send(await ActiveClone.serialize(params, { enableCompression: true }), Home.reference);
|
|
53
|
+
return Promise.resolve({ ok: 1 });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if (endpoint === 'init-legacy') {
|
|
57
|
+
endpoint = 'init';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
32
60
|
if (!params) {
|
|
33
61
|
return new Promise((resolve, reject) => {
|
|
34
|
-
ActiveRequest.send(`http://${this.host}:${this.port}/a/${endpoint}`, "GET", ["X-Activeledger:" + Home.reference])
|
|
35
|
-
.then(
|
|
36
|
-
|
|
37
|
-
})
|
|
38
|
-
.catch((error) => {
|
|
39
|
-
ActiveLogger.error(error, `${this.host}:${this.port}/${endpoint} - GET Failed`);
|
|
40
|
-
reject(error);
|
|
41
|
-
});
|
|
62
|
+
ActiveRequest.send(`http://${this.host}:${this.port}/a/${endpoint}`, "GET", ["X-Activeledger:" + Home.reference], null, false, 60)
|
|
63
|
+
.then(resolve)
|
|
64
|
+
.catch(reject);
|
|
42
65
|
});
|
|
43
66
|
}
|
|
44
67
|
else {
|
|
@@ -59,18 +82,23 @@ export class Neighbour {
|
|
|
59
82
|
$enc: params.$encrypt ? true : false,
|
|
60
83
|
};
|
|
61
84
|
}
|
|
62
|
-
|
|
85
|
+
const sender = (postData, extraHeader) => new Promise((resolve, reject) => {
|
|
63
86
|
let attempt = (attempts) => {
|
|
64
|
-
ActiveRequest.send(url, "POST", [
|
|
87
|
+
ActiveRequest.send(url, "POST", [
|
|
88
|
+
"X-Activeledger:" + Home.reference,
|
|
89
|
+
"content-type: application/json",
|
|
90
|
+
extraHeader,
|
|
91
|
+
], postData, ActiveOptions.get("gzip", true), 60)
|
|
65
92
|
.then((response) => {
|
|
66
|
-
if (
|
|
67
|
-
response.data
|
|
93
|
+
if (!bundle) {
|
|
94
|
+
if (response.data?.$enc && response.data.$packet) {
|
|
95
|
+
response.data = JSON.parse(Buffer.from(Home.identity.decrypt(response.data.$packet), "base64").toString());
|
|
96
|
+
}
|
|
97
|
+
resolve(response);
|
|
68
98
|
}
|
|
69
|
-
resolve(response);
|
|
70
99
|
})
|
|
71
100
|
.catch((error) => {
|
|
72
101
|
if (error && error.response && error.response.data) {
|
|
73
|
-
ActiveLogger.error(error.response.data, `${this.host}:${this.port}/${endpoint} - POST Failed`);
|
|
74
102
|
reject(error.response.data);
|
|
75
103
|
}
|
|
76
104
|
else {
|
|
@@ -82,14 +110,50 @@ export class Neighbour {
|
|
|
82
110
|
}
|
|
83
111
|
else {
|
|
84
112
|
ActiveLogger.fatal(error, `Network Error - ${this.host}:${this.port}/${endpoint}`);
|
|
85
|
-
|
|
86
|
-
|
|
113
|
+
if (extraHeader !== "X-Bundle: 1") {
|
|
114
|
+
reject("Network Communication Error");
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
resolve({ ok: 1 });
|
|
118
|
+
}
|
|
87
119
|
}
|
|
88
120
|
}
|
|
89
121
|
});
|
|
90
122
|
};
|
|
91
123
|
attempt(0);
|
|
92
124
|
});
|
|
125
|
+
if (bundle) {
|
|
126
|
+
this.bundle.push(JSON.stringify(post));
|
|
127
|
+
if (this.bundle.length >= 100) {
|
|
128
|
+
if (this.nextSend) {
|
|
129
|
+
clearTimeout(this.nextSend);
|
|
130
|
+
this.nextSend = null;
|
|
131
|
+
}
|
|
132
|
+
const bundled = Buffer.from(this.bundle.join(":$ALB:"));
|
|
133
|
+
this.bundle = [];
|
|
134
|
+
sender(bundled, "X-Bundle: 1").catch(() => {
|
|
135
|
+
ActiveLogger.warn("X-Bundle Error");
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (!this.nextSend) {
|
|
140
|
+
this.nextSend = setTimeout(() => {
|
|
141
|
+
if (this.bundle.length > 0) {
|
|
142
|
+
this.nextSend = null;
|
|
143
|
+
const bundled = Buffer.from(this.bundle.join(":$ALB:"));
|
|
144
|
+
this.bundle = [];
|
|
145
|
+
sender(bundled, "X-Bundle: 1").catch(() => {
|
|
146
|
+
ActiveLogger.warn("X-Bundle Error");
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}, 5);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return Promise.resolve();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return sender(Buffer.from(JSON.stringify(post)), "X-Null: 0");
|
|
156
|
+
}
|
|
93
157
|
}
|
|
94
158
|
}
|
|
95
159
|
encryptKnock(data, encrypted = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbour.js","sourceRoot":"","sources":["../../src/network/neighbour.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
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"}
|
|
@@ -11,19 +11,20 @@ export var NeighbourStatus;
|
|
|
11
11
|
NeighbourStatus[NeighbourStatus["Stable"] = 4] = "Stable";
|
|
12
12
|
})(NeighbourStatus || (NeighbourStatus = {}));
|
|
13
13
|
export class Neighbourhood {
|
|
14
|
+
neighbours = {};
|
|
15
|
+
neighboursKeys;
|
|
16
|
+
firewall = {};
|
|
17
|
+
houses = 0;
|
|
18
|
+
static remapedAddr;
|
|
14
19
|
constructor() {
|
|
15
|
-
this.neighbours = {};
|
|
16
|
-
this.firewall = {};
|
|
17
|
-
this.houses = 0;
|
|
18
20
|
let neighbourhood = ActiveOptions.get("neighbourhood", false);
|
|
19
21
|
if (!Neighbourhood.remapedAddr) {
|
|
20
22
|
Neighbourhood.remapedAddr = ActiveOptions.get("neighbourhoodRemap", {});
|
|
21
23
|
}
|
|
22
24
|
if (!neighbourhood)
|
|
23
25
|
throw ActiveLogger.fatal("Neighbourhood not found inside config");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.add(new Neighbour(neighbourhood[i].host, neighbourhood[i].port, false, new ActiveCrypto.KeyPair(neighbourhood[i].identity.type, neighbourhood[i].identity.public)));
|
|
26
|
+
for (const neighbour of neighbourhood) {
|
|
27
|
+
this.add(new Neighbour(neighbour.host, neighbour.port, false, new ActiveCrypto.KeyPair(neighbour.identity.type, neighbour.identity.public)));
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
add(neighbour) {
|
|
@@ -33,7 +34,8 @@ export class Neighbourhood {
|
|
|
33
34
|
if (!this.neighbours[neighbour[i].reference]) {
|
|
34
35
|
this.neighbours[neighbour[i].reference] = neighbour[i];
|
|
35
36
|
this.houses++;
|
|
36
|
-
this.firewall[neighbour[i].getAddress().host] =
|
|
37
|
+
this.firewall[neighbour[i].getAddress().host] = neighbour[i].reference;
|
|
38
|
+
this.firewall[neighbour[i].reference] = neighbour[i].getAddress().host;
|
|
37
39
|
}
|
|
38
40
|
else {
|
|
39
41
|
this.neighbours[neighbour[i].reference].graceStop = false;
|
|
@@ -44,7 +46,8 @@ export class Neighbourhood {
|
|
|
44
46
|
if (!this.neighbours[neighbour.reference]) {
|
|
45
47
|
this.neighbours[neighbour.reference] = neighbour;
|
|
46
48
|
this.houses++;
|
|
47
|
-
this.firewall[neighbour.getAddress().host] =
|
|
49
|
+
this.firewall[neighbour.getAddress().host] = neighbour.reference;
|
|
50
|
+
this.firewall[neighbour.reference] = neighbour.getAddress().host;
|
|
48
51
|
}
|
|
49
52
|
else {
|
|
50
53
|
this.neighbours[neighbour.reference].graceStop = false;
|
|
@@ -54,30 +57,26 @@ export class Neighbourhood {
|
|
|
54
57
|
reset(neighbours) {
|
|
55
58
|
ActiveLogger.debug("Reload Request (Worker Resetting)");
|
|
56
59
|
let keys = this.keys();
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.neighbours[keys[i]].graceStop = true;
|
|
60
|
+
for (const key of keys) {
|
|
61
|
+
this.neighbours[key].graceStop = true;
|
|
60
62
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.add(new Neighbour(neighbours[i].host, neighbours[i].port, false, new ActiveCrypto.KeyPair(neighbours[i].identity.type, neighbours[i].identity.public)));
|
|
63
|
+
for (const neighbour of neighbours) {
|
|
64
|
+
this.add(new Neighbour(neighbour.host, neighbour.port, false, new ActiveCrypto.KeyPair(neighbour.identity.type, neighbour.identity.public)));
|
|
64
65
|
}
|
|
65
66
|
this.neighboursKeys = Object.keys(this.neighbours);
|
|
66
67
|
}
|
|
67
68
|
get(p1, p2) {
|
|
68
69
|
if (p1) {
|
|
69
70
|
if (typeof p1 == "boolean") {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
71
|
+
const keys = this.keys();
|
|
72
|
+
const getRandomNeighbour = () => this.neighbours[keys[(keys.length * Math.random()) << 0]];
|
|
73
|
+
let neighbour = getRandomNeighbour();
|
|
74
|
+
if (p2 && keys.length > 1) {
|
|
75
|
+
while (neighbour.reference === p2.reference) {
|
|
76
|
+
neighbour = getRandomNeighbour();
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
|
-
return
|
|
79
|
+
return neighbour;
|
|
81
80
|
}
|
|
82
81
|
else {
|
|
83
82
|
if (this.neighbours[p1])
|
|
@@ -95,10 +94,15 @@ export class Neighbourhood {
|
|
|
95
94
|
}
|
|
96
95
|
return this.neighboursKeys;
|
|
97
96
|
}
|
|
98
|
-
checkFirewall(remote) {
|
|
97
|
+
checkFirewall(remote, nodeRef) {
|
|
99
98
|
if (remote.substr(0, 7) == "::ffff:")
|
|
100
99
|
remote = remote.substr(7);
|
|
101
|
-
|
|
100
|
+
if (nodeRef) {
|
|
101
|
+
return this.firewall[remote] === nodeRef ? true : this.firewall[nodeRef] === remote;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return this.firewall[remote] ? true : false;
|
|
105
|
+
}
|
|
102
106
|
}
|
|
103
107
|
exists(reference) {
|
|
104
108
|
if (this.neighbours[reference]) {
|
|
@@ -110,23 +114,16 @@ export class Neighbourhood {
|
|
|
110
114
|
return this.houses;
|
|
111
115
|
}
|
|
112
116
|
knockAll(endpoint, params, force = false) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
})
|
|
124
|
-
.catch((e) => {
|
|
125
|
-
ActiveLogger.debug(e, "Knock All Single Knock Failure");
|
|
126
|
-
resolve({ error: true });
|
|
127
|
-
});
|
|
128
|
-
}));
|
|
129
|
-
}
|
|
117
|
+
const neighbourKeys = this.keys();
|
|
118
|
+
const knocks = neighbourKeys
|
|
119
|
+
.filter(key => force || this.neighbours[key].isHome)
|
|
120
|
+
.map(key => this.neighbours[key]
|
|
121
|
+
.knock(endpoint, params)
|
|
122
|
+
.then(response => response.data)
|
|
123
|
+
.catch(e => {
|
|
124
|
+
ActiveLogger.debug(e, `Knock failed for ${key} during knockAll`);
|
|
125
|
+
return { error: true, from: key };
|
|
126
|
+
}));
|
|
130
127
|
return Promise.all(knocks);
|
|
131
128
|
}
|
|
132
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbourhood.js","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWxC,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,iEAAU,CAAA;IACV,6DAAQ,CAAA;IACR,yDAAM,CAAA;AACR,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAQD,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"neighbourhood.js","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWxC,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,qEAAY,CAAA;IACZ,2DAAO,CAAA;IACP,iEAAU,CAAA;IACV,6DAAQ,CAAA;IACR,yDAAM,CAAA;AACR,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAQD,MAAM,OAAO,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,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAG1E,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,aAAa,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;SACzE;QAID,IAAI,CAAC,aAAa;YAChB,MAAM,YAAY,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAIpE,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;YACrC,IAAI,CAAC,GAAG,CACN,IAAI,SAAS,CACX,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,KAAK,EACL,IAAI,YAAY,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,YAAY,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,SAAS,CACX,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,KAAK,EACL,IAAI,YAAY,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,YAAY,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"}
|
|
@@ -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,84 @@
|
|
|
1
|
+
import * as net from "net";
|
|
2
|
+
import { ActiveLogger } from "@activeledger/activelogger";
|
|
3
|
+
import { EventEmitter } from "events";
|
|
4
|
+
import { ActiveFrame } from "@activeledger/activeutilities";
|
|
5
|
+
export class P2PClient extends EventEmitter {
|
|
6
|
+
host;
|
|
7
|
+
port;
|
|
8
|
+
socket;
|
|
9
|
+
isConnected = false;
|
|
10
|
+
hasEverConnected = false;
|
|
11
|
+
startTime = Date.now();
|
|
12
|
+
chunks = [];
|
|
13
|
+
bufferLength = 0;
|
|
14
|
+
reconnectTimer;
|
|
15
|
+
constructor(host, port) {
|
|
16
|
+
super();
|
|
17
|
+
this.host = host;
|
|
18
|
+
this.port = port;
|
|
19
|
+
}
|
|
20
|
+
get ready() {
|
|
21
|
+
return this.isConnected;
|
|
22
|
+
}
|
|
23
|
+
stop() {
|
|
24
|
+
if (this.reconnectTimer) {
|
|
25
|
+
clearTimeout(this.reconnectTimer);
|
|
26
|
+
}
|
|
27
|
+
if (this.socket) {
|
|
28
|
+
this.socket.destroy();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
connect() {
|
|
32
|
+
if (this.isConnected)
|
|
33
|
+
return;
|
|
34
|
+
const gracePeriodPassed = (Date.now() - this.startTime) > (10 * 60 * 1000);
|
|
35
|
+
if (gracePeriodPassed && !this.hasEverConnected) {
|
|
36
|
+
ActiveLogger.warn(`P2P grace period expired for ${this.host}:${this.port}, disabling P2P.`);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.socket = net.createConnection(this.port, this.host);
|
|
40
|
+
this.socket.on("connect", () => {
|
|
41
|
+
this.isConnected = true;
|
|
42
|
+
this.hasEverConnected = true;
|
|
43
|
+
ActiveLogger.info(`Connected to peer at ${this.host}:${this.port}`);
|
|
44
|
+
});
|
|
45
|
+
this.chunks = [];
|
|
46
|
+
this.bufferLength = 0;
|
|
47
|
+
this.socket.on("data", (data) => {
|
|
48
|
+
this.chunks.push(data);
|
|
49
|
+
this.bufferLength += data.length;
|
|
50
|
+
let frame = ActiveFrame.read(this.chunks, this.bufferLength);
|
|
51
|
+
while (frame) {
|
|
52
|
+
this.emit("message", frame.item);
|
|
53
|
+
this.chunks = frame.remaining.length > 0 ? [frame.remaining] : [];
|
|
54
|
+
this.bufferLength = frame.remaining.length;
|
|
55
|
+
frame = ActiveFrame.read(this.chunks, this.bufferLength);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.socket.on("close", () => {
|
|
59
|
+
this.isConnected = false;
|
|
60
|
+
ActiveLogger.warn(`Connection lost to ${this.host}:${this.port}, reconnecting...`);
|
|
61
|
+
if (this.hasEverConnected || (Date.now() - this.startTime) <= (10 * 60 * 1000)) {
|
|
62
|
+
this.reconnectTimer = setTimeout(() => this.connect(), 2000);
|
|
63
|
+
this.reconnectTimer.unref();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
ActiveLogger.warn(`P2P reconnection window closed for ${this.host}:${this.port}`);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
this.socket.on("error", (err) => {
|
|
70
|
+
ActiveLogger.error(err, `Error with peer ${this.host}:${this.port}`);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
send(data, senderRef) {
|
|
74
|
+
if (this.socket && this.socket.writable) {
|
|
75
|
+
const refBuf = Buffer.alloc(40);
|
|
76
|
+
refBuf.write(senderRef.padEnd(40, ' '), 0, 'utf8');
|
|
77
|
+
const frame = Buffer.alloc(4 + data.length);
|
|
78
|
+
frame.writeUInt32BE(data.length, 0);
|
|
79
|
+
data.copy(frame, 4);
|
|
80
|
+
this.socket.write(Buffer.concat([refBuf, frame]));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# 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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"}
|