@tak-ps/node-tak 11.18.1 → 11.18.2

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 (94) hide show
  1. package/.github/workflows/release.yml +3 -0
  2. package/CHANGELOG.md +4 -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/contacts.d.ts +24 -0
  10. package/dist/lib/api/contacts.js +44 -0
  11. package/dist/lib/api/contacts.js.map +1 -0
  12. package/dist/lib/api/credentials.d.ts +21 -0
  13. package/dist/lib/api/credentials.js +83 -0
  14. package/dist/lib/api/credentials.js.map +1 -0
  15. package/dist/lib/api/export.d.ts +21 -0
  16. package/dist/lib/api/export.js +37 -0
  17. package/dist/lib/api/export.js.map +1 -0
  18. package/dist/lib/api/files.d.ts +77 -0
  19. package/dist/lib/api/files.js +170 -0
  20. package/dist/lib/api/files.js.map +1 -0
  21. package/dist/lib/api/groups.d.ts +43 -0
  22. package/dist/lib/api/groups.js +68 -0
  23. package/dist/lib/api/groups.js.map +1 -0
  24. package/dist/lib/api/iconsets.d.ts +27 -0
  25. package/dist/lib/api/iconsets.js +42 -0
  26. package/dist/lib/api/iconsets.js.map +1 -0
  27. package/dist/lib/api/injectors.d.ts +52 -0
  28. package/dist/lib/api/injectors.js +82 -0
  29. package/dist/lib/api/injectors.js.map +1 -0
  30. package/dist/lib/api/locate.d.ts +13 -0
  31. package/dist/lib/api/locate.js +27 -0
  32. package/dist/lib/api/locate.js.map +1 -0
  33. package/dist/lib/api/mission-invite.d.ts +36 -0
  34. package/dist/lib/api/mission-invite.js +55 -0
  35. package/dist/lib/api/mission-invite.js.map +1 -0
  36. package/dist/lib/api/mission-layer.d.ts +137 -0
  37. package/dist/lib/api/mission-layer.js +247 -0
  38. package/dist/lib/api/mission-layer.js.map +1 -0
  39. package/dist/lib/api/mission-log.d.ts +75 -0
  40. package/dist/lib/api/mission-log.js +117 -0
  41. package/dist/lib/api/mission-log.js.map +1 -0
  42. package/dist/lib/api/mission.d.ts +556 -0
  43. package/dist/lib/api/mission.js +708 -0
  44. package/dist/lib/api/mission.js.map +1 -0
  45. package/dist/lib/api/oauth.d.ts +22 -0
  46. package/dist/lib/api/oauth.js +55 -0
  47. package/dist/lib/api/oauth.js.map +1 -0
  48. package/dist/lib/api/package.d.ts +40 -0
  49. package/dist/lib/api/package.js +70 -0
  50. package/dist/lib/api/package.js.map +1 -0
  51. package/dist/lib/api/profile.d.ts +9 -0
  52. package/dist/lib/api/profile.js +16 -0
  53. package/dist/lib/api/profile.js.map +1 -0
  54. package/dist/lib/api/query.d.ts +16 -0
  55. package/dist/lib/api/query.js +60 -0
  56. package/dist/lib/api/query.js.map +1 -0
  57. package/dist/lib/api/repeater.d.ts +47 -0
  58. package/dist/lib/api/repeater.js +62 -0
  59. package/dist/lib/api/repeater.js.map +1 -0
  60. package/dist/lib/api/security.d.ts +110 -0
  61. package/dist/lib/api/security.js +123 -0
  62. package/dist/lib/api/security.js.map +1 -0
  63. package/dist/lib/api/subscriptions.d.ts +103 -0
  64. package/dist/lib/api/subscriptions.js +74 -0
  65. package/dist/lib/api/subscriptions.js.map +1 -0
  66. package/dist/lib/api/types.d.ts +41 -0
  67. package/dist/lib/api/types.js +42 -0
  68. package/dist/lib/api/types.js.map +1 -0
  69. package/dist/lib/api/video.d.ts +139 -0
  70. package/dist/lib/api/video.js +151 -0
  71. package/dist/lib/api/video.js.map +1 -0
  72. package/dist/lib/api.d.ts +60 -0
  73. package/dist/lib/api.js +166 -0
  74. package/dist/lib/api.js.map +1 -0
  75. package/dist/lib/auth.d.ts +34 -0
  76. package/dist/lib/auth.js +97 -0
  77. package/dist/lib/auth.js.map +1 -0
  78. package/dist/lib/commands.d.ts +38 -0
  79. package/dist/lib/commands.js +34 -0
  80. package/dist/lib/commands.js.map +1 -0
  81. package/dist/lib/fetch.d.ts +8 -0
  82. package/dist/lib/fetch.js +26 -0
  83. package/dist/lib/fetch.js.map +1 -0
  84. package/dist/lib/stream.d.ts +2 -0
  85. package/dist/lib/stream.js +9 -0
  86. package/dist/lib/stream.js.map +1 -0
  87. package/dist/test/default.test.d.ts +1 -0
  88. package/dist/test/default.test.js +8 -0
  89. package/dist/test/default.test.js.map +1 -0
  90. package/dist/test/findCoT.test.d.ts +1 -0
  91. package/dist/test/findCoT.test.js +85 -0
  92. package/dist/test/findCoT.test.js.map +1 -0
  93. package/dist/tsconfig.tsbuildinfo +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ import { APIAuthPassword } from '../auth.js';
