manner.js 1.0.13 → 1.0.14

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 (31) hide show
  1. package/client/class/ClientFetch.js +1 -0
  2. package/coverage/clover.xml +92 -103
  3. package/coverage/coverage-final.json +3 -4
  4. package/coverage/lcov-report/byteArray.js.html +1 -1
  5. package/coverage/lcov-report/class/Blockable.js.html +86 -35
  6. package/coverage/lcov-report/class/Blocks.js.html +220 -28
  7. package/coverage/lcov-report/class/MultiFetch.js.html +31 -97
  8. package/coverage/lcov-report/class/index.html +28 -43
  9. package/coverage/lcov-report/formatHttpDate.js.html +1 -1
  10. package/coverage/lcov-report/formatHttpKey.js.html +1 -1
  11. package/coverage/lcov-report/getOwnIpAddresses.js.html +1 -1
  12. package/coverage/lcov-report/index.html +19 -19
  13. package/coverage/lcov-report/isIntranetIpv4Address.js.html +1 -1
  14. package/coverage/lcov-report/isIpv6Address.js.html +4 -4
  15. package/coverage/lcov-report/lib/byteArray.js.html +1 -1
  16. package/coverage/lcov-report/lib/formatHttpDate.js.html +1 -1
  17. package/coverage/lcov-report/lib/formatHttpKey.js.html +1 -1
  18. package/coverage/lcov-report/lib/getOwnIpAddresses.js.html +1 -1
  19. package/coverage/lcov-report/lib/index.html +1 -1
  20. package/coverage/lcov-report/lib/isIntranetIpv4Address.js.html +1 -1
  21. package/coverage/lcov-report/lib/isIpv6Address.js.html +4 -4
  22. package/coverage/lcov-report/lib/nonZeroByteArray.js.html +1 -1
  23. package/coverage/lcov-report/lib/parseHttpDate.js.html +1 -1
  24. package/coverage/lcov-report/lib/wrapIpv6.js.html +1 -1
  25. package/coverage/lcov-report/nonZeroByteArray.js.html +1 -1
  26. package/coverage/lcov-report/parseHttpDate.js.html +1 -1
  27. package/coverage/lcov-report/wrapIpv6.js.html +1 -1
  28. package/coverage/lcov.info +171 -196
  29. package/package.json +2 -2
  30. package/server/class/Blocks.js +1 -1
  31. package/server/class/MultiFetch.js +1 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.78% </span>
26
+ <span class="strong">72.09% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>26/33</span>
28
+ <span class='fraction'>31/43</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">62.5% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>10/16</span>
35
+ <span class='fraction'>9/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">83.33% </span>
40
+ <span class="strong">62.5% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/6</span>
42
+ <span class='fraction'>5/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">77.41% </span>
47
+ <span class="strong">73.17% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>24/31</span>
49
+ <span class='fraction'>30/41</span>
50
50
  </div>
51
51
 
52
52
 
@@ -122,13 +122,38 @@
122
122
  <a name='L57'></a><a href='#L57'>57</a>
123
123
  <a name='L58'></a><a href='#L58'>58</a>
124
124
  <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-yes">33x</span>
146
+ <span class="cline-any cline-yes">33x</span>
126
147
  <span class="cline-any cline-neutral">&nbsp;</span>
127
148
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">34x</span>
129
- <span class="cline-any cline-yes">34x</span>
130
149
  <span class="cline-any cline-neutral">&nbsp;</span>
131
150
  <span class="cline-any cline-neutral">&nbsp;</span>
151
+ <span class="cline-any cline-yes">4x</span>
152
+ <span class="cline-any cline-neutral">&nbsp;</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-no">&nbsp;</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
132
157
  <span class="cline-any cline-neutral">&nbsp;</span>
133
158
  <span class="cline-any cline-neutral">&nbsp;</span>
134
159
  <span class="cline-any cline-no">&nbsp;</span>
@@ -142,17 +167,17 @@
142
167
  <span class="cline-any cline-neutral">&nbsp;</span>
143
168
  <span class="cline-any cline-neutral">&nbsp;</span>
