manner.js 1.0.7 → 1.0.9
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/client/index.js +1 -34
- package/client/lib/clearCookie.js +1 -20
- package/client/lib/filterNamespace.js +1 -15
- package/client/lib/readCookie.js +1 -38
- package/client/lib/setCookie.js +1 -25
- package/coverage/clover.xml +105 -28
- package/coverage/coverage-final.json +4 -2
- package/coverage/lcov-report/byteArray.js.html +154 -0
- package/coverage/lcov-report/class/Blockable.js.html +262 -0
- package/coverage/lcov-report/class/Blocks.js.html +202 -0
- package/coverage/lcov-report/class/MultiFetch.js.html +131 -29
- package/coverage/lcov-report/class/index.html +44 -14
- package/coverage/lcov-report/formatHttpDate.js.html +2 -5
- package/coverage/lcov-report/formatHttpKey.js.html +1 -1
- package/coverage/lcov-report/getOwnIpAddresses.js.html +220 -0
- package/coverage/lcov-report/index.html +19 -19
- package/coverage/lcov-report/isIntranetIpv4Address.js.html +196 -0
- package/coverage/lcov-report/isIpv6Address.js.html +148 -0
- package/coverage/lcov-report/lib/byteArray.js.html +1 -1
- package/coverage/lcov-report/lib/formatHttpDate.js.html +1 -1
- package/coverage/lcov-report/lib/formatHttpKey.js.html +1 -1
- package/coverage/lcov-report/lib/getOwnIpAddresses.js.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/isIntranetIpv4Address.js.html +1 -1
- package/coverage/lcov-report/lib/isIpv6Address.js.html +4 -4
- package/coverage/lcov-report/lib/nonZeroByteArray.js.html +1 -1
- package/coverage/lcov-report/lib/parseHttpDate.js.html +1 -1
- package/coverage/lcov-report/lib/wrapIpv6.js.html +1 -1
- package/coverage/lcov-report/nonZeroByteArray.js.html +157 -0
- package/coverage/lcov-report/parseHttpDate.js.html +238 -0
- package/coverage/lcov-report/wrapIpv6.js.html +94 -0
- package/coverage/lcov.info +199 -49
- package/package.json +3 -1
- package/server/class/Blockable.js +1 -0
- package/server/class/Blocks.js +1 -0
- package/server/class/MultiFetch.js +1 -59
- package/server/index.js +1 -77
- package/server/lib/byteArray.js +1 -28
- package/server/lib/formatHttpDate.js +1 -12
- package/server/lib/formatHttpKey.js +1 -11
- package/server/lib/getOwnIpAddresses.js +1 -66
- package/server/lib/isIntranetIpv4Address.js +1 -44
- package/server/lib/isIpv6Address.js +1 -27
- package/server/lib/nonZeroByteArray.js +1 -31
- package/server/lib/parseHttpDate.js +1 -57
- package/server/lib/readCookie.js +1 -27
- package/server/lib/wrapIpv6.js +1 -9
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">69.56% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>32/46</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">62.06% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>18/29</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">69.56% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>32/46</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -109,63 +109,141 @@
|
|
|
109
109
|
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
110
|
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
111
|
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
113
147
|
<span class="cline-any cline-neutral"> </span>
|
|
114
148
|
<span class="cline-any cline-neutral"> </span>
|
|
115
149
|
<span class="cline-any cline-neutral"> </span>
|
|
116
150
|
<span class="cline-any cline-neutral"> </span>
|
|
117
|
-
<span class="cline-any cline-yes">1x</span>
|
|
118
|
-
<span class="cline-any cline-yes">1x</span>
|
|
119
|
-
<span class="cline-any cline-yes">1x</span>
|
|
120
151
|
<span class="cline-any cline-neutral"> </span>
|
|
121
152
|
<span class="cline-any cline-neutral"> </span>
|
|
122
153
|
<span class="cline-any cline-neutral"> </span>
|
|
154
|
+
<span class="cline-any cline-yes">2x</span>
|
|
155
|
+
<span class="cline-any cline-yes">2x</span>
|
|
156
|
+
<span class="cline-any cline-yes">2x</span>
|
|
157
|
+
<span class="cline-any cline-yes">2x</span>
|
|
158
|
+
<span class="cline-any cline-yes">2x</span>
|
|
123
159
|
<span class="cline-any cline-yes">1x</span>
|
|
160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
161
|
+
<span class="cline-any cline-yes">2x</span>
|
|
162
|
+
<span class="cline-any cline-yes">2x</span>
|
|
163
|
+
<span class="cline-any cline-yes">2x</span>
|
|
164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-yes">2x</span>
|
|
124
168
|
<span class="cline-any cline-no"> </span>
|
|
125
169
|
<span class="cline-any cline-no"> </span>
|
|
126
170
|
<span class="cline-any cline-no"> </span>
|
|
127
171
|
<span class="cline-any cline-no"> </span>
|
|
128
172
|
<span class="cline-any cline-neutral"> </span>
|
|
129
173
|
<span class="cline-any cline-neutral"> </span>
|
|
174
|
+
<span class="cline-any cline-yes">2x</span>
|
|
175
|
+
<span class="cline-any cline-yes">1x</span>
|
|
176
|
+
<span class="cline-any cline-no"> </span>
|
|
177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
178
|
+
<span class="cline-any cline-yes">1x</span>
|
|
179
|
+
<span class="cline-any cline-no"> </span>
|
|
180
|
+
<span class="cline-any cline-neutral"> </span>
|
|
181
|
+
<span class="cline-any cline-neutral"> </span>
|
|
182
|
+
<span class="cline-any cline-neutral"> </span>
|
|
130
183
|
<span class="cline-any cline-neutral"> </span>
|
|
131
184
|
<span class="cline-any cline-neutral"> </span>
|
|
185
|
+
<span class="cline-any cline-yes">43x</span>
|
|
186
|
+
<span class="cline-any cline-no"> </span>
|
|
187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
188
|
+
<span class="cline-any cline-yes">43x</span>
|
|
189
|
+
<span class="cline-any cline-no"> </span>
|
|
190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
191
|
+
<span class="cline-any cline-yes">43x</span>
|
|
132
192
|
<span class="cline-any cline-neutral"> </span>
|
|
133
|
-
<span class="cline-any cline-yes">
|
|
193
|
+
<span class="cline-any cline-yes">43x</span>
|
|
194
|
+
<span class="cline-any cline-yes">23x</span>
|
|
195
|
+
<span class="cline-any cline-yes">23x</span>
|
|
196
|
+
<span class="cline-any cline-yes">23x</span>
|
|
197
|
+
<span class="cline-any cline-yes">23x</span>
|
|
198
|
+
<span class="cline-any cline-no"> </span>
|
|
199
|
+
<span class="cline-any cline-no"> </span>
|
|
134
200
|
<span class="cline-any cline-no"> </span>
|
|
135
201
|
<span class="cline-any cline-neutral"> </span>
|
|
136
|
-
<span class="cline-any cline-yes">20x</span>
|
|
137
202
|
<span class="cline-any cline-no"> </span>
|
|
138
203
|
<span class="cline-any cline-neutral"> </span>
|
|
139
|
-
<span class="cline-any cline-
|
|
140
|
-
<span class="cline-any cline-yes">
|
|
141
|
-
<span class="cline-any cline-yes">
|
|
142
|
-
<span class="cline-any cline-
|
|
204
|
+
<span class="cline-any cline-neutral"> </span>
|
|
205
|
+
<span class="cline-any cline-yes">43x</span>
|
|
206
|
+
<span class="cline-any cline-yes">21x</span>
|
|
207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
208
|
+
<span class="cline-any cline-yes">22x</span>
|
|
209
|
+
<span class="cline-any cline-yes">22x</span>
|
|
210
|
+
<span class="cline-any cline-yes">18x</span>
|
|
143
211
|
<span class="cline-any cline-neutral"> </span>
|
|
144
212
|
<span class="cline-any cline-yes">4x</span>
|
|
145
213
|
<span class="cline-any cline-neutral"> </span>
|
|
146
|
-
<span class="cline-any cline-yes">
|
|
147
|
-
<span class="cline-any cline-yes">
|
|
148
|
-
<span class="cline-any cline-yes">
|
|
214
|
+
<span class="cline-any cline-yes">22x</span>
|
|
215
|
+
<span class="cline-any cline-yes">22x</span>
|
|
216
|
+
<span class="cline-any cline-yes">22x</span>
|
|
149
217
|
<span class="cline-any cline-no"> </span>
|
|
150
218
|
<span class="cline-any cline-no"> </span>
|
|
151
219
|
<span class="cline-any cline-neutral"> </span>
|
|
152
|
-
<span class="cline-any cline-yes">
|
|
153
|
-
<span class="cline-any cline-yes">
|
|
220
|
+
<span class="cline-any cline-yes">22x</span>
|
|
221
|
+
<span class="cline-any cline-yes">22x</span>
|
|
154
222
|
<span class="cline-any cline-neutral"> </span>
|
|
155
223
|
<span class="cline-any cline-neutral"> </span>
|
|
156
224
|
<span class="cline-any cline-neutral"> </span>
|
|
157
225
|
<span class="cline-any cline-neutral"> </span>
|
|
158
226
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import https from 'https';
|
|
227
|
+
import net from 'net';
|
|
159
228
|
import fetch from 'node-fetch';
|
|
229
|
+
import { Ipv4Router, Ipv6Router, } from 'advising.js';
|
|
230
|
+
import Blockable from './Blockable';
|
|
160
231
|
|
|
161
|
-
class MultiFetch {
|
|
162
|
-
constructor(bases) {
|
|
232
|
+
class MultiFetch extends Blockable {
|
|
233
|
+
constructor(bases, interval) {
|
|
234
|
+
super();
|
|
163
235
|
this.index = -1;
|
|
164
|
-
this.dealParams(bases);
|
|
236
|
+
this.dealParams(bases, interval);
|
|
165
237
|
this.bases = bases;
|
|
238
|
+
if (interval !== undefined) {
|
|
239
|
+
this.interval = interval;
|
|
240
|
+
}
|
|
241
|
+
this.ipv4Block = new Ipv4Router({ debug: false, hideError: true, });
|
|
242
|
+
this.ipv6Block = new Ipv6Router({ debug: false, hideError: true, });
|
|
243
|
+
this.cleanIpAddress = this.cleanIpAddress.bind(this);
|
|
166
244
|
}
|
|
167
245
|
|
|
168
|
-
dealParams(bases) {
|
|
246
|
+
dealParams(bases, interval) {
|
|
169
247
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(bases)) {
|
|
170
248
|
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The bases parameter bases should be a array type.');</span>
|
|
171
249
|
const { length, } = <span class="cstat-no" title="statement not covered" >bases;</span>
|
|
@@ -173,18 +251,42 @@ class MultiFetch {
|
|
|
173
251
|
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The bases parameter bases cannot have zero length.');</span>
|
|
174
252
|
}
|
|
175
253
|
}
|
|
254
|
+
if (interval !== undefined) {
|
|
255
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Number.isInteger(interval)) {
|
|
256
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval parameter should be of integer type.');</span>
|
|
257
|
+
}
|
|
258
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (interval <= 0) {
|
|
259
|
+
<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>
|
|
260
|
+
}
|
|
261
|
+
}
|
|
176
262
|
}
|
|
177
263
|
|
|
178
|
-
async fetch(path, options) {
|
|
264
|
+
async fetch(path, options, expandOptions = {}) {
|
|
179
265
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof path !== 'string') {
|
|
180
266
|
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The path parameter path should be of string type.');</span>
|
|
181
267
|
}
|
|
182
268
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof options !== 'object') {
|
|
183
269
|
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The options parameter should be a object type.');</span>
|
|
184
270
|
}
|
|
271
|
+
const { ip, } = expandOptions;
|
|
272
|
+
let ans;
|
|
273
|
+
if (ip !== undefined) {
|
|
274
|
+
const { interval, } = this;
|
|
275
|
+
if (net.isIPv4(ip)) {
|
|
276
|
+
const { ipv4Block, } = this;
|
|
277
|
+
ans = this.examineIpAddress(ip, ipv4Block);
|
|
278
|
+
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (net.isIPv6(ip)) {</span>
|
|
279
|
+
const { ipv6Block, } = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
280
|
+
<span class="cstat-no" title="statement not covered" > ans = this.examineIpAddress(ip, ipv6Block);</span>
|
|
281
|
+
} else {
|
|
282
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected.');</span>
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (ans === false) {
|
|
286
|
+
throw new Error('[Error] The current IP address is blocked because it is accessed too frequently.');
|
|
287
|
+
}
|
|
185
288
|
const { bases, } = this;
|
|
186
|
-
|
|
187
|
-
if (this.index < length - 1) {
|
|
289
|
+
if (this.index < bases.length - 1) {
|
|
188
290
|
this.index += 1;
|
|
189
291
|
} else {
|
|
190
292
|
this.index = 0;
|
|
@@ -208,7 +310,7 @@ export default MultiFetch;
|
|
|
208
310
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
209
311
|
Code coverage generated by
|
|
210
312
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
211
|
-
at 2025-06-
|
|
313
|
+
at 2025-06-27T12:52:18.636Z
|
|
212
314
|
</div>
|
|
213
315
|
<script src="../prettify.js"></script>
|
|
214
316
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">70.1% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>68/97</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">52.72% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>29/55</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">91.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>11/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">69.47% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>66/95</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -79,18 +79,48 @@
|
|
|
79
79
|
</tr>
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
|
-
<td class="file medium" data-value="
|
|
82
|
+
<td class="file medium" data-value="Blockable.js"><a href="Blockable.js.html">Blockable.js</a></td>
|
|
83
|
+
<td data-value="72.72" class="pic medium">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
|
|
85
|
+
</td>
|
|
86
|
+
<td data-value="72.72" class="pct medium">72.72%</td>
|
|
87
|
+
<td data-value="33" class="abs medium">24/33</td>
|
|
88
|
+
<td data-value="43.75" class="pct low">43.75%</td>
|
|
89
|
+
<td data-value="16" class="abs low">7/16</td>
|
|
90
|
+
<td data-value="83.33" class="pct high">83.33%</td>
|
|
91
|
+
<td data-value="6" class="abs high">5/6</td>
|
|
92
|
+
<td data-value="70.96" class="pct medium">70.96%</td>
|
|
93
|
+
<td data-value="31" class="abs medium">22/31</td>
|
|
94
|
+
</tr>
|
|
95
|
+
|
|
96
|
+
<tr>
|
|
97
|
+
<td class="file medium" data-value="Blocks.js"><a href="Blocks.js.html">Blocks.js</a></td>
|
|
83
98
|
<td data-value="66.66" class="pic medium">
|
|
84
99
|
<div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
|
|
85
100
|
</td>
|
|
86
101
|
<td data-value="66.66" class="pct medium">66.66%</td>
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
102
|
+
<td data-value="18" class="abs medium">12/18</td>
|
|
103
|
+
<td data-value="40" class="pct low">40%</td>
|
|
104
|
+
<td data-value="10" class="abs low">4/10</td>
|
|
90
105
|
<td data-value="100" class="pct high">100%</td>
|
|
91
106
|
<td data-value="3" class="abs high">3/3</td>
|
|
92
107
|
<td data-value="66.66" class="pct medium">66.66%</td>
|
|
93
|
-
<td data-value="
|
|
108
|
+
<td data-value="18" class="abs medium">12/18</td>
|
|
109
|
+
</tr>
|
|
110
|
+
|
|
111
|
+
<tr>
|
|
112
|
+
<td class="file medium" data-value="MultiFetch.js"><a href="MultiFetch.js.html">MultiFetch.js</a></td>
|
|
113
|
+
<td data-value="69.56" class="pic medium">
|
|
114
|
+
<div class="chart"><div class="cover-fill" style="width: 69%"></div><div class="cover-empty" style="width: 31%"></div></div>
|
|
115
|
+
</td>
|
|
116
|
+
<td data-value="69.56" class="pct medium">69.56%</td>
|
|
117
|
+
<td data-value="46" class="abs medium">32/46</td>
|
|
118
|
+
<td data-value="62.06" class="pct medium">62.06%</td>
|
|
119
|
+
<td data-value="29" class="abs medium">18/29</td>
|
|
120
|
+
<td data-value="100" class="pct high">100%</td>
|
|
121
|
+
<td data-value="3" class="abs high">3/3</td>
|
|
122
|
+
<td data-value="69.56" class="pct medium">69.56%</td>
|
|
123
|
+
<td data-value="46" class="abs medium">32/46</td>
|
|
94
124
|
</tr>
|
|
95
125
|
|
|
96
126
|
</tbody>
|
|
@@ -101,7 +131,7 @@
|
|
|
101
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
132
|
Code coverage generated by
|
|
103
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-06-
|
|
134
|
+
at 2025-06-27T12:52:18.636Z
|
|
105
135
|
</div>
|
|
106
136
|
<script src="../prettify.js"></script>
|
|
107
137
|
<script>
|
|
@@ -69,21 +69,18 @@
|
|
|
69
69
|
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
70
|
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
71
|
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
74
73
|
<span class="cline-any cline-yes">1x</span>
|
|
75
74
|
<span class="cline-any cline-yes">1x</span>
|
|
76
75
|
<span class="cline-any cline-yes">1x</span>
|
|
77
76
|
<span class="cline-any cline-yes">1x</span>
|
|
78
77
|
<span class="cline-any cline-neutral"> </span>
|
|
79
|
-
<span class="cline-any cline-neutral"> </span>
|
|
80
78
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">export default function formatHttpDate(ms) {
|
|
81
79
|
const date = new Date(ms);
|
|
82
80
|
let [week, month, day, year, time, zone] = date.toString().split(' ');
|
|
83
81
|
zone = zone.split('+')[0];
|
|
84
82
|
return week + ', ' + day + ' ' + month + ' ' + year + ' ' + time + ' ' + zone;
|
|
85
83
|
}
|
|
86
|
-
|
|
87
84
|
</pre></td></tr></table></pre>
|
|
88
85
|
|
|
89
86
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -91,7 +88,7 @@
|
|
|
91
88
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
92
89
|
Code coverage generated by
|
|
93
90
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
94
|
-
at 2025-06-
|
|
91
|
+
at 2025-06-27T09:39:17.492Z
|
|
95
92
|
</div>
|
|
96
93
|
<script src="prettify.js"></script>
|
|
97
94
|
<script>
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
86
86
|
Code coverage generated by
|
|
87
87
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
88
|
-
at 2025-06-
|
|
88
|
+
at 2025-06-27T09:39:17.492Z
|
|
89
89
|
</div>
|
|
90
90
|
<script src="prettify.js"></script>
|
|
91
91
|
<script>
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for getOwnIpAddresses.js</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="index.html">All files</a> getOwnIpAddresses.js</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>25/25</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">92.85% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>13/14</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>2/2</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>24/24</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
116
|
+
<span class="cline-any cline-yes">1x</span>
|
|
117
|
+
<span class="cline-any cline-yes">1x</span>
|
|
118
|
+
<span class="cline-any cline-yes">1x</span>
|
|
119
|
+
<span class="cline-any cline-yes">7x</span>
|
|
120
|
+
<span class="cline-any cline-yes">7x</span>
|
|
121
|
+
<span class="cline-any cline-yes">7x</span>
|
|
122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
|
+
<span class="cline-any cline-yes">2x</span>
|
|
125
|
+
<span class="cline-any cline-yes">4x</span>
|
|
126
|
+
<span class="cline-any cline-yes">4x</span>
|
|
127
|
+
<span class="cline-any cline-yes">4x</span>
|
|
128
|
+
<span class="cline-any cline-yes">1x</span>
|
|
129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
130
|
+
<span class="cline-any cline-yes">3x</span>
|
|
131
|
+
<span class="cline-any cline-yes">3x</span>
|
|
132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<span class="cline-any cline-yes">2x</span>
|
|
134
|
+
<span class="cline-any cline-yes">2x</span>
|
|
135
|
+
<span class="cline-any cline-yes">1x</span>
|
|
136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-yes">2x</span>
|
|
138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
140
|
+
<span class="cline-any cline-yes">1x</span>
|
|
141
|
+
<span class="cline-any cline-yes">1x</span>
|
|
142
|
+
<span class="cline-any cline-yes">1x</span>
|
|
143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
144
|
+
<span class="cline-any cline-yes">1x</span>
|
|
145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
147
|
+
<span class="cline-any cline-yes">3x</span>
|
|
148
|
+
<span class="cline-any cline-yes">1x</span>
|
|
149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
154
|
+
<span class="cline-any cline-yes">1x</span>
|
|
155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
156
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import os from 'os';
|
|
157
|
+
import isIntranetIpv4Address from '~/server/lib/isIntranetIpv4Address';
|
|
158
|
+
import isIpv6Address from '~/server/lib/isIpv6Address';
|
|
159
|
+
|
|
160
|
+
export default function getOwnIpAddresses() {
|
|
161
|
+
const nets = os.networkInterfaces();
|
|
162
|
+
const ans = [];
|
|
163
|
+
Object.keys(nets).forEach((key) => {
|
|
164
|
+
const net = nets[key];
|
|
165
|
+
const { length, } = net;
|
|
166
|
+
if (length >= 2) {
|
|
167
|
+
let ipv4;
|
|
168
|
+
let ipv6;
|
|
169
|
+
for (let i = 0; i < length; i += 1) {
|
|
170
|
+
const ip = net[i];
|
|
171
|
+
const { internal, } = ip
|
|
172
|
+
if (internal === true) {
|
|
173
|
+
break;
|
|
174
|
+
} else {
|
|
175
|
+
const { family, } = ip
|
|
176
|
+
switch (family) {
|
|
177
|
+
case 'IPv6': {
|
|
178
|
+
const { address, } = ip;
|
|
179
|
+
if (isIpv6Address(address)) {
|
|
180
|
+
ipv6 = address;
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case 'IPv4': {
|
|
185
|
+
const { address, } = ip;
|
|
186
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (isIntranetIpv4Address(address)) {
|
|
187
|
+
ipv4 = address;
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (ipv4 !== undefined && ipv6 !== undefined) {
|
|
193
|
+
ans.push({ ipv4, ipv6, });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
return ans;
|
|
200
|
+
}
|
|
201
|
+
</pre></td></tr></table></pre>
|
|
202
|
+
|
|
203
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
204
|
+
</div><!-- /wrapper -->
|
|
205
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
206
|
+
Code coverage generated by
|
|
207
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
208
|
+
at 2025-06-27T09:39:17.492Z
|
|
209
|
+
</div>
|
|
210
|
+
<script src="prettify.js"></script>
|
|
211
|
+
<script>
|
|
212
|
+
window.onload = function () {
|
|
213
|
+
prettyPrint();
|
|
214
|
+
};
|
|
215
|
+
</script>
|
|
216
|
+
<script src="sorter.js"></script>
|
|
217
|
+
<script src="block-navigation.js"></script>
|
|
218
|
+
</body>
|
|
219
|
+
</html>
|
|
220
|
+
|