node-hue-api
Version:
Philips Hue API Library for Node.js
98 lines (97 loc) • 3.04 kB
JavaScript
;
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()
};
}