UNPKG

@redsift/sift-sdk-web

Version:

SDK for developing web-based Sifts.

1,324 lines (1,313 loc) 103 kB
import _inherits2 from "@babel/runtime/helpers/inherits"; import _possibleConstructorReturn2 from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf2 from "@babel/runtime/helpers/getPrototypeOf"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _typeof2 from "@babel/runtime/helpers/typeof"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _classCallCheck2 from "@babel/runtime/helpers/classCallCheck"; import _createClass2 from "@babel/runtime/helpers/createClass"; var _excluded = ["email"]; function _createSuper2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct2(); return function _createSuperInternal() { var Super = _getPrototypeOf2(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf2(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn2(this, result); }; } function _isNativeReflectConstruct2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var EmailClientController = /*#__PURE__*/function () { function EmailClientController() { _classCallCheck2(this, EmailClientController); this._proxy = self; this._registerMessageListeners(); } _createClass2(EmailClientController, [{ key: "_registerMessageListeners", value: function _registerMessageListeners() { var _this2 = this; if (!this._proxy) return; this._proxy.onmessage = function (e) { // console.log('[SiftController::onmessage]: ', e.data); var method = e.data.method; if (_this2['_' + method]) { _this2['_' + method](e.data.params); } }; } }, { key: "_emailStats", value: function _emailStats(stats) { if (this.onstats) { this.onstats(stats.name, stats.value); } } }, { key: "_getThreadRowDisplayInfo", value: function _getThreadRowDisplayInfo(params) { var _this3 = this; // console.log('[EmailClientController::_getThreadRowDisplayInfo]: ', params); var trdis = {}; params.tris.forEach(function (thread) { if (thread.value !== undefined && thread.value.list !== undefined && _this3.loadThreadListView) { trdis[thread.key] = _this3.loadThreadListView(thread.value.list, params.supportedTemplates); } }); // Notify the client this._proxy.postMessage({ method: 'getThreadRowDisplayInfoCallback', params: trdis }); } }]); return EmailClientController; }(); var TrackUiActivity = /*#__PURE__*/function () { function TrackUiActivity() { var _this4 = this; _classCallCheck2(this, TrackUiActivity); _defineProperty(this, "init", function (_ref) { var pluginConfigs = _ref.pluginConfigs, contextType = _ref.contextType, context = _ref.context, global = _ref.global; console.log('[TrackUiActivity::init()] called | contextType:', contextType); // NOTE: return true to start the plugin: return true; }); _defineProperty(this, "start", function (_ref2) { var pluginConfigs = _ref2.pluginConfigs, contextType = _ref2.contextType, context = _ref2.context, global = _ref2.global; console.log('[TrackUiActivity::start()] called | contextType:', contextType); // NOTE: see https://stackoverflow.com/questions/23866902/how-to-detect-onscroll-event-on-an-iframe-the-iframes-source-is-of-the-same-do global.onload = function () { _this4._sendEventToCloud({ view: context }); }; global.onmousemove = function () { _this4._sendEventToCloud({ view: context }); }; global.onmousedown = function () { _this4._sendEventToCloud({ view: context }); }; // catches touchscreen presses as well global.ontouchstart = function () { _this4._sendEventToCloud({ view: context }); }; // catches touchscreen swipes as well global.onclick = function () { _this4._sendEventToCloud({ view: context }); }; // catches touchpad clicks as well global.onkeypress = function () { _this4._sendEventToCloud({ view: context }); }; global.addEventListener('scroll', function () { _this4._sendEventToCloud({ view: context }); }, true); }); _defineProperty(this, "stop", function (_ref3) { var pluginConfigs = _ref3.pluginConfigs, contextType = _ref3.contextType, context = _ref3.context, global = _ref3.global; console.log('[TrackUiActivity::stop()] called | contextType:', contextType); global.onload = null; global.onmousemove = null; global.onmousedown = null; // catches touchscreen presses as well global.ontouchstart = null; // catches touchscreen swipes as well global.onclick = null; // catches touchpad clicks as well global.onkeypress = null; global.addEventListener('scroll', null, true); }); } _createClass2(TrackUiActivity, [{ key: "_sendEventToCloud", value: function _sendEventToCloud(_ref4) { var view = _ref4.view, _ref4$value = _ref4.value, value = _ref4$value === void 0 ? {} : _ref4$value; var topic = TrackUiActivity.id(); view.notifyClient(topic, value); } }]); return TrackUiActivity; }(); _defineProperty(TrackUiActivity, "id", function () { return 'track-ui-activity'; }); _defineProperty(TrackUiActivity, "contexts", function () { return ['view']; }); var SyncHistory = /*#__PURE__*/function () { function SyncHistory() { var _this5 = this; _classCallCheck2(this, SyncHistory); _defineProperty(this, "_onNavigationHandlerFn", null); _defineProperty(this, "_view", null); _defineProperty(this, "_cloudNavigationInProgress", false); _defineProperty(this, "init", function (_ref5) { var pluginConfigs = _ref5.pluginConfigs, contextType = _ref5.contextType, context = _ref5.context, global = _ref5.global; console.log('[SyncHistory::init()] called | contextType:', contextType); _this5._view = context; // NOTE: return true to start the plugin: return true; }); } _createClass2(SyncHistory, [{ key: "setup", value: function setup(_ref6) { var _this6 = this; var history = _ref6.history, _ref6$initialPath = _ref6.initialPath, initialPath = _ref6$initialPath === void 0 ? null : _ref6$initialPath; // NOTE: react-router v3 sends the `action` as part of the `navigationOp`, react-router v4 sends it as a separate parameter: history.listen(function (navigationOp) { var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; // console.log('[SyncHistory] history change event:', JSON.stringify(navigationOp)); // NOTE: prevent recursion when the back/next button is pressed in Cloud: if (!_this6._cloudNavigationInProgress) { if (!navigationOp.action) { navigationOp.action = action; } _this6.navigate(navigationOp); } else { _this6._cloudNavigationInProgress = false; // console.log('[SyncHistory] preventing history loop...', this._cloudNavigationInProgress); } }); this.onNavigation(function (_ref7) { var location = _ref7.location, action = _ref7.action; // console.log(`[sift-dmarc-insight] onNavigation | pathname: ${location.pathname} | action: ${action} | cloudNavigationInProgress: ${this._cloudNavigationInProgress}`); _this6._cloudNavigationInProgress = true; history[action.toLowerCase()](location.pathname + location.search); }); // console.log('[SyncHistory::setup] initialPath:', initialPath); if (initialPath) { history.push(initialPath); } } }, { key: "navigate", value: function navigate(navigationOp) { // console.log( // '[SyncHistory::sendEvent] location | navigationOp:', // navigationOp // ); this._sendEventToCloud({ view: this._view, value: navigationOp }); } }, { key: "onNavigation", value: function onNavigation(handlerFn) { this._onNavigationHandlerFn = handlerFn; } }, { key: "onMessage", value: function onMessage(data) { console.log('[SyncHistory::onMessage] data:', data); var location = data.location, action = data.action; this._onNavigationHandlerFn && this._onNavigationHandlerFn({ location: location, action: action }); } }, { key: "_sendEventToCloud", value: function _sendEventToCloud(_ref8) { var view = _ref8.view, _ref8$value = _ref8.value, value = _ref8$value === void 0 ? {} : _ref8$value; var topic = SyncHistory.id(); view.notifyClient(topic, value); } }]); return SyncHistory; }(); _defineProperty(SyncHistory, "id", function () { return 'sync-history'; }); _defineProperty(SyncHistory, "contexts", function () { return ['view']; }); var SiftPlugins = [TrackUiActivity, SyncHistory]; var PluginManager = /*#__PURE__*/_createClass2(function PluginManager() { var _this7 = this; _classCallCheck2(this, PluginManager); _defineProperty(this, "_pluginFactory", SiftPlugins); _defineProperty(this, "_activePlugins", []); _defineProperty(this, "init", function (_ref9) { var _ref9$pluginConfigs = _ref9.pluginConfigs, pluginConfigs = _ref9$pluginConfigs === void 0 ? [] : _ref9$pluginConfigs, contextType = _ref9.contextType, context = _ref9.context, global = _ref9.global; pluginConfigs.forEach(function (pluginConfig) { var Plugin = _this7._pluginFactory.find(function (Plugin) { return Plugin.id() === pluginConfig.id; }); if (Plugin && Plugin.contexts().includes(contextType)) { var plugin = new Plugin(); if (plugin.init && plugin.init({ pluginConfigs: pluginConfigs, contextType: contextType, context: context, global: global })) { _this7._activePlugins.push(plugin); } } }); }); _defineProperty(this, "start", function (_ref10) { var pluginConfigs = _ref10.pluginConfigs, contextType = _ref10.contextType, context = _ref10.context, global = _ref10.global; _this7._activePlugins.forEach(function (activePlugin) { return activePlugin.start && activePlugin.start({ pluginConfigs: pluginConfigs, contextType: contextType, context: context, global: global }); }); }); _defineProperty(this, "stop", function (_ref11) { var pluginConfigs = _ref11.pluginConfigs, contextType = _ref11.contextType, context = _ref11.context, global = _ref11.global; _this7._activePlugins.forEach(function (activePlugin) { return activePlugin.stop && activePlugin.stop({ pluginConfigs: pluginConfigs, contextType: contextType, context: context, global: global }); }); }); _defineProperty(this, "onMessages", function (_ref12) { var messages = _ref12.messages; console.log('[PluginManager::onMessages] messages:', messages); if (!Array.isArray(messages)) { throw new Error('[PluginManager::receivePluginMessages] "messages" has to be an array!'); } messages.forEach(function (message) { console.log('[PluginManager::onMessage] message:', message); var plugin = _this7._activePlugins.find(function (plugin) { return plugin.constructor.id() === message.id; }); if (plugin) { console.log('[SyncHistory::onMessage] message.data:', message.data); plugin.onMessage(message.data); } }); }); _defineProperty(this, "getActivePlugins", function () { return _this7._activePlugins; }); }); function unwrapExports$1(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function createCommonjsModule$2(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var classCallCheck$1 = createCommonjsModule$2(function (module) { function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports; }); var _classCallCheck$1 = unwrapExports$1(classCallCheck$1); var _typeof_1$1 = createCommonjsModule$2(function (module) { function _typeof(obj) { "@babel/helpers - typeof"; return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj); } module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports$1(_typeof_1$1); var toPrimitive$1 = createCommonjsModule$2(function (module) { var _typeof = _typeof_1$1["default"]; function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } module.exports = _toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports$1(toPrimitive$1); var toPropertyKey$1 = createCommonjsModule$2(function (module) { var _typeof = _typeof_1$1["default"]; function _toPropertyKey(arg) { var key = toPrimitive$1(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } module.exports = _toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports$1(toPropertyKey$1); var createClass$1 = createCommonjsModule$2(function (module) { function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, toPropertyKey$1(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports; }); var _createClass$1 = unwrapExports$1(createClass$1); var Observable = function () { function Observable() { _classCallCheck$1(this, Observable); this._observers = []; } _createClass$1(Observable, [{ key: "subscribe", value: function subscribe(topic, observer) { this._op('_sub', topic, observer); } }, { key: "unsubscribe", value: function unsubscribe(topic, observer) { this._op('_unsub', topic, observer); } }, { key: "unsubscribeAll", value: function unsubscribeAll(topic) { if (!this._observers[topic]) { return; } delete this._observers[topic]; } }, { key: "publish", value: function publish(topic, message) { this._op('_pub', topic, message); } }, { key: "_op", value: function _op(op, topic, value) { var _this = this; if (Array.isArray(topic)) { topic.forEach(function (t) { _this[op](t, value); }); } else { this[op](topic, value); } } }, { key: "_sub", value: function _sub(topic, observer) { this._observers[topic] || (this._observers[topic] = []); if (observer && this._observers[topic].indexOf(observer) === -1) { this._observers[topic].push(observer); } } }, { key: "_unsub", value: function _unsub(topic, observer) { if (!this._observers[topic]) { return; } var index = this._observers[topic].indexOf(observer); if (~index) { this._observers[topic].splice(index, 1); } } }, { key: "_pub", value: function _pub(topic, message) { if (!this._observers[topic]) { return; } for (var i = this._observers[topic].length - 1; i >= 0; i--) { this._observers[topic][i](message); } } }]); return Observable; }(); var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule$1(fn, basedir, module) { return module = { path: basedir, exports: {}, require: function require(path, base) { return commonjsRequire(path, base === undefined || base === null ? module.path : base); } }, fn(module, module.exports), module.exports; } function commonjsRequire() { throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } var sha256 = createCommonjsModule$1(function (module) { /** * [js-sha256]{@link https://github.com/emn178/js-sha256} * * @version 0.9.0 * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2014-2017 * @license MIT */ /*jslint bitwise: true */ (function () { var ERROR = 'input is invalid type'; var WINDOW = (typeof window === "undefined" ? "undefined" : _typeof2(window)) === 'object'; var root = WINDOW ? window : {}; if (root.JS_SHA256_NO_WINDOW) { WINDOW = false; } var WEB_WORKER = !WINDOW && (typeof self === "undefined" ? "undefined" : _typeof2(self)) === 'object'; var NODE_JS = !root.JS_SHA256_NO_NODE_JS && (typeof process === "undefined" ? "undefined" : _typeof2(process)) === 'object' && process.versions && process.versions.node; if (NODE_JS) { root = commonjsGlobal$1; } else if (WEB_WORKER) { root = self; } var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && 'object' === 'object' && module.exports; var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined'; var HEX_CHARS = '0123456789abcdef'.split(''); var EXTRA = [-2147483648, 8388608, 32768, 128]; var SHIFT = [24, 16, 8, 0]; var K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer']; var blocks = []; if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) { Array.isArray = function (obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }; } if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { ArrayBuffer.isView = function (obj) { return _typeof2(obj) === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer; }; } var createOutputMethod = function createOutputMethod(outputType, is224) { return function (message) { return new Sha256(is224, true).update(message)[outputType](); }; }; var createMethod = function createMethod(is224) { var method = createOutputMethod('hex', is224); if (NODE_JS) { method = nodeWrap(method, is224); } method.create = function () { return new Sha256(is224); }; method.update = function (message) { return method.create().update(message); }; for (var i = 0; i < OUTPUT_TYPES.length; ++i) { var type = OUTPUT_TYPES[i]; method[type] = createOutputMethod(type, is224); } return method; }; var nodeWrap = function nodeWrap(method, is224) { var crypto = eval("require('crypto')"); var Buffer = eval("require('buffer').Buffer"); var algorithm = is224 ? 'sha224' : 'sha256'; var nodeMethod = function nodeMethod(message) { if (typeof message === 'string') { return crypto.createHash(algorithm).update(message, 'utf8').digest('hex'); } else { if (message === null || message === undefined) { throw new Error(ERROR); } else if (message.constructor === ArrayBuffer) { message = new Uint8Array(message); } } if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) { return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex'); } else { return method(message); } }; return nodeMethod; }; var createHmacOutputMethod = function createHmacOutputMethod(outputType, is224) { return function (key, message) { return new HmacSha256(key, is224, true).update(message)[outputType](); }; }; var createHmacMethod = function createHmacMethod(is224) { var method = createHmacOutputMethod('hex', is224); method.create = function (key) { return new HmacSha256(key, is224); }; method.update = function (key, message) { return method.create(key).update(message); }; for (var i = 0; i < OUTPUT_TYPES.length; ++i) { var type = OUTPUT_TYPES[i]; method[type] = createHmacOutputMethod(type, is224); } return method; }; function Sha256(is224, sharedMemory) { if (sharedMemory) { blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; this.blocks = blocks; } else { this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; } if (is224) { this.h0 = 0xc1059ed8; this.h1 = 0x367cd507; this.h2 = 0x3070dd17; this.h3 = 0xf70e5939; this.h4 = 0xffc00b31; this.h5 = 0x68581511; this.h6 = 0x64f98fa7; this.h7 = 0xbefa4fa4; } else { // 256 this.h0 = 0x6a09e667; this.h1 = 0xbb67ae85; this.h2 = 0x3c6ef372; this.h3 = 0xa54ff53a; this.h4 = 0x510e527f; this.h5 = 0x9b05688c; this.h6 = 0x1f83d9ab; this.h7 = 0x5be0cd19; } this.block = this.start = this.bytes = this.hBytes = 0; this.finalized = this.hashed = false; this.first = true; this.is224 = is224; } Sha256.prototype.update = function (message) { if (this.finalized) { return; } var notString, type = _typeof2(message); if (type !== 'string') { if (type === 'object') { if (message === null) { throw new Error(ERROR); } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { message = new Uint8Array(message); } else if (!Array.isArray(message)) { if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) { throw new Error(ERROR); } } } else { throw new Error(ERROR); } notString = true; } var code, index = 0, i, length = message.length, blocks = this.blocks; while (index < length) { if (this.hashed) { this.hashed = false; blocks[0] = this.block; blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; } if (notString) { for (i = this.start; index < length && i < 64; ++index) { blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; } } else { for (i = this.start; index < length && i < 64; ++index) { code = message.charCodeAt(index); if (code < 0x80) { blocks[i >> 2] |= code << SHIFT[i++ & 3]; } else if (code < 0x800) { blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; } else if (code < 0xd800 || code >= 0xe000) { blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; } else { code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; } } } this.lastByteIndex = i; this.bytes += i - this.start; if (i >= 64) { this.block = blocks[16]; this.start = i - 64; this.hash(); this.hashed = true; } else { this.start = i; } } if (this.bytes > 4294967295) { this.hBytes += this.bytes / 4294967296 << 0; this.bytes = this.bytes % 4294967296; } return this; }; Sha256.prototype.finalize = function () { if (this.finalized) { return; } this.finalized = true; var blocks = this.blocks, i = this.lastByteIndex; blocks[16] = this.block; blocks[i >> 2] |= EXTRA[i & 3]; this.block = blocks[16]; if (i >= 56) { if (!this.hashed) { this.hash(); } blocks[0] = this.block; blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; } blocks[14] = this.hBytes << 3 | this.bytes >>> 29; blocks[15] = this.bytes << 3; this.hash(); }; Sha256.prototype.hash = function () { var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc; for (j = 16; j < 64; ++j) { // rightrotate t1 = blocks[j - 15]; s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3; t1 = blocks[j - 2]; s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10; blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0; } bc = b & c; for (j = 0; j < 64; j += 4) { if (this.first) { if (this.is224) { ab = 300032; t1 = blocks[0] - 1413257819; h = t1 - 150054599 << 0; d = t1 + 24177077 << 0; } else { ab = 704751109; t1 = blocks[0] - 210244248; h = t1 - 1521486534 << 0; d = t1 + 143694565 << 0; } this.first = false; } else { s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10); s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7); ab = a & b; maj = ab ^ a & c ^ bc; ch = e & f ^ ~e & g; t1 = h + s1 + ch + K[j] + blocks[j]; t2 = s0 + maj; h = d + t1 << 0; d = t1 + t2 << 0; } s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10); s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7); da = d & a; maj = da ^ d & b ^ ab; ch = h & e ^ ~h & f; t1 = g + s1 + ch + K[j + 1] + blocks[j + 1]; t2 = s0 + maj; g = c + t1 << 0; c = t1 + t2 << 0; s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10); s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7); cd = c & d; maj = cd ^ c & a ^ da; ch = g & h ^ ~g & e; t1 = f + s1 + ch + K[j + 2] + blocks[j + 2]; t2 = s0 + maj; f = b + t1 << 0; b = t1 + t2 << 0; s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10); s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7); bc = b & c; maj = bc ^ b & d ^ cd; ch = f & g ^ ~f & h; t1 = e + s1 + ch + K[j + 3] + blocks[j + 3]; t2 = s0 + maj; e = a + t1 << 0; a = t1 + t2 << 0; } this.h0 = this.h0 + a << 0; this.h1 = this.h1 + b << 0; this.h2 = this.h2 + c << 0; this.h3 = this.h3 + d << 0; this.h4 = this.h4 + e << 0; this.h5 = this.h5 + f << 0; this.h6 = this.h6 + g << 0; this.h7 = this.h7 + h << 0; }; Sha256.prototype.hex = function () { this.finalize(); var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; var hex = HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] + HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] + HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] + HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] + HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] + HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] + HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] + HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] + HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] + HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] + HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] + HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] + HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F] + HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] + HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] + HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] + HEX_CHARS[h4 >> 28 & 0x0F] + HEX_CHARS[h4 >> 24 & 0x0F] + HEX_CHARS[h4 >> 20 & 0x0F] + HEX_CHARS[h4 >> 16 & 0x0F] + HEX_CHARS[h4 >> 12 & 0x0F] + HEX_CHARS[h4 >> 8 & 0x0F] + HEX_CHARS[h4 >> 4 & 0x0F] + HEX_CHARS[h4 & 0x0F] + HEX_CHARS[h5 >> 28 & 0x0F] + HEX_CHARS[h5 >> 24 & 0x0F] + HEX_CHARS[h5 >> 20 & 0x0F] + HEX_CHARS[h5 >> 16 & 0x0F] + HEX_CHARS[h5 >> 12 & 0x0F] + HEX_CHARS[h5 >> 8 & 0x0F] + HEX_CHARS[h5 >> 4 & 0x0F] + HEX_CHARS[h5 & 0x0F] + HEX_CHARS[h6 >> 28 & 0x0F] + HEX_CHARS[h6 >> 24 & 0x0F] + HEX_CHARS[h6 >> 20 & 0x0F] + HEX_CHARS[h6 >> 16 & 0x0F] + HEX_CHARS[h6 >> 12 & 0x0F] + HEX_CHARS[h6 >> 8 & 0x0F] + HEX_CHARS[h6 >> 4 & 0x0F] + HEX_CHARS[h6 & 0x0F]; if (!this.is224) { hex += HEX_CHARS[h7 >> 28 & 0x0F] + HEX_CHARS[h7 >> 24 & 0x0F] + HEX_CHARS[h7 >> 20 & 0x0F] + HEX_CHARS[h7 >> 16 & 0x0F] + HEX_CHARS[h7 >> 12 & 0x0F] + HEX_CHARS[h7 >> 8 & 0x0F] + HEX_CHARS[h7 >> 4 & 0x0F] + HEX_CHARS[h7 & 0x0F]; } return hex; }; Sha256.prototype.toString = Sha256.prototype.hex; Sha256.prototype.digest = function () { this.finalize(); var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7; var arr = [h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF]; if (!this.is224) { arr.push(h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF); } return arr; }; Sha256.prototype.array = Sha256.prototype.digest; Sha256.prototype.arrayBuffer = function () { this.finalize(); var buffer = new ArrayBuffer(this.is224 ? 28 : 32); var dataView = new DataView(buffer); dataView.setUint32(0, this.h0); dataView.setUint32(4, this.h1); dataView.setUint32(8, this.h2); dataView.setUint32(12, this.h3); dataView.setUint32(16, this.h4); dataView.setUint32(20, this.h5); dataView.setUint32(24, this.h6); if (!this.is224) { dataView.setUint32(28, this.h7); } return buffer; }; function HmacSha256(key, is224, sharedMemory) { var i, type = _typeof2(key); if (type === 'string') { var bytes = [], length = key.length, index = 0, code; for (i = 0; i < length; ++i) { code = key.charCodeAt(i); if (code < 0x80) { bytes[index++] = code; } else if (code < 0x800) { bytes[index++] = 0xc0 | code >> 6; bytes[index++] = 0x80 | code & 0x3f; } else if (code < 0xd800 || code >= 0xe000) { bytes[index++] = 0xe0 | code >> 12; bytes[index++] = 0x80 | code >> 6 & 0x3f; bytes[index++] = 0x80 | code & 0x3f; } else { code = 0x10000 + ((code & 0x3ff) << 10 | key.charCodeAt(++i) & 0x3ff); bytes[index++] = 0xf0 | code >> 18; bytes[index++] = 0x80 | code >> 12 & 0x3f; bytes[index++] = 0x80 | code >> 6 & 0x3f; bytes[index++] = 0x80 | code & 0x3f; } } key = bytes; } else { if (type === 'object') { if (key === null) { throw new Error(ERROR); } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) { key = new Uint8Array(key); } else if (!Array.isArray(key)) { if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) { throw new Error(ERROR); } } } else { throw new Error(ERROR); } } if (key.length > 64) { key = new Sha256(is224, true).update(key).array(); } var oKeyPad = [], iKeyPad = []; for (i = 0; i < 64; ++i) { var b = key[i] || 0; oKeyPad[i] = 0x5c ^ b; iKeyPad[i] = 0x36 ^ b; } Sha256.call(this, is224, sharedMemory); this.update(iKeyPad); this.oKeyPad = oKeyPad; this.inner = true; this.sharedMemory = sharedMemory; } HmacSha256.prototype = new Sha256(); HmacSha256.prototype.finalize = function () { Sha256.prototype.finalize.call(this); if (this.inner) { this.inner = false; var innerHash = this.array(); Sha256.call(this, this.is224, this.sharedMemory); this.update(this.oKeyPad); this.update(innerHash); Sha256.prototype.finalize.call(this); } }; var exports = createMethod(); exports.sha256 = exports; exports.sha224 = createMethod(true); exports.sha256.hmac = createHmacMethod(); exports.sha224.hmac = createHmacMethod(true); if (COMMON_JS) { module.exports = exports; } else { root.sha256 = exports.sha256; root.sha224 = exports.sha224; } })(); }); var SiftView = /*#__PURE__*/function () { function SiftView() { var _this8 = this; _classCallCheck2(this, SiftView); // -------------------------------------------------------------------------- // Plugin management // -------------------------------------------------------------------------- _defineProperty(this, "_initPlugins", function (_ref13) { var pluginConfigs = _ref13.pluginConfigs; _this8._pluginManager.init({ pluginConfigs: pluginConfigs, contextType: 'view', context: _this8, global: window }); }); _defineProperty(this, "_startPlugins", function (_ref14) { var pluginConfigs = _ref14.pluginConfigs; _this8._pluginManager.start({ pluginConfigs: pluginConfigs, contextType: 'view', context: _this8, global: window }); }); _defineProperty(this, "_stopPlugins", function (_ref15) { var pluginConfigs = _ref15.pluginConfigs; _this8._pluginManager.stop({ pluginConfigs: pluginConfigs, contextType: 'view', context: _this8, global: window }); }); _defineProperty(this, "getPlugin", function (_ref16) { var id = _ref16.id; return _this8._pluginManager.getActivePlugins() // NOTE: see https://stackoverflow.com/questions/28627908/call-static-methods-from-regular-es6-class-methods .find(function (plugin) { return plugin.constructor.id() === id; }); }); this._resizeHandler = null; this._proxy = parent; this.controller = new Observable(); this._registerMessageListeners(); this._pluginManager = new PluginManager(); } _createClass2(SiftView, [{ key: "_receivePluginMessages", value: function _receivePluginMessages(_ref17) { var messages = _ref17.messages; this._pluginManager.onMessages({ messages: messages }); } }, { key: "publish", value: // -------------------------------------------------------------------------- // Pub/sub management // -------------------------------------------------------------------------- function publish(topic, value) { this._proxy.postMessage({ method: 'notifyController', params: { topic: topic, value: value } }, '*'); } }, { key: "notifyClient", value: function notifyClient(topic, value) { this._proxy.postMessage({ method: 'notifyClient', params: { topic: topic, value: value } }, '*'); } }, { key: "_registerMessageListeners", value: function _registerMessageListeners() { var _this9 = this; window.addEventListener('message', function (e) { var method = e.data.method; var params = e.data.params; if (method === 'notifyView') { _this9.controller.publish(params.topic, params.value); } else if (_this9[method]) { _this9[method](params); } else { console.warn('[SiftView]: method not implemented: ', method); } }, false); } // -------------------------------------------------------------------------- // Message channel to Cloud // -------------------------------------------------------------------------- }, { key: "showOAuthPopup", value: function showOAuthPopup(_ref18) { var provider = _ref18.provider, _ref18$options = _ref18.options, options = _ref18$options === void 0 ? null : _ref18$options; var topic = 'showOAuthPopup'; var opt = options; // If an email is passed, hash it into a subject if (options && _typeof2(options) === 'object' && options.email) { var email = options.email, others = _objectWithoutProperties(options, _excluded); var subject = sha256(email).substr(0, 16); opt = _objectSpread({ subject: subject }, others); } var value = { provider: provider, options: opt }; this.notifyClient(topic, value); } }, { key: "removeOAuthIdentity", value: function removeOAuthIdentity(_ref19) { var provider = _ref19.provider, _ref19$options = _ref19.options, options = _ref19$options === void 0 ? null : _ref19$options; var topic = 'showOAuthRemovePopup'; var value = { provider: provider, options: options }; this.notifyClient(topic, value); } }, { key: "signup", value: function signup() { var topic = 'signup'; var value = {}; this.notifyClient(topic, value); } }, { key: "login", value: function login(_ref20) { var redirectUri = _ref20.redirectUri; var topic = 'login'; var value = { redirectUri: redirectUri }; this.notifyClient(topic, value); } }, { key: "logout", value: function logout() { var topic = 'logout'; var value = {}; this.notifyClient(topic, value); } }, { key: "navigate", value: function navigate(_ref21) { var href = _ref21.href, _ref21$openInNewTab = _ref21.openInNewTab, openInNewTab = _ref21$openInNewTab === void 0 ? false : _ref21$openInNewTab; var topic = 'navigate'; var value = { href: href, openInNewTab: openInNewTab }; this.notifyClient(topic, value); } }, { key: "setupSyncHistory", value: function setupSyncHistory(_ref22) { var history = _ref22.history, initialPath = _ref22.initialPath; var syncHistoryPlugin = this.getPlugin({ id: 'sync-history' }); if (syncHistoryPlugin) { syncHistoryPlugin.setup({ history: history, initialPath: initialPath }); } else { console.log('[SiftSdkWeb] ERROR: To use `syncHistory` please enable the plugin first!'); } } }]); return SiftView; }(); var EmailClient = /*#__PURE__*/function (_Observable) { _inherits2(EmailClient, _Observable); var _super2 = _createSuper2(EmailClient); function EmailClient(proxy) { var _this10; _classCallCheck2(this, EmailClient); _this10 = _super2.call(this); _this10._proxy = proxy; return _this10; } _createClass2(EmailClient, [{ key: "goto", value: function goto(params) { this._postMessage('goto', params); } }, { key: "close", value: function close() { this._postMessage('close'); } }, { key: "_postMessage", value: function _postMessage(topic, value) { this._proxy.postMessage({ method: 'notifyClient', params: { topic: topic, value: value } }); } }]); return EmailClient; }(Observable); var SiftStorage = /*#__PURE__*/function (_Observable2) { _inherits2(SiftStorage, _Observable2); var _super3 = _createSuper2(SiftStorage); function SiftStorage() { var _this11; _classCallCheck2(this, SiftStorage); _this11 = _super3.call(this); _this11._storage = null; return _this11; } _createClass2(SiftStorage, [{ key: "init", value: function init(storage) { this._storage = storage; } }, { key: "get", value: function get(d) { return this._storage.get(d); } }, { key: "getIndexKeys", value: function getIndexKeys(d) { return this._storage.getIndexKeys(d); } }, { key: "getIndex", value: function getIndex(d) { return this._storage.getIndex(d); } }, { key: "getWithIndex", value: function getWithIndex(d) { return this._storage.getWithIndex(d); } }, { key: "getAllKeys", value: function getAllKeys(d) { return this._storage.getAllKeys(d); } }, { key: "getAll", value: function getAll(d) { return this._storage.getAll(d); } }, { key: "getUser", value: function getUser(d) { return this._storage.getUser(d); } }, { key: "putUser", value: function putUser(d) { return this._storage.putUser(d); } }, { key: "delUser", value: function delUser(d) { return this._storage.delUser(d); } }]); return SiftStorage; }(Observable); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function unwrapExports(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var setPrototypeOf = createCommonjsModule(function (module) { function _setPrototypeOf(o, p) { module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }, module.exports.__esModule = true, module.exports["default"] = module.exports; return _setPrototypeOf(o, p); } module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports(setPrototypeOf); var inherits = createCommonjsModule(function (module) { function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) setPrototypeOf(subClass, superClass); } module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports; }); var _inherits = unwrapExports(inherits); var _typeof_1 = createCommonjsModule(function (module) { function _typeof(obj) { "@babel/helpers - typeof"; return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj); } module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports(_typeof_1); var assertThisInitialized = createCommonjsModule(function (module) { function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports; }); unwrapExports(assertThisInitialized); var possibleConstructorReturn = createCommonjsModule(function (module) { var _typeof = _typeof_1["default"]; function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return assertThisInitialized(self); } module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports; }); var _possibleConstructorReturn = unwrapExports(possibleConstructorReturn); var getPrototypeOf = createCommonjsModule(function (module) { function _getPrototypeOf(o) { module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }, module.exports.__esModule = true, module.expo