UNPKG

@lineai/municipal-intel

Version:

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

75 lines 4.82 kB
/** * Municipal data clients */ export * from './base-client'; export * from './socrata'; import { SocrataClient } from './socrata'; /** * Factory to create appropriate client for a municipal source */ export class ClientFactory { config; constructor(config = {}) { this.config = config; } /** * Create a client for the given municipal source */ createClient(source, params) { const baseConfig = { source, timeout: this.config.timeout, retries: this.config.retries, debug: this.config.debug }; switch (source.type) { case 'api': return this.createApiClient(baseConfig, params); case 'portal': // TODO: Implement portal clients throw new Error(`Portal clients not yet implemented for ${source.id}`); case 'scraping': // TODO: Implement scraping clients throw new Error(`Scraping clients not yet implemented for ${source.id}`); default: throw new Error(`Unknown source type: ${source.type}`); } } /** * Create API client based on API type */ createApiClient(baseConfig, params) { if (!baseConfig.source.api) { throw new Error(`API configuration missing for ${baseConfig.source.id}`); } switch (baseConfig.source.api.type) { case 'socrata': const socrataConfig = { ...baseConfig, appToken: this.config.socrataToken }; return new SocrataClient(socrataConfig, params); case 'arcgis': // TODO: Implement ArcGIS client throw new Error(`ArcGIS clients not yet implemented`); case 'custom': // TODO: Implement custom API clients throw new Error(`Custom API clients not yet implemented for ${baseConfig.source.id}`); default: throw new Error(`Unknown API type: ${baseConfig.source.api.type}`); } } /** * Update configuration */ updateConfig(config) { this.config = { ...this.config, ...config }; } /** * Set universal Socrata token */ setSocrataToken(token) { this.config.socrataToken = token; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsV0FBVyxDQUFDO0FBSTFCLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0sV0FBVyxDQUFDO0FBZS9EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDaEIsTUFBTSxDQUFzQjtJQUVwQyxZQUFZLFNBQThCLEVBQUU7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQXVCLEVBQUUsTUFBNkI7UUFDakUsTUFBTSxVQUFVLEdBQXFCO1lBQ25DLE1BQU07WUFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztTQUN6QixDQUFDO1FBRUYsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWxELEtBQUssUUFBUTtnQkFDWCxpQ0FBaUM7Z0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXpFLEtBQUssVUFBVTtnQkFDYixtQ0FBbUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNFO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLFVBQTRCLEVBQUUsTUFBNkI7UUFDakYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMxRTtRQUVELFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2xDLEtBQUssU0FBUztnQkFDWixNQUFNLGFBQWEsR0FBd0I7b0JBQ3pDLEdBQUcsVUFBVTtvQkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO2lCQUNuQyxDQUFDO2dCQUNGLE9BQU8sSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWxELEtBQUssUUFBUTtnQkFDWCxnQ0FBZ0M7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUV4RCxLQUFLLFFBQVE7Z0JBQ1gscUNBQXFDO2dCQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEY7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUFvQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7Q0FDRiJ9