-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
63 lines (53 loc) · 2.33 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'use strict'
const path = require('path')
const domapic = require('domapic-service')
const { debounce } = require('lodash')
const requestPromise = require('request-promise')
const options = require('./lib/options')
const { NOTIFICATIONS_BRIDGE_PORT, API_KEY_HEADER } = require('./lib/statics')
const notificationsApiKey = require('./lib/notificationsApiKey')
const abilitiesBridgeApi = require('./lib/api/abilities-bridge.json')
const Accessories = require('./lib/Accessories')
const AbilitiesBridge = require('./lib/api/AbilitiesBridge')
const Homebridge = require('./lib/Homebridge')
const HomebridgeConfig = require('./lib/HomebridgeConfig')
domapic.createPlugin({
packagePath: path.resolve(__dirname),
customConfig: options
}).then(async dmpcPlugin => {
const notificationsBridgePort = await dmpcPlugin.config.get(NOTIFICATIONS_BRIDGE_PORT)
const accessories = new Accessories(dmpcPlugin)
const abilitiesBridge = new AbilitiesBridge(dmpcPlugin)
const homebridge = new Homebridge(dmpcPlugin)
const homebridgeConfig = new HomebridgeConfig(dmpcPlugin)
const restartHomebridge = debounce(async (event) => {
await homebridgeConfig.write(await accessories.get())
homebridge.restart()
}, 10000)
dmpcPlugin.events.on('service:updated', restartHomebridge)
dmpcPlugin.events.on('service:created', restartHomebridge)
dmpcPlugin.events.on('service:deleted', restartHomebridge)
dmpcPlugin.events.on('servicePluginConfig:created', restartHomebridge)
dmpcPlugin.events.on('servicePluginConfig:updated', restartHomebridge)
dmpcPlugin.events.on('servicePluginConfig:deleted', restartHomebridge)
dmpcPlugin.events.on('ability:updated', restartHomebridge)
dmpcPlugin.events.on('ability:created', restartHomebridge)
dmpcPlugin.events.on('ability:deleted', restartHomebridge)
dmpcPlugin.events.once('connection', restartHomebridge)
dmpcPlugin.events.on('ability:event', eventData => {
return requestPromise({
method: 'POST',
uri: `http://localhost:${notificationsBridgePort}/${eventData.data._id}`,
json: true,
headers: {
[API_KEY_HEADER]: notificationsApiKey
},
body: {
data: eventData.data.data
}
}).catch(() => {})
})
await dmpcPlugin.api.extendOpenApi(abilitiesBridgeApi)
await dmpcPlugin.api.addOperations(abilitiesBridge.operations())
return dmpcPlugin.start()
})