@tak-ps/node-tak
Version:
Lightweight JavaScript library for communicating with TAK Server
85 lines (75 loc) • 2.4 kB
text/typescript
import { Type, Static } from '@sinclair/typebox';
import { Group } from './groups.js';
import { TAKList } from './types.js';
import Commands from '../commands.js';
export const Subscription = Type.Object({
dn: Type.Union([Type.String(), Type.Null()]),
callsign: Type.String(),
clientUid: Type.String(),
lastReportMilliseconds: Type.Integer(),
takClient: Type.String(),
takVersion: Type.String(),
username: Type.String(),
groups: Type.Array(Group),
role: Type.String(),
team: Type.String(),
ipAddress: Type.String(),
port: Type.String(),
pendingWrites: Type.Integer(),
numProcessed: Type.Integer(),
protocol: Type.String(),
xpath: Type.Union([Type.String(), Type.Null()]),
subscriptionUid: Type.String(),
appFramerate: Type.String(),
battery: Type.String(),
batteryStatus: Type.String(),
batteryTemp: Type.String(),
deviceDataRx: Type.String(),
deviceDataTx: Type.String(),
heapCurrentSize: Type.String(),
heapFreeSize: Type.String(),
heapMaxSize: Type.String(),
deviceIPAddress: Type.String(),
storageAvailable: Type.String(),
storageTotal: Type.String(),
incognito: Type.Boolean(),
handlerType: Type.String(),
lastReportDiffMilliseconds: Type.Integer()
});
export const ListSubscriptionInput = Type.Object({
sortBy: Type.String({
default: 'CALLSIGN',
enum: ['CALLSIGN', 'UID']
}),
direction: Type.String({
default: 'ASCENDING',
enum: ['ASCENDING', 'DESCENDING']
}),
page: Type.Integer({
default: -1
}),
limit: Type.Integer({
default: -1
})
})
export const TAKList_Subscription = TAKList(Subscription);
export default class SubscriptionCommands extends Commands {
schema = {}
async cli(): Promise<object | string> {
throw new Error('Unsupported Subcommand');
}
async list(
query: Static<typeof ListSubscriptionInput>
): Promise<Static<typeof TAKList_Subscription>> {
const url = new URL(`/Marti/api/subscriptions/all`, this.api.url);
let q: keyof Static<typeof ListSubscriptionInput>;
for (q in query) {
if (query[q] !== undefined) {
url.searchParams.append(q, String(query[q]));
}
}
return await this.api.fetch(url, {
method: 'GET'
});
}
}