class CorporateDsp { name: string; dspName: string; displayName: string; services: any[]; rates: any; info: any; attributes: any; constructor({ name, dspName, displayName, services, rates, providesEstimates, dimensionalFactor }) { this.name = name; this.dspName = dspName; this.displayName = displayName; this.services = services; this.rates = rates; this.info = { providesEstimates: Boolean(providesEstimates), }, this.attributes = { config: { dimensionalFactor: Number(dimensionalFactor) } } } getDisplayName() { return this.displayName; } getDspName() { return this.dspName; } getInfo(key) { return this.info[key]; } getConfig(key) { return this.attributes.config[key]; } } // Supports zone rates const ups = new CorporateDsp({ name: 'UPS', dspName: 'UPS', displayName: 'UPS', services: [], rates: { active: true, providesZonesCostSheet: true, rateCards: [ { active: false } ] }, providesEstimates: true, dimensionalFactor: 166 }); // Does not support zone rates const ups2 = new CorporateDsp({ name: 'UPS 2', dspName: 'UPS', displayName: 'UPS 2', services: [], rates: { active: true, providesZonesCostSheet: false, rateCards: [ { active: true } ] }, providesEstimates: true, } as any); // Supports both zone rates + tier based rates const fedex = new CorporateDsp({ name: 'FedEx', dspName: 'FedEx', displayName: 'FedEx', services: [], rates: { active: true, providesZonesCostSheet: true, rateCards: [ { active: true } ] }, providesEstimates: true, } as any); // Not support zone rates and tier based rates const usps = new CorporateDsp({ name: 'USPS', dspName: 'USPS', displayName: 'USPS', services: [], rates: { active: false, providesZonesCostSheet: false }, providesEstimates: true, } as any); // Supports zone rates and does not provide estimates const selfDelivery = new CorporateDsp({ name: 'Self Delivery', dspName: 'Self Delivery', displayName: 'Self Delivery', services: [ { name: 'Shipping', type: 'shipping', id: 'shipping', }, { name: 'Curbside', type: 'curbside', id: 'curbside', }, { name: 'Delivery', type: 'delivery', id: 'delivery', } ], rates: { active: true, providesZonesCostSheet: true, rateCards: [ { active: false } ] }, providesEstimates: false, } as any); // Supports zone rates and does not provide estimates, with no services const axleHire = new CorporateDsp({ name: 'AxleHire', dspName: 'AxleHire', displayName: 'AxleHire', services: [], rates: { active: true, providesZonesCostSheet: true, rateCards: [ { active: false } ] }, providesEstimates: false, } as any); // Supports zone rates and does provide estimates const obibox = new CorporateDsp({ name: 'Obibox', dspName: 'obibox', displayName: 'Obibox', services: [], rates: { active: true, providesZonesCostSheet: true, rateCards: [ { active: false } ] }, providesEstimates: false, } as any); export const CORPORATE_DSP = { UPS: ups, UPS2: ups2, FEDEX: fedex, USPS: usps, SELF_DELIVERY: selfDelivery, AXLE_HIRE: axleHire }