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.
Files changed (80) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +74 -0
  3. package/bin/jsforce +3 -0
  4. package/bower.json +30 -0
  5. package/build/jsforce-api-analytics.js +393 -0
  6. package/build/jsforce-api-analytics.min.js +2 -0
  7. package/build/jsforce-api-analytics.min.js.map +1 -0
  8. package/build/jsforce-api-apex.js +183 -0
  9. package/build/jsforce-api-apex.min.js +2 -0
  10. package/build/jsforce-api-apex.min.js.map +1 -0
  11. package/build/jsforce-api-bulk.js +1054 -0
  12. package/build/jsforce-api-bulk.min.js +2 -0
  13. package/build/jsforce-api-bulk.min.js.map +1 -0
  14. package/build/jsforce-api-chatter.js +320 -0
  15. package/build/jsforce-api-chatter.min.js +2 -0
  16. package/build/jsforce-api-chatter.min.js.map +1 -0
  17. package/build/jsforce-api-metadata.js +3020 -0
  18. package/build/jsforce-api-metadata.min.js +2 -0
  19. package/build/jsforce-api-metadata.min.js.map +1 -0
  20. package/build/jsforce-api-soap.js +403 -0
  21. package/build/jsforce-api-soap.min.js +2 -0
  22. package/build/jsforce-api-soap.min.js.map +1 -0
  23. package/build/jsforce-api-streaming.js +3479 -0
  24. package/build/jsforce-api-streaming.min.js +2 -0
  25. package/build/jsforce-api-streaming.min.js.map +1 -0
  26. package/build/jsforce-api-tooling.js +319 -0
  27. package/build/jsforce-api-tooling.min.js +2 -0
  28. package/build/jsforce-api-tooling.min.js.map +1 -0
  29. package/build/jsforce-core.js +25250 -0
  30. package/build/jsforce-core.min.js +2 -0
  31. package/build/jsforce-core.min.js.map +1 -0
  32. package/build/jsforce.js +31637 -0
  33. package/build/jsforce.min.js +2 -0
  34. package/build/jsforce.min.js.map +1 -0
  35. package/core.js +1 -0
  36. package/index.js +1 -0
  37. package/lib/VERSION.js +2 -0
  38. package/lib/_required.js +29 -0
  39. package/lib/api/analytics.js +387 -0
  40. package/lib/api/apex.js +177 -0
  41. package/lib/api/bulk.js +862 -0
  42. package/lib/api/chatter.js +314 -0
  43. package/lib/api/index.js +8 -0
  44. package/lib/api/metadata.js +848 -0
  45. package/lib/api/soap.js +397 -0
  46. package/lib/api/streaming-extension.js +136 -0
  47. package/lib/api/streaming.js +270 -0
  48. package/lib/api/tooling.js +313 -0
  49. package/lib/browser/canvas.js +90 -0
  50. package/lib/browser/client.js +241 -0
  51. package/lib/browser/core.js +5 -0
  52. package/lib/browser/jsforce.js +6 -0
  53. package/lib/browser/jsonp.js +52 -0
  54. package/lib/browser/request.js +70 -0
  55. package/lib/cache.js +252 -0
  56. package/lib/cli/cli.js +431 -0
  57. package/lib/cli/repl.js +337 -0
  58. package/lib/connection.js +1881 -0
  59. package/lib/core.js +16 -0
  60. package/lib/csv.js +50 -0
  61. package/lib/date.js +163 -0
  62. package/lib/http-api.js +300 -0
  63. package/lib/jsforce.js +10 -0
  64. package/lib/logger.js +52 -0
  65. package/lib/oauth2.js +206 -0
  66. package/lib/process.js +275 -0
  67. package/lib/promise.js +164 -0
  68. package/lib/query.js +881 -0
  69. package/lib/quick-action.js +90 -0
  70. package/lib/record-stream.js +305 -0
  71. package/lib/record.js +107 -0
  72. package/lib/registry/file-registry.js +48 -0
  73. package/lib/registry/index.js +3 -0
  74. package/lib/registry/registry.js +111 -0
  75. package/lib/require.js +14 -0
  76. package/lib/soap.js +207 -0
  77. package/lib/sobject.js +558 -0
  78. package/lib/soql-builder.js +236 -0
  79. package/lib/transport.js +233 -0
  80. package/package.json +110 -0
