@tak-ps/node-tak 8.10.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +36 -1
- package/cli.ts +174 -0
- package/dist/cli.js +135 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/api/contacts.js +24 -4
- package/dist/lib/api/contacts.js.map +1 -1
- package/dist/lib/api/credentials.js +16 -4
- package/dist/lib/api/credentials.js.map +1 -1
- package/dist/lib/api/export.js +5 -4
- package/dist/lib/api/export.js.map +1 -1
- package/dist/lib/api/files.js +40 -8
- package/dist/lib/api/files.js.map +1 -1
- package/dist/lib/api/groups.js +24 -4
- package/dist/lib/api/groups.js.map +1 -1
- package/dist/lib/api/injectors.js +24 -4
- package/dist/lib/api/injectors.js.map +1 -1
- package/dist/lib/api/mission-layer.js +11 -4
- package/dist/lib/api/mission-layer.js.map +1 -1
- package/dist/lib/api/mission-log.js +5 -4
- package/dist/lib/api/mission-log.js.map +1 -1
- package/dist/lib/api/mission.js +24 -4
- package/dist/lib/api/mission.js.map +1 -1
- package/dist/lib/api/oauth.js +5 -4
- package/dist/lib/api/oauth.js.map +1 -1
- package/dist/lib/api/package.js +24 -4
- package/dist/lib/api/package.js.map +1 -1
- package/dist/lib/api/query.js +5 -4
- package/dist/lib/api/query.js.map +1 -1
- package/dist/lib/api/repeater.js +5 -4
- package/dist/lib/api/repeater.js.map +1 -1
- package/dist/lib/api/subscriptions.js +5 -4
- package/dist/lib/api/subscriptions.js.map +1 -1
- package/dist/lib/api/video.js +16 -4
- package/dist/lib/api/video.js.map +1 -1
- package/dist/lib/api.js +17 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auth.js +11 -0
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/commands.js +27 -0
- package/dist/lib/commands.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/index.ts +29 -19
- package/lib/api/contacts.ts +23 -5
- package/lib/api/credentials.ts +17 -6
- package/lib/api/export.ts +5 -5
- package/lib/api/files.ts +43 -10
- package/lib/api/groups.ts +24 -5
- package/lib/api/injectors.ts +24 -5
- package/lib/api/mission-layer.ts +11 -5
- package/lib/api/mission-log.ts +5 -5
- package/lib/api/mission.ts +24 -5
- package/lib/api/oauth.ts +5 -5
- package/lib/api/package.ts +24 -5
- package/lib/api/query.ts +5 -5
- package/lib/api/repeater.ts +5 -5
- package/lib/api/subscriptions.ts +5 -5
- package/lib/api/video.ts +16 -5
- package/lib/api.ts +18 -0
- package/lib/auth.ts +12 -0
- package/lib/commands.ts +41 -0
- package/package.json +7 -1
- package/tsconfig.json +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
## Version History
|
|
12
12
|
|
|
13
|
+
### v9.0.0
|
|
14
|
+
|
|
15
|
+
- :rocket: *Breaking* Change TAK constructor & connect sig. to make CloudTAK used props optional
|
|
16
|
+
- :tada: Introduce new CLI
|
|
17
|
+
- :tada: Introduce `Files.list` API Integration
|
|
18
|
+
|
|
13
19
|
### v8.10.0
|
|
14
20
|
|
|
15
21
|
- :rocket: Support additional TLS options
|
package/README.md
CHANGED
|
@@ -25,7 +25,42 @@ To install `node-tak` with npm run
|
|
|
25
25
|
npm install @tak-ps/node-tak
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
or for use with the global CLI:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install --global @tak-ps/node-tak
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## CLI Usage Examples
|
|
35
|
+
|
|
36
|
+
### Initial Setup
|
|
37
|
+
|
|
38
|
+
The initial run of the CLI will generate a new Connection Profile & Credentials
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
tak
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Once the profile is generated you can specify it with `--profile <profile>` in any command
|
|
45
|
+
or if it is not provided it will be interactively requested
|
|
46
|
+
|
|
47
|
+
### Streaming COTs
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
tak stream
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### API Operations
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
tak <command> <subcommand>
|
|
57
|
+
tak mission list
|
|
58
|
+
tak package list
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
etc.
|
|
62
|
+
|
|
63
|
+
## SDK Usage Examples
|
|
29
64
|
|
|
30
65
|
### Basic Streaming COT Usage
|
|
31
66
|
|
package/cli.ts
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import minimist from 'minimist';
|
|
5
|
+
import { Static } from '@sinclair/typebox';
|
|
6
|
+
import TAK from './index.js';
|
|
7
|
+
import TAKAPI, { CommandList } from './lib/api.js';
|
|
8
|
+
import { APIAuthPassword, APIAuthCertificate } from './lib/auth.js';
|
|
9
|
+
import Commands, { CommandConfig } from './lib/commands.js';
|
|
10
|
+
import { select, confirm, number, input, password, Separator } from '@inquirer/prompts';
|
|
11
|
+
|
|
12
|
+
const args = minimist(process.argv, {
|
|
13
|
+
string: ['profile', 'format'],
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const configPath = path.resolve(os.homedir(), './.tak.json');
|
|
17
|
+
let config: Static<typeof CommandConfig>;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
config = JSON.parse(String(await fs.readFile(configPath)));
|
|
21
|
+
} catch (err) {
|
|
22
|
+
if (err instanceof Error && err.message.includes('no such file or directory')) {
|
|
23
|
+
const answer = await confirm({
|
|
24
|
+
message: 'No TAK Config file Detected, create one?'
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if (!answer) {
|
|
28
|
+
throw new Error('No config file and not creating one');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
config = {
|
|
32
|
+
version: 1,
|
|
33
|
+
profiles: {}
|
|
34
|
+
} as Static<typeof CommandConfig>;
|
|
35
|
+
|
|
36
|
+
await fs.writeFile(
|
|
37
|
+
configPath,
|
|
38
|
+
JSON.stringify(config, null, 4)
|
|
39
|
+
)
|
|
40
|
+
} else {
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!args.profile && config.profiles && Object.keys(config.profiles).length) {
|
|
46
|
+
args.profile = await select({
|
|
47
|
+
message: 'Choose a profile',
|
|
48
|
+
choices: [
|
|
49
|
+
{ name: 'New Profile', value: '' },
|
|
50
|
+
new Separator(),
|
|
51
|
+
].concat(Object.keys(config.profiles).map((profile) => {
|
|
52
|
+
return {
|
|
53
|
+
name: profile,
|
|
54
|
+
value: profile
|
|
55
|
+
};
|
|
56
|
+
}),
|
|
57
|
+
)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!args.profile) {
|
|
62
|
+
console.error('Create new TAK Server Profile:');
|
|
63
|
+
|
|
64
|
+
args.profile = await input({ message: 'Enter a name for this profile' });
|
|
65
|
+
|
|
66
|
+
const host = await input({ message: 'Server hostname', default: 'ops.example.com' });
|
|
67
|
+
|
|
68
|
+
let marti: number | undefined = 8443;
|
|
69
|
+
let webtak: number | undefined = 443;
|
|
70
|
+
let stream: number | undefined = 8089;
|
|
71
|
+
|
|
72
|
+
do {
|
|
73
|
+
marti = await number({ message: 'Marti API Port', default: marti });
|
|
74
|
+
} while (!marti || isNaN(marti))
|
|
75
|
+
|
|
76
|
+
do {
|
|
77
|
+
webtak = await number({ message: 'WebTAK API Port', default: webtak });
|
|
78
|
+
} while (!webtak || isNaN(webtak))
|
|
79
|
+
|
|
80
|
+
do {
|
|
81
|
+
stream = await number({ message: 'Streaming Port', default: stream });
|
|
82
|
+
} while (!stream || isNaN(stream))
|
|
83
|
+
|
|
84
|
+
if (!config.profiles) config.profiles = {};
|
|
85
|
+
config.profiles[args.profile] = {
|
|
86
|
+
host,
|
|
87
|
+
ports: { webtak, marti, stream }
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (args.profile && !config.profiles[args.profile]) {
|
|
92
|
+
throw new Error(`Profile "${args.profile}" is not defined in config file`);
|
|
93
|
+
} else if (!config.profiles[args.profile].auth) {
|
|
94
|
+
const user = await input({ message: 'TAK Username' });
|
|
95
|
+
const pass = await password({ message: 'TAK Password' });
|
|
96
|
+
|
|
97
|
+
const api = await TAKAPI.init(
|
|
98
|
+
new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.webtak),
|
|
99
|
+
new APIAuthPassword(user, pass)
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
config.profiles[args.profile].auth = await api.Credentials.generate();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let command = args._[2];
|
|
106
|
+
|
|
107
|
+
if (!command) {
|
|
108
|
+
command = await select({
|
|
109
|
+
message: 'Choose a Command Group',
|
|
110
|
+
choices: [{
|
|
111
|
+
name: 'stream',
|
|
112
|
+
value: 'stream'
|
|
113
|
+
}].concat(Object.keys(CommandList).map((profile) => {
|
|
114
|
+
return {
|
|
115
|
+
name: profile,
|
|
116
|
+
value: profile
|
|
117
|
+
};
|
|
118
|
+
}))
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
await fs.writeFile(
|
|
123
|
+
configPath,
|
|
124
|
+
JSON.stringify(config, null, 4)
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
const auth = config.profiles[args.profile].auth;
|
|
129
|
+
if (!auth) throw new Error(`No Auth in ${args.profile} profile`);
|
|
130
|
+
|
|
131
|
+
if (command === 'stream') {
|
|
132
|
+
const tak = await TAK.connect(
|
|
133
|
+
new URL('ssl://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.stream),
|
|
134
|
+
auth
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
tak.on('cot', (cot) => {
|
|
138
|
+
console.log(JSON.stringify(cot.to_geojson()));
|
|
139
|
+
});
|
|
140
|
+
} else {
|
|
141
|
+
if (!config.profiles[args.profile].auth) throw new Error(`No Auth in ${args.profile} profile`);
|
|
142
|
+
|
|
143
|
+
const tak = new TAKAPI(
|
|
144
|
+
new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.marti),
|
|
145
|
+
new APIAuthCertificate(auth.cert, auth.key)
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const invoke = tak[CommandList[command]];
|
|
149
|
+
if (!invoke || !(invoke instanceof Commands)) throw new Error(`${command} not found`);
|
|
150
|
+
|
|
151
|
+
if (!args._[3] || args._[3] === 'help') {
|
|
152
|
+
const subcommands = <T extends object>(obj: T) => Object.keys(obj) as Array<keyof T>;
|
|
153
|
+
|
|
154
|
+
console.log((
|
|
155
|
+
[
|
|
156
|
+
'Command:',
|
|
157
|
+
` tak ${args._[2]} <subcommand>`,
|
|
158
|
+
'SubCommands:',
|
|
159
|
+
].concat(subcommands(invoke.schema).map((subcommand) => {
|
|
160
|
+
// @ts-expect-error TODO need to figure out the never here when using keyof
|
|
161
|
+
return ` ${String(subcommand)} - ${invoke.schema[subcommand].description}`
|
|
162
|
+
}))).join('\n')
|
|
163
|
+
)
|
|
164
|
+
} else {
|
|
165
|
+
const res = await invoke.cli(args);
|
|
166
|
+
|
|
167
|
+
if (typeof res === 'string') {
|
|
168
|
+
console.log(res);
|
|
169
|
+
} else {
|
|
170
|
+
console.log(JSON.stringify(res, null, 4));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import minimist from 'minimist';
|
|
5
|
+
import TAK from './index.js';
|
|
6
|
+
import TAKAPI, { CommandList } from './lib/api.js';
|
|
7
|
+
import { APIAuthPassword, APIAuthCertificate } from './lib/auth.js';
|
|
8
|
+
import Commands from './lib/commands.js';
|
|
9
|
+
import { select, confirm, number, input, password, Separator } from '@inquirer/prompts';
|
|
10
|
+
const args = minimist(process.argv, {
|
|
11
|
+
string: ['profile', 'format'],
|
|
12
|
+
});
|
|
13
|
+
const configPath = path.resolve(os.homedir(), './.tak.json');
|
|
14
|
+
let config;
|
|
15
|
+
try {
|
|
16
|
+
config = JSON.parse(String(await fs.readFile(configPath)));
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
if (err instanceof Error && err.message.includes('no such file or directory')) {
|
|
20
|
+
const answer = await confirm({
|
|
21
|
+
message: 'No TAK Config file Detected, create one?'
|
|
22
|
+
});
|
|
23
|
+
if (!answer) {
|
|
24
|
+
throw new Error('No config file and not creating one');
|
|
25
|
+
}
|
|
26
|
+
config = {
|
|
27
|
+
version: 1,
|
|
28
|
+
profiles: {}
|
|
29
|
+
};
|
|
30
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 4));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!args.profile && config.profiles && Object.keys(config.profiles).length) {
|
|
37
|
+
args.profile = await select({
|
|
38
|
+
message: 'Choose a profile',
|
|
39
|
+
choices: [
|
|
40
|
+
{ name: 'New Profile', value: '' },
|
|
41
|
+
new Separator(),
|
|
42
|
+
].concat(Object.keys(config.profiles).map((profile) => {
|
|
43
|
+
return {
|
|
44
|
+
name: profile,
|
|
45
|
+
value: profile
|
|
46
|
+
};
|
|
47
|
+
}))
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (!args.profile) {
|
|
51
|
+
console.error('Create new TAK Server Profile:');
|
|
52
|
+
args.profile = await input({ message: 'Enter a name for this profile' });
|
|
53
|
+
const host = await input({ message: 'Server hostname', default: 'ops.example.com' });
|
|
54
|
+
let marti = 8443;
|
|
55
|
+
let webtak = 443;
|
|
56
|
+
let stream = 8089;
|
|
57
|
+
do {
|
|
58
|
+
marti = await number({ message: 'Marti API Port', default: marti });
|
|
59
|
+
} while (!marti || isNaN(marti));
|
|
60
|
+
do {
|
|
61
|
+
webtak = await number({ message: 'WebTAK API Port', default: webtak });
|
|
62
|
+
} while (!webtak || isNaN(webtak));
|
|
63
|
+
do {
|
|
64
|
+
stream = await number({ message: 'Streaming Port', default: stream });
|
|
65
|
+
} while (!stream || isNaN(stream));
|
|
66
|
+
if (!config.profiles)
|
|
67
|
+
config.profiles = {};
|
|
68
|
+
config.profiles[args.profile] = {
|
|
69
|
+
host,
|
|
70
|
+
ports: { webtak, marti, stream }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (args.profile && !config.profiles[args.profile]) {
|
|
74
|
+
throw new Error(`Profile "${args.profile}" is not defined in config file`);
|
|
75
|
+
}
|
|
76
|
+
else if (!config.profiles[args.profile].auth) {
|
|
77
|
+
const user = await input({ message: 'TAK Username' });
|
|
78
|
+
const pass = await password({ message: 'TAK Password' });
|
|
79
|
+
const api = await TAKAPI.init(new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.webtak), new APIAuthPassword(user, pass));
|
|
80
|
+
config.profiles[args.profile].auth = await api.Credentials.generate();
|
|
81
|
+
}
|
|
82
|
+
let command = args._[2];
|
|
83
|
+
if (!command) {
|
|
84
|
+
command = await select({
|
|
85
|
+
message: 'Choose a Command Group',
|
|
86
|
+
choices: [{
|
|
87
|
+
name: 'stream',
|
|
88
|
+
value: 'stream'
|
|
89
|
+
}].concat(Object.keys(CommandList).map((profile) => {
|
|
90
|
+
return {
|
|
91
|
+
name: profile,
|
|
92
|
+
value: profile
|
|
93
|
+
};
|
|
94
|
+
}))
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 4));
|
|
98
|
+
const auth = config.profiles[args.profile].auth;
|
|
99
|
+
if (!auth)
|
|
100
|
+
throw new Error(`No Auth in ${args.profile} profile`);
|
|
101
|
+
if (command === 'stream') {
|
|
102
|
+
const tak = await TAK.connect(new URL('ssl://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.stream), auth);
|
|
103
|
+
tak.on('cot', (cot) => {
|
|
104
|
+
console.log(JSON.stringify(cot.to_geojson()));
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (!config.profiles[args.profile].auth)
|
|
109
|
+
throw new Error(`No Auth in ${args.profile} profile`);
|
|
110
|
+
const tak = new TAKAPI(new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.marti), new APIAuthCertificate(auth.cert, auth.key));
|
|
111
|
+
const invoke = tak[CommandList[command]];
|
|
112
|
+
if (!invoke || !(invoke instanceof Commands))
|
|
113
|
+
throw new Error(`${command} not found`);
|
|
114
|
+
if (!args._[3] || args._[3] === 'help') {
|
|
115
|
+
const subcommands = (obj) => Object.keys(obj);
|
|
116
|
+
console.log(([
|
|
117
|
+
'Command:',
|
|
118
|
+
` tak ${args._[2]} <subcommand>`,
|
|
119
|
+
'SubCommands:',
|
|
120
|
+
].concat(subcommands(invoke.schema).map((subcommand) => {
|
|
121
|
+
// @ts-expect-error TODO need to figure out the never here when using keyof
|
|
122
|
+
return ` ${String(subcommand)} - ${invoke.schema[subcommand].description}`;
|
|
123
|
+
}))).join('\n'));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const res = await invoke.cli(args);
|
|
127
|
+
if (typeof res === 'string') {
|
|
128
|
+
console.log(res);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(JSON.stringify(res, null, 4));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,10 +19,21 @@ export default class TAK extends EventEmitter {
|
|
|
19
19
|
pingInterval;
|
|
20
20
|
client;
|
|
21
21
|
version;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* @constructor
|
|
24
|
+
*
|
|
25
|
+
* @param url - Full URL of Streaming COT Endpoint IE: "https://ops.cotak.gov:8089"
|
|
26
|
+
* @param auth - TAK Certificate Pair
|
|
27
|
+
* @param opts - Options Object
|
|
28
|
+
* @param opts.id - When using multiple connections in a script, allows a unique ID per connection
|
|
29
|
+
* @param opts.type - When using multiple connections in a script, allows specifying a script provided connection type
|
|
30
|
+
*/
|
|
31
|
+
constructor(url, auth, opts = {}) {
|
|
23
32
|
super();
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
if (!opts)
|
|
34
|
+
opts = {};
|
|
35
|
+
this.id = opts.id || crypto.randomUUID();
|
|
36
|
+
this.type = opts.type || 'unknown';
|
|
26
37
|
this.url = url;
|
|
27
38
|
this.auth = auth;
|
|
28
39
|
this.writing = false;
|
|
@@ -30,8 +41,8 @@ export default class TAK extends EventEmitter {
|
|
|
30
41
|
this.destroyed = false;
|
|
31
42
|
this.queue = [];
|
|
32
43
|
}
|
|
33
|
-
static async connect(
|
|
34
|
-
const tak = new TAK(
|
|
44
|
+
static async connect(url, auth, opts = {}) {
|
|
45
|
+
const tak = new TAK(url, auth, opts);
|
|
35
46
|
if (url.protocol === 'ssl:') {
|
|
36
47
|
if (!tak.auth.cert)
|
|
37
48
|
throw new Error('auth.cert required');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api/contacts.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import Commands from '../commands.js';
|
|
2
3
|
export const Contact = Type.Object({
|
|
3
4
|
filterGroups: Type.Any(), // I'm not familiar with this one
|
|
4
5
|
notes: Type.String(),
|
|
@@ -8,10 +9,29 @@ export const Contact = Type.Object({
|
|
|
8
9
|
takv: Type.String(),
|
|
9
10
|
uid: Type.String()
|
|
10
11
|
});
|
|
11
|
-
export default class {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export default class ContactCommands extends Commands {
|
|
13
|
+
schema = {
|
|
14
|
+
list: {
|
|
15
|
+
description: 'List Contacts',
|
|
16
|
+
params: Type.Object({}),
|
|
17
|
+
query: Type.Object({})
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
async cli(args) {
|
|
21
|
+
if (args._[3] === 'list') {
|
|
22
|
+
const list = await this.list();
|
|
23
|
+
if (args.format === 'json') {
|
|
24
|
+
return list;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return list.map((contact) => {
|
|
28
|
+
return `${contact.callsign || '<No Callsign Set>'} (${contact.notes.trim()})`;
|
|
29
|
+
}).join('\n');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error('Unsupported Subcommand');
|
|
34
|
+
}
|
|
15
35
|
}
|
|
16
36
|
async list() {
|
|
17
37
|
const url = new URL(`/Marti/api/contacts/all`, this.api.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../lib/api/contacts.ts"],"names":[],"mappings":"
|
|
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,MAAM,gBAAgB,CAAC;AAEtC,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;SACzB;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"}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import { APIAuthPassword } from '../auth.js';
|
|
2
2
|
import { Type } from '@sinclair/typebox';
|
|
3
|
+
import Commands from '../commands.js';
|
|
3
4
|
import pem from 'pem';
|
|
4
5
|
import xml2js from 'xml2js';
|
|
5
6
|
export const CertificateResponse = Type.Object({
|
|
6
7
|
cert: Type.String(),
|
|
7
8
|
key: Type.String()
|
|
8
9
|
});
|
|
9
|
-
export default class {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
export default class CredentialCommands extends Commands {
|
|
11
|
+
schema = {
|
|
12
|
+
config: {
|
|
13
|
+
description: 'Return TLS Config Info',
|
|
14
|
+
params: Type.Object({}),
|
|
15
|
+
query: Type.Object({})
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
async cli(args) {
|
|
19
|
+
if (args._[3] === 'config') {
|
|
20
|
+
return this.config();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new Error('Unsupported Subcommand');
|
|
24
|
+
}
|
|
13
25
|
}
|
|
14
26
|
async config() {
|
|
15
27
|
const url = new URL(`/Marti/api/tls/config`, this.api.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../lib/api/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../lib/api/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api/export.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import Commands from '../commands.js';
|
|
2
3
|
export const ExportInput = Type.Object({
|
|
3
4
|
startTime: Type.String(),
|
|
4
5
|
endTime: Type.String(),
|
|
@@ -12,10 +13,10 @@ export const ExportInput = Type.Object({
|
|
|
12
13
|
/**
|
|
13
14
|
* @class
|
|
14
15
|
*/
|
|
15
|
-
export default class {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
export default class ExportCommands extends Commands {
|
|
17
|
+
schema = {};
|
|
18
|
+
async cli() {
|
|
19
|
+
throw new Error('Unsupported Subcommand');
|
|
19
20
|
}
|
|
20
21
|
async export(query) {
|
|
21
22
|
const url = new URL(`/Marti/ExportMissionKML`, this.api.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../lib/api/export.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/lib/api/files.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import FormData from 'form-data';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
3
|
import mime from 'mime';
|
|
4
|
+
import Commands from '../commands.js';
|
|
5
|
+
import { TAKList } from './types.js';
|
|
4
6
|
import { Type } from '@sinclair/typebox';
|
|
5
7
|
export const Content = Type.Object({
|
|
6
8
|
UID: Type.String(),
|
|
@@ -13,18 +15,48 @@ export const Content = Type.Object({
|
|
|
13
15
|
CreatorUid: Type.String(),
|
|
14
16
|
Name: Type.String()
|
|
15
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
|
+
}));
|
|
16
28
|
export const Config = Type.Object({
|
|
17
29
|
uploadSizeLimit: Type.Integer()
|
|
18
30
|
});
|
|
19
|
-
export default class
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
export default class FileCommands extends Commands {
|
|
32
|
+
schema = {
|
|
33
|
+
list: {
|
|
34
|
+
description: 'List Files',
|
|
35
|
+
params: Type.Object({}),
|
|
36
|
+
query: Type.Object({})
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
async cli(args) {
|
|
40
|
+
if (args._[3] === 'list') {
|
|
41
|
+
const list = await this.list();
|
|
42
|
+
if (args.format === 'json') {
|
|
43
|
+
return list;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return list.data.map((data) => {
|
|
47
|
+
return data.filename;
|
|
48
|
+
}).join('\n');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error('Unsupported Subcommand');
|
|
53
|
+
}
|
|
23
54
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
55
|
+
async list() {
|
|
56
|
+
const url = new URL(`/Marti/api/sync/search`, this.api.url);
|
|
57
|
+
return await this.api.fetch(url, {
|
|
58
|
+
method: 'GET'
|
|
59
|
+
});
|
|
28
60
|
}
|
|
29
61
|
async meta(hash) {
|
|
30
62
|
const url = new URL(`/Marti/sync/${encodeURIComponent(hash)}/metadata`, this.api.url);
|