@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.
- package/.github/workflows/release.yml +3 -0
- package/CHANGELOG.md +8 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +183 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.js +204 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/certificate.d.ts +70 -0
- package/dist/lib/api/certificate.js +62 -0
- package/dist/lib/api/certificate.js.map +1 -0
- package/dist/lib/api/contacts.d.ts +24 -0
- package/dist/lib/api/contacts.js +44 -0
- package/dist/lib/api/contacts.js.map +1 -0
- package/dist/lib/api/credentials.d.ts +21 -0
- package/dist/lib/api/credentials.js +83 -0
- package/dist/lib/api/credentials.js.map +1 -0
- package/dist/lib/api/export.d.ts +21 -0
- package/dist/lib/api/export.js +37 -0
- package/dist/lib/api/export.js.map +1 -0
- package/dist/lib/api/files.d.ts +77 -0
- package/dist/lib/api/files.js +170 -0
- package/dist/lib/api/files.js.map +1 -0
- package/dist/lib/api/groups.d.ts +43 -0
- package/dist/lib/api/groups.js +68 -0
- package/dist/lib/api/groups.js.map +1 -0
- package/dist/lib/api/iconsets.d.ts +27 -0
- package/dist/lib/api/iconsets.js +42 -0
- package/dist/lib/api/iconsets.js.map +1 -0
- package/dist/lib/api/injectors.d.ts +52 -0
- package/dist/lib/api/injectors.js +82 -0
- package/dist/lib/api/injectors.js.map +1 -0
- package/dist/lib/api/locate.d.ts +13 -0
- package/dist/lib/api/locate.js +27 -0
- package/dist/lib/api/locate.js.map +1 -0
- package/dist/lib/api/mission-invite.d.ts +36 -0
- package/dist/lib/api/mission-invite.js +55 -0
- package/dist/lib/api/mission-invite.js.map +1 -0
- package/dist/lib/api/mission-layer.d.ts +137 -0
- package/dist/lib/api/mission-layer.js +247 -0
- package/dist/lib/api/mission-layer.js.map +1 -0
- package/dist/lib/api/mission-log.d.ts +75 -0
- package/dist/lib/api/mission-log.js +117 -0
- package/dist/lib/api/mission-log.js.map +1 -0
- package/dist/lib/api/mission.d.ts +556 -0
- package/dist/lib/api/mission.js +708 -0
- package/dist/lib/api/mission.js.map +1 -0
- package/dist/lib/api/oauth.d.ts +22 -0
- package/dist/lib/api/oauth.js +55 -0
- package/dist/lib/api/oauth.js.map +1 -0
- package/dist/lib/api/package.d.ts +40 -0
- package/dist/lib/api/package.js +70 -0
- package/dist/lib/api/package.js.map +1 -0
- package/dist/lib/api/profile.d.ts +9 -0
- package/dist/lib/api/profile.js +16 -0
- package/dist/lib/api/profile.js.map +1 -0
- package/dist/lib/api/query.d.ts +16 -0
- package/dist/lib/api/query.js +60 -0
- package/dist/lib/api/query.js.map +1 -0
- package/dist/lib/api/repeater.d.ts +47 -0
- package/dist/lib/api/repeater.js +62 -0
- package/dist/lib/api/repeater.js.map +1 -0
- package/dist/lib/api/security.d.ts +110 -0
- package/dist/lib/api/security.js +123 -0
- package/dist/lib/api/security.js.map +1 -0
- package/dist/lib/api/subscriptions.d.ts +103 -0
- package/dist/lib/api/subscriptions.js +74 -0
- package/dist/lib/api/subscriptions.js.map +1 -0
- package/dist/lib/api/types.d.ts +41 -0
- package/dist/lib/api/types.js +42 -0
- package/dist/lib/api/types.js.map +1 -0
- package/dist/lib/api/video.d.ts +139 -0
- package/dist/lib/api/video.js +151 -0
- package/dist/lib/api/video.js.map +1 -0
- package/dist/lib/api.d.ts +62 -0
- package/dist/lib/api.js +170 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +34 -0
- package/dist/lib/auth.js +97 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/commands.d.ts +38 -0
- package/dist/lib/commands.js +34 -0
- package/dist/lib/commands.js.map +1 -0
- package/dist/lib/fetch.d.ts +8 -0
- package/dist/lib/fetch.js +26 -0
- package/dist/lib/fetch.js.map +1 -0
- package/dist/lib/stream.d.ts +2 -0
- package/dist/lib/stream.js +9 -0
- package/dist/lib/stream.js.map +1 -0
- package/dist/test/default.test.d.ts +1 -0
- package/dist/test/default.test.js +8 -0
- package/dist/test/default.test.js.map +1 -0
- package/dist/test/findCoT.test.d.ts +1 -0
- package/dist/test/findCoT.test.js +85 -0
- package/dist/test/findCoT.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/lib/api/certificate.ts +89 -0
- package/lib/api.ts +4 -0
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Static } from '@sinclair/typebox';
|
|
2
|
+
import type { ParsedArgs } from 'minimist';
|
|
3
|
+
import Commands, { CommandOutputFormat } from '../commands.js';
|
|
4
|
+
export declare const Contact: import("@sinclair/typebox").TObject<{
|
|
5
|
+
filterGroups: import("@sinclair/typebox").TAny;
|
|
6
|
+
notes: import("@sinclair/typebox").TString;
|
|
7
|
+
callsign: import("@sinclair/typebox").TString;
|
|
8
|
+
team: import("@sinclair/typebox").TString;
|
|
9
|
+
role: import("@sinclair/typebox").TString;
|
|
10
|
+
takv: import("@sinclair/typebox").TString;
|
|
11
|
+
uid: import("@sinclair/typebox").TString;
|
|
12
|
+
}>;
|
|
13
|
+
export default class ContactCommands extends Commands {
|
|
14
|
+
schema: {
|
|
15
|
+
list: {
|
|
16
|
+
description: string;
|
|
17
|
+
params: import("@sinclair/typebox").TObject<{}>;
|
|
18
|
+
query: import("@sinclair/typebox").TObject<{}>;
|
|
19
|
+
formats: CommandOutputFormat[];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
cli(args: ParsedArgs): Promise<object | string>;
|
|
23
|
+
list(): Promise<Array<Static<typeof Contact>>>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import Commands, { CommandOutputFormat } from '../commands.js';
|
|
3
|
+
export const Contact = Type.Object({
|
|
4
|
+
filterGroups: Type.Any(), // I'm not familiar with this one
|
|
5
|
+
notes: Type.String(),
|
|
6
|
+
callsign: Type.String(),
|
|
7
|
+
team: Type.String(),
|
|
8
|
+
role: Type.String(),
|
|
9
|
+
takv: Type.String(),
|
|
10
|
+
uid: Type.String()
|
|
11
|
+
});
|
|
12
|
+
export default class ContactCommands extends Commands {
|
|
13
|
+
schema = {
|
|
14
|
+
list: {
|
|
15
|
+
description: 'List Contacts',
|
|
16
|
+
params: Type.Object({}),
|
|
17
|
+
query: Type.Object({}),
|
|
18
|
+
formats: [CommandOutputFormat.JSON]
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
async cli(args) {
|
|
22
|
+
if (args._[3] === 'list') {
|
|
23
|
+
const list = await this.list();
|
|
24
|
+
if (args.format === 'json') {
|
|
25
|
+
return list;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return list.map((contact) => {
|
|
29
|
+
return `${contact.callsign || '<No Callsign Set>'} (${contact.notes.trim()})`;
|
|
30
|
+
}).join('\n');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
throw new Error('Unsupported Subcommand');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async list() {
|
|
38
|
+
const url = new URL(`/Marti/api/contacts/all`, this.api.url);
|
|
39
|
+
return await this.api.fetch(url, {
|
|
40
|
+
method: 'GET'
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../lib/api/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAEjD,OAAO,QAAQ,EAAE,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,iCAAiC;IAC3D,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;IACvB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,QAAQ;IACjD,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;YAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACxB,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,mBAAmB,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;gBAClF,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,KAAK,CAAC,IAAI;QACN,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ParsedArgs } from 'minimist';
|
|
2
|
+
import { Static } from '@sinclair/typebox';
|
|
3
|
+
import Commands, { CommandOutputFormat } from '../commands.js';
|
|
4
|
+
export declare const CertificateResponse: import("@sinclair/typebox").TObject<{
|
|
5
|
+
ca: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
6
|
+
cert: import("@sinclair/typebox").TString;
|
|
7
|
+
key: import("@sinclair/typebox").TString;
|
|
8
|
+
}>;
|
|
9
|
+
export default class CredentialCommands extends Commands {
|
|
10
|
+
schema: {
|
|
11
|
+
config: {
|
|
12
|
+
description: string;
|
|
13
|
+
params: import("@sinclair/typebox").TObject<{}>;
|
|
14
|
+
query: import("@sinclair/typebox").TObject<{}>;
|
|
15
|
+
formats: CommandOutputFormat[];
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
cli(args: ParsedArgs): Promise<object | string>;
|
|
19
|
+
config(): Promise<string>;
|
|
20
|
+
generate(): Promise<Static<typeof CertificateResponse>>;
|
|
21
|
+
}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|