@tak-ps/node-tak 12.8.0 → 12.10.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/lib/auth.js +12 -0
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/multipart.d.ts +8 -0
- package/dist/lib/multipart.js +61 -0
- package/dist/lib/multipart.js.map +1 -0
- package/dist/test/default.test.js +5 -5
- package/dist/test/default.test.js.map +1 -1
- package/dist/test/findCoT.test.js +16 -22
- package/dist/test/findCoT.test.js.map +1 -1
- package/dist/test/pipeline.test.js +56 -70
- package/dist/test/pipeline.test.js.map +1 -1
- package/dist/test/queue.test.js +22 -25
- package/dist/test/queue.test.js.map +1 -1
- package/dist/test/uploadPackage.test.d.ts +1 -0
- package/dist/test/uploadPackage.test.js +51 -0
- package/dist/test/uploadPackage.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/lib/auth.ts +13 -0
- package/lib/multipart.ts +99 -0
- package/package.json +1 -3
- package/test/default.test.ts +5 -5
- package/test/findCoT.test.ts +16 -22
- package/test/pipeline.test.ts +56 -71
- package/test/queue.test.ts +22 -25
- package/test/uploadPackage.test.ts +62 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
## Version History
|
|
12
12
|
|
|
13
|
+
### v12.10.0 - 2025-04-14
|
|
14
|
+
|
|
15
|
+
- :rocket: handle multipart form data internally
|
|
16
|
+
|
|
17
|
+
### v12.9.0 - 2025-04-13
|
|
18
|
+
|
|
19
|
+
- :arrow_up: Remove `tape` in favor of `node:test` and update tests accordingly
|
|
20
|
+
|
|
13
21
|
### v12.8.0 - 2025-04-13
|
|
14
22
|
|
|
15
23
|
- :arrow_up: Remove use of `form-data`
|
package/dist/lib/auth.js
CHANGED
|
@@ -2,6 +2,7 @@ import fetch from './fetch.js';
|
|
|
2
2
|
import { Type } from '@sinclair/typebox';
|
|
3
3
|
import { Client } from 'undici';
|
|
4
4
|
import stream2buffer from './stream.js';
|
|
5
|
+
import { encodeMultipartFormData } from './multipart.js';
|
|
5
6
|
/**
|
|
6
7
|
* Store the TAK Client Certificate for a connection
|
|
7
8
|
*/
|
|
@@ -76,6 +77,17 @@ export class APIAuthCertificate extends APIAuth {
|
|
|
76
77
|
rejectUnauthorized: false,
|
|
77
78
|
}
|
|
78
79
|
});
|
|
80
|
+
if (typeof FormData !== 'undefined' && opts.body instanceof FormData) {
|
|
81
|
+
const multipart = await encodeMultipartFormData(opts.body);
|
|
82
|
+
opts = {
|
|
83
|
+
...opts,
|
|
84
|
+
headers: {
|
|
85
|
+
...(opts.headers || {}),
|
|
86
|
+
...multipart.headers
|
|
87
|
+
},
|
|
88
|
+
body: multipart.body
|
|
89
|
+
};
|
|
90
|
+
}
|
|
79
91
|
const res = await client.request({
|
|
80
92
|
path: String(url).replace(api.url.origin, ''),
|
|
81
93
|
...opts
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,aAAa,MAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
function escapeQuoted(value) {
|
|
4
|
+
return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
5
|
+
}
|
|
6
|
+
export async function encodeMultipartFormData(form) {
|
|
7
|
+
const boundary = `----node-tak-${crypto.randomUUID()}`;
|
|
8
|
+
const closing = Buffer.from(`--${boundary}--\r\n`);
|
|
9
|
+
const parts = Array.from(form.entries()).map(([name, value]) => {
|
|
10
|
+
if (typeof value === 'string') {
|
|
11
|
+
const header = Buffer.from(`--${boundary}\r\n`
|
|
12
|
+
+ `Content-Disposition: form-data; name="${escapeQuoted(name)}"\r\n\r\n`);
|
|
13
|
+
const body = Buffer.from(value);
|
|
14
|
+
const trailer = Buffer.from('\r\n');
|
|
15
|
+
return {
|
|
16
|
+
header,
|
|
17
|
+
kind: 'buffer',
|
|
18
|
+
body,
|
|
19
|
+
trailer,
|
|
20
|
+
size: header.length + body.length + trailer.length,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const filename = 'name' in value && typeof value.name === 'string'
|
|
24
|
+
? value.name
|
|
25
|
+
: 'blob';
|
|
26
|
+
const type = value.type || 'application/octet-stream';
|
|
27
|
+
const header = Buffer.from(`--${boundary}\r\n`
|
|
28
|
+
+ `Content-Disposition: form-data; name="${escapeQuoted(name)}"; filename="${escapeQuoted(filename)}"\r\n`
|
|
29
|
+
+ `Content-Type: ${type}\r\n\r\n`);
|
|
30
|
+
const trailer = Buffer.from('\r\n');
|
|
31
|
+
return {
|
|
32
|
+
header,
|
|
33
|
+
kind: 'file',
|
|
34
|
+
body: value,
|
|
35
|
+
trailer,
|
|
36
|
+
size: header.length + value.size + trailer.length,
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const contentLength = parts.reduce((sum, part) => sum + part.size, 0) + closing.length;
|
|
40
|
+
const body = Readable.from((async function* () {
|
|
41
|
+
for (const part of parts) {
|
|
42
|
+
yield part.header;
|
|
43
|
+
if (part.kind === 'buffer') {
|
|
44
|
+
yield part.body;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
yield Buffer.from(await part.body.arrayBuffer());
|
|
48
|
+
}
|
|
49
|
+
yield part.trailer;
|
|
50
|
+
}
|
|
51
|
+
yield closing;
|
|
52
|
+
})());
|
|
53
|
+
return {
|
|
54
|
+
body,
|
|
55
|
+
headers: {
|
|
56
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
57
|
+
'Content-Length': String(contentLength),
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=multipart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multipart.js","sourceRoot":"","sources":["../../lib/multipart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import TAK, { CoT } from '../index.js';
|
|
2
|
-
import test from '
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
test('Ensure Export', () => {
|
|
5
|
+
assert.ok(TAK);
|
|
6
|
+
assert.ok(CoT);
|
|
7
7
|
});
|
|
8
8
|
//# sourceMappingURL=default.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.test.js","sourceRoot":"","sources":["../../test/default.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"default.test.js","sourceRoot":"","sources":["../../test/default.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IACvB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import TAK from '../index.js';
|
|
2
|
-
import test from '
|
|
3
|
-
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
test('findCoT - Unfinished', () => {
|
|
4
5
|
const res = TAK.findCoT('<event ><detail>');
|
|
5
|
-
|
|
6
|
-
t.end();
|
|
6
|
+
assert.equal(res, null);
|
|
7
7
|
});
|
|
8
|
-
test('findCoT - Basic', (
|
|
8
|
+
test('findCoT - Basic', () => {
|
|
9
9
|
const res = TAK.findCoT('<event></event>');
|
|
10
|
-
|
|
10
|
+
assert.deepEqual(res, {
|
|
11
11
|
event: '<event></event>',
|
|
12
12
|
remainder: '',
|
|
13
13
|
});
|
|
14
|
-
t.end();
|
|
15
14
|
});
|
|
16
|
-
test('findCoT - New Lines', (
|
|
15
|
+
test('findCoT - New Lines', () => {
|
|
17
16
|
const res = TAK.findCoT(`
|
|
18
17
|
<event>
|
|
19
18
|
<detail remarks="
|
|
@@ -21,13 +20,12 @@ I am a multiline
|
|
|
21
20
|
remarks field
|
|
22
21
|
"/>
|
|
23
22
|
</event>`);
|
|
24
|
-
|
|
23
|
+
assert.deepEqual(res, {
|
|
25
24
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
26
25
|
remainder: '',
|
|
27
26
|
});
|
|
28
|
-
t.end();
|
|
29
27
|
});
|
|
30
|
-
test('findCoT - New Lines - Non-Greedy', (
|
|
28
|
+
test('findCoT - New Lines - Non-Greedy', () => {
|
|
31
29
|
const res = TAK.findCoT(`
|
|
32
30
|
<event>
|
|
33
31
|
<detail remarks="
|
|
@@ -40,46 +38,42 @@ I am a multiline
|
|
|
40
38
|
remarks field
|
|
41
39
|
"/>
|
|
42
40
|
</event>`);
|
|
43
|
-
|
|
41
|
+
assert.deepEqual(res, {
|
|
44
42
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
45
43
|
remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
46
44
|
});
|
|
47
|
-
t.end();
|
|
48
45
|
});
|
|
49
|
-
test('findCoT - bad preceding data', (
|
|
46
|
+
test('findCoT - bad preceding data', () => {
|
|
50
47
|
const res = TAK.findCoT(`
|
|
51
48
|
<fake/>
|
|
52
49
|
<event><detail remarks="I am remarks"/>
|
|
53
50
|
</event>
|
|
54
51
|
`);
|
|
55
|
-
|
|
52
|
+
assert.deepEqual(res, {
|
|
56
53
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
57
54
|
remainder: '\n',
|
|
58
55
|
});
|
|
59
|
-
t.end();
|
|
60
56
|
});
|
|
61
|
-
test('findCoT - bad post data', (
|
|
57
|
+
test('findCoT - bad post data', () => {
|
|
62
58
|
const res = TAK.findCoT(`
|
|
63
59
|
<event><detail remarks="I am remarks"/>
|
|
64
60
|
</event>
|
|
65
61
|
<fake/>
|
|
66
62
|
`);
|
|
67
|
-
|
|
63
|
+
assert.deepEqual(res, {
|
|
68
64
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
69
65
|
remainder: '\n<fake/>\n',
|
|
70
66
|
});
|
|
71
|
-
t.end();
|
|
72
67
|
});
|
|
73
|
-
test('findCoT - mixed', (
|
|
68
|
+
test('findCoT - mixed', () => {
|
|
74
69
|
const res = TAK.findCoT(`
|
|
75
70
|
<event><detail remarks="I am remarks"/>
|
|
76
71
|
</event>
|
|
77
72
|
<fake/>
|
|
78
73
|
<event><detail remarks="I am remarks"/></event>`);
|
|
79
|
-
|
|
74
|
+
assert.deepEqual(res, {
|
|
80
75
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
81
76
|
remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
|
|
82
77
|
});
|
|
83
|
-
t.end();
|
|
84
78
|
});
|
|
85
79
|
//# 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;
|
|
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,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,EAAE;KAChB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;SAMnB,CAAC,CAAC;IACP,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,EAAE;KAChB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;;;;;;SAWnB,CAAC,CAAC;IACP,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,oFAAoF;KAClG,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,IAAI;KAClB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,aAAa;KAC3B,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;gDAIoB,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,4DAA4D;KAC1E,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import test from '
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
2
3
|
import { EventEmitter } from 'node:events';
|
|
3
4
|
import TAK, { CoT } from '../index.js';
|
|
4
5
|
import { CoTParser } from '@tak-ps/node-cot';
|
|
@@ -17,33 +18,30 @@ function createFakeSocket(opts = {}) {
|
|
|
17
18
|
setNoDelay: () => { },
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
test('write - resolves when all CoTs are queued and sent', async (
|
|
21
|
+
test('write - resolves when all CoTs are queued and sent', async () => {
|
|
21
22
|
const tak = createTAK();
|
|
22
23
|
tak.client = createFakeSocket();
|
|
23
24
|
const cots = [CoT.ping(), CoT.ping()];
|
|
24
25
|
await tak.write(cots);
|
|
25
|
-
|
|
26
|
-
t.end();
|
|
26
|
+
assert.equal(tak.queue.length, 0, 'queue empty after write + pull');
|
|
27
27
|
});
|
|
28
|
-
test('write - returns early when destroyed', async (
|
|
28
|
+
test('write - returns early when destroyed', async () => {
|
|
29
29
|
const tak = createTAK();
|
|
30
30
|
tak.destroyed = true;
|
|
31
31
|
await tak.write([CoT.ping()]);
|
|
32
|
-
|
|
33
|
-
t.end();
|
|
32
|
+
assert.equal(tak.queue.length, 0, 'nothing queued');
|
|
34
33
|
});
|
|
35
|
-
test('write - multiple concurrent writes', async (
|
|
34
|
+
test('write - multiple concurrent writes', async () => {
|
|
36
35
|
const tak = createTAK();
|
|
37
36
|
tak.client = createFakeSocket();
|
|
38
37
|
const order = [];
|
|
39
38
|
const p1 = tak.write([CoT.ping()]).then(() => order.push(1));
|
|
40
39
|
const p2 = tak.write([CoT.ping()]).then(() => order.push(2));
|
|
41
40
|
await Promise.all([p1, p2]);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
t.end();
|
|
41
|
+
assert.deepEqual(order, [1, 2], 'writes resolve in order');
|
|
42
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
45
43
|
});
|
|
46
|
-
test('pull - batches CoTs into single socket.write call', async (
|
|
44
|
+
test('pull - batches CoTs into single socket.write call', async () => {
|
|
47
45
|
const tak = createTAK({ socketBatchSize: 64 });
|
|
48
46
|
const writeCalls = [];
|
|
49
47
|
tak.client = createFakeSocket({
|
|
@@ -53,12 +51,11 @@ test('pull - batches CoTs into single socket.write call', async (t) => {
|
|
|
53
51
|
},
|
|
54
52
|
});
|
|
55
53
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
t.end();
|
|
54
|
+
assert.equal(writeCalls.length, 1, 'socket.write called once for batch');
|
|
55
|
+
assert.ok(writeCalls[0].includes('<event'), 'batch contains XML events');
|
|
56
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
60
57
|
});
|
|
61
|
-
test('pull - respects backpressure and resumes on process()', async (
|
|
58
|
+
test('pull - respects backpressure and resumes on process()', async () => {
|
|
62
59
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
63
60
|
let callCount = 0;
|
|
64
61
|
const socket = createFakeSocket({
|
|
@@ -74,16 +71,15 @@ test('pull - respects backpressure and resumes on process()', async (t) => {
|
|
|
74
71
|
tak.client = socket;
|
|
75
72
|
// Both CoTs get queued immediately, pull() sends 1 and hits backpressure
|
|
76
73
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
assert.equal(callCount, 1, 'one write before backpressure');
|
|
75
|
+
assert.equal(tak.queue.length, 1, 'one item still in queue');
|
|
79
76
|
// Simulate backpressure clearing (equivalent to drain event)
|
|
80
77
|
socket.writableNeedDrain = false;
|
|
81
78
|
tak.process();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
t.end();
|
|
79
|
+
assert.equal(callCount, 2, 'second write after backpressure cleared');
|
|
80
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
85
81
|
});
|
|
86
|
-
test('pull - error in socket.write triggers destroy + error event', async (
|
|
82
|
+
test('pull - error in socket.write triggers destroy + error event', async () => {
|
|
87
83
|
const tak = createTAK();
|
|
88
84
|
tak.client = createFakeSocket({
|
|
89
85
|
write() { throw new Error('write failed'); },
|
|
@@ -94,28 +90,25 @@ test('pull - error in socket.write triggers destroy + error event', async (t) =>
|
|
|
94
90
|
// write() enqueues, pull() throws internally, catches → destroy + emit error
|
|
95
91
|
// write() sees destroyed=true on next check and returns
|
|
96
92
|
await tak.write([CoT.ping()]);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
t.end();
|
|
93
|
+
assert.equal(tak.destroyed, true, 'destroyed after write error');
|
|
94
|
+
assert.ok(errorFired, 'error event fired');
|
|
95
|
+
assert.equal(errorMsg, 'write failed', 'error message matches');
|
|
101
96
|
});
|
|
102
|
-
test('pull - noop when already writing', (
|
|
97
|
+
test('pull - noop when already writing', () => {
|
|
103
98
|
const tak = createTAK();
|
|
104
99
|
tak.client = createFakeSocket();
|
|
105
100
|
tak.writing = true;
|
|
106
101
|
tak.queue.push('<event/>');
|
|
107
102
|
// pull() should return immediately since writing=true
|
|
108
103
|
tak.process();
|
|
109
|
-
|
|
110
|
-
t.end();
|
|
104
|
+
assert.equal(tak.queue.length, 1, 'queue unchanged');
|
|
111
105
|
});
|
|
112
|
-
test('flush - resolves immediately when nothing queued', async (
|
|
106
|
+
test('flush - resolves immediately when nothing queued', async () => {
|
|
113
107
|
const tak = createTAK();
|
|
114
108
|
await tak.flush();
|
|
115
|
-
|
|
116
|
-
t.end();
|
|
109
|
+
assert.ok(true, 'flush resolved immediately');
|
|
117
110
|
});
|
|
118
|
-
test('flush - rejects when destroyed mid-flush', async (
|
|
111
|
+
test('flush - rejects when destroyed mid-flush', async () => {
|
|
119
112
|
const tak = createTAK();
|
|
120
113
|
tak.client = createFakeSocket();
|
|
121
114
|
// Simulate an in-progress write so flush enters the wait path
|
|
@@ -125,15 +118,14 @@ test('flush - rejects when destroyed mid-flush', async (t) => {
|
|
|
125
118
|
tak.destroy();
|
|
126
119
|
try {
|
|
127
120
|
await p;
|
|
128
|
-
|
|
121
|
+
assert.fail('should have rejected');
|
|
129
122
|
}
|
|
130
123
|
catch (err) {
|
|
131
|
-
|
|
132
|
-
|
|
124
|
+
assert.ok(err instanceof Error, 'error is an Error');
|
|
125
|
+
assert.ok(err.message.includes('destroyed'), 'error mentions destroyed');
|
|
133
126
|
}
|
|
134
|
-
t.end();
|
|
135
127
|
});
|
|
136
|
-
test('flush - waits for queue to drain via process()', async (
|
|
128
|
+
test('flush - waits for queue to drain via process()', async () => {
|
|
137
129
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
138
130
|
let callCount = 0;
|
|
139
131
|
const socket = createFakeSocket({
|
|
@@ -148,17 +140,16 @@ test('flush - waits for queue to drain via process()', async (t) => {
|
|
|
148
140
|
});
|
|
149
141
|
tak.client = socket;
|
|
150
142
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
151
|
-
|
|
143
|
+
assert.equal(tak.queue.length, 1, 'one item in queue after backpressure');
|
|
152
144
|
// Clear backpressure and drain
|
|
153
145
|
socket.writableNeedDrain = false;
|
|
154
146
|
const flushP = tak.flush();
|
|
155
147
|
tak.process();
|
|
156
148
|
await flushP;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
t.end();
|
|
149
|
+
assert.equal(tak.queue.length, 0, 'queue empty after flush');
|
|
150
|
+
assert.equal(callCount, 2, 'both items sent');
|
|
160
151
|
});
|
|
161
|
-
test('write - yields when queue is full and resumes after destroy', async (
|
|
152
|
+
test('write - yields when queue is full and resumes after destroy', async () => {
|
|
162
153
|
// writeQueueSize=4 → queue capacity = 4
|
|
163
154
|
const tak = createTAK({ writeQueueSize: 4 });
|
|
164
155
|
// No client, so pull() is a no-op → queue fills up and write() yields
|
|
@@ -166,15 +157,14 @@ test('write - yields when queue is full and resumes after destroy', async (t) =>
|
|
|
166
157
|
const p = tak.write([CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping()])
|
|
167
158
|
.then(() => { writeResolved = true; });
|
|
168
159
|
await new Promise(r => setImmediate(r));
|
|
169
|
-
|
|
170
|
-
|
|
160
|
+
assert.equal(tak.queue.length, 4, 'queue at capacity');
|
|
161
|
+
assert.equal(writeResolved, false, 'write blocked waiting for space');
|
|
171
162
|
// Destroy unblocks write (destroyed check in loop)
|
|
172
163
|
tak.destroy();
|
|
173
164
|
await p;
|
|
174
|
-
|
|
175
|
-
t.end();
|
|
165
|
+
assert.ok(writeResolved, 'write resolved after destroy');
|
|
176
166
|
});
|
|
177
|
-
test('write - resumes after queue drains', async (
|
|
167
|
+
test('write - resumes after queue drains', async () => {
|
|
178
168
|
// writeQueueSize=8 → queue capacity = 8, socketBatchSize=4
|
|
179
169
|
const tak = createTAK({ writeQueueSize: 8, socketBatchSize: 4 });
|
|
180
170
|
let callCount = 0;
|
|
@@ -190,11 +180,10 @@ test('write - resumes after queue drains', async (t) => {
|
|
|
190
180
|
CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(),
|
|
191
181
|
CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(),
|
|
192
182
|
]);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
t.end();
|
|
183
|
+
assert.equal(tak.queue.length, 0, 'all drained');
|
|
184
|
+
assert.ok(callCount >= 2, 'multiple socket.write calls needed');
|
|
196
185
|
});
|
|
197
|
-
test('write - caller can safely modify array after write returns', async (
|
|
186
|
+
test('write - caller can safely modify array after write returns', async () => {
|
|
198
187
|
const tak = createTAK();
|
|
199
188
|
const writeCalls = [];
|
|
200
189
|
tak.client = createFakeSocket({
|
|
@@ -207,12 +196,11 @@ test('write - caller can safely modify array after write returns', async (t) =>
|
|
|
207
196
|
await tak.write(cots);
|
|
208
197
|
// Modify the array after write — should not affect what was sent
|
|
209
198
|
cots.length = 0;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
t.end();
|
|
199
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
200
|
+
assert.ok(writeCalls[0].includes('<event'), 'CoT was sent before array was cleared');
|
|
201
|
+
assert.equal(tak.queue.length, 0, 'queue empty');
|
|
214
202
|
});
|
|
215
|
-
test('write - stripFlow replaces existing flow tags in outbound XML', async (
|
|
203
|
+
test('write - stripFlow replaces existing flow tags in outbound XML', async () => {
|
|
216
204
|
const tak = createTAK();
|
|
217
205
|
const writeCalls = [];
|
|
218
206
|
tak.client = createFakeSocket({
|
|
@@ -244,24 +232,22 @@ test('write - stripFlow replaces existing flow tags in outbound XML', async (t)
|
|
|
244
232
|
}
|
|
245
233
|
});
|
|
246
234
|
await tak.write([cot], { stripFlow: true });
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
235
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
236
|
+
assert.ok(!writeCalls[0].includes('TAK-Server-test='), 'server flow tag removed from outbound XML');
|
|
237
|
+
assert.ok(writeCalls[0].includes('NodeCoT-'), 'node-cot flow tag added to outbound XML');
|
|
250
238
|
const outbound = CoTParser.from_xml(writeCalls[0]);
|
|
251
239
|
const outboundFlow = outbound.raw.event.detail?.['_flow-tags_'];
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
240
|
+
assert.ok(outboundFlow, 'outbound CoT contains flow tags');
|
|
241
|
+
assert.equal(Object.keys(outboundFlow || {}).length, 1, 'outbound CoT flow object is reset to one initial tag');
|
|
242
|
+
assert.ok(!outboundFlow?.['TAK-Server-test'], 'outbound CoT flow object clears prior TAK Server tags');
|
|
255
243
|
const feat = await CoTParser.to_geojson(cot);
|
|
256
|
-
|
|
257
|
-
t.end();
|
|
244
|
+
assert.equal(feat.properties.flow?.['TAK-Server-test'], '2026-03-08T04:48:00Z', 'original CoT remains unchanged');
|
|
258
245
|
});
|
|
259
|
-
test('destroy - sets destroyed and clears ping interval', (
|
|
246
|
+
test('destroy - sets destroyed and clears ping interval', () => {
|
|
260
247
|
const tak = createTAK();
|
|
261
248
|
tak.pingInterval = setInterval(() => { }, 60000);
|
|
262
249
|
tak.destroy();
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
t.end();
|
|
250
|
+
assert.equal(tak.destroyed, true, 'destroyed is true');
|
|
251
|
+
assert.equal(tak.pingInterval, undefined, 'pingInterval cleared');
|
|
266
252
|
});
|
|
267
253
|
//# sourceMappingURL=pipeline.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../test/pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../test/pipeline.test.ts"],"names":[],"mappings":"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"}
|