UNPKG

@constructorfleet/ultimate-govee

Version:

Library for interacting with Govee devices written in Typescript.

87 lines 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MqttClientFactoryProvider = exports.InjectMQTTFactory = exports.MqttClientFactoryKey = exports.areConnectionsTheSame = exports.MqttDeserializerProvider = exports.InjectMqttDeserializer = exports.MqttDeserializerKey = exports.LastMqttConnectionProvider = exports.LastMqttClientProvider = exports.LastMqttConnectionKey = exports.LastMqttClientKey = exports.MqttBrokerProvider = exports.InjectMqttBroker = exports.MqttBrokerKey = void 0; const common_1 = require("@nestjs/common"); const mqtt_types_1 = require("./mqtt.types"); const mqtt_client_1 = require("./mqtt.client"); const core_1 = require("@nestjs/core"); let lastMqttClient; let lastConnection; exports.MqttBrokerKey = 'Mqtt.Broker'; exports.InjectMqttBroker = (0, common_1.Inject)(exports.MqttBrokerKey); exports.MqttBrokerProvider = { provide: exports.MqttBrokerKey, inject: [mqtt_types_1.MODULE_OPTIONS_TOKEN], useFactory: (options) => ({ brokerUrl: options._kind === 'combined' ? options.brokerUrl : `${options.protocol}://${options.brokerHost}:${options.brokerPort}`, }), }; exports.LastMqttClientKey = 'Mqtt.Client.Last'; exports.LastMqttConnectionKey = 'Mqtt.Connection.Last'; exports.LastMqttClientProvider = { scope: common_1.Scope.TRANSIENT, provide: exports.LastMqttClientKey, useFactory: () => lastMqttClient, }; exports.LastMqttConnectionProvider = { scope: common_1.Scope.TRANSIENT, provide: exports.LastMqttConnectionKey, useFactory: () => lastConnection, }; exports.MqttDeserializerKey = 'Mqtt.Deserializer'; exports.InjectMqttDeserializer = (0, common_1.Inject)(exports.MqttDeserializerKey); exports.MqttDeserializerProvider = { provide: exports.MqttDeserializerKey, inject: [mqtt_types_1.MODULE_OPTIONS_TOKEN], useFactory: (options) => options.deserializeMessage, }; const areConnectionsTheSame = (connection, otherConnection) => { if (connection === undefined) { if (otherConnection === undefined) { return true; } if (otherConnection !== undefined) { return false; } } else if (otherConnection === undefined) { if (connection === undefined) { return true; } if (connection !== undefined) { return false; } } const keysA = Object.keys(connection ?? {}).sort(); const keysB = Object.keys(otherConnection ?? {}).sort(); if (keysA.length !== keysB.length) { return false; } return keysA.every((key, i) => otherConnection !== undefined && key === keysB[i] && connection[key] === otherConnection[key]); }; exports.areConnectionsTheSame = areConnectionsTheSame; exports.MqttClientFactoryKey = 'Mqtt.Client.Factory'; exports.InjectMQTTFactory = (0, common_1.Inject)('Mqtt.Client.Factory'); exports.MqttClientFactoryProvider = { provide: exports.MqttClientFactoryKey, scope: common_1.Scope.TRANSIENT, inject: [exports.LastMqttClientKey, exports.LastMqttConnectionKey, core_1.ModuleRef], useFactory: (lastClient, lastConnection, moduleRef) => async (connection) => { if ((0, exports.areConnectionsTheSame)(connection, lastConnection) && lastClient.state.connected$) { lastMqttClient = lastClient; return Promise.resolve(lastClient); } if (lastClient !== undefined) { await lastClient.quit(); lastMqttClient = undefined; } lastMqttClient = await moduleRef.create(mqtt_client_1.MqttClient); return lastMqttClient; }, }; //# sourceMappingURL=mqtt.providers.js.map