Skip to content

Commit

Permalink
Restore some eventSource code
Browse files Browse the repository at this point in the history
  • Loading branch information
backspace committed Feb 28, 2025
1 parent e5dd9b7 commit 68f346a
Showing 1 changed file with 41 additions and 1 deletion.
42 changes: 41 additions & 1 deletion packages/host/app/services/message-service.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
import Service, { service } from '@ember/service';

import { isTesting } from '@embroider/macros';

import { tracked } from '@glimmer/tracking';

import window from 'ember-window-mock';

import qs from 'qs';

import type { RealmEventEventContent } from 'https://cardstack.com/base/matrix-event';

import { SessionLocalStorageKey } from '../utils/local-storage-keys';

import type NetworkService from './network';

export default class MessageService extends Service {
Expand All @@ -26,14 +34,46 @@ export default class MessageService extends Service {
this.listenerCallbacks.set(realmURL, []);
}
this.listenerCallbacks.get(realmURL)?.push(cb);

let maybeEventSource = this.subscriptions.get(realmURL);

if (!maybeEventSource) {
let token = getPersistedTokenForRealm(realmURL);
if (!token) {
throw new Error(`Could not find JWT for realm ${realmURL}`);
}
let urlWithAuth = `${realmURL}_message?${qs.stringify({
authHeader: 'Bearer ' + token,
})}`;
maybeEventSource = this.network.createEventSource(urlWithAuth);

if (maybeEventSource) {
maybeEventSource.onerror = () => maybeEventSource?.close();
maybeEventSource.onmessage = (ev) => {
throw new Error('received unexpected server-sent event: ' + ev);
};

this.subscriptions.set(realmURL, maybeEventSource);
}
}

return () => {};
}

relayMatrixSSE(realmURL: string, event: RealmEventEventContent) {
console.log('relaying matrix sse event', realmURL, event);
console.log('listener callbacks', this.listenerCallbacks);
this.listenerCallbacks.get(realmURL)?.forEach((cb) => {
cb(event);
});
}
}

function getPersistedTokenForRealm(realmURL: string) {
if (isTesting()) {
return 'TEST_TOKEN';
}

let sessionStr = window.localStorage.getItem(SessionLocalStorageKey) ?? '{}';
let session = JSON.parse(sessionStr);
return session[realmURL] as string | undefined;
}

0 comments on commit 68f346a

Please sign in to comment.