diff --git a/api/index.ts b/api/index.ts index ea4a4b482..f4ea0b479 100644 --- a/api/index.ts +++ b/api/index.ts @@ -7,10 +7,12 @@ import SwaggerUI from 'swagger-ui-express'; import history, {Context} from 'connect-history-api-fallback'; // @ts-ignore import Schema from '@openaddresses/batch-schema'; +import { ProfileConnConfig } from './lib/connection-config.js'; import Err from '@openaddresses/batch-error'; import Modeler from '@openaddresses/batch-generic'; import minimist from 'minimist'; -import { ConnectionWebSocket, sleep } from './lib/connection-pool.js'; +import { ConnectionWebSocket } from './lib/connection-web.js'; +import sleep from './lib/sleep.js'; import EventsPool from './lib/events-pool.js'; import { WebSocket, WebSocketServer } from 'ws'; import BlueprintLogin, { tokenParser, AuthUser } from '@tak-ps/blueprint-login'; @@ -230,12 +232,7 @@ export default async function server(config: Config) { const profile = await ProfileModel.from(parsedParams.connection); if (!profile.auth.cert || !profile.auth.key) throw new Error('No Cert Found on profile'); - client = await config.conns.add({ - id: parsedParams.connection, - name: parsedParams.connection, - enabled: true, - auth: profile.auth - }, true); + client = await config.conns.add(new ProfileConnConfig(parsedParams.connection, profile.auth), true); } else { client = config.conns.get(parsedParams.connection); diff --git a/api/lib/api/mission.ts b/api/lib/api/mission.ts index f23240187..7051e8c79 100644 --- a/api/lib/api/mission.ts +++ b/api/lib/api/mission.ts @@ -1,4 +1,5 @@ import TAKAPI from '../tak-api.js'; +import Err from '@openaddresses/batch-error'; import { Readable } from 'node:stream' import { TAKList } from './types.js'; @@ -34,6 +35,21 @@ export type Mission = { missionChanges?: Array; // Only present on Mission.get() } +export type MissionSubscriber = { + token?: string; + clientUid: string; + username: string; + createTime: string; + role: { + permissions: Array; + hibernateLazyInitializer: object; + type: string; + } +} + +/** + * @class + */ export default class { api: TAKAPI; @@ -41,6 +57,9 @@ export default class { this.api = api; } + /** + * Return users associated with this mission + */ async contacts(name: string) { const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/contacts`, this.api.url); @@ -49,6 +68,9 @@ export default class { }); } + /** + * Remove a file from the mission + */ async detachContents(name: string, hash: string) { const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/contents`, this.api.url); url.searchParams.append('hash', hash); @@ -58,6 +80,9 @@ export default class { }); } + /** + * Attach a file resource by hash from the TAK Server file manager + */ async attachContents(name: string, hashes: string[]) { const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/contents`, this.api.url); @@ -69,6 +94,9 @@ export default class { }); } + /** + * Upload a Mission Package + */ async upload(name: string, creatorUid: string, body: Readable) { const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/contents/missionpackage`, this.api.url); url.searchParams.append('creatorUid', creatorUid); @@ -79,6 +107,94 @@ export default class { }); } + /** + * Return UIDs associated with any subscribed users + */ + async subscriptions(name: string): Promise> { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscriptions`, this.api.url); + return await this.api.fetch(url, { + method: 'GET' + }); + } + + /** + * Return permissions associated with any subscribed users + */ + async subscriptionRoles(name: string): Promise> { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscriptions/roles`, this.api.url); + return await this.api.fetch(url, { + method: 'GET' + }); + } + + /** + * Return permissions associated with a given mission if subscribed + */ + async subscription(name: string): Promise { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscription`, this.api.url); + const res = await this.api.fetch(url, { + method: 'GET' + }); + + return res.data; + } + + /** + * Subscribe to a mission + */ + async subscribe(name: string, query: { + uid: string; + password?: string; + secago?: number; + start?: string; + end?: string; + + [key: string]: unknown; + }) { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscription`, this.api.url); + + for (const q in query) url.searchParams.append(q, String(query[q])); + return await this.api.fetch(url, { + method: 'PUT' + }); + } + + /** + * Get current subscription status + */ + async subscribed(name: string, query: { + uid: string; + + [key: string]: unknown; + }) { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscription`, this.api.url); + + for (const q in query) url.searchParams.append(q, String(query[q])); + return await this.api.fetch(url, { + method: 'GET' + }); + } + + /** + * Unsubscribe from a mission + */ + async unsubscribe(name: string, query: { + uid: string; + disconnectOnly?: string; + + [key: string]: unknown; + }) { + const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}/subscription`, this.api.url); + + for (const q in query) url.searchParams.append(q, String(query[q])); + return await this.api.fetch(url, { + method: 'DELETE' + }); + } + + /** + * List missions in currently active channels + */ async list(query: { passwordProtected?: string; defaultRole?: string; @@ -94,6 +210,9 @@ export default class { }); } + /** + * Get mission by its GUID + */ async getGuid(guid: string, query: { password?: string; changes?: string; @@ -103,15 +222,21 @@ export default class { end?: string; [key: string]: unknown; - }) { + }): Promise { const url = new URL(`/Marti/api/missions/guid/${encodeURIComponent(guid)}`, this.api.url); for (const q in query) url.searchParams.append(q, String(query[q])); - return await this.api.fetch(url, { + const missions: TAKList = await this.api.fetch(url, { method: 'GET' }); + + if (!missions.data.length) throw new Err(404, null, `No Mission for GUID: ${guid}`); + return missions.data[0]; } + /** + * Get mission by its Name + */ async get(name: string, query: { password?: string; changes?: string; @@ -121,15 +246,21 @@ export default class { end?: string; [key: string]: unknown; - }): Promise> { + }): Promise { const url = new URL(`/Marti/api/missions/${encodeURIComponent(name)}`, this.api.url); for (const q in query) url.searchParams.append(q, String(query[q])); - return await this.api.fetch(url, { + const missions: TAKList = await this.api.fetch(url, { method: 'GET' }); + + if (!missions.data.length) throw new Err(404, null, `No Mission for Name: ${name}`); + return missions.data[0]; } + /** + * Create a new mission + */ async create(name: string, query: { group: Array | string; creatorUid: string; @@ -158,6 +289,9 @@ export default class { }); } + /** + * Delete a mission + */ async delete(name: string, query: { creatorUid?: string; deepDelete?: string; diff --git a/api/lib/config.ts b/api/lib/config.ts index 2e1fea3b4..a816796f1 100644 --- a/api/lib/config.ts +++ b/api/lib/config.ts @@ -1,7 +1,8 @@ import SecretsManager from '@aws-sdk/client-secrets-manager'; import type EventsPool from './events-pool.js'; import { Pool } from '@openaddresses/batch-generic'; -import ConnectionPool, { ConnectionWebSocket } from './connection-pool.js'; +import ConnectionPool from './connection-pool.js'; +import { ConnectionWebSocket } from './connection-web.js'; import Cacher from './cacher.js'; import { Server } from './schema.js'; import { type InferSelectModel } from 'drizzle-orm'; diff --git a/api/lib/connection-config.ts b/api/lib/connection-config.ts new file mode 100644 index 000000000..b31fac0cf --- /dev/null +++ b/api/lib/connection-config.ts @@ -0,0 +1,46 @@ +import { Connection } from './schema.js'; +import { InferSelectModel } from 'drizzle-orm'; + +export type ConnectionAuth = { + cert: string; + key: string; +} + +export default interface ConnectionConfig { + id: string | number; + name: string; + enabled: boolean; + auth: ConnectionAuth; +} + +export class MachineConnConfig implements ConnectionConfig { + id: number; + name: string; + enabled: boolean; + auth: ConnectionAuth; + + constructor(connection: InferSelectModel) { + this.id = connection.id; + this.name = connection.name; + this.enabled = connection.enabled; + this.auth = connection.auth; + } +} + +export class ProfileConnConfig implements ConnectionConfig { + id: string; + name: string; + enabled: boolean; + auth: ConnectionAuth; + + constructor( + email: string, + auth: ConnectionAuth + ) { + this.id = email; + this.name = email; + this.enabled = true; + this.auth = auth; + } +} + diff --git a/api/lib/connection-pool.ts b/api/lib/connection-pool.ts index 8c45edf89..556e41aa2 100644 --- a/api/lib/connection-pool.ts +++ b/api/lib/connection-pool.ts @@ -1,78 +1,28 @@ import Err from '@openaddresses/batch-error'; -import { Connection } from './schema.js'; import Sinks from './sinks.js'; import Config from './config.js'; import Metrics from './aws/metric.js'; -import { WebSocket } from 'ws'; import TAK, { CoT } from '@tak-ps/node-tak'; import Modeler from '@openaddresses/batch-generic'; +import { Connection } from './schema.js'; import { InferSelectModel } from 'drizzle-orm'; -import { Feature } from 'geojson'; - -export type EphemeralConnection = { - id: string; - name: string; - enabled: boolean; - auth: { - cert?: string; - key?: string; - } -} +import sleep from './sleep.js'; +import ConnectionConfig from './connection-config.js'; -export type IncomingMessage = { - type: string; - data: object; -} - -export class ConnectionWebSocket { - ws: WebSocket; - format: string; - client?: ConnectionClient; - - constructor(ws: WebSocket, format = 'raw', client?: ConnectionClient) { - this.ws = ws; - this.format = format; - if (client) { - this.client = client; - this.ws.on('message', (data) => { - const msg = JSON.parse(String(data)); - - if (msg.type === 'chat') { - console.error('CHAT'); - } else { - const feat = msg.data as Feature; - - try { - const cot = CoT.from_geojson(feat); - if (this.client) this.client.tak.write([cot]); - } catch (err) { - this.ws.send(JSON.stringify({ - type: 'Error', - properties: { - message: err instanceof Error ? err.message : String(err) - } - })); - } - } - }); - } - } -} - -class ConnectionClient { - conn: InferSelectModel | EphemeralConnection; +export class ConnectionClient { + config: ConnectionConfig; tak: TAK; retry: number; initial: boolean; ephemeral: boolean; constructor( - conn: InferSelectModel | EphemeralConnection, + config: ConnectionConfig, tak: TAK, ephemeral = false ) { this.tak = tak; - this.conn = conn; + this.config = config; this.retry = 0; this.initial = true; this.ephemeral = ephemeral; @@ -148,7 +98,7 @@ export default class ConnectionPool extends Map | EphemeralConnection, cot: CoT, ephemeral=false) { + async cot(conn: ConnectionConfig, cot: CoT, ephemeral=false) { if (this.config.wsClients.has(String(conn.id))) { for (const client of (this.config.wsClients.get(String(conn.id)) || [])) { if (client.format == 'geojson') { @@ -175,7 +125,7 @@ export default class ConnectionPool extends Map | EphemeralConnection, ephemeral=false): Promise { + async add(conn: ConnectionConfig, ephemeral=false): Promise { if (!conn.auth || !conn.auth.cert || !conn.auth.key) throw new Err(400, null, 'Connection must have auth.cert & auth.key'); const tak = await TAK.connect(conn.id, new URL(this.config.server.url), { key: conn.auth.key, @@ -217,13 +167,13 @@ export default class ConnectionPool extends Map= 5) return; // These are considered stalled connections connClient.retry++ - console.log(`not ok - ${connClient.conn.id} - ${connClient.conn.name} - retrying in ${connClient.retry * 1000}ms`) + console.log(`not ok - ${connClient.config.id} - ${connClient.config.name} - retrying in ${connClient.retry * 1000}ms`) await sleep(connClient.retry * 1000); await connClient.tak.reconnect(); } else { // For now allow infinite retry if a client has connected once const retryms = Math.min(connClient.retry * 1000, 15000); - console.log(`not ok - ${connClient.conn.id} - ${connClient.conn.name} - retrying in ${retryms}ms`) + console.log(`not ok - ${connClient.config.id} - ${connClient.config.name} - retrying in ${retryms}ms`) await sleep(retryms); await connClient.tak.reconnect(); } @@ -242,9 +192,3 @@ export default class ConnectionPool extends Map { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} diff --git a/api/lib/connection-web.ts b/api/lib/connection-web.ts new file mode 100644 index 000000000..effed9af0 --- /dev/null +++ b/api/lib/connection-web.ts @@ -0,0 +1,39 @@ +import { Feature } from 'geojson'; +import { CoT } from '@tak-ps/node-tak'; +import { WebSocket } from 'ws'; +import { ConnectionClient } from './connection-pool.js'; + +export class ConnectionWebSocket { + ws: WebSocket; + format: string; + client?: ConnectionClient; + + constructor(ws: WebSocket, format = 'raw', client?: ConnectionClient) { + this.ws = ws; + this.format = format; + if (client) { + this.client = client; + this.ws.on('message', (data) => { + const msg = JSON.parse(String(data)); + + if (msg.type === 'chat') { + console.error('CHAT'); + } else { + const feat = msg.data as Feature; + + try { + const cot = CoT.from_geojson(feat); + if (this.client) this.client.tak.write([cot]); + } catch (err) { + this.ws.send(JSON.stringify({ + type: 'Error', + properties: { + message: err instanceof Error ? err.message : String(err) + } + })); + } + } + }); + } + } +} diff --git a/api/lib/data-mission.ts b/api/lib/data-mission.ts index d790d1467..389d5ae83 100644 --- a/api/lib/data-mission.ts +++ b/api/lib/data-mission.ts @@ -22,16 +22,16 @@ export default class DataMission { }), {}) } + let mission; + try { - const missions = await api.Mission.get(data.name, {}); + mission = await api.Mission.get(data.name, {}); //TODO Update Groups: Not supported by TAK Server at this time if (!data.mission_sync) { await api.Mission.delete(data.name, {}); + return; } - - if (!missions.data.length) throw new Error('Create Mission didn\'t return a mission or an error'); - return missions.data[0]; } catch (err) { if (!data.mission_sync) return; @@ -42,11 +42,14 @@ export default class DataMission { const missions = await api.Mission.create(data.name, { creatorUid: `connection-${data.connection}-data-${data.id}`, description: data.description, - group: data.mission_groups + defaultRole: data.mission_role, + group: data.mission_groups, }); if (!missions.data.length) throw new Error('Create Mission didn\'t return a mission or an error'); - return missions.data[0]; + mission = missions.data[0]; } + + return mission; } } diff --git a/api/lib/models.ts b/api/lib/models.ts index bbe5fffaa..776685315 100644 --- a/api/lib/models.ts +++ b/api/lib/models.ts @@ -3,19 +3,23 @@ import ProfileChat from './models/ProfileChat.js'; import * as pgtypes from './schema.js'; export default class Models { - ProfileChat: ProfileChat; Basemap: Modeler; Import: Modeler; Data: Modeler; + Server: Modeler; + Token: Modeler; + Connection: Modeler; ConnectionSink: Modeler; ConnectionToken: Modeler; + Profile: Modeler; + ProfileChat: ProfileChat; ProfileOverlay: Modeler; + Iconset: Modeler; Icon: Modeler; - Server: Modeler; - Token: Modeler; + Layer: Modeler; LayerAlert: Modeler; diff --git a/api/lib/schema.ts b/api/lib/schema.ts index 13cffba4a..d2fb070d1 100644 --- a/api/lib/schema.ts +++ b/api/lib/schema.ts @@ -1,6 +1,7 @@ import { sql } from 'drizzle-orm'; import { StyleContainer } from './style.js'; import { geometry, GeometryType } from '@openaddresses/batch-generic'; +import { ConnectionAuth } from './connection-config.js'; import { json, @@ -41,10 +42,7 @@ export const Basemap = pgTable('basemaps', { export const Profile = pgTable('profile', { username: text('username').primaryKey(), - auth: json('auth').$type<{ - cert: string; - key: string; - }>().notNull(), + auth: json('auth').$type().notNull(), created: timestamp('created', { withTimezone: true }).notNull().default(sql`Now()`), updated: timestamp('updated', { withTimezone: true }).notNull().default(sql`Now()`), tak_callsign: text('tak_callsign').notNull().default('CloudTAK User'), @@ -110,10 +108,7 @@ export const Connection = pgTable('connections', { name: text('name').notNull(), description: text('description').notNull().default(''), enabled: boolean('enabled').notNull().default(true), - auth: json('auth').$type<{ - cert: string; - key: string; - }>().notNull() + auth: json('auth').$type().notNull() }); export const ConnectionSink = pgTable('connection_sinks', { @@ -136,6 +131,7 @@ export const Data = pgTable('data', { description: text('description').notNull().default(''), auto_transform: boolean('auto_transform').notNull().default(false), mission_sync: boolean('mission_sync').notNull().default(false), + mission_role: text('mission_role').notNull().default('MISSION_SUBSCRIBER'), mission_groups: text('mission_groups').array().notNull().default([]), assets: json('assets').$type>().notNull().default(["*"]), connection: integer('connection').notNull().references(() => Connection.id) @@ -216,7 +212,7 @@ export const ProfileOverlay = pgTable('profile_overlays', { opacity: integer('opacity').notNull().default(1), visible: boolean('visible').notNull().default(true), mode: text('mode').notNull(), - mode_id: integer('mode_id'), // Used for Data not for Profile + mode_id: text('mode_id'), // Used for Data not for Profile url: text('url').notNull() }, (t) => ({ unq: unique().on(t.username, t.url) diff --git a/api/lib/sleep.ts b/api/lib/sleep.ts new file mode 100644 index 000000000..5cc756a21 --- /dev/null +++ b/api/lib/sleep.ts @@ -0,0 +1,5 @@ +export default function sleep(ms: number): Promise { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} diff --git a/api/migrations/0010_striped_lila_cheney.sql b/api/migrations/0010_striped_lila_cheney.sql new file mode 100644 index 000000000..c7adc6697 --- /dev/null +++ b/api/migrations/0010_striped_lila_cheney.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS "profile_subscriptions" ( + "id" serial PRIMARY KEY NOT NULL, + "username" text NOT NULL, + "created" timestamp with time zone DEFAULT Now() NOT NULL, + "updated" timestamp with time zone DEFAULT Now() NOT NULL, + "mission" text NOT NULL +); diff --git a/api/migrations/0011_tiny_miracleman.sql b/api/migrations/0011_tiny_miracleman.sql new file mode 100644 index 000000000..90b5274e2 --- /dev/null +++ b/api/migrations/0011_tiny_miracleman.sql @@ -0,0 +1 @@ +ALTER TABLE "profile_subscriptions" ADD COLUMN "guid" text NOT NULL; diff --git a/api/migrations/0012_glossy_tusk.sql b/api/migrations/0012_glossy_tusk.sql new file mode 100644 index 000000000..9a0ba832d --- /dev/null +++ b/api/migrations/0012_glossy_tusk.sql @@ -0,0 +1 @@ +ALTER TABLE "data" ADD COLUMN "mission_role" text DEFAULT 'MISSION_SUBSCRIBER' NOT NULL; diff --git a/api/migrations/0013_spotty_jocasta.sql b/api/migrations/0013_spotty_jocasta.sql new file mode 100644 index 000000000..71e0436c2 --- /dev/null +++ b/api/migrations/0013_spotty_jocasta.sql @@ -0,0 +1 @@ +ALTER TABLE "profile_subscriptions" ADD CONSTRAINT "profile_subscriptions_username_guid_unique" UNIQUE("username","guid"); diff --git a/api/migrations/0014_warm_darkhawk.sql b/api/migrations/0014_warm_darkhawk.sql new file mode 100644 index 000000000..f643d8536 --- /dev/null +++ b/api/migrations/0014_warm_darkhawk.sql @@ -0,0 +1 @@ +DROP TABLE "profile_subscriptions"; \ No newline at end of file diff --git a/api/migrations/0015_breezy_dust.sql b/api/migrations/0015_breezy_dust.sql new file mode 100644 index 000000000..331a2261a --- /dev/null +++ b/api/migrations/0015_breezy_dust.sql @@ -0,0 +1 @@ +ALTER TABLE "profile_overlays" ALTER COLUMN "mode_id" SET DATA TYPE text; diff --git a/api/migrations/meta/0010_snapshot.json b/api/migrations/meta/0010_snapshot.json new file mode 100644 index 000000000..458ec520b --- /dev/null +++ b/api/migrations/meta/0010_snapshot.json @@ -0,0 +1,1300 @@ +{ + "id": "b6417e62-7ce3-496f-b350-b67445209556", + "prevId": "c36f059c-c7a8-4e81-86a8-0b290d92979e", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "profile_subscriptions": { + "name": "profile_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "mission": { + "name": "mission", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/0011_snapshot.json b/api/migrations/meta/0011_snapshot.json new file mode 100644 index 000000000..84b8f133d --- /dev/null +++ b/api/migrations/meta/0011_snapshot.json @@ -0,0 +1,1306 @@ +{ + "id": "9fc2e1f3-4c59-42ae-a7fc-eede9293389a", + "prevId": "b6417e62-7ce3-496f-b350-b67445209556", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "profile_subscriptions": { + "name": "profile_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "mission": { + "name": "mission", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "guid": { + "name": "guid", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/0012_snapshot.json b/api/migrations/meta/0012_snapshot.json new file mode 100644 index 000000000..14ff28877 --- /dev/null +++ b/api/migrations/meta/0012_snapshot.json @@ -0,0 +1,1313 @@ +{ + "id": "3c9ce55f-df79-41a0-b3d0-d1f4bda6a88a", + "prevId": "9fc2e1f3-4c59-42ae-a7fc-eede9293389a", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_role": { + "name": "mission_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'MISSION_SUBSCRIBER'" + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "profile_subscriptions": { + "name": "profile_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "mission": { + "name": "mission", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "guid": { + "name": "guid", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/0013_snapshot.json b/api/migrations/meta/0013_snapshot.json new file mode 100644 index 000000000..ac155fad8 --- /dev/null +++ b/api/migrations/meta/0013_snapshot.json @@ -0,0 +1,1322 @@ +{ + "id": "208208f5-2a39-4f74-bb33-88b54161866e", + "prevId": "3c9ce55f-df79-41a0-b3d0-d1f4bda6a88a", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_role": { + "name": "mission_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'MISSION_SUBSCRIBER'" + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "profile_subscriptions": { + "name": "profile_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "mission": { + "name": "mission", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "guid": { + "name": "guid", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_subscriptions_username_guid_unique": { + "name": "profile_subscriptions_username_guid_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "guid" + ] + } + } + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/0014_snapshot.json b/api/migrations/meta/0014_snapshot.json new file mode 100644 index 000000000..31ed64eb4 --- /dev/null +++ b/api/migrations/meta/0014_snapshot.json @@ -0,0 +1,1265 @@ +{ + "id": "d646d3f4-3114-47fd-a81e-a6a6dcba55f6", + "prevId": "208208f5-2a39-4f74-bb33-88b54161866e", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_role": { + "name": "mission_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'MISSION_SUBSCRIBER'" + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/0015_snapshot.json b/api/migrations/meta/0015_snapshot.json new file mode 100644 index 000000000..dc55dbb9f --- /dev/null +++ b/api/migrations/meta/0015_snapshot.json @@ -0,0 +1,1265 @@ +{ + "id": "119f6b24-3be8-46c0-8b65-5618adcde615", + "prevId": "d646d3f4-3114-47fd-a81e-a6a6dcba55f6", + "version": "5", + "dialect": "pg", + "tables": { + "basemaps": { + "name": "basemaps", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bounds": { + "name": "bounds", + "type": "GEOMETRY(POLYGON, 4326)", + "primaryKey": false, + "notNull": false + }, + "center": { + "name": "center", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + }, + "minzoom": { + "name": "minzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "maxzoom": { + "name": "maxzoom", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 16 + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'png'" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'raster'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connections": { + "name": "connections", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_sinks": { + "name": "connection_sinks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "connection_sinks_connection_connections_id_fk": { + "name": "connection_sinks_connection_connections_id_fk", + "tableFrom": "connection_sinks", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "connection_tokens": { + "name": "connection_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": { + "connection_tokens_connection_connections_id_fk": { + "name": "connection_tokens_connection_connections_id_fk", + "tableFrom": "connection_tokens", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "data": { + "name": "data", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "auto_transform": { + "name": "auto_transform", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_sync": { + "name": "mission_sync", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "mission_role": { + "name": "mission_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'MISSION_SUBSCRIBER'" + }, + "mission_groups": { + "name": "mission_groups", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": [] + }, + "assets": { + "name": "assets", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[\"*\"]'::json" + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "data_connection_connections_id_fk": { + "name": "data_connection_connections_id_fk", + "tableFrom": "data", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "icons": { + "name": "icons", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "iconset": { + "name": "iconset", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type2525b": { + "name": "type2525b", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "icons_iconset_iconsets_uid_fk": { + "name": "icons_iconset_iconsets_uid_fk", + "tableFrom": "icons", + "tableTo": "iconsets", + "columnsFrom": [ + "iconset" + ], + "columnsTo": [ + "uid" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "iconsets": { + "name": "iconsets", + "schema": "", + "columns": { + "uid": { + "name": "uid", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "default_group": { + "name": "default_group", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_friendly": { + "name": "default_friendly", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_hostile": { + "name": "default_hostile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_neutral": { + "name": "default_neutral", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "default_unknown": { + "name": "default_unknown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skip_resize": { + "name": "skip_resize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "imports": { + "name": "imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Pending'" + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "result": { + "name": "result", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Unknown'" + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "config": { + "name": "config", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "imports_username_profile_username_fk": { + "name": "imports_username_profile_username_fk", + "tableFrom": "imports", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layers": { + "name": "layers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "enabled_styles": { + "name": "enabled_styles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "styles": { + "name": "styles", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "logging": { + "name": "logging", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "stale": { + "name": "stale", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 20000 + }, + "task": { + "name": "task", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "connection": { + "name": "connection", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environment": { + "name": "environment", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "memory": { + "name": "memory", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 128 + }, + "data": { + "name": "data", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "schema": { + "name": "schema", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + } + }, + "indexes": {}, + "foreignKeys": { + "layers_connection_connections_id_fk": { + "name": "layers_connection_connections_id_fk", + "tableFrom": "layers", + "tableTo": "connections", + "columnsFrom": [ + "connection" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "layers_data_data_id_fk": { + "name": "layers_data_data_id_fk", + "tableFrom": "layers", + "tableTo": "data", + "columnsFrom": [ + "data" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "layer_alerts": { + "name": "layer_alerts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "layer": { + "name": "layer", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'alert-circle'" + }, + "priority": { + "name": "priority", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'yellow'" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Details Unknown'" + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "layer_alerts_layer_layers_id_fk": { + "name": "layer_alerts_layer_layers_id_fk", + "tableFrom": "layer_alerts", + "tableTo": "layers", + "columnsFrom": [ + "layer" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "tak_callsign": { + "name": "tak_callsign", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'CloudTAK User'" + }, + "tak_group": { + "name": "tak_group", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Orange'" + }, + "tak_role": { + "name": "tak_role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Team Member'" + }, + "tak_loc": { + "name": "tak_loc", + "type": "GEOMETRY(POINT, 4326)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_chats": { + "name": "profile_chats", + "schema": "", + "columns": { + "username": { + "name": "username", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "chatroom": { + "name": "chatroom", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_callsign": { + "name": "sender_callsign", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sender_uid": { + "name": "sender_uid", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "profile_overlays": { + "name": "profile_overlays", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "pos": { + "name": "pos", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'vector'" + }, + "opacity": { + "name": "opacity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mode_id": { + "name": "mode_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profile_overlays_username_profile_username_fk": { + "name": "profile_overlays_username_profile_username_fk", + "tableFrom": "profile_overlays", + "tableTo": "profile", + "columnsFrom": [ + "username" + ], + "columnsTo": [ + "username" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_overlays_username_url_unique": { + "name": "profile_overlays_username_url_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "url" + ] + } + } + }, + "server": { + "name": "server", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'Default'" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'::json" + }, + "api": { + "name": "api", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "spatial_ref_sys": { + "name": "spatial_ref_sys", + "schema": "", + "columns": { + "srid": { + "name": "srid", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "auth_name": { + "name": "auth_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "auth_srid": { + "name": "auth_srid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "srtext": { + "name": "srtext", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + }, + "proj4text": { + "name": "proj4text", + "type": "varchar(2048)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "tokens": { + "name": "tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "created": { + "name": "created", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + }, + "updated": { + "name": "updated", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "Now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/api/migrations/meta/_journal.json b/api/migrations/meta/_journal.json index f38852ae9..e880b8ec9 100644 --- a/api/migrations/meta/_journal.json +++ b/api/migrations/meta/_journal.json @@ -71,6 +71,48 @@ "when": 1707792666051, "tag": "0009_modern_nico_minoru", "breakpoints": true + }, + { + "idx": 10, + "version": "5", + "when": 1707951512171, + "tag": "0010_striped_lila_cheney", + "breakpoints": true + }, + { + "idx": 11, + "version": "5", + "when": 1707952395884, + "tag": "0011_tiny_miracleman", + "breakpoints": true + }, + { + "idx": 12, + "version": "5", + "when": 1708009560566, + "tag": "0012_glossy_tusk", + "breakpoints": true + }, + { + "idx": 13, + "version": "5", + "when": 1708024091099, + "tag": "0013_spotty_jocasta", + "breakpoints": true + }, + { + "idx": 14, + "version": "5", + "when": 1708024476268, + "tag": "0014_warm_darkhawk", + "breakpoints": true + }, + { + "idx": 15, + "version": "5", + "when": 1708024779754, + "tag": "0015_breezy_dust", + "breakpoints": true } ] } \ No newline at end of file diff --git a/api/package-lock.json b/api/package-lock.json index 6c7a21a9f..f205fc6ee 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -29,6 +29,7 @@ "@openaddresses/batch-schema": "^9.0.0", "@openaddresses/cloudfriend": "^7.0.0", "@placemarkio/check-geojson": "^0.1.12", + "@sinclair/typebox": "^0.32.14", "@tak-ps/blueprint-login": "^4.0.0", "@tak-ps/node-cot": "^5.1.1", "@tak-ps/node-tak": "^1.2.0", @@ -253,24 +254,24 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-batch": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-batch/-/client-batch-3.513.0.tgz", - "integrity": "sha512-6qdFTELnfa2YgbRdAZ7NSxy4rXYuvcTL5hMxOWOngXpKu4AHXN/s5Ng3u4WUEfZzCXtECrMRSVqAcic8rlEeNw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-batch/-/client-batch-3.515.0.tgz", + "integrity": "sha512-hYniXsHBPYmBmRJESs0oSIBZmfqEt4LGqgQiIthI02pZtd/PbRU4x1ihF/kysj3QwPtPKAfCIcnXXmWQjZ2ihg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -303,24 +304,24 @@ } }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.513.0.tgz", - "integrity": "sha512-MSURSEgssu7isJD8Opgc0z7UQ9wo+62xJUDtao1Mt9Wl/nN2XUbBJDsUywaDso94jndYjGmvDYeZDOIbPlCTPg==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.515.0.tgz", + "integrity": "sha512-wRZTIGfKeuSlPPPb5aj3PahdDKNfLfz27VS8rAcICzRgryLg7HmTKwhxXLb6jG+AFylODedxWtpq+QflM2RghA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -349,31 +350,31 @@ "@smithy/util-waiter": "^2.1.1", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.513.0.tgz", - "integrity": "sha512-laqWb/m8bRY3H+QNsHWm5/2rIDKtEcv8YoUPDsIEybY9z27mKQLlBy/WCuRiDby6nhrutkUGqgti8HXYqHqj8w==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.515.0.tgz", + "integrity": "sha512-3t2cyaCoA9ST0nt6sN10Zz1q3vdXAzJaZbxwpT45/s/Z7Xg5AzxezX6zWk7amy/7lv4ZoRvKwfovjddztPxqpw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -409,24 +410,24 @@ } }, "node_modules/@aws-sdk/client-cloudwatch-logs": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.513.0.tgz", - "integrity": "sha512-1EBLb+gbrTUzlJNZttTxcDM74BBu4C1Q/5f2EUKuT06brqstg5TY/tEVnTC/FCKH5RYkUi3pcxiweMgz2OpfgA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.515.0.tgz", + "integrity": "sha512-kjZU8iyi8xlN9lBAlnkWr7TCRNoiWQwmmQMSMUYUCBcQvlZCyylnFDADMRa/PR4+HIdnlFeSlPDjfsmazQ5Qig==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/eventstream-serde-browser": "^2.1.1", @@ -456,32 +457,32 @@ "@smithy/util-retry": "^2.1.1", "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.513.0.tgz", - "integrity": "sha512-eFxUy44IiKD2GypjqvwclAFnQIJzVMzBTitNfeOGrdwnDIPjhL44PXLf27Yb8At3r9s5m8d/NgItg0rmR7W05w==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.515.0.tgz", + "integrity": "sha512-0vReYeAlo6zXy+V+Utlj71WcBaL7Qro8yEmb/Hmgej5i2nTMWNwKrLW5/3MhtwHCWrxG0GP3xyw2sOaLdSfdjw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-endpoint-discovery": "3.511.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-endpoint-discovery": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -509,31 +510,31 @@ "@smithy/util-utf8": "^2.1.1", "@smithy/util-waiter": "^2.1.1", "tslib": "^2.5.0", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/client-ecr": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecr/-/client-ecr-3.513.0.tgz", - "integrity": "sha512-wlsxcKXtA511Al+S/f3+EXZgb4sTR+MyNt4bIzjNz8OhDPHXntOvCt7VS/u1897eZ2eldSkkFQqS242JTweDVQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecr/-/client-ecr-3.515.0.tgz", + "integrity": "sha512-+gB8q4Dpt7qmBtB+xwM2FJlgpWruIJ34pfVt34Bcxn0PQ68ZD38+kidcc44ah7bmydqy8UHfeHYwF5P63eQ+Yw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -567,26 +568,26 @@ } }, "node_modules/@aws-sdk/client-eventbridge": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.513.0.tgz", - "integrity": "sha512-BpYJoKgXuUzsqDqqovaYVivWjkw0XWncXKTJpn4YIk1MqDtEBpTU2LF+97TKJmEqY0Gz7ZVcFVjNwirSsR9GMQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.515.0.tgz", + "integrity": "sha512-Po6aGh4hKkIDNsSX2Ce/mEQE2k+WNDhPHMG1NUgOGeWZWSygvZtrcjKUIriT8rpdDPCsMGmQq1+KQxBQdbnsKg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-signing": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/signature-v4-multi-region": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-signing": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/signature-v4-multi-region": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", @@ -617,24 +618,24 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.513.0.tgz", - "integrity": "sha512-g3FrfJQJXvXi7b9D+hmKuJ8kp8dncCv6NP0Hu6qqp6siUc0WH4DITUQIOo9qIEI1v4Y2BInBq/oLBQtJwOHM5Q==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.515.0.tgz", + "integrity": "sha512-wvGA+X3Zkdr/fBX0dUVwtNFlPGhtDSttk3Y0n0D9phpXchGCyiMsJ5ukdPUSYbfhRTgSDSh1g9MBrVlYT4sJZw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/eventstream-serde-browser": "^2.1.1", @@ -672,33 +673,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.513.0.tgz", - "integrity": "sha512-Y7kbPLvVVgcn38sTyQP/WnD5Zc7lnJ4XQ8qIPobbkwhCL+rl4hIWcxpQLf1OGS4zw2fBFQAxZnDotuBrAvgNsw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.515.0.tgz", + "integrity": "sha512-K527n83hrMUdosxOYTzL63wtlJtmN5SUJZnGY1sUR6UyOrnOr9lS6t3AB6BgHqLFRFZJqSqmhflv2cOD7P1UPg==", "dependencies": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-bucket-endpoint": "3.511.0", - "@aws-sdk/middleware-expect-continue": "3.511.0", - "@aws-sdk/middleware-flexible-checksums": "3.511.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-location-constraint": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-sdk-s3": "3.511.0", - "@aws-sdk/middleware-signing": "3.511.0", - "@aws-sdk/middleware-ssec": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/signature-v4-multi-region": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-bucket-endpoint": "3.515.0", + "@aws-sdk/middleware-expect-continue": "3.515.0", + "@aws-sdk/middleware-flexible-checksums": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-location-constraint": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-sdk-s3": "3.515.0", + "@aws-sdk/middleware-signing": "3.515.0", + "@aws-sdk/middleware-ssec": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/signature-v4-multi-region": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@aws-sdk/xml-builder": "3.496.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", @@ -740,24 +741,24 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.513.0.tgz", - "integrity": "sha512-6ZDYjjPqiF59Tm01wz9AqOUiZxcuDKFHvW0Vs2ugx/OoffEkguXdyYKieyykuUEFFT+Qh9oP38v/mQNRhRubEA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.515.0.tgz", + "integrity": "sha512-YO7SVh0mQ55COP5LcKsXE+o6wsOBBn3beAqKDZIBdjXho5rNhTdvbtaGTiaZmv0ALtu7TxtPVixhbDE0y1QseA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -784,32 +785,32 @@ "@smithy/util-retry": "^2.1.1", "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/client-sqs": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.513.0.tgz", - "integrity": "sha512-bftpt8WRfbsTS1hdW04b5+JMAAih8XZ/+fh+Rgp9h13oYkXCaeehGgBn565ReIxjWFJM90rIx00EcDVUAgZ33w==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.515.0.tgz", + "integrity": "sha512-PrG6GyqVTzfOWnRsYRyomjFUTFBLuf23//sH0/3aHcZgWOGs3kR8rDpFHq1Pz1i9vggnJ1AdJ+17H+UU6OWk4g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-sdk-sqs": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/credential-provider-node": "3.515.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-sdk-sqs": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -843,22 +844,22 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.513.0.tgz", - "integrity": "sha512-621Aj/KrgvKJXXViatb3zM+TdM3n+lodmMbSm+FH37RqYoj36s5FgmXan3Ebu9WBu1lUzKm+a3ZyRWVces52uQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", + "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -891,23 +892,23 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.513.0.tgz", - "integrity": "sha512-DyncBVOR5aENL6vOeHPllIAwWUaDZdj1aRKVWiNECG4LuuwwjASX0wFLxTRe/4al3Ugob0OLqsrgC2hd59BLJA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", + "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.513.0", + "@aws-sdk/client-sts": "3.515.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -939,26 +940,26 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.513.0" + "@aws-sdk/credential-provider-node": "^3.515.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.513.0.tgz", - "integrity": "sha512-reWhX5CO+XZhT8xIdDPnEws0KQNBuvcSY2W7niSPVYfq1mOLkQgYenP/sC/TyvnNuZDzgcmJQdbdAKHuZvMuUQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", + "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.511.0", - "@aws-sdk/middleware-logger": "3.511.0", - "@aws-sdk/middleware-recursion-detection": "3.511.0", - "@aws-sdk/middleware-user-agent": "3.511.0", - "@aws-sdk/region-config-resolver": "3.511.0", - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", - "@aws-sdk/util-user-agent-browser": "3.511.0", - "@aws-sdk/util-user-agent-node": "3.511.0", + "@aws-sdk/middleware-host-header": "3.515.0", + "@aws-sdk/middleware-logger": "3.515.0", + "@aws-sdk/middleware-recursion-detection": "3.515.0", + "@aws-sdk/middleware-user-agent": "3.515.0", + "@aws-sdk/region-config-resolver": "3.515.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", + "@aws-sdk/util-user-agent-browser": "3.515.0", + "@aws-sdk/util-user-agent-node": "3.515.0", "@smithy/config-resolver": "^2.1.1", "@smithy/core": "^1.3.2", "@smithy/fetch-http-handler": "^2.4.1", @@ -991,7 +992,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.513.0" + "@aws-sdk/credential-provider-node": "^3.515.0" } }, "node_modules/@aws-sdk/core": { @@ -1011,11 +1012,11 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.511.0.tgz", - "integrity": "sha512-4VUsnLRox8YzxnZwnFrfZM4bL5KKLhsjjjX7oiuLyzFkhauI4HFYt7rTB8YNGphpqAg/Wzw5DBZfO3Bw1iR1HA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", + "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1025,11 +1026,11 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.511.0.tgz", - "integrity": "sha512-y83Gt8GPpgMe/lMFxIq+0G2rbzLTC6lhrDocHUzqcApLD6wet8Esy2iYckSRlJgYY+qsVAzpLrSMtt85DwRPTw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", + "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/node-http-handler": "^2.3.1", "@smithy/property-provider": "^2.1.1", @@ -1044,16 +1045,16 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.513.0.tgz", - "integrity": "sha512-J9FAmTVHm9RsXxXluXCmJ+crkZPDpdNQhiVrbmPPq989lfr0u33rf1aKFMF5AyHNcNEWeAYKKBQwJJkcsxStIA==", - "dependencies": { - "@aws-sdk/client-sts": "3.513.0", - "@aws-sdk/credential-provider-env": "3.511.0", - "@aws-sdk/credential-provider-process": "3.511.0", - "@aws-sdk/credential-provider-sso": "3.513.0", - "@aws-sdk/credential-provider-web-identity": "3.513.0", - "@aws-sdk/types": "3.511.0", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", + "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==", + "dependencies": { + "@aws-sdk/client-sts": "3.515.0", + "@aws-sdk/credential-provider-env": "3.515.0", + "@aws-sdk/credential-provider-process": "3.515.0", + "@aws-sdk/credential-provider-sso": "3.515.0", + "@aws-sdk/credential-provider-web-identity": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -1065,17 +1066,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.513.0.tgz", - "integrity": "sha512-Cp6tYUJ+g8zJxI8vE0A9W6AxRLq3iR2zGGKsrPLNmZkUaHoVaJiNEd+2nL9RwCqDRve+N+Sh3mbZrLiqh3DO6A==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.511.0", - "@aws-sdk/credential-provider-http": "3.511.0", - "@aws-sdk/credential-provider-ini": "3.513.0", - "@aws-sdk/credential-provider-process": "3.511.0", - "@aws-sdk/credential-provider-sso": "3.513.0", - "@aws-sdk/credential-provider-web-identity": "3.513.0", - "@aws-sdk/types": "3.511.0", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", + "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.515.0", + "@aws-sdk/credential-provider-http": "3.515.0", + "@aws-sdk/credential-provider-ini": "3.515.0", + "@aws-sdk/credential-provider-process": "3.515.0", + "@aws-sdk/credential-provider-sso": "3.515.0", + "@aws-sdk/credential-provider-web-identity": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -1087,11 +1088,11 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.511.0.tgz", - "integrity": "sha512-88hLUPqcTwjSubPS+34ZfmglnKeLny8GbmZsyllk96l26PmDTAqo5RScSA8BWxL0l5pRRWGtcrFyts+oibHIuQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", + "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1102,13 +1103,13 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.513.0.tgz", - "integrity": "sha512-q9rRwRWVut97+hnc0Yt77tGeKoPLLDpKKVpVGC6e+EQHlXM4H6oq2VGLgXYJPA9HpMJ3t5zmmgHxEafYeFZo+w==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", + "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==", "dependencies": { - "@aws-sdk/client-sso": "3.513.0", - "@aws-sdk/token-providers": "3.513.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/client-sso": "3.515.0", + "@aws-sdk/token-providers": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1119,12 +1120,12 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.513.0.tgz", - "integrity": "sha512-0EZUQhbDaV3jxvIjcWEGiGmioFS0vEvUxaJrMgeRLUo9njZfLZ4VaEMsqPnZ9rMz2w9CxfpDeObEQlDzYeGRgA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", + "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==", "dependencies": { - "@aws-sdk/client-sts": "3.513.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/client-sts": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1146,11 +1147,11 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.513.0.tgz", - "integrity": "sha512-G/z5YlX8euUSDyJOK1Gxi+WB9rEsAo8gExg7xrNc24ERTsPpNhph/Bn50ORDWgvu9oOekMzE0y2sYejGZCEj+g==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.515.0.tgz", + "integrity": "sha512-nvrRFQoNiT67ih5c/lKU6nIdjFtx4TXSQkBnh89udSQErqqUhuNNLX4mPWaLPxMUYP/oORl61WeyNyPaaQdQrA==", "dependencies": { - "@aws-sdk/util-dynamodb": "3.513.0", + "@aws-sdk/util-dynamodb": "3.515.0", "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1163,9 +1164,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.513.0.tgz", - "integrity": "sha512-1xwpT+TJjGc0PHxQ4upwR5HuCf/oz2PT/7hiTgja1WRxMFAXgAWn4ennfiysMsyU86Zyx9V3peaJzT9VPPtwGw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.515.0.tgz", + "integrity": "sha512-/7z/3KnMs1ODNS9c8Skj/DFTsy6/v7n17clh1IGOcTYhhioCMA3MIzIZecWFeLjPYcUSkNQHIIjKFQt1nhZkwA==", "dependencies": { "@smithy/abort-controller": "^2.1.1", "@smithy/middleware-endpoint": "^2.4.1", @@ -1183,11 +1184,11 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.511.0.tgz", - "integrity": "sha512-G4dAAHPUZbpDCVBaCcAOlFoctO9lcecSs0EZYrvzQc/9d4XJvNWGd1C7GSdf204VPOCPZCjNpTkdWGm25r00wA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.515.0.tgz", + "integrity": "sha512-Vm423j3udFrhKPaKiXtie+6aF05efjX8lhAu5VOruIvbam7olvdWNdkH7sGWlz1ko3CVa7PwOYjGHiOOhxpEOA==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@aws-sdk/util-arn-parser": "3.495.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -1200,12 +1201,12 @@ } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.511.0.tgz", - "integrity": "sha512-g3V25SJkOD4C0nH5V8SDifxSDSRA3g+JXue/hFYWtAt/avyOu38fmjqX6ewOuj7wENoc4KCw1CmhSu+XTNtbRA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.515.0.tgz", + "integrity": "sha512-m3tKKY5JrGuiYjHS4vkIxh5JrH+KF2b0+Xr4BIHkUz7DzYHjqlmY2wmafIyfE/oU8xDFUwLrsHR6RcMmDaJVuA==", "dependencies": { "@aws-sdk/endpoint-cache": "3.495.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", @@ -1216,11 +1217,11 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.511.0.tgz", - "integrity": "sha512-zjDzrJV9PFCkEqhNLKKK+9PB1vPveVZLJbcY71V3PZFvPII1bhlgwvI1e99MhEiaiH2a9I2PnS56bGwEKuNTrw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.515.0.tgz", + "integrity": "sha512-TWCXulivab4reOMx/vxa/IwnPX78fLwI9NUoAxjsqB6W9qjmSnPD43BSVeGvbbl/YNmgk7XfMbZb6IgxW7RyzA==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1230,13 +1231,13 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.511.0.tgz", - "integrity": "sha512-oI8zULi6VXLXJ3zA6aCdbOoceSNOxGITosB7EKDsLllzAQFV1WlzmQCtjFY8DLLYZ521atgJNcVbzjxPQnrnJA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.515.0.tgz", + "integrity": "sha512-ydGjnqNeYlJaAkmQeQnS4pZRAAvzefdm8c234Qh0Fg55xRwHTNLp7uYsdfkTjrdAlj6YIO3Zr6vK6VJ6MGCwug==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/is-array-buffer": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", @@ -1248,11 +1249,11 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.511.0.tgz", - "integrity": "sha512-DbBzQP/6woSHR/+g9dHN3YiYaLIqFw9u8lQFMxi3rT3hqITFVYLzzXtEaHjDD6/is56pNT84CIKbyJ6/gY5d1Q==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", + "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1262,11 +1263,11 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.511.0.tgz", - "integrity": "sha512-PKHnOT3oBo41NELq3Esz3K9JuV1l9E+SrCcfr/07yU4EbqhS4UGPb22Yf5JakQu4fGbTFlAftcc8PXcE2zLr4g==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.515.0.tgz", + "integrity": "sha512-ORFC5oijjTJsHhUXy9o52/vl5Irf6e83bE/8tBp+sVVx81+E8zTTWZbysoa41c0B5Ycd0H3wCWutvjdXT16ydQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1275,11 +1276,11 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.511.0.tgz", - "integrity": "sha512-EYU9dBlJXvQcCsM2Tfgi0NQoXrqovfDv/fDy8oGJgZFrgNuHDti8tdVVxeJTUJNEAF67xlDl5o+rWEkKthkYGQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", + "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1288,11 +1289,11 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.511.0.tgz", - "integrity": "sha512-PlNPCV/6zpDVdNx1K69xDTh/wPNU4WyP4qa6hUo2/+4/PNG5HI9xbCWtpb4RjhdTRw6qDtkBNcPICHbtWx5aHg==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", + "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1302,11 +1303,11 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.511.0.tgz", - "integrity": "sha512-SKJr8mKaqjcGpu0xxRPXZiKrJmyetDfgzvWuZ7QOgdnPa+6jk5fmEUTFoPb3VCarMkf8xo/l6cTZ5lei7Lbflw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.515.0.tgz", + "integrity": "sha512-vB8JwiTEAqm1UT9xfugnCgl0H0dtBLUQQK99JwQEWjHPZmQ3HQuVkykmJRY3X0hzKMEgqXodz0hZOvf3Hq1mvQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@aws-sdk/util-arn-parser": "3.495.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -1321,11 +1322,11 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.511.0.tgz", - "integrity": "sha512-J4Pl4EN1xjCjEW+drDDI3BZUwawPW4hLZumRCc1FZ1WdML3bedFc3CQ1ij4i56WItXIo+t0VDW5w3JtbjZTgJw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.515.0.tgz", + "integrity": "sha512-DhGVfwe6tqkI5nkslo+PcNufHyAqEW7gCUDQOz2XNXI3PAN1UoJ+8CN6+7rqPsRlRbqRzDTh8gcWkumt1TmVJg==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", "@smithy/util-hex-encoding": "^2.1.1", @@ -1337,11 +1338,11 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.511.0.tgz", - "integrity": "sha512-IMijFLfm+QQHD6NNDX9k3op9dpBSlWKnqjcMU38Tytl2nbqV4gktkarOK1exHAmH7CdoYR5BufVtBzbASNSF/A==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.515.0.tgz", + "integrity": "sha512-SdjCyQCL702I07KhCiBFcoh6+NYtnruHJQIzWwMpBteuYHnCHW1k9uZ6pqacsS+Y6qpAKfTVNpQx2zP2s6QoHA==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", @@ -1354,11 +1355,11 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.511.0.tgz", - "integrity": "sha512-8pfgBard9pj7oWJ79R6dbXHUGr7JPP/OmAsKBYZA0r/91a1XdFUDtRYZadstjcOv/X3QbeG3QqWOtNco+XgM7Q==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.515.0.tgz", + "integrity": "sha512-0qLjKiorosVBzzaV/o7MEyS9xqLLu02qGbP564Z/FZY74JUQEpBNedgveMUbb6lqr85RnOuwZ0GZ0cBRfH2brQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1367,12 +1368,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.511.0.tgz", - "integrity": "sha512-eLs+CxP2QCXh3tCGYCdAml3oyWj8MSIwKbH+8rKw0k/5vmY1YJDBy526whOxx61ivhz2e0muuijN4X5EZZ2Pnw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", + "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==", "dependencies": { - "@aws-sdk/types": "3.511.0", - "@aws-sdk/util-endpoints": "3.511.0", + "@aws-sdk/types": "3.515.0", + "@aws-sdk/util-endpoints": "3.515.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1382,11 +1383,11 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.511.0.tgz", - "integrity": "sha512-RzBLSNaRd4iEkQyEGfiSNvSnWU/x23rsiFgA9tqYFA0Vqx7YmzSWC8QBUxpwybB8HkbbL9wNVKQqTbhI3mYneQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", + "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", "@smithy/util-config-provider": "^2.2.1", @@ -1398,12 +1399,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.511.0.tgz", - "integrity": "sha512-lwbU3LX5TpYu1DHBMH2Wz+2MWGccn5G3psu1Y9WTPc+1bubVQHWf8UD2lzON5L2QirT9tQheQjTke1u5JC7FTQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.515.0.tgz", + "integrity": "sha512-5lrCn4DSE0zL41k0L6moqcdExZhWdAnV0/oMEagrISzQYoia+aNTEeyVD3xqJhRbEW4gCj3Uoyis6c8muf7b9g==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.511.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/middleware-sdk-s3": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", "@smithy/types": "^2.9.1", @@ -1414,12 +1415,12 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.513.0.tgz", - "integrity": "sha512-S27iFzj3dVRw1q+xLtqTGZOfYG95OwvTN7crvS2daqSYfcWN+dhEPzQJdDvGaAnAI45bWm8rppH/EYzrlxeZoA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", + "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==", "dependencies": { - "@aws-sdk/client-sso-oidc": "3.513.0", - "@aws-sdk/types": "3.511.0", + "@aws-sdk/client-sso-oidc": "3.515.0", + "@aws-sdk/types": "3.515.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1430,9 +1431,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.511.0.tgz", - "integrity": "sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", + "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1453,9 +1454,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.513.0.tgz", - "integrity": "sha512-sUOBtnWDTpBNHSt7yH63wOHYFeTHynRN/CbnauBpK7AFlV9IVIsPz3VdmqAz8sUbEyxSQSBAeSkvp22lUHWOMA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.515.0.tgz", + "integrity": "sha512-HCduLubTlkoxqggF7/Lx26ns+C+idXoXbI3F3y0+sIuBPUi3pDrIAjew8LkL7lmvM4D4frDuCdFOABPTOO6Eug==", "dependencies": { "tslib": "^2.5.0" }, @@ -1467,11 +1468,11 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.511.0.tgz", - "integrity": "sha512-J/5hsscJkg2pAOdLx1YKlyMCk5lFRxRxEtup9xipzOxVBlqOIE72Tuu31fbxSlF8XzO/AuCJcZL4m1v098K9oA==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", + "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/types": "^2.9.1", "@smithy/util-endpoints": "^1.1.1", "tslib": "^2.5.0" @@ -1492,22 +1493,22 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.511.0.tgz", - "integrity": "sha512-5LuESdwtIcA10aHcX7pde7aCIijcyTPBXFuXmFlDTgm/naAayQxelQDpvgbzuzGLgePf8eTyyhDKhzwPZ2EqiQ==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", + "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/types": "^2.9.1", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.511.0.tgz", - "integrity": "sha512-UopdlRvYY5mxlS4wwFv+QAWL6/T302wmoQj7i+RY+c/D3Ej3PKBb/mW3r2wEOgZLJmPpeeM1SYMk+rVmsW1rqw==", + "version": "3.515.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", + "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==", "dependencies": { - "@aws-sdk/types": "3.511.0", + "@aws-sdk/types": "3.515.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2970,9 +2971,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -3000,12 +3001,12 @@ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" }, "node_modules/@ljharb/resumer": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz", - "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.1.2.tgz", + "integrity": "sha512-opZnY9WsZ6tjPSpmTEdPY+LpxpEwqg3VsQiGFv+wAaA1ffTghnG019mAD8BKxkcpZx6HtvNj0vdyxDHTxPQlJw==", "dev": true, "dependencies": { - "@ljharb/through": "^2.3.9" + "@ljharb/through": "^2.3.12" }, "engines": { "node": ">= 0.4" @@ -3064,9 +3065,9 @@ } }, "node_modules/@openaddresses/batch-generic": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/@openaddresses/batch-generic/-/batch-generic-15.10.2.tgz", - "integrity": "sha512-UHuxxyINxPVv+STOg8q8kLafw+DrMSmEA1604xBhU6LMMd+9TVMKzQ2OTUw/5nsBQGwdyRrHAKqvj+alhKy2vQ==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/@openaddresses/batch-generic/-/batch-generic-15.11.0.tgz", + "integrity": "sha512-xE3oPrY0q4BFe39a1MJjAgsqtl3W8XjvFQAUJjS88Rx5cyVSDPUPw8Bnw9cWu9pUWcyYd9C58x8AAw4vTrKhjg==", "dependencies": { "@openaddresses/batch-error": "^2.1.2", "@turf/bbox": "^6.5.0", @@ -3207,6 +3208,11 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@sinclair/typebox": { + "version": "0.32.14", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.32.14.tgz", + "integrity": "sha512-EC77Mw8huT2z9YlYbWfpIQgN6shZE1tH4NP4/Trig8UBel9FZNMZRJ42ubJI8PLor2uIU+waLml1dce5ReCOPg==" + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -3533,6 +3539,14 @@ "node": ">=14.0.0" } }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@smithy/middleware-serde": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", @@ -4102,9 +4116,9 @@ } }, "node_modules/@tak-ps/node-cot": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@tak-ps/node-cot/-/node-cot-5.3.0.tgz", - "integrity": "sha512-AiCfWo4H/vf9JuMe25smvyQq8BZHmkAR+sSGWF4f1ZcBAobk+hRPSsyJBgvQ0UcMlSqipEjqMIj0j+vkFLIrQQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@tak-ps/node-cot/-/node-cot-5.3.1.tgz", + "integrity": "sha512-COgoNMDgVqmbkQzeS5jnOwhW3rE45DN2KW5pHtf86eMzydLV2s2rh95zWtbYmJo5K16yb63PJXF+Y1IHSuEz0Q==", "dependencies": { "@turf/helpers": "^6.5.0", "@turf/point-on-feature": "^6.5.0", @@ -4452,9 +4466,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", - "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", + "version": "20.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", + "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -12564,9 +12578,9 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.11.3", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.3.tgz", - "integrity": "sha512-vQ+Pe73xt7vMVbX40L6nHu4sDmNCM6A+eMVJPGvKrifHQ4LO3smH0jCiiefKzsVl7OlOcVEnrZ9IFzYwElfMkA==" + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.7.tgz", + "integrity": "sha512-8xqfJFRVEEU3Zxe8vQvC4g827lDOqV9haougR3tnlgF/PkDN//9Y6kGV9qsT0A9vawlbdF8dF/R6HrlDyHvbEQ==" }, "node_modules/swagger-ui-express": { "version": "5.0.0", @@ -12583,15 +12597,15 @@ } }, "node_modules/tape": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.4.tgz", - "integrity": "sha512-uaigP+5H9+E8aaMLKMbGkDd33G5TKu4UFpapqT7um+8xSHQQUS2lJNd+hTj9fFVQLg8bmcIofwc8b9f6+ISSfQ==", + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.5.tgz", + "integrity": "sha512-C5Gm1MR8ujZmNrsmOiHSkKFfY2thrnUrFw/fFtcva9FABbN7LrHuQPi3MTS0Z0i/SLfYSJtRIcJYDUpwPsQ8yA==", "dev": true, "dependencies": { - "@ljharb/resumer": "^0.0.1", - "@ljharb/through": "^2.3.11", + "@ljharb/resumer": "^0.1.2", + "@ljharb/through": "^2.3.12", "array.prototype.every": "^1.1.5", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "deep-equal": "^2.2.3", "defined": "^1.0.1", "dotignore": "^0.1.2", @@ -12599,7 +12613,7 @@ "get-package-type": "^0.1.0", "glob": "^7.2.3", "has-dynamic-import": "^2.1.0", - "hasown": "^2.0.0", + "hasown": "^2.0.1", "inherits": "^2.0.4", "is-regex": "^1.1.4", "minimist": "^1.2.8", @@ -13350,9 +13364,13 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } diff --git a/api/package.json b/api/package.json index b9805dea0..450991251 100644 --- a/api/package.json +++ b/api/package.json @@ -5,7 +5,8 @@ "description": "Facilitate ETL operations to bring non-TAK sources into a TAK Server", "main": "index.js", "scripts": { - "test": "./test/test", + "test": "tape test/*.test.js", + "tstest": "test/test", "build": "tsc --outDir . && rm ./routes/*.ts", "prod": "NODE_OPTIONS='--max-old-space-size=6144' forever index.js", "lint": "eslint index.ts lib/**.ts test/**.ts", @@ -39,6 +40,7 @@ "@openaddresses/batch-schema": "^9.0.0", "@openaddresses/cloudfriend": "^7.0.0", "@placemarkio/check-geojson": "^0.1.12", + "@sinclair/typebox": "^0.32.14", "@tak-ps/blueprint-login": "^4.0.0", "@tak-ps/node-cot": "^5.1.1", "@tak-ps/node-tak": "^1.2.0", diff --git a/api/routes/data-asset.ts b/api/routes/data-asset.ts index cc4d1cabe..73d46c20f 100644 --- a/api/routes/data-asset.ts +++ b/api/routes/data-asset.ts @@ -231,9 +231,7 @@ export default async function router(schema: any, config: Config) { const file = `${req.params.asset}.${req.params.ext}`; try { if (data.mission_sync) { - let missions = await api.Mission.get(data.name, {}); - if (!missions.data.length) throw new Error('No Mission'); - const mission = missions.data[0]; + let mission = await api.Mission.get(data.name, {}); for (const content of mission.contents) { if (content.data.name === file) { diff --git a/api/routes/layer.ts b/api/routes/layer.ts index 84df9656a..e2ffbc052 100644 --- a/api/routes/layer.ts +++ b/api/routes/layer.ts @@ -44,6 +44,7 @@ export default async function router(schema: any, config: Config) { where: sql` name ~* ${req.query.filter} AND (${Param(req.query.connection)}::BIGINT IS NULL OR ${Param(req.query.connection)}::BIGINT = layers.connection) + AND (${Param(req.query.data)}::BIGINT IS NULL OR ${Param(req.query.data)}::BIGINT = layers.data) ` }); @@ -382,59 +383,64 @@ export default async function router(schema: any, config: Config) { } } + let pooledClient; + const cots = []; if (layer.connection) { - const pooledClient = await config.conns.get(layer.connection); + pooledClient = await config.conns.get(layer.connection); - if (!pooledClient || !pooledClient.conn || !pooledClient.conn.enabled) { - return res.json({ - status: 200, - message: 'Recieved but Connection Paused' - }); + for (const feat of req.body.features) { + cots.push(CoT.from_geojson(feat)) } + } else if (layer.data) { + const data = await config.models.Data.from(layer.data); - if (req.headers['content-type'] === 'application/json') { - const cots = []; - for (const feat of req.body.features) { - cots.push(CoT.from_geojson(feat)) - } + if (req.headers['content-type'] !== 'application/json') { + throw new Err(400, null, 'Data Sync layers must be application/json'); + } else if (!data.mission_sync) { + return res.status(202).json({ status: 202, message: 'Recieved but Data Mission Sync Disabled' }); + } - if (cots.length === 0) { - return res.json({ status: 200, message: 'No features found' }); - } + pooledClient = await config.conns.get(data.connection); - pooledClient.tak.write(cots); - for (const cot of cots) config.conns.cot(pooledClient.conn, cot); - - // TODO Only GeoJSON Features go to Dynamo, this should also store CoT XML - // @ts-ignore - if (layer.logging && req.query.logging !== false) ddb.queue(req.body.features.map((feat: Feature) => { - const item: QueueItem = { - id: String(feat.id), - layer: layer.id, - type: feat.type, - // @ts-ignore - properties: feat.properties, - geometry: feat.geometry - } - - return item; - })); - } else if (req.headers['content-type'] === 'application/xml') { - pooledClient.tak.write_xml(req.body); - } else { - throw new Err(400, null, 'Unsupported Content-Type'); - } - } else if (layer.data) { - if (req.headers['content-type'] === 'application/json') { - const data = await config.models.Data.from(layer.data); - S3.put(`data/${data.id}/layer-${layer.id}.geojson`, JSON.stringify(req.body)); - } else { - throw new Err(400, null, 'Only Content-Type application/json is currently supported'); + for (const feat of req.body.features) { + feat.properties.dest = [{ mission: data.name }]; + cots.push(CoT.from_geojson(feat)) } } else { throw new Err(400, null, 'Either connection or data must be set'); } + if (!pooledClient || !pooledClient.conn || !pooledClient.conn.enabled) { + return res.json({ status: 200, message: 'Recieved but Connection Paused' }); + } + + if (req.headers['content-type'] === 'application/json') { + if (cots.length === 0) return res.json({ status: 200, message: 'No features found' }); + + console.error(cots[0].to_xml()); + pooledClient.tak.write(cots); + for (const cot of cots) config.conns.cot(pooledClient.conn, cot); + + // TODO Only GeoJSON Features go to Dynamo, this should also store CoT XML + // @ts-ignore + if (layer.logging && req.query.logging !== false) ddb.queue(req.body.features.map((feat: Feature) => { + const item: QueueItem = { + id: String(feat.id), + layer: layer.id, + type: feat.type, + // @ts-ignore + properties: feat.properties, + geometry: feat.geometry + } + + return item; + })); + } else if (layer.connection && req.headers['content-type'] === 'application/xml') { + pooledClient.tak.write_xml(req.body); + } else { + throw new Err(400, null, 'Unsupported Content-Type'); + } + res.json({ status: 200, message: 'Submitted' diff --git a/api/routes/marti-mission-logs.ts b/api/routes/marti-mission-logs.ts index 40cdc9ce0..fc400b629 100644 --- a/api/routes/marti-mission-logs.ts +++ b/api/routes/marti-mission-logs.ts @@ -46,4 +46,30 @@ export default async function router(schema: any, config: Config) { return Err.respond(err, res); } }); + + await schema.delete('/marti/missions/:name/log/:log', { + name: 'Delete Log', + group: 'MartiMissionLog', + auth: 'user', + ':name': 'string', + ':log': 'string', + description: 'Helper API to delete a log', + res: 'res.Standard.json' + }, async (req: AuthRequest, res: Response) => { + try { + const user = await Auth.as_user(config.models, req); + + const auth = (await config.models.Profile.from(user.email)).auth; + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(auth.cert, auth.key)); + + await api.MissionLog.delete(req.params.log); + + return res.json({ + status: 200, + message: 'Log Entry Deleted' + }); + } catch (err) { + return Err.respond(err, res); + } + }); } diff --git a/api/routes/marti-mission.ts b/api/routes/marti-mission.ts index 38e1ad3cf..cebae67ac 100644 --- a/api/routes/marti-mission.ts +++ b/api/routes/marti-mission.ts @@ -36,7 +36,7 @@ export default async function router(schema: any, config: Config) { end: { type: 'string' } } }, - res: 'res.Marti.json' + res: 'res.MartiMission.json' }, async (req: AuthRequest, res: Response) => { try { await Auth.is_auth(config.models, req); @@ -175,6 +175,75 @@ export default async function router(schema: any, config: Config) { } }); + await schema.get('/marti/missions/:name/subscription', { + name: 'Mission Subscription', + group: 'MartiMissions', + auth: 'user', + ':name': 'string', + description: 'Return subscriptions associated with your user', + res: { type: 'object' } + }, async (req: AuthRequest, res: Response) => { + try { + await Auth.is_auth(config.models, req); + + const user = await Auth.as_user(config.models, req); + const auth = (await config.models.Profile.from(user.email)).auth; + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(auth.cert, auth.key)); + + const sub = await api.Mission.subscription(String(req.params.name)); + + return res.json(sub); + } catch (err) { + return Err.respond(err, res); + } + }); + + await schema.get('/marti/missions/:name/subscriptions', { + name: 'Mission Subscriptions', + group: 'MartiMissions', + auth: 'user', + ':name': 'string', + description: 'List subscriptions associated with a mission', + res: 'res.Marti.json' + }, async (req: AuthRequest, res: Response) => { + try { + await Auth.is_auth(config.models, req); + + const user = await Auth.as_user(config.models, req); + const auth = (await config.models.Profile.from(user.email)).auth; + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(auth.cert, auth.key)); + + const subs = await api.Mission.subscriptions(String(req.params.name)); + + return res.json(subs); + } catch (err) { + return Err.respond(err, res); + } + }); + + await schema.get('/marti/missions/:name/subscriptions/roles', { + name: 'Mission Subscriptions', + group: 'MartiMissions', + auth: 'user', + ':name': 'string', + description: 'List subscriptions associated with a mission', + res: 'res.Marti.json' + }, async (req: AuthRequest, res: Response) => { + try { + await Auth.is_auth(config.models, req); + + const user = await Auth.as_user(config.models, req); + const auth = (await config.models.Profile.from(user.email)).auth; + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(auth.cert, auth.key)); + + const roles = await api.Mission.subscriptionRoles(String(req.params.name)); + + return res.json(roles); + } catch (err) { + return Err.respond(err, res); + } + }); + await schema.get('/marti/missions/:name/contacts', { name: 'Mission Contacts', group: 'MartiMissions', @@ -265,7 +334,7 @@ export default async function router(schema: any, config: Config) { }); await schema.delete('/marti/missions/:name/upload/:hash', { - name: 'Mission Upload Delete', + nMissionSubscriptioname: 'Mission Upload Delete', group: 'MartiMissions', auth: 'user', ':name': 'string', diff --git a/api/routes/profile-asset.ts b/api/routes/profile-asset.ts index d28be6b9f..30cb82687 100644 --- a/api/routes/profile-asset.ts +++ b/api/routes/profile-asset.ts @@ -56,17 +56,17 @@ export default async function router(schema: any, config: Config) { const passThrough = new Stream.PassThrough(); file.pipe(passThrough); - assets.push(S3.put(`profile/${user.email}/${blob.filename}`, passThrough)); + assets.push((async () => { + await S3.put(`profile/${user.email}/${blob.filename}`, passThrough); + await Batch.submitUser(config, user.email, `${blob.filename}`, req.body); + })()); } catch (err) { return Err.respond(err, res); } }).on('finish', async () => { try { if (!assets.length) throw new Err(400, null, 'No Asset Provided'); - - await assets[0]; - - await Batch.submitUser(config, user.email, `${req.params.asset}.${req.params.ext}`, req.body); + await Promise.all(assets); return res.json({ status: 200, diff --git a/api/routes/profile-overlays.ts b/api/routes/profile-overlays.ts index d2b913d4a..3c53c720e 100644 --- a/api/routes/profile-overlays.ts +++ b/api/routes/profile-overlays.ts @@ -3,6 +3,13 @@ import Auth from '../lib/auth.js'; import { Response } from 'express'; import { AuthRequest } from '@tak-ps/blueprint-login'; import Config from '../lib/config.js'; +import { AuthResource } from '@tak-ps/blueprint-login'; +import { sql } from 'drizzle-orm'; +import TAKAPI, { + APIAuthToken, + APIAuthCertificate, + APIAuthPassword +} from '../lib/tak-api.js'; export default async function router(schema: any, config: Config) { await schema.get('/profile/overlay', { @@ -41,6 +48,14 @@ export default async function router(schema: any, config: Config) { username: user.email }); + if (req.body.mode === 'mission') { + const profile = await config.models.Profile.from(user.email); + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(profile.auth.cert, profile.auth.key)); + + const mission = await api.Mission.getGuid(overlay.mode_id, { uid: user.email }); + await api.Mission.subscribe(mission.name, { uid: user.email }); + } + return res.json(overlay); } catch (err) { return Err.respond(err, res); @@ -72,6 +87,13 @@ export default async function router(schema: any, config: Config) { await config.models.ProfileOverlay.delete(overlay.id); + if (overlay.mode === 'mission') { + const profile = await config.models.Profile.from(user.email); + const api = await TAKAPI.init(new URL(String(config.server.api)), new APIAuthCertificate(profile.auth.cert, profile.auth.key)); + const mission = await api.Mission.getGuid(overlay.mode_id, { uid: user.email }); + await api.Mission.unsubscribe(mission.name, { uid: user.email }); + } + return res.json({ status: 200, message: 'Overlay Removed' diff --git a/api/schema/connection_sinks.json b/api/schema/connection_sinks.json index 4b9a2e92c..00ca8ec7e 100644 --- a/api/schema/connection_sinks.json +++ b/api/schema/connection_sinks.json @@ -11,15 +11,15 @@ "updated": { "$ref": "./connection_sinks/updated.json" }, + "name": { + "$ref": "./connection_sinks/name.json" + }, "enabled": { "$ref": "./connection_sinks/enabled.json" }, "connection": { "$ref": "./connection_sinks/connection.json" }, - "name": { - "$ref": "./connection_sinks/name.json" - }, "type": { "$ref": "./connection_sinks/type.json" }, @@ -34,9 +34,9 @@ "id", "created", "updated", + "name", "enabled", "connection", - "name", "type", "body", "logging" diff --git a/api/schema/connections/auth.json b/api/schema/connections/auth.json index bae581de8..737b0c4bf 100644 --- a/api/schema/connections/auth.json +++ b/api/schema/connections/auth.json @@ -1,5 +1,5 @@ { "type": "object", - "description": "Authentication settings for the connection", + "description": "", "$comment": "json" } \ No newline at end of file diff --git a/api/schema/connections/created.json b/api/schema/connections/created.json index 26814e7fa..788d7af55 100644 --- a/api/schema/connections/created.json +++ b/api/schema/connections/created.json @@ -1,6 +1,6 @@ { "type": "string", - "description": "Creation TimeStamp", + "description": "", "$comment": "timestamptz", "format": "date-time" } \ No newline at end of file diff --git a/api/schema/connections/description.json b/api/schema/connections/description.json index 617652769..7fb37f63c 100644 --- a/api/schema/connections/description.json +++ b/api/schema/connections/description.json @@ -1,5 +1,5 @@ { "type": "string", - "description": "Human readable description", + "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/connections/enabled.json b/api/schema/connections/enabled.json index 9709e3c6a..796f691f2 100644 --- a/api/schema/connections/enabled.json +++ b/api/schema/connections/enabled.json @@ -1,5 +1,5 @@ { "type": "boolean", - "description": "Is the connection passing CoT messages from layers", + "description": "", "$comment": "bool" } \ No newline at end of file diff --git a/api/schema/connections/id.json b/api/schema/connections/id.json index 00f2bd97e..a38a156c5 100644 --- a/api/schema/connections/id.json +++ b/api/schema/connections/id.json @@ -1,5 +1,5 @@ { "type": "number", - "description": "Unique Connection ID", + "description": "", "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/connections/name.json b/api/schema/connections/name.json index 383f316fe..7fb37f63c 100644 --- a/api/schema/connections/name.json +++ b/api/schema/connections/name.json @@ -1,5 +1,5 @@ { "type": "string", - "description": "Unique human readable name", + "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/connections/updated.json b/api/schema/connections/updated.json index 5f71ede2d..788d7af55 100644 --- a/api/schema/connections/updated.json +++ b/api/schema/connections/updated.json @@ -1,6 +1,6 @@ { "type": "string", - "description": "Updated TimeStamp", + "description": "", "$comment": "timestamptz", "format": "date-time" } \ No newline at end of file diff --git a/api/schema/data.json b/api/schema/data.json index 98c633020..23eab658a 100644 --- a/api/schema/data.json +++ b/api/schema/data.json @@ -31,6 +31,9 @@ }, "mission_groups": { "$ref": "./data/mission_groups.json" + }, + "mission_role": { + "$ref": "./data/mission_role.json" } }, "required": [ @@ -43,6 +46,7 @@ "connection", "mission_sync", "assets", - "mission_groups" + "mission_groups", + "mission_role" ] } \ No newline at end of file diff --git a/api/schema/data/mission_role.json b/api/schema/data/mission_role.json new file mode 100644 index 000000000..6b3b0c07e --- /dev/null +++ b/api/schema/data/mission_role.json @@ -0,0 +1,10 @@ +{ + "type": "string", + "description": "", + "$comment": "text", + "enum": [ + "MISSION_OWNER", + "MISSION_SUBSCRIBER", + "MISSION_READONLY_SUBSCRIBER" + ] +} \ No newline at end of file diff --git a/api/schema/icons.json b/api/schema/icons.json index f78dd47e6..5b8ec1b45 100644 --- a/api/schema/icons.json +++ b/api/schema/icons.json @@ -2,14 +2,8 @@ "type": "object", "additionalProperties": false, "properties": { - "iconset": { - "$ref": "./icons/iconset.json" - }, - "name": { - "$ref": "./icons/name.json" - }, - "type2525b": { - "$ref": "./icons/type2525b.json" + "id": { + "$ref": "./icons/id.json" }, "created": { "$ref": "./icons/created.json" @@ -17,24 +11,30 @@ "updated": { "$ref": "./icons/updated.json" }, + "name": { + "$ref": "./icons/name.json" + }, + "iconset": { + "$ref": "./icons/iconset.json" + }, + "type2525b": { + "$ref": "./icons/type2525b.json" + }, "data": { "$ref": "./icons/data.json" }, "path": { "$ref": "./icons/path.json" - }, - "id": { - "$ref": "./icons/id.json" } }, "required": [ - "iconset", - "name", - "type2525b", + "id", "created", "updated", + "name", + "iconset", + "type2525b", "data", - "path", - "id" + "path" ] } \ No newline at end of file diff --git a/api/schema/iconsets.json b/api/schema/iconsets.json index f2f91bd2d..bb4da77ea 100644 --- a/api/schema/iconsets.json +++ b/api/schema/iconsets.json @@ -5,6 +5,12 @@ "uid": { "$ref": "./iconsets/uid.json" }, + "created": { + "$ref": "./iconsets/created.json" + }, + "updated": { + "$ref": "./iconsets/updated.json" + }, "version": { "$ref": "./iconsets/version.json" }, @@ -28,16 +34,12 @@ }, "skip_resize": { "$ref": "./iconsets/skip_resize.json" - }, - "created": { - "$ref": "./iconsets/created.json" - }, - "updated": { - "$ref": "./iconsets/updated.json" } }, "required": [ "uid", + "created", + "updated", "version", "name", "default_group", @@ -45,8 +47,6 @@ "default_hostile", "default_neutral", "default_unknown", - "skip_resize", - "created", - "updated" + "skip_resize" ] } \ No newline at end of file diff --git a/api/schema/imports.json b/api/schema/imports.json index 32c37dbcf..6fc36f1a8 100644 --- a/api/schema/imports.json +++ b/api/schema/imports.json @@ -11,6 +11,9 @@ "updated": { "$ref": "./imports/updated.json" }, + "name": { + "$ref": "./imports/name.json" + }, "status": { "$ref": "./imports/status.json" }, @@ -20,33 +23,30 @@ "result": { "$ref": "./imports/result.json" }, - "name": { - "$ref": "./imports/name.json" - }, "username": { "$ref": "./imports/username.json" }, "mode": { "$ref": "./imports/mode.json" }, - "config": { - "$ref": "./imports/config.json" - }, "mode_id": { "$ref": "./imports/mode_id.json" + }, + "config": { + "$ref": "./imports/config.json" } }, "required": [ "id", "created", "updated", + "name", "status", "error", "result", - "name", "username", "mode", - "config", - "mode_id" + "mode_id", + "config" ] } \ No newline at end of file diff --git a/api/schema/layer_alerts/layer.json b/api/schema/layer_alerts/layer.json index fdff5e5ef..a38a156c5 100644 --- a/api/schema/layer_alerts/layer.json +++ b/api/schema/layer_alerts/layer.json @@ -1,5 +1,5 @@ { "type": "number", "description": "", - "$comment": "int8" + "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/layers.json b/api/schema/layers.json index 413aa7afc..83de51bf3 100644 --- a/api/schema/layers.json +++ b/api/schema/layers.json @@ -5,15 +5,15 @@ "id": { "$ref": "./layers/id.json" }, - "name": { - "$ref": "./layers/name.json" - }, "created": { "$ref": "./layers/created.json" }, "updated": { "$ref": "./layers/updated.json" }, + "name": { + "$ref": "./layers/name.json" + }, "description": { "$ref": "./layers/description.json" }, @@ -59,9 +59,9 @@ }, "required": [ "id", - "name", "created", "updated", + "name", "description", "enabled", "enabled_styles", diff --git a/api/schema/layers/connection.json b/api/schema/layers/connection.json index 167fb4125..a38a156c5 100644 --- a/api/schema/layers/connection.json +++ b/api/schema/layers/connection.json @@ -1,8 +1,5 @@ { - "type": [ - "number", - "null" - ], + "type": "number", "description": "", "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/layers/created.json b/api/schema/layers/created.json index 26814e7fa..788d7af55 100644 --- a/api/schema/layers/created.json +++ b/api/schema/layers/created.json @@ -1,6 +1,6 @@ { "type": "string", - "description": "Creation TimeStamp", + "description": "", "$comment": "timestamptz", "format": "date-time" } \ No newline at end of file diff --git a/api/schema/layers/cron.json b/api/schema/layers/cron.json index 7fb37f63c..ba5e18a3b 100644 --- a/api/schema/layers/cron.json +++ b/api/schema/layers/cron.json @@ -1,5 +1,8 @@ { - "type": "string", + "type": [ + "string", + "null" + ], "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/layers/data.json b/api/schema/layers/data.json index 167fb4125..a38a156c5 100644 --- a/api/schema/layers/data.json +++ b/api/schema/layers/data.json @@ -1,8 +1,5 @@ { - "type": [ - "number", - "null" - ], + "type": "number", "description": "", "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/layers/description.json b/api/schema/layers/description.json index 617652769..7fb37f63c 100644 --- a/api/schema/layers/description.json +++ b/api/schema/layers/description.json @@ -1,5 +1,5 @@ { "type": "string", - "description": "Human readable description", + "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/layers/enabled.json b/api/schema/layers/enabled.json index 358234faf..796f691f2 100644 --- a/api/schema/layers/enabled.json +++ b/api/schema/layers/enabled.json @@ -1,5 +1,5 @@ { "type": "boolean", - "description": "Is the layer passing CoT messages", + "description": "", "$comment": "bool" } \ No newline at end of file diff --git a/api/schema/layers/enabled_styles.json b/api/schema/layers/enabled_styles.json index f6c6dbc2f..796f691f2 100644 --- a/api/schema/layers/enabled_styles.json +++ b/api/schema/layers/enabled_styles.json @@ -1,5 +1,5 @@ { "type": "boolean", - "description": "Is styling enabled for the layer", + "description": "", "$comment": "bool" } \ No newline at end of file diff --git a/api/schema/layers/id.json b/api/schema/layers/id.json index 73186f9ba..a38a156c5 100644 --- a/api/schema/layers/id.json +++ b/api/schema/layers/id.json @@ -1,5 +1,5 @@ { "type": "number", - "description": "Unique Layer ID", + "description": "", "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/layers/name.json b/api/schema/layers/name.json index 383f316fe..7fb37f63c 100644 --- a/api/schema/layers/name.json +++ b/api/schema/layers/name.json @@ -1,5 +1,5 @@ { "type": "string", - "description": "Unique human readable name", + "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/layers/styles.json b/api/schema/layers/styles.json index 938e3e23f..737b0c4bf 100644 --- a/api/schema/layers/styles.json +++ b/api/schema/layers/styles.json @@ -1,5 +1,5 @@ { "type": "object", - "description": "Styling rules for the layer", + "description": "", "$comment": "json" } \ No newline at end of file diff --git a/api/schema/layers/updated.json b/api/schema/layers/updated.json index 5f71ede2d..788d7af55 100644 --- a/api/schema/layers/updated.json +++ b/api/schema/layers/updated.json @@ -1,6 +1,6 @@ { "type": "string", - "description": "Updated TimeStamp", + "description": "", "$comment": "timestamptz", "format": "date-time" } \ No newline at end of file diff --git a/api/schema/profile_overlays/id.json b/api/schema/profile_overlays/id.json index fdff5e5ef..a38a156c5 100644 --- a/api/schema/profile_overlays/id.json +++ b/api/schema/profile_overlays/id.json @@ -1,5 +1,5 @@ { "type": "number", "description": "", - "$comment": "int8" + "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/profile_overlays/mode_id.json b/api/schema/profile_overlays/mode_id.json index 167fb4125..ba5e18a3b 100644 --- a/api/schema/profile_overlays/mode_id.json +++ b/api/schema/profile_overlays/mode_id.json @@ -1,8 +1,8 @@ { "type": [ - "number", + "string", "null" ], "description": "", - "$comment": "int4" + "$comment": "text" } \ No newline at end of file diff --git a/api/schema/profile_overlays/opacity.json b/api/schema/profile_overlays/opacity.json index 6e2fe0ca7..a38a156c5 100644 --- a/api/schema/profile_overlays/opacity.json +++ b/api/schema/profile_overlays/opacity.json @@ -1,5 +1,5 @@ { "type": "number", "description": "", - "$comment": "float8" + "$comment": "int4" } \ No newline at end of file diff --git a/api/schema/profile_overlays/username.json b/api/schema/profile_overlays/username.json index ba5e18a3b..7fb37f63c 100644 --- a/api/schema/profile_overlays/username.json +++ b/api/schema/profile_overlays/username.json @@ -1,8 +1,5 @@ { - "type": [ - "string", - "null" - ], + "type": "string", "description": "", "$comment": "text" } \ No newline at end of file diff --git a/api/schema/profile_subscriptions.json b/api/schema/profile_subscriptions.json new file mode 100644 index 000000000..19f848bec --- /dev/null +++ b/api/schema/profile_subscriptions.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "./profile_subscriptions/id.json" + }, + "username": { + "$ref": "./profile_subscriptions/username.json" + }, + "created": { + "$ref": "./profile_subscriptions/created.json" + }, + "updated": { + "$ref": "./profile_subscriptions/updated.json" + }, + "mission": { + "$ref": "./profile_subscriptions/mission.json" + }, + "guid": { + "$ref": "./profile_subscriptions/guid.json" + } + }, + "required": [ + "id", + "username", + "created", + "updated", + "mission", + "guid" + ] +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/created.json b/api/schema/profile_subscriptions/created.json new file mode 100644 index 000000000..ea7cabe61 --- /dev/null +++ b/api/schema/profile_subscriptions/created.json @@ -0,0 +1,6 @@ +{ + "type": "string", + "format": "date-time", + "description": "", + "$comment": "timestamptz" +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/guid.json b/api/schema/profile_subscriptions/guid.json new file mode 100644 index 000000000..7fb37f63c --- /dev/null +++ b/api/schema/profile_subscriptions/guid.json @@ -0,0 +1,5 @@ +{ + "type": "string", + "description": "", + "$comment": "text" +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/id.json b/api/schema/profile_subscriptions/id.json new file mode 100644 index 000000000..a38a156c5 --- /dev/null +++ b/api/schema/profile_subscriptions/id.json @@ -0,0 +1,5 @@ +{ + "type": "number", + "description": "", + "$comment": "int4" +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/mission.json b/api/schema/profile_subscriptions/mission.json new file mode 100644 index 000000000..7fb37f63c --- /dev/null +++ b/api/schema/profile_subscriptions/mission.json @@ -0,0 +1,5 @@ +{ + "type": "string", + "description": "", + "$comment": "text" +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/updated.json b/api/schema/profile_subscriptions/updated.json new file mode 100644 index 000000000..ea7cabe61 --- /dev/null +++ b/api/schema/profile_subscriptions/updated.json @@ -0,0 +1,6 @@ +{ + "type": "string", + "format": "date-time", + "description": "", + "$comment": "timestamptz" +} \ No newline at end of file diff --git a/api/schema/profile_subscriptions/username.json b/api/schema/profile_subscriptions/username.json new file mode 100644 index 000000000..7fb37f63c --- /dev/null +++ b/api/schema/profile_subscriptions/username.json @@ -0,0 +1,5 @@ +{ + "type": "string", + "description": "", + "$comment": "text" +} \ No newline at end of file diff --git a/api/schema/req.body.CreateData.json b/api/schema/req.body.CreateData.json index 4cdf7dace..7d224133d 100644 --- a/api/schema/req.body.CreateData.json +++ b/api/schema/req.body.CreateData.json @@ -18,6 +18,9 @@ "mission_groups": { "$ref": "./data/mission_groups.json" }, + "mission_role": { + "$ref": "./data/mission_role.json" + }, "description": { "$ref": "./data/description.json" } diff --git a/api/schema/req.body.CreateProfileSubscription.json b/api/schema/req.body.CreateProfileSubscription.json new file mode 100644 index 000000000..a5d385b5e --- /dev/null +++ b/api/schema/req.body.CreateProfileSubscription.json @@ -0,0 +1,16 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "mission": { + "$ref": "./profile_subscriptions/mission.json" + }, + "guid": { + "$ref": "./profile_subscriptions/guid.json" + } + }, + "required": [ + "mission", + "guid" + ] +} diff --git a/api/schema/req.query.ListLayers.json b/api/schema/req.query.ListLayers.json index acc0c1d86..92be4b483 100644 --- a/api/schema/req.query.ListLayers.json +++ b/api/schema/req.query.ListLayers.json @@ -36,6 +36,10 @@ ], "description": "Field to sort order by" }, + "data": { + "type": "integer", + "description": "Limit returned layers to those attached to a given data sync" + }, "connection": { "type": "integer", "description": "Limit returned layers to those attached to a given connection" diff --git a/api/schema/res.Data.json b/api/schema/res.Data.json index 41ddf4a79..2b9f9ff56 100644 --- a/api/schema/res.Data.json +++ b/api/schema/res.Data.json @@ -28,6 +28,9 @@ "mission_groups": { "$ref": "./data/mission_groups.json" }, + "mission_role": { + "$ref": "./data/mission_role.json" + }, "assets": { "$ref": "./data/assets.json" }, diff --git a/api/schema/res.ListProfileSubscriptions.json b/api/schema/res.ListProfileSubscriptions.json new file mode 100644 index 000000000..ffa59ba09 --- /dev/null +++ b/api/schema/res.ListProfileSubscriptions.json @@ -0,0 +1,15 @@ +{ + "type": "object", + "required": [ + "total", + "items" + ], + "properties": { + "total": { + "type": "integer" + }, + "items": { + "$ref": "./res.ProfileSubscription.json" + } + } +} diff --git a/api/schema/res.MartiMission.json b/api/schema/res.MartiMission.json new file mode 100644 index 000000000..50c7cdcdc --- /dev/null +++ b/api/schema/res.MartiMission.json @@ -0,0 +1,3 @@ +{ + "type": "object" +} diff --git a/api/schema/res.ProfileSubscription.json b/api/schema/res.ProfileSubscription.json new file mode 100644 index 000000000..ffa26d5d4 --- /dev/null +++ b/api/schema/res.ProfileSubscription.json @@ -0,0 +1,28 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "./profile_subscriptions/id.json" + }, + "created": { + "$ref": "./profile_subscriptions/created.json" + }, + "updated": { + "$ref": "./profile_subscriptions/updated.json" + }, + "mission": { + "$ref": "./profile_subscriptions/mission.json" + }, + "guid": { + "$ref": "./profile_subscriptions/guid.json" + } + }, + "required": [ + "id", + "created", + "updated", + "mission", + "guid" + ] +} diff --git a/api/test/fixtures/get_schema.json b/api/test/fixtures/get_schema.json index 7401dc2dc..65c30315c 100644 --- a/api/test/fixtures/get_schema.json +++ b/api/test/fixtures/get_schema.json @@ -19,12 +19,12 @@ "query": false, "res": true }, - "GET /connection/:connectionid/channel": { + "PUT /basemap": { "body": false, "query": false, "res": true }, - "PUT /basemap": { + "GET /connection/:connectionid/channel": { "body": false, "query": false, "res": true @@ -64,17 +64,12 @@ "query": true, "res": true }, - "POST /connection/:connectionid/sink": { - "body": true, - "query": false, - "res": true - }, "POST /connection/:connectionid/token": { "body": true, "query": false, "res": true }, - "POST /basemap": { + "POST /connection/:connectionid/sink": { "body": true, "query": false, "res": true @@ -84,6 +79,11 @@ "query": false, "res": true }, + "POST /basemap": { + "body": true, + "query": false, + "res": true + }, "POST /connection/:connectionid/data/:dataid/asset": { "body": false, "query": false, @@ -139,13 +139,13 @@ "query": false, "res": true }, - "POST /connection/:connectionid/data/:dataid/asset/:asset.:ext": { - "body": false, + "POST /connection": { + "body": true, "query": false, "res": true }, - "POST /connection": { - "body": true, + "POST /connection/:connectionid/data/:dataid/asset/:asset.:ext": { + "body": false, "query": false, "res": true }, @@ -219,16 +219,6 @@ "query": false, "res": true }, - "GET /basemap/:basemapid": { - "body": false, - "query": true, - "res": true - }, - "GET /basemap/:basemapid/tiles/:z/:x/:y": { - "body": false, - "query": false, - "res": false - }, "PUT /import/:import": { "body": false, "query": false, @@ -244,14 +234,19 @@ "query": false, "res": true }, - "GET /connection/:connectionid/data": { + "GET /basemap/:basemapid": { "body": false, "query": true, "res": true }, - "DELETE /basemap/:basemapid": { + "GET /basemap/:basemapid/tiles/:z/:x/:y": { "body": false, "query": false, + "res": false + }, + "GET /connection/:connectionid/data": { + "body": false, + "query": true, "res": true }, "GET /layer/:layerid/query": { @@ -259,17 +254,22 @@ "query": true, "res": true }, + "DELETE /basemap/:basemapid": { + "body": false, + "query": false, + "res": true + }, "GET /layer/:layerid/alert": { "body": false, "query": true, "res": true }, - "GET /layer/:layerid/query/:featid": { + "GET /import/:import": { "body": false, "query": false, "res": true }, - "GET /import/:import": { + "GET /layer/:layerid/query/:featid": { "body": false, "query": false, "res": true @@ -319,26 +319,31 @@ "query": false, "res": true }, - "GET /marti/missions/:name": { - "body": false, - "query": true, - "res": true - }, "PATCH /import/:import": { "body": true, "query": false, "res": true }, - "GET /marti/group": { + "GET /marti/missions/:name": { "body": false, "query": true, "res": true }, + "DELETE /marti/missions/:name/log/:log": { + "body": false, + "query": false, + "res": true + }, "DELETE /layer/:layerid/alert": { "body": false, "query": false, "res": true }, + "GET /marti/group": { + "body": false, + "query": true, + "res": true + }, "GET /layer": { "body": false, "query": true, @@ -354,23 +359,23 @@ "query": false, "res": true }, - "PUT /marti/group": { - "body": true, - "query": true, - "res": true - }, "DELETE /layer/:layerid/alert/:alertid": { "body": false, "query": false, "res": true }, + "PUT /marti/group": { + "body": true, + "query": true, + "res": true + }, "POST /marti/missions/:name": { "body": false, "query": true, "res": true }, - "GET /profile/chat": { - "body": false, + "PATCH /connection/:connectionid/data/:dataid": { + "body": true, "query": false, "res": true }, @@ -379,8 +384,8 @@ "query": false, "res": true }, - "PATCH /connection/:connectionid/data/:dataid": { - "body": true, + "GET /profile/chat": { + "body": false, "query": false, "res": true }, @@ -394,7 +399,7 @@ "query": true, "res": true }, - "GET /marti/missions/:name/contacts": { + "GET /marti/missions/:name/subscription": { "body": false, "query": false, "res": true @@ -409,22 +414,17 @@ "query": false, "res": true }, - "POST /marti/missions/:name/upload": { - "body": false, - "query": true, - "res": true - }, "GET /connection/:connectionid/data/:dataid": { "body": false, "query": false, "res": true }, - "GET /profile/job/:jobid": { + "GET /marti/missions/:name/subscriptions": { "body": false, "query": false, "res": true }, - "POST /profile/asset/:asset.:ext": { + "GET /profile/job/:jobid": { "body": false, "query": false, "res": true @@ -434,27 +434,37 @@ "query": true, "res": true }, + "POST /profile/asset/:asset.:ext": { + "body": false, + "query": false, + "res": true + }, "POST /layer": { "body": true, "query": false, "res": true }, - "POST /marti/signClient": { + "PATCH /iconset/:iconset": { "body": true, "query": false, "res": true }, - "PATCH /iconset/:iconset": { + "POST /marti/signClient": { "body": true, "query": false, "res": true }, - "DELETE /marti/missions/:name/upload/:hash": { + "DELETE /connection/:connectionid/data/:dataid": { "body": false, "query": false, "res": true }, - "DELETE /connection/:connectionid/data/:dataid": { + "GET /marti/missions/:name/subscriptions/roles": { + "body": false, + "query": false, + "res": true + }, + "GET /marti/missions/:name/contacts": { "body": false, "query": false, "res": true @@ -484,16 +494,21 @@ "query": false, "res": true }, - "GET /profile/overlay": { + "GET /profile": { "body": false, "query": false, "res": true }, - "GET /profile": { + "GET /profile/overlay": { "body": false, "query": false, "res": true }, + "POST /marti/missions/:name/upload": { + "body": false, + "query": true, + "res": true + }, "GET /server": { "body": false, "query": false, @@ -504,6 +519,11 @@ "query": true, "res": true }, + "DELETE /marti/missions/:name/upload/:hash": { + "body": false, + "query": false, + "res": true + }, "GET /task": { "body": false, "query": false, @@ -529,12 +549,17 @@ "query": false, "res": true }, + "PATCH /server": { + "body": true, + "query": false, + "res": true + }, "GET /layer/:layerid/task": { "body": false, "query": false, "res": true }, - "PATCH /server": { + "POST /iconset/:iconset/icon": { "body": true, "query": false, "res": true @@ -549,11 +574,6 @@ "query": false, "res": true }, - "POST /iconset/:iconset/icon": { - "body": true, - "query": false, - "res": true - }, "GET /token": { "body": false, "query": true, @@ -564,12 +584,12 @@ "query": false, "res": true }, - "DELETE /iconset/:iconset": { + "GET /layer/:layerid/task/logs": { "body": false, "query": false, "res": true }, - "GET /layer/:layerid/task/logs": { + "DELETE /iconset/:iconset": { "body": false, "query": false, "res": true diff --git a/api/tsconfig.json b/api/tsconfig.json index 645825f59..aaf6c046a 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -21,6 +21,7 @@ "include": [ "index.ts", "routes/**/*", + "test/**/*", "lib/**/*" ] } diff --git a/api/web/package-lock.json b/api/web/package-lock.json index bef48d1e5..f81f2618e 100644 --- a/api/web/package-lock.json +++ b/api/web/package-lock.json @@ -910,9 +910,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "peer": true, "engines": { @@ -1068,9 +1068,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz", - "integrity": "sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", "cpu": [ "arm" ], @@ -1081,9 +1081,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.10.0.tgz", - "integrity": "sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", "cpu": [ "arm64" ], @@ -1094,9 +1094,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.10.0.tgz", - "integrity": "sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", "cpu": [ "arm64" ], @@ -1107,9 +1107,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.10.0.tgz", - "integrity": "sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", "cpu": [ "x64" ], @@ -1120,9 +1120,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.10.0.tgz", - "integrity": "sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", "cpu": [ "arm" ], @@ -1133,9 +1133,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.10.0.tgz", - "integrity": "sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", "cpu": [ "arm64" ], @@ -1146,9 +1146,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.10.0.tgz", - "integrity": "sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", "cpu": [ "arm64" ], @@ -1159,9 +1159,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.10.0.tgz", - "integrity": "sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", "cpu": [ "riscv64" ], @@ -1172,9 +1172,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.10.0.tgz", - "integrity": "sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", "cpu": [ "x64" ], @@ -1185,9 +1185,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.10.0.tgz", - "integrity": "sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", "cpu": [ "x64" ], @@ -1198,9 +1198,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.10.0.tgz", - "integrity": "sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", "cpu": [ "arm64" ], @@ -1211,9 +1211,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.10.0.tgz", - "integrity": "sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", "cpu": [ "ia32" ], @@ -1224,9 +1224,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.10.0.tgz", - "integrity": "sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", "cpu": [ "x64" ], @@ -1568,36 +1568,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.18.tgz", - "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/shared": "3.4.18", + "@vue/shared": "3.4.19", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz", - "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "dependencies": { - "@vue/compiler-core": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz", - "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/compiler-core": "3.4.18", - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", "magic-string": "^0.30.6", "postcss": "^8.4.33", @@ -1605,62 +1605,62 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz", - "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "dependencies": { - "@vue/compiler-dom": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", + "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" }, "node_modules/@vue/reactivity": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.18.tgz", - "integrity": "sha512-7uda2/I0jpLiRygprDo5Jxs2HJkOVXcOMlyVlY54yRLxoycBpwGJRwJT9EdGB4adnoqJDXVT2BilUAYwI7qvmg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "dependencies": { - "@vue/shared": "3.4.18" + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.18.tgz", - "integrity": "sha512-7mU9diCa+4e+8/wZ7Udw5pwTH10A11sZ1nldmHOUKJnzCwvZxfJqAtw31mIf4T5H2FsLCSBQT3xgioA9vIjyDQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "dependencies": { - "@vue/reactivity": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.18.tgz", - "integrity": "sha512-2y1Mkzcw1niSfG7z3Qx+2ir9Gb4hdTkZe5p/I8x1aTIKQE0vY0tPAEUPhZm5tx6183gG3D/KwHG728UR0sIufA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "dependencies": { - "@vue/runtime-core": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.18.tgz", - "integrity": "sha512-YJd1wa7mzUN3NRqLEsrwEYWyO+PUBSROIGlCc3J/cvn7Zu6CxhNLgXa8Z4zZ5ja5/nviYO79J1InoPeXgwBTZA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "dependencies": { - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { - "vue": "3.4.18" + "vue": "3.4.19" } }, "node_modules/@vue/shared": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.18.tgz", - "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==" + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" }, "node_modules/@yr/monotone-cubic-spline": { "version": "1.0.3", @@ -1834,9 +1834,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -1854,8 +1854,8 @@ ], "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -2001,9 +2001,9 @@ "peer": true }, "node_modules/core-js": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", - "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2099,9 +2099,9 @@ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "node_modules/electron-to-chromium": { - "version": "1.4.667", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.667.tgz", - "integrity": "sha512-66L3pLlWhTNVUhnmSA5+qDM3fwnXsM6KAqE36e2w4KN0g6pkEtlT5bs41FQtQwVwKnfhNBXiWRLPs30HSxd7Kw==", + "version": "1.4.672", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.672.tgz", + "integrity": "sha512-YYCy+goe3UqZqa3MOQCI5Mx/6HdBLzXL/mkbGCEWL3sP3Z1BP9zqAzeD3YEmLZlespYGFtyM8tRp5i2vfaUGCA==", "dev": true, "peer": true }, @@ -3116,9 +3116,9 @@ } }, "node_modules/maplibre-gl": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.0.0.tgz", - "integrity": "sha512-bzVQ2pdOWITwbE+JHKSiAB/viVBBx4Aa1puydc1xizOWGbvRHD9pXpy3dsaW2ZlbmZKbv9r9sHpcvM9fTLGsKA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.0.1.tgz", + "integrity": "sha512-UF+wI2utIciFXNg6+gYaMe7IGa9fMLzAZM3vdlGilqyWYmuibjcN40yGVgkz2r28//aOLphvtli3TbDEjEqHww==", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -3127,8 +3127,8 @@ "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", - "@maplibre/maplibre-gl-style-spec": "^20.1.0", - "@types/geojson": "^7946.0.13", + "@maplibre/maplibre-gl-style-spec": "^20.1.1", + "@types/geojson": "^7946.0.14", "@types/geojson-vt": "3.2.5", "@types/mapbox__point-geometry": "^0.1.4", "@types/mapbox__vector-tile": "^1.3.4", @@ -3598,9 +3598,9 @@ } }, "node_modules/rollup": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz", - "integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3613,19 +3613,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.10.0", - "@rollup/rollup-android-arm64": "4.10.0", - "@rollup/rollup-darwin-arm64": "4.10.0", - "@rollup/rollup-darwin-x64": "4.10.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.10.0", - "@rollup/rollup-linux-arm64-gnu": "4.10.0", - "@rollup/rollup-linux-arm64-musl": "4.10.0", - "@rollup/rollup-linux-riscv64-gnu": "4.10.0", - "@rollup/rollup-linux-x64-gnu": "4.10.0", - "@rollup/rollup-linux-x64-musl": "4.10.0", - "@rollup/rollup-win32-arm64-msvc": "4.10.0", - "@rollup/rollup-win32-ia32-msvc": "4.10.0", - "@rollup/rollup-win32-x64-msvc": "4.10.0", + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "fsevents": "~2.3.2" } }, @@ -3658,9 +3658,9 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/sass": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", - "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "version": "1.71.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.0.tgz", + "integrity": "sha512-HKKIKf49Vkxlrav3F/w6qRuPcmImGVbIXJ2I3Kg0VMA+3Bav+8yE9G5XmP5lMj6nl4OlqbPftGAscNaNu28b8w==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -4144,9 +4144,9 @@ "dev": true }, "node_modules/vite": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", - "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.3.tgz", + "integrity": "sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==", "dev": true, "dependencies": { "esbuild": "^0.19.3", @@ -4209,15 +4209,15 @@ } }, "node_modules/vue": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.18.tgz", - "integrity": "sha512-0zLRYamFRe0wF4q2L3O24KQzLyLpL64ye1RUToOgOxuWZsb/FhaNRdGmeozdtVYLz6tl94OXLaK7/WQIrVCw1A==", - "dependencies": { - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-sfc": "3.4.18", - "@vue/runtime-dom": "3.4.18", - "@vue/server-renderer": "3.4.18", - "@vue/shared": "3.4.18" + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", + "dependencies": { + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { "typescript": "*" diff --git a/api/web/src/components/CloudTAK/CoTView.vue b/api/web/src/components/CloudTAK/CoTView.vue index fdf89b49e..0025213a3 100644 --- a/api/web/src/components/CloudTAK/CoTView.vue +++ b/api/web/src/components/CloudTAK/CoTView.vue @@ -3,47 +3,45 @@ class='position-absolute end-0 bottom-0 text-white py-2 bg-dark' style='z-index: 1; width: 400px; top: 56px;' > -
-
-
-
-
- - -
+
+
+
+
+ +
-
- +
+
+ - - -
+ +
+
- diff --git a/api/web/src/components/CloudTAK/FeatView.vue b/api/web/src/components/CloudTAK/FeatView.vue index bee2a449e..0261bbd6d 100644 --- a/api/web/src/components/CloudTAK/FeatView.vue +++ b/api/web/src/components/CloudTAK/FeatView.vue @@ -3,19 +3,19 @@ class='position-absolute end-0 bottom-0 text-white py-2 bg-dark' style='z-index: 1; width: 400px; top: 56px;' > -
-
-
-
-
-
- +
+
+
+
+
+ - - -
+ +
+
+
diff --git a/api/web/src/components/CloudTAK/Map.vue b/api/web/src/components/CloudTAK/Map.vue index 008f2fe26..c07471aca 100644 --- a/api/web/src/components/CloudTAK/Map.vue +++ b/api/web/src/components/CloudTAK/Map.vue @@ -1,5 +1,5 @@
+
+ +
import Status from './util/Status.vue'; import PageFooter from './PageFooter.vue'; +import timeDiff from '../timediff.js'; import { TablerNone, TablerBreadCrumb, @@ -100,6 +101,9 @@ export default { if (this.interval) clearInterval(this.interval); }, methods: { + timeDiff(update) { + return timeDiff(update); + }, fetch: async function() { this.loading = true; const url = window.stdurl(`/api/import/${this.$route.params.import}`); @@ -109,21 +113,6 @@ export default { this.loading = false; } }, - timeDiff: function(updated) { - const msPerMinute = 60 * 1000; - const msPerHour = msPerMinute * 60; - const msPerDay = msPerHour * 24; - const msPerMonth = msPerDay * 30; - const msPerYear = msPerDay * 365; - const elapsed = +(new Date()) - updated; - - if (elapsed < msPerMinute) return Math.round(elapsed/1000) + ' seconds ago'; - if (elapsed < msPerHour) return Math.round(elapsed/msPerMinute) + ' minutes ago'; - if (elapsed < msPerDay ) return Math.round(elapsed/msPerHour ) + ' hours ago'; - if (elapsed < msPerMonth) return '~' + Math.round(elapsed/msPerDay) + ' days ago'; - if (elapsed < msPerYear) return '~' + Math.round(elapsed/msPerMonth) + ' months ago'; - return '~' + Math.round(elapsed/msPerYear ) + ' years ago'; - }, }, components: { Status, diff --git a/api/web/src/components/Imports.vue b/api/web/src/components/Imports.vue index 9987814c6..1eae32c4e 100644 --- a/api/web/src/components/Imports.vue +++ b/api/web/src/components/Imports.vue @@ -95,6 +95,8 @@ export default { fetchList: async function() { this.loading = true; const url = window.stdurl('/api/import'); + url.searchParams.append('order', 'desc'); + url.searchParams.append('sort', 'created'); this.list = await window.std(url); this.loading = false; } diff --git a/api/web/src/components/Layers.vue b/api/web/src/components/Layers.vue index bc330fe61..7c1e9ef19 100644 --- a/api/web/src/components/Layers.vue +++ b/api/web/src/components/Layers.vue @@ -92,6 +92,7 @@