package/lib/soap.js ADDED
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @file Manages method call to SOAP endpoint
3
+ * @author Shinichi Tomita <shinichi.tomita@gmail.com>
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ var inherits = require('inherits'),
9
+ _ = require('lodash/core'),
10
+ xml2js = require('xml2js'),
11
+ HttpApi = require('./http-api');
12
+
13
+
14
+ /**
15
+ * Class for SOAP endpoint of Salesforce
16
+ *
17
+ * @protected
18
+ * @class
19
+ * @constructor
20
+ * @param {Connection} conn - Connection instance
21
+ * @param {Object} options - SOAP endpoint setting options
22
+ * @param {String} options.endpointUrl - SOAP endpoint URL
23
+ * @param {String} [options.xmlns] - XML namespace for method call (default is "urn:partner.soap.sforce.com")
24
+ */
25
+ var SOAP = module.exports = function(conn, options) {
26
+ SOAP.super_.apply(this, arguments);
27
+ this._endpointUrl = options.endpointUrl;
28
+ this._xmlns = options.xmlns || 'urn:partner.soap.sforce.com';
29
+ };
30
+
31
+ inherits(SOAP, HttpApi);
32
+
33
+ /**
34
+ * Invoke SOAP call using method and arguments
35
+ *
36
+ * @param {String} method - Method name
37
+ * @param {Object} args - Arguments for the method call
38
+ * @param {Object} [schema] - Schema definition of response message
39
+ * @param {Callback.<Object>} [callback] - Callback function
40
+ * @returns {Promise.<Object>}
41
+ */
42
+ SOAP.prototype.invoke = function(method, args, schema, callback) {
43
+ if (typeof schema === 'function') {
44
+ callback = schema;
45
+ schema = null;
46
+ }
47
+ var message = {};
48
+ message[method] = args;
49
+ return this.request({
50
+ method: 'POST',
51
+ url: this._endpointUrl,
52
+ headers: {
53
+ 'Content-Type': 'text/xml',
54
+ 'SOAPAction': '""'
55
+ },
56
+ message: message
57
+ }).then(function(res) {
58
+ return schema ? convertType(res, schema) : res;
59
+ }).thenCall(callback);
60
+ };
61
+
62
+ /* @private */
63
+ function convertType(value, schema) {
64
+ if (_.isArray(value)) {
65
+ return value.map(function(v) {
66
+ return convertType(v, schema && schema[0])
67
+ });
68
+ } else if (_.isObject(value)) {
69
+ if (value.$ && value.$['xsi:nil'] === 'true') {
70
+ return null;
71
+ } else if (_.isArray(schema)) {
72
+ return [ convertType(value, schema[0]) ];
73
+ } else {
74
+ var o = {};
75
+ for (var key in value) {
76
+ o[key] = convertType(value[key], schema && schema[key]);
77
+ }
78
+ return o;
79
+ }
80
+ } else {
81
+ if (_.isArray(schema)) {
82
+ return [ convertType(value, schema[0]) ];
83
+ } else if (_.isObject(schema)) {
84
+ return {};
85
+ } else {
86
+ switch(schema) {
87
+ case 'string':
88
+ return String(value);
89
+ case 'number':
90
+ return Number(value);
91
+ case 'boolean':
92
+ return value === 'true';
93
+ default:
94
+ return value;
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ /** @override **/
101
+ SOAP.prototype.beforeSend = function(request) {
102
+ request.body = this._createEnvelope(request.message);
103
+ };
104
+
105
+ /** @override **/
106
+ SOAP.prototype.isSessionExpired = function(response) {
107
+ return response.statusCode === 500 &&
108
+ /<faultcode>[a-zA-Z]+:INVALID_SESSION_ID<\/faultcode>/.test(response.body);
109
+ };
110
+
111
+ /** @override **/
112
+ SOAP.prototype.parseError = function(body) {
113
+ var error = lookupValue(body, [ /:Envelope$/, /:Body$/, /:Fault$/ ]);
114
+ return {
115
+ errorCode: error.faultcode,
116
+ message: error.faultstring
117
+ };
118
+ };
119
+
120
+ /** @override **/
121
+ SOAP.prototype.getResponseBody = function(response) {
122
+ var body = SOAP.super_.prototype.getResponseBody.call(this, response);
123
+ return lookupValue(body, [ /:Envelope$/, /:Body$/, /.+/ ]);
124
+ };
125
+
126
+ /**
127
+ * @private
128
+ */
129
+ function lookupValue(obj, propRegExps) {
130
+ var regexp = propRegExps.shift();
131
+ if (!regexp) {
132
+ return obj;
133
+ }
134
+ else {
135
+ for (var prop in obj) {
136
+ if (regexp.test(prop)) {
137
+ return lookupValue(obj[prop], propRegExps);
138
+ }
139
+ }
140
+ return null;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * @private
146
+ */
147
+ function toXML(name, value) {
148
+ if (_.isObject(name)) {
149
+ value = name;
150
+ name = null;
151
+ }
152
+ if (_.isArray(value)) {
153
+ return _.map(value, function(v) { return toXML(name, v); }).join('');
154
+ } else {
155
+ var attrs = [];
156
+ var elems = [];
157
+ if (_.isObject(value)) {
158
+ for (var k in value) {
159
+ var v = value[k];
160
+ if (k[0] === '@') {
161
+ k = k.substring(1);
162
+ attrs.push(k + '="' + v + '"');
163
+ } else {
164
+ elems.push(toXML(k, v));
165
+ }
166
+ }
167
+ value = elems.join('');
168
+ } else {
169
+ value = String(value)
170
+ .replace(/&/g, '&amp;')
171
+ .replace(/</g, '&lt;')
172
+ .replace(/>/g, '&gt;')
173
+ .replace(/"/g, '&quot;')
174
+ .replace(/'/g, '&apos;');
175
+ }
176
+ var startTag = name ? '<' + name + (attrs.length > 0 ? ' ' + attrs.join(' ') : '') + '>' : '';
177
+ var endTag = name ? '</' + name + '>' : '';
178
+ return startTag + value + endTag;
179
+ }
180
+ }
181
+
182
+ /**
183
+ * @private
184
+ */
185
+ SOAP.prototype._createEnvelope = function(message) {
186
+ var header = {};
187
+ var conn = this._conn;
188
+ if (conn.accessToken) {
189
+ header.SessionHeader = { sessionId: this._conn.accessToken };
190
+ }
191
+ if (conn.callOptions) {
192
+ header.CallOptions = conn.callOptions;
193
+ }
194
+ return [
195
+ '<?xml version="1.0" encoding="UTF-8"?>',
196
+ '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"',
197
+ ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
198
+ ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',
199
+ '<soapenv:Header xmlns="' + this._xmlns + '">',
200
+ toXML(header),
201
+ '</soapenv:Header>',
202
+ '<soapenv:Body xmlns="' + this._xmlns + '">',
203
+ toXML(message),
204
+ '</soapenv:Body>',
205
+ '</soapenv:Envelope>'
206
+ ].join('');
207
+ };