jsforce2 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +74 -0
- package/bin/jsforce +3 -0
- package/bower.json +30 -0
- package/build/jsforce-api-analytics.js +393 -0
- package/build/jsforce-api-analytics.min.js +2 -0
- package/build/jsforce-api-analytics.min.js.map +1 -0
- package/build/jsforce-api-apex.js +183 -0
- package/build/jsforce-api-apex.min.js +2 -0
- package/build/jsforce-api-apex.min.js.map +1 -0
- package/build/jsforce-api-bulk.js +1054 -0
- package/build/jsforce-api-bulk.min.js +2 -0
- package/build/jsforce-api-bulk.min.js.map +1 -0
- package/build/jsforce-api-chatter.js +320 -0
- package/build/jsforce-api-chatter.min.js +2 -0
- package/build/jsforce-api-chatter.min.js.map +1 -0
- package/build/jsforce-api-metadata.js +3020 -0
- package/build/jsforce-api-metadata.min.js +2 -0
- package/build/jsforce-api-metadata.min.js.map +1 -0
- package/build/jsforce-api-soap.js +403 -0
- package/build/jsforce-api-soap.min.js +2 -0
- package/build/jsforce-api-soap.min.js.map +1 -0
- package/build/jsforce-api-streaming.js +3479 -0
- package/build/jsforce-api-streaming.min.js +2 -0
- package/build/jsforce-api-streaming.min.js.map +1 -0
- package/build/jsforce-api-tooling.js +319 -0
- package/build/jsforce-api-tooling.min.js +2 -0
- package/build/jsforce-api-tooling.min.js.map +1 -0
- package/build/jsforce-core.js +25250 -0
- package/build/jsforce-core.min.js +2 -0
- package/build/jsforce-core.min.js.map +1 -0
- package/build/jsforce.js +31637 -0
- package/build/jsforce.min.js +2 -0
- package/build/jsforce.min.js.map +1 -0
- package/core.js +1 -0
- package/index.js +1 -0
- package/lib/VERSION.js +2 -0
- package/lib/_required.js +29 -0
- package/lib/api/analytics.js +387 -0
- package/lib/api/apex.js +177 -0
- package/lib/api/bulk.js +862 -0
- package/lib/api/chatter.js +314 -0
- package/lib/api/index.js +8 -0
- package/lib/api/metadata.js +848 -0
- package/lib/api/soap.js +397 -0
- package/lib/api/streaming-extension.js +136 -0
- package/lib/api/streaming.js +270 -0
- package/lib/api/tooling.js +313 -0
- package/lib/browser/canvas.js +90 -0
- package/lib/browser/client.js +241 -0
- package/lib/browser/core.js +5 -0
- package/lib/browser/jsforce.js +6 -0
- package/lib/browser/jsonp.js +52 -0
- package/lib/browser/request.js +70 -0
- package/lib/cache.js +252 -0
- package/lib/cli/cli.js +431 -0
- package/lib/cli/repl.js +337 -0
- package/lib/connection.js +1881 -0
- package/lib/core.js +16 -0
- package/lib/csv.js +50 -0
- package/lib/date.js +163 -0
- package/lib/http-api.js +300 -0
- package/lib/jsforce.js +10 -0
- package/lib/logger.js +52 -0
- package/lib/oauth2.js +206 -0
- package/lib/process.js +275 -0
- package/lib/promise.js +164 -0
- package/lib/query.js +881 -0
- package/lib/quick-action.js +90 -0
- package/lib/record-stream.js +305 -0
- package/lib/record.js +107 -0
- package/lib/registry/file-registry.js +48 -0
- package/lib/registry/index.js +3 -0
- package/lib/registry/registry.js +111 -0
- package/lib/require.js +14 -0
- package/lib/soap.js +207 -0
- package/lib/sobject.js +558 -0
- package/lib/soql-builder.js +236 -0
- package/lib/transport.js +233 -0
- package/package.json +110 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Manages Salesforce Chatter REST API calls
|
|
3
|
+
* @author Shinichi Tomita <shinichi.tomita@gmail.com>
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
var inherits = require('inherits'),
|
|
9
|
+
_ = require('lodash/core'),
|
|
10
|
+
jsforce = require('../core'),
|
|
11
|
+
Promise = require('../promise');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* API class for Chatter REST API call
|
|
15
|
+
*
|
|
16
|
+
* @class
|
|
17
|
+
* @param {Connection} conn Connection
|
|
18
|
+
*/
|
|
19
|
+
var Chatter = module.exports = function(conn) {
|
|
20
|
+
this._conn = conn;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Sending request to API endpoint
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
Chatter.prototype._request = function(params, callback) {
|
|
28
|
+
if (/^(put|post|patch)$/i.test(params.method)) {
|
|
29
|
+
if (_.isObject(params.body)) {
|
|
30
|
+
params.headers = {
|
|
31
|
+
"Content-Type": "application/json"
|
|
32
|
+
};
|
|
33
|
+
params.body = JSON.stringify(params.body);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
params.url = this._normalizeUrl(params.url);
|
|
37
|
+
return this._conn.request(params, callback);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Convert path to site root relative url
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
Chatter.prototype._normalizeUrl = function(url) {
|
|
45
|
+
if (url.indexOf('/chatter/') === 0 || url.indexOf('/connect/') === 0) {
|
|
46
|
+
return '/services/data/v' + this._conn.version + url;
|
|
47
|
+
} else if (/^\/v[\d]+\.[\d]+\//.test(url)) {
|
|
48
|
+
return '/services/data' + url;
|
|
49
|
+
} else if (url.indexOf('/services/') !== 0 && url[0] === '/') {
|
|
50
|
+
return '/services/data/v' + this._conn.version + '/chatter' + url;
|
|
51
|
+
} else {
|
|
52
|
+
return url;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @typedef {Object} Chatter~RequestParams
|
|
58
|
+
* @prop {String} method - HTTP method
|
|
59
|
+
* @prop {String} url - Resource URL
|
|
60
|
+
* @prop {String} [body] - HTTP body (in POST/PUT/PATCH methods)
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @typedef {Object} Chatter~RequestResult
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Make a request for chatter API resource
|
|
69
|
+
*
|
|
70
|
+
* @param {Chatter~RequestParams} params - Paramters representing HTTP request
|
|
71
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback func
|
|
72
|
+
* @returns {Chatter~Request}
|
|
73
|
+
*/
|
|
74
|
+
Chatter.prototype.request = function(params, callback) {
|
|
75
|
+
return new Request(this, params).thenCall(callback);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Make a resource request to chatter API
|
|
80
|
+
*
|
|
81
|
+
* @param {String} url - Resource URL
|
|
82
|
+
* @param {Object} [queryParams] - Query parameters (in hash object)
|
|
83
|
+
* @returns {Chatter~Resource}
|
|
84
|
+
*/
|
|
85
|
+
Chatter.prototype.resource = function(url, queryParams) {
|
|
86
|
+
return new Resource(this, url, queryParams);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @typedef {Object} Chatter~BatchRequestResult
|
|
91
|
+
* @prop {Boolean} hasError - Flag if the batch has one or more errors
|
|
92
|
+
* @prop {Array.<Object>} results - Batch request results in array
|
|
93
|
+
* @prop {Number} results.statusCode - HTTP response status code
|
|
94
|
+
* @prop {Chatter~RequestResult} results.result - Parsed HTTP response body
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Make a batch request to chatter API
|
|
99
|
+
*
|
|
100
|
+
* @params {Array.<Chatter~Request>} requests - Chatter API requests
|
|
101
|
+
* @param {Callback.<Chatter~BatchRequestResult>} [callback] - Callback func
|
|
102
|
+
* @returns {Promise.<Chatter~BatchRequestResult>}
|
|
103
|
+
*/
|
|
104
|
+
Chatter.prototype.batch = function(requests, callback) {
|
|
105
|
+
var self = this;
|
|
106
|
+
var batchRequests = [], batchDeferreds = [];
|
|
107
|
+
_.forEach(requests, function(request) {
|
|
108
|
+
var deferred = Promise.defer();
|
|
109
|
+
request._promise = deferred.promise;
|
|
110
|
+
batchRequests.push(request.batchParams());
|
|
111
|
+
batchDeferreds.push(deferred);
|
|
112
|
+
});
|
|
113
|
+
var params = {
|
|
114
|
+
method: 'POST',
|
|
115
|
+
url: this._normalizeUrl('/connect/batch'),
|
|
116
|
+
body: {
|
|
117
|
+
batchRequests: batchRequests
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
return this.request(params).then(function(res) {
|
|
121
|
+
_.forEach(res.results, function(result, i) {
|
|
122
|
+
var deferred = batchDeferreds[i];
|
|
123
|
+
if (result.statusCode >= 400) {
|
|
124
|
+
deferred.reject(result.result);
|
|
125
|
+
} else {
|
|
126
|
+
deferred.resolve(result.result);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
return res;
|
|
130
|
+
}).thenCall(callback);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
/*--------------------------------------------*/
|
|
135
|
+
/**
|
|
136
|
+
* A class representing chatter API request
|
|
137
|
+
*
|
|
138
|
+
* @protected
|
|
139
|
+
* @class Chatter~Request
|
|
140
|
+
* @implements {Promise.<Chatter~RequestResult>}
|
|
141
|
+
* @param {Chatter} chatter - Chatter API object
|
|
142
|
+
* @param {Chatter~RequestParams} params - Paramters representing HTTP request
|
|
143
|
+
*/
|
|
144
|
+
var Request = function(chatter, params) {
|
|
145
|
+
this._chatter = chatter;
|
|
146
|
+
this._params = params;
|
|
147
|
+
this._promise = null;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @typedef {Object} Chatter~BatchRequestParams
|
|
152
|
+
* @prop {String} method - HTTP method
|
|
153
|
+
* @prop {String} url - Resource URL
|
|
154
|
+
* @prop {String} [richInput] - HTTP body (in POST/PUT/PATCH methods)
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Retrieve parameters in batch request form
|
|
159
|
+
*
|
|
160
|
+
* @method Chatter~Request#batchParams
|
|
161
|
+
* @returns {Chatter~BatchRequestParams}
|
|
162
|
+
*/
|
|
163
|
+
Request.prototype.batchParams = function() {
|
|
164
|
+
var params = this._params;
|
|
165
|
+
var batchParams = {
|
|
166
|
+
method: params.method,
|
|
167
|
+
url: this._chatter._normalizeUrl(params.url)
|
|
168
|
+
};
|
|
169
|
+
if (this._params.body) {
|
|
170
|
+
batchParams.richInput = this._params.body;
|
|
171
|
+
}
|
|
172
|
+
return batchParams;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Retrieve parameters in batch request form
|
|
177
|
+
*
|
|
178
|
+
* @method Chatter~Request#promise
|
|
179
|
+
* @returns {Promise.<Chatter~RequestResult>}
|
|
180
|
+
*/
|
|
181
|
+
Request.prototype.promise = function() {
|
|
182
|
+
return this._promise || this._chatter._request(this._params);
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Returns Node.js Stream object for request
|
|
187
|
+
*
|
|
188
|
+
* @method Chatter~Request#stream
|
|
189
|
+
* @returns {stream.Stream}
|
|
190
|
+
*/
|
|
191
|
+
Request.prototype.stream = function() {
|
|
192
|
+
return this._chatter._request(this._params).stream();
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Promise/A+ interface
|
|
197
|
+
* http://promises-aplus.github.io/promises-spec/
|
|
198
|
+
*
|
|
199
|
+
* Delegate to deferred promise, return promise instance for batch result
|
|
200
|
+
*
|
|
201
|
+
* @method Chatter~Request#then
|
|
202
|
+
*/
|
|
203
|
+
Request.prototype.then = function(onResolve, onReject) {
|
|
204
|
+
return this.promise().then(onResolve, onReject);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Promise/A+ extension
|
|
209
|
+
* Call "then" using given node-style callback function
|
|
210
|
+
*
|
|
211
|
+
* @method Chatter~Request#thenCall
|
|
212
|
+
*/
|
|
213
|
+
Request.prototype.thenCall = function(callback) {
|
|
214
|
+
return _.isFunction(callback) ? this.promise().thenCall(callback) : this;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
/*--------------------------------------------*/
|
|
219
|
+
/**
|
|
220
|
+
* A class representing chatter API resource
|
|
221
|
+
*
|
|
222
|
+
* @protected
|
|
223
|
+
* @class Chatter~Resource
|
|
224
|
+
* @extends Chatter~Request
|
|
225
|
+
* @param {Chatter} chatter - Chatter API object
|
|
226
|
+
* @param {String} url - Resource URL
|
|
227
|
+
* @param {Object} [queryParams] - Query parameters (in hash object)
|
|
228
|
+
*/
|
|
229
|
+
var Resource = function(chatter, url, queryParams) {
|
|
230
|
+
if (queryParams) {
|
|
231
|
+
var qstring = _.map(_.keys(queryParams), function(name) {
|
|
232
|
+
return name + "=" + encodeURIComponent(queryParams[name]);
|
|
233
|
+
}).join('&');
|
|
234
|
+
url += (url.indexOf('?') > 0 ? '&' : '?') + qstring;
|
|
235
|
+
}
|
|
236
|
+
Resource.super_.call(this, chatter, { method: 'GET', url: url });
|
|
237
|
+
this._url = url;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
inherits(Resource, Request);
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Create a new resource
|
|
244
|
+
*
|
|
245
|
+
* @method Chatter~Resource#create
|
|
246
|
+
* @param {Object} data - Data to newly post
|
|
247
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
248
|
+
* @returns {Chatter~Request}
|
|
249
|
+
*/
|
|
250
|
+
Resource.prototype.create = function(data, callback) {
|
|
251
|
+
return this._chatter.request({
|
|
252
|
+
method: 'POST',
|
|
253
|
+
url: this._url,
|
|
254
|
+
body: data
|
|
255
|
+
}).thenCall(callback);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Retrieve resource content
|
|
260
|
+
*
|
|
261
|
+
* @method Chatter~Resource#retrieve
|
|
262
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
263
|
+
* @returns {Chatter~Request}
|
|
264
|
+
*/
|
|
265
|
+
Resource.prototype.retrieve = function(callback) {
|
|
266
|
+
return this.thenCall(callback);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Update specified resource
|
|
271
|
+
*
|
|
272
|
+
* @method Chatter~Resource#update
|
|
273
|
+
* @param {Object} data - Data to update
|
|
274
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
275
|
+
* @returns {Chatter~Request}
|
|
276
|
+
*/
|
|
277
|
+
Resource.prototype.update = function(data, callback) {
|
|
278
|
+
return this._chatter.request({
|
|
279
|
+
method: 'PATCH',
|
|
280
|
+
url: this._url,
|
|
281
|
+
body: data
|
|
282
|
+
}).thenCall(callback);
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Synonym of Resource#delete()
|
|
287
|
+
*
|
|
288
|
+
* @method Chatter~Resource#del
|
|
289
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
290
|
+
* @returns {Chatter~Request}
|
|
291
|
+
*/
|
|
292
|
+
/**
|
|
293
|
+
* Delete specified resource
|
|
294
|
+
*
|
|
295
|
+
* @method Chatter~Resource#delete
|
|
296
|
+
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
297
|
+
* @returns {Chatter~Request}
|
|
298
|
+
*/
|
|
299
|
+
Resource.prototype.del =
|
|
300
|
+
Resource.prototype["delete"] = function(callback) {
|
|
301
|
+
return this._chatter.request({
|
|
302
|
+
method: 'DELETE',
|
|
303
|
+
url: this._url
|
|
304
|
+
}).thenCall(callback);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
/*--------------------------------------------*/
|
|
309
|
+
/*
|
|
310
|
+
* Register hook in connection instantiation for dynamically adding this API module features
|
|
311
|
+
*/
|
|
312
|
+
jsforce.on('connection:new', function(conn) {
|
|
313
|
+
conn.chatter = new Chatter(conn);
|
|
314
|
+
});
|