UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

173 lines (158 loc) 4.69 kB
/** * @file Manages Salesforce Apex REST endpoint calls * @author Shinichi Tomita <shinichi.tomita@gmail.com> */ 'use strict'; var jsforce = require('../core'); /** * API class for Apex REST endpoint call * * @class * @param {Connection} conn Connection */ var Apex = function(conn) { this._conn = conn; }; /** * @private */ Apex.prototype._baseUrl = function() { return this._conn.instanceUrl + "/services/apexrest"; }; /** * @private */ Apex.prototype._createRequestParams = function(method, path, body, options) { var params = { method: method, url: this._baseUrl() + path }, _headers = {}; if(options && 'object' === typeof options['headers']){ _headers = options['headers']; } if (!/^(GET|DELETE)$/i.test(method)) { _headers["Content-Type"] = "application/json"; } params.headers = _headers; if (body) { params.body = JSON.stringify(body); } return params; }; /** * Call Apex REST service in GET request * * @param {String} path - URL path to Apex REST service * @param {Object} options - Holds headers and other meta data for the request. * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ Apex.prototype.get = function(path, options, callback) { if (typeof options === 'function') { callback = options; options = undefined; } return this._conn.request(this._createRequestParams('GET', path, undefined, options)).thenCall(callback); }; /** * Call Apex REST service in POST request * * @param {String} path - URL path to Apex REST service * @param {Object} [body] - Request body * @param {Object} options - Holds headers and other meta data for the request. * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ Apex.prototype.post = function(path, body, options, callback) { if (typeof body === 'function') { callback = body; body = undefined; options = undefined; } if (typeof options === 'function') { callback = options; options = undefined; } var params = this._createRequestParams('POST', path, body, options); return this._conn.request(params).thenCall(callback); }; /** * Call Apex REST service in PUT request * * @param {String} path - URL path to Apex REST service * @param {Object} [body] - Request body * @param {Object} [options] - Holds headers and other meta data for the request. * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ Apex.prototype.put = function(path, body, options, callback) { if (typeof body === 'function') { callback = body; body = undefined; options = undefined; } if (typeof options === 'function') { callback = options; options = undefined; } var params = this._createRequestParams('PUT', path, body, options); return this._conn.request(params).thenCall(callback); }; /** * Call Apex REST service in PATCH request * * @param {String} path - URL path to Apex REST service * @param {Object} [body] - Request body * @param {Object} [options] - Holds headers and other meta data for the request. * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ Apex.prototype.patch = function(path, body, options, callback) { if (typeof body === 'function') { callback = body; body = undefined; options = undefined; } if (typeof options === 'function') { callback = options; options = undefined; } var params = this._createRequestParams('PATCH', path, body, options); return this._conn.request(params).thenCall(callback); }; /** * Synonym of Apex#delete() * * @method Apex#del * * @param {String} path - URL path to Apex REST service * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ /** * Call Apex REST service in DELETE request * * @method Apex#delete * * @param {String} path - URL path to Apex REST service * @param {Object} [options] - Holds headers and other meta data for the request. * @param {Callback.<Object>} [callback] - Callback function * @returns {Promise.<Object>} */ Apex.prototype.del = Apex.prototype["delete"] = function(path, options, callback) { if (typeof options === 'function') { callback = options; options = undefined; } return this._conn.request(this._createRequestParams('DELETE', path, undefined, options)).thenCall(callback); }; /*--------------------------------------------*/ /* * Register hook in connection instantiation for dynamically adding this API module features */ jsforce.on('connection:new', function(conn) { conn.apex = new Apex(conn); }); module.exports = Apex;