@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
@@ -25,5 +25,8 @@ jobs:
25
25
  - name: npm install
26
26
  run: npm install
27
27
 
28
+ - name: npm run build
29
+ run: npm run build
30
+
28
31
  - name: npm publish
29
32
  run: npm publish --provenance --access public
package/CHANGELOG.md CHANGED
@@ -10,6 +10,14 @@
10
10
 
11
11
  ## Version History
12
12
 
13
+ ### v11.19.0 - 2025-12-21
14
+
15
+ - :tada: Introduce first batch of Certificate APIs
16
+
17
+ ### v11.18.2 - 2025-12-16
18
+
19
+ - :rocket: Add Build Step
20
+
13
21
  ### v11.18.1 - 2025-12-15
14
22
 
15
23
  - :rocket: Update Release Process
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env tsx
2
+ import fs from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import minimist from 'minimist';
6
+ import { CoTParser } from '@tak-ps/node-cot';
7
+ import TAK from './index.js';
8
+ import { getPemFromP12 } from 'p12-pem';
9
+ import TAKAPI, { CommandList } from './lib/api.js';
10
+ import { APIAuthPassword, APIAuthCertificate } from './lib/auth.js';
11
+ import Commands from './lib/commands.js';
12
+ import { select, confirm, number, input, password, Separator } from '@inquirer/prompts';
13
+ const args = minimist(process.argv, {
14
+ string: ['profile', 'format', 'auth'],
15
+ });
16
+ const configPath = path.resolve(os.homedir(), './.tak.json');
17
+ let config;
18
+ try {
19
+ config = JSON.parse(String(await fs.readFile(configPath)));
20
+ }
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
+ if (!answer) {
27
+ throw new Error('No config file and not creating one');
28
+ }
29
+ config = {
30
+ version: 1,
31
+ profiles: {}
32
+ };
33
+ await fs.writeFile(configPath, JSON.stringify(config, null, 4));
34
+ }
35
+ else {
36
+ throw err;
37
+ }
38
+ }
39
+ if (!args.profile && config.profiles && Object.keys(config.profiles).length) {
40
+ args.profile = await select({
41
+ message: 'Choose a profile',
42
+ choices: [
43
+ { name: 'New Profile', value: '' },
44
+ new Separator(),
45
+ ].concat(Object.keys(config.profiles).map((profile) => {
46
+ return {
47
+ name: profile,
48
+ value: profile
49
+ };
50
+ }))
51
+ });
52
+ }
53
+ if (!args.profile) {
54
+ console.error('Create new TAK Server Profile:');
55
+ args.profile = await input({ message: 'Enter a name for this profile' });
56
+ const host = await input({ message: 'Server hostname', default: 'ops.example.com' });
57
+ let marti = 8443;
58
+ let webtak = 443;
59
+ let stream = 8089;
60
+ do {
61
+ marti = await number({ message: 'Marti API Port', default: marti });
62
+ } while (!marti || isNaN(marti));
63
+ do {
64
+ webtak = await number({ message: 'WebTAK API Port', default: webtak });
65
+ } while (!webtak || isNaN(webtak));
66
+ do {
67
+ stream = await number({ message: 'Streaming Port', default: stream });
68
+ } while (!stream || isNaN(stream));
69
+ if (!config.profiles)
70
+ config.profiles = {};
71
+ config.profiles[args.profile] = {
72
+ host,
73
+ ports: { webtak, marti, stream }
74
+ };
75
+ }
76
+ if (args.profile && !config.profiles[args.profile]) {
77
+ throw new Error(`Profile "${args.profile}" is not defined in config file`);
78
+ }
79
+ else if (!args.auth && !config.profiles[args.profile].auth) {
80
+ const user = await input({ message: 'TAK Username' });
81
+ const pass = await password({ message: 'TAK Password' });
82
+ const api = await TAKAPI.init(new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.webtak), new APIAuthPassword(user, pass));
83
+ const auth = await api.Credentials.generate();
84
+ config.profiles[args.profile].auth = {
85
+ cert: auth.cert,
86
+ key: auth.key,
87
+ ca: auth.ca[0]
88
+ };
89
+ }
90
+ let command = args._[2];
91
+ if (!command) {
92
+ command = await select({
93
+ message: 'Choose a Command Group',
94
+ choices: [{
95
+ name: 'stream',
96
+ value: 'stream'
97
+ }].concat(Object.keys(CommandList).map((profile) => {
98
+ return {
99
+ name: profile,
100
+ value: profile
101
+ };
102
+ }))
103
+ });
104
+ }
105
+ await fs.writeFile(configPath, JSON.stringify(config, null, 4));
106
+ let auth = config.profiles[args.profile].auth;
107
+ if (args.auth) {
108
+ const password = process.env.TAK_P12_PASSWORD || await input({ message: 'P12 Container Password' });
109
+ const certs = getPemFromP12(args.auth, password);
110
+ const cert = certs.pemCertificate
111
+ .split('-----BEGIN CERTIFICATE-----')
112
+ .join('-----BEGIN CERTIFICATE-----\n')
113
+ .split('-----END CERTIFICATE-----')
114
+ .join('\n-----END CERTIFICATE-----');
115
+ const key = certs.pemKey
116
+ .split('-----BEGIN RSA PRIVATE KEY-----')
117
+ .join('-----BEGIN RSA PRIVATE KEY-----\n')
118
+ .split('-----END RSA PRIVATE KEY-----')
119
+ .join('\n-----END RSA PRIVATE KEY-----');
120
+ auth = { cert, key };
121
+ }
122
+ if (!auth)
123
+ throw new Error(`No Auth in ${args.profile} profile`);
124
+ if (command === 'stream') {
125
+ const tak = await TAK.connect(new URL('ssl://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.stream), auth);
126
+ tak.on('cot', (cot) => {
127
+ console.log(JSON.stringify(CoTParser.to_geojson(cot)));
128
+ });
129
+ }
130
+ else {
131
+ if (!config.profiles[args.profile].auth) {
132
+ throw new Error(`No Auth in ${args.profile} profile`);
133
+ }
134
+ const tak = new TAKAPI(new URL('https://' + config.profiles[args.profile].host + ':' + config.profiles[args.profile].ports.marti), new APIAuthCertificate(auth.cert, auth.key));
135
+ const invokeTest = tak[CommandList[command]];
136
+ if (!invokeTest || !(invokeTest instanceof Commands)) {
137
+ throw new Error(`${command} not found`);
138
+ }
139
+ const invoke = invokeTest;
140
+ let subcommand = args._[3];
141
+ const subcommands = (obj) => Object.keys(obj);
142
+ if (subcommand === 'help') {
143
+ console.log(([
144
+ 'Command:',
145
+ ` tak ${command} <subcommand>`,
146
+ 'SubCommands:',
147
+ ].concat(subcommands(invoke.schema).map((subcommand) => {
148
+ return ` ${String(subcommand)} - ${invoke.schema[subcommand].description}`;
149
+ }))).join('\n'));
150
+ process.exit(0);
151
+ }
152
+ else if (!subcommand) {
153
+ subcommand = await select({
154
+ message: 'Choose an action',
155
+ choices: subcommands(invoke.schema).map((subcommand) => {
156
+ return {
157
+ name: subcommand,
158
+ value: subcommand
159
+ };
160
+ })
161
+ });
162
+ }
163
+ if (!invoke.schema[subcommand]) {
164
+ throw new Error(`Unsupported Subcommand: ${subcommand}`);
165
+ }
166
+ else if (args.format && !invoke.schema[subcommand].formats.includes(args.format)) {
167
+ throw new Error(`tak ${command} ${subcommand} does not support --format ${args.format}. Supported formats are: ${invoke.schema[subcommand].formats.join(",")}`);
168
+ }
169
+ try {
170
+ args._[3] = subcommand;
171
+ const res = await invoke.cli(args);
172
+ if (typeof res === 'string') {
173
+ console.log(res);
174
+ }
175
+ else {
176
+ console.log(JSON.stringify(res, null, 4));
177
+ }
178
+ }
179
+ catch (err) {
180
+ console.error(err);
181
+ }
182
+ }
183
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import EventEmitter from 'node:events';
2
+ import type { Static } from '@sinclair/typebox';
3
+ import CoT from '@tak-ps/node-cot';
4
+ import type { CoTOptions } from '@tak-ps/node-cot';
5
+ import type { TLSSocket } from 'node:tls';
6
+ import TAKAPI from './lib/api.js';
7
+ import { TAKAuth } from './lib/auth.js';
8
+ export * from './lib/auth.js';
9
+ export declare const REGEX_CONTROL: RegExp;
10
+ export declare const REGEX_EVENT: RegExp;
11
+ export interface PartialCoT {
12
+ event: string;
13
+ remainder: string;
14
+ }
15
+ export type TAKOptions = {
16
+ id?: number | string;
17
+ type?: string;
18
+ cot?: CoTOptions;
19
+ };
20
+ export default class TAK extends EventEmitter {
21
+ id: number | string;
22
+ type: string;
23
+ url: URL;
24
+ auth: Static<typeof TAKAuth>;
25
+ open: boolean;
26
+ destroyed: boolean;
27
+ queue: string[];
28
+ writing: boolean;
29
+ cotOptions: CoTOptions;
30
+ pingInterval?: ReturnType<typeof setTimeout>;
31
+ client?: TLSSocket;
32
+ version?: string;
33
+ /**
34
+ * @constructor
35
+ *
36
+ * @param url - Full URL of Streaming COT Endpoint IE: "https://ops.cotak.gov:8089"
37
+ * @param auth - TAK Certificate Pair
38
+ * @param opts - Options Object
39
+ * @param opts.id - When using multiple connections in a script, allows a unique ID per connection
40
+ * @param opts.type - When using multiple connections in a script, allows specifying a script provided connection type
41
+ */
42
+ constructor(url: URL, auth: Static<typeof TAKAuth>, opts?: TAKOptions);
43
+ static connect(url: URL, auth: Static<typeof TAKAuth>, opts?: TAKOptions): Promise<TAK>;
44
+ connect_ssl(): Promise<TAK>;
45
+ reconnect(): Promise<void>;
46
+ destroy(): void;
47
+ ping(): Promise<void>;
48
+ writer(body: string): Promise<boolean>;
49
+ process(): Promise<void>;
50
+ /**
51
+ * Write a CoT to the TAK Connection
52
+ *
53
+ * @param {CoT} cot CoT Object
54
+ */
55
+ write(cots: CoT[]): Promise<void>;
56
+ write_xml(body: string): void;
57
+ static findCoT(str: string): null | PartialCoT;
58
+ }
59
+ export { TAKAPI, CoT, };
package/dist/index.js ADDED
@@ -0,0 +1,204 @@
1
+ import EventEmitter from 'node:events';
2
+ import tls from 'node:tls';
3
+ import CoT, { CoTParser } from '@tak-ps/node-cot';
4
+ import TAKAPI from './lib/api.js';
5
+ export * from './lib/auth.js';
6
+ /* eslint-disable no-control-regex */
7
+ export const REGEX_CONTROL = /[\u000B-\u001F\u007F-\u009F]/g;
8
+ // Match <event .../> or <event> but not <events>
9
+ export const REGEX_EVENT = /(<event[ >][\s\S]*?<\/event>)([\s\S]*)/;
10
+ export default class TAK extends EventEmitter {
11
+ id;
12
+ type;
13
+ url;
14
+ auth;
15
+ open;
16
+ destroyed;
17
+ queue;
18
+ writing;
19
+ cotOptions;
20
+ pingInterval;
21
+ client;
22
+ version;
23
+ /**
24
+ * @constructor
25
+ *
26
+ * @param url - Full URL of Streaming COT Endpoint IE: "https://ops.cotak.gov:8089"
27
+ * @param auth - TAK Certificate Pair
28
+ * @param opts - Options Object
29
+ * @param opts.id - When using multiple connections in a script, allows a unique ID per connection
30
+ * @param opts.type - When using multiple connections in a script, allows specifying a script provided connection type
31
+ */
32
+ constructor(url, auth, opts = {}) {
33
+ super();
34
+ if (!opts)
35
+ opts = {};
36
+ this.id = opts.id || crypto.randomUUID();
37
+ this.type = opts.type || 'unknown';
38
+ this.url = url;
39
+ this.auth = auth;
40
+ this.writing = false;
41
+ this.cotOptions = opts.cot || {};
42
+ this.open = false;
43
+ this.destroyed = false;
44
+ this.queue = [];
45
+ }
46
+ static async connect(url, auth, opts = {}) {
47
+ const tak = new TAK(url, auth, opts);
48
+ if (url.protocol === 'ssl:') {
49
+ if (!tak.auth.cert)
50
+ throw new Error('auth.cert required');
51
+ if (!tak.auth.key)
52
+ throw new Error('auth.key required');
53
+ return await tak.connect_ssl();
54
+ }
55
+ else {
56
+ throw new Error('Unknown TAK Server Protocol');
57
+ }
58
+ }
59
+ connect_ssl() {
60
+ return new Promise((resolve) => {
61
+ this.destroyed = false;
62
+ this.client = tls.connect({
63
+ host: this.url.hostname,
64
+ port: parseInt(this.url.port),
65
+ rejectUnauthorized: this.auth.rejectUnauthorized ?? false,
66
+ cert: this.auth.cert,
67
+ key: this.auth.key,
68
+ passphrase: this.auth.passphrase,
69
+ ca: this.auth.ca,
70
+ });
71
+ this.client.setNoDelay();
72
+ this.client.on('connect', () => {
73
+ console.error(`ok - ${this.id} @ connect:${this.client ? this.client.authorized : 'NO CLIENT'} - ${this.client ? this.client.authorizationError : 'NO CLIENT'}`);
74
+ });
75
+ this.client.on('secureConnect', () => {
76
+ console.error(`ok - ${this.id} @ secure:${this.client ? this.client.authorized : 'NO CLIENT'} - ${this.client ? this.client.authorizationError : 'NO CLIENT'}`);
77
+ this.emit('secureConnect');
78
+ this.ping();
79
+ });
80
+ let buff = '';
81
+ this.client.on('data', async (data) => {
82
+ // Eventually Parse ProtoBuf
83
+ buff = buff + data.toString();
84
+ let result = TAK.findCoT(buff);
85
+ while (result && result.event) {
86
+ try {
87
+ const cot = await CoTParser.from_xml(result.event, this.cotOptions);
88
+ if (cot.raw.event._attributes.type === 't-x-c-t-r') {
89
+ this.open = true;
90
+ this.emit('ping');
91
+ }
92
+ else if (cot.raw.event._attributes.type === 't-x-takp-v'
93
+ && cot.raw.event.detail
94
+ && cot.raw.event.detail.TakControl
95
+ && cot.raw.event.detail.TakControl.TakServerVersionInfo
96
+ && cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes) {
97
+ this.version = cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes.serverVersion;
98
+ }
99
+ else {
100
+ this.emit('cot', cot);
101
+ }
102
+ }
103
+ catch (e) {
104
+ console.error('Error parsing', e, data.toString());
105
+ }
106
+ buff = result.remainder;
107
+ result = TAK.findCoT(buff);
108
+ }
109
+ }).on('timeout', () => {
110
+ this.emit('timeout');
111
+ }).on('error', (err) => {
112
+ this.emit('error', err);
113
+ }).on('end', () => {
114
+ this.open = false;
115
+ this.emit('end');
116
+ });
117
+ this.pingInterval = setInterval(() => {
118
+ this.ping();
119
+ }, 5000);
120
+ return resolve(this);
121
+ });
122
+ }
123
+ async reconnect() {
124
+ if (this.destroyed) {
125
+ await this.connect_ssl();
126
+ }
127
+ else {
128
+ this.destroy();
129
+ await this.connect_ssl();
130
+ }
131
+ }
132
+ destroy() {
133
+ this.destroyed = true;
134
+ if (this.client) {
135
+ this.client.destroy();
136
+ }
137
+ if (this.pingInterval) {
138
+ clearInterval(this.pingInterval);
139
+ this.pingInterval = undefined;
140
+ }
141
+ }
142
+ async ping() {
143
+ this.write([CoT.ping()]);
144
+ }
145
+ writer(body) {
146
+ return new Promise((resolve, reject) => {
147
+ if (!this.client)
148
+ return reject(new Error('A Connection Client must first be created before it can be written'));
149
+ const res = this.client.write(body + '\n', () => {
150
+ return resolve(res);
151
+ });
152
+ });
153
+ }
154
+ async process() {
155
+ this.writing = true;
156
+ while (this.queue.length) {
157
+ const body = this.queue.shift();
158
+ if (!body)
159
+ continue;
160
+ await this.writer(body);
161
+ }
162
+ await this.writer('');
163
+ if (this.queue.length) {
164
+ process.nextTick(() => {
165
+ this.process();
166
+ });
167
+ }
168
+ else {
169
+ this.writing = false;
170
+ }
171
+ }
172
+ /**
173
+ * Write a CoT to the TAK Connection
174
+ *
175
+ * @param {CoT} cot CoT Object
176
+ */
177
+ async write(cots) {
178
+ for (const cot of cots) {
179
+ this.queue.push(await CoTParser.to_xml(cot));
180
+ }
181
+ if (this.queue.length && !this.writing) {
182
+ this.process();
183
+ }
184
+ }
185
+ write_xml(body) {
186
+ this.queue.push(body);
187
+ if (this.queue.length && !this.writing) {
188
+ this.process();
189
+ }
190
+ }
191
+ // https://github.com/vidterra/multitak/blob/main/app/lib/helper.js#L4
192
+ static findCoT(str) {
193
+ str = str.replace(REGEX_CONTROL, "");
194
+ const match = str.match(REGEX_EVENT); // find first CoT
195
+ if (!match)
196
+ return null;
197
+ return {
198
+ event: match[1],
199
+ remainder: match[2],
200
+ };
201
+ }
202
+ }
203
+ export { TAKAPI, CoT, };
204
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import Commands from '../commands.js';
2
+ import type { Static } from '@sinclair/typebox';
3
+ export declare const Certificate: import("@sinclair/typebox").TObject<{
4
+ id: import("@sinclair/typebox").TInteger;
5
+ creatorDn: import("@sinclair/typebox").TString;
6
+ subjectDn: import("@sinclair/typebox").TString;
7
+ userDn: import("@sinclair/typebox").TString;
8
+ certificate: import("@sinclair/typebox").TString;
9
+ hash: import("@sinclair/typebox").TString;
10
+ clientUid: import("@sinclair/typebox").TString;
11
+ issuanceDate: import("@sinclair/typebox").TString;
12
+ expirationDate: import("@sinclair/typebox").TString;
13
+ effectiveDate: import("@sinclair/typebox").TString;
14
+ revocationDate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
15
+ token: import("@sinclair/typebox").TString;
16
+ serialNumber: import("@sinclair/typebox").TString;
17
+ }>;
18
+ export declare const TAKList_Certificate: import("@sinclair/typebox").TObject<{
19
+ version: import("@sinclair/typebox").TString;
20
+ type: import("@sinclair/typebox").TString;
21
+ data: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
22
+ id: import("@sinclair/typebox").TInteger;
23
+ creatorDn: import("@sinclair/typebox").TString;
24
+ subjectDn: import("@sinclair/typebox").TString;
25
+ userDn: import("@sinclair/typebox").TString;
26
+ certificate: import("@sinclair/typebox").TString;
27
+ hash: import("@sinclair/typebox").TString;
28
+ clientUid: import("@sinclair/typebox").TString;
29
+ issuanceDate: import("@sinclair/typebox").TString;
30
+ expirationDate: import("@sinclair/typebox").TString;
31
+ effectiveDate: import("@sinclair/typebox").TString;
32
+ revocationDate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
33
+ token: import("@sinclair/typebox").TString;
34
+ serialNumber: import("@sinclair/typebox").TString;
35
+ }>>;
36
+ messages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
37
+ nodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
38
+ }>;
39
+ export declare const TAKItem_Certificate: import("@sinclair/typebox").TObject<{
40
+ version: import("@sinclair/typebox").TString;
41
+ type: import("@sinclair/typebox").TString;
42
+ data: import("@sinclair/typebox").TObject<{
43
+ id: import("@sinclair/typebox").TInteger;
44
+ creatorDn: import("@sinclair/typebox").TString;
45
+ subjectDn: import("@sinclair/typebox").TString;
46
+ userDn: import("@sinclair/typebox").TString;
47
+ certificate: import("@sinclair/typebox").TString;
48
+ hash: import("@sinclair/typebox").TString;
49
+ clientUid: import("@sinclair/typebox").TString;
50
+ issuanceDate: import("@sinclair/typebox").TString;
51
+ expirationDate: import("@sinclair/typebox").TString;
52
+ effectiveDate: import("@sinclair/typebox").TString;
53
+ revocationDate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
54
+ token: import("@sinclair/typebox").TString;
55
+ serialNumber: import("@sinclair/typebox").TString;
56
+ }>;
57
+ messages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
58
+ nodeId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
59
+ }>;
60
+ export default class CertificateCommands extends Commands {
61
+ schema: {};
62
+ cli(): Promise<object | string>;
63
+ list(username?: string): Promise<Static<typeof TAKList_Certificate>>;
64
+ listRevoked(): Promise<Static<typeof TAKList_Certificate>>;
65
+ listReplaced(): Promise<Static<typeof TAKList_Certificate>>;
66
+ listExpired(): Promise<Static<typeof TAKList_Certificate>>;
67
+ get(hash: string): Promise<Static<typeof TAKItem_Certificate>>;
68
+ download(hash: string): Promise<string>;
69
+ revoke(hash: string): Promise<Static<typeof TAKItem_Certificate>>;
70
+ }
@@ -0,0 +1,62 @@
1
+ import Commands from '../commands.js';
2
+ import { Type } from '@sinclair/typebox';
3
+ import { TAKItem, TAKList } from './types.js';
4
+ export const Certificate = Type.Object({
5
+ id: Type.Integer(),
6
+ creatorDn: Type.String(),
7
+ subjectDn: Type.String(),
8
+ userDn: Type.String(),
9
+ certificate: Type.String(),
10
+ hash: Type.String(),
11
+ clientUid: Type.String(),
12
+ issuanceDate: Type.String({ format: 'date-time' }),
13
+ expirationDate: Type.String({ format: 'date-time' }),
14
+ effectiveDate: Type.String({ format: 'date-time' }),
15
+ revocationDate: Type.Optional(Type.String({ format: 'date-time' })),
16
+ token: Type.String(),
17
+ serialNumber: Type.String()
18
+ });
19
+ export const TAKList_Certificate = TAKList(Certificate);
20
+ export const TAKItem_Certificate = TAKItem(Certificate);
21
+ export default class CertificateCommands extends Commands {
22
+ schema = {};
23
+ async cli() {
24
+ throw new Error('Unsupported Subcommand');
25
+ }
26
+ async list(username) {
27
+ const url = new URL('/Marti/api/certadmin/cert', this.api.url);
28
+ if (username) {
29
+ url.searchParams.append('username', username);
30
+ }
31
+ return await this.api.fetch(url);
32
+ }
33
+ async listRevoked() {
34
+ const url = new URL('/Marti/api/certadmin/cert/revoked', this.api.url);
35
+ return await this.api.fetch(url);
36
+ }
37
+ async listReplaced() {
38
+ const url = new URL('/Marti/api/certadmin/cert/replaced', this.api.url);
39
+ return await this.api.fetch(url);
40
+ }
41
+ async listExpired() {
42
+ const url = new URL('/Marti/api/certadmin/cert/expired', this.api.url);
43
+ return await this.api.fetch(url);
44
+ }
45
+ async get(hash) {
46
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}`, this.api.url);
47
+ return await this.api.fetch(url);
48
+ }
49
+ async download(hash) {
50
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}/download`, this.api.url);
51
+ return await this.api.fetch(url, {
52
+ method: 'GET',
53
+ });
54
+ }
55
+ async revoke(hash) {
56
+ const url = new URL(`/Marti/api/certadmin/cert/${hash}`, this.api.url);
57
+ return await this.api.fetch(url, {
58
+ method: 'DELETE'
59
+ });
60
+ }
61
+ }
62
+ //# sourceMappingURL=certificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate.js","sourceRoot":"","sources":["../../../lib/api/certificate.ts"],"names":[],"mappings":"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"}