local-risk-alert-feed 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/dist/cjs/adapters/index.js +8 -0
  2. package/dist/cjs/adapters/index.js.map +1 -0
  3. package/dist/cjs/adapters/lambda.js +143 -0
  4. package/dist/cjs/adapters/lambda.js.map +1 -0
  5. package/dist/cjs/adapters/vercel.js +119 -0
  6. package/dist/cjs/adapters/vercel.js.map +1 -0
  7. package/dist/cjs/core/alert-aggregator.js +207 -0
  8. package/dist/cjs/core/alert-aggregator.js.map +1 -0
  9. package/dist/cjs/core/alert-feed.js +236 -0
  10. package/dist/cjs/core/alert-feed.js.map +1 -0
  11. package/dist/cjs/core/index.js +22 -0
  12. package/dist/cjs/core/index.js.map +1 -0
  13. package/dist/cjs/core/plugin-registry.js +193 -0
  14. package/dist/cjs/core/plugin-registry.js.map +1 -0
  15. package/dist/cjs/core/plugin-resolver.js +121 -0
  16. package/dist/cjs/core/plugin-resolver.js.map +1 -0
  17. package/dist/cjs/core/time-range.js +67 -0
  18. package/dist/cjs/core/time-range.js.map +1 -0
  19. package/dist/cjs/errors/fetch-error.js +71 -0
  20. package/dist/cjs/errors/fetch-error.js.map +1 -0
  21. package/dist/cjs/errors/index.js +15 -0
  22. package/dist/cjs/errors/index.js.map +1 -0
  23. package/dist/cjs/errors/plugin-error.js +80 -0
  24. package/dist/cjs/errors/plugin-error.js.map +1 -0
  25. package/dist/cjs/errors/validation-error.js +49 -0
  26. package/dist/cjs/errors/validation-error.js.map +1 -0
  27. package/dist/cjs/geo/distance.js +94 -0
  28. package/dist/cjs/geo/distance.js.map +1 -0
  29. package/dist/cjs/geo/index.js +18 -0
  30. package/dist/cjs/geo/index.js.map +1 -0
  31. package/dist/cjs/geo/point-in-radius.js +86 -0
  32. package/dist/cjs/geo/point-in-radius.js.map +1 -0
  33. package/dist/cjs/index.js +90 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/plugins/air-quality/airnow.plugin.js +343 -0
  36. package/dist/cjs/plugins/air-quality/airnow.plugin.js.map +1 -0
  37. package/dist/cjs/plugins/air-quality/index.js +6 -0
  38. package/dist/cjs/plugins/air-quality/index.js.map +1 -0
  39. package/dist/cjs/plugins/base-plugin.js +213 -0
  40. package/dist/cjs/plugins/base-plugin.js.map +1 -0
  41. package/dist/cjs/plugins/events/index.js +6 -0
  42. package/dist/cjs/plugins/events/index.js.map +1 -0
  43. package/dist/cjs/plugins/events/phoenix-events.plugin.js +382 -0
  44. package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -0
  45. package/dist/cjs/plugins/fire-emt/index.js +6 -0
  46. package/dist/cjs/plugins/fire-emt/index.js.map +1 -0
  47. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +262 -0
  48. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -0
  49. package/dist/cjs/plugins/index.js +28 -0
  50. package/dist/cjs/plugins/index.js.map +1 -0
  51. package/dist/cjs/plugins/police-blotter/index.js +6 -0
  52. package/dist/cjs/plugins/police-blotter/index.js.map +1 -0
  53. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js +198 -0
  54. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js.map +1 -0
  55. package/dist/cjs/plugins/pulsepoint/index.js +6 -0
  56. package/dist/cjs/plugins/pulsepoint/index.js.map +1 -0
  57. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js +275 -0
  58. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js.map +1 -0
  59. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +391 -0
  60. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -0
  61. package/dist/cjs/plugins/traffic/index.js +6 -0
  62. package/dist/cjs/plugins/traffic/index.js.map +1 -0
  63. package/dist/cjs/plugins/weather/index.js +6 -0
  64. package/dist/cjs/plugins/weather/index.js.map +1 -0
  65. package/dist/cjs/plugins/weather/nws-weather.plugin.js +180 -0
  66. package/dist/cjs/plugins/weather/nws-weather.plugin.js.map +1 -0
  67. package/dist/cjs/schemas/alert.schema.js +93 -0
  68. package/dist/cjs/schemas/alert.schema.js.map +1 -0
  69. package/dist/cjs/schemas/index.js +24 -0
  70. package/dist/cjs/schemas/index.js.map +1 -0
  71. package/dist/cjs/schemas/query.schema.js +76 -0
  72. package/dist/cjs/schemas/query.schema.js.map +1 -0
  73. package/dist/cjs/types/alert.js +35 -0
  74. package/dist/cjs/types/alert.js.map +1 -0
  75. package/dist/cjs/types/config.js +13 -0
  76. package/dist/cjs/types/config.js.map +1 -0
  77. package/dist/cjs/types/geo.js +3 -0
  78. package/dist/cjs/types/geo.js.map +1 -0
  79. package/dist/cjs/types/index.js +16 -0
  80. package/dist/cjs/types/index.js.map +1 -0
  81. package/dist/cjs/types/plugin.js +3 -0
  82. package/dist/cjs/types/plugin.js.map +1 -0
  83. package/dist/cjs/types/query.js +28 -0
  84. package/dist/cjs/types/query.js.map +1 -0
  85. package/dist/cjs/utils/cache.js +188 -0
  86. package/dist/cjs/utils/cache.js.map +1 -0
  87. package/dist/cjs/utils/csv.js +189 -0
  88. package/dist/cjs/utils/csv.js.map +1 -0
  89. package/dist/cjs/utils/date.js +153 -0
  90. package/dist/cjs/utils/date.js.map +1 -0
  91. package/dist/cjs/utils/index.js +28 -0
  92. package/dist/cjs/utils/index.js.map +1 -0
  93. package/dist/cjs/utils/retry.js +109 -0
  94. package/dist/cjs/utils/retry.js.map +1 -0
  95. package/dist/esm/adapters/index.js +3 -0
  96. package/dist/esm/adapters/index.js.map +1 -0
  97. package/dist/esm/adapters/lambda.js +140 -0
  98. package/dist/esm/adapters/lambda.js.map +1 -0
  99. package/dist/esm/adapters/vercel.js +116 -0
  100. package/dist/esm/adapters/vercel.js.map +1 -0
  101. package/dist/esm/core/alert-aggregator.js +203 -0
  102. package/dist/esm/core/alert-aggregator.js.map +1 -0
  103. package/dist/esm/core/alert-feed.js +232 -0
  104. package/dist/esm/core/alert-feed.js.map +1 -0
  105. package/dist/esm/core/index.js +6 -0
  106. package/dist/esm/core/index.js.map +1 -0
  107. package/dist/esm/core/plugin-registry.js +189 -0
  108. package/dist/esm/core/plugin-registry.js.map +1 -0
  109. package/dist/esm/core/plugin-resolver.js +117 -0
  110. package/dist/esm/core/plugin-resolver.js.map +1 -0
  111. package/dist/esm/core/time-range.js +57 -0
  112. package/dist/esm/core/time-range.js.map +1 -0
  113. package/dist/esm/errors/fetch-error.js +67 -0
  114. package/dist/esm/errors/fetch-error.js.map +1 -0
  115. package/dist/esm/errors/index.js +4 -0
  116. package/dist/esm/errors/index.js.map +1 -0
  117. package/dist/esm/errors/plugin-error.js +71 -0
  118. package/dist/esm/errors/plugin-error.js.map +1 -0
  119. package/dist/esm/errors/validation-error.js +45 -0
  120. package/dist/esm/errors/validation-error.js.map +1 -0
  121. package/dist/esm/geo/distance.js +85 -0
  122. package/dist/esm/geo/distance.js.map +1 -0
  123. package/dist/esm/geo/index.js +3 -0
  124. package/dist/esm/geo/index.js.map +1 -0
  125. package/dist/esm/geo/point-in-radius.js +79 -0
  126. package/dist/esm/geo/point-in-radius.js.map +1 -0
  127. package/dist/esm/index.js +30 -0
  128. package/dist/esm/index.js.map +1 -0
  129. package/dist/esm/plugins/air-quality/airnow.plugin.js +339 -0
  130. package/dist/esm/plugins/air-quality/airnow.plugin.js.map +1 -0
  131. package/dist/esm/plugins/air-quality/index.js +2 -0
  132. package/dist/esm/plugins/air-quality/index.js.map +1 -0
  133. package/dist/esm/plugins/base-plugin.js +209 -0
  134. package/dist/esm/plugins/base-plugin.js.map +1 -0
  135. package/dist/esm/plugins/events/index.js +2 -0
  136. package/dist/esm/plugins/events/index.js.map +1 -0
  137. package/dist/esm/plugins/events/phoenix-events.plugin.js +378 -0
  138. package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -0
  139. package/dist/esm/plugins/fire-emt/index.js +2 -0
  140. package/dist/esm/plugins/fire-emt/index.js.map +1 -0
  141. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +258 -0
  142. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -0
  143. package/dist/esm/plugins/index.js +17 -0
  144. package/dist/esm/plugins/index.js.map +1 -0
  145. package/dist/esm/plugins/police-blotter/index.js +2 -0
  146. package/dist/esm/plugins/police-blotter/index.js.map +1 -0
  147. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js +194 -0
  148. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js.map +1 -0
  149. package/dist/esm/plugins/pulsepoint/index.js +2 -0
  150. package/dist/esm/plugins/pulsepoint/index.js.map +1 -0
  151. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js +271 -0
  152. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js.map +1 -0
  153. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +387 -0
  154. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -0
  155. package/dist/esm/plugins/traffic/index.js +2 -0
  156. package/dist/esm/plugins/traffic/index.js.map +1 -0
  157. package/dist/esm/plugins/weather/index.js +2 -0
  158. package/dist/esm/plugins/weather/index.js.map +1 -0
  159. package/dist/esm/plugins/weather/nws-weather.plugin.js +176 -0
  160. package/dist/esm/plugins/weather/nws-weather.plugin.js.map +1 -0
  161. package/dist/esm/schemas/alert.schema.js +90 -0
  162. package/dist/esm/schemas/alert.schema.js.map +1 -0
  163. package/dist/esm/schemas/index.js +5 -0
  164. package/dist/esm/schemas/index.js.map +1 -0
  165. package/dist/esm/schemas/query.schema.js +72 -0
  166. package/dist/esm/schemas/query.schema.js.map +1 -0
  167. package/dist/esm/types/alert.js +32 -0
  168. package/dist/esm/types/alert.js.map +1 -0
  169. package/dist/esm/types/config.js +10 -0
  170. package/dist/esm/types/config.js.map +1 -0
  171. package/dist/esm/types/geo.js +2 -0
  172. package/dist/esm/types/geo.js.map +1 -0
  173. package/dist/esm/types/index.js +4 -0
  174. package/dist/esm/types/index.js.map +1 -0
  175. package/dist/esm/types/plugin.js +2 -0
  176. package/dist/esm/types/plugin.js.map +1 -0
  177. package/dist/esm/types/query.js +25 -0
  178. package/dist/esm/types/query.js.map +1 -0
  179. package/dist/esm/utils/cache.js +181 -0
  180. package/dist/esm/utils/cache.js.map +1 -0
  181. package/dist/esm/utils/csv.js +185 -0
  182. package/dist/esm/utils/csv.js.map +1 -0
  183. package/dist/esm/utils/date.js +142 -0
  184. package/dist/esm/utils/date.js.map +1 -0
  185. package/dist/esm/utils/index.js +5 -0
  186. package/dist/esm/utils/index.js.map +1 -0
  187. package/dist/esm/utils/retry.js +102 -0
  188. package/dist/esm/utils/retry.js.map +1 -0
  189. package/dist/types/adapters/index.d.ts +5 -0
  190. package/dist/types/adapters/index.d.ts.map +1 -0
  191. package/dist/types/adapters/lambda.d.ts +37 -0
  192. package/dist/types/adapters/lambda.d.ts.map +1 -0
  193. package/dist/types/adapters/vercel.d.ts +54 -0
  194. package/dist/types/adapters/vercel.d.ts.map +1 -0
  195. package/dist/types/core/alert-aggregator.d.ts +81 -0
  196. package/dist/types/core/alert-aggregator.d.ts.map +1 -0
  197. package/dist/types/core/alert-feed.d.ts +80 -0
  198. package/dist/types/core/alert-feed.d.ts.map +1 -0
  199. package/dist/types/core/index.d.ts +8 -0
  200. package/dist/types/core/index.d.ts.map +1 -0
  201. package/dist/types/core/plugin-registry.d.ts +91 -0
  202. package/dist/types/core/plugin-registry.d.ts.map +1 -0
  203. package/dist/types/core/plugin-resolver.d.ts +78 -0
  204. package/dist/types/core/plugin-resolver.d.ts.map +1 -0
  205. package/dist/types/core/time-range.d.ts +40 -0
  206. package/dist/types/core/time-range.d.ts.map +1 -0
  207. package/dist/types/errors/fetch-error.d.ts +46 -0
  208. package/dist/types/errors/fetch-error.d.ts.map +1 -0
  209. package/dist/types/errors/index.d.ts +5 -0
  210. package/dist/types/errors/index.d.ts.map +1 -0
  211. package/dist/types/errors/plugin-error.d.ts +42 -0
  212. package/dist/types/errors/plugin-error.d.ts.map +1 -0
  213. package/dist/types/errors/validation-error.d.ts +34 -0
  214. package/dist/types/errors/validation-error.d.ts.map +1 -0
  215. package/dist/types/geo/distance.d.ts +50 -0
  216. package/dist/types/geo/distance.d.ts.map +1 -0
  217. package/dist/types/geo/index.d.ts +3 -0
  218. package/dist/types/geo/index.d.ts.map +1 -0
  219. package/dist/types/geo/point-in-radius.d.ts +44 -0
  220. package/dist/types/geo/point-in-radius.d.ts.map +1 -0
  221. package/dist/types/index.d.ts +32 -0
  222. package/dist/types/index.d.ts.map +1 -0
  223. package/dist/types/plugins/air-quality/airnow.plugin.d.ts +84 -0
  224. package/dist/types/plugins/air-quality/airnow.plugin.d.ts.map +1 -0
  225. package/dist/types/plugins/air-quality/index.d.ts +3 -0
  226. package/dist/types/plugins/air-quality/index.d.ts.map +1 -0
  227. package/dist/types/plugins/base-plugin.d.ts +99 -0
  228. package/dist/types/plugins/base-plugin.d.ts.map +1 -0
  229. package/dist/types/plugins/events/index.d.ts +3 -0
  230. package/dist/types/plugins/events/index.d.ts.map +1 -0
  231. package/dist/types/plugins/events/phoenix-events.plugin.d.ts +71 -0
  232. package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -0
  233. package/dist/types/plugins/fire-emt/index.d.ts +3 -0
  234. package/dist/types/plugins/fire-emt/index.d.ts.map +1 -0
  235. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts +47 -0
  236. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -0
  237. package/dist/types/plugins/index.d.ts +17 -0
  238. package/dist/types/plugins/index.d.ts.map +1 -0
  239. package/dist/types/plugins/police-blotter/index.d.ts +3 -0
  240. package/dist/types/plugins/police-blotter/index.d.ts.map +1 -0
  241. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts +49 -0
  242. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts.map +1 -0
  243. package/dist/types/plugins/pulsepoint/index.d.ts +3 -0
  244. package/dist/types/plugins/pulsepoint/index.d.ts.map +1 -0
  245. package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts +61 -0
  246. package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts.map +1 -0
  247. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts +83 -0
  248. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -0
  249. package/dist/types/plugins/traffic/index.d.ts +3 -0
  250. package/dist/types/plugins/traffic/index.d.ts.map +1 -0
  251. package/dist/types/plugins/weather/index.d.ts +3 -0
  252. package/dist/types/plugins/weather/index.d.ts.map +1 -0
  253. package/dist/types/plugins/weather/nws-weather.plugin.d.ts +50 -0
  254. package/dist/types/plugins/weather/nws-weather.plugin.d.ts.map +1 -0
  255. package/dist/types/schemas/alert.schema.d.ts +266 -0
  256. package/dist/types/schemas/alert.schema.d.ts.map +1 -0
  257. package/dist/types/schemas/index.d.ts +5 -0
  258. package/dist/types/schemas/index.d.ts.map +1 -0
  259. package/dist/types/schemas/query.schema.d.ts +150 -0
  260. package/dist/types/schemas/query.schema.d.ts.map +1 -0
  261. package/dist/types/types/alert.d.ts +96 -0
  262. package/dist/types/types/alert.d.ts.map +1 -0
  263. package/dist/types/types/config.d.ts +63 -0
  264. package/dist/types/types/config.d.ts.map +1 -0
  265. package/dist/types/types/geo.d.ts +33 -0
  266. package/dist/types/types/geo.d.ts.map +1 -0
  267. package/dist/types/types/index.d.ts +9 -0
  268. package/dist/types/types/index.d.ts.map +1 -0
  269. package/dist/types/types/plugin.d.ts +125 -0
  270. package/dist/types/types/plugin.d.ts.map +1 -0
  271. package/dist/types/types/query.d.ts +86 -0
  272. package/dist/types/types/query.d.ts.map +1 -0
  273. package/dist/types/utils/cache.d.ts +112 -0
  274. package/dist/types/utils/cache.d.ts.map +1 -0
  275. package/dist/types/utils/csv.d.ts +38 -0
  276. package/dist/types/utils/csv.d.ts.map +1 -0
  277. package/dist/types/utils/date.d.ts +47 -0
  278. package/dist/types/utils/date.d.ts.map +1 -0
  279. package/dist/types/utils/index.d.ts +7 -0
  280. package/dist/types/utils/index.d.ts.map +1 -0
  281. package/dist/types/utils/retry.d.ts +51 -0
  282. package/dist/types/utils/retry.d.ts.map +1 -0
  283. package/package.json +115 -0
