atom.io 0.44.5 → 0.44.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/introspection/index.d.ts.map +1 -1
  2. package/dist/react-devtools/index.d.ts.map +1 -1
  3. package/dist/realtime/index.d.ts +4 -14
  4. package/dist/realtime/index.d.ts.map +1 -1
  5. package/dist/realtime/index.js +10 -8
  6. package/dist/realtime/index.js.map +1 -1
  7. package/dist/realtime-client/index.d.ts +6 -7
  8. package/dist/realtime-client/index.d.ts.map +1 -1
  9. package/dist/realtime-client/index.js +18 -22
  10. package/dist/realtime-client/index.js.map +1 -1
  11. package/dist/realtime-react/index.d.ts +3 -1
  12. package/dist/realtime-react/index.d.ts.map +1 -1
  13. package/dist/realtime-react/index.js +10 -6
  14. package/dist/realtime-react/index.js.map +1 -1
  15. package/dist/realtime-server/index.d.ts +40 -32
  16. package/dist/realtime-server/index.d.ts.map +1 -1
  17. package/dist/realtime-server/index.js +89 -59
  18. package/dist/realtime-server/index.js.map +1 -1
  19. package/dist/realtime-testing/index.d.ts +4 -4
  20. package/dist/realtime-testing/index.d.ts.map +1 -1
  21. package/dist/realtime-testing/index.js +5 -5
  22. package/dist/realtime-testing/index.js.map +1 -1
  23. package/dist/shared-room-store-zzjyXJv7.d.ts +28 -0
  24. package/dist/shared-room-store-zzjyXJv7.d.ts.map +1 -0
  25. package/package.json +8 -8
  26. package/src/realtime/index.ts +1 -0
  27. package/src/realtime/realtime-continuity.ts +2 -1
  28. package/src/realtime/realtime-key-types.ts +11 -0
  29. package/src/realtime/shared-room-store.ts +20 -13
  30. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +5 -5
  31. package/src/realtime-client/realtime-client-stores/client-main-store.ts +8 -12
  32. package/src/realtime-client/realtime-client-stores/client-sync-store.ts +4 -4
  33. package/src/realtime-client/sync-continuity.ts +6 -6
  34. package/src/realtime-react/realtime-context.tsx +14 -5
  35. package/src/realtime-server/continuity/continuity-store.ts +1 -2
  36. package/src/realtime-server/continuity/provide-continuity.ts +2 -2
  37. package/src/realtime-server/continuity/provide-outcomes.ts +1 -2
  38. package/src/realtime-server/continuity/provide-perspectives.ts +1 -3
  39. package/src/realtime-server/continuity/provide-startup-payloads.ts +1 -3
  40. package/src/realtime-server/continuity/track-acknowledgements.ts +1 -2
  41. package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -1
  42. package/src/realtime-server/realtime-mutable-family-provider.ts +12 -9
  43. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +127 -27
  44. package/src/realtime-server/realtime-server-stores/server-user-store.ts +11 -18
  45. package/src/realtime-testing/setup-realtime-test.tsx +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeServiceCounter = {\n\tconsumerCount: number\n\tdispose: () => void\n}\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<string, RealtimeServiceCounter> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(\n\t\tnew Map<string, RealtimeServiceCounter>(),\n\t).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport type { RoomSocketInterface } from \"atom.io/realtime/shared-room-store\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeServiceCounter = {\n\tconsumerCount: number\n\tdispose: () => void\n}\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<string, RealtimeServiceCounter> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(\n\t\tnew Map<string, RealtimeServiceCounter>(),\n\t).current\n\tconst setMySocketKey = useI(RTC.mySocketKeyAtom)\n\tReact.useEffect(() => {\n\t\tsetMySocketKey(socket?.id ? `socket::${socket.id}` : undefined)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMySocketKey(socket?.id ? `socket::${socket.id}` : undefined)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMySocketKey(undefined)\n\t\t})\n\t}, [socket, setMySocketKey])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n\nexport function useRealtimeRooms<RoomNames extends string>(): Socket<\n\t{},\n\tRoomSocketInterface<RoomNames>\n> {\n\tconst { socket } = React.useContext(RealtimeContext)\n\treturn socket as Socket<{}, RoomSocketInterface<RoomNames>>\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":";;;;;;;;;AAgBA,MAAaA,kBACZ,MAAM,cAAc;CACnB,QAAQ;CACR,UAAU;CACV,CAAC;AAEH,MAAaC,oBAGP,EAAE,UAAU,aAAa;CAC9B,MAAM,WAAW,MAAM,uBACtB,IAAI,KAAqC,CACzC,CAAC;CACF,MAAM,iBAAiB,KAAK,IAAI,gBAAgB;AAChD,OAAM,gBAAgB;AACrB,iBAAe,QAAQ,KAAK,WAAW,OAAO,OAAO,OAAU;AAC/D,UAAQ,GAAG,iBAAiB;AAC3B,kBAAe,QAAQ,KAAK,WAAW,OAAO,OAAO,OAAU;IAC9D;AACF,UAAQ,GAAG,oBAAoB;AAC9B,kBAAe,OAAU;IACxB;IACA,CAAC,QAAQ,eAAe,CAAC;AAC5B,QACC,oBAAC,gBAAgB;EAAS,OAAO;GAAE;GAAQ;GAAU;EACnD;GACyB;;AAI7B,SAAgB,mBAGd;CACD,MAAM,EAAE,WAAW,MAAM,WAAW,gBAAgB;AACpD,QAAO;;;;;;AC9CR,SAAgB,gBACf,QACA,MACO;AAGP,KAFmB,WAAuC,QAC/B,aAAa,eAC3B;EACZ,MAAM,aAAa,MAAM,OAA+B,MAAM;AAC9D,QAAM,gBAAgB;GACrB,IAAI,YAAY,WAAW;AAC3B,OAAI,cAAc,OAAO;AACxB,gBAAY,QAAQ,IAAI;AACxB,eAAW,UAAU;SAErB,cAAa;AACZ,QAAI,KAAK,UAAU,CAAE,YAAW;AAChC,eAAW,UAAU;;KAGrB,KAAK;OAER,OAAM,UAAU,QAAQ,KAAK;;;;;ACpB/B,SAAgB,mBACf,KACA,QACO;CACP,MAAM,EAAE,QAAQ,aAAa,MAAM,WAAW,gBAAgB;AAC9D,uBAAsB;EACrB,IAAI,UAAU,UAAU,IAAI,IAAI;AAChC,MAAI,QACH,GAAE,QAAQ;WACA,QAAQ;AAElB,aAAU;IAAE,eAAe;IAAG,SADd,OAAO,OAAO;IACS;AACvC,aAAU,IAAI,KAAK,QAAQ;;AAE5B,eAAa;AACZ,OAAI,SAAS;AACZ,MAAE,QAAQ;AACV,QAAI,QAAQ,kBAAkB,GAAG;AAChC,aAAQ,WAAW;AACnB,eAAU,OAAO,IAAI;;;;IAItB,CAAC,QAAQ,IAAI,CAAC;;;;;ACrBlB,SAAgB,YACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,SAAS,OAAO,QAAQ,MAAM,CAClC;AACD,QAAO,KAAK,MAAM;;;;;ACNnB,SAAgB,wBAGd,QAA6C,QAAuB;CACrE,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,QAAQ,OAAO;AAChD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,qBAAqB,OAAO,QAAQ,QAAQ,OAAO,CACvD;AACD,QAAO,KAAK,MAAM;;;;;ACVnB,SAAgB,eACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,gBAAgB,OAAO,QAAQ,MAAM,CACzC;AACD,QAAO,KAAK,MAAM;;;;;ACLnB,SAAgB,+BAGd,aAAkD,KAAoB;CACvE,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,aAAa,IAAI;AAClD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,4BAA4B,OAAO,QAAQ,aAAa,IAAI,CAChE;AACD,QAAO,KAAK,MAAM;;;;;ACXnB,SAAgB,gBACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,aAAa,OAAO,QAAQ,MAAM,CACtC;AACD,QAAO,KAAK,MAAM;;;;;ACNnB,SAAgB,4BACf,aACA,KACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,aAAa,IAAI;AAClD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,yBAAyB,OAAO,QAAQ,aAAa,IAAI,CAC7D;AAED,QAAO,KAAK,MAAM;;;;;ACVnB,SAAgB,QACf,OACkE;CAClE,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,UAAU,OAAO,QAAQ,MAAM,CACnC;CACD,MAAM,QAAQ,KAAK,GAAG,YAAY,MAAM,IAAI;CAC5C,MAAM,SAAS,KAAK,MAAM;AAE1B,QAAO,QAAQ,SAAS;;;;;ACZzB,SAAgB,kBAAkB,OAA8B;CAC/D,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,WAAW,MAAM,QAAQ,WAAW;AACtD,SAAO,eAAe,OAAO,QAAQ,MAAM;GAC1C"}
