@mirta/globals 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/eslint/index.d.ts CHANGED
@@ -21,6 +21,7 @@ declare interface GlobalsMirta {
21
21
  readonly 'StorableObject': false
22
22
  readonly 'PersistentStorage': false
23
23
  readonly 'Notify': false
24
+ readonly 'Alarms': false
24
25
  }
25
26
 
26
27
  declare const globals: GlobalsMirta
package/eslint/index.js CHANGED
@@ -21,4 +21,5 @@ export default {
21
21
  'StorableObject': 'readonly',
22
22
  'PersistentStorage': 'readonly',
23
23
  'Notify': 'readonly',
24
+ 'Alarms': 'readonly',
24
25
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mirta/globals",
3
3
  "description": "Complete set of types for wb-rule development in TypeScript",
4
- "version": "0.3.2",
4
+ "version": "0.3.4",
5
5
  "license": "Unlicense",
6
6
  "keywords": [
7
7
  "mirta",
@@ -0,0 +1,276 @@
1
+ declare namespace WbRules {
2
+
3
+ /**
4
+ * Определения типов для сервиса оповещений.
5
+ *
6
+ * @since 0.3.3
7
+ *
8
+ **/
9
+ namespace Alarms {
10
+
11
+ /**
12
+ * Позволяет задать способ оповещения через SMS.
13
+ *
14
+ * @since 0.3.3
15
+ *
16
+ **/
17
+ interface SmsRecipient {
18
+
19
+ /** Конфигурация отправки SMS. */
20
+ type: 'sms'
21
+
22
+ /** Номер телефона получателя SMS. */
23
+ to: string
24
+
25
+ /**
26
+ * Команда для отправки SMS. Поле можно оставить пустым, чтобы использовать gammu.
27
+ *
28
+ * В команде нужно указать как минимум один плейсхолдер `{}` - для номера. Тогда
29
+ * текст будет отправлен в stdin.
30
+ *
31
+ * Если указать 2 плейсхолдера - то в первый запишется номер, во второй - текст.
32
+ *
33
+ * @examples
34
+ * ```sh
35
+ * /path/to/sender.py --number {}
36
+ * ```
37
+ * ```sh
38
+ * /path/to/sender.py --number {} --text "{}"
39
+ * ```
40
+ **/
41
+ command?: string
42
+ }
43
+
44
+ /**
45
+ * Позволяет задать способ оповещения через E-mail.
46
+ *
47
+ * @since 0.3.3
48
+ *
49
+ **/
50
+ interface EmailRecipient {
51
+
52
+ /** Конфигурация отправки на адрес электронной почты. */
53
+ type: 'email'
54
+
55
+ /** Адрес электронной почты получателя. */
56
+ to: string
57
+
58
+ /**
59
+ * Тема письма (необязательное поле).
60
+ *
61
+ * Если в теме письма использовать плейсхолдер `{}`, он заменится на текст сообщения.
62
+ *
63
+ * @example
64
+ * ```txt
65
+ * Alarm: {}
66
+ * ```
67
+ **/
68
+ subject?: string
69
+ }
70
+
71
+ /**
72
+ * Позволяет задать способ оповещения через Telegram.
73
+ *
74
+ * @since 0.3.3
75
+ *
76
+ **/
77
+ interface TelegramRecipient {
78
+
79
+ /** Конфигурация отправки в Telegram. */
80
+ type: 'telegram'
81
+
82
+ /** Токен вашего бота Telegram. */
83
+ token: string
84
+
85
+ /** Уникальный идентификатор целевого чата или username целевого канала (в формате `@channelusername`). */
86
+ chatId: string
87
+ }
88
+
89
+ /**
90
+ * Позволяет настроить один из вариантов
91
+ * оповещения - через SMS, E-Mail или Telegram.
92
+ *
93
+ * Конкретный состав полей меняется в зависимости от значения поля `type`.
94
+ *
95
+ * @since 0.3.3
96
+ *
97
+ **/
98
+ type Recipient = SmsRecipient | EmailRecipient | TelegramRecipient
99
+
100
+ /**
101
+ * Базовый компонент аларма - содержит общие свойства.
102
+ *
103
+ * Используется в составе типа {@link Alarm}.
104
+ *
105
+ * @since 0.3.3
106
+ *
107
+ **/
108
+ interface AlarmBase {
109
+
110
+ /** Название аларма. */
111
+ name: string
112
+
113
+ /** Наблюдаемые устройство и контрол в формате `deviceId/controlId`. */
114
+ cell: string
115
+
116
+ /**
117
+ * Сообщение, отправляемое при срабатывании аларма.
118
+ *
119
+ * Для подстановки текущего значения контрола используется плейсхолдер `{}`.
120
+ *
121
+ * Если сообщение не указано, оно генерируется автоматически на основе
122
+ * текущего значения контрола.
123
+ *
124
+ **/
125
+ alarmMessage?: string
126
+
127
+ /**
128
+ * Сообщение, отправляемое при деактивации аларма.
129
+ *
130
+ * Для подстановки текущего значения контрола используется плейсхолдер `{}`.
131
+ *
132
+ * Если сообщение не указано, оно генерируется автоматически на основе
133
+ * текущего значения контрола.
134
+ *
135
+ **/
136
+ noAlarmMessage?: string
137
+
138
+ /**
139
+ * Интервал (в секундах) повторной отправки сообщения во время активности аларма.
140
+ *
141
+ * Если временной интервал не установлен, сообщения направляются
142
+ * только при срабатывании, а также при деактивации аларма.
143
+ *
144
+ **/
145
+ interval?: number
146
+
147
+ /**
148
+ * Задержка срабатывания аларма (в миллисекундах).
149
+ *
150
+ * Если значение указано, то аларм сработает только когда условие срабатывания
151
+ * будет непрерывно выполняться в течение заданного интервала.
152
+ *
153
+ **/
154
+ alarmDelayMs?: number
155
+
156
+ /**
157
+ * Задержка деактивации аларма (в миллисекундах).
158
+ *
159
+ * Если значение указано, то аларм будет деактивирован только когда условие срабатывания
160
+ * прекратит непрерывно выполняться в течение заданного интервала.
161
+ *
162
+ **/
163
+ noAlarmDelayMs?: number
164
+
165
+ /**
166
+ * Максимальное количество отправленных сообщений.
167
+ *
168
+ * Если указано, то за каждый период срабатывания аларма
169
+ * отправляется не больше заданного количества сообщений.
170
+ *
171
+ **/
172
+ maxCount?: number
173
+ }
174
+
175
+ /**
176
+ * Компонент аларма, реализующий возможность контроля за соответствием указанному значению.
177
+ *
178
+ * Используется в составе типа {@link Alarm}.
179
+ *
180
+ * @since 0.3.3
181
+ *
182
+ **/
183
+ interface ValueAlarm {
184
+
185
+ /**
186
+ * Ожидаемое значение.
187
+ *
188
+ * Аларм сработает, если значение контрола отличается от `expectedValue`.
189
+ *
190
+ * Когда значение контрола снова становится равным `expectedValue`,
191
+ * аларм деактивируется.
192
+ *
193
+ **/
194
+ expectedValue: MqttValue
195
+ }
196
+
197
+ /**
198
+ * Компонент аларма, реализующий возможность контроля за соответствием
199
+ * значения контрола допустимому диапазону.
200
+ *
201
+ * Используется в составе типа {@link Alarm}.
202
+ *
203
+ * @since 0.3.3
204
+ *
205
+ **/
206
+ interface RangeAlarm {
207
+
208
+ /**
209
+ * Сервисное поле.
210
+ *
211
+ * Предотвращает смешивание с {@link ValueAlarm} внутри обобщённого типа {@link Alarm}.
212
+ *
213
+ **/
214
+ expectedValue: never
215
+
216
+ /**
217
+ * Минимально допустимое значение.
218
+ *
219
+ * Если отслеживаемое значение контрола опускается ниже minValue, происходит срабатывание аларма.
220
+ *
221
+ **/
222
+ minValue: number
223
+
224
+ /**
225
+ * Максимально допустимое значение.
226
+ *
227
+ * Если отслеживаемое значение контрола поднимается выше maxValue, происходит срабатывание аларма.
228
+ *
229
+ **/
230
+ maxValue: number
231
+ }
232
+
233
+ /**
234
+ * Позволяет задать устройство и контрол для отслеживания, а также настроить параметры реагирования.
235
+ *
236
+ * @since 0.3.3
237
+ *
238
+ **/
239
+ type Alarm = AlarmBase & (ValueAlarm | AtLeastOne<RangeAlarm>)
240
+
241
+ /**
242
+ * Конфигурация блока алармов.
243
+ *
244
+ * @since 0.3.3
245
+ *
246
+ **/
247
+ interface Config {
248
+
249
+ /** Название MQTT-устройства блока алармов. */
250
+ deviceName: string
251
+
252
+ /** Отображаемое название устройства блока алармов. */
253
+ deviceTitle: string
254
+
255
+ /** Список получателей. */
256
+ recipients: Recipient[]
257
+
258
+ /** Список алармов. */
259
+ alarms: Alarm[]
260
+ }
261
+ }
262
+
263
+ /**
264
+ * Интерфейс для типизации сервиса оповещений.
265
+ *
266
+ **/
267
+ interface Alarms {
268
+
269
+ /**
270
+ * Загружает конфигурацию для блока алармов.
271
+ *
272
+ * @param config Объект конфигурации или путь к файлу конфигурации в формате JSON.
273
+ */
274
+ load(config: string | Alarms.Config): void
275
+ }
276
+ }
@@ -1,3 +1,5 @@
1
+ /// <reference path="./wb-rules/alarms.d.ts" />
2
+
1
3
  /**
2
4
  * Используется для нормализации составных типов.
3
5
  *
@@ -20,6 +22,29 @@
20
22
  **/
21
23
  declare type Expand<T> = { [K in keyof T]: T[K] } & {}
22
24
 
25
+ /**
26
+ * Разрешает частичное заполнение полей объекта, но требует наличия хотя бы одного поля.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * interface SafeRange {
31
+ * minValue: number
32
+ * maxValue: number
33
+ * }
34
+ *
35
+ * // Корректное объявление
36
+ * const a: AtLeastOne<SafeRange> = {
37
+ * minValue: 0
38
+ * }
39
+ *
40
+ * // Ошибка - требуется хотя бы одно из обязательных полей
41
+ * const b: AtLeastOne<SafeRange> = { }
42
+ * ```
43
+ * @since 0.3.3
44
+ *
45
+ **/
46
+ declare type AtLeastOne<T, U = { [K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U]
47
+
23
48
  /** Типы и интерфейсы правил wb-rules */
24
49
  declare namespace WbRules {
25
50
 
@@ -600,6 +625,41 @@ declare namespace WbRules {
600
625
  interface StorageOptions {
601
626
  global: boolean
602
627
  }
628
+
629
+ interface Notify {
630
+ /**
631
+ * Отправляет электронное письмо указанному адресату.
632
+ *
633
+ * @param to Адресат.
634
+ * @param subject Тема письма.
635
+ * @param text Текст письма.
636
+ *
637
+ **/
638
+ sendEmail(to: string, subject: string, text: string): void
639
+
640
+ /**
641
+ * Отправляет SMS на указанный номер
642
+ * Для отправки SMS используется ModemManager, а если он не установлен, то gammu.
643
+ *
644
+ * @param to Номер адресата.
645
+ * @param text Текст сообщения.
646
+ * @param command Используя команду.
647
+ *
648
+ **/
649
+ sendSMS(to: string, text: string, command?: string): void
650
+
651
+ /**
652
+ * Отправляет сообщение в указанный чат или канал Telegram.
653
+ *
654
+ * @param token Токен вашего бота Telegram.
655
+ * @param chatId Уникальный идентификатор целевого чата или username целевого канала (в формате `@channelusername`).
656
+ * @param text Текст сообщения.
657
+ *
658
+ * @since 0.3.2
659
+ *
660
+ **/
661
+ sendTelegramMessage(token: string, chatId: string, text: string): void
662
+ }
603
663
  }
604
664
 
605
665
  declare namespace NodeJS {
@@ -862,40 +922,34 @@ declare class PersistentStorage {
862
922
  }
863
923
 
864
924
  /**
865
- * Класс оповещения.
925
+ * Сервис уведомлений Notify — инструмент для отправки произвольных
926
+ * сообщений по разным каналам коммуникации (почта, SMS, Telegram).
866
927
  *
867
928
  **/
868
- declare abstract class Notify {
869
- /**
870
- * Отправляет электронное письмо указанному адресату.
871
- *
872
- * @param to Адресат.
873
- * @param subject Тема письма.
874
- * @param text Текст письма.
875
- *
876
- **/
877
- static sendEmail(to: string, subject: string, text: string): void
929
+ declare var Notify: WbRules.Notify
878
930
 
879
- /**
880
- * Отправляет SMS на указанный номер
881
- * Для отправки SMS используется ModemManager, а если он не установлен, то gammu.
882
- *
883
- * @param to Номер адресата.
884
- * @param text Текст сообщения.
885
- * @param command Используя команду.
886
- *
887
- **/
888
- static sendSMS(to: string, text: string, command?: string): void
889
-
890
- /**
891
- * Отправляет сообщение в указанный чат или канал Telegram.
892
- *
893
- * @param token Токен вашего бота Telegram.
894
- * @param chatId Уникальный идентификатор целевого чата или username целевого канала (в формате `@channelusername`).
895
- * @param text Текст сообщения.
896
- *
897
- * @since 0.3.2
898
- *
899
- **/
900
- static sendTelegramMessage(token: string, chatId: string, text: string): void
901
- }
931
+ /**
932
+ * Сервис оповещений Alarms инструмент для автоматической отправки
933
+ * шаблонных сообщений по разным каналам коммуникации (почта, SMS, Telegram)
934
+ * при обнаружении отклонения от нормы в значениях отслеживаемых контролов.
935
+ *
936
+ * @example
937
+ * Загрузка конфигурации из JSON-файла:
938
+ * ```ts
939
+ * Alarms.load('/etc/wb-rules/alarms.conf')
940
+ * ```
941
+ * @example
942
+ * Непосредственная настройка блока алармов через объект конфигурации:
943
+ * ```ts
944
+ * Alarms.load({
945
+ * deviceName: 'example_alarms',
946
+ * deviceTitle: 'Example Alarms',
947
+ * recipients: [],
948
+ * alarms: []
949
+ * })
950
+ * ```
951
+ *
952
+ * @since 0.3.3
953
+ *
954
+ **/
955
+ declare var Alarms: WbRules.Alarms