atom.io 0.46.5 → 0.46.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 (41) hide show
  1. package/dist/realtime/index.d.ts +7 -6
  2. package/dist/realtime/index.d.ts.map +1 -1
  3. package/dist/realtime/index.js +19 -10
  4. package/dist/realtime/index.js.map +1 -1
  5. package/dist/realtime-client/index.d.ts +13 -13
  6. package/dist/realtime-client/index.d.ts.map +1 -1
  7. package/dist/realtime-client/index.js +10 -3
  8. package/dist/realtime-client/index.js.map +1 -1
  9. package/dist/realtime-server/index.d.ts +49 -41
  10. package/dist/realtime-server/index.d.ts.map +1 -1
  11. package/dist/realtime-server/index.js +123 -92
  12. package/dist/realtime-server/index.js.map +1 -1
  13. package/dist/realtime-testing/index.js +2 -2
  14. package/dist/realtime-testing/index.js.map +1 -1
  15. package/package.json +17 -16
  16. package/src/realtime/realtime-continuity.ts +2 -2
  17. package/src/realtime/shared-room-store.ts +38 -17
  18. package/src/realtime/socket-interface.ts +1 -1
  19. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +3 -1
  20. package/src/realtime-client/continuity/use-conceal-state.ts +2 -1
  21. package/src/realtime-client/pull-atom-family-member.ts +1 -1
  22. package/src/realtime-client/pull-atom.ts +1 -1
  23. package/src/realtime-client/pull-mutable-atom-family-member.ts +1 -1
  24. package/src/realtime-client/pull-mutable-atom.ts +1 -1
  25. package/src/realtime-client/pull-selector-family-member.ts +1 -1
  26. package/src/realtime-client/pull-selector-roots.ts +1 -1
  27. package/src/realtime-client/pull-selector.ts +1 -1
  28. package/src/realtime-client/push-state.ts +1 -1
  29. package/src/realtime-client/realtime-client-stores/client-main-store.ts +16 -3
  30. package/src/realtime-client/sync-continuity.ts +1 -2
  31. package/src/realtime-server/continuity/provide-outcomes.ts +1 -1
  32. package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -8
  33. package/src/realtime-server/provide-rooms.ts +64 -16
  34. package/src/realtime-server/realtime-family-provider.ts +51 -35
  35. package/src/realtime-server/realtime-mutable-family-provider.ts +50 -34
  36. package/src/realtime-server/realtime-mutable-provider.ts +4 -4
  37. package/src/realtime-server/realtime-state-provider.ts +7 -7
  38. package/src/realtime-server/realtime-state-receiver.ts +2 -2
  39. package/src/realtime-server/server-config.ts +20 -13
  40. package/src/realtime-server/server-socket-state.ts +3 -3
  41. package/src/realtime-testing/setup-realtime-test.tsx +2 -2
@@ -96,37 +96,6 @@ declare class ParentSocket<I extends Events & { [id in string as `relay::${id}`]
96
96
  receiveRelay(attachServices: (socket: SubjectSocket<any, any>, userKey: UserKey) => (() => void) | void): void;
97
97
  }
98
98
  //#endregion
99
- //#region src/realtime-server/server-config.d.ts
100
- type ServerConfig = {
101
- socket: Socket;
102
- userKey: UserKey;
103
- store?: RootStore;
104
- };
105
- /** Socket Handshake details--taken from socket.io */
106
- type Handshake = {
107
- /** The headers sent as part of the handshake */
108
- headers: IncomingHttpHeaders;
109
- /** The date of creation (as string) */
110
- time: string;
111
- /** The ip of the client */
112
- address: string;
113
- /** Whether the connection is cross-domain */
114
- xdomain: boolean;
115
- /** Whether the connection is secure */
116
- secure: boolean;
117
- /** The date of creation (as unix timestamp) */
118
- issued: number;
119
- /** The request URL string */
120
- url: string;
121
- /** The query object */
122
- query: ParsedUrlQuery;
123
- /** The auth object */
124
- auth: {
125
- [key: string]: any;
126
- };
127
- };
128
- declare function realtime(server: Server, auth: (handshake: Handshake) => Loadable<Error | UserKey>, onConnect: (config: ServerConfig) => Loadable<() => Loadable<void>>, store?: RootStore): () => Promise<void>;
129
- //#endregion
130
99
  //#region src/realtime-server/provide-rooms.d.ts
131
100
  type RoomMap = Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
