@tak-ps/node-tak 4.1.1 → 4.3.0
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/CHANGELOG.md +8 -0
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/test/findCoT.test.js +59 -0
- package/dist/test/findCoT.test.js.map +1 -1
- package/index.ts +9 -9
- package/package.json +1 -1
- package/test/findCoT.test.ts +62 -0
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import tls from 'node:tls';
|
|
3
3
|
import CoT from '@tak-ps/node-cot';
|
|
4
|
+
/* eslint-disable no-control-regex */
|
|
5
|
+
export const REGEX_CONTROL = /[\u000B-\u001F\u007F-\u009F]/g;
|
|
6
|
+
// Match <event .../> or <event> but not <events>
|
|
7
|
+
export const REGEX_EVENT = /(<event[ >](?:[\s\S]|.)*?<\/event>)((?:[\s\S]|.)*)/;
|
|
4
8
|
export default class TAK extends EventEmitter {
|
|
5
9
|
id;
|
|
6
10
|
type;
|
|
@@ -169,15 +173,10 @@ export default class TAK extends EventEmitter {
|
|
|
169
173
|
}
|
|
170
174
|
// https://github.com/vidterra/multitak/blob/main/app/lib/helper.js#L4
|
|
171
175
|
static findCoT(str) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if (!match) {
|
|
177
|
-
match = str.match(/(<event[^>]*\/>)(.*)/); // find first CoT
|
|
178
|
-
if (!match)
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
176
|
+
str = str.replace(REGEX_CONTROL, "");
|
|
177
|
+
const match = str.match(REGEX_EVENT); // find first CoT
|
|
178
|
+
if (!match)
|
|
179
|
+
return null;
|
|
181
180
|
return {
|
|
182
181
|
event: match[1],
|
|
183
182
|
remainder: match[2],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,GAAG,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,4 +29,63 @@ remarks field
|
|
|
29
29
|
});
|
|
30
30
|
t.end();
|
|
31
31
|
});
|
|
32
|
+
test('findCoT - New Lines - Non-Greedy', (t) => {
|
|
33
|
+
const res = TAK.findCoT(`
|
|
34
|
+
<event>
|
|
35
|
+
<detail remarks="
|
|
36
|
+
I am a multiline
|
|
37
|
+
remarks field
|
|
38
|
+
"/>
|
|
39
|
+
</event><event>
|
|
40
|
+
<detail remarks="
|
|
41
|
+
I am a multiline
|
|
42
|
+
remarks field
|
|
43
|
+
"/>
|
|
44
|
+
</event>`);
|
|
45
|
+
t.deepEquals(res, {
|
|
46
|
+
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
47
|
+
remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
48
|
+
discard: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event><event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>'
|
|
49
|
+
});
|
|
50
|
+
t.end();
|
|
51
|
+
});
|
|
52
|
+
test('findCoT - bad preceding data', (t) => {
|
|
53
|
+
const res = TAK.findCoT(`
|
|
54
|
+
<fake/>
|
|
55
|
+
<event><detail remarks="I am remarks"/>
|
|
56
|
+
</event>
|
|
57
|
+
`);
|
|
58
|
+
t.deepEquals(res, {
|
|
59
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
60
|
+
remainder: '\n',
|
|
61
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n'
|
|
62
|
+
});
|
|
63
|
+
t.end();
|
|
64
|
+
});
|
|
65
|
+
test('findCoT - bad post data', (t) => {
|
|
66
|
+
const res = TAK.findCoT(`
|
|
67
|
+
<event><detail remarks="I am remarks"/>
|
|
68
|
+
</event>
|
|
69
|
+
<fake/>
|
|
70
|
+
`);
|
|
71
|
+
t.deepEquals(res, {
|
|
72
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
73
|
+
remainder: '\n<fake/>\n',
|
|
74
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n<fake/>\n'
|
|
75
|
+
});
|
|
76
|
+
t.end();
|
|
77
|
+
});
|
|
78
|
+
test('findCoT - mixed', (t) => {
|
|
79
|
+
const res = TAK.findCoT(`
|
|
80
|
+
<event><detail remarks="I am remarks"/>
|
|
81
|
+
</event>
|
|
82
|
+
<fake/>
|
|
83
|
+
<event><detail remarks="I am remarks"/></event>`);
|
|
84
|
+
t.deepEquals(res, {
|
|
85
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
86
|
+
remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
|
|
87
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n<fake/>\n<event><detail remarks="I am remarks"/></event>'
|
|
88
|
+
});
|
|
89
|
+
t.end();
|
|
90
|
+
});
|
|
32
91
|
//# sourceMappingURL=findCoT.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findCoT.test.js","sourceRoot":"","sources":["../../test/findCoT.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,iBAAiB;KAC7B,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;SAMnB,CAAC,CAAC;IACP,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,oFAAoF;KAChG,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"findCoT.test.js","sourceRoot":"","sources":["../../test/findCoT.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,iBAAiB;KAC7B,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;SAMnB,CAAC,CAAC;IACP,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,oFAAoF;KAChG,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;;;;;;SAWnB,CAAC,CAAC;IACP,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,oFAAoF;QAC/F,OAAO,EAAE,sKAAsK;KAClL,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,EAAE,EAAE;IACvC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,qDAAqD;KACjE,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,8DAA8D;KAC1E,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;IAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;gDAIoB,CAAC,CAAC;IAC9C,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,4DAA4D;QACvE,OAAO,EAAE,6GAA6G;KACzH,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
|
package/index.ts
CHANGED
|
@@ -3,6 +3,12 @@ import tls from 'node:tls';
|
|
|
3
3
|
import CoT from '@tak-ps/node-cot';
|
|
4
4
|
import type { TLSSocket } from 'node:tls'
|
|
5
5
|
|
|
6
|
+
/* eslint-disable no-control-regex */
|
|
7
|
+
export const REGEX_CONTROL = /[\u000B-\u001F\u007F-\u009F]/g;
|
|
8
|
+
|
|
9
|
+
// Match <event .../> or <event> but not <events>
|
|
10
|
+
export const REGEX_EVENT = /(<event[ >](?:[\s\S]|.)*?<\/event>)((?:[\s\S]|.)*)/
|
|
11
|
+
|
|
6
12
|
/**
|
|
7
13
|
* Store the TAK Client Certificate for a connection
|
|
8
14
|
*/
|
|
@@ -213,16 +219,10 @@ export default class TAK extends EventEmitter {
|
|
|
213
219
|
|
|
214
220
|
// https://github.com/vidterra/multitak/blob/main/app/lib/helper.js#L4
|
|
215
221
|
static findCoT(str: string): null | PartialCoT {
|
|
216
|
-
|
|
217
|
-
str = str.replace(/[\u000B-\u001F\u007F-\u009F]/g, "");
|
|
222
|
+
str = str.replace(REGEX_CONTROL, "");
|
|
218
223
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if (!match) {
|
|
223
|
-
match = str.match(/(<event[^>]*\/>)(.*)/); // find first CoT
|
|
224
|
-
if (!match) return null;
|
|
225
|
-
}
|
|
224
|
+
const match = str.match(REGEX_EVENT); // find first CoT
|
|
225
|
+
if (!match) return null;
|
|
226
226
|
|
|
227
227
|
return {
|
|
228
228
|
event: match[1],
|
package/package.json
CHANGED
package/test/findCoT.test.ts
CHANGED
|
@@ -33,3 +33,65 @@ remarks field
|
|
|
33
33
|
t.end();
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
+
test('findCoT - New Lines - Non-Greedy', (t) => {
|
|
37
|
+
const res = TAK.findCoT(`
|
|
38
|
+
<event>
|
|
39
|
+
<detail remarks="
|
|
40
|
+
I am a multiline
|
|
41
|
+
remarks field
|
|
42
|
+
"/>
|
|
43
|
+
</event><event>
|
|
44
|
+
<detail remarks="
|
|
45
|
+
I am a multiline
|
|
46
|
+
remarks field
|
|
47
|
+
"/>
|
|
48
|
+
</event>`);
|
|
49
|
+
t.deepEquals(res, {
|
|
50
|
+
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
51
|
+
remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
52
|
+
discard: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event><event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>'
|
|
53
|
+
});
|
|
54
|
+
t.end();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('findCoT - bad preceding data', (t) => {
|
|
58
|
+
const res = TAK.findCoT(`
|
|
59
|
+
<fake/>
|
|
60
|
+
<event><detail remarks="I am remarks"/>
|
|
61
|
+
</event>
|
|
62
|
+
`);
|
|
63
|
+
t.deepEquals(res, {
|
|
64
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
65
|
+
remainder: '\n',
|
|
66
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n'
|
|
67
|
+
});
|
|
68
|
+
t.end();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('findCoT - bad post data', (t) => {
|
|
72
|
+
const res = TAK.findCoT(`
|
|
73
|
+
<event><detail remarks="I am remarks"/>
|
|
74
|
+
</event>
|
|
75
|
+
<fake/>
|
|
76
|
+
`);
|
|
77
|
+
t.deepEquals(res, {
|
|
78
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
79
|
+
remainder: '\n<fake/>\n',
|
|
80
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n<fake/>\n'
|
|
81
|
+
});
|
|
82
|
+
t.end();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('findCoT - mixed', (t) => {
|
|
86
|
+
const res = TAK.findCoT(`
|
|
87
|
+
<event><detail remarks="I am remarks"/>
|
|
88
|
+
</event>
|
|
89
|
+
<fake/>
|
|
90
|
+
<event><detail remarks="I am remarks"/></event>`);
|
|
91
|
+
t.deepEquals(res, {
|
|
92
|
+
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
93
|
+
remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
|
|
94
|
+
discard: '<event><detail remarks="I am remarks"/>\n</event>\n<fake/>\n<event><detail remarks="I am remarks"/></event>'
|
|
95
|
+
});
|
|
96
|
+
t.end();
|
|
97
|
+
});
|