PageRenderTime 25ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/ajax/libs/jsforce/1.5.0/jsforce-api-chatter.js

https://gitlab.com/Mirros/cdnjs
JavaScript | 307 lines | 130 code | 26 blank | 151 comment | 18 complexity | de7f45c96949097731d229e16f7b6288 MD5 | raw file
  1. (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.jsforce||(g.jsforce = {}));g=(g.modules||(g.modules = {}));g=(g.api||(g.api = {}));g.Chatter = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  2. /**
  3. * @file Manages Salesforce Chatter REST API calls
  4. * @author Shinichi Tomita <shinichi.tomita@gmail.com>
  5. */
  6. 'use strict';
  7. var inherits = jsforce.require('inherits'),
  8. _ = jsforce.require('underscore'),
  9. Promise = jsforce.require('./promise');
  10. /**
  11. * API class for Chatter REST API call
  12. *
  13. * @class
  14. * @param {Connection} conn Connection
  15. */
  16. var Chatter = module.exports = function(conn) {
  17. this._conn = conn;
  18. };
  19. /**
  20. * Sending request to API endpoint
  21. * @private
  22. */
  23. Chatter.prototype._request = function(params, callback) {
  24. if (/^(put|post|patch)$/i.test(params.method)) {
  25. if (_.isObject(params.body)) {
  26. params.headers = {
  27. "Content-Type": "application/json"
  28. };
  29. params.body = JSON.stringify(params.body);
  30. }
  31. }
  32. params.url = this._normalizeUrl(params.url);
  33. return this._conn.request(params, callback);
  34. };
  35. /**
  36. * Convert path to site root relative url
  37. * @private
  38. */
  39. Chatter.prototype._normalizeUrl = function(url) {
  40. if (url.indexOf('/chatter/') === 0 || url.indexOf('/connect/') === 0) {
  41. return '/services/data/v' + this._conn.version + url;
  42. } else if (/^\/v[\d]+\.[\d]+\//.test(url)) {
  43. return '/services/data' + url;
  44. } else if (url.indexOf('/services/') !== 0 && url[0] === '/') {
  45. return '/services/data/v' + this._conn.version + '/chatter' + url;
  46. } else {
  47. return url;
  48. }
  49. };
  50. /**
  51. * @typedef {Object} Chatter~RequestParams
  52. * @prop {String} method - HTTP method
  53. * @prop {String} url - Resource URL
  54. * @prop {String} [body] - HTTP body (in POST/PUT/PATCH methods)
  55. */
  56. /**
  57. * @typedef {Object} Chatter~RequestResult
  58. */
  59. /**
  60. * Make a request for chatter API resource
  61. *
  62. * @param {Chatter~RequestParams} params - Paramters representing HTTP request
  63. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback func
  64. * @returns {Chatter~Request}
  65. */
  66. Chatter.prototype.request = function(params, callback) {
  67. return new Request(this, params).thenCall(callback);
  68. };
  69. /**
  70. * Make a resource request to chatter API
  71. *
  72. * @param {String} url - Resource URL
  73. * @param {Object} [queryParams] - Query parameters (in hash object)
  74. * @returns {Chatter~Resource}
  75. */
  76. Chatter.prototype.resource = function(url, queryParams) {
  77. return new Resource(this, url, queryParams);
  78. };
  79. /**
  80. * @typedef {Object} Chatter~BatchRequestResult
  81. * @prop {Boolean} hasError - Flag if the batch has one or more errors
  82. * @prop {Array.<Object>} results - Batch request results in array
  83. * @prop {Number} results.statusCode - HTTP response status code
  84. * @prop {Chatter~RequestResult} results.result - Parsed HTTP response body
  85. */
  86. /**
  87. * Make a batch request to chatter API
  88. *
  89. * @params {Array.<Chatter~Request>} requests - Chatter API requests
  90. * @param {Callback.<Chatter~BatchRequestResult>} [callback] - Callback func
  91. * @returns {Promise.<Chatter~BatchRequestResult>}
  92. */
  93. Chatter.prototype.batch = function(requests, callback) {
  94. var self = this;
  95. var batchRequests = [], batchDeferreds = [];
  96. _.forEach(requests, function(request) {
  97. var deferred = Promise.defer();
  98. request._promise = deferred.promise;
  99. batchRequests.push(request.batchParams());
  100. batchDeferreds.push(deferred);
  101. });
  102. var params = {
  103. method: 'POST',
  104. url: this._normalizeUrl('/connect/batch'),
  105. body: {
  106. batchRequests: batchRequests
  107. }
  108. };
  109. return this.request(params).then(function(res) {
  110. _.forEach(res.results, function(result, i) {
  111. var deferred = batchDeferreds[i];
  112. if (result.statusCode >= 400) {
  113. deferred.reject(result.result);
  114. } else {
  115. deferred.resolve(result.result);
  116. }
  117. });
  118. return res;
  119. }).thenCall(callback);
  120. };
  121. /*--------------------------------------------*/
  122. /**
  123. * A class representing chatter API request
  124. *
  125. * @protected
  126. * @class Chatter~Request
  127. * @implements {Promise.<Chatter~RequestResult>}
  128. * @param {Chatter} chatter - Chatter API object
  129. * @param {Chatter~RequestParams} params - Paramters representing HTTP request
  130. */
  131. var Request = function(chatter, params) {
  132. this._chatter = chatter;
  133. this._params = params;
  134. this._promise = null;
  135. };
  136. /**
  137. * @typedef {Object} Chatter~BatchRequestParams
  138. * @prop {String} method - HTTP method
  139. * @prop {String} url - Resource URL
  140. * @prop {String} [richInput] - HTTP body (in POST/PUT/PATCH methods)
  141. */
  142. /**
  143. * Retrieve parameters in batch request form
  144. *
  145. * @method Chatter~Request#batchParams
  146. * @returns {Chatter~BatchRequestParams}
  147. */
  148. Request.prototype.batchParams = function() {
  149. var params = this._params;
  150. var batchParams = {
  151. method: params.method,
  152. url: this._chatter._normalizeUrl(params.url)
  153. };
  154. if (this._params.body) {
  155. batchParams.richInput = this._params.body;
  156. }
  157. return batchParams;
  158. };
  159. /**
  160. * Retrieve parameters in batch request form
  161. *
  162. * @method Chatter~Request#promise
  163. * @returns {Promise.<Chatter~RequestResult>}
  164. */
  165. Request.prototype.promise = function() {
  166. return this._promise || this._chatter._request(this._params);
  167. };
  168. /**
  169. * Returns Node.js Stream object for request
  170. *
  171. * @method Chatter~Request#stream
  172. * @returns {stream.Stream}
  173. */
  174. Request.prototype.stream = function() {
  175. return this._chatter._request(this._params).stream();
  176. };
  177. /**
  178. * Promise/A+ interface
  179. * http://promises-aplus.github.io/promises-spec/
  180. *
  181. * Delegate to deferred promise, return promise instance for batch result
  182. *
  183. * @method Chatter~Request#then
  184. */
  185. Request.prototype.then = function(onResolve, onReject) {
  186. return this.promise().then(onResolve, onReject);
  187. };
  188. /**
  189. * Promise/A+ extension
  190. * Call "then" using given node-style callback function
  191. *
  192. * @method Chatter~Request#thenCall
  193. */
  194. Request.prototype.thenCall = function(callback) {
  195. return _.isFunction(callback) ? this.promise().thenCall(callback) : this;
  196. };
  197. /*--------------------------------------------*/
  198. /**
  199. * A class representing chatter API resource
  200. *
  201. * @protected
  202. * @class Chatter~Resource
  203. * @extends Chatter~Request
  204. * @param {Chatter} chatter - Chatter API object
  205. * @param {String} url - Resource URL
  206. * @param {Object} [queryParams] - Query parameters (in hash object)
  207. */
  208. var Resource = function(chatter, url, queryParams) {
  209. if (queryParams) {
  210. var qstring = _.map(_.keys(queryParams), function(name) {
  211. return name + "=" + encodeURIComponent(queryParams[name]);
  212. }).join('&');
  213. url += (url.indexOf('?') > 0 ? '&' : '?') + qstring;
  214. }
  215. Resource.super_.call(this, chatter, { method: 'GET', url: url });
  216. this._url = url;
  217. };
  218. inherits(Resource, Request);
  219. /**
  220. * Create a new resource
  221. *
  222. * @method Chatter~Resource#create
  223. * @param {Object} data - Data to newly post
  224. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
  225. * @returns {Chatter~Request}
  226. */
  227. Resource.prototype.create = function(data, callback) {
  228. return this._chatter.request({
  229. method: 'POST',
  230. url: this._url,
  231. body: data
  232. }).thenCall(callback);
  233. };
  234. /**
  235. * Retrieve resource content
  236. *
  237. * @method Chatter~Resource#retrieve
  238. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
  239. * @returns {Chatter~Request}
  240. */
  241. Resource.prototype.retrieve = function(callback) {
  242. return this.thenCall(callback);
  243. };
  244. /**
  245. * Update specified resource
  246. *
  247. * @method Chatter~Resource#update
  248. * @param {Obejct} data - Data to update
  249. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
  250. * @returns {Chatter~Request}
  251. */
  252. Resource.prototype.update = function(data, callback) {
  253. return this._chatter.request({
  254. method: 'POST',
  255. url: this._url,
  256. body: data
  257. }).thenCall(callback);
  258. };
  259. /**
  260. * Synonym of Resource#delete()
  261. *
  262. * @method Chatter~Resource#del
  263. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
  264. * @returns {Chatter~Request}
  265. */
  266. /**
  267. * Delete specified resource
  268. *
  269. * @method Chatter~Resource#delete
  270. * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
  271. * @returns {Chatter~Request}
  272. */
  273. Resource.prototype.del =
  274. Resource.prototype["delete"] = function(callback) {
  275. return this._chatter.request({
  276. method: 'DELETE',
  277. url: this._url
  278. }).thenCall(callback);
  279. };
  280. },{}]},{},[1])(1)
  281. });