@activeledger/activenetwork 2.15.7 → 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.
Files changed (79) hide show
  1. package/es/network/cpus.d.ts +1 -0
  2. package/es/network/cpus.d.ts.map +1 -1
  3. package/es/network/cpus.js +26 -15
  4. package/es/network/cpus.js.map +1 -1
  5. package/es/network/endpoints.d.ts +7 -3
  6. package/es/network/endpoints.d.ts.map +1 -1
  7. package/es/network/endpoints.js +685 -172
  8. package/es/network/endpoints.js.map +1 -1
  9. package/es/network/home.d.ts.map +1 -1
  10. package/es/network/home.js +41 -19
  11. package/es/network/home.js.map +1 -1
  12. package/es/network/host.d.ts +15 -7
  13. package/es/network/host.d.ts.map +1 -1
  14. package/es/network/host.js +631 -240
  15. package/es/network/host.js.map +1 -1
  16. package/es/network/locker.d.ts +10 -5
  17. package/es/network/locker.d.ts.map +1 -1
  18. package/es/network/locker.js +50 -17
  19. package/es/network/locker.js.map +1 -1
  20. package/es/network/maintain.d.ts.map +1 -1
  21. package/es/network/maintain.js +42 -42
  22. package/es/network/maintain.js.map +1 -1
  23. package/es/network/neighbour.d.ts +8 -4
  24. package/es/network/neighbour.d.ts.map +1 -1
  25. package/es/network/neighbour.js +82 -18
  26. package/es/network/neighbour.js.map +1 -1
  27. package/es/network/neighbourhood.d.ts +1 -1
  28. package/es/network/neighbourhood.d.ts.map +1 -1
  29. package/es/network/neighbourhood.js +39 -42
  30. package/es/network/neighbourhood.js.map +1 -1
  31. package/es/network/p2pClient.d.ts +20 -0
  32. package/es/network/p2pClient.d.ts.map +1 -0
  33. package/es/network/p2pClient.js +84 -0
  34. package/es/network/p2pClient.js.map +1 -0
  35. package/es/network/process.js +99 -65
  36. package/es/network/process.js.map +1 -1
  37. package/es/network/utils.d.ts.map +1 -1
  38. package/es/network/utils.js +17 -21
  39. package/es/network/utils.js.map +1 -1
  40. package/lib/network/cpus.d.ts +1 -0
  41. package/lib/network/cpus.d.ts.map +1 -1
  42. package/lib/network/cpus.js +26 -15
  43. package/lib/network/cpus.js.map +1 -1
  44. package/lib/network/endpoints.d.ts +7 -3
  45. package/lib/network/endpoints.d.ts.map +1 -1
  46. package/lib/network/endpoints.js +684 -171
  47. package/lib/network/endpoints.js.map +1 -1
  48. package/lib/network/home.d.ts.map +1 -1
  49. package/lib/network/home.js +41 -19
  50. package/lib/network/home.js.map +1 -1
  51. package/lib/network/host.d.ts +15 -7
  52. package/lib/network/host.d.ts.map +1 -1
  53. package/lib/network/host.js +630 -239
  54. package/lib/network/host.js.map +1 -1
  55. package/lib/network/locker.d.ts +10 -5
  56. package/lib/network/locker.d.ts.map +1 -1
  57. package/lib/network/locker.js +50 -17
  58. package/lib/network/locker.js.map +1 -1
  59. package/lib/network/maintain.d.ts.map +1 -1
  60. package/lib/network/maintain.js +42 -42
  61. package/lib/network/maintain.js.map +1 -1
  62. package/lib/network/neighbour.d.ts +8 -4
  63. package/lib/network/neighbour.d.ts.map +1 -1
  64. package/lib/network/neighbour.js +82 -18
  65. package/lib/network/neighbour.js.map +1 -1
  66. package/lib/network/neighbourhood.d.ts +1 -1
  67. package/lib/network/neighbourhood.d.ts.map +1 -1
  68. package/lib/network/neighbourhood.js +39 -42
  69. package/lib/network/neighbourhood.js.map +1 -1
  70. package/lib/network/p2pClient.d.ts +20 -0
  71. package/lib/network/p2pClient.d.ts.map +1 -0
  72. package/lib/network/p2pClient.js +88 -0
  73. package/lib/network/p2pClient.js.map +1 -0
  74. package/lib/network/process.js +98 -64
  75. package/lib/network/process.js.map +1 -1
  76. package/lib/network/utils.d.ts.map +1 -1
  77. package/lib/network/utils.js +17 -21
  78. package/lib/network/utils.js.map +1 -1
  79. package/package.json +10 -8
@@ -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
- this.graceStop = false;
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
- knock(endpoint, params, external, resend) {
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((response) => {
36
- resolve(response);
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
- return new Promise((resolve, reject) => {
85
+ const sender = (postData, extraHeader) => new Promise((resolve, reject) => {
63
86
  let attempt = (attempts) => {
64
- ActiveRequest.send(url, "POST", ["X-Activeledger:" + Home.reference], post, ActiveOptions.get("gzip", true))
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 (response.data.$enc && response.data.$packet) {
67
- response.data = JSON.parse(Buffer.from(Home.identity.decrypt(response.data.$packet), "base64").toString());
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
- ActiveLogger.error(post, `Data sent which caused the error`);
86
- reject("Network Communication Error");
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":"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"}
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,CAAwC;IAQxD,OAAO,CAAC,MAAM,CAAa;IAQ3B,OAAc,WAAW,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;;IA2CvD,OAAO,CAAC,GAAG;IAoCJ,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;IAoCnC,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;IAoCjD,IAAI,IAAI,MAAM,EAAE;IAahB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYtC,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;CAkChB"}
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
- let i = neighbourhood.length;
25
- while (i--) {
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] = true;
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] = true;
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
- let i = keys.length;
58
- while (i--) {
59
- this.neighbours[keys[i]].graceStop = true;
60
+ for (const key of keys) {
61
+ this.neighbours[key].graceStop = true;
60
62
  }
61
- i = neighbours.length;
62
- while (i--) {
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
- let keys = this.keys();
71
- if (p2) {
72
- let i = keys.length;
73
- while (i--) {
74
- if (keys[i] == p2.reference) {
75
- keys.splice(i, 1);
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 this.neighbours[keys[(keys.length * Math.random()) << 0]];
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
- return this.firewall[remote] || false;
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
- let neighbours = this.keys();
114
- let i = neighbours.length;
115
- let knocks = [];
116
- while (i--) {
117
- if (force || this.neighbours[neighbours[i]].isHome)
118
- knocks.push(new Promise((resolve, reject) => {
119
- this.neighbours[neighbours[i]]
120
- .knock(endpoint, params)
121
- .then((response) => {
122
- resolve(response.data);
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":"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"}
1
+ {"version":3,"file":"neighbourhood.js","sourceRoot":"","sources":["../../src/network/neighbourhood.ts"],"names":[],"mappings":"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"}
@@ -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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"}