2021-03-04 19:00:00 +01:00
|
|
|
import {Subject} from "rxjs";
|
2021-03-05 16:50:54 +01:00
|
|
|
import {ChatEvent, isChatEvent} from "./Events/ChatEvent";
|
|
|
|
import {isIframeEventWrapper} from "./Events/IframeEvent";
|
|
|
|
|
2021-03-04 19:00:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Listens to messages from iframes and turn those messages into easy to use observables.
|
|
|
|
*/
|
|
|
|
class IframeListener {
|
|
|
|
private readonly _chatStream: Subject<ChatEvent> = new Subject();
|
|
|
|
public readonly chatStream = this._chatStream.asObservable();
|
|
|
|
|
|
|
|
init() {
|
|
|
|
window.addEventListener("message", (event) => {
|
|
|
|
// Do we trust the sender of this message?
|
|
|
|
//if (event.origin !== "http://example.com:8080")
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// event.source is window.opener
|
|
|
|
// event.data is the data sent by the iframe
|
|
|
|
|
2021-03-05 16:50:54 +01:00
|
|
|
const payload = event.data;
|
|
|
|
if (isIframeEventWrapper(payload)) {
|
|
|
|
if (payload.type === 'chat' && isChatEvent(payload.data)) {
|
|
|
|
this._chatStream.next(payload.data);
|
|
|
|
}
|
2021-03-04 19:00:00 +01:00
|
|
|
}
|
|
|
|
|
2021-03-05 16:50:54 +01:00
|
|
|
|
2021-03-04 19:00:00 +01:00
|
|
|
}, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const iframeListener = new IframeListener();
|