local-risk-alert-feed 0.1.0 → 0.2.1

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 (85) hide show
  1. package/dist/cjs/core/alert-aggregator.js +24 -15
  2. package/dist/cjs/core/alert-aggregator.js.map +1 -1
  3. package/dist/cjs/index.js +3 -6
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/plugins/events/index.js +3 -1
  6. package/dist/cjs/plugins/events/index.js.map +1 -1
  7. package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js +235 -0
  8. package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
  9. package/dist/cjs/plugins/events/phoenix-events.plugin.js +24 -195
  10. package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -1
  11. package/dist/cjs/plugins/fire-emt/index.js +3 -1
  12. package/dist/cjs/plugins/fire-emt/index.js.map +1 -1
  13. package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js +221 -0
  14. package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
  15. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
  16. package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
  17. package/dist/cjs/plugins/index.js +2 -7
  18. package/dist/cjs/plugins/index.js.map +1 -1
  19. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +70 -77
  20. package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
  21. package/dist/esm/core/alert-aggregator.js +24 -15
  22. package/dist/esm/core/alert-aggregator.js.map +1 -1
  23. package/dist/esm/index.js +1 -3
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/plugins/events/index.js +1 -0
  26. package/dist/esm/plugins/events/index.js.map +1 -1
  27. package/dist/esm/plugins/events/phoenix-convention-center.plugin.js +231 -0
  28. package/dist/esm/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
  29. package/dist/esm/plugins/events/phoenix-events.plugin.js +24 -195
  30. package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -1
  31. package/dist/esm/plugins/fire-emt/index.js +1 -0
  32. package/dist/esm/plugins/fire-emt/index.js.map +1 -1
  33. package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js +217 -0
  34. package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
  35. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
  36. package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
  37. package/dist/esm/plugins/index.js +1 -5
  38. package/dist/esm/plugins/index.js.map +1 -1
  39. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +70 -77
  40. package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
  41. package/dist/types/core/alert-aggregator.d.ts +1 -1
  42. package/dist/types/core/alert-aggregator.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +2 -6
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/plugins/events/index.d.ts +2 -0
  46. package/dist/types/plugins/events/index.d.ts.map +1 -1
  47. package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts +55 -0
  48. package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts.map +1 -0
  49. package/dist/types/plugins/events/phoenix-events.plugin.d.ts +5 -37
  50. package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -1
  51. package/dist/types/plugins/fire-emt/index.d.ts +2 -0
  52. package/dist/types/plugins/fire-emt/index.d.ts.map +1 -1
  53. package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts +43 -0
  54. package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts.map +1 -0
  55. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts +21 -13
  56. package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -1
  57. package/dist/types/plugins/index.d.ts +2 -6
  58. package/dist/types/plugins/index.d.ts.map +1 -1
  59. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts +5 -14
  60. package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -1
  61. package/package.json +1 -11
  62. package/dist/cjs/plugins/police-blotter/index.js +0 -6
  63. package/dist/cjs/plugins/police-blotter/index.js.map +0 -1
  64. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js +0 -198
  65. package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
  66. package/dist/cjs/plugins/pulsepoint/index.js +0 -6
  67. package/dist/cjs/plugins/pulsepoint/index.js.map +0 -1
  68. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js +0 -275
  69. package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
  70. package/dist/esm/plugins/police-blotter/index.js +0 -2
  71. package/dist/esm/plugins/police-blotter/index.js.map +0 -1
  72. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js +0 -194
  73. package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
  74. package/dist/esm/plugins/pulsepoint/index.js +0 -2
  75. package/dist/esm/plugins/pulsepoint/index.js.map +0 -1
  76. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js +0 -271
  77. package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
  78. package/dist/types/plugins/police-blotter/index.d.ts +0 -3
  79. package/dist/types/plugins/police-blotter/index.d.ts.map +0 -1
  80. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts +0 -49
  81. package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts.map +0 -1
  82. package/dist/types/plugins/pulsepoint/index.d.ts +0 -3
  83. package/dist/types/plugins/pulsepoint/index.d.ts.map +0 -1
  84. package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts +0 -61
  85. package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"arizona-traffic.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/traffic/arizona-traffic.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;AA2C9D;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiDD;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,OAAO,CAAC,aAAa,CAA6B;gBAEtC,MAAM,CAAC,EAAE,0BAA0B;IAUzC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E;;OAEG;YACW,kBAAkB;IAmEhC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8CxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}
