@atmosx/event-product-parser 3.0.55 → 3.0.62

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 (156) hide show
  1. package/.github/CODE_OF_CONDUCT.md +9 -9
  2. package/.github/CONTRIBUTING.md +29 -29
  3. package/.github/LICENSE +17 -17
  4. package/.github/SECURITY.md +20 -20
  5. package/.github/SUPPORTED_EVENTS.md +369 -369
  6. package/.github/docs/docs-functions.md +30 -0
  7. package/.github/docs/docs-general-configurations.md +209 -0
  8. package/.github/docs/docs-integrations.md +37 -0
  9. package/.github/docs/docs-listeners.md +28 -0
  10. package/.github/docs/docs-source-configuration.md +218 -0
  11. package/.github/docs/docs-technical.md +50 -0
  12. package/.github/logo.png +0 -0
  13. package/.github/samples/SAMPLE_EAS_GENERATION.wav +0 -0
  14. package/.github/samples/SAMPLE_GEOJSON.json +204 -0
  15. package/.github/samples/SAMPLE_TEXT_PRODUCT.txt +119 -0
  16. package/.vscode/settings.json +3 -3
  17. package/README.md +167 -0
  18. package/dist/cjs/index.cjs +1439 -1277
  19. package/dist/esm/index.mjs +1420 -1258
  20. package/package.json +47 -52
  21. package/src/@building/{building.create.ts → CreateEvent.ts} +55 -55
  22. package/src/@building/{building.clean.ts → GetCleanedEvent.ts} +29 -29
  23. package/src/@building/{building.attachments.ts → GetEventAttachments.ts} +85 -82
  24. package/src/@building/{building.enhance.ts → GetEventEnhancedName.ts} +54 -59
  25. package/src/@building/{building.geometry.ts → GetEventGeometry.ts} +47 -47
  26. package/src/@building/{building.headers.ts → GetEventHeader.ts} +36 -36
  27. package/src/@building/{building.polygon.ts → GetEventNodes.ts} +72 -69
  28. package/src/@building/{building.office.ts → GetEventOffice.ts} +42 -42
  29. package/src/@building/{building.properties.ts → GetEventProperties.ts} +95 -95
  30. package/src/@building/{building.signature.ts → GetEventSignature.ts} +60 -60
  31. package/src/@building/{building.tags.ts → GetEventTags.ts} +29 -24
  32. package/src/@building/{building.tracking.ts → GetEventTracking.ts} +67 -67
  33. package/src/@core/{core.clearEvents.ts → ClearEvents.ts} +30 -30
  34. package/src/@core/{core.createListener.ts → CreateListener.ts} +23 -23
  35. package/src/@core/{core.getEvents.ts → GetEvents.ts} +23 -23
  36. package/src/@core/{core.getNodes.ts → GetNodes.ts} +23 -23
  37. package/src/@core/{core.getRandomEvent.ts → GetRandomEvent.ts} +23 -23
  38. package/src/@core/{core.getVersion.ts → GetVersion.ts} +23 -23
  39. package/src/@core/{core.manualEvent.ts → ManualEvent.ts} +56 -38
  40. package/src/@core/{core.query.ts → QueryStanza.ts} +38 -38
  41. package/src/@core/{core.setNode.ts → SetNode.ts} +80 -80
  42. package/src/@core/{core.start.ts → StartService.ts} +60 -60
  43. package/src/@core/{core.stop.ts → StopService.ts} +31 -31
  44. package/src/@enums/AWIPS.ts +366 -0
  45. package/src/{@dictionaries/dictionaries.actions.ts → @enums/Actions.ts} +27 -27
  46. package/src/{@dictionaries/dictionaries.cancellation.ts → @enums/Cancellation.ts} +30 -30
  47. package/src/{@dictionaries/dictionaries.causes.ts → @enums/Causes.ts} +35 -35
  48. package/src/{@dictionaries/dictionaries.correlations.ts → @enums/Correlations.ts} +42 -42
  49. package/src/{@dictionaries/dictionaries.enhanced.ts → @enums/Enhanced.ts} +69 -69
  50. package/src/{@dictionaries/dictionaries.events.ts → @enums/Events.ts} +82 -82
  51. package/src/{@dictionaries/dictionaries.expressions.ts → @enums/Expressions.ts} +28 -28
  52. package/src/@enums/GlobalFilter.ts +24 -0
  53. package/src/{@dictionaries/dictionaries.hail.ts → @enums/Hail.ts} +37 -35
  54. package/src/{@dictionaries/dictionaries.icao.ts → @enums/ICAO.ts} +258 -258
  55. package/src/{@dictionaries/dictionaries.matches.ts → @enums/Matches.ts} +54 -54
  56. package/src/{@dictionaries/dictionaries.products.ts → @enums/Products.ts} +24 -24
  57. package/src/{@dictionaries/dictionaries.records.ts → @enums/Records.ts} +25 -25
  58. package/src/{@dictionaries/dictionaries.severity.ts → @enums/Severity.ts} +27 -27
  59. package/src/{@dictionaries/dictionaries.shapefiles.ts → @enums/Shapefiles.ts} +35 -35
  60. package/src/{@dictionaries/dictionaries.states.ts → @enums/States.ts} +71 -71
  61. package/src/{@dictionaries/dictionaries.status.ts → @enums/Status.ts} +30 -30
  62. package/src/{@dictionaries/dictionaries.global.ts → @enums/Strings.ts} +22 -24
  63. package/src/@enums/Tags.ts +167 -0
  64. package/src/{@dictionaries/dictionaries.testing.ts → @enums/Testing.ts} +24 -24
  65. package/src/@events/{events.api.ts → ParseAPI.ts} +116 -116
  66. package/src/@events/{events.text.ts → ParseText.ts} +87 -84
  67. package/src/@events/{events.ugc.ts → ParseUGC.ts} +93 -89
  68. package/src/@events/{events.vtec.ts → ParseVTEC.ts} +86 -86
  69. package/src/@manager/MakeEvents.ts +106 -0
  70. package/src/@manager/{manager.rmEvent.ts → RemoveEvent.ts} +69 -71
  71. package/src/@manager/{manager.setHash.ts → SetHash.ts} +35 -35
  72. package/src/@manager/Tasks.ts +246 -0
  73. package/src/@manager/{manager.updateEvents.ts → UpdateEvents.ts} +34 -34
  74. package/src/@manager/{manager.updateNodes.ts → UpdateNode.ts} +61 -53
  75. package/src/{@building/building.validate.ts → @manager/ValidateEvents.ts} +141 -154
  76. package/src/@modules/@database/{database.cache.ts → GetCachedEvents.ts} +49 -49
  77. package/src/@modules/@database/{database.broadcastify.ts → ImportBroadcastify.ts} +69 -66
  78. package/src/@modules/@database/{database.shapefiles.ts → ImportShapefiles.ts} +92 -92
  79. package/src/@modules/@database/{database.stanza.ts → ImportStanza.ts} +46 -46
  80. package/src/@modules/@database/{database.init.ts → InitializeDatabase.ts} +58 -58
  81. package/src/@modules/@eas/{eas.setEasTone.ts → GenerateEASMessage.ts} +144 -151
  82. package/src/@modules/@eas/{eas.getCleanDescription.ts → GetCleanDescription.ts} +91 -91
  83. package/src/@modules/@eas/{eas.getFloatPCM16.ts → GetFloatPCM16.ts} +29 -29
  84. package/src/@modules/@eas/{eas.getMergedPCM16.ts → GetMergedPCM16.ts} +32 -32
  85. package/src/@modules/@eas/{eas.getPCM16.ts → GetPCM16.ts} +52 -52
  86. package/src/@modules/@eas/{eas.getPCMToFloat.ts → GetPCMToFloat.ts} +26 -26
  87. package/src/@modules/@eas/{eas.getSampledPCM16.ts → GetSampledPCM16.ts} +36 -36
  88. package/src/@modules/@eas/{eas.getTTS.ts → GetTTS.ts} +54 -54
  89. package/src/@modules/@eas/{eas.getWavPCM16.ts → GetWavPCM16.ts} +52 -52
  90. package/src/@modules/@eas/{eas.setAFSK.ts → SetAFSK.ts} +51 -51
  91. package/src/@modules/@eas/{eas.setAsciiToBits.ts → SetAsciiToBits.ts} +31 -31
  92. package/src/@modules/@eas/{eas.setAttentionTone.ts → SetAttentionTone.ts} +40 -40
  93. package/src/@modules/@eas/{eas.setNoise.ts → SetNoise.ts} +32 -32
  94. package/src/@modules/@eas/{eas.setRadioEffect.ts → SetRadioEffect.ts} +50 -50
  95. package/src/@modules/@eas/{eas.setSameHeader.ts → SetSameHeader.ts} +44 -44
  96. package/src/@modules/@stanza/{stanza.getAwipsType.ts → GetAwipsType.ts} +47 -45
  97. package/src/@modules/@stanza/{stanza.validate.ts → ValidateStanza.ts} +49 -49
  98. package/src/@modules/@utilities/{utilities.createHttp.ts → CreateHttp.ts} +83 -83
  99. package/src/@modules/@utilities/{utilities.getFormattedTime.ts → GetFormattedTime.ts} +43 -43
  100. package/src/@modules/@utilities/{utilities.getLatestIssuance.ts → GetLatestIssuance.ts} +32 -32
  101. package/src/@modules/@utilities/{utilities.getMatched.ts → GetMatched.ts} +33 -33
  102. package/src/@modules/@utilities/{utilities.getSettings.ts → GetSettings.ts} +25 -25
  103. package/src/@modules/@utilities/{utilities.getShapeNearestPoint.ts → GetShapeNearestPoint.ts} +114 -114
  104. package/src/@modules/@utilities/{utilities.setCronSchedule.ts → SetCronSchedule.ts} +94 -94
  105. package/src/@modules/@utilities/{utilities.setDebug.ts → SetDebug.ts} +37 -38
  106. package/src/@modules/@utilities/{utilities.setEventEmit.ts → SetEventEmit.ts} +41 -41
  107. package/src/@modules/@utilities/{utilities.setListener.ts → SetListener.ts} +30 -30
  108. package/src/@modules/@utilities/{utilities.setSettings.ts → SetSettings.ts} +42 -42
  109. package/src/@modules/@utilities/{utilities.setSleep.ts → SetSleep.ts} +33 -33
  110. package/src/@modules/@utilities/{utilities.setTimeoutAction.ts → SetTimeoutAction.ts} +63 -63
  111. package/src/@modules/@utilities/{utilities.setWarning.ts → SetWarning.ts} +34 -34
  112. package/src/@modules/@xmpp/{xmpp.xDeploy.ts → DeployXMPP.ts} +57 -57
  113. package/src/@modules/@xmpp/{xmpp.xError.ts → ErrorXMPP.ts} +26 -26
  114. package/src/@modules/@xmpp/{xmpp.xOffline.ts → OfflineXMPP.ts} +36 -36
  115. package/src/@modules/@xmpp/{xmpp.xOnline.ts → OnlineXMPP.ts} +45 -45
  116. package/src/@modules/@xmpp/{xmpp.xReconnect.ts → ReconnectXMPP.ts} +64 -64
  117. package/src/@modules/@xmpp/{xmpp.xStanza.ts → StanzaXMPP.ts} +62 -62
  118. package/src/@parsers/@hvtec/{hvtec.extract.ts → HVExtract.ts} +39 -39
  119. package/src/@parsers/@pvtec/{pvtec.expires.ts → GetExpiry.ts} +25 -25
  120. package/src/@parsers/@pvtec/{pvtec.extract.ts → VTECExtract.ts} +48 -48
  121. package/src/@parsers/@text/{text.getDescriptionFromProduct.ts → GetDescriptionFromProduct.ts} +59 -52
  122. package/src/@parsers/@text/{text.getEmbedText.ts → GetEmbededText.ts} +55 -55
  123. package/src/@parsers/@text/{text.getPolygonFromProduct.ts → GetPolygonFromProduct.ts} +52 -52
  124. package/src/@parsers/@text/{text.getStringText.ts → GetStringText.ts} +57 -53
  125. package/src/@parsers/@text/{text.getTextFromProduct.ts → GetTextFromProduct.ts} +42 -42
  126. package/src/@parsers/@text/{text.getXML.ts → GetXML.ts} +60 -60
  127. package/src/@parsers/@ugc/{ugc.getCache.ts → GetCache.ts} +23 -23
  128. package/src/@parsers/@ugc/{ugc.expiry.ts → GetExpiry.ts} +31 -31
  129. package/src/@parsers/@ugc/{ugc.locations.ts → GetLocations.ts} +56 -56
  130. package/src/@parsers/@ugc/{ugc.header.ts → GetUGCHeader.ts} +29 -29
  131. package/src/@parsers/@ugc/{ugc.coordinates.ts → GetZonePolygon.ts} +110 -110
  132. package/src/@parsers/@ugc/{ugc.zones.ts → GetZones.ts} +51 -51
  133. package/src/@parsers/@ugc/{ugc.setCache.ts → SetCache.ts} +27 -27
  134. package/src/@parsers/@ugc/{ugc.extract.ts → UGCExtract.ts} +36 -36
  135. package/src/@types/{type.listener.ts → Actions.ts} +37 -38
  136. package/src/@types/{type.attributes.ts → Attributes.ts} +28 -28
  137. package/src/@types/{type.event.ts → Event.ts} +69 -69
  138. package/src/@types/{type.hvtec.ts → HVTEC.ts} +25 -25
  139. package/src/@types/{type.hash.ts → Hash.ts} +24 -24
  140. package/src/@types/{type.properties.ts → Properties.ts} +77 -77
  141. package/src/@types/{type.settings.ts → Settings.ts} +99 -93
  142. package/src/@types/{type.stanza.ts → Stanza.ts} +37 -37
  143. package/src/@types/{type.compiled.ts → StanzaCompiled.ts} +35 -34
  144. package/src/@types/{type.ugc.ts → UGC.ts} +24 -24
  145. package/src/@types/{type.pvtec.ts → VTEC.ts} +30 -30
  146. package/src/bootstrap.ts +128 -124
  147. package/src/index.ts +74 -74
  148. package/tsconfig.json +13 -13
  149. package/tsup.config.ts +15 -15
  150. package/.github/README.md +0 -384
  151. package/src/@dictionaries/dictionaries.awips.ts +0 -364
  152. package/src/@dictionaries/dictionaries.strings.ts +0 -22
  153. package/src/@dictionaries/dictionaries.tags.ts +0 -93
  154. package/src/@manager/manager.mkEvent.ts +0 -98
  155. package/src/@manager/manager.updateListener.ts +0 -180
  156. package/testing/init.js +0 -91
