-
Notifications
You must be signed in to change notification settings - Fork 73.1k
Expand file tree
/
Copy pathindex.js
More file actions
281 lines (242 loc) · 8.24 KB
/
index.js
File metadata and controls
281 lines (242 loc) · 8.24 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
'use strict';
var _find = require('lodash/find');
var _each = require('lodash/each');
var _filter = require('lodash/filter');
var _get = require('lodash/get');
var _isArray = require('lodash/isArray');
var _map = require('lodash/map');
function init (ctx) {
var allPlugins = []
, enabledPlugins = [];
function plugins (name) {
if (name) {
return _find(allPlugins, {
name: name
});
} else {
return plugins;
}
}
plugins.base = require('./pluginbase');
var clientDefaultPlugins = [
require('./bgnow')(ctx)
, require('./rawbg')(ctx)
, require('./direction')(ctx)
, require('./timeago')(ctx)
, require('./upbat')(ctx)
, require('./ar2')(ctx)
, require('./errorcodes')(ctx)
, require('./iob')(ctx)
, require('./cob')(ctx)
, require('./careportal')(ctx)
, require('./pump')(ctx)
, require('./openaps')(ctx)
, require('./xdripjs')(ctx)
, require('./loop')(ctx)
, require('./override')(ctx)
, require('./boluswizardpreview')(ctx)
, require('./cannulaage')(ctx)
, require('./sensorage')(ctx)
, require('./insulinage')(ctx)
, require('./batteryage')(ctx)
, require('./basalprofile')(ctx)
, require('./bolus')(ctx) // fake plugin to hold extended settings
, require('./boluscalc')(ctx) // fake plugin to show/hide
, require('./profile')(ctx) // fake plugin to hold extended settings
, require('./speech')(ctx)
, require('./dbsize')(ctx)
];
/*
var serverDefaultPlugins = [
require('./bgnow')(ctx)
, require('./rawbg')(ctx)
, require('./direction')(ctx)
, require('./upbat')(ctx)
, require('./ar2')(ctx)
, require('./simplealarms')(ctx)
, require('./errorcodes')(ctx)
, require('./iob')(ctx)
, require('./cob')(ctx)
, require('./pump')(ctx)
, require('./openaps')(ctx)
, require('./xdripjs')(ctx)
, require('./loop')(ctx)
, require('./boluswizardpreview')(ctx)
, require('./cannulaage')(ctx)
, require('./sensorage')(ctx)
, require('./insulinage')(ctx)
, require('./batteryage')(ctx)
, require('./treatmentnotify')(ctx)
, require('./timeago')(ctx)
, require('./basalprofile')(ctx)
, require('./dbsize')(ctx)
, require('./runtimestate')(ctx)
, require('./webhook')(ctx) // NEW: Webhook plugin to send SGV updates to a local server address (e.g. Raspberry Pi)
];
*/
function getServerDefaultPlugins () {
var plugins = [
require('./bgnow')(ctx)
, require('./rawbg')(ctx)
, require('./direction')(ctx)
, require('./upbat')(ctx)
, require('./ar2')(ctx)
, require('./simplealarms')(ctx)
, require('./errorcodes')(ctx)
, require('./iob')(ctx)
, require('./cob')(ctx)
, require('./pump')(ctx)
, require('./openaps')(ctx)
, require('./xdripjs')(ctx)
, require('./loop')(ctx)
, require('./boluswizardpreview')(ctx)
, require('./cannulaage')(ctx)
, require('./sensorage')(ctx)
, require('./insulinage')(ctx)
, require('./batteryage')(ctx)
, require('./treatmentnotify')(ctx)
, require('./timeago')(ctx)
, require('./basalprofile')(ctx)
, require('./dbsize')(ctx)
, require('./runtimestate')(ctx)
];
// Only load webhook plugin in Node/server (avoid webpack/browser bundling).
// NOTE: Use eval('require') so webpack won't statically include './webhook' in the client bundle.
if (typeof process !== 'undefined' && process.versions && process.versions.node) {
var req = eval('require');
plugins.push(req('./webhook')(ctx));
}
return plugins;
}
/*
plugins.registerServerDefaults = function registerServerDefaults () {
plugins.register(serverDefaultPlugins);
return plugins;
};
*/
plugins.registerServerDefaults = function registerServerDefaults () {
plugins.register(getServerDefaultPlugins());
return plugins;
};
plugins.registerClientDefaults = function registerClientDefaults () {
plugins.register(clientDefaultPlugins);
return plugins;
};
plugins.register = function register (all) {
_each(all, function eachPlugin (plugin) {
allPlugins.push(plugin);
});
enabledPlugins = [];
var enable = _get(ctx, 'settings.enable');
function isEnabled (plugin) {
//TODO: unify client/server env/app
return enable && enable.indexOf(plugin.name) > -1;
}
_each(allPlugins, function eachPlugin (plugin) {
plugin.enabled = isEnabled(plugin);
if (plugin.enabled) {
enabledPlugins.push(plugin);
}
});
};
plugins.isPluginEnabled = function isPluginEnabled (pluginName) {
var p = _find(enabledPlugins, 'name', pluginName);
return (p !== null);
}
plugins.getPlugin = function getPlugin (pluginName) {
return _find(enabledPlugins, 'name', pluginName);
}
plugins.eachPlugin = function eachPlugin (f) {
_each(allPlugins, f);
};
plugins.eachEnabledPlugin = function eachEnabledPlugin (f) {
_each(enabledPlugins, f);
};
//these plugins are either always on or have custom settings
plugins.specialPlugins = 'ar2 bgnow delta direction timeago upbat rawbg errorcodes profile bolus';
plugins.shownPlugins = function(sbx) {
return _filter(enabledPlugins, function filterPlugins (plugin) {
return plugins.specialPlugins.indexOf(plugin.name) > -1 || (sbx && sbx.showPlugins && sbx.showPlugins.indexOf(plugin.name) > -1);
});
};
plugins.eachShownPlugins = function eachShownPlugins (sbx, f) {
_each(plugins.shownPlugins(sbx), f);
};
plugins.hasShownType = function hasShownType (pluginType, sbx) {
return _find(plugins.shownPlugins(sbx), function findWithType (plugin) {
return plugin.pluginType === pluginType;
}) !== undefined;
};
plugins.setProperties = function setProperties (sbx) {
plugins.eachEnabledPlugin(function eachPlugin (plugin) {
if (plugin.setProperties) {
try {
plugin.setProperties(sbx.withExtendedSettings(plugin));
} catch (error) {
console.error('Plugin error on setProperties(): ', plugin.name, error);
}
}
});
};
plugins.checkNotifications = function checkNotifications (sbx) {
plugins.eachEnabledPlugin(function eachPlugin (plugin) {
if (plugin.checkNotifications) {
try {
plugin.checkNotifications(sbx.withExtendedSettings(plugin));
} catch (error) {
console.error('Plugin error on checkNotifications(): ', plugin.name, error);
}
}
});
};
plugins.visualizeAlarm = function visualizeAlarm (sbx, alarm, alarmMessage) {
plugins.eachShownPlugins(sbx, function eachPlugin (plugin) {
if (plugin.visualizeAlarm) {
try {
plugin.visualizeAlarm(sbx.withExtendedSettings(plugin), alarm, alarmMessage);
} catch (error) {
console.error('Plugin error on visualizeAlarm(): ', plugin.name, error);
}
}
});
};
plugins.updateVisualisations = function updateVisualisations (sbx) {
plugins.eachShownPlugins(sbx, function eachPlugin (plugin) {
if (plugin.updateVisualisation) {
try {
plugin.updateVisualisation(sbx.withExtendedSettings(plugin));
} catch (error) {
console.error('Plugin error on visualizeAlarm(): ', plugin.name, error);
}
}
});
};
plugins.getAllEventTypes = function getAllEventTypes (sbx) {
var all = [];
plugins.eachEnabledPlugin(function eachPlugin (plugin) {
if (plugin.getEventTypes) {
var eventTypes = plugin.getEventTypes(sbx.withExtendedSettings(plugin));
if (_isArray(eventTypes)) {
all = all.concat(eventTypes);
}
}
});
return all;
};
plugins.enabledPluginNames = function enabledPluginNames () {
return _map(enabledPlugins, function mapped (plugin) {
return plugin.name;
}).join(' ');
};
plugins.extendedClientSettings = function extendedClientSettings (allExtendedSettings) {
var clientSettings = {};
_each(clientDefaultPlugins, function eachClientPlugin (plugin) {
clientSettings[plugin.name] = allExtendedSettings[plugin.name];
});
//HACK: include devicestatus
clientSettings.devicestatus = allExtendedSettings.devicestatus;
return clientSettings;
};
return plugins();
}
module.exports = init;