1
+ {"version":3,"file":"arizona-traffic.plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/traffic/arizona-traffic.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;AA2C9D;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiDD;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAc/B;IAEF,OAAO,CAAC,aAAa,CAA6B;gBAEtC,MAAM,CAAC,EAAE,0BAA0B;IAUzC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E;;OAEG;YACW,kBAAkB;IA8DhC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyDxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-risk-alert-feed",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript library for aggregating local risk alerts from multiple data sources via a plugin system",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -21,11 +21,6 @@
21
21
  "require": "./dist/cjs/adapters/vercel.js",
22
22
  "types": "./dist/types/adapters/vercel.d.ts"
23
23
  },
24
- "./plugins/police-blotter": {
25
- "import": "./dist/esm/plugins/police-blotter/index.js",
26
- "require": "./dist/cjs/plugins/police-blotter/index.js",
27
- "types": "./dist/types/plugins/police-blotter/index.d.ts"
28
- },
29
24
  "./plugins/fire-emt": {
30
25
  "import": "./dist/esm/plugins/fire-emt/index.js",
31
26
  "require": "./dist/cjs/plugins/fire-emt/index.js",
@@ -41,11 +36,6 @@
41
36
  "require": "./dist/cjs/plugins/weather/index.js",
42
37
  "types": "./dist/types/plugins/weather/index.d.ts"
43
38
  },