2
+ import { Type } from '@sinclair/typebox';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ import pem from 'pem';
5
+ import xmljs from 'xml-js';
6
+ export const CertificateResponse = Type.Object({
7
+ ca: Type.Array(Type.String()),
8
+ cert: Type.String(),
9
+ key: Type.String()
10
+ });
11
+ export default class CredentialCommands extends Commands {
12
+ schema = {
13
+ config: {
14
+ description: 'Return TLS Config Info',
15
+ params: Type.Object({}),
16
+ query: Type.Object({}),
17
+ formats: [CommandOutputFormat.JSON]
18
+ }
19
+ };
20
+ async cli(args) {
21
+ if (args._[3] === 'config') {
22
+ return this.config();
23
+ }
24
+ else {
25
+ throw new Error('Unsupported Subcommand');
26
+ }
27
+ }
28
+ async config() {
29
+ const url = new URL(`/Marti/api/tls/config`, this.api.url);
30
+ return await this.api.fetch(url, {
31
+ method: 'GET'
32
+ });
33
+ }
34
+ async generate() {
35
+ if (!(this.api.auth instanceof APIAuthPassword))
36
+ throw new Error('Must use Password Auth');
37
+ const config = xmljs.xml2js(await this.config(), { compact: true });
38
+ let organization = null;
39
+ let organizationUnit = null;
40
+ const nameEntries = config['ns2:certificateConfig'].nameEntries;
41
+ if (nameEntries && nameEntries.nameEntry) {
42
+ for (const ne of nameEntries.nameEntry) {
43
+ if (ne._attributes && ne._attributes.name === 'O')
44
+ organization = ne._attributes.value;
45
+ if (ne._attributes && ne._attributes.name === 'OU')
46
+ organizationUnit = ne._attributes.value;
47
+ }
48
+ }
49
+ const createCSR = pem.promisified.createCSR;
50
+ const keys = await createCSR({
51
+ organization,
52
+ organizationUnit,
53
+ commonName: this.api.auth.username
54
+ });
55
+ const url = new URL(`/Marti/api/tls/signClient/v2`, this.api.url);
56
+ url.searchParams.append('clientUid', this.api.auth.username + ' (ETL)');
57
+ url.searchParams.append('version', '3');
58
+ const res = await this.api.fetch(url, {
59
+ method: 'POST',
60
+ nocookies: true,
61
+ headers: {
62
+ Accept: 'application/json',
63
+ Authorization: 'Basic ' + btoa(this.api.auth.username + ":" + this.api.auth.password)
64
+ },
65
+ body: keys.csr
66
+ });
67
+ let cert = '-----BEGIN CERTIFICATE-----\n' + res.signedCert;
68
+ if (!res.signedCert.endsWith('\n'))
69
+ cert = cert + '\n';
70
+ cert = cert + '-----END CERTIFICATE-----';
71
+ const chain = [];
72
+ if (res.ca0)
73
+ chain.push(res.ca0);
74
+ if (res.ca1)
75
+ chain.push(res.ca1);
76
+ return {
77
+ ca: chain,
78
+ cert,
79
+ key: keys.clientKey
80
+ };
81
+ }
82
+ }
83
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../lib/api/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAU,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,QAAQ,EAAE,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACpD,MAAM,GAAG;QACL,MAAM,EAAE;YACJ,WAAW,EAAE,wBAAwB;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAE,mBAAmB,CAAC,IAAI,CAAE;SACxC;KACJ,CAAA;IAED,KAAK,CAAC,GAAG,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,eAAe,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAE3F,MAAM,MAAM,GAAQ,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzE,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC;QAChE,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YACvC,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,GAAG;oBAAE,YAAY,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvF,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI;oBAAE,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;YAChG,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC;QAE5C,MAAM,IAAI,GAGN,MAAM,SAAS,CAAC;YAChB,YAAY;YACZ,gBAAgB;YAChB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;SACrC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QACxE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,IAAI;YACf,OAAO,EAAE;gBACL,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxF;YACD,IAAI,EAAE,IAAI,CAAC,GAAG;SACjB,CAAC,CAAC;QAEH,IAAI,IAAI,GAAG,+BAA+B,GAAG,GAAG,CAAC,UAAU,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACvD,IAAI,GAAG,IAAI,GAAG,2BAA2B,CAAC;QAE1C,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,GAAG,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjC,OAAO;YACH,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,SAAS;SACtB,CAAA;IACL,CAAC;CACJ"}
@@ -0,0 +1,21 @@
1
+ import { Static } from '@sinclair/typebox';
2
+ import { Readable } from 'node:stream';
3
+ import Commands from '../commands.js';
4
+ export declare const ExportInput: import("@sinclair/typebox").TObject<{
5
+ startTime: import("@sinclair/typebox").TString;
6
+ endTime: import("@sinclair/typebox").TString;
7
+ groups: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
8
+ format: import("@sinclair/typebox").TString;
9
+ interval: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
10
+ multiTrackThreshold: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
11
+ extendedData: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
12
+ optimizeExport: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
13
+ }>;
14
+ /**
15
+ * @class
16
+ */
17
+ export default class ExportCommands extends Commands {
18
+ schema: {};
19
+ cli(): Promise<object | string>;
20
+ export(query: Static<typeof ExportInput>): Promise<Readable>;
21
+ }
@@ -0,0 +1,37 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import Commands from '../commands.js';
3
+ export const ExportInput = Type.Object({
4
+ startTime: Type.String(),
5
+ endTime: Type.String(),
6
+ groups: Type.Array(Type.String()),
7
+ format: Type.String({ enum: ['kmz', 'kml'] }),
8
+ interval: Type.Optional(Type.Number()),
9
+ multiTrackThreshold: Type.Optional(Type.String()),
10
+ extendedData: Type.Optional(Type.Boolean()),
11
+ optimizeExport: Type.Optional(Type.Boolean()),
12
+ });
13
+ /**
14
+ * @class
15
+ */
16
+ export default class ExportCommands extends Commands {
17
+ schema = {};
18
+ async cli() {
19
+ throw new Error('Unsupported Subcommand');
20
+ }
21
+ async export(query) {
22
+ const url = new URL(`/Marti/ExportMissionKML`, this.api.url);
23
+ const params = new URLSearchParams();
24
+ let q;
25
+ for (q in query) {
26
+ if (query[q] !== undefined) {
27
+ params.append(q, String(query[q]));
28
+ }
29
+ }
30
+ const res = await this.api.fetch(url, {
31
+ method: 'POST',
32
+ body: params
33
+ }, true);
34
+ return res.body;
35
+ }
36
+ }
37
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../lib/api/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAEjD,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3C,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,MAAM,GAAG,EAAE,CAAC;IAEZ,KAAK,CAAC,GAAG;QACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiC;QAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAmC,CAAC;QACxC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAG,CAAC;gBAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;SACf,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;CACJ"}
@@ -0,0 +1,77 @@
1
+ import type { ParsedArgs } from 'minimist';
2
+ import { Readable } from 'node:stream';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ import { Static } from '@sinclair/typebox';
5
+ export declare const Content: import("@sinclair/typebox").TObject<{
6
+ UID: import("@sinclair/typebox").TString;
7
+ SubmissionDateTime: import("@sinclair/typebox").TString;
8
+ Keywords: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
9
+ MIMEType: import("@sinclair/typebox").TString;
10
+ SubmissionUser: import("@sinclair/typebox").TString;
11
+ PrimaryKey: import("@sinclair/typebox").TString;
12
+ Hash: import("@sinclair/typebox").TString;
13
+ CreatorUid: import("@sinclair/typebox").TString;
14
+ Name: import("@sinclair/typebox").TString;
15
+ }>;
16
+ export declare const TAKList_Content: import("@sinclair/typebox").TObject<{
17
+ version: import("@sinclair/typebox").TString;
18
+ type: import("@sinclair/typebox").TString;
19
+ data: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
20
+ filename: import("@sinclair/typebox").TString;
21
+ keywords: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
22
+ mimeType: import("@sinclair/typebox").TString;
23
+ name: import("@sinclair/typebox").TString;
24
+ submissionTime: import("@sinclair/typebox").TString;
25
+ submitter: import("@sinclair/typebox").TString;
26
+ uid: import("@sinclair/typebox").TString;
27
+ size: import("@sinclair/typebox").TInteger;
28
+ }>>;
29
+ messages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
30
+ nodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
31
+ }>;
32
+ export declare const Config: import("@sinclair/typebox").TObject<{
33
+ uploadSizeLimit: import("@sinclair/typebox").TInteger;
34
+ }>;
35
+ export default class FileCommands extends Commands {
36
+ schema: {
37
+ list: {
38
+ description: string;
39
+ params: import("@sinclair/typebox").TObject<{}>;
40
+ query: import("@sinclair/typebox").TObject<{}>;
41
+ formats: CommandOutputFormat[];
42
+ };
43
+ };
44
+ cli(args: ParsedArgs): Promise<object | string>;
45
+ list(): Promise<Static<typeof TAKList_Content>>;
46
+ meta(hash: string): Promise<string>;
47
+ download(hash: string): Promise<Readable>;
48
+ adminDelete(hash: string): Promise<any>;
49
+ delete(hash: string): Promise<any>;
50
+ /**
51
+ * Update a Package that should appear in the Public Data Packages List
52
+ */
53
+ uploadPackage(opts: {
54
+ name: string;
55
+ creatorUid: string;
56
+ hash: string;
57
+ keywords?: string[];
58
+ mimetype?: string;
59
+ groups?: string[];
60
+ }, body: Readable | Buffer): Promise<string>;
61
+ /**
62
+ * Update a Package that will not appear in the Public Data Packages List
63
+ * used primarily for sharing files between TAK clients
64
+ */
65
+ upload(opts: {
66
+ name: string;
67
+ contentLength: number;
68
+ contentType?: string;
69
+ keywords: string[];
70
+ creatorUid: string;
71
+ latitude?: string;
72
+ longitude?: string;
73
+ altitude?: string;
74
+ }, body: Readable | Buffer): Promise<Static<typeof Content>>;
75
+ count(): Promise<any>;
76
+ config(): Promise<Static<typeof Config>>;
77
+ }
@@ -0,0 +1,170 @@
1
+ import FormData from 'form-data';
2
+ import { Readable } from 'node:stream';
3
+ import mime from 'mime';
4
+ import Commands, { CommandOutputFormat } from '../commands.js';
5
+ import { TAKList } from './types.js';
6
+ import { Type } from '@sinclair/typebox';
7
+ export const Content = Type.Object({
8
+ UID: Type.String(),
9
+ SubmissionDateTime: Type.String(),
10
+ Keywords: Type.Array(Type.String()),
11
+ MIMEType: Type.String(),
12
+ SubmissionUser: Type.String(),
13
+ PrimaryKey: Type.String(),
14
+ Hash: Type.String(),
15
+ CreatorUid: Type.String(),
16
+ Name: Type.String()
17
+ });
18
+ export const TAKList_Content = TAKList(Type.Object({
19
+ filename: Type.String(),
20
+ keywords: Type.Array(Type.String()),
21
+ mimeType: Type.String(),
22
+ name: Type.String(),
23
+ submissionTime: Type.String(),
24
+ submitter: Type.String(),
25
+ uid: Type.String(),
26
+ size: Type.Integer(),
27
+ }));
28
+ export const Config = Type.Object({
29
+ uploadSizeLimit: Type.Integer()
30
+ });
31
+ export default class FileCommands extends Commands {
32
+ schema = {
33
+ list: {
34
+ description: 'List Files',
35
+ params: Type.Object({}),
36
+ query: Type.Object({}),
37
+ formats: [CommandOutputFormat.JSON]
38
+ }
39
+ };
40
+ async cli(args) {
41
+ if (args._[3] === 'list') {
42
+ const list = await this.list();
43
+ if (args.format === 'json') {
44
+ return list;
45
+ }
46
+ else {
47
+ return list.data.map((data) => {
48
+ return data.filename;
49
+ }).join('\n');
50
+ }
51
+ }
52
+ else {
53
+ throw new Error('Unsupported Subcommand');
54
+ }
55
+ }
56
+ async list() {
57
+ const url = new URL(`/Marti/api/sync/search`, this.api.url);
58
+ return await this.api.fetch(url, {
59
+ method: 'GET'
60
+ });
61
+ }
62
+ async meta(hash) {
63
+ const url = new URL(`/Marti/sync/${encodeURIComponent(hash)}/metadata`, this.api.url);
64
+ const res = await this.api.fetch(url, {
65
+ method: 'GET'
66
+ }, true);
67
+ const body = await res.text();
68
+ return body;
69
+ }
70
+ async download(hash) {
71
+ const url = new URL(`/Marti/sync/content`, this.api.url);
72
+ url.searchParams.append('hash', hash);
73
+ const res = await this.api.fetch(url, {
74
+ method: 'GET'
75
+ }, true);
76
+ return res.body;
77
+ }
78
+ async adminDelete(hash) {
79
+ const url = new URL(`/Marti/api/files/${hash}`, this.api.url);
80
+ return await this.api.fetch(url, {
81
+ method: 'DELETE',
82
+ });
83
+ }
84
+ async delete(hash) {
85
+ const url = new URL(`/Marti/sync/delete`, this.api.url);
86
+ url.searchParams.append('hash', hash);
87
+ return await this.api.fetch(url, {
88
+ method: 'DELETE',
89
+ });
90
+ }
91
+ // TODO Return a Content Object
92
+ /**
93
+ * Update a Package that should appear in the Public Data Packages List
94
+ */
95
+ async uploadPackage(opts, body) {
96
+ const url = new URL(`/Marti/sync/missionupload`, this.api.url);
97
+ url.searchParams.append('filename', opts.name);
98
+ url.searchParams.append('creatorUid', opts.creatorUid);
99
+ url.searchParams.append('hash', opts.hash);
100
+ if (opts.mimetype) {
101
+ url.searchParams.append('mimetype', opts.mimetype);
102
+ }
103
+ // Needs this keywordt to appear in public list
104
+ url.searchParams.append('keyword', 'missionpackage');
105
+ if (opts.keywords) {
106
+ for (const keyword of opts.keywords) {
107
+ if (keyword.toLowerCase() === 'missionpackage')
108
+ continue;
109
+ url.searchParams.append('keyword', keyword);
110
+ }
111
+ }
112
+ if (opts.groups) {
113
+ for (const group of opts.groups) {
114
+ // This is intentionally case sensitive due to an apparent bug in TAK server
115
+ url.searchParams.append('Groups', group);
116
+ }
117
+ }
118
+ if (body instanceof Buffer) {
119
+ body = Readable.from(body);
120
+ }
121
+ const form = new FormData();
122
+ form.append('assetfile', body);
123
+ const res = await this.api.fetch(url, {
124
+ method: 'POST',
125
+ body: form
126
+ });
127
+ return res;
128
+ }
129
+ /**
130
+ * Update a Package that will not appear in the Public Data Packages List
131
+ * used primarily for sharing files between TAK clients
132
+ */
133
+ async upload(opts, body) {
134
+ const url = new URL(`/Marti/sync/upload`, this.api.url);
135
+ url.searchParams.append('name', opts.name);
136
+ url.searchParams.append('keywords', opts.keywords.join(','));
137
+ url.searchParams.append('creatorUid', opts.creatorUid);
138
+ if (opts.altitude)
139
+ url.searchParams.append('altitude', opts.altitude);
140
+ if (opts.longitude)
141
+ url.searchParams.append('longitude', opts.longitude);
142
+ if (opts.latitude)
143
+ url.searchParams.append('latitude', opts.latitude);
144
+ if (body instanceof Buffer) {
145
+ body = Readable.from(body);
146
+ }
147
+ const res = await this.api.fetch(url, {
148
+ method: 'POST',
149
+ headers: {
150
+ 'Content-Type': opts.contentType ? opts.contentType : mime.getType(opts.name),
151
+ 'Content-Length': opts.contentLength
152
+ },
153
+ body: body
154
+ });
155
+ return JSON.parse(res);
156
+ }
157
+ async count() {
158
+ const url = new URL('/Marti/api/files/metadata/count', this.api.url);
159
+ return await this.api.fetch(url, {
160
+ method: 'GET'
161
+ });
162
+ }
163
+ async config() {
164
+ const url = new URL('/files/api/config', this.api.url);
165
+ return await this.api.fetch(url, {
166
+ method: 'GET'
167
+ });
168
+ }
169
+ }
170
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../lib/api/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { Static } from '@sinclair/typebox';
2
+ import type { ParsedArgs } from 'minimist';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ export declare const Group: import("@sinclair/typebox").TObject<{
5
+ name: import("@sinclair/typebox").TString;
6
+ direction: import("@sinclair/typebox").TString;
7
+ created: import("@sinclair/typebox").TString;
8
+ type: import("@sinclair/typebox").TString;
9
+ bitpos: import("@sinclair/typebox").TNumber;
10
+ active: import("@sinclair/typebox").TBoolean;
11
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
12
+ }>;
13
+ export declare const GroupListInput: import("@sinclair/typebox").TObject<{
14
+ useCache: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
15
+ }>;
16
+ export declare const TAKList_Group: import("@sinclair/typebox").TObject<{
17
+ version: import("@sinclair/typebox").TString;
18
+ type: import("@sinclair/typebox").TString;
19
+ data: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
20
+ name: import("@sinclair/typebox").TString;
21
+ direction: import("@sinclair/typebox").TString;
22
+ created: import("@sinclair/typebox").TString;
23
+ type: import("@sinclair/typebox").TString;
24
+ bitpos: import("@sinclair/typebox").TNumber;
25
+ active: import("@sinclair/typebox").TBoolean;
26
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
27
+ }>>;
28
+ messages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
29
+ nodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
30
+ }>;
31
+ export default class GroupCommands extends Commands {
32
+ schema: {
33
+ list: {
34
+ description: string;
35
+ params: import("@sinclair/typebox").TObject<{}>;
36
+ query: import("@sinclair/typebox").TObject<{}>;
37
+ formats: CommandOutputFormat[];
38
+ };
39
+ };
40
+ cli(args: ParsedArgs): Promise<object | string>;
41
+ list(query?: Static<typeof GroupListInput>): Promise<Static<typeof TAKList_Group>>;
42
+ update(body: Static<typeof Group>[], query?: Static<typeof GroupListInput>): Promise<void>;
43
+ }
@@ -0,0 +1,68 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import { TAKList } from './types.js';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ export const Group = Type.Object({
5
+ name: Type.String(),
6
+ direction: Type.String(),
7
+ created: Type.String(),
8
+ type: Type.String(),
9
+ bitpos: Type.Number(),
10
+ active: Type.Boolean(),
11
+ description: Type.Optional(Type.String())
12
+ });
13
+ export const GroupListInput = Type.Object({
14
+ useCache: Type.Optional(Type.Boolean())
15
+ });
16
+ export const TAKList_Group = TAKList(Group);
17
+ export default class GroupCommands extends Commands {
18
+ schema = {
19
+ list: {
20
+ description: 'List Missions',
21
+ params: Type.Object({}),
22
+ query: Type.Object({}),
23
+ formats: [CommandOutputFormat.JSON]
24
+ }
25
+ };
26
+ async cli(args) {
27
+ if (args._[3] === 'list') {
28
+ const list = await this.list();
29
+ if (args.format === 'json') {
30
+ return list;
31
+ }
32
+ else {
33
+ return list.data.map((channel) => {
34
+ return `${channel.name} - ${channel.description}`;
35
+ }).join('\n');
36
+ }
37
+ }
38
+ else {
39
+ throw new Error('Unsupported Subcommand');
40
+ }
41
+ }
42
+ async list(query = {}) {
43
+ const url = new URL(`/Marti/api/groups/all`, this.api.url);
44
+ let q;
45
+ for (q in query) {
46
+ if (query[q] !== undefined) {
47
+ url.searchParams.append(q, String(query[q]));
48
+ }
49
+ }
50
+ return await this.api.fetch(url, {
51
+ method: 'GET'
52
+ });
53
+ }
54
+ async update(body, query = {}) {
55
+ const url = new URL(`/Marti/api/groups/active`, this.api.url);
56
+ let q;
57
+ for (q in query) {
58
+ if (query[q] !== undefined) {
59
+ url.searchParams.append(q, String(query[q]));
60
+ }
61
+ }
62
+ await this.api.fetch(url, {
63
+ method: 'PUT',
64
+ body
65
+ });
66
+ }
67
+ }
68
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../lib/api/groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ParsedArgs } from 'minimist';
2
+ import { Static } from '@sinclair/typebox';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ export declare const TAKList_Iconsets: import("@sinclair/typebox").TObject<{
5
+ version: import("@sinclair/typebox").TString;
6
+ type: import("@sinclair/typebox").TString;
7
+ data: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
8
+ messages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
9
+ nodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
+ }>;
11
+ export default class InjectorCommands extends Commands {
12
+ schema: {
13
+ list: {
14
+ description: string;
15
+ params: import("@sinclair/typebox").TObject<{}>;
16
+ query: import("@sinclair/typebox").TObject<{}>;
17
+ formats: CommandOutputFormat[];
18
+ };
19
+ };
20
+ cli(args: ParsedArgs): Promise<object | string>;
21
+ /**
22
+ * Return a list of iconset UIDs
23
+ *
24
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/iconset-icon-api/operation/getAllIconsetUids TAK Server Docs}.
25
+ */
26
+ list(): Promise<Static<typeof TAKList_Iconsets>>;
27
+ }
@@ -0,0 +1,42 @@
1
+ import { TAKList } from './types.js';
2
+ import { Type } from '@sinclair/typebox';
3
+ import Commands, { CommandOutputFormat } from '../commands.js';
4
+ export const TAKList_Iconsets = TAKList(Type.String());
5
+ export default class InjectorCommands extends Commands {
6
+ schema = {
7
+ list: {
8
+ description: 'List Iconsets',
9
+ params: Type.Object({}),
10
+ query: Type.Object({}),
11
+ formats: [CommandOutputFormat.JSON]
12
+ }
13
+ };
14
+ async cli(args) {
15
+ if (args._[3] === 'list') {
16
+ const list = await this.list();
17
+ if (args.format === 'json') {
18
+ return list;
19
+ }
20
+ else {
21
+ return list.data.map((iconset) => {
22
+ return iconset;
23
+ }).join('\n');
24
+ }
25
+ }
26
+ else {
27
+ throw new Error('Unsupported Subcommand');
28
+ }
29
+ }
30
+ /**
31
+ * Return a list of iconset UIDs
32
+ *
33
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/iconset-icon-api/operation/getAllIconsetUids TAK Server Docs}.
34
+ */
35
+ async list() {
36
+ const url = new URL('/Marti/api/iconset/all/uid', this.api.url);
37
+ return await this.api.fetch(url, {
38
+ method: 'GET'
39
+ });
40
+ }
41
+ }
42
+ //# sourceMappingURL=iconsets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconsets.js","sourceRoot":"","sources":["../../../lib/api/iconsets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAC;AACjD,OAAO,QAAQ,EAAE,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,QAAQ;IAClD,MAAM,GAAG;QACL,IAAI,EAAE;YACF,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAE,mBAAmB,CAAC,IAAI,CAAE;SACxC;KACJ,CAAA;IAED,KAAK,CAAC,GAAG,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC7B,OAAO,OAAO,CAAC;gBACnB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI;QACN,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhE,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;IACP,CAAC;CACJ"}