atmosx-nwws-parser 1.0.16 → 1.0.17
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/bootstrap.js +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/src/events.js +17 -7
- package/src/stanza.js +1 -1
- package/src/vtec.js +1 -1
- package/test.js +1 -0
package/bootstrap.js
CHANGED
package/index.js
CHANGED
|
@@ -28,7 +28,7 @@ class NoaaWeatherWireServiceCore {
|
|
|
28
28
|
if (loader.settings.cacheSettings.readCache && loader.settings.cacheSettings.cacheDir) {
|
|
29
29
|
let target = `${loader.settings.cacheSettings.cacheDir}/nwws-raw-category-defaults-raw-vtec.bin`;
|
|
30
30
|
if (loader.packages.fs.existsSync(target)) {
|
|
31
|
-
this.forwardCustomStanza(loader.packages.fs.readFileSync(target, 'utf8'), { awipsid: 'alert', category: 'default', raw: true });
|
|
31
|
+
this.forwardCustomStanza(loader.packages.fs.readFileSync(target, 'utf8'), { awipsid: 'alert', category: 'default', raw: true, issue: undefined });
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
package/package.json
CHANGED
package/src/events.js
CHANGED
|
@@ -26,13 +26,14 @@ class NoaaWeatherWireServiceEvents {
|
|
|
26
26
|
let tags = [`No tags found`];
|
|
27
27
|
let eventName = event.properties.event
|
|
28
28
|
let dmgTheat = event.properties.parameters.thunderstormDamageThreat?.[0] || event.properties.parameters.tornadoDamageThreat?.[0] || `N/A`;
|
|
29
|
+
let torThreat = event.properties.parameters.tornadoDetection || `N/A`;
|
|
29
30
|
let description = event.properties.description.toLowerCase() || `No description available.`;
|
|
30
31
|
if (description.includes(`flash flood emergency`) && eventName == `Flash Flood Warning`) eventName = `Flash Flood Emergency`;
|
|
31
|
-
if (description.includes(`particularly dangerous situation`) && eventName == `Tornado Warning` && dmgTheat == `CONSIDERABLE`) eventName = `
|
|
32
|
-
if (description.includes(`particularly dangerous situation`) && eventName == `Tornado Watch`) eventName = `
|
|
33
|
-
if (description.includes(`extremely dangerous situation`) && eventName == `Severe Thunderstorm Warning`) eventName = `
|
|
32
|
+
if (description.includes(`particularly dangerous situation`) && eventName == `Tornado Warning` && dmgTheat == `CONSIDERABLE`) eventName = `PDS Tornado Warning`;
|
|
33
|
+
if (description.includes(`particularly dangerous situation`) && eventName == `Tornado Watch`) eventName = `PDS Tornado Watch`;
|
|
34
|
+
if (description.includes(`extremely dangerous situation`) && eventName == `Severe Thunderstorm Warning`) eventName = `EDS Severe Thunderstorm Warning`;
|
|
34
35
|
if (description.includes(`tornado emergency`) && eventName == `Tornado Warning` && dmgTheat == `CATASTROPHIC`) eventName = `Tornado Emergency`;
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
if (eventName == `Tornado Warning`) {
|
|
37
38
|
eventName = `Radar Indicated Tornado Warning`;
|
|
38
39
|
if (event.properties.parameters.tornadoDetection == `RADAR INDICATED`) eventName = `Radar Indicated Tornado Warning`;
|
|
@@ -41,6 +42,7 @@ class NoaaWeatherWireServiceEvents {
|
|
|
41
42
|
if (eventName == `Severe Thunderstorm Warning`) {
|
|
42
43
|
if (dmgTheat == `CONSIDERABLE`) eventName = `Considerable Severe Thunderstorm Warning`;
|
|
43
44
|
if (dmgTheat == `DESTRUCTIVE`) eventName = `Destructive Severe Thunderstorm Warning`;
|
|
45
|
+
if (torThreat == `POSSIBLE`) eventName = `${eventName} (TPROB)`;
|
|
44
46
|
}
|
|
45
47
|
if (eventName == `Flash Flood Warning`) {
|
|
46
48
|
if (dmgTheat == `CONSIDERABLE`) eventName = `Considerable Flash Flood Warning`;
|
|
@@ -70,7 +72,14 @@ class NoaaWeatherWireServiceEvents {
|
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
if (loader.settings.alertSettings.filteredAlerts && loader.settings.alertSettings.filteredAlerts.length > 0) {
|
|
73
|
-
alerts = alerts.filter(alert =>
|
|
75
|
+
alerts = alerts.filter(alert =>
|
|
76
|
+
loader.settings.alertSettings.filteredAlerts.includes(alert.properties.event)
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
if (loader.settings.alertSettings.expiryCheck) {
|
|
80
|
+
alerts = alerts.filter(alert =>
|
|
81
|
+
new Date(alert.properties.expires) > new Date()
|
|
82
|
+
);
|
|
74
83
|
}
|
|
75
84
|
if (alerts.length === 0) { return; }
|
|
76
85
|
loader.static.events.emit(`onAlert`, alerts);
|
|
@@ -150,6 +159,7 @@ class NoaaWeatherWireServiceEvents {
|
|
|
150
159
|
let getHail = loader.packages.mText.getString(msg, `MAX HAIL SIZE...`, [`IN`]) || loader.packages.mText.getString(msg, `HAIL...`, [`IN`]);
|
|
151
160
|
let getGusts = loader.packages.mText.getString(msg, `MAX WIND GUST...`) || loader.packages.mText.getString(msg, `WIND...`);
|
|
152
161
|
let getThreat = loader.packages.mText.getString(msg, `DAMAGE THREAT...`);
|
|
162
|
+
let getTempIssue = loader.packages.mText.getString(msg, `ISSUED TIME...`);
|
|
153
163
|
let senderOffice = loader.packages.mText.getOffice(msg) || vtec.tracking.split(`-`)[0];
|
|
154
164
|
let getCoordinates = loader.packages.mText.getPolygonCoordinates(msg);
|
|
155
165
|
let getDescription = loader.packages.mText.getCleanDescription(msg, vtec);
|
|
@@ -161,8 +171,8 @@ class NoaaWeatherWireServiceEvents {
|
|
|
161
171
|
history: [{description: getDescription, action: vtec.status, issued: new Date(vtec.issued)}],
|
|
162
172
|
properties: {
|
|
163
173
|
areaDesc: mUgc.locations.join(`; `) || `N/A`,
|
|
164
|
-
expires: new Date(vtec.expires) == `Invalid Date` ? new Date(
|
|
165
|
-
sent: new Date(vtec.issued),
|
|
174
|
+
expires: new Date(vtec.expires) == `Invalid Date` ? new Date(9999, 0, 1) : new Date(vtec.expires),
|
|
175
|
+
sent: new Date(vtec.issued) == `Invalid Date` ? getTempIssue ? new Date(getTempIssue) : new Date(vtec.issued) : new Date(vtec.issued),
|
|
166
176
|
messageType: vtec.status,
|
|
167
177
|
event: vtec.event || `Unknown Event`,
|
|
168
178
|
sender: senderOffice,
|
package/src/stanza.js
CHANGED
|
@@ -96,7 +96,7 @@ class NoaaWeatherWireServiceStanza {
|
|
|
96
96
|
|
|
97
97
|
saveCache = function(message, attributes, type, isCap, isVtec) {
|
|
98
98
|
if (!loader.settings.cacheSettings.cacheDir) return;
|
|
99
|
-
loader.packages.fs.appendFileSync(`${loader.settings.cacheSettings.cacheDir}/nwws-raw-category-${type}s-${isCap ? 'cap' : 'raw'}${isVtec ? '-vtec' : ''}.bin`, `=================================================\n${new Date().toISOString().replace(/[:.]/g, '-')}\n\n
|
|
99
|
+
loader.packages.fs.appendFileSync(`${loader.settings.cacheSettings.cacheDir}/nwws-raw-category-${type}s-${isCap ? 'cap' : 'raw'}${isVtec ? '-vtec' : ''}.bin`, `=================================================\n${new Date().toISOString().replace(/[:.]/g, '-')}\n=================================================\n\n${message}\nISSUED TIME...${new Date(attributes.issue).toISOString()}\n\n`, 'utf8');
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
|
package/src/vtec.js
CHANGED
|
@@ -35,7 +35,7 @@ class NoaaWeatherWireServiceVtec {
|
|
|
35
35
|
status: this.getEventStatus(splitVTEC),
|
|
36
36
|
wmo: message.match(new RegExp(loader.definitions.expressions.wmo, 'gimu')),
|
|
37
37
|
expires: this.getExpires(vtecDates),
|
|
38
|
-
issued: attributes.issue
|
|
38
|
+
issued: attributes.issue
|
|
39
39
|
};
|
|
40
40
|
});
|
|
41
41
|
return vtecs;
|
package/test.js
CHANGED
|
@@ -5,6 +5,7 @@ let Client = new AtmosXWireParser({
|
|
|
5
5
|
onlyCap: false, // Set to true to only receive CAP messages only
|
|
6
6
|
betterEvents: true, // Set to true to receive better event handling
|
|
7
7
|
ugcPolygons: false, // Set to true to receive UGC Polygons instead of reading from raw products.
|
|
8
|
+
expiryCheck: true, // Set to true to filter out expired alerts
|
|
8
9
|
filteredAlerts: [] // Alerts you want to only log, leave empty to receive all alerts (Ex. ["Tornado Warning", "Radar Indicated Tornado Warning"])
|
|
9
10
|
},
|
|
10
11
|
xmpp: {
|