@classytic/arc 2.10.3 → 2.11.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.
Files changed (153) hide show
  1. package/README.md +1 -1
  2. package/dist/{BaseController-CbKKIflT.mjs → BaseController-JNV08qOT.mjs} +595 -537
  3. package/dist/{queryCachePlugin-BKbWjgDG.d.mts → QueryCache-DOBNHBE0.d.mts} +2 -32
  4. package/dist/actionPermissions-C8YYU92K.mjs +22 -0
  5. package/dist/adapters/index.d.mts +2 -2
  6. package/dist/adapters/index.mjs +1 -1
  7. package/dist/{adapters-BXY4i-hw.mjs → adapters-D0tT2Tyo.mjs} +54 -0
  8. package/dist/audit/index.d.mts +2 -2
  9. package/dist/audit/index.mjs +15 -17
  10. package/dist/auth/index.d.mts +4 -4
  11. package/dist/auth/index.mjs +3 -3
  12. package/dist/auth/redis-session.d.mts +1 -1
  13. package/dist/{betterAuthOpenApi-BBRVhjQN.mjs → betterAuthOpenApi-DwxtK3uG.mjs} +1 -1
  14. package/dist/cache/index.d.mts +3 -2
  15. package/dist/cache/index.mjs +3 -3
  16. package/dist/cli/commands/docs.mjs +2 -2
  17. package/dist/cli/commands/generate.mjs +37 -27
  18. package/dist/cli/commands/init.mjs +47 -34
  19. package/dist/cli/commands/introspect.mjs +1 -1
  20. package/dist/context/index.d.mts +58 -0
  21. package/dist/context/index.mjs +2 -0
  22. package/dist/core/index.d.mts +3 -3
  23. package/dist/core/index.mjs +4 -3
  24. package/dist/core-DXdSSFW-.mjs +1037 -0
  25. package/dist/createActionRouter-BwaSM0No.mjs +166 -0
  26. package/dist/{createApp-BuvPma24.mjs → createApp-DvNYEhpb.mjs} +118 -36
  27. package/dist/docs/index.d.mts +2 -2
  28. package/dist/docs/index.mjs +1 -1
  29. package/dist/{elevation-C7hgL_aI.mjs → elevation-DOFoxoDs.mjs} +1 -1
  30. package/dist/errorHandler-Co3lnVmJ.d.mts +114 -0
  31. package/dist/{eventPlugin-DCUjuiQT.mjs → eventPlugin--5HIkdPU.mjs} +1 -1
  32. package/dist/{eventPlugin-CxWgpd6K.d.mts → eventPlugin-CUNjYYRY.d.mts} +1 -1
  33. package/dist/events/index.d.mts +4 -4
  34. package/dist/events/index.mjs +69 -51
  35. package/dist/events/transports/redis-stream-entry.d.mts +1 -1
  36. package/dist/events/transports/redis.d.mts +1 -1
  37. package/dist/factory/index.d.mts +1 -1
  38. package/dist/factory/index.mjs +2 -2
  39. package/dist/{fields-Lo1VUDpt.d.mts → fields-C8Y0XLAu.d.mts} +1 -1
  40. package/dist/hooks/index.d.mts +1 -1
  41. package/dist/hooks/index.mjs +1 -1
  42. package/dist/idempotency/index.d.mts +3 -3
  43. package/dist/idempotency/index.mjs +38 -27
  44. package/dist/idempotency/redis.d.mts +1 -1
  45. package/dist/{index-ChIw3776.d.mts → index-BYCqHCVu.d.mts} +4 -4
  46. package/dist/{index-Cl0uoKd5.d.mts → index-Cm0vUrr_.d.mts} +2100 -1688
  47. package/dist/{index-DStwgFUK.d.mts → index-DAushRTt.d.mts} +29 -10
  48. package/dist/index-DsJ1MNfC.d.mts +1179 -0
  49. package/dist/{index-8qw4y6ff.d.mts → index-t8pLpPFW.d.mts} +13 -10
  50. package/dist/index.d.mts +7 -251
  51. package/dist/index.mjs +8 -128
  52. package/dist/integrations/event-gateway.d.mts +2 -2
  53. package/dist/integrations/event-gateway.mjs +1 -1
  54. package/dist/integrations/index.d.mts +2 -2
  55. package/dist/integrations/mcp/index.d.mts +2 -2
  56. package/dist/integrations/mcp/index.mjs +1 -1
  57. package/dist/integrations/mcp/testing.d.mts +1 -1
  58. package/dist/integrations/mcp/testing.mjs +1 -1
  59. package/dist/integrations/streamline.d.mts +46 -5
  60. package/dist/integrations/streamline.mjs +50 -21
  61. package/dist/integrations/websocket-redis.d.mts +1 -1
  62. package/dist/integrations/websocket.d.mts +2 -154
  63. package/dist/integrations/websocket.mjs +292 -224
  64. package/dist/{keys-qcD-TVJl.mjs → keys-CARyUjiR.mjs} +2 -0
  65. package/dist/{loadResources-BAzJItAJ.mjs → loadResources-YNwKHvRA.mjs} +3 -1
  66. package/dist/logger/index.d.mts +81 -0
  67. package/dist/{logger-DLg8-Ueg.mjs → logger/index.mjs} +1 -6
  68. package/dist/middleware/index.d.mts +109 -0
  69. package/dist/middleware/index.mjs +70 -0
  70. package/dist/multipartBody-CvTR1Un6.mjs +123 -0
  71. package/dist/{openapi-B5F8AddX.mjs → openapi-C0L9ar7m.mjs} +9 -7
  72. package/dist/org/index.d.mts +2 -2
  73. package/dist/permissions/index.d.mts +2 -2
  74. package/dist/permissions/index.mjs +1 -3
  75. package/dist/{permissions-Dk6mshja.mjs → permissions-B4vU9L0Q.mjs} +220 -2
  76. package/dist/pipe-DVoIheVC.mjs +62 -0
  77. package/dist/pipeline/index.d.mts +62 -0
  78. package/dist/pipeline/index.mjs +53 -0
  79. package/dist/plugins/index.d.mts +25 -5
  80. package/dist/plugins/index.mjs +10 -10
  81. package/dist/plugins/response-cache.mjs +1 -1
  82. package/dist/plugins/tracing-entry.d.mts +1 -1
  83. package/dist/plugins/tracing-entry.mjs +42 -24
  84. package/dist/presets/filesUpload.d.mts +4 -4
  85. package/dist/presets/filesUpload.mjs +255 -1
  86. package/dist/presets/index.d.mts +1 -1
  87. package/dist/presets/index.mjs +2 -2
  88. package/dist/presets/multiTenant.d.mts +1 -1
  89. package/dist/presets/multiTenant.mjs +48 -8
  90. package/dist/presets/search.d.mts +2 -2
  91. package/dist/presets/search.mjs +1 -1
  92. package/dist/{presets-fLJVXdVn.mjs → presets-k604Lj99.mjs} +1 -1
  93. package/dist/queryCachePlugin-BUXBSm4F.d.mts +34 -0
  94. package/dist/{queryCachePlugin-DQCEfJis.mjs → queryCachePlugin-Bq6bO6vc.mjs} +3 -3
  95. package/dist/{redis-DqyeggCa.d.mts → redis-Cm1gnRDf.d.mts} +1 -1
  96. package/dist/{redis-stream-CakIQmwR.d.mts → redis-stream-CM8TXTix.d.mts} +1 -1
  97. package/dist/registry/index.d.mts +1 -1
  98. package/dist/registry/index.mjs +2 -2
  99. package/dist/{requestContext-xHIKedG6.mjs → requestContext-CfRkaxwf.mjs} +1 -1
  100. package/dist/{resourceToTools-BElv3xPT.mjs → resourceToTools--okX6QBr.mjs} +534 -415
  101. package/dist/routerShared-DeESFp4a.mjs +515 -0
  102. package/dist/schemaIR-BlG9bY7v.mjs +137 -0
  103. package/dist/scope/index.d.mts +2 -2
  104. package/dist/scope/index.mjs +1 -1
  105. package/dist/{sse-yBCgOLGu.mjs → sse-V7aXc3bW.mjs} +1 -1
  106. package/dist/{store-helpers-ZCSMJJAX.mjs → store-helpers-BhrzxvyQ.mjs} +4 -0
  107. package/dist/testing/index.d.mts +367 -711
  108. package/dist/testing/index.mjs +646 -1434
  109. package/dist/testing/storageContract.d.mts +1 -1
  110. package/dist/{tracing-65B51Dw3.d.mts → tracing-DokiEsuz.d.mts} +9 -4
  111. package/dist/types/index.d.mts +5 -5
  112. package/dist/types/index.mjs +1 -3
  113. package/dist/types/storage.d.mts +1 -1
  114. package/dist/{types-Co8k3NyS.d.mts → types-CgikqKAj.d.mts} +133 -21
  115. package/dist/{types-Btdda02s.d.mts → types-D9NqiYIw.d.mts} +1 -1
  116. package/dist/utils/index.d.mts +2 -898
  117. package/dist/utils/index.mjs +4 -5
  118. package/dist/utils-D3Yxnrwr.mjs +1639 -0
  119. package/dist/versioning-M9lNLhO8.d.mts +117 -0
  120. package/dist/websocket-CyJ1VIFI.d.mts +186 -0
  121. package/package.json +26 -8
  122. package/skills/arc/SKILL.md +124 -39
  123. package/skills/arc/references/testing.md +212 -183
  124. package/dist/applyPermissionResult-QhV1Pa-g.mjs +0 -37
  125. package/dist/core-CcR01lup.mjs +0 -1411
  126. package/dist/createActionRouter-Bp_5c_2b.mjs +0 -249
  127. package/dist/errorHandler-DRQ3EqfL.d.mts +0 -218
  128. package/dist/errors-CCSsMpXE.d.mts +0 -140
  129. package/dist/fields-bxkeltzz.mjs +0 -126
  130. package/dist/filesUpload-t21LS-py.mjs +0 -377
  131. package/dist/queryParser-DBqBB6AC.mjs +0 -352
  132. package/dist/types-Csi3FLfq.mjs +0 -27
  133. package/dist/utils-B2fNOD_i.mjs +0 -929
  134. /package/dist/{EventTransport-CUw5NNWe.d.mts → EventTransport-CfVEGaEl.d.mts} +0 -0
  135. /package/dist/{HookSystem-BNYKnrXF.mjs → HookSystem-CGsMd6oK.mjs} +0 -0
  136. /package/dist/{ResourceRegistry-BPd6NQDm.mjs → ResourceRegistry-DkAeAuTX.mjs} +0 -0
  137. /package/dist/{caching-CBpK_SCM.mjs → caching-CheW3m-S.mjs} +0 -0
  138. /package/dist/{elevation-C5SwtkAn.d.mts → elevation-s5ykdNHr.d.mts} +0 -0
  139. /package/dist/{errorHandler-Bb49BvPD.mjs → errorHandler-BQm8ZxTK.mjs} +0 -0
  140. /package/dist/{externalPaths-BQ8QijNH.d.mts → externalPaths-Bapitwvd.d.mts} +0 -0
  141. /package/dist/{interface-CSbZdv_3.d.mts → interface-CkkWm5uR.d.mts} +0 -0
  142. /package/dist/{interface-D218ikEo.d.mts → interface-Da0r7Lna.d.mts} +0 -0
  143. /package/dist/{memory-B5Amv9A1.mjs → memory-DikHSvWa.mjs} +0 -0
  144. /package/dist/{metrics-DuhiSEZI.mjs → metrics-Csh4nsvv.mjs} +0 -0
  145. /package/dist/{pluralize-A0tWEl1K.mjs → pluralize-BneOJkpi.mjs} +0 -0
  146. /package/dist/{registry-B3lRFBWo.mjs → registry-D63ee7fl.mjs} +0 -0
  147. /package/dist/{replyHelpers-CXtJDAZ0.mjs → replyHelpers-ByllIXXV.mjs} +0 -0
  148. /package/dist/{schemaConverter-BxFDdtXu.mjs → schemaConverter-B0oKLuqI.mjs} +0 -0
  149. /package/dist/{sessionManager-BkzVU8h2.d.mts → sessionManager-D-oNWHz3.d.mts} +0 -0
  150. /package/dist/{storage-CVk_SEn2.d.mts → storage-BwGQXUpd.d.mts} +0 -0
  151. /package/dist/{typeGuards-Cj5Rgvlg.mjs → typeGuards-CcFZXgU7.mjs} +0 -0
  152. /package/dist/{types-BD85MlEK.d.mts → types-tgR4Pt8F.d.mts} +0 -0
  153. /package/dist/{versioning-C2U_bLY0.mjs → versioning-CGPjkqAg.mjs} +0 -0