@@ -0,0 +1,50 @@
1
+ import type { GeoPoint } from '../types';
2
+ /**
3
+ * Earth's radius in meters (mean radius).
4
+ */
5
+ export declare const EARTH_RADIUS_METERS = 6371008.8;
6
+ /**
7
+ * Convert degrees to radians.
8
+ */
9
+ export declare function toRadians(degrees: number): number;
10
+ /**
11
+ * Convert radians to degrees.
12
+ */
13
+ export declare function toDegrees(radians: number): number;
14
+ /**
15
+ * Calculate the Haversine distance between two geographic points.
16
+ *
17
+ * The Haversine formula calculates the great-circle distance between two points
18
+ * on a sphere given their latitudes and longitudes.
19
+ *
20
+ * @param point1 - First geographic point
21
+ * @param point2 - Second geographic point
22
+ * @returns Distance in meters
23
+ */
24
+ export declare function haversineDistance(point1: GeoPoint, point2: GeoPoint): number;
25
+ /**
26
+ * Calculate distance between two points (alias for haversineDistance).
27
+ *
28
+ * @param point1 - First geographic point
29
+ * @param point2 - Second geographic point
30
+ * @returns Distance in meters
31
+ */
32
+ export declare function calculateDistance(point1: GeoPoint, point2: GeoPoint): number;
33
+ /**
34
+ * Calculate the bearing (direction) from one point to another.
35
+ *
36
+ * @param from - Starting point
37
+ * @param to - Ending point
38
+ * @returns Bearing in degrees (0-360, where 0 is north)
39
+ */
40
+ export declare function calculateBearing(from: GeoPoint, to: GeoPoint): number;
41
+ /**
42
+ * Calculate a destination point given a start point, bearing, and distance.
43
+ *
44
+ * @param start - Starting point
45
+ * @param bearingDegrees - Bearing in degrees (0-360)
46
+ * @param distanceMeters - Distance in meters
47
+ * @returns Destination point
48
+ */
49
+ export declare function destinationPoint(start: GeoPoint, bearingDegrees: number, distanceMeters: number): GeoPoint;
50
+ //# sourceMappingURL=distance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distance.d.ts","sourceRoot":"","sources":["../../../src/geo/distance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,mBAAmB,YAAc,CAAC;AAE/C;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,CAa5E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,CAE5E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAWrE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,EACf,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,QAAQ,CAsBV"}
@@ -0,0 +1,3 @@
1
+ export { EARTH_RADIUS_METERS, toRadians, toDegrees, haversineDistance, calculateDistance, calculateBearing, destinationPoint, } from './distance';
2
+ export { isPointInRadius, isPointInCircle, isPointInBoundingBox, doCirclesOverlap, getBoundingBoxForRadius, } from './point-in-radius';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/geo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { GeoPoint, GeoBoundingBox, GeoCircle } from '../types';
2
+ /**
3
+ * Check if a point is within a given radius of a center point.
4
+ *
5
+ * @param point - The point to check
6
+ * @param center - The center point
7
+ * @param radiusMeters - The radius in meters
8
+ * @returns true if the point is within the radius
9
+ */
10
+ export declare function isPointInRadius(point: GeoPoint, center: GeoPoint, radiusMeters: number): boolean;
11
+ /**
12
+ * Check if a point is within a GeoCircle.
13
+ *
14
+ * @param point - The point to check
15
+ * @param circle - The circle definition
16
+ * @returns true if the point is within the circle
17
+ */
18
+ export declare function isPointInCircle(point: GeoPoint, circle: GeoCircle): boolean;
19
+ /**
20
+ * Check if a point is within a bounding box.
21
+ *
22
+ * @param point - The point to check
23
+ * @param box - The bounding box
24
+ * @returns true if the point is within the bounding box
25
+ */
26
+ export declare function isPointInBoundingBox(point: GeoPoint, box: GeoBoundingBox): boolean;
27
+ /**
28
+ * Check if two circles overlap.
29
+ *
30
+ * @param circle1 - First circle
31
+ * @param circle2 - Second circle
32
+ * @returns true if the circles overlap
33
+ */
34
+ export declare function doCirclesOverlap(circle1: GeoCircle, circle2: GeoCircle): boolean;
35
+ /**
36
+ * Calculate a bounding box that contains a circle.
37
+ * This is useful for quick filtering before doing precise distance calculations.
38
+ *
39
+ * @param center - Center point of the circle
40
+ * @param radiusMeters - Radius in meters
41
+ * @returns A bounding box that contains the circle
42
+ */
43
+ export declare function getBoundingBoxForRadius(center: GeoPoint, radiusMeters: number): GeoBoundingBox;
44
+ //# sourceMappingURL=point-in-radius.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-in-radius.d.ts","sourceRoot":"","sources":["../../../src/geo/point-in-radius.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGpE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAGhG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAmBlF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAGhF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAe9F"}
@@ -0,0 +1,32 @@
1
+ export { AlertFeed } from './core';
2
+ export { PluginRegistry, PluginResolver, AlertAggregator } from './core';
3
+ export { resolveTimeRange, normalizeTimeRange } from './core';
4
+ export type { PluginResolveOptions, ResolvedPlugin, AggregateOptions, AlertSortOrder } from './core';
5
+ export type { GeoPoint, GeoBoundingBox, GeoCircle, AlertLocation, Alert, RiskLevel, AlertPriority, AlertCategory, AlertTemporalType, AlertSourceType, AlertTimestamps, AlertSource, AlertPlugin, PluginMetadata, PluginCoverage, PluginCoverageType, PluginFetchOptions, PluginFetchResult, PluginResultInfo, AlertQuery, AlertQueryResponse, AlertQueryMeta, TimeRange, TimeRangePreset, TimeRangeInput, AlertFeedConfig, PluginRegistration, CacheProvider, } from './types';
6
+ export { RISK_LEVEL_VALUES, RISK_LEVELS, ALERT_CATEGORIES, ALERT_TEMPORAL_TYPES, TIME_RANGE_PRESETS, DEFAULT_QUERY_RADIUS_METERS, DEFAULT_QUERY_LIMIT, MAX_QUERY_LIMIT, DEFAULT_CONFIG, } from './types';
7
+ export { AlertSchema, AlertQuerySchema, AlertQueryRequestSchema, GeoPointSchema, TimeRangeSchema, transformRequestToQuery, } from './schemas';
8
+ export { PluginError, PluginInitializationError, PluginFetchError, PluginTimeoutError, DuplicatePluginError, PluginNotFoundError, ValidationError, FetchError, } from './errors';
9
+ export type { ValidationIssue } from './errors';
10
+ export { haversineDistance, calculateDistance, calculateBearing, destinationPoint, isPointInRadius, isPointInCircle, isPointInBoundingBox, doCirclesOverlap, getBoundingBoxForRadius, } from './geo';
11
+ export { InMemoryCacheProvider, VercelKVCacheProvider, DynamoDBCacheProvider, generateCacheKey, } from './utils';
12
+ export { withRetry, withTimeout, sleep, TimeoutError } from './utils';
13
+ export type { RetryOptions } from './utils';
14
+ export { BasePlugin } from './plugins';
15
+ export type { BasePluginConfig } from './plugins';
16
+ export { NWSWeatherPlugin } from './plugins/weather';
17
+ export type { NWSWeatherPluginConfig } from './plugins/weather';
18
+ export { PhoenixPolicePlugin } from './plugins/police-blotter';
19
+ export type { PhoenixPolicePluginConfig } from './plugins/police-blotter';
20
+ export { PhoenixFirePlugin } from './plugins/fire-emt';
21
+ export type { PhoenixFirePluginConfig } from './plugins/fire-emt';
22
+ export { PulsepointPlugin } from './plugins/pulsepoint';
23
+ export type { PulsepointPluginConfig } from './plugins/pulsepoint';
24
+ export { PhoenixEventsPlugin } from './plugins/events';
25
+ export type { PhoenixEventsPluginConfig } from './plugins/events';
26
+ export { ArizonaTrafficPlugin } from './plugins/traffic';
27
+ export type { ArizonaTrafficPluginConfig } from './plugins/traffic';
28
+ export { AirNowPlugin } from './plugins/air-quality';
29
+ export type { AirNowPluginConfig } from './plugins/air-quality';
30
+ export { parseCSV, toCSV } from './utils';
31
+ export type { CSVParseOptions } from './utils';
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { PluginMetadata, PluginFetchOptions, PluginFetchResult } from '../../types';
2
+ import { BasePlugin, BasePluginConfig } from '../base-plugin';
3
+ /**
4
+ * AirNow plugin configuration.
5
+ */
6
+ export interface AirNowPluginConfig extends BasePluginConfig {
7
+ /** AirNow API key (get one at https://docs.airnowapi.org) */
8
+ apiKey: string;
9
+ /** Include forecasts in addition to current observations. Default: true */
10
+ includeForecast?: boolean;
11
+ /** Distance in miles for nearby observations. Default: 25 */
12
+ distanceMiles?: number;
13
+ }
14
+ /**
15
+ * Plugin that fetches air quality data from AirNow API.
16
+ *
17
+ * Provides current AQI observations and forecasts for US locations.
18
+ * Important for Phoenix due to dust storms and air quality concerns.
19
+ *
20
+ * @see https://docs.airnowapi.org
21
+ */
22
+ export declare class AirNowPlugin extends BasePlugin {
23
+ readonly metadata: PluginMetadata;
24
+ private airNowConfig;
25
+ constructor(config: AirNowPluginConfig);
26
+ fetchAlerts(options: PluginFetchOptions): Promise<PluginFetchResult>;
27
+ /**
28
+ * Fetch air quality data from AirNow API.
29
+ */
30
+ private fetchAirQualityData;
31
+ /**
32
+ * Fetch current air quality observations.
33
+ */
34
+ private fetchCurrentObservations;
35
+ /**
36
+ * Fetch air quality forecasts.
37
+ */
38
+ private fetchForecasts;
39
+ /**
40
+ * Transform an observation to an alert.
41
+ */
42
+ private transformObservation;
43
+ /**
44
+ * Transform a forecast to an alert.
45
+ */
46
+ private transformForecast;
47
+ /**
48
+ * Map AQI value to risk level.
49
+ */
50
+ private mapAqiToRiskLevel;
51
+ /**
52
+ * Build observation title.
53
+ */
54
+ private buildObservationTitle;
55
+ /**
56
+ * Build forecast title.
57
+ */
58
+ private buildForecastTitle;
59
+ /**
60
+ * Format pollutant name for display.
61
+ */
62
+ private formatPollutant;
63
+ /**
64
+ * Format forecast date.
65
+ */
66
+ private formatForecastDate;
67
+ /**
68
+ * Build observation description.
69
+ */
70
+ private buildObservationDescription;
71
+ /**
72
+ * Build forecast description.
73
+ */
74
+ private buildForecastDescription;
75
+ /**
76
+ * Format date as YYYY-MM-DD.
77
+ */
78
+ private formatDate;
79
+ /**
80
+ * Deduplicate alerts, keeping highest AQI per location/date.
81
+ */
82
+ private deduplicateAlerts;
83
+ }
84
+ //# sourceMappingURL=airnow.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airnow.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/air-quality/airnow.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAa,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAyC9D;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiCD;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAY/B;IAEF,OAAO,CAAC,YAAY,CAAqB;gBAE7B,MAAM,EAAE,kBAAkB;IAYhC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E;;OAEG;YACW,mBAAmB;IAkCjC;;OAEG;YACW,wBAAwB;IAatC;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAcnC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAqB1B"}
@@ -0,0 +1,3 @@
1
+ export { AirNowPlugin } from './airnow.plugin';
2
+ export type { AirNowPluginConfig } from './airnow.plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/air-quality/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,99 @@
1
+ import type { AlertPlugin, PluginMetadata, PluginFetchOptions, PluginFetchResult, GeoPoint, Alert, RiskLevel, AlertPriority, CacheProvider } from '../types';
2
+ import type { CSVParseOptions } from '../utils';
3
+ /**
4
+ * Configuration for base plugin.
5
+ */
6
+ export interface BasePluginConfig {
7
+ /** Cache provider for storing fetched data */
8
+ cache?: CacheProvider;
9
+ /** Default cache TTL in milliseconds */
10
+ cacheTtlMs?: number;
11
+ /** Number of retry attempts for failed requests */
12
+ maxRetries?: number;
13
+ /** User-Agent header for HTTP requests */
14
+ userAgent?: string;
15
+ }
16
+ /**
17
+ * Abstract base class for alert plugins.
18
+ *
19
+ * Provides common functionality for:
20
+ * - Location coverage checking
21
+ * - HTTP fetching with retry
22
+ * - Caching
23
+ * - Alert creation helpers
24
+ */
25
+ export declare abstract class BasePlugin implements AlertPlugin {
26
+ abstract readonly metadata: PluginMetadata;
27
+ protected config: BasePluginConfig;
28
+ protected cache?: CacheProvider;
29
+ constructor(config?: BasePluginConfig);
30
+ /**
31
+ * Initialize the plugin. Override if needed.
32
+ */
33
+ initialize(config?: Record<string, unknown>): Promise<void>;
34
+ /**
35
+ * Check if this plugin covers the given location.
36
+ *
37
+ * For global plugins, always returns true.
38
+ * For regional plugins, checks if the point is within the coverage radius.
39
+ */
40
+ coversLocation(point: GeoPoint): boolean;
41
+ /**
42
+ * Fetch alerts. Must be implemented by subclasses.
43
+ */
44
+ abstract fetchAlerts(options: PluginFetchOptions): Promise<PluginFetchResult>;
45
+ /**
46
+ * Clean up resources. Override if needed.
47
+ */
48
+ dispose(): Promise<void>;
49
+ /**
50
+ * Fetch JSON data from a URL with retry logic.
51
+ */
52
+ protected fetchJson<T>(url: string, init?: RequestInit): Promise<T>;
53
+ /**
54
+ * Fetch CSV data from a URL with retry logic.
55
+ *
56
+ * @param url - The URL to fetch from
57
+ * @param options - CSV parsing options
58
+ * @param init - Optional fetch init options
59
+ * @returns Parsed CSV data as array of objects
60
+ */
61
+ protected fetchCsv<T extends Record<string, unknown> = Record<string, unknown>>(url: string, options?: CSVParseOptions, init?: RequestInit): Promise<T[]>;
62
+ /**
63
+ * Get cached data or fetch fresh data.
64
+ */
65
+ protected getCachedOrFetch<T>(cacheKey: string, fetcher: () => Promise<T>, ttlMs?: number): Promise<{
66
+ data: T;
67
+ fromCache: boolean;
68
+ }>;
69
+ /**
70
+ * Generate a cache key for this plugin and query options.
71
+ */
72
+ protected generateCacheKey(options: PluginFetchOptions): string;
73
+ /**
74
+ * Create an alert with common fields filled in.
75
+ */
76
+ protected createAlert(data: Omit<Alert, 'source'> & {
77
+ externalId?: string;
78
+ }): Alert;
79
+ /**
80
+ * Get the source type based on plugin categories.
81
+ */
82
+ protected getSourceType(): Alert['source']['type'];
83
+ /**
84
+ * Map a numeric severity to a risk level.
85
+ *
86
+ * @param value - Numeric value (0-100 scale)
87
+ * @returns Corresponding risk level
88
+ */
89
+ protected mapToRiskLevel(value: number): RiskLevel;
90
+ /**
91
+ * Map a risk level to a priority.
92
+ */
93
+ protected riskLevelToPriority(level: RiskLevel): AlertPriority;
94
+ /**
95
+ * Create an empty result (no alerts).
96
+ */
97
+ protected emptyResult(): PluginFetchResult;
98
+ }
99
+ //# sourceMappingURL=base-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/base-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAIlB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,8BAAsB,UAAW,YAAW,WAAW;IACrD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAE3C,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACnC,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;gBAEpB,MAAM,CAAC,EAAE,gBAAgB;IAUrC;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAcxC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAE7E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;cACa,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA8BzE;;;;;;;OAOG;cACa,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClF,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC;IA+Bf;;OAEG;cACa,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAiB3C;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM;IAI/D;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACpD,KAAK;IAaR;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAWlD;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAQlD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa;IAW9D;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,iBAAiB;CAG3C"}
@@ -0,0 +1,3 @@
1
+ export { PhoenixEventsPlugin } from './phoenix-events.plugin';
2
+ export type { PhoenixEventsPluginConfig } from './phoenix-events.plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { PluginMetadata, PluginFetchOptions, PluginFetchResult } from '../../types';
2
+ import { BasePlugin, BasePluginConfig } from '../base-plugin';
3
+ /**
4
+ * Phoenix Events plugin configuration.
5
+ */
6
+ export interface PhoenixEventsPluginConfig extends BasePluginConfig {
7
+ /** Ticketmaster API key (required for Ticketmaster data) */
8
+ ticketmasterApiKey?: string;
9
+ /** Socrata app token for Phoenix Open Data (optional) */
10
+ socrataAppToken?: string;
11
+ /** Maximum events to fetch from each source. Default: 100 */
12
+ limit?: number;
13
+ /** Enable Ticketmaster source. Default: true if API key provided */
14
+ enableTicketmaster?: boolean;
15
+ /** Enable Phoenix permits source. Default: true */
16
+ enablePhoenixPermits?: boolean;
17
+ }
18
+ /**
19
+ * Plugin that fetches event data from Ticketmaster and Phoenix city permits.
20
+ *
21
+ * Aggregates from:
22
+ * - Ticketmaster Discovery API for concerts, sports, theater
23
+ * - Phoenix Open Data for special event permits (street closures, parades)
24
+ */
25
+ export declare class PhoenixEventsPlugin extends BasePlugin {
26
+ readonly metadata: PluginMetadata;
27
+ private eventsConfig;
28
+ constructor(config?: PhoenixEventsPluginConfig);
29
+ fetchAlerts(options: PluginFetchOptions): Promise<PluginFetchResult>;
30
+ /**
31
+ * Fetch events from all enabled sources.
32
+ */
33
+ private fetchAllEvents;
34
+ /**
35
+ * Fetch events from Ticketmaster Discovery API.
36
+ */
37
+ private fetchTicketmasterEvents;
38
+ /**
39
+ * Transform a Ticketmaster event to our Alert format.
40
+ */
41
+ private transformTicketmasterEvent;
42
+ /**
43
+ * Fetch events from Phoenix Open Data special events permits.
44
+ */
45
+ private fetchPhoenixPermitEvents;
46
+ /**
47
+ * Transform a Phoenix permit event to our Alert format.
48
+ */
49
+ private transformPhoenixPermitEvent;
50
+ /**
51
+ * Assess risk level for a Ticketmaster event.
52
+ */
53
+ private assessEventRisk;
54
+ /**
55
+ * Assess risk and category for a permit event.
56
+ */
57
+ private assessPermitEventRisk;
58
+ /**
59
+ * Build description for Ticketmaster event.
60
+ */
61
+ private buildTicketmasterDescription;
62
+ /**
63
+ * Build description for permit event.
64
+ */
65
+ private buildPermitDescription;
66
+ /**
67
+ * Deduplicate events that might appear in both sources.
68
+ */
69
+ private deduplicateEvents;
70
+ }
71
+ //# sourceMappingURL=phoenix-events.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoenix-events.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/events/phoenix-events.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwE9D;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AA0CD;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,CAAC,EAAE,yBAAyB;IAUxC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6B1E;;OAEG;YACW,cAAc;IAkC5B;;OAEG;YACW,uBAAuB;IA0BrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAwDlC;;OAEG;YACW,wBAAwB;IAiCtC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgDnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2BpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA0B1B"}
@@ -0,0 +1,3 @@
1
+ export { PhoenixFirePlugin } from './phoenix-fire.plugin';
2
+ export type { PhoenixFirePluginConfig } from './phoenix-fire.plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { PluginMetadata, PluginFetchOptions, PluginFetchResult } from '../../types';
2
+ import { BasePlugin, BasePluginConfig } from '../base-plugin';
3
+ /**
4
+ * Phoenix Fire plugin configuration.
5
+ */
6
+ export interface PhoenixFirePluginConfig extends BasePluginConfig {
7
+ /** Socrata app token for higher rate limits (optional) */
8
+ appToken?: string;
9
+ /** Maximum records to fetch per request. Default: 1000 */
10
+ limit?: number;
11
+ }
12
+ /**
13
+ * Plugin that fetches fire and EMS incident data from Phoenix Open Data Portal.
14
+ *
15
+ * @see https://www.phoenixopendata.com/dataset/fire-incidents
16
+ */
17
+ export declare class PhoenixFirePlugin extends BasePlugin {
18
+ readonly metadata: PluginMetadata;
19
+ private fireConfig;
20
+ constructor(config?: PhoenixFirePluginConfig);
21
+ fetchAlerts(options: PluginFetchOptions): Promise<PluginFetchResult>;
22
+ /**
23
+ * Build the Socrata API URL for Phoenix fire data.
24
+ */
25
+ private buildApiUrl;
26
+ /**
27
+ * Fetch incidents from the API.
28
+ */
29
+ private fetchIncidents;
30
+ /**
31
+ * Transform a Phoenix Fire incident to our Alert format.
32
+ */
33
+ private transformIncident;
34
+ /**
35
+ * Map a call type to category and risk level.
36
+ */
37
+ private mapCallType;
38
+ /**
39
+ * Format call type for display.
40
+ */
41
+ private formatCallType;
42
+ /**
43
+ * Build description from incident data.
44
+ */
45
+ private buildDescription;
46
+ }
47
+ //# sourceMappingURL=phoenix-fire.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoenix-fire.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/phoenix-fire.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAA4B,MAAM,aAAa,CAAC;AACnH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAuB9D;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC/D,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,OAAO,CAAC,UAAU,CAA0B;gBAEhC,MAAM,CAAC,EAAE,uBAAuB;IAQtC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgC1E;;OAEG;IACH,OAAO,CAAC,WAAW;IAyCnB;;OAEG;YACW,cAAc;IAI5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAsBzB"}
@@ -0,0 +1,17 @@
1
+ export { BasePlugin } from './base-plugin';
2
+ export type { BasePluginConfig } from './base-plugin';
3
+ export { NWSWeatherPlugin } from './weather';
4
+ export type { NWSWeatherPluginConfig } from './weather';
5
+ export { PhoenixPolicePlugin } from './police-blotter';
6
+ export type { PhoenixPolicePluginConfig } from './police-blotter';
7
+ export { PhoenixFirePlugin } from './fire-emt';
8
+ export type { PhoenixFirePluginConfig } from './fire-emt';
9
+ export { PulsepointPlugin } from './pulsepoint';
10
+ export type { PulsepointPluginConfig } from './pulsepoint';
11
+ export { PhoenixEventsPlugin } from './events';
12
+ export type { PhoenixEventsPluginConfig } from './events';
13
+ export { ArizonaTrafficPlugin } from './traffic';
14
+ export type { ArizonaTrafficPluginConfig } from './traffic';
15
+ export { AirNowPlugin } from './air-quality';
16
+ export type { AirNowPluginConfig } from './air-quality';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PhoenixPolicePlugin } from './phoenix-police.plugin';
2
+ export type { PhoenixPolicePluginConfig } from './phoenix-police.plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/police-blotter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { PluginMetadata, PluginFetchOptions, PluginFetchResult } from '../../types';
2
+ import { BasePlugin, BasePluginConfig } from '../base-plugin';
3
+ /**
4
+ * Phoenix Police plugin configuration.
5
+ */
6
+ export interface PhoenixPolicePluginConfig extends BasePluginConfig {
7
+ /** Socrata app token for higher rate limits (optional) */
8
+ appToken?: string;
9
+ /** Maximum records to fetch per request. Default: 1000 */
10
+ limit?: number;
11
+ }
12
+ /**
13
+ * Plugin that fetches crime data from the Phoenix Open Data Portal.
14
+ *
15
+ * Uses the Phoenix Crime Incidents dataset via Socrata API.
16
+ *
17
+ * @see https://www.phoenixopendata.com/dataset/crime-data
18
+ */
19
+ export declare class PhoenixPolicePlugin extends BasePlugin {
20
+ readonly metadata: PluginMetadata;
21
+ private phoenixConfig;
22
+ constructor(config?: PhoenixPolicePluginConfig);
23
+ fetchAlerts(options: PluginFetchOptions): Promise<PluginFetchResult>;
24
+ /**
25
+ * Build the Socrata API URL for Phoenix crime data.
26
+ */
27
+ private buildApiUrl;
28
+ /**
29
+ * Fetch incidents from the API.
30
+ */
31
+ private fetchIncidents;
32
+ /**
33
+ * Transform a Phoenix Police incident to our Alert format.
34
+ */
35
+ private transformIncident;
36
+ /**
37
+ * Map a crime category to a risk level.
38
+ */
39
+ private mapCrimeToRiskLevel;
40
+ /**
41
+ * Format the crime category as a title.
42
+ */
43
+ private formatCrimeTitle;
44
+ /**
45
+ * Build a description from incident data.
46
+ */
47
+ private buildDescription;
48
+ }
49
+ //# sourceMappingURL=phoenix-police.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoenix-police.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/police-blotter/phoenix-police.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAa,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmB9D;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgCD;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,OAAO,CAAC,aAAa,CAA4B;gBAErC,MAAM,CAAC,EAAE,yBAAyB;IAQxC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4B1E;;OAEG;IACH,OAAO,CAAC,WAAW;IA0CnB;;OAEG;YACW,cAAc;IAI5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAqBzB"}
@@ -0,0 +1,3 @@
1
+ export { PulsepointPlugin } from './pulsepoint.plugin';
2
+ export type { PulsepointPluginConfig } from './pulsepoint.plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/pulsepoint/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}