UNPKG

node-hue-api

Version:
98 lines (97 loc) 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.configurationApi = void 0; const ApiEndpoint_1 = require("./ApiEndpoint"); const UsernamePlaceholder_1 = require("../../placeholders/UsernamePlaceholder"); const hue_bridge_model_1 = require("@peter-murray/hue-bridge-model"); const ApiError_1 = require("../../../ApiError"); const util_1 = require("../../../util"); const instanceChecks = hue_bridge_model_1.model.instanceChecks; const configurationApi = { createUser: new ApiEndpoint_1.ApiEndpoint() .post() .acceptJson() .uri('/') .payload(buildUserPayload) .pureJson() .postProcess(processCreateUser), getConfiguration: new ApiEndpoint_1.ApiEndpoint() .get() .acceptJson() .uri('/<username>/config') .pureJson() .postProcess(createBridgeConfiguration), updateConfiguration: new ApiEndpoint_1.ApiEndpoint() .put() .acceptJson() .uri('/<username>/config') .payload(buildConfigurationPayload) .pureJson() .postProcess(util_1.wasSuccessful), deleteUser: new ApiEndpoint_1.ApiEndpoint() .delete() .acceptJson() .uri('/<username>/config/whitelist/<userid>') .placeholder(new UsernamePlaceholder_1.UsernamePlaceholder('userid')) .pureJson() .postProcess(util_1.wasSuccessful), getFullState: new ApiEndpoint_1.ApiEndpoint() .get() .acceptJson() .uri('/<username>') .pureJson(), getUnauthenticatedConfig: new ApiEndpoint_1.ApiEndpoint() .get() .acceptJson() .uri('/config') .pureJson() .postProcess(processUnauthenticatedData), }; exports.configurationApi = configurationApi; function processCreateUser(data) { if ((0, util_1.wasSuccessful)(data)) { return data[0].success; } else { throw new ApiError_1.ApiError(`Failed to create new user: ${JSON.stringify(data)}`); } } function createBridgeConfiguration(data) { return hue_bridge_model_1.model.createFromBridge('configuration', undefined, data); } function processUnauthenticatedData(data) { return { config: data }; } function buildUserPayload(data) { //TODO utilize the type system //TODO perform validation on the strings here // applicationName 0..20 // deviceName 0...19 const body = { devicetype: `${data.appName}#${data.deviceName}` }; if (data.generateKey) { // @ts-ignore body.generateclientkey = true; } return { type: 'application/json', body: body }; } function buildConfigurationPayload(parameters) { const config = parameters.config; let bridgeConfig; if (instanceChecks.isBridgeConfigurationInstance(config)) { bridgeConfig = config; } else { bridgeConfig = createBridgeConfiguration(config); } return { type: 'application/json', body: bridgeConfig.getHuePayload() }; }