@@ -1,180 +0,0 @@
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 { TypeListener } from "../@types/type.listener";
22
- import { bootstrap } from "../bootstrap"
23
- import { setEasTone } from "../@modules/@eas/eas.setEasTone"
24
- import { setTimeoutAction } from "../@modules/@utilities/utilities.setTimeoutAction";
25
- import { getEmebedText } from "../@parsers/@text/text.getEmbedText";
26
- import { getStringText } from "../@parsers/@text/text.getStringText";
27
- import { getCleanedEvent } from "../@building/building.clean"
28
- import { createHttp } from "../@modules/@utilities/utilities.createHttp";
29
- import { setDebug } from "../@modules/@utilities/utilities.setDebug";
30
- import { getMatched } from "../@modules/@utilities/utilities.getMatched";
31
- import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from "fs";
32
-
33
- export const updateListener = async (event: TypeEvent): Promise<void> => {
34
- const tick = performance.now()
35
- const settings = bootstrap.settings;
36
- const listeners = settings.ListenerSettings as TypeListener[];
37
- const properties = event.properties;
38
- const metadata = {
39
- file: null,
40
- eas: null,
41
- json: null,
42
- name: properties.event,
43
- status: properties.status,
44
- description: properties.description,
45
- tracking: properties.metadata.tracking,
46
- header: properties.metadata.header,
47
- raw: properties.metadata.raw,
48
- expired: properties.status_metadata.is_expired,
49
- attachments: properties.metadata.attachments
50
- }
51
-
52
- for (const listener of listeners) {
53
- const events = listener?.Events;
54
- const webhook = listener?.Webhook;
55
- const notify = listener?.NotificationServer;
56
- const uploads = listener?.Uploads
57
- const isMatched = getMatched(events ?? [], metadata.name)
58
-
59
- if (events?.length == 0 || isMatched) {
60
- if (uploads?.EAS) {
61
- metadata.eas = await setEasTone({
62
- title: `${metadata.name}_${metadata.status}_${metadata.tracking}`,
63
- message: metadata.description,
64
- header: metadata.header
65
- });
66
- }
67
-
68
- if (uploads?.File) {
69
- const fDestination = settings.GlobalSettings.ArchiveSettings.TextDirectory;
70
- if (fDestination) {
71
- const file = (`${fDestination}/${metadata.name}_${metadata.tracking}.txt`).replace(/[\\:*?"<>|]/g, "_").replace(/\s+/g, " ").trim();
72
- if (!existsSync(fDestination)) { mkdirSync(fDestination, { recursive: true }); }
73
- if (existsSync(file)) {
74
- appendFileSync(file, `${(`\n`).repeat(10)}${metadata.raw}`);
75
- } else {
76
- writeFileSync(file, metadata.raw);
77
- }
78
- }
79
- metadata.file = metadata.raw;
80
- }
81
-
82
- if (uploads?.JSON) {
83
- const eDestination = settings.GlobalSettings.ArchiveSettings.EventDirectory;
84
- if (eDestination) {
85
- const file = (`${eDestination}/${metadata.name}_${metadata.tracking}.json`).replace(/[\\:*?"<>|]/g, "_").replace(/\s+/g, " ").trim();
86
- if (!existsSync(eDestination)) { mkdirSync(eDestination, { recursive: true }); }
87
- writeFileSync(file, JSON.stringify(getCleanedEvent(event), null, 2));
88
- }
89
- metadata.json = JSON.stringify(getCleanedEvent(event), null, 2);
90
- }
91
-
92
- if (settings?.NotifyServer?.Enabled && notify?.Enabled && notify?.Topic) {
93
- const server = settings?.NotifyServer;
94
- const auth = server?.Credentials?.Username && server?.Credentials?.Password ? { username: settings?.NotifyServer?.Credentials?.Username, password: server?.Credentials?.Password } : undefined;
95
- const attachment = metadata.eas && server?.Attachments ? `${server?.Attachments}/${metadata.name}_${metadata.status}_${metadata.tracking}.wav` : undefined;
96
- const isRatelimited = setTimeoutAction({ identifier: metadata.tracking + `notify.server`, interval: 1, max: 1, addTime: true })
97
- if (!isRatelimited.limited) {
98
- await createHttp({
99
- url: `${server?.Server?.replace(/\/$/, "")}/${listener?.NotificationServer?.Topic}`,
100
- timeout: 15_000,
101
- method: "POST",
102
- ...(auth && { auth }),
103
- headers: {
104
- "Title": `${metadata.name} (${metadata.status})`,
105
- "Tags": properties.parameters.tags?.join(",") ?? "N/A",
106
- "Expires": new Date(properties.expires).getTime(),
107
- "Priority": notify?.Priority ? notify.Priority.toString() : "5",
108
- ... (attachment && { "Attach": attachment }),
109
- },
110
- body: getStringText(event)
111
- })
112
- }
113
- }
114
-
115
- if (webhook?.Enabled && webhook?.Destination) {
116
- const isRatelimited = setTimeoutAction({ identifier: webhook.Destination, interval: (webhook.Ratelimit ?? 2) * 2, max: (webhook.Ratelimit ?? 2), addTime: true })
117
- const form = new FormData();
118
- const embed = {
119
- title: `${metadata.name} (${metadata.status})`,
120
- description: getEmebedText(event),
121
- fields: [],
122
- color: 16711680,
123
- timestamp: new Date().toISOString(),
124
- footer: { text: webhook.Title ?? `AtmosphericX` }
125
- };
126
-
127
- if (isRatelimited.limited) { return }
128
-
129
-
130
- if (metadata.description && !metadata.expired) {
131
- if (metadata.description.length > 900) {
132
- metadata.description = metadata.description.substring(0, 900) + "\n\n[Message truncated due to length]";
133
- }
134
- embed.fields.push({
135
- name: "Description",
136
- value: metadata.description ? '```' + '\n' + metadata.description.split('\n').map(l => l.trim()).filter(Boolean).join('\n') + '\n' + '```' : ""
137
- });
138
- }
139
-
140
-
141
- if (metadata.attachments?.length > 0) {
142
- metadata.attachments = metadata.attachments.slice(0, 5);
143
- embed.fields.push({
144
- name: "Attachments",
145
- value: metadata.attachments.map(attachment => `- [${attachment.name.length > 45 ? attachment.name.substring(0, 45) + '...' : attachment.name}](${attachment.link})`).join('\n')
146
- });
147
- }
148
-
149
- if (uploads?.File) {
150
- form.append("fUpload", new Blob([Buffer.from(metadata.file)], {type: "application/text"}), `${properties.event}_${properties.status}_${properties.metadata.tracking}.txt`)
151
- }
152
-
153
- if (uploads?.JSON) {
154
- form.append("fUpload2", new Blob([Buffer.from(metadata.json)], {type: "application/json"}), `${properties.event}_${properties.status}_${properties.metadata.tracking}.json`)
155
- }
156
-
157
- if (uploads?.EAS) {
158
- if (metadata.eas) {
159
- const file = readFileSync(metadata.eas)
160
- form.append("fEas", new Blob([Buffer.from(file)], { type: "audio/mpeg" }), `${properties.event}_${properties.status}_${properties.metadata.tracking}_eas.mp3`)
161
- }
162
- }
163
-
164
- form.append("payload_json", JSON.stringify({
165
- username: webhook.Title ?? "AtmosphericX",
166
- content: webhook.Message ?? "",
167
- embeds: [embed]
168
- }));
169
-
170
- await createHttp({
171
- url: webhook.Destination,
172
- timeout: 15e3,
173
- method: `POST`,
174
- body: form
175
- })
176
- }
177
- }
178
- }
179
- setDebug({ title: `@manager.updateListener`, message: `Listener took ${performance.now() - tick} ms` })
180
- }
package/testing/init.js DELETED
@@ -1,91 +0,0 @@
1
- const { Manager } = require(`../dist/cjs/index.cjs`)
2
-
3
- const Client = new Manager({
4
- Database: `event-product-parser.db`,
5
- EnableWireService: false,
6
- EnableJournal: true,
7
- EnableDebugging: false,
8
- NOAAWeatherWireServiceSettings: {
9
- ReconnectionSettings: {
10
- Enabled: true,
11
- ReconnectionInterval: 60,
12
- },
13
- CredentialSettings: {
14
- Username: `username`,
15
- Password: `password`,
16
- Nickname: "nickname (@atmosx/event-product-parser/3.0)",
17
- },
18
- CacheSettings: {
19
- Enabled: true,
20
- MaxDatabaseHistory: 50000,
21
- MaxRetentionHistory: 1500,
22
- },
23
- StanzaSettings: {
24
- DisableUGC: false,
25
- DisableVTEC: false,
26
- DisableText: false,
27
- }
28
- },
29
- NationalWeatherServiceSettings: {
30
- CallbackInterval: 30,
31
- EventsEndpoint: `https://api.weather.gov/alerts/active`,
32
- },
33
- BroadcastifySettings: {
34
- BroadcastifyAttachments: true,
35
- BroadcastifyDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/broadcastify.json`,
36
- BroadcastifyTags: [`Public Safety`, `Amateur Radio`, `Other`, `Rail`, `Aviation`, `Marine`, `Disaster Event`, `Special Event`]
37
- },
38
- NotifyServer: {
39
- Enabled: false,
40
- Server: "https://ntfy.scriptkitty.cafe",
41
- Attachments: "https://scriptkitty.cafe/ftp/@bucket/EAS/encoded",
42
- Credentials: {
43
- Username: "username",
44
- Password: "password"
45
- }
46
- },
47
- ListenerSettings: [
48
- {
49
- Events: ["*Extreme Heat Warning*"],
50
- NotificationServer: {
51
- Enabled: false,
52
- Topic: "heat-warnings",
53
- Priority: 5
54
- },
55
- Uploads: {
56
- EAS: true,
57
- File: true,
58
- JSON: true
59
- }
60
- }
61
- ],
62
- GlobalSettings: {
63
- EventManagement: true,
64
- BetterEventNames: true,
65
- DisableGeometryParsing: false,
66
- UseShapefileCoordinates: true,
67
- SPCWatchesOnly: true,
68
- ShapefileSkipPoints: 0,
69
- NodeTTL: 60,
70
- NodeMinDistance: 125,
71
- EventFiltering: {
72
- ListeningEvents: [
73
- "*Warning*"
74
- ],
75
- ListeningICAO: [],
76
- ListeningUGC: [],
77
- ListeningStates: [],
78
- IgnoredICAO: [],
79
- IgnoredEvents: [],
80
- NodeLocationFiltering: false,
81
- IgnoreTestProducts: true,
82
- },
83
- ArchiveSettings: {
84
- TTL: 30,
85
- EventDirectory: `@bucket/ParsedProducts`,
86
- TextDirectory: `@bucket/RawTextProducts`,
87
- EasDirectory: `@bucket/EAS`,
88
- EasToneout: `eas-toneout.wav`,
89
- }
90
- }
91
- })