@soundsright/utils
Version:
soundsright utils sdk
95 lines (94 loc) • 4.25 kB
JavaScript
;
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;