ias
Version:
A node client to interface with IAS soap web services
251 lines (230 loc) • 6.17 kB
JavaScript
/**
* common values, data and methods
*/
var debug = require('debug')('ias');
var request = require('request');
var _ = require('lodash');
var common = module.exports = {};
// service url
common.serviceUrl = 'https://api.iasdirect.com/ElectronicProcessing/ElectronicProcessing.svc';
common.testServiceUrl = 'https://alpha.smartdealerproducts.com/api.iasdirect.com/ElectronicProcessing/ElectronicProcessing.svc';
// enums
common.VehicleUsageTypes = ['NonCommercial', 'Commercial'];
common.VehicleUsageType = {
nonCommerical: 'NonCommercial'
, commercial: 'Commercial'
};
common.VehicleAgeTypes = ['NewVehicle', 'UsedVehicle', 'CertifiedPreownedVehicle'];
common.VehicleAgeType = {
'new': 'NewVehicle'
, 'used': 'UsedVehicle'
, 'cpo': 'CertifiedPreownedVehicle'
};
common.LimitTireWheelType = ['IncludeAll', 'IncludeNonGoldOnly', 'IncludeGoldOnly'];
common.MaintenanceKitShipmentTypes = ['ShipToCustomer','ReceivedByCustomer']; // 1, 2
// SOAP actions required for request header
common.soapActions = {
getrates: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GetRates'
, getelectroniccontractformfields: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GetElectronicContractFormFields'
, generateelectroniccontract: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GenerateElectronicContract'
, getelectroniccontractformsignaturelocations: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GetElectronicContractFormSignatureLocations'
, confirmelectronicsignatures: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/ConfirmElectronicSignatures'
, getpendingelectroniccontracts: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GetPendingElectronicContracts'
, generateelectronicremittancebatch: 'https://api.iasdirect.com/ElectronicProcessing/IElectronicProcessing/GenerateElectronicRemittanceBatch'
};
// currently supported web service methods
common.supportedMethods = [
'GetRates'
, 'GetElectronicContractFormFields'
, 'GenerateElectronicContract'
, 'GetElectronicContractFormSignatureLocations'
, 'ConfirmElectronicSignatures'
, 'GetPendingElectronicContracts'
, 'GenerateElectronicRemittanceBatch'
];
// service methods that require the dealerId
common.dealerIdRequired = [
'GetRates'
, 'GenerateElectronicContract'
, 'ConfirmElectronicSignatures'
, 'GetPendingElectronicContracts'
, 'GenerateElectronicRemittanceBatch'
];
// data stuctures for templates
var baseDataObject = {
auth: {
loginName: ''
, loginPassword: ''
, userAgent: ''
, userEmailAddress: ''
, userId: ''
, userIPAddress: ''
}
, 'iElectronicProcessingPurchasedPlanType': {
fiCodeNumber: '',
form: '',
formRevisionDate: '',
isZeroPaymentPlan: '',
planId: '',
retailPrice: '',
term: ''
}
, 'getrates': {
dealerId: ''
, contractDate: ''
, limitTireWheel: common.LimitTireWheelType[0]
, vehicle: {
ageType: common.VehicleAgeTypes[0]
, inServiceDate: ''
, msrp: 0
, make: ''
, model: ''
, mileage: 0
, nadaRetail: 0
, purchasePrice: 0
, trimLevel: ''
, usageType: common.VehicleUsageTypes[0]
, vin: ''
, year: ''
}
}
, 'getelectroniccontractformfields': {
forms:[]
}
, 'getelectroniccontractformsignaturelocations': {
forms:[]
}
, 'confirmelectronicsignatures': {
contractIds: []
, dealerId: ''
}
, 'generateelectronicremittancebatch': {
contractIds: []
, dealerId: ''
, referenceNumber: ''
}
, 'getpendingelectroniccontracts': {
dealerId: ''
}
, 'generateelectroniccontract': {
customerInfo: {
apr: '',
additionalPayee: '',
aftermarketHardwareInstallationDate: '',
aftermarketHardwareRetailPrice: '',
aftermarketHardwareSerialNumber: '',
amountFinanced: '',
balloonAmountOrResidualValue: '',
buyerDescriptor: {
cellPhone: '',
city: '',
emailAddress: '',
firstName: '',
initial: '',
lastName: '',
phone: '',
state: '',
street: '',
zip: ''
},
coBuyerDescriptor: {
cellPhone: '',
city: '',
emailAddress: '',
firstName: '',
initial: '',
lastName: '',
phone: '',
state: '',
street: '',
zip: ''
},
contractDate: '',
dealNumber: '',
etchNumber: '',
firstPaymentDate: '',
lenderDescriptor: {
city: '',
name: '',
phone: '',
state: '',
street: '',
zip: ''
},
licensedSalesperson: '',
maintenanceKitShipmentType: '',
monthlyPayment: '',
systemModelNumber: '',
termInMonths: '',
totalOfPayments: '',
vscCompany: '',
vscNumber: '',
vscTermMiles: '',
vscTermMonths: '',
vehicleLoanType: '',
vehiclePurchaseType: ''
},
dealerId: '',
masterDealerId: '',
purchasedPlans: [],
vehicleInfo: {
ageType: '',
chromeStyleId: '',
hasChromeWheels: '',
hasDealerUpgradedWheelsTires: '',
hasRunFlatTires: '',
inServiceDate: '',
msrp: '',
make: '',
mileage: '',
model: '',
nadaRetail: '',
purchasePrice: '',
trimLevel: '',
usageType: '',
vin: '',
year: ''
}
}
};
/**
*
*
* @param {string} - name
* @return {object} || null
*/
function getBaseDataObject(name) {
if (!name || typeof baseDataObject[name.toLowerCase()] === 'undefined') {
return null;
}
return _.clone(baseDataObject[name.toLowerCase()], true);
}
/**
*
* @param {string}
* @param {string}
* @param {string}
* @param {Function} (err, response, body)
*/
function sendRequest(url, payload, action, callback) {
debug('Sending request to ' + url);
request.post({
url: url
, body: payload
, timeout: 15000
, headers: {
'User-Agent': 'node-ias'
, 'Content-Type': 'text/xml;charset=UTF-8;'
, 'SOAPAction': action
// , 'Accept': 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8'
// , 'Accept-Encoding': 'gzip,deflate'
, 'Accept-Charset': 'utf-8'
, 'Connection': 'close'
// , 'Host': 'api.iasdirect.com'
}
}, function(err, resp, body) {
callback(err, resp, body);
});
}
common.getBaseDataObject = getBaseDataObject;
common.sendRequest = sendRequest;