132
101
  declare global {
@@ -174,6 +143,9 @@ type ProvideRoomsConfig<RoomNames extends string> = {
174
143
  resolveRoomScript: (path: RoomNames) => [string, string[]];
175
144
  roomNames: RoomNames[];
176
145
  roomTimeLimit?: number;
146
+ userKey: UserKey;
147
+ store: RootStore;
148
+ socket: Socket;
177
149
  };
178
150
  declare function provideRooms<RoomNames extends string>({
179
151
  store,
@@ -181,29 +153,29 @@ declare function provideRooms<RoomNames extends string>({
181
153
  resolveRoomScript,
182
154
  roomNames,
183
155
  userKey
184
- }: ProvideRoomsConfig<RoomNames> & ServerConfig): () => void;
156
+ }: ProvideRoomsConfig<RoomNames>): () => void;
185
157
  //#endregion
186
158
  //#region src/realtime-server/realtime-family-provider.d.ts
187
159
  type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>;
188
160
  declare function realtimeAtomFamilyProvider({
189
161
  socket,
190
- userKey,
162
+ consumer,
191
163
  store
192
- }: ServerConfig): <J extends Json.Serializable, K extends Canonical>(family: AtomIO.RegularAtomFamilyToken<J, K>, index: AtomIO.ReadableToken<Iterable<NoInfer<K>>>) => () => void;
164
+ }: ServerConfig): <J extends Json.Serializable, K extends Canonical>(family: AtomIO.RegularAtomFamilyToken<J, K>, index: AtomIO.ReadableToken<Iterable<NoInfer<K>>> | Iterable<NoInfer<K>>) => () => void;
193
165
  //#endregion
194
166
  //#region src/realtime-server/realtime-mutable-family-provider.d.ts
195
167
  type MutableFamilyProvider = ReturnType<typeof realtimeMutableFamilyProvider>;
196
168
  declare function realtimeMutableFamilyProvider({
197
169
  socket,
198
- userKey,
170
+ consumer,
199
171
  store
200
- }: ServerConfig): <T extends Transceiver<any, any, any>, K extends Canonical>(family: AtomIO.MutableAtomFamilyToken<T, K>, index: AtomIO.ReadableToken<Iterable<NoInfer<K>>>) => () => void;
172
+ }: ServerConfig): <T extends Transceiver<any, any, any>, K extends Canonical>(family: AtomIO.MutableAtomFamilyToken<T, K>, index: AtomIO.ReadableToken<Iterable<NoInfer<K>>> | Iterable<NoInfer<K>>) => () => void;
201
173
  //#endregion
202
174
  //#region src/realtime-server/realtime-mutable-provider.d.ts
203
175
  type MutableProvider = ReturnType<typeof realtimeMutableProvider>;