@@ -1,6 +1,49 @@
1
1
  //#region src/integrations/streamline.ts
2
+ /**
3
+ * Full event list published on a streamline workflow's internal `eventBus`
4
+ * (tracks streamline 2.2's `EventPayloadMap` in
5
+ * `@classytic/streamline/src/core/events.ts`).
6
+ *
7
+ * Hardcoded here by design — arc subscribes via structural
8
+ * `eventBus.on(name, handler)`, which is a no-op for events the running
9
+ * streamline version doesn't emit. New events a future streamline release
10
+ * adds can be bridged by updating this list; arc never breaks just
11
+ * because streamline extended its bus.
12
+ */
13
+ const STREAMLINE_BUS_EVENTS = [
14
+ "step:started",
15
+ "step:completed",
16
+ "step:failed",
17
+ "step:waiting",
18
+ "step:skipped",
19
+ "step:retry-scheduled",
20
+ "step:compensated",
21
+ "workflow:started",
22
+ "workflow:completed",
23
+ "workflow:failed",
24
+ "workflow:waiting",
25
+ "workflow:resumed",
26
+ "workflow:cancelled",
27
+ "workflow:recovered",
28
+ "workflow:retry",
29
+ "workflow:compensating",
30
+ "engine:error",
31
+ "scheduler:error",
32
+ "scheduler:circuit-open"
33
+ ];
34
+ /**
35
+ * Workflow events that should auto-close an SSE stream when observed.
36
+ * Recovered / waiting / resumed / retry / compensating are NOT terminal —
37
+ * the run is still active after them.
38
+ */
39
+ const STREAMLINE_TERMINAL_EVENTS = [
40
+ "workflow:completed",
41
+ "workflow:failed",
42
+ "workflow:cancelled"
43
+ ];
2
44
  const streamlinePluginImpl = async (fastify, options) => {
3
- const { workflows, prefix = "/workflows", auth = true, bridgeEvents = true, bridgeStepEvents = false, enableStreaming = false, permissions: perms } = options;
45
+ const { workflows, prefix = "/workflows", auth = true, bridgeEvents = true, enableStreaming = false, permissions: perms } = options;
46
+ const bridgeBus = options.bridgeBusEvents ?? options.bridgeStepEvents ?? false;
4
47
  const registry = /* @__PURE__ */ new Map();
5
48
  for (const wf of workflows) {
6
49
  const id = wf.definition.id;
@@ -148,13 +191,7 @@ const streamlinePluginImpl = async (fastify, options) => {
148
191
  data: await wf.engine.rewindTo?.(runId, stepId)
149
192
  };
150
193
  });
