@tak-ps/node-tak 8.3.0 → 8.4.1

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 (63) hide show
  1. package/.github/workflows/doc.yml +6 -6
  2. package/.github/workflows/release.yml +3 -3
  3. package/.github/workflows/test.yml +14 -9
  4. package/CHANGELOG.md +8 -0
  5. package/dist/index.js +3 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/api/contacts.js +23 -0
  8. package/dist/lib/api/contacts.js.map +1 -0
  9. package/dist/lib/api/credentials.js +62 -0
  10. package/dist/lib/api/credentials.js.map +1 -0
  11. package/dist/lib/api/export.js +36 -0
  12. package/dist/lib/api/export.js.map +1 -0
  13. package/dist/lib/api/files.js +112 -0
  14. package/dist/lib/api/files.js.map +1 -0
  15. package/dist/lib/api/groups.js +47 -0
  16. package/dist/lib/api/groups.js.map +1 -0
  17. package/dist/lib/api/mission-layer.js +245 -0
  18. package/dist/lib/api/mission-layer.js.map +1 -0
  19. package/dist/lib/api/mission-log.js +108 -0
  20. package/dist/lib/api/mission-log.js.map +1 -0
  21. package/dist/lib/api/mission.js +583 -0
  22. package/dist/lib/api/mission.js.map +1 -0
  23. package/dist/lib/api/oauth.js +54 -0
  24. package/dist/lib/api/oauth.js.map +1 -0
  25. package/dist/lib/api/package.js +42 -0
  26. package/dist/lib/api/package.js.map +1 -0
  27. package/dist/lib/api/query.js +60 -0
  28. package/dist/lib/api/query.js.map +1 -0
  29. package/dist/lib/api/subscriptions.js +73 -0
  30. package/dist/lib/api/subscriptions.js.map +1 -0
  31. package/dist/lib/api/types.js +42 -0
  32. package/dist/lib/api/types.js.map +1 -0
  33. package/dist/lib/api/video.js +123 -0
  34. package/dist/lib/api/video.js.map +1 -0
  35. package/dist/lib/api.js +123 -0
  36. package/dist/lib/api.js.map +1 -0
  37. package/dist/lib/auth.js +92 -0
  38. package/dist/lib/auth.js.map +1 -0
  39. package/dist/lib/fetch.js +26 -0
  40. package/dist/lib/fetch.js.map +1 -0
  41. package/dist/lib/stream.js +9 -0
  42. package/dist/lib/stream.js.map +1 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/index.ts +7 -1
  45. package/lib/api/contacts.ts +27 -0
  46. package/lib/api/credentials.ts +74 -0
  47. package/lib/api/export.ts +44 -0
  48. package/lib/api/files.ts +151 -0
  49. package/lib/api/groups.ts +63 -0
  50. package/lib/api/mission-layer.ts +312 -0
  51. package/lib/api/mission-log.ts +140 -0
  52. package/lib/api/mission.ts +741 -0
  53. package/lib/api/oauth.ts +68 -0
  54. package/lib/api/package.ts +56 -0
  55. package/lib/api/query.ts +79 -0
  56. package/lib/api/subscriptions.ts +84 -0
  57. package/lib/api/types.ts +43 -0
  58. package/lib/api/video.ts +155 -0
  59. package/lib/api.ts +136 -0
  60. package/lib/auth.ts +117 -0
  61. package/lib/fetch.ts +38 -0
  62. package/lib/stream.ts +10 -0
  63. package/package.json +17 -4
