UNPKG

homey-api

Version:
59 lines (48 loc) 1.7 kB
'use strict'; const APIDefinition = require('../APIDefinition'); const HomeyAPIV1 = require('../HomeyAPI/HomeyAPIV1'); const HomeyAPIV2 = require('../HomeyAPI/HomeyAPIV2'); const HomeyAPIV3Local = require('../HomeyAPI/HomeyAPIV3Local'); const HomeyAPIV3Cloud = require('../HomeyAPI/HomeyAPIV3Cloud'); /** * A Homey as returned by {@link AthomCloudAPI}. * @class * @hideconstructor * @memberof AthomCloudAPI */ class Homey extends APIDefinition { /** * @type string */ get id() { return this._id; } /** * This method returns a {@link HomeyAPI} instance matching the Homey's API level and platform. * Additionally, it ensures a session on the Homey during initialization. * @param {object} [opts] * @param {string|array} [opts.strategy] - One string, or an array of {@link HomeyAPI#DISCOVERY_STRATEGIES} strings, to connect to the Homey. * @returns {Promise<HomeyAPI>} */ async authenticate({ strategy, reconnect } = {}) { const HomeyAPI = (() => { if (this.apiVersion === 1) return HomeyAPIV1; if (this.apiVersion === 2) return HomeyAPIV2; if (this.apiVersion === 3 && this.platform === 'local') return HomeyAPIV3Local; if (this.apiVersion === 3 && this.platform === 'cloud') return HomeyAPIV3Cloud; throw new Error(`Unsupported Homey API Version: ${this.apiVersion}`); })(); const homey = new HomeyAPI({ strategy, reconnect, api: this.__api, properties: this.__properties, debug: (...props) => { return this.__api.__debug(`[${HomeyAPI.name}:${this.__properties.id}]`, ...props); }, }); await homey.login(); return homey; } } module.exports = Homey;