ntfy-reverse-proxy 0.0.0 → 2.0.0

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.
Files changed (199) hide show
  1. package/README.md +48 -0
  2. package/build/src/cli/commands/config-io.d.ts +5 -0
  3. package/build/src/cli/commands/config-io.d.ts.map +1 -0
  4. package/build/src/cli/commands/config-io.js +19 -0
  5. package/build/src/cli/commands/config-io.js.map +1 -0
  6. package/build/src/cli/commands/context.d.ts +9 -0
  7. package/build/src/cli/commands/context.d.ts.map +1 -0
  8. package/build/src/cli/commands/context.js +108 -0
  9. package/build/src/cli/commands/context.js.map +1 -0
  10. package/build/src/cli/commands/deploy.d.ts +4 -0
  11. package/build/src/cli/commands/deploy.d.ts.map +1 -0
  12. package/build/src/cli/commands/deploy.js +496 -0
  13. package/build/src/cli/commands/deploy.js.map +1 -0
  14. package/build/src/cli/commands/generate.d.ts +4 -0
  15. package/build/src/cli/commands/generate.d.ts.map +1 -0
  16. package/build/src/cli/commands/generate.js +68 -0
  17. package/build/src/cli/commands/generate.js.map +1 -0
  18. package/build/src/cli/commands/server.d.ts +7 -0
  19. package/build/src/cli/commands/server.d.ts.map +1 -0
  20. package/build/src/cli/commands/server.js +43 -0
  21. package/build/src/cli/commands/server.js.map +1 -0
  22. package/build/src/cli/commands/settings.d.ts +5 -0
  23. package/build/src/cli/commands/settings.d.ts.map +1 -0
  24. package/build/src/cli/commands/settings.js +16 -0
  25. package/build/src/cli/commands/settings.js.map +1 -0
  26. package/build/src/cli/commands/validate.d.ts +4 -0
  27. package/build/src/cli/commands/validate.d.ts.map +1 -0
  28. package/build/src/cli/commands/validate.js +45 -0
  29. package/build/src/cli/commands/validate.js.map +1 -0
  30. package/build/src/cli/index.d.ts +5 -0
  31. package/build/src/cli/index.d.ts.map +1 -0
  32. package/build/src/cli/index.js +118 -0
  33. package/build/src/cli/index.js.map +1 -0
  34. package/build/src/cli/menu/interactive.d.ts +4 -0
  35. package/build/src/cli/menu/interactive.d.ts.map +1 -0
  36. package/build/src/cli/menu/interactive.js +902 -0
  37. package/build/src/cli/menu/interactive.js.map +1 -0
  38. package/build/src/lib/item.d.ts +3 -0
  39. package/build/src/lib/item.d.ts.map +1 -0
  40. package/build/src/lib/item.js +3 -0
  41. package/build/src/lib/item.js.map +1 -0
  42. package/build/src/lib/regex.d.ts +30 -0
  43. package/build/src/lib/regex.d.ts.map +1 -0
  44. package/build/src/lib/regex.js +30 -0
  45. package/build/src/lib/regex.js.map +1 -0
  46. package/build/src/lib/schema.d.ts +167 -0
  47. package/build/src/lib/schema.d.ts.map +1 -0
  48. package/build/src/lib/schema.js +70 -0
  49. package/build/src/lib/schema.js.map +1 -0
  50. package/build/src/lib/utility.d.ts +4 -0
  51. package/build/src/lib/utility.d.ts.map +1 -0
  52. package/build/src/lib/utility.js +14 -0
  53. package/build/src/lib/utility.js.map +1 -0
  54. package/build/src/types/cli/commands/config-io.d.ts +38 -0
  55. package/build/src/types/cli/commands/context.d.ts +131 -0
  56. package/build/src/types/cli/commands/deploy.d.ts +622 -0
  57. package/build/src/types/cli/commands/generate.d.ts +51 -0
  58. package/build/src/types/cli/commands/server.d.ts +65 -0
  59. package/build/src/types/cli/commands/settings.d.ts +25 -0
  60. package/build/src/types/cli/commands/validate.d.ts +37 -0
  61. package/build/src/types/cli/index.d.ts +55 -0
  62. package/build/src/types/cli/menu/interactive.d.ts +381 -0
  63. package/build/src/types/fetch-response.d.ts +11 -0
  64. package/build/src/types/lib/schema.d.ts +134 -0
  65. package/build/src/types/lib/utility.d.ts +8 -0
  66. package/build/src/types/tests/cli/commands/context.test.d.ts +57 -0
  67. package/build/src/types/tests/cli/commands/generate.test.d.ts +12 -0
  68. package/build/src/types/tests/cli/commands/server.test.d.ts +45 -0
  69. package/build/src/types/tests/cli/commands/settings.test.d.ts +40 -0
  70. package/build/src/types/tests/cli/commands/validate.test.d.ts +19 -0
  71. package/build/src/types/tests/cli/menu/interactive.test.d.ts +6 -0
  72. package/build/src/types/tests/lib/schema.test.d.ts +10 -0
  73. package/build/src/types/tests/type-declarations.test.d.ts +173 -0
  74. package/build/src/types/tests/worker/index.test.d.ts +20 -0
  75. package/build/src/types/tests/worker/interpreters/ntfy-json.test.d.ts +19 -0
  76. package/build/src/types/tests/worker/interpreters/pfsense.test.d.ts +10 -0
  77. package/build/src/types/tests/worker/interpreters/plain-text.test.d.ts +10 -0
  78. package/build/src/types/tests/worker/interpreters/seerr.test.d.ts +8 -0
  79. package/build/src/types/tests/worker/interpreters/statuspage.test.d.ts +58 -0
  80. package/build/src/types/tests/worker/interpreters/synology.test.d.ts +8 -0
  81. package/build/src/types/tests/worker/interpreters/unifi.test.d.ts +8 -0
  82. package/build/src/types/tests/worker/landing/page.test.d.ts +55 -0
  83. package/build/src/types/tests/worker/pipeline/accumulate.test.d.ts +28 -0
  84. package/build/src/types/tests/worker/pipeline/authenticate.test.d.ts +9 -0
  85. package/build/src/types/tests/worker/pipeline/email.test.d.ts +15 -0
  86. package/build/src/types/tests/worker/pipeline/format.test.d.ts +38 -0
  87. package/build/src/types/tests/worker/pipeline/interpret.test.d.ts +43 -0
  88. package/build/src/types/tests/worker/pipeline/parse.test.d.ts +17 -0
  89. package/build/src/types/tests/worker/pipeline/receive.test.d.ts +23 -0
  90. package/build/src/types/tests/worker/pipeline/respond.test.d.ts +20 -0
  91. package/build/src/types/tests/worker/pipeline/route.test.d.ts +80 -0
  92. package/build/src/types/tests/worker/pipeline/send.test.d.ts +37 -0
  93. package/build/src/types/tests/worker/pipeline/split.test.d.ts +17 -0
  94. package/build/src/types/worker/index.d.ts +232 -0
  95. package/build/src/types/worker/interpreters/ntfy-json.d.ts +28 -0
  96. package/build/src/types/worker/interpreters/pfsense.d.ts +97 -0
  97. package/build/src/types/worker/interpreters/plain-text.d.ts +24 -0
  98. package/build/src/types/worker/interpreters/seerr.d.ts +124 -0
  99. package/build/src/types/worker/interpreters/statuspage.d.ts +239 -0
  100. package/build/src/types/worker/interpreters/synology.d.ts +99 -0
  101. package/build/src/types/worker/interpreters/unifi.d.ts +111 -0
  102. package/build/src/types/worker/landing/page.d.ts +44 -0
  103. package/build/src/types/worker/pipeline/accumulate.d.ts +79 -0
  104. package/build/src/types/worker/pipeline/authenticate.d.ts +68 -0
  105. package/build/src/types/worker/pipeline/email.d.ts +108 -0
  106. package/build/src/types/worker/pipeline/format.d.ts +47 -0
  107. package/build/src/types/worker/pipeline/interpret.d.ts +63 -0
  108. package/build/src/types/worker/pipeline/parse.d.ts +39 -0
  109. package/build/src/types/worker/pipeline/receive.d.ts +64 -0
  110. package/build/src/types/worker/pipeline/respond.d.ts +113 -0
  111. package/build/src/types/worker/pipeline/route.d.ts +34 -0
  112. package/build/src/types/worker/pipeline/send.d.ts +143 -0
  113. package/build/src/types/worker/pipeline/shared.d.ts +85 -0
  114. package/build/src/types/worker/pipeline/split.d.ts +35 -0
  115. package/build/src/worker/handlers.d.ts +5 -0
  116. package/build/src/worker/handlers.d.ts.map +1 -0
  117. package/build/src/worker/handlers.js +360 -0
  118. package/build/src/worker/handlers.js.map +1 -0
  119. package/build/src/worker/index.d.ts +4 -0
  120. package/build/src/worker/index.d.ts.map +1 -0
  121. package/build/src/worker/index.js +52 -0
  122. package/build/src/worker/index.js.map +1 -0
  123. package/build/src/worker/interpreters/ntfy-json.d.ts +4 -0
  124. package/build/src/worker/interpreters/ntfy-json.d.ts.map +1 -0
  125. package/build/src/worker/interpreters/ntfy-json.js +49 -0
  126. package/build/src/worker/interpreters/ntfy-json.js.map +1 -0
  127. package/build/src/worker/interpreters/pfsense.d.ts +4 -0
  128. package/build/src/worker/interpreters/pfsense.d.ts.map +1 -0
  129. package/build/src/worker/interpreters/pfsense.js +150 -0
  130. package/build/src/worker/interpreters/pfsense.js.map +1 -0
  131. package/build/src/worker/interpreters/plain-text.d.ts +4 -0
  132. package/build/src/worker/interpreters/plain-text.d.ts.map +1 -0
  133. package/build/src/worker/interpreters/plain-text.js +18 -0
  134. package/build/src/worker/interpreters/plain-text.js.map +1 -0
  135. package/build/src/worker/interpreters/seerr.d.ts +4 -0
  136. package/build/src/worker/interpreters/seerr.d.ts.map +1 -0
  137. package/build/src/worker/interpreters/seerr.js +173 -0
  138. package/build/src/worker/interpreters/seerr.js.map +1 -0
  139. package/build/src/worker/interpreters/statuspage.d.ts +4 -0
  140. package/build/src/worker/interpreters/statuspage.d.ts.map +1 -0
  141. package/build/src/worker/interpreters/statuspage.js +266 -0
  142. package/build/src/worker/interpreters/statuspage.js.map +1 -0
  143. package/build/src/worker/interpreters/synology.d.ts +4 -0
  144. package/build/src/worker/interpreters/synology.d.ts.map +1 -0
  145. package/build/src/worker/interpreters/synology.js +177 -0
  146. package/build/src/worker/interpreters/synology.js.map +1 -0
  147. package/build/src/worker/interpreters/unifi.d.ts +4 -0
  148. package/build/src/worker/interpreters/unifi.d.ts.map +1 -0
  149. package/build/src/worker/interpreters/unifi.js +152 -0
  150. package/build/src/worker/interpreters/unifi.js.map +1 -0
  151. package/build/src/worker/landing/page.d.ts +4 -0
  152. package/build/src/worker/landing/page.d.ts.map +1 -0
  153. package/build/src/worker/landing/page.js +260 -0
  154. package/build/src/worker/landing/page.js.map +1 -0
  155. package/build/src/worker/pipeline/accumulate.d.ts +7 -0
  156. package/build/src/worker/pipeline/accumulate.d.ts.map +1 -0
  157. package/build/src/worker/pipeline/accumulate.js +53 -0
  158. package/build/src/worker/pipeline/accumulate.js.map +1 -0
  159. package/build/src/worker/pipeline/authenticate.d.ts +4 -0
  160. package/build/src/worker/pipeline/authenticate.d.ts.map +1 -0
  161. package/build/src/worker/pipeline/authenticate.js +53 -0
  162. package/build/src/worker/pipeline/authenticate.js.map +1 -0
  163. package/build/src/worker/pipeline/email.d.ts +4 -0
  164. package/build/src/worker/pipeline/email.d.ts.map +1 -0
  165. package/build/src/worker/pipeline/email.js +149 -0
  166. package/build/src/worker/pipeline/email.js.map +1 -0
  167. package/build/src/worker/pipeline/format.d.ts +5 -0
  168. package/build/src/worker/pipeline/format.d.ts.map +1 -0
  169. package/build/src/worker/pipeline/format.js +48 -0
  170. package/build/src/worker/pipeline/format.js.map +1 -0
  171. package/build/src/worker/pipeline/interpret.d.ts +4 -0
  172. package/build/src/worker/pipeline/interpret.d.ts.map +1 -0
  173. package/build/src/worker/pipeline/interpret.js +30 -0
  174. package/build/src/worker/pipeline/interpret.js.map +1 -0
  175. package/build/src/worker/pipeline/parse.d.ts +4 -0
  176. package/build/src/worker/pipeline/parse.d.ts.map +1 -0
  177. package/build/src/worker/pipeline/parse.js +59 -0
  178. package/build/src/worker/pipeline/parse.js.map +1 -0
  179. package/build/src/worker/pipeline/receive.d.ts +4 -0
  180. package/build/src/worker/pipeline/receive.d.ts.map +1 -0
  181. package/build/src/worker/pipeline/receive.js +52 -0
  182. package/build/src/worker/pipeline/receive.js.map +1 -0
  183. package/build/src/worker/pipeline/respond.d.ts +4 -0
  184. package/build/src/worker/pipeline/respond.d.ts.map +1 -0
  185. package/build/src/worker/pipeline/respond.js +48 -0
  186. package/build/src/worker/pipeline/respond.js.map +1 -0
  187. package/build/src/worker/pipeline/route.d.ts +5 -0
  188. package/build/src/worker/pipeline/route.d.ts.map +1 -0
  189. package/build/src/worker/pipeline/route.js +23 -0
  190. package/build/src/worker/pipeline/route.js.map +1 -0
  191. package/build/src/worker/pipeline/send.d.ts +4 -0
  192. package/build/src/worker/pipeline/send.d.ts.map +1 -0
  193. package/build/src/worker/pipeline/send.js +156 -0
  194. package/build/src/worker/pipeline/send.js.map +1 -0
  195. package/build/src/worker/pipeline/split.d.ts +4 -0
  196. package/build/src/worker/pipeline/split.d.ts.map +1 -0
  197. package/build/src/worker/pipeline/split.js +40 -0
  198. package/build/src/worker/pipeline/split.js.map +1 -0
  199. package/package.json +95 -2