@@ -3,7 +3,7 @@ import * as AtomIO from "atom.io";
3
3
  import { Hierarchy, JoinToken, MutableAtomToken, PureSelectorFamilyToken, RegularAtomFamilyToken, WritableToken } from "atom.io";
4
4
  import { Canonical, Json, stringified } from "atom.io/json";
5
5
  import { UList } from "atom.io/transceivers/u-list";
6
- import { ContinuityToken, Socket } from "atom.io/realtime";
6
+ import { ContinuityToken, RoomKey, Socket, SocketKey, UserKey } from "atom.io/realtime";
7
7
  import { ChildProcessWithoutNullStreams } from "node:child_process";
8
8
  import { Readable, Writable } from "node:stream";
9
9
 
@@ -54,30 +54,6 @@ declare class ChildSocket<I extends Events, O extends Events, P extends ChildPro
54
54
  constructor(proc: P, key: string, logger?: Pick<Console, `error` | `info` | `warn`>);
55
55
  }
56
56
  //#endregion
57
- //#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
58
- declare const ROOMS: Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
59
- declare function spawnRoom(roomId: string, command: string, args: string[], store: Store): Promise<ChildSocket<any, any>>;
60
- declare function joinRoom(roomId: string, userId: string, socket: Socket, store: Store): {
61
- leave: () => void;
62
- roomSocket: ChildSocket<any, any, ChildProcessWithoutNullStreams>;
63
- } | null;
64
- declare function leaveRoom(roomId: string, userId: string, store: Store): void;
65
- declare function destroyRoom(roomId: string, store: Store): void;
66
- //#endregion
67
- //#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
68
- type SocketKey = `socket::${string}`;
69
- type UserKey = `user::${string}`;
70
- type RoomKey = `room::${string}`;
71
- type SocketSystemHierarchy = Hierarchy<[{
72
- above: `root`;
73
- below: [UserKey, SocketKey, RoomKey];
74
- }]>;
75
- declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
76
- declare const socketIndex: MutableAtomToken<UList<SocketKey>>;
77
- declare const userIndex: MutableAtomToken<UList<UserKey>>;
78
- declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
79
- declare const userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<UserKey[], UserKey>;
80
- //#endregion
81
57
  //#region src/realtime-server/ipc-sockets/parent-socket.d.ts
