@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.
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
@@ -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
- this.graceStop = false;
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
- knock(endpoint, params, external, resend) {
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((response) => {
39
- resolve(response);
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
- return new Promise((resolve, reject) => {
88
+ const sender = (postData, extraHeader) => new Promise((resolve, reject) => {
66
89
  let attempt = (attempts) => {
67
- activeoptions_1.ActiveRequest.send(url, "POST", ["X-Activeledger:" + home_1.Home.reference], post, activeoptions_1.ActiveOptions.get("gzip", false))
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 (response.data.$enc && response.data.$packet) {
70
- response.data = JSON.parse(Buffer.from(home_1.Home.identity.decrypt(response.data.$packet), "base64").toString());
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
- activelogger_1.ActiveLogger.error(post, `Data sent which caused the error`);
89
- reject("Network Communication Error");
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":"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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"}
@@ -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
- let i = neighbourhood.length;
28
- while (i--) {
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] = true;
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] = true;
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
- let i = keys.length;
61
- while (i--) {
62
- this.neighbours[keys[i]].graceStop = true;
63
+ for (const key of keys) {
64
+ this.neighbours[key].graceStop = true;
63
65
  }
64
- i = neighbours.length;
65
- while (i--) {
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
- let keys = this.keys();
74
- if (p2) {
75
- let i = keys.length;
76
- while (i--) {
77
- if (keys[i] == p2.reference) {
78
- keys.splice(i, 1);
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 this.neighbours[keys[(keys.length * Math.random()) << 0]];
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
- return this.firewall[remote] || false;
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
- let neighbours = this.keys();
117
- let i = neighbours.length;
118
- let knocks = [];
119
- while (i--) {
120
- if (force || this.neighbours[neighbours[i]].isHome)
121
- knocks.push(new Promise((resolve, reject) => {
122
- this.neighbours[neighbours[i]]
123
- .knock(endpoint, params)
124
- .then((response) => {
125
- resolve(response.data);
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;IA6CxB;QAtCQ,eAAU,GAAuC,EAAE,CAAC;QAgBpD,aAAQ,GAAqC,EAAE,CAAC;QAQhD,WAAM,GAAW,CAAC,CAAC;QAgBzB,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,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;QAC7B,OAAO,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,GAAG,CACN,IAAI,qBAAS,CACX,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EACrB,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EACrB,KAAK,EACL,IAAI,2BAAY,CAAC,OAAO,CACtB,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAC9B,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CACjC,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,CAAE,SAAS,CAAC,CAAC,CAAe,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;iBACrE;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,CAAE,SAAuB,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,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,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;SAC3C;QAGD,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,GAAG,CACN,IAAI,qBAAS,CACX,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAClB,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAClB,KAAK,EACL,IAAI,2BAAY,CAAC,OAAO,CACtB,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAC3B,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAC9B,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;gBAE1B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAGvB,IAAI,EAAE,EAAE;oBACN,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACpB,OAAO,CAAC,EAAE,EAAE;wBACV,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;4BAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAClB,MAAM;yBACP;qBACF;iBACF;gBAKD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClE;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;QAEjC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS;YAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;IACxC,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,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAG7B,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAG1B,IAAI,MAAM,GAAmB,EAAE,CAAC;QAEhC,OAAO,CAAC,EAAE,EAAE;YACV,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;gBAEhD,MAAM,CAAC,IAAI,CACT,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAE9B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;yBAC3B,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;yBACvB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;wBAEjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;wBAEX,2BAAY,CAAC,KAAK,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC;wBACxD,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC3B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CACH,CAAC;SACL;QAGD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AAvRD,sCAuRC"}
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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"}