UNPKG

sfdc-verify-tools

Version:
126 lines (100 loc) 3.27 kB
(function() { var soap = require('soap'); var fs = require('fs'); var enterprise = require('./enterprise.js'); var deployable, metadata_wsdl; try { deployable = fs.readFileSync('node_modules/sfdc-verify-tools/sfdc/res/simpleClasses.zip','base64'); metadata_wsdl = 'node_modules/sfdc-verify-tools/sfdc/wsdl/sfdc_metadata_wsdl.xml'; } catch(e){ deployable = fs.readFileSync('sfdc/res/simpleClasses.zip', 'base64'); metadata_wsdl = 'sfdc/wsdl/sfdc_metadata_wsdl.xml'; } var deployOptions = { zipFile: deployable, DeployOptions : { checkOnly: false, singlePackage: false, } }; module.exports.beginDeploy = function(creds, callback) { getMetadataClient(creds, function(err, met_client){ met_client.deploy(deployOptions, function(err, deployResult){ if(err){ callback(err.body); return; } callback(null,deployResult.result.id); }) }); } module.exports.checkDeployStatus = function(creds, id, callback, timeout){ getMetadataClient(creds, function(err, met_client){ if(err){ callback(err); return; } var statusOptions = { asyncProcessId: id }; getSfdcStatusResponse(met_client.checkDeployStatus, statusOptions, function(err, deployStatus){ if(err){ callback(err.body); return; } callback(null, getTimingFromStatus(deployStatus)); }, timeout); }); } function getTimingFromStatus(deployStatus){ var created = deployStatus.result.createdDate; var completed = deployStatus.result.completedDate; var started = deployStatus.result.startDate; var res = {}; res.createdDate = Date.parse(created); res.completedDate = Date.parse(completed); res.startDate = Date.parse(started); res.deployId = deployStatus.result.id; res.queuedSeconds = (res.startDate - res.createdDate)/1000; res.executionSeconds = (res.completedDate - res.startDate)/1000; return res; } function getMetadataClient(creds, callback){ enterprise.sfdcLogin(creds, function(err, loginResult){ if(err){ callback(err); return; } //save the server and session var server = loginResult.result.metadataServerUrl; var session = loginResult.result.sessionId; soap.createClient(metadata_wsdl, function(err, met_client){ if(err){ callback(err.body); return; } //set the session headers for metadata API use met_client.setEndpoint(server); var sessionHeader = {SessionHeader: {sessionId: session}}; met_client.addSoapHeader(sessionHeader,'','tns','http://soap.sforce.com/2006/04/metadata'); callback(null, met_client); }); }); } function getSfdcStatusResponse(statusFunction, options, callback, timeout){ statusFunction(options, function(err, response){ if(err){ callback(err,response); } else if(response.result.done){ callback(err, response); } else { setTimeout(function(){ getSfdcStatusResponse(statusFunction, options, callback); }, timeout ? timeout : 10000); } }); } }());