@tak-ps/node-cot 10.0.0 → 10.2.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/data-package.js +42 -0
- package/dist/lib/data-package.js.map +1 -1
- package/dist/package.json +2 -2
- package/dist/test/data-package.test.js +29 -0
- package/dist/test/data-package.test.js.map +1 -1
- package/dist/test/stream.js +9 -0
- package/dist/test/stream.js.map +1 -0
- package/lib/data-package.ts +53 -0
- package/package.json +2 -2
- package/test/data-package.test.ts +41 -0
- package/test/stream.ts +10 -0
package/CHANGELOG.md
CHANGED
package/dist/lib/data-package.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { pipeline } from 'stream/promises';
|
|
1
3
|
import { rimraf } from 'rimraf';
|
|
2
4
|
import { Type } from '@sinclair/typebox';
|
|
3
5
|
import Err from '@openaddresses/batch-error';
|
|
@@ -102,6 +104,16 @@ export class DataPackage {
|
|
|
102
104
|
const xml = `<?xml version="1.0" encoding="UTF-8"?>\n${xmljs.js2xml(manifest, { compact: true })}`;
|
|
103
105
|
return xml;
|
|
104
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* When DataPackages are uploaded to TAK Server they generally use an EUD
|
|
109
|
+
* calculated Hash
|
|
110
|
+
*/
|
|
111
|
+
static async hash(path) {
|
|
112
|
+
const input = fs.createReadStream(path);
|
|
113
|
+
const hash = createHash('sha256');
|
|
114
|
+
await pipeline(input, hash);
|
|
115
|
+
return hash.digest('hex');
|
|
116
|
+
}
|
|
105
117
|
/**
|
|
106
118
|
* Return a DataPackage version of an unparsed Data Package Zip
|
|
107
119
|
*/
|
|
@@ -136,6 +148,9 @@ export class DataPackage {
|
|
|
136
148
|
#addContent(zipEntry, uid, name, ignore = false) {
|
|
137
149
|
if (this.destroyed)
|
|
138
150
|
throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
151
|
+
// TODO: Seen in the wild but not currently implemented here:
|
|
152
|
+
// <Parameter name="contentType" value="KML"/>
|
|
153
|
+
// <Parameter name="visible" value="false"/>
|
|
139
154
|
this.contents.push({
|
|
140
155
|
_attributes: { ignore: ignore, zipEntry },
|
|
141
156
|
Parameter: [{
|
|
@@ -186,6 +201,33 @@ export class DataPackage {
|
|
|
186
201
|
}
|
|
187
202
|
return attachments;
|
|
188
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Get any file from a Package
|
|
206
|
+
*/
|
|
207
|
+
async getFile(path) {
|
|
208
|
+
if (this.destroyed)
|
|
209
|
+
throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
210
|
+
try {
|
|
211
|
+
await fsp.access(`${this.path}/raw/${path}`);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
throw new Err(400, err instanceof Error ? err : new Error(String(err)), 'Could not access file in Data Package');
|
|
215
|
+
}
|
|
216
|
+
return fs.createReadStream(`${this.path}/raw/${path}`);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Add any file to a Package
|
|
220
|
+
*/
|
|
221
|
+
async addFile(file, opts) {
|
|
222
|
+
if (this.destroyed)
|
|
223
|
+
throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
224
|
+
if (!opts.ignore)
|
|
225
|
+
opts.ignore = false;
|
|
226
|
+
const uid = opts.uid ?? randomUUID();
|
|
227
|
+
this.#addContent(`${uid}/${opts.name}`, uid, opts.name, opts.ignore);
|
|
228
|
+
await fsp.mkdir(`${this.path}/raw/${uid}/`, { recursive: true });
|
|
229
|
+
await fsp.writeFile(`${this.path}/raw/${uid}/${opts.name}`, file);
|
|
230
|
+
}
|
|
189
231
|
/**
|
|
190
232
|
* Add a CoT marker to the Package
|
|
191
233
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-package.js","sourceRoot":"","sources":["../../lib/data-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAU,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAC7C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,SAAS,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"data-package.js","sourceRoot":"","sources":["../../lib/data-package.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tak-ps/node-cot",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "10.
|
|
4
|
+
"version": "10.2.0",
|
|
5
5
|
"description": "Lightweight JavaScript library for parsing and manipulating TAK messages",
|
|
6
6
|
"author": "Nick Ingalls <nick@ingalls.ca>",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"json-diff-ts": "^4.0.1",
|
|
30
30
|
"node-stream-zip": "^1.15.0",
|
|
31
31
|
"protobufjs": "^7.3.0",
|
|
32
|
-
"rimraf": "^
|
|
32
|
+
"rimraf": "^6.0.0",
|
|
33
33
|
"xml-js": "^1.6.11"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import CoT, { DataPackage } from '../index.js';
|
|
2
|
+
import stream2buffer from './stream.js';
|
|
3
|
+
import fs from 'node:fs';
|
|
2
4
|
import test from 'tape';
|
|
3
5
|
test(`DataPackage CoT Parsing: CameraCOTs.zip`, async (t) => {
|
|
4
6
|
const pkg = await DataPackage.parse(new URL('./packages/CameraCOTs.zip', import.meta.url).pathname);
|
|
@@ -91,6 +93,7 @@ test(`DataPackage CoT Writing`, async (t) => {
|
|
|
91
93
|
});
|
|
92
94
|
test(`DataPackage CoT Parsing: QuickPic.zip`, async (t) => {
|
|
93
95
|
const pkg = await DataPackage.parse(new URL('./packages/QuickPic.zip', import.meta.url).pathname);
|
|
96
|
+
t.equals(await DataPackage.hash(new URL('./packages/QuickPic.zip', import.meta.url).pathname), 'bd13db0f18ccb423833cc21c0678e0224dd15ff504c1f16c43aff03e216b82a7');
|
|
94
97
|
t.equals(pkg.version, '2');
|
|
95
98
|
t.ok(pkg.path);
|
|
96
99
|
t.deepEquals(pkg.settings, {
|
|
@@ -120,4 +123,30 @@ test(`DataPackage CoT Parsing: QuickPic.zip`, async (t) => {
|
|
|
120
123
|
await pkg.destroy();
|
|
121
124
|
t.end();
|
|
122
125
|
});
|
|
126
|
+
test(`DataPackage CoT Parsing: addFile,getFile`, async (t) => {
|
|
127
|
+
const pkg = new DataPackage();
|
|
128
|
+
t.equals(pkg.version, '2');
|
|
129
|
+
t.ok(pkg.path);
|
|
130
|
+
await pkg.addFile(fs.createReadStream(new URL('../package.json', import.meta.url).pathname), {
|
|
131
|
+
uid: '123',
|
|
132
|
+
name: 'package.json'
|
|
133
|
+
});
|
|
134
|
+
t.deepEquals(pkg.contents, [
|
|
135
|
+
{
|
|
136
|
+
_attributes: { ignore: false, zipEntry: '123/package.json' },
|
|
137
|
+
Parameter: [
|
|
138
|
+
{ _attributes: { name: 'uid', value: '123' } },
|
|
139
|
+
{ _attributes: { name: 'name', value: 'package.json' } }
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
]);
|
|
143
|
+
const buff = await stream2buffer(await pkg.getFile('123/package.json'));
|
|
144
|
+
t.equals(JSON.parse(buff.toString()).name, '@tak-ps/node-cot');
|
|
145
|
+
const cots = await pkg.cots();
|
|
146
|
+
t.equal(cots.length, 0);
|
|
147
|
+
const attachments = await pkg.attachments();
|
|
148
|
+
t.equals(attachments.size, 0);
|
|
149
|
+
await pkg.destroy();
|
|
150
|
+
t.end();
|
|
151
|
+
});
|
|
123
152
|
//# sourceMappingURL=data-package.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-package.test.js","sourceRoot":"","sources":["../../test/data-package.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-package.test.js","sourceRoot":"","sources":["../../test/data-package.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default async function stream2buffer(stream) {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
const _buf = Array();
|
|
4
|
+
stream.on("data", chunk => _buf.push(chunk));
|
|
5
|
+
stream.on("end", () => resolve(Buffer.concat(_buf)));
|
|
6
|
+
stream.on("error", (err) => reject(`error converting stream - ${err}`));
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../test/stream.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IACtD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,KAAK,EAAU,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/lib/data-package.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { pipeline } from 'stream/promises';
|
|
1
3
|
import { rimraf } from 'rimraf'
|
|
2
4
|
import { Static, Type } from '@sinclair/typebox'
|
|
3
5
|
import Err from '@openaddresses/batch-error';
|
|
4
6
|
import archiver from 'archiver';
|
|
5
7
|
import StreamZip from 'node-stream-zip'
|
|
8
|
+
import { Readable } from 'node:stream';
|
|
6
9
|
import { randomUUID } from 'node:crypto';
|
|
7
10
|
import CoT from './cot.js';
|
|
8
11
|
import xmljs from 'xml-js';
|
|
@@ -121,6 +124,18 @@ export class DataPackage {
|
|
|
121
124
|
return xml;
|
|
122
125
|
}
|
|
123
126
|
|
|
127
|
+
/**
|
|
128
|
+
* When DataPackages are uploaded to TAK Server they generally use an EUD
|
|
129
|
+
* calculated Hash
|
|
130
|
+
*/
|
|
131
|
+
static async hash(path: string): Promise<string> {
|
|
132
|
+
const input = fs.createReadStream(path);
|
|
133
|
+
const hash = createHash('sha256');
|
|
134
|
+
await pipeline(input, hash);
|
|
135
|
+
return hash.digest('hex');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
124
139
|
/**
|
|
125
140
|
* Return a DataPackage version of an unparsed Data Package Zip
|
|
126
141
|
*/
|
|
@@ -162,6 +177,11 @@ export class DataPackage {
|
|
|
162
177
|
|
|
163
178
|
#addContent(zipEntry: string, uid: string, name: string, ignore = false): void {
|
|
164
179
|
if (this.destroyed) throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
180
|
+
|
|
181
|
+
// TODO: Seen in the wild but not currently implemented here:
|
|
182
|
+
// <Parameter name="contentType" value="KML"/>
|
|
183
|
+
// <Parameter name="visible" value="false"/>
|
|
184
|
+
|
|
165
185
|
this.contents.push({
|
|
166
186
|
_attributes: { ignore: ignore, zipEntry },
|
|
167
187
|
Parameter: [{
|
|
@@ -218,6 +238,39 @@ export class DataPackage {
|
|
|
218
238
|
return attachments;
|
|
219
239
|
}
|
|
220
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Get any file from a Package
|
|
243
|
+
*/
|
|
244
|
+
async getFile(path: string): Promise<Readable> {
|
|
245
|
+
if (this.destroyed) throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
await fsp.access(`${this.path}/raw/${path}`)
|
|
249
|
+
} catch (err) {
|
|
250
|
+
throw new Err(400, err instanceof Error ? err : new Error(String(err)), 'Could not access file in Data Package');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return fs.createReadStream(`${this.path}/raw/${path}`)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Add any file to a Package
|
|
258
|
+
*/
|
|
259
|
+
async addFile(file: Readable, opts: {
|
|
260
|
+
uid?: string;
|
|
261
|
+
name: string;
|
|
262
|
+
ignore?: boolean;
|
|
263
|
+
}): Promise<void> {
|
|
264
|
+
if (this.destroyed) throw new Err(400, null, 'Attempt to access Data Package after it has been destroyed');
|
|
265
|
+
if (!opts.ignore) opts.ignore = false;
|
|
266
|
+
|
|
267
|
+
const uid = opts.uid ?? randomUUID();
|
|
268
|
+
|
|
269
|
+
this.#addContent(`${uid}/${opts.name}`, uid, opts.name, opts.ignore);
|
|
270
|
+
await fsp.mkdir(`${this.path}/raw/${uid}/`, { recursive: true });
|
|
271
|
+
await fsp.writeFile(`${this.path}/raw/${uid}/${opts.name}`, file)
|
|
272
|
+
}
|
|
273
|
+
|
|
221
274
|
/**
|
|
222
275
|
* Add a CoT marker to the Package
|
|
223
276
|
*/
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tak-ps/node-cot",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "10.
|
|
4
|
+
"version": "10.2.0",
|
|
5
5
|
"description": "Lightweight JavaScript library for parsing and manipulating TAK messages",
|
|
6
6
|
"author": "Nick Ingalls <nick@ingalls.ca>",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"json-diff-ts": "^4.0.1",
|
|
30
30
|
"node-stream-zip": "^1.15.0",
|
|
31
31
|
"protobufjs": "^7.3.0",
|
|
32
|
-
"rimraf": "^
|
|
32
|
+
"rimraf": "^6.0.0",
|
|
33
33
|
"xml-js": "^1.6.11"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import CoT, { DataPackage } from '../index.js'
|
|
2
|
+
import stream2buffer from './stream.js';
|
|
3
|
+
import fs from 'node:fs';
|
|
2
4
|
import test from 'tape';
|
|
3
5
|
|
|
4
6
|
test(`DataPackage CoT Parsing: CameraCOTs.zip`, async (t) => {
|
|
@@ -122,6 +124,8 @@ test(`DataPackage CoT Writing`, async (t) => {
|
|
|
122
124
|
test(`DataPackage CoT Parsing: QuickPic.zip`, async (t) => {
|
|
123
125
|
const pkg = await DataPackage.parse(new URL('./packages/QuickPic.zip', import.meta.url).pathname);
|
|
124
126
|
|
|
127
|
+
t.equals(await DataPackage.hash(new URL('./packages/QuickPic.zip', import.meta.url).pathname), 'bd13db0f18ccb423833cc21c0678e0224dd15ff504c1f16c43aff03e216b82a7');
|
|
128
|
+
|
|
125
129
|
t.equals(pkg.version, '2');
|
|
126
130
|
t.ok(pkg.path);
|
|
127
131
|
t.deepEquals(pkg.settings, {
|
|
@@ -160,3 +164,40 @@ test(`DataPackage CoT Parsing: QuickPic.zip`, async (t) => {
|
|
|
160
164
|
t.end();
|
|
161
165
|
});
|
|
162
166
|
|
|
167
|
+
test(`DataPackage CoT Parsing: addFile,getFile`, async (t) => {
|
|
168
|
+
const pkg = new DataPackage();
|
|
169
|
+
|
|
170
|
+
t.equals(pkg.version, '2');
|
|
171
|
+
t.ok(pkg.path);
|
|
172
|
+
|
|
173
|
+
await pkg.addFile(fs.createReadStream(new URL('../package.json', import.meta.url).pathname), {
|
|
174
|
+
uid: '123',
|
|
175
|
+
name: 'package.json'
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
t.deepEquals(pkg.contents, [
|
|
179
|
+
{
|
|
180
|
+
_attributes: { ignore: false, zipEntry: '123/package.json' },
|
|
181
|
+
Parameter: [
|
|
182
|
+
{ _attributes: { name: 'uid', value: '123' } },
|
|
183
|
+
{ _attributes: { name: 'name', value: 'package.json' } }
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
]);
|
|
187
|
+
|
|
188
|
+
const buff = await stream2buffer(await pkg.getFile('123/package.json'));
|
|
189
|
+
|
|
190
|
+
t.equals(JSON.parse(buff.toString()).name, '@tak-ps/node-cot');
|
|
191
|
+
|
|
192
|
+
const cots = await pkg.cots();
|
|
193
|
+
|
|
194
|
+
t.equal(cots.length, 0);
|
|
195
|
+
|
|
196
|
+
const attachments = await pkg.attachments();
|
|
197
|
+
|
|
198
|
+
t.equals(attachments.size, 0)
|
|
199
|
+
|
|
200
|
+
await pkg.destroy();
|
|
201
|
+
|
|
202
|
+
t.end();
|
|
203
|
+
});
|
package/test/stream.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Stream } from 'node:stream';
|
|
2
|
+
|
|
3
|
+
export default async function stream2buffer(stream: Stream): Promise<Buffer> {
|
|
4
|
+
return new Promise<Buffer>((resolve, reject) => {
|
|
5
|
+
const _buf = Array<Buffer>();
|
|
6
|
+
stream.on("data", chunk => _buf.push(chunk));
|
|
7
|
+
stream.on("end", () => resolve(Buffer.concat(_buf)));
|
|
8
|
+
stream.on("error", (err: Error) => reject(`error converting stream - ${err}`));
|
|
9
|
+
});
|
|
10
|
+
}
|