@lineai/municipal-intel
Version:
AI-first municipal data API providing natural language descriptions of building permits and planning applications from major US cities
89 lines • 5.59 kB
JavaScript
;
/**
* Municipal data clients
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClientFactory = void 0;
__exportStar(require("./base-client"), exports);
__exportStar(require("./socrata"), exports);
const socrata_1 = require("./socrata");
/**
* Factory to create appropriate client for a municipal source
*/
class ClientFactory {
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 = Object.assign(Object.assign({}, baseConfig), { appToken: this.config.socrataToken });
return new socrata_1.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 = Object.assign(Object.assign({}, this.config), config);
}
/**
* Set universal Socrata token
*/
setSocrataToken(token) {
this.config.socrataToken = token;
}
}
exports.ClientFactory = ClientFactory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsZ0RBQThCO0FBQzlCLDRDQUEwQjtBQUkxQix1Q0FBK0Q7QUFlL0Q7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFHeEIsWUFBWSxTQUE4QixFQUFFO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUF1QixFQUFFLE1BQTZCO1FBQ2pFLE1BQU0sVUFBVSxHQUFxQjtZQUNuQyxNQUFNO1lBQ04sT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7U0FDekIsQ0FBQztRQUVGLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNuQixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVsRCxLQUFLLFFBQVE7Z0JBQ1gsaUNBQWlDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV6RSxLQUFLLFVBQVU7Z0JBQ2IsbUNBQW1DO2dCQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUzRTtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxVQUE0QixFQUFFLE1BQTZCO1FBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUU7UUFFRCxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNsQyxLQUFLLFNBQVM7Z0JBQ1osTUFBTSxhQUFhLG1DQUNkLFVBQVUsS0FDYixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQ25DLENBQUM7Z0JBQ0YsT0FBTyxJQUFJLHVCQUFhLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWxELEtBQUssUUFBUTtnQkFDWCxnQ0FBZ0M7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUV4RCxLQUFLLFFBQVE7Z0JBQ1gscUNBQXFDO2dCQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFeEY7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUFvQztRQUMvQyxJQUFJLENBQUMsTUFBTSxtQ0FBUSxJQUFJLENBQUMsTUFBTSxHQUFLLE1BQU0sQ0FBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUE3RUQsc0NBNkVDIn0=