@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
JavaScript
;
/**
* 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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