UNPKG

@soundsright/utils

Version:

soundsright utils sdk

95 lines (94 loc) 4.25 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getBaseCookieOptions = exports.openWindow = exports.isOriginApproved = exports.WindowConnection = void 0; const events_1 = __importDefault(require("events")); class WindowConnection extends events_1.default { constructor(target) { super(); this.target = target; this.middlewares = {}; this.targetOrigin = '*'; const messageListener = (e) => { const { data, origin } = e; if (data.event) { this.emit(data.event, data.data, origin); } }; window.addEventListener('message', messageListener); try { target.addEventListener('close', () => { window.removeEventListener('message', messageListener); }); } catch (_a) { } // eslint-disable-line } send(event, data, targetOrigin) { this.target.postMessage({ event, data }, targetOrigin || this.targetOrigin); } request(event, data) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve) => { this.once(`${event}_response`, resolve); this.send(event, data); }); }); } listen(event, handler) { if (!this.middlewares[event]) { const next = (data) => { this.send(`${event}_response`, data); }; this.middlewares[event] = (data) => { handler(data, next); }; this.on(event, (data) => { this.middlewares[event](data); }); } else { const next = this.middlewares[event]; this.middlewares[event] = (data) => { handler(data, next); }; } } } exports.WindowConnection = WindowConnection; const isOriginApproved = (origin) => { if (/(^|\.)lyrra.io$|(^|\.)soundsright.io$/i.test(origin)) { return true; } return false; }; exports.isOriginApproved = isOriginApproved; const openWindow = (url, options) => { const opts = Object.assign({}, options); const documentElement = document.documentElement; if (opts.height && opts.top === undefined) { const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screen.top; const height = window.screen.height || window.innerHeight || documentElement.clientHeight; opts.top = parseInt((height - opts.height) / 2, 10) + dualScreenTop; } if (opts.width && opts.left === undefined) { const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screen.left; const width = window.screen.width || window.innerWidth || documentElement.clientWidth; opts.left = parseInt((width - opts.width) / 2, 10) + dualScreenLeft; } const optStr = Object.keys(opts).reduce((t, v) => `${t},${v}=${opts[v]}`, '').slice(1); return window.open(url, '_blank', optStr); }; exports.openWindow = openWindow; const getBaseCookieOptions = () => { var _a; return ({ path: '/', domain: (_a = window.location.hostname.match(/[^.]+\.([a-zA-Z]+(:\d+)*)$/)) === null || _a === void 0 ? void 0 : _a[0] }); }; exports.getBaseCookieOptions = getBaseCookieOptions;