144
169
  <span class="cline-any cline-neutral">&nbsp;</span>
145
- <span class="cline-any cline-yes">34x</span>
146
- <span class="cline-any cline-yes">29x</span>
147
- <span class="cline-any cline-yes">5x</span>
148
- <span class="cline-any cline-yes">5x</span>
170
+ <span class="cline-any cline-yes">4x</span>
171
+ <span class="cline-any cline-yes">3x</span>
172
+ <span class="cline-any cline-yes">1x</span>
173
+ <span class="cline-any cline-yes">1x</span>
149
174
  <span class="cline-any cline-neutral">&nbsp;</span>
150
175
  <span class="cline-any cline-no">&nbsp;</span>
151
176
  <span class="cline-any cline-neutral">&nbsp;</span>
152
- <span class="cline-any cline-yes">34x</span>
153
- <span class="cline-any cline-yes">34x</span>
154
- <span class="cline-any cline-yes">5x</span>
155
- <span class="cline-any cline-yes">5x</span>
177
+ <span class="cline-any cline-yes">4x</span>
178
+ <span class="cline-any cline-yes">4x</span>
179
+ <span class="cline-any cline-yes">4x</span>
180
+ <span class="cline-any cline-yes">4x</span>
156
181
  <span class="cline-any cline-yes">4x</span>
157
182
  <span class="cline-any cline-neutral">&nbsp;</span>
158
183
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -166,13 +191,22 @@
166
191
  <span class="cline-any cline-yes">6x</span>
167
192
  <span class="cline-any cline-yes">6x</span>
168
193
  <span class="cline-any cline-yes">6x</span>
194
+ <span class="cline-any cline-yes">6x</span>
169
195
  <span class="cline-any cline-neutral">&nbsp;</span>
170
196
  <span class="cline-any cline-yes">29x</span>
171
197
  <span class="cline-any cline-yes">29x</span>
172
198
  <span class="cline-any cline-yes">29x</span>
173
199
  <span class="cline-any cline-yes">29x</span>
174
200
  <span class="cline-any cline-yes">29x</span>
201
+ <span class="cline-any cline-yes">29x</span>
202
+ <span class="cline-any cline-yes">29x</span>
203
+ <span class="cline-any cline-yes">29x</span>
204
+ <span class="cline-any cline-no">&nbsp;</span>
205
+ <span class="cline-any cline-no">&nbsp;</span>
175
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-yes">29x</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-no">&nbsp;</span>
176
210
  <span class="cline-any cline-no">&nbsp;</span>
177
211
  <span class="cline-any cline-neutral">&nbsp;</span>
178
212
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -189,6 +223,14 @@ function getIntervalFromTime(time) {
189
223
  }
190
224
  &nbsp;
