Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
2.2 kB · 77 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778import { QueryClient } from "@octanejs/tanstack-query";
export class PublisherQuerySession { readonly client = new QueryClient({ defaultOptions: { queries: { staleTime: 30_000, retry: false, networkMode: "always", refetchOnReconnect: true, }, mutations: { retry: false, networkMode: "always", gcTime: 0 }, }, }); private state = { ownerSubject: null as string | null, epoch: 0, signedOut: false, }; private listeners = new Set<() => void>(); getSnapshot = () => this.state; subscribe = (listener: () => void) => { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; }; key(...resource: (string | null)[]) { return [ "publisher", this.state.ownerSubject, this.state.epoch, ...resource, ] as const; } identify(ownerSubject: string | null) { if ( ownerSubject !== null && (typeof ownerSubject !== "string" || !ownerSubject) ) throw new Error("Invalid publisher identity"); if ( ownerSubject === this.state.ownerSubject && this.state.signedOut === !ownerSubject ) return; const previous = this.state.ownerSubject; const changedOwner = previous !== ownerSubject; this.state = { ownerSubject, epoch: this.state.epoch + Number(changedOwner), signedOut: !ownerSubject, }; // The first signed-out response must leave the public setup check in flight. if (changedOwner) this.client.removeQueries({ queryKey: ["publisher"] }); if (previous) this.clearIntents(); this.listeners.forEach((listener) => listener()); } clearIntents() { try { for (const key of Object.keys(sessionStorage)) { if ( key === "flarebot-installation-intent" || key.startsWith("flarebot-update-") || key.startsWith("flarebot-domain-request:") ) sessionStorage.removeItem(key); } } catch { /* Storage may be disabled. */ } } assertCurrent(epoch: number) { if (epoch !== this.state.epoch) throw new Error("Publisher session retired"); }}