UNPKG

@lineai/municipal-intel

Version:

AI-first municipal data API providing natural language descriptions of building permits and planning applications from major US cities

184 lines 12.3 kB
"use strict"; /** * Municipal source registry management */ Object.defineProperty(exports, "__esModule", { value: true }); exports.sourceRegistry = exports.SourceRegistryManager = void 0; const municipal_registry_1 = require("./data/municipal-registry"); /** * Source registry manager */ class SourceRegistryManager { constructor() { this.runtimeSources = new Map(); this.registry = municipal_registry_1.builtInRegistry; } /** * Get all sources (built-in + runtime) */ getAllSources() { const allSources = []; // Add built-in sources for (const state of ['ca', 'ny', 'fl']) { const sources = this.registry.sources[state].municipalities.map(source => (Object.assign(Object.assign({}, source), { state: state.toUpperCase() }))); allSources.push(...sources); } // Add runtime sources allSources.push(...Array.from(this.runtimeSources.values())); return allSources; } /** * Get sources by state */ getSourcesByState(state) { var _a; return ((_a = this.registry.sources[state]) === null || _a === void 0 ? void 0 : _a.municipalities.map(source => (Object.assign(Object.assign({}, source), { state: state.toUpperCase() })))) || []; } /** * Get source by ID */ getSource(id) { return this.getAllSources().find(source => source.id === id); } /** * Get sources by priority */ getSourcesByPriority(priority) { return this.getAllSources().filter(source => source.priority === priority); } /** * Get sources by type */ getSourcesByType(type) { return this.getAllSources().filter(source => source.type === type); } /** * Get API sources (easiest to implement) */ getApiSources() { return this.getSourcesByType('api'); } /** * Get Socrata sources specifically */ getSocrataSources() { return this.getApiSources().filter(source => { var _a; return ((_a = source.api) === null || _a === void 0 ? void 0 : _a.type) === 'socrata'; }); } /** * Get enabled sources only */ getEnabledSources() { return this.getAllSources().filter(source => source.enabled !== false); } /** * Get sources for implementation (high priority, API-based) */ getImplementationReadySources() { return this.getAllSources().filter(source => source.priority === 'high' && source.type === 'api' && source.enabled !== false); } /** * Update source status */ updateSourceStatus(id, updates) { const source = this.getSource(id); if (source) { Object.assign(source, updates); } } /** * Get registry metadata */ getRegistryInfo() { return { version: this.registry.version, lastUpdated: this.registry.lastUpdated, totalSources: this.getAllSources().length }; } /** * Search sources by name or ID */ searchSources(query) { const lowerQuery = query.toLowerCase(); return this.getAllSources().filter(source => source.id.toLowerCase().includes(lowerQuery) || source.name.toLowerCase().includes(lowerQuery)); } /** * Get sources that cover a specific city/area */ getSourcesForLocation(city, state) { const lowerCity = city.toLowerCase(); return this.getAllSources().filter(source => { // Check if source name matches city if (source.name.toLowerCase().includes(lowerCity)) { return true; } // Check coverage area if specified if (source.coverage) { return source.coverage.some(area => area.toLowerCase().includes(lowerCity)); } // Check state if provided if (state && source.state.toLowerCase() !== state.toLowerCase()) { return false; } return false; }); } /** * Register a new source at runtime */ registerSource(source) { // Validate source has required fields if (!source.id || !source.name || !source.state || !source.type || !source.priority) { throw new Error('Source must have id, name, state, type, and priority'); } // Check for duplicate IDs if (this.getSource(source.id)) { throw new Error(`Source with ID '${source.id}' already exists`); } // Add to runtime sources this.runtimeSources.set(source.id, Object.assign(Object.assign({}, source), { enabled: source.enabled !== false // Default to enabled })); } /** * Unregister a runtime source */ unregisterSource(id) { return this.runtimeSources.delete(id); } /** * Check if a source is built-in or runtime-added */ isBuiltInSource(id) { // Check if source exists in built-in registry for (const state of ['ca', 'ny', 'fl']) { const found = this.registry.sources[state].municipalities.find(source => source.id === id); if (found) return true; } return false; } /** * Get only built-in sources */ getBuiltInSources() { const allSources = []; for (const state of ['ca', 'ny', 'fl']) { const sources = this.registry.sources[state].municipalities.map(source => (Object.assign(Object.assign({}, source), { state: state.toUpperCase() }))); allSources.push(...sources); } return allSources; } /** * Get only runtime sources */ getRuntimeSources() { return Array.from(this.runtimeSources.values()); } } exports.SourceRegistryManager = SourceRegistryManager; // Default registry instance exports.sourceRegistry = new SourceRegistryManager(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFHSCxrRUFBNEQ7QUFFNUQ7O0dBRUc7QUFDSCxNQUFhLHFCQUFxQjtJQUloQztRQUZRLG1CQUFjLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFHL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQ0FBZSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxNQUFNLFVBQVUsR0FBc0IsRUFBRSxDQUFDO1FBRXpDLHVCQUF1QjtRQUN2QixLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQVUsRUFBRTtZQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsaUNBQ3JFLE1BQU0sS0FDVCxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUMxQixDQUFDLENBQUM7WUFDSixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDN0I7UUFFRCxzQkFBc0I7UUFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsS0FBeUI7O1FBQ3pDLE9BQU8sQ0FBQSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsaUNBQzdELE1BQU0s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