191
225
  class Blockable {
226
+ constructor() {
227
+ this.count = 0;
228
+ }
229
+ &nbsp;
230
+ <span class="fstat-no" title="function not covered" > ge</span>tCount() {
231
+ <span class="cstat-no" title="statement not covered" > return this.count;</span>
232
+ }
233
+ &nbsp;
192
234
  <span class="fstat-no" title="function not covered" > se</span>tInterval(interval) {
193
235
  <span class="cstat-no" title="statement not covered" > if (!Number.isInteger(interval)) {</span>
194
236
  <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval parameter should be of integer type.');</span>
@@ -200,39 +242,48 @@ class Blockable {
200
242
  }
201
243
  &nbsp;
202
244
  cleanIpAddress(ip, formerInterval) {
203
- let ipBlock;
245
+ let ipBlocks;
204
246
  if (net.isIPv4(ip)) {
205
- ipBlock = this.ipv4Block;
247
+ ipBlocks = this.ipv4Blocks;
206
248
  } else if (net.isIPv6(ip)) {
207
- ipBlock = this.ipv6Block;
249
+ ipBlocks = this.ipv6Blocks;
208
250
  } else <span class="missing-if-branch" title="else path not taken" >E</span>{
209
251
  <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected');</span>
210
252
  }
211
- const time = ipBlock.gain(ip);
212
- if (time !== undefined) {
253
+ const { time, } = ipBlocks.gain(ip);
254
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (time !== undefined) {
213
255
  const interval = getIntervalFromTime(time);
214
- if (interval &lt; formerInterval) {
215
- ipBlock.ruin(ip);
256
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (interval &gt;= formerInterval) {
257
+ ipBlocks.ruin(ip);
216
258
  }
217
259
  }
218
260
  }
219
261
  &nbsp;
220
- examineIpAddress(ip, ipBlock) {
262
+ examineIpAddress(ip, ipBlocks) {
221
263
  let ans = true;
222
- const time = ipBlock.gain(ip);
223
- if (time === undefined) {
264
+ const block = ipBlocks.gain(ip);
265
+ if (block === undefined) {
224
266
  const currentTime = new Date().getTime();
225
- ipBlock.attach(ip, currentTime);
267
+ ipBlocks.attach(ip, { time: currentTime, count: 1, });
268
+ this.count = 1;
226
269
  const { interval, } = this;
227
- setTimeout(() =&gt; this.cleanIpAddress(ip, interval), interval);
270
+ setTimeout(() =&gt; this.cleanIpAddress(ip, this.interval), interval);
228
271
  } else {
272
+ const { time, } = block;
229
273
  const interval = getIntervalFromTime(time);
230
274
  if (interval &lt; this.interval) {
231
- const wait = this.interval - time;
232
- setTimeout(() =&gt; this.cleanIpAddress(ip, this.interval), wait);
275
+ let { count, } = block;
276
+ count += 1;
277
+ ipBlocks.revise(ip, { time, count, });
278
+ this.count = count;
279
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (count === 1) {
280
+ const wait = <span class="cstat-no" title="statement not covered" >this.interval - interval;</span>
281
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >()</span> =&gt; <span class="cstat-no" title="statement not covered" >this.cleanIpAddress(ip, this.interval),</span> wait);</span>
282
+ }
233
283
  ans = false;
234
284
  } else <span class="missing-if-branch" title="else path not taken" >E</span>{
235
- <span class="cstat-no" title="statement not covered" > ipBlock.ruin(ip);</span>
285
+ <span class="cstat-no" title="statement not covered" > ipBlocks.ruin(ip);</span>
286
+ <span class="cstat-no" title="statement not covered" > this.count = 0;</span>
236
287
  }
237
288
  }
238
289
  return ans;
@@ -247,7 +298,7 @@ export default Blockable;
247
298
  <div class='footer quiet pad2 space-top1 center small'>
248
299
  Code coverage generated by
249
300
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
250
- at 2025-06-27T14:10:48.455Z
301
+ at 2025-06-29T04:46:24.856Z
251
302
  </div>
252
303
  <script src="../prettify.js"></script>
253
304
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">83.33% </span>
26
+ <span class="strong">79.31% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>15/18</span>
28
+ <span class='fraction'>46/58</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">60% </span>
33
+ <span class="strong">53.84% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/10</span>
35
+ <span class='fraction'>14/26</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">77.77% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/3</span>
42
+ <span class='fraction'>7/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">83.33% </span>
47
+ <span class="strong">78.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>15/18</span>
49
+ <span class='fraction'>45/57</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -102,10 +102,78 @@
102
102
  <a name='L37'></a><a href='#L37'>37</a>
103
103
  <a name='L38'></a><a href='#L38'>38</a>
104
104
  <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
106
170
  <span class="cline-any cline-neutral">&nbsp;</span>
107
171
  <span class="cline-any cline-neutral">&nbsp;</span>
108
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">13x</span>
174
+ <span class="cline-any cline-yes">13x</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
109
177
  <span class="cline-any cline-neutral">&nbsp;</span>
110
178
  <span class="cline-any cline-neutral">&nbsp;</span>
111
179
  <span class="cline-any cline-yes">2x</span>
@@ -125,14 +193,74 @@
125
193
  <span class="cline-any cline-neutral">&nbsp;</span>
126
194
  <span class="cline-any cline-neutral">&nbsp;</span>
127
195
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">12x</span>
129
- <span class="cline-any cline-yes">12x</span>
130
- <span class="cline-any cline-yes">12x</span>
131
- <span class="cline-any cline-yes">6x</span>
132
- <span class="cline-any cline-yes">6x</span>
133
- <span class="cline-any cline-yes">6x</span>
134
- <span class="cline-any cline-yes">6x</span>
135
- <span class="cline-any cline-yes">6x</span>
196
+ <span class="cline-any cline-no">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-no">&nbsp;</span>
201
+ <span class="cline-any cline-no">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-no">&nbsp;</span>
204
+ <span class="cline-any cline-no">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-no">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-yes">3x</span>
212
+ <span class="cline-any cline-yes">2x</span>
213
+ <span class="cline-any cline-yes">1x</span>
214
+ <span class="cline-any cline-yes">1x</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-no">&nbsp;</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-yes">3x</span>
219
+ <span class="cline-any cline-yes">3x</span>
220
+ <span class="cline-any cline-yes">3x</span>
221
+ <span class="cline-any cline-yes">3x</span>
222
+ <span class="cline-any cline-yes">3x</span>
223
+ <span class="cline-any cline-yes">3x</span>
224
+ <span class="cline-any cline-yes">3x</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-yes">14x</span>
231
+ <span class="cline-any cline-yes">14x</span>
232
+ <span class="cline-any cline-yes">14x</span>
233
+ <span class="cline-any cline-yes">4x</span>
234
+ <span class="cline-any cline-yes">4x</span>
235
+ <span class="cline-any cline-yes">4x</span>
236
+ <span class="cline-any cline-yes">4x</span>
237
+ <span class="cline-any cline-yes">4x</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-yes">10x</span>
240
+ <span class="cline-any cline-yes">10x</span>
241
+ <span class="cline-any cline-yes">10x</span>
242
+ <span class="cline-any cline-yes">10x</span>
243
+ <span class="cline-any cline-yes">10x</span>
244
+ <span class="cline-any cline-yes">10x</span>
245
+ <span class="cline-any cline-yes">10x</span>
246
+ <span class="cline-any cline-yes">10x</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
249
+ <span class="cline-any cline-no">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-yes">14x</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-yes">14x</span>
257
+ <span class="cline-any cline-yes">14x</span>
258
+ <span class="cline-any cline-yes">14x</span>
259
+ <span class="cline-any cline-yes">7x</span>
260
+ <span class="cline-any cline-yes">7x</span>
261
+ <span class="cline-any cline-yes">7x</span>
262
+ <span class="cline-any cline-yes">7x</span>
263
+ <span class="cline-any cline-yes">7x</span>
136
264
  <span class="cline-any cline-neutral">&nbsp;</span>
137
265
  <span class="cline-any cline-no">&nbsp;</span>
138
266
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -143,15 +271,19 @@
143
271
  <span class="cline-any cline-neutral">&nbsp;</span>
144
272
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import net from 'net';
145
273
  import { Ipv4Router, Ipv6Router, } from 'advising.js';
146
- import Blockable from './Blockable';
147
274
  &nbsp;
148
- class Blocks extends Blockable {
275
+ function getIntervalFromTime(time) {
276
+ const currentTime = new Date().getTime();
277
+ return Math.floor(currentTime - time);
278
+ }
279
+ &nbsp;
280
+ class Blocks {
149
281
  constructor(interval) {
150
- super();
151
282
  this.dealParams(interval);
152
283
  this.interval = interval;
153
- this.ipv4Block = new Ipv4Router({ debug: false, hideError: true, });
154
- this.ipv6Block = new Ipv6Router({ debug: false, hideError: true, });
284
+ this.count = 0;
285
+ this.ipv4Blocks = new Ipv4Router({ debug: false, hideError: true, });
286
+ this.ipv6Blocks = new Ipv6Router({ debug: false, hideError: true, });
155
287
  }
156
288
  &nbsp;
157
289
  dealParams(interval) {
@@ -162,16 +294,76 @@ class Blocks extends Blockable {
162
294
  <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval should be a positive integer otherwise it has no meaning.');</span>
163
295
  }
164
296
  }
297
+ &nbsp;
298
+ <span class="fstat-no" title="function not covered" > ge</span>tCount() {
299
+ <span class="cstat-no" title="statement not covered" > return this.count;</span>
300
+ }
301
+ &nbsp;
302
+ <span class="fstat-no" title="function not covered" > se</span>tInterval(interval) {
303
+ <span class="cstat-no" title="statement not covered" > if (!Number.isInteger(interval)) {</span>
304
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval parameter should be of integer type.');</span>
305
+ }
306
+ <span class="cstat-no" title="statement not covered" > if (interval &lt;= 0) {</span>
307
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval should be a positive integer otherwise it has no meaning.');</span>
308
+ }
309
+ <span class="cstat-no" title="statement not covered" > this.interval = interval;</span>
310
+ }
311
+ &nbsp;
312
+ cleanIpAddress(ip, formerInterval) {
313
+ let ipBlocks;
314
+ if (net.isIPv4(ip)) {
315
+ ipBlocks = this.ipv4Blocks;
316
+ } else if (net.isIPv6(ip)) {
317
+ ipBlocks = this.ipv6Blocks;
318
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
319
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected');</span>
320
+ }
321
+ const block = ipBlocks.gain(ip);
322
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (block !== undefined) {
323
+ const { time, } = block;
324
+ const interval = getIntervalFromTime(time);
325
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (interval &gt;= formerInterval) {
326
+ ipBlocks.ruin(ip);
327
+ this.count = 0;
328
+ }
329
+ }
330
+ }
331
+ &nbsp;
332
+ examineIpAddress(ip, ipBlocks) {
333
+ let ans = true;
334
+ const block = ipBlocks.gain(ip);
335
+ if (block === undefined) {
336
+ const currentTime = new Date().getTime();
337
+ ipBlocks.attach(ip, { time: currentTime, count: 1, });
338
+ this.count = 1;
339
+ const { interval, } = this;
340
+ setTimeout(() =&gt; this.cleanIpAddress(ip, this.interval), interval);
341
+ } else {
342
+ const { time, } = block;
343
+ const interval = getIntervalFromTime(time);
344
+ if (interval &lt; this.interval) {
345
+ let { count, } = block;
346
+ count += 1;
347
+ ipBlocks.revise(ip, { time, count, });
348
+ this.count = count;
349
+ ans = false;
350
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
351
+ <span class="cstat-no" title="statement not covered" > ipBlocks.ruin(ip);</span>
352
+ <span class="cstat-no" title="statement not covered" > this.count = 0;</span>
353
+ }
354
+ }
355
+ return ans;
356
+ }
165
357
  &nbsp;
166
358
  examine(ip) {
167
359
  <span class="missing-if-branch" title="else path not taken" >E</span>if (ip !== undefined) {
168
360
  const { interval, } = this;
169
361
  if (net.isIPv4(ip)) {
170
- const { ipv4Block, } = this;
171
- return this.examineIpAddress(ip, ipv4Block);
362
+ const { ipv4Blocks, } = this;
363
+ return this.examineIpAddress(ip, ipv4Blocks);
172
364
  } else if (net.isIPv6(ip)) {
173
- const { ipv6Block, } = this;
174
- return this.examineIpAddress(ip, ipv6Block);
365
+ const { ipv6Blocks, } = this;
366
+ return this.examineIpAddress(ip, ipv6Blocks);
175
367
  } else <span class="missing-if-branch" title="else path not taken" >E</span>{
176
368
  <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected.');</span>
177
369
  }
@@ -187,7 +379,7 @@ export default Blocks;
187
379
  <div class='footer quiet pad2 space-top1 center small'>
188
380
  Code coverage generated by
189
381
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
190
- at 2025-06-27T14:10:48.455Z
382
+ at 2025-06-29T06:58:33.883Z
191
383
  </div>
192
384
  <script src="../prettify.js"></script>
193
385
  <script>