@tak-ps/node-tak 11.18.1 → 11.19.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 (99) hide show
  1. package/.github/workflows/release.yml +3 -0
  2. package/CHANGELOG.md +8 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +183 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +59 -0
  7. package/dist/index.js +204 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/lib/api/certificate.d.ts +70 -0
  10. package/dist/lib/api/certificate.js +62 -0
  11. package/dist/lib/api/certificate.js.map +1 -0
  12. package/dist/lib/api/contacts.d.ts +24 -0
  13. package/dist/lib/api/contacts.js +44 -0
  14. package/dist/lib/api/contacts.js.map +1 -0
  15. package/dist/lib/api/credentials.d.ts +21 -0
  16. package/dist/lib/api/credentials.js +83 -0
  17. package/dist/lib/api/credentials.js.map +1 -0
  18. package/dist/lib/api/export.d.ts +21 -0
  19. package/dist/lib/api/export.js +37 -0
  20. package/dist/lib/api/export.js.map +1 -0
  21. package/dist/lib/api/files.d.ts +77 -0
  22. package/dist/lib/api/files.js +170 -0
  23. package/dist/lib/api/files.js.map +1 -0
  24. package/dist/lib/api/groups.d.ts +43 -0
  25. package/dist/lib/api/groups.js +68 -0
  26. package/dist/lib/api/groups.js.map +1 -0
  27. package/dist/lib/api/iconsets.d.ts +27 -0
  28. package/dist/lib/api/iconsets.js +42 -0
  29. package/dist/lib/api/iconsets.js.map +1 -0
  30. package/dist/lib/api/injectors.d.ts +52 -0
  31. package/dist/lib/api/injectors.js +82 -0
  32. package/dist/lib/api/injectors.js.map +1 -0
  33. package/dist/lib/api/locate.d.ts +13 -0
  34. package/dist/lib/api/locate.js +27 -0
  35. package/dist/lib/api/locate.js.map +1 -0
  36. package/dist/lib/api/mission-invite.d.ts +36 -0
  37. package/dist/lib/api/mission-invite.js +55 -0
  38. package/dist/lib/api/mission-invite.js.map +1 -0
  39. package/dist/lib/api/mission-layer.d.ts +137 -0
  40. package/dist/lib/api/mission-layer.js +247 -0
  41. package/dist/lib/api/mission-layer.js.map +1 -0
  42. package/dist/lib/api/mission-log.d.ts +75 -0
  43. package/dist/lib/api/mission-log.js +117 -0
  44. package/dist/lib/api/mission-log.js.map +1 -0
  45. package/dist/lib/api/mission.d.ts +556 -0
  46. package/dist/lib/api/mission.js +708 -0
  47. package/dist/lib/api/mission.js.map +1 -0
  48. package/dist/lib/api/oauth.d.ts +22 -0
  49. package/dist/lib/api/oauth.js +55 -0
  50. package/dist/lib/api/oauth.js.map +1 -0
  51. package/dist/lib/api/package.d.ts +40 -0
  52. package/dist/lib/api/package.js +70 -0
  53. package/dist/lib/api/package.js.map +1 -0
  54. package/dist/lib/api/profile.d.ts +9 -0
  55. package/dist/lib/api/profile.js +16 -0
  56. package/dist/lib/api/profile.js.map +1 -0
  57. package/dist/lib/api/query.d.ts +16 -0
  58. package/dist/lib/api/query.js +60 -0
  59. package/dist/lib/api/query.js.map +1 -0
  60. package/dist/lib/api/repeater.d.ts +47 -0
  61. package/dist/lib/api/repeater.js +62 -0
  62. package/dist/lib/api/repeater.js.map +1 -0
  63. package/dist/lib/api/security.d.ts +110 -0
  64. package/dist/lib/api/security.js +123 -0
  65. package/dist/lib/api/security.js.map +1 -0
  66. package/dist/lib/api/subscriptions.d.ts +103 -0
  67. package/dist/lib/api/subscriptions.js +74 -0
  68. package/dist/lib/api/subscriptions.js.map +1 -0
  69. package/dist/lib/api/types.d.ts +41 -0
  70. package/dist/lib/api/types.js +42 -0
  71. package/dist/lib/api/types.js.map +1 -0
  72. package/dist/lib/api/video.d.ts +139 -0
  73. package/dist/lib/api/video.js +151 -0
  74. package/dist/lib/api/video.js.map +1 -0
  75. package/dist/lib/api.d.ts +62 -0
  76. package/dist/lib/api.js +170 -0
  77. package/dist/lib/api.js.map +1 -0
  78. package/dist/lib/auth.d.ts +34 -0
  79. package/dist/lib/auth.js +97 -0
  80. package/dist/lib/auth.js.map +1 -0
  81. package/dist/lib/commands.d.ts +38 -0
  82. package/dist/lib/commands.js +34 -0
  83. package/dist/lib/commands.js.map +1 -0
  84. package/dist/lib/fetch.d.ts +8 -0
  85. package/dist/lib/fetch.js +26 -0
  86. package/dist/lib/fetch.js.map +1 -0
  87. package/dist/lib/stream.d.ts +2 -0
  88. package/dist/lib/stream.js +9 -0
  89. package/dist/lib/stream.js.map +1 -0
  90. package/dist/test/default.test.d.ts +1 -0
  91. package/dist/test/default.test.js +8 -0
  92. package/dist/test/default.test.js.map +1 -0
  93. package/dist/test/findCoT.test.d.ts +1 -0
  94. package/dist/test/findCoT.test.js +85 -0
  95. package/dist/test/findCoT.test.js.map +1 -0
  96. package/dist/tsconfig.tsbuildinfo +1 -0
  97. package/lib/api/certificate.ts +89 -0
  98. package/lib/api.ts +4 -0
  99. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ import { Stream } from 'node:stream';
