@atmosx/event-product-parser 3.0.621 → 3.1.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 (200) hide show
  1. package/.github/CHANGELOGS.md +52 -0
  2. package/.github/CODE_OF_CONDUCT.md +24 -1
  3. package/.github/CONTRIBUTING.md +22 -3
  4. package/.github/FUNDING.yaml +3 -0
  5. package/.github/LICENSE +24 -1
  6. package/.github/SECURITY.md +25 -6
  7. package/.github/docs/chapters/general-configurations.md +109 -0
  8. package/.github/docs/chapters/sources-and-attributes.md +219 -0
  9. package/README.md +56 -146
  10. package/dist/index.cjs +25333 -0
  11. package/package.json +17 -11
  12. package/pnpm-workspace.yaml +4 -0
  13. package/src/bootstrap.ts +67 -52
  14. package/src/components/audio/GenerateAudioMessage.ts +149 -0
  15. package/src/{@modules/@eas → components/audio/components}/GetCleanDescription.ts +2 -2
  16. package/src/{@modules/@eas → components/audio/components}/GetFloatPCM16.ts +2 -2
  17. package/src/{@modules/@eas → components/audio/components}/GetMergedPCM16.ts +2 -2
  18. package/src/{@modules/@eas → components/audio/components}/GetPCM16.ts +13 -8
  19. package/src/{@modules/@eas → components/audio/components}/GetPCMToFloat.ts +2 -2
  20. package/src/{@modules/@eas → components/audio/components}/GetSampledPCM16.ts +14 -8
  21. package/src/{@modules/@eas → components/audio/components}/GetTTS.ts +17 -10
  22. package/src/{@modules/@eas → components/audio/components}/GetWavPCM16.ts +7 -7
  23. package/src/{@modules/@eas → components/audio/components}/SetAFSK.ts +13 -8
  24. package/src/{@modules/@eas → components/audio/components}/SetAsciiToBits.ts +2 -2
  25. package/src/{@modules/@eas → components/audio/components}/SetAttentionTone.ts +11 -6
  26. package/src/{@modules/@eas → components/audio/components}/SetNoise.ts +12 -7
  27. package/src/{@modules/@eas → components/audio/components}/SetRadioEffect.ts +12 -7
  28. package/src/{@modules/@eas → components/audio/components}/SetSameHeader.ts +22 -14
  29. package/src/components/database/CreateQuery.ts +39 -0
  30. package/src/components/database/InitializeDatabase.ts +71 -0
  31. package/src/components/database/imports/Boundaires.ts +168 -0
  32. package/src/{@modules/@database/ImportBroadcastify.ts → components/database/imports/Broadcastify.ts} +15 -25
  33. package/src/components/database/imports/Census.ts +87 -0
  34. package/src/{@modules/@database/ImportShapefiles.ts → components/database/imports/Shapefiles.ts} +24 -27
  35. package/src/{@modules/@database/ImportStanza.ts → components/database/imports/Stanza.ts} +15 -19
  36. package/src/components/events/CreateEvents.ts +88 -0
  37. package/src/components/events/FilterEvents.ts +149 -0
  38. package/src/{@building/CreateEvent.ts → components/events/ProcessStanza.ts} +22 -24
  39. package/src/components/events/RemoveEvents.ts +74 -0
  40. package/src/{@building → components/events/components}/GetCleanedEvent.ts +2 -2
  41. package/src/{@building → components/events/components}/GetEventAttachments.ts +14 -12
  42. package/src/components/events/components/GetEventDirection.ts +28 -0
  43. package/src/{@building → components/events/components}/GetEventEnhancedName.ts +5 -8
  44. package/src/{@building → components/events/components}/GetEventGeometry.ts +19 -13
  45. package/src/{@building → components/events/components}/GetEventHeader.ts +13 -13
  46. package/src/components/events/components/GetEventMerged.ts +51 -0
  47. package/src/{@building → components/events/components}/GetEventNodes.ts +22 -20
  48. package/src/{@building → components/events/components}/GetEventOffice.ts +13 -13
  49. package/src/components/events/components/GetEventPopulation.ts +58 -0
  50. package/src/components/events/components/GetEventProperties.ts +106 -0
  51. package/src/{@building → components/events/components}/GetEventSignature.ts +9 -9
  52. package/src/{@building → components/events/components}/GetEventTags.ts +3 -3
  53. package/src/components/events/components/GetEventTheme.ts +26 -0
  54. package/src/components/events/components/GetEventTracking.ts +64 -0
  55. package/src/{@modules/@database → components/events/utilities}/GetCachedEvents.ts +18 -15
  56. package/src/{@manager → components/events/utilities}/SetHash.ts +18 -13
  57. package/src/{@manager → components/events/utilities}/UpdateEvents.ts +12 -12
  58. package/src/{@manager → components/events/utilities}/UpdateNode.ts +14 -14
  59. package/src/{@parsers/@text → components/formatting}/GetEmbededText.ts +14 -8
  60. package/src/{@parsers/@text → components/formatting}/GetStringText.ts +15 -11
  61. package/src/{@modules/@utilities → components/geometry}/GetShapeNearestPoint.ts +24 -19
  62. package/src/components/geometry/GetUnionPolygon.ts +36 -0
  63. package/src/components/images/GenerateGraphic.ts +242 -0
  64. package/src/components/images/components/CreateRectangle.ts +22 -0
  65. package/src/components/images/components/CreateText.ts +22 -0
  66. package/src/components/images/modules/CreateSVG.ts +37 -0
  67. package/src/components/images/modules/GetGeographicalBoundaries.ts +72 -0
  68. package/src/components/images/modules/GetGeographicalCities.ts +58 -0
  69. package/src/components/images/modules/GetGeographicalEvents.ts +48 -0
  70. package/src/components/images/modules/GetGeometryBounds.ts +82 -0
  71. package/src/components/images/modules/GetParsedBoundary.ts +58 -0
  72. package/src/components/images/modules/GetSVGPath.ts +53 -0
  73. package/src/components/images/modules/NormalizePolygon.ts +57 -0
  74. package/src/{@modules/@stanza → components/stanza}/GetAwipsType.ts +16 -17
  75. package/src/{@modules/@stanza → components/stanza}/ValidateStanza.ts +27 -15
  76. package/src/{@modules/@utilities → components/utilities}/CreateHttp.ts +26 -26
  77. package/src/components/utilities/EmitThread.ts +97 -0
  78. package/src/{@modules/@utilities → components/utilities}/GetLatestIssuance.ts +2 -2
  79. package/src/{@modules/@utilities → components/utilities}/GetMatched.ts +10 -5
  80. package/src/components/utilities/QueueManager.ts +70 -0
  81. package/src/{@modules/@utilities → components/utilities}/SetDebug.ts +13 -13
  82. package/src/components/utilities/SetEventEmit.ts +42 -0
  83. package/src/{@modules/@utilities → components/utilities}/SetSettings.ts +7 -7
  84. package/src/{@modules/@utilities → components/utilities}/SetSleep.ts +5 -5
  85. package/src/components/utilities/SetTimeoutAction.ts +64 -0
  86. package/src/components/utilities/SetWarning.ts +47 -0
  87. package/src/{@modules/@xmpp → components/xmpp}/DeployXMPP.ts +20 -20
  88. package/src/{@core/CreateListener.ts → components/xmpp/ErrorXMPP.ts} +8 -5
  89. package/src/{@modules/@xmpp → components/xmpp}/OfflineXMPP.ts +13 -13
  90. package/src/{@modules/@xmpp → components/xmpp}/OnlineXMPP.ts +18 -18
  91. package/src/components/xmpp/ReconnectXMPP.ts +64 -0
  92. package/src/{@modules/@xmpp → components/xmpp}/StanzaXMPP.ts +26 -26
  93. package/src/{@enums → enums}/AWIPS.ts +2 -2
  94. package/src/{@enums → enums}/Actions.ts +2 -2
  95. package/src/{@enums → enums}/Cancellation.ts +2 -2
  96. package/src/{@enums → enums}/Causes.ts +2 -2
  97. package/src/{@enums → enums}/Correlations.ts +2 -2
  98. package/src/{@enums → enums}/Enhanced.ts +4 -3
  99. package/src/{@enums → enums}/Events.ts +2 -2
  100. package/src/{@enums → enums}/Expressions.ts +3 -3
  101. package/src/{@enums → enums}/GlobalFilter.ts +2 -2
  102. package/src/{@enums → enums}/Hail.ts +2 -2
  103. package/src/{@enums → enums}/ICAO.ts +2 -2
  104. package/src/{@enums → enums}/Matches.ts +8 -3
  105. package/src/{@enums → enums}/Products.ts +2 -2
  106. package/src/{@enums → enums}/Records.ts +2 -2
  107. package/src/{@enums → enums}/Severity.ts +2 -2
  108. package/src/{@enums → enums}/Shapefiles.ts +2 -2
  109. package/src/{@enums → enums}/States.ts +68 -4
  110. package/src/{@enums → enums}/Status.ts +2 -2
  111. package/src/{@enums → enums}/Strings.ts +2 -2
  112. package/src/{@enums → enums}/Tags.ts +9 -4
  113. package/src/{@enums → enums}/Testing.ts +2 -2
  114. package/src/enums/Themes.ts +70 -0
  115. package/src/events/ParseAPI.ts +133 -0
  116. package/src/{@events → events}/ParseText.ts +24 -22
  117. package/src/{@events → events}/ParseUGC.ts +27 -26
  118. package/src/{@events → events}/ParseVTEC.ts +37 -36
  119. package/src/{@core → exports}/ClearEvents.ts +9 -9
  120. package/src/{@core → exports}/GetEvents.ts +4 -4
  121. package/src/exports/GetNearestCity.ts +45 -0
  122. package/src/{@core → exports}/GetNodes.ts +4 -4
  123. package/src/{@core → exports}/GetRandomEvent.ts +4 -4
  124. package/src/{@core → exports}/GetVersion.ts +4 -4
  125. package/src/exports/ManualEvent.ts +55 -0
  126. package/src/{@core → exports}/QueryStanza.ts +12 -11
  127. package/src/exports/SetNode.ts +100 -0
  128. package/src/{@core → exports}/StartService.ts +23 -22
  129. package/src/{@core → exports}/StopService.ts +10 -10
  130. package/src/index.ts +57 -37
  131. package/src/{@parsers/@hvtec → parsers/hvtec}/HVExtract.ts +7 -7
  132. package/src/{@parsers/@text → parsers/text}/GetDescriptionFromProduct.ts +20 -21
  133. package/src/parsers/text/GetPolygonFromProduct.ts +71 -0
  134. package/src/{@parsers/@text → parsers/text}/GetTextFromProduct.ts +12 -12
  135. package/src/parsers/ugc/GetCache.ts +24 -0
  136. package/src/{@parsers/@ugc → parsers/ugc}/GetExpiry.ts +2 -2
  137. package/src/{@parsers/@ugc/GetUGCHeader.ts → parsers/ugc/GetHeader.ts} +4 -4
  138. package/src/{@parsers/@ugc → parsers/ugc}/GetLocations.ts +10 -10
  139. package/src/parsers/ugc/GetZonePolygon.ts +73 -0
  140. package/src/{@parsers/@ugc → parsers/ugc}/GetZones.ts +3 -3
  141. package/src/{@parsers/@ugc → parsers/ugc}/SetCache.ts +13 -8
  142. package/src/{@parsers/@ugc → parsers/ugc}/UGCExtract.ts +14 -14
  143. package/src/{@parsers/@pvtec → parsers/vtec}/GetExpiry.ts +2 -2
  144. package/src/{@parsers/@pvtec → parsers/vtec}/VTECExtract.ts +17 -17
  145. package/src/tasks/CreateTasks.ts +116 -0
  146. package/src/tasks/TaskGenerateJSON.ts +34 -0
  147. package/src/tasks/TaskGenerateText.ts +34 -0
  148. package/src/tasks/TaskSendNTFY.ts +96 -0
  149. package/src/tasks/TaskSendWebhook.ts +107 -0
  150. package/src/{@types → types/event}/Attributes.ts +2 -3
  151. package/src/{@types → types/event}/Event.ts +8 -7
  152. package/src/{@types → types/event}/HVTEC.ts +2 -2
  153. package/src/{@types → types/event}/Properties.ts +17 -3
  154. package/src/{@types → types/event}/Stanza.ts +2 -2
  155. package/src/{@types → types/event}/VTEC.ts +8 -8
  156. package/src/{@types → types/standard}/Actions.ts +3 -3
  157. package/src/{@types → types/standard}/Hash.ts +5 -5
  158. package/src/{@modules/@utilities/GetSettings.ts → types/standard/Nodes.ts} +15 -7
  159. package/src/{@types → types/standard}/Settings.ts +19 -12
  160. package/src/{@types → types/standard}/StanzaCompiled.ts +15 -15
  161. package/src/{@types → types/standard}/UGC.ts +5 -5
  162. package/tools/build.js +32 -0
  163. package/tsconfig.json +32 -1
  164. package/.github/SUPPORTED_EVENTS.md +0 -370
  165. package/.github/docs/docs-functions.md +0 -30
  166. package/.github/docs/docs-general-configurations.md +0 -209
  167. package/.github/docs/docs-integrations.md +0 -37
  168. package/.github/docs/docs-listeners.md +0 -28
  169. package/.github/docs/docs-source-configuration.md +0 -218
  170. package/.github/docs/docs-technical.md +0 -50
  171. package/.github/logo.png +0 -0
  172. package/.github/samples/SAMPLE_EAS_GENERATION.wav +0 -0
  173. package/.github/samples/SAMPLE_GEOJSON.json +0 -204
  174. package/.github/samples/SAMPLE_TEXT_PRODUCT.txt +0 -119
  175. package/dist/cjs/index.cjs +0 -8005
  176. package/dist/esm/index.mjs +0 -7985
  177. package/src/@building/GetEventProperties.ts +0 -96
  178. package/src/@building/GetEventTracking.ts +0 -68
  179. package/src/@core/ManualEvent.ts +0 -56
  180. package/src/@core/SetNode.ts +0 -81
  181. package/src/@events/ParseAPI.ts +0 -117
  182. package/src/@manager/MakeEvents.ts +0 -106
  183. package/src/@manager/RemoveEvent.ts +0 -70
  184. package/src/@manager/Tasks.ts +0 -246
  185. package/src/@manager/ValidateEvents.ts +0 -142
  186. package/src/@modules/@database/InitializeDatabase.ts +0 -59
  187. package/src/@modules/@eas/GenerateEASMessage.ts +0 -144
  188. package/src/@modules/@utilities/GetFormattedTime.ts +0 -43
  189. package/src/@modules/@utilities/SetCronSchedule.ts +0 -94
  190. package/src/@modules/@utilities/SetEventEmit.ts +0 -41
  191. package/src/@modules/@utilities/SetListener.ts +0 -30
  192. package/src/@modules/@utilities/SetTimeoutAction.ts +0 -64
  193. package/src/@modules/@utilities/SetWarning.ts +0 -34
  194. package/src/@modules/@xmpp/ErrorXMPP.ts +0 -27
  195. package/src/@modules/@xmpp/ReconnectXMPP.ts +0 -64
  196. package/src/@parsers/@text/GetPolygonFromProduct.ts +0 -53
  197. package/src/@parsers/@text/GetXML.ts +0 -61
  198. package/src/@parsers/@ugc/GetCache.ts +0 -24
  199. package/src/@parsers/@ugc/GetZonePolygon.ts +0 -111
  200. package/tsup.config.ts +0 -16
@@ -0,0 +1,52 @@
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
23
+
24
+ ## Changelogs
25
+
26
+ ### September 21st, 2026 - b3.1
27
+
28
+ **Features**
29
+ - add(theme): Ability to overwrite the default themes using `Manager.GlobalSettings.Themes`
30
+ - add(nodes): Adds nearest location metadata.
31
+
32
+ **Documentation**
33
+ - feat(github): Added `CHANGELOGS.md` file to the repository for better version tracking and release notes for future releases. See [Changelogs](https://raw.githubusercontent.com/AtmosphericX/AtmosphericX/refs/heads/main/.github/CHANGELOG.md) for prior updates and release notes.
34
+ - feat(github): Added `CODE_OF_CONDUCT.md` and `CONTRIBUTING.md` files to the repository for better community engagement and contribution guidelines.
35
+ - feat(github): Added `SECURITY.md` file to the repository to outline security policies and procedures for reporting vulnerabilities.
36
+ - feat(github): Improved the documentation pathing.
37
+ - feat(docuimentation): Added `FUNDING.yaml` file to the repository to provide information on how to support the project financially.
38
+
39
+
40
+
41
+ **Updates**
42
+ - update(settings): `DebugDisableAllEvents` -> DeveloperDisableEvents.
43
+ - update(settings): `EnableDebugging` -> DeveloperMode.
44
+ - update(settings): `EnhancedEventJournaling` -> DeveloperEventLogging.
45
+ - update(settings): `NodeTTL` -> NodePolygonTTL.
46
+
47
+ **Deprecations**
48
+ - deprecate(esm): ESM support is now deprecated. Please use the CJS version of the library instead.
49
+
50
+
51
+ ------------------------------------------------------------------------------------------------------------------------
52
+ See [Changelogs](https://raw.githubusercontent.com/AtmosphericX/AtmosphericX/refs/heads/main/.github/CHANGELOG.md) for prior updates and release notes.
@@ -1,4 +1,27 @@
1
- # Code of Conduct
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
23
+
24
+ ## Code of Conduct
2
25
  AtmosphericX is an independent, open source project and is **not** affiliated with, endorsed by, or sponsored by any government agency, meteorological organization, emergency management service, or official weather provider. This project may reference, parse, or process publicly available weather data, including but **not** limited to services operated by the National Weather Service (NWS) and the National Oceanic and Atmospheric Administration (NOAA). All trademarks, service marks, and data rights remain the property of their respective owners. AtmosphericX is provided "as is", without warranty of any kind, express or implied, including but **not** limited to:
3
26
 
4
27
  - Accuracy or completeness of parsed weather data
@@ -1,6 +1,25 @@
1
- # Contributing
2
-
3
- This project is community driven and primarily maintained by `k3yomi`.
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
4
23
 
5
24
  ## How to Contribute
6
25
 
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+
3
+ ko_fi: k3yomi
package/.github/LICENSE CHANGED
@@ -1,4 +1,27 @@
1
- Copyright (c) 2026 k3yomi
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
23
+
24
+ ## Copyright (c) 2026 AtmosphericX
2
25
 
3
26
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
27
  of this software and associated documentation files (the "Software"), to use,
@@ -1,10 +1,31 @@
1
- # Security Policy
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
2
23
 
3
24
  ## Reporting Vulnerabilities
4
25
  If you discover a security vulnerability or issue in this repository such as exposed sensitive data, misconfigurations, or content that could cause harm. Please report it **immediately and responsibly**.
5
26
 
6
27
  **Do not report security issues publicly.**
7
- Instead, report privately by emailing **antimal@scriptkitty.cafe**, clearly describing the vulnerability.
28
+ Instead, report privately by emailing [security@scriptkitty.cafe](mailto:security@scriptkitty.cafe), clearly describing the vulnerability.
8
29
 
9
30
  ## What to Include
10
31
  When reporting a vulnerability, please include:
@@ -13,9 +34,7 @@ When reporting a vulnerability, please include:
13
34
  - Any recommendations
14
35
 
15
36
  ## Response
16
- All reports will be reviewed and addressed as quickly as possible.
17
- This is a community driven project, so response times may vary. Please allow up to a few weeks for a full response.
37
+ All reports will be reviewed and addressed as quickly as possible. This is a community driven project, so response times may vary. Please allow up to a few weeks for a full response.
18
38
 
19
39
  ## Scope
20
- This repository **does not contain any credentials, keys, tokens, or personally identifiable information (PII)**.
21
- If you discover any such data, report it immediately.
40
+ This repository **does not contain any credentials, keys, tokens, or personally identifiable information (PII)**. If you discover any such data, report it immediately.
@@ -0,0 +1,109 @@
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
23
+
24
+ # 3.0 - Configurations
25
+ **@atmosx/event-product-parser** provides a wide range of configuration options, from basic event handling and management to advanced filtering capabilities and customizable event properties. This documentation provides an overview of every available configuration, including event settings, filtering options, and parser behavior, along with detailed explanations and practical examples to help you configure the parser for your specific use case.
26
+
27
+ # 3.1 - Core Configurations
28
+
29
+ ## 3.1.1 - Timezone Handling
30
+ Timezone handling is used to ensure that all event timestamps, push notifications, and other time sensitive operations are correctly aligned with the desired timezone. The parser supports both local and UTC timezones, allowing you to configure the parser to match your application's requirements.
31
+
32
+ ```ts
33
+ new Manager({
34
+ Timezone: 'UTC', // 'America/New_York', 'Europe/London', etc. are also valid options
35
+ })
36
+ ```
37
+
38
+ ## 3.1.2 - Database Management
39
+ Databases are used to store and manage stanzas, geographic data, population, broadcastify feeds, and other relevant information that must be stored and easily accessed by the parser. By default, a path is already defined for the database, but you can customize the path to suit your application's needs.
40
+
41
+ ```ts
42
+ new Manager({
43
+ Database: `product-parser-operations.db`, // Custom database path
44
+ })
45
+ ```
46
+
47
+ > [!DANGER]
48
+ > It is imperative that you wait for **ALL** database operations to complete before forcing your application to close. Failure to do so may prevent important data from being fully processed, resulting in missing or incomplete records. If the application is restarted before the database has finished building, you must delete the existing database and allow the parser to rebuild it from scratch. A message will be logged to the console if the database is fully built and ready for use. All event processing is haulted until the database is fully built and ready for use.
49
+
50
+
51
+
52
+ ## 3.1.3 - Broadcastify Management & Filtering
53
+ Broadcastify feeds can be attached to events based on their geographical location. The parser can filter available feeds by proximity, ensuring that events are associated only with relevant nearby feeds and providing additional audio context when available.
54
+
55
+ ```ts
56
+ new Manager({
57
+ BroadcastifySettings: {
58
+ BroadcastifyAttachments: true, // Enable atatchment of Broadcastify feeds to events
59
+ BroadcastifyDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/broadcastify.json`,
60
+ BroadcastifyTags: [`Ham`, `Air`, `Fire`, `Public Safety`, `Weather`, `EMS`, `Police`, `Rail`] // Filter by specific tags
61
+ }
62
+ })
63
+ ```
64
+
65
+ > [!IMPORTANT]
66
+ > The availability of Broadcastify feeds are sourced from `scriptkitty.cafe` and are updated once per month. If you have any questions regarding the availability of Broadcastify feeds, please feel free to contact me directly.
67
+
68
+ ## 3.1.4 - Boundary & Population Data Management
69
+ Boundary and population data provide additional geographic context for events, support the generation of graphics, and contribute to the calculation of a severity index based on the population potentially affected by an event. The parser uses proximity to associate events with relevant boundary and population data. This feature does not require any configuration. The required `.json` files are statically sourced from the `scriptkitty.cafe` server and are automatically retrieved by the parser.
70
+
71
+ ```ts
72
+ new Manager({
73
+ BoundarySettings: {
74
+ BoundaryDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/counties-10m.json`,
75
+ CityDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/cities500.json`
76
+ },
77
+ })
78
+ ```
79
+
80
+ ## 3.1.5 - NTFY Mobile Push Notifications
81
+ This core parser feature enables mobile push notifications through the ntfy service. Notifications can be configured to trigger for specific event types, with options to customize the notification content, priority, media attachments, and other delivery settings. The feature is optional and can be enabled or disabled depending on your application's requirements.
82
+
83
+ ```ts
84
+ new Manager({
85
+ NotifyServer: {
86
+ Enabled: false,
87
+ Server: `https://ntfy.sh`,
88
+ MediaStorage: {
89
+ AUDIO: `http_path_to_audio_storage`,
90
+ TEXT: `http_path_to_text_storage`,
91
+ JSON: `http_path_to_json_storage`,
92
+ IMAGE: `http_path_to_image_storage`,
93
+ },
94
+ Credentials: {
95
+ Username: `your_ntfy_username`,
96
+ Password: `your_ntfy_password`
97
+ }
98
+ },
99
+ })
100
+ ```
101
+ > [!WARNING]
102
+ > If you plan on self hosting your own ntfy server, please ensure that you set the **upstream-base-url** to **https://ntfy.sh** in your **server.yml** file. This is required for proper delivery of push notifications.
103
+
104
+
105
+ > [!TIP]
106
+ > It's best to set your message retention to a maximum of **12 hours**. This ensures that messages are not retained for too long, which could lead to unnecessary storage usage and potential delays in message delivery.
107
+
108
+
109
+ ## 3.1.6 - Action Settings
@@ -0,0 +1,219 @@
1
+ <div align="center" style="margin-top: 20px;">
2
+ <a href="https://atmosphericx.scriptkitty.cafe">
3
+ <img src="https://scriptkitty.cafe/ftp/@atmosphericx/assets/logo-event-product-parser.png"
4
+ alt="@atmosx/event-product-parser"
5
+ width="800"/>
6
+ </a>
7
+ <p style="font-size: 1.1em; max-width: 700px;">
8
+ A robust TypeScript/JavaScript library for parsing and ingesting NOAA and NWS Weather Text Products, featuring an expanded suite of quality‑of‑life tools for faster, cleaner, and more reliable development.
9
+ </p>
10
+ <small style="display: block; margin-top: 10px;">
11
+ Built and maintained with ❤️ by the AtmosphericX team<br>
12
+ <i>Not affiliated with NOAA or NWS</i>
13
+ </small>
14
+ <hr style="width: 60%; margin: 25px auto; opacity: 0.3;">
15
+ <p style="text-align: center; font-size: 1.05em;">
16
+ <a href="https://atmosphericx.scriptkitty.cafe"><b>Official Documentation</b></a> &nbsp;•&nbsp;
17
+ <a href="https://github.com/AtmosphericX"><b>Github Organization</b></a> &nbsp;•&nbsp;
18
+ <a href="https://www.npmjs.com/search?q=%40atmosx"><b>Packages</b></a> &nbsp;•&nbsp;
19
+ <a href="/.github/CHANGELOGS.md"><b>Changelogs</b></a> &nbsp;•&nbsp;
20
+ <a href="https://atmosphericx-discord.scriptkitty.cafe"><b>Community Discord</b></a>
21
+ </p>
22
+ </div>
23
+
24
+ # 2.0 - Sources & Attributes
25
+
26
+ **@atmosx/event-product-parser** supports multiple source attributes that allow you to customize how event products are ingested and processed. These configurations define the external services, connection methods, and parsing used by the parser to receive weather products. The available source configurations provide flexibility for different data ingestion requirements, allowing you to choose the appropriate source based on your application's needs while maintaining a consistent parsing experience.
27
+
28
+ > [!IMPORTANT]
29
+ > You can only use one source at any given time. Attempting to use multiple sources simultaneously will result in event conflicts and parsing issues.
30
+ # 2.1 - NOAA Weather Wire Service
31
+ [NOAA Weather Wire Service](https://www.weather.gov/nwws) is a real-time dissemination service that delivers official weather information, alerts, forecasts, products, and warnings in text format from NWS Weather Forecast Offices and National Centers. This service is designed for television and radio broadcasters, emergency managers, commercial alerting providers, private weather services, and other organizations that require rapid access to weather products.
32
+
33
+ Each alert, forecast, and observation is delivered over [XMPP](https://xmpp.org/) using the standardized [WMO Header Format](#242---world-meteorological-organization-wmo-format). This provides a consistent structure for automated processing.
34
+
35
+ Accessing the NOAA Weather Wire Service requires credentials, which can be obtained by sending an email to [NWWS.Issue@noaa.gov](mailto:NWWS.Issue@noaa.gov).
36
+
37
+ When requesting access, provide the following information:
38
+
39
+ * Name (First and Last)
40
+ * Company
41
+ * Address
42
+ * State, City, and ZIP Code
43
+ * Telephone Number
44
+ * Account Information: Single or Multiple Accounts
45
+
46
+ NWS processing of your request may take as long as 10 days or more depending on critical weather days and NWS priority requirements.
47
+
48
+
49
+
50
+ > [!IMPORTANT]
51
+ > The National Weather Service (NWS) has officially proposed the retirement of the Satellite Broadcast Network (SBN), commonly known as NOAAPort, which could take effect as early as August 31, 2027. This means that this project will no longer look into supporting NOAAPort/SBN as a source for ingesting weather products. The NOAA Weather Wire Service (NWWS) will remain the primary source for ingesting weather products in real-time, and the NWS RESTful API will continue to provide on-demand access to weather data and products.
52
+
53
+ ## 2.1.1 - Basic Settings
54
+ To configure properly, you must set **EnableWireService** to `true` and provide your credentials within **NOAAWeatherWireServiceSettings**. The following example demonstrates how to configure the parser to use the NOAA Weather Wire Service source using the `Manager` class.
55
+
56
+ ```ts
57
+ new Manager({
58
+ EnableWireService: true, // Enable NOAA Weather Wire Service (NWWS)
59
+ NOAAWeatherWireServiceSettings: {
60
+ CredentialSettings: {
61
+ Username: `PUT_YOUR_USERNAME_HERE`, // Case sensitive
62
+ Password: `PUT_YOUR_PASSWORD_HERE`, // Case sensitive
63
+ Nickname: `PUT_YOUR_NICKNAME_HERE`, // Visible to other connected users
64
+ }
65
+ }
66
+ })
67
+ ```
68
+
69
+ ## 2.1.2 - Connection Settings
70
+ By default, the parser will attempt to reconnect if a stanza has not been received within the configured timeout period. The default reconnection interval is **60 seconds**. You can adjust this interval by modifying the **ReconnectInterval** property in **NOAAWeatherWireServiceSettings**.
71
+
72
+ ```ts
73
+ NOAAWeatherWireServiceSettings: {
74
+ ReconnectionSettings: {
75
+ Enabled: true, // Enable auto reconnect
76
+ ReconnectionInterval: 60, // Time since last stanza before reconnecting (seconds)
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## 2.1.3 - Stanza Caching & Retention
82
+ This package provides support for caching and retaining stanzas received from the XMPP client. Cached stanzas can be retained for later processing, allowing querying and analysis of historical weather products received from the NOAA Weather Wire Service. The following example demonstrates how to configure stanza caching and retention settings.
83
+
84
+ ```ts
85
+ NOAAWeatherWireServiceSettings: {
86
+ CacheSettings: {
87
+ Enabled: true, // Enable stanza caching
88
+ MaxDatabaseHistory: 50000, // Maximum stanzas to store in the database
89
+ MaxRetentionHistory: 1200, // Maximum stanzas to load during startup
90
+ },
91
+ },
92
+ ```
93
+
94
+
95
+ ## 2.1.4 - Stanza Processing & Filtering (Pre-Event Processing)
96
+ While processing stanzas, each one is categorized based on its contents and characteristics. This includes formats such as [CAP (Common Alerting Protocol) v1.2](https://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html), [VTEC](https://www.weather.gov/vtec/), [UGC](https://www.weather.gov/gis/AWIPSShapefiles), and **Text** products. By default, all product categories are enabled by default which includes:
97
+
98
+ * UGC/FIPS Based Products
99
+ * VTEC/HVTEC + UGC/FIPS Products
100
+ * Text (No UGC/FIPS/VTEC Present)
101
+
102
+
103
+ ```ts
104
+ NOAAWeatherWireServiceSettings: {
105
+ StanzaSettings: {
106
+ DisableUGC: false, // Disables all UGC Categories
107
+ DisableVTEC: false, // Disables all VTEC/HVTEC Categories
108
+ DisableText: false, // Disables all RawText Categories
109
+ }
110
+ },
111
+ ```
112
+
113
+
114
+ > [!IMPORTANT]
115
+ > Please keep in mind that CAP v1.2 products are not currently supported by this package and will be ignored during processing. Support for CAP v1.2 is planned for a future release.
116
+
117
+
118
+
119
+
120
+ # 2.2 - National Weather Service API
121
+ The [National Weather Service](https://www.weather.gov/) provides a [RESTful API](https://www.weather.gov/documentation/services-web-api) for programmatically accessing weather data and products.
122
+
123
+ Compared to the [NOAA Weather Wire Service](#21---noaa-weather-wire-service), the API introduces additional latency, with data typically delayed by 1 to 2 minutes on average. This delay is one of the primary tradeoffs when using the API instead of NOAA Weather Wire Service for real-time weather product ingestion.
124
+
125
+ The NWS API is best suited for applications that require on demand access to weather data rather than the lowest possible latency delivery of operational weather products. All responses are provided in [GeoJSON](https://geojson.org/) format, making the data straightforward to parse and integrate into applications.
126
+
127
+ # 2.2.1 - Basic Settings
128
+ The **National Weather Service API** source requires minimal configuration and is the **default source** used by the parser. To use the NWS API, simply set **EnableWireService** to `false`. The following example demonstrates how to configure the parser to use the NWS API source using the `Manager` class.
129
+
130
+ ```ts
131
+ new Manager({
132
+ EnableWireService: false, // Disable NOAA Weather Wire Service (NWWS)
133
+ NationalWeatherServiceSettings: {
134
+ CallbackInterval: 30, // How often it retrieves new products (Minimum: 15 seconds)
135
+ EventsEndpoint: `https://api.weather.gov/alerts/active`, // RESTful API
136
+ }
137
+ })
138
+ ```
139
+
140
+ You can also configure the **CallbackInterval** to control how frequently the parser retrieves new products from the NWS API. The minimum allowed interval is 15 seconds, and the default is 30 seconds.
141
+
142
+ # 2.3 - NOAA Weather Wire Service vs NWS RESTful API
143
+ There are significant differences between these two sources. [NOAA Weather Wire Service](#21---noaa-weather-wire-service) requires authenticated access and is optimized for real-time product delivery, while the [NWS RESTful API](#22---national-weather-service-api) is publicly accessible and designed for on demand data retrieval.
144
+
145
+ | Feature | NOAA Weather Wire Service | NWS RESTful API |
146
+ | --- | --- | --- |
147
+ | Authentication | ✅ | ❌ |
148
+ | Real-time Delivery | ✅ | ❌ |
149
+ | WMO Formatting | ✅ | ❌ |
150
+ | Persistent Connection | ✅ | ❌ |
151
+ | Low Latency Products | ✅ | ❌ |
152
+ | Easy to Use | ❌ | ✅ |
153
+ | Publicly Accessible | ❌ | ✅ |
154
+
155
+ # 2.4 - Formatting Standards
156
+ The parser supports two primary formatting standards for weather products: **GeoJSON** and **WMO Format**. These formats provide structured representations of weather data, allowing for consistent parsing and processing of weather products.
157
+
158
+ ## 2.4.1 - GeoJSON Format
159
+
160
+ [GeoJSON](https://geojson.org/) is a format for encoding a variety of geographic data structures. It is based on the JavaScript Object Notation (JSON) standard and is widely used for representing geographic features in web applications.
161
+
162
+ ```json
163
+ {
164
+ "type": "Feature",
165
+ "geometry": {
166
+ "type": "Polygon",
167
+ "coordinates": [[]]
168
+ },
169
+ "properties": {}
170
+ }
171
+ ```
172
+
173
+
174
+ ## 2.4.2 - World Meteorological Organization (WMO) Format
175
+
176
+ **WMO Format** (World Meteorological Organization Format) is a standardized structure used for exchanging meteorological data, including observations, forecasts, and warnings. It provides a consistent format for weather products, allowing meteorological organizations and systems around the world to reliably share and process weather information.
177
+
178
+
179
+ ```text
180
+ 000
181
+ WUUS51 KLOT 000000
182
+ SVRGYX
183
+ ILC001-ILC002-
184
+ /O.NEW.XXXX.XX.X.0000.000000T0000Z-000000T0000Z/
185
+
186
+ BULLETIN - IMMEDIATE BROADCAST REQUESTED
187
+
188
+ Severe Thunderstorm Warning
189
+
190
+ National Weather Service
191
+
192
+ XXXX PM Timezone Weekday Month DD 2026
193
+
194
+ TEST EXAMPLE - TEXT EXAMPLE - TEST EXAMPLE
195
+
196
+ &&
197
+
198
+
199
+ LAT...LON 4587 6965 4585 6968 4588 6971 4587 6972
200
+
201
+ 4584 6970 4576 6972 4576 6976 4577 6978
202
+
203
+ 4574 6981 4566 6974 4565 6970 4558 6971
204
+
205
+ 4553 6978 4530 6970 4567 7054 4573 7038
206
+
207
+ 4580 7042 4589 7026 4596 7026 4598 6968
208
+
209
+ TIME...MOT...LOC 1650Z 313DEG 52KT 4600 7042
210
+
211
+
212
+ HAIL THREAT...TEST EXAMPLE
213
+
214
+ MAX HAIL SIZE...TEST EXAMPLE
215
+
216
+ WIND THREAT...TEST EXAMPLE
217
+
218
+ MAX WIND GUST...TEST EXAMPLE
219
+ ```