@@ -0,0 +1,266 @@
1
+ import { LIB_REGEX_STATUSPAGE_LEADING_WWW } from '../../lib/regex.js';
2
+ import { diffComponents, formatComponentLines, readState, writeState, } from '../pipeline/accumulate.js';
3
+ const mapImpactToPriority = (impact) => {
4
+ switch (impact.toLowerCase()) {
5
+ case 'critical': {
6
+ return 5;
7
+ }
8
+ case 'major': {
9
+ return 4;
10
+ }
11
+ case 'minor': {
12
+ return 3;
13
+ }
14
+ case 'none':
15
+ default: {
16
+ return 2;
17
+ }
18
+ }
19
+ };
20
+ const mapStatusToEmojiTag = (status) => {
21
+ switch (status.toLowerCase()) {
22
+ case 'investigating': {
23
+ return 'mag';
24
+ }
25
+ case 'identified': {
26
+ return 'dart';
27
+ }
28
+ case 'monitoring': {
29
+ return 'eyes';
30
+ }
31
+ case 'resolved': {
32
+ return 'white_check_mark';
33
+ }
34
+ case 'scheduled': {
35
+ return 'calendar';
36
+ }
37
+ case 'in_progress': {
38
+ return 'hammer_and_wrench';
39
+ }
40
+ case 'verifying': {
41
+ return 'rotating_light';
42
+ }
43
+ case 'completed': {
44
+ return 'tada';
45
+ }
46
+ default: {
47
+ return 'bell';
48
+ }
49
+ }
50
+ };
51
+ const isTerminalStatus = (status) => {
52
+ const terminal = [
53
+ 'resolved',
54
+ 'completed',
55
+ 'postmortem',
56
+ ];
57
+ const lowered = status.toLowerCase();
58
+ return terminal.includes(lowered);
59
+ };
60
+ const humanizeSlug = (slug) => {
61
+ const parts = slug.split('_');
62
+ const capitalized = parts.map((word) => word.charAt(0).toUpperCase() + word.slice(1));
63
+ return capitalized.join(' ');
64
+ };
65
+ const extractServiceName = (unsubscribeUrl) => {
66
+ let serviceName = 'Statuspage';
67
+ if (unsubscribeUrl !== undefined) {
68
+ try {
69
+ const parsedUrl = new URL(unsubscribeUrl);
70
+ const hostname = parsedUrl['hostname'];
71
+ serviceName = hostname.replace(LIB_REGEX_STATUSPAGE_LEADING_WWW, '');
72
+ }
73
+ catch { }
74
+ }
75
+ return serviceName;
76
+ };
77
+ const buildIncidentNotification = (serviceName, incidentName, status, impact, latestBody, shortlink, unsubscribeUrl, componentLines) => {
78
+ const isTerminal = isTerminalStatus(status);
79
+ const priority = (isTerminal === true) ? 2 : mapImpactToPriority(impact);
80
+ const humanizedStatus = humanizeSlug(status);
81
+ const humanizedImpact = humanizeSlug(impact);
82
+ const emojiTag = mapStatusToEmojiTag(status);
83
+ const tags = [
84
+ 'statuspage',
85
+ status.toLowerCase(),
86
+ emojiTag,
87
+ ];
88
+ const bodyLines = [
89
+ `**Status:** ${humanizedStatus}`,
90
+ `**Impact:** ${humanizedImpact}`,
91
+ ];
92
+ if (latestBody !== undefined) {
93
+ const latestBodyJoined = [
94
+ '',
95
+ `> ${latestBody}`,
96
+ ].join('\n');
97
+ bodyLines.push(latestBodyJoined);
98
+ }
99
+ if (componentLines.length > 0) {
100
+ const componentLinesJoined = [
101
+ '',
102
+ '**Affected:**',
103
+ componentLines.join('\n'),
104
+ ].join('\n');
105
+ bodyLines.push(componentLinesJoined);
106
+ }
107
+ const body = bodyLines.join('\n');
108
+ const actions = [];
109
+ if (shortlink !== undefined) {
110
+ actions.push(`view, View Incident, ${shortlink}`);
111
+ }
112
+ if (unsubscribeUrl !== undefined) {
113
+ actions.push(`view, Unsubscribe, ${unsubscribeUrl}`);
114
+ }
115
+ return {
116
+ notification: {
117
+ title: `[${serviceName}] ${incidentName}`, body, priority, tags, markdown: true, ...(actions.length > 0 ? { actions: actions.join('; ') } : {}),
118
+ },
119
+ };
120
+ };
121
+ const statuspageInterpreter = async (input, context) => {
122
+ let parsed = undefined;
123
+ if (typeof input === 'string') {
124
+ try {
125
+ parsed = JSON.parse(input);
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ else if (input instanceof ArrayBuffer) {
132
+ const decoder = new TextDecoder('utf-8');
133
+ const decodedBody = decoder.decode(input);
134
+ try {
135
+ parsed = JSON.parse(decodedBody);
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ else {
142
+ parsed = input;
143
+ }
144
+ const data = parsed;
145
+ const metaDefault = {};
146
+ const metaRaw = data['meta'];
147
+ const meta = (metaRaw !== undefined && metaRaw !== null) ? metaRaw : metaDefault;
148
+ const unsubscribeUrl = (typeof meta['unsubscribe'] === 'string') ? meta['unsubscribe'] : undefined;
149
+ const serviceName = extractServiceName(unsubscribeUrl);
150
+ const page = data['page'];
151
+ const pageIdAvailable = page !== undefined && typeof page['id'] === 'string';
152
+ const pageId = (pageIdAvailable === true && page !== undefined) ? page['id'] : undefined;
153
+ const kvAvailable = context !== undefined && context !== null;
154
+ const kv = (kvAvailable === true && context !== undefined) ? context['kv'] : undefined;
155
+ const hasKv = kv !== undefined && pageId !== undefined;
156
+ if ('component_update' in data && !('incident' in data)) {
157
+ const kvMissing = hasKv === false
158
+ || kv === undefined
159
+ || pageId === undefined;
160
+ if (kvMissing === true) {
161
+ return null;
162
+ }
163
+ if (kv === undefined || pageId === undefined) {
164
+ return null;
165
+ }
166
+ const existingState = await readState(kv, pageId);
167
+ const components = (existingState !== null) ? { ...existingState['components'] } : {};
168
+ const componentUpdate = data['component_update'];
169
+ const component = data['component'];
170
+ const componentId = (component !== undefined && typeof component['id'] === 'string') ? component['id'] : undefined;
171
+ const componentName = (component !== undefined && typeof component['name'] === 'string') ? component['name'] : undefined;
172
+ const hasUpdateStatus = componentUpdate !== undefined && typeof componentUpdate['new_status'] === 'string';
173
+ const hasComponentStatus = component !== undefined && typeof component['status'] === 'string';
174
+ let componentStatus = undefined;
175
+ if (hasUpdateStatus === true && componentUpdate !== undefined) {
176
+ componentStatus = componentUpdate['new_status'];
177
+ }
178
+ else if (hasComponentStatus === true && component !== undefined) {
179
+ componentStatus = component['status'];
180
+ }
181
+ const canUpdate = componentId !== undefined
182
+ && componentName !== undefined
183
+ && componentStatus !== undefined;
184
+ if (canUpdate === true
185
+ && componentId !== undefined
186
+ && componentName !== undefined
187
+ && componentStatus !== undefined) {
188
+ Reflect.set(components, componentId, {
189
+ name: componentName, status: componentStatus,
190
+ });
191
+ }
192
+ const updatedState = (existingState !== null) ? {
193
+ ...existingState, components,
194
+ } : {
195
+ incidentId: undefined, incidentName: undefined, status: undefined, impact: undefined, body: undefined, shortlink: undefined, serviceName, unsubscribeUrl, updateId: undefined, components,
196
+ };
197
+ await writeState(kv, pageId, updatedState);
198
+ return null;
199
+ }
200
+ if ('incident' in data) {
201
+ const incident = data['incident'];
202
+ const incidentName = (typeof incident['name'] === 'string') ? incident['name'] : 'Incident';
203
+ const status = (typeof incident['status'] === 'string') ? incident['status'] : 'unknown';
204
+ const impact = (typeof incident['impact'] === 'string') ? incident['impact'] : 'none';
205
+ const shortlink = (typeof incident['shortlink'] === 'string') ? incident['shortlink'] : undefined;
206
+ const rawUpdates = incident['incident_updates'];
207
+ const isUpdatesArray = Array.isArray(rawUpdates);
208
+ const updates = (isUpdatesArray === true) ? rawUpdates : [];
209
+ const latestUpdate = updates[0];
210
+ const latestBody = (latestUpdate !== undefined && typeof latestUpdate['body'] === 'string') ? latestUpdate['body'] : undefined;
211
+ const updateId = (latestUpdate !== undefined && typeof latestUpdate['id'] === 'string') ? latestUpdate['id'] : undefined;
212
+ const kvMissing = hasKv === false
213
+ || kv === undefined
214
+ || pageId === undefined;
215
+ if (kvMissing === true) {
216
+ const componentLines = [];
217
+ return buildIncidentNotification(serviceName, incidentName, status, impact, latestBody, shortlink, unsubscribeUrl, componentLines);
218
+ }
219
+ if (kv === undefined || pageId === undefined) {
220
+ const componentLines = [];
221
+ return buildIncidentNotification(serviceName, incidentName, status, impact, latestBody, shortlink, unsubscribeUrl, componentLines);
222
+ }
223
+ const existingState = await readState(kv, pageId);
224
+ const isDuplicate = existingState !== null
225
+ && updateId !== undefined
226
+ && existingState['updateId'] === updateId;
227
+ if (isDuplicate === true) {
228
+ return null;
229
+ }
230
+ const previousComponents = (existingState !== null) ? { ...existingState['components'] } : {};
231
+ const currentComponents = { ...previousComponents };
232
+ if (latestUpdate !== undefined) {
233
+ const affectedComponents = latestUpdate['affected_components'];
234
+ const isAffectedArray = Array.isArray(affectedComponents);
235
+ if (isAffectedArray === true && affectedComponents !== undefined) {
236
+ for (const affected of affectedComponents) {
237
+ const code = (typeof affected['code'] === 'string') ? affected['code'] : undefined;
238
+ const name = (typeof affected['name'] === 'string') ? affected['name'] : undefined;
239
+ const newStatus = (typeof affected['new_status'] === 'string') ? affected['new_status'] : undefined;
240
+ const canUpdateAffected = code !== undefined
241
+ && name !== undefined
242
+ && newStatus !== undefined;
243
+ if (canUpdateAffected === true
244
+ && code !== undefined
245
+ && name !== undefined
246
+ && newStatus !== undefined) {
247
+ Reflect.set(currentComponents, code, {
248
+ name, status: newStatus,
249
+ });
250
+ }
251
+ }
252
+ }
253
+ }
254
+ const diff = diffComponents(previousComponents, currentComponents);
255
+ const componentLines = formatComponentLines(diff);
256
+ const incidentId = (typeof incident['id'] === 'string') ? incident['id'] : undefined;
257
+ const newState = {
258
+ incidentId, incidentName, status, impact, body: latestBody, shortlink, serviceName, unsubscribeUrl, updateId, components: currentComponents,
259
+ };
260
+ await writeState(kv, pageId, newState);
261
+ return buildIncidentNotification(serviceName, incidentName, status, impact, latestBody, shortlink, unsubscribeUrl, componentLines);
262
+ }
263
+ throw new Error('Unrecognized Statuspage.io payload: expected "incident" field');
264
+ };
265
+ export { statuspageInterpreter, };
266
+ //# sourceMappingURL=statuspage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statuspage.js","sourceRoot":"","sources":["../../../../src/worker/interpreters/statuspage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerInterpretersSynologyInterpreter } from '../../types/worker/interpreters/synology.d.ts';
2
+ declare const synologyInterpreter: WorkerInterpretersSynologyInterpreter;
3
+ export { synologyInterpreter, };
4
+ //# sourceMappingURL=synology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synology.d.ts","sourceRoot":"","sources":["../../../../src/worker/interpreters/synology.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,qCAAqC,EAoCtC,MAAM,+CAA+C,CAAC;AAqEvD,QAAA,MAAM,mBAAmB,EAAE,qCAoN1B,CAAC;AAEF,OAAO,EACL,mBAAmB,GACpB,CAAC"}
@@ -0,0 +1,177 @@
1
+ import { LIB_REGEX_NON_LOWERCASE_ALPHANUMERIC } from '../../lib/regex.js';
2
+ const mapSeverityToPriority = (severity) => {
3
+ switch (severity.toLowerCase()) {
4
+ case 'critical': {
5
+ return 5;
6
+ }
7
+ case 'error': {
8
+ return 4;
9
+ }
10
+ case 'warning': {
11
+ return 3;
12
+ }
13
+ case 'info':
14
+ default: {
15
+ return 2;
16
+ }
17
+ }
18
+ };
19
+ const validateUrl = (rawUrl) => {
20
+ try {
21
+ const url = new URL(rawUrl);
22
+ return url.href;
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ };
28
+ const synologyInterpreter = (input) => {
29
+ if (typeof input === 'string' || input instanceof ArrayBuffer) {
30
+ let body = undefined;
31
+ if (input instanceof ArrayBuffer) {
32
+ const decoder = new TextDecoder('utf-8');
33
+ body = decoder.decode(input);
34
+ }
35
+ else {
36
+ body = input;
37
+ }
38
+ return {
39
+ notification: {
40
+ title: 'Synology DSM',
41
+ body,
42
+ priority: 3,
43
+ tags: ['synology'],
44
+ markdown: true,
45
+ },
46
+ };
47
+ }
48
+ const data = input;
49
+ let rawMessage = data['text'];
50
+ if (rawMessage === undefined) {
51
+ rawMessage = data['message'];
52
+ }
53
+ if (rawMessage === undefined) {
54
+ rawMessage = data['body'];
55
+ }
56
+ if (rawMessage === undefined) {
57
+ rawMessage = data['content'];
58
+ }
59
+ if (rawMessage === undefined) {
60
+ rawMessage = data['description'];
61
+ }
62
+ let message = (typeof rawMessage === 'string') ? rawMessage : JSON.stringify(data);
63
+ const rawPrefix = data['prefix'];
64
+ let hostname = undefined;
65
+ let timestamp = undefined;
66
+ if (typeof rawPrefix === 'string' && rawPrefix.trim() !== '') {
67
+ const prefixParts = rawPrefix.split('|').map((part) => part.trim());
68
+ if (prefixParts.length >= 2) {
69
+ hostname = (prefixParts[0] !== '') ? prefixParts[0] : undefined;
70
+ timestamp = (prefixParts[1] !== '') ? prefixParts[1] : undefined;
71
+ }
72
+ else {
73
+ hostname = (rawPrefix.trim() !== '') ? rawPrefix.trim() : undefined;
74
+ }
75
+ if (message.startsWith(rawPrefix) === true) {
76
+ message = message.slice(rawPrefix.length).trim();
77
+ }
78
+ }
79
+ if (hostname === undefined) {
80
+ let rawHostname = data['hostname'];
81
+ if (rawHostname === undefined) {
82
+ rawHostname = data['host'];
83
+ }
84
+ if (rawHostname === undefined) {
85
+ rawHostname = data['device'];
86
+ }
87
+ hostname = (typeof rawHostname === 'string') ? rawHostname : undefined;
88
+ }
89
+ if (timestamp === undefined) {
90
+ const rawDate = data['date'];
91
+ const rawTime = data['time'];
92
+ const date = (typeof rawDate === 'string') ? rawDate : undefined;
93
+ const time = (typeof rawTime === 'string') ? rawTime : undefined;
94
+ const parts = [
95
+ date,
96
+ time,
97
+ ].filter(Boolean).join(' ');
98
+ timestamp = (parts !== '') ? parts : undefined;
99
+ }
100
+ const rawSeverity = (data['severity'] !== undefined) ? data['severity'] : data['level'];
101
+ const severity = (typeof rawSeverity === 'string') ? rawSeverity : 'info';
102
+ let rawEvent = data['event'];
103
+ if (rawEvent === undefined) {
104
+ rawEvent = data['category'];
105
+ }
106
+ if (rawEvent === undefined) {
107
+ rawEvent = data['type'];
108
+ }
109
+ const event = (typeof rawEvent === 'string') ? rawEvent : undefined;
110
+ const title = (hostname !== undefined) ? hostname : 'Synology DSM';
111
+ let priority = mapSeverityToPriority(severity);
112
+ if (rawSeverity === undefined) {
113
+ const lowerMessage = message.toLowerCase();
114
+ if (lowerMessage.includes('is down') === true
115
+ || lowerMessage.includes('lost link') === true
116
+ || lowerMessage.includes('unreachable') === true) {
117
+ priority = 5;
118
+ }
119
+ else if (lowerMessage.includes('error') === true
120
+ || lowerMessage.includes('bad sector') === true
121
+ || lowerMessage.includes('failure') === true) {
122
+ priority = 4;
123
+ }
124
+ else if (lowerMessage.includes('warning') === true
125
+ || lowerMessage.includes('packet loss') === true
126
+ || lowerMessage.includes('high latency') === true
127
+ || lowerMessage.includes('running out') === true) {
128
+ priority = 3;
129
+ }
130
+ else if (lowerMessage.includes('is available') === true
131
+ || lowerMessage.includes('restored') === true
132
+ || lowerMessage.includes('completed successfully') === true) {
133
+ priority = 2;
134
+ }
135
+ }
136
+ const tags = ['synology'];
137
+ if (event !== undefined) {
138
+ const sanitizedEvent = event.toLowerCase().replace(new RegExp(LIB_REGEX_NON_LOWERCASE_ALPHANUMERIC, 'g'), '');
139
+ tags.push(sanitizedEvent);
140
+ }
141
+ if (severity !== 'info' && rawSeverity !== undefined) {
142
+ tags.push(severity);
143
+ }
144
+ if (priority === 5) {
145
+ tags.push('rotating_light');
146
+ }
147
+ else if (priority === 4) {
148
+ tags.push('warning');
149
+ }
150
+ else if (priority === 2) {
151
+ tags.push('white_check_mark');
152
+ }
153
+ const bodyLines = [];
154
+ if (timestamp !== undefined) {
155
+ bodyLines.push(`**${timestamp}**`);
156
+ }
157
+ bodyLines.push(message);
158
+ const rawProxyConfigDefault = {};
159
+ const proxyConfig = (typeof data['ntfy-reverse-proxy'] === 'object' && data['ntfy-reverse-proxy'] !== null) ? data['ntfy-reverse-proxy'] : rawProxyConfigDefault;
160
+ const rawUrl = proxyConfig['url'];
161
+ let dsmUrl = undefined;
162
+ if (typeof rawUrl === 'string') {
163
+ dsmUrl = validateUrl(rawUrl);
164
+ }
165
+ return {
166
+ notification: {
167
+ title,
168
+ body: bodyLines.join('\n'),
169
+ priority,
170
+ tags,
171
+ markdown: true,
172
+ ...(dsmUrl !== undefined ? { actions: `view, Open DSM, ${dsmUrl}, clear=true` } : {}),
173
+ },
174
+ };
175
+ };
176
+ export { synologyInterpreter, };
177
+ //# sourceMappingURL=synology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synology.js","sourceRoot":"","sources":["../../../../src/worker/interpreters/synology.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerInterpretersUnifiInterpreter } from '../../types/worker/interpreters/unifi.d.ts';
2
+ declare const unifiInterpreter: WorkerInterpretersUnifiInterpreter;
3
+ export { unifiInterpreter, };
4
+ //# sourceMappingURL=unifi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unifi.d.ts","sourceRoot":"","sources":["../../../../src/worker/interpreters/unifi.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAMV,kCAAkC,EAiCnC,MAAM,4CAA4C,CAAC;AAoJpD,QAAA,MAAM,gBAAgB,EAAE,kCAoHvB,CAAC;AAEF,OAAO,EACL,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { LIB_REGEX_UNIFI_ALERT_LINE, LIB_REGEX_UNIFI_DEVICE_NAME_LINE, LIB_REGEX_UNIFI_DEVICE_URL_LINE, LIB_REGEX_UNIFI_SUBJECT_PREFIX, LIB_REGEX_UNIFI_TIME_LINE, } from '../../lib/regex.js';
2
+ const stripSubjectPrefix = (subject) => {
3
+ const stripped = subject.replace(new RegExp(LIB_REGEX_UNIFI_SUBJECT_PREFIX), '');
4
+ return (stripped.trim() !== '') ? stripped.trim() : subject;
5
+ };
6
+ const mapEventToPriority = (text) => {
7
+ const lower = text.toLowerCase();
8
+ if (lower.includes('ids') === true
9
+ || lower.includes('ips') === true
10
+ || lower.includes('threat') === true
11
+ || lower.includes('security') === true) {
12
+ return 5;
13
+ }
14
+ if (lower.includes('disconnect') === true
15
+ || lower.includes('down') === true
16
+ || lower.includes('failover') === true
17
+ || lower.includes('lost') === true) {
18
+ return 4;
19
+ }
20
+ if (lower.includes('connect') === true
21
+ || lower.includes('reconnect') === true
22
+ || lower.includes('up') === true
23
+ || lower.includes('restored') === true) {
24
+ return 2;
25
+ }
26
+ return 3;
27
+ };
28
+ const mapPriorityToEmojiTag = (priority) => {
29
+ switch (priority) {
30
+ case 5: {
31
+ return 'rotating_light';
32
+ }
33
+ case 4: {
34
+ return 'warning';
35
+ }
36
+ case 2: {
37
+ return 'white_check_mark';
38
+ }
39
+ default: {
40
+ return 'bell';
41
+ }
42
+ }
43
+ };
44
+ const extractDeviceTags = (text) => {
45
+ const lower = text.toLowerCase();
46
+ const tags = [];
47
+ if (lower.includes('ap') === true
48
+ || lower.includes('access point') === true) {
49
+ tags.push('ap');
50
+ }
51
+ if (lower.includes('switch') === true) {
52
+ tags.push('switch');
53
+ }
54
+ if (lower.includes('gateway') === true
55
+ || lower.includes('wan') === true
56
+ || lower.includes('usg') === true
57
+ || lower.includes('udm') === true) {
58
+ tags.push('gateway');
59
+ }
60
+ return tags;
61
+ };
62
+ const unifiInterpreter = (input) => {
63
+ if (typeof input === 'string') {
64
+ const priority = mapEventToPriority(input);
65
+ const emojiTag = mapPriorityToEmojiTag(priority);
66
+ return {
67
+ notification: {
68
+ title: 'UniFi',
69
+ body: input,
70
+ priority,
71
+ tags: [
72
+ 'unifi',
73
+ ...extractDeviceTags(input),
74
+ emojiTag,
75
+ ],
76
+ markdown: true,
77
+ },
78
+ };
79
+ }
80
+ if (input instanceof ArrayBuffer) {
81
+ const decoder = new TextDecoder('utf-8');
82
+ const body = decoder.decode(input);
83
+ const priority = mapEventToPriority(body);
84
+ const emojiTag = mapPriorityToEmojiTag(priority);
85
+ return {
86
+ notification: {
87
+ title: 'UniFi',
88
+ body,
89
+ priority,
90
+ tags: [
91
+ 'unifi',
92
+ ...extractDeviceTags(body),
93
+ emojiTag,
94
+ ],
95
+ markdown: true,
96
+ },
97
+ };
98
+ }
99
+ const data = input;
100
+ const rawSubject = data['subject'];
101
+ const subject = (typeof rawSubject === 'string') ? rawSubject : '';
102
+ const rawTextBody = data['textBody'];
103
+ const textBody = (typeof rawTextBody === 'string') ? rawTextBody : JSON.stringify(data);
104
+ const eventType = (subject !== '') ? stripSubjectPrefix(subject) : 'UniFi';
105
+ const combinedText = `${subject} ${textBody}`;
106
+ const priority = mapEventToPriority(combinedText);
107
+ const deviceTags = extractDeviceTags(combinedText);
108
+ const emojiTag = mapPriorityToEmojiTag(priority);
109
+ const tags = [
110
+ 'unifi',
111
+ ...deviceTags,
112
+ emojiTag,
113
+ ];
114
+ const alertMatch = textBody.match(new RegExp(LIB_REGEX_UNIFI_ALERT_LINE, 'i'));
115
+ const deviceNameMatch = textBody.match(new RegExp(LIB_REGEX_UNIFI_DEVICE_NAME_LINE, 'i'));
116
+ const timeMatch = textBody.match(new RegExp(LIB_REGEX_UNIFI_TIME_LINE, 'i'));
117
+ const deviceUrlMatch = textBody.match(new RegExp(LIB_REGEX_UNIFI_DEVICE_URL_LINE, 'i'));
118
+ const alert = (alertMatch !== null && alertMatch[1] !== undefined) ? alertMatch[1].trim() : undefined;
119
+ const deviceName = (deviceNameMatch !== null && deviceNameMatch[1] !== undefined) ? deviceNameMatch[1].trim() : undefined;
120
+ const time = (timeMatch !== null && timeMatch[1] !== undefined) ? timeMatch[1].trim() : undefined;
121
+ const deviceUrl = (deviceUrlMatch !== null && deviceUrlMatch[1] !== undefined) ? deviceUrlMatch[1] : undefined;
122
+ const bodyLines = [];
123
+ if (alert !== undefined) {
124
+ bodyLines.push(alert);
125
+ }
126
+ const details = [];
127
+ if (deviceName !== undefined) {
128
+ details.push(`**Device:** ${deviceName}`);
129
+ }
130
+ if (time !== undefined) {
131
+ details.push(`**Time:** ${time}`);
132
+ }
133
+ if (details.length > 0) {
134
+ if (bodyLines.length > 0) {
135
+ bodyLines.push('');
136
+ }
137
+ bodyLines.push(...details);
138
+ }
139
+ const body = (bodyLines.length > 0) ? bodyLines.join('\n') : textBody;
140
+ return {
141
+ notification: {
142
+ title: eventType,
143
+ body,
144
+ priority,
145
+ tags,
146
+ markdown: true,
147
+ ...(deviceUrl !== undefined ? { actions: `view, Open UniFi, ${deviceUrl}, clear=true` } : {}),
148
+ },
149
+ };
150
+ };
151
+ export { unifiInterpreter, };
152
+ //# sourceMappingURL=unifi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unifi.js","sourceRoot":"","sources":["../../../../src/worker/interpreters/unifi.ts"],"names":[],"mappings":"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"}