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
@@ -14,101 +14,66 @@ const PHOENIX_CENTER = {
14
14
  */
15
15
  const COVERAGE_RADIUS_METERS = 50_000;
16
16
  /**
17
- * Call type to category and risk mappings.
17
+ * Category to risk level and alert category mapping.
18
18
  */
19
- const CALL_TYPE_MAP = {
20
- // Fire-related
21
- STRUCTURE_FIRE: { category: 'fire', risk: 'extreme' },
19
+ const CATEGORY_MAP = {
20
+ // Fire categories
21
+ FIRE: { category: 'fire', risk: 'high' },
22
22
  'STRUCTURE FIRE': { category: 'fire', risk: 'extreme' },
23
- FIRE: { category: 'fire', risk: 'severe' },
24
- BRUSH_FIRE: { category: 'fire', risk: 'severe' },
25
23
  'BRUSH FIRE': { category: 'fire', risk: 'severe' },
26
- VEHICLE_FIRE: { category: 'fire', risk: 'high' },
27
- 'VEHICLE FIRE': { category: 'fire', risk: 'high' },
28
- DUMPSTER_FIRE: { category: 'fire', risk: 'moderate' },
29
- 'DUMPSTER FIRE': { category: 'fire', risk: 'moderate' },
30
- SMOKE_INVESTIGATION: { category: 'fire', risk: 'moderate' },
31
- 'SMOKE INVESTIGATION': { category: 'fire', risk: 'moderate' },
32
- ALARM: { category: 'fire', risk: 'low' },
33
- 'FIRE ALARM': { category: 'fire', risk: 'low' },
34
- // Medical-related
35
- CARDIAC: { category: 'medical', risk: 'severe' },
36
- 'CARDIAC ARREST': { category: 'medical', risk: 'severe' },
37
- STROKE: { category: 'medical', risk: 'severe' },
38
- TRAUMA: { category: 'medical', risk: 'severe' },
39
- 'MAJOR TRAUMA': { category: 'medical', risk: 'severe' },
40
- MEDICAL: { category: 'medical', risk: 'high' },
41
- 'MEDICAL AID': { category: 'medical', risk: 'high' },
42
- 'MEDICAL EMERGENCY': { category: 'medical', risk: 'high' },
43
- OVERDOSE: { category: 'medical', risk: 'high' },
44
- 'DRUG OVERDOSE': { category: 'medical', risk: 'high' },
45
- BREATHING: { category: 'medical', risk: 'high' },
46
- 'BREATHING PROBLEMS': { category: 'medical', risk: 'high' },
47
- UNCONSCIOUS: { category: 'medical', risk: 'high' },
48
- 'UNCONSCIOUS PERSON': { category: 'medical', risk: 'high' },
49
- FALL: { category: 'medical', risk: 'moderate' },
50
- SICK: { category: 'medical', risk: 'moderate' },
51
- 'SICK PERSON': { category: 'medical', risk: 'moderate' },
52
- TRANSFER: { category: 'medical', risk: 'low' },
53
- 'PATIENT TRANSFER': { category: 'medical', risk: 'low' },
54
- // Traffic/accident-related (categorize as medical for injuries)
55
- ACCIDENT: { category: 'medical', risk: 'high' },
56
- 'TRAFFIC ACCIDENT': { category: 'medical', risk: 'high' },
57
- 'MOTOR VEHICLE ACCIDENT': { category: 'medical', risk: 'high' },
58
- MVA: { category: 'medical', risk: 'high' },
59
- EXTRICATION: { category: 'medical', risk: 'severe' },
60
- 'VEHICLE EXTRICATION': { category: 'medical', risk: 'severe' },
61
- // Hazmat
62
24
  HAZMAT: { category: 'fire', risk: 'severe' },
63
- 'HAZARDOUS MATERIALS': { category: 'fire', risk: 'severe' },
64
- 'GAS LEAK': { category: 'fire', risk: 'high' },
65
- 'CARBON MONOXIDE': { category: 'fire', risk: 'high' },
25
+ // EMS categories
26
+ ALS: { category: 'medical', risk: 'high' }, // Advanced Life Support
27
+ BLS: { category: 'medical', risk: 'moderate' }, // Basic Life Support
28
+ CEMS: { category: 'medical', risk: 'moderate' }, // Community EMS
29
+ // Service categories
30
+ 'MISC SERVICE': { category: 'fire', risk: 'low' },
31
+ SERVICE: { category: 'fire', risk: 'low' },
66
32
  };
67
33
  /**
68
- * Plugin that fetches fire and EMS incident data from Phoenix Open Data Portal.
34
+ * Plugin that fetches fire and EMS incident data from Phoenix Fire Department ArcGIS service.
69
35
  *
70
- * @see https://www.phoenixopendata.com/dataset/fire-incidents
36
+ * Uses the Phoenix Fire 30-day incident history which is updated frequently (data is ~1-2 days old).
37
+ *
38
+ * @see https://maps.phoenix.gov/phxfire/rest/services/IncidentHistory30DayPoints/MapServer
71
39
  */
72
40
  class PhoenixFirePlugin extends base_plugin_1.BasePlugin {
73
41
  metadata = {
74
42
  id: 'phoenix-fire',
75
43
  name: 'Phoenix Fire Department',
76
- version: '1.0.0',
77
- description: 'Fire and EMS incidents from Phoenix Fire Department',
44
+ version: '2.0.0',
45
+ description: 'Fire and EMS incidents from Phoenix Regional Dispatch Center',
78
46
  coverage: {
79
47
  type: 'regional',
80
48
  center: PHOENIX_CENTER,
81
49
  radiusMeters: COVERAGE_RADIUS_METERS,
82
- description: 'Phoenix, AZ metropolitan area',
50
+ description: 'Phoenix, AZ metropolitan area (Phoenix, Paradise Valley, Laveen)',
83
51
  },
84
52
  supportedTemporalTypes: ['historical', 'real-time'],
85
53
  supportedCategories: ['fire', 'medical'],
86
- refreshIntervalMs: 15 * 60 * 1000, // 15 minutes
54
+ refreshIntervalMs: 5 * 60 * 1000, // 5 minutes
87
55
  };
88
56
  fireConfig;
89
57
  constructor(config) {
90
58
  super(config);
91
59
  this.fireConfig = {
92
- limit: 1000,
60
+ includeEMS: true,
61
+ includeService: false,
62
+ limit: 500,
93
63
  ...config,
94
64
  };
95
65
  }
96
66
  async fetchAlerts(options) {
97
- const { location, timeRange, radiusMeters, limit, categories } = options;
67
+ const { location, timeRange, radiusMeters, categories } = options;
98
68
  const cacheKey = this.generateCacheKey(options);
99
- // Build Socrata API URL
100
- const url = this.buildApiUrl(location, timeRange, radiusMeters, limit);
69
+ const warnings = [];
101
70
  try {
102
- const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchIncidents(url), this.config.cacheTtlMs);
103
- let alerts = data.map((incident) => this.transformIncident(incident));
104
- // Filter by categories if specified
105
- if (categories && categories.length > 0) {
106
- alerts = alerts.filter((alert) => categories.includes(alert.category));
107
- }
71
+ const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchIncidents(location, timeRange, radiusMeters, categories), this.config.cacheTtlMs);
108
72
  return {
109
- alerts,
73
+ alerts: data,
110
74
  fromCache,
111
75
  cacheKey,
76
+ warnings: warnings.length > 0 ? warnings : undefined,
112
77
  };
113
78
  }
114
79
  catch (error) {
@@ -117,61 +82,82 @@ class PhoenixFirePlugin extends base_plugin_1.BasePlugin {
117
82
  }
118
83
  }
119
84
  /**
120
- * Build the Socrata API URL for Phoenix fire data.
85
+ * Fetch incidents from Phoenix Fire ArcGIS service.
121
86
  */
122
- buildApiUrl(location, timeRange, radiusMeters, limit) {
123
- // Phoenix Fire incidents dataset
124
- const baseUrl = 'https://www.phoenixopendata.com/resource/m3af-pnrm.json';
125
- const params = new URLSearchParams();
126
- // Limit results
127
- params.set('$limit', String(limit ?? this.fireConfig.limit));
128
- // Order by most recent
129
- params.set('$order', 'incident_date DESC');
130
- // Build WHERE clause
131
- const whereClauses = [];
132
- // Time filter
133
- const startDate = timeRange.start.split('T')[0];
134
- const endDate = timeRange.end.split('T')[0];
135
- whereClauses.push(`incident_date >= '${startDate}'`);
136
- whereClauses.push(`incident_date <= '${endDate}'`);
137
- // Location filter using within_circle
138
- whereClauses.push(`within_circle(geocoded_column, ${location.latitude}, ${location.longitude}, ${radiusMeters})`);
139
- params.set('$where', whereClauses.join(' AND '));
140
- // Add app token if provided
141
- if (this.fireConfig.appToken) {
142
- params.set('$$app_token', this.fireConfig.appToken);
87
+ async fetchIncidents(location, timeRange, radiusMeters, categories) {
88
+ // Phoenix Fire 30-day incident history
89
+ const baseUrl = 'https://maps.phoenix.gov/phxfire/rest/services/IncidentHistory30DayPoints/MapServer/0/query';
90
+ // Build where clause for time range using DATE format (required by this ArcGIS server)
91
+ const startDate = new Date(timeRange.start).toISOString().split('T')[0];
92
+ const endDate = new Date(timeRange.end).toISOString().split('T')[0];
93
+ // Build type filter
94
+ const typeFilters = ["TYPE='FIRE'"];
95
+ if (this.fireConfig.includeEMS) {
96
+ typeFilters.push("TYPE='EMS'");
97
+ }
98
+ if (this.fireConfig.includeService) {
99
+ typeFilters.push("TYPE='SERVICE'");
143
100
  }
144
- return `${baseUrl}?${params.toString()}`;
101
+ const params = new URLSearchParams({
102
+ where: `REPORTED >= DATE '${startDate}' AND REPORTED <= DATE '${endDate}' AND (${typeFilters.join(' OR ')})`,
103
+ outFields: '*',
104
+ f: 'geojson',
105
+ outSR: '4326',
106
+ resultRecordCount: String(this.fireConfig.limit),
107
+ orderByFields: 'REPORTED DESC',
108
+ });
109
+ const url = `${baseUrl}?${params}`;
110
+ const response = await this.fetchJson(url);
111
+ if (!response.features) {
112
+ return [];
113
+ }
114
+ // Transform and filter by location
115
+ const alerts = response.features
116
+ .filter(f => {
117
+ if (!f.geometry?.coordinates)
118
+ return false;
119
+ const [lng, lat] = f.geometry.coordinates;
120
+ const distance = this.calculateDistance(location.latitude, location.longitude, lat, lng);
121
+ if (distance > radiusMeters)
122
+ return false;
123
+ // Filter by categories if specified
124
+ if (categories && categories.length > 0) {
125
+ const alertCategory = this.mapTypeToCategory(f.properties.TYPE);
126
+ if (!categories.includes(alertCategory))
127
+ return false;
128
+ }
129
+ return true;
130
+ })
131
+ .map(f => this.transformIncident(f.properties, f.geometry.coordinates));
132
+ return alerts;
145
133
  }
146
134
  /**
147
- * Fetch incidents from the API.
135
+ * Map incident type to alert category.
148
136
  */
149
- async fetchIncidents(url) {
150
- return this.fetchJson(url);
137
+ mapTypeToCategory(type) {
138
+ if (type === 'FIRE')
139
+ return 'fire';
140
+ if (type === 'EMS')
141
+ return 'medical';
142
+ return 'fire';
151
143
  }
152
144
  /**
153
145
  * Transform a Phoenix Fire incident to our Alert format.
154
146
  */
155
- transformIncident(incident) {
156
- const callType = (incident.call_type_final ?? incident.call_type ?? 'UNKNOWN').toUpperCase();
157
- const { category, risk } = this.mapCallType(callType);
158
- // Parse coordinates
159
- const latitude = incident.latitude ? parseFloat(incident.latitude) : PHOENIX_CENTER.latitude;
160
- const longitude = incident.longitude
161
- ? parseFloat(incident.longitude)
162
- : PHOENIX_CENTER.longitude;
163
- // Build timestamp from incident_date and dispatch_time
164
- const incidentDate = incident.incident_date ?? new Date().toISOString().split('T')[0];
165
- const dispatchTime = incident.dispatch_time ?? '00:00:00';
166
- const issued = `${incidentDate}T${dispatchTime}`;
167
- // Determine if this is real-time (within last hour) or historical
168
- const issuedTime = new Date(issued).getTime();
169
- const oneHourAgo = Date.now() - 60 * 60 * 1000;
170
- const temporalType = issuedTime > oneHourAgo ? 'real-time' : 'historical';
147
+ transformIncident(incident, coordinates) {
148
+ const [longitude, latitude] = coordinates;
149
+ const { category, risk } = this.mapCategoryToRisk(incident.TYPE, incident.CATEGORY);
150
+ // Parse timestamp
151
+ const issued = new Date(incident.REPORTED).toISOString();
152
+ // Determine if real-time (within last 24 hours)
153
+ const isRecent = Date.now() - incident.REPORTED < 24 * 60 * 60 * 1000;
154
+ const temporalType = isRecent ? 'real-time' : 'historical';
155
+ // Build title
156
+ const title = this.buildTitle(incident.TYPE, incident.CATEGORY);
171
157
  return this.createAlert({
172
- id: `phoenix-fire-${incident.incident_number}`,
173
- externalId: incident.incident_number,
174
- title: this.formatCallType(callType),
158
+ id: `phoenix-fire-${incident.INCIDENT}`,
159
+ externalId: incident.INCIDENT,
160
+ title,
175
161
  description: this.buildDescription(incident),
176
162
  riskLevel: risk,
177
163
  priority: this.riskLevelToPriority(risk),
@@ -179,84 +165,97 @@ class PhoenixFirePlugin extends base_plugin_1.BasePlugin {
179
165
  temporalType,
180
166
  location: {
181
167
  point: { latitude, longitude },
182
- address: incident.address,
183
- city: incident.city ?? 'Phoenix',
168
+ city: incident.CITY === 'PHX' ? 'Phoenix' : incident.CITY,
184
169
  state: 'AZ',
185
- zipCode: incident.zip,
186
170
  },
187
171
  timestamps: {
188
172
  issued,
189
173
  eventStart: issued,
190
- eventEnd: incident.clear_time ? `${incidentDate}T${incident.clear_time}` : undefined,
191
174
  },
192
175
  metadata: {
193
- incidentNumber: incident.incident_number,
194
- callType,
195
- priority: incident.priority,
196
- station: incident.station,
197
- battalion: incident.battalion,
198
- arrivalTime: incident.arrival_time,
199
- clearTime: incident.clear_time,
176
+ incidentNumber: incident.INCIDENT,
177
+ type: incident.TYPE,
178
+ category: incident.CATEGORY,
179
+ classification: incident.CLASSIFICATION,
180
+ station: incident.STATION?.trim(),
181
+ fireDistrict: incident.FIRE_DISTRICT,
182
+ councilDistrict: incident.COUNCIL_DISTRICT,
183
+ village: incident.VILLAGE,
200
184
  },
201
185
  });
202
186
  }
203
187
  /**
204
- * Map a call type to category and risk level.
188
+ * Map category to risk level.
205
189
  */
206
- mapCallType(callType) {
207
- // Try exact match first
208
- if (CALL_TYPE_MAP[callType]) {
209
- return CALL_TYPE_MAP[callType];
190
+ mapCategoryToRisk(type, category) {
191
+ // Check specific category mapping
192
+ const upperCategory = category?.toUpperCase() ?? '';
193
+ if (CATEGORY_MAP[upperCategory]) {
194
+ return CATEGORY_MAP[upperCategory];
210
195
  }
211
- // Try partial match
212
- for (const [key, value] of Object.entries(CALL_TYPE_MAP)) {
213
- if (callType.includes(key) || key.includes(callType)) {
214
- return value;
215
- }
216
- }
217
- // Default based on common keywords
218
- if (callType.includes('FIRE') || callType.includes('SMOKE') || callType.includes('BURN')) {
196
+ // Default by type
197
+ if (type === 'FIRE') {
219
198
  return { category: 'fire', risk: 'high' };
220
199
  }
221
- if (callType.includes('MEDICAL') ||
222
- callType.includes('EMS') ||
223
- callType.includes('AMBULANCE')) {
200
+ if (type === 'EMS') {
201
+ // ALS is higher priority than BLS
202
+ if (category === 'ALS') {
203
+ return { category: 'medical', risk: 'high' };
204
+ }
224
205
  return { category: 'medical', risk: 'moderate' };
225
206
  }
226
- // Default
227
- return { category: 'fire', risk: 'moderate' };
207
+ return { category: 'fire', risk: 'low' };
228
208
  }
229
209
  /**
230
- * Format call type for display.
210
+ * Build incident title.
231
211
  */
232
- formatCallType(callType) {
233
- return callType
234
- .toLowerCase()
235
- .replace(/_/g, ' ')
236
- .split(' ')
237
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
238
- .join(' ');
212
+ buildTitle(type, category) {
213
+ const categoryLabels = {
214
+ ALS: 'Medical Emergency (ALS)',
215
+ BLS: 'Medical Call (BLS)',
216
+ CEMS: 'Community EMS',
217
+ FIRE: 'Fire Incident',
218
+ 'MISC SERVICE': 'Service Call',
219
+ SERVICE: 'Service Call',
220
+ };
221
+ if (type === 'FIRE') {
222
+ return category === 'FIRE' ? 'Fire Incident' : `Fire: ${category}`;
223
+ }
224
+ return categoryLabels[category] ?? `${type}: ${category}`;
239
225
  }
240
226
  /**
241
227
  * Build description from incident data.
242
228
  */
243
229
  buildDescription(incident) {
244
230
  const parts = [];
245
- const callType = incident.call_type_final ?? incident.call_type;
246
- if (callType) {
247
- parts.push(`Type: ${this.formatCallType(callType)}`);
231
+ parts.push(`Type: ${incident.TYPE}`);
232
+ parts.push(`Category: ${incident.CATEGORY}`);
233
+ if (incident.CLASSIFICATION) {
234
+ parts.push(`Classification: ${incident.CLASSIFICATION}`);
248
235
  }
249
- if (incident.address) {
250
- parts.push(`Location: ${incident.address}`);
236
+ if (incident.VILLAGE) {
237
+ parts.push(`Area: ${incident.VILLAGE}`);
251
238
  }
252
- if (incident.priority) {
253
- parts.push(`Priority: ${incident.priority}`);
254
- }
255
- if (incident.station) {
256
- parts.push(`Station: ${incident.station}`);
239
+ if (incident.STATION?.trim()) {
240
+ parts.push(`Station: ${incident.STATION.trim()}`);
257
241
  }
258
242
  return parts.join('\n');
259
243
  }
244
+ /**
245
+ * Calculate distance between two points in meters.
246
+ */
247
+ calculateDistance(lat1, lon1, lat2, lon2) {
248
+ const R = 6371e3;
249
+ const φ1 = (lat1 * Math.PI) / 180;
250
+ const φ2 = (lat2 * Math.PI) / 180;
251
+ const Δφ = ((lat2 - lat1) * Math.PI) / 180;
252
+ const Δλ = ((lon2 - lon1) * Math.PI) / 180;
253
+ const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
254
+ Math.cos(φ1) * Math.cos(φ2) *
255
+ Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
256
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
257
+ return R * c;
258
+ }
260
259
  }
261
260
  exports.PhoenixFirePlugin = PhoenixFirePlugin;
262
261
  //# sourceMappingURL=phoenix-fire.plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phoenix-fire.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/phoenix-fire.plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phoenix-fire.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/fire-emt/phoenix-fire.plugin.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AirNowPlugin = exports.ArizonaTrafficPlugin = exports.PhoenixEventsPlugin = exports.PulsepointPlugin = exports.PhoenixFirePlugin = exports.PhoenixPolicePlugin = exports.NWSWeatherPlugin = exports.BasePlugin = void 0;
3
+ exports.AirNowPlugin = exports.ArizonaTrafficPlugin = exports.PhoenixEventsPlugin = exports.NIFCWildfirePlugin = exports.PhoenixFirePlugin = exports.NWSWeatherPlugin = exports.BasePlugin = void 0;
4
4
  // Base plugin
5
5
  var base_plugin_1 = require("./base-plugin");
6
6
  Object.defineProperty(exports, "BasePlugin", { enumerable: true, get: function () { return base_plugin_1.BasePlugin; } });
7
7
  // Weather plugins
8
8
  var weather_1 = require("./weather");
9
9
  Object.defineProperty(exports, "NWSWeatherPlugin", { enumerable: true, get: function () { return weather_1.NWSWeatherPlugin; } });
10
- // Police/crime plugins
11
- var police_blotter_1 = require("./police-blotter");
12
- Object.defineProperty(exports, "PhoenixPolicePlugin", { enumerable: true, get: function () { return police_blotter_1.PhoenixPolicePlugin; } });
13
10
  // Fire/EMS plugins
14
11
  var fire_emt_1 = require("./fire-emt");
15
12
  Object.defineProperty(exports, "PhoenixFirePlugin", { enumerable: true, get: function () { return fire_emt_1.PhoenixFirePlugin; } });
16
- // Real-time fire/EMS plugins
17
- var pulsepoint_1 = require("./pulsepoint");
18
- Object.defineProperty(exports, "PulsepointPlugin", { enumerable: true, get: function () { return pulsepoint_1.PulsepointPlugin; } });
13
+ Object.defineProperty(exports, "NIFCWildfirePlugin", { enumerable: true, get: function () { return fire_emt_1.NIFCWildfirePlugin; } });
19
14
  // Events plugins
20
15
  var events_1 = require("./events");
21
16
  Object.defineProperty(exports, "PhoenixEventsPlugin", { enumerable: true, get: function () { return events_1.PhoenixEventsPlugin; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAGnB,kBAAkB;AAClB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAGzB,uBAAuB;AACvB,mDAAuD;AAA9C,qHAAA,mBAAmB,OAAA;AAG5B,mBAAmB;AACnB,uCAA+C;AAAtC,6GAAA,iBAAiB,OAAA;AAG1B,6BAA6B;AAC7B,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AAGzB,iBAAiB;AACjB,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAG5B,kBAAkB;AAClB,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAG7B,sBAAsB;AACtB,6CAA6C;AAApC,2GAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAGnB,kBAAkB;AAClB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAGzB,mBAAmB;AACnB,uCAAmE;AAA1D,6GAAA,iBAAiB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAG9C,iBAAiB;AACjB,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAG5B,kBAAkB;AAClB,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAG7B,sBAAsB;AACtB,6CAA6C;AAApC,2GAAA,YAAY,OAAA"}