UNPKG

govdata.js

Version:

A modern TypeScript package for accessing U.S. government data systems including FPDS, SAM.gov opportunities, and Wage Determinations

1 lines 49.4 kB
{"version":3,"sources":["../src/utils/errors.ts","../src/utils/validators.ts","../src/utils/xml-processor.ts","../src/core/fpds/field-mapper.ts","../src/utils/semaphore.ts","../src/core/fpds/request.ts","../src/core/fpds/contract-processor.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["export class GovDataError extends Error {\n constructor(\n public code: string,\n message: string,\n public parameter?: string,\n public suggestions?: string[]\n ) {\n super(message);\n this.name = 'GovDataError';\n }\n}\n\nexport class FPDSRequestError extends GovDataError {\n constructor(message: string, public statusCode?: number) {\n super('FPDS_REQUEST_ERROR', message);\n }\n}\n\nexport class OpportunityRequestError extends GovDataError {\n constructor(message: string, public statusCode?: number) {\n super('OPPORTUNITY_REQUEST_ERROR', message);\n }\n}\n\nexport class WageRequestError extends GovDataError {\n constructor(message: string, public statusCode?: number) {\n super('WAGE_REQUEST_ERROR', message);\n }\n}\n\nexport class ValidationError extends GovDataError {\n constructor(parameter: string, value: string, suggestions?: string[]) {\n super('VALIDATION_ERROR', `Invalid value for ${parameter}: ${value}`, parameter, suggestions);\n }\n}\n\nexport class NetworkError extends GovDataError {\n constructor(message: string, public originalError?: Error) {\n super('NETWORK_ERROR', message);\n }\n}\n\nexport class ParseError extends GovDataError {\n constructor(message: string, public data?: any) {\n super('PARSE_ERROR', message);\n }\n}","import { ValidationError } from './errors.js';\n\nexport function parseFloatSafe(value: any): number {\n if (!value) return 0;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n}\n\nexport function parseIntSafe(value: any): number {\n if (!value) return 0;\n const parsed = parseInt(value, 10);\n return isNaN(parsed) ? 0 : parsed;\n}\n\nexport function convertBooleanToString(value: any): string {\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n return value === 'true' ? 'Yes' : 'No';\n}\n\nexport function validateDateRange(dateRange: string): boolean {\n const dateRangePattern = /^\\[\\d{4}\\/\\d{2}\\/\\d{2}\\s*,\\s*\\d{4}\\/\\d{2}\\/\\d{2}\\]$/;\n return dateRangePattern.test(dateRange);\n}\n\nexport function validatePIID(piid: string): boolean {\n return Boolean(piid && piid.trim().length > 0);\n}\n\nexport function validateNAICSCode(naics: string): boolean {\n const naicsPattern = /^\\d{6}$/;\n return naicsPattern.test(naics);\n}\n\nexport function validatePSCCode(psc: string): boolean {\n const pscPattern = /^[A-Z]\\d{3}$/;\n return pscPattern.test(psc);\n}\n\nexport function validateAgencyCode(agencyCode: string): boolean {\n const agencyPattern = /^\\d{4}$/;\n return agencyPattern.test(agencyCode);\n}\n\nexport function validateStateCode(stateCode: string): boolean {\n const statePattern = /^[A-Z]{2}$/;\n return statePattern.test(stateCode);\n}\n\nexport function validateZipCode(zipCode: string): boolean {\n const zipPattern = /^\\d{5}(-\\d{4})?$/;\n return zipPattern.test(zipCode);\n}\n\nexport function sanitizeSearchTerm(term: string): string {\n return term.trim().replace(/[<>]/g, '');\n}\n\nexport function validateSearchParams(params: Record<string, any>): void {\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null) {\n continue;\n }\n\n switch (key) {\n case 'LAST_MOD_DATE':\n if (typeof value === 'string' && !validateDateRange(value)) {\n throw new ValidationError(key, value, [\n 'Use format: [YYYY/MM/DD, YYYY/MM/DD]',\n 'Example: [2022/01/01, 2024/12/31]'\n ]);\n }\n break;\n\n case 'PIID':\n case 'REF_IDV_PIID':\n if (typeof value === 'string' && !validatePIID(value)) {\n throw new ValidationError(key, value, [\n 'Contract ID cannot be empty',\n 'Remove any leading/trailing whitespace'\n ]);\n }\n break;\n\n case 'PRINCIPAL_NAICS_CODE':\n case 'NAICS_CODE':\n if (typeof value === 'string' && !validateNAICSCode(value)) {\n throw new ValidationError(key, value, [\n 'NAICS code must be exactly 6 digits',\n 'Example: 541511'\n ]);\n }\n break;\n\n case 'PRODUCT_OR_SERVICE_CODE':\n case 'PSC_CODE':\n if (typeof value === 'string' && !validatePSCCode(value)) {\n throw new ValidationError(key, value, [\n 'PSC code must be 1 letter followed by 3 digits',\n 'Example: R425'\n ]);\n }\n break;\n\n case 'AGENCY_CODE':\n case 'CONTRACTING_AGENCY_ID':\n case 'FUNDING_AGENCY_ID':\n if (typeof value === 'string' && !validateAgencyCode(value)) {\n throw new ValidationError(key, value, [\n 'Agency code must be exactly 4 digits',\n 'Example: 9700'\n ]);\n }\n break;\n }\n }\n}\n\nexport function buildQueryString(params: Record<string, any>): string {\n const queryParams = new URLSearchParams();\n \n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null && value !== '') {\n queryParams.append(key, String(value));\n }\n }\n \n return queryParams.toString();\n}","import { XMLParser } from 'fast-xml-parser';\nimport { ParseError } from './errors.js';\n\nexport interface XMLProcessorOptions {\n ignoreAttributes: boolean;\n attributeNamePrefix: string;\n textNodeName: string;\n ignoreNameSpace: boolean;\n removeNSPrefix: boolean;\n parseAttributeValue: boolean;\n parseTrueNumberOnly: boolean;\n arrayMode: boolean;\n trimValues: boolean;\n}\n\nexport class XMLProcessor {\n private parser: XMLParser;\n \n constructor(options?: Partial<XMLProcessorOptions>) {\n const defaultOptions: XMLProcessorOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '',\n textNodeName: '#text',\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseAttributeValue: true,\n parseTrueNumberOnly: false,\n arrayMode: false,\n trimValues: true,\n };\n \n this.parser = new XMLParser({\n ...defaultOptions,\n ...options,\n });\n }\n \n parseXML(xmlData: string): any {\n try {\n if (!xmlData || xmlData.trim().length === 0) {\n throw new ParseError('XML data is empty or null');\n }\n \n const result = this.parser.parse(xmlData);\n return result;\n } catch (error) {\n if (error instanceof ParseError) {\n throw error;\n }\n throw new ParseError(`Failed to parse XML: ${error}`);\n }\n }\n \n extractEntries(parsedData: any): any[] {\n try {\n // Navigate through the FPDS XML structure\n const feed = parsedData?.feed;\n if (!feed) {\n return [];\n }\n \n // Handle both single entry and multiple entries\n const entries = feed.entry;\n if (!entries) {\n return [];\n }\n \n // Ensure we always return an array\n return Array.isArray(entries) ? entries : [entries];\n } catch (error) {\n throw new ParseError(`Failed to extract entries from parsed XML: ${error}`);\n }\n }\n \n flattenXMLPaths(obj: any, prefix = '', result: Record<string, any> = {}): Record<string, any> {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const newKey = prefix ? `${prefix}__${key}` : key;\n const value = obj[key];\n \n if (value && typeof value === 'object' && !Array.isArray(value)) {\n // Recursively flatten nested objects\n this.flattenXMLPaths(value, newKey, result);\n } else {\n // Store the flattened path and value\n result[newKey] = value;\n }\n }\n }\n return result;\n }\n \n processXMLResponse(xmlData: string): any[] {\n const parsedData = this.parseXML(xmlData);\n const entries = this.extractEntries(parsedData);\n \n // Flatten each entry to match Python script structure\n return entries.map(entry => this.flattenXMLPaths(entry));\n }\n}","import { createHash } from 'crypto';\nimport { FPDSRecord } from '../types.js';\nimport { parseFloatSafe, parseIntSafe, convertBooleanToString } from '../../utils/validators.js';\n\nexport class FPDSFieldMapper {\n static mapRecord(rawRecord: any, sourceMetadata?: any): FPDSRecord {\n return {\n // Essential Contract Information\n contract_hash: this.generateContractHash(\n rawRecord['content__award__awardID__awardContractID__PIID'] || '',\n rawRecord['content__award__relevantContractDates__signedDate'] || ''\n ),\n contract_number: rawRecord['content__award__awardID__awardContractID__PIID'] || '',\n title: rawRecord['title'] || '',\n link: rawRecord['link__href'] || '',\n award_date: rawRecord['content__award__relevantContractDates__signedDate'] || '',\n award_amount: parseFloatSafe(rawRecord['content__award__dollarValues__obligatedAmount']),\n total_potential_value: parseFloatSafe(rawRecord['content__award__dollarValues__baseAndAllOptionsValue']),\n contract_type: rawRecord['content__award__contractData__contractActionType__description'] || '',\n project_description: rawRecord['content__award__contractData__descriptionOfContractRequirement'] || '',\n naics_code: rawRecord['content__award__productOrServiceInformation__principalNAICSCode'] || '',\n naics_description: rawRecord['content__award__productOrServiceInformation__principalNAICSCode__description'] || '',\n psc_code: rawRecord['content__award__productOrServiceInformation__productOrServiceCode'] || '',\n psc_description: rawRecord['content__award__productOrServiceInformation__productOrServiceCode__description'] || '',\n \n // Contracting Agency Information\n contracting_agency: rawRecord['content__award__purchaserInformation__contractingOfficeAgencyID__name'] || '',\n contracting_office_code: rawRecord['content__award__purchaserInformation__contractingOfficeID'] || '',\n contracting_office_name: rawRecord['content__award__purchaserInformation__contractingOfficeID__name'] || '',\n \n // Vendor Information\n vendor_name: rawRecord['content__award__vendor__vendorHeader__vendorName'] || '',\n vendor_uei: rawRecord['content__award__vendor__vendorSiteDetails__entityIdentifiers__vendorUEIInformation__UEI'] || '',\n business_size: rawRecord['content__award__vendor__contractingOfficerBusinessSizeDetermination__description'] || '',\n vendor_city: rawRecord['content__award__vendor__vendorSiteDetails__vendorLocation__city'] || '',\n vendor_state: rawRecord['content__award__vendor__vendorSiteDetails__vendorLocation__state'] || '',\n sdvosb_status: convertBooleanToString(rawRecord['content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isServiceRelatedDisabledVeteranOwnedBusiness']),\n small_business_status: convertBooleanToString(rawRecord['content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isSmallBusiness']),\n women_owned_status: convertBooleanToString(rawRecord['content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isWomenOwned']),\n \n // Competition Information\n competition_extent: rawRecord['content__award__competition__extentCompeted__description'] || '',\n set_aside_type: rawRecord['content__award__competition__idvTypeOfSetAside__description'] || '',\n number_of_offers: parseIntSafe(rawRecord['content__award__competition__numberOfOffersReceived']),\n solicitation_procedure: rawRecord['content__award__competition__solicitationProcedures__description'] || '',\n \n // Performance Information\n start_date: rawRecord['content__award__relevantContractDates__effectiveDate'] || '',\n end_date: rawRecord['content__award__relevantContractDates__currentCompletionDate'] || '',\n performance_state: rawRecord['content__award__placeOfPerformance__principalPlaceOfPerformance__stateCode'] || '',\n performance_city: rawRecord['content__award__placeOfPerformance__placeOfPerformanceZIPCode__city'] || '',\n \n // Reference Information for IDVs\n parent_contract_id: rawRecord['content__award__awardID__referencedIDVID__PIID'] || '',\n parent_contract_type: rawRecord['content__award__contractData__referencedIDVType__description'] || '',\n \n // Source Metadata\n source_metadata: sourceMetadata || undefined\n };\n }\n \n static generateContractHash(contractNumber: string, awardDate: string): string {\n const hashString = `${contractNumber}:${awardDate}`;\n return createHash('sha256').update(hashString).digest('hex');\n }\n \n static mapRecords(rawRecords: any[], sourceMetadata?: any): FPDSRecord[] {\n return rawRecords.map(record => this.mapRecord(record, sourceMetadata));\n }\n \n static getFieldMappings(): Record<string, string> {\n return {\n // Essential Contract Information\n 'contract_hash': 'Generated from contract_number:award_date',\n 'contract_number': 'content__award__awardID__awardContractID__PIID',\n 'title': 'title',\n 'link': 'link__href',\n 'award_date': 'content__award__relevantContractDates__signedDate',\n 'award_amount': 'content__award__dollarValues__obligatedAmount',\n 'total_potential_value': 'content__award__dollarValues__baseAndAllOptionsValue',\n 'contract_type': 'content__award__contractData__contractActionType__description',\n 'project_description': 'content__award__contractData__descriptionOfContractRequirement',\n 'naics_code': 'content__award__productOrServiceInformation__principalNAICSCode',\n 'naics_description': 'content__award__productOrServiceInformation__principalNAICSCode__description',\n 'psc_code': 'content__award__productOrServiceInformation__productOrServiceCode',\n 'psc_description': 'content__award__productOrServiceInformation__productOrServiceCode__description',\n \n // Contracting Agency Information\n 'contracting_agency': 'content__award__purchaserInformation__contractingOfficeAgencyID__name',\n 'contracting_office_code': 'content__award__purchaserInformation__contractingOfficeID',\n 'contracting_office_name': 'content__award__purchaserInformation__contractingOfficeID__name',\n \n // Vendor Information\n 'vendor_name': 'content__award__vendor__vendorHeader__vendorName',\n 'vendor_uei': 'content__award__vendor__vendorSiteDetails__entityIdentifiers__vendorUEIInformation__UEI',\n 'business_size': 'content__award__vendor__contractingOfficerBusinessSizeDetermination__description',\n 'vendor_city': 'content__award__vendor__vendorSiteDetails__vendorLocation__city',\n 'vendor_state': 'content__award__vendor__vendorSiteDetails__vendorLocation__state',\n 'sdvosb_status': 'content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isServiceRelatedDisabledVeteranOwnedBusiness',\n 'small_business_status': 'content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isSmallBusiness',\n 'women_owned_status': 'content__award__vendor__vendorSiteDetails__vendorSocioEconomicIndicators__isWomenOwned',\n \n // Competition Information\n 'competition_extent': 'content__award__competition__extentCompeted__description',\n 'set_aside_type': 'content__award__competition__idvTypeOfSetAside__description',\n 'number_of_offers': 'content__award__competition__numberOfOffersReceived',\n 'solicitation_procedure': 'content__award__competition__solicitationProcedures__description',\n \n // Performance Information\n 'start_date': 'content__award__relevantContractDates__effectiveDate',\n 'end_date': 'content__award__relevantContractDates__currentCompletionDate',\n 'performance_state': 'content__award__placeOfPerformance__principalPlaceOfPerformance__stateCode',\n 'performance_city': 'content__award__placeOfPerformance__placeOfPerformanceZIPCode__city',\n \n // Reference Information for IDVs\n 'parent_contract_id': 'content__award__awardID__referencedIDVID__PIID',\n 'parent_contract_type': 'content__award__contractData__referencedIDVType__description'\n };\n }\n}","export class Semaphore {\n private permits: number;\n private queue: Array<() => void> = [];\n \n constructor(permits: number) {\n this.permits = permits;\n }\n \n async acquire(): Promise<void> {\n return new Promise((resolve) => {\n if (this.permits > 0) {\n this.permits--;\n resolve();\n } else {\n this.queue.push(resolve);\n }\n });\n }\n \n release(): void {\n this.permits++;\n if (this.queue.length > 0) {\n const resolve = this.queue.shift()!;\n this.permits--;\n resolve();\n }\n }\n \n get available(): number {\n return this.permits;\n }\n \n get waiting(): number {\n return this.queue.length;\n }\n}","import { FPDSSearchParams, FPDSRequestConfig, FPDSRecord, PaginationInfo, RequestMetadata, ContractSearchRequest } from '../types.js';\nimport { FPDSRequestError, NetworkError } from '../../utils/errors.js';\nimport { validateSearchParams, buildQueryString } from '../../utils/validators.js';\nimport { XMLProcessor } from '../../utils/xml-processor.js';\nimport { FPDSFieldMapper } from './field-mapper.js';\nimport { Semaphore } from '../../utils/semaphore.js';\n\nexport class FPDSRequest {\n private params: FPDSSearchParams;\n private config: Required<FPDSRequestConfig>;\n private xmlProcessor: XMLProcessor;\n private metadata: RequestMetadata;\n private semaphore: Semaphore;\n \n private static readonly DEFAULT_CONFIG: Required<FPDSRequestConfig> = {\n threadCount: 10,\n timeout: 30000,\n retryAttempts: 3,\n retryDelay: 1000,\n baseUrl: 'https://api.sam.gov/prod/federalcontractopportunities/v1/search',\n userAgent: 'govdata.js/1.0.0'\n };\n \n constructor(params: FPDSSearchParams, config?: FPDSRequestConfig) {\n this.params = params;\n this.config = { ...FPDSRequest.DEFAULT_CONFIG, ...config };\n this.xmlProcessor = new XMLProcessor();\n this.semaphore = new Semaphore(this.config.threadCount);\n \n // Validate search parameters\n validateSearchParams(this.params);\n \n // Initialize metadata\n this.metadata = {\n searchUrl: this.buildSearchUrl(),\n requestTime: new Date()\n };\n }\n \n private buildSearchUrl(): string {\n const queryString = buildQueryString(this.params);\n return `${this.config.baseUrl}?${queryString}`;\n }\n \n private async makeRequest(url: string): Promise<string> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n \n try {\n const response = await fetch(url, {\n signal: controller.signal,\n headers: {\n 'User-Agent': this.config.userAgent,\n 'Accept': 'application/xml',\n 'Accept-Encoding': 'gzip, deflate'\n }\n });\n \n clearTimeout(timeoutId);\n \n if (!response.ok) {\n throw new FPDSRequestError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status\n );\n }\n \n return await response.text();\n } catch (error) {\n clearTimeout(timeoutId);\n \n if (error instanceof FPDSRequestError) {\n throw error;\n }\n \n if (error instanceof Error && error.name === 'AbortError') {\n throw new NetworkError(`Request timeout after ${this.config.timeout}ms`);\n }\n \n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new NetworkError(`Network request failed: ${errorMessage}`, error instanceof Error ? error : undefined);\n }\n }\n \n private async makeRequestWithRetry(url: string): Promise<string> {\n let lastError: Error;\n \n for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {\n try {\n return await this.makeRequest(url);\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n \n if (attempt === this.config.retryAttempts) {\n break;\n }\n \n // Exponential backoff\n const delay = this.config.retryDelay * Math.pow(2, attempt - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n \n throw lastError!;\n }\n \n private async fetchPage(pageNumber: number = 1): Promise<FPDSRecord[]> {\n await this.semaphore.acquire();\n \n try {\n const pageParams = { ...this.params, page: pageNumber.toString() };\n const queryString = buildQueryString(pageParams);\n const url = `${this.config.baseUrl}?${queryString}`;\n \n const xmlData = await this.makeRequestWithRetry(url);\n const records = this.xmlProcessor.processXMLResponse(xmlData);\n \n return FPDSFieldMapper.mapRecords(records);\n } finally {\n this.semaphore.release();\n }\n }\n \n private async getFirstPage(): Promise<{ records: FPDSRecord[], pagination: PaginationInfo }> {\n const records = await this.fetchPage(1);\n \n // Extract pagination info from the first response\n // This would need to be implemented based on FPDS API response structure\n const pagination: PaginationInfo = {\n currentPage: 1,\n totalPages: 1, // This would be extracted from the XML response\n totalRecords: records.length, // This would be extracted from the XML response\n recordsPerPage: records.length\n };\n \n this.metadata.pagination = pagination;\n \n return { records, pagination };\n }\n \n public async getData(): Promise<FPDSRecord[]> {\n const startTime = new Date();\n this.metadata.requestTime = startTime;\n \n try {\n // Get the first page to determine pagination\n const { records: firstPageRecords, pagination } = await this.getFirstPage();\n \n // If only one page, return the results\n if (pagination.totalPages <= 1) {\n this.metadata.responseTime = new Date();\n this.metadata.duration = this.metadata.responseTime.getTime() - startTime.getTime();\n return firstPageRecords;\n }\n \n // Create tasks for remaining pages\n const pagePromises: Promise<FPDSRecord[]>[] = [];\n for (let page = 2; page <= pagination.totalPages; page++) {\n pagePromises.push(this.fetchPage(page));\n }\n \n // Wait for all pages to complete\n const remainingPages = await Promise.all(pagePromises);\n \n // Combine all results\n const allRecords = [firstPageRecords, ...remainingPages].flat();\n \n this.metadata.responseTime = new Date();\n this.metadata.duration = this.metadata.responseTime.getTime() - startTime.getTime();\n \n return allRecords;\n } catch (error) {\n this.metadata.responseTime = new Date();\n this.metadata.duration = this.metadata.responseTime.getTime() - startTime.getTime();\n throw error;\n }\n }\n \n public async getPage(pageNumber: number): Promise<FPDSRecord[]> {\n return await this.fetchPage(pageNumber);\n }\n \n public async *getDataStream(): AsyncGenerator<FPDSRecord[]> {\n // Get the first page to determine pagination\n const { records: firstPageRecords, pagination } = await this.getFirstPage();\n \n yield firstPageRecords;\n \n // Stream remaining pages\n for (let page = 2; page <= pagination.totalPages; page++) {\n yield await this.fetchPage(page);\n }\n }\n \n public get totalPages(): number {\n return this.metadata.pagination?.totalPages || 0;\n }\n \n public get totalRecords(): number {\n return this.metadata.pagination?.totalRecords || 0;\n }\n \n public get searchUrl(): string {\n return this.metadata.searchUrl;\n }\n \n public get requestMetadata(): RequestMetadata {\n return { ...this.metadata };\n }\n \n public get concurrencyInfo(): { available: number, waiting: number } {\n return {\n available: this.semaphore.available,\n waiting: this.semaphore.waiting\n };\n }\n \n // Static method for multiple contract searches\n public static async searchContracts(request: ContractSearchRequest, config?: FPDSRequestConfig): Promise<FPDSRecord[]> {\n const allRecords: FPDSRecord[] = [];\n \n // Create tasks for each contract number\n const tasks = request.contracts.map(async (contractNumber) => {\n const searchParams: FPDSSearchParams = {\n PIID: contractNumber,\n LAST_MOD_DATE: request.dateRange\n };\n \n const fpdsRequest = new FPDSRequest(searchParams, config);\n \n try {\n const records = await fpdsRequest.getData();\n \n // Add metadata if provided\n if (request.metadata) {\n return records.map(record => ({\n ...record,\n source_metadata: { ...request.metadata, source_contract_number: contractNumber }\n }));\n }\n \n return records;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`Error fetching data for contract ${contractNumber}: ${errorMessage}`);\n return [];\n }\n });\n \n // Execute all searches concurrently\n const results = await Promise.all(tasks);\n \n // Flatten results\n return results.flat();\n }\n}","import { FPDSRecord } from '../types.js';\nimport { FPDSFieldMapper } from './field-mapper.js';\n\nexport class ContractProcessor {\n static processRecordsForCSV(records: FPDSRecord[]): FPDSRecord[] {\n return records.map(record => {\n const processedRecord = { ...record };\n \n // Convert string values to appropriate types for better CSV formatting\n if (processedRecord.award_amount) {\n processedRecord.award_amount = parseFloat(processedRecord.award_amount.toString());\n } else {\n processedRecord.award_amount = 0;\n }\n \n if (processedRecord.total_potential_value) {\n processedRecord.total_potential_value = parseFloat(processedRecord.total_potential_value.toString());\n } else {\n processedRecord.total_potential_value = 0;\n }\n \n if (processedRecord.number_of_offers) {\n try {\n processedRecord.number_of_offers = parseInt(processedRecord.number_of_offers.toString(), 10);\n } catch {\n processedRecord.number_of_offers = 0;\n }\n } else {\n processedRecord.number_of_offers = 0;\n }\n \n // Convert boolean fields to string \"Yes\"/\"No\" for better readability in CSV\n processedRecord.sdvosb_status = processedRecord.sdvosb_status === 'true' ? 'Yes' : 'No';\n processedRecord.small_business_status = processedRecord.small_business_status === 'true' ? 'Yes' : 'No';\n processedRecord.women_owned_status = processedRecord.women_owned_status === 'true' ? 'Yes' : 'No';\n \n return processedRecord;\n });\n }\n \n static convertToCSV(records: FPDSRecord[]): string {\n if (records.length === 0) {\n return '';\n }\n \n const processedRecords = this.processRecordsForCSV(records);\n const headers = Object.keys(processedRecords[0]);\n \n // Create CSV header\n const csvHeaders = headers.join(',');\n \n // Create CSV rows\n const csvRows = processedRecords.map(record => {\n return headers.map(header => {\n const value = record[header as keyof FPDSRecord];\n // Escape values that contain commas or quotes\n if (typeof value === 'string' && (value.includes(',') || value.includes('\"'))) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n }).join(',');\n });\n \n return [csvHeaders, ...csvRows].join('\\n');\n }\n \n static generateContractHash(contractNumber: string, awardDate: string): string {\n return FPDSFieldMapper.generateContractHash(contractNumber, awardDate);\n }\n \n static formatAsJSON(records: FPDSRecord[]): string {\n return JSON.stringify(records, null, 2);\n }\n}","// Core FPDS exports\nexport { FPDSRequest } from './core/fpds/request.js';\nexport { FPDSFieldMapper } from './core/fpds/field-mapper.js';\nexport { ContractProcessor } from './core/fpds/contract-processor.js';\n\n// Core types\nexport type {\n FPDSRecord,\n FPDSSearchParams,\n FPDSRequestConfig,\n ContractSearchRequest,\n PaginationInfo,\n RequestMetadata,\n BaseRequestConfig\n} from './core/types.js';\n\n// Utility exports\nexport { Semaphore } from './utils/semaphore.js';\nexport { XMLProcessor } from './utils/xml-processor.js';\nexport {\n parseFloatSafe,\n parseIntSafe,\n convertBooleanToString,\n validateDateRange,\n validatePIID,\n validateNAICSCode,\n validatePSCCode,\n validateAgencyCode,\n validateStateCode,\n validateZipCode,\n sanitizeSearchTerm,\n validateSearchParams,\n buildQueryString\n} from './utils/validators.js';\n\n// Error exports\nexport {\n GovDataError,\n FPDSRequestError,\n OpportunityRequestError,\n WageRequestError,\n ValidationError,\n NetworkError,\n ParseError\n} from './utils/errors.js';\n\n// Version info\nexport const VERSION = '1.0.0';\n\n// Default configurations\nexport const DEFAULT_FPDS_CONFIG = {\n threadCount: 10,\n timeout: 30000,\n retryAttempts: 3,\n retryDelay: 1000,\n baseUrl: 'https://api.sam.gov/prod/federalcontractopportunities/v1/search',\n userAgent: 'govdata.js/1.0.0'\n};"]}