@tak-ps/node-tak 0.2.0 → 0.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 +4 -0
- package/package.json +2 -2
- package/dist/index.js +0 -173
- package/dist/index.js.map +0 -1
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tak-ps/node-tak",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "Lightweight JavaScript library for communicating with TAK Server",
|
|
6
6
|
"author": "Nick Ingalls <nick@ingalls.ca>",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"pretest": "npm run lint"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@tak-ps/node-cot": "^4.
|
|
17
|
+
"@tak-ps/node-cot": "^4.2.0",
|
|
18
18
|
"ajv": "^8.12.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
package/dist/index.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import EventEmitter from 'node:events';
|
|
2
|
-
import tls from 'node:tls';
|
|
3
|
-
import CoT from '@tak-ps/node-cot';
|
|
4
|
-
export default class TAK extends EventEmitter {
|
|
5
|
-
id;
|
|
6
|
-
type;
|
|
7
|
-
url;
|
|
8
|
-
auth;
|
|
9
|
-
open;
|
|
10
|
-
destroyed;
|
|
11
|
-
queue;
|
|
12
|
-
writing;
|
|
13
|
-
client;
|
|
14
|
-
version;
|
|
15
|
-
constructor(id, type, url, auth) {
|
|
16
|
-
super();
|
|
17
|
-
this.id = id;
|
|
18
|
-
this.type = type;
|
|
19
|
-
this.url = url;
|
|
20
|
-
this.auth = auth;
|
|
21
|
-
this.writing = false;
|
|
22
|
-
this.open = false;
|
|
23
|
-
this.destroyed = false;
|
|
24
|
-
this.queue = [];
|
|
25
|
-
}
|
|
26
|
-
static async connect(id, url, auth) {
|
|
27
|
-
const tak = new TAK(id, 'ssl', url, auth);
|
|
28
|
-
if (url.protocol === 'ssl:') {
|
|
29
|
-
if (!tak.auth.cert)
|
|
30
|
-
throw new Error('auth.cert required');
|
|
31
|
-
if (!tak.auth.key)
|
|
32
|
-
throw new Error('auth.key required');
|
|
33
|
-
return await tak.connect_ssl();
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
throw new Error('Unknown TAK Server Protocol');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
connect_ssl() {
|
|
40
|
-
return new Promise((resolve) => {
|
|
41
|
-
this.client = tls.connect({
|
|
42
|
-
host: this.url.hostname,
|
|
43
|
-
port: parseInt(this.url.port),
|
|
44
|
-
rejectUnauthorized: false,
|
|
45
|
-
cert: this.auth.cert,
|
|
46
|
-
key: this.auth.key
|
|
47
|
-
});
|
|
48
|
-
this.client.setNoDelay();
|
|
49
|
-
this.client.on('connect', () => {
|
|
50
|
-
console.error(`ok - ${this.id} @ connect:${this.client ? this.client.authorized : 'NO CLIENT'} - ${this.client ? this.client.authorizationError : 'NO CLIENT'}`);
|
|
51
|
-
});
|
|
52
|
-
this.client.on('secureConnect', () => {
|
|
53
|
-
console.error(`ok - ${this.id} @ secure:${this.client ? this.client.authorized : 'NO CLIENT'} - ${this.client ? this.client.authorizationError : 'NO CLIENT'}`);
|
|
54
|
-
});
|
|
55
|
-
let buff = '';
|
|
56
|
-
this.client.on('data', (data) => {
|
|
57
|
-
// Eventually Parse ProtoBuf
|
|
58
|
-
buff = buff + data.toString();
|
|
59
|
-
let result = TAK.findCoT(buff);
|
|
60
|
-
while (result && result.event) {
|
|
61
|
-
const cot = new CoT(result.event);
|
|
62
|
-
try {
|
|
63
|
-
// @ts-ignore: Remove once we have JSONSchema => TS Defs for CoT Messages
|
|
64
|
-
if (cot.raw.event._attributes.type === 't-x-c-t-r') {
|
|
65
|
-
this.open = true;
|
|
66
|
-
this.emit('ping');
|
|
67
|
-
// @ts-ignore: Remove once we have JSONSchema => TS Defs for CoT Messages
|
|
68
|
-
}
|
|
69
|
-
else if (cot.raw.event._attributes.type === 't-x-takp-v') {
|
|
70
|
-
// @ts-ignore: Remove once we have JSONSchema => TS Defs for CoT Messages
|
|
71
|
-
this.version = cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes.serverVersion;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
this.emit('cot', cot);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch (e) {
|
|
78
|
-
console.error('Error parsing', e, data.toString());
|
|
79
|
-
}
|
|
80
|
-
buff = result.remainder;
|
|
81
|
-
result = TAK.findCoT(buff);
|
|
82
|
-
}
|
|
83
|
-
}).on('timeout', () => {
|
|
84
|
-
if (!this.destroyed)
|
|
85
|
-
this.emit('timeout');
|
|
86
|
-
}).on('error', (err) => {
|
|
87
|
-
this.emit('error', err);
|
|
88
|
-
}).on('end', () => {
|
|
89
|
-
this.open = false;
|
|
90
|
-
if (!this.destroyed)
|
|
91
|
-
this.emit('end');
|
|
92
|
-
});
|
|
93
|
-
setInterval(() => {
|
|
94
|
-
this.ping();
|
|
95
|
-
}, 5000);
|
|
96
|
-
return resolve(this);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
async reconnect() {
|
|
100
|
-
return await this.connect_ssl();
|
|
101
|
-
}
|
|
102
|
-
destroy() {
|
|
103
|
-
this.destroyed = true;
|
|
104
|
-
if (this.client) {
|
|
105
|
-
this.client.destroy();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
async ping() {
|
|
109
|
-
this.write([CoT.ping()]);
|
|
110
|
-
}
|
|
111
|
-
writer(body) {
|
|
112
|
-
return new Promise((resolve, reject) => {
|
|
113
|
-
if (!this.client)
|
|
114
|
-
return reject(new Error('A Connection Client must first be created before it can be written'));
|
|
115
|
-
const res = this.client.write(body + '\n', () => {
|
|
116
|
-
return resolve(res);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
async process() {
|
|
121
|
-
this.writing = true;
|
|
122
|
-
while (this.queue.length) {
|
|
123
|
-
const body = this.queue.shift();
|
|
124
|
-
if (!body)
|
|
125
|
-
continue;
|
|
126
|
-
await this.writer(body);
|
|
127
|
-
}
|
|
128
|
-
await this.writer('');
|
|
129
|
-
if (this.queue.length) {
|
|
130
|
-
process.nextTick(() => {
|
|
131
|
-
this.process();
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
this.writing = false;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Write a CoT to the TAK Connection
|
|
140
|
-
*
|
|
141
|
-
* @param {CoT} cot CoT Object
|
|
142
|
-
*/
|
|
143
|
-
write(cots) {
|
|
144
|
-
for (const cot of cots) {
|
|
145
|
-
this.queue.push(cot.to_xml());
|
|
146
|
-
}
|
|
147
|
-
if (this.queue.length && !this.writing)
|
|
148
|
-
this.process();
|
|
149
|
-
}
|
|
150
|
-
write_xml(body) {
|
|
151
|
-
this.queue.push(body);
|
|
152
|
-
if (this.queue.length && !this.writing)
|
|
153
|
-
this.process();
|
|
154
|
-
}
|
|
155
|
-
// https://github.com/vidterra/multitak/blob/main/app/lib/helper.js#L4
|
|
156
|
-
static findCoT(str) {
|
|
157
|
-
/* eslint-disable no-control-regex */
|
|
158
|
-
str = str.replace(/[\u0000-\u001F\u007F-\u009F]/g, "");
|
|
159
|
-
let match = str.match(/(<event.*?<\/event>)(.*)/); // find first CoT
|
|
160
|
-
if (!match) {
|
|
161
|
-
match = str.match(/(<event[^>]*\/>)(.*)/); // find first CoT
|
|
162
|
-
if (!match)
|
|
163
|
-
return null;
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
event: match[1],
|
|
167
|
-
remainder: match[2],
|
|
168
|
-
discard: match[0]
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
export { CoT };
|
|
173
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|