@devvit/realtime 0.12.1-next-2025-09-17-19-53-43-a7752f728.0 → 0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0

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.
@@ -1,7 +1,18 @@
1
1
  import type { JsonValue } from '@devvit/shared';
2
2
  export declare class RealtimeClient {
3
3
  #private;
4
- send(channel: string, msg: JsonValue): Promise<void>;
4
+ /**
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * import {context, realtime} from '@devvit/web/server';
9
+ * import type {T2} from '@devvit/web/shared'
10
+ *
11
+ * type RealtimeMessage = {x: number, y: number, t2: T2}
12
+ *
13
+ * await realtime.send<RealtimeMessage>({x: 1, y: 2, t2: context.userId})
14
+ * ```
15
+ */
16
+ send<Msg extends JsonValue>(channel: string, msg: Msg): Promise<void>;
5
17
  }
6
- export declare const realtime: RealtimeClient;
7
18
  //# sourceMappingURL=RealtimeClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealtimeClient.d.ts","sourceRoot":"","sources":["../src/RealtimeClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,qBAAa,cAAc;;IAGnB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3D;AAED,eAAO,MAAM,QAAQ,gBAAuB,CAAC"}
1
+ {"version":3,"file":"RealtimeClient.d.ts","sourceRoot":"","sources":["../src/RealtimeClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,qBAAa,cAAc;;IAGzB;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,GAAG,SAAS,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ5E"}
package/RealtimeClient.js CHANGED
@@ -18,6 +18,18 @@ export class RealtimeClient {
18
18
  _RealtimeClient_instances.add(this);
19
19
  _RealtimeClient_pluginCache.set(this, void 0);
20
20
  }
21
+ /**
22
+ * @example
23
+ *
24
+ * ```ts
25
+ * import {context, realtime} from '@devvit/web/server';
26
+ * import type {T2} from '@devvit/web/shared'
27
+ *
28
+ * type RealtimeMessage = {x: number, y: number, t2: T2}
29
+ *
30
+ * await realtime.send<RealtimeMessage>({x: 1, y: 2, t2: context.userId})
31
+ * ```
32
+ */
21
33
  async send(channel, msg) {
22
34
  // guarantee an object by wrapping msg. the key must align to useChannel().
23
35
  await __classPrivateFieldGet(this, _RealtimeClient_instances, "a", _RealtimeClient_plugin_get).Send({ channel, data: { msg } }, context.metadata);
@@ -26,4 +38,3 @@ export class RealtimeClient {
26
38
  _RealtimeClient_pluginCache = new WeakMap(), _RealtimeClient_instances = new WeakSet(), _RealtimeClient_plugin_get = function _RealtimeClient_plugin_get() {
27
39
  return (__classPrivateFieldSet(this, _RealtimeClient_pluginCache, __classPrivateFieldGet(this, _RealtimeClient_pluginCache, "f") ?? getDevvitConfig().use(RealtimeDefinition), "f"));
28
40
  };
29
- export const realtime = new RealtimeClient();
package/client.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { connectRealtime } from './realtime.js';
1
+ export { type Connection, connectRealtime, type ConnectRealtimeOptions, disconnectRealtime, isRealtimeConnected, } from './realtime.js';
2
2
  //# sourceMappingURL=client.d.ts.map
package/client.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,sBAAsB,EAC3B,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
package/client.js CHANGED
@@ -1 +1 @@
1
- export { connectRealtime } from './realtime.js';
1
+ export { connectRealtime, disconnectRealtime, isRealtimeConnected, } from './realtime.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/realtime",
3
- "version": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
3
+ "version": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,22 +35,22 @@
35
35
  "test:unit-with-coverage": "vitest run --coverage"
36
36
  },
37
37
  "dependencies": {
38
- "@devvit/protos": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
39
- "@devvit/shared": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
40
- "@devvit/shared-types": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0"
38
+ "@devvit/protos": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
39
+ "@devvit/shared": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
40
+ "@devvit/shared-types": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "@devvit/client": "*",
44
44
  "@devvit/server": "*"
45
45
  },
46
46
  "devDependencies": {
47
- "@devvit/client": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
48
- "@devvit/repo-tools": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
49
- "@devvit/server": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
50
- "@devvit/tsconfig": "0.12.1-next-2025-09-17-19-53-43-a7752f728.0",
47
+ "@devvit/client": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
48
+ "@devvit/repo-tools": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
49
+ "@devvit/server": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
50
+ "@devvit/tsconfig": "0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0",
51
51
  "eslint": "9.11.1",
52
52
  "typescript": "5.8.3",
53
53
  "vitest": "1.6.1"
54
54
  },
55
- "gitHead": "94bf4342af792bc0ea4433cac03c90ac14c2998f"
55
+ "gitHead": "5a216cfbb873d9d818cb009701fb203f6c026258"
56
56
  }
package/realtime.d.ts CHANGED
@@ -1,36 +1,64 @@
1
1
  import type { WebViewMessageEvent_MessageData } from '@devvit/protos/json/devvit/ui/events/v1alpha/web_view.js';
2
2
  import type { JsonValue } from '@devvit/shared';
3
- type ConnectRealtimeOptions = {
3
+ export type ConnectRealtimeOptions<Msg extends JsonValue> = {
4
4
  channel: string;
5
5
  onConnect?: (channel: string) => void;
6
6
  onDisconnect?: (channel: string) => void;
7
- onMessage: (data: JsonValue) => void;
7
+ onMessage: (data: Msg) => void;
8
8
  };
9
9
  /**
10
10
  * Connects to a realtime channel for receiving messages.
11
11
  *
12
12
  * @param opts - Connection options including channel name and callbacks
13
13
  * @returns A Connection object with a disconnect method
14
+ *
15
+ * @example
16
+ *
17
+ * ```ts
18
+ * import {connectRealtime, context} from '@devvit/web/client'
19
+ * import type {T2} from '@devvit/web/shared'
20
+ *
21
+ * type RealtimeMessage = {x: number, y: number, t2: T2}
22
+ *
23
+ * connectRealtime<RealtimeMessage>({
24
+ * channel: context.postId,
25
+ * onConnect() {
26
+ * console.log(`${context.userId} connected`)
27
+ * },
28
+ * onDisconnect() {
29
+ * console.log(`${context.userId} disconnected`)
30
+ * },
31
+ * onMessage(msg) {
32
+ * // Filter out current user across all sessions.
33
+ * if (msg.t2 === context.userId) return
34
+ *
35
+ * console.log(`user ${msg.t2} at (${msg.x}, ${msg.y})`)
36
+ * }
37
+ * })
38
+ * ```
14
39
  */
15
- export declare const connectRealtime: (opts: Readonly<ConnectRealtimeOptions>) => Promise<Connection>;
40
+ export declare const connectRealtime: <Msg extends JsonValue>(opts: Readonly<ConnectRealtimeOptions<Msg>>) => Promise<Connection>;
41
+ export declare function disconnectRealtime(channel: string): Promise<void>;
42
+ /** True if the channel socket is connected. */
43
+ export declare function isRealtimeConnected(channel: string): boolean;
16
44
  /**
17
45
  * Clears all connections. Used for testing purposes.
18
46
  * @internal
19
47
  */
20
48
  export declare const __clearConnections: () => void;
21
- declare class Connection {
22
- #private;
23
- constructor(opts: Readonly<ConnectRealtimeOptions>);
49
+ export declare class Connection {
50
+ /** @internal */
51
+ connected: boolean;
52
+ /** @internal */
53
+ readonly opts: Readonly<ConnectRealtimeOptions<JsonValue>>;
54
+ constructor(opts: Readonly<ConnectRealtimeOptions<JsonValue>>);
24
55
  /**
25
56
  * Disconnects from the realtime channel.
26
57
  *
27
- * This works by sending a list of all channels we want to remain subscribed to,
28
- * excluding the channel we want to disconnect from. The effect handler compares this
29
- * new list with existing subscriptions and triggers disconnect for any channel
30
- * that's no longer in the list.
58
+ * @deprecated Use `disconnectRealtime()`.
31
59
  */
32
60
  disconnect(): Promise<void>;
61
+ /** @internal */
33
62
  onMessage: (ev: MessageEvent<WebViewMessageEvent_MessageData>) => void;
34
63
  }
35
- export {};
36
64
  //# sourceMappingURL=realtime.d.ts.map
package/realtime.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAGhH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,QAAQ,CAAC,sBAAsB,CAAC,KACrC,OAAO,CAAC,UAAU,CAepB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,IAErC,CAAC;AAEF,cAAM,UAAU;;gBAGF,IAAI,EAAE,QAAQ,CAAC,sBAAsB,CAAC;IAIlD;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,SAAS,GAAI,IAAI,YAAY,CAAC,+BAA+B,CAAC,KAAG,IAAI,CAgCnE;CACH"}
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAChH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,MAAM,sBAAsB,CAAC,GAAG,SAAS,SAAS,IAAI;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC,CAAC;AAQF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,eAAe,GAAU,GAAG,SAAS,SAAS,EACzD,MAAM,QAAQ,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,KAC1C,OAAO,CAAC,UAAU,CAYpB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvE;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,IAErC,CAAC;AAUF,qBAAa,UAAU;IACrB,gBAAgB;IAChB,SAAS,EAAE,OAAO,CAAS;IAE3B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAE/C,IAAI,EAAE,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAI7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,gBAAgB;IAChB,SAAS,GAAI,IAAI,YAAY,CAAC,+BAA+B,CAAC,KAAG,IAAI,CAkCnE;CACH"}
package/realtime.js CHANGED
@@ -1,15 +1,5 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _Connection_opts;
1
+ import { EffectType } from '@devvit/protos/json/devvit/ui/effects/v1alpha/effect.js';
2
+ import { RealtimeSubscriptionStatus } from '@devvit/protos/json/devvit/ui/effects/v1alpha/realtime_subscriptions.js';
13
3
  import { emitEffect } from '@devvit/shared-types/client/emit-effect.js';
14
4
  const connectionsByChannel = new Map();
15
5
  /* TODO: Clean up this API. Now that realtime has been removed from the
@@ -20,6 +10,31 @@ const connectionsByChannel = new Map();
20
10
  *
21
11
  * @param opts - Connection options including channel name and callbacks
22
12
  * @returns A Connection object with a disconnect method
13
+ *
14
+ * @example
15
+ *
16
+ * ```ts
17
+ * import {connectRealtime, context} from '@devvit/web/client'
18
+ * import type {T2} from '@devvit/web/shared'
19
+ *
20
+ * type RealtimeMessage = {x: number, y: number, t2: T2}
21
+ *
22
+ * connectRealtime<RealtimeMessage>({
23
+ * channel: context.postId,
24
+ * onConnect() {
25
+ * console.log(`${context.userId} connected`)
26
+ * },
27
+ * onDisconnect() {
28
+ * console.log(`${context.userId} disconnected`)
29
+ * },
30
+ * onMessage(msg) {
31
+ * // Filter out current user across all sessions.
32
+ * if (msg.t2 === context.userId) return
33
+ *
34
+ * console.log(`user ${msg.t2} at (${msg.x}, ${msg.y})`)
35
+ * }
36
+ * })
37
+ * ```
23
38
  */
24
39
  export const connectRealtime = async (opts) => {
25
40
  if (connectionsByChannel.has(opts.channel)) {
@@ -28,12 +43,24 @@ export const connectRealtime = async (opts) => {
28
43
  const connection = new Connection(opts);
29
44
  connectionsByChannel.set(opts.channel, connection);
30
45
  addEventListener('message', connection.onMessage);
31
- await emitEffect({
32
- realtimeSubscriptions: { subscriptionIds: [...connectionsByChannel.keys()] },
33
- type: 0,
34
- });
46
+ await emitConnectionsEffect();
35
47
  return connection;
36
48
  };
49
+ export async function disconnectRealtime(channel) {
50
+ const connection = connectionsByChannel.get(channel);
51
+ if (!connection)
52
+ return;
53
+ connectionsByChannel.delete(channel);
54
+ removeEventListener('message', connection.onMessage);
55
+ if (connection.connected)
56
+ connection.opts.onDisconnect?.(channel);
57
+ connection.connected = false;
58
+ await emitConnectionsEffect();
59
+ }
60
+ /** True if the channel socket is connected. */
61
+ export function isRealtimeConnected(channel) {
62
+ return !!connectionsByChannel.get(channel)?.connected;
63
+ }
37
64
  /**
38
65
  * Clears all connections. Used for testing purposes.
39
66
  * @internal
@@ -41,9 +68,18 @@ export const connectRealtime = async (opts) => {
41
68
  export const __clearConnections = () => {
42
69
  connectionsByChannel.clear();
43
70
  };
44
- class Connection {
71
+ /** Emits open connections which may cause subscribe / unsubscribe. */
72
+ async function emitConnectionsEffect() {
73
+ await emitEffect({
74
+ realtimeSubscriptions: { subscriptionIds: [...connectionsByChannel.keys()] },
75
+ type: EffectType.EFFECT_REALTIME_SUB,
76
+ });
77
+ }
78
+ export class Connection {
45
79
  constructor(opts) {
46
- _Connection_opts.set(this, void 0);
80
+ /** @internal */
81
+ this.connected = false;
82
+ /** @internal */
47
83
  this.onMessage = (ev) => {
48
84
  const { type, data } = ev.data;
49
85
  if (type !== 'devvit-message') {
@@ -53,49 +89,37 @@ class Connection {
53
89
  return;
54
90
  }
55
91
  const { status, event } = data.realtimeEvent;
56
- if (!event?.channel.endsWith(__classPrivateFieldGet(this, _Connection_opts, "f").channel)) {
92
+ if (!event?.channel.endsWith(this.opts.channel)) {
57
93
  return;
58
94
  }
59
95
  // Normalize the channel name (remove namespacing)
60
- event.channel = __classPrivateFieldGet(this, _Connection_opts, "f").channel;
61
- if (status === 0) {
62
- __classPrivateFieldGet(this, _Connection_opts, "f").onConnect?.(__classPrivateFieldGet(this, _Connection_opts, "f").channel);
96
+ event.channel = this.opts.channel;
97
+ if (status === RealtimeSubscriptionStatus.REALTIME_SUBSCRIBED) {
98
+ this.connected = true;
99
+ this.opts.onConnect?.(this.opts.channel);
63
100
  }
64
- else if (status === 1) {
65
- __classPrivateFieldGet(this, _Connection_opts, "f").onDisconnect?.(__classPrivateFieldGet(this, _Connection_opts, "f").channel);
101
+ else if (status === RealtimeSubscriptionStatus.REALTIME_UNSUBSCRIBED) {
102
+ this.connected = false;
103
+ this.opts.onDisconnect?.(this.opts.channel);
66
104
  }
67
105
  else if (event.data) {
68
- __classPrivateFieldGet(this, _Connection_opts, "f").onMessage(event.data.msg);
106
+ this.opts.onMessage(event.data.msg);
69
107
  }
70
108
  else {
71
109
  console.error('[realtime] Received event without data:', {
72
- channel: __classPrivateFieldGet(this, _Connection_opts, "f").channel,
110
+ channel: this.opts.channel,
73
111
  event,
74
112
  });
75
113
  }
76
114
  };
77
- __classPrivateFieldSet(this, _Connection_opts, opts, "f");
115
+ this.opts = opts;
78
116
  }
79
117
  /**
80
118
  * Disconnects from the realtime channel.
81
119
  *
82
- * This works by sending a list of all channels we want to remain subscribed to,
83
- * excluding the channel we want to disconnect from. The effect handler compares this
84
- * new list with existing subscriptions and triggers disconnect for any channel
85
- * that's no longer in the list.
120
+ * @deprecated Use `disconnectRealtime()`.
86
121
  */
87
122
  async disconnect() {
88
- const connection = connectionsByChannel.get(__classPrivateFieldGet(this, _Connection_opts, "f").channel);
89
- if (!connection) {
90
- return;
91
- }
92
- // Get all current subscriptions except the one we're disconnecting
93
- const remainingChannels = [...connectionsByChannel.keys()].filter((ch) => ch !== __classPrivateFieldGet(this, _Connection_opts, "f").channel);
94
- await emitEffect({
95
- realtimeSubscriptions: { subscriptionIds: remainingChannels },
96
- type: 0,
97
- });
98
- connectionsByChannel.delete(__classPrivateFieldGet(this, _Connection_opts, "f").channel);
123
+ await disconnectRealtime(this.opts.channel);
99
124
  }
100
125
  }
101
- _Connection_opts = new WeakMap();
package/server.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export { realtime, type RealtimeClient } from './RealtimeClient.js';
1
+ import { RealtimeClient } from './RealtimeClient.js';
2
+ export type { RealtimeClient } from './RealtimeClient.js';
3
+ export declare const realtime: RealtimeClient;
2
4
  //# sourceMappingURL=server.d.ts.map
package/server.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,eAAO,MAAM,QAAQ,EAAE,cAAqC,CAAC"}
package/server.js CHANGED
@@ -1 +1,2 @@
1
- export { realtime } from './RealtimeClient.js';
1
+ import { RealtimeClient } from './RealtimeClient.js';
2
+ export const realtime = new RealtimeClient();