@tak-ps/node-cot 12.17.0 → 12.18.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.
Files changed (123) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/lib/data-package.js +64 -16
  3. package/dist/lib/data-package.js.map +1 -1
  4. package/dist/lib/types/feature.js +1 -1
  5. package/dist/lib/types/feature.js.map +1 -1
  6. package/dist/lib/types/iconset.js +12 -4
  7. package/dist/lib/types/iconset.js.map +1 -1
  8. package/dist/lib/xml/basemap.js +1 -1
  9. package/dist/lib/xml/basemap.js.map +1 -1
  10. package/dist/lib/xml/iconset.js +29 -2
  11. package/dist/lib/xml/iconset.js.map +1 -1
  12. package/dist/package.json +1 -1
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/lib/data-package.ts +70 -17
  15. package/lib/types/feature.ts +1 -1
  16. package/lib/types/iconset.ts +14 -4
  17. package/lib/xml/basemap.ts +2 -2
  18. package/lib/xml/iconset.ts +36 -3
  19. package/lib/xml-document.ts +1 -1
  20. package/package.json +1 -1
  21. package/tsconfig.json +1 -0
  22. package/dist/test/basemaps.test.js +0 -16
  23. package/dist/test/basemaps.test.js.map +0 -1
  24. package/dist/test/chat.test.js +0 -97
  25. package/dist/test/chat.test.js.map +0 -1
  26. package/dist/test/cot-fileshare.test.js +0 -89
  27. package/dist/test/cot-fileshare.test.js.map +0 -1
  28. package/dist/test/cot-itak.test.js +0 -95
  29. package/dist/test/cot-itak.test.js.map +0 -1
  30. package/dist/test/cot-mma.test.js +0 -108
  31. package/dist/test/cot-mma.test.js.map +0 -1
  32. package/dist/test/cot-polyline.test.js +0 -98
  33. package/dist/test/cot-polyline.test.js.map +0 -1
  34. package/dist/test/cot-range-and-bearing.test.js +0 -98
  35. package/dist/test/cot-range-and-bearing.test.js.map +0 -1
  36. package/dist/test/cot-routes.test.js +0 -466
  37. package/dist/test/cot-routes.test.js.map +0 -1
  38. package/dist/test/cot-types.test.js +0 -7
  39. package/dist/test/cot-types.test.js.map +0 -1
  40. package/dist/test/cot-uas-tool.test.js +0 -286
  41. package/dist/test/cot-uas-tool.test.js.map +0 -1
  42. package/dist/test/cot-video.test.js +0 -196
  43. package/dist/test/cot-video.test.js.map +0 -1
  44. package/dist/test/cot_is.test.js +0 -353
  45. package/dist/test/cot_is.test.js.map +0 -1
  46. package/dist/test/data-package.test.js +0 -234
  47. package/dist/test/data-package.test.js.map +0 -1
  48. package/dist/test/diff.test.js +0 -73
  49. package/dist/test/diff.test.js.map +0 -1
  50. package/dist/test/flow-tags.test.js +0 -19
  51. package/dist/test/flow-tags.test.js.map +0 -1
  52. package/dist/test/force-delete.js +0 -46
  53. package/dist/test/force-delete.js.map +0 -1
  54. package/dist/test/from_geojson.test.js +0 -287
  55. package/dist/test/from_geojson.test.js.map +0 -1
  56. package/dist/test/newlines.test.js +0 -79
  57. package/dist/test/newlines.test.js.map +0 -1
  58. package/dist/test/reversal-geojson.test.js +0 -15
  59. package/dist/test/reversal-geojson.test.js.map +0 -1
  60. package/dist/test/reversal-proto.test.js +0 -54
  61. package/dist/test/reversal-proto.test.js.map +0 -1
  62. package/dist/test/stream.js +0 -10
  63. package/dist/test/stream.js.map +0 -1
  64. package/dist/test/taskings-mission.test.js +0 -140
  65. package/dist/test/taskings-mission.test.js.map +0 -1
  66. package/dist/test/util.test.js +0 -25
  67. package/dist/test/util.test.js.map +0 -1
  68. package/dist/test/validation.test.js +0 -13
  69. package/dist/test/validation.test.js.map +0 -1
  70. package/test/basemaps/Bing_Hybrid.xml +0 -12
  71. package/test/basemaps/Bing_Maps.xml +0 -10
  72. package/test/basemaps/USGSBasemap.xml +0 -10
  73. package/test/basemaps/USGSImageryOnly.xml +0 -10
  74. package/test/basemaps/USGSImageryTopo.xml +0 -10
  75. package/test/basemaps/USGSShadedRelief.xml +0 -10
  76. package/test/basemaps/opentopomap.xml +0 -10
  77. package/test/basemaps.test.ts +0 -19
  78. package/test/chat.test.ts +0 -103
  79. package/test/cot-fileshare.test.ts +0 -92
  80. package/test/cot-itak.test.ts +0 -100
  81. package/test/cot-mma.test.ts +0 -111
  82. package/test/cot-polyline.test.ts +0 -103
  83. package/test/cot-range-and-bearing.test.ts +0 -100
  84. package/test/cot-routes.test.ts +0 -468
  85. package/test/cot-types.test.ts +0 -8
  86. package/test/cot-uas-tool.test.ts +0 -295
  87. package/test/cot-video.test.ts +0 -204
  88. package/test/cot_is.test.ts +0 -431
  89. package/test/data-package.test.ts +0 -314
  90. package/test/diff.test.ts +0 -80
  91. package/test/fixtures/archived.geojson +0 -20
  92. package/test/fixtures/attachments.geojson +0 -20
  93. package/test/fixtures/basic.geojson +0 -19
  94. package/test/fixtures/circle.geojson +0 -30
  95. package/test/fixtures/color.geojson +0 -21
  96. package/test/fixtures/fileshare.geojson +0 -28
  97. package/test/fixtures/geofence.geojson +0 -25
  98. package/test/fixtures/hae.geojson +0 -19
  99. package/test/fixtures/icon.geojson +0 -20
  100. package/test/fixtures/linestring.geojson +0 -28
  101. package/test/fixtures/marti-mission.geojson +0 -22
  102. package/test/fixtures/metadata.geojson +0 -24
  103. package/test/fixtures/mission-layer.geojson +0 -31
  104. package/test/fixtures/mission.geojson +0 -25
  105. package/test/fixtures/polygon.geojson +0 -33
  106. package/test/fixtures/props.geojson +0 -22
  107. package/test/fixtures/sensor.geojson +0 -31
  108. package/test/fixtures/video-connection.geojson +0 -27
  109. package/test/fixtures/video.geojson +0 -24
  110. package/test/flow-tags.test.ts +0 -21
  111. package/test/force-delete.ts +0 -50
  112. package/test/from_geojson.test.ts +0 -323
  113. package/test/newlines.test.ts +0 -83
  114. package/test/packages/AttachmentInManifest.zip +0 -0
  115. package/test/packages/COMilePosts.zip +0 -0
  116. package/test/packages/CameraCOTs.zip +0 -0
  117. package/test/packages/QuickPic.zip +0 -0
  118. package/test/reversal-geojson.test.ts +0 -19
  119. package/test/reversal-proto.test.ts +0 -60
  120. package/test/stream.ts +0 -10
  121. package/test/taskings-mission.test.ts +0 -148
  122. package/test/util.test.ts +0 -34
  123. package/test/validation.test.ts +0 -13
