UNPKG

yandex-cloud-functions-router

Version:
77 lines (76 loc) 3.5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.iotMessageRouter = void 0; const log_1 = require("../helpers/log"); const routerError_1 = require("../models/routerError"); const validateRegistryId = (context, registryIds, message) => { if (registryIds) { const result = registryIds.some((registryId) => registryId === message.details.registry_id); log_1.debug(context.requestId, `Validating reugistry id: ${result ? 'valid' : 'invalid'}`, { request: message.details.registry_id, route: registryIds }); return result; } else { return true; } }; const validateDeviceId = (context, deviceIds, message) => { if (deviceIds) { const result = deviceIds.some((deviceId) => deviceId === message.details.device_id); log_1.debug(context.requestId, `Validating device id: ${result ? 'valid' : 'invalid'}`, { request: message.details.device_id, route: deviceIds }); return result; } else { return true; } }; const validateMqttTopic = (context, mqttTopics, message) => { if (mqttTopics) { const result = mqttTopics.some((mqttTopic) => mqttTopic === message.details.mqtt_topic); log_1.debug(context.requestId, `Validating MQTT topic: ${result ? 'valid' : 'invalid'}`, { request: message.details.mqtt_topic, route: mqttTopics }); return result; } else { return true; } }; const iotMessageRouter = (routes, event, message, context) => __awaiter(void 0, void 0, void 0, function* () { log_1.debug(context.requestId, 'IoT Core processing started', {}); for (const { registryId, deviceId, mqttTopic, handler } of routes) { const matched = validateRegistryId(context, registryId, message) && validateDeviceId(context, deviceId, message) && validateMqttTopic(context, mqttTopic, message); log_1.debug(context.requestId, 'IoT Core matching completed', { matched, message, registryId: registryId !== null && registryId !== void 0 ? registryId : '', deviceId: deviceId !== null && deviceId !== void 0 ? deviceId : '', mqttTopic: mqttTopic !== null && mqttTopic !== void 0 ? mqttTopic : '' }); if (matched) { const result = handler(event, context, message); log_1.debug(context.requestId, 'IoT Core processed', {}); return result instanceof Promise ? result : Promise.resolve(result); } } log_1.log('WARN', context.requestId, 'There is no matched route', {}); throw new routerError_1.NoMatchedRouteError('There is no matched route.'); }); exports.iotMessageRouter = iotMessageRouter;