204
176
  declare function realtimeMutableProvider({
205
177
  socket,
206
- userKey,
178
+ consumer,
207
179
  store
208
180
  }: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
209
181
  //#endregion
@@ -211,7 +183,7 @@ declare function realtimeMutableProvider({
211
183
  type StateProvider = ReturnType<typeof realtimeStateProvider>;
212
184
  declare function realtimeStateProvider({
213
185
  socket,
214
- userKey,
186
+ consumer,
215
187
  store
216
188
  }: ServerConfig): <C extends Json.Serializable, S extends C>(clientToken: AtomIO.WritableToken<C>, serverData?: AtomIO.ReadableToken<S> | S) => () => void;
217
189
  //#endregion
@@ -219,10 +191,46 @@ declare function realtimeStateProvider({
219
191
  type StateReceiver = ReturnType<typeof realtimeStateReceiver>;
220
192
  declare function realtimeStateReceiver({
221
193
  socket,
222
- userKey,
194
+ consumer,
223
195
  store
224
196
  }: ServerConfig): <S extends Json.Serializable, C extends S>(schema: StandardSchemaV1<unknown, C>, clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
225
197
  //#endregion
198
+ //#region src/realtime-server/server-config.d.ts
199
+ type ServerConfig = {
200
+ socket: Socket;
201
+ consumer: RoomKey | UserKey;
202
+ store?: RootStore;
203
+ };
204
+ type UserServerConfig = {
205
+ socket: Socket;
206
+ consumer: UserKey;
207
+ store?: RootStore;
208
+ };
209
+ /** Socket Handshake details--taken from socket.io */
210
+ type Handshake = {
211
+ /** The headers sent as part of the handshake */
212
+ headers: IncomingHttpHeaders;
213
+ /** The date of creation (as string) */
214
+ time: string;
215
+ /** The ip of the client */
216
+ address: string;
217
+ /** Whether the connection is cross-domain */
218
+ xdomain: boolean;
219
+ /** Whether the connection is secure */
220
+ secure: boolean;
221
+ /** The date of creation (as unix timestamp) */
222
+ issued: number;
223
+ /** The request URL string */
224
+ url: string;
225
+ /** The query object */
226
+ query: ParsedUrlQuery;
227
+ /** The auth object */
228
+ auth: {
229
+ [key: string]: any;
230
+ };
231
+ };
232
+ declare function realtime(server: Server, auth: (handshake: Handshake) => Loadable<Error | UserKey>, onConnect: (config: UserServerConfig) => Loadable<() => Loadable<void>>, store?: RootStore): () => Promise<void>;
233
+ //#endregion
226
234
  //#region src/realtime-server/server-socket-state.d.ts
227
235
  type SocketSystemHierarchy = Hierarchy<[{
228
236
  above: `root`;
@@ -230,8 +238,8 @@ type SocketSystemHierarchy = Hierarchy<[{
230
238
  }]>;
231
239
  declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
232
240
  declare const socketKeysAtom: MutableAtomToken<UList<SocketKey>>;
233
- declare const userKeysAtom: MutableAtomToken<UList<UserKey>>;
241
+ declare const onlineUsersAtom: MutableAtomToken<UList<UserKey>>;
234
242
  declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
235
243
  //#endregion
236
- export { ChildProcess, ChildSocket, CustomSocket, DestroyRoomConfig, EventBuffer, EventPayload, Events, FamilyProvider, Handshake, MutableFamilyProvider, MutableProvider, PROOF_OF_LIFE_SIGNAL, ParentProcess, ParentSocket, ProvideContinuity, ProvideEnterAndExitConfig, ProvideRoomsConfig, ROOMS, RoomMap, ServerConfig, SocketSystemHierarchy, SpawnRoomConfig, StateProvider, StateReceiver, StderrLog, SubjectSocket, destroyRoom, prepareToProvideContinuity, provideEnterAndExit, provideRooms, realtime, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
244
+ export { ChildProcess, ChildSocket, CustomSocket, DestroyRoomConfig, EventBuffer, EventPayload, Events, FamilyProvider, Handshake, MutableFamilyProvider, MutableProvider, PROOF_OF_LIFE_SIGNAL, ParentProcess, ParentSocket, ProvideContinuity, ProvideEnterAndExitConfig, ProvideRoomsConfig, ROOMS, RoomMap, ServerConfig, SocketSystemHierarchy, SpawnRoomConfig, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserServerConfig, destroyRoom, onlineUsersAtom, prepareToProvideContinuity, provideEnterAndExit, provideRooms, realtime, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, socketAtoms, socketKeysAtom, spawnRoom, usersOfSockets };
237
245
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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>"],"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/server-config.ts","../../src/realtime-server/provide-rooms.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-socket-state.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>>","onlineUsersAtom: MutableAtomToken<UList<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\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/ipc-sockets/parent-socket.ts","../../src/realtime-server/provide-rooms.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","../../src/realtime-server/server-socket-state.ts"],"sourcesContent":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import { IMPLICIT, OWN_OP, Subject, actUponStore, editRelationsInStore, findInSt
2
2
  import { Realm, atomFamily, join, mutableAtom } from "atom.io";
3
3
  import { parseJson, stringifyJson } from "atom.io/json";
4
4
  import { UList } from "atom.io/transceivers/u-list";
5
- import { castSocket, employSocket, isRoomKey, isSocketKey, isUserKey, mutexAtoms, ownersOfRooms, roomKeysAtom, usersInRooms, visibleUsersInRoomsSelector } from "atom.io/realtime";
5
+ import { castSocket, employSocket, isRoomKey, isSocketKey, isUserKey, mutexAtoms, ownersOfRooms, roomKeysAtom, usersInRooms, visibilityFromRoomSelector, visibleUsersInRoomsSelector } from "atom.io/realtime";
6
+ import { myRoomKeyAtom, myUserKeyAtom } from "atom.io/realtime-client";
6
7
  import { spawn } from "node:child_process";
7
8
 
8
9
  //#region src/realtime-server/continuity/continuity-store.ts
@@ -541,8 +542,12 @@ const isAvailable = (exposedSubKeys, subKey) => {
541
542
  for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
542
543
  return false;
543
544
  };
544
- function realtimeMutableFamilyProvider({ socket, userKey, store = IMPLICIT.STORE }) {
545
+ function realtimeMutableFamilyProvider({ socket, consumer, store = IMPLICIT.STORE }) {
545
546
  return function mutableFamilyProvider(family, index) {
547
+ const [dynamicIndex, staticIndex] = (() => {
548
+ if (typeof index === `object` && `key` in index && `type` in index) return [index, void 0];
549
+ return [void 0, index];
550
+ })();
546
551
  const coreSubscriptions = /* @__PURE__ */ new Set();
547
552
  const clearCoreSubscriptions = () => {
548
553
  for (const unsub of coreSubscriptions) unsub();
@@ -580,21 +585,24 @@ function realtimeMutableFamilyProvider({ socket, userKey, store = IMPLICIT.STORE
580
585
  }));
581
586
  };
582
587
  const start = () => {
583
- store.logger.info(`👀`, `user`, userKey, `can subscribe to family "${family.key}"`);
588
+ store.logger.info(`👀`, `user`, consumer, `can subscribe to family "${family.key}"`);
584
589
  coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
585
- if (isAvailable(getFromStore(store, index), subKey)) {
586
- store.logger.info(`👀`, `user`, userKey, `is approved for a subscription to`, subKey, `in family "${family.key}"`);
590
+ let exposedSubKeys;
591
+ if (dynamicIndex) exposedSubKeys = getFromStore(store, dynamicIndex);
592
+ else exposedSubKeys = staticIndex;
593
+ if (isAvailable(exposedSubKeys, subKey)) {
594
+ store.logger.info(`👀`, `user`, consumer, `is approved for a subscription to`, subKey, `in family "${family.key}"`);
587
595
  exposeFamilyMembers(subKey);
588
596
  } else {
589
- store.logger.info(`❌`, `user`, userKey, `is denied for a subscription to`, subKey, `in family "${family.key}"`);
597
+ store.logger.info(`❌`, `user`, consumer, `is denied for a subscription to`, subKey, `in family "${family.key}"`);
590
598
  familyMemberSubscriptionsWanted.add(stringifyJson(subKey));
591
599
  socket.emit(`unavailable:${family.key}`, subKey);
592
600
  }
593
601
  }));
594
- coreSubscriptions.add(subscribeToState(store, index, `expose-family:${family.key}:${socket.id}`, ({ newValue: newExposedSubKeys }) => {
595
- store.logger.info(`👀`, `user`, userKey, `has the following keys available for family "${family.key}"`, newExposedSubKeys);
602
+ if (dynamicIndex) coreSubscriptions.add(subscribeToState(store, dynamicIndex, `expose-family:${family.key}:${socket.id}`, ({ newValue: newExposedSubKeys }) => {
603
+ store.logger.info(`👀`, `user`, consumer, `has the following keys available for family "${family.key}"`, newExposedSubKeys);
596
604
  for (const subKey of newExposedSubKeys) if (familyMemberSubscriptionsWanted.has(stringifyJson(subKey))) {
597
- store.logger.info(`👀`, `user`, userKey, `is retroactively approved for a subscription to`, subKey, `in family "${family.key}"`);
605
+ store.logger.info(`👀`, `user`, consumer, `is retroactively approved for a subscription to`, subKey, `in family "${family.key}"`);
598
606
  exposeFamilyMembers(subKey);
599
607
  }
600
608
  }));
@@ -609,7 +617,7 @@ function realtimeMutableFamilyProvider({ socket, userKey, store = IMPLICIT.STORE
609
617
 
610
618
  //#endregion
611
619
  //#region src/realtime-server/realtime-mutable-provider.ts
612
- function realtimeMutableProvider({ socket, userKey, store = IMPLICIT.STORE }) {
620
+ function realtimeMutableProvider({ socket, consumer, store = IMPLICIT.STORE }) {
613
621
  return function mutableProvider(token) {
614
622
  const subscriptions = /* @__PURE__ */ new Set();
615
623
  const clearSubscriptions = () => {
@@ -619,16 +627,16 @@ function realtimeMutableProvider({ socket, userKey, store = IMPLICIT.STORE }) {
619
627
  const jsonToken = getJsonToken(store, token);
620
628
  const trackerToken = getUpdateToken(token);
621
629
  const start = () => {
622
- store.logger.info(`👀`, `user`, userKey, `can subscribe to state "${token.key}"`);
630
+ store.logger.info(`👀`, `user`, consumer, `can subscribe to state "${token.key}"`);
623
631
  subscriptions.add(employSocket(socket, `sub:${token.key}`, () => {
624
- store.logger.info(`👀`, `user`, userKey, `subscribes to state "${token.key}"`);
632
+ store.logger.info(`👀`, `user`, consumer, `subscribes to state "${token.key}"`);
625
633
  clearSubscriptions();
626
634
  socket.emit(`init:${token.key}`, getFromStore(store, jsonToken));
627
635
  subscriptions.add(subscribeToState(store, trackerToken, `expose-single:${socket.id}`, ({ newValue }) => {
628
636
  socket.emit(`next:${token.key}`, newValue);
629
637
  }));
630
638
  subscriptions.add(employSocket(socket, `unsub:${token.key}`, () => {
631
- store.logger.info(`🙈`, `user`, userKey, `unsubscribes from state "${token.key}"`);
639
+ store.logger.info(`🙈`, `user`, consumer, `unsubscribes from state "${token.key}"`);
632
640
  clearSubscriptions();
633
641
  start();
634
642
  }));
@@ -639,6 +647,47 @@ function realtimeMutableProvider({ socket, userKey, store = IMPLICIT.STORE }) {
639
647
  };
640
648
  }
641
649
 
650
+ //#endregion
651
+ //#region src/realtime-server/realtime-state-provider.ts
652
+ function isReadableToken(input) {
653
+ return typeof input === `object` && input !== null && `key` in input && `type` in input;
654
+ }
655
+ function realtimeStateProvider({ socket, consumer, store = IMPLICIT.STORE }) {
656
+ store.logger.info(`🔌`, `user`, consumer, `initialized state provider`);
657
+ return function stateProvider(clientToken, serverData = clientToken) {
658
+ const isStatic = !isReadableToken(serverData);
659
+ const subscriptions = /* @__PURE__ */ new Set();
660
+ const clearSubscriptions = () => {
661
+ for (const unsub of subscriptions) unsub();
662
+ subscriptions.clear();
663
+ };
664
+ const start = () => {
665
+ if (isStatic) store.logger.info(`👀`, `user`, consumer, `will be served`, serverData, `as "${clientToken.key}"`);
666
+ else store.logger.info(`👀`, `user`, consumer, `can subscribe to state "${serverData.key}" as "${clientToken.key}"`);
667
+ subscriptions.add(employSocket(socket, `sub:${clientToken.key}`, () => {
668
+ if (isStatic) {
669
+ store.logger.info(`👀`, `user`, consumer, `requests`, `"${clientToken.key}"`);
670
+ socket.emit(`serve:${clientToken.key}`, serverData);
671
+ } else {
672
+ store.logger.info(`👀`, `user`, consumer, `subscribes to state "${serverData.key}"`, clientToken === serverData ? `directly` : `as "${clientToken.key}"`);
673
+ clearSubscriptions();
674
+ socket.emit(`serve:${clientToken.key}`, getFromStore(store, serverData));
675
+ subscriptions.add(subscribeToState(store, serverData, `expose-single:${socket.id}`, ({ newValue }) => {
676
+ socket.emit(`serve:${clientToken.key}`, newValue);
677
+ }));
678
+ subscriptions.add(employSocket(socket, `unsub:${serverData.key}`, () => {
679
+ store.logger.info(`🙈`, `user`, consumer, `unsubscribes from state "${serverData.key}", served`, clientToken === serverData ? `directly` : `as "${clientToken.key}"`);
680
+ clearSubscriptions();
681
+ start();
682
+ }));
683
+ }
684
+ }));
685
+ };
686
+ start();
687
+ return clearSubscriptions;
688
+ };
689
+ }
690
+
642
691
  //#endregion
643
692
  //#region src/realtime-server/provide-rooms.ts
644
693
  const ROOMS = globalThis.ATOM_IO_REALTIME_SERVER_ROOMS ?? (globalThis.ATOM_IO_REALTIME_SERVER_ROOMS = /* @__PURE__ */ new Map());
@@ -648,17 +697,17 @@ function spawnRoom({ store, socket, userKey, resolveRoomScript }) {
648
697
  store.logger.info(`📡`, `socket`, socket.id ?? `[ID MISSING?!]`, `👤 ${userKey} spawns room ${roomName}`);
649
698
  const roomKey = `room::${roomMeta.count++}`;
650
699
  const [command, args] = resolveRoomScript(roomName);
651
- const roomSocket = new ChildSocket(await new Promise((resolve) => {
652
- const room = spawn(command, args, { env: process.env });
700
+ const room = new ChildSocket(await new Promise((resolve) => {
701
+ const room$1 = spawn(command, args, { env: process.env });
653
702
  const resolver = (data) => {
654
703
  if (data.toString() === PROOF_OF_LIFE_SIGNAL) {
655
- room.stdout.off(`data`, resolver);
656
- resolve(room);
704
+ room$1.stdout.off(`data`, resolver);
705
+ resolve(room$1);
657
706
  }
658
707
  };
659
- room.stdout.on(`data`, resolver);
708
+ room$1.stdout.on(`data`, resolver);
660
709
  }), roomKey);
661
- ROOMS.set(roomKey, roomSocket);
710
+ ROOMS.set(roomKey, room);
662
711
  setIntoStore(store, roomKeysAtom, (index) => (index.add(roomKey), index));
663
712
  editRelationsInStore(store, ownersOfRooms, (relations) => {
664
713
  relations.set({
@@ -666,23 +715,41 @@ function spawnRoom({ store, socket, userKey, resolveRoomScript }) {
666
715
  user: userKey
667
716
  });
668
717
  });
669
- roomSocket.on(`close`, () => {
718
+ const provideMutableFamily = realtimeMutableFamilyProvider({
719
+ socket: room,
720
+ consumer: roomKey,
721
+ store
722
+ });
723
+ const unsubFromRoomKey = realtimeStateProvider({
724
+ socket: room,
725
+ consumer: roomKey,
726
+ store
727
+ })(myRoomKeyAtom, roomKey);
728
+ const unsubFromOwnerKeys = provideMutableFamily(getInternalRelationsFromStore(store, ownersOfRooms), [roomKey]);
729
+ const unsubFromUsersInRooms = provideMutableFamily(getInternalRelationsFromStore(store, usersInRooms), findInStore(store, visibilityFromRoomSelector, roomKey));
730
+ room.on(`close`, () => {
731
+ unsubFromRoomKey();
732
+ unsubFromOwnerKeys();
733
+ unsubFromUsersInRooms();
670
734
  destroyRoom({
671
735
  store,
672
736
  socket,
673
737
  userKey
674
738
  })(roomKey);
675
739
  });
676
- return roomSocket;
740
+ return room;
677
741
  };
678
742
  }
679
743
  function provideEnterAndExit({ store, socket, roomSocket, userKey }) {
680
744
  const enterRoom = (roomKey) => {
681
745
  store.logger.info(`📡`, `socket`, socket.id ?? `[ID MISSING?!]`, `👤 ${userKey} enters room ${roomKey}`);
746
+ const dcUserFromRoom = () => {
747
+ toRoom([`user-leaves`]);
748
+ };
682
749
  const exitRoom = () => {
683
750
  store.logger.info(`📡`, `socket`, socket.id ?? `[ID MISSING?!]`, `👤 ${userKey} leaves room ${roomKey}`);
684
751
  socket.offAny(forward);
685
- toRoom([`user-leaves`]);
752
+ dcUserFromRoom();
686
753
  editRelationsInStore(store, usersInRooms, (relations) => {
687
754
  relations.delete({
688
755
  room: roomKey,
@@ -692,8 +759,6 @@ function provideEnterAndExit({ store, socket, roomSocket, userKey }) {
692
759
  roomSocket.off(`leaveRoom`, exitRoom);
693
760
  roomSocket.on(`joinRoom`, enterRoom);
694
761
  };
695
- roomSocket.on(`leaveRoom`, exitRoom);
696
- roomSocket.off(`joinRoom`, enterRoom);
697
762
  const roomQueue = [];
698
763
  const pushToRoomQueue = (payload) => {
699
764
  roomQueue.push(payload);
@@ -712,7 +777,7 @@ function provideEnterAndExit({ store, socket, roomSocket, userKey }) {
712
777
  const childSocket = ROOMS.get(roomKey);
713
778
  if (!childSocket) {
714
779
  store.logger.error(`❌`, `unknown`, roomKey, `no room found with this id`);
715
- return null;
780
+ return;
716
781
  }
717
782
  childSocket.onAny((...payload) => {
718
783
  socket.emit(...payload);
@@ -725,6 +790,9 @@ function provideEnterAndExit({ store, socket, roomSocket, userKey }) {
725
790
  const payload = roomQueue.shift();
726
791
  if (payload) toRoom(payload);
727
792
  }
793
+ socket.on(`disconnect`, dcUserFromRoom);
794
+ roomSocket.on(`leaveRoom`, exitRoom);
795
+ roomSocket.off(`joinRoom`, enterRoom);
728
796
  };
729
797
  roomSocket.on(`joinRoom`, enterRoom);
730
798
  return enterRoom;
@@ -754,7 +822,7 @@ function provideRooms({ store = IMPLICIT.STORE, socket, resolveRoomScript, roomN
754
822
  const unsubFromRoomKeys = realtimeMutableProvider({
755
823
  socket,
756
824
  store,
757
- userKey
825
+ consumer: userKey
758
826
  })(roomKeysAtom);
759
827
  const usersInRoomsAtoms = getInternalRelationsFromStore(store, usersInRooms);
760
828
  const [, usersInRoomsAtomsUsersOnly] = getInternalRelationsFromStore(store, usersInRooms, `split`);
@@ -763,7 +831,7 @@ function provideRooms({ store = IMPLICIT.STORE, socket, resolveRoomScript, roomN
763
831
  const exposeMutableFamily = realtimeMutableFamilyProvider({
764
832
  socket,
765
833
  store,
766
- userKey
834
+ consumer: userKey
767
835
  });
768
836
  const unsubFromUsersInRooms = exposeMutableFamily(usersInRoomsAtoms, usersWhoseRoomsCanBeSeenSelector);
769
837
  const unsubFromOwnersOfRooms = exposeMutableFamily(ownersOfRoomsAtoms, usersWhoseRoomsCanBeSeenSelector);
@@ -828,8 +896,12 @@ function createRoomSocketGuard(roomNames) {
828
896
 
829
897
  //#endregion
830
898
  //#region src/realtime-server/realtime-family-provider.ts
831
- function realtimeAtomFamilyProvider({ socket, userKey, store = IMPLICIT.STORE }) {
899
+ function realtimeAtomFamilyProvider({ socket, consumer, store = IMPLICIT.STORE }) {
832
900
  return function familyProvider(family, index) {
901
+ const [dynamicIndex, staticIndex] = (() => {
902
+ if (typeof index === `object` && `key` in index && `type` in index) return [index, void 0];
903
+ return [void 0, index];
904
+ })();
833
905
  const coreSubscriptions = /* @__PURE__ */ new Set();
834
906
  const clearCoreSubscriptions = () => {
835
907
  for (const unsub of coreSubscriptions) unsub();
@@ -861,7 +933,7 @@ function realtimeAtomFamilyProvider({ socket, userKey, store = IMPLICIT.STORE })
861
933
  socket.emit(`serve:${token.key}`, newValue);
862
934
  }));
863
935
  familyMemberSubscriptions.set(`${token.key}:unsub`, employSocket(socket, `unsub:${token.key}`, () => {
864
- store.logger.info(`🙈`, `user`, userKey, `unsubscribed from state "${token.key}"`);
936
+ store.logger.info(`🙈`, `user`, consumer, `unsubscribed from state "${token.key}"`);
865
937
  fillUnsubRequest(token.key);
866
938
  }));
867
939
  };
@@ -870,21 +942,24 @@ function realtimeAtomFamilyProvider({ socket, userKey, store = IMPLICIT.STORE })
870
942
  return false;
871
943
  };
872
944
  const start = () => {
873
- store.logger.info(`👀`, `user`, userKey, `can subscribe to family "${family.key}"`);
945
+ store.logger.info(`👀`, `user`, consumer, `can subscribe to family "${family.key}"`);
874
946
  coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
875
- if (isAvailable$1(getFromStore(store, index), subKey)) {
876
- store.logger.info(`👀`, `user`, userKey, `is approved for a subscription to`, subKey, `in family "${family.key}"`);
947
+ let exposedSubKeys;
948
+ if (dynamicIndex) exposedSubKeys = getFromStore(store, dynamicIndex);
949
+ else exposedSubKeys = staticIndex;
950
+ if (isAvailable$1(exposedSubKeys, subKey)) {
951
+ store.logger.info(`👀`, `user`, consumer, `is approved for a subscription to`, subKey, `in family "${family.key}"`);
877
952
  exposeFamilyMembers(subKey);
878
953
  } else {
879
- store.logger.info(`❌`, `user`, userKey, `is denied for a subscription to`, subKey, `in family "${family.key}"`);
954
+ store.logger.info(`❌`, `user`, consumer, `is denied for a subscription to`, subKey, `in family "${family.key}"`);
880
955
  familyMemberSubscriptionsWanted.add(stringifyJson(subKey));
881
956
  socket.emit(`unavailable:${family.key}`, subKey);
882
957
  }
883
958
  }));
884
- coreSubscriptions.add(subscribeToState(store, index, `expose-family:${family.key}:${socket.id}`, ({ newValue: newExposedSubKeys }) => {
885
- store.logger.info(`👀`, `user`, userKey, `has the following keys available for family "${family.key}"`, newExposedSubKeys);
959
+ if (dynamicIndex) coreSubscriptions.add(subscribeToState(store, dynamicIndex, `expose-family:${family.key}:${socket.id}`, ({ newValue: newExposedSubKeys }) => {
960
+ store.logger.info(`👀`, `user`, consumer, `has the following keys available for family "${family.key}"`, newExposedSubKeys);
886
961
  for (const subKey of newExposedSubKeys) if (familyMemberSubscriptionsWanted.has(stringifyJson(subKey))) {
887
- store.logger.info(`👀`, `user`, userKey, `is retroactively approved for a subscription to`, subKey, `in family "${family.key}"`);
962
+ store.logger.info(`👀`, `user`, consumer, `is retroactively approved for a subscription to`, subKey, `in family "${family.key}"`);
888
963
  exposeFamilyMembers(subKey);
889
964
  }
890
965
  }));
@@ -897,50 +972,9 @@ function realtimeAtomFamilyProvider({ socket, userKey, store = IMPLICIT.STORE })
897
972
  };
898
973
  }
899
974
 
900
- //#endregion
901
- //#region src/realtime-server/realtime-state-provider.ts
902
- function isReadableToken(input) {
903
- return typeof input === `object` && input !== null && `key` in input && `type` in input;
904
- }
905
- function realtimeStateProvider({ socket, userKey, store = IMPLICIT.STORE }) {
906
- store.logger.info(`🔌`, `user`, userKey, `initialized state provider`);
907
- return function stateProvider(clientToken, serverData = clientToken) {
908
- const isStatic = !isReadableToken(serverData);
909
- const subscriptions = /* @__PURE__ */ new Set();
910
- const clearSubscriptions = () => {
911
- for (const unsub of subscriptions) unsub();
912
- subscriptions.clear();
913
- };
914
- const start = () => {
915
- if (isStatic) store.logger.info(`👀`, `user`, userKey, `will be served`, serverData, `as "${clientToken.key}"`);
916
- else store.logger.info(`👀`, `user`, userKey, `can subscribe to state "${serverData.key}" as "${clientToken.key}"`);
917
- subscriptions.add(employSocket(socket, `sub:${clientToken.key}`, () => {
918
- if (isStatic) {
919
- store.logger.info(`👀`, `user`, userKey, `requests`, `"${clientToken.key}"`);
920
- socket.emit(`serve:${clientToken.key}`, serverData);
921
- } else {
922
- store.logger.info(`👀`, `user`, userKey, `subscribes to state "${serverData.key}"`, clientToken === serverData ? `directly` : `as "${clientToken.key}"`);
923
- clearSubscriptions();
924
- socket.emit(`serve:${clientToken.key}`, getFromStore(store, serverData));
925
- subscriptions.add(subscribeToState(store, serverData, `expose-single:${socket.id}`, ({ newValue }) => {
926
- socket.emit(`serve:${clientToken.key}`, newValue);
927
- }));
928
- subscriptions.add(employSocket(socket, `unsub:${serverData.key}`, () => {
929
- store.logger.info(`🙈`, `user`, userKey, `unsubscribes from state "${serverData.key}", served`, clientToken === serverData ? `directly` : `as "${clientToken.key}"`);
930
- clearSubscriptions();
931
- start();
932
- }));
933
- }
934
- }));
935
- };
936
- start();
937
- return clearSubscriptions;
938
- };
939
- }
940
-
941
975
  //#endregion
942
976
  //#region src/realtime-server/realtime-state-receiver.ts
943
- function realtimeStateReceiver({ socket, userKey, store = IMPLICIT.STORE }) {
977
+ function realtimeStateReceiver({ socket, consumer, store = IMPLICIT.STORE }) {
944
978
  return function stateReceiver(schema, clientToken, serverToken = clientToken) {
945
979
  const socketKey = `socket::${socket.id}`;
946
980
  const mutexAtom = findInStore(store, mutexAtoms, serverToken.key);
@@ -954,7 +988,7 @@ function realtimeStateReceiver({ socket, userKey, store = IMPLICIT.STORE }) {
954
988
  subscriptions.add(employSocket(socket, `pub:${clientToken.key}`, async (newValue) => {
955
989
  const parsed = await schema[`~standard`].validate(newValue);
956
990
  if (parsed.issues) {
957
- store.logger.error(`❌`, `user`, userKey, `attempted to publish invalid value`, newValue, `to state "${serverToken.key}"`);
991
+ store.logger.error(`❌`, `user`, consumer, `attempted to publish invalid value`, newValue, `to state "${serverToken.key}"`);
958
992
  return;
959
993
  }
960
994
  setIntoStore(store, serverToken, parsed.value);
@@ -996,11 +1030,11 @@ const socketAtoms = atomFamily({
996
1030
  default: null
997
1031
  });
998
1032
  const socketKeysAtom = mutableAtom({
999
- key: `socketsIndex`,
1033
+ key: `socketKeys`,
1000
1034
  class: UList
1001
1035
  });
1002
- const userKeysAtom = mutableAtom({
1003
- key: `usersIndex`,
1036
+ const onlineUsersAtom = mutableAtom({
1037
+ key: `onlineUsers`,
1004
1038
  class: UList
1005
1039
  });
1006
1040
  const usersOfSockets = join({
@@ -1027,29 +1061,26 @@ function realtime(server, auth, onConnect, store = IMPLICIT.STORE) {
1027
1061
  editRelationsInStore(store, usersOfSockets, (relations) => {
1028
1062
  relations.set(userClaim, socketClaim);
1029
1063
  });
1030
- setIntoStore(store, userKeysAtom, (index) => index.add(userClaim));
1064
+ setIntoStore(store, onlineUsersAtom, (index) => index.add(userClaim));
1031
1065
  setIntoStore(store, socketKeysAtom, (index) => index.add(socketClaim));
1032
1066
  next();
1033
1067
  }).on(`connection`, async (socket) => {
1034
1068
  const socketKey = `socket::${socket.id}`;
1035
- const userKeyState = findRelationsInStore(store, usersOfSockets, socketKey).userKeyOfSocket;
1036
- const userKey = getFromStore(store, userKeyState);
1069
+ const userKeySelector = findRelationsInStore(store, usersOfSockets, socketKey).userKeyOfSocket;
1070
+ const userKey = getFromStore(store, userKeySelector);
1037
1071
  const serverConfig = {
1038
1072
  store,
1039
1073
  socket,
1040
- userKey
1074
+ consumer: userKey
1041
1075
  };
1042
- const unsubFromMyUserKey = realtimeStateProvider(serverConfig)({
1043
- key: `myUserKey`,
1044
- type: `atom`
1045
- }, userKey);
1076
+ const unsubFromMyUserKey = realtimeStateProvider(serverConfig)(myUserKeyAtom, userKey);
1046
1077
  const disposeServices = await onConnect(serverConfig);
1047
1078
  socket.on(`disconnect`, async () => {
1048
1079
  store.logger.info(`📡`, `socket`, socketKey, `👤 ${userKey} disconnects`);
1049
1080
  await disposeServices();
1050
1081
  unsubFromMyUserKey();
1051
1082
  editRelationsInStore(store, usersOfSockets, (rel) => rel.delete(socketKey));
1052
- setIntoStore(store, userKeysAtom, (keys) => (keys.delete(userKey), keys));
1083
+ setIntoStore(store, onlineUsersAtom, (keys) => (keys.delete(userKey), keys));
1053
1084
  setIntoStore(store, socketKeysAtom, (keys) => (keys.delete(socketKey), keys));
1054
1085
  });
1055
1086
  });
@@ -1060,5 +1091,5 @@ function realtime(server, auth, onConnect, store = IMPLICIT.STORE) {
1060
1091
  }
1061
1092
 
1062
1093
  //#endregion
1063
- export { ChildSocket, CustomSocket, PROOF_OF_LIFE_SIGNAL, ParentSocket, ROOMS, SubjectSocket, destroyRoom, prepareToProvideContinuity, provideEnterAndExit, provideRooms, realtime, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
1094
+ export { ChildSocket, CustomSocket, PROOF_OF_LIFE_SIGNAL, ParentSocket, ROOMS, SubjectSocket, destroyRoom, onlineUsersAtom, prepareToProvideContinuity, provideEnterAndExit, provideRooms, realtime, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, socketAtoms, socketKeysAtom, spawnRoom, usersOfSockets };
1064
1095
  //# sourceMappingURL=index.js.map