git.iko.soy/airlock-template
on master help sign in
airlock-template/script.js
42 lines 1.0 kB history raw
1import { fetchEventSource } from "/fetch-event-source.js"
3const uid = `${Math.floor(Date.now() / 1000)}-${Math.random()}`;
5function searchForInit(obj) {
6 if (obj.init) {
7 return obj.init;
8 } else {
9 for (let key in obj) {
10 if (obj.hasOwnProperty(key)) {
11 const result = searchForInit(obj[key]);
12 if (result) {
13 return result;
14 }
15 }
16 }
17 }
20let app = searchForInit(Elm)({ node: document.getElementById("elm"), flags: { uid } });
22app.ports.createEventSource.subscribe((url) => {
23 fetchEventSource(url, {
24 headers: {
25 Accept: 'application/x-urb-jam',
26 "x-channel-format": 'application/x-urb-jam',
27 "content-type": 'application/x-urb-jam'
28 },
29 credentials: 'include',
30 responseTimeout: 25000,
31 openWhenHidden: true,
32 onmessage(ev) {
33 console.log(ev)
34 app.ports.onEventSourceMessage.send({ message: ev.data });
35 },
36 onerror(err) {
37 console.log(err)
38 app.ports.onEventSourceMessage.send({ error: err });
39 }
40 });
42});