Binary file
@@ -1,19 +0,0 @@
1
- import type { Static } from '@sinclair/typebox';
2
- import type { Feature } from '../lib/types/feature.js';
3
- import fs from 'node:fs/promises';
4
- import path from 'node:path';
5
- import test from 'tape';
6
- import CoT from '../index.js';
7
- import { fileURLToPath } from 'node:url';
8
-
9
- for (const fixturename of await fs.readdir(new URL('./fixtures/', import.meta.url))) {
10
- test(`GeoJSON Reversal Tests: ${fixturename}`, async (t) => {
11
- const fixture: Static<typeof Feature> = JSON.parse(String(await fs.readFile(path.join(path.parse(fileURLToPath(import.meta.url)).dir, 'fixtures/', fixturename))));
12
- const geo = CoT.from_geojson(fixture)
13
- const output = geo.to_geojson();
14
-
15
- t.deepEquals(fixture, output, fixturename);
16
-
17
- t.end();
18
- });
19
- }
@@ -1,60 +0,0 @@
1
- import type { Static } from '@sinclair/typebox';
2
- import type { Feature } from '../lib/types/feature.js';
3
- import fs from 'node:fs/promises';
4
- import path from 'node:path';
5
- import test from 'tape';
6
- import CoT from '../index.js';
7
- import { fileURLToPath } from 'node:url';
8
-
9
- for (const fixturename of await fs.readdir(new URL('./fixtures/', import.meta.url))) {
10
- test(`Protobuf Reversal Tests: ${fixturename}`, async (t) => {
11
- const fixture: Static<typeof Feature> = JSON.parse(String(await fs.readFile(path.join(path.parse(fileURLToPath(import.meta.url)).dir, 'fixtures/', fixturename))));
12
- const geo = CoT.from_geojson(fixture)
13
- const intermediate = geo.to_proto();
14
- const output = CoT.from_proto(intermediate);
15
- t.deepEquals(fixture, output.to_geojson(), fixturename);
16
-
17
- t.end();
18
- });
19
- }
20
-
21
- // Ref: https://github.com/dfpc-coe/node-CoT/issues/55
22
- test('Protobuf Multiple Calls', (t) => {
23
- const cot = new CoT({
24
- event: {
25
- _attributes: {
26
- version: '2.0',
27
- uid: 'ebbf42a7-ea71-43a1-baf6-e259c3d115bf',
28
- type: 'u-rb-a',
29
- how: 'h-e',
30
- time: '2024-08-30T22:28:02Z',
31
- start: '2024-08-30T22:28:02Z',
32
- stale: '2024-08-31T22:28:02Z',
33
- access: 'Undefined',
34
- },
35
- point: {
36
- _attributes: {
37
- lat: '39.0981196',
38
- lon: '-108.7395013',
39
- hae: '0.0',
40
- ce: '9999999.0',
41
- le: '9999999.0',
42
- },
43
- },
44
- detail: {
45
- contact: {
46
- _attributes: {
47
- callsign: 'sign',
48
- },
49
- },
50
- },
51
- },
52
- })
53
-
54
- const cot2 = CoT.from_proto(cot.to_proto())
55
- t.deepEqual(cot2.raw.event.detail?.contact?._attributes.callsign, 'sign')
56
- const cot3 = CoT.from_proto(cot.to_proto())
57
- t.deepEqual(cot3.raw.event.detail?.contact?._attributes.callsign, 'sign')
58
-
59
- t.end();
60
- });
package/test/stream.ts DELETED
@@ -1,10 +0,0 @@
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
- }
@@ -1,148 +0,0 @@
1
- import test from 'tape';
2
- import CoT from '../index.js';
3
-
4
- test('Decode MissionChange CoTs', (t) => {
5
- const cot = new CoT({"event":{"_attributes":{"how":"h-g-i-g-o","type":"t-x-m-c","version":"2.0","uid":"f205227b-2e23-40bf-8948-711566116365","start":"2024-07-17T18:49:03Z","time":"2024-07-17T18:49:03Z","stale":"2024-07-17T18:49:23Z"},"point":{"_attributes":{"ce":"9999999","le":"9999999","hae":"0","lat":"0","lon":"0"}},"detail":{"mission":{"_attributes":{"type":"CHANGE","tool":"public","name":"2024-07-17 - Lost Hiker","guid":"4ce8e41d-21e4-4471-a303-09d12bb93bcf","authorUid":"CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK"},"MissionChanges": {"MissionChange":{"contentUid":{"_text":"layer-11-27529-1"},"creatorUid":{"_text":"CN=mma-etl-user@cotak.gov,OU=WILDFIRE,O=CO-TAK"},"isFederatedChange":{"_text":"false"},"missionName":{"_text":"Colorado NIFS Fire Perimeters"},"timestamp":{"_text":"2024-08-16T15:21:55.361Z"},"type":{"_text":"ADD_CONTENT"},"details":{"_attributes":{"type":"t-x-d-d"}}}}}}}});
6
-
7
- if (!cot.raw.event.detail) {
8
- t.fail('No Detail Section')
9
- } else {
10
- t.ok(cot.raw.event.detail['_flow-tags_']);
11
- delete cot.raw.event.detail['_flow-tags_'];
12
-
13
- t.deepEquals({
14
- id: 'f205227b-2e23-40bf-8948-711566116365',
15
- type: 'Feature',
16
- path: '/',
17
- properties: {
18
- callsign: 'UNKNOWN',
19
- center: [ 0, 0, 0 ],
20
- type: 't-x-m-c',
21
- how: 'h-g-i-g-o',
22
- time: '2024-07-17T18:49:03Z',
23
- start: '2024-07-17T18:49:03Z',
24
- stale: '2024-07-17T18:49:23Z',
25
- mission: {
26
- type: 'CHANGE',
27
- tool: 'public',
28
- name: '2024-07-17 - Lost Hiker',
29
- guid: '4ce8e41d-21e4-4471-a303-09d12bb93bcf',
30
- authorUid: 'CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK',
31
- missionChanges: [{
32
- contentUid: 'layer-11-27529-1',
33
- creatorUid: 'CN=mma-etl-user@cotak.gov,OU=WILDFIRE,O=CO-TAK',
34
- isFederatedChange: 'false',
35
- missionName: 'Colorado NIFS Fire Perimeters',
36
- timestamp: '2024-08-16T15:21:55.361Z',
37
- type: 'ADD_CONTENT',
38
- details: {
39
- type: 't-x-d-d',
40
- }
41
- }]
42
- },
43
- metadata: {}
44
- },
45
- geometry: {
46
- type: 'Point',
47
- coordinates: [ 0, 0, 0 ]
48
- }
49
- }, cot.to_geojson());
50
- }
51
-
52
- t.end();
53
- });
54
-
55
- test('Decode MissionChange CoTs - #2', (t) => {
56
- const cot = new CoT({"event":{"_attributes":{"how":"h-g-i-g-o","type":"t-x-m-c","version":"2.0","uid":"f205227b-2e23-40bf-8948-711566116365","start":"2024-07-17T18:49:03Z","time":"2024-07-17T18:49:03Z","stale":"2024-07-17T18:49:23Z"},"point":{"_attributes":{"ce":"9999999","le":"9999999","hae":"0","lat":"0","lon":"0"}},"detail":{"mission":{"_attributes":{"type":"CHANGE","tool":"public","name":"2024-07-17 - Lost Hiker","guid":"4ce8e41d-21e4-4471-a303-09d12bb93bcf","authorUid":"CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK"},"MissionChanges":{"MissionChange":{"contentUid":{"_text":"8fb7b41f-77c5-4537-9a4c-5b7a76a71cb9"},"creatorUid":{"_text":"CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK"},"isFederatedChange":{"_text":"false"},"missionName":{"_text":"2024-07-17 - Lost Hiker"},"timestamp":{"_text":"2024-07-17T18:49:03.606Z"},"type":{"_text":"ADD_CONTENT"},"details":{"_attributes":{"type":"u-d-p","callsign":"Third Test","color":"-65536"},"location":{"_attributes":{"lat":"39.118611111111115","lon":"-108.31361111111111"}}}}}}}}});
57
-
58
- if (!cot.raw.event.detail) {
59
- t.fail('No Detail Section')
60
- } else {
61
- t.ok(cot.raw.event.detail['_flow-tags_']);
62
- delete cot.raw.event.detail['_flow-tags_'];
63
-
64
- t.deepEquals({
65
- id: 'f205227b-2e23-40bf-8948-711566116365',
66
- type: 'Feature',
67
- path: '/',
68
- properties: {
69
- callsign: 'UNKNOWN',
70
- center: [ 0, 0, 0 ],
71
- type: 't-x-m-c',
72
- how: 'h-g-i-g-o',
73
- time: '2024-07-17T18:49:03Z',
74
- start: '2024-07-17T18:49:03Z',
75
- stale: '2024-07-17T18:49:23Z',
76
- mission: {
77
- type: 'CHANGE',
78
- tool: 'public',
79
- name: '2024-07-17 - Lost Hiker',
80
- guid: '4ce8e41d-21e4-4471-a303-09d12bb93bcf',
81
- authorUid: 'CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK',
82
- missionChanges: [{
83
- contentUid: '8fb7b41f-77c5-4537-9a4c-5b7a76a71cb9',
84
- creatorUid: 'CN=mesasar-machine-user@ingalls.ca,OU=WILDFIRE,O=CO-TAK',
85
- isFederatedChange: 'false',
86
- missionName: '2024-07-17 - Lost Hiker',
87
- timestamp: '2024-07-17T18:49:03.606Z',
88
- type: 'ADD_CONTENT',
89
- details: {
90
- type: 'u-d-p',
91
- callsign: 'Third Test',
92
- color: '-65536',
93
- lat: '39.118611111111115',
94
- lon: '-108.31361111111111'
95
- }
96
- }]
97
- },
98
- metadata: {}
99
- },
100
- geometry: {
101
- type: 'Point',
102
- coordinates: [ 0, 0, 0 ]
103
- }
104
- }, cot.to_geojson());
105
- }
106
-
107
- t.end();
108
- });
109
-
110
- test('Decode MissionChange Logs', (t) => {
111
- const cot = new CoT({"event":{"_attributes":{"how":"h-g-i-g-o","type":"t-x-m-c-l","version":"2.0","uid":"e77c55da-c5d2-4200-bbc9-9967b3f30b5b","start":"2024-10-14T15:33:04Z","time":"2024-10-14T15:33:04Z","stale":"2024-10-14T15:33:24Z"},"point":{"_attributes":{"ce":"9999999","le":"9999999","hae":"0","lat":"0","lon":"0"}},"detail":{"mission":{"_attributes":{"type":"CHANGE","tool":"public","name":"manual test","guid":"ae2e9ec4-2762-4664-8660-1ef824bde9bc","authorUid":"ANDROID-0ca41830e11d2ef3"}}}}});
112
-
113
- if (!cot.raw.event.detail) {
114
- t.fail('No Detail Section')
115
- } else {
116
- t.ok(cot.raw.event.detail['_flow-tags_']);
117
- delete cot.raw.event.detail['_flow-tags_'];
118
-
119
- t.deepEquals({
120
- id: 'e77c55da-c5d2-4200-bbc9-9967b3f30b5b',
121
- type: 'Feature',
122
- path: '/',
123
- properties: {
124
- callsign: 'UNKNOWN',
125
- center: [ 0, 0, 0 ],
126
- type: 't-x-m-c-l',
127
- how: 'h-g-i-g-o',
128
- time: '2024-10-14T15:33:04Z',
129
- start: '2024-10-14T15:33:04Z',
130
- stale: '2024-10-14T15:33:24Z',
131
- mission: {
132
- type: 'CHANGE',
133
- tool: 'public',
134
- name: 'manual test',
135
- guid: 'ae2e9ec4-2762-4664-8660-1ef824bde9bc',
136
- authorUid: 'ANDROID-0ca41830e11d2ef3',
137
- },
138
- metadata: {}
139
- },
140
- geometry: {
141
- type: 'Point',
142
- coordinates: [ 0, 0, 0 ]
143
- }
144
- }, cot.to_geojson());
145
- }
146
-
147
- t.end();
148
- });
package/test/util.test.ts DELETED
@@ -1,34 +0,0 @@
1
- import test from 'tape';
2
- import Util from '../lib/utils/util.js';
3
-
4
- test('Util.cot_date - default', (t) => {
5
- const res = Util.cot_date();
6
-
7
- // Within 100ms of current time
8
- t.ok(+new Date(res.time) > +new Date() - 100, 'res.time within 100ms of current time');
9
-
10
- // res.start is the same as res.time
11
- t.equals(+new Date(res.start), +new Date(res.time), 'by default res.start === res.time');
12
-
13
- // Approx 20s ahead of start
14
- t.ok(+new Date(res.stale) > +new Date(res.start) + 20 * 1000 - 100);
15
- t.ok(+new Date(res.stale) < +new Date(res.start) + 20 * 1000 + 100);
16
-
17
- t.end();
18
- });
19
-
20
- test('Util.cot_date - stale', (t) => {
21
- const res = Util.cot_date(null, null, 1000);
22
-
23
- // Within 100ms of current time
24
- t.ok(+new Date(res.time) > +new Date() - 100, 'res.time within 100ms of current time');
25
-
26
- // res.start is the same as res.time
27
- t.equals(+new Date(res.start), +new Date(res.time), 'by default res.start === res.time');
28
-
29
- // Approx 1s ahead of start
30
- t.ok(+new Date(res.stale) > +new Date(res.start) + 1 * 1000 - 100);
31
- t.ok(+new Date(res.stale) < +new Date(res.start) + 1 * 1000 + 100);
32
-
33
- t.end();
34
- });
@@ -1,13 +0,0 @@
1
- import test from 'tape';
2
- import CoT from '../index.js';
3
-
4
- test('CoT.from_geojson - Point', (t) => {
5
- try {
6
- new CoT({ event: { _attributes: {} } });
7
- t.fail();
8
- } catch (err) {
9
- t.ok(String(err).includes('must have required property'));
10
- }
11
-
12
- t.end();
13
- });