jsforce2 1.11.1 → 5.2.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.
Potentially problematic release.
This version of jsforce2 might be problematic. Click here for more details.
- package/index.js +46 -1
- package/package.json +7 -105
- package/LICENSE +0 -22
- package/README.md +0 -74
- package/bin/jsforce +0 -3
- package/bower.json +0 -30
- package/build/jsforce-api-analytics.js +0 -393
- package/build/jsforce-api-analytics.min.js +0 -2
- package/build/jsforce-api-analytics.min.js.map +0 -1
- package/build/jsforce-api-apex.js +0 -183
- package/build/jsforce-api-apex.min.js +0 -2
- package/build/jsforce-api-apex.min.js.map +0 -1
- package/build/jsforce-api-bulk.js +0 -1054
- package/build/jsforce-api-bulk.min.js +0 -2
- package/build/jsforce-api-bulk.min.js.map +0 -1
- package/build/jsforce-api-chatter.js +0 -320
- package/build/jsforce-api-chatter.min.js +0 -2
- package/build/jsforce-api-chatter.min.js.map +0 -1
- package/build/jsforce-api-metadata.js +0 -3020
- package/build/jsforce-api-metadata.min.js +0 -2
- package/build/jsforce-api-metadata.min.js.map +0 -1
- package/build/jsforce-api-soap.js +0 -403
- package/build/jsforce-api-soap.min.js +0 -2
- package/build/jsforce-api-soap.min.js.map +0 -1
- package/build/jsforce-api-streaming.js +0 -3479
- package/build/jsforce-api-streaming.min.js +0 -2
- package/build/jsforce-api-streaming.min.js.map +0 -1
- package/build/jsforce-api-tooling.js +0 -319
- package/build/jsforce-api-tooling.min.js +0 -2
- package/build/jsforce-api-tooling.min.js.map +0 -1
- package/build/jsforce-core.js +0 -25250
- package/build/jsforce-core.min.js +0 -2
- package/build/jsforce-core.min.js.map +0 -1
- package/build/jsforce.js +0 -31637
- package/build/jsforce.min.js +0 -2
- package/build/jsforce.min.js.map +0 -1
- package/core.js +0 -1
- package/lib/VERSION.js +0 -2
- package/lib/_required.js +0 -29
- package/lib/api/analytics.js +0 -387
- package/lib/api/apex.js +0 -177
- package/lib/api/bulk.js +0 -862
- package/lib/api/chatter.js +0 -314
- package/lib/api/index.js +0 -8
- package/lib/api/metadata.js +0 -848
- package/lib/api/soap.js +0 -397
- package/lib/api/streaming-extension.js +0 -136
- package/lib/api/streaming.js +0 -270
- package/lib/api/tooling.js +0 -313
- package/lib/browser/canvas.js +0 -90
- package/lib/browser/client.js +0 -241
- package/lib/browser/core.js +0 -5
- package/lib/browser/jsforce.js +0 -6
- package/lib/browser/jsonp.js +0 -52
- package/lib/browser/request.js +0 -70
- package/lib/cache.js +0 -252
- package/lib/cli/cli.js +0 -431
- package/lib/cli/repl.js +0 -337
- package/lib/connection.js +0 -1881
- package/lib/core.js +0 -16
- package/lib/csv.js +0 -50
- package/lib/date.js +0 -163
- package/lib/http-api.js +0 -300
- package/lib/jsforce.js +0 -10
- package/lib/logger.js +0 -52
- package/lib/oauth2.js +0 -206
- package/lib/process.js +0 -275
- package/lib/promise.js +0 -164
- package/lib/query.js +0 -881
- package/lib/quick-action.js +0 -90
- package/lib/record-stream.js +0 -305
- package/lib/record.js +0 -107
- package/lib/registry/file-registry.js +0 -48
- package/lib/registry/index.js +0 -3
- package/lib/registry/registry.js +0 -111
- package/lib/require.js +0 -14
- package/lib/soap.js +0 -207
- package/lib/sobject.js +0 -558
- package/lib/soql-builder.js +0 -236
- package/lib/transport.js +0 -233
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(t){var e;"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):(e=(e=(e=(e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jsforce||(e.jsforce={})).modules||(e.modules={})).api||(e.api={})).Bulk=t()}(function(){return function o(r,i,s){function a(e,t){if(!i[e]){if(!r[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);throw(n=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",n}n=i[e]={exports:{}},r[e][0].call(n.exports,function(t){return a(r[e][1][t]||t)},n,n.exports,o,r,i,s)}return i[e].exports}for(var u="function"==typeof require&&require,t=0;t<s.length;t++)a(s[t]);return a}({1:[function(t,b,e){(function(n){"use strict";function o(t,e,n,o,r){this._bulk=t,this.type=e,this.operation=n,this.options=o||{},this.id=r,this.state=this.id?"Open":"Unknown",this._batches={}}var t=window.jsforce.require("inherits"),e=window.jsforce.require("readable-stream"),r=e.Duplex,i=window.jsforce.require("events"),c=window.jsforce.require("lodash/core"),s=window.jsforce.require("multistream"),a=window.jsforce.require("./core"),u=window.jsforce.require("./record-stream"),h=window.jsforce.require("./promise"),l=window.jsforce.require("./http-api");t(o,i.EventEmitter),o.prototype.info=function(t){return this._jobInfo||(this._jobInfo=this.check()),this._jobInfo.thenCall(t)},o.prototype.open=function(t){var e,n=this,o=this._bulk;o._logger;return this._jobInfo||("harddelete"===(e=this.operation.toLowerCase())&&(e="hardDelete"),e=['<?xml version="1.0" encoding="UTF-8"?>','<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">',"<operation>"+e+"</operation>","<object>"+this.type+"</object>",this.options.extIdField?"<externalIdFieldName>"+this.options.extIdField+"</externalIdFieldName>":"",this.options.concurrencyMode?"<concurrencyMode>"+this.options.concurrencyMode+"</concurrencyMode>":"",this.options.assignmentRuleId?"<assignmentRuleId>"+this.options.assignmentRuleId+"</assignmentRuleId>":"","<contentType>CSV</contentType>","</jobInfo>"].join(""),this._jobInfo=o._request({method:"POST",path:"/job",body:e,headers:{"Content-Type":"application/xml; charset=utf-8"},responseType:"application/xml"}).then(function(t){return n.emit("open",t.jobInfo),n.id=t.jobInfo.id,n.state=t.jobInfo.state,t.jobInfo},function(t){throw n.emit("error",t),t})),this._jobInfo.thenCall(t)},o.prototype.createBatch=function(){var t=new p(this),e=this;return t.on("queue",function(){e._batches[t.id]=t}),t},o.prototype.batch=function(t){var e=this._batches[t];return e||(e=new p(this,t),this._batches[t]=e),e},o.prototype.check=function(t){var e=this,n=this._bulk,o=n._logger;return this._jobInfo=this._waitAssign().then(function(){return n._request({method:"GET",path:"/job/"+e.id,responseType:"application/xml"})}).then(function(t){return o.debug(t.jobInfo),e.id=t.jobInfo.id,e.type=t.jobInfo.object,e.operation=t.jobInfo.operation,e.state=t.jobInfo.state,t.jobInfo}),this._jobInfo.thenCall(t)},o.prototype._waitAssign=function(t){return(this.id?h.resolve({id:this.id}):this.open()).thenCall(t)},o.prototype.list=function(t){var e=this,n=this._bulk,o=n._logger;return this._waitAssign().then(function(){return n._request({method:"GET",path:"/job/"+e.id+"/batch",responseType:"application/xml"})}).then(function(t){o.debug(t.batchInfoList.batchInfo);t=t.batchInfoList;return t=c.isArray(t.batchInfo)?t.batchInfo:[t.batchInfo]}).thenCall(t)},o.prototype.close=function(){var e=this;return this._changeState("Closed").then(function(t){return e.id=null,e.emit("close",t),t},function(t){throw e.emit("error",t),t})},o.prototype.abort=function(){var e=this;return this._changeState("Aborted").then(function(t){return e.id=null,e.emit("abort",t),t},function(t){throw e.emit("error",t),t})},o.prototype._changeState=function(e,t){var n=this,o=this._bulk,r=o._logger;return this._jobInfo=this._waitAssign().then(function(){var t=['<?xml version="1.0" encoding="UTF-8"?>','<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">',"<state>"+e+"</state>","</jobInfo>"].join("");return o._request({method:"POST",path:"/job/"+n.id,body:t,headers:{"Content-Type":"application/xml; charset=utf-8"},responseType:"application/xml"})}).then(function(t){return r.debug(t.jobInfo),n.state=t.jobInfo.state,t.jobInfo}),this._jobInfo.thenCall(t)};var p=function(t,e){p.super_.call(this,{objectMode:!0}),this.job=t,this.id=e,this._bulk=t._bulk,this._deferred=h.defer(),this._setupDataStreams()};t(p,e.Writable),p.prototype._setupDataStreams=function(){var o=this,t={nullValue:"#N/A"};this._uploadStream=new u.Serializable,this._uploadDataStream=this._uploadStream.stream("csv",t),this._downloadStream=new u.Parsable,this._downloadDataStream=this._downloadStream.stream("csv",t),this.on("finish",function(){o._uploadStream.end()}),this._uploadDataStream.once("readable",function(){o.job.open().then(function(){o._uploadDataStream.pipe(o._createRequestStream())})});var n=this._dataStream=new r;n._write=function(t,e,n){o._uploadDataStream.write(t,e,n)},n.on("finish",function(){o._uploadDataStream.end()}),this._downloadDataStream.on("readable",function(){n.read(0)}),this._downloadDataStream.on("end",function(){n.push(null)}),n._read=function(t){for(var e;null!==(e=o._downloadDataStream.read());)n.push(e)}},p.prototype._createRequestStream=function(){var n=this,t=n._bulk,o=t._logger;return t._request({method:"POST",path:"/job/"+n.job.id+"/batch",headers:{"Content-Type":"text/csv"},responseType:"application/xml"},function(t,e){t?n.emit("error",t):(o.debug(e.batchInfo),n.id=e.batchInfo.id,n.emit("queue",e.batchInfo))}).stream()},p.prototype._write=function(t,e,n){t=c.clone(t),"insert"===this.job.operation?delete t.Id:"delete"===this.job.operation&&(t={Id:t.Id}),delete t.type,delete t.attributes,this._uploadStream.write(t,e,n)},p.prototype.stream=function(){return this._dataStream},p.prototype.run=p.prototype.exec=p.prototype.execute=function(t,e){var n=this;if("function"==typeof t&&(e=t,t=null),this._result)throw new Error("Batch already executed.");var o=h.defer();return this._result=o.promise,this._result.then(function(t){n._deferred.resolve(t)},function(t){n._deferred.reject(t)}),this.once("response",function(t){o.resolve(t)}),this.once("error",function(t){o.reject(t)}),c.isObject(t)&&c.isFunction(t.pipe)?t.pipe(this._dataStream):c.isArray(t)?(c.forEach(t,function(e){Object.keys(e).forEach(function(t){"boolean"==typeof e[t]&&(e[t]=String(e[t]))}),n.write(e)}),n.end()):c.isString(t)&&(this._dataStream.write(t,"utf8"),this._dataStream.end()),this.thenCall(e)},p.prototype.then=function(t,e,n){return this._deferred.promise.then(t,e,n)},p.prototype.thenCall=function(e){return c.isFunction(e)&&this.then(function(t){n.nextTick(function(){e(null,t)})},function(t){n.nextTick(function(){e(t)})}),this},p.prototype.check=function(t){var e=this._bulk,n=e._logger,o=this.job.id,r=this.id;if(!o||!r)throw new Error("Batch not started.");return e._request({method:"GET",path:"/job/"+o+"/batch/"+r,responseType:"application/xml"}).then(function(t){return n.debug(t.batchInfo),t.batchInfo}).thenCall(t)},p.prototype.poll=function(n,e){var o=this,r=this.job.id,i=this.id;if(!r||!i)throw new Error("Batch not started.");var s=(new Date).getTime(),a=function(){var t=(new Date).getTime();if(s+e<t){t=new Error("Polling time out. Job Id = "+r+" , batch Id = "+i);return t.name="PollingTimeout",t.jobId=r,t.batchId=i,void o.emit("error",t)}o.check(function(t,e){t?o.emit("error",t):"Failed"===e.state?0<parseInt(e.numberRecordsProcessed,10)?o.retrieve():o.emit("error",new Error(e.stateMessage)):"Completed"===e.state?o.retrieve():(o.emit("progress",e),setTimeout(a,n))})};setTimeout(a,n)},p.prototype.retrieve=function(t){var n=this,o=this._bulk,r=this.job.id,i=this.job,s=this.id;if(!r||!s)throw new Error("Batch not started.");return i.info().then(function(t){return o._request({method:"GET",path:"/job/"+r+"/batch/"+s+"/result"})}).then(function(t){var e;return e="query"===i.operation?(o._conn,t["result-list"].result,e=t["result-list"].result,c.map(c.isArray(e)?e:[e],function(t){return{id:t,batchId:s,jobId:r}})):c.map(t,function(t){return{id:t.Id||null,success:"true"===t.Success,errors:t.Error?[t.Error]:[]}}),n.emit("response",e),e}).fail(function(t){throw n.emit("error",t),t}).thenCall(t)},p.prototype.result=function(t){var e=this.job.id,n=this.id;if(!e||!n)throw new Error("Batch not started.");var o=new u.Parsable,r=o.stream("csv");this._bulk._request({method:"GET",path:"/job/"+e+"/batch/"+n+"/result/"+t,responseType:"application/octet-stream"}).stream().pipe(r);return o};var f=function(){f.super_.apply(this,arguments)};t(f,l),f.prototype.beforeSend=function(t){t.headers=t.headers||{},t.headers["X-SFDC-SESSION"]=this._conn.accessToken},f.prototype.isSessionExpired=function(t){return 400===t.statusCode&&/<exceptionCode>InvalidSessionId<\/exceptionCode>/.test(t.body)},f.prototype.hasErrorInResponseBody=function(t){return!!t.error},f.prototype.parseError=function(t){return{errorCode:t.error.exceptionCode,message:t.error.exceptionMessage}};function d(t){this._conn=t,this._logger=t._logger}d.prototype.pollInterval=1e3,d.prototype.pollTimeout=1e4,d.prototype._request=function(t,e){var n=this._conn;t=c.clone(t);n=[n.instanceUrl,"services/async",n.version].join("/");t.url=n+t.path;n={responseType:t.responseType};return delete t.path,delete t.responseType,new f(this._conn,n).request(t).thenCall(e)},d.prototype.load=function(t,e,n,o,r){var i=this;if(!t||!e)throw new Error("Insufficient arguments. At least, 'type' and 'operation' are required.");c.isObject(n)&&n.constructor===Object||(r=o,o=n,n=null);var s=this.createJob(t,e,n);s.once("error",function(t){u&&u.emit("error",t)});function a(){u=null,s.close()}var u=s.createBatch();return u.on("response",a),u.on("error",function(t){"PollingTimeout"!==t.name&&a()}),u.on("queue",function(){u.poll(i.pollInterval,i.pollTimeout)}),u.execute(o,r)},d.prototype.query=function(t){var e=t.replace(/\([\s\S]+\)/g,"").match(/FROM\s+(\w+)/i);if(!e)throw new Error("No sobject type found in query, maybe caused by invalid SOQL.");var e=e[1],n=this,o=new u.Parsable,r=o.stream("csv");return this.load(e,"query",t).then(function(t){t=t.map(function(t){return n.job(t.jobId).batch(t.batchId).result(t.id).stream()});s(t).pipe(r)}).fail(function(t){o.emit("error",t)}),o},d.prototype.createJob=function(t,e,n){return new o(this,t,e,n)},d.prototype.job=function(t){return new o(this,null,null,null,t)},a.on("connection:new",function(t){t.bulk=new d(t)}),b.exports=d}).call(this,t("_process"))},{_process:2}],2:[function(t,e,n){var o,r,e=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(o===setTimeout)return setTimeout(e,0);if((o===i||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:i}catch(t){o=i}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],h=!1,l=-1;function p(){h&&u&&(h=!1,u.length?c=u.concat(c):l=-1,c.length&&f())}function f(){if(!h){var t=a(p);h=!0;for(var e=c.length;e;){for(u=c,c=[];++l<e;)u&&u[l].run();l=-1,e=c.length}u=null,h=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function b(){}e.nextTick=function(t){var e=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||h||a(f)},d.prototype.run=function(){this.fun.apply(null,this.array)},e.title="browser",e.browser=!0,e.env={},e.argv=[],e.version="",e.versions={},e.on=b,e.addListener=b,e.once=b,e.off=b,e.removeListener=b,e.removeAllListeners=b,e.emit=b,e.prependListener=b,e.prependOnceListener=b,e.listeners=function(t){return[]},e.binding=function(t){throw new Error("process.binding is not supported")},e.cwd=function(){return"/"},e.chdir=function(t){throw new Error("process.chdir is not supported")},e.umask=function(){return 0}},{}]},{},[1])(1)});
|
|
2
|
-
//# sourceMappingURL=jsforce-api-bulk.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/api/bulk.js","node_modules/process/browser.js"],"names":["f","g","exports","module","define","amd","window","global","self","this","jsforce","modules","api","Bulk","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","Job","bulk","type","operation","options","jobId","_bulk","id","state","_batches","inherits","stream","Duplex","events","_","joinStreams","RecordStream","Promise","HttpApi","EventEmitter","prototype","info","callback","_jobInfo","check","thenCall","open","body","_logger","toLowerCase","extIdField","concurrencyMode","assignmentRuleId","join","_request","method","path","headers","Content-Type","responseType","then","res","emit","jobInfo","err","createBatch","batch","Batch","on","batchId","logger","_waitAssign","debug","object","resolve","list","batchInfoList","batchInfo","isArray","close","_changeState","abort","job","super_","objectMode","_deferred","defer","_setupDataStreams","Writable","converterOptions","nullValue","_uploadStream","Serializable","_uploadDataStream","_downloadStream","Parsable","_downloadDataStream","end","once","pipe","_createRequestStream","dataStream","_dataStream","_write","data","enc","cb","write","read","push","_read","size","chunk","record","clone","Id","attributes","run","exec","execute","input","_result","rdeferred","promise","reject","isObject","isFunction","forEach","Object","keys","key","String","isString","onResolved","onReject","onProgress","process","nextTick","poll","interval","timeout","startTime","Date","getTime","now","name","parseInt","numberRecordsProcessed","retrieve","stateMessage","setTimeout","results","_conn","result","map","ret","success","Success","errors","fail","resultId","resultStream","resultDataStream","BulkApi","apply","arguments","beforeSend","request","accessToken","isSessionExpired","response","statusCode","test","hasErrorInResponseBody","error","parseError","errorCode","exceptionCode","message","exceptionMessage","conn","pollInterval","pollTimeout","baseUrl","instanceUrl","version","url","load","constructor","createJob","cleanup","query","soql","m","replace","match","recordStream","streams","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","len","marker","runClearTimeout","Item","array","noop","args","Array","title","browser","env","argv","versions","addListener","off","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask"],"mappings":"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","file":"jsforce-api-bulk.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/*global process*/\n/**\n * @file Manages Salesforce Bulk API related operations\n * @author Shinichi Tomita <shinichi.tomita@gmail.com>\n */\n\n'use strict';\n\nvar inherits = window.jsforce.require('inherits'),\n stream = window.jsforce.require('readable-stream'),\n Duplex = stream.Duplex,\n events = window.jsforce.require('events'),\n _ = window.jsforce.require('lodash/core'),\n joinStreams = window.jsforce.require('multistream'),\n jsforce = window.jsforce.require('./core'),\n RecordStream = window.jsforce.require('./record-stream'),\n Promise = window.jsforce.require('./promise'),\n HttpApi = window.jsforce.require('./http-api');\n\n/*--------------------------------------------*/\n\n/**\n * Class for Bulk API Job\n *\n * @protected\n * @class Bulk~Job\n * @extends events.EventEmitter\n *\n * @param {Bulk} bulk - Bulk API object\n * @param {String} [type] - SObject type\n * @param {String} [operation] - Bulk load operation ('insert', 'update', 'upsert', 'delete', or 'hardDelete')\n * @param {Object} [options] - Options for bulk loading operation\n * @param {String} [options.extIdField] - External ID field name (used when upsert operation).\n * @param {String} [options.concurrencyMode] - 'Serial' or 'Parallel'. Defaults to Parallel.\n * @param {String} [jobId] - Job ID (if already available)\n */\nvar Job = function(bulk, type, operation, options, jobId) {\n this._bulk = bulk;\n this.type = type;\n this.operation = operation;\n this.options = options || {};\n this.id = jobId;\n this.state = this.id ? 'Open' : 'Unknown';\n this._batches = {};\n};\n\ninherits(Job, events.EventEmitter);\n\n/**\n * @typedef {Object} Bulk~JobInfo\n * @prop {String} id - Job ID\n * @prop {String} object - Object type name\n * @prop {String} operation - Operation type of the job\n * @prop {String} state - Job status\n */\n\n/**\n * Return latest jobInfo from cache\n *\n * @method Bulk~Job#info\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype.info = function(callback) {\n var self = this;\n // if cache is not available, check the latest\n if (!this._jobInfo) {\n this._jobInfo = this.check();\n }\n return this._jobInfo.thenCall(callback);\n};\n\n/**\n * Open new job and get jobinfo\n *\n * @method Bulk~Job#open\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype.open = function(callback) {\n var self = this;\n var bulk = this._bulk;\n var logger = bulk._logger;\n\n // if not requested opening job\n if (!this._jobInfo) {\n var operation = this.operation.toLowerCase();\n if (operation === 'harddelete') { operation = 'hardDelete'; }\n var body = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<jobInfo xmlns=\"http://www.force.com/2009/06/asyncapi/dataload\">',\n '<operation>' + operation + '</operation>',\n '<object>' + this.type + '</object>',\n (this.options.extIdField ?\n '<externalIdFieldName>'+this.options.extIdField+'</externalIdFieldName>' :\n ''),\n (this.options.concurrencyMode ?\n '<concurrencyMode>'+this.options.concurrencyMode+'</concurrencyMode>' :\n ''),\n (this.options.assignmentRuleId ?\n '<assignmentRuleId>' + this.options.assignmentRuleId + '</assignmentRuleId>' :\n ''),\n '<contentType>CSV</contentType>',\n '</jobInfo>'\n ].join('');\n\n this._jobInfo = bulk._request({\n method : 'POST',\n path : \"/job\",\n body : body,\n headers : {\n \"Content-Type\" : \"application/xml; charset=utf-8\"\n },\n responseType: \"application/xml\"\n }).then(function(res) {\n self.emit(\"open\", res.jobInfo);\n self.id = res.jobInfo.id;\n self.state = res.jobInfo.state;\n return res.jobInfo;\n }, function(err) {\n self.emit(\"error\", err);\n throw err;\n });\n }\n return this._jobInfo.thenCall(callback);\n};\n\n/**\n * Create a new batch instance in the job\n *\n * @method Bulk~Job#createBatch\n * @returns {Bulk~Batch}\n */\nJob.prototype.createBatch = function() {\n var batch = new Batch(this);\n var self = this;\n batch.on('queue', function() {\n self._batches[batch.id] = batch;\n });\n return batch;\n};\n\n/**\n * Get a batch instance specified by given batch ID\n *\n * @method Bulk~Job#batch\n * @param {String} batchId - Batch ID\n * @returns {Bulk~Batch}\n */\nJob.prototype.batch = function(batchId) {\n var batch = this._batches[batchId];\n if (!batch) {\n batch = new Batch(this, batchId);\n this._batches[batchId] = batch;\n }\n return batch;\n};\n\n/**\n * Check the latest job status from server\n *\n * @method Bulk~Job#check\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype.check = function(callback) {\n var self = this;\n var bulk = this._bulk;\n var logger = bulk._logger;\n\n this._jobInfo = this._waitAssign().then(function() {\n return bulk._request({\n method : 'GET',\n path : \"/job/\" + self.id,\n responseType: \"application/xml\"\n });\n }).then(function(res) {\n logger.debug(res.jobInfo);\n self.id = res.jobInfo.id;\n self.type = res.jobInfo.object;\n self.operation = res.jobInfo.operation;\n self.state = res.jobInfo.state;\n return res.jobInfo;\n });\n return this._jobInfo.thenCall(callback);\n};\n\n/**\n * Wait till the job is assigned to server\n *\n * @method Bulk~Job#info\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype._waitAssign = function(callback) {\n return (this.id ? Promise.resolve({ id: this.id }) : this.open()).thenCall(callback);\n};\n\n\n/**\n * List all registered batch info in job\n *\n * @method Bulk~Job#list\n * @param {Callback.<Array.<Bulk~BatchInfo>>} [callback] - Callback function\n * @returns {Promise.<Array.<Bulk~BatchInfo>>}\n */\nJob.prototype.list = function(callback) {\n var self = this;\n var bulk = this._bulk;\n var logger = bulk._logger;\n\n return this._waitAssign().then(function() {\n return bulk._request({\n method : 'GET',\n path : \"/job/\" + self.id + \"/batch\",\n responseType: \"application/xml\"\n });\n }).then(function(res) {\n logger.debug(res.batchInfoList.batchInfo);\n var batchInfoList = res.batchInfoList;\n batchInfoList = _.isArray(batchInfoList.batchInfo) ? batchInfoList.batchInfo : [ batchInfoList.batchInfo ];\n return batchInfoList;\n }).thenCall(callback);\n\n};\n\n/**\n * Close opened job\n *\n * @method Bulk~Job#close\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype.close = function() {\n var self = this;\n return this._changeState(\"Closed\").then(function(jobInfo) {\n self.id = null;\n self.emit(\"close\", jobInfo);\n return jobInfo;\n }, function(err) {\n self.emit(\"error\", err);\n throw err;\n });\n};\n\n/**\n * Set the status to abort\n *\n * @method Bulk~Job#abort\n * @param {Callback.<Bulk~JobInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~JobInfo>}\n */\nJob.prototype.abort = function() {\n var self = this;\n return this._changeState(\"Aborted\").then(function(jobInfo) {\n self.id = null;\n self.emit(\"abort\", jobInfo);\n return jobInfo;\n }, function(err) {\n self.emit(\"error\", err);\n throw err;\n });\n};\n\n/**\n * @private\n */\nJob.prototype._changeState = function(state, callback) {\n var self = this;\n var bulk = this._bulk;\n var logger = bulk._logger;\n\n this._jobInfo = this._waitAssign().then(function() {\n var body = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<jobInfo xmlns=\"http://www.force.com/2009/06/asyncapi/dataload\">',\n '<state>' + state + '</state>',\n '</jobInfo>'\n ].join('');\n return bulk._request({\n method : 'POST',\n path : \"/job/\" + self.id,\n body : body,\n headers : {\n \"Content-Type\" : \"application/xml; charset=utf-8\"\n },\n responseType: \"application/xml\"\n });\n }).then(function(res) {\n logger.debug(res.jobInfo);\n self.state = res.jobInfo.state;\n return res.jobInfo;\n });\n return this._jobInfo.thenCall(callback);\n\n};\n\n\n/*--------------------------------------------*/\n\n/**\n * Batch (extends RecordStream)\n *\n * @protected\n * @class Bulk~Batch\n * @extends {stream.Writable}\n * @implements {Promise.<Array.<RecordResult>>}\n * @param {Bulk~Job} job - Bulk job object\n * @param {String} [batchId] - Batch ID (if already available)\n */\nvar Batch = function(job, batchId) {\n Batch.super_.call(this, { objectMode: true });\n this.job = job;\n this.id = batchId;\n this._bulk = job._bulk;\n this._deferred = Promise.defer();\n this._setupDataStreams();\n};\n\ninherits(Batch, stream.Writable);\n\n\n/**\n * @private\n */\nBatch.prototype._setupDataStreams = function() {\n var batch = this;\n var converterOptions = { nullValue : '#N/A' };\n this._uploadStream = new RecordStream.Serializable();\n this._uploadDataStream = this._uploadStream.stream('csv', converterOptions);\n this._downloadStream = new RecordStream.Parsable();\n this._downloadDataStream = this._downloadStream.stream('csv', converterOptions);\n\n this.on('finish', function() {\n batch._uploadStream.end();\n });\n this._uploadDataStream.once('readable', function() {\n batch.job.open().then(function() {\n // pipe upload data to batch API request stream\n batch._uploadDataStream.pipe(batch._createRequestStream());\n });\n });\n\n // duplex data stream, opened access to API programmers by Batch#stream()\n var dataStream = this._dataStream = new Duplex();\n dataStream._write = function(data, enc, cb) {\n batch._uploadDataStream.write(data, enc, cb);\n };\n dataStream.on('finish', function() {\n batch._uploadDataStream.end();\n });\n\n this._downloadDataStream.on('readable', function() {\n dataStream.read(0);\n });\n this._downloadDataStream.on('end', function() {\n dataStream.push(null);\n });\n dataStream._read = function(size) {\n var chunk;\n while ((chunk = batch._downloadDataStream.read()) !== null) {\n dataStream.push(chunk);\n }\n };\n};\n\n/**\n * Connect batch API and create stream instance of request/response\n *\n * @private\n * @returns {stream.Duplex}\n */\nBatch.prototype._createRequestStream = function() {\n var batch = this;\n var bulk = batch._bulk;\n var logger = bulk._logger;\n\n return bulk._request({\n method : 'POST',\n path : \"/job/\" + batch.job.id + \"/batch\",\n headers: {\n \"Content-Type\": \"text/csv\"\n },\n responseType: \"application/xml\"\n }, function(err, res) {\n if (err) {\n batch.emit('error', err);\n } else {\n logger.debug(res.batchInfo);\n batch.id = res.batchInfo.id;\n batch.emit('queue', res.batchInfo);\n }\n }).stream();\n};\n\n/**\n * Implementation of Writable\n *\n * @override\n * @private\n */\nBatch.prototype._write = function(record, enc, cb) {\n record = _.clone(record);\n if (this.job.operation === \"insert\") {\n delete record.Id;\n } else if (this.job.operation === \"delete\") {\n record = { Id: record.Id };\n }\n delete record.type;\n delete record.attributes;\n this._uploadStream.write(record, enc, cb);\n};\n\n/**\n * Returns duplex stream which accepts CSV data input and batch result output\n *\n * @returns {stream.Duplex}\n */\nBatch.prototype.stream = function() {\n return this._dataStream;\n};\n\n/**\n * Execute batch operation\n *\n * @method Bulk~Batch#execute\n * @param {Array.<Record>|stream.Stream|String} [input] - Input source for batch operation. Accepts array of records, CSV string, and CSV data input stream in insert/update/upsert/delete/hardDelete operation, SOQL string in query operation.\n * @param {Callback.<Array.<RecordResult>|Array.<BatchResultInfo>>} [callback] - Callback function\n * @returns {Bulk~Batch}\n */\nBatch.prototype.run =\nBatch.prototype.exec =\nBatch.prototype.execute = function(input, callback) {\n var self = this;\n\n if (typeof input === 'function') { // if input argument is omitted\n callback = input;\n input = null;\n }\n\n // if batch is already executed\n if (this._result) {\n throw new Error(\"Batch already executed.\");\n }\n\n var rdeferred = Promise.defer();\n this._result = rdeferred.promise;\n this._result.then(function(res) {\n self._deferred.resolve(res);\n }, function(err) {\n self._deferred.reject(err);\n });\n this.once('response', function(res) {\n rdeferred.resolve(res);\n });\n this.once('error', function(err) {\n rdeferred.reject(err);\n });\n\n if (_.isObject(input) && _.isFunction(input.pipe)) { // if input has stream.Readable interface\n input.pipe(this._dataStream);\n } else {\n var data;\n if (_.isArray(input)) {\n _.forEach(input, function(record) {\n Object.keys(record).forEach(function(key) {\n if (typeof record[key] === 'boolean') {\n record[key] = String(record[key])\n }\n })\n self.write(record);\n });\n self.end();\n } else if (_.isString(input)){\n data = input;\n this._dataStream.write(data, 'utf8');\n this._dataStream.end();\n }\n }\n\n // return Batch instance for chaining\n return this.thenCall(callback);\n};\n\n/**\n * Promise/A+ interface\n * http://promises-aplus.github.io/promises-spec/\n *\n * Delegate to deferred promise, return promise instance for batch result\n *\n * @method Bulk~Batch#then\n */\nBatch.prototype.then = function(onResolved, onReject, onProgress) {\n return this._deferred.promise.then(onResolved, onReject, onProgress);\n};\n\n/**\n * Promise/A+ extension\n * Call \"then\" using given node-style callback function\n *\n * @method Bulk~Batch#thenCall\n */\nBatch.prototype.thenCall = function(callback) {\n if (_.isFunction(callback)) {\n this.then(function(res) {\n process.nextTick(function() {\n callback(null, res);\n });\n }, function(err) {\n process.nextTick(function() {\n callback(err);\n });\n });\n }\n return this;\n};\n\n/**\n * @typedef {Object} Bulk~BatchInfo\n * @prop {String} id - Batch ID\n * @prop {String} jobId - Job ID\n * @prop {String} state - Batch state\n * @prop {String} stateMessage - Batch state message\n */\n\n/**\n * Check the latest batch status in server\n *\n * @method Bulk~Batch#check\n * @param {Callback.<Bulk~BatchInfo>} [callback] - Callback function\n * @returns {Promise.<Bulk~BatchInfo>}\n */\nBatch.prototype.check = function(callback) {\n var self = this;\n var bulk = this._bulk;\n var logger = bulk._logger;\n var jobId = this.job.id;\n var batchId = this.id;\n\n if (!jobId || !batchId) {\n throw new Error(\"Batch not started.\");\n }\n return bulk._request({\n method : 'GET',\n path : \"/job/\" + jobId + \"/batch/\" + batchId,\n responseType: \"application/xml\"\n }).then(function(res) {\n logger.debug(res.batchInfo);\n return res.batchInfo;\n }).thenCall(callback);\n};\n\n\n/**\n * Polling the batch result and retrieve\n *\n * @method Bulk~Batch#poll\n * @param {Number} interval - Polling interval in milliseconds\n * @param {Number} timeout - Polling timeout in milliseconds\n */\nBatch.prototype.poll = function(interval, timeout) {\n var self = this;\n var jobId = this.job.id;\n var batchId = this.id;\n\n if (!jobId || !batchId) {\n throw new Error(\"Batch not started.\");\n }\n var startTime = new Date().getTime();\n var poll = function() {\n var now = new Date().getTime();\n if (startTime + timeout < now) {\n var err = new Error(\"Polling time out. Job Id = \" + jobId + \" , batch Id = \" + batchId);\n err.name = 'PollingTimeout';\n err.jobId = jobId;\n err.batchId = batchId;\n self.emit('error', err);\n return;\n }\n self.check(function(err, res) {\n if (err) {\n self.emit('error', err);\n } else {\n if (res.state === \"Failed\") {\n if (parseInt(res.numberRecordsProcessed, 10) > 0) {\n self.retrieve();\n } else {\n self.emit('error', new Error(res.stateMessage));\n }\n } else if (res.state === \"Completed\") {\n self.retrieve();\n } else {\n self.emit('progress', res);\n setTimeout(poll, interval);\n }\n }\n });\n };\n setTimeout(poll, interval);\n};\n\n/**\n * @typedef {Object} Bulk~BatchResultInfo\n * @prop {String} id - Batch result ID\n * @prop {String} batchId - Batch ID which includes this batch result.\n * @prop {String} jobId - Job ID which includes this batch result.\n */\n\n/**\n * Retrieve batch result\n *\n * @method Bulk~Batch#retrieve\n * @param {Callback.<Array.<RecordResult>|Array.<Bulk~BatchResultInfo>>} [callback] - Callback function\n * @returns {Promise.<Array.<RecordResult>|Array.<Bulk~BatchResultInfo>>}\n */\nBatch.prototype.retrieve = function(callback) {\n var self = this;\n var bulk = this._bulk;\n var jobId = this.job.id;\n var job = this.job;\n var batchId = this.id;\n\n if (!jobId || !batchId) {\n throw new Error(\"Batch not started.\");\n }\n\n return job.info().then(function(jobInfo) {\n return bulk._request({\n method : 'GET',\n path : \"/job/\" + jobId + \"/batch/\" + batchId + \"/result\"\n });\n }).then(function(res) {\n var results;\n if (job.operation === 'query') {\n var conn = bulk._conn;\n var resultIds = res['result-list'].result;\n results = res['result-list'].result;\n results = _.map(_.isArray(results) ? results : [ results ], function(id) {\n return {\n id: id,\n batchId: batchId,\n jobId: jobId\n };\n });\n } else {\n results = _.map(res, function(ret) {\n return {\n id: ret.Id || null,\n success: ret.Success === \"true\",\n errors: ret.Error ? [ ret.Error ] : []\n };\n });\n }\n self.emit('response', results);\n return results;\n }).fail(function(err) {\n self.emit('error', err);\n throw err;\n }).thenCall(callback);\n};\n\n/**\n * Fetch query result as a record stream\n * @param {String} resultId - Result id\n * @returns {RecordStream} - Record stream, convertible to CSV data stream\n */\nBatch.prototype.result = function(resultId) {\n var jobId = this.job.id;\n var batchId = this.id;\n if (!jobId || !batchId) {\n throw new Error(\"Batch not started.\");\n }\n var resultStream = new RecordStream.Parsable();\n var resultDataStream = resultStream.stream('csv');\n var reqStream = this._bulk._request({\n method : 'GET',\n path : \"/job/\" + jobId + \"/batch/\" + batchId + \"/result/\" + resultId,\n responseType: \"application/octet-stream\"\n }).stream().pipe(resultDataStream);\n return resultStream;\n};\n\n/*--------------------------------------------*/\n/**\n * @private\n */\nvar BulkApi = function() {\n BulkApi.super_.apply(this, arguments);\n};\n\ninherits(BulkApi, HttpApi);\n\nBulkApi.prototype.beforeSend = function(request) {\n request.headers = request.headers || {};\n request.headers[\"X-SFDC-SESSION\"] = this._conn.accessToken;\n};\n\nBulkApi.prototype.isSessionExpired = function(response) {\n return response.statusCode === 400 &&\n /<exceptionCode>InvalidSessionId<\\/exceptionCode>/.test(response.body);\n};\n\nBulkApi.prototype.hasErrorInResponseBody = function(body) {\n return !!body.error;\n};\n\nBulkApi.prototype.parseError = function(body) {\n return {\n errorCode: body.error.exceptionCode,\n message: body.error.exceptionMessage\n };\n};\n\n/*--------------------------------------------*/\n\n/**\n * Class for Bulk API\n *\n * @class\n * @param {Connection} conn - Connection object\n */\nvar Bulk = function(conn) {\n this._conn = conn;\n this._logger = conn._logger;\n};\n\n/**\n * Polling interval in milliseconds\n * @type {Number}\n */\nBulk.prototype.pollInterval = 1000;\n\n/**\n * Polling timeout in milliseconds\n * @type {Number}\n */\nBulk.prototype.pollTimeout = 10000;\n\n/** @private **/\nBulk.prototype._request = function(request, callback) {\n var conn = this._conn;\n request = _.clone(request);\n var baseUrl = [ conn.instanceUrl, \"services/async\", conn.version ].join('/');\n request.url = baseUrl + request.path;\n var options = { responseType: request.responseType };\n delete request.path;\n delete request.responseType;\n return new BulkApi(this._conn, options).request(request).thenCall(callback);\n};\n\n/**\n * Create and start bulkload job and batch\n *\n * @param {String} type - SObject type\n * @param {String} operation - Bulk load operation ('insert', 'update', 'upsert', 'delete', or 'hardDelete')\n * @param {Object} [options] - Options for bulk loading operation\n * @param {String} [options.extIdField] - External ID field name (used when upsert operation).\n * @param {String} [options.concurrencyMode] - 'Serial' or 'Parallel'. Defaults to Parallel.\n * @param {Array.<Record>|stream.Stream|String} [input] - Input source for bulkload. Accepts array of records, CSV string, and CSV data input stream in insert/update/upsert/delete/hardDelete operation, SOQL string in query operation.\n * @param {Callback.<Array.<RecordResult>|Array.<Bulk~BatchResultInfo>>} [callback] - Callback function\n * @returns {Bulk~Batch}\n */\nBulk.prototype.load = function(type, operation, options, input, callback) {\n var self = this;\n if (!type || !operation) {\n throw new Error(\"Insufficient arguments. At least, 'type' and 'operation' are required.\");\n }\n if (!_.isObject(options) || options.constructor !== Object) { // when options is not plain hash object, it is omitted\n callback = input;\n input = options;\n options = null;\n }\n var job = this.createJob(type, operation, options);\n job.once('error', function (error) {\n if (batch) {\n batch.emit('error', error); // pass job error to batch\n }\n });\n var batch = job.createBatch();\n var cleanup = function() {\n batch = null;\n job.close();\n };\n var cleanupOnError = function(err) {\n if (err.name !== 'PollingTimeout') {\n cleanup();\n }\n };\n batch.on('response', cleanup);\n batch.on('error', cleanupOnError);\n batch.on('queue', function() { batch.poll(self.pollInterval, self.pollTimeout); });\n return batch.execute(input, callback);\n};\n\n/**\n * Execute bulk query and get record stream\n *\n * @param {String} soql - SOQL to execute in bulk job\n * @returns {RecordStream.Parsable} - Record stream, convertible to CSV data stream\n */\nBulk.prototype.query = function(soql) {\n var m = soql.replace(/\\([\\s\\S]+\\)/g, '').match(/FROM\\s+(\\w+)/i);\n if (!m) {\n throw new Error(\"No sobject type found in query, maybe caused by invalid SOQL.\");\n }\n var type = m[1];\n var self = this;\n var recordStream = new RecordStream.Parsable();\n var dataStream = recordStream.stream('csv');\n this.load(type, \"query\", soql).then(function(results) {\n var streams = results.map(function(result) {\n return self\n .job(result.jobId)\n .batch(result.batchId)\n .result(result.id)\n .stream();\n });\n\n joinStreams(streams).pipe(dataStream);\n }).fail(function(err) {\n recordStream.emit('error', err);\n });\n return recordStream;\n};\n\n\n/**\n * Create a new job instance\n *\n * @param {String} type - SObject type\n * @param {String} operation - Bulk load operation ('insert', 'update', 'upsert', 'delete', 'hardDelete', or 'query')\n * @param {Object} [options] - Options for bulk loading operation\n * @returns {Bulk~Job}\n */\nBulk.prototype.createJob = function(type, operation, options) {\n return new Job(this, type, operation, options);\n};\n\n/**\n * Get a job instance specified by given job ID\n *\n * @param {String} jobId - Job ID\n * @returns {Bulk~Job}\n */\nBulk.prototype.job = function(jobId) {\n return new Job(this, null, null, null, jobId);\n};\n\n\n/*--------------------------------------------*/\n/*\n * Register hook in connection instantiation for dynamically adding this API module features\n */\njsforce.on('connection:new', function(conn) {\n conn.bulk = new Bulk(conn);\n});\n\n\nmodule.exports = Bulk;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n"]}
|
|
@@ -1,320 +0,0 @@
|
|
|
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(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
|
2
|
-
/**
|
|
3
|
-
* @file Manages Salesforce Chatter REST API calls
|
|
4
|
-
* @author Shinichi Tomita <shinichi.tomita@gmail.com>
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
'use strict';
|
|
8
|
-
|
|
9
|
-
var inherits = window.jsforce.require('inherits'),
|
|
10
|
-
_ = window.jsforce.require('lodash/core'),
|
|
11
|
-
jsforce = window.jsforce.require('./core'),
|
|
12
|
-
Promise = window.jsforce.require('./promise');
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* API class for Chatter REST API call
|
|
16
|
-
*
|
|
17
|
-
* @class
|
|
18
|
-
* @param {Connection} conn Connection
|
|
19
|
-
*/
|
|
20
|
-
var Chatter = module.exports = function(conn) {
|
|
21
|
-
this._conn = conn;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Sending request to API endpoint
|
|
26
|
-
* @private
|
|
27
|
-
*/
|
|
28
|
-
Chatter.prototype._request = function(params, callback) {
|
|
29
|
-
if (/^(put|post|patch)$/i.test(params.method)) {
|
|
30
|
-
if (_.isObject(params.body)) {
|
|
31
|
-
params.headers = {
|
|
32
|
-
"Content-Type": "application/json"
|
|
33
|
-
};
|
|
34
|
-
params.body = JSON.stringify(params.body);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
params.url = this._normalizeUrl(params.url);
|
|
38
|
-
return this._conn.request(params, callback);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Convert path to site root relative url
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
Chatter.prototype._normalizeUrl = function(url) {
|
|
46
|
-
if (url.indexOf('/chatter/') === 0 || url.indexOf('/connect/') === 0) {
|
|
47
|
-
return '/services/data/v' + this._conn.version + url;
|
|
48
|
-
} else if (/^\/v[\d]+\.[\d]+\//.test(url)) {
|
|
49
|
-
return '/services/data' + url;
|
|
50
|
-
} else if (url.indexOf('/services/') !== 0 && url[0] === '/') {
|
|
51
|
-
return '/services/data/v' + this._conn.version + '/chatter' + url;
|
|
52
|
-
} else {
|
|
53
|
-
return url;
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* @typedef {Object} Chatter~RequestParams
|
|
59
|
-
* @prop {String} method - HTTP method
|
|
60
|
-
* @prop {String} url - Resource URL
|
|
61
|
-
* @prop {String} [body] - HTTP body (in POST/PUT/PATCH methods)
|
|
62
|
-
*/
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @typedef {Object} Chatter~RequestResult
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Make a request for chatter API resource
|
|
70
|
-
*
|
|
71
|
-
* @param {Chatter~RequestParams} params - Paramters representing HTTP request
|
|
72
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback func
|
|
73
|
-
* @returns {Chatter~Request}
|
|
74
|
-
*/
|
|
75
|
-
Chatter.prototype.request = function(params, callback) {
|
|
76
|
-
return new Request(this, params).thenCall(callback);
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Make a resource request to chatter API
|
|
81
|
-
*
|
|
82
|
-
* @param {String} url - Resource URL
|
|
83
|
-
* @param {Object} [queryParams] - Query parameters (in hash object)
|
|
84
|
-
* @returns {Chatter~Resource}
|
|
85
|
-
*/
|
|
86
|
-
Chatter.prototype.resource = function(url, queryParams) {
|
|
87
|
-
return new Resource(this, url, queryParams);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* @typedef {Object} Chatter~BatchRequestResult
|
|
92
|
-
* @prop {Boolean} hasError - Flag if the batch has one or more errors
|
|
93
|
-
* @prop {Array.<Object>} results - Batch request results in array
|
|
94
|
-
* @prop {Number} results.statusCode - HTTP response status code
|
|
95
|
-
* @prop {Chatter~RequestResult} results.result - Parsed HTTP response body
|
|
96
|
-
*/
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Make a batch request to chatter API
|
|
100
|
-
*
|
|
101
|
-
* @params {Array.<Chatter~Request>} requests - Chatter API requests
|
|
102
|
-
* @param {Callback.<Chatter~BatchRequestResult>} [callback] - Callback func
|
|
103
|
-
* @returns {Promise.<Chatter~BatchRequestResult>}
|
|
104
|
-
*/
|
|
105
|
-
Chatter.prototype.batch = function(requests, callback) {
|
|
106
|
-
var self = this;
|
|
107
|
-
var batchRequests = [], batchDeferreds = [];
|
|
108
|
-
_.forEach(requests, function(request) {
|
|
109
|
-
var deferred = Promise.defer();
|
|
110
|
-
request._promise = deferred.promise;
|
|
111
|
-
batchRequests.push(request.batchParams());
|
|
112
|
-
batchDeferreds.push(deferred);
|
|
113
|
-
});
|
|
114
|
-
var params = {
|
|
115
|
-
method: 'POST',
|
|
116
|
-
url: this._normalizeUrl('/connect/batch'),
|
|
117
|
-
body: {
|
|
118
|
-
batchRequests: batchRequests
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
return this.request(params).then(function(res) {
|
|
122
|
-
_.forEach(res.results, function(result, i) {
|
|
123
|
-
var deferred = batchDeferreds[i];
|
|
124
|
-
if (result.statusCode >= 400) {
|
|
125
|
-
deferred.reject(result.result);
|
|
126
|
-
} else {
|
|
127
|
-
deferred.resolve(result.result);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
return res;
|
|
131
|
-
}).thenCall(callback);
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/*--------------------------------------------*/
|
|
136
|
-
/**
|
|
137
|
-
* A class representing chatter API request
|
|
138
|
-
*
|
|
139
|
-
* @protected
|
|
140
|
-
* @class Chatter~Request
|
|
141
|
-
* @implements {Promise.<Chatter~RequestResult>}
|
|
142
|
-
* @param {Chatter} chatter - Chatter API object
|
|
143
|
-
* @param {Chatter~RequestParams} params - Paramters representing HTTP request
|
|
144
|
-
*/
|
|
145
|
-
var Request = function(chatter, params) {
|
|
146
|
-
this._chatter = chatter;
|
|
147
|
-
this._params = params;
|
|
148
|
-
this._promise = null;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @typedef {Object} Chatter~BatchRequestParams
|
|
153
|
-
* @prop {String} method - HTTP method
|
|
154
|
-
* @prop {String} url - Resource URL
|
|
155
|
-
* @prop {String} [richInput] - HTTP body (in POST/PUT/PATCH methods)
|
|
156
|
-
*/
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Retrieve parameters in batch request form
|
|
160
|
-
*
|
|
161
|
-
* @method Chatter~Request#batchParams
|
|
162
|
-
* @returns {Chatter~BatchRequestParams}
|
|
163
|
-
*/
|
|
164
|
-
Request.prototype.batchParams = function() {
|
|
165
|
-
var params = this._params;
|
|
166
|
-
var batchParams = {
|
|
167
|
-
method: params.method,
|
|
168
|
-
url: this._chatter._normalizeUrl(params.url)
|
|
169
|
-
};
|
|
170
|
-
if (this._params.body) {
|
|
171
|
-
batchParams.richInput = this._params.body;
|
|
172
|
-
}
|
|
173
|
-
return batchParams;
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Retrieve parameters in batch request form
|
|
178
|
-
*
|
|
179
|
-
* @method Chatter~Request#promise
|
|
180
|
-
* @returns {Promise.<Chatter~RequestResult>}
|
|
181
|
-
*/
|
|
182
|
-
Request.prototype.promise = function() {
|
|
183
|
-
return this._promise || this._chatter._request(this._params);
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Returns Node.js Stream object for request
|
|
188
|
-
*
|
|
189
|
-
* @method Chatter~Request#stream
|
|
190
|
-
* @returns {stream.Stream}
|
|
191
|
-
*/
|
|
192
|
-
Request.prototype.stream = function() {
|
|
193
|
-
return this._chatter._request(this._params).stream();
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Promise/A+ interface
|
|
198
|
-
* http://promises-aplus.github.io/promises-spec/
|
|
199
|
-
*
|
|
200
|
-
* Delegate to deferred promise, return promise instance for batch result
|
|
201
|
-
*
|
|
202
|
-
* @method Chatter~Request#then
|
|
203
|
-
*/
|
|
204
|
-
Request.prototype.then = function(onResolve, onReject) {
|
|
205
|
-
return this.promise().then(onResolve, onReject);
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Promise/A+ extension
|
|
210
|
-
* Call "then" using given node-style callback function
|
|
211
|
-
*
|
|
212
|
-
* @method Chatter~Request#thenCall
|
|
213
|
-
*/
|
|
214
|
-
Request.prototype.thenCall = function(callback) {
|
|
215
|
-
return _.isFunction(callback) ? this.promise().thenCall(callback) : this;
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
/*--------------------------------------------*/
|
|
220
|
-
/**
|
|
221
|
-
* A class representing chatter API resource
|
|
222
|
-
*
|
|
223
|
-
* @protected
|
|
224
|
-
* @class Chatter~Resource
|
|
225
|
-
* @extends Chatter~Request
|
|
226
|
-
* @param {Chatter} chatter - Chatter API object
|
|
227
|
-
* @param {String} url - Resource URL
|
|
228
|
-
* @param {Object} [queryParams] - Query parameters (in hash object)
|
|
229
|
-
*/
|
|
230
|
-
var Resource = function(chatter, url, queryParams) {
|
|
231
|
-
if (queryParams) {
|
|
232
|
-
var qstring = _.map(_.keys(queryParams), function(name) {
|
|
233
|
-
return name + "=" + encodeURIComponent(queryParams[name]);
|
|
234
|
-
}).join('&');
|
|
235
|
-
url += (url.indexOf('?') > 0 ? '&' : '?') + qstring;
|
|
236
|
-
}
|
|
237
|
-
Resource.super_.call(this, chatter, { method: 'GET', url: url });
|
|
238
|
-
this._url = url;
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
inherits(Resource, Request);
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Create a new resource
|
|
245
|
-
*
|
|
246
|
-
* @method Chatter~Resource#create
|
|
247
|
-
* @param {Object} data - Data to newly post
|
|
248
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
249
|
-
* @returns {Chatter~Request}
|
|
250
|
-
*/
|
|
251
|
-
Resource.prototype.create = function(data, callback) {
|
|
252
|
-
return this._chatter.request({
|
|
253
|
-
method: 'POST',
|
|
254
|
-
url: this._url,
|
|
255
|
-
body: data
|
|
256
|
-
}).thenCall(callback);
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Retrieve resource content
|
|
261
|
-
*
|
|
262
|
-
* @method Chatter~Resource#retrieve
|
|
263
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
264
|
-
* @returns {Chatter~Request}
|
|
265
|
-
*/
|
|
266
|
-
Resource.prototype.retrieve = function(callback) {
|
|
267
|
-
return this.thenCall(callback);
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Update specified resource
|
|
272
|
-
*
|
|
273
|
-
* @method Chatter~Resource#update
|
|
274
|
-
* @param {Object} data - Data to update
|
|
275
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
276
|
-
* @returns {Chatter~Request}
|
|
277
|
-
*/
|
|
278
|
-
Resource.prototype.update = function(data, callback) {
|
|
279
|
-
return this._chatter.request({
|
|
280
|
-
method: 'PATCH',
|
|
281
|
-
url: this._url,
|
|
282
|
-
body: data
|
|
283
|
-
}).thenCall(callback);
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Synonym of Resource#delete()
|
|
288
|
-
*
|
|
289
|
-
* @method Chatter~Resource#del
|
|
290
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
291
|
-
* @returns {Chatter~Request}
|
|
292
|
-
*/
|
|
293
|
-
/**
|
|
294
|
-
* Delete specified resource
|
|
295
|
-
*
|
|
296
|
-
* @method Chatter~Resource#delete
|
|
297
|
-
* @param {Callback.<Chatter~RequestResult>} [callback] - Callback function
|
|
298
|
-
* @returns {Chatter~Request}
|
|
299
|
-
*/
|
|
300
|
-
Resource.prototype.del =
|
|
301
|
-
Resource.prototype["delete"] = function(callback) {
|
|
302
|
-
return this._chatter.request({
|
|
303
|
-
method: 'DELETE',
|
|
304
|
-
url: this._url
|
|
305
|
-
}).thenCall(callback);
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
/*--------------------------------------------*/
|
|
310
|
-
/*
|
|
311
|
-
* Register hook in connection instantiation for dynamically adding this API module features
|
|
312
|
-
*/
|
|
313
|
-
jsforce.on('connection:new', function(conn) {
|
|
314
|
-
conn.chatter = new Chatter(conn);
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
},{}]},{},[1])(1)
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYXBpL2NoYXR0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipcbiAqIEBmaWxlIE1hbmFnZXMgU2FsZXNmb3JjZSBDaGF0dGVyIFJFU1QgQVBJIGNhbGxzXG4gKiBAYXV0aG9yIFNoaW5pY2hpIFRvbWl0YSA8c2hpbmljaGkudG9taXRhQGdtYWlsLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHdpbmRvdy5qc2ZvcmNlLnJlcXVpcmUoJ2luaGVyaXRzJyksXG4gICAgXyAgICAgICA9IHdpbmRvdy5qc2ZvcmNlLnJlcXVpcmUoJ2xvZGFzaC9jb3JlJyksXG4gICAganNmb3JjZSA9IHdpbmRvdy5qc2ZvcmNlLnJlcXVpcmUoJy4vY29yZScpLFxuICAgIFByb21pc2UgPSB3aW5kb3cuanNmb3JjZS5yZXF1aXJlKCcuL3Byb21pc2UnKTtcblxuLyoqXG4gKiBBUEkgY2xhc3MgZm9yIENoYXR0ZXIgUkVTVCBBUEkgY2FsbFxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uIENvbm5lY3Rpb25cbiAqL1xudmFyIENoYXR0ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbm4pIHtcbiAgdGhpcy5fY29ubiA9IGNvbm47XG59O1xuXG4vKipcbiAqIFNlbmRpbmcgcmVxdWVzdCB0byBBUEkgZW5kcG9pbnRcbiAqIEBwcml2YXRlXG4gKi9cbkNoYXR0ZXIucHJvdG90eXBlLl9yZXF1ZXN0ID0gZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICBpZiAoL14ocHV0fHBvc3R8cGF0Y2gpJC9pLnRlc3QocGFyYW1zLm1ldGhvZCkpIHtcbiAgICBpZiAoXy5pc09iamVjdChwYXJhbXMuYm9keSkpIHtcbiAgICAgIHBhcmFtcy5oZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgfTtcbiAgICAgIHBhcmFtcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLmJvZHkpO1xuICAgIH1cbiAgfVxuICBwYXJhbXMudXJsID0gdGhpcy5fbm9ybWFsaXplVXJsKHBhcmFtcy51cmwpO1xuICByZXR1cm4gdGhpcy5fY29ubi5yZXF1ZXN0KHBhcmFtcywgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHBhdGggdG8gc2l0ZSByb290IHJlbGF0aXZlIHVybFxuICogQHByaXZhdGVcbiAqL1xuQ2hhdHRlci5wcm90b3R5cGUuX25vcm1hbGl6ZVVybCA9IGZ1bmN0aW9uKHVybCkge1xuICBpZiAodXJsLmluZGV4T2YoJy9jaGF0dGVyLycpID09PSAwIHx8IHVybC5pbmRleE9mKCcvY29ubmVjdC8nKSA9PT0gMCkge1xuICAgIHJldHVybiAnL3NlcnZpY2VzL2RhdGEvdicgKyB0aGlzLl9jb25uLnZlcnNpb24gKyB1cmw7XG4gIH0gZWxzZSBpZiAoL15cXC92W1xcZF0rXFwuW1xcZF0rXFwvLy50ZXN0KHVybCkpIHtcbiAgICByZXR1cm4gJy9zZXJ2aWNlcy9kYXRhJyArIHVybDtcbiAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZignL3NlcnZpY2VzLycpICE9PSAwICYmIHVybFswXSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuICcvc2VydmljZXMvZGF0YS92JyArIHRoaXMuX2Nvbm4udmVyc2lvbiArICcvY2hhdHRlcicgKyB1cmw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDaGF0dGVyflJlcXVlc3RQYXJhbXNcbiAqIEBwcm9wIHtTdHJpbmd9IG1ldGhvZCAtIEhUVFAgbWV0aG9kXG4gKiBAcHJvcCB7U3RyaW5nfSB1cmwgLSBSZXNvdXJjZSBVUkxcbiAqIEBwcm9wIHtTdHJpbmd9IFtib2R5XSAtIEhUVFAgYm9keSAoaW4gUE9TVC9QVVQvUEFUQ0ggbWV0aG9kcylcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYXR0ZXJ+UmVxdWVzdFJlc3VsdFxuICovXG5cbi8qKlxuICogTWFrZSBhIHJlcXVlc3QgZm9yIGNoYXR0ZXIgQVBJIHJlc291cmNlXG4gKlxuICogQHBhcmFtIHtDaGF0dGVyflJlcXVlc3RQYXJhbXN9IHBhcmFtcyAtIFBhcmFtdGVycyByZXByZXNlbnRpbmcgSFRUUCByZXF1ZXN0XG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxDaGF0dGVyflJlcXVlc3RSZXN1bHQ+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY1xuICogQHJldHVybnMge0NoYXR0ZXJ+UmVxdWVzdH1cbiAqL1xuQ2hhdHRlci5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHBhcmFtcykudGhlbkNhbGwoY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcmVzb3VyY2UgcmVxdWVzdCB0byBjaGF0dGVyIEFQSVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBSZXNvdXJjZSBVUkxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcXVlcnlQYXJhbXNdIC0gUXVlcnkgcGFyYW1ldGVycyAoaW4gaGFzaCBvYmplY3QpXG4gKiBAcmV0dXJucyB7Q2hhdHRlcn5SZXNvdXJjZX1cbiAqL1xuQ2hhdHRlci5wcm90b3R5cGUucmVzb3VyY2UgPSBmdW5jdGlvbih1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIHJldHVybiBuZXcgUmVzb3VyY2UodGhpcywgdXJsLCBxdWVyeVBhcmFtcyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYXR0ZXJ+QmF0Y2hSZXF1ZXN0UmVzdWx0XG4gKiBAcHJvcCB7Qm9vbGVhbn0gaGFzRXJyb3IgLSBGbGFnIGlmIHRoZSBiYXRjaCBoYXMgb25lIG9yIG1vcmUgZXJyb3JzXG4gKiBAcHJvcCB7QXJyYXkuPE9iamVjdD59IHJlc3VsdHMgLSBCYXRjaCByZXF1ZXN0IHJlc3VsdHMgaW4gYXJyYXlcbiAqIEBwcm9wIHtOdW1iZXJ9IHJlc3VsdHMuc3RhdHVzQ29kZSAtIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGVcbiAqIEBwcm9wIHtDaGF0dGVyflJlcXVlc3RSZXN1bHR9IHJlc3VsdHMucmVzdWx0IC0gUGFyc2VkIEhUVFAgcmVzcG9uc2UgYm9keVxuICovXG5cbi8qKlxuICogTWFrZSBhIGJhdGNoIHJlcXVlc3QgdG8gY2hhdHRlciBBUElcbiAqXG4gKiBAcGFyYW1zIHtBcnJheS48Q2hhdHRlcn5SZXF1ZXN0Pn0gcmVxdWVzdHMgLSBDaGF0dGVyIEFQSSByZXF1ZXN0c1xuICogQHBhcmFtIHtDYWxsYmFjay48Q2hhdHRlcn5CYXRjaFJlcXVlc3RSZXN1bHQ+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY1xuICogQHJldHVybnMge1Byb21pc2UuPENoYXR0ZXJ+QmF0Y2hSZXF1ZXN0UmVzdWx0Pn1cbiAqL1xuQ2hhdHRlci5wcm90b3R5cGUuYmF0Y2ggPSBmdW5jdGlvbihyZXF1ZXN0cywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYmF0Y2hSZXF1ZXN0cyA9IFtdLCBiYXRjaERlZmVycmVkcyA9IFtdO1xuICBfLmZvckVhY2gocmVxdWVzdHMsIGZ1bmN0aW9uKHJlcXVlc3QpIHtcbiAgICB2YXIgZGVmZXJyZWQgPSBQcm9taXNlLmRlZmVyKCk7XG4gICAgcmVxdWVzdC5fcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgYmF0Y2hSZXF1ZXN0cy5wdXNoKHJlcXVlc3QuYmF0Y2hQYXJhbXMoKSk7XG4gICAgYmF0Y2hEZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG4gIH0pO1xuICB2YXIgcGFyYW1zID0ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogdGhpcy5fbm9ybWFsaXplVXJsKCcvY29ubmVjdC9iYXRjaCcpLFxuICAgIGJvZHk6IHtcbiAgICAgIGJhdGNoUmVxdWVzdHM6IGJhdGNoUmVxdWVzdHNcbiAgICB9XG4gIH07XG4gIHJldHVybiB0aGlzLnJlcXVlc3QocGFyYW1zKS50aGVuKGZ1bmN0aW9uKHJlcykge1xuICAgIF8uZm9yRWFjaChyZXMucmVzdWx0cywgZnVuY3Rpb24ocmVzdWx0LCBpKSB7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBiYXRjaERlZmVycmVkc1tpXTtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KHJlc3VsdC5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShyZXN1bHQucmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9KS50aGVuQ2FsbChjYWxsYmFjayk7XG59O1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBBIGNsYXNzIHJlcHJlc2VudGluZyBjaGF0dGVyIEFQSSByZXF1ZXN0XG4gKlxuICogQHByb3RlY3RlZFxuICogQGNsYXNzIENoYXR0ZXJ+UmVxdWVzdFxuICogQGltcGxlbWVudHMge1Byb21pc2UuPENoYXR0ZXJ+UmVxdWVzdFJlc3VsdD59XG4gKiBAcGFyYW0ge0NoYXR0ZXJ9IGNoYXR0ZXIgLSBDaGF0dGVyIEFQSSBvYmplY3RcbiAqIEBwYXJhbSB7Q2hhdHRlcn5SZXF1ZXN0UGFyYW1zfSBwYXJhbXMgLSBQYXJhbXRlcnMgcmVwcmVzZW50aW5nIEhUVFAgcmVxdWVzdFxuICovXG52YXIgUmVxdWVzdCA9IGZ1bmN0aW9uKGNoYXR0ZXIsIHBhcmFtcykge1xuICB0aGlzLl9jaGF0dGVyID0gY2hhdHRlcjtcbiAgdGhpcy5fcGFyYW1zID0gcGFyYW1zO1xuICB0aGlzLl9wcm9taXNlID0gbnVsbDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2hhdHRlcn5CYXRjaFJlcXVlc3RQYXJhbXNcbiAqIEBwcm9wIHtTdHJpbmd9IG1ldGhvZCAtIEhUVFAgbWV0aG9kXG4gKiBAcHJvcCB7U3RyaW5nfSB1cmwgLSBSZXNvdXJjZSBVUkxcbiAqIEBwcm9wIHtTdHJpbmd9IFtyaWNoSW5wdXRdIC0gSFRUUCBib2R5IChpbiBQT1NUL1BVVC9QQVRDSCBtZXRob2RzKVxuICovXG5cbi8qKlxuICogUmV0cmlldmUgcGFyYW1ldGVycyBpbiBiYXRjaCByZXF1ZXN0IGZvcm1cbiAqXG4gKiBAbWV0aG9kIENoYXR0ZXJ+UmVxdWVzdCNiYXRjaFBhcmFtc1xuICogQHJldHVybnMge0NoYXR0ZXJ+QmF0Y2hSZXF1ZXN0UGFyYW1zfVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5iYXRjaFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuICB2YXIgYmF0Y2hQYXJhbXMgPSB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIHVybDogdGhpcy5fY2hhdHRlci5fbm9ybWFsaXplVXJsKHBhcmFtcy51cmwpXG4gIH07XG4gIGlmICh0aGlzLl9wYXJhbXMuYm9keSkge1xuICAgIGJhdGNoUGFyYW1zLnJpY2hJbnB1dCA9IHRoaXMuX3BhcmFtcy5ib2R5O1xuICB9XG4gIHJldHVybiBiYXRjaFBhcmFtcztcbn07XG5cbi8qKlxuICogUmV0cmlldmUgcGFyYW1ldGVycyBpbiBiYXRjaCByZXF1ZXN0IGZvcm1cbiAqXG4gKiBAbWV0aG9kIENoYXR0ZXJ+UmVxdWVzdCNwcm9taXNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48Q2hhdHRlcn5SZXF1ZXN0UmVzdWx0Pn1cbiAqL1xuUmVxdWVzdC5wcm90b3R5cGUucHJvbWlzZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcHJvbWlzZSB8fCB0aGlzLl9jaGF0dGVyLl9yZXF1ZXN0KHRoaXMuX3BhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgTm9kZS5qcyBTdHJlYW0gb2JqZWN0IGZvciByZXF1ZXN0XG4gKlxuICogQG1ldGhvZCBDaGF0dGVyflJlcXVlc3Qjc3RyZWFtXG4gKiBAcmV0dXJucyB7c3RyZWFtLlN0cmVhbX1cbiAqL1xuUmVxdWVzdC5wcm90b3R5cGUuc3RyZWFtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jaGF0dGVyLl9yZXF1ZXN0KHRoaXMuX3BhcmFtcykuc3RyZWFtKCk7XG59O1xuXG4vKipcbiAqIFByb21pc2UvQSsgaW50ZXJmYWNlXG4gKiBodHRwOi8vcHJvbWlzZXMtYXBsdXMuZ2l0aHViLmlvL3Byb21pc2VzLXNwZWMvXG4gKlxuICogRGVsZWdhdGUgdG8gZGVmZXJyZWQgcHJvbWlzZSwgcmV0dXJuIHByb21pc2UgaW5zdGFuY2UgZm9yIGJhdGNoIHJlc3VsdFxuICpcbiAqIEBtZXRob2QgQ2hhdHRlcn5SZXF1ZXN0I3RoZW5cbiAqL1xuUmVxdWVzdC5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKG9uUmVzb2x2ZSwgb25SZWplY3QpIHtcbiAgcmV0dXJuIHRoaXMucHJvbWlzZSgpLnRoZW4ob25SZXNvbHZlLCBvblJlamVjdCk7XG59O1xuXG4vKipcbiAqIFByb21pc2UvQSsgZXh0ZW5zaW9uXG4gKiBDYWxsIFwidGhlblwiIHVzaW5nIGdpdmVuIG5vZGUtc3R5bGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBAbWV0aG9kIENoYXR0ZXJ+UmVxdWVzdCN0aGVuQ2FsbFxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS50aGVuQ2FsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHJldHVybiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spID8gdGhpcy5wcm9taXNlKCkudGhlbkNhbGwoY2FsbGJhY2spIDogdGhpcztcbn07XG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIGNoYXR0ZXIgQVBJIHJlc291cmNlXG4gKlxuICogQHByb3RlY3RlZFxuICogQGNsYXNzIENoYXR0ZXJ+UmVzb3VyY2VcbiAqIEBleHRlbmRzIENoYXR0ZXJ+UmVxdWVzdFxuICogQHBhcmFtIHtDaGF0dGVyfSBjaGF0dGVyIC0gQ2hhdHRlciBBUEkgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gUmVzb3VyY2UgVVJMXG4gKiBAcGFyYW0ge09iamVjdH0gW3F1ZXJ5UGFyYW1zXSAtIFF1ZXJ5IHBhcmFtZXRlcnMgKGluIGhhc2ggb2JqZWN0KVxuICovXG52YXIgUmVzb3VyY2UgPSBmdW5jdGlvbihjaGF0dGVyLCB1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmIChxdWVyeVBhcmFtcykge1xuICAgIHZhciBxc3RyaW5nID0gXy5tYXAoXy5rZXlzKHF1ZXJ5UGFyYW1zKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWUgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChxdWVyeVBhcmFtc1tuYW1lXSk7XG4gICAgfSkuam9pbignJicpO1xuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA+IDAgPyAnJicgOiAnPycpICsgcXN0cmluZztcbiAgfVxuICBSZXNvdXJjZS5zdXBlcl8uY2FsbCh0aGlzLCBjaGF0dGVyLCB7IG1ldGhvZDogJ0dFVCcsIHVybDogdXJsIH0pO1xuICB0aGlzLl91cmwgPSB1cmw7XG59O1xuXG5pbmhlcml0cyhSZXNvdXJjZSwgUmVxdWVzdCk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHJlc291cmNlXG4gKlxuICogQG1ldGhvZCBDaGF0dGVyflJlc291cmNlI2NyZWF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhIHRvIG5ld2x5IHBvc3RcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPENoYXR0ZXJ+UmVxdWVzdFJlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge0NoYXR0ZXJ+UmVxdWVzdH1cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLl9jaGF0dGVyLnJlcXVlc3Qoe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogdGhpcy5fdXJsLFxuICAgIGJvZHk6IGRhdGFcbiAgfSkudGhlbkNhbGwoY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSByZXNvdXJjZSBjb250ZW50XG4gKlxuICogQG1ldGhvZCBDaGF0dGVyflJlc291cmNlI3JldHJpZXZlXG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxDaGF0dGVyflJlcXVlc3RSZXN1bHQ+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtDaGF0dGVyflJlcXVlc3R9XG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5yZXRyaWV2ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLnRoZW5DYWxsKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHNwZWNpZmllZCByZXNvdXJjZVxuICpcbiAqIEBtZXRob2QgQ2hhdHRlcn5SZXNvdXJjZSN1cGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YSB0byB1cGRhdGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPENoYXR0ZXJ+UmVxdWVzdFJlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge0NoYXR0ZXJ+UmVxdWVzdH1cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLl9jaGF0dGVyLnJlcXVlc3Qoe1xuICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICB1cmw6IHRoaXMuX3VybCxcbiAgICBib2R5OiBkYXRhXG4gIH0pLnRoZW5DYWxsKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogU3lub255bSBvZiBSZXNvdXJjZSNkZWxldGUoKVxuICpcbiAqIEBtZXRob2QgQ2hhdHRlcn5SZXNvdXJjZSNkZWxcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPENoYXR0ZXJ+UmVxdWVzdFJlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge0NoYXR0ZXJ+UmVxdWVzdH1cbiAqL1xuLyoqXG4gKiBEZWxldGUgc3BlY2lmaWVkIHJlc291cmNlXG4gKlxuICogQG1ldGhvZCBDaGF0dGVyflJlc291cmNlI2RlbGV0ZVxuICogQHBhcmFtIHtDYWxsYmFjay48Q2hhdHRlcn5SZXF1ZXN0UmVzdWx0Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7Q2hhdHRlcn5SZXF1ZXN0fVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuZGVsID1cblJlc291cmNlLnByb3RvdHlwZVtcImRlbGV0ZVwiXSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLl9jaGF0dGVyLnJlcXVlc3Qoe1xuICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgdXJsOiB0aGlzLl91cmxcbiAgfSkudGhlbkNhbGwoY2FsbGJhY2spO1xufTtcblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qXG4gKiBSZWdpc3RlciBob29rIGluIGNvbm5lY3Rpb24gaW5zdGFudGlhdGlvbiBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIHRoaXMgQVBJIG1vZHVsZSBmZWF0dXJlc1xuICovXG5qc2ZvcmNlLm9uKCdjb25uZWN0aW9uOm5ldycsIGZ1bmN0aW9uKGNvbm4pIHtcbiAgY29ubi5jaGF0dGVyID0gbmV3IENoYXR0ZXIoY29ubik7XG59KTtcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(t){var e;"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):(e=(e=(e=(e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jsforce||(e.jsforce={})).modules||(e.modules={})).api||(e.api={})).Chatter=t()}(function(){return function n(o,i,s){function u(e,t){if(!i[e]){if(!o[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(c)return c(e,!0);throw(r=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",r}r=i[e]={exports:{}},o[e][0].call(r.exports,function(t){return u(o[e][1][t]||t)},r,r.exports,n,o,i,s)}return i[e].exports}for(var c="function"==typeof require&&require,t=0;t<s.length;t++)u(s[t]);return u}({1:[function(t,e,r){"use strict";var n=window.jsforce.require("inherits"),o=window.jsforce.require("lodash/core"),i=window.jsforce.require("./core"),s=window.jsforce.require("./promise"),u=e.exports=function(t){this._conn=t};u.prototype._request=function(t,e){return/^(put|post|patch)$/i.test(t.method)&&o.isObject(t.body)&&(t.headers={"Content-Type":"application/json"},t.body=JSON.stringify(t.body)),t.url=this._normalizeUrl(t.url),this._conn.request(t,e)},u.prototype._normalizeUrl=function(t){return 0===t.indexOf("/chatter/")||0===t.indexOf("/connect/")?"/services/data/v"+this._conn.version+t:/^\/v[\d]+\.[\d]+\//.test(t)?"/services/data"+t:0!==t.indexOf("/services/")&&"/"===t[0]?"/services/data/v"+this._conn.version+"/chatter"+t:t},u.prototype.request=function(t,e){return new c(this,t).thenCall(e)},u.prototype.resource=function(t,e){return new a(this,t,e)},u.prototype.batch=function(t,e){var r=[],n=[];o.forEach(t,function(t){var e=s.defer();t._promise=e.promise,r.push(t.batchParams()),n.push(e)});t={method:"POST",url:this._normalizeUrl("/connect/batch"),body:{batchRequests:r}};return this.request(t).then(function(t){return o.forEach(t.results,function(t,e){e=n[e];400<=t.statusCode?e.reject(t.result):e.resolve(t.result)}),t}).thenCall(e)};var c=function(t,e){this._chatter=t,this._params=e,this._promise=null};c.prototype.batchParams=function(){var t=this._params,t={method:t.method,url:this._chatter._normalizeUrl(t.url)};return this._params.body&&(t.richInput=this._params.body),t},c.prototype.promise=function(){return this._promise||this._chatter._request(this._params)},c.prototype.stream=function(){return this._chatter._request(this._params).stream()},c.prototype.then=function(t,e){return this.promise().then(t,e)},c.prototype.thenCall=function(t){return o.isFunction(t)?this.promise().thenCall(t):this};var a=function(t,e,r){var n;r&&(n=o.map(o.keys(r),function(t){return t+"="+encodeURIComponent(r[t])}).join("&"),e+=(0<e.indexOf("?")?"&":"?")+n),a.super_.call(this,t,{method:"GET",url:e}),this._url=e};n(a,c),a.prototype.create=function(t,e){return this._chatter.request({method:"POST",url:this._url,body:t}).thenCall(e)},a.prototype.retrieve=function(t){return this.thenCall(t)},a.prototype.update=function(t,e){return this._chatter.request({method:"PATCH",url:this._url,body:t}).thenCall(e)},a.prototype.del=a.prototype.delete=function(t){return this._chatter.request({method:"DELETE",url:this._url}).thenCall(t)},i.on("connection:new",function(t){t.chatter=new u(t)})},{}]},{},[1])(1)});
|
|
2
|
-
//# sourceMappingURL=jsforce-api-chatter.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/api/chatter.js"],"names":["f","g","exports","module","define","amd","window","global","self","this","jsforce","modules","api","Chatter","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","inherits","_","Promise","conn","_conn","prototype","_request","params","callback","test","method","isObject","body","headers","Content-Type","JSON","stringify","url","_normalizeUrl","request","indexOf","version","Request","thenCall","resource","queryParams","Resource","batch","requests","batchRequests","batchDeferreds","forEach","deferred","defer","_promise","promise","push","batchParams","then","res","results","result","statusCode","reject","resolve","chatter","_chatter","_params","richInput","stream","onResolve","onReject","isFunction","qstring","map","keys","name","encodeURIComponent","join","super_","_url","create","data","retrieve","update","del","on"],"mappings":"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","file":"jsforce-api-chatter.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/**\n * @file Manages Salesforce Chatter REST API calls\n * @author Shinichi Tomita <shinichi.tomita@gmail.com>\n */\n\n'use strict';\n\nvar inherits = window.jsforce.require('inherits'),\n _ = window.jsforce.require('lodash/core'),\n jsforce = window.jsforce.require('./core'),\n Promise = window.jsforce.require('./promise');\n\n/**\n * API class for Chatter REST API call\n *\n * @class\n * @param {Connection} conn Connection\n */\nvar Chatter = module.exports = function(conn) {\n this._conn = conn;\n};\n\n/**\n * Sending request to API endpoint\n * @private\n */\nChatter.prototype._request = function(params, callback) {\n if (/^(put|post|patch)$/i.test(params.method)) {\n if (_.isObject(params.body)) {\n params.headers = {\n \"Content-Type\": \"application/json\"\n };\n params.body = JSON.stringify(params.body);\n }\n }\n params.url = this._normalizeUrl(params.url);\n return this._conn.request(params, callback);\n};\n\n/**\n * Convert path to site root relative url\n * @private\n */\nChatter.prototype._normalizeUrl = function(url) {\n if (url.indexOf('/chatter/') === 0 || url.indexOf('/connect/') === 0) {\n return '/services/data/v' + this._conn.version + url;\n } else if (/^\\/v[\\d]+\\.[\\d]+\\//.test(url)) {\n return '/services/data' + url;\n } else if (url.indexOf('/services/') !== 0 && url[0] === '/') {\n return '/services/data/v' + this._conn.version + '/chatter' + url;\n } else {\n return url;\n }\n};\n\n/**\n * @typedef {Object} Chatter~RequestParams\n * @prop {String} method - HTTP method\n * @prop {String} url - Resource URL\n * @prop {String} [body] - HTTP body (in POST/PUT/PATCH methods)\n */\n\n/**\n * @typedef {Object} Chatter~RequestResult\n */\n\n/**\n * Make a request for chatter API resource\n *\n * @param {Chatter~RequestParams} params - Paramters representing HTTP request\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback func\n * @returns {Chatter~Request}\n */\nChatter.prototype.request = function(params, callback) {\n return new Request(this, params).thenCall(callback);\n};\n\n/**\n * Make a resource request to chatter API\n *\n * @param {String} url - Resource URL\n * @param {Object} [queryParams] - Query parameters (in hash object)\n * @returns {Chatter~Resource}\n */\nChatter.prototype.resource = function(url, queryParams) {\n return new Resource(this, url, queryParams);\n};\n\n/**\n * @typedef {Object} Chatter~BatchRequestResult\n * @prop {Boolean} hasError - Flag if the batch has one or more errors\n * @prop {Array.<Object>} results - Batch request results in array\n * @prop {Number} results.statusCode - HTTP response status code\n * @prop {Chatter~RequestResult} results.result - Parsed HTTP response body\n */\n\n/**\n * Make a batch request to chatter API\n *\n * @params {Array.<Chatter~Request>} requests - Chatter API requests\n * @param {Callback.<Chatter~BatchRequestResult>} [callback] - Callback func\n * @returns {Promise.<Chatter~BatchRequestResult>}\n */\nChatter.prototype.batch = function(requests, callback) {\n var self = this;\n var batchRequests = [], batchDeferreds = [];\n _.forEach(requests, function(request) {\n var deferred = Promise.defer();\n request._promise = deferred.promise;\n batchRequests.push(request.batchParams());\n batchDeferreds.push(deferred);\n });\n var params = {\n method: 'POST',\n url: this._normalizeUrl('/connect/batch'),\n body: {\n batchRequests: batchRequests\n }\n };\n return this.request(params).then(function(res) {\n _.forEach(res.results, function(result, i) {\n var deferred = batchDeferreds[i];\n if (result.statusCode >= 400) {\n deferred.reject(result.result);\n } else {\n deferred.resolve(result.result);\n }\n });\n return res;\n }).thenCall(callback);\n};\n\n\n/*--------------------------------------------*/\n/**\n * A class representing chatter API request\n *\n * @protected\n * @class Chatter~Request\n * @implements {Promise.<Chatter~RequestResult>}\n * @param {Chatter} chatter - Chatter API object\n * @param {Chatter~RequestParams} params - Paramters representing HTTP request\n */\nvar Request = function(chatter, params) {\n this._chatter = chatter;\n this._params = params;\n this._promise = null;\n};\n\n/**\n * @typedef {Object} Chatter~BatchRequestParams\n * @prop {String} method - HTTP method\n * @prop {String} url - Resource URL\n * @prop {String} [richInput] - HTTP body (in POST/PUT/PATCH methods)\n */\n\n/**\n * Retrieve parameters in batch request form\n *\n * @method Chatter~Request#batchParams\n * @returns {Chatter~BatchRequestParams}\n */\nRequest.prototype.batchParams = function() {\n var params = this._params;\n var batchParams = {\n method: params.method,\n url: this._chatter._normalizeUrl(params.url)\n };\n if (this._params.body) {\n batchParams.richInput = this._params.body;\n }\n return batchParams;\n};\n\n/**\n * Retrieve parameters in batch request form\n *\n * @method Chatter~Request#promise\n * @returns {Promise.<Chatter~RequestResult>}\n */\nRequest.prototype.promise = function() {\n return this._promise || this._chatter._request(this._params);\n};\n\n/**\n * Returns Node.js Stream object for request\n *\n * @method Chatter~Request#stream\n * @returns {stream.Stream}\n */\nRequest.prototype.stream = function() {\n return this._chatter._request(this._params).stream();\n};\n\n/**\n * Promise/A+ interface\n * http://promises-aplus.github.io/promises-spec/\n *\n * Delegate to deferred promise, return promise instance for batch result\n *\n * @method Chatter~Request#then\n */\nRequest.prototype.then = function(onResolve, onReject) {\n return this.promise().then(onResolve, onReject);\n};\n\n/**\n * Promise/A+ extension\n * Call \"then\" using given node-style callback function\n *\n * @method Chatter~Request#thenCall\n */\nRequest.prototype.thenCall = function(callback) {\n return _.isFunction(callback) ? this.promise().thenCall(callback) : this;\n};\n\n\n/*--------------------------------------------*/\n/**\n * A class representing chatter API resource\n *\n * @protected\n * @class Chatter~Resource\n * @extends Chatter~Request\n * @param {Chatter} chatter - Chatter API object\n * @param {String} url - Resource URL\n * @param {Object} [queryParams] - Query parameters (in hash object)\n */\nvar Resource = function(chatter, url, queryParams) {\n if (queryParams) {\n var qstring = _.map(_.keys(queryParams), function(name) {\n return name + \"=\" + encodeURIComponent(queryParams[name]);\n }).join('&');\n url += (url.indexOf('?') > 0 ? '&' : '?') + qstring;\n }\n Resource.super_.call(this, chatter, { method: 'GET', url: url });\n this._url = url;\n};\n\ninherits(Resource, Request);\n\n/**\n * Create a new resource\n *\n * @method Chatter~Resource#create\n * @param {Object} data - Data to newly post\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function\n * @returns {Chatter~Request}\n */\nResource.prototype.create = function(data, callback) {\n return this._chatter.request({\n method: 'POST',\n url: this._url,\n body: data\n }).thenCall(callback);\n};\n\n/**\n * Retrieve resource content\n *\n * @method Chatter~Resource#retrieve\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function\n * @returns {Chatter~Request}\n */\nResource.prototype.retrieve = function(callback) {\n return this.thenCall(callback);\n};\n\n/**\n * Update specified resource\n *\n * @method Chatter~Resource#update\n * @param {Object} data - Data to update\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function\n * @returns {Chatter~Request}\n */\nResource.prototype.update = function(data, callback) {\n return this._chatter.request({\n method: 'PATCH',\n url: this._url,\n body: data\n }).thenCall(callback);\n};\n\n/**\n * Synonym of Resource#delete()\n *\n * @method Chatter~Resource#del\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function\n * @returns {Chatter~Request}\n */\n/**\n * Delete specified resource\n *\n * @method Chatter~Resource#delete\n * @param {Callback.<Chatter~RequestResult>} [callback] - Callback function\n * @returns {Chatter~Request}\n */\nResource.prototype.del =\nResource.prototype[\"delete\"] = function(callback) {\n return this._chatter.request({\n method: 'DELETE',\n url: this._url\n }).thenCall(callback);\n};\n\n\n/*--------------------------------------------*/\n/*\n * Register hook in connection instantiation for dynamically adding this API module features\n */\njsforce.on('connection:new', function(conn) {\n conn.chatter = new Chatter(conn);\n});\n"]}
|