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,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Create and build SOQL string from configuration
|
|
3
|
+
* @author Shinichi Tomita <shinichi.tomita@gmail.com>
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
var _ = require('lodash/core'),
|
|
9
|
+
SfDate = require("./date");
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create SOQL
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function createSOQL(query) {
|
|
17
|
+
var soql = [
|
|
18
|
+
"SELECT ",
|
|
19
|
+
createFieldsClause(query.fields, query.includes),
|
|
20
|
+
" FROM ",
|
|
21
|
+
query.table
|
|
22
|
+
].join("");
|
|
23
|
+
var cond = createConditionClause(query.conditions);
|
|
24
|
+
if (cond) {
|
|
25
|
+
soql += " WHERE " + cond;
|
|
26
|
+
}
|
|
27
|
+
var orderby = createOrderByClause(query.sort);
|
|
28
|
+
if (orderby) {
|
|
29
|
+
soql += " ORDER BY " + orderby;
|
|
30
|
+
}
|
|
31
|
+
if (query.limit) {
|
|
32
|
+
soql += " LIMIT " + query.limit;
|
|
33
|
+
}
|
|
34
|
+
if (query.offset) {
|
|
35
|
+
soql += " OFFSET " + query.offset;
|
|
36
|
+
}
|
|
37
|
+
return soql;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** @private **/
|
|
41
|
+
function createFieldsClause(fields, childQueries) {
|
|
42
|
+
childQueries = _.map(_.values(childQueries || {}), function(cquery) {
|
|
43
|
+
return '(' + createSOQL(cquery) + ')';
|
|
44
|
+
});
|
|
45
|
+
return (fields || [ "Id" ]).concat(childQueries).join(', ');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** @private **/
|
|
49
|
+
function createConditionClause(conditions, operator, depth) {
|
|
50
|
+
if (_.isString(conditions)) {
|
|
51
|
+
return conditions;
|
|
52
|
+
}
|
|
53
|
+
conditions = conditions || [];
|
|
54
|
+
operator = operator || "AND";
|
|
55
|
+
depth = depth || 0;
|
|
56
|
+
if (!isArray(conditions)) { // if passed in hash object
|
|
57
|
+
conditions = _.keys(conditions).map(function(key) {
|
|
58
|
+
return {
|
|
59
|
+
key: key,
|
|
60
|
+
value: conditions[key]
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
conditions = conditions.map(function(cond) {
|
|
65
|
+
var conds = [];
|
|
66
|
+
for (var key in cond) {
|
|
67
|
+
conds.push({
|
|
68
|
+
key: key,
|
|
69
|
+
value: cond[key]
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return conds.length>1 ? conds : conds[0];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
conditions = conditions.map(function(cond) {
|
|
76
|
+
var d = depth+1, op;
|
|
77
|
+
switch (cond.key) {
|
|
78
|
+
case "$or" :
|
|
79
|
+
case "$and" :
|
|
80
|
+
case "$not" :
|
|
81
|
+
if (operator !== "NOT" && conditions.length === 1) {
|
|
82
|
+
d = depth; // not change tree depth
|
|
83
|
+
}
|
|
84
|
+
op = cond.key === "$or" ? "OR" :
|
|
85
|
+
cond.key === "$and" ? "AND" :
|
|
86
|
+
"NOT";
|
|
87
|
+
return createConditionClause(cond.value, op, d);
|
|
88
|
+
default:
|
|
89
|
+
return createFieldExpression(cond.key, cond.value);
|
|
90
|
+
}
|
|
91
|
+
}).filter(function(expr) { return expr; });
|
|
92
|
+
|
|
93
|
+
var paren;
|
|
94
|
+
if (operator === 'NOT') {
|
|
95
|
+
paren = depth > 0;
|
|
96
|
+
return (paren ? "(" : "") + "NOT " + conditions[0] + (paren ? ")" : "");
|
|
97
|
+
} else {
|
|
98
|
+
paren = depth > 0 && conditions.length > 1;
|
|
99
|
+
return (paren ? "(" : "") + conditions.join(" "+operator+" ") + (paren ? ")" : "");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var opMap = {
|
|
104
|
+
"=" : "=",
|
|
105
|
+
"$eq" : "=",
|
|
106
|
+
"!=" : "!=",
|
|
107
|
+
"$ne" : "!=",
|
|
108
|
+
">" : ">",
|
|
109
|
+
"$gt" : ">",
|
|
110
|
+
"<" : "<",
|
|
111
|
+
"$lt" : "<",
|
|
112
|
+
">=" : ">=",
|
|
113
|
+
"$gte" : ">=",
|
|
114
|
+
"<=" : "<=",
|
|
115
|
+
"$lte" : "<=",
|
|
116
|
+
"$like" : "LIKE",
|
|
117
|
+
"$nlike" : "NOT LIKE",
|
|
118
|
+
"$in" : "IN",
|
|
119
|
+
"$nin" : "NOT IN",
|
|
120
|
+
"$includes" : "INCLUDES",
|
|
121
|
+
"$excludes" : "EXCLUDES",
|
|
122
|
+
"$exists" : "EXISTS"
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/** @private **/
|
|
126
|
+
function createFieldExpression(field, value) {
|
|
127
|
+
// Assume the `$in` operator if value is an array and none was supplied.
|
|
128
|
+
if (_.isArray(value)) {
|
|
129
|
+
return createOpExpression(field, "$in", value);
|
|
130
|
+
}
|
|
131
|
+
// Otherwise, if an object was passed then process the supplied ops.
|
|
132
|
+
else if (_.isObject(value)) {
|
|
133
|
+
var expressions = _.map(value, function (v, k) {
|
|
134
|
+
if (k[0] === "$") return createOpExpression(field, k, v);
|
|
135
|
+
});
|
|
136
|
+
return expressions.join(' AND ');
|
|
137
|
+
}
|
|
138
|
+
// If the value is a scalar, it's an equality condition.
|
|
139
|
+
else return createOpExpression(field, "$eq", value);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** @private **/
|
|
143
|
+
function createOpExpression(field, op, value) {
|
|
144
|
+
var sfop = opMap[op];
|
|
145
|
+
if (!sfop || _.isUndefined(value)) { return null; }
|
|
146
|
+
var valueExpr = createValueExpression(value);
|
|
147
|
+
if (_.isUndefined(valueExpr)) { return null; }
|
|
148
|
+
switch (sfop) {
|
|
149
|
+
case "NOT LIKE":
|
|
150
|
+
return "(" + [ "NOT", field, 'LIKE', valueExpr ].join(" ") + ")";
|
|
151
|
+
case "EXISTS":
|
|
152
|
+
return [ field, value ? "!=" : "=", "null" ].join(" ");
|
|
153
|
+
default:
|
|
154
|
+
return [ field, sfop, valueExpr ].join(" ");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** @private **/
|
|
159
|
+
function createValueExpression(value) {
|
|
160
|
+
if (isArray(value)) {
|
|
161
|
+
return value.length > 0 ?
|
|
162
|
+
"(" + value.map(createValueExpression).join(", ") + ")" :
|
|
163
|
+
undefined;
|
|
164
|
+
}
|
|
165
|
+
if (value instanceof SfDate) {
|
|
166
|
+
return value.toString();
|
|
167
|
+
}
|
|
168
|
+
if (_.isString(value)) {
|
|
169
|
+
return "'" + escapeSOQLString(value) + "'";
|
|
170
|
+
}
|
|
171
|
+
if (_.isNumber(value)) {
|
|
172
|
+
return (value).toString();
|
|
173
|
+
}
|
|
174
|
+
if (_.isNull(value)) {
|
|
175
|
+
return "null";
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** @private **/
|
|
181
|
+
function escapeSOQLString(str) {
|
|
182
|
+
return String(str || '').replace(/'/g, "\\'");
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** @private **/
|
|
186
|
+
function isArray(a) {
|
|
187
|
+
return _.isObject(a) && _.isFunction(a.pop);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
/** @private **/
|
|
192
|
+
function createOrderByClause(sort) {
|
|
193
|
+
sort = sort || [];
|
|
194
|
+
if (_.isString(sort)) {
|
|
195
|
+
if (/,|\s+(asc|desc)\s*$/.test(sort)) {
|
|
196
|
+
// must be specified in pure "order by" clause. Return raw config.
|
|
197
|
+
return sort;
|
|
198
|
+
}
|
|
199
|
+
// sort order in mongoose-style expression.
|
|
200
|
+
// e.g. "FieldA -FieldB" => "ORDER BY FieldA ASC, FieldB DESC"
|
|
201
|
+
sort = sort.split(/\s+/).map(function(field) {
|
|
202
|
+
var dir = "ASC"; // ascending
|
|
203
|
+
var flag = field[0];
|
|
204
|
+
if (flag === '-') {
|
|
205
|
+
dir = "DESC";
|
|
206
|
+
field = field.substring(1);
|
|
207
|
+
} else if (flag === '+') {
|
|
208
|
+
field = field.substring(1);
|
|
209
|
+
}
|
|
210
|
+
return [ field, dir ];
|
|
211
|
+
});
|
|
212
|
+
} else if (!isArray(sort)) {
|
|
213
|
+
sort = _.keys(sort).map(function(field) {
|
|
214
|
+
var dir = sort[field];
|
|
215
|
+
return [ field, dir ];
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return sort.map(function(s) {
|
|
219
|
+
var field = s[0], dir = s[1];
|
|
220
|
+
switch (String(dir)) {
|
|
221
|
+
case "DESC":
|
|
222
|
+
case "desc":
|
|
223
|
+
case "descending":
|
|
224
|
+
case "-":
|
|
225
|
+
case "-1":
|
|
226
|
+
dir = "DESC";
|
|
227
|
+
break;
|
|
228
|
+
default:
|
|
229
|
+
dir = "ASC";
|
|
230
|
+
}
|
|
231
|
+
return field + " " + dir;
|
|
232
|
+
}).join(", ");
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
exports.createSOQL = createSOQL;
|
package/lib/transport.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/*global process, Sfdc */
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var inherits = require('inherits'),
|
|
6
|
+
Promise = require('./promise');
|
|
7
|
+
|
|
8
|
+
/* */
|
|
9
|
+
|
|
10
|
+
var request = require('request'),
|
|
11
|
+
canvas = require('./browser/canvas'),
|
|
12
|
+
jsonp = require('./browser/jsonp');
|
|
13
|
+
|
|
14
|
+
// set options if defaults setting is available in request, which is not available in xhr module.
|
|
15
|
+
if (request.defaults) {
|
|
16
|
+
var defaults = {
|
|
17
|
+
followAllRedirects: true
|
|
18
|
+
};
|
|
19
|
+
if (process.env.HTTP_PROXY) {
|
|
20
|
+
defaults.proxy = process.env.HTTP_PROXY;
|
|
21
|
+
}
|
|
22
|
+
if (parseInt(process.env.HTTP_TIMEOUT)) {
|
|
23
|
+
defaults.timeout = parseInt(process.env.HTTP_TIMEOUT);
|
|
24
|
+
}
|
|
25
|
+
request = request.defaults(defaults);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var baseUrl;
|
|
29
|
+
if (typeof window === 'undefined') {
|
|
30
|
+
baseUrl = process.env.LOCATION_BASE_URL || "";
|
|
31
|
+
} else {
|
|
32
|
+
var apiHost = normalizeApiHost(window.location.host);
|
|
33
|
+
baseUrl = apiHost ? "https://" + apiHost : "";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Add stream() method to promise (and following promise chain), to access original request stream.
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
function streamify(promise, factory) {
|
|
41
|
+
var _then = promise.then;
|
|
42
|
+
promise.then = function() {
|
|
43
|
+
factory();
|
|
44
|
+
var newPromise = _then.apply(promise, arguments);
|
|
45
|
+
return streamify(newPromise, factory);
|
|
46
|
+
};
|
|
47
|
+
promise.stream = factory;
|
|
48
|
+
return promise;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Normarize Salesforce API host name
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
function normalizeApiHost(apiHost) {
|
|
56
|
+
var m = /(\w+)\.(visual\.force|salesforce)\.com$/.exec(apiHost);
|
|
57
|
+
if (m) {
|
|
58
|
+
apiHost = m[1] + ".salesforce.com";
|
|
59
|
+
}
|
|
60
|
+
return apiHost;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Class for HTTP request transport
|
|
65
|
+
*
|
|
66
|
+
* @class
|
|
67
|
+
* @protected
|
|
68
|
+
*/
|
|
69
|
+
var Transport = module.exports = function() {};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Make HTTP request, returns promise instead of stream
|
|
73
|
+
*
|
|
74
|
+
* @param {Object} params - HTTP request
|
|
75
|
+
* @param {Callback.<Object>} [callback] - Calback Function
|
|
76
|
+
* @returns {Promise.<Object>}
|
|
77
|
+
*/
|
|
78
|
+
Transport.prototype.httpRequest = function(params, callback) {
|
|
79
|
+
var deferred = Promise.defer();
|
|
80
|
+
var req;
|
|
81
|
+
var httpRequest = this._getHttpRequestModule();
|
|
82
|
+
var createRequest = function() {
|
|
83
|
+
if (!req) {
|
|
84
|
+
req = httpRequest(params, function(err, response) {
|
|
85
|
+
if (err) {
|
|
86
|
+
deferred.reject(err);
|
|
87
|
+
} else {
|
|
88
|
+
deferred.resolve(response);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return req;
|
|
93
|
+
};
|
|
94
|
+
return streamify(deferred.promise, createRequest).thenCall(callback);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/** @protected **/
|
|
98
|
+
Transport.prototype._getHttpRequestModule = function() {
|
|
99
|
+
return request;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Class for JSONP request transport
|
|
105
|
+
* @class Transport~JsonpTransport
|
|
106
|
+
* @protected
|
|
107
|
+
* @extends Transport
|
|
108
|
+
* @param {String} jsonpParam - Callback parameter name for JSONP invokation.
|
|
109
|
+
*/
|
|
110
|
+
var JsonpTransport = Transport.JsonpTransport = function(jsonpParam) {
|
|
111
|
+
this._jsonpParam = jsonpParam;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
inherits(JsonpTransport, Transport);
|
|
115
|
+
|
|
116
|
+
/** @protected **/
|
|
117
|
+
JsonpTransport.prototype._getHttpRequestModule = function() {
|
|
118
|
+
return jsonp.createRequest(this._jsonpParam);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
JsonpTransport.supported = jsonp.supported;
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Class for Sfdc Canvas request transport
|
|
126
|
+
* @class Transport~CanvasTransport
|
|
127
|
+
* @protected
|
|
128
|
+
* @extends Transport
|
|
129
|
+
* @param {Object} signedRequest - Parsed signed request object
|
|
130
|
+
*/
|
|
131
|
+
var CanvasTransport = Transport.CanvasTransport = function(signedRequest) {
|
|
132
|
+
this._signedRequest = signedRequest;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
inherits(CanvasTransport, Transport);
|
|
136
|
+
|
|
137
|
+
/** @protected **/
|
|
138
|
+
CanvasTransport.prototype._getHttpRequestModule = function() {
|
|
139
|
+
return canvas.createRequest(this._signedRequest);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
CanvasTransport.supported = canvas.supported;
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Class for HTTP request transport using AJAX proxy service
|
|
147
|
+
*
|
|
148
|
+
* @class Transport~ProxyTransport
|
|
149
|
+
* @protected
|
|
150
|
+
* @extends Transport
|
|
151
|
+
* @param {String} proxyUrl - AJAX Proxy server URL
|
|
152
|
+
*/
|
|
153
|
+
var ProxyTransport = Transport.ProxyTransport = function(proxyUrl) {
|
|
154
|
+
this._proxyUrl = proxyUrl;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
inherits(ProxyTransport, Transport);
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Make HTTP request via AJAX proxy
|
|
161
|
+
*
|
|
162
|
+
* @method Transport~ProxyTransport#httpRequest
|
|
163
|
+
* @param {Object} params - HTTP request
|
|
164
|
+
* @param {Callback.<Object>} [callback] - Calback Function
|
|
165
|
+
* @returns {Promise.<Object>}
|
|
166
|
+
*/
|
|
167
|
+
ProxyTransport.prototype.httpRequest = function(params, callback) {
|
|
168
|
+
var url = params.url;
|
|
169
|
+
if (url.indexOf("/") === 0) {
|
|
170
|
+
url = baseUrl + url;
|
|
171
|
+
}
|
|
172
|
+
var proxyParams = {
|
|
173
|
+
method: params.method,
|
|
174
|
+
url: this._proxyUrl + '?' + Date.now() + "." + ("" + Math.random()).substring(2),
|
|
175
|
+
headers: {
|
|
176
|
+
'salesforceproxy-endpoint': url
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
if (params.body || params.body === "") {
|
|
180
|
+
proxyParams.body = params.body;
|
|
181
|
+
}
|
|
182
|
+
if (params.headers) {
|
|
183
|
+
for (var name in params.headers) {
|
|
184
|
+
proxyParams.headers[name] = params.headers[name];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return ProxyTransport.super_.prototype.httpRequest.call(this, proxyParams, callback);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Class for HTTP request transport using a proxy server
|
|
193
|
+
*
|
|
194
|
+
* @class Transport~HttpProxyTransport
|
|
195
|
+
* @protected
|
|
196
|
+
* @extends Transport
|
|
197
|
+
* @param {String} httpProxy - URL of the HTTP proxy server
|
|
198
|
+
*/
|
|
199
|
+
var HttpProxyTransport = Transport.HttpProxyTransport = function(httpProxy) {
|
|
200
|
+
this._httpProxy = httpProxy;
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
inherits(HttpProxyTransport, Transport);
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Make HTTP request via proxy server
|
|
207
|
+
*
|
|
208
|
+
* @method Transport~HttpProxyTransport#httpRequest
|
|
209
|
+
* @param {Object} params - HTTP request
|
|
210
|
+
* @param {Callback.<Object>} [callback] - Callback Function
|
|
211
|
+
* @returns {Promise.<Object>}
|
|
212
|
+
*/
|
|
213
|
+
HttpProxyTransport.prototype.httpRequest = function(params, callback) {
|
|
214
|
+
var url = params.url;
|
|
215
|
+
if (url.indexOf("/") === 0) {
|
|
216
|
+
url = baseUrl + url;
|
|
217
|
+
}
|
|
218
|
+
var proxyParams = {
|
|
219
|
+
method: params.method,
|
|
220
|
+
url: params.url,
|
|
221
|
+
proxy: this._httpProxy,
|
|
222
|
+
headers: {}
|
|
223
|
+
};
|
|
224
|
+
if (params.body || params.body === "") {
|
|
225
|
+
proxyParams.body = params.body;
|
|
226
|
+
}
|
|
227
|
+
if (params.headers) {
|
|
228
|
+
for (var name in params.headers) {
|
|
229
|
+
proxyParams.headers[name] = params.headers[name];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return HttpProxyTransport.super_.prototype.httpRequest.call(this, proxyParams, callback);
|
|
233
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": "Shinichi Tomita <shinichi.tomita@gmail.com>",
|
|
3
|
+
"name": "jsforce2",
|
|
4
|
+
"description": "Salesforce API Library for JavaScript",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"salesforce",
|
|
7
|
+
"salesforce.com",
|
|
8
|
+
"sfdc",
|
|
9
|
+
"force.com",
|
|
10
|
+
"database.com"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "http://github.com/jsforce/jsforce",
|
|
13
|
+
"version": "1.11.1",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git://github.com/jsforce/jsforce.git"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"licenses": [
|
|
20
|
+
{
|
|
21
|
+
"type": "MIT",
|
|
22
|
+
"url": "http://github.com/jsforce/jsforce/raw/master/LICENSE"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"main": "./index",
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "gulp build",
|
|
28
|
+
"build:test": "gulp build:test",
|
|
29
|
+
"build:all": "gulp build:all",
|
|
30
|
+
"doc": "jsdoc lib -d doc --recurse --lenient",
|
|
31
|
+
"test": "npm run test:node",
|
|
32
|
+
"test:all": "npm run test:node && npm run test:browser",
|
|
33
|
+
"test:node": "mocha --retries 2 --reporter spec --require intelli-espower-loader --exit",
|
|
34
|
+
"test:browser": "testem",
|
|
35
|
+
"prepublish": "node -e \"if(process.env.npm_package_version!==require('./lib/VERSION')){console.error('The pacakge.json version is not matching to ./lib/VERSION.js');process.exit(1)}\""
|
|
36
|
+
},
|
|
37
|
+
"directories": {
|
|
38
|
+
"test": "test/"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"README.md",
|
|
42
|
+
"bower.json",
|
|
43
|
+
"LICENSE",
|
|
44
|
+
"package.json",
|
|
45
|
+
"bin",
|
|
46
|
+
"build",
|
|
47
|
+
"lib",
|
|
48
|
+
"core.js",
|
|
49
|
+
"index.js"
|
|
50
|
+
],
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=4.0"
|
|
53
|
+
},
|
|
54
|
+
"bin": {
|
|
55
|
+
"jsforce": "./bin/jsforce"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"base64-url": "^2.2.0",
|
|
59
|
+
"co-prompt": "^1.0.0",
|
|
60
|
+
"coffeescript": "^1.10.0",
|
|
61
|
+
"commander": "^2.9.0",
|
|
62
|
+
"csv-parse": "^4.10.1",
|
|
63
|
+
"csv-stringify": "^1.0.4",
|
|
64
|
+
"faye": "^1.4.0",
|
|
65
|
+
"inherits": "^2.0.1",
|
|
66
|
+
"lodash": "^4.17.19",
|
|
67
|
+
"multistream": "^2.0.5",
|
|
68
|
+
"opn": "^5.3.0",
|
|
69
|
+
"promise": "^7.1.1",
|
|
70
|
+
"readable-stream": "^2.1.0",
|
|
71
|
+
"request": "^2.72.0",
|
|
72
|
+
"xml2js": "^0.4.16"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"archiver": "^1.3.0",
|
|
76
|
+
"async": "^1.5.2",
|
|
77
|
+
"babel": "^6.23.0",
|
|
78
|
+
"babel-core": "^6.26.3",
|
|
79
|
+
"babel-preset-env": "^1.7.0",
|
|
80
|
+
"babel-register": "^6.26.0",
|
|
81
|
+
"browserify": "^16.2.2",
|
|
82
|
+
"bufferutil": "^4.0.0",
|
|
83
|
+
"envify": "^3.4.1",
|
|
84
|
+
"espower-loader": "^1.2.2",
|
|
85
|
+
"espowerify": "^1.1.0",
|
|
86
|
+
"gulp": "^4.0.0",
|
|
87
|
+
"gulp-rename": "^1.4.0",
|
|
88
|
+
"gulp-sourcemaps": "^1.12.1",
|
|
89
|
+
"gulp-uglify": "^3.0.2",
|
|
90
|
+
"intelli-espower-loader": "^1.0.1",
|
|
91
|
+
"jsdoc": "^3.6.3",
|
|
92
|
+
"mocha": "^5.2.0",
|
|
93
|
+
"power-assert": "^1.6.0",
|
|
94
|
+
"puppeteer": "^1.18.1",
|
|
95
|
+
"require-swapper": "^0.1.7",
|
|
96
|
+
"testem": "^2.8.2",
|
|
97
|
+
"through2": "^2.0.3",
|
|
98
|
+
"utf-8-validate": "^5.0.1",
|
|
99
|
+
"vinyl-buffer": "^1.0.1",
|
|
100
|
+
"vinyl-source-stream": "^2.0.0"
|
|
101
|
+
},
|
|
102
|
+
"browser": {
|
|
103
|
+
"./index": "./lib/browser/jsforce",
|
|
104
|
+
"./index.js": "./lib/browser/jsforce",
|
|
105
|
+
"./core": "./lib/browser/core",
|
|
106
|
+
"./core.js": "./lib/browser/core",
|
|
107
|
+
"request": "./lib/browser/request.js"
|
|
108
|
+
},
|
|
109
|
+
"types": "types/index.d.ts"
|
|
110
|
+
}
|