@tak-ps/node-tak 8.2.1 → 8.4.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 (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 +9 -0
  5. package/dist/index.js +5 -5
  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 +8 -3
  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 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../lib/api/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ export const Package = Type.Object({
3
+ EXPIRATION: Type.String(),
4
+ UID: Type.String(),
5
+ SubmissionDateTime: Type.String(),
6
+ Keywords: Type.Array(Type.String()),
7
+ MIMEType: Type.String(),
8
+ Size: Type.String(),
9
+ SubmissionUser: Type.String(),
10
+ PrimaryKey: Type.String(),
11
+ Hash: Type.String(),
12
+ CreatorUid: Type.Optional(Type.Union([Type.Null(), Type.String()])),
13
+ Name: Type.String(),
14
+ Tool: Type.String()
15
+ });
16
+ export const ListInput = Type.Object({
17
+ tool: Type.Optional(Type.String()),
18
+ uid: Type.Optional(Type.String())
19
+ });
20
+ /**
21
+ * @class
22
+ */
23
+ export default class {
24
+ api;
25
+ constructor(api) {
26
+ this.api = api;
27
+ }
28
+ async list(query) {
29
+ const url = new URL(`/Marti/sync/search`, this.api.url);
30
+ let q;
31
+ for (q in query) {
32
+ if (query[q] !== undefined) {
33
+ url.searchParams.append(q, String(query[q]));
34
+ }
35
+ }
36
+ const res = await this.api.fetch(url, {
37
+ method: 'GET'
38
+ });
39
+ return JSON.parse(res);
40
+ }
41
+ }
42
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../lib/api/package.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;IACzB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;IAClB,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE;IACjC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;IACvB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE;IAC7B,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;IACzB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACpC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,OAAO;IACV,GAAG,CAAS;IAEZ,YAAY,GAAW;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAA+B;QAItC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,CAAiC,CAAC;QACtC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAGpB,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,60 @@
1
+ import Err from '@openaddresses/batch-error';
2
+ import xmljs from 'xml-js';
3
+ import { Type } from '@sinclair/typebox';
4
+ import CoT from '@tak-ps/node-cot';
5
+ export const HistoryOptions = Type.Object({
6
+ start: Type.Optional(Type.String()),
7
+ end: Type.Optional(Type.String()),
8
+ secago: Type.Optional(Type.String()),
9
+ });
10
+ export default class COTQuery {
11
+ api;
12
+ constructor(api) {
13
+ this.api = api;
14
+ }
15
+ async singleFeat(uid) {
16
+ const cotstr = await this.single(uid);
17
+ return new CoT(cotstr).to_geojson();
18
+ }
19
+ async single(uid) {
20
+ const url = new URL(`/Marti/api/cot/xml/${encodeURIComponent(uid)}`, this.api.url);
21
+ const res = await this.api.fetch(url, {
22
+ method: 'GET'
23
+ }, true);
24
+ const body = await res.text();
25
+ if (body.trim().length === 0) {
26
+ throw new Err(404, null, 'CoT by that UID Not Found');
27
+ }
28
+ return body;
29
+ }
30
+ async historyFeats(uid, opts) {
31
+ const feats = [];
32
+ const res = xmljs.xml2js(await this.history(uid, opts), { compact: true });
33
+ if (!Object.keys(res).length || !Object.keys(res.events).length)
34
+ return feats;
35
+ if (!res.events.event || (Array.isArray(res.events.event) && !res.events.event.length))
36
+ return feats;
37
+ for (const event of Array.isArray(res.events.event) ? res.events.event : [res.events.event]) {
38
+ feats.push((new CoT({ event })).to_geojson());
39
+ }
40
+ return feats;
41
+ }
42
+ async history(uid, opts) {
43
+ const url = new URL(`/Marti/api/cot/xml/${encodeURIComponent(uid)}/all`, this.api.url);
44
+ if (opts) {
45
+ let q;
46
+ for (q in opts) {
47
+ if (opts[q] !== undefined) {
48
+ url.searchParams.append(q, String(opts[q]));
49
+ }
50
+ }
51
+ }
52
+ const res = await this.api.fetch(url, {
53
+ method: 'GET'
54
+ }, true);
55
+ const body = await res.text();
56
+ console.error(body);
57
+ return body;
58
+ }
59
+ }
60
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../lib/api/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import { Group } from './groups.js';
3
+ import { TAKList } from './types.js';
4
+ export const Subscription = Type.Object({
5
+ dn: Type.Union([Type.String(), Type.Null()]),
6
+ callsign: Type.String(),
7
+ clientUid: Type.String(),
8
+ lastReportMilliseconds: Type.Integer(),
9
+ takClient: Type.String(),
10
+ takVersion: Type.String(),
11
+ username: Type.String(),
12
+ groups: Type.Array(Group),
13
+ role: Type.String(),
14
+ team: Type.String(),
15
+ ipAddress: Type.String(),
16
+ port: Type.String(),
17
+ pendingWrites: Type.Integer(),
18
+ numProcessed: Type.Integer(),
19
+ protocol: Type.String(),
20
+ xpath: Type.Union([Type.String(), Type.Null()]),
21
+ subscriptionUid: Type.String(),
22
+ appFramerate: Type.String(),
23
+ battery: Type.String(),
24
+ batteryStatus: Type.String(),
25
+ batteryTemp: Type.String(),
26
+ deviceDataRx: Type.String(),
27
+ deviceDataTx: Type.String(),
28
+ heapCurrentSize: Type.String(),
29
+ heapFreeSize: Type.String(),
30
+ heapMaxSize: Type.String(),
31
+ deviceIPAddress: Type.String(),
32
+ storageAvailable: Type.String(),
33
+ storageTotal: Type.String(),
34
+ incognito: Type.Boolean(),
35
+ handlerType: Type.String(),
36
+ lastReportDiffMilliseconds: Type.Integer()
37
+ });
38
+ export const ListSubscriptionInput = Type.Object({
39
+ sortBy: Type.String({
40
+ default: 'CALLSIGN',
41
+ enum: ['CALLSIGN', 'UID']
42
+ }),
43
+ direction: Type.String({
44
+ default: 'ASCENDING',
45
+ enum: ['ASCENDING', 'DESCENDING']
46
+ }),
47
+ page: Type.Integer({
48
+ default: -1
49
+ }),
50
+ limit: Type.Integer({
51
+ default: -1
52
+ })
53
+ });
54
+ export const TAKList_Subscription = TAKList(Subscription);
55
+ export default class {
56
+ api;
57
+ constructor(api) {
58
+ this.api = api;
59
+ }
60
+ async list(query) {
61
+ const url = new URL(`/Marti/api/subscriptions/all`, this.api.url);
62
+ let q;
63
+ for (q in query) {
64
+ if (query[q] !== undefined) {
65
+ url.searchParams.append(q, String(query[q]));
66
+ }
67
+ }
68
+ return await this.api.fetch(url, {
69
+ method: 'GET'
70
+ });
71
+ }
72
+ }
73
+ //# sourceMappingURL=subscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../lib/api/subscriptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ export const TAKItem = (T) => {
3
+ return Type.Object({
4
+ version: Type.String(),
5
+ type: Type.String(),
6
+ data: T,
7
+ messages: Type.Optional(Type.Array(Type.String())),
8
+ nodeId: Type.Optional(Type.String())
9
+ });
10
+ };
11
+ export const TAKList = (T) => {
12
+ return TAKItem(Type.Array(T));
13
+ };
14
+ export var TAKGroup;
15
+ (function (TAKGroup) {
16
+ TAKGroup["WHITE"] = "White";
17
+ TAKGroup["YELLOW"] = "Yellow";
18
+ TAKGroup["ORANGE"] = "Orange";
19
+ TAKGroup["MAGENTA"] = "Magenta";
20
+ TAKGroup["RED"] = "Red";
21
+ TAKGroup["MAROON"] = "Maroon";
22
+ TAKGroup["PURPLE"] = "Purple";
23
+ TAKGroup["DARK_BLUE"] = "Dark Blue";
24
+ TAKGroup["BLUE"] = "Blue";
25
+ TAKGroup["CYAN"] = "Cyan";
26
+ TAKGroup["TEAL"] = "Teal";
27
+ TAKGroup["GREEN"] = "Green";
28
+ TAKGroup["DARK_GREEN"] = "Dark Green";
29
+ TAKGroup["BROWN"] = "Brown";
30
+ })(TAKGroup || (TAKGroup = {}));
31
+ export var TAKRole;
32
+ (function (TAKRole) {
33
+ TAKRole["TEAM_MEMBER"] = "Team Member";
34
+ TAKRole["TEAM_LEAD"] = "Team Lead";
35
+ TAKRole["HQ"] = "HQ";
36
+ TAKRole["SNIPER"] = "Sniper";
37
+ TAKRole["MEDIC"] = "Medic";
38
+ TAKRole["FORWARD_OBSERVER"] = "Forward Observer";
39
+ TAKRole["RTO"] = "RTO";
40
+ TAKRole["K9"] = "K9";
41
+ })(TAKRole || (TAKRole = {}));
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAoB,CAAI,EAAE,EAAE;IAC/C,OAAO,IAAI,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACvC,CAAC,CAAA;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAoB,CAAI,EAAE,EAAE;IAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAA;AAED,MAAM,CAAN,IAAY,QAeX;AAfD,WAAY,QAAQ;IAChB,2BAAe,CAAA;IACf,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;IACnB,uBAAW,CAAA;IACX,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,mCAAuB,CAAA;IACvB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,qCAAyB,CAAA;IACzB,2BAAe,CAAA;AACnB,CAAC,EAfW,QAAQ,KAAR,QAAQ,QAenB;AAED,MAAM,CAAN,IAAY,OASX;AATD,WAAY,OAAO;IACf,sCAA2B,CAAA;IAC3B,kCAAuB,CAAA;IACvB,oBAAS,CAAA;IACT,4BAAiB,CAAA;IACjB,0BAAe,CAAA;IACf,gDAAqC,CAAA;IACrC,sBAAW,CAAA;IACX,oBAAS,CAAA;AACb,CAAC,EATW,OAAO,KAAP,OAAO,QASlB"}
@@ -0,0 +1,123 @@
1
+ import Err from '@openaddresses/batch-error';
2
+ import { Type } from '@sinclair/typebox';
3
+ import { randomUUID } from 'node:crypto';
4
+ export const FeedInput = Type.Object({
5
+ uuid: Type.Optional(Type.String()),
6
+ active: Type.Boolean({ default: true }),
7
+ alias: Type.String(),
8
+ url: Type.String(),
9
+ });
10
+ export const VideoConnectionInput = Type.Object({
11
+ uuid: Type.Optional(Type.String()),
12
+ active: Type.Boolean({
13
+ default: true
14
+ }),
15
+ alias: Type.String(),
16
+ feeds: Type.Array(FeedInput)
17
+ });
18
+ export const Feed = Type.Object({
19
+ uuid: Type.String(),
20
+ active: Type.Boolean(),
21
+ alias: Type.String(),
22
+ url: Type.String(),
23
+ order: Type.Union([Type.Integer(), Type.Null()]),
24
+ macAddress: Type.String(),
25
+ roverPort: Type.String(),
26
+ ignoreEmbeddedKLV: Type.String(),
27
+ source: Type.Union([Type.String(), Type.Null()]),
28
+ networkTimeout: Type.String(),
29
+ bufferTime: Type.String(),
30
+ rtspReliable: Type.String(),
31
+ thumbnail: Type.Union([Type.String(), Type.Null()]),
32
+ classification: Type.Union([Type.String(), Type.Null()]),
33
+ latitude: Type.Union([Type.String(), Type.Null()]),
34
+ longitude: Type.Union([Type.String(), Type.Null()]),
35
+ fov: Type.Union([Type.String(), Type.Null()]),
36
+ heading: Type.Union([Type.String(), Type.Null()]),
37
+ range: Type.Union([Type.String(), Type.Null()]),
38
+ width: Type.Union([Type.Integer(), Type.Null()]),
39
+ height: Type.Union([Type.Integer(), Type.Null()]),
40
+ bitrate: Type.Union([Type.Integer(), Type.Null()]),
41
+ });
42
+ export const VideoConnection = Type.Object({
43
+ uuid: Type.String(),
44
+ active: Type.Boolean(),
45
+ alias: Type.String(),
46
+ thumbnail: Type.Union([Type.String(), Type.Null()]),
47
+ classification: Type.Union([Type.String(), Type.Null()]),
48
+ feeds: Type.Array(Feed)
49
+ });
50
+ export const VideoConnectionList = Type.Object({
51
+ videoConnections: Type.Array(VideoConnection)
52
+ });
53
+ export const VideoConnectionListInput = Type.Object({
54
+ protocol: Type.Optional(Type.String())
55
+ });
56
+ export default class {
57
+ api;
58
+ constructor(api) {
59
+ this.api = api;
60
+ }
61
+ async list(query = {}) {
62
+ const url = new URL(`/Marti/api/video`, this.api.url);
63
+ let q;
64
+ for (q in query) {
65
+ if (query[q] !== undefined) {
66
+ url.searchParams.append(q, String(query[q]));
67
+ }
68
+ }
69
+ return await this.api.fetch(url, {
70
+ method: 'GET'
71
+ });
72
+ }
73
+ async update(connection) {
74
+ const url = new URL(`/Marti/api/video/${connection.uuid}`, this.api.url);
75
+ if (!connection.uuid)
76
+ throw new Err(400, null, 'UUID must be set when updating Video');
77
+ await this.api.fetch(url, {
78
+ method: 'PUT',
79
+ body: {
80
+ ...connection,
81
+ feeds: connection.feeds.map((feed) => {
82
+ if (!feed.uuid)
83
+ feed.uuid = randomUUID();
84
+ return feed;
85
+ })
86
+ }
87
+ });
88
+ return await this.get(connection.uuid);
89
+ }
90
+ async create(connection) {
91
+ const url = new URL(`/Marti/api/video`, this.api.url);
92
+ const uuid = connection.uuid || randomUUID();
93
+ await this.api.fetch(url, {
94
+ method: 'POST',
95
+ body: {
96
+ videoConnections: [{
97
+ uuid,
98
+ ...connection,
99
+ feeds: connection.feeds.map((feed) => {
100
+ return {
101
+ uuid: randomUUID(),
102
+ ...feed,
103
+ };
104
+ })
105
+ }]
106
+ }
107
+ });
108
+ return await this.get(uuid);
109
+ }
110
+ async get(uid) {
111
+ const url = new URL(`/Marti/api/video/${encodeURIComponent(uid)}`, this.api.url);
112
+ return await this.api.fetch(url, {
113
+ method: 'GET'
114
+ });
115
+ }
116
+ async delete(uid) {
117
+ const url = new URL(`/Marti/api/video/${encodeURIComponent(uid)}`, this.api.url);
118
+ await this.api.fetch(url, {
119
+ method: 'DELETE'
120
+ });
121
+ }
122
+ }
123
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../../lib/api/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import FormData from 'form-data';
2
+ import OAuth from './api/oauth.js';
3
+ import Package from './api/package.js';
4
+ import Query from './api/query.js';
5
+ import Mission from './api/mission.js';
6
+ import MissionLog from './api/mission-log.js';
7
+ import MissionLayer from './api/mission-layer.js';
8
+ import Credentials from './api/credentials.js';
9
+ import Contacts from './api/contacts.js';
10
+ import Files from './api/files.js';
11
+ import Group from './api/groups.js';
12
+ import Subscription from './api/subscriptions.js';
13
+ import Video from './api/video.js';
14
+ import Export from './api/export.js';
15
+ import Err from '@openaddresses/batch-error';
16
+ /**
17
+ * Handle TAK HTTP API Operations
18
+ * @class
19
+ */
20
+ export default class TAKAPI {
21
+ auth;
22
+ url;
23
+ Package;
24
+ OAuth;
25
+ Mission;
26
+ MissionLog;
27
+ MissionLayer;
28
+ Credentials;
29
+ Contacts;
30
+ Subscription;
31
+ Group;
32
+ Video;
33
+ Export;
34
+ Query;
35
+ Files;
36
+ constructor(url, auth) {
37
+ this.url = url;
38
+ this.auth = auth;
39
+ this.Query = new Query(this);
40
+ this.Package = new Package(this);
41
+ this.OAuth = new OAuth(this);
42
+ this.Export = new Export(this);
43
+ this.Mission = new Mission(this);
44
+ this.MissionLog = new MissionLog(this);
45
+ this.MissionLayer = new MissionLayer(this);
46
+ this.Credentials = new Credentials(this);
47
+ this.Contacts = new Contacts(this);
48
+ this.Subscription = new Subscription(this);
49
+ this.Group = new Group(this);
50
+ this.Video = new Video(this);
51
+ this.Files = new Files(this);
52
+ }
53
+ static async init(url, auth) {
54
+ const api = new TAKAPI(url, auth);
55
+ await api.auth.init(api);
56
+ return api;
57
+ }
58
+ stdurl(url) {
59
+ try {
60
+ url = new URL(url);
61
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
+ }
63
+ catch (err) {
64
+ url = new URL(url, this.url);
65
+ }
66
+ return url;
67
+ }
68
+ /**
69
+ * Standardize interactions with the backend API
70
+ *
71
+ * @param {URL|String} url - Full URL or API fragment to request
72
+ * @param {Object} [opts={}] - Options
73
+ */
74
+ async fetch(url, opts = {}, raw = false) {
75
+ url = this.stdurl(url);
76
+ try {
77
+ if (!opts.headers)
78
+ opts.headers = {};
79
+ if ((isPlainObject(opts.body) || Array.isArray(opts.body))
80
+ && (!opts.headers['Content-Type']
81
+ || opts.headers['Content-Type'].startsWith('application/json'))) {
82
+ opts.body = JSON.stringify(opts.body);
83
+ opts.headers['Content-Type'] = 'application/json';
84
+ }
85
+ else if (opts.body instanceof FormData) {
86
+ opts.headers = opts.body.getHeaders();
87
+ }
88
+ else if (opts.body instanceof URLSearchParams) {
89
+ opts.headers['Content-Type'] = 'application/x-www-form-urlencoded';
90
+ opts.body = String(opts.body);
91
+ }
92
+ const res = await this.auth.fetch(this, url, opts);
93
+ if (raw)
94
+ return res;
95
+ let bdy = {};
96
+ if ((res.status < 200 || res.status >= 400)) {
97
+ try {
98
+ bdy = await res.text();
99
+ }
100
+ catch (err) {
101
+ console.error(err);
102
+ bdy = null;
103
+ }
104
+ throw new Err(res.status, null, bdy || `Status Code: ${res.status}`);
105
+ }
106
+ if (res.headers.get('content-type') === 'application/json') {
107
+ return await res.json();
108
+ }
109
+ else {
110
+ return await res.text();
111
+ }
112
+ }
113
+ catch (err) {
114
+ if (err instanceof Error && err.name === 'PublicError')
115
+ throw err;
116
+ throw new Err(400, null, err instanceof Error ? err.message : String(err));
117
+ }
118
+ }
119
+ }
120
+ function isPlainObject(value) {
121
+ return value?.constructor === Object;
122
+ }
123
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import fetch from './fetch.js';
2
+ import { CookieJar, Cookie } from 'tough-cookie';
3
+ import { CookieAgent } from 'http-cookie-agent/undici';
4
+ import { Client } from 'undici';
5
+ import stream2buffer from './stream.js';
6
+ export class APIAuth {
7
+ async init(api) {
8
+ }
9
+ async fetch(api, url, opts) {
10
+ return await fetch(url, opts);
11
+ }
12
+ }
13
+ export class APIAuthPassword extends APIAuth {
14
+ username;
15
+ password;
16
+ jwt;
17
+ constructor(username, password) {
18
+ super();
19
+ this.username = username;
20
+ this.password = password;
21
+ this.jwt = '';
22
+ }
23
+ async init(api) {
24
+ const { token } = await api.OAuth.login({
25
+ username: this.username,
26
+ password: this.password
27
+ });
28
+ this.jwt = token;
29
+ }
30
+ async fetch(api, url, opts) {
31
+ const jar = new CookieJar();
32
+ await jar.setCookie(new Cookie({ key: 'access_token', value: this.jwt }), String(api.url));
33
+ opts.credentials = 'include';
34
+ if (!opts.nocookies) {
35
+ const agent = new CookieAgent({ cookies: { jar } });
36
+ opts.dispatcher = agent;
37
+ }
38
+ return await fetch(url, opts);
39
+ }
40
+ }
41
+ export class APIAuthToken extends APIAuth {
42
+ jwt;
43
+ constructor(jwt) {
44
+ super();
45
+ this.jwt = jwt;
46
+ }
47
+ async fetch(api, url, opts) {
48
+ const jar = new CookieJar();
49
+ await jar.setCookie(new Cookie({ key: 'access_token', value: this.jwt }), String(api.url));
50
+ opts.credentials = 'include';
51
+ if (!opts.nocookies) {
52
+ const agent = new CookieAgent({ cookies: { jar } });
53
+ opts.dispatcher = agent;
54
+ }
55
+ return await fetch(url, opts);
56
+ }
57
+ }
58
+ export class APIAuthCertificate extends APIAuth {
59
+ cert;
60
+ key;
61
+ constructor(cert, key) {
62
+ super();
63
+ this.cert = cert;
64
+ this.key = key;
65
+ }
66
+ async fetch(api, url, opts) {
67
+ const client = new Client(api.url.origin, {
68
+ connect: {
69
+ key: this.key,
70
+ cert: this.cert,
71
+ rejectUnauthorized: false,
72
+ }
73
+ });
74
+ const res = await client.request({
75
+ path: String(url).replace(api.url.origin, ''),
76
+ ...opts
77
+ });
78
+ return {
79
+ status: res.statusCode,
80
+ body: res.body,
81
+ // Make this similiar to the fetch standard
82
+ headers: new Map(Object.entries(res.headers)),
83
+ text: async () => {
84
+ return String(await stream2buffer(res.body));
85
+ },
86
+ json: async () => {
87
+ return JSON.parse(String(await stream2buffer(res.body)));
88
+ },
89
+ };
90
+ }
91
+ }
92
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import Err from '@openaddresses/batch-error';
2
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
3
+ import { fetch, Response } from 'undici';
4
+ export class TypedResponse extends Response {
5
+ constructor(response) {
6
+ super(response.body, {
7
+ status: response.status,
8
+ statusText: response.statusText,
9
+ headers: response.headers,
10
+ });
11
+ }
12
+ async typed(type) {
13
+ const body = await this.json();
14
+ const typeChecker = TypeCompiler.Compile(type);
15
+ const result = typeChecker.Check(body);
16
+ if (result)
17
+ return body;
18
+ const errors = typeChecker.Errors(body);
19
+ const firstError = errors.First();
20
+ throw new Err(500, null, `Internal Validation Error: ${JSON.stringify(firstError)}`);
21
+ }
22
+ }
23
+ export default async function (input, init) {
24
+ return new TypedResponse(await fetch(input, init));
25
+ }
26
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../lib/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGzC,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACvC,YAAY,QAAkB;QAC1B,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;YACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC5B,CAAC,CAAC;IACP,CAAC;IAID,KAAK,CAAC,KAAK,CAA+B,IAAO;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,8BAA8B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,WAChB,KAAkB,EAClB,IAAkB;IAElB,OAAO,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export default async function stream2buffer(stream) {
2
+ return new Promise((resolve, reject) => {
3
+ const _buf = Array();
4
+ stream.on("data", chunk => _buf.push(chunk));
5
+ stream.on("end", () => resolve(Buffer.concat(_buf)));
6
+ stream.on("error", (err) => reject(`error converting stream - ${err}`));
7
+ });
8
+ }
9
+ //# sourceMappingURL=stream.js.map