82
58
  declare class SubjectSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
83
59
  in: Subject<EventPayload<I>>;
@@ -135,6 +111,44 @@ declare function realtimeMutableProvider({
135
111
  store
136
112
  }: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
137
113
  //#endregion
114
+ //#region src/realtime-server/server-config.d.ts
115
+ type ServerConfig = {
116
+ socket: Socket;
117
+ store?: RootStore;
118
+ };
119
+ //#endregion
120
+ //#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
121
+ type RoomMap = Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
122
+ declare global {
123
+ var ATOM_IO_REALTIME_SERVER_ROOMS: RoomMap;
124
+ }
125
+ declare const ROOMS: RoomMap;
126
+ declare const roomMeta: {
127
+ count: number;
128
+ };
129
+ declare function spawnRoom(store: Store, roomKey: RoomKey, command: string, args: string[]): Promise<ChildSocket<any, any>>;
130
+ declare function joinRoom(store: Store, roomKey: RoomKey, userKey: UserKey, socket: Socket): {
131
+ leave: () => void;
132
+ roomSocket: ChildSocket<any, any, ChildProcessWithoutNullStreams>;
133
+ } | null;
134
+ declare function leaveRoom(store: Store, roomKey: RoomKey, userKey: UserKey): void;
135
+ declare function destroyRoom(store: Store, roomKey: RoomKey): void;
136
+ declare function provideRooms<RoomNames extends string>({
137
+ store,
138
+ socket
139
+ }: ServerConfig, resolveRoomScript: (path: string) => [string, string[]]): void;
140
+ //#endregion
141
+ //#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
142
+ type SocketSystemHierarchy = Hierarchy<[{
143
+ above: `root`;
144
+ below: [UserKey, SocketKey, RoomKey];
145
+ }]>;
146
+ declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
147
+ declare const socketKeysAtom: MutableAtomToken<UList<SocketKey>>;
148
+ declare const userKeysAtom: MutableAtomToken<UList<UserKey>>;
149
+ declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
150
+ declare const selfListSelectors: PureSelectorFamilyToken<UserKey[], UserKey>;
151
+ //#endregion
138
152
  //#region src/realtime-server/realtime-state-provider.d.ts
139
153
  type StateProvider = ReturnType<typeof realtimeStateProvider>;
140
154
  declare function realtimeStateProvider({
@@ -149,11 +163,5 @@ declare function realtimeStateReceiver({
149
163
  store
150
164
  }: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
151
165
  //#endregion
152
- //#region src/realtime-server/server-config.d.ts
153
- type ServerConfig = {
154
- socket: Socket;
155
- store?: RootStore;
156
- };
157
- //#endregion
158
- export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomKey, ServerConfig, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserKey, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
166
+ export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomMap, ServerConfig, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, provideRooms, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, selfListSelectors, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
159
167
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["ROOMS: Map<\n\tstring,\n\tChildSocket<any, any, ChildProcessWithoutNullStreams>\n>","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<UList<SocketKey>>","userIndex: MutableAtomToken<UList<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<\n\tUserKey[],\n\tUserKey\n>"],"sources":["../../src/realtime-server/continuity/provide-continuity.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/server-config.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["ATOM_IO_REALTIME_SERVER_ROOMS: RoomMap","ROOMS: RoomMap","roomMeta: { count: number }","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketKeysAtom: MutableAtomToken<UList<SocketKey>>","userKeysAtom: MutableAtomToken<UList<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","selfListSelectors: PureSelectorFamilyToken<UserKey[], UserKey>"],"sources":["../../src/realtime-server/continuity/provide-continuity.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/server-config.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { IMPLICIT, OWN_OP, Subject, actUponStore, editRelationsInStore, findInStore, getFromStore, getJsonToken, getUpdateToken, isRootStore, operateOnStore, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
1
+ import { IMPLICIT, OWN_OP, Subject, actUponStore, editRelationsInStore, findInStore, findRelationsInStore, getFromStore, getInternalRelationsFromStore, getJsonToken, getUpdateToken, isRootStore, operateOnStore, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
2
2
  import { atomFamily, join, mutableAtom, selectorFamily } from "atom.io";
3
3
  import { parseJson, stringifyJson } from "atom.io/json";
4
4
  import { UList } from "atom.io/transceivers/u-list";
5
- import { employSocket, mutexAtoms, roomIndex, usersInRooms } from "atom.io/realtime";
5
+ import { employSocket, isSocketKey, isUserKey, mutexAtoms, roomKeysAtom, usersInRooms } from "atom.io/realtime";
6
6
  import { spawn } from "node:child_process";
7
7
 
8
8
  //#region src/realtime-server/continuity/continuity-store.ts
@@ -559,13 +559,13 @@ function realtimeAtomFamilyProvider({ socket, store = IMPLICIT.STORE }) {
559
559
  fillUnsubRequest(token.key);
560
560
  }));
561
561
  };
562
- const isAvailable = (exposedSubKeys, subKey) => {
562
+ const isAvailable$1 = (exposedSubKeys, subKey) => {
563
563
  for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
564
564
  return false;
565
565
  };
566
566
  const start = () => {
567
567
  coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
568
- if (isAvailable(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
568
+ if (isAvailable$1(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
569
569
  else {
570
570
  familyMemberSubscriptionsWanted.add(stringifyJson(subKey));
571
571
  socket.emit(`unavailable:${family.key}`, subKey);
@@ -585,6 +585,10 @@ function realtimeAtomFamilyProvider({ socket, store = IMPLICIT.STORE }) {
585
585
 
586
586
  //#endregion
587
587
  //#region src/realtime-server/realtime-mutable-family-provider.ts
588
+ const isAvailable = (exposedSubKeys, subKey) => {
589
+ for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
590
+ return false;
591
+ };
588
592
  function realtimeMutableFamilyProvider({ socket, store = IMPLICIT.STORE }) {
589
593
  return function mutableFamilyProvider(family, index) {
590
594
  const coreSubscriptions = /* @__PURE__ */ new Set();
@@ -623,10 +627,6 @@ function realtimeMutableFamilyProvider({ socket, store = IMPLICIT.STORE }) {
623
627
  fillUnsubRequest(token.key);
624
628
  }));
625
629
  };
626
- const isAvailable = (exposedSubKeys, subKey) => {
627
- for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
628
- return false;
629
- };
630
630
  const start = () => {
631
631
  coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
632
632
  if (isAvailable(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
@@ -676,10 +676,37 @@ function realtimeMutableProvider({ socket, store = IMPLICIT.STORE }) {
676
676
  };
677
677
  }
678
678
 
679
+ //#endregion
680
+ //#region src/realtime-server/realtime-server-stores/server-user-store.ts
681
+ const socketAtoms = atomFamily({
682
+ key: `sockets`,
683
+ default: null
684
+ });
685
+ const socketKeysAtom = mutableAtom({
686
+ key: `socketsIndex`,
687
+ class: UList
688
+ });
689
+ const userKeysAtom = mutableAtom({
690
+ key: `usersIndex`,
691
+ class: UList
692
+ });
693
+ const usersOfSockets = join({
694
+ key: `usersOfSockets`,
695
+ between: [`user`, `socket`],
696
+ cardinality: `1:1`,
697
+ isAType: isUserKey,
698
+ isBType: isSocketKey
699
+ });
700
+ const selfListSelectors = selectorFamily({
701
+ key: `selfList`,
702
+ get: (userId) => () => [userId]
703
+ });
704
+
679
705
  //#endregion
680
706
  //#region src/realtime-server/realtime-server-stores/server-room-external-store.ts
681
- const ROOMS = /* @__PURE__ */ new Map();
682
- async function spawnRoom(roomId, command, args, store) {
707
+ const ROOMS = globalThis.ATOM_IO_REALTIME_SERVER_ROOMS ?? (globalThis.ATOM_IO_REALTIME_SERVER_ROOMS = /* @__PURE__ */ new Map());
708
+ const roomMeta = { count: 0 };
709
+ async function spawnRoom(store, roomKey, command, args) {
683
710
  const roomSocket = new ChildSocket(await new Promise((resolve) => {
684
711
  const room = spawn(command, args, { env: process.env });
685
712
  const resolver = (data) => {
@@ -689,15 +716,15 @@ async function spawnRoom(roomId, command, args, store) {
689
716
  }
690
717
  };
691
718
  room.stdout.on(`data`, resolver);
692
- }), roomId);
693
- ROOMS.set(roomId, roomSocket);
694
- setIntoStore(store, roomIndex, (index) => (index.add(roomId), index));
719
+ }), roomKey);
720
+ ROOMS.set(roomKey, roomSocket);
721
+ setIntoStore(store, roomKeysAtom, (index) => (index.add(roomKey), index));
695
722
  roomSocket.on(`close`, () => {
696
- destroyRoom(roomId, store);
723
+ destroyRoom(store, roomKey);
697
724
  });
698
725
  return roomSocket;
699
726
  }
700
- function joinRoom(roomId, userId, socket, store) {
727
+ function joinRoom(store, roomKey, userKey, socket) {
701
728
  const roomQueue = [];
702
729
  const pushToRoomQueue = (payload) => {
703
730
  roomQueue.push(payload);
@@ -709,21 +736,21 @@ function joinRoom(roomId, userId, socket, store) {
709
736
  socket.onAny(forward);
710
737
  editRelationsInStore(usersInRooms, (relations) => {
711
738
  relations.set({
712
- room: roomId,
713
- user: userId
739
+ room: roomKey,
740
+ user: userKey
714
741
  });
715
742
  }, store);
716
- const roomSocket = ROOMS.get(roomId);
743
+ const roomSocket = ROOMS.get(roomKey);
717
744
  if (!roomSocket) {
718
- store.logger.error(`❌`, `unknown`, roomId, `no room found with this id`);
745
+ store.logger.error(`❌`, `unknown`, roomKey, `no room found with this id`);
719
746
  return null;
720
747
  }
721
748
  roomSocket.onAny((...payload) => {
722
749
  socket.emit(...payload);
723
750
  });
724
- roomSocket.emit(`user-joins`, userId);
751
+ roomSocket.emit(`user-joins`, userKey);
725
752
  toRoom = (payload) => {
726
- roomSocket.emit(`user::${userId}`, ...payload);
753
+ roomSocket.emit(`user::${userKey}`, ...payload);
727
754
  };
728
755
  while (roomQueue.length > 0) {
729
756
  const payload = roomQueue.shift();
@@ -732,60 +759,63 @@ function joinRoom(roomId, userId, socket, store) {
732
759
  const leave = () => {
733
760
  socket.offAny(forward);
734
761
  toRoom([`user-leaves`]);
735
- leaveRoom(roomId, userId, store);
762
+ leaveRoom(store, roomKey, userKey);
736
763
  };
737
764
  return {
738
765
  leave,
739
766
  roomSocket
740
767
  };
741
768
  }
742
- function leaveRoom(roomId, userId, store) {
769
+ function leaveRoom(store, roomKey, userKey) {
743
770
  editRelationsInStore(usersInRooms, (relations) => {
744
771
  relations.delete({
745
- room: roomId,
746
- user: userId
772
+ room: roomKey,
773
+ user: userKey
747
774
  });
748
775
  }, store);
749
776
  }
750
- function destroyRoom(roomId, store) {
777
+ function destroyRoom(store, roomKey) {
778
+ setIntoStore(store, roomKeysAtom, (s) => (s.delete(roomKey), s));
751
779
  editRelationsInStore(usersInRooms, (relations) => {
752
- relations.delete({ room: roomId });
780
+ relations.delete({ room: roomKey });
753
781
  }, store);
754
- setIntoStore(store, roomIndex, (s) => (s.delete(roomId), s));
755
- const room = ROOMS.get(roomId);
782
+ const room = ROOMS.get(roomKey);
756
783
  if (room) {
757
784
  room.emit(`exit`);
758
- ROOMS.delete(roomId);
785
+ ROOMS.delete(roomKey);
759
786
  }
760
787
  }
761
-
762
- //#endregion
763
- //#region src/realtime-server/realtime-server-stores/server-user-store.ts
764
- const socketAtoms = atomFamily({
765
- key: `sockets`,
766
- default: null
767
- });
768
- const socketIndex = mutableAtom({
769
- key: `socketsIndex`,
770
- class: UList
771
- });
772
- const userIndex = mutableAtom({
773
- key: `usersIndex`,
774
- class: UList
775
- });
776
- const usersOfSockets = join({
777
- key: `usersOfSockets`,
778
- between: [`user`, `socket`],
779
- cardinality: `1:1`,
780
- isAType: (s) => s.startsWith(`user::`),
781
- isBType: (s) => s.startsWith(`socket::`)
782
- });
783
- const userMutualSituationalAwarenessIndexes = selectorFamily({
784
- key: `userMutualSituationalAwarenessIndexes`,
785
- get: (userId) => () => {
786
- return [userId];
787
- }
788
- });
788
+ function provideRooms({ store = IMPLICIT.STORE, socket }, resolveRoomScript) {
789
+ const socketKey = `socket::${socket.id}`;
790
+ const userKey = getFromStore(store, findRelationsInStore(usersOfSockets, socketKey, store).userKeyOfSocket);
791
+ const exposeMutable = realtimeMutableProvider({
792
+ socket,
793
+ store
794
+ });
795
+ const exposeMutableFamily = realtimeMutableFamilyProvider({
796
+ socket,
797
+ store
798
+ });
799
+ exposeMutable(roomKeysAtom);
800
+ exposeMutableFamily(getInternalRelationsFromStore(usersInRooms, store), findInStore(store, selfListSelectors, userKey));
801
+ exposeMutableFamily(getInternalRelationsFromStore(usersOfSockets, store), socketKeysAtom);
802
+ socket.on(`createRoom`, async (roomName) => {
803
+ const roomId = `room::${roomMeta.count++}`;
804
+ await spawnRoom(store, roomId, ...resolveRoomScript(roomName));
805
+ socket.on(`deleteRoom:${roomId}`, () => {
806
+ destroyRoom(store, roomId);
807
+ });
808
+ });
809
+ socket.on(`joinRoom`, (roomKey) => {
810
+ const { leave } = joinRoom(store, roomKey, userKey, socket);
811
+ socket.on(`leaveRoom:${roomKey}`, leave);
812
+ });
813
+ socket.on(`disconnect`, () => {
814
+ editRelationsInStore(usersOfSockets, (relations) => relations.delete(socketKey), store);
815
+ if (userKey) setIntoStore(store, userKeysAtom, (index) => (index.delete(userKey), index));
816
+ setIntoStore(store, socketKeysAtom, (index) => (index.delete(socketKey), index));
817
+ });
818
+ }
789
819
 
790
820
  //#endregion
791
821
  //#region src/realtime-server/realtime-state-provider.ts
@@ -860,5 +890,5 @@ function realtimeStateReceiver({ socket, store = IMPLICIT.STORE }) {
860
890
  }
861
891
 
862
892
  //#endregion
863
- export { ChildSocket, CustomSocket, ParentSocket, ROOMS, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
893
+ export { ChildSocket, CustomSocket, ParentSocket, ROOMS, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, provideRooms, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, selfListSelectors, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
864
894
  //# sourceMappingURL=index.js.map