2
+ export default function stream2buffer(stream: Stream): Promise<Buffer>;
@@ -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":["../../lib/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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import TAK, { CoT } from '../index.js';
2
+ import test from 'tape';
3
+ test('Ensure Export', (t) => {
4
+ t.ok(TAK);
5
+ t.ok(CoT);
6
+ t.end();
7
+ });
8
+ //# sourceMappingURL=default.test.js.map
@@ -0,0 +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;AAExB,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;IACxB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,85 @@
1
+ import TAK from '../index.js';
2
+ import test from 'tape';
3
+ test('findCoT - Unfinished', (t) => {
4
+ const res = TAK.findCoT('<event ><detail>');
5
+ t.equals(res, null);
6
+ t.end();
7
+ });
8
+ test('findCoT - Basic', (t) => {
9
+ const res = TAK.findCoT('<event></event>');
10
+ t.deepEquals(res, {
11
+ event: '<event></event>',
12
+ remainder: '',
13
+ });
14
+ t.end();
15
+ });
16
+ test('findCoT - New Lines', (t) => {
17
+ const res = TAK.findCoT(`
18
+ <event>
19
+ <detail remarks="
20
+ I am a multiline
21
+ remarks field
22
+ "/>
23
+ </event>`);
24
+ t.deepEquals(res, {
25
+ event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
26
+ remainder: '',
27
+ });
28
+ t.end();
29
+ });
30
+ test('findCoT - New Lines - Non-Greedy', (t) => {
31
+ const res = TAK.findCoT(`
32
+ <event>
33
+ <detail remarks="
34
+ I am a multiline
35
+ remarks field
36
+ "/>
37
+ </event><event>
38
+ <detail remarks="
39
+ I am a multiline
40
+ remarks field
41
+ "/>
42
+ </event>`);
43
+ t.deepEquals(res, {
44
+ event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
45
+ remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
46
+ });
47
+ t.end();
48
+ });
49
+ test('findCoT - bad preceding data', (t) => {
50
+ const res = TAK.findCoT(`
51
+ <fake/>
52
+ <event><detail remarks="I am remarks"/>
53
+ </event>
54
+ `);
55
+ t.deepEquals(res, {
56
+ event: '<event><detail remarks="I am remarks"/>\n</event>',
57
+ remainder: '\n',
58
+ });
59
+ t.end();
60
+ });
61
+ test('findCoT - bad post data', (t) => {
62
+ const res = TAK.findCoT(`
63
+ <event><detail remarks="I am remarks"/>
64
+ </event>
65
+ <fake/>
66
+ `);
67
+ t.deepEquals(res, {
68
+ event: '<event><detail remarks="I am remarks"/>\n</event>',
69
+ remainder: '\n<fake/>\n',
70
+ });
71
+ t.end();
72
+ });
73
+ test('findCoT - mixed', (t) => {
74
+ const res = TAK.findCoT(`
75
+ <event><detail remarks="I am remarks"/>
76
+ </event>
77
+ <fake/>
78
+ <event><detail remarks="I am remarks"/></event>`);
79
+ t.deepEquals(res, {
80
+ event: '<event><detail remarks="I am remarks"/>\n</event>',
81
+ remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
82
+ });
83
+ t.end();
84
+ });
85
+ //# sourceMappingURL=findCoT.test.js.map
@@ -0,0 +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;KAChB,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;KAChB,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;KAClG,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;KAClB,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;KAC3B,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;KAC1E,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"root":["../cli.ts","../index.ts","../test/default.test.ts","../test/findCoT.test.ts","../lib/api.ts","../lib/auth.ts","../lib/commands.ts","../lib/fetch.ts","../lib/stream.ts","../lib/api/certificate.ts","../lib/api/contacts.ts","../lib/api/credentials.ts","../lib/api/export.ts","../lib/api/files.ts","../lib/api/groups.ts","../lib/api/iconsets.ts","../lib/api/injectors.ts","../lib/api/locate.ts","../lib/api/mission-invite.ts","../lib/api/mission-layer.ts","../lib/api/mission-log.ts","../lib/api/mission.ts","../lib/api/oauth.ts","../lib/api/package.ts","../lib/api/profile.ts","../lib/api/query.ts","../lib/api/repeater.ts","../lib/api/security.ts","../lib/api/subscriptions.ts","../lib/api/types.ts","../lib/api/video.ts"],"version":"5.9.3"}
@@ -0,0 +1,89 @@
1
+ import Commands from '../commands.js';
2
+ import { Type } from '@sinclair/typebox';
3
+ import type { Static } from '@sinclair/typebox';
4
+ import { TAKItem, TAKList } from './types.js';
5
+
6
+ export const Certificate = Type.Object({
7
+ id: Type.Integer(),
8
+ creatorDn: Type.String(),
9
+ subjectDn: Type.String(),
10
+ userDn: Type.String(),
11
+ certificate: Type.String(),
12
+ hash: Type.String(),
13
+ clientUid: Type.String(),
14
+ issuanceDate: Type.String({ format: 'date-time' }),
15
+ expirationDate: Type.String({ format: 'date-time' }),
16
+ effectiveDate: Type.String({ format: 'date-time' }),
17
+ revocationDate: Type.Optional(Type.String({ format: 'date-time' })),
18
+ token: Type.String(),
19
+ serialNumber: Type.String()
20
+ });
21
+
22
+ export const TAKList_Certificate = TAKList(Certificate);
23
+ export const TAKItem_Certificate = TAKItem(Certificate);
24
+
25
+ export default class CertificateCommands extends Commands {
26
+ schema = {}
27
+
28
+ async cli(): Promise<object | string> {
29
+ throw new Error('Unsupported Subcommand');
30
+ }
31
+
32
+ async list(
33
+ username?: string
34
+ ): Promise<Static<typeof TAKList_Certificate>> {
35
+ const url = new URL('/Marti/api/certadmin/cert', this.api.url);
36
+
37
+ if (username) {
38
+ url.searchParams.append('username', username);
39
+ }
40
+
41
+ return await this.api.fetch(url) as Static<typeof TAKList_Certificate>;
42
+ }
43
+
44
+ async listRevoked(): Promise<Static<typeof TAKList_Certificate>> {
45
+ const url = new URL('/Marti/api/certadmin/cert/revoked', this.api.url);
46
+
47
+ return await this.api.fetch(url) as Static<typeof TAKList_Certificate>;
48
+ }
49
+
50
+ async listReplaced(): Promise<Static<typeof TAKList_Certificate>> {
51
+ const url = new URL('/Marti/api/certadmin/cert/replaced', this.api.url);
52
+
53
+ return await this.api.fetch(url) as Static<typeof TAKList_Certificate>;
54
+ }
55
+
56
+ async listExpired(): Promise<Static<typeof TAKList_Certificate>> {
57
+ const url = new URL('/Marti/api/certadmin/cert/expired', this.api.url);
58
+
59
+ return await this.api.fetch(url) as Static<typeof TAKList_Certificate>;
60
+ }
61
+
62
+ async get(
63
+ hash: string
64
+ ): Promise<Static<typeof TAKItem_Certificate>> {
65
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}`, this.api.url);
66
+
67
+ return await this.api.fetch(url) as Static<typeof TAKItem_Certificate>;
68
+ }
69
+
70
+ async download(
71
+ hash: string
72
+ ): Promise<string> {
73
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}/download`, this.api.url);
74
+
75
+ return await this.api.fetch(url, {
76
+ method: 'GET',
77
+ }) as string;
78
+ }
79
+
80
+ async revoke(
81
+ hash: string
82
+ ): Promise<Static<typeof TAKItem_Certificate>> {
83
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}`, this.api.url);
84
+
85
+ return await this.api.fetch(url, {
86
+ method: 'DELETE'
87
+ }) as Static<typeof TAKItem_Certificate>;
88
+ }
89
+ }
package/lib/api.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import FormData from 'form-data';
2
2
  import OAuth from './api/oauth.js';
3
3
  import Package from './api/package.js';
4
+ import Certificate from './api/certificate.js';
4
5
  import Query from './api/query.js';
5
6
  import Locate from './api/locate.js';
6
7
  import Mission from './api/mission.js';
@@ -33,6 +34,7 @@ export const CommandList: Record<string, keyof TAKAPI> = {
33
34
  'mission-log': 'MissionLog',
34
35
  'mission-layer': 'MissionLayer',
35
36
  credential: 'Credentials',
37
+ certificate: 'Certificate',
36
38
  iconsets: 'Iconsets',
37
39
  contact: 'Contacts',
38
40
  subscription: 'Subscription',
@@ -63,6 +65,7 @@ export default class TAKAPI {
63
65
  MissionLayer: MissionLayer;
64
66
  Credentials: Credentials;
65
67
  Contacts: Contacts;
68
+ Certificate: Certificate;
66
69
  Subscription: Subscription;
67
70
  Profile: Profile;
68
71
  Injectors: Injectors;
@@ -82,6 +85,7 @@ export default class TAKAPI {
82
85
  this.Locate = new Locate(this);
83
86
  this.Package = new Package(this);
84
87
  this.Profile = new Profile(this);
88
+ this.Certificate = new Certificate(this);
85
89
  this.OAuth = new OAuth(this);
86
90
  this.Export = new Export(this);
87
91
  this.Iconsets = new Iconsets(this);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tak-ps/node-tak",
3
3
  "type": "module",
4
- "version": "11.18.1",
4
+ "version": "11.19.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",