151
- if (bridgeStepEvents && wf.container?.eventBus && fastify.events?.publish) for (const eventName of [
152
- "step:started",
153
- "step:completed",
154
- "step:failed",
155
- "step:skipped",
156
- "step:retry-scheduled"
157
- ]) wf.container.eventBus.on(eventName, (payload) => {
194
+ if (bridgeBus && wf.container?.eventBus && fastify.events?.publish) for (const eventName of STREAMLINE_BUS_EVENTS) wf.container.eventBus.on(eventName, (payload) => {
158
195
  const p = payload;
159
196
  fastify.events.publish(`workflow.${id}.${eventName}`, {
160
197
  runId: p?.runId,
@@ -183,15 +220,7 @@ const streamlinePluginImpl = async (fastify, options) => {
183
220
  "Cache-Control": "no-cache",
184
221
  Connection: "keep-alive"
185
222
  });
186
- const events = [
187
- "step:started",
188
- "step:completed",
189
- "step:failed",
190
- "step:skipped",
191
- "workflow:completed",
192
- "workflow:failed",
193
- "workflow:cancelled"
194
- ];
223
+ const terminalEvents = new Set(STREAMLINE_TERMINAL_EVENTS);
195
224
  const listeners = [];
196
225
  let closed = false;
197
226
  const send = (event, data) => {
@@ -211,12 +240,12 @@ const streamlinePluginImpl = async (fastify, options) => {
211
240
  reply.raw.end();
212
241
  } catch {}
213
242
  };
214
- for (const eventName of events) {
243
+ for (const eventName of STREAMLINE_BUS_EVENTS) {
215
244
  const fn = (payload) => {
216
245
  const p = payload;
217
- if (p?.runId !== runId) return;
246
+ if (typeof p?.runId === "string" && p.runId !== runId) return;
218
247
  send(eventName, p);
219
- if (eventName === "workflow:completed" || eventName === "workflow:failed" || eventName === "workflow:cancelled") cleanup();
248
+ if (terminalEvents.has(eventName) && p?.runId === runId) cleanup();
220
249
  };
221
250
  wf.container.eventBus.on(eventName, fn);
222
251
  listeners.push({
@@ -244,4 +273,4 @@ const streamlinePluginImpl = async (fastify, options) => {
244
273
  /** Pluggable streamline integration for Arc */
245
274
  const streamlinePlugin = streamlinePluginImpl;
246
275
  //#endregion
247
- export { streamlinePlugin };
276
+ export { STREAMLINE_BUS_EVENTS, STREAMLINE_TERMINAL_EVENTS, streamlinePlugin };
@@ -1,4 +1,4 @@
1
- import { WebSocketAdapter } from "./websocket.mjs";
1
+ import { c as WebSocketAdapter } from "../websocket-CyJ1VIFI.mjs";
2
2
 
3
3
  //#region src/integrations/websocket-redis.d.ts
4
4
  interface RedisLike {
@@ -1,154 +1,2 @@
1
- import { FastifyPluginAsync } from "fastify";
2
-
3
- //#region src/integrations/websocket.d.ts
4
- interface WebSocketClient {
5
- id: string;
6
- socket: {
7
- send(data: string): void;
8
- close(): void;
9
- readyState: number;
10
- };
11
- subscriptions: Set<string>;
12
- userId?: string;
13
- organizationId?: string;
14
- /** OAuth client ID — present for service/machine-to-machine connections */
15
- clientId?: string;
16
- /** OAuth scopes — present for service/machine-to-machine connections */
17
- scopes?: readonly string[];
18
- metadata?: Record<string, unknown>;
19
- }
20
- interface WebSocketMessage {
21
- type: string;
22
- resource?: string;
23
- channel?: string;
24
- data?: unknown;
25
- }
26
- interface WebSocketPluginOptions {
27
- /** WebSocket endpoint path (default: '/ws') */
28
- path?: string;
29
- /** Require authentication for WebSocket connections (default: true) */
30
- auth?: boolean;
31
- /** Resources to auto-broadcast CRUD events for */
32
- resources?: string[];
33
- /** Heartbeat interval in ms (default: 30000). Set 0 to disable. */
34
- heartbeatInterval?: number;
35
- /** Custom authentication function for WebSocket upgrade */
36
- authenticate?: (request: unknown) => Promise<{
37
- userId?: string;
38
- organizationId?: string; /** Set for machine-to-machine / service account auth */
39
- clientId?: string; /** OAuth scopes for service accounts */
40
- scopes?: readonly string[];
41
- } | null>;
42
- /** Max clients per resource subscription (default: 10000) */
43
- maxClientsPerRoom?: number;
44
- /**
45
- * Expose a stats endpoint at `{path}/stats`.
46
- * - `false` (default): stats endpoint is not registered
47
- * - `true`: registered without auth
48
- * - `'authenticated'`: guarded by `fastify.authenticate` if available
49
- */
50
- exposeStats?: boolean | "authenticated";
51
- /**
52
- * Authorize room subscriptions. Return true to allow, false to deny.
53
- * Called before every subscribe. If not provided, all rooms are allowed.
54
- */
55
- roomPolicy?: (client: WebSocketClient, room: string) => boolean | Promise<boolean>;
56
- /** Maximum message size in bytes from client (default: 16384 = 16KB). Messages exceeding this are dropped. */
57
- maxMessageBytes?: number;
58
- /** Maximum subscriptions per client (default: 100). Prevents resource exhaustion. */
59
- maxSubscriptionsPerClient?: number;
60
- /**
61
- * Periodic re-authentication interval in ms (default: 0 = disabled).
62
- * When set, the server periodically re-validates the client's auth token.
63
- * If the token is expired/revoked, the client is disconnected with code 4003.
64
- *
65
- * Recommended: 300000 (5 minutes) for production.
66
- *
67
- * @example
68
- * ```typescript
69
- * websocketPlugin({ reauthInterval: 5 * 60 * 1000 }) // re-check every 5 min
70
- * ```
71
- */
72
- reauthInterval?: number;
73
- /** Custom message handler */
74
- onMessage?: (client: WebSocketClient, message: WebSocketMessage) => void | Promise<void>;
75
- /** Called when a client connects */
76
- onConnect?: (client: WebSocketClient) => void | Promise<void>;
77
- /** Called when a client disconnects */
78
- onDisconnect?: (client: WebSocketClient) => void | Promise<void>;
79
- /**
80
- * Cross-instance broadcast adapter (default: LocalWebSocketAdapter — single-instance only).
81
- * Provide a RedisWebSocketAdapter for multi-instance deployments.
82
- *
83
- * @example
84
- * ```typescript
85
- * import { RedisWebSocketAdapter } from '@classytic/arc/integrations/websocket';
86
- * adapter: new RedisWebSocketAdapter(redis, { channel: 'arc-ws' })
87
- * ```
88
- */
89
- adapter?: WebSocketAdapter;
90
- }
91
- /**
92
- * Adapter interface for cross-instance WebSocket broadcast.
93
- *
94
- * - `publish()`: Send a message to all instances (via Redis, NATS, etc.)
95
- * - `subscribe()`: Receive messages from other instances
96
- * - `close()`: Clean up connections
97
- *
98
- * The adapter is NOT used for local broadcasts — RoomManager handles those.
99
- * The adapter only handles the cross-instance relay.
100
- */
101
- interface WebSocketAdapter {
102
- /** Adapter name for logging */
103
- readonly name: string;
104
- /** Publish a room broadcast to all other instances */
105
- publish(room: string, message: string): Promise<void>;
106
- /** Subscribe to broadcasts from other instances */
107
- subscribe(callback: (room: string, message: string) => void): Promise<void>;
108
- /** Close adapter connections */
109
- close(): Promise<void>;
110
- }
111
- /**
112
- * Default adapter — no cross-instance broadcast (single-instance only).
113
- * All methods are no-ops. Used when no adapter is configured.
114
- */
115
- declare class LocalWebSocketAdapter implements WebSocketAdapter {
116
- readonly name = "local";
117
- publish(): Promise<void>;
118
- subscribe(): Promise<void>;
119
- close(): Promise<void>;
120
- }
121
- declare class RoomManager {
122
- private rooms;
123
- private clients;
124
- private maxPerRoom;
125
- private adapter?;
126
- constructor(maxPerRoom?: number, adapter?: WebSocketAdapter);
127
- addClient(client: WebSocketClient): void;
128
- removeClient(clientId: string): void;
129
- subscribe(clientId: string, room: string): boolean;
130
- unsubscribe(clientId: string, room: string): void;
131
- broadcast(room: string, message: string, excludeClientId?: string): void;
132
- broadcastToOrg(organizationId: string, room: string, message: string): void;
133
- /**
134
- * Broadcast locally AND through adapter (for cross-instance delivery).
135
- * Use this instead of broadcast() when multi-instance is possible.
136
- */
137
- broadcastWithAdapter(room: string, message: string, excludeClientId?: string): Promise<void>;
138
- /**
139
- * Org-scoped broadcast locally AND through adapter.
140
- * Uses a namespaced room key for the adapter so other instances
141
- * can filter by org when delivering locally.
142
- */
143
- broadcastToOrgWithAdapter(organizationId: string, room: string, message: string): Promise<void>;
144
- getClient(clientId: string): WebSocketClient | undefined;
145
- getStats(): {
146
- clients: number;
147
- rooms: number;
148
- subscriptions: Record<string, number>;
149
- };
150
- }
151
- /** Pluggable WebSocket integration for Arc */
152
- declare const websocketPlugin: FastifyPluginAsync<WebSocketPluginOptions>;
153
- //#endregion
154
- export { LocalWebSocketAdapter, RoomManager, WebSocketAdapter, WebSocketClient, WebSocketMessage, WebSocketPluginOptions, websocketPlugin };
1
+ import { a as WebSocketMessage, c as WebSocketAdapter, i as WebSocketClient, n as websocketPlugin, o as WebSocketPluginOptions, r as AuthResult, s as LocalWebSocketAdapter, t as RoomManager } from "../websocket-CyJ1VIFI.mjs";
2
+ export { AuthResult, LocalWebSocketAdapter, RoomManager, WebSocketAdapter, WebSocketClient, WebSocketMessage, WebSocketPluginOptions, websocketPlugin };