@atmosx/event-product-parser 3.0.51 → 3.0.53

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 (140) hide show
  1. package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +9 -9
  2. package/{CONTRIBUTING.md → .github/CONTRIBUTING.md} +29 -29
  3. package/{LICENSE → .github/LICENSE} +17 -17
  4. package/{README.md → .github/README.md} +466 -444
  5. package/{SECURITY.md → .github/SECURITY.md} +20 -20
  6. package/{SUPPORTED_EVENTS.md → .github/SUPPORTED_EVENTS.md} +369 -368
  7. package/.vscode/settings.json +3 -3
  8. package/dist/cjs/index.cjs +243 -213
  9. package/dist/esm/index.mjs +242 -212
  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 -55
  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 -69
  19. package/src/@building/building.properties.ts +95 -95
  20. package/src/@building/building.signature.ts +60 -60
  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 -151
  24. package/src/@core/core.clearEvents.ts +30 -30
  25. package/src/@core/core.createListener.ts +23 -23
  26. package/src/@core/core.getEvents.ts +23 -23
  27. package/src/@core/core.getNodes.ts +23 -23
  28. package/src/@core/core.getRandomEvent.ts +23 -23
  29. package/src/@core/core.getVersion.ts +23 -23
  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 -116
  56. package/src/@events/events.text.ts +84 -80
  57. package/src/@events/events.ugc.ts +89 -85
  58. package/src/@events/events.vtec.ts +86 -86
  59. package/src/@manager/manager.mkEvent.ts +97 -93
  60. package/src/@manager/manager.rmEvent.ts +56 -51
  61. package/src/@manager/manager.setHash.ts +35 -35
  62. package/src/@manager/manager.updateEvents.ts +32 -32
  63. package/src/@manager/manager.updateListener.ts +179 -154
  64. package/src/@manager/manager.updateNodes.ts +53 -53
  65. package/src/@modules/@database/database.broadcastify.ts +66 -66
  66. package/src/@modules/@database/database.cache.ts +49 -49
  67. package/src/@modules/@database/database.init.ts +58 -58
  68. package/src/@modules/@database/database.shapefiles.ts +92 -92
  69. package/src/@modules/@database/database.stanza.ts +46 -46
  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 -51
  79. package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -31
  80. package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
  81. package/src/@modules/@eas/eas.setEasTone.ts +151 -151
  82. package/src/@modules/@eas/eas.setNoise.ts +32 -32
  83. package/src/@modules/@eas/eas.setRadioEffect.ts +50 -50
  84. package/src/@modules/@eas/eas.setSameHeader.ts +44 -44
  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 +83 -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 -33
  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 -38
  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 -62
  100. package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
  101. package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -57
  102. package/src/@modules/@xmpp/xmpp.xError.ts +26 -26
  103. package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -36
  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 -55
  112. package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
  113. package/src/@parsers/@text/text.getRaw.ts +54 -0
  114. package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
  115. package/src/@parsers/@text/text.getXML.ts +60 -60
  116. package/src/@parsers/@ugc/ugc.coordinates.ts +110 -110
  117. package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
  118. package/src/@parsers/@ugc/ugc.extract.ts +36 -36
  119. package/src/@parsers/@ugc/ugc.getCache.ts +23 -23
  120. package/src/@parsers/@ugc/ugc.header.ts +29 -29
  121. package/src/@parsers/@ugc/ugc.locations.ts +56 -56
  122. package/src/@parsers/@ugc/ugc.setCache.ts +27 -27
  123. package/src/@parsers/@ugc/ugc.zones.ts +51 -51
  124. package/src/@types/type.attributes.ts +28 -28
  125. package/src/@types/type.compiled.ts +34 -34
  126. package/src/@types/type.event.ts +69 -69
  127. package/src/@types/type.hash.ts +24 -24
  128. package/src/@types/type.hvtec.ts +25 -25
  129. package/src/@types/type.listener.ts +37 -32
  130. package/src/@types/type.properties.ts +77 -77
  131. package/src/@types/type.pvtec.ts +30 -30
  132. package/src/@types/type.settings.ts +93 -84
  133. package/src/@types/type.stanza.ts +37 -37
  134. package/src/@types/type.ugc.ts +24 -24
  135. package/src/bootstrap.ts +124 -115
  136. package/src/index.ts +74 -74
  137. package/{test.js → testing/init.js} +105 -92
  138. package/tsconfig.json +13 -13
  139. package/tsup.config.ts +15 -15
  140. package/src/@core/core.createEvent.ts +0 -82
