@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
90 lines • 4.43 kB
JavaScript
;
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