UNPKG

@lineai/gov-deals

Version:

Explore Federal contracts for government building renovations, city hall renovations, courthouse updates, library modernizations, federal building improvement contracts, base housing and facilities upgrades.

242 lines 13.9 kB
"use strict"; /** * Configuration constants for the gov-deals package * These values can be updated as the SAM.gov API evolves */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ActiveStatusSchema = exports.ACTIVE_STATUS = exports.CompetitionStrategySchema = exports.COMPETITION_STRATEGIES = exports.isValidStateCode = exports.getStateCode = exports.StateCodeSchema = exports.US_STATES = exports.API_CONFIG = exports.ContractPricingTypeSchema = exports.CONTRACT_PRICING_TYPES = exports.ConstructionNAICSSchema = exports.CONSTRUCTION_NAICS_CODES = exports.SetAsideTypeSchema = exports.TypeOfSetAsideSchema = exports.SET_ASIDE_TYPES = exports.OpportunityTypeSchema = exports.OPPORTUNITY_TYPES = void 0; const zod_1 = require("zod"); /** * SAM.gov Opportunity Type Codes * Source: SAM.gov API Documentation * Last verified: 2024 */ exports.OPPORTUNITY_TYPES = { PRESOLICITATION: 'p', SOLICITATION: 'o', AWARD_NOTICE: 'a', INTENT_TO_BUNDLE: 'i', JUSTIFICATION: 'u', SOURCES_SOUGHT: 'r', SPECIAL_NOTICE: 's', COMBINED_SYNOPSIS: 'k', SALE_OF_SURPLUS: 'g', }; // Zod schema for runtime validation exports.OpportunityTypeSchema = zod_1.z.enum([ exports.OPPORTUNITY_TYPES.PRESOLICITATION, exports.OPPORTUNITY_TYPES.SOLICITATION, exports.OPPORTUNITY_TYPES.AWARD_NOTICE, exports.OPPORTUNITY_TYPES.INTENT_TO_BUNDLE, exports.OPPORTUNITY_TYPES.JUSTIFICATION, exports.OPPORTUNITY_TYPES.SOURCES_SOUGHT, exports.OPPORTUNITY_TYPES.SPECIAL_NOTICE, exports.OPPORTUNITY_TYPES.COMBINED_SYNOPSIS, exports.OPPORTUNITY_TYPES.SALE_OF_SURPLUS, ]); /** * Federal Set-Aside Type Codes * Source: Federal Acquisition Regulation (FAR) */ exports.SET_ASIDE_TYPES = { SMALL_BUSINESS: 'SBA', SMALL_BUSINESS_SET_ASIDE: 'SBP', EIGHT_A: '8A', EIGHT_A_SOLE_SOURCE: '8AN', EIGHT_A_COMPETITIVE: '8AC', HUB_ZONE: 'HZC', HUB_ZONE_SOLE_SOURCE: 'HZS', SDVOSB: 'SDVOSBC', SDVOSB_SOLE_SOURCE: 'SDVOSBS', WOMEN_OWNED: 'WOSB', EDWOSB: 'EDWOSB', LOCAL_AREA: 'LAS', INDIAN_ECONOMIC: 'IEE', INDIAN_SMALL_BUSINESS: 'ISBEE', BUY_INDIAN: 'BICiv', VETERAN_OWNED: 'VSA', VETERAN_OWNED_SOLE_SOURCE: 'VSS', NONE: 'NONE', }; // Renamed to match actual API field name exports.TypeOfSetAsideSchema = zod_1.z.enum([ exports.SET_ASIDE_TYPES.SMALL_BUSINESS, exports.SET_ASIDE_TYPES.SMALL_BUSINESS_SET_ASIDE, exports.SET_ASIDE_TYPES.EIGHT_A, exports.SET_ASIDE_TYPES.EIGHT_A_SOLE_SOURCE, exports.SET_ASIDE_TYPES.EIGHT_A_COMPETITIVE, exports.SET_ASIDE_TYPES.HUB_ZONE, exports.SET_ASIDE_TYPES.HUB_ZONE_SOLE_SOURCE, exports.SET_ASIDE_TYPES.SDVOSB, exports.SET_ASIDE_TYPES.SDVOSB_SOLE_SOURCE, exports.SET_ASIDE_TYPES.WOMEN_OWNED, exports.SET_ASIDE_TYPES.EDWOSB, exports.SET_ASIDE_TYPES.LOCAL_AREA, exports.SET_ASIDE_TYPES.INDIAN_ECONOMIC, exports.SET_ASIDE_TYPES.INDIAN_SMALL_BUSINESS, exports.SET_ASIDE_TYPES.BUY_INDIAN, exports.SET_ASIDE_TYPES.VETERAN_OWNED, exports.SET_ASIDE_TYPES.VETERAN_OWNED_SOLE_SOURCE, exports.SET_ASIDE_TYPES.NONE, ]); // Keep the old name for backward compatibility exports.SetAsideTypeSchema = exports.TypeOfSetAsideSchema; /** * Construction-related NAICS Codes * Source: North American Industry Classification System */ exports.CONSTRUCTION_NAICS_CODES = { COMMERCIAL_BUILDING: '236220', INDUSTRIAL_BUILDING: '236210', RESIDENTIAL_REMODELING: '236118', ELECTRICAL_CONTRACTORS: '238210', PLUMBING_HVAC: '238220', DRYWALL_INSULATION: '238310', PAINTING: '238320', SITE_PREPARATION: '238910', ROOFING: '238160', CONCRETE: '238110', }; // Create an array of values for the schema const constructionNAICSValues = Object.values(exports.CONSTRUCTION_NAICS_CODES); exports.ConstructionNAICSSchema = zod_1.z.enum(constructionNAICSValues); /** * Contract Pricing Types * Source: Federal Acquisition Regulation (FAR) Part 16 */ exports.CONTRACT_PRICING_TYPES = { FIRM_FIXED_PRICE: 'FFP', FIXED_PRICE_EPA: 'FPE', FIXED_PRICE_INCENTIVE: 'FPI', FIXED_PRICE_REDETERMINATION: 'FPR', COST_PLUS_FIXED_FEE: 'CPFF', COST_PLUS_INCENTIVE_FEE: 'CPIF', COST_PLUS_AWARD_FEE: 'CPAF', COST_SHARING: 'CS', COST_REIMBURSEMENT: 'CR', TIME_AND_MATERIALS: 'TM', LABOR_HOURS: 'LH', OTHER: 'OT', }; const contractPricingValues = Object.values(exports.CONTRACT_PRICING_TYPES); exports.ContractPricingTypeSchema = zod_1.z.enum(contractPricingValues); /** * API Configuration */ exports.API_CONFIG = { SAM_GOV: { BASE_URL: 'https://api.sam.gov/prod', OPPORTUNITIES_ENDPOINT: '/opportunities/v2/search', ENTITIES_ENDPOINT: '/entity-information/v3/entities', HIERARCHY_ENDPOINT: '/federalorganizations/v2/hierarchy', DESCRIPTION_ENDPOINT: '/opportunities/v1/noticedesc', DEFAULT_PAGE_SIZE: 100, MAX_PAGE_SIZE: 1000, }, RETRY: { MAX_ATTEMPTS: 3, INITIAL_DELAY_MS: 1000, MAX_DELAY_MS: 10000, }, CACHE: { DEFAULT_TTL_SECONDS: 300, MAX_CACHE_SIZE: 100, }, }; /** * US State Codes */ exports.US_STATES = { ALABAMA: 'AL', ALASKA: 'AK', ARIZONA: 'AZ', ARKANSAS: 'AR', CALIFORNIA: 'CA', COLORADO: 'CO', CONNECTICUT: 'CT', DELAWARE: 'DE', FLORIDA: 'FL', GEORGIA: 'GA', HAWAII: 'HI', IDAHO: 'ID', ILLINOIS: 'IL', INDIANA: 'IN', IOWA: 'IA', KANSAS: 'KS', KENTUCKY: 'KY', LOUISIANA: 'LA', MAINE: 'ME', MARYLAND: 'MD', MASSACHUSETTS: 'MA', MICHIGAN: 'MI', MINNESOTA: 'MN', MISSISSIPPI: 'MS', MISSOURI: 'MO', MONTANA: 'MT', NEBRASKA: 'NE', NEVADA: 'NV', NEW_HAMPSHIRE: 'NH', NEW_JERSEY: 'NJ', NEW_MEXICO: 'NM', NEW_YORK: 'NY', NORTH_CAROLINA: 'NC', NORTH_DAKOTA: 'ND', OHIO: 'OH', OKLAHOMA: 'OK', OREGON: 'OR', PENNSYLVANIA: 'PA', RHODE_ISLAND: 'RI', SOUTH_CAROLINA: 'SC', SOUTH_DAKOTA: 'SD', TENNESSEE: 'TN', TEXAS: 'TX', UTAH: 'UT', VERMONT: 'VT', VIRGINIA: 'VA', WASHINGTON: 'WA', WEST_VIRGINIA: 'WV', WISCONSIN: 'WI', WYOMING: 'WY', DISTRICT_OF_COLUMBIA: 'DC', PUERTO_RICO: 'PR', US_VIRGIN_ISLANDS: 'VI', GUAM: 'GU', AMERICAN_SAMOA: 'AS', NORTHERN_MARIANA_ISLANDS: 'MP', }; const stateValues = Object.values(exports.US_STATES); exports.StateCodeSchema = zod_1.z.enum(stateValues); /** * Helper function to get state code from name */ function getStateCode(stateName) { return exports.US_STATES[stateName]; } exports.getStateCode = getStateCode; /** * Helper function to validate if a string is a valid state code */ function isValidStateCode(code) { return exports.StateCodeSchema.safeParse(code).success; } exports.isValidStateCode = isValidStateCode; /** * Competition Strategy */ exports.COMPETITION_STRATEGIES = { FULL_AND_OPEN: 'fullAndOpen', SET_ASIDE: 'setAside', SOLE_SOURCE: 'soleSource', LIMITED_SOURCES: 'limitedSources', }; const competitionValues = Object.values(exports.COMPETITION_STRATEGIES); exports.CompetitionStrategySchema = zod_1.z.enum(competitionValues); /** * Active Status for opportunities (as returned by API) */ exports.ACTIVE_STATUS = { YES: 'Yes', NO: 'No', }; exports.ActiveStatusSchema = zod_1.z.enum([exports.ACTIVE_STATUS.YES, exports.ACTIVE_STATUS.NO]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsNkJBQXdCO0FBRXhCOzs7O0dBSUc7QUFDVSxRQUFBLGlCQUFpQixHQUFHO0lBQy9CLGVBQWUsRUFBRSxHQUFHO0lBQ3BCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLGdCQUFnQixFQUFFLEdBQUc7SUFDckIsYUFBYSxFQUFFLEdBQUc7SUFDbEIsY0FBYyxFQUFFLEdBQUc7SUFDbkIsY0FBYyxFQUFFLEdBQUc7SUFDbkIsaUJBQWlCLEVBQUUsR0FBRztJQUN0QixlQUFlLEVBQUUsR0FBRztDQUNaLENBQUM7QUFNWCxvQ0FBb0M7QUFDdkIsUUFBQSxxQkFBcUIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLHlCQUFpQixDQUFDLGVBQWU7SUFDakMseUJBQWlCLENBQUMsWUFBWTtJQUM5Qix5QkFBaUIsQ0FBQyxZQUFZO0lBQzlCLHlCQUFpQixDQUFDLGdCQUFnQjtJQUNsQyx5QkFBaUIsQ0FBQyxhQUFhO0lBQy9CLHlCQUFpQixDQUFDLGNBQWM7SUFDaEMseUJBQWlCLENBQUMsY0FBYztJQUNoQyx5QkFBaUIsQ0FBQyxpQkFBaUI7SUFDbkMseUJBQWlCLENBQUMsZUFBZTtDQUNsQyxDQUFDLENBQUM7QUFFSDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRztJQUM3QixjQUFjLEVBQUUsS0FBSztJQUNyQix3QkFBd0IsRUFBRSxLQUFLO0lBQy9CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLFFBQVEsRUFBRSxLQUFLO0lBQ2Ysb0JBQW9CLEVBQUUsS0FBSztJQUMzQixNQUFNLEVBQUUsU0FBUztJQUNqQixrQkFBa0IsRUFBRSxTQUFTO0lB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