44
- "./plugins/pulsepoint": {
45
- "import": "./dist/esm/plugins/pulsepoint/index.js",
46
- "require": "./dist/cjs/plugins/pulsepoint/index.js",
47
- "types": "./dist/types/plugins/pulsepoint/index.d.ts"
48
- },
49
39
  "./plugins/traffic": {
50
40
  "import": "./dist/esm/plugins/traffic/index.js",
51
41
  "require": "./dist/cjs/plugins/traffic/index.js",
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PhoenixPolicePlugin = void 0;
4
- var phoenix_police_plugin_1 = require("./phoenix-police.plugin");
5
- Object.defineProperty(exports, "PhoenixPolicePlugin", { enumerable: true, get: function () { return phoenix_police_plugin_1.PhoenixPolicePlugin; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/police-blotter/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA"}
@@ -1,198 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PhoenixPolicePlugin = void 0;
4
- const base_plugin_1 = require("../base-plugin");
5
- /**
6
- * Phoenix Police crime center coordinates.
7
- */
8
- const PHOENIX_CENTER = {
9
- latitude: 33.4484,
10
- longitude: -112.074,
11
- };
12
- /**
13
- * Coverage radius in meters (approximately 50km covers greater Phoenix metro).
14
- */
15
- const COVERAGE_RADIUS_METERS = 50_000;
16
- /**
17
- * Crime categories and their risk mappings.
18
- */
19
- const CRIME_RISK_MAP = {
20
- HOMICIDE: 'extreme',
21
- 'AGGRAVATED ASSAULT': 'severe',
22
- ROBBERY: 'severe',
23
- 'SEXUAL ASSAULT': 'severe',
24
- ARSON: 'high',
25
- BURGLARY: 'high',
26
- 'MOTOR VEHICLE THEFT': 'moderate',
27
- THEFT: 'moderate',
28
- 'DRUG OFFENSE': 'moderate',
29
- LARCENY: 'low',
30
- MISCELLANEOUS: 'low',
31
- };
32
- /**
33
- * Plugin that fetches crime data from the Phoenix Open Data Portal.
34
- *
35
- * Uses the Phoenix Crime Incidents dataset via Socrata API.
36
- *
37
- * @see https://www.phoenixopendata.com/dataset/crime-data
38
- */
39
- class PhoenixPolicePlugin extends base_plugin_1.BasePlugin {
40
- metadata = {
41
- id: 'phoenix-police',
42
- name: 'Phoenix Police Department',
43
- version: '1.0.0',
44
- description: 'Crime incidents from Phoenix Police Department',
45
- coverage: {
46
- type: 'regional',
47
- center: PHOENIX_CENTER,
48
- radiusMeters: COVERAGE_RADIUS_METERS,
49
- description: 'Phoenix, AZ metropolitan area',
50
- },
51
- supportedTemporalTypes: ['historical'],
52
- supportedCategories: ['crime'],
53
- refreshIntervalMs: 60 * 60 * 1000, // 1 hour
54
- };
55
- phoenixConfig;
56
- constructor(config) {
57
- super(config);
58
- this.phoenixConfig = {
59
- limit: 1000,
60
- ...config,
61
- };
62
- }
63
- async fetchAlerts(options) {
64
- const { location, timeRange, radiusMeters, limit } = options;
65
- const cacheKey = this.generateCacheKey(options);
66
- // Build Socrata API URL
67
- const url = this.buildApiUrl(location, timeRange, radiusMeters, limit);
68
- try {
69
- const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchIncidents(url), this.config.cacheTtlMs);
70
- const alerts = data.map((incident) => this.transformIncident(incident));
71
- return {
72
- alerts,
73
- fromCache,
74
- cacheKey,
75
- };
76
- }
77
- catch (error) {
78
- // Log and return empty on non-critical errors
79
- console.error('Phoenix Police fetch error:', error);
80
- throw error;
81
- }
82
- }
83
- /**
84
- * Build the Socrata API URL for Phoenix crime data.
85
- */
86
- buildApiUrl(location, timeRange, radiusMeters, limit) {
87
- const baseUrl = 'https://www.phoenixopendata.com/resource/b4ez-nd22.json';
88
- // Build SoQL query
89
- const params = new URLSearchParams();
90
- // Limit results
91
- params.set('$limit', String(limit ?? this.phoenixConfig.limit));
92
- // Order by most recent
93
- params.set('$order', 'occurred_on DESC');
94
- // Build WHERE clause for time range and location
95
- const whereClauses = [];
96
- // Time filter using occurred_on field
97
- const startDate = timeRange.start.split('T')[0];
98
- const endDate = timeRange.end.split('T')[0];
99
- whereClauses.push(`occurred_on >= '${startDate}'`);
100
- whereClauses.push(`occurred_on <= '${endDate}'`);
101
- // Location filter using within_circle function (Socrata specific)
102
- // Convert radius from meters to meters (Socrata uses meters)
103
- whereClauses.push(`within_circle(location_1, ${location.latitude}, ${location.longitude}, ${radiusMeters})`);
104
- params.set('$where', whereClauses.join(' AND '));
105
- // Add app token if provided (for higher rate limits)
106
- if (this.phoenixConfig.appToken) {
107
- params.set('$$app_token', this.phoenixConfig.appToken);
108
- }
109
- return `${baseUrl}?${params.toString()}`;
110
- }
111
- /**
112
- * Fetch incidents from the API.
113
- */
114
- async fetchIncidents(url) {
115
- return this.fetchJson(url);
116
- }
117
- /**
118
- * Transform a Phoenix Police incident to our Alert format.
119
- */
120
- transformIncident(incident) {
121
- const category = incident.ucr_crime_category?.toUpperCase() ?? 'MISCELLANEOUS';
122
- const riskLevel = this.mapCrimeToRiskLevel(category);
123
- // Parse coordinates
124
- const latitude = incident.latitude ? parseFloat(incident.latitude) : PHOENIX_CENTER.latitude;
125
- const longitude = incident.longitude
126
- ? parseFloat(incident.longitude)
127
- : PHOENIX_CENTER.longitude;
128
- // Determine time - use occurred_on or reported_on
129
- const occurredOn = incident.occurred_on ?? incident.reported_on ?? new Date().toISOString();
130
- const occurredTo = incident.occurred_to;
131
- return this.createAlert({
132
- id: `phoenix-police-${incident.inc_number}`,
133
- externalId: incident.inc_number,
134
- title: this.formatCrimeTitle(category),
135
- description: this.buildDescription(incident),
136
- riskLevel,
137
- priority: this.riskLevelToPriority(riskLevel),
138
- category: 'crime',
139
- temporalType: 'historical',
140
- location: {
141
- point: { latitude, longitude },
142
- address: incident.hundredblockaddr,
143
- city: 'Phoenix',
144
- state: 'AZ',
145
- },
146
- timestamps: {
147
- issued: occurredOn,
148
- eventStart: occurredOn,
149
- eventEnd: occurredTo,
150
- },
151
- metadata: {
152
- incidentNumber: incident.inc_number,
153
- crimeCategory: category,
154
- grid: incident.grid,
155
- premiseType: incident.premise_type,
156
- disposition: incident.disposition,
157
- },
158
- });
159
- }
160
- /**
161
- * Map a crime category to a risk level.
162
- */
163
- mapCrimeToRiskLevel(category) {
164
- return CRIME_RISK_MAP[category] ?? 'moderate';
165
- }
166
- /**
167
- * Format the crime category as a title.
168
- */
169
- formatCrimeTitle(category) {
170
- // Convert "AGGRAVATED ASSAULT" to "Aggravated Assault"
171
- return category
172
- .toLowerCase()
173
- .split(' ')
174
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
175
- .join(' ');
176
- }
177
- /**
178
- * Build a description from incident data.
179
- */
180
- buildDescription(incident) {
181
- const parts = [];
182
- if (incident.ucr_crime_category) {
183
- parts.push(`Crime Type: ${this.formatCrimeTitle(incident.ucr_crime_category)}`);
184
- }
185
- if (incident.hundredblockaddr) {
186
- parts.push(`Location: ${incident.hundredblockaddr}`);
187
- }
188
- if (incident.premise_type) {
189
- parts.push(`Premise: ${incident.premise_type}`);
190
- }
191
- if (incident.disposition) {
192
- parts.push(`Status: ${incident.disposition}`);
193
- }
194
- return parts.join('\n');
195
- }
196
- }
197
- exports.PhoenixPolicePlugin = PhoenixPolicePlugin;
198
- //# sourceMappingURL=phoenix-police.plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phoenix-police.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/police-blotter/phoenix-police.plugin.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PulsepointPlugin = void 0;
4
- var pulsepoint_plugin_1 = require("./pulsepoint.plugin");
5
- Object.defineProperty(exports, "PulsepointPlugin", { enumerable: true, get: function () { return pulsepoint_plugin_1.PulsepointPlugin; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/pulsepoint/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
@@ -1,275 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PulsepointPlugin = void 0;
4
- const base_plugin_1 = require("../base-plugin");
5
- /**
6
- * Phoenix center coordinates.
7
- */
8
- const PHOENIX_CENTER = {
9
- latitude: 33.4484,
10
- longitude: -112.074,
11
- };
12
- /**
13
- * Coverage radius in meters (approximately 50km covers greater Phoenix metro).
14
- */
15
- const COVERAGE_RADIUS_METERS = 50_000;
16
- /**
17
- * Default Phoenix metro area agencies.
18
- */
19
- const DEFAULT_PHOENIX_AGENCIES = ['FPHX', 'FMES', 'FTEM', 'FGLN', 'FSCOT'];
20
- /**
21
- * Incident type to category and risk mappings.
22
- */
23
- const INCIDENT_TYPE_MAP = {
24
- // Fire incidents
25
- 'STRUCTURE FIRE': { category: 'fire', risk: 'extreme' },
26
- 'RESIDENTIAL FIRE': { category: 'fire', risk: 'extreme' },
27
- 'COMMERCIAL FIRE': { category: 'fire', risk: 'extreme' },
28
- 'INDUSTRIAL FIRE': { category: 'fire', risk: 'extreme' },
29
- 'APARTMENT FIRE': { category: 'fire', risk: 'extreme' },
30
- 'HIGHRISE FIRE': { category: 'fire', risk: 'extreme' },
31
- 'VEHICLE FIRE': { category: 'fire', risk: 'high' },
32
- 'BRUSH FIRE': { category: 'fire', risk: 'severe' },
33
- 'WILDFIRE': { category: 'fire', risk: 'severe' },
34
- 'GRASS FIRE': { category: 'fire', risk: 'high' },
35
- 'DUMPSTER FIRE': { category: 'fire', risk: 'moderate' },
36
- 'FIRE ALARM': { category: 'fire', risk: 'low' },
37
- 'SMOKE INVESTIGATION': { category: 'fire', risk: 'moderate' },
38
- // Medical emergencies
39
- 'CARDIAC ARREST': { category: 'medical', risk: 'severe' },
40
- 'CARDIAC EMERGENCY': { category: 'medical', risk: 'severe' },
41
- 'STROKE': { category: 'medical', risk: 'severe' },
42
- 'CHEST PAIN': { category: 'medical', risk: 'high' },
43
- 'DIFFICULTY BREATHING': { category: 'medical', risk: 'high' },
44
- 'RESPIRATORY': { category: 'medical', risk: 'high' },
45
- 'UNCONSCIOUS': { category: 'medical', risk: 'high' },
46
- 'OVERDOSE': { category: 'medical', risk: 'high' },
47
- 'MEDICAL EMERGENCY': { category: 'medical', risk: 'high' },
48
- 'MEDICAL AID': { category: 'medical', risk: 'moderate' },
49
- 'FALL': { category: 'medical', risk: 'moderate' },
50
- 'INJURY': { category: 'medical', risk: 'moderate' },
51
- 'DIABETIC': { category: 'medical', risk: 'high' },
52
- 'SEIZURE': { category: 'medical', risk: 'high' },
53
- // Traffic/rescue
54
- 'TRAFFIC COLLISION': { category: 'medical', risk: 'high' },
55
- 'TRAFFIC ACCIDENT': { category: 'medical', risk: 'high' },
56
- 'MVA': { category: 'medical', risk: 'high' },
57
- 'EXTRICATION': { category: 'medical', risk: 'severe' },
58
- 'RESCUE': { category: 'medical', risk: 'high' },
59
- 'WATER RESCUE': { category: 'medical', risk: 'severe' },
60
- 'SWIFT WATER RESCUE': { category: 'medical', risk: 'severe' },
61
- // Hazmat
62
- 'HAZMAT': { category: 'fire', risk: 'severe' },
63
- 'GAS LEAK': { category: 'fire', risk: 'high' },
64
- 'NATURAL GAS LEAK': { category: 'fire', risk: 'high' },
65
- 'CARBON MONOXIDE': { category: 'fire', risk: 'high' },
66
- 'ELECTRICAL': { category: 'fire', risk: 'high' },
67
- };
68
- /**
69
- * Plugin that fetches real-time fire and EMS incidents from Pulsepoint.
70
- *
71
- * Pulsepoint provides real-time incident data from participating fire departments.
72
- *
73
- * @see https://www.pulsepoint.org
74
- */
75
- class PulsepointPlugin extends base_plugin_1.BasePlugin {
76
- metadata = {
77
- id: 'pulsepoint',
78
- name: 'Pulsepoint Real-Time Incidents',
79
- version: '1.0.0',
80
- description: 'Real-time fire and EMS incidents from Pulsepoint',
81
- coverage: {
82
- type: 'regional',
83
- center: PHOENIX_CENTER,
84
- radiusMeters: COVERAGE_RADIUS_METERS,
85
- description: 'Phoenix, AZ metropolitan area (participating agencies)',
86
- },
87
- supportedTemporalTypes: ['real-time'],
88
- supportedCategories: ['fire', 'medical'],
89
- refreshIntervalMs: 60 * 1000, // 1 minute - real-time data
90
- };
91
- pulsepointConfig;
92
- constructor(config) {
93
- super(config);
94
- this.pulsepointConfig = {
95
- agencyIds: DEFAULT_PHOENIX_AGENCIES,
96
- includeRecent: false,
97
- ...config,
98
- };
99
- }
100
- async fetchAlerts(options) {
101
- const { location, radiusMeters, categories } = options;
102
- const cacheKey = this.generateCacheKey(options);
103
- const warnings = [];
104
- try {
105
- const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchAllAgencies(warnings),
106
- // Short cache TTL for real-time data
107
- 30 * 1000 // 30 seconds
108
- );
109
- // Filter by location radius
110
- let alerts = data.filter((alert) => {
111
- const distance = this.calculateDistance(location.latitude, location.longitude, alert.location.point.latitude, alert.location.point.longitude);
112
- return distance <= radiusMeters;
113
- });
114
- // Filter by categories if specified
115
- if (categories && categories.length > 0) {
116
- alerts = alerts.filter((alert) => categories.includes(alert.category));
117
- }
118
- return {
119
- alerts,
120
- fromCache,
121
- cacheKey,
122
- warnings: warnings.length > 0 ? warnings : undefined,
123
- };
124
- }
125
- catch (error) {
126
- console.error('Pulsepoint fetch error:', error);
127
- throw error;
128
- }
129
- }
130
- /**
131
- * Fetch incidents from all configured agencies.
132
- */
133
- async fetchAllAgencies(warnings) {
134
- const allAlerts = [];
135
- for (const agencyId of this.pulsepointConfig.agencyIds) {
136
- try {
137
- const incidents = await this.fetchAgencyIncidents(agencyId);
138
- const alerts = incidents.map((incident) => this.transformIncident(incident, agencyId));
139
- allAlerts.push(...alerts);
140
- }
141
- catch (error) {
142
- warnings.push(`Failed to fetch from agency ${agencyId}: ${error instanceof Error ? error.message : 'Unknown error'}`);
143
- }
144
- }
145
- return allAlerts;
146
- }
147
- /**
148
- * Fetch incidents from a single Pulsepoint agency.
149
- */
150
- async fetchAgencyIncidents(agencyId) {
151
- // Pulsepoint web API endpoint
152
- const url = `https://web.pulsepoint.org/DB/giba.php?agency_id=${agencyId}`;
153
- const response = await this.fetchJson(url);
154
- const incidents = [];
155
- if (response.incidents?.active) {
156
- incidents.push(...response.incidents.active);
157
- }
158
- if (this.pulsepointConfig.includeRecent && response.incidents?.recent) {
159
- incidents.push(...response.incidents.recent);
160
- }
161
- return incidents;
162
- }
163
- /**
164
- * Transform a Pulsepoint incident to our Alert format.
165
- */
166
- transformIncident(incident, agencyId) {
167
- const incidentType = incident.IncidentTypeName.toUpperCase();
168
- const { category, risk } = this.mapIncidentType(incidentType);
169
- const latitude = parseFloat(incident.Latitude);
170
- const longitude = parseFloat(incident.Longitude);
171
- // Use call received time as the incident time
172
- const issued = incident.CallReceivedDateTime;
173
- // Build description with unit info
174
- const description = this.buildDescription(incident);
175
- return this.createAlert({
176
- id: `pulsepoint-${agencyId}-${incident.ID}`,
177
- externalId: incident.ID,
178
- title: this.formatIncidentType(incident.IncidentTypeName),
179
- description,
180
- riskLevel: risk,
181
- priority: this.riskLevelToPriority(risk),
182
- category,
183
- temporalType: 'real-time',
184
- location: {
185
- point: { latitude, longitude },
186
- address: incident.MedicalEmergencyDisplayAddress ?? incident.FullDisplayAddress,
187
- },
188
- timestamps: {
189
- issued,
190
- eventStart: issued,
191
- },
192
- metadata: {
193
- agencyId,
194
- incidentTypeCode: incident.IncidentTypeCode,
195
- units: incident.Unit?.map((u) => ({
196
- id: u.UnitID,
197
- status: u.PulsePointDispatchStatus,
198
- })),
199
- isClosed: incident.Status?.IncidentClosed ?? false,
200
- },
201
- });
202
- }
203
- /**
204
- * Map incident type to category and risk level.
205
- */
206
- mapIncidentType(incidentType) {
207
- // Try exact match
208
- if (INCIDENT_TYPE_MAP[incidentType]) {
209
- return INCIDENT_TYPE_MAP[incidentType];
210
- }
211
- // Try partial match
212
- for (const [key, value] of Object.entries(INCIDENT_TYPE_MAP)) {
213
- if (incidentType.includes(key)) {
214
- return value;
215
- }
216
- }
217
- // Default based on keywords
218
- if (incidentType.includes('FIRE') || incidentType.includes('SMOKE') || incidentType.includes('BURN')) {
219
- return { category: 'fire', risk: 'high' };
220
- }
221
- if (incidentType.includes('MEDICAL') || incidentType.includes('EMS') || incidentType.includes('AMBULANCE')) {
222
- return { category: 'medical', risk: 'moderate' };
223
- }
224
- // Default to medical (most common)
225
- return { category: 'medical', risk: 'moderate' };
226
- }
227
- /**
228
- * Format incident type for display.
229
- */
230
- formatIncidentType(incidentType) {
231
- return incidentType
232
- .toLowerCase()
233
- .split(' ')
234
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
235
- .join(' ');
236
- }
237
- /**
238
- * Build description from incident data.
239
- */
240
- buildDescription(incident) {
241
- const parts = [];
242
- parts.push(`Type: ${this.formatIncidentType(incident.IncidentTypeName)}`);
243
- if (incident.FullDisplayAddress) {
244
- parts.push(`Location: ${incident.FullDisplayAddress}`);
245
- }
246
- if (incident.Unit && incident.Unit.length > 0) {
247
- const unitList = incident.Unit.map((u) => `${u.UnitID} (${u.PulsePointDispatchStatus})`).join(', ');
248
- parts.push(`Responding Units: ${unitList}`);
249
- }
250
- if (incident.Status?.IncidentClosed) {
251
- parts.push('Status: Closed');
252
- }
253
- else {
254
- parts.push('Status: Active');
255
- }
256
- return parts.join('\n');
257
- }
258
- /**
259
- * Calculate distance between two points in meters.
260
- */
261
- calculateDistance(lat1, lon1, lat2, lon2) {
262
- const R = 6371e3; // Earth radius in meters
263
- const φ1 = (lat1 * Math.PI) / 180;
264
- const φ2 = (lat2 * Math.PI) / 180;
265
- const Δφ = ((lat2 - lat1) * Math.PI) / 180;
266
- const Δλ = ((lon2 - lon1) * Math.PI) / 180;
267
- const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
268
- Math.cos(φ1) * Math.cos(φ2) *
269
- Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
270
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
271
- return R * c;
272
- }
273
- }
274
- exports.PulsepointPlugin = PulsepointPlugin;
275
- //# sourceMappingURL=pulsepoint.plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pulsepoint.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/pulsepoint/pulsepoint.plugin.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { PhoenixPolicePlugin } from './phoenix-police.plugin';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/police-blotter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}