@@ -0,0 +1,583 @@
1
+ import xmljs from 'xml-js';
2
+ import CoT from '@tak-ps/node-cot';
3
+ import { Type } from '@sinclair/typebox';
4
+ import Err from '@openaddresses/batch-error';
5
+ import { TAKItem, TAKList } from './types.js';
6
+ import { MissionLog } from './mission-log.js';
7
+ export var MissionSubscriberRole;
8
+ (function (MissionSubscriberRole) {
9
+ MissionSubscriberRole["MISSION_OWNER"] = "MISSION_OWNER";
10
+ MissionSubscriberRole["MISSION_SUBSCRIBER"] = "MISSION_SUBSCRIBER";
11
+ MissionSubscriberRole["MISSION_READONLY_SUBSCRIBER"] = "MISSION_READONLY_SUBSCRIBER";
12
+ })(MissionSubscriberRole || (MissionSubscriberRole = {}));
13
+ export const MissionContent = Type.Object({
14
+ keywords: Type.Array(Type.String()),
15
+ mimeType: Type.String(),
16
+ name: Type.String(),
17
+ hash: Type.String(),
18
+ submissionTime: Type.String(),
19
+ submitter: Type.String(),
20
+ uid: Type.String(),
21
+ creatorUid: Type.String(),
22
+ size: Type.Integer(),
23
+ expiration: Type.Integer()
24
+ });
25
+ export const Mission = Type.Object({
26
+ name: Type.String(),
27
+ description: Type.String(),
28
+ chatRoom: Type.String(),
29
+ baseLayer: Type.Optional(Type.String()),
30
+ bbox: Type.Optional(Type.String()),
31
+ path: Type.Optional(Type.String()),
32
+ classification: Type.Optional(Type.String()),
33
+ tool: Type.String(),
34
+ keywords: Type.Array(Type.Unknown()),
35
+ creatorUid: Type.String(),
36
+ createTime: Type.String(),
37
+ externalData: Type.Array(Type.Unknown()),
38
+ feeds: Type.Array(Type.Unknown()),
39
+ mapLayers: Type.Array(Type.Unknown()),
40
+ ownerRole: Type.Optional(Type.Object({
41
+ permissions: Type.Array(Type.String()),
42
+ type: Type.Enum(MissionSubscriberRole)
43
+ })),
44
+ inviteOnly: Type.Boolean(),
45
+ expiration: Type.Number(),
46
+ guid: Type.String(),
47
+ uids: Type.Array(Type.Unknown()),
48
+ logs: Type.Optional(Type.Array(MissionLog)), // Only present if ?logs=true
49
+ contents: Type.Array(Type.Object({
50
+ timestamp: Type.String(),
51
+ creatorUid: Type.String(),
52
+ data: MissionContent
53
+ })),
54
+ passwordProtected: Type.Boolean(),
55
+ token: Type.Optional(Type.String()), // Only present when mission created
56
+ groups: Type.Optional(Type.Union([Type.String(), Type.Array(Type.String())])), // Only present on Mission.get()
57
+ missionChanges: Type.Optional(Type.Array(Type.Unknown())) // Only present on Mission.get()
58
+ });
59
+ export const MissionChange = Type.Object({
60
+ isFederatedChange: Type.Boolean(),
61
+ type: Type.String(),
62
+ missionName: Type.String(),
63
+ timestamp: Type.String(),
64
+ serverTime: Type.String(),
65
+ creatorUid: Type.String(),
66
+ contentUid: Type.Optional(Type.String()),
67
+ details: Type.Optional(Type.Object({
68
+ type: Type.String(),
69
+ callsign: Type.String(),
70
+ color: Type.Optional(Type.String()),
71
+ location: Type.Object({
72
+ lat: Type.Number(),
73
+ lon: Type.Number()
74
+ })
75
+ })),
76
+ contentResource: Type.Optional(MissionContent)
77
+ });
78
+ export const MissionRole = Type.Object({
79
+ permissions: Type.Array(Type.String()),
80
+ hibernateLazyInitializer: Type.Optional(Type.Any()),
81
+ type: Type.Enum(MissionSubscriberRole)
82
+ });
83
+ export const MissionSubscriber = Type.Object({
84
+ token: Type.Optional(Type.String()),
85
+ clientUid: Type.String(),
86
+ username: Type.String(),
87
+ createTime: Type.String(),
88
+ role: MissionRole
89
+ });
90
+ export const MissionOptions = Type.Object({
91
+ token: Type.Optional(Type.String())
92
+ });
93
+ export const AttachContentsInput = Type.Object({
94
+ hashes: Type.Optional(Type.Array(Type.String())),
95
+ uids: Type.Optional(Type.Array(Type.String())),
96
+ });
97
+ export const DetachContentsInput = Type.Object({
98
+ hash: Type.Optional(Type.String()),
99
+ uid: Type.Optional(Type.String())
100
+ });
101
+ export const MissionChangesInput = Type.Object({
102
+ secago: Type.Optional(Type.Integer()),
103
+ start: Type.Optional(Type.String()),
104
+ end: Type.Optional(Type.String()),
105
+ squashed: Type.Optional(Type.Boolean())
106
+ });
107
+ export const SubscribedInput = Type.Object({
108
+ uid: Type.String(),
109
+ });
110
+ export const UnsubscribeInput = Type.Object({
111
+ uid: Type.String(),
112
+ disconnectOnly: Type.Optional(Type.Boolean())
113
+ });
114
+ export const SubscriptionInput = Type.Object({
115
+ uid: Type.String(),
116
+ });
117
+ export const SubscribeInput = Type.Object({
118
+ uid: Type.String(),
119
+ password: Type.Optional(Type.String()),
120
+ secago: Type.Optional(Type.Integer()),
121
+ start: Type.Optional(Type.String()),
122
+ end: Type.Optional(Type.String())
123
+ });
124
+ export const MissionDeleteInput = Type.Object({
125
+ creatorUid: Type.Optional(Type.String()),
126
+ deepDelete: Type.Optional(Type.Boolean())
127
+ });
128
+ export const GetInput = Type.Object({
129
+ password: Type.Optional(Type.String()),
130
+ changes: Type.Optional(Type.Boolean()),
131
+ logs: Type.Optional(Type.Boolean()),
132
+ secago: Type.Optional(Type.Integer()),
133
+ start: Type.Optional(Type.String()),
134
+ end: Type.Optional(Type.String())
135
+ });
136
+ export const SetRoleInput = Type.Object({
137
+ clientUid: Type.String(),
138
+ username: Type.String(),
139
+ role: MissionRole
140
+ });
141
+ export const MissionListInput = Type.Object({
142
+ passwordProtected: Type.Optional(Type.Boolean()),
143
+ defaultRole: Type.Optional(Type.Boolean()),
144
+ tool: Type.Optional(Type.String())
145
+ });
146
+ export const MissionCreateInput = Type.Object({
147
+ group: Type.Optional(Type.Union([Type.Array(Type.String()), Type.String()])),
148
+ creatorUid: Type.String(),
149
+ description: Type.Optional(Type.String({ default: '' })),
150
+ chatRoom: Type.Optional(Type.String()),
151
+ baseLayer: Type.Optional(Type.String()),
152
+ bbox: Type.Optional(Type.String()),
153
+ boundingPolygon: Type.Optional(Type.Array(Type.String())),
154
+ path: Type.Optional(Type.String()),
155
+ classification: Type.Optional(Type.String()),
156
+ tool: Type.Optional(Type.String({ default: 'public' })),
157
+ password: Type.Optional(Type.String()),
158
+ defaultRole: Type.Optional(Type.String()),
159
+ expiration: Type.Optional(Type.Integer()),
160
+ inviteOnly: Type.Optional(Type.Boolean({ default: false })),
161
+ allowDupe: Type.Optional(Type.Boolean({ default: false })),
162
+ });
163
+ export const GUIDMatch = new RegExp(/^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$/);
164
+ export const TAKList_Mission = TAKList(Mission);
165
+ export const TAKList_MissionChange = TAKList(MissionChange);
166
+ export const TAKList_MissionSubscriber = TAKList(MissionSubscriber);
167
+ export const TAKItem_MissionSubscriber = TAKItem(MissionSubscriber);
168
+ /**
169
+ * @class
170
+ */
171
+ export default class {
172
+ api;
173
+ constructor(api) {
174
+ this.api = api;
175
+ }
176
+ #isGUID(id) {
177
+ return GUIDMatch.test(id);
178
+ }
179
+ #encodeName(name) {
180
+ return encodeURIComponent(name.trim());
181
+ }
182
+ #headers(opts) {
183
+ if (opts && opts.token) {
184
+ return {
185
+ MissionAuthorization: `Bearer ${opts.token}`
186
+ };
187
+ }
188
+ else {
189
+ return {};
190
+ }
191
+ }
192
+ /**
193
+ * Return Zip archive of Mission Sync
194
+ *
195
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionArchive_1 TAK Server Docs}.
196
+ */
197
+ async getArchive(name, opts) {
198
+ const url = new URL(`/Marti/api/missions/${this.#encodeName(name)}/archive`, this.api.url);
199
+ const res = await this.api.fetch(url, {
200
+ method: 'GET',
201
+ headers: this.#headers(opts),
202
+ }, true);
203
+ return res.body;
204
+ }
205
+ /**
206
+ * Return Mission Sync changes in a given time range
207
+ *
208
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionChanges TAK Server Docs}.
209
+ */
210
+ async changes(name, query, opts) {
211
+ if (this.#isGUID(name))
212
+ name = (await this.getGuid(name, {})).name;
213
+ const url = new URL(`/Marti/api/missions/${this.#encodeName(name)}/changes`, this.api.url);
214
+ let q;
215
+ for (q in query) {
216
+ if (query[q] !== undefined) {
217
+ url.searchParams.append(q, String(query[q]));
218
+ }
219
+ }
220
+ const changes = await this.api.fetch(url, {
221
+ method: 'GET',
222
+ headers: this.#headers(opts),
223
+ });
224
+ return changes;
225
+ }
226
+ /**
227
+ * Return all current features in the Data Sync as CoT GeoJSON Features
228
+ */
229
+ async latestFeats(name, opts) {
230
+ const feats = [];
231
+ const res = xmljs.xml2js(await this.latestCots(name, opts), { compact: true });
232
+ if (!Object.keys(res.events).length)
233
+ return feats;
234
+ if (!res.events.event || (Array.isArray(res.events.event) && !res.events.event.length))
235
+ return feats;
236
+ for (const event of Array.isArray(res.events.event) ? res.events.event : [res.events.event]) {
237
+ feats.push((new CoT({ event })).to_geojson());
238
+ }
239
+ return feats;
240
+ }
241
+ /**
242
+ * Return all current features in the Data Sync as CoT GeoJSON Features
243
+ *
244
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getLatestMissionCotEvents TAK Server Docs}.
245
+ */
246
+ async latestCots(name, opts) {
247
+ const url = this.#isGUID(name)
248
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/cot`, this.api.url)
249
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/cot`, this.api.url);
250
+ return await this.api.fetch(url, {
251
+ method: 'GET',
252
+ headers: this.#headers(opts)
253
+ });
254
+ }
255
+ /**
256
+ * Return users associated with this mission
257
+ *
258
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionContacts TAK Server Docs}.
259
+ */
260
+ async contacts(name, opts) {
261
+ const url = this.#isGUID(name)
262
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/contacts`, this.api.url)
263
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/contacts`, this.api.url);
264
+ return await this.api.fetch(url, {
265
+ method: 'GET',
266
+ headers: this.#headers(opts)
267
+ });
268
+ }
269
+ /**
270
+ * Remove a file from the mission
271
+ *
272
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/removeMissionContent TAK Server Docs}.
273
+ */
274
+ async detachContents(name, body, opts) {
275
+ const url = this.#isGUID(name)
276
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/contents`, this.api.url)
277
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/contents`, this.api.url);
278
+ if (body.hash)
279
+ url.searchParams.append('hash', body.hash);
280
+ if (body.uid)
281
+ url.searchParams.append('uid', body.uid);
282
+ return await this.api.fetch(url, {
283
+ method: 'DELETE',
284
+ headers: this.#headers(opts),
285
+ });
286
+ }
287
+ /**
288
+ * Attach a file resource by hash from the TAK Server file manager
289
+ *
290
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/addMissionContent TAK Server Docs}.
291
+ */
292
+ async attachContents(name, body, opts) {
293
+ const url = this.#isGUID(name)
294
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/contents`, this.api.url)
295
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/contents`, this.api.url);
296
+ return await this.api.fetch(url, {
297
+ method: 'PUT',
298
+ headers: this.#headers(opts),
299
+ body
300
+ });
301
+ }
302
+ /**
303
+ * Upload a Mission Package
304
+ *
305
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/addMissionPackage TAK Server Docs}.
306
+ */
307
+ async upload(name, creatorUid, body, opts) {
308
+ if (this.#isGUID(name))
309
+ name = (await this.getGuid(name, {})).name;
310
+ const url = new URL(`/Marti/api/missions/${this.#encodeName(name)}/contents/missionpackage`, this.api.url);
311
+ url.searchParams.append('creatorUid', creatorUid);
312
+ return await this.api.fetch(url, {
313
+ method: 'PUT',
314
+ headers: this.#headers(opts),
315
+ body
316
+ });
317
+ }
318
+ /**
319
+ * Return UIDs associated with any subscribed users
320
+ *
321
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionSubscriptions TAK Server Docs}.
322
+ */
323
+ async subscriptions(name, opts) {
324
+ const url = this.#isGUID(name)
325
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/subscriptions`, this.api.url)
326
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/subscriptions`, this.api.url);
327
+ return await this.api.fetch(url, {
328
+ method: 'GET',
329
+ headers: this.#headers(opts),
330
+ });
331
+ }
332
+ /**
333
+ * Return permissions associated with any subscribed users
334
+ *
335
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionSubscriptionRoles TAK Server Docs}.
336
+ */
337
+ async subscriptionRoles(name, opts) {
338
+ const url = this.#isGUID(name)
339
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/subscriptions/roles`, this.api.url)
340
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/subscriptions/roles`, this.api.url);
341
+ return await this.api.fetch(url, {
342
+ method: 'GET',
343
+ headers: this.#headers(opts),
344
+ });
345
+ }
346
+ /**
347
+ * Return Role associated with a given mission if subscribed
348
+ *
349
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/setMissionRole TAK Server Docs}.
350
+ */
351
+ async setRole(name, query, opts) {
352
+ const url = this.#isGUID(name)
353
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/role`, this.api.url)
354
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/role`, this.api.url);
355
+ let q;
356
+ for (q in query) {
357
+ if (query[q] !== undefined) {
358
+ url.searchParams.append(q, String(query[q]));
359
+ }
360
+ }
361
+ const res = await this.api.fetch(url, {
362
+ method: 'PUT',
363
+ headers: this.#headers(opts),
364
+ });
365
+ return res.data;
366
+ }
367
+ /**
368
+ * Return Role associated with a given mission if subscribed
369
+ *
370
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionRoleFromToken TAK Server Docs}.
371
+ */
372
+ async role(name, opts) {
373
+ const url = this.#isGUID(name)
374
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/role`, this.api.url)
375
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/role`, this.api.url);
376
+ const res = await this.api.fetch(url, {
377
+ method: 'GET',
378
+ headers: this.#headers(opts),
379
+ });
380
+ return res.data;
381
+ }
382
+ /**
383
+ * Return subscription associated with a given mission if subscribed
384
+ *
385
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getSubscriptionForUser TAK Server Docs}.
386
+ */
387
+ async subscription(name, query, opts) {
388
+ const url = this.#isGUID(name)
389
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/subscription`, this.api.url)
390
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/subscription`, this.api.url);
391
+ let q;
392
+ for (q in query) {
393
+ if (query[q] !== undefined) {
394
+ url.searchParams.append(q, String(query[q]));
395
+ }
396
+ }
397
+ const res = await this.api.fetch(url, {
398
+ method: 'GET',
399
+ headers: this.#headers(opts),
400
+ });
401
+ return res.data;
402
+ }
403
+ /**
404
+ * Subscribe to a mission
405
+ *
406
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/createMissionSubscription TAK Server Docs}.
407
+ */
408
+ async subscribe(name, query, opts) {
409
+ const url = this.#isGUID(name)
410
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/subscription`, this.api.url)
411
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/subscription`, this.api.url);
412
+ let q;
413
+ for (q in query) {
414
+ if (query[q] !== undefined) {
415
+ url.searchParams.append(q, String(query[q]));
416
+ }
417
+ }
418
+ return await this.api.fetch(url, {
419
+ method: 'PUT',
420
+ headers: this.#headers(opts),
421
+ });
422
+ }
423
+ /**
424
+ * Unsubscribe from a mission
425
+ *
426
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/deleteMissionSubscription TAK Server Docs}.
427
+ */
428
+ async unsubscribe(name, query, opts) {
429
+ const url = this.#isGUID(name)
430
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}/subscription`, this.api.url)
431
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}/subscription`, this.api.url);
432
+ let q;
433
+ for (q in query) {
434
+ if (query[q] !== undefined) {
435
+ url.searchParams.append(q, String(query[q]));
436
+ }
437
+ }
438
+ return await this.api.fetch(url, {
439
+ method: 'DELETE',
440
+ headers: this.#headers(opts),
441
+ });
442
+ }
443
+ /**
444
+ * List missions in currently active channels
445
+ *
446
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getAllMissions_1 TAK Server Docs}.
447
+ */
448
+ async list(query) {
449
+ const url = new URL('/Marti/api/missions', this.api.url);
450
+ let q;
451
+ for (q in query) {
452
+ if (query[q] !== undefined) {
453
+ url.searchParams.append(q, String(query[q]));
454
+ }
455
+ }
456
+ return await this.api.fetch(url, {
457
+ method: 'GET'
458
+ });
459
+ }
460
+ /**
461
+ * Get mission by its GUID
462
+ *
463
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMissionByGuid TAK Server Docs}.
464
+ */
465
+ async getGuid(guid, query, opts) {
466
+ const url = new URL(`/Marti/api/missions/guid/${encodeURIComponent(guid)}`, this.api.url);
467
+ let q;
468
+ for (q in query) {
469
+ if (query[q] !== undefined) {
470
+ url.searchParams.append(q, String(query[q]));
471
+ }
472
+ }
473
+ const missions = await this.api.fetch(url, {
474
+ method: 'GET',
475
+ headers: this.#headers(opts),
476
+ });
477
+ if (!missions.data.length)
478
+ throw new Err(404, null, `No Mission for GUID: ${guid}`);
479
+ return missions.data[0];
480
+ }
481
+ /**
482
+ * Check if you have access to a given mission
483
+ */
484
+ async access(name, opts) {
485
+ try {
486
+ const url = this.#isGUID(name)
487
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}`, this.api.url)
488
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}`, this.api.url);
489
+ const missions = await this.api.fetch(url, {
490
+ method: 'GET',
491
+ headers: this.#headers(opts),
492
+ });
493
+ if (!missions.data.length)
494
+ return false;
495
+ return true;
496
+ }
497
+ catch (err) {
498
+ console.error(err);
499
+ return false;
500
+ }
501
+ }
502
+ /**
503
+ * Get mission by its Name
504
+ *
505
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/getMission TAK Server Docs}.
506
+ */
507
+ async get(name, query, opts) {
508
+ const url = this.#isGUID(name)
509
+ ? new URL(`/Marti/api/missions/guid/${encodeURIComponent(name)}`, this.api.url)
510
+ : new URL(`/Marti/api/missions/${this.#encodeName(name)}`, this.api.url);
511
+ let q;
512
+ for (q in query) {
513
+ if (query[q] !== undefined) {
514
+ url.searchParams.append(q, String(query[q]));
515
+ }
516
+ }
517
+ const missions = await this.api.fetch(url, {
518
+ method: 'GET',
519
+ headers: this.#headers(opts),
520
+ });
521
+ if (!missions.data.length)
522
+ throw new Err(404, null, `No Mission for Name: ${name}`);
523
+ return missions.data[0];
524
+ }
525
+ /**
526
+ * Create a new mission
527
+ *
528
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/createMission TAK Server Docs}.
529
+ */
530
+ async create(name, query) {
531
+ const url = new URL(`/Marti/api/missions/${this.#encodeName(name)}`, this.api.url);
532
+ if (query.group && Array.isArray(query.group))
533
+ query.group = query.group.join(',');
534
+ let q;
535
+ for (q in query) {
536
+ if (query[q] !== undefined) {
537
+ url.searchParams.append(q, String(query[q]));
538
+ }
539
+ }
540
+ const missions = await this.api.fetch(url, {
541
+ method: 'POST'
542
+ });
543
+ if (!missions.data.length)
544
+ throw new Error('Create Mission didn\'t return a mission or an error');
545
+ const mission = missions.data[0];
546
+ return mission;
547
+ }
548
+ /**
549
+ * Delete a mission
550
+ *
551
+ * {@link https://docs.tak.gov/api/takserver/redoc#tag/mission-api/operation/deleteMission TAK Server Docs}.
552
+ */
553
+ async delete(name, query, opts) {
554
+ if (this.#isGUID(name)) {
555
+ const url = new URL('/Marti/api/missions', this.api.url);
556
+ url.searchParams.append('guid', name);
557
+ let q;
558
+ for (q in query) {
559
+ if (query[q] !== undefined) {
560
+ url.searchParams.append(q, String(query[q]));
561
+ }
562
+ }
563
+ return await this.api.fetch(url, {
564
+ method: 'DELETE',
565
+ headers: this.#headers(opts),
566
+ });
567
+ }
568
+ else {
569
+ const url = new URL(`/Marti/api/missions/${this.#encodeName(name)}`, this.api.url);
570
+ let q;
571
+ for (q in query) {
572
+ if (query[q] !== undefined) {
573
+ url.searchParams.append(q, String(query[q]));
574
+ }
575
+ }
576
+ return await this.api.fetch(url, {
577
+ method: 'DELETE',
578
+ headers: this.#headers(opts),
579
+ });
580
+ }
581
+ }
582
+ }
583
+ //# sourceMappingURL=mission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission.js","sourceRoot":"","sources":["../../../lib/api/mission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import Err from '@openaddresses/batch-error';
2
+ import { Type } from '@sinclair/typebox';
3
+ export const LoginInput = Type.Object({
4
+ username: Type.String(),
5
+ password: Type.String()
6
+ });
7
+ export const TokenContents = Type.Object({
8
+ sub: Type.String(),
9
+ aud: Type.String(),
10
+ nbf: Type.Number(),
11
+ exp: Type.Number(),
12
+ iat: Type.Number()
13
+ });
14
+ export default class {
15
+ api;
16
+ constructor(api) {
17
+ this.api = api;
18
+ }
19
+ parse(jwt) {
20
+ const split = Buffer.from(jwt, 'base64').toString().split('}').map((ext) => { return ext + '}'; });
21
+ if (split.length < 2)
22
+ throw new Err(500, null, 'Unexpected TAK JWT Format');
23
+ const contents = JSON.parse(split[1]);
24
+ return contents;
25
+ }
26
+ async login(query) {
27
+ const url = new URL(`/oauth/token`, this.api.url);
28
+ url.searchParams.append('grant_type', 'password');
29
+ url.searchParams.append('username', query.username);
30
+ url.searchParams.append('password', query.password);
31
+ const authres = await this.api.fetch(url, {
32
+ method: 'POST'
33
+ }, true);
34
+ const text = await authres.text();
35
+ if (authres.status === 401) {
36
+ throw new Err(400, new Error(text), 'TAK Server reports incorrect Username or Password');
37
+ }
38
+ else if (!authres.ok) {
39
+ throw new Err(400, new Error(`Status: ${authres.status}: ${text}`), 'Non-200 Response from Auth Server - Token');
40
+ }
41
+ const body = JSON.parse(text);
42
+ if (body.error === 'invalid_grant' && body.error_description.startsWith('Bad credentials')) {
43
+ throw new Err(400, null, 'Invalid Username or Password');
44
+ }
45
+ else if (body.error || !body.access_token) {
46
+ throw new Err(500, new Error(body.error_description), 'Unknown Login Error');
47
+ }
48
+ return {
49
+ token: body.access_token,
50
+ contents: this.parse(body.access_token)
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=oauth.js.map