sp-jsom-node
Version:
SharePoint JavaScript Object Model for Node.js
244 lines • 10.7 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsomNode = void 0;
var path = require("path");
var https = require("https");
var node_sp_auth_config_1 = require("node-sp-auth-config");
var sp_request_1 = require("sp-request");
var cpass_1 = require("cpass");
var utils_1 = require("./utils");
var config_1 = require("./config");
require("./extensions/definitions");
var executeQueryPromise_1 = require("./extensions/executeQueryPromise");
var JsomNode = (function () {
function JsomNode(settings) {
if (settings === void 0) { settings = {}; }
this.agent = new https.Agent({
rejectUnauthorized: false,
keepAlive: true,
keepAliveMsecs: 10000
});
this.settings = settings;
this.instanceId = utils_1.default.getGuid();
}
JsomNode.prototype.init = function (context) {
var authOptions = context.authOptions;
var cpass = new cpass_1.Cpass();
var encodable = ['password', 'clientId', 'clientSecret'];
for (var _i = 0, encodable_1 = encodable; _i < encodable_1.length; _i++) {
var prop = encodable_1[_i];
if (authOptions[prop]) {
authOptions[prop] = cpass.decode((authOptions[prop]));
}
}
this.context = __assign(__assign({}, context), { authOptions: authOptions });
this.request = sp_request_1.create(this.context.authOptions);
this.mimicBrowser();
this.loadScripts(this.settings.modules, this.settings.envCode);
this.proxyRequestManager();
return this;
};
JsomNode.prototype.wizard = function (config) {
var _this = this;
if (config === void 0) { config = {}; }
return new node_sp_auth_config_1.AuthConfig(config).getContext().then(function (ctx) {
_this.context = {
siteUrl: ctx.siteUrl,
authOptions: ctx.authOptions
};
_this.settings = __assign(__assign({}, _this.settings), {
envCode: config.envCode || _this.settings.envCode,
modules: config.modules || _this.settings.modules
});
_this.init(_this.context);
return ctx.siteUrl;
});
};
JsomNode.prototype.getContext = function (siteUrl) {
var _this = this;
JsomNode.ctxs[this.instanceId] = this.request;
siteUrl = siteUrl || this.context.siteUrl;
var ctx = new SP.ClientContext(siteUrl);
ctx.add_executingWebRequest(function (_sender, args) {
args.get_webRequest()._headers['X-JsomNode-InstanceID'] = _this.instanceId;
});
return ctx;
};
JsomNode.prototype.dropContext = function () {
delete JsomNode.ctxs[this.instanceId];
};
JsomNode.prototype.mimicBrowser = function () {
global.navigator = {
userAgent: 'sp-jsom-node'
};
global.window = {
location: {
href: '',
pathname: ''
},
document: {
cookie: '',
URL: this.context.siteUrl
},
setTimeout: global.setTimeout,
clearTimeout: global.clearTimeout,
attachEvent: function () { },
_spPageContextInfo: {
webServerRelativeUrl: "/" + this.context.siteUrl.split('/').splice(3, 100).join('/')
}
};
global.document = {
documentElement: {},
URL: '',
getElementsByTagName: function (name) { return []; }
};
global.Type = Function;
global.NotifyScriptLoadedAndExecuteWaitingJobs = function (scriptFileName) { };
global.RegisterModuleInit = function () { };
global.ExecuteOrDelayUntilScriptLoaded = function (callback, jsomScript) {
jsomScript = jsomScript.replace('.debug.js', '').replace('.js', '') + '.debug.js';
if (global.loadedJsomScripts.indexOf(jsomScript.toLowerCase()) === -1) {
var filePath = path.join(__dirname, '..', 'jsom', global.envCode || 'spo', jsomScript);
utils_1.default.require(filePath);
callback();
}
else {
callback();
}
};
(function () {
var registerNamespace = function (namespaceString) {
var curNs = global;
global.window = global.window || {};
namespaceString.split('.').forEach(function (ns) {
if (typeof curNs[ns] === 'undefined') {
curNs[ns] = new Object();
}
curNs = curNs[ns];
curNs.__namespace = true;
});
var nsName = namespaceString.split('.')[0];
global.window[nsName] = global[nsName];
};
registerNamespace('Sys');
registerNamespace('SP');
registerNamespace('Microsoft');
registerNamespace('PS');
registerNamespace('Srch');
try {
registerNamespace('SP.Utilities');
global.SP.Utilities.HttpUtility = SP.Utilities.HttpUtility || {};
}
catch (ex) { }
})();
};
JsomNode.prototype.loadScripts = function (modules, envCode) {
var _this = this;
if (modules === void 0) { modules = ['core']; }
if (envCode === void 0) { envCode = 'spo'; }
global.envCode = envCode;
global.loadedJsomScripts = global.loadedJsomScripts || [];
if (modules.indexOf('core') !== 0) {
modules = ['core'].concat(modules);
}
modules
.filter(function (value, index, self) { return self.indexOf(value) === index; })
.forEach(function (module) {
config_1.JsomModules[module].forEach(function (jsomScript) {
if (global.loadedJsomScripts.indexOf(jsomScript.toLowerCase()) === -1) {
var filePath = process.env.JSOM_ASSETS_FOLDER
? path.join(process.env.JSOM_ASSETS_FOLDER, envCode, jsomScript.replace('{{lcid}}', config_1.lcid))
: path.join(__dirname, '..', 'jsom', envCode, jsomScript.replace('{{lcid}}', config_1.lcid));
if (filePath.substring(0, 1) === '\\') {
filePath = '.' + filePath.replace(/\\/g, '/');
}
utils_1.default.require(filePath);
if (jsomScript === 'msajaxbundle.debug.js') {
_this.patchMicrosoftAjax();
}
global.loadedJsomScripts.push(jsomScript.toLowerCase());
}
});
});
(function () {
SP.ClientRuntimeContext.prototype.executeQueryPromise = function () {
return executeQueryPromise_1.executeQueryPromise(this);
};
})();
};
JsomNode.prototype.patchMicrosoftAjax = function () {
var origRegisterInterface = Type.prototype.registerInterface;
Type.prototype.registerInterface = function (typeName) {
if (['IEnumerator', 'IEnumerable', 'IDisposable'].indexOf(typeName) !== -1) {
if (global[typeName]) {
this.prototype.constructor = this;
this.__typeName = typeName;
this.__interface = true;
return this;
}
global[typeName] = this;
}
return origRegisterInterface.apply(this, [].slice.call(arguments));
};
};
JsomNode.prototype.proxyRequestManager = function () {
var _this = this;
var request = this.request;
Sys.Net._WebRequestManager.prototype.executeRequest = function (wReq) {
var instanceId = wReq._headers['X-JsomNode-InstanceID'];
request = JsomNode.ctxs[instanceId] || request;
var hostUrl = _this.context.siteUrl.split('/').splice(0, 3).join('/');
var requestUrl = utils_1.default.isUrlAbsolute(wReq._url) ? wReq._url : "" + hostUrl + wReq._url;
var webAbsoluteUrl = requestUrl.split('/_api')[0].split('/_vti_bin')[0];
request.requestDigest(webAbsoluteUrl)
.then(function (digest) {
var isJsom = wReq._url.indexOf('/_vti_bin/client.svc/ProcessQuery') !== -1;
var jsomHeaders = !isJsom ? {} : {
'X-Requested-With': 'XMLHttpRequest',
'X-RequestDigest': digest
};
if (wReq._httpVerb.toLowerCase() === 'post') {
return request.post(requestUrl, {
headers: __assign(__assign({}, wReq._headers), jsomHeaders),
body: wReq._body,
responseType: !isJsom ? 'json' : undefined,
agent: utils_1.default.isUrlHttps(requestUrl) ? _this.agent : undefined
})
.then(function (response) {
var responseData = isJsom ? response.body : JSON.stringify(response.body);
wReq._events._list.completed[0]({
_xmlHttpRequest: {
status: response.statusCode,
responseText: responseData
},
get_statusCode: function () { return response.statusCode; },
get_responseData: function () { return responseData; },
getResponseHeader: function (header) { return response.headers[header.toLowerCase()]; },
get_aborted: function () { return false; },
get_timedOut: function () { return false; },
get_responseAvailable: function () { return true; }
});
});
}
})
.catch(function (error) {
throw new Error(error);
});
};
};
JsomNode.ctxs = {};
return JsomNode;
}());
exports.JsomNode = JsomNode;
//# sourceMappingURL=JsomNode.js.map