UNPKG

sp-jsom-node

Version:

SharePoint JavaScript Object Model for Node.js

244 lines 10.7 kB
"use strict"; 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