local-risk-alert-feed 0.1.0 → 0.2.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-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
|
@@ -44,11 +44,13 @@ class AlertAggregator {
|
|
|
44
44
|
/**
|
|
45
45
|
* Remove duplicate alerts based on ID and source.
|
|
46
46
|
*
|
|
47
|
-
* If two alerts have the same external ID from the same source,
|
|
47
|
+
* If two alerts have the same ID or the same external ID from the same source,
|
|
48
48
|
* keep the one with the most recent issued timestamp.
|
|
49
49
|
*/
|
|
50
50
|
deduplicate(alerts) {
|
|
51
|
-
|
|
51
|
+
// Use two maps: one for lookup and one for tracking unique alerts
|
|
52
|
+
const seenByPrimaryKey = new Map();
|
|
53
|
+
const seenBySecondaryKey = new Map(); // secondary key -> primary key
|
|
52
54
|
for (const alert of alerts) {
|
|
53
55
|
// Primary dedup key: alert ID
|
|
54
56
|
const primaryKey = alert.id;
|
|
@@ -56,29 +58,36 @@ class AlertAggregator {
|
|
|
56
58
|
const secondaryKey = alert.source.externalId
|
|
57
59
|
? `${alert.source.pluginId}:${alert.source.externalId}`
|
|
58
60
|
: null;
|
|
61
|
+
// Check if we've seen this secondary key before
|
|
62
|
+
if (secondaryKey) {
|
|
63
|
+
const existingPrimaryKey = seenBySecondaryKey.get(secondaryKey);
|
|
64
|
+
if (existingPrimaryKey) {
|
|
65
|
+
const existing = seenByPrimaryKey.get(existingPrimaryKey);
|
|
66
|
+
if (existing && new Date(alert.timestamps.issued) > new Date(existing.timestamps.issued)) {
|
|
67
|
+
// Replace with newer alert
|
|
68
|
+
seenByPrimaryKey.delete(existingPrimaryKey);
|
|
69
|
+
seenByPrimaryKey.set(primaryKey, alert);
|
|
70
|
+
seenBySecondaryKey.set(secondaryKey, primaryKey);
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
59
75
|
// Check primary key
|
|
60
|
-
const existingPrimary =
|
|
76
|
+
const existingPrimary = seenByPrimaryKey.get(primaryKey);
|
|
61
77
|
if (existingPrimary) {
|
|
62
78
|
// Keep the more recent one
|
|
63
79
|
if (new Date(alert.timestamps.issued) > new Date(existingPrimary.timestamps.issued)) {
|
|
64
|
-
|
|
80
|
+
seenByPrimaryKey.set(primaryKey, alert);
|
|
65
81
|
}
|
|
66
82
|
continue;
|
|
67
83
|
}
|
|
68
|
-
//
|
|
84
|
+
// New alert - store it
|
|
85
|
+
seenByPrimaryKey.set(primaryKey, alert);
|
|
69
86
|
if (secondaryKey) {
|
|
70
|
-
|
|
71
|
-
if (existingSecondary) {
|
|
72
|
-
if (new Date(alert.timestamps.issued) > new Date(existingSecondary.timestamps.issued)) {
|
|
73
|
-
seen.set(secondaryKey, alert);
|
|
74
|
-
}
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
seen.set(secondaryKey, alert);
|
|
87
|
+
seenBySecondaryKey.set(secondaryKey, primaryKey);
|
|
78
88
|
}
|
|
79
|
-
seen.set(primaryKey, alert);
|
|
80
89
|
}
|
|
81
|
-
return Array.from(
|
|
90
|
+
return Array.from(seenByPrimaryKey.values());
|
|
82
91
|
}
|
|
83
92
|
/**
|
|
84
93
|
* Filter alerts by minimum risk level.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-aggregator.js","sourceRoot":"","sources":["../../../src/core/alert-aggregator.ts"],"names":[],"mappings":";;;AACA,oCAA6C;AAC7C,gCAA2C;AA+B3C;;GAEG;AACH,MAAa,eAAe;IAC1B;;;;;;;;OAQG;IACH,SAAS,CAAC,SAAoB,EAAE,UAA4B,EAAE;QAC5D,qBAAqB;QACrB,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAE9B,cAAc;QACd,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,uBAAuB;QACvB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC/E,CAAC;QAED,kDAAkD;QAClD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;QAE1D,cAAc;QACd,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YACnD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAe;QACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"alert-aggregator.js","sourceRoot":"","sources":["../../../src/core/alert-aggregator.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.toCSV = exports.parseCSV = exports.AirNowPlugin = exports.ArizonaTrafficPlugin = exports.PhoenixEventsPlugin =
|
|
3
|
+
exports.NIFCWildfirePlugin = exports.PhoenixFirePlugin = exports.NWSWeatherPlugin = exports.BasePlugin = exports.TimeoutError = exports.sleep = exports.withTimeout = exports.withRetry = exports.generateCacheKey = exports.DynamoDBCacheProvider = exports.VercelKVCacheProvider = exports.InMemoryCacheProvider = exports.getBoundingBoxForRadius = exports.doCirclesOverlap = exports.isPointInBoundingBox = exports.isPointInCircle = exports.isPointInRadius = exports.destinationPoint = exports.calculateBearing = exports.calculateDistance = exports.haversineDistance = exports.FetchError = exports.ValidationError = exports.PluginNotFoundError = exports.DuplicatePluginError = exports.PluginTimeoutError = exports.PluginFetchError = exports.PluginInitializationError = exports.PluginError = exports.transformRequestToQuery = exports.TimeRangeSchema = exports.GeoPointSchema = exports.AlertQueryRequestSchema = exports.AlertQuerySchema = exports.AlertSchema = exports.DEFAULT_CONFIG = exports.MAX_QUERY_LIMIT = exports.DEFAULT_QUERY_LIMIT = exports.DEFAULT_QUERY_RADIUS_METERS = exports.TIME_RANGE_PRESETS = exports.ALERT_TEMPORAL_TYPES = exports.ALERT_CATEGORIES = exports.RISK_LEVELS = exports.RISK_LEVEL_VALUES = exports.normalizeTimeRange = exports.resolveTimeRange = exports.AlertAggregator = exports.PluginResolver = exports.PluginRegistry = exports.AlertFeed = void 0;
|
|
4
|
+
exports.toCSV = exports.parseCSV = exports.AirNowPlugin = exports.ArizonaTrafficPlugin = exports.PhoenixEventsPlugin = void 0;
|
|
5
5
|
// Main AlertFeed class
|
|
6
6
|
var core_1 = require("./core");
|
|
7
7
|
Object.defineProperty(exports, "AlertFeed", { enumerable: true, get: function () { return core_1.AlertFeed; } });
|
|
@@ -71,12 +71,9 @@ Object.defineProperty(exports, "BasePlugin", { enumerable: true, get: function (
|
|
|
71
71
|
// Built-in plugins
|
|
72
72
|
var weather_1 = require("./plugins/weather");
|
|
73
73
|
Object.defineProperty(exports, "NWSWeatherPlugin", { enumerable: true, get: function () { return weather_1.NWSWeatherPlugin; } });
|
|
74
|
-
var police_blotter_1 = require("./plugins/police-blotter");
|
|
75
|
-
Object.defineProperty(exports, "PhoenixPolicePlugin", { enumerable: true, get: function () { return police_blotter_1.PhoenixPolicePlugin; } });
|
|
76
74
|
var fire_emt_1 = require("./plugins/fire-emt");
|
|
77
75
|
Object.defineProperty(exports, "PhoenixFirePlugin", { enumerable: true, get: function () { return fire_emt_1.PhoenixFirePlugin; } });
|
|
78
|
-
|
|
79
|
-
Object.defineProperty(exports, "PulsepointPlugin", { enumerable: true, get: function () { return pulsepoint_1.PulsepointPlugin; } });
|
|
76
|
+
Object.defineProperty(exports, "NIFCWildfirePlugin", { enumerable: true, get: function () { return fire_emt_1.NIFCWildfirePlugin; } });
|
|
80
77
|
var events_1 = require("./plugins/events");
|
|
81
78
|
Object.defineProperty(exports, "PhoenixEventsPlugin", { enumerable: true, get: function () { return events_1.PhoenixEventsPlugin; } });
|
|
82
79
|
var traffic_1 = require("./plugins/traffic");
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,uBAAuB;AACvB,+BAAmC;AAA1B,iGAAA,SAAS,OAAA;AAElB,kBAAkB;AAClB,+BAAyE;AAAhE,sGAAA,cAAc,OAAA;AAAE,sGAAA,cAAc,OAAA;AAAE,uGAAA,eAAe,OAAA;AACxD,+BAA8D;AAArD,wGAAA,gBAAgB,OAAA;AAAE,0GAAA,kBAAkB,OAAA;AAwC7C,iBAAiB;AACjB,iCAUiB;AATf,0GAAA,iBAAiB,OAAA;AACjB,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,6GAAA,oBAAoB,OAAA;AACpB,2GAAA,kBAAkB,OAAA;AAClB,oHAAA,2BAA2B,OAAA;AAC3B,4GAAA,mBAAmB,OAAA;AACnB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AAGhB,UAAU;AACV,qCAOmB;AANjB,sGAAA,WAAW,OAAA;AACX,2GAAA,gBAAgB,OAAA;AAChB,kHAAA,uBAAuB,OAAA;AACvB,yGAAA,cAAc,OAAA;AACd,0GAAA,eAAe,OAAA;AACf,kHAAA,uBAAuB,OAAA;AAGzB,SAAS;AACT,mCASkB;AARhB,qGAAA,WAAW,OAAA;AACX,mHAAA,yBAAyB,OAAA;AACzB,0GAAA,gBAAgB,OAAA;AAChB,4GAAA,kBAAkB,OAAA;AAClB,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AAIZ,gBAAgB;AAChB,6BAUe;AATb,wGAAA,iBAAiB,OAAA;AACjB,wGAAA,iBAAiB,OAAA;AACjB,uGAAA,gBAAgB,OAAA;AAChB,uGAAA,gBAAgB,OAAA;AAChB,sGAAA,eAAe,OAAA;AACf,sGAAA,eAAe,OAAA;AACf,2GAAA,oBAAoB,OAAA;AACpB,uGAAA,gBAAgB,OAAA;AAChB,8GAAA,uBAAuB,OAAA;AAGzB,kBAAkB;AAClB,iCAKiB;AAJf,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,yGAAA,gBAAgB,OAAA;AAGlB,oBAAoB;AACpB,iCAAsE;AAA7D,kGAAA,SAAS,OAAA;AAAE,oGAAA,WAAW,OAAA;AAAE,8FAAA,KAAK,OAAA;AAAE,qGAAA,YAAY,OAAA;AAGpD,0CAA0C;AAC1C,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AAGnB,mBAAmB;AACnB,6CAAqD;AAA5C,2GAAA,gBAAgB,OAAA;AAGzB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,uBAAuB;AACvB,+BAAmC;AAA1B,iGAAA,SAAS,OAAA;AAElB,kBAAkB;AAClB,+BAAyE;AAAhE,sGAAA,cAAc,OAAA;AAAE,sGAAA,cAAc,OAAA;AAAE,uGAAA,eAAe,OAAA;AACxD,+BAA8D;AAArD,wGAAA,gBAAgB,OAAA;AAAE,0GAAA,kBAAkB,OAAA;AAwC7C,iBAAiB;AACjB,iCAUiB;AATf,0GAAA,iBAAiB,OAAA;AACjB,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,6GAAA,oBAAoB,OAAA;AACpB,2GAAA,kBAAkB,OAAA;AAClB,oHAAA,2BAA2B,OAAA;AAC3B,4GAAA,mBAAmB,OAAA;AACnB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AAGhB,UAAU;AACV,qCAOmB;AANjB,sGAAA,WAAW,OAAA;AACX,2GAAA,gBAAgB,OAAA;AAChB,kHAAA,uBAAuB,OAAA;AACvB,yGAAA,cAAc,OAAA;AACd,0GAAA,eAAe,OAAA;AACf,kHAAA,uBAAuB,OAAA;AAGzB,SAAS;AACT,mCASkB;AARhB,qGAAA,WAAW,OAAA;AACX,mHAAA,yBAAyB,OAAA;AACzB,0GAAA,gBAAgB,OAAA;AAChB,4GAAA,kBAAkB,OAAA;AAClB,8GAAA,oBAAoB,OAAA;AACpB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AAIZ,gBAAgB;AAChB,6BAUe;AATb,wGAAA,iBAAiB,OAAA;AACjB,wGAAA,iBAAiB,OAAA;AACjB,uGAAA,gBAAgB,OAAA;AAChB,uGAAA,gBAAgB,OAAA;AAChB,sGAAA,eAAe,OAAA;AACf,sGAAA,eAAe,OAAA;AACf,2GAAA,oBAAoB,OAAA;AACpB,uGAAA,gBAAgB,OAAA;AAChB,8GAAA,uBAAuB,OAAA;AAGzB,kBAAkB;AAClB,iCAKiB;AAJf,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AACrB,yGAAA,gBAAgB,OAAA;AAGlB,oBAAoB;AACpB,iCAAsE;AAA7D,kGAAA,SAAS,OAAA;AAAE,oGAAA,WAAW,OAAA;AAAE,8FAAA,KAAK,OAAA;AAAE,qGAAA,YAAY,OAAA;AAGpD,0CAA0C;AAC1C,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AAGnB,mBAAmB;AACnB,6CAAqD;AAA5C,2GAAA,gBAAgB,OAAA;AAGzB,+CAA2E;AAAlE,6GAAA,iBAAiB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAG9C,2CAAuD;AAA9C,6GAAA,mBAAmB,OAAA;AAG5B,6CAAyD;AAAhD,+GAAA,oBAAoB,OAAA;AAG7B,qDAAqD;AAA5C,2GAAA,YAAY,OAAA;AAGrB,2DAA2D;AAC3D,iCAA0C;AAAjC,iGAAA,QAAQ,OAAA;AAAE,8FAAA,KAAK,OAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PhoenixEventsPlugin = void 0;
|
|
3
|
+
exports.PhoenixConventionCenterPlugin = exports.PhoenixEventsPlugin = void 0;
|
|
4
4
|
var phoenix_events_plugin_1 = require("./phoenix-events.plugin");
|
|
5
5
|
Object.defineProperty(exports, "PhoenixEventsPlugin", { enumerable: true, get: function () { return phoenix_events_plugin_1.PhoenixEventsPlugin; } });
|
|
6
|
+
var phoenix_convention_center_plugin_1 = require("./phoenix-convention-center.plugin");
|
|
7
|
+
Object.defineProperty(exports, "PhoenixConventionCenterPlugin", { enumerable: true, get: function () { return phoenix_convention_center_plugin_1.PhoenixConventionCenterPlugin; } });
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/events/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/events/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAG5B,uFAAmF;AAA1E,iJAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PhoenixConventionCenterPlugin = void 0;
|
|
4
|
+
const base_plugin_1 = require("../base-plugin");
|
|
5
|
+
/**
|
|
6
|
+
* Phoenix Convention Center coordinates.
|
|
7
|
+
*/
|
|
8
|
+
const CONVENTION_CENTER_LOCATION = {
|
|
9
|
+
latitude: 33.4419,
|
|
10
|
+
longitude: -112.0711,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Venue locations for different event types.
|
|
14
|
+
*/
|
|
15
|
+
const VENUE_LOCATIONS = {
|
|
16
|
+
B: { name: 'Phoenix Convention Center', latitude: 33.4419, longitude: -112.0711 },
|
|
17
|
+
O: { name: 'Orpheum Theatre', latitude: 33.4461, longitude: -112.0710 },
|
|
18
|
+
S: { name: 'Symphony Hall', latitude: 33.4459, longitude: -112.0712 },
|
|
19
|
+
M: { name: 'Phoenix Convention Center', latitude: 33.4419, longitude: -112.0711 },
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Coverage radius in meters (downtown Phoenix area).
|
|
23
|
+
*/
|
|
24
|
+
const COVERAGE_RADIUS_METERS = 5_000;
|
|
25
|
+
/**
|
|
26
|
+
* Keywords that indicate potentially high-impact events.
|
|
27
|
+
*/
|
|
28
|
+
const HIGH_IMPACT_KEYWORDS = [
|
|
29
|
+
'final four',
|
|
30
|
+
'super bowl',
|
|
31
|
+
'championship',
|
|
32
|
+
'convention',
|
|
33
|
+
'expo',
|
|
34
|
+
'conference',
|
|
35
|
+
'festival',
|
|
36
|
+
'marathon',
|
|
37
|
+
'parade',
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Plugin that fetches events from Phoenix Convention Center, Orpheum Theatre, and Symphony Hall.
|
|
41
|
+
*
|
|
42
|
+
* Uses the Ungerboeck event management system API.
|
|
43
|
+
*
|
|
44
|
+
* @see https://www.phoenixconventioncenter.com/events
|
|
45
|
+
*/
|
|
46
|
+
class PhoenixConventionCenterPlugin extends base_plugin_1.BasePlugin {
|
|
47
|
+
metadata = {
|
|
48
|
+
id: 'phoenix-convention-center',
|
|
49
|
+
name: 'Phoenix Convention Center',
|
|
50
|
+
version: '1.0.0',
|
|
51
|
+
description: 'Events from Phoenix Convention Center, Orpheum Theatre, and Symphony Hall',
|
|
52
|
+
coverage: {
|
|
53
|
+
type: 'regional',
|
|
54
|
+
center: CONVENTION_CENTER_LOCATION,
|
|
55
|
+
radiusMeters: COVERAGE_RADIUS_METERS,
|
|
56
|
+
description: 'Downtown Phoenix venues (Convention Center, Orpheum, Symphony Hall)',
|
|
57
|
+
},
|
|
58
|
+
supportedTemporalTypes: ['scheduled'],
|
|
59
|
+
supportedCategories: ['event'],
|
|
60
|
+
refreshIntervalMs: 60 * 60 * 1000, // 1 hour
|
|
61
|
+
};
|
|
62
|
+
pluginConfig;
|
|
63
|
+
constructor(config) {
|
|
64
|
+
super(config);
|
|
65
|
+
this.pluginConfig = {
|
|
66
|
+
includeOrpheum: true,
|
|
67
|
+
includeSymphonyHall: true,
|
|
68
|
+
limit: 100,
|
|
69
|
+
...config,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async fetchAlerts(options) {
|
|
73
|
+
const cacheKey = this.generateCacheKey(options);
|
|
74
|
+
try {
|
|
75
|
+
const { data, fromCache } = await this.getCachedOrFetch(cacheKey, () => this.fetchEvents(options), this.config.cacheTtlMs);
|
|
76
|
+
return {
|
|
77
|
+
alerts: data,
|
|
78
|
+
fromCache,
|
|
79
|
+
cacheKey,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error('Phoenix Convention Center fetch error:', error);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Fetch events from the convention center API.
|
|
89
|
+
*/
|
|
90
|
+
async fetchEvents(options) {
|
|
91
|
+
const { timeRange } = options;
|
|
92
|
+
// Build API URL with start date
|
|
93
|
+
const startDate = timeRange.start.split('T')[0];
|
|
94
|
+
const url = `https://phoenixcc-web.ungerboeck.com/Digital_Services/api/events/getall?orgcode=01&start=${startDate}`;
|
|
95
|
+
const events = await this.fetchJson(url);
|
|
96
|
+
if (!Array.isArray(events)) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
// Filter and transform events
|
|
100
|
+
const endDate = new Date(timeRange.end);
|
|
101
|
+
const alerts = [];
|
|
102
|
+
for (const event of events) {
|
|
103
|
+
// Filter by event type
|
|
104
|
+
if (!this.shouldIncludeEvent(event)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Filter by time range
|
|
108
|
+
const eventStart = new Date(event.start);
|
|
109
|
+
if (eventStart > endDate) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
alerts.push(this.transformEvent(event));
|
|
113
|
+
if (alerts.length >= this.pluginConfig.limit) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return alerts;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if an event should be included based on configuration.
|
|
121
|
+
*/
|
|
122
|
+
shouldIncludeEvent(event) {
|
|
123
|
+
const eventType = event.event_type;
|
|
124
|
+
// Always include convention center events
|
|
125
|
+
if (eventType === 'B' || eventType === 'M') {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
// Check Orpheum
|
|
129
|
+
if (eventType === 'O' && !this.pluginConfig.includeOrpheum) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// Check Symphony Hall
|
|
133
|
+
if (eventType === 'S' && !this.pluginConfig.includeSymphonyHall) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Transform a convention center event to our Alert format.
|
|
140
|
+
*/
|
|
141
|
+
transformEvent(event) {
|
|
142
|
+
const venue = this.getVenue(event.event_type);
|
|
143
|
+
const riskLevel = this.assessEventRisk(event);
|
|
144
|
+
return this.createAlert({
|
|
145
|
+
id: `pcc-${event.id}`,
|
|
146
|
+
externalId: event.id,
|
|
147
|
+
title: this.cleanTitle(event.title),
|
|
148
|
+
description: this.buildDescription(event, venue),
|
|
149
|
+
riskLevel,
|
|
150
|
+
priority: this.riskLevelToPriority(riskLevel),
|
|
151
|
+
category: 'event',
|
|
152
|
+
temporalType: 'scheduled',
|
|
153
|
+
location: {
|
|
154
|
+
point: { latitude: venue.latitude, longitude: venue.longitude },
|
|
155
|
+
address: venue.name,
|
|
156
|
+
city: 'Phoenix',
|
|
157
|
+
state: 'AZ',
|
|
158
|
+
},
|
|
159
|
+
timestamps: {
|
|
160
|
+
issued: new Date().toISOString(),
|
|
161
|
+
eventStart: event.start,
|
|
162
|
+
eventEnd: event.end,
|
|
163
|
+
},
|
|
164
|
+
url: event.event_url || undefined,
|
|
165
|
+
metadata: {
|
|
166
|
+
source: 'phoenix-convention-center',
|
|
167
|
+
venue: venue.name,
|
|
168
|
+
eventType: event.event_type,
|
|
169
|
+
allDay: event.allDay === 'True',
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get venue information from event type.
|
|
175
|
+
*/
|
|
176
|
+
getVenue(eventType) {
|
|
177
|
+
return VENUE_LOCATIONS[eventType] ?? VENUE_LOCATIONS.B;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Clean up event title.
|
|
181
|
+
*/
|
|
182
|
+
cleanTitle(title) {
|
|
183
|
+
// Remove common suffixes and clean up
|
|
184
|
+
return title
|
|
185
|
+
.replace(/\s*\(Cancelling\)\s*/gi, '')
|
|
186
|
+
.replace(/\s*\(Cancelled\)\s*/gi, '')
|
|
187
|
+
.replace(/^FOTOT:\s*/i, '') // Remove internal prefix
|
|
188
|
+
.trim();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Assess risk level for an event based on expected impact.
|
|
192
|
+
*/
|
|
193
|
+
assessEventRisk(event) {
|
|
194
|
+
const title = event.title.toLowerCase();
|
|
195
|
+
const description = (event.event_notes_description || '').toLowerCase();
|
|
196
|
+
const combined = `${title} ${description}`;
|
|
197
|
+
// Check for high-impact keywords
|
|
198
|
+
for (const keyword of HIGH_IMPACT_KEYWORDS) {
|
|
199
|
+
if (combined.includes(keyword)) {
|
|
200
|
+
return 'moderate';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Convention center events (type B) tend to be larger
|
|
204
|
+
if (event.event_type === 'B') {
|
|
205
|
+
return 'moderate';
|
|
206
|
+
}
|
|
207
|
+
// Multi-day events suggest larger gatherings
|
|
208
|
+
if (event.start_date_formatted !== event.end_date_formatted) {
|
|
209
|
+
return 'moderate';
|
|
210
|
+
}
|
|
211
|
+
return 'low';
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Build description from event data.
|
|
215
|
+
*/
|
|
216
|
+
buildDescription(event, venue) {
|
|
217
|
+
const parts = [];
|
|
218
|
+
parts.push(`Venue: ${venue.name}`);
|
|
219
|
+
if (event.start_date_formatted === event.end_date_formatted) {
|
|
220
|
+
parts.push(`Date: ${event.start_date_week_formatted}, ${event.start_date_formatted}`);
|
|
221
|
+
if (event.allDay !== 'True') {
|
|
222
|
+
parts.push(`Time: ${event.start_time} - ${event.end_time}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
parts.push(`Dates: ${event.start_date_formatted} - ${event.end_date_formatted}`);
|
|
227
|
+
}
|
|
228
|
+
if (event.event_notes_description) {
|
|
229
|
+
parts.push(`\n${event.event_notes_description}`);
|
|
230
|
+
}
|
|
231
|
+
return parts.join('\n');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.PhoenixConventionCenterPlugin = PhoenixConventionCenterPlugin;
|
|
235
|
+
//# sourceMappingURL=phoenix-convention-center.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phoenix-convention-center.plugin.js","sourceRoot":"","sources":["../../../../src/plugins/events/phoenix-convention-center.plugin.ts"],"names":[],"mappings":"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"}
|