UNPKG

@constructorfleet/ultimate-govee

Version:

Library for interacting with Govee devices written in Typescript.

90 lines 4.43 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenApiChannelService = void 0; const common_1 = require("@nestjs/common"); const cqrs_1 = require("@nestjs/cqrs"); const json_stringify_safe_1 = __importDefault(require("json-stringify-safe")); const rxjs_1 = require("rxjs"); const _ultimate_govee_data_1 = require("../../../data"); const device_refresh_event_1 = require("../../devices/cqrs/events/device-refresh.event"); const device_state_command_event_1 = require("../../devices/cqrs/events/device-state-command.event"); const device_status_received_event_1 = require("../../devices/cqrs/events/device-status-received.event"); const channel_service_1 = require("../channel.service"); const openapi_channel_providers_1 = require("./openapi-channel.providers"); let OpenApiChannelService = class OpenApiChannelService extends channel_service_1.ChannelService { constructor(enabled, openapi, eventBus) { super(eventBus, enabled); this.openapi = openapi; this.togglable = true; this.name = 'openapi'; (0, rxjs_1.combineLatest)([this.onConfigChanged$, this.onEnabledChanged$]) .pipe((0, rxjs_1.concatMap)(([openapiData, enabled]) => { if (enabled) { return (0, rxjs_1.from)(this.connect(openapiData)); } return (0, rxjs_1.from)(this.disconnect()); })) .subscribe(); } async onModuleDestroy() { await this.disconnect(); } async disconnect() { await this.openapi.disconnect(); } async connect(config) { this.logger.log('Connecting to OpenAPI channel'); this.openapi.setApiKey(config.apiKey); this.openapi.setMqttCallback(async (message) => { await this.eventBus.publish(new device_status_received_event_1.DeviceStatusReceivedEvent(message)); }); await this.openapi.connect(); } get accountTopic() { return `GA/${this.getConfig()?.apiKey}`; } async handle(event) { if (!this.isEnabled) { return; } switch (true) { case event instanceof device_refresh_event_1.DeviceRefeshEvent: // TODO : Implement once platform is more 'ready' return await Promise.resolve(); case event instanceof device_state_command_event_1.DeviceStateCommandEvent: // TODO : Implement once platform is more 'ready' return await Promise.resolve(); } return await Promise.reject('Unknown event'); } async publishMessage(commandId, topic, payload, debug) { if (debug === true) { this.logger.debug(topic, payload); } return await this.openapi.sendMessage(topic, Buffer.from((0, json_stringify_safe_1.default)(payload))); } }; exports.OpenApiChannelService = OpenApiChannelService; exports.OpenApiChannelService = OpenApiChannelService = __decorate([ (0, cqrs_1.EventsHandler)(device_refresh_event_1.DeviceRefeshEvent, device_state_command_event_1.DeviceStateCommandEvent), (0, common_1.Injectable)(), __param(0, openapi_channel_providers_1.InjectEnabled), __metadata("design:paramtypes", [Boolean, _ultimate_govee_data_1.OpenAPIService, cqrs_1.EventBus]) ], OpenApiChannelService); //# sourceMappingURL=openapi-channel.service.js.map