@@ -1,45 +1,46 @@
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 { bootstrap } from "../../bootstrap";
21
- import { setEventEmit } from '../@utilities/utilities.setEventEmit';
22
- import { xml } from '@xmpp/client'
23
-
24
- export const xOnline = () => {
25
- const settings = bootstrap.settings;
26
- bootstrap.session_xmpp.on(`online`, async (address: string) => {
27
- bootstrap.cache.sigHault = false;
28
- bootstrap.cache.isConnected = true;
29
- bootstrap.cache.tReconnects = 0;
30
- const nickname = settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname;
31
- bootstrap.session_xmpp.send(xml('presence', {
32
- to: `nwws@conference.nwws-oi.weather.gov/${nickname}`,
33
- xmlns: 'http://jabber.org/protocol/muc',
34
- }))
35
- setEventEmit({
36
- event: `onServiceStatus`,
37
- metadata: {
38
- message: `Succesfully connected to NOAA Weather Wire Service as "${nickname}"`,
39
- data: {},
40
- type: `online`,
41
- error: false
42
- },
43
- })
44
- })
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 { bootstrap } from "../../bootstrap";
21
+ import { setEventEmit } from '../@utilities/utilities.setEventEmit';
22
+ import { xml } from '@xmpp/client'
23
+
24
+ export const xOnline = () => {
25
+ const settings = bootstrap.settings;
26
+ bootstrap.session_xmpp.on(`online`, async (address: string) => {
27
+ bootstrap.cache.sigHault = false;
28
+ bootstrap.cache.isConnected = true;
29
+ bootstrap.cache.tReconnects = 0;
30
+ const nickname = settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname;
31
+ bootstrap.session_xmpp.send(xml('presence', {
32
+ to: `nwws@conference.nwws-oi.weather.gov/${nickname}`,
33
+ xmlns: 'http://jabber.org/protocol/muc',
34
+ }))
35
+ setEventEmit({
36
+ event: `onServiceStatus`,
37
+ metadata: {
38
+ message: `Succesfully connected to NOAA Weather Wire Service as "${nickname}"`,
39
+ data: {},
40
+ type: `online`,
41
+ error: false
42
+ },
43
+ message: `Succesfully connected to NOAA Weather Wire Service as "${nickname}"`,
44
+ })
45
+ })
45
46
  }
@@ -1,64 +1,64 @@
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 { bootstrap } from "../../bootstrap"
22
- import { setEventEmit } from "../@utilities/utilities.setEventEmit";
23
- import { setWarning } from "../@utilities/utilities.setWarning";
24
-
25
- export const xReconnect = async (interval: number): Promise<void> => {
26
- const settings = bootstrap.settings as TypeSettings;
27
- const lastStanza = Date.now() - bootstrap.cache.lastStanza
28
- if (interval < 15) {
29
- setWarning({ message: `Reconnection interval of ${interval} seconds is too low, setting to 15 seconds` })
30
- interval = 15;
31
- bootstrap.settings.NOAAWeatherWireServiceSettings.ReconnectionSettings.ReconnectionInterval = 15;
32
- }
33
- const reconnectThreshold = interval * 1e3
34
- if ((!bootstrap.cache.isConnected && !bootstrap.cache.sigHault) || !bootstrap.session_xmpp) {
35
- return;
36
- }
37
- if (lastStanza > reconnectThreshold) {
38
- if (!bootstrap.cache.isReconnecting) {
39
- bootstrap.cache.isReconnecting = true;
40
- bootstrap.cache.isConnected = false;
41
- bootstrap.cache.tReconnects += 1;
42
- try {
43
- setEventEmit({
44
- event: `onServiceStatus`,
45
- metadata: {
46
- message: `Attempting to reconnect to XMPP Service (Reconnect Attempt ${bootstrap.cache.tReconnects})`,
47
- data: {
48
- last_stanza: lastStanza,
49
- nickname: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname
50
- },
51
- type: `reconnect`,
52
- error: true
53
- }, message: `Attempting to reconnect to XMPP Service (Reconnect Attempt ${bootstrap.cache.tReconnects})`,
54
- })
55
- await bootstrap.session_xmpp.stop().catch(() => {});
56
- await bootstrap.session_xmpp.start().catch(() => {});
57
- } catch (error) {
58
- setWarning({ message: `XMPP Reconnect Failed - ${(error as Error).message}` })
59
- } finally {
60
- bootstrap.cache.isReconnecting = false;
61
- }
62
- }
63
- }
64
- }
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 { bootstrap } from "../../bootstrap"
22
+ import { setEventEmit } from "../@utilities/utilities.setEventEmit";
23
+ import { setWarning } from "../@utilities/utilities.setWarning";
24
+
25
+ export const xReconnect = async (interval: number): Promise<void> => {
26
+ const settings = bootstrap.settings as TypeSettings;
27
+ const lastStanza = Date.now() - bootstrap.cache.lastStanza
28
+ if (interval < 15) {
29
+ setWarning({ message: `Reconnection interval of ${interval} seconds is too low, setting to 15 seconds` })
30
+ interval = 15;
31
+ bootstrap.settings.NOAAWeatherWireServiceSettings.ReconnectionSettings.ReconnectionInterval = 15;
32
+ }
33
+ const reconnectThreshold = interval * 1e3
34
+ if ((!bootstrap.cache.isConnected && !bootstrap.cache.sigHault) || !bootstrap.session_xmpp) {
35
+ return;
36
+ }
37
+ if (lastStanza > reconnectThreshold) {
38
+ if (!bootstrap.cache.isReconnecting) {
39
+ bootstrap.cache.isReconnecting = true;
40
+ bootstrap.cache.isConnected = false;
41
+ bootstrap.cache.tReconnects += 1;
42
+ try {
43
+ setEventEmit({
44
+ event: `onServiceStatus`,
45
+ metadata: {
46
+ message: `Attempting to reconnect to XMPP Service (Reconnect Attempt ${bootstrap.cache.tReconnects})`,
47
+ data: {
48
+ last_stanza: lastStanza,
49
+ nickname: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname
50
+ },
51
+ type: `reconnect`,
52
+ error: true
53
+ }, message: `Attempting to reconnect to XMPP Service (Reconnect Attempt ${bootstrap.cache.tReconnects})`,
54
+ })
55
+ await bootstrap.session_xmpp.stop().catch(() => {});
56
+ await bootstrap.session_xmpp.start().catch(() => {});
57
+ } catch (error) {
58
+ setWarning({ message: `XMPP Reconnect Failed - ${(error as Error).message}` })
59
+ } finally {
60
+ bootstrap.cache.isReconnecting = false;
61
+ }
62
+ }
63
+ }
64
+ }
@@ -1,63 +1,63 @@
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 { TypeStanza } from "../../@types/type.stanza";
21
- import { bootstrap } from "../../bootstrap";
22
- import { validate } from "../@stanza/stanza.validate";
23
- import { createEvent } from "../../@building/building.create";
24
- import { importStanza } from "../@database/database.stanza";
25
- import { setEventEmit } from "../@utilities/utilities.setEventEmit";
26
-
27
- export const xStanza = () => {
28
- bootstrap.session_xmpp.on(`stanza`, async (stanza: TypeStanza) => {
29
- const msgFrom = stanza?.attrs?.from ?? ``
30
- const msgType = stanza?.attrs?.type ?? ``
31
- setEventEmit({
32
- event: `onServiceStatus`,
33
- metadata: {
34
- message: stanza,
35
- from: msgFrom,
36
- type: `stanza`
37
- },
38
- })
39
- bootstrap.cache.lastStanza = Date.now();
40
- if (stanza.is(`message`)) {
41
- const result = validate({ stanza });
42
- const isSkippable = result.isIgnored ||
43
- (result.isCapEvent) ||
44
- (result.isCapEvent && !result.isCapAreaDescription)
45
- if (isSkippable) { return; }
46
- await createEvent(result);
47
- await importStanza(result);
48
- }
49
- if (stanza.is(`presence`) && msgFrom.startsWith('nwws@conference.nwws-oi.weather.gov/')) {
50
- const getOccupant = msgFrom.split(`/`).slice(1).join(`/`)
51
- const getAvailability = msgType === `unavailable`
52
- setEventEmit({
53
- event: `onServiceStatus`,
54
- metadata: {
55
- message: `Occupant ${getOccupant} has ${getAvailability ? `left` : `joined`} the room`,
56
- data: {},
57
- type: `occupant`,
58
- error: false
59
- },
60
- })
61
- }
62
- })
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 { TypeStanza } from "../../@types/type.stanza";
21
+ import { bootstrap } from "../../bootstrap";
22
+ import { validate } from "../@stanza/stanza.validate";
23
+ import { createEvent } from "../../@building/building.create";
24
+ import { importStanza } from "../@database/database.stanza";
25
+ import { setEventEmit } from "../@utilities/utilities.setEventEmit";
26
+
27
+ export const xStanza = () => {
28
+ bootstrap.session_xmpp.on(`stanza`, async (stanza: TypeStanza) => {
29
+ const msgFrom = stanza?.attrs?.from ?? ``
30
+ const msgType = stanza?.attrs?.type ?? ``
31
+ setEventEmit({
32
+ event: `onServiceStatus`,
33
+ metadata: {
34
+ message: stanza,
35
+ from: msgFrom,
36
+ type: `stanza`
37
+ },
38
+ })
39
+ bootstrap.cache.lastStanza = Date.now();
40
+ if (stanza.is(`message`)) {
41
+ const result = validate({ stanza });
42
+ const isSkippable = result.isIgnored ||
43
+ (result.isCapEvent) ||
44
+ (result.isCapEvent && !result.isCapAreaDescription)
45
+ if (isSkippable) { return; }
46
+ await createEvent(result);
47
+ await importStanza(result);
48
+ }
49
+ if (stanza.is(`presence`) && msgFrom.startsWith('nwws@conference.nwws-oi.weather.gov/')) {
50
+ const getOccupant = msgFrom.split(`/`).slice(1).join(`/`)
51
+ const getAvailability = msgType === `unavailable`
52
+ setEventEmit({
53
+ event: `onServiceStatus`,
54
+ metadata: {
55
+ message: `Occupant ${getOccupant} has ${getAvailability ? `left` : `joined`} the room`,
56
+ data: {},
57
+ type: `occupant`,
58
+ error: false
59
+ },
60
+ })
61
+ }
62
+ })
63
63
  }
@@ -1,40 +1,40 @@
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 { TypeHVTEC } from "../../@types/type.hvtec";
21
- import { dict_causes } from "../../@dictionaries/dictionaries.causes";
22
- import { dict_records } from "../../@dictionaries/dictionaries.records";
23
- import { dict_expressions } from "../../@dictionaries/dictionaries.expressions";
24
- import { dict_severity } from "../../@dictionaries/dictionaries.severity";
25
-
26
- export const hvExtract = (message: string): TypeHVTEC[] | null => {
27
- const getHVTECs = message.match(dict_expressions.hvtec) ?? [];
28
- const vtecs: TypeHVTEC[] = [];
29
- for (const vtec of getHVTECs) {
30
- const sub = vtec.split(`.`);
31
- if (sub.length < 7) continue;
32
- vtecs.push({
33
- hvtec: vtec,
34
- severity: dict_severity[sub[1]],
35
- cause: dict_causes[sub[2]],
36
- record: dict_records[sub[6]]
37
- })
38
- }
39
- return vtecs.length > 0 ? vtecs : null;
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 { TypeHVTEC } from "../../@types/type.hvtec";
21
+ import { dict_causes } from "../../@dictionaries/dictionaries.causes";
22
+ import { dict_records } from "../../@dictionaries/dictionaries.records";
23
+ import { dict_expressions } from "../../@dictionaries/dictionaries.expressions";
24
+ import { dict_severity } from "../../@dictionaries/dictionaries.severity";
25
+
26
+ export const hvExtract = (message: string): TypeHVTEC[] | null => {
27
+ const getHVTECs = message.match(dict_expressions.hvtec) ?? [];
28
+ const vtecs: TypeHVTEC[] = [];
29
+ for (const vtec of getHVTECs) {
30
+ const sub = vtec.split(`.`);
31
+ if (sub.length < 7) continue;
32
+ vtecs.push({
33
+ hvtec: vtec,
34
+ severity: dict_severity[sub[1]],
35
+ cause: dict_causes[sub[2]],
36
+ record: dict_records[sub[6]]
37
+ })
38
+ }
39
+ return vtecs.length > 0 ? vtecs : null;
40
40
  }
@@ -1,26 +1,26 @@
1
- /*
2
- _ _ _ __ __
3
- /\ | | | | (_) \ \ / /
4
- / \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
5
- / /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
6
- / ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
7
- /_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
8
- | |
9
- |_|
10
-
11
- Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
- Discord: https://atmosphericx-discord.scriptkitty.cafe
13
- Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
15
-
16
- Internal Package: @atmosx/event-product-parser
17
-
18
- */
19
-
20
- export const getExpiry = (dates: string[]): string => {
21
- if (dates?.[1] == `000000T0000Z`) return 'Invalid Date Format'
22
- const expires = `${new Date().getFullYear().toString().substring(0, 2)}${dates[1].substring(0, 2)}-${dates[1].substring(2, 4)}-${dates[1].substring(4, 6)}T${dates[1].substring(7, 9)}:${dates[1].substring(9, 11)}:00`;
23
- const local = new Date(new Date(expires).getTime() - 4 * 60 * 60000);
24
- const pad = (n: number) => n.toString().padStart(2, '0');
25
- return `${local.getFullYear()}-${pad(local.getMonth() + 1)}-${pad(local.getDate())}T${pad(local.getHours())}:${pad(local.getMinutes())}:00.000-04:00`;
1
+ /*
2
+ _ _ _ __ __
3
+ /\ | | | | (_) \ \ / /
4
+ / \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
5
+ / /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
6
+ / ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
7
+ /_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
8
+ | |
9
+ |_|
10
+
11
+ Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
+ Discord: https://atmosphericx-discord.scriptkitty.cafe
13
+ Ko-Fi: https://ko-fi.com/k3yomi
14
+ Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
15
+
16
+ Internal Package: @atmosx/event-product-parser
17
+
18
+ */
19
+
20
+ export const getExpiry = (dates: string[]): string => {
21
+ if (dates?.[1] == `000000T0000Z`) return 'Invalid Date Format'
22
+ const expires = `${new Date().getFullYear().toString().substring(0, 2)}${dates[1].substring(0, 2)}-${dates[1].substring(2, 4)}-${dates[1].substring(4, 6)}T${dates[1].substring(7, 9)}:${dates[1].substring(9, 11)}:00`;
23
+ const local = new Date(new Date(expires).getTime() - 4 * 60 * 60000);
24
+ const pad = (n: number) => n.toString().padStart(2, '0');
25
+ return `${local.getFullYear()}-${pad(local.getMonth() + 1)}-${pad(local.getDate())}T${pad(local.getHours())}:${pad(local.getMinutes())}:00.000-04:00`;
26
26
  }
@@ -1,49 +1,49 @@
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 { TypePVTEC } from "../../@types/type.pvtec";
21
- import { dict_expressions } from "../../@dictionaries/dictionaries.expressions";
22
- import { dict_products } from "../../@dictionaries/dictionaries.products";
23
- import { dict_events } from "../../@dictionaries/dictionaries.events";
24
- import { dict_actions } from "../../@dictionaries/dictionaries.actions";
25
- import { dict_status } from "../../@dictionaries/dictionaries.status";
26
- import { getExpiry } from "./pvtec.expires";
27
-
28
- export const pvExtract = (message: string): TypePVTEC[] | null => {
29
- if (!message) return null;
30
- const getVTECs = message.match(dict_expressions.pvtec) ?? [];
31
- const vtecs: TypePVTEC[] = [];
32
- for (const vtec of getVTECs) {
33
- const sub = vtec.split(`.`);
34
- if (sub?.length < 7) continue;
35
- const dates = sub[6]?.split(`-`);
36
- vtecs.push({
37
- vtec: vtec,
38
- product: dict_products[sub[0]],
39
- tracking: `${sub[2]}.${sub[3]}.${sub[4]}.${sub[5]}`,
40
- event: `${dict_events[sub[3]]} ${dict_actions[sub[4]]}`,
41
- status: dict_status[sub[1]],
42
- organization: message.match(dict_expressions.wmo)?.[0] ?? null,
43
- expires: getExpiry(dates),
44
- is_watch: (sub[4] == `A` || sub[4] == `Y`) && (sub[3] == `TO` || sub[3] == `SV`),
45
- prediction_center: sub[2] == `KWNS` ? true : false
46
- })
47
- }
48
- return vtecs.length > 0 ? vtecs : null;
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 { TypePVTEC } from "../../@types/type.pvtec";
21
+ import { dict_expressions } from "../../@dictionaries/dictionaries.expressions";
22
+ import { dict_products } from "../../@dictionaries/dictionaries.products";
23
+ import { dict_events } from "../../@dictionaries/dictionaries.events";
24
+ import { dict_actions } from "../../@dictionaries/dictionaries.actions";
25
+ import { dict_status } from "../../@dictionaries/dictionaries.status";
26
+ import { getExpiry } from "./pvtec.expires";
27
+
28
+ export const pvExtract = (message: string): TypePVTEC[] | null => {
29
+ if (!message) return null;
30
+ const getVTECs = message.match(dict_expressions.pvtec) ?? [];
31
+ const vtecs: TypePVTEC[] = [];
32
+ for (const vtec of getVTECs) {
33
+ const sub = vtec.split(`.`);
34
+ if (sub?.length < 7) continue;
35
+ const dates = sub[6]?.split(`-`);
36
+ vtecs.push({
37
+ vtec: vtec,
38
+ product: dict_products[sub[0]],
39
+ tracking: `${sub[2]}.${sub[3]}.${sub[4]}.${sub[5]}`,
40
+ event: `${dict_events[sub[3]]} ${dict_actions[sub[4]]}`,
41
+ status: dict_status[sub[1]],
42
+ organization: message.match(dict_expressions.wmo)?.[0] ?? null,
43
+ expires: getExpiry(dates),
44
+ is_watch: (sub[4] == `A` || sub[4] == `Y`) && (sub[3] == `TO` || sub[3] == `SV`),
45
+ prediction_center: sub[2] == `KWNS` ? true : false
46
+ })
47
+ }
48
+ return vtecs.length > 0 ? vtecs : null;
49
49
  }