UNPKG

data-transport

Version:
119 lines 16.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IFrameTransport = exports.IFrameInternalTransport = exports.IFrameMainTransport = void 0; var tslib_1 = require("tslib"); var constant_1 = require("../constant"); var transport_1 = require("../transport"); var connectEventName = 'iframe-connect'; var IFrameMainTransport = /** @class */ (function (_super) { tslib_1.__extends(IFrameMainTransport, _super); function IFrameMainTransport(_options) { var _this = this; var _a = _options.iframe, iframe = _a === void 0 ? document.querySelector('iframe') : _a, _b = _options.targetOrigin, targetOrigin = _b === void 0 ? '*' : _b, _c = _options.listener, listener = _c === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data, source = _a.source; var contentWindow = iframe.contentWindow; if (contentWindow && contentWindow === source) { return callback(data); } }; window.addEventListener('message', handler); return function () { window.removeEventListener('message', handler); }; } : _c, _d = _options.sender, sender = _d === void 0 ? function (message) { if (iframe) { iframe.contentWindow.postMessage(message, targetOrigin); } else if (window.frames[0]) { window.frames[0].postMessage(message, targetOrigin); } else { console.error('The current page does not have any iframe elements'); } } : _d, skipConnectionCheck = _options.skipConnectionCheck, options = tslib_1.__rest(_options, ["iframe", "targetOrigin", "listener", "sender", "skipConnectionCheck"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; if (!skipConnectionCheck) { var connect_1 = function () { _this.emit({ // @ts-ignore name: connectEventName, silent: true, skipBeforeEmit: true, }).then(function (connected) { if (connected) { _this[constant_1.beforeEmitResolveKey](); } }); }; connect_1(); _this[constant_1.beforeEmitKey] = new Promise(function (resolve) { _this[constant_1.beforeEmitResolveKey] = resolve; }); // @ts-ignore _this.listen(connectEventName, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { this[constant_1.beforeEmitResolveKey](); return [2 /*return*/, true]; }); }); }); // for iframe reload iframe === null || iframe === void 0 ? void 0 : iframe.addEventListener('load', function () { _this[constant_1.beforeEmitKey] = new Promise(function (resolve) { _this[constant_1.beforeEmitResolveKey] = resolve; }); connect_1(); }); } return _this; } return IFrameMainTransport; }(transport_1.Transport)); exports.IFrameMainTransport = IFrameMainTransport; var IFrameInternalTransport = /** @class */ (function (_super) { tslib_1.__extends(IFrameInternalTransport, _super); function IFrameInternalTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a = _options.targetOrigin, targetOrigin = _a === void 0 ? '*' : _a, _b = _options.listener, listener = _b === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data; return callback(data); }; window.addEventListener('message', handler); return function () { window.removeEventListener('message', handler); }; } : _b, _c = _options.sender, sender = _c === void 0 ? function (message) { return window.parent.postMessage(message, targetOrigin); } : _c, skipConnectionCheck = _options.skipConnectionCheck, options = tslib_1.__rest(_options, ["targetOrigin", "listener", "sender", "skipConnectionCheck"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; if (!skipConnectionCheck) { _this.emit({ // @ts-ignore name: connectEventName, silent: true, }).then(function (connected) { if (connected) { _this[constant_1.beforeEmitResolveKey](); } }); _this[constant_1.beforeEmitKey] = new Promise(function (resolve) { _this[constant_1.beforeEmitResolveKey] = resolve; }); // @ts-ignore _this.listen(connectEventName, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { this[constant_1.beforeEmitResolveKey](); return [2 /*return*/, true]; }); }); }); } return _this; } return IFrameInternalTransport; }(transport_1.Transport)); exports.IFrameInternalTransport = IFrameInternalTransport; exports.IFrameTransport = { Main: IFrameMainTransport, IFrame: IFrameInternalTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZyYW1lVHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydHMvaWZyYW1lVHJhbnNwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx3Q0FBa0U7QUFNbEUsMENBQXlDO0FBK0J6QyxJQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBRTFDO0lBRVUsK0NBQVk7SUFDcEIsNkJBQVksUUFBb0M7UUFBaEQsaUJBK0RDO1FBN0RHLElBQUEsS0F5QkUsUUFBUSxPQXpCK0IsRUFBekMsTUFBTSxtQkFBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFBLEVBQ3pDLEtBd0JFLFFBQVEsYUF4QlEsRUFBbEIsWUFBWSxtQkFBRyxHQUFHLEtBQUEsRUFDbEIsS0F1QkUsUUFBUSxTQVpULEVBWEQsUUFBUSxtQkFBRyxVQUFDLFFBQVE7WUFDbEIsSUFBTSxPQUFPLEdBQUcsVUFBQyxFQUErQztvQkFBN0MsSUFBSSxVQUFBLEVBQUUsTUFBTSxZQUFBO2dCQUM3QixJQUFNLGFBQWEsR0FBRyxNQUFPLENBQUMsYUFBYSxDQUFDO2dCQUM1QyxJQUFJLGFBQWEsSUFBSSxhQUFhLEtBQU0sTUFBYyxFQUFFLENBQUM7b0JBQ3ZELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1QyxPQUFPO2dCQUNMLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxLQUFBLEVBQ0QsS0FXRSxRQUFRLE9BSFQsRUFSRCxNQUFNLG1CQUFHLFVBQUMsT0FBTztZQUNmLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLGFBQWMsQ0FBQyxXQUFXLENBQUMsT0FB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LENBQUMsRUFBaEQsQ0FBZ0QsS0FBQSxFQUN0RSxtQkFBbUIsR0FFakIsUUFBUSxvQkFGUyxFQUNoQixPQUFPLGtCQUNSLFFBQVEsRUFiTiw2REFhTCxDQURXLENBQ0M7UUFDYixRQUFBLE1BQUssa0RBQ0EsT0FBTyxLQUNWLFFBQVEsVUFBQSxFQUNSLE1BQU0sUUFBQSxJQUNOLFNBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6QixLQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLGFBQWE7Z0JBQ2IsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsU0FBUztnQkFDaEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxLQUFJLENBQUMsK0JBQW9CLENBQUUsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFJLENBQUMsd0JBQWEsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTztnQkFDeEMsS0FBSSxDQUFDLCtCQUFvQixDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYTtZQUNiLEtBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7O29CQUM1QixJQUFJLENBQUMsK0JBQW9CLENBQUUsRUFBRSxDQUFDO29CQUM5QixzQkFBTyxJQUFJLEVBQUM7O2lCQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7O0lBQ0gsQ0FBQztJQUNILDhCQUFDO0FBQUQsQ0FBQyxBQTNDRCxDQUVVLHFCQUFTLEdBeUNsQjtBQTNDcUIsMERBQXVCO0FBNkNoQyxRQUFBLGVBQWUsR0FBRztJQUM3QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE1BQU0sRUFBRSx1QkFBdUI7Q0FDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJlZm9yZUVtaXRLZXksIGJlZm9yZUVtaXRSZXNvbHZlS2V5IH0gZnJvbSAnLi4vY29uc3RhbnQnO1xuaW1wb3J0IHR5cGUge1xuICBCYXNlSW50ZXJhY3Rpb24sXG4gIExpc3RlbmVyT3B0aW9ucyxcbiAgVHJhbnNwb3J0T3B0aW9ucyxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4uL3RyYW5zcG9ydCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZyYW1lVHJhbnNwb3J0SW50ZXJuYWxPcHRpb25zXG4gIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoYXQgdGhlIG9yaWdpbiBvZiB0YXJnZXRXaW5kb3cgbXVzdCBiZSBmb3IgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQsXG4gICAqIGJ5IGRlZmF1bHQsIGl0J3MgdGhlIGxpdGVyYWwgc3RyaW5nIFwiKlwiIChpbmRpY2F0aW5nIG5vIHByZWZlcmVuY2UpLlxuICAgKi9cbiAgdGFyZ2V0T3JpZ2luPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciBza2lwIGNvbm5lY3Rpb24gY2hlY2ssIGZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBza2lwQ29ubmVjdGlvbkNoZWNrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRnJhbWVNYWluVHJhbnNwb3J0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8VHJhbnNwb3J0T3B0aW9ucz4ge1xuICAvKipcbiAgICogUGFzcyBhbiBpZnJhbWUgZm9yIHVzaW5nIGRhdGEgdHJhbnNwb3J0LlxuICAgKi9cbiAgaWZyYW1lPzogSFRNTElGcmFtZUVsZW1lbnQ7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoYXQgdGhlIG9yaWdpbiBvZiB0YXJnZXRXaW5kb3cgbXVzdCBiZSBmb3IgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQsXG4gICAqIGJ5IGRlZmF1bHQsIGl0J3MgdGhlIGxpdGVyYWwgc3RyaW5nIFwiKlwiIChpbmRpY2F0aW5nIG5vIHByZWZlcmVuY2UpLlxuICAgKi9cbiAgdGFyZ2V0T3JpZ2luPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciBza2lwIGNvbm5lY3Rpb24gY2hlY2ssIGZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBza2lwQ29ubmVjdGlvbkNoZWNrPzogYm9vbGVhbjtcbn1cblxuY29uc3QgY29ubmVjdEV2ZW50TmFtZSA9ICdpZnJhbWUtY29ubmVjdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJRnJhbWVNYWluVHJhbnNwb3J0PFxuICBUIGV4dGVuZHMgQmFzZUludGVyYWN0aW9uID0gYW55XG4+IGV4dGVuZHMgVHJhbnNwb3J0PFQ+IHtcbiAgY29uc3RydWN0b3IoX29wdGlvbnM6IElGcmFtZU1haW5UcmFuc3BvcnRPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJyksXG4gICAgICB0YXJnZXRPcmlnaW4gPSAnKicsXG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKHsgZGF0YSwgc291cmNlIH06IE1lc3NhZ2VFdmVudDxMaXN0ZW5lck9wdGlvbnM+KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IGlmcmFtZSEuY29udGVudFdpbmRvdztcbiAgICAgICAgICBpZiAoY29udGVudFdpbmRvdyAmJiBjb250ZW50V2luZG93ID09PSAoc291cmNlIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzZW5kZXIgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3chLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmZyYW1lc1swXSkge1xuICAgICAgICAgIHdpbmRvdy5mcmFtZXNbMF0ucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgY3VycmVudCBwYWdlIGRvZXMgbm90IGhhdmUgYW55IGlmcmFtZSBlbGVtZW50cycpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2tpcENvbm5lY3Rpb25DaGVjayxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gX29wdGlvbnM7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxpc3RlbmVyLFxuICAgICAgc2VuZGVyLFxuICAgIH0pO1xuICAgIGlmICghc2tpcENvbm5lY3Rpb25DaGVjaykge1xuICAgICAgY29uc3QgY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbmFtZTogY29ubmVjdEV2ZW50TmFtZSxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgICAgc2tpcEJlZm9yZUVtaXQ6IHRydWUsXG4gICAgICAgIH0pLnRoZW4oKGNvbm5lY3RlZCkgPT4ge1xuICAgICAgICAgIGlmIChjb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldISgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29ubmVjdCgpO1xuICAgICAgdGhpc1tiZWZvcmVFbWl0S2V5XSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldID0gcmVzb2x2ZTtcbiAgICAgIH0pO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5saXN0ZW4oY29ubmVjdEV2ZW50TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzW2JlZm9yZUVtaXRSZXNvbHZlS2V5XSEoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIC8vIGZvciBpZnJhbWUgcmVsb2FkXG4gICAgICBpZnJhbWU/LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXNbYmVmb3JlRW1pdEtleV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSUZyYW1lSW50ZXJuYWxUcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczogSUZyYW1lVHJhbnNwb3J0SW50ZXJuYWxPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICB0YXJnZXRPcmlnaW4gPSAnKicsXG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKHsgZGF0YSB9OiBNZXNzYWdlRXZlbnQ8TGlzdGVuZXJPcHRpb25zPikgPT5cbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmRlciA9IChtZXNzYWdlKSA9PiB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbiksXG4gICAgICBza2lwQ29ubmVjdGlvbkNoZWNrLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG4gICAgaWYgKCFza2lwQ29ubmVjdGlvbkNoZWNrKSB7XG4gICAgICB0aGlzLmVtaXQoe1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG5hbWU6IGNvbm5lY3RFdmVudE5hbWUsXG4gICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgIH0pLnRoZW4oKGNvbm5lY3RlZCkgPT4ge1xuICAgICAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgICAgdGhpc1tiZWZvcmVFbWl0UmVzb2x2ZUtleV0hKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpc1tiZWZvcmVFbWl0S2V5XSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldID0gcmVzb2x2ZTtcbiAgICAgIH0pO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5saXN0ZW4oY29ubmVjdEV2ZW50TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzW2JlZm9yZUVtaXRSZXNvbHZlS2V5XSEoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IElGcmFtZVRyYW5zcG9ydCA9IHtcbiAgTWFpbjogSUZyYW1lTWFpblRyYW5zcG9ydCxcbiAgSUZyYW1lOiBJRnJhbWVJbnRlcm5hbFRyYW5zcG9ydCxcbn07XG4iXX0=