atom.io 0.45.5 → 0.46.1

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 (31) hide show
  1. package/dist/internal/index.js +2 -7
  2. package/dist/internal/index.js.map +1 -1
  3. package/dist/react-devtools/index.d.ts.map +1 -1
  4. package/dist/realtime/index.d.ts +6 -3
  5. package/dist/realtime/index.d.ts.map +1 -1
  6. package/dist/realtime/index.js +9 -1
  7. package/dist/realtime/index.js.map +1 -1
  8. package/dist/realtime-server/index.d.ts +73 -50
  9. package/dist/realtime-server/index.d.ts.map +1 -1
  10. package/dist/realtime-server/index.js +222 -182
  11. package/dist/realtime-server/index.js.map +1 -1
  12. package/dist/realtime-testing/index.d.ts +1 -2
  13. package/dist/realtime-testing/index.d.ts.map +1 -1
  14. package/dist/realtime-testing/index.js +31 -53
  15. package/dist/realtime-testing/index.js.map +1 -1
  16. package/package.json +10 -10
  17. package/src/internal/subscribe/subscribe-to-state.ts +9 -18
  18. package/src/realtime/cast-socket.ts +1 -0
  19. package/src/realtime/shared-room-store.ts +15 -0
  20. package/src/realtime/socket-interface.ts +5 -1
  21. package/src/realtime-server/index.ts +3 -2
  22. package/src/realtime-server/ipc-sockets/custom-socket.ts +18 -2
  23. package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -1
  24. package/src/realtime-server/{realtime-server-stores/provide-rooms.ts → provide-rooms.ts} +32 -57
  25. package/src/realtime-server/realtime-state-provider.ts +5 -3
  26. package/src/realtime-server/realtime-state-receiver.ts +19 -3
  27. package/src/realtime-server/server-config.ts +112 -1
  28. package/src/realtime-server/{realtime-server-stores/server-user-store.ts → server-socket-state.ts} +1 -8
  29. package/src/realtime-testing/setup-realtime-test.tsx +38 -83
  30. package/src/realtime-server/realtime-server-stores/index.ts +0 -3
  31. package/src/realtime-server/realtime-server-stores/provide-identity.ts +0 -18
@@ -5,19 +5,10 @@ import type { RenderResult } from "@testing-library/react"
5
5
  import { prettyDOM, render } from "@testing-library/react"
6
6
  import * as AtomIO from "atom.io"
7
7
  import type { Store } from "atom.io/internal"
8
- import {
9
- clearStore,
10
- editRelationsInStore,
11
- findInStore,
12
- findRelationsInStore,
13
- getFromStore,
14
- IMPLICIT,
15
- setIntoStore,
16
- } from "atom.io/internal"
8
+ import { clearStore, IMPLICIT } from "atom.io/internal"
17
9
  import { toEntries } from "atom.io/json"
18
10
  import * as AR from "atom.io/react"
19
- import type * as RT from "atom.io/realtime"
20
- import * as RTC from "atom.io/realtime-client"
11
+ import * as RT from "atom.io/realtime"
21
12
  import * as RTR from "atom.io/realtime-react"
22
13
  import * as RTS from "atom.io/realtime-server"
23
14
  import { UList } from "atom.io/transceivers/u-list"
@@ -64,7 +55,7 @@ function prefixLogger(store: Store, prefix: string) {
64
55
  export type TestSetupOptions = {
65
56
  immortal?: { server?: boolean }
66
57
  server: (tools: {
67
- socket: SocketIO.Socket
58
+ socket: RT.Socket
68
59
  silo: AtomIO.Silo
69
60
  userKey: RT.UserKey
70
61
  enableLogging: () => void
@@ -124,8 +115,6 @@ export const setupRealtimeTestServer = (
124
115
  },
125
116
  IMPLICIT.STORE,
126
117
  )
127
- // prefixLogger(silo.store, `server`)
128
- const socketRealm = new AtomIO.Realm<RTS.SocketSystemHierarchy>(silo.store)
129
118
 
130
119
  const httpServer = http.createServer((_, res) => res.end(`Hello World!`))
131
120
  const address = httpServer.listen().address()
@@ -133,76 +122,42 @@ export const setupRealtimeTestServer = (
133
122
  typeof address === `string` ? null : address === null ? null : address.port
134
123
  if (port === null) throw new Error(`Could not determine port for test server`)
135
124
 
136
- const server = new SocketIO.Server(httpServer).use((socket, next) => {
137
- const { token, username } = socket.handshake.auth
138
- if (token === `test` && socket.id) {
139
- const userClaim = socketRealm.allocate(`root`, username as RT.UserKey)
140
- const socketClaim = socketRealm.allocate(`root`, `socket::${socket.id}`)
141
- const socketState = findInStore(silo.store, RTS.socketAtoms, socketClaim)
142
- setIntoStore(silo.store, socketState, socket)
143
- editRelationsInStore(silo.store, RTS.usersOfSockets, (relations) => {
144
- relations.set(userClaim, socketClaim)
145
- })
146
- setIntoStore(silo.store, RTS.userKeysAtom, (index) => index.add(userClaim))
147
- setIntoStore(silo.store, RTS.socketKeysAtom, (index) =>
148
- index.add(socketClaim),
149
- )
150
- next()
151
- } else {
152
- next(new Error(`Authentication error`))
153
- }
154
- })
155
-
156
- const socketServices = new Set<() => void>()
157
- const disposeAllSocketServices = () => {
158
- for (const disposeService of socketServices) disposeService()
159
- }
160
-
161
- server.on(`connection`, (socket: SocketIO.Socket) => {
162
- const userKeyState = findRelationsInStore(
163
- silo.store,
164
- RTS.usersOfSockets,
165
- `socket::${socket.id}`,
166
- ).userKeyOfSocket
167
- const userKey = getFromStore(silo.store, userKeyState)!
168
- function enableLogging() {
169
- prefixLogger(silo.store, `server`)
170
- socket.onAny((event, ...args) => {
171
- console.log(`🛰 `, userKey, event, ...args)
172
- })
173
- socket.onAnyOutgoing((event, ...args) => {
174
- console.log(`🛰 >>`, userKey, event, ...args)
175
- })
176
- socket.on(`disconnect`, () => {
177
- console.log(`${userKey} disconnected`)
125
+ const server = new SocketIO.Server(httpServer)
126
+ const dispose = RTS.realtime(
127
+ server,
128
+ (handshake) => {
129
+ const { token, username } = handshake.auth
130
+ if (RT.isUserKey(username) && token === `test`) {
131
+ return username
132
+ }
133
+ return new Error(`Authentication error`)
134
+ },
135
+ (config) => {
136
+ const { socket, userKey } = config
137
+ function enableLogging() {
138
+ prefixLogger(silo.store, `server`)
139
+ socket.onAny((event, ...args) => {
140
+ console.log(`🛰 `, userKey, event, ...args)
141
+ })
142
+ socket.onAnyOutgoing((event, ...args) => {
143
+ console.log(`🛰 >>`, userKey, event, ...args)
144
+ })
145
+ socket.on(`disconnect`, () => {
146
+ console.log(`${userKey} disconnected`)
147
+ })
148
+ }
149
+ const disposeServices = options.server({
150
+ socket: config.socket,
151
+ userKey: config.userKey,
152
+ enableLogging,
153
+ silo,
178
154
  })
179
- }
180
- const disposeServices = options.server({
181
- socket,
182
- enableLogging,
183
- silo,
184
- userKey,
185
- })
186
- if (disposeServices) {
187
- socketServices.add(disposeServices)
188
- socket.on(`disconnect`, disposeServices)
189
- }
190
- })
191
-
192
- const dispose = async () => {
193
- disposeAllSocketServices()
194
- await server.close()
195
-
196
- // const roomKeys = getFromStore(silo.store, RT.roomIndex)
197
- // for (const roomKey of roomKeys) {
198
- // const roomState = findInStore(silo.store, RTS.roomSelectors, roomKey)
199
- // const room = getFromStore(silo.store, roomState)
200
- // if (room && !(room instanceof Promise)) {
201
- // room.process.kill()
202
- // }
203
- // } // ❗ POSSIBLY STILL NEEDED
204
- silo.store.valueMap.clear()
205
- }
155
+ return () => {
156
+ disposeServices?.()
157
+ }
158
+ },
159
+ silo.store,
160
+ )
206
161
 
207
162
  return {
208
163
  name: `SERVER`,
@@ -1,3 +0,0 @@
1
- export * from "./provide-identity"
2
- export * from "./provide-rooms"
3
- export * from "./server-user-store"
@@ -1,18 +0,0 @@
1
- import { IMPLICIT } from "atom.io/internal"
2
-
3
- import { realtimeStateProvider } from "../realtime-state-provider"
4
- import type { ServerConfig } from "../server-config"
5
-
6
- export function provideIdentity({
7
- store = IMPLICIT.STORE,
8
- socket,
9
- userKey,
10
- }: ServerConfig): void {
11
- const provideState = realtimeStateProvider({ socket, store, userKey })
12
-
13
- const unsub = provideState({ key: `myUserKey`, type: `atom` }, userKey)
14
-
15
- socket.on(`disconnect`, () => {
16
- unsub()
17
- })
18
- }