@atmosx/event-product-parser 3.0.51 → 3.0.52
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/.vscode/settings.json +3 -3
- package/CODE_OF_CONDUCT.md +9 -9
- package/CONTRIBUTING.md +29 -29
- package/LICENSE +17 -17
- package/README.md +443 -444
- package/SECURITY.md +20 -20
- package/SUPPORTED_EVENTS.md +369 -368
- package/dist/cjs/index.cjs +161 -204
- package/dist/esm/index.mjs +160 -203
- package/package.json +52 -52
- package/src/@building/building.attachments.ts +82 -82
- package/src/@building/building.clean.ts +29 -29
- package/src/@building/building.create.ts +55 -55
- package/src/@building/building.enhance.ts +59 -59
- package/src/@building/building.geometry.ts +47 -47
- package/src/@building/building.headers.ts +36 -36
- package/src/@building/building.office.ts +42 -42
- package/src/@building/building.polygon.ts +69 -69
- package/src/@building/building.properties.ts +95 -95
- package/src/@building/building.signature.ts +60 -60
- package/src/@building/building.tags.ts +23 -23
- package/src/@building/building.tracking.ts +67 -67
- package/src/@building/building.validate.ts +152 -151
- package/src/@core/core.clearEvents.ts +30 -30
- package/src/@core/core.createListener.ts +23 -23
- package/src/@core/core.getEvents.ts +23 -23
- package/src/@core/core.getNodes.ts +23 -23
- package/src/@core/core.getRandomEvent.ts +23 -23
- package/src/@core/core.getVersion.ts +23 -23
- package/src/@core/core.manualEvent.ts +38 -0
- package/src/@core/core.query.ts +38 -38
- package/src/@core/core.setNode.ts +80 -80
- package/src/@core/core.start.ts +60 -60
- package/src/@core/core.stop.ts +31 -31
- package/src/@dictionaries/dictionaries.actions.ts +27 -27
- package/src/@dictionaries/dictionaries.awips.ts +363 -363
- package/src/@dictionaries/dictionaries.cancellation.ts +30 -30
- package/src/@dictionaries/dictionaries.causes.ts +35 -35
- package/src/@dictionaries/dictionaries.correlations.ts +42 -42
- package/src/@dictionaries/dictionaries.enhanced.ts +66 -109
- package/src/@dictionaries/dictionaries.events.ts +82 -82
- package/src/@dictionaries/dictionaries.expressions.ts +28 -28
- package/src/@dictionaries/dictionaries.global.ts +24 -0
- package/src/@dictionaries/dictionaries.hail.ts +35 -35
- package/src/@dictionaries/dictionaries.icao.ts +258 -258
- package/src/@dictionaries/dictionaries.matches.ts +54 -35
- package/src/@dictionaries/dictionaries.products.ts +24 -24
- package/src/@dictionaries/dictionaries.records.ts +25 -25
- package/src/@dictionaries/dictionaries.severity.ts +27 -27
- package/src/@dictionaries/dictionaries.shapefiles.ts +35 -35
- package/src/@dictionaries/dictionaries.states.ts +71 -71
- package/src/@dictionaries/dictionaries.status.ts +30 -30
- package/src/@dictionaries/dictionaries.tags.ts +92 -92
- package/src/@dictionaries/dictionaries.testing.ts +24 -24
- package/src/@events/events.api.ts +116 -116
- package/src/@events/events.text.ts +84 -80
- package/src/@events/events.ugc.ts +89 -85
- package/src/@events/events.vtec.ts +86 -86
- package/src/@manager/manager.mkEvent.ts +97 -93
- package/src/@manager/manager.rmEvent.ts +56 -51
- package/src/@manager/manager.setHash.ts +35 -35
- package/src/@manager/manager.updateEvents.ts +32 -32
- package/src/@manager/manager.updateListener.ts +154 -154
- package/src/@manager/manager.updateNodes.ts +53 -53
- package/src/@modules/@database/database.broadcastify.ts +66 -66
- package/src/@modules/@database/database.cache.ts +49 -49
- package/src/@modules/@database/database.init.ts +58 -58
- package/src/@modules/@database/database.shapefiles.ts +92 -92
- package/src/@modules/@database/database.stanza.ts +46 -46
- package/src/@modules/@eas/eas.getCleanDescription.ts +91 -91
- package/src/@modules/@eas/eas.getFloatPCM16.ts +29 -29
- package/src/@modules/@eas/eas.getMergedPCM16.ts +32 -32
- package/src/@modules/@eas/eas.getPCM16.ts +52 -52
- package/src/@modules/@eas/eas.getPCMToFloat.ts +26 -26
- package/src/@modules/@eas/eas.getSampledPCM16.ts +36 -36
- package/src/@modules/@eas/eas.getTTS.ts +54 -54
- package/src/@modules/@eas/eas.getWavPCM16.ts +52 -52
- package/src/@modules/@eas/eas.setAFSK.ts +51 -51
- package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -31
- package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
- package/src/@modules/@eas/eas.setEasTone.ts +151 -151
- package/src/@modules/@eas/eas.setNoise.ts +32 -32
- package/src/@modules/@eas/eas.setRadioEffect.ts +50 -50
- package/src/@modules/@eas/eas.setSameHeader.ts +44 -44
- package/src/@modules/@stanza/stanza.getAwipsType.ts +45 -45
- package/src/@modules/@stanza/stanza.validate.ts +49 -49
- package/src/@modules/@utilities/utilities.createHttp.ts +70 -70
- package/src/@modules/@utilities/utilities.getFormattedTime.ts +43 -43
- package/src/@modules/@utilities/utilities.getLatestIssuance.ts +32 -32
- package/src/@modules/@utilities/utilities.getMatched.ts +33 -33
- package/src/@modules/@utilities/utilities.getSettings.ts +25 -25
- package/src/@modules/@utilities/utilities.getShapeNearestPoint.ts +114 -114
- package/src/@modules/@utilities/utilities.setCronSchedule.ts +94 -94
- package/src/@modules/@utilities/utilities.setDebug.ts +38 -38
- package/src/@modules/@utilities/utilities.setEventEmit.ts +41 -41
- package/src/@modules/@utilities/utilities.setListener.ts +30 -30
- package/src/@modules/@utilities/utilities.setSettings.ts +42 -42
- package/src/@modules/@utilities/utilities.setSleep.ts +33 -33
- package/src/@modules/@utilities/utilities.setTimeoutAction.ts +62 -62
- package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
- package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -57
- package/src/@modules/@xmpp/xmpp.xError.ts +26 -26
- package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -36
- package/src/@modules/@xmpp/xmpp.xOnline.ts +45 -44
- package/src/@modules/@xmpp/xmpp.xReconnect.ts +64 -64
- package/src/@modules/@xmpp/xmpp.xStanza.ts +62 -62
- package/src/@parsers/@hvtec/hvtec.extract.ts +39 -39
- package/src/@parsers/@pvtec/pvtec.expires.ts +25 -25
- package/src/@parsers/@pvtec/pvtec.extract.ts +48 -48
- package/src/@parsers/@text/text.getDescriptionFromProduct.ts +52 -52
- package/src/@parsers/@text/text.getEmbed.ts +55 -55
- package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
- package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
- package/src/@parsers/@text/text.getXML.ts +60 -60
- package/src/@parsers/@ugc/ugc.coordinates.ts +110 -110
- package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
- package/src/@parsers/@ugc/ugc.extract.ts +36 -36
- package/src/@parsers/@ugc/ugc.getCache.ts +23 -23
- package/src/@parsers/@ugc/ugc.header.ts +29 -29
- package/src/@parsers/@ugc/ugc.locations.ts +56 -56
- package/src/@parsers/@ugc/ugc.setCache.ts +27 -27
- package/src/@parsers/@ugc/ugc.zones.ts +51 -51
- package/src/@types/type.attributes.ts +28 -28
- package/src/@types/type.compiled.ts +34 -34
- package/src/@types/type.event.ts +69 -69
- package/src/@types/type.hash.ts +24 -24
- package/src/@types/type.hvtec.ts +25 -25
- package/src/@types/type.listener.ts +32 -32
- package/src/@types/type.properties.ts +77 -77
- package/src/@types/type.pvtec.ts +30 -30
- package/src/@types/type.settings.ts +84 -84
- package/src/@types/type.stanza.ts +37 -37
- package/src/@types/type.ugc.ts +24 -24
- package/src/bootstrap.ts +115 -115
- package/src/index.ts +74 -74
- package/test.js +92 -92
- package/tsconfig.json +13 -13
- package/tsup.config.ts +15 -15
- package/src/@core/core.createEvent.ts +0 -82
package/package.json
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@atmosx/event-product-parser",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "NOAA Weather Wire & NWS API Parser - Built for standalone and Project AtmosphericX Integration.",
|
|
5
|
-
"main": "dist/cjs/index.cjs",
|
|
6
|
-
"module": "dist/esm/index.mjs",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/AtmosphericX/event-product-parser",
|
|
10
|
-
"branch": "v3-beta-branch"
|
|
11
|
-
},
|
|
12
|
-
"scripts": {
|
|
13
|
-
"start": "cd ./test && node ./index.js",
|
|
14
|
-
"build": "tsup && cd ./test && node ./index.js",
|
|
15
|
-
"publish": "tsup && npm publish --access public",
|
|
16
|
-
"publish-beta-branch": "tsup && npm publish --tag v3-beta-branch --access public"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"NWWS",
|
|
20
|
-
"NOAA Weather Wire Service",
|
|
21
|
-
"TypeScript",
|
|
22
|
-
"XMPP",
|
|
23
|
-
"Parser",
|
|
24
|
-
"JavaScript",
|
|
25
|
-
"CommonJS",
|
|
26
|
-
"ESM"
|
|
27
|
-
],
|
|
28
|
-
"author": "k3yomi, StarflightWx",
|
|
29
|
-
"license": "MIT",
|
|
30
|
-
"bugs": {
|
|
31
|
-
"url": "https://github.com/AtmosphericX/event-product-parser/issues"
|
|
32
|
-
},
|
|
33
|
-
"homepage": "https://github.com/AtmosphericX/event-product-parser#readme",
|
|
34
|
-
"dependencies": {
|
|
35
|
-
"@xmpp/client": "0.14.0",
|
|
36
|
-
"better-sqlite3": "12.9.0",
|
|
37
|
-
"croner": "10.0.1",
|
|
38
|
-
"express": "5.2.1",
|
|
39
|
-
"express-ws": "5.0.2",
|
|
40
|
-
"jszip": "3.10.1",
|
|
41
|
-
"p-queue": "^9.3.0",
|
|
42
|
-
"polygon-clipping": "0.15.7",
|
|
43
|
-
"say": "0.16.0",
|
|
44
|
-
"shapefile": "0.6.6",
|
|
45
|
-
"typescript": "5.9.3",
|
|
46
|
-
"xml2js": "0.6.2"
|
|
47
|
-
},
|
|
48
|
-
"devDependencies": {
|
|
49
|
-
"@types/node": "25.2.0",
|
|
50
|
-
"tsup": "8.5.1"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@atmosx/event-product-parser",
|
|
3
|
+
"version": "3.0.52",
|
|
4
|
+
"description": "NOAA Weather Wire & NWS API Parser - Built for standalone and Project AtmosphericX Integration.",
|
|
5
|
+
"main": "dist/cjs/index.cjs",
|
|
6
|
+
"module": "dist/esm/index.mjs",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/AtmosphericX/event-product-parser",
|
|
10
|
+
"branch": "v3-beta-branch"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"start": "cd ./test && node ./index.js",
|
|
14
|
+
"build": "tsup && cd ./test && node ./index.js",
|
|
15
|
+
"publish": "tsup && npm publish --access public",
|
|
16
|
+
"publish-beta-branch": "tsup && npm publish --tag v3-beta-branch --access public"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"NWWS",
|
|
20
|
+
"NOAA Weather Wire Service",
|
|
21
|
+
"TypeScript",
|
|
22
|
+
"XMPP",
|
|
23
|
+
"Parser",
|
|
24
|
+
"JavaScript",
|
|
25
|
+
"CommonJS",
|
|
26
|
+
"ESM"
|
|
27
|
+
],
|
|
28
|
+
"author": "k3yomi, StarflightWx",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/AtmosphericX/event-product-parser/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/AtmosphericX/event-product-parser#readme",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@xmpp/client": "0.14.0",
|
|
36
|
+
"better-sqlite3": "12.9.0",
|
|
37
|
+
"croner": "10.0.1",
|
|
38
|
+
"express": "5.2.1",
|
|
39
|
+
"express-ws": "5.0.2",
|
|
40
|
+
"jszip": "3.10.1",
|
|
41
|
+
"p-queue": "^9.3.0",
|
|
42
|
+
"polygon-clipping": "0.15.7",
|
|
43
|
+
"say": "0.16.0",
|
|
44
|
+
"shapefile": "0.6.6",
|
|
45
|
+
"typescript": "5.9.3",
|
|
46
|
+
"xml2js": "0.6.2"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "25.2.0",
|
|
50
|
+
"tsup": "8.5.1"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { TypeEvent } from "../@types/type.event"
|
|
21
|
-
import { bootstrap } from "../bootstrap"
|
|
22
|
-
import { dict_states } from "../@dictionaries/dictionaries.states"
|
|
23
|
-
import { dict_expressions } from "../@dictionaries/dictionaries.expressions"
|
|
24
|
-
import { getLatestIssuance } from "../@modules/@utilities/utilities.getLatestIssuance";
|
|
25
|
-
|
|
26
|
-
interface GetEventAttachmentsResponse {
|
|
27
|
-
name: string
|
|
28
|
-
link: string
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
type BroadcastifyResponse = {
|
|
32
|
-
state: string
|
|
33
|
-
county: string
|
|
34
|
-
feed: string
|
|
35
|
-
type: string
|
|
36
|
-
link: string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const getEventAttachments = (event: TypeEvent): GetEventAttachmentsResponse[] | null => {
|
|
40
|
-
let attachments = [];
|
|
41
|
-
const issuanceTime = getLatestIssuance();
|
|
42
|
-
const spcNumber = event?.properties?.discussion_parameters?.discussion_number;
|
|
43
|
-
const watchNumber = event?.properties?.watch_parameters?.watch_number;
|
|
44
|
-
const locations = event?.properties?.locations_array;
|
|
45
|
-
const events = [
|
|
46
|
-
{ target: "SPC Day 1 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day1otlk_${issuanceTime}.png` },
|
|
47
|
-
{ target: "SPC Day 2 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day2otlk.png` },
|
|
48
|
-
{ target: "SPC Day 3 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day3otlk.png` },
|
|
49
|
-
{ target: "Mesoscale Discussion", attachment: `https://www.spc.noaa.gov/products/md/mcd${spcNumber}.png` },
|
|
50
|
-
{ target: "Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
51
|
-
{ target: "PDS Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
52
|
-
{ target: "Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
53
|
-
{ target: "PDS Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` }
|
|
54
|
-
]
|
|
55
|
-
|
|
56
|
-
if (events.find((e) => e.target === event.properties.event)) {
|
|
57
|
-
attachments.push({ name: `Image: Graphic`, link: events.find((e) => e.target === event.properties.event).attachment });
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
for (const location of locations) {
|
|
61
|
-
if (dict_expressions.location.test(location)) {
|
|
62
|
-
const lines = [`Northern`, `Southern`, `Eastern`, `Western`, `Inland`, `Costal`, `County`]
|
|
63
|
-
const county = location?.split(',')[0]?.trim().replace(new RegExp(`^(${lines.join('|')}) `), '')
|
|
64
|
-
const state = dict_states[location?.split(',')[1]?.trim()]
|
|
65
|
-
const feeds = bootstrap.database.prepare(`SELECT * FROM broadcastify WHERE state = ? AND county = ?`).all(state, county).sort((a, b) => {
|
|
66
|
-
const typeOrder = ['Other', 'Public Safety'];
|
|
67
|
-
const indexA = typeOrder.indexOf(a.type);
|
|
68
|
-
const indexB = typeOrder.indexOf(b.type);
|
|
69
|
-
return indexA - indexB;
|
|
70
|
-
});
|
|
71
|
-
const tags = bootstrap.settings.BroadcastifySettings.BroadcastifyTags;
|
|
72
|
-
const filtered = feeds.filter((feed: BroadcastifyResponse) => tags.includes(feed.type));
|
|
73
|
-
if (filtered.length > 0) {
|
|
74
|
-
filtered.map((filtered: BroadcastifyResponse) => {
|
|
75
|
-
if (!attachments.some((a) => a.link === filtered.link)) {
|
|
76
|
-
attachments.push({ name: `${filtered.type}: ${filtered.feed}`, link: filtered.link });
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return attachments;
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { TypeEvent } from "../@types/type.event"
|
|
21
|
+
import { bootstrap } from "../bootstrap"
|
|
22
|
+
import { dict_states } from "../@dictionaries/dictionaries.states"
|
|
23
|
+
import { dict_expressions } from "../@dictionaries/dictionaries.expressions"
|
|
24
|
+
import { getLatestIssuance } from "../@modules/@utilities/utilities.getLatestIssuance";
|
|
25
|
+
|
|
26
|
+
interface GetEventAttachmentsResponse {
|
|
27
|
+
name: string
|
|
28
|
+
link: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type BroadcastifyResponse = {
|
|
32
|
+
state: string
|
|
33
|
+
county: string
|
|
34
|
+
feed: string
|
|
35
|
+
type: string
|
|
36
|
+
link: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const getEventAttachments = (event: TypeEvent): GetEventAttachmentsResponse[] | null => {
|
|
40
|
+
let attachments = [];
|
|
41
|
+
const issuanceTime = getLatestIssuance();
|
|
42
|
+
const spcNumber = event?.properties?.discussion_parameters?.discussion_number;
|
|
43
|
+
const watchNumber = event?.properties?.watch_parameters?.watch_number;
|
|
44
|
+
const locations = event?.properties?.locations_array;
|
|
45
|
+
const events = [
|
|
46
|
+
{ target: "SPC Day 1 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day1otlk_${issuanceTime}.png` },
|
|
47
|
+
{ target: "SPC Day 2 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day2otlk.png` },
|
|
48
|
+
{ target: "SPC Day 3 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day3otlk.png` },
|
|
49
|
+
{ target: "Mesoscale Discussion", attachment: `https://www.spc.noaa.gov/products/md/mcd${spcNumber}.png` },
|
|
50
|
+
{ target: "Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
51
|
+
{ target: "PDS Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
52
|
+
{ target: "Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
|
|
53
|
+
{ target: "PDS Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` }
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
if (events.find((e) => e.target === event.properties.event)) {
|
|
57
|
+
attachments.push({ name: `Image: Graphic`, link: events.find((e) => e.target.toLowerCase() === event.properties.event.toLowerCase()).attachment });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (const location of locations) {
|
|
61
|
+
if (dict_expressions.location.test(location)) {
|
|
62
|
+
const lines = [`Northern`, `Southern`, `Eastern`, `Western`, `Inland`, `Costal`, `County`]
|
|
63
|
+
const county = location?.split(',')[0]?.trim().replace(new RegExp(`^(${lines.join('|')}) `), '')
|
|
64
|
+
const state = dict_states[location?.split(',')[1]?.trim()]
|
|
65
|
+
const feeds = bootstrap.database.prepare(`SELECT * FROM broadcastify WHERE state = ? AND county = ?`).all(state, county).sort((a, b) => {
|
|
66
|
+
const typeOrder = ['Other', 'Public Safety'];
|
|
67
|
+
const indexA = typeOrder.indexOf(a.type);
|
|
68
|
+
const indexB = typeOrder.indexOf(b.type);
|
|
69
|
+
return indexA - indexB;
|
|
70
|
+
});
|
|
71
|
+
const tags = bootstrap.settings.BroadcastifySettings.BroadcastifyTags;
|
|
72
|
+
const filtered = feeds.filter((feed: BroadcastifyResponse) => tags.includes(feed.type));
|
|
73
|
+
if (filtered.length > 0) {
|
|
74
|
+
filtered.map((filtered: BroadcastifyResponse) => {
|
|
75
|
+
if (!attachments.some((a) => a.link === filtered.link)) {
|
|
76
|
+
attachments.push({ name: `${filtered.type}: ${filtered.feed}`, link: filtered.link });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return attachments;
|
|
83
83
|
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
export const getCleanedEvent = <T extends Record<string, any>>(event: T): T => {
|
|
21
|
-
for (const key of Object.keys(event)) {
|
|
22
|
-
const value = event[key];
|
|
23
|
-
if (value === null || value === undefined) {
|
|
24
|
-
delete event[key];
|
|
25
|
-
} else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
26
|
-
(event as Record<string, any>)[key] = getCleanedEvent(value as Record<string, any>) as any;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return event;
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export const getCleanedEvent = <T extends Record<string, any>>(event: T): T => {
|
|
21
|
+
for (const key of Object.keys(event)) {
|
|
22
|
+
const value = event[key];
|
|
23
|
+
if (value === null || value === undefined) {
|
|
24
|
+
delete event[key];
|
|
25
|
+
} else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
26
|
+
(event as Record<string, any>)[key] = getCleanedEvent(value as Record<string, any>) as any;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return event;
|
|
30
30
|
};
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { TypeStanzaCompiled } from "../@types/type.compiled"
|
|
21
|
-
import { TypeSettings } from "../@types/type.settings"
|
|
22
|
-
import { bootstrap } from "../bootstrap"
|
|
23
|
-
import { text } from "../@events/events.text"
|
|
24
|
-
import { ugc } from "../@events/events.ugc"
|
|
25
|
-
import { vtec } from "../@events/events.vtec"
|
|
26
|
-
import { api } from "../@events/events.api"
|
|
27
|
-
import { validateEvents } from "./building.validate"
|
|
28
|
-
|
|
29
|
-
export const createEvent = async (stanza: TypeStanzaCompiled, ignorePushing?: boolean): Promise<void | string> => {
|
|
30
|
-
const settings = bootstrap.settings as TypeSettings
|
|
31
|
-
const StanzaSettings = settings.NOAAWeatherWireServiceSettings.StanzaSettings;
|
|
32
|
-
|
|
33
|
-
const isVtecEvent = (stanza.isVTEC && stanza.isUGC)
|
|
34
|
-
const isUgcEvent = (!stanza.isVTEC && stanza.isUGC)
|
|
35
|
-
const isTextEvent = (!stanza.isVTEC && !stanza.isUGC)
|
|
36
|
-
const isNWWS = (stanza.isNWWS)
|
|
37
|
-
|
|
38
|
-
switch (true) {
|
|
39
|
-
case (!isNWWS):
|
|
40
|
-
await api(stanza)
|
|
41
|
-
break;
|
|
42
|
-
case (isNWWS && !StanzaSettings.DisableVTEC && isVtecEvent):
|
|
43
|
-
await vtec(stanza)
|
|
44
|
-
break;
|
|
45
|
-
case (isNWWS && !StanzaSettings.DisableUGC && isUgcEvent):
|
|
46
|
-
await ugc(stanza)
|
|
47
|
-
break;
|
|
48
|
-
case (isNWWS && !StanzaSettings.DisableText && isTextEvent):
|
|
49
|
-
await text(stanza)
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
if (!ignorePushing) {
|
|
53
|
-
validateEvents(bootstrap.cache.processed)
|
|
54
|
-
}
|
|
55
|
-
return 'nothing picked';
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { TypeStanzaCompiled } from "../@types/type.compiled"
|
|
21
|
+
import { TypeSettings } from "../@types/type.settings"
|
|
22
|
+
import { bootstrap } from "../bootstrap"
|
|
23
|
+
import { text } from "../@events/events.text"
|
|
24
|
+
import { ugc } from "../@events/events.ugc"
|
|
25
|
+
import { vtec } from "../@events/events.vtec"
|
|
26
|
+
import { api } from "../@events/events.api"
|
|
27
|
+
import { validateEvents } from "./building.validate"
|
|
28
|
+
|
|
29
|
+
export const createEvent = async (stanza: TypeStanzaCompiled, ignorePushing?: boolean): Promise<void | string> => {
|
|
30
|
+
const settings = bootstrap.settings as TypeSettings
|
|
31
|
+
const StanzaSettings = settings.NOAAWeatherWireServiceSettings.StanzaSettings;
|
|
32
|
+
|
|
33
|
+
const isVtecEvent = (stanza.isVTEC && stanza.isUGC)
|
|
34
|
+
const isUgcEvent = (!stanza.isVTEC && stanza.isUGC)
|
|
35
|
+
const isTextEvent = (!stanza.isVTEC && !stanza.isUGC)
|
|
36
|
+
const isNWWS = (stanza.isNWWS)
|
|
37
|
+
|
|
38
|
+
switch (true) {
|
|
39
|
+
case (!isNWWS):
|
|
40
|
+
await api(stanza)
|
|
41
|
+
break;
|
|
42
|
+
case (isNWWS && !StanzaSettings.DisableVTEC && isVtecEvent):
|
|
43
|
+
await vtec(stanza)
|
|
44
|
+
break;
|
|
45
|
+
case (isNWWS && !StanzaSettings.DisableUGC && isUgcEvent):
|
|
46
|
+
await ugc(stanza)
|
|
47
|
+
break;
|
|
48
|
+
case (isNWWS && !StanzaSettings.DisableText && isTextEvent):
|
|
49
|
+
await text(stanza)
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (!ignorePushing) {
|
|
53
|
+
validateEvents(bootstrap.cache.processed)
|
|
54
|
+
}
|
|
55
|
+
return 'nothing picked';
|
|
56
56
|
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { TypeEvent } from "../@types/type.event";
|
|
21
|
-
import { TypeSettings } from "../@types/type.settings";
|
|
22
|
-
import { dict_enhanced } from "../@dictionaries/dictionaries.enhanced"
|
|
23
|
-
import { bootstrap } from "../bootstrap"
|
|
24
|
-
|
|
25
|
-
export const getEventEnhancedName = (event: TypeEvent): string => {
|
|
26
|
-
const configurations = bootstrap.settings as TypeSettings
|
|
27
|
-
let name = event?.properties?.event
|
|
28
|
-
|
|
29
|
-
if (!configurations?.GlobalSettings?.BetterEventNames) {
|
|
30
|
-
return name
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const damage = event?.properties?.parameters?.damage_threat
|
|
34
|
-
const tornado = event?.properties?.parameters?.tornado_threat;
|
|
35
|
-
const pdswatch = event?.properties?.watch_parameters?.pds_watch;
|
|
36
|
-
const description = event?.properties?.description?.toLowerCase()
|
|
37
|
-
for (const [eventKey, eventConfig] of Object.entries(dict_enhanced)) {
|
|
38
|
-
if (eventKey !== name) continue;
|
|
39
|
-
for (const [paramKey, paramValue] of Object.entries(eventConfig)) {
|
|
40
|
-
let matches = true;
|
|
41
|
-
if (paramValue?.description) {
|
|
42
|
-
if (!description.includes(paramValue.description.toLowerCase())) matches = false;
|
|
43
|
-
}
|
|
44
|
-
if (paramValue?.damage) {
|
|
45
|
-
if (paramValue.damage !== damage) matches = false;
|
|
46
|
-
}
|
|
47
|
-
if (paramValue?.tornado) {
|
|
48
|
-
if (paramValue.tornado !== tornado) matches = false;
|
|
49
|
-
}
|
|
50
|
-
if (paramValue?.pdswatch) {
|
|
51
|
-
if (paramValue.pdswatch !== pdswatch) matches = false;
|
|
52
|
-
}
|
|
53
|
-
if (matches) {
|
|
54
|
-
name = paramKey;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return name;
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { TypeEvent } from "../@types/type.event";
|
|
21
|
+
import { TypeSettings } from "../@types/type.settings";
|
|
22
|
+
import { dict_enhanced } from "../@dictionaries/dictionaries.enhanced"
|
|
23
|
+
import { bootstrap } from "../bootstrap"
|
|
24
|
+
|
|
25
|
+
export const getEventEnhancedName = (event: TypeEvent): string => {
|
|
26
|
+
const configurations = bootstrap.settings as TypeSettings
|
|
27
|
+
let name = event?.properties?.event
|
|
28
|
+
|
|
29
|
+
if (!configurations?.GlobalSettings?.BetterEventNames) {
|
|
30
|
+
return name
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const damage = event?.properties?.parameters?.damage_threat
|
|
34
|
+
const tornado = event?.properties?.parameters?.tornado_threat;
|
|
35
|
+
const pdswatch = event?.properties?.watch_parameters?.pds_watch;
|
|
36
|
+
const description = event?.properties?.description?.toLowerCase()
|
|
37
|
+
for (const [eventKey, eventConfig] of Object.entries(dict_enhanced)) {
|
|
38
|
+
if (eventKey !== name) continue;
|
|
39
|
+
for (const [paramKey, paramValue] of Object.entries(eventConfig)) {
|
|
40
|
+
let matches = true;
|
|
41
|
+
if (paramValue?.description) {
|
|
42
|
+
if (!description.includes(paramValue.description.toLowerCase())) matches = false;
|
|
43
|
+
}
|
|
44
|
+
if (paramValue?.damage) {
|
|
45
|
+
if (paramValue.damage !== damage) matches = false;
|
|
46
|
+
}
|
|
47
|
+
if (paramValue?.tornado) {
|
|
48
|
+
if (paramValue.tornado !== tornado) matches = false;
|
|
49
|
+
}
|
|
50
|
+
if (paramValue?.pdswatch) {
|
|
51
|
+
if (paramValue.pdswatch !== pdswatch) matches = false;
|
|
52
|
+
}
|
|
53
|
+
if (matches) {
|
|
54
|
+
name = paramKey;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return name;
|
|
60
60
|
}
|