import Ajv2019 from 'ajv/dist/2019'; import { CLIENT_TOPIC_PREFIX, CLOUD_TOPIC_PREFIX, DEVICE_TOPIC_PREFIX, DEVICE_TYPE } from './constants'; import * as commonSchema from './schemas/common-schema.json'; import * as deviceStatsSchema from './schemas/device-stats-schema.json'; import * as appStateSchema from './schemas/app-state-schema.json'; import * as appLogsSchema from './schemas/app-logs-schema.json'; import * as statusResponseSchema from './schemas/status-response-schema.json'; import * as signedUrlsRequestSchema from './schemas/signed-urls-request-schema.json'; import * as toDeviceAgentMessageSchema from './schemas/to-device-agent-message-schema.json'; import * as modelsInstallPayloadSchema from './schemas/models-install-payload-schema.json'; import * as appInstallSchema from './schemas/app-install-schema.json'; import * as appUpdateConfigSchema from './schemas/app-update-config-schema.json'; import * as appUninstallSchema from './schemas/app-uninstall-schema.json'; import * as toClientMessageSchema from './schemas/to-client-message-schema.json'; import * as toCloudMessageSchema from './schemas/to-cloud-message-schema.json'; import * as appStateControlSchema from './schemas/app-state-control-schema.json'; import * as appVersionControlSchema from './schemas/app-version-control-schema.json'; import * as appInstallResponseSchema from './schemas/app-install-response-schema.json'; import * as modelsInstallResponseSchema from './schemas/models-install-response-schema.json'; import * as liveUpdatesTogglesSchema from './schemas/live-updates-toggle-schema.json'; import * as deviceActionSchema from './schemas/device-action-schema.json'; import { AppLogsMessage, AppLogsPayload } from './app-logs-schema'; import { AppInstallResponseMessage, AppInstallResponsePayload, AppStateControlMessage, AppStateControlPayload, AppVersionControlInstallPayload, AppVersionControlUpdateConfigPayload, AppVersionControlMessage, AppVersionControlUninstallPayload, ModelsInstallResponseMessage, ModelsInstallResponsePayload } from './app-action-schema'; import { LiveStateUpdatesToggleMessage, LiveStateUpdatesTogglePayload } from './device-agent-action-schema'; import { StatusResponsePayload, ToClientStatusResponseMessage, ToDeviceStatusResponseMessage } from './status-response-schema'; import { AppStateMessage, AppStatePayload } from './app-state-schema'; import { SignedUrlsRequestMessage, SignedUrlsRequestPayload } from './signed-urls-request-schema'; import { DeviceStatsMessage, DeviceStatsPayload } from './device-stats-schema'; import { DeviceActionMessage, DeviceActionPayload } from './device-action-schema'; // Note: the other schemas do not need to be added, because they will // automatically be added in the compile step due to $ref usage (and $id lookup) const ajv = new Ajv2019({ allErrors: true, verbose: true, schemas: [commonSchema] }); export const getToClientTopic = ( deviceUuid: string, deviceType: string = DEVICE_TYPE ) => `${CLIENT_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`; export const getToCloudTopic = ( deviceUuid: string, deviceType: string = DEVICE_TYPE ) => `${CLOUD_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`; export const getToDeviceTopic = ( deviceUuid: string, deviceType: string = DEVICE_TYPE ) => `${DEVICE_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`; /* ============================================================================ To Client Message ============================================================================ */ export type ToClientMessage = | AppLogsMessage | ToClientStatusResponseMessage | AppStateMessage | DeviceStatsMessage; export type ToClientMessagePayload = | AppLogsPayload | AppStatePayload | DeviceStatsPayload | StatusResponsePayload; ajv.addSchema(deviceStatsSchema, 'device-stats-schema.json'); ajv.addSchema(appStateSchema, 'app-state-schema.json'); ajv.addSchema(appLogsSchema, 'app-logs-schema.json'); ajv.addSchema(statusResponseSchema, 'status-response-schema.json'); ajv.addSchema(toClientMessageSchema, 'to-client-message-schema.json'); export const validateToClientMessage = ajv.compile( toClientMessageSchema ); /* ============================================================================ ToCloud Message ============================================================================ */ export type ToCloudMessage = SignedUrlsRequestMessage; export type ToCloudMessagePayload = SignedUrlsRequestPayload; ajv.addSchema(signedUrlsRequestSchema, 'signed-urls-request-schema.json'); export const validateToCloudMessage = ajv.compile(toCloudMessageSchema); /* ============================================================================ To Device Agent Message ============================================================================ */ export type ToDeviceAgentMessage = | AppStateControlMessage | AppVersionControlMessage | LiveStateUpdatesToggleMessage | ToDeviceStatusResponseMessage | AppInstallResponseMessage | ModelsInstallResponseMessage | DeviceActionMessage; export type ToDeviceAgentMessagePayload = | AppStateControlPayload | AppVersionControlInstallPayload | AppVersionControlUninstallPayload | AppVersionControlUpdateConfigPayload | LiveStateUpdatesTogglePayload | StatusResponsePayload | AppInstallResponsePayload | ModelsInstallResponsePayload | DeviceActionPayload; ajv.addSchema(modelsInstallPayloadSchema, 'models-install-payload-schema.json'); ajv.addSchema(appInstallSchema, 'app-install-schema.json'); ajv.addSchema(appUpdateConfigSchema, 'app-update-config-schema.json'); ajv.addSchema(appUninstallSchema, 'app-uninstall-schema.json'); ajv.addSchema(appStateControlSchema, 'app-state-control-schema.json'); ajv.addSchema(appVersionControlSchema, 'app-version-control-schema.json'); ajv.addSchema(appInstallResponseSchema, 'app-install-response-schema.json'); ajv.addSchema( modelsInstallResponseSchema, 'models-install-response-schema.json' ); ajv.addSchema(liveUpdatesTogglesSchema, 'live-updates-toggle-schema.json'); ajv.addSchema(deviceActionSchema, 'device-action-schema.json'); export const validateToDeviceAgentMessage = ajv.compile( toDeviceAgentMessageSchema );