local-risk-alert-feed 0.2.4 → 0.4.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.
- package/dist/cjs/core/alert-feed.js +16 -3
- package/dist/cjs/core/alert-feed.js.map +1 -1
- package/dist/cjs/core/plugin-resolver.js +93 -0
- package/dist/cjs/core/plugin-resolver.js.map +1 -1
- package/dist/cjs/plugins/air-quality/airnow.plugin.js +7 -0
- package/dist/cjs/plugins/air-quality/airnow.plugin.js.map +1 -1
- package/dist/cjs/plugins/austin/austin-crime.plugin.js +377 -0
- package/dist/cjs/plugins/austin/austin-crime.plugin.js.map +1 -0
- package/dist/cjs/plugins/austin/austin-events.plugin.js +406 -0
- package/dist/cjs/plugins/austin/austin-events.plugin.js.map +1 -0
- package/dist/cjs/plugins/austin/austin-fire.plugin.js +275 -0
- package/dist/cjs/plugins/austin/austin-fire.plugin.js.map +1 -0
- package/dist/cjs/plugins/austin/austin-traffic.plugin.js +260 -0
- package/dist/cjs/plugins/austin/austin-traffic.plugin.js.map +1 -0
- package/dist/cjs/plugins/austin/index.js +12 -0
- package/dist/cjs/plugins/austin/index.js.map +1 -0
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js +6 -0
- package/dist/cjs/plugins/events/phoenix-convention-center.plugin.js.map +1 -1
- package/dist/cjs/plugins/events/phoenix-events.plugin.js +6 -0
- package/dist/cjs/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js +6 -0
- package/dist/cjs/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -1
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js +6 -0
- package/dist/cjs/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/cjs/plugins/index.js +10 -1
- package/dist/cjs/plugins/index.js.map +1 -1
- package/dist/cjs/plugins/police/bend-police.plugin.js +309 -0
- package/dist/cjs/plugins/police/bend-police.plugin.js.map +1 -0
- package/dist/cjs/plugins/police/index.js +6 -0
- package/dist/cjs/plugins/police/index.js.map +1 -0
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js +7 -0
- package/dist/cjs/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/cjs/plugins/weather/nws-weather.plugin.js +7 -0
- package/dist/cjs/plugins/weather/nws-weather.plugin.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/esm/core/alert-feed.js +16 -3
- package/dist/esm/core/alert-feed.js.map +1 -1
- package/dist/esm/core/plugin-resolver.js +93 -0
- package/dist/esm/core/plugin-resolver.js.map +1 -1
- package/dist/esm/plugins/air-quality/airnow.plugin.js +7 -0
- package/dist/esm/plugins/air-quality/airnow.plugin.js.map +1 -1
- package/dist/esm/plugins/austin/austin-crime.plugin.js +373 -0
- package/dist/esm/plugins/austin/austin-crime.plugin.js.map +1 -0
- package/dist/esm/plugins/austin/austin-events.plugin.js +402 -0
- package/dist/esm/plugins/austin/austin-events.plugin.js.map +1 -0
- package/dist/esm/plugins/austin/austin-fire.plugin.js +271 -0
- package/dist/esm/plugins/austin/austin-fire.plugin.js.map +1 -0
- package/dist/esm/plugins/austin/austin-traffic.plugin.js +256 -0
- package/dist/esm/plugins/austin/austin-traffic.plugin.js.map +1 -0
- package/dist/esm/plugins/austin/index.js +5 -0
- package/dist/esm/plugins/austin/index.js.map +1 -0
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js +6 -0
- package/dist/esm/plugins/events/phoenix-convention-center.plugin.js.map +1 -1
- package/dist/esm/plugins/events/phoenix-events.plugin.js +6 -0
- package/dist/esm/plugins/events/phoenix-events.plugin.js.map +1 -1
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js +6 -0
- package/dist/esm/plugins/fire-emt/nifc-wildfire.plugin.js.map +1 -1
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js +6 -0
- package/dist/esm/plugins/fire-emt/phoenix-fire.plugin.js.map +1 -1
- package/dist/esm/plugins/index.js +4 -0
- package/dist/esm/plugins/index.js.map +1 -1
- package/dist/esm/plugins/police/bend-police.plugin.js +305 -0
- package/dist/esm/plugins/police/bend-police.plugin.js.map +1 -0
- package/dist/esm/plugins/police/index.js +2 -0
- package/dist/esm/plugins/police/index.js.map +1 -0
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js +7 -0
- package/dist/esm/plugins/traffic/arizona-traffic.plugin.js.map +1 -1
- package/dist/esm/plugins/weather/nws-weather.plugin.js +7 -0
- package/dist/esm/plugins/weather/nws-weather.plugin.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/types/core/alert-feed.d.ts.map +1 -1
- package/dist/types/core/plugin-resolver.d.ts +26 -1
- package/dist/types/core/plugin-resolver.d.ts.map +1 -1
- package/dist/types/plugins/air-quality/airnow.plugin.d.ts.map +1 -1
- package/dist/types/plugins/austin/austin-crime.plugin.d.ts +63 -0
- package/dist/types/plugins/austin/austin-crime.plugin.d.ts.map +1 -0
- package/dist/types/plugins/austin/austin-events.plugin.d.ts +79 -0
- package/dist/types/plugins/austin/austin-events.plugin.d.ts.map +1 -0
- package/dist/types/plugins/austin/austin-fire.plugin.d.ts +50 -0
- package/dist/types/plugins/austin/austin-fire.plugin.d.ts.map +1 -0
- package/dist/types/plugins/austin/austin-traffic.plugin.d.ts +49 -0
- package/dist/types/plugins/austin/austin-traffic.plugin.d.ts.map +1 -0
- package/dist/types/plugins/austin/index.d.ts +5 -0
- package/dist/types/plugins/austin/index.d.ts.map +1 -0
- package/dist/types/plugins/events/phoenix-convention-center.plugin.d.ts.map +1 -1
- package/dist/types/plugins/events/phoenix-events.plugin.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/nifc-wildfire.plugin.d.ts.map +1 -1
- package/dist/types/plugins/fire-emt/phoenix-fire.plugin.d.ts.map +1 -1
- package/dist/types/plugins/index.d.ts +4 -0
- package/dist/types/plugins/index.d.ts.map +1 -1
- package/dist/types/plugins/police/bend-police.plugin.d.ts +53 -0
- package/dist/types/plugins/police/bend-police.plugin.d.ts.map +1 -0
- package/dist/types/plugins/police/index.d.ts +2 -0
- package/dist/types/plugins/police/index.d.ts.map +1 -0
- package/dist/types/plugins/traffic/arizona-traffic.plugin.d.ts.map +1 -1
- package/dist/types/plugins/weather/nws-weather.plugin.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/plugin.d.ts +44 -0
- package/dist/types/types/plugin.d.ts.map +1 -1
- package/package.json +12 -3
- package/.env.example +0 -27
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AustinEventsPlugin = void 0;
|
|
4
|
+
const base_plugin_1 = require("../base-plugin");
|
|
5
|
+
/**
|
|
6
|
+
* Austin, TX center coordinates.
|
|
7
|
+
*/
|
|
8
|
+
const AUSTIN_CENTER = {
|
|
9
|
+
latitude: 30.2672,
|
|
10
|
+
longitude: -97.7431,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Coverage radius in meters (~40km covers Austin metro).
|
|
14
|
+
*/
|
|
15
|
+
const COVERAGE_RADIUS_METERS = 40_000;
|
|
16
|
+
/**
|
|
17
|
+
* Known venue coordinates.
|
|
18
|
+
*/
|
|
19
|
+
const VENUE_COORDINATES = {
|
|
20
|
+
'Palmer Events Center': { latitude: 30.2598, longitude: -97.7526 },
|
|
21
|
+
'Austin Convention Center': { latitude: 30.2636, longitude: -97.7397 },
|
|
22
|
+
'Long Center': { latitude: 30.2590, longitude: -97.7525 },
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Plugin that fetches events from Austin, Texas.
|
|
26
|
+
*
|
|
27
|
+
* Combines data from:
|
|
28
|
+
* - Austin Convention Center/Palmer Events Center calendar
|
|
29
|
+
* - Special Events Permits (includes road closures)
|
|
30
|
+
*
|
|
31
|
+
* @see https://data.austintexas.gov/City-Government/ACCD-Event-Listings/p9ma-z6y9
|
|
32
|
+
* @see https://data.austintexas.gov/Permitting/Special-Events-Permits-Current-Year/teth-r7k8
|
|
33
|
+
*/
|
|
34
|
+
class AustinEventsPlugin extends base_plugin_1.BasePlugin {
|
|
35
|
+
metadata = {
|
|
36
|
+
id: 'austin-events',
|
|
37
|
+
name: 'Austin Events',
|
|
38
|
+
version: '1.0.0',
|
|
39
|
+
description: 'Events from Austin Convention Center, Palmer Events Center, and special events permits',
|
|
40
|
+
coverage: {
|
|
41
|
+
type: 'regional',
|
|
42
|
+
center: AUSTIN_CENTER,
|
|
43
|
+
radiusMeters: COVERAGE_RADIUS_METERS,
|
|
44
|
+
description: 'Austin, TX metropolitan area',
|
|
45
|
+
},
|
|
46
|
+
temporal: {
|
|
47
|
+
supportsPast: false,
|
|
48
|
+
supportsFuture: true,
|
|
49
|
+
futureLookaheadMinutes: 43200, // 30 days
|
|
50
|
+
freshnessDescription: 'Scheduled events up to 30 days ahead',
|
|
51
|
+
},
|
|
52
|
+
supportedTemporalTypes: ['scheduled'],
|
|
53
|
+
supportedCategories: ['event'],
|
|
54
|
+
refreshIntervalMs: 60 * 60 * 1000, // 1 hour
|
|
55
|
+
};
|
|
56
|
+
eventsConfig;
|
|
57
|
+
constructor(config) {
|
|
58
|
+
super(config);
|
|
59
|
+
this.eventsConfig = {
|
|
60
|
+
includeConventionEvents: true,
|
|
61
|
+
includeSpecialEvents: true,
|
|
62
|
+
roadClosuresOnly: false,
|
|
63
|
+
...config,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async fetchAlerts(options) {
|
|
67
|
+
const { location, radiusMeters, timeRange } = options;
|
|
68
|
+
const cacheKey = this.generateCacheKey(options);
|
|
69
|
+
const warnings = [];
|
|
70
|
+
try {
|
|
71
|
+
const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchEvents(location, radiusMeters, timeRange, warnings), this.config.cacheTtlMs);
|
|
72
|
+
return {
|
|
73
|
+
alerts: data,
|
|
74
|
+
fromCache,
|
|
75
|
+
cacheKey,
|
|
76
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error('Austin Events fetch error:', error);
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Fetch events from both sources.
|
|
86
|
+
*/
|
|
87
|
+
async fetchEvents(location, radiusMeters, timeRange, warnings) {
|
|
88
|
+
const allAlerts = [];
|
|
89
|
+
// Fetch convention events
|
|
90
|
+
if (this.eventsConfig.includeConventionEvents) {
|
|
91
|
+
try {
|
|
92
|
+
const conventionAlerts = await this.fetchConventionEvents(location, radiusMeters, timeRange);
|
|
93
|
+
allAlerts.push(...conventionAlerts);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
warnings.push(`Failed to fetch convention events: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Fetch special events permits
|
|
100
|
+
if (this.eventsConfig.includeSpecialEvents) {
|
|
101
|
+
try {
|
|
102
|
+
const specialAlerts = await this.fetchSpecialEvents(location, radiusMeters, timeRange);
|
|
103
|
+
allAlerts.push(...specialAlerts);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
warnings.push(`Failed to fetch special events: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Deduplicate by title similarity
|
|
110
|
+
return this.deduplicateEvents(allAlerts);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Fetch convention center events.
|
|
114
|
+
*/
|
|
115
|
+
async fetchConventionEvents(location, radiusMeters, timeRange) {
|
|
116
|
+
const baseUrl = 'https://data.austintexas.gov/resource/p9ma-z6y9.json';
|
|
117
|
+
const startDate = new Date(timeRange.start).toISOString().split('T')[0];
|
|
118
|
+
const endDate = new Date(timeRange.end).toISOString().split('T')[0];
|
|
119
|
+
const params = new URLSearchParams({
|
|
120
|
+
$limit: '500',
|
|
121
|
+
$order: 'arrive_date ASC',
|
|
122
|
+
$where: `arrive_date >= '${startDate}' AND arrive_date <= '${endDate}'`,
|
|
123
|
+
});
|
|
124
|
+
const url = `${baseUrl}?${params}`;
|
|
125
|
+
const events = await this.fetchJson(url);
|
|
126
|
+
if (!events || !Array.isArray(events)) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
// Filter by location (based on venue)
|
|
130
|
+
const filtered = events.filter((event) => {
|
|
131
|
+
const venueCoords = VENUE_COORDINATES[event.location];
|
|
132
|
+
if (!venueCoords) {
|
|
133
|
+
// Default to Austin Convention Center if venue unknown
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
const distance = this.calculateDistance(location.latitude, location.longitude, venueCoords.latitude, venueCoords.longitude);
|
|
137
|
+
return distance <= radiusMeters;
|
|
138
|
+
});
|
|
139
|
+
return filtered.map((event) => this.transformConventionEvent(event));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Fetch special events permits.
|
|
143
|
+
*/
|
|
144
|
+
async fetchSpecialEvents(location, radiusMeters, timeRange) {
|
|
145
|
+
const baseUrl = 'https://data.austintexas.gov/resource/teth-r7k8.json';
|
|
146
|
+
const params = new URLSearchParams({
|
|
147
|
+
$limit: '500',
|
|
148
|
+
$order: 'start_date ASC',
|
|
149
|
+
});
|
|
150
|
+
// Filter by active/approved status
|
|
151
|
+
params.set('$where', "status='Active' OR status='Approved'");
|
|
152
|
+
const url = `${baseUrl}?${params}`;
|
|
153
|
+
const events = await this.fetchJson(url);
|
|
154
|
+
if (!events || !Array.isArray(events)) {
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
const startTime = new Date(timeRange.start).getTime();
|
|
158
|
+
const endTime = new Date(timeRange.end).getTime();
|
|
159
|
+
// Filter by location, time, and config
|
|
160
|
+
const filtered = events.filter((event) => {
|
|
161
|
+
// Filter by road closures only if configured
|
|
162
|
+
if (this.eventsConfig.roadClosuresOnly && !event.road_closure) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
// Filter by time range
|
|
166
|
+
const eventStart = this.parseEventDate(event.start_date);
|
|
167
|
+
const eventEnd = this.parseEventDate(event.end_date);
|
|
168
|
+
if (!eventStart)
|
|
169
|
+
return false;
|
|
170
|
+
// Event must overlap with time range
|
|
171
|
+
const eventStartTime = eventStart.getTime();
|
|
172
|
+
const eventEndTime = eventEnd?.getTime() ?? eventStartTime;
|
|
173
|
+
if (eventEndTime < startTime || eventStartTime > endTime) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
// Filter by location
|
|
177
|
+
if (event.gpslatitude && event.gpslongitude) {
|
|
178
|
+
const lat = parseFloat(event.gpslatitude);
|
|
179
|
+
const lng = parseFloat(event.gpslongitude);
|
|
180
|
+
if (!isNaN(lat) && !isNaN(lng)) {
|
|
181
|
+
const distance = this.calculateDistance(location.latitude, location.longitude, lat, lng);
|
|
182
|
+
if (distance > radiusMeters)
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
});
|
|
188
|
+
return filtered.map((event) => this.transformSpecialEvent(event));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Transform a convention event to our Alert format.
|
|
192
|
+
*/
|
|
193
|
+
transformConventionEvent(event) {
|
|
194
|
+
const venueCoords = VENUE_COORDINATES[event.location] ?? AUSTIN_CENTER;
|
|
195
|
+
return this.createAlert({
|
|
196
|
+
id: `austin-conv-${this.slugify(event.event_name)}-${event.arrive_date}`,
|
|
197
|
+
externalId: `${event.event_name}-${event.arrive_date}`,
|
|
198
|
+
title: event.event_name,
|
|
199
|
+
description: this.buildConventionDescription(event),
|
|
200
|
+
riskLevel: 'low',
|
|
201
|
+
priority: this.riskLevelToPriority('low'),
|
|
202
|
+
category: 'event',
|
|
203
|
+
temporalType: 'scheduled',
|
|
204
|
+
location: {
|
|
205
|
+
point: venueCoords,
|
|
206
|
+
address: event.location,
|
|
207
|
+
city: 'Austin',
|
|
208
|
+
state: 'TX',
|
|
209
|
+
},
|
|
210
|
+
timestamps: {
|
|
211
|
+
issued: new Date().toISOString(),
|
|
212
|
+
eventStart: event.arrive_date,
|
|
213
|
+
eventEnd: event.depart_date,
|
|
214
|
+
},
|
|
215
|
+
metadata: {
|
|
216
|
+
venue: event.location,
|
|
217
|
+
website: event.website,
|
|
218
|
+
source: 'convention-center',
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Transform a special event to our Alert format.
|
|
224
|
+
*/
|
|
225
|
+
transformSpecialEvent(event) {
|
|
226
|
+
const hasRoadClosure = !!event.road_closure;
|
|
227
|
+
const riskLevel = this.mapSpecialEventToRisk(event);
|
|
228
|
+
const lat = parseFloat(event.gpslatitude ?? '');
|
|
229
|
+
const lng = parseFloat(event.gpslongitude ?? '');
|
|
230
|
+
const point = !isNaN(lat) && !isNaN(lng)
|
|
231
|
+
? { latitude: lat, longitude: lng }
|
|
232
|
+
: AUSTIN_CENTER;
|
|
233
|
+
const eventStart = this.parseEventDate(event.start_date);
|
|
234
|
+
const eventEnd = this.parseEventDate(event.end_date);
|
|
235
|
+
return this.createAlert({
|
|
236
|
+
id: `austin-special-${event.folderrsn}`,
|
|
237
|
+
externalId: event.folderrsn,
|
|
238
|
+
title: event.foldername,
|
|
239
|
+
description: this.buildSpecialEventDescription(event),
|
|
240
|
+
riskLevel,
|
|
241
|
+
priority: this.riskLevelToPriority(riskLevel),
|
|
242
|
+
category: 'event',
|
|
243
|
+
temporalType: 'scheduled',
|
|
244
|
+
location: {
|
|
245
|
+
point,
|
|
246
|
+
address: event.road_closure,
|
|
247
|
+
city: 'Austin',
|
|
248
|
+
state: 'TX',
|
|
249
|
+
},
|
|
250
|
+
timestamps: {
|
|
251
|
+
issued: new Date().toISOString(),
|
|
252
|
+
eventStart: eventStart?.toISOString(),
|
|
253
|
+
eventEnd: eventEnd?.toISOString(),
|
|
254
|
+
},
|
|
255
|
+
metadata: {
|
|
256
|
+
permitId: event.folderrsn,
|
|
257
|
+
organization: event.event_applicant_organization,
|
|
258
|
+
tier: event.tier_type,
|
|
259
|
+
hasRoadClosure,
|
|
260
|
+
roadClosure: event.road_closure,
|
|
261
|
+
roadClosureType: event.type_of_road_closure,
|
|
262
|
+
amplifiedSound: event.amplified_sound === 'Yes',
|
|
263
|
+
alcoholServed: event.alcohol_served === 'Yes',
|
|
264
|
+
setupDate: event.event_setup,
|
|
265
|
+
teardownDate: event.event_teardown,
|
|
266
|
+
source: 'special-events-permit',
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Map special event to risk level based on impact.
|
|
272
|
+
*/
|
|
273
|
+
mapSpecialEventToRisk(event) {
|
|
274
|
+
// Full road closure = higher risk
|
|
275
|
+
if (event.type_of_road_closure?.includes('Full Road')) {
|
|
276
|
+
return 'moderate';
|
|
277
|
+
}
|
|
278
|
+
// Any road closure
|
|
279
|
+
if (event.road_closure) {
|
|
280
|
+
return 'low';
|
|
281
|
+
}
|
|
282
|
+
// Large tier events
|
|
283
|
+
if (event.tier_type === '3' || event.tier_type === '4') {
|
|
284
|
+
return 'low';
|
|
285
|
+
}
|
|
286
|
+
return 'low';
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Parse event date string.
|
|
290
|
+
* Handles formats like "September 27, 2025 10:00"
|
|
291
|
+
*/
|
|
292
|
+
parseEventDate(dateStr) {
|
|
293
|
+
if (!dateStr)
|
|
294
|
+
return null;
|
|
295
|
+
try {
|
|
296
|
+
// Try standard ISO format first
|
|
297
|
+
const isoDate = new Date(dateStr);
|
|
298
|
+
if (!isNaN(isoDate.getTime())) {
|
|
299
|
+
return isoDate;
|
|
300
|
+
}
|
|
301
|
+
// Try "Month Day, Year HH:MM" format
|
|
302
|
+
const match = dateStr.match(/(\w+)\s+(\d+),\s+(\d+)\s+(\d+):(\d+)/);
|
|
303
|
+
if (match) {
|
|
304
|
+
const [, month, day, year, hour, minute] = match;
|
|
305
|
+
const monthIndex = new Date(`${month} 1, 2000`).getMonth();
|
|
306
|
+
return new Date(parseInt(year), monthIndex, parseInt(day), parseInt(hour), parseInt(minute));
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Build description for convention event.
|
|
316
|
+
*/
|
|
317
|
+
buildConventionDescription(event) {
|
|
318
|
+
const parts = [];
|
|
319
|
+
parts.push(`Event: ${event.event_name}`);
|
|
320
|
+
parts.push(`Venue: ${event.location}`);
|
|
321
|
+
parts.push(`Dates: ${event.arrive_date} to ${event.depart_date}`);
|
|
322
|
+
if (event.website) {
|
|
323
|
+
parts.push(`Website: ${event.website}`);
|
|
324
|
+
}
|
|
325
|
+
return parts.join('\n');
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Build description for special event.
|
|
329
|
+
*/
|
|
330
|
+
buildSpecialEventDescription(event) {
|
|
331
|
+
const parts = [];
|
|
332
|
+
parts.push(`Event: ${event.foldername}`);
|
|
333
|
+
if (event.event_applicant_organization) {
|
|
334
|
+
parts.push(`Organization: ${event.event_applicant_organization}`);
|
|
335
|
+
}
|
|
336
|
+
parts.push(`Dates: ${event.start_date} to ${event.end_date}`);
|
|
337
|
+
if (event.road_closure) {
|
|
338
|
+
parts.push(`Road Closure: ${event.road_closure}`);
|
|
339
|
+
if (event.type_of_road_closure) {
|
|
340
|
+
parts.push(`Closure Type: ${event.type_of_road_closure}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (event.amplified_sound === 'Yes') {
|
|
344
|
+
parts.push('Amplified Sound: Yes');
|
|
345
|
+
}
|
|
346
|
+
if (event.event_setup) {
|
|
347
|
+
parts.push(`Setup: ${event.event_setup}`);
|
|
348
|
+
}
|
|
349
|
+
if (event.event_teardown) {
|
|
350
|
+
parts.push(`Teardown: ${event.event_teardown}`);
|
|
351
|
+
}
|
|
352
|
+
return parts.join('\n');
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Create URL-safe slug from text.
|
|
356
|
+
*/
|
|
357
|
+
slugify(text) {
|
|
358
|
+
return text
|
|
359
|
+
.toLowerCase()
|
|
360
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
361
|
+
.replace(/^-|-$/g, '')
|
|
362
|
+
.substring(0, 50);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Deduplicate events by similar titles.
|
|
366
|
+
*/
|
|
367
|
+
deduplicateEvents(alerts) {
|
|
368
|
+
const seen = new Map();
|
|
369
|
+
for (const alert of alerts) {
|
|
370
|
+
// Create a key based on normalized title and date
|
|
371
|
+
const dateKey = alert.timestamps.eventStart?.split('T')[0] ?? '';
|
|
372
|
+
const titleKey = alert.title.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
373
|
+
const key = `${titleKey}-${dateKey}`;
|
|
374
|
+
// Keep the one with more metadata (likely the permit with road closure info)
|
|
375
|
+
const existing = seen.get(key);
|
|
376
|
+
if (!existing) {
|
|
377
|
+
seen.set(key, alert);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
const existingMeta = Object.keys(existing.metadata ?? {}).length;
|
|
381
|
+
const currentMeta = Object.keys(alert.metadata ?? {}).length;
|
|
382
|
+
if (currentMeta > existingMeta) {
|
|
383
|
+
seen.set(key, alert);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return Array.from(seen.values());
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Calculate distance between two points in meters.
|
|
391
|
+
*/
|
|
392
|
+
calculateDistance(lat1, lon1, lat2, lon2) {
|
|
393
|
+
const R = 6371e3;
|
|
394
|
+
const φ1 = (lat1 * Math.PI) / 180;
|
|
395
|
+
const φ2 = (lat2 * Math.PI) / 180;
|
|
396
|
+
const Δφ = ((lat2 - lat1) * Math.PI) / 180;
|
|
397
|
+
const Δλ = ((lon2 - lon1) * Math.PI) / 180;
|
|
398
|
+
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
|
|
399
|
+
Math.cos(φ1) * Math.cos(φ2) *
|
|
400
|
+
Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
|
|
401
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
402
|
+
return R * c;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
exports.AustinEventsPlugin = AustinEventsPlugin;
|
|
406
|
+
//# sourceMappingURL=austin-events.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"austin-events.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/austin/austin-events.plugin.ts"],"names":[],"mappings":"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"}
|