diff --git a/lib/cot.ts b/lib/cot.ts index e64ae07..63f3c04 100644 --- a/lib/cot.ts +++ b/lib/cot.ts @@ -436,7 +436,7 @@ export default class CoT { */ to_proto(version = 1): Uint8Array { if (version < 1 || version > 1) throw new Err(400, null, `Unsupported Proto Version: ${version}`); - const ProtoMessage = RootMessage.lookupType(`atakmap.commoncommo.protobuf.v${version}.CotEvent`) + const ProtoMessage = RootMessage.lookupType(`atakmap.commoncommo.protobuf.v${version}.TakMessage`) const detail = this.raw.event.detail; @@ -470,16 +470,18 @@ export default class CoT { * Parse an ATAK compliant Protobuf to a JS Object */ static from_proto(raw: Uint8Array, version = 1): CoT { - const ProtoMessage = RootMessage.lookupType(`atakmap.commoncommo.protobuf.v${version}.CotEvent`) + const ProtoMessage = RootMessage.lookupType(`atakmap.commoncommo.protobuf.v${version}.TakMessage`) // TODO Type this const msg: any = ProtoMessage.decode(raw); + if (!msg.cotEvent) throw new Err(400, null, 'No cotEvent Data'); + const detail: Record = {}; const metadata: Record = {}; - for (const key in msg.detail) { + for (const key in msg.cotEvent.detail) { if (key === 'xmlDetail') { - const parsed: any = xmljs.xml2js(`${msg.detail.xmlDetail}`, { compact: true }); + const parsed: any = xmljs.xml2js(`${msg.cotEvent.detail.xmlDetail}`, { compact: true }); Object.assign(detail, parsed.detail); if (detail.metadata) { @@ -489,7 +491,7 @@ export default class CoT { delete detail.metadata; } } else if (['contact', 'group', 'precisionlocation', 'status', 'takv', 'track'].includes(key)) { - detail[key] = { _attributes: msg.detail[key] }; + detail[key] = { _attributes: msg.cotEvent.detail[key] }; } } @@ -497,20 +499,20 @@ export default class CoT { event: { _attributes: { version: '2.0', - uid: msg.uid, type: msg.type, how: msg.how, - qos: msg.qos, opex: msg.opex, access: msg.access, - time: new Date(msg.sendTime.toNumber()).toISOString(), - start: new Date(msg.startTime.toNumber()).toISOString(), - stale: new Date(msg.staleTime.toNumber()).toISOString(), + uid: msg.cotEvent.uid, type: msg.cotEvent.type, how: msg.cotEvent.how, + qos: msg.cotEvent.qos, opex: msg.cotEvent.opex, access: msg.cotEvent.access, + time: new Date(msg.cotEvent.sendTime.toNumber()).toISOString(), + start: new Date(msg.cotEvent.startTime.toNumber()).toISOString(), + stale: new Date(msg.cotEvent.staleTime.toNumber()).toISOString(), }, detail, point: { _attributes: { - lat: msg.lat, - lon: msg.lon, - hae: msg.hae, - le: msg.le, - ce: msg.ce, + lat: msg.cotEvent.lat, + lon: msg.cotEvent.lon, + hae: msg.cotEvent.hae, + le: msg.cotEvent.le, + ce: msg.cotEvent.ce, }, } } diff --git a/package-lock.json b/package-lock.json index a70ba3c..52a2ce1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -400,9 +400,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.33.4.tgz", - "integrity": "sha512-IUMFWdOtTqJ5F/rCjy2f3InRS9i4EWaCAMRsXVpUUQVi8hVByz/ifOi41Qt0Law8lz01/6zTz67vT70sB1VZbw==" + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.33.5.tgz", + "integrity": "sha512-Su72K2ckxefWQiDKzvykqah4Mg7k3uFX3qjFDsQ8NRfH/EMk+bUQsZJznaXSxmJoP50eSSqLWbX8I8TJfHC0gg==" }, "node_modules/@tsconfig/node10": { "version": "1.0.11", @@ -781,11 +781,11 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz", - "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==", + "version": "22.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz", + "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==", "dependencies": { - "undici-types": "~6.13.0" + "undici-types": "~6.18.2" } }, "node_modules/@types/qs": { @@ -4603,9 +4603,9 @@ } }, "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "version": "6.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", + "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==" }, "node_modules/uri-js": { "version": "4.4.1",