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.
- package/dist/cjs/core/alert-aggregator.js +24 -15
- package/dist/cjs/core/alert-aggregator.js.map +1 -1
- package/dist/cjs/index.js +3 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/plugins/events/index.js +3 -1
- package/dist/cjs/plugins/events/index.js.map +1 -1
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js +235 -0
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
- package/dist/cjs/plugins/events/phoenix-events.plugin.js +24 -195
- package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/index.js +3 -1
- package/dist/cjs/plugins/fire-emt/index.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js +221 -0
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/cjs/plugins/index.js +2 -7
- package/dist/cjs/plugins/index.js.map +1 -1
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +70 -77
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/esm/core/alert-aggregator.js +24 -15
- package/dist/esm/core/alert-aggregator.js.map +1 -1
- package/dist/esm/index.js +1 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/plugins/events/index.js +1 -0
- package/dist/esm/plugins/events/index.js.map +1 -1
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js +231 -0
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js.map +1 -0
- package/dist/esm/plugins/events/phoenix-events.plugin.js +24 -195
- package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/esm/plugins/fire-emt/index.js +1 -0
- package/dist/esm/plugins/fire-emt/index.js.map +1 -1
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js +217 -0
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -0
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +153 -154
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/esm/plugins/index.js +1 -5
- package/dist/esm/plugins/index.js.map +1 -1
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +70 -77
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/types/core/alert-aggregator.d.ts +1 -1
- package/dist/types/core/alert-aggregator.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/plugins/events/index.d.ts +2 -0
- package/dist/types/plugins/events/index.d.ts.map +1 -1
- package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts +55 -0
- package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts.map +1 -0
- package/dist/types/plugins/events/phoenix-events.plugin.d.ts +5 -37
- package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/index.d.ts +2 -0
- package/dist/types/plugins/fire-emt/index.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts +43 -0
- package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts.map +1 -0
- package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts +21 -13
- package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -1
- package/dist/types/plugins/index.d.ts +2 -6
- package/dist/types/plugins/index.d.ts.map +1 -1
- package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts +5 -14
- package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -1
- package/package.json +1 -11
- package/dist/cjs/plugins/police-blotter/index.js +0 -6
- package/dist/cjs/plugins/police-blotter/index.js.map +0 -1
- package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js +0 -198
- package/dist/cjs/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
- package/dist/cjs/plugins/pulsepoint/index.js +0 -6
- package/dist/cjs/plugins/pulsepoint/index.js.map +0 -1
- package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js +0 -275
- package/dist/cjs/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
- package/dist/esm/plugins/police-blotter/index.js +0 -2
- package/dist/esm/plugins/police-blotter/index.js.map +0 -1
- package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js +0 -194
- package/dist/esm/plugins/police-blotter/phoenix-police.plugin.js.map +0 -1
- package/dist/esm/plugins/pulsepoint/index.js +0 -2
- package/dist/esm/plugins/pulsepoint/index.js.map +0 -1
- package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js +0 -271
- package/dist/esm/plugins/pulsepoint/pulsepoint.plugin.js.map +0 -1
- package/dist/types/plugins/police-blotter/index.d.ts +0 -3
- package/dist/types/plugins/police-blotter/index.d.ts.map +0 -1
- package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts +0 -49
- package/dist/types/plugins/police-blotter/phoenix-police.plugin.d.ts.map +0 -1
- package/dist/types/plugins/pulsepoint/index.d.ts +0 -3
- package/dist/types/plugins/pulsepoint/index.d.ts.map +0 -1
- package/dist/types/plugins/pulsepoint/pulsepoint.plugin.d.ts +0 -61
- 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;
|
|
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
|
|
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 +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"}
|