@ikas/component-cli 1.4.0-beta.230 → 1.4.0-beta.232

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.
@@ -0,0 +1,251 @@
1
+ import { readFileSync } from "fs";
2
+ import { HocuspocusProvider, HocuspocusProviderWebsocket } from "@hocuspocus/provider";
3
+ import chalk from "chalk";
4
+ import { WebSocket } from "ws";
5
+ import * as Y from "yjs";
6
+ import { DEV_SERVER_PEER, encodeRoomControl, encodeRoomMessage, parseRoomEnvelope, RoomChunkAssembler, } from "./design-asset-room-envelope.js";
7
+ export function readDesignAssetRoomEnv(env = process.env) {
8
+ const wsUrl = env.IKAS_DESIGN_ASSET_ROOM_WS_URL;
9
+ const roomId = env.IKAS_DESIGN_ASSET_ROOM_ID;
10
+ const tokenFile = env.IKAS_DESIGN_ASSET_ROOM_TOKEN_FILE;
11
+ if (!wsUrl || !roomId || !tokenFile)
12
+ return null;
13
+ let url;
14
+ try {
15
+ url = new URL(wsUrl);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ // The token goes to this host: only over TLS (plain ws only to a local gateway).
21
+ const isLocal = url.hostname === "localhost" || url.hostname === "127.0.0.1";
22
+ if (url.protocol !== "wss:" && !(url.protocol === "ws:" && isLocal))
23
+ return null;
24
+ const segments = url.pathname.split("/").filter(Boolean);
25
+ if (segments.length < 2 || segments[segments.length - 1] !== roomId)
26
+ return null;
27
+ const documentName = segments.slice(-2).join("/");
28
+ return { wsUrl, documentName, tokenFile };
29
+ }
30
+ /** The dev server says it is alive this often; editors treat a longer silence as a lost dev server. */
31
+ const PING_INTERVAL_MS = 15_000;
32
+ /** An editor tab silent this long is gone (tabs ping every 30s). */
33
+ const PEER_TIMEOUT_MS = 75_000;
34
+ /** Retry after the room refused us: the CLI may still be refreshing the token file. */
35
+ const AUTH_RETRY_MS = 30_000;
36
+ /**
37
+ * A tab joins once for itself and once more when our `hello` crosses its
38
+ * first join; a second join this soon after its state went out is that echo,
39
+ * not a reconnect (which waits out the editor's 3s reconnect delay).
40
+ */
41
+ const REJOIN_ECHO_MS = 2_000;
42
+ /** Room diagnostics with an ISO timestamp, to match against the gateway's logs. Never logs the token. */
43
+ function logRoom(message) {
44
+ console.log(chalk.gray(` [design-asset-room ${new Date().toISOString()}] ${message}`));
45
+ }
46
+ /** An editor tab of the room, as the dev server's `DevServerWebSocket` sees it. */
47
+ class RoomPeer {
48
+ tabId;
49
+ room;
50
+ viaRoom = true;
51
+ readyState = WebSocket.OPEN;
52
+ lastSeenAt = Date.now();
53
+ stateSentAt = Date.now();
54
+ hooks = null;
55
+ constructor(tabId, room) {
56
+ this.tabId = tabId;
57
+ this.room = room;
58
+ }
59
+ send(data) {
60
+ if (this.readyState !== WebSocket.OPEN)
61
+ return;
62
+ this.room.sendTo(this.tabId, data);
63
+ }
64
+ close() {
65
+ this.readyState = WebSocket.CLOSED;
66
+ }
67
+ }
68
+ /**
69
+ * Joins the design asset room as the dev server and feeds every editor tab of
70
+ * the room into `DevServerWebSocket` as a client of its own, so tab routing,
71
+ * request ids and initial state work exactly as on the localhost socket.
72
+ * Messages travel as Hocuspocus stateless messages (see the envelope module).
73
+ */
74
+ export class DesignAssetRoomBridge {
75
+ env;
76
+ server;
77
+ provider = null;
78
+ peers = new Map();
79
+ assembler = new RoomChunkAssembler();
80
+ pingTimer = null;
81
+ authRetryTimer = null;
82
+ hasJoined = false;
83
+ hasWarnedAuth = false;
84
+ constructor(env, server) {
85
+ this.env = env;
86
+ this.server = server;
87
+ }
88
+ start() {
89
+ logRoom(`connecting to ${this.env.wsUrl} as document ${this.env.documentName} (token file ${this.env.tokenFile})`);
90
+ const websocketProvider = new HocuspocusProviderWebsocket({
91
+ url: this.env.wsUrl,
92
+ WebSocketPolyfill: WebSocket,
93
+ });
94
+ this.provider = new HocuspocusProvider({
95
+ websocketProvider,
96
+ name: this.env.documentName,
97
+ document: new Y.Doc(),
98
+ // Read on every (re)connect: the CLI keeps the file fresh. Never logged.
99
+ token: () => {
100
+ try {
101
+ return readFileSync(this.env.tokenFile, "utf8").trim();
102
+ }
103
+ catch (error) {
104
+ logRoom(`cannot read the token file: ${error.message}`);
105
+ return "";
106
+ }
107
+ },
108
+ });
109
+ websocketProvider.on("connect", () => logRoom("socket connected"));
110
+ websocketProvider.on("close", ({ event }) => logRoom(`socket closed (code ${event?.code ?? "?"}${event?.reason ? `, reason ${event.reason}` : ""})`));
111
+ this.provider.on("authenticated", () => {
112
+ logRoom("authenticated");
113
+ this.onJoined();
114
+ });
115
+ this.provider.on("authenticationFailed", ({ reason }) => {
116
+ logRoom(`authentication failed: ${reason}`);
117
+ this.onRefused();
118
+ });
119
+ this.provider.on("disconnect", () => this.onLeft());
120
+ this.provider.on("stateless", ({ payload }) => this.onStateless(payload));
121
+ // A provider given its own socket does not attach to it by itself.
122
+ this.provider.attach();
123
+ this.server.roomBroadcast = (data) => this.sendTo(undefined, data);
124
+ this.pingTimer = setInterval(() => this.tick(), PING_INTERVAL_MS);
125
+ this.pingTimer.unref();
126
+ }
127
+ stop() {
128
+ if (this.pingTimer)
129
+ clearInterval(this.pingTimer);
130
+ if (this.authRetryTimer)
131
+ clearTimeout(this.authRetryTimer);
132
+ this.pingTimer = null;
133
+ this.authRetryTimer = null;
134
+ this.server.roomBroadcast = null;
135
+ this.dropAllPeers();
136
+ const websocketProvider = this.provider?.configuration.websocketProvider;
137
+ this.provider?.destroy();
138
+ websocketProvider?.destroy();
139
+ this.provider = null;
140
+ }
141
+ /** Sends one serialized protocol message to one tab, or to every tab when `tabId` is undefined. */
142
+ sendTo(tabId, data) {
143
+ if (!this.provider?.isAuthenticated)
144
+ return;
145
+ for (const payload of encodeRoomMessage(DEV_SERVER_PEER, data, tabId)) {
146
+ this.provider.sendStateless(payload);
147
+ }
148
+ }
149
+ onJoined() {
150
+ if (this.authRetryTimer)
151
+ clearTimeout(this.authRetryTimer);
152
+ this.authRetryTimer = null;
153
+ this.hasWarnedAuth = false;
154
+ if (!this.hasJoined)
155
+ console.log(chalk.green(" Joined the design asset room — waiting for the editor"));
156
+ this.hasJoined = true;
157
+ // Tabs that were already here answer with `join` and get their initial state.
158
+ this.provider?.sendStateless(encodeRoomControl(DEV_SERVER_PEER, "hello"));
159
+ }
160
+ onRefused() {
161
+ if (!this.hasWarnedAuth) {
162
+ this.hasWarnedAuth = true;
163
+ console.log(chalk.yellow(" The design asset room refused this dev server (room expired or session ended). Retrying — restart `ikas theme dev` if this persists."));
164
+ }
165
+ if (this.authRetryTimer)
166
+ return;
167
+ this.authRetryTimer = setTimeout(() => {
168
+ this.authRetryTimer = null;
169
+ const websocketProvider = this.provider?.configuration.websocketProvider;
170
+ websocketProvider?.disconnect();
171
+ void websocketProvider?.connect();
172
+ }, AUTH_RETRY_MS);
173
+ this.authRetryTimer.unref();
174
+ }
175
+ /** Lost the gateway: tabs re-join after our `hello` once we are back. */
176
+ onLeft() {
177
+ this.dropAllPeers();
178
+ }
179
+ onStateless(payload) {
180
+ const envelope = parseRoomEnvelope(payload);
181
+ // Only editor tabs talk to us; another dev server in the room is ignored.
182
+ if (!envelope || envelope.from === DEV_SERVER_PEER)
183
+ return;
184
+ if (envelope.to && envelope.to !== DEV_SERVER_PEER)
185
+ return;
186
+ const tabId = envelope.from;
187
+ if (envelope.ctl === "leave") {
188
+ this.dropPeer(tabId);
189
+ return;
190
+ }
191
+ if (envelope.ctl === "join") {
192
+ const existing = this.peers.get(tabId);
193
+ if (existing) {
194
+ existing.lastSeenAt = Date.now();
195
+ if (existing.lastSeenAt - existing.stateSentAt < REJOIN_ECHO_MS)
196
+ return;
197
+ // The tab reconnected (or we said hello again): resend its state.
198
+ existing.stateSentAt = existing.lastSeenAt;
199
+ existing.hooks?.receive(JSON.stringify({ type: "request-state" }));
200
+ }
201
+ else {
202
+ this.addPeer(tabId);
203
+ }
204
+ return;
205
+ }
206
+ const data = this.messageOf(envelope);
207
+ if (data === null)
208
+ return;
209
+ const peer = this.peers.get(tabId) ?? this.addPeer(tabId);
210
+ peer.lastSeenAt = Date.now();
211
+ peer.hooks?.receive(data);
212
+ }
213
+ messageOf(envelope) {
214
+ if (envelope.chunk)
215
+ return this.assembler.accept(envelope);
216
+ if (envelope.msg === undefined)
217
+ return null;
218
+ return JSON.stringify(envelope.msg);
219
+ }
220
+ addPeer(tabId) {
221
+ const peer = new RoomPeer(tabId, this);
222
+ this.peers.set(tabId, peer);
223
+ // Registering sends the tab its initial state.
224
+ peer.hooks = this.server.attachRoomClient(peer);
225
+ return peer;
226
+ }
227
+ dropPeer(tabId) {
228
+ const peer = this.peers.get(tabId);
229
+ if (!peer)
230
+ return;
231
+ this.peers.delete(tabId);
232
+ this.assembler.forget(tabId);
233
+ peer.close();
234
+ peer.hooks?.close();
235
+ }
236
+ dropAllPeers() {
237
+ for (const tabId of [...this.peers.keys()])
238
+ this.dropPeer(tabId);
239
+ }
240
+ tick() {
241
+ if (this.provider?.isAuthenticated) {
242
+ this.provider.sendStateless(encodeRoomControl(DEV_SERVER_PEER, "ping"));
243
+ }
244
+ const staleBefore = Date.now() - PEER_TIMEOUT_MS;
245
+ for (const peer of [...this.peers.values()]) {
246
+ if (peer.lastSeenAt < staleBefore)
247
+ this.dropPeer(peer.tabId);
248
+ }
249
+ }
250
+ }
251
+ //# sourceMappingURL=design-asset-room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-asset-room.js","sourceRoot":"","sources":["../../src/utils/design-asset-room.ts"],"names":[],"mappings":"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"}
@@ -486,6 +486,23 @@ export interface ArchiveProjectCommandResult {
486
486
  /** The zip itself, base64 — the editor hands it to the ikas backend. */
487
487
  contentBase64: string;
488
488
  }
489
+ /**
490
+ * What the server needs of a connected client: a localhost socket, or an
491
+ * editor tab that reached the dev server through the design asset room
492
+ * (see `design-asset-room.ts`). `readyState` uses the `ws` constants.
493
+ */
494
+ export interface DevServerClient {
495
+ readonly readyState: number;
496
+ send(data: string): void;
497
+ close(): void;
498
+ /** An editor tab in the design asset room: broadcasts reach it through `roomBroadcast`. */
499
+ readonly viaRoom?: boolean;
500
+ }
501
+ /** Hooks the design asset room uses to feed one of its editor tabs into the server. */
502
+ export interface DevServerClientHooks {
503
+ receive(data: string): void;
504
+ close(): void;
505
+ }
489
506
  /**
490
507
  * Dev server WebSocket manager
491
508
  */
@@ -498,11 +515,27 @@ export declare class DevServerWebSocket {
498
515
  private forwardedEditorActions;
499
516
  /** What a control client sends to drive the editor (see `writeDevServerToken`); none: every action is refused. */
500
517
  private token;
518
+ private handlers;
519
+ /**
520
+ * Sends one message to every editor tab in the design asset room (set while
521
+ * the room is joined). A broadcast goes out once for the whole room instead
522
+ * of once per tab, since the room relays every message to every tab anyway.
523
+ */
524
+ roomBroadcast: ((data: string) => void) | null;
501
525
  constructor(port?: number, token?: string);
502
526
  /**
503
527
  * Start the WebSocket server
504
528
  */
505
529
  start(handlers: EditorMessageHandlers): Promise<void>;
530
+ /**
531
+ * Adds an editor tab that joined the design asset room. Only editors come
532
+ * through the room (control clients stay on localhost), and they can never
533
+ * send `editor-action`: they hold no dev server token.
534
+ */
535
+ attachRoomClient(client: DevServerClient): DevServerClientHooks;
536
+ /** Registers a connected client, sends an editor its initial state, and returns its message/close hooks. */
537
+ private addClient;
538
+ private sendInitialState;
506
539
  /**
507
540
  * Handle incoming messages from editor
508
541
  */
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/utils/websocket-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/utils/websocket-server.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,13 @@ export class DevServerWebSocket {
25
25
  forwardedEditorActions = new Map();
26
26
  /** What a control client sends to drive the editor (see `writeDevServerToken`); none: every action is refused. */
27
27
  token;
28
+ handlers = null;
29
+ /**
30
+ * Sends one message to every editor tab in the design asset room (set while
31
+ * the room is joined). A broadcast goes out once for the whole room instead
32
+ * of once per tab, since the room relays every message to every tab anyway.
33
+ */
34
+ roomBroadcast = null;
28
35
  constructor(port = 5201, token) {
29
36
  this.port = port;
30
37
  this.token = token;
@@ -33,6 +40,7 @@ export class DevServerWebSocket {
33
40
  * Start the WebSocket server
34
41
  */
35
42
  start(handlers) {
43
+ this.handlers = handlers;
36
44
  return new Promise((resolve, reject) => {
37
45
  try {
38
46
  // HTTP server wraps the WS so we can answer Chrome's Private Network
@@ -88,53 +96,12 @@ export class DevServerWebSocket {
88
96
  catch {
89
97
  // Malformed upgrade URL — treat as an editor, the safe default.
90
98
  }
91
- const clientInfo = {
99
+ const hooks = this.addClient(ws, {
92
100
  isControl,
93
101
  authorized: !!this.token && isSameToken(token, this.token),
94
- lastActivityAt: Date.now(),
95
- lastVisibleAt: 0
96
- };
97
- this.clientInfo.set(ws, clientInfo);
98
- if (!isControl)
99
- console.log(chalk.green(" Editor connected"));
100
- // Send initial state on connection. Control clients discard it, and
101
- // it carries every component's compiled JS/CSS — no point shipping
102
- // the whole dev bundle to a socket that exists to send one command.
103
- if (!isControl) {
104
- const state = handlers.onRequestState();
105
- this.sendTo(ws, {
106
- type: "initial-state",
107
- payload: {
108
- components: state.components,
109
- sharedModules: state.sharedModules,
110
- globalStyles: state.globalStyles,
111
- i18n: state.i18n,
112
- warnings: state.warnings,
113
- timestamp: Date.now()
114
- }
115
- });
116
- }
117
- ws.on("message", (data) => {
118
- try {
119
- const message = JSON.parse(data.toString());
120
- this.handleMessage(ws, message, handlers).catch((e) => {
121
- console.error(chalk.red(" Unhandled error in message handler:"), e);
122
- });
123
- }
124
- catch (e) {
125
- console.error(chalk.red(" Invalid message from editor"));
126
- }
127
- });
128
- ws.on("close", () => {
129
- this.clientInfo.delete(ws);
130
- this.dropPendingEditorActionsForClient(ws);
131
- // Read the live flag, not the connect-time one: legacy control
132
- // clients (no `?client=control`) are only marked once they send an
133
- // `editor-action`. The object outlives the map entry, which the
134
- // "error" handler may already have removed.
135
- if (!clientInfo.isControl)
136
- console.log(chalk.yellow(" Editor disconnected"));
137
102
  });
103
+ ws.on("message", (data) => hooks.receive(data.toString()));
104
+ ws.on("close", () => hooks.close());
138
105
  ws.on("error", (error) => {
139
106
  console.error(chalk.red(" WebSocket error:"), error.message);
140
107
  this.clientInfo.delete(ws);
@@ -158,6 +125,70 @@ export class DevServerWebSocket {
158
125
  }
159
126
  });
160
127
  }
128
+ /**
129
+ * Adds an editor tab that joined the design asset room. Only editors come
130
+ * through the room (control clients stay on localhost), and they can never
131
+ * send `editor-action`: they hold no dev server token.
132
+ */
133
+ attachRoomClient(client) {
134
+ return this.addClient(client, { isControl: false, authorized: false });
135
+ }
136
+ /** Registers a connected client, sends an editor its initial state, and returns its message/close hooks. */
137
+ addClient(client, access) {
138
+ const clientInfo = {
139
+ ...access,
140
+ lastActivityAt: Date.now(),
141
+ lastVisibleAt: 0
142
+ };
143
+ this.clientInfo.set(client, clientInfo);
144
+ if (!access.isControl)
145
+ console.log(chalk.green(" Editor connected"));
146
+ // Send initial state on connection. Control clients discard it, and
147
+ // it carries every component's compiled JS/CSS — no point shipping
148
+ // the whole dev bundle to a socket that exists to send one command.
149
+ if (!access.isControl && this.handlers) {
150
+ this.sendInitialState(client, this.handlers);
151
+ }
152
+ return {
153
+ receive: (data) => {
154
+ if (!this.handlers)
155
+ return;
156
+ try {
157
+ const message = JSON.parse(data);
158
+ this.handleMessage(client, message, this.handlers).catch((e) => {
159
+ console.error(chalk.red(" Unhandled error in message handler:"), e);
160
+ });
161
+ }
162
+ catch (e) {
163
+ console.error(chalk.red(" Invalid message from editor"));
164
+ }
165
+ },
166
+ close: () => {
167
+ this.clientInfo.delete(client);
168
+ this.dropPendingEditorActionsForClient(client);
169
+ // Read the live flag, not the connect-time one: legacy control
170
+ // clients (no `?client=control`) are only marked once they send an
171
+ // `editor-action`. The object outlives the map entry, which the
172
+ // "error" handler may already have removed.
173
+ if (!clientInfo.isControl)
174
+ console.log(chalk.yellow(" Editor disconnected"));
175
+ },
176
+ };
177
+ }
178
+ sendInitialState(client, handlers) {
179
+ const state = handlers.onRequestState();
180
+ this.sendTo(client, {
181
+ type: "initial-state",
182
+ payload: {
183
+ components: state.components,
184
+ sharedModules: state.sharedModules,
185
+ globalStyles: state.globalStyles,
186
+ i18n: state.i18n,
187
+ warnings: state.warnings,
188
+ timestamp: Date.now()
189
+ }
190
+ });
191
+ }
161
192
  /**
162
193
  * Handle incoming messages from editor
163
194
  */
@@ -193,18 +224,7 @@ export class DevServerWebSocket {
193
224
  break;
194
225
  }
195
226
  case "request-state": {
196
- const state = handlers.onRequestState();
197
- this.sendTo(ws, {
198
- type: "initial-state",
199
- payload: {
200
- components: state.components,
201
- sharedModules: state.sharedModules,
202
- globalStyles: state.globalStyles,
203
- i18n: state.i18n,
204
- warnings: state.warnings,
205
- timestamp: Date.now()
206
- }
207
- });
227
+ this.sendInitialState(ws, handlers);
208
228
  break;
209
229
  }
210
230
  case "ping":
@@ -709,11 +729,18 @@ export class DevServerWebSocket {
709
729
  */
710
730
  broadcast(message) {
711
731
  const data = JSON.stringify(message);
732
+ let hasRoomClients = false;
712
733
  for (const client of this.clientInfo.keys()) {
734
+ if (client.viaRoom) {
735
+ hasRoomClients = true;
736
+ continue;
737
+ }
713
738
  if (client.readyState === WebSocket.OPEN) {
714
739
  client.send(data);
715
740
  }
716
741
  }
742
+ if (hasRoomClients)
743
+ this.roomBroadcast?.(data);
717
744
  }
718
745
  /**
719
746
  * Broadcast a component update