@atmosx/event-product-parser 3.0.62 → 3.0.75

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 (179) hide show
  1. package/.github/docs/docs-functions.md +1 -1
  2. package/.github/docs/docs-general-configurations.md +1 -11
  3. package/.github/docs/docs-integrations.md +3 -2
  4. package/README.md +10 -8
  5. package/dist/cjs/index.cjs +24482 -7207
  6. package/dist/esm/index.mjs +24275 -7003
  7. package/package.json +56 -47
  8. package/pnpm-workspace.yaml +4 -0
  9. package/src/bootstrap.ts +65 -48
  10. package/src/{@building → building}/CreateEvent.ts +22 -24
  11. package/src/{@building → building}/GetCleanedEvent.ts +2 -2
  12. package/src/{@building → building}/GetEventAttachments.ts +14 -12
  13. package/src/building/GetEventDirection.ts +28 -0
  14. package/src/{@building → building}/GetEventEnhancedName.ts +5 -8
  15. package/src/{@building → building}/GetEventGeometry.ts +19 -13
  16. package/src/{@building → building}/GetEventHeader.ts +13 -13
  17. package/src/{@building → building}/GetEventNodes.ts +22 -20
  18. package/src/{@building → building}/GetEventOffice.ts +13 -13
  19. package/src/building/GetEventPopulation.ts +58 -0
  20. package/src/building/GetEventProperties.ts +106 -0
  21. package/src/{@building → building}/GetEventSignature.ts +9 -9
  22. package/src/{@building → building}/GetEventTags.ts +3 -3
  23. package/src/building/GetEventTheme.ts +26 -0
  24. package/src/building/GetEventTracking.ts +64 -0
  25. package/src/components/audio/GenerateAudioMessage.ts +149 -0
  26. package/src/{@modules/@eas → components/audio/components}/GetCleanDescription.ts +2 -2
  27. package/src/{@modules/@eas → components/audio/components}/GetFloatPCM16.ts +2 -2
  28. package/src/{@modules/@eas → components/audio/components}/GetMergedPCM16.ts +2 -2
  29. package/src/{@modules/@eas → components/audio/components}/GetPCM16.ts +13 -8
  30. package/src/{@modules/@eas → components/audio/components}/GetPCMToFloat.ts +2 -2
  31. package/src/{@modules/@eas → components/audio/components}/GetSampledPCM16.ts +14 -8
  32. package/src/{@modules/@eas → components/audio/components}/GetTTS.ts +17 -10
  33. package/src/{@modules/@eas → components/audio/components}/GetWavPCM16.ts +7 -7
  34. package/src/{@modules/@eas → components/audio/components}/SetAFSK.ts +13 -8
  35. package/src/{@modules/@eas → components/audio/components}/SetAsciiToBits.ts +2 -2
  36. package/src/{@modules/@eas → components/audio/components}/SetAttentionTone.ts +11 -6
  37. package/src/{@modules/@eas → components/audio/components}/SetNoise.ts +12 -7
  38. package/src/{@modules/@eas → components/audio/components}/SetRadioEffect.ts +12 -7
  39. package/src/{@modules/@eas → components/audio/components}/SetSameHeader.ts +22 -14
  40. package/src/{@modules/@utilities/SetWarning.ts → components/database/CreateQuery.ts} +18 -13
  41. package/src/{@modules/@database → components/database}/GetCachedEvents.ts +18 -15
  42. package/src/components/database/ImportBoundaries.ts +168 -0
  43. package/src/{@modules/@database → components/database}/ImportBroadcastify.ts +14 -24
  44. package/src/components/database/ImportCities.ts +87 -0
  45. package/src/{@modules/@database → components/database}/ImportShapefiles.ts +23 -26
  46. package/src/{@modules/@database → components/database}/ImportStanza.ts +15 -19
  47. package/src/components/database/InitializeDatabase.ts +71 -0
  48. package/src/components/images/GenerateGraphic.ts +242 -0
  49. package/src/components/images/components/CreateRectangle.ts +22 -0
  50. package/src/components/images/components/CreateText.ts +22 -0
  51. package/src/components/images/modules/CreateSVG.ts +37 -0
  52. package/src/components/images/modules/GetGeographicalBoundaries.ts +72 -0
  53. package/src/components/images/modules/GetGeographicalCities.ts +58 -0
  54. package/src/components/images/modules/GetGeographicalEvents.ts +48 -0
  55. package/src/components/images/modules/GetGeometryBounds.ts +82 -0
  56. package/src/components/images/modules/GetParsedBoundary.ts +58 -0
  57. package/src/components/images/modules/GetSVGPath.ts +53 -0
  58. package/src/components/images/modules/NormalizePolygon.ts +57 -0
  59. package/src/{@modules/@stanza → components/stanza}/GetAwipsType.ts +16 -17
  60. package/src/{@modules/@stanza → components/stanza}/ValidateStanza.ts +27 -15
  61. package/src/{@modules/@utilities → components/utilities}/CreateHttp.ts +26 -26
  62. package/src/{@parsers/@text → components/utilities}/GetEmbededText.ts +8 -6
  63. package/src/{@modules/@utilities → components/utilities}/GetFormattedTime.ts +2 -2
  64. package/src/{@modules/@utilities → components/utilities}/GetLatestIssuance.ts +2 -2
  65. package/src/{@modules/@utilities → components/utilities}/GetMatched.ts +10 -5
  66. package/src/{@modules/@utilities → components/utilities}/GetShapeNearestPoint.ts +24 -19
  67. package/src/{@parsers/@text → components/utilities}/GetStringText.ts +9 -9
  68. package/src/components/utilities/GetUnionPolygon.ts +36 -0
  69. package/src/components/utilities/QueueManager.ts +70 -0
  70. package/src/components/utilities/SetCronSchedule.ts +106 -0
  71. package/src/{@modules/@utilities → components/utilities}/SetDebug.ts +12 -12
  72. package/src/components/utilities/SetEventEmit.ts +42 -0
  73. package/src/{@modules/@utilities → components/utilities}/SetSettings.ts +7 -7
  74. package/src/{@modules/@utilities → components/utilities}/SetSleep.ts +5 -5
  75. package/src/components/utilities/SetTimeoutAction.ts +64 -0
  76. package/src/components/utilities/SetWarning.ts +47 -0
  77. package/src/{@modules/@xmpp → components/xmpp}/DeployXMPP.ts +20 -20
  78. package/src/{@core/CreateListener.ts → components/xmpp/ErrorXMPP.ts} +8 -5
  79. package/src/{@modules/@xmpp → components/xmpp}/OfflineXMPP.ts +13 -13
  80. package/src/{@modules/@xmpp → components/xmpp}/OnlineXMPP.ts +18 -18
  81. package/src/components/xmpp/ReconnectXMPP.ts +64 -0
  82. package/src/{@modules/@xmpp → components/xmpp}/StanzaXMPP.ts +25 -25
  83. package/src/{@core → core}/ClearEvents.ts +9 -9
  84. package/src/{@core → core}/GetEvents.ts +4 -4
  85. package/src/{@core → core}/GetNodes.ts +4 -4
  86. package/src/{@core → core}/GetRandomEvent.ts +4 -4
  87. package/src/{@core → core}/GetVersion.ts +4 -4
  88. package/src/{@core → core}/ManualEvent.ts +23 -24
  89. package/src/{@core → core}/QueryStanza.ts +12 -11
  90. package/src/core/SetNode.ts +87 -0
  91. package/src/{@core → core}/StartService.ts +21 -20
  92. package/src/{@core → core}/StopService.ts +10 -10
  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 +38 -37
  119. package/src/index.ts +57 -37
  120. package/src/{@manager → manager}/MakeEvents.ts +38 -47
  121. package/src/manager/RemoveEvent.ts +74 -0
  122. package/src/{@manager → manager}/SetHash.ts +18 -13
  123. package/src/{@manager → manager}/UpdateEvents.ts +12 -12
  124. package/src/{@manager → manager}/UpdateNode.ts +14 -14
  125. package/src/{@manager → manager}/ValidateEvents.ts +55 -45
  126. package/src/{@parsers/@hvtec → parsers/hvtec}/HVExtract.ts +11 -11
  127. package/src/{@parsers/@text → parsers/text}/GetDescriptionFromProduct.ts +20 -21
  128. package/src/parsers/text/GetPolygonFromProduct.ts +71 -0
  129. package/src/{@parsers/@text → parsers/text}/GetTextFromProduct.ts +12 -12
  130. package/src/parsers/ugc/GetCache.ts +24 -0
  131. package/src/{@parsers/@ugc → parsers/ugc}/GetExpiry.ts +2 -2
  132. package/src/{@parsers/@ugc/GetUGCHeader.ts → parsers/ugc/GetHeader.ts} +4 -4
  133. package/src/{@parsers/@ugc → parsers/ugc}/GetLocations.ts +10 -10
  134. package/src/parsers/ugc/GetZonePolygon.ts +73 -0
  135. package/src/{@parsers/@ugc → parsers/ugc}/GetZones.ts +3 -3
  136. package/src/{@parsers/@ugc → parsers/ugc}/SetCache.ts +13 -8
  137. package/src/{@parsers/@ugc → parsers/ugc}/UGCExtract.ts +14 -14
  138. package/src/{@parsers/@pvtec → parsers/vtec}/GetExpiry.ts +2 -2
  139. package/src/parsers/vtec/VTECExtract.ts +49 -0
  140. package/src/{@types → static}/Attributes.ts +2 -3
  141. package/src/{@types → static}/Event.ts +8 -7
  142. package/src/{@types → static}/Properties.ts +17 -3
  143. package/src/{@types → static}/Stanza.ts +2 -2
  144. package/src/tasks/CreateTasks.ts +116 -0
  145. package/src/tasks/TaskGenerateJSON.ts +34 -0
  146. package/src/tasks/TaskGenerateText.ts +34 -0
  147. package/src/tasks/TaskSendNTFY.ts +95 -0
  148. package/src/tasks/TaskSendWebhook.ts +107 -0
  149. package/src/{@types → types}/Actions.ts +3 -3
  150. package/src/{@types → types}/HVTEC.ts +6 -6
  151. package/src/{@types → types}/Hash.ts +5 -5
  152. package/src/types/Nodes.ts +29 -0
  153. package/src/{@types → types}/Settings.ts +17 -8
  154. package/src/{@types → types}/StanzaCompiled.ts +15 -15
  155. package/src/{@types → types}/UGC.ts +5 -5
  156. package/src/{@modules/@utilities/GetSettings.ts → types/VTEC.ts} +12 -7
  157. package/tools/build.js +47 -0
  158. package/tsconfig.json +28 -1
  159. package/src/@building/GetEventProperties.ts +0 -96
  160. package/src/@building/GetEventTracking.ts +0 -68
  161. package/src/@core/SetNode.ts +0 -81
  162. package/src/@events/ParseAPI.ts +0 -117
  163. package/src/@manager/RemoveEvent.ts +0 -70
  164. package/src/@manager/Tasks.ts +0 -246
  165. package/src/@modules/@database/InitializeDatabase.ts +0 -59
  166. package/src/@modules/@eas/GenerateEASMessage.ts +0 -144
  167. package/src/@modules/@utilities/SetCronSchedule.ts +0 -94
  168. package/src/@modules/@utilities/SetEventEmit.ts +0 -41
  169. package/src/@modules/@utilities/SetListener.ts +0 -30
  170. package/src/@modules/@utilities/SetTimeoutAction.ts +0 -64
  171. package/src/@modules/@xmpp/ErrorXMPP.ts +0 -27
  172. package/src/@modules/@xmpp/ReconnectXMPP.ts +0 -64
  173. package/src/@parsers/@pvtec/VTECExtract.ts +0 -49
  174. package/src/@parsers/@text/GetPolygonFromProduct.ts +0 -53
  175. package/src/@parsers/@text/GetXML.ts +0 -61
  176. package/src/@parsers/@ugc/GetCache.ts +0 -24
  177. package/src/@parsers/@ugc/GetZonePolygon.ts +0 -111
  178. package/src/@types/VTEC.ts +0 -30
  179. package/tsup.config.ts +0 -16
@@ -0,0 +1,47 @@
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: https://atmosphericx.scriptkitty.cafe/documentation
15
+
16
+ Independent Package: @atmosx/event-product-parser
17
+
18
+ */
19
+
20
+ import { Bootstrap } from "@Bootstrap"
21
+ import { TypeSettings } from "Types/Settings"
22
+
23
+ interface SetWarningOptions {
24
+ Title?: string
25
+ Message: string
26
+ Tree?: string[]
27
+ }
28
+
29
+ export const SetWarning = ({ Title, Message, Tree }: SetWarningOptions): void => {
30
+ const settings = Bootstrap.Settings as TypeSettings;
31
+ const title = Title ?? (`[${Bootstrap.Colors.Yellow}@atmosx/event-product-parser${Bootstrap.Colors.Reset}]`);
32
+ const log = (message: string): void => {
33
+ Bootstrap.Listener.emit(`log`, message);
34
+ if (settings.EnableJournal) { console.log(message); }
35
+ };
36
+ log(`${title} ${Message}`);
37
+
38
+ if (!Tree?.length) return;
39
+
40
+ const cleanTitle = title.replace(/\x1b\[[0-9;]*m/g, ``);
41
+ const padding = ` `.repeat(cleanTitle.length + 1);
42
+ const entries = Tree.filter((entry): entry is NonNullable<typeof entry> => entry !== undefined && entry !== null);
43
+ entries.forEach((entry, index) => {
44
+ const prefix = index === entries.length - 1 ? `└─` : `├─`;
45
+ log(`${padding}${prefix} ${entry}`);
46
+ });
47
+ };
@@ -11,31 +11,31 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { TypeSettings } from "../../@types/Settings";
21
- import { bootstrap } from "../../bootstrap"
22
- import { OnlineXMPP } from "./OnlineXMPP";
23
- import { OfflineXMPP } from "./OfflineXMPP";
24
- import { ErrorXMPP } from "./ErrorXMPP";
25
- import { StanzaXMPP } from "./StanzaXMPP";
26
- import { SetEventEmit } from '../@utilities/SetEventEmit';
27
- import { client } from '@xmpp/client';
20
+ import { TypeSettings } from "Types/Settings"
21
+ import { Bootstrap } from "@Bootstrap"
22
+ import { OnlineXMPP } from "@XMPP/OnlineXMPP"
23
+ import { OfflineXMPP } from "@XMPP/OfflineXMPP"
24
+ import { ErrorXMPP } from "@XMPP/ErrorXMPP"
25
+ import { StanzaXMPP } from "@XMPP/StanzaXMPP"
26
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
27
+ import { client } from "@XMPP/client"
28
28
 
29
29
  export const DeployXMPP = async (): Promise<void> => {
30
30
  let session;
31
- const settings = bootstrap.settings as TypeSettings
31
+ const settings = Bootstrap.Settings as TypeSettings
32
32
  settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname
33
33
  ??= settings.NOAAWeatherWireServiceSettings.CredentialSettings.Username;
34
- session = bootstrap.session_xmpp = client({
34
+ session = Bootstrap.Session = client({
35
35
  service: 'xmpp://nwws-oi.weather.gov',
36
36
  domain: 'nwws-oi.weather.gov',
37
- username: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Username,
38
- password: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Password
37
+ username: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Username as string,
38
+ password: settings.NOAAWeatherWireServiceSettings.CredentialSettings.Password as string
39
39
  })
40
40
  try {
41
41
  await OfflineXMPP();
@@ -45,12 +45,12 @@ export const DeployXMPP = async (): Promise<void> => {
45
45
  await session.start()
46
46
  } catch (error) {
47
47
  SetEventEmit({
48
- event: `onServiceStatus`,
49
- metadata: {
50
- message: `Error occured while starting XMPP Session: ${error}`,
51
- data: {},
52
- type: `error`,
53
- error: true
48
+ Event: `onServiceStatus`,
49
+ Metadata: {
50
+ Message: `Error occured while starting XMPP Session: ${error}`,
51
+ Data: {},
52
+ Type: `error`,
53
+ Error: true
54
54
  },
55
55
  })
56
56
  }
@@ -11,14 +11,17 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { SetListener } from "../@modules/@utilities/SetListener";
20
+ import { Bootstrap } from "@Bootstrap"
21
21
 
22
- export const CreateListener = (event: string, callback: () => void) => {
23
- SetListener({event, callback})
22
+ export const ErrorXMPP = () => {
23
+ Bootstrap.Session.on(`error`, async () => {
24
+ Bootstrap.Cache.Connected = false;
25
+ Bootstrap.Cache.Hault = true;
26
+ })
24
27
  }
@@ -11,26 +11,26 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../../bootstrap";
21
- import { SetEventEmit } from "../@utilities/SetEventEmit";
20
+ import { Bootstrap } from "@Bootstrap"
21
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
22
22
 
23
23
  export const OfflineXMPP = () => {
24
- bootstrap.session_xmpp.on(`offline`, async () => {
25
- bootstrap.cache.isConnected = false;
26
- bootstrap.cache.sigHault = true;
24
+ Bootstrap.Session.on(`offline`, async () => {
25
+ Bootstrap.Cache.Connected = false;
26
+ Bootstrap.Cache.Hault = true;
27
27
  SetEventEmit({
28
- event: `onServiceStatus`,
29
- metadata: {
30
- message: `Client has gone offline`,
31
- data: {},
32
- type: `offline`,
33
- error: true
28
+ Event: `onServiceStatus`,
29
+ Metadata: {
30
+ Message: `Client has gone offline`,
31
+ Data: {},
32
+ Type: `offline`,
33
+ Error: true
34
34
  },
35
35
  })
36
36
  })
@@ -11,36 +11,36 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../../bootstrap";
21
- import { SetEventEmit } from '../@utilities/SetEventEmit';
22
- import { xml } from '@xmpp/client'
20
+ import { Bootstrap } from "@Bootstrap"
21
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
22
+ import { xml } from "@XMPP/client"
23
23
 
24
24
  export const OnlineXMPP = () => {
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;
25
+ const settings = Bootstrap.Settings;
26
+ Bootstrap.Session.on(`online`, async () => {
27
+ Bootstrap.Cache.Hault = false;
28
+ Bootstrap.Cache.Connected = true;
29
+ Bootstrap.Cache.TotalReconnects = 0;
30
30
  const nickname = settings.NOAAWeatherWireServiceSettings.CredentialSettings.Nickname;
31
- bootstrap.session_xmpp.send(xml('presence', {
31
+ Bootstrap.Session.send(xml('presence', {
32
32
  to: `nwws@conference.nwws-oi.weather.gov/${nickname}`,
33
33
  xmlns: 'http://jabber.org/protocol/muc',
34
34
  }))
35
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
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
42
  },
43
- message: `Succesfully connected to NOAA Weather Wire Service as "${nickname}"`,
43
+ Message: `Succesfully connected to NOAA Weather Wire Service as "${nickname}"`,
44
44
  })
45
45
  })
46
46
  }
@@ -0,0 +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: https://atmosphericx.scriptkitty.cafe/documentation
15
+
16
+ Independent Package: @atmosx/event-product-parser
17
+
18
+ */
19
+
20
+ import { TypeSettings } from "Types/Settings"
21
+ import { Bootstrap } from "@Bootstrap"
22
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
23
+ import { SetWarning } from "@Utilities/SetWarning"
24
+
25
+ export const ReconnectXMPP = async (interval: number): Promise<void> => {
26
+ const settings = Bootstrap.Settings as TypeSettings;
27
+ const last = Date.now() - Bootstrap.Cache.LastStanzaTime
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.Connected && !Bootstrap.Cache.Hault) || !Bootstrap.Session) {
35
+ return;
36
+ }
37
+ if (last > reconnectThreshold) {
38
+ if (!Bootstrap.Cache.Reconnecting) {
39
+ Bootstrap.Cache.Reconnecting = true;
40
+ Bootstrap.Cache.Connected = false;
41
+ Bootstrap.Cache.TotalReconnects += 1;
42
+ try {
43
+ SetEventEmit({
44
+ Event: `onServiceStatus`,
45
+ Metadata: {
46
+ Message: `Attempting to reconnect to XMPP Service (Reconnect Attempt ${Bootstrap.Cache.TotalReconnects})`,
47
+ Data: {
48
+ Last: last,
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.TotalReconnects})`,
54
+ })
55
+ await Bootstrap.Session.stop().catch(() => {});
56
+ await Bootstrap.Session.start().catch(() => {});
57
+ } catch (error) {
58
+ SetWarning({ Message: `XMPP Reconnect Failed - ${(error as Error).message}` })
59
+ } finally {
60
+ Bootstrap.Cache.Reconnecting = false;
61
+ }
62
+ }
63
+ }
64
+ }
@@ -11,37 +11,37 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { TypeStanza } from "../../@types/Stanza";
21
- import { bootstrap } from "../../bootstrap";
22
- import { ValidateStanza } from "../@stanza/ValidateStanza";
23
- import { CreateEvent } from "../../@building/CreateEvent";
24
- import { ImportStanza } from "../@database/ImportStanza";
25
- import { SetEventEmit } from "../@utilities/SetEventEmit";
20
+ import { TypeStanza } from "StaticTypes/Stanza"
21
+ import { Bootstrap } from "@Bootstrap"
22
+ import { ValidateStanza } from "@Stanza/ValidateStanza"
23
+ import { CreateEvent } from "@Building/CreateEvent"
24
+ import { ImportStanza } from "@Database/ImportStanza"
25
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
26
26
 
27
27
  export const StanzaXMPP = () => {
28
- bootstrap.session_xmpp.on(`stanza`, async (stanza: TypeStanza) => {
28
+ Bootstrap.Session.on(`stanza`, async (stanza: TypeStanza) => {
29
29
  const msgFrom = stanza?.attrs?.from ?? ``
30
30
  const msgType = stanza?.attrs?.type ?? ``
31
31
  SetEventEmit({
32
- event: `onServiceStatus`,
33
- metadata: {
34
- message: stanza,
35
- from: msgFrom,
36
- type: `stanza`
32
+ Event: `onServiceStatus`,
33
+ Metadata: {
34
+ Message: stanza,
35
+ From: msgFrom,
36
+ Type: `stanza`
37
37
  },
38
38
  })
39
- bootstrap.cache.lastStanza = Date.now();
39
+ Bootstrap.Cache.LastStanzaTime = Date.now();
40
40
  if (stanza.is(`message`)) {
41
- const result = ValidateStanza({ stanza });
42
- const isSkippable = result.isIgnored ||
43
- (result.isCapEvent) ||
44
- (result.isCapEvent && !result.isCapAreaDescription)
41
+ const result = ValidateStanza({ Stanza: stanza });
42
+ const isSkippable = result.Ignored ||
43
+ (result.CapEvent) ||
44
+ (result.CapEvent && !result.CapAreaDescription)
45
45
  if (isSkippable) { return; }
46
46
  await CreateEvent(result);
47
47
  await ImportStanza(result);
@@ -50,12 +50,12 @@ export const StanzaXMPP = () => {
50
50
  const getOccupant = msgFrom.split(`/`).slice(1).join(`/`)
51
51
  const getAvailability = msgType === `unavailable`
52
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
53
+ Event: `onServiceStatus`,
54
+ Metadata: {
55
+ Message: `Occupant ${getOccupant} has ${getAvailability ? `left` : `joined`} the room`,
56
+ Data: {},
57
+ Type: `occupant`,
58
+ Error: false
59
59
  },
60
60
  })
61
61
  }
@@ -11,21 +11,21 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../bootstrap";
21
- import { SetEventEmit } from "../@modules/@utilities/SetEventEmit";
20
+ import { Bootstrap } from "@Bootstrap"
21
+ import { SetEventEmit } from "@Utilities/SetEventEmit"
22
22
 
23
23
  export const ClearEvents = (): void => {
24
- bootstrap.cache.events.features = [];
25
- bootstrap.cache.hashes = [];
24
+ Bootstrap.Cache.Events.features = [];
25
+ Bootstrap.Cache.Hashes = [];
26
26
  SetEventEmit({
27
- event: `onEventCache`,
28
- metadata: bootstrap.cache.events,
29
- message: `Manually cleared event cache.`
27
+ Event: `onEventCache`,
28
+ Metadata: Bootstrap.Cache.Events,
29
+ Message: `Manually cleared event cache.`
30
30
  })
31
31
  }
@@ -11,14 +11,14 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../bootstrap";
20
+ import { Bootstrap } from "@Bootstrap"
21
21
 
22
22
  export const GetEvents = (): any => {
23
- return bootstrap.cache.events
23
+ return Bootstrap.Cache.Events
24
24
  }
@@ -11,14 +11,14 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../bootstrap";
20
+ import { Bootstrap } from "@Bootstrap"
21
21
 
22
22
  export const GetNodes = (): any => {
23
- return bootstrap.cache.nodes
23
+ return Bootstrap.Cache.Nodes
24
24
  }
@@ -11,14 +11,14 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../bootstrap";
20
+ import { Bootstrap } from "@Bootstrap"
21
21
 
22
22
  export const GetRandomEvent = (): any => {
23
- return bootstrap.cache.events.features[Math.floor(Math.random() * bootstrap.cache.events.features.length)]
23
+ return Bootstrap.Cache.Events.features[Math.floor(Math.random() * Bootstrap.Cache.Events.features.length)]
24
24
  }
@@ -11,14 +11,14 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { bootstrap } from "../bootstrap";
20
+ import { Bootstrap } from "@Bootstrap"
21
21
 
22
22
  export const GetVersion = (): any => {
23
- return bootstrap.version
23
+ return Bootstrap.Version
24
24
  }
@@ -11,46 +11,45 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { TypeAttributes } from "../@types/Attributes";
21
- import { EnumExpressions } from "../@enums/Expressions"
22
- import { GetAwipsType } from "../@modules/@stanza/GetAwipsType";
23
- import { CreateEvent } from "../@building/CreateEvent";
20
+ import { EnumExpressions } from "@Enums/Expressions"
21
+ import { GetAwipsType } from "@Stanza/GetAwipsType"
22
+ import { CreateEvent } from "@Building/CreateEvent"
24
23
 
25
24
  interface CreateEventOptions {
26
- message: string
27
- awipsid?: string
25
+ Message: string
26
+ Awipsid?: string
28
27
  }
29
28
 
30
- export const ManualEvent = async (options: CreateEventOptions): Promise<void> => {
31
- const isCapEvent = options.message.includes(`<?xml`);
32
- const isCapAreaDescription = options.message.includes(`<areaDesc>`)
33
- const isVTEC = options.message.match(EnumExpressions.pvtec) != null;
34
- const isUGC = options.message.match(EnumExpressions.ugc1) != null;
29
+ export const ManualEvent = async ({ Message, Awipsid }: CreateEventOptions): Promise<void> => {
30
+ const isCapEvent = Message.includes(`<?xml`);
31
+ const isCapAreaDescription = Message.includes(`<areaDesc>`)
32
+ const isVTEC = Message.match(EnumExpressions.vtec) != null;
33
+ const isUGC = Message.match(EnumExpressions.ugc1) != null;
35
34
  const attributes = {
36
35
  "xmlns": "@atmosx/event-product-parser",
37
36
  "id": "manual_processor.0000",
38
37
  "issue": new Date().toISOString(),
39
38
  "ttaaii": "XXXXX",
40
39
  "cccc": "XXX",
41
- "awipsid": options.awipsid ?? "XXXXXX",
40
+ "awipsid": Awipsid ?? "XXXXXX",
42
41
  }
43
- const getType = GetAwipsType({ attributes })
42
+ const getType = GetAwipsType({ Attributes: attributes})
44
43
  const result = {
45
- message: options.message,
46
- attributes,
47
- isCapEvent,
48
- isVTEC,
49
- isUGC,
50
- isCapAreaDescription,
51
- isIgnored: false,
52
- isNWWS: true,
53
- getType
44
+ Message: Message,
45
+ Attributes: attributes,
46
+ CapEvent: isCapEvent,
47
+ VTEC: isVTEC,
48
+ UGC: isUGC,
49
+ CapAreaDescription: isCapAreaDescription,
50
+ Ignored: false,
51
+ NWWS: true,
52
+ Type: getType,
54
53
  }
55
54
  await CreateEvent(result);
56
55
  }
@@ -11,18 +11,18 @@
11
11
  Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
12
12
  Discord: https://atmosphericx-discord.scriptkitty.cafe
13
13
  Ko-Fi: https://ko-fi.com/k3yomi
14
- Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
14
+ Documentation: https://atmosphericx.scriptkitty.cafe/documentation
15
15
 
16
- Internal Package: @atmosx/event-product-parser
16
+ Independent Package: @atmosx/event-product-parser
17
17
 
18
18
  */
19
19
 
20
- import { TypeStanza } from "../@types/Stanza";
21
- import { bootstrap } from "../bootstrap";
20
+ import { TypeStanza } from "StaticTypes/Stanza"
21
+ import { CreateQuery } from "@Database/CreateQuery"
22
22
 
23
23
  interface QueryStanzaOptions {
24
- search: string
25
- max?: number
24
+ Search: string
25
+ Max?: number
26
26
  }
27
27
 
28
28
  type QueryStanza = {
@@ -30,10 +30,11 @@ type QueryStanza = {
30
30
  stanza: string
31
31
  }
32
32
 
33
- export const QueryStanza = async (options: QueryStanzaOptions): Promise<TypeStanza[]> => {
34
- const get = await bootstrap.database.prepare(
35
- `SELECT * FROM stanzas WHERE stanza LIKE ? LIMIT ?`)
36
- .all(`%${options.search}%`, options.max ?? 100) as QueryStanza[];
37
- const events = get.map((row) => JSON.parse(row.stanza));
33
+ export const QueryStanza = async ({ Search, Max }: QueryStanzaOptions): Promise<TypeStanza[]> => {
34
+ const query = CreateQuery({
35
+ Query: `SELECT * FROM stanzas WHERE stanza LIKE ? LIMIT ?`,
36
+ Parameters: [`%${Search}%`, Max ?? 100]
37
+ }) as QueryStanza[];
38
+ const events = query.map((row) => JSON.parse(row.stanza));
38
39
  return events as TypeStanza[];
39
40
  }