@atmosx/event-product-parser 3.0.48 → 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.
Files changed (141) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/CODE_OF_CONDUCT.md +9 -9
  3. package/CONTRIBUTING.md +29 -29
  4. package/LICENSE +17 -17
  5. package/README.md +443 -417
  6. package/SECURITY.md +20 -20
  7. package/SUPPORTED_EVENTS.md +369 -368
  8. package/dist/cjs/index.cjs +1925 -1885
  9. package/dist/esm/index.mjs +1927 -1887
  10. package/package.json +52 -52
  11. package/src/@building/building.attachments.ts +82 -82
  12. package/src/@building/building.clean.ts +29 -29
  13. package/src/@building/building.create.ts +55 -41
  14. package/src/@building/building.enhance.ts +59 -59
  15. package/src/@building/building.geometry.ts +47 -47
  16. package/src/@building/building.headers.ts +36 -36
  17. package/src/@building/building.office.ts +42 -42
  18. package/src/@building/building.polygon.ts +69 -70
  19. package/src/@building/building.properties.ts +95 -95
  20. package/src/@building/building.signature.ts +60 -61
  21. package/src/@building/building.tags.ts +23 -23
  22. package/src/@building/building.tracking.ts +67 -67
  23. package/src/@building/building.validate.ts +152 -146
  24. package/src/@core/core.clearEvents.ts +30 -31
  25. package/src/@core/core.createListener.ts +23 -23
  26. package/src/@core/core.getEvents.ts +23 -24
  27. package/src/@core/core.getNodes.ts +23 -24
  28. package/src/@core/core.getRandomEvent.ts +23 -24
  29. package/src/@core/core.getVersion.ts +23 -24
  30. package/src/@core/core.manualEvent.ts +38 -0
  31. package/src/@core/core.query.ts +38 -38
  32. package/src/@core/core.setNode.ts +80 -80
  33. package/src/@core/core.start.ts +60 -60
  34. package/src/@core/core.stop.ts +31 -31
  35. package/src/@dictionaries/dictionaries.actions.ts +27 -27
  36. package/src/@dictionaries/dictionaries.awips.ts +363 -363
  37. package/src/@dictionaries/dictionaries.cancellation.ts +30 -30
  38. package/src/@dictionaries/dictionaries.causes.ts +35 -35
  39. package/src/@dictionaries/dictionaries.correlations.ts +42 -42
  40. package/src/@dictionaries/dictionaries.enhanced.ts +66 -109
  41. package/src/@dictionaries/dictionaries.events.ts +82 -82
  42. package/src/@dictionaries/dictionaries.expressions.ts +28 -28
  43. package/src/@dictionaries/dictionaries.global.ts +24 -0
  44. package/src/@dictionaries/dictionaries.hail.ts +35 -35
  45. package/src/@dictionaries/dictionaries.icao.ts +258 -258
  46. package/src/@dictionaries/dictionaries.matches.ts +54 -35
  47. package/src/@dictionaries/dictionaries.products.ts +24 -24
  48. package/src/@dictionaries/dictionaries.records.ts +25 -25
  49. package/src/@dictionaries/dictionaries.severity.ts +27 -27
  50. package/src/@dictionaries/dictionaries.shapefiles.ts +35 -35
  51. package/src/@dictionaries/dictionaries.states.ts +71 -71
  52. package/src/@dictionaries/dictionaries.status.ts +30 -30
  53. package/src/@dictionaries/dictionaries.tags.ts +92 -92
  54. package/src/@dictionaries/dictionaries.testing.ts +24 -24
  55. package/src/@events/events.api.ts +116 -118
  56. package/src/@events/events.text.ts +84 -81
  57. package/src/@events/events.ugc.ts +89 -85
  58. package/src/@events/events.vtec.ts +86 -87
  59. package/src/@manager/manager.mkEvent.ts +97 -88
  60. package/src/@manager/manager.rmEvent.ts +56 -49
  61. package/src/@manager/manager.setHash.ts +35 -36
  62. package/src/@manager/manager.updateEvents.ts +32 -34
  63. package/src/@manager/manager.updateListener.ts +154 -159
  64. package/src/@manager/manager.updateNodes.ts +53 -54
  65. package/src/@modules/@database/database.broadcastify.ts +66 -66
  66. package/src/@modules/@database/database.cache.ts +49 -47
  67. package/src/@modules/@database/database.init.ts +58 -57
  68. package/src/@modules/@database/database.shapefiles.ts +92 -92
  69. package/src/@modules/@database/database.stanza.ts +46 -47
  70. package/src/@modules/@eas/eas.getCleanDescription.ts +91 -91
  71. package/src/@modules/@eas/eas.getFloatPCM16.ts +29 -29
  72. package/src/@modules/@eas/eas.getMergedPCM16.ts +32 -32
  73. package/src/@modules/@eas/eas.getPCM16.ts +52 -52
  74. package/src/@modules/@eas/eas.getPCMToFloat.ts +26 -26
  75. package/src/@modules/@eas/eas.getSampledPCM16.ts +36 -36
  76. package/src/@modules/@eas/eas.getTTS.ts +54 -54
  77. package/src/@modules/@eas/eas.getWavPCM16.ts +52 -52
  78. package/src/@modules/@eas/eas.setAFSK.ts +51 -52
  79. package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -32
  80. package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
  81. package/src/@modules/@eas/eas.setEasTone.ts +151 -147
  82. package/src/@modules/@eas/eas.setNoise.ts +32 -31
  83. package/src/@modules/@eas/eas.setRadioEffect.ts +50 -49
  84. package/src/@modules/@eas/eas.setSameHeader.ts +44 -45
  85. package/src/@modules/@stanza/stanza.getAwipsType.ts +45 -45
  86. package/src/@modules/@stanza/stanza.validate.ts +49 -49
  87. package/src/@modules/@utilities/utilities.createHttp.ts +70 -70
  88. package/src/@modules/@utilities/utilities.getFormattedTime.ts +43 -43
  89. package/src/@modules/@utilities/utilities.getLatestIssuance.ts +32 -32
  90. package/src/@modules/@utilities/utilities.getMatched.ts +33 -0
  91. package/src/@modules/@utilities/utilities.getSettings.ts +25 -25
  92. package/src/@modules/@utilities/utilities.getShapeNearestPoint.ts +114 -114
  93. package/src/@modules/@utilities/utilities.setCronSchedule.ts +94 -94
  94. package/src/@modules/@utilities/utilities.setDebug.ts +38 -0
  95. package/src/@modules/@utilities/utilities.setEventEmit.ts +41 -41
  96. package/src/@modules/@utilities/utilities.setListener.ts +30 -30
  97. package/src/@modules/@utilities/utilities.setSettings.ts +42 -42
  98. package/src/@modules/@utilities/utilities.setSleep.ts +33 -33
  99. package/src/@modules/@utilities/utilities.setTimeoutAction.ts +62 -58
  100. package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
  101. package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -58
  102. package/src/@modules/@xmpp/xmpp.xError.ts +26 -28
  103. package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -37
  104. package/src/@modules/@xmpp/xmpp.xOnline.ts +45 -44
  105. package/src/@modules/@xmpp/xmpp.xReconnect.ts +64 -64
  106. package/src/@modules/@xmpp/xmpp.xStanza.ts +62 -62
  107. package/src/@parsers/@hvtec/hvtec.extract.ts +39 -39
  108. package/src/@parsers/@pvtec/pvtec.expires.ts +25 -25
  109. package/src/@parsers/@pvtec/pvtec.extract.ts +48 -48
  110. package/src/@parsers/@text/text.getDescriptionFromProduct.ts +52 -52
  111. package/src/@parsers/@text/text.getEmbed.ts +55 -57
  112. package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
  113. package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
  114. package/src/@parsers/@text/text.getXML.ts +60 -60
  115. package/src/@parsers/@ugc/ugc.coordinates.ts +110 -109
  116. package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
  117. package/src/@parsers/@ugc/ugc.extract.ts +36 -36
  118. package/src/@parsers/@ugc/ugc.getCache.ts +24 -0
  119. package/src/@parsers/@ugc/ugc.header.ts +29 -29
  120. package/src/@parsers/@ugc/ugc.locations.ts +57 -29
  121. package/src/@parsers/@ugc/ugc.setCache.ts +28 -0
  122. package/src/@parsers/@ugc/ugc.zones.ts +51 -51
  123. package/src/@types/type.attributes.ts +28 -28
  124. package/src/@types/type.compiled.ts +34 -34
  125. package/src/@types/type.event.ts +69 -69
  126. package/src/@types/type.hash.ts +24 -24
  127. package/src/@types/type.hvtec.ts +25 -25
  128. package/src/@types/type.listener.ts +32 -32
  129. package/src/@types/type.properties.ts +77 -77
  130. package/src/@types/type.pvtec.ts +30 -30
  131. package/src/@types/type.settings.ts +84 -83
  132. package/src/@types/type.stanza.ts +37 -37
  133. package/src/@types/type.ugc.ts +24 -24
  134. package/src/bootstrap.ts +115 -112
  135. package/src/index.ts +74 -74
  136. package/test.js +92 -98
  137. package/tsconfig.json +13 -13
  138. package/tsup.config.ts +15 -15
  139. package/dist/index.d.mts +0 -299
  140. package/dist/index.d.ts +0 -299
  141. package/src/@core/core.createEvent.ts +0 -83
package/src/bootstrap.ts CHANGED
@@ -1,112 +1,115 @@
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 path from 'path'
21
- import { EventEmitter } from 'node:events';
22
-
23
- export const bootstrap = {
24
- version: `3.0.48`,
25
- isReady: true,
26
- ratelimits: {},
27
- session_xmpp: null,
28
- database: null,
29
- cron: null,
30
- listener: new EventEmitter(),
31
- ansi_colors: {
32
- RED: `\x1b[31m`, GREEN: `\x1b[32m`, YELLOW: `\x1b[33m`,
33
- BLUE: `\x1b[34m`, MAGENTA: `\x1b[35m`, CYAN: `\x1b[36m`,
34
- WHITE: `\x1b[37m`, RESET: `\x1b[0m`
35
- },
36
- cache: {
37
- lastStanza: null,
38
- isConnected: false,
39
- isReconnecting: false,
40
- tReconnects: 0,
41
- sigHault: false,
42
- events: {type: "FeatureCollection", features: []},
43
- nodes: {type: "FeatureCollection", features: []},
44
- hashes: [],
45
- },
46
- settings: {
47
- Database: path.join(process.cwd(), 'shapefiles.db'),
48
- EnableWireService: true,
49
- EnableJournal: true,
50
- NOAAWeatherWireServiceSettings: {
51
- ReconnectionSettings: {
52
- Enabled: true,
53
- ReconnectionInterval: 60,
54
- },
55
- CredentialSettings: {
56
- Username: null,
57
- Password: null,
58
- Nickname: "@atmosx/event-product-parser/3.0",
59
- },
60
- CacheSettings: {
61
- Enabled: true,
62
- MaxDatabaseHistory: 5000,
63
- MaxRetentionHistory: 1000,
64
- },
65
- StanzaSettings: {
66
- DisableUGC: false,
67
- DisableVTEC: false,
68
- DisableText: false,
69
- }
70
- },
71
- NationalWeatherServiceSettings: {
72
- CallbackInterval: 15,
73
- EventsEndpoint: `https://api.weather.gov/alerts/active`,
74
- },
75
- BroadcastifySettings: {
76
- BroadcastifyAttachments: true,
77
- BroadcastifyDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/broadcastify.json`,
78
- BroadcastifyTags: [`Ham`, `Air`, `Fire`, `Public Safety`, `Weather`, `EMS`, `Police`, `Rail`]
79
- },
80
- ListenerSettings: [],
81
- GlobalSettings: {
82
- EventManagement: true,
83
- BetterEventNames: true,
84
- DisableGeometryParsing: false,
85
- UseShapefileCoordinates: false,
86
- SPCWatchesOnly: true,
87
- ShapefileSkipPoints: 15,
88
- NodeTTL: 60,
89
- NodeMinDistance: 120,
90
- EventFiltering: {
91
- ListeningEvents: [],
92
- ListeningICAO: [],
93
- ListeningUGC: [],
94
- ListeningStates: [],
95
- IgnoredICAO: [],
96
- IgnoredEvents: [`Test Message`],
97
- NodeLocationFiltering: false,
98
- IgnoreTestProducts: true,
99
- },
100
- ArchiveSettings: {
101
- TTL: 60,
102
- EventDirectory: null,
103
- TextDirectory: null,
104
- EasDirectory: null,
105
- EasToneout: null
106
- }
107
- }
108
- },
109
- }
110
-
111
-
112
-
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 path from 'path'
21
+ import { EventEmitter } from 'node:events';
22
+
23
+ export const bootstrap = {
24
+ version: `3.0.52`,
25
+ isReady: true,
26
+ ratelimits: {},
27
+ session_xmpp: null,
28
+ database: null,
29
+ cron: null,
30
+ listener: new EventEmitter(),
31
+ ansi_colors: {
32
+ RED: `\x1b[31m`, GREEN: `\x1b[32m`, YELLOW: `\x1b[33m`,
33
+ BLUE: `\x1b[34m`, MAGENTA: `\x1b[35m`, CYAN: `\x1b[36m`,
34
+ WHITE: `\x1b[37m`, RESET: `\x1b[0m`
35
+ },
36
+ cache: {
37
+ lastStanza: null,
38
+ isConnected: false,
39
+ isReconnecting: false,
40
+ tReconnects: 0,
41
+ sigHault: false,
42
+ events: {type: "FeatureCollection", features: []},
43
+ nodes: {type: "FeatureCollection", features: []},
44
+ hashes: [],
45
+ processed: [],
46
+ ugc: new Map<string, string[]>()
47
+ },
48
+ settings: {
49
+ Database: path.join(process.cwd(), 'shapefiles.db'),
50
+ EnableWireService: false,
51
+ EnableDebugging: false,
52
+ EnableJournal: true,
53
+ NOAAWeatherWireServiceSettings: {
54
+ ReconnectionSettings: {
55
+ Enabled: true,
56
+ ReconnectionInterval: 60,
57
+ },
58
+ CredentialSettings: {
59
+ Username: null,
60
+ Password: null,
61
+ Nickname: "@atmosx/event-product-parser/3.0",
62
+ },
63
+ CacheSettings: {
64
+ Enabled: true,
65
+ MaxDatabaseHistory: 5000,
66
+ MaxRetentionHistory: 1000,
67
+ },
68
+ StanzaSettings: {
69
+ DisableUGC: false,
70
+ DisableVTEC: false,
71
+ DisableText: false,
72
+ }
73
+ },
74
+ NationalWeatherServiceSettings: {
75
+ CallbackInterval: 15,
76
+ EventsEndpoint: `https://api.weather.gov/alerts/active`,
77
+ },
78
+ BroadcastifySettings: {
79
+ BroadcastifyAttachments: true,
80
+ BroadcastifyDatabase: `https://scriptkitty.cafe/ftp/@atmosphericx/assets/broadcastify.json`,
81
+ BroadcastifyTags: [`Ham`, `Air`, `Fire`, `Public Safety`, `Weather`, `EMS`, `Police`, `Rail`]
82
+ },
83
+ ListenerSettings: [],
84
+ GlobalSettings: {
85
+ EventManagement: true,
86
+ BetterEventNames: true,
87
+ DisableGeometryParsing: false,
88
+ UseShapefileCoordinates: true,
89
+ SPCWatchesOnly: true,
90
+ ShapefileSkipPoints: 15,
91
+ NodeTTL: 60,
92
+ NodeMinDistance: 120,
93
+ EventFiltering: {
94
+ ListeningEvents: [],
95
+ ListeningICAO: [],
96
+ ListeningUGC: [],
97
+ ListeningStates: [],
98
+ IgnoredICAO: [],
99
+ IgnoredEvents: [`Test Message`],
100
+ NodeLocationFiltering: false,
101
+ IgnoreTestProducts: true,
102
+ },
103
+ ArchiveSettings: {
104
+ TTL: 60,
105
+ EventDirectory: null,
106
+ TextDirectory: null,
107
+ EasDirectory: null,
108
+ EasToneout: null
109
+ }
110
+ }
111
+ },
112
+ }
113
+
114
+
115
+
package/src/index.ts CHANGED
@@ -1,74 +1,74 @@
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 { TypeSettings } from './@types/type.settings'
21
- import { setSettings } from "./@modules/@utilities/utilities.setSettings"
22
- import { getEventGeometry } from "./@building/building.geometry";
23
- import { getCleanedEvent } from "./@building/building.clean"
24
- import { setEventEmit } from './@modules/@utilities/utilities.setEventEmit';
25
- import { setWarning } from './@modules/@utilities/utilities.setWarning';
26
- import { createListener } from "./@core/core.createListener"
27
- import { startService } from "./@core/core.start"
28
- import { stopService } from "./@core/core.stop"
29
- import { setEasTone } from './@modules/@eas/eas.setEasTone';
30
- import { setNode } from "./@core/core.setNode"
31
- import { getEvents } from "./@core/core.getEvents"
32
- import { getNodes } from "./@core/core.getNodes"
33
- import { createEvent } from "./@core/core.createEvent"
34
- import { getRandomEvent } from './@core/core.getRandomEvent';
35
- import { query } from './@core/core.query';
36
- import { clearEvents } from './@core/core.clearEvents';
37
-
38
- export class Manager {
39
- constructor(settings: TypeSettings) { this.trycatch(); startService(settings) }
40
-
41
- on(event: string, callback: () => void) {
42
- createListener(event, callback)
43
- }
44
-
45
- trycatch() {
46
- process.on('uncaughtException', (err: any) => {
47
- const ignored = ['ETIMEDOUT', 'ECONNRESET', 'EHOSTUNREACH', 'ENOTFOUND', 'ECONNREFUSED', 'EPIPE', 'EADDRINUSE', 'EALREADY', 'EACCES', 'EAGAIN', 'EHOSTDOWN', 'STARTTLS_FAILURE'];
48
- if (ignored.includes(err?.code)) {
49
- setEventEmit({
50
- event: `onServiceStatus`,
51
- metadata: {
52
- message: `Ignored Critical Error: ${err?.code ?? 'Unknown error code'}. This may indicate a connection issue. Attempting to continue...`,
53
- data: {},
54
- type: `error`,
55
- error: true
56
- }
57
- })
58
- return;
59
- }
60
- setWarning({message: `Uncaught Exception: ${err instanceof Error ? err.stack ?? err.message : String(err)}`})
61
- })
62
- }
63
- }
64
-
65
- export default Manager;
66
- export type { TypeEvent } from './@types/type.event';
67
- export {
68
- setSettings, getEventGeometry, createEvent,
69
- getCleanedEvent, stopService, clearEvents,
70
- startService, setNode, getRandomEvent,
71
- getEvents, getNodes, setEasTone, query
72
- }
73
-
74
-
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 { TypeSettings } from './@types/type.settings'
21
+ import { setSettings } from "./@modules/@utilities/utilities.setSettings"
22
+ import { getEventGeometry } from "./@building/building.geometry";
23
+ import { getCleanedEvent } from "./@building/building.clean"
24
+ import { setEventEmit } from './@modules/@utilities/utilities.setEventEmit';
25
+ import { setWarning } from './@modules/@utilities/utilities.setWarning';
26
+ import { createListener } from "./@core/core.createListener"
27
+ import { startService } from "./@core/core.start"
28
+ import { stopService } from "./@core/core.stop"
29
+ import { setEasTone } from './@modules/@eas/eas.setEasTone';
30
+ import { setNode } from "./@core/core.setNode"
31
+ import { getEvents } from "./@core/core.getEvents"
32
+ import { getNodes } from "./@core/core.getNodes"
33
+ import { manualEvent } from "./@core/core.manualEvent"
34
+ import { getRandomEvent } from './@core/core.getRandomEvent';
35
+ import { query } from './@core/core.query';
36
+ import { clearEvents } from './@core/core.clearEvents';
37
+
38
+ export class Manager {
39
+ constructor(settings: TypeSettings) { this.trycatch(); startService(settings) }
40
+
41
+ on(event: string, callback: () => void) {
42
+ createListener(event, callback)
43
+ }
44
+
45
+ trycatch() {
46
+ process.on('uncaughtException', (err: any) => {
47
+ const ignored = ['ETIMEDOUT', 'ECONNRESET', 'EHOSTUNREACH', 'ENOTFOUND', 'ECONNREFUSED', 'EPIPE', 'EADDRINUSE', 'EALREADY', 'EACCES', 'EAGAIN', 'EHOSTDOWN', 'STARTTLS_FAILURE'];
48
+ if (ignored.includes(err?.code)) {
49
+ setEventEmit({
50
+ event: `onServiceStatus`,
51
+ metadata: {
52
+ message: `Ignored Critical Error: ${err?.code ?? 'Unknown error code'}. This may indicate a connection issue. Attempting to continue...`,
53
+ data: {},
54
+ type: `error`,
55
+ error: true
56
+ }
57
+ })
58
+ return;
59
+ }
60
+ setWarning({message: `Uncaught Exception: ${err instanceof Error ? err.stack ?? err.message : String(err)}`})
61
+ })
62
+ }
63
+ }
64
+
65
+ export default Manager;
66
+ export type { TypeEvent } from './@types/type.event';
67
+ export {
68
+ setSettings, getEventGeometry, manualEvent,
69
+ getCleanedEvent, stopService, clearEvents,
70
+ startService, setNode, getRandomEvent,
71
+ getEvents, getNodes, setEasTone, query
72
+ }
73
+
74
+
package/test.js CHANGED
@@ -1,99 +1,93 @@
1
- const { Manager } = require(`../dist/cjs/index.cjs`)
2
-
3
- const Client = new Manager({
4
- Database: `shapefiles.db`,
5
- EnableWireService: false,
6
- EnableJournal: true,
7
- NOAAWeatherWireServiceSettings: {
8
- ReconnectionSettings: {
9
- Enabled: true,
10
- ReconnectionInterval: 60,
11
- },
12
- CredentialSettings: {
13
- Username: `username`,
14
- Password: `password`,
15
- Nickname: "nickname (@atmosx/event-product-parser/3.0)",
16
- },
17
- CacheSettings: {
18
- Enabled: true,
19
- MaxDatabaseHistory: 5000,
20
- MaxRetentionHistory: 555,
21
- },
22
- StanzaSettings: {
23
- DisableUGC: false,
24
- DisableVTEC: false,
25
- DisableText: false,
26
- }
27
- },
28
- NationalWeatherServiceSettings: {
29
- CallbackInterval: 30,
30
- EventsEndpoint: `https://api.weather.gov/alerts/active`,
31
- },
32
- BroadcastifySettings: {
33
- BroadcastifyAttachments: true,
34
- BroadcastifyTags: [`Public Safety`, `Amateur Radio`, `Other`, `Rail`, `Aviation`, `Marine`, `Disaster Event`, `Special Event`]
35
- },
36
- ListenerSettings: [
37
- {
38
- events: [`*Thunderstorm Warning*`, `* Watch`],
39
- webhook: {
40
- enabled: true,
41
- destination: "https://discord.com/api/XXXXXXXXXX/XXXXXXXXXXX",
42
- title: "AtmosphericX - (Thunderstorm Warnings and Watches)",
43
- message: "<@&XXXXXXXXXXXXXXXXXXXXX>",
44
- ratelimit: 1
45
- },
46
- uploads: {
47
- eas: true,
48
- file: true,
49
- event: true
50
- }
51
- }
52
- ],
53
- GlobalSettings: {
54
- EventManagement: true,
55
- BetterEventNames: true,
56
- DisableGeometryParsing: false,
57
- UseShapefileCoordinates: true,
58
- SPCWatchesOnly: true,
59
- ShapefileSkipPoints: 0,
60
- NodeTTL: 60,
61
- NodeMinDistance: 120,
62
- EventFiltering: {
63
- ListeningEvents: [
64
- "Tornado Emergency", "PDS Tornado Warning", "Tornado Warning",
65
- "Confirmed Tornado Warning", "Radar Indicated Tornado Warning",
66
- "Special Marine Warning (TPROB)", "PDS Tornado Watch", "Tornado Watch",
67
- "EDS Severe Thunderstorm Warning (TPROB)", "EDS Severe Thunderstorm Warning",
68
- "Destructive Severe Thunderstorm Warning (TPROB)", "Destructive Severe Thunderstorm Warning",
69
- "Considerable Severe Thunderstorm Warning (TPROB)", "Considerable Severe Thunderstorm Warning",
70
- "Severe Thunderstorm Warning (TPROB)", "Severe Thunderstorm Warning",
71
- "Severe Thunderstorm Watch",
72
- "Flash Flood Emergency", "Flash Flood Warning",
73
- "Flash Flood Watch",
74
- "Tsunami Warning", "Tsunami Watch",
75
- "Tsunami Advisory", "Special Marine Warning",
76
- "Earthquake Warning",
77
- "Hurricane Warning", "Hurricane Watch",
78
- "Tropical Storm Warning",
79
- "Winter Storm Warning", "Blizzard Warning",
80
- "Ice Storm Warning", "Snow Squall Warning",
81
- "Winter Weather Advisory", "Extreme Cold Watch"
82
- ],
83
- ListeningICAO: [],
84
- IgnoredICAO: [],
85
- IgnoredEvents: [],
86
- ListeningUGC: [],
87
- ListeningStates: [],
88
- NodeLocationFiltering: false,
89
- IgnoreTestProducts: true,
90
- },
91
- ArchiveSettings: {
92
- TTL: 600,
93
- EventDirectory: `Storage/EventProducts`,
94
- TextDirectory: `Storage/TextProducts`,
95
- EasDirectory: `Storage/EasScenarios`,
96
- EasToneout: `tone.wav`,
97
- }
98
- }
1
+ const { Manager } = require(`../dist/cjs/index.cjs`)
2
+
3
+ const Client = new Manager({
4
+ Database: `shapefiles.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: 5000,
21
+ MaxRetentionHistory: 555,
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
+ BroadcastifyTags: [`Public Safety`, `Amateur Radio`, `Other`, `Rail`, `Aviation`, `Marine`, `Disaster Event`, `Special Event`]
36
+ },
37
+ ListenerSettings: [
38
+ {
39
+ events: [`*Thunderstorm Warning*`, `* Watch`],
40
+ webhook: {
41
+ enabled: true,
42
+ destination: "https://discord.com/api/XXXXXXXXXX/XXXXXXXXXXX",
43
+ title: "AtmosphericX - (Thunderstorm Warnings and Watches)",
44
+ message: "<@&XXXXXXXXXXXXXXXXXXXXX>",
45
+ ratelimit: 1
46
+ },
47
+ uploads: {
48
+ eas: true,
49
+ file: true,
50
+ event: true
51
+ }
52
+ }
53
+ ],
54
+ GlobalSettings: {
55
+ EventManagement: true,
56
+ BetterEventNames: true,
57
+ DisableGeometryParsing: false,
58
+ UseShapefileCoordinates: true,
59
+ SPCWatchesOnly: true,
60
+ ShapefileSkipPoints: 0,
61
+ NodeTTL: 60,
62
+ NodeMinDistance: 120,
63
+ EventFiltering: {
64
+ ListeningEvents: [
65
+ "*Severe Thunderstorm Warning*",
66
+ "*Blizzard*", "*Ice Storm*", "*Winter Storm*", "*Snow Squall*",
67
+ "Tornado Emergency", "*Tornado Warning*",
68
+ "Special Weather Statement", "Marine Weather Statement",
69
+ "*Tsunami*", "*Hurricane*", "*Tropical Storm*", "*Special Marine*",
70
+ "*Flash Flood Warning*", "*Flash Flood Watch*", "*Flash Flood Advisory*",
71
+ "Mesoscale Discussion",
72
+ "SPC Day 1 Outlook", "SPC Day 2 Outlook", "SPC Day 3 Outlook",
73
+ "PDS Tornado Watch", "Tornado Watch", "Severe Thunderstorm Watch", "Flash Flood Watch", "PDS Severe Thunderstorm Watch",
74
+ "*Administrative*", "National Weather Service Policy",
75
+ "Fire Weather Warning", "Fire Weather Watch", "Fire Weather Advisory",
76
+ ],
77
+ ListeningICAO: [`KLOT`],
78
+ IgnoredICAO: [],
79
+ IgnoredEvents: [],
80
+ ListeningUGC: [`WIC001`],
81
+ ListeningStates: [`MO`, `IA`],
82
+ NodeLocationFiltering: false,
83
+ IgnoreTestProducts: true,
84
+ },
85
+ ArchiveSettings: {
86
+ TTL: 600,
87
+ EventDirectory: `Storage/EventProducts`,
88
+ TextDirectory: `Storage/TextProducts`,
89
+ EasDirectory: `Storage/EasScenarios`,
90
+ EasToneout: `tone.wav`,
91
+ }
92
+ }
99
93
  })
package/tsconfig.json CHANGED
@@ -1,14 +1,14 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES6",
4
- "module": "ESNext",
5
- "moduleResolution": "Node",
6
- "outDir": "dist",
7
- "declaration": true,
8
- "declarationDir": "dist/types",
9
- "esModuleInterop": true,
10
- "allowSyntheticDefaultImports": true,
11
- "skipLibCheck": true
12
- },
13
- "include": ["src"]
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES6",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "outDir": "dist",
7
+ "declaration": true,
8
+ "declarationDir": "dist/types",
9
+ "esModuleInterop": true,
10
+ "allowSyntheticDefaultImports": true,
11
+ "skipLibCheck": true
12
+ },
13
+ "include": ["src"]
14
14
  }
package/tsup.config.ts CHANGED
@@ -1,16 +1,16 @@
1
- import { defineConfig } from 'tsup'
2
-
3
- export default defineConfig({
4
- entry: ['src/index.ts'],
5
- outDir: 'dist',
6
- format: ['esm', 'cjs'],
7
- dts: true,
8
- noExternal: ["@xmpp/client", "@xmpp/sasl", "@xmpp/sasl-plain"],
9
- clean: true,
10
- outExtension({ format }) {
11
- return { js: format === 'esm' ? '.mjs' : '.cjs' }
12
- },
13
- esbuildOptions(options, context) {
14
- options.outdir = `dist/${context.format}`
15
- },
1
+ import { defineConfig } from 'tsup'
2
+
3
+ export default defineConfig({
4
+ entry: ['src/index.ts'],
5
+ outDir: 'dist',
6
+ format: ['esm', 'cjs'],
7
+ dts: false,
8
+ noExternal: ["@xmpp/client", "@xmpp/sasl", "@xmpp/sasl-plain"],
9
+ clean: true,
10
+ outExtension({ format }) {
11
+ return { js: format === 'esm' ? '.mjs' : '.cjs' }
12
+ },
13
+ esbuildOptions(options, context) {
14
+ options.outdir = `dist/${context.format}`
15
+ },
16
16
  })