sse.client.ts 985 B

1234567891011121314151617181920212223242526272829303132333435
  1. import SseSource from "~/services/sse/sseSource";
  2. import {useAccessProfileStore} from "~/stores/accessProfile";
  3. import {useSseStore} from "~/stores/sse";
  4. /**
  5. * Setup SSE EventSource, allowing the app to listen for Mercure updates
  6. * /!\ This has to be executed client side
  7. *
  8. * @param ctx
  9. */
  10. export default defineNuxtPlugin(nuxtApp => {
  11. const runtimeConfig = useRuntimeConfig()
  12. if (!runtimeConfig.baseUrlMercure) {
  13. console.error('Mercure : the hub url is not defined')
  14. return;
  15. }
  16. const accessProfile = useAccessProfileStore()
  17. const sseStore = useSseStore()
  18. const sseSource = new SseSource(
  19. runtimeConfig.baseUrlMercure,
  20. "access/" + accessProfile.id,
  21. () => { sseStore.connected = true },
  22. (eventData) => { sseStore.addEvent(eventData as any) },
  23. () => { sseStore.connected = false },
  24. )
  25. sseSource.subscribe()
  26. window.addEventListener('beforeunload', () => { sseSource.unsubscribe() })
  27. })