@jetstart/core 1.1.4 → 1.4.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.
@@ -2,6 +2,7 @@
2
2
  * Main Server Entry Point
3
3
  * Starts HTTP and WebSocket servers
4
4
  */
5
+ import { EventEmitter } from 'events';
5
6
  import { ServerSession } from '../types';
6
7
  export interface ServerConfig {
7
8
  httpPort?: number;
@@ -11,7 +12,7 @@ export interface ServerConfig {
11
12
  projectPath?: string;
12
13
  projectName?: string;
13
14
  }
14
- export declare class JetStartServer {
15
+ export declare class JetStartServer extends EventEmitter {
15
16
  private httpServer;
16
17
  private wsServer;
17
18
  private wsHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAuB;gBAEhC,MAAM,GAAE,YAAiB;IAqB/B,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAiF/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,UAAU,IAAI,aAAa,GAAG,IAAI;IAIlC,OAAO,CAAC,mBAAmB;YAgCb,aAAa;IAwC3B;;OAEG;IACH,OAAO,CAAC,cAAc;CAiCvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAuB;gBAEhC,MAAM,GAAE,YAAiB;IAsB/B,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAiF/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,UAAU,IAAI,aAAa,GAAG,IAAI;IAIlC,OAAO,CAAC,mBAAmB;YAuCb,aAAa;IAwC3B;;OAEG;IACH,OAAO,CAAC,cAAc;CAiCvB"}
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.JetStartServer = void 0;
41
41
  const path = __importStar(require("path"));
42
42
  const os = __importStar(require("os"));
43
+ const events_1 = require("events");
43
44
  const http_1 = require("./http");
44
45
  const websocket_1 = require("../websocket");
45
46
  const logger_1 = require("../utils/logger");
@@ -48,7 +49,7 @@ const session_1 = require("../utils/session");
48
49
  const build_1 = require("../build");
49
50
  const dsl_parser_1 = require("../build/dsl-parser");
50
51
  const gradle_injector_1 = require("../build/gradle-injector");
51
- class JetStartServer {
52
+ class JetStartServer extends events_1.EventEmitter {
52
53
  httpServer;
53
54
  wsServer;
54
55
  wsHandler = null;
@@ -59,6 +60,7 @@ class JetStartServer {
59
60
  buildMutex = false; // Prevent concurrent builds
60
61
  latestApkPath = null; // Store latest built APK path
61
62
  constructor(config = {}) {
63
+ super();
62
64
  const bindHost = config.host || '0.0.0.0';
63
65
  const displayHost = config.displayHost || bindHost;
64
66
  this.config = {
@@ -168,6 +170,8 @@ class JetStartServer {
168
170
  if (this.wsHandler && this.currentSession) {
169
171
  this.wsHandler.sendBuildStart(this.currentSession.id);
170
172
  }
173
+ // Re-emit for external listeners (e.g., dev command)
174
+ this.emit('build:start');
171
175
  });
172
176
  this.buildService.on('build:complete', (result) => {
173
177
  (0, logger_1.success)(`Build completed in ${result.buildTime}ms`);
@@ -179,14 +183,19 @@ class JetStartServer {
179
183
  this.wsHandler.sendBuildComplete(this.currentSession.id, downloadUrl);
180
184
  (0, logger_1.log)(`APK download URL: ${downloadUrl}`);
181
185
  }
186
+ // Re-emit for external listeners (e.g., dev command) with result
187
+ this.emit('build:complete', result);
182
188
  });
183
189
  this.buildService.on('build:error', (errorMsg, details) => {
184
190
  (0, logger_1.error)(`Build failed: ${errorMsg}`);
185
191
  // TODO: Send build-error message via WebSocket
192
+ // Re-emit for external listeners
193
+ this.emit('build:error', errorMsg, details);
186
194
  });
187
195
  this.buildService.on('watch:change', (files) => {
188
196
  // This event is just for logging/monitoring
189
197
  // Actual build logic is handled in startWatching callback
198
+ this.emit('watch:change', files);
190
199
  });
191
200
  }
192
201
  async handleRebuild() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * Logger Utility
3
- * Colored logging for Core
3
+ * Colored logging for Core with log level support
4
+ *
5
+ * Environment Variables:
6
+ * - JETSTART_LOG_LEVEL: error | warn | info | debug (default: info)
7
+ * - DEBUG: Set to enable all debug logs
4
8
  */
5
9
  export declare function log(message: string): void;
6
10
  export declare function success(message: string): void;
7
11
  export declare function error(message: string): void;
8
12
  export declare function warn(message: string): void;
9
13
  export declare function debug(message: string): void;
14
+ export declare function verbose(message: string): void;
10
15
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,QAElC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,QAEtC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,QAEpC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,QAEnC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,QAIpC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,QAIlC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,QAItC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,QAIpC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,QAInC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,QAIpC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,QAGtC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Logger Utility
4
- * Colored logging for Core
4
+ * Colored logging for Core with log level support
5
+ *
6
+ * Environment Variables:
7
+ * - JETSTART_LOG_LEVEL: error | warn | info | debug (default: info)
8
+ * - DEBUG: Set to enable all debug logs
5
9
  */
6
10
  var __importDefault = (this && this.__importDefault) || function (mod) {
7
11
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -12,22 +16,49 @@ exports.success = success;
12
16
  exports.error = error;
13
17
  exports.warn = warn;
14
18
  exports.debug = debug;
19
+ exports.verbose = verbose;
15
20
  const chalk_1 = __importDefault(require("chalk"));
21
+ const LOG_LEVELS = {
22
+ error: 0,
23
+ warn: 1,
24
+ info: 2,
25
+ debug: 3,
26
+ };
27
+ function getLogLevel() {
28
+ const level = process.env.JETSTART_LOG_LEVEL?.toLowerCase();
29
+ return LOG_LEVELS[level] !== undefined ? level : 'info';
30
+ }
31
+ function shouldLog(level) {
32
+ const currentLevel = getLogLevel();
33
+ return LOG_LEVELS[level] <= LOG_LEVELS[currentLevel];
34
+ }
16
35
  function log(message) {
17
- console.log(chalk_1.default.cyan('[Core]'), message);
36
+ if (shouldLog('info')) {
37
+ console.log(chalk_1.default.cyan('[Core]'), message);
38
+ }
18
39
  }
19
40
  function success(message) {
20
- console.log(chalk_1.default.green(''), chalk_1.default.cyan('[Core]'), message);
41
+ if (shouldLog('info')) {
42
+ console.log(chalk_1.default.green('✔'), chalk_1.default.cyan('[Core]'), message);
43
+ }
21
44
  }
22
45
  function error(message) {
23
- console.error(chalk_1.default.red(''), chalk_1.default.cyan('[Core]'), message);
46
+ if (shouldLog('error')) {
47
+ console.error(chalk_1.default.red('✖'), chalk_1.default.cyan('[Core]'), message);
48
+ }
24
49
  }
25
50
  function warn(message) {
26
- console.log(chalk_1.default.yellow(''), chalk_1.default.cyan('[Core]'), message);
51
+ if (shouldLog('warn')) {
52
+ console.log(chalk_1.default.yellow('⚠'), chalk_1.default.cyan('[Core]'), message);
53
+ }
27
54
  }
28
55
  function debug(message) {
29
- if (process.env.DEBUG) {
56
+ if (process.env.DEBUG || shouldLog('debug')) {
30
57
  console.log(chalk_1.default.gray('[DEBUG]'), chalk_1.default.cyan('[Core]'), message);
31
58
  }
32
59
  }
60
+ function verbose(message) {
61
+ // Only log if DEBUG is set or log level is debug
62
+ debug(message);
63
+ }
33
64
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAIH,kBAEC;AAED,0BAEC;AAED,sBAEC;AAED,oBAEC;AAED,sBAIC;AAtBD,kDAA0B;AAE1B,SAAgB,GAAG,CAAC,OAAe;IACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;AAuBH,kBAIC;AAED,0BAIC;AAED,sBAIC;AAED,oBAIC;AAED,sBAIC;AAED,0BAGC;AAtDD,kDAA0B;AAI1B,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAS,WAAW;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,EAAc,CAAC;IACxE,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;IACnC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,GAAG,CAAC,OAAe;IACjC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAgB,IAAI,CAAC,OAAe;IAClC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAC,OAAe;IACrC,iDAAiD;IACjD,KAAK,CAAC,OAAO,CAAC,CAAC;AACjB,CAAC"}
@@ -13,6 +13,7 @@ export declare class SessionManager {
13
13
  updateActivity(sessionId: string): void;
14
14
  deleteSession(sessionId: string): void;
15
15
  cleanupExpiredSessions(): void;
16
+ private generateShortId;
16
17
  private generateToken;
17
18
  }
18
19
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAyC;IAEnD,aAAa,CAAC,IAAI,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,aAAa,CAAC;IAc1B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIxD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,sBAAsB,IAAI,IAAI;IAU9B,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAyC;IAEnD,aAAa,CAAC,IAAI,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,aAAa,CAAC;IAc1B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIxD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,sBAAsB,IAAI,IAAI;IAU9B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,aAAa;CAStB"}
@@ -5,13 +5,12 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.SessionManager = void 0;
8
- const uuid_1 = require("uuid");
9
8
  const shared_1 = require("@jetstart/shared");
10
9
  class SessionManager {
11
10
  sessions = new Map();
12
11
  async createSession(data) {
13
12
  const session = {
14
- id: (0, uuid_1.v4)(),
13
+ id: this.generateShortId(),
15
14
  token: this.generateToken(),
16
15
  projectName: data.projectName,
17
16
  projectPath: data.projectPath,
@@ -41,8 +40,24 @@ class SessionManager {
41
40
  }
42
41
  }
43
42
  }
43
+ generateShortId() {
44
+ // Generate a short random ID (8 chars) for QR code efficiency
45
+ // Use base62 (alphanumeric) for better QR code density
46
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
47
+ let result = '';
48
+ for (let i = 0; i < 8; i++) {
49
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
50
+ }
51
+ return result;
52
+ }
44
53
  generateToken() {
45
- return (0, uuid_1.v4)().replace(/-/g, '');
54
+ // Generate a short random token (12 chars) for QR code efficiency
55
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
56
+ let result = '';
57
+ for (let i = 0; i < 12; i++) {
58
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
59
+ }
60
+ return result;
46
61
  }
47
62
  }
48
63
  exports.SessionManager = SessionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAAoC;AAEpC,6CAAwD;AAExD,MAAa,cAAc;IACjB,QAAQ,GAA+B,IAAI,GAAG,EAAE,CAAC;IAEzD,KAAK,CAAC,aAAa,CAAC,IAGnB;QACC,MAAM,OAAO,GAAkB;YAC7B,EAAE,EAAE,IAAA,SAAM,GAAE;YACZ,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,sBAAsB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,GAAG,6BAAoB,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,OAAO,IAAA,SAAM,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;CACF;AAhDD,wCAgDC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,6CAAwD;AAExD,MAAa,cAAc;IACjB,QAAQ,GAA+B,IAAI,GAAG,EAAE,CAAC;IAEzD,KAAK,CAAC,aAAa,CAAC,IAGnB;QACC,MAAM,OAAO,GAAkB;YAC7B,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE;YAC1B,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,sBAAsB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,GAAG,6BAAoB,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,8DAA8D;QAC9D,uDAAuD;QACvD,MAAM,KAAK,GAAG,gEAAgE,CAAC;QAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa;QACnB,kEAAkE;QAClE,MAAM,KAAK,GAAG,gEAAgE,CAAC;QAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjED,wCAiEC"}
@@ -17,7 +17,7 @@ export declare class WebSocketHandler {
17
17
  sendBuildStart(sessionId: string): void;
18
18
  sendBuildComplete(sessionId: string, apkUrl: string): void;
19
19
  /**
20
- * Send UI update (DSL-based hot reload)
20
+ * Send UI update (DSL-based hot reload) - SECURE, session-isolated
21
21
  */
22
22
  sendUIUpdate(sessionId: string, dslContent: string, screens?: string[]): void;
23
23
  private generateHash;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/websocket/handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,iBAAiB;IAH3B,OAAO,CAAC,iBAAiB,CAAC,CAA8B;gBAG9C,iBAAiB,EAAE,iBAAiB,EAC5C,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAK/D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAenD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,gBAAgB;IAKxB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUvC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAqB1D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAe7E,OAAO,CAAC,YAAY;CAUrB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/websocket/handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,iBAAiB;IAH3B,OAAO,CAAC,iBAAiB,CAAC,CAA8B;gBAG9C,iBAAiB,EAAE,iBAAiB,EAC5C,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAK/D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAenD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,gBAAgB;IAKxB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUvC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAqB1D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAe7E,OAAO,CAAC,YAAY;CAUrB"}
@@ -50,6 +50,8 @@ class WebSocketHandler {
50
50
  }
51
51
  handleConnect(clientId, message) {
52
52
  (0, logger_1.log)(`Client connecting with session: ${message.sessionId}`);
53
+ // Associate this client with the session for isolation
54
+ this.connectionManager.setClientSession(clientId, message.sessionId);
53
55
  // Send connected confirmation
54
56
  const response = {
55
57
  type: 'core:connected',
@@ -74,7 +76,7 @@ class WebSocketHandler {
74
76
  timestamp: Date.now(),
75
77
  sessionId,
76
78
  };
77
- this.connectionManager.broadcast(message);
79
+ this.connectionManager.broadcastToSession(sessionId, message);
78
80
  }
79
81
  sendBuildComplete(sessionId, apkUrl) {
80
82
  const message = {
@@ -93,10 +95,10 @@ class WebSocketHandler {
93
95
  },
94
96
  downloadUrl: apkUrl,
95
97
  };
96
- this.connectionManager.broadcast(message);
98
+ this.connectionManager.broadcastToSession(sessionId, message);
97
99
  }
98
100
  /**
99
- * Send UI update (DSL-based hot reload)
101
+ * Send UI update (DSL-based hot reload) - SECURE, session-isolated
100
102
  */
101
103
  sendUIUpdate(sessionId, dslContent, screens) {
102
104
  const message = {
@@ -107,9 +109,9 @@ class WebSocketHandler {
107
109
  screens,
108
110
  hash: this.generateHash(dslContent),
109
111
  };
110
- (0, logger_1.log)(`Sending UI update: ${dslContent.length} bytes`);
112
+ (0, logger_1.log)(`Sending UI update to session ${sessionId}: ${dslContent.length} bytes`);
111
113
  (0, logger_1.log)(`DSL Content: ${dslContent}`);
112
- this.connectionManager.broadcast(message);
114
+ this.connectionManager.broadcastToSession(sessionId, message);
113
115
  }
114
116
  generateHash(content) {
115
117
  // Simple hash for caching (in production, use crypto.createHash)
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/websocket/handler.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAWH,4CAAyD;AAEzD,MAAa,gBAAgB;IAIjB;IAHF,iBAAiB,CAA+B;IAExD,YACU,iBAAoC,EAC5C,OAA6D;QADrD,sBAAiB,GAAjB,iBAAiB,CAAmB;QAG5C,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,IAAY;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,IAAA,YAAG,EAAC,yBAAyB,QAAQ,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAE1D,8BAA8B;YAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;QAEH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAA,cAAQ,EAAC,gCAAgC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,OAAkB;QACxC,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEO,mBAAmB,CAAC,QAAgB,EAAE,OAAsB;QAClE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,gBAAgB;gBACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,eAAe;gBAClB,IAAA,YAAG,EAAC,UAAU,QAAQ,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,YAAY;gBACf,0BAA0B;gBAC1B,MAAM;YACR,KAAK,kBAAkB;gBACrB,uBAAuB;gBACvB,MAAM;YACR,KAAK,mBAAmB;gBACtB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzC,MAAM;QACV,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,OAAmD;QACzF,IAAA,YAAG,EAAC,mCAAmC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAE5D,8BAA8B;QAC9B,MAAM,QAAQ,GAAyB;YACrC,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,aAAa,EAAE,2CAA2C;SACxE,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAExD,uCAAuC;QACvC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAA,YAAG,EAAC,yCAAyC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,QAAgB,EAAE,OAAsD;QAC/F,IAAA,YAAG,EAAC,yBAAyB,OAAO,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,2BAA2B;IAC3B,cAAc,CAAC,SAAiB;QAC9B,MAAM,OAAO,GAA0B;YACrC,IAAI,EAAE,kBAAkB;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,iBAAiB,CAAC,SAAiB,EAAE,MAAc;QACjD,MAAM,OAAO,GAA6B;YACxC,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS;YACT,OAAO,EAAE;gBACP,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,OAAO;gBACpB,aAAa,EAAE,EAAE;gBACjB,gBAAgB,EAAE,EAAE;gBACpB,aAAa,EAAE,iBAAiB;aACjC;YACD,WAAW,EAAE,MAAM;SACpB,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB,EAAE,UAAkB,EAAE,OAAkB;QACpE,MAAM,OAAO,GAAwB;YACnC,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS;YACT,UAAU;YACV,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;SACpC,CAAC;QAEF,IAAA,YAAG,EAAC,sBAAsB,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;QACrD,IAAA,YAAG,EAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,iEAAiE;QACjE,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,2BAA2B;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;CACF;AArID,4CAqIC"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/websocket/handler.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Connection Manager
3
- * Manages WebSocket connections
3
+ * Manages WebSocket connections with session isolation
4
4
  */
5
5
  import { WebSocket } from 'ws';
6
6
  import { CoreMessage } from '@jetstart/shared';
@@ -9,8 +9,24 @@ export declare class ConnectionManager {
9
9
  addConnection(ws: WebSocket): string;
10
10
  removeConnection(id: string): void;
11
11
  getConnection(id: string): WebSocket | undefined;
12
+ /**
13
+ * Associate a client with a session for isolation
14
+ */
15
+ setClientSession(clientId: string, sessionId: string): void;
12
16
  sendToClient(clientId: string, message: CoreMessage): boolean;
17
+ /**
18
+ * Broadcast to all clients (UNSAFE - use broadcastToSession instead)
19
+ * @deprecated Use broadcastToSession for session isolation
20
+ */
13
21
  broadcast(message: CoreMessage): void;
22
+ /**
23
+ * Broadcast to all clients in a specific session (SECURE)
24
+ */
25
+ broadcastToSession(sessionId: string, message: CoreMessage): void;
26
+ /**
27
+ * Broadcast to ALL clients regardless of session (use with caution)
28
+ */
29
+ private broadcastToAll;
14
30
  getConnectionCount(): number;
15
31
  }
16
32
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/websocket/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAqC;IAExD,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM;IAMpC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIhD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO;IAgB7D,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAiBrC,kBAAkB,IAAI,MAAM;CAG7B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/websocket/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAA4C;IAE/D,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM;IAMpC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIhD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAU3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO;IAgB7D;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKrC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAwBjE;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB,kBAAkB,IAAI,MAAM;CAG7B"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Connection Manager
4
- * Manages WebSocket connections
4
+ * Manages WebSocket connections with session isolation
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.ConnectionManager = void 0;
@@ -11,22 +11,34 @@ class ConnectionManager {
11
11
  connections = new Map();
12
12
  addConnection(ws) {
13
13
  const id = (0, uuid_1.v4)();
14
- this.connections.set(id, ws);
14
+ this.connections.set(id, { ws, sessionId: undefined });
15
15
  return id;
16
16
  }
17
17
  removeConnection(id) {
18
18
  this.connections.delete(id);
19
19
  }
20
20
  getConnection(id) {
21
- return this.connections.get(id);
21
+ return this.connections.get(id)?.ws;
22
+ }
23
+ /**
24
+ * Associate a client with a session for isolation
25
+ */
26
+ setClientSession(clientId, sessionId) {
27
+ const connection = this.connections.get(clientId);
28
+ if (connection) {
29
+ connection.sessionId = sessionId;
30
+ if (process.env.DEBUG) {
31
+ console.log(`[ConnectionManager] Client ${clientId} joined session ${sessionId}`);
32
+ }
33
+ }
22
34
  }
23
35
  sendToClient(clientId, message) {
24
- const ws = this.connections.get(clientId);
25
- if (!ws || ws.readyState !== ws_1.WebSocket.OPEN) {
36
+ const connection = this.connections.get(clientId);
37
+ if (!connection || connection.ws.readyState !== ws_1.WebSocket.OPEN) {
26
38
  return false;
27
39
  }
28
40
  try {
29
- ws.send(JSON.stringify(message));
41
+ connection.ws.send(JSON.stringify(message));
30
42
  return true;
31
43
  }
32
44
  catch (err) {
@@ -34,14 +46,50 @@ class ConnectionManager {
34
46
  return false;
35
47
  }
36
48
  }
49
+ /**
50
+ * Broadcast to all clients (UNSAFE - use broadcastToSession instead)
51
+ * @deprecated Use broadcastToSession for session isolation
52
+ */
37
53
  broadcast(message) {
54
+ console.warn('[ConnectionManager] WARNING: Using unsafe broadcast() - use broadcastToSession() instead');
55
+ this.broadcastToAll(message);
56
+ }
57
+ /**
58
+ * Broadcast to all clients in a specific session (SECURE)
59
+ */
60
+ broadcastToSession(sessionId, message) {
61
+ const data = JSON.stringify(message);
62
+ let sentCount = 0;
63
+ this.connections.forEach((connection, clientId) => {
64
+ // Only send to clients in the same session
65
+ if (connection.sessionId === sessionId && connection.ws.readyState === ws_1.WebSocket.OPEN) {
66
+ try {
67
+ connection.ws.send(data);
68
+ sentCount++;
69
+ if (process.env.DEBUG) {
70
+ console.log(`[ConnectionManager] Sent ${message.type} to client ${clientId} in session ${sessionId.slice(0, 8)}...`);
71
+ }
72
+ }
73
+ catch (err) {
74
+ console.error(`Failed to send to ${clientId}:`, err);
75
+ }
76
+ }
77
+ });
78
+ if (process.env.DEBUG) {
79
+ console.log(`[ConnectionManager] Broadcasted ${message.type} to ${sentCount} clients in session ${sessionId.slice(0, 8)}...`);
80
+ }
81
+ }
82
+ /**
83
+ * Broadcast to ALL clients regardless of session (use with caution)
84
+ */
85
+ broadcastToAll(message) {
38
86
  const data = JSON.stringify(message);
39
- const connectionCount = Array.from(this.connections.values()).filter(ws => ws.readyState === ws_1.WebSocket.OPEN).length;
87
+ const connectionCount = Array.from(this.connections.values()).filter(c => c.ws.readyState === ws_1.WebSocket.OPEN).length;
40
88
  console.log(`[ConnectionManager] Broadcasting ${message.type} to ${connectionCount} connected clients`);
41
- this.connections.forEach((ws, clientId) => {
42
- if (ws.readyState === ws_1.WebSocket.OPEN) {
89
+ this.connections.forEach((connection, clientId) => {
90
+ if (connection.ws.readyState === ws_1.WebSocket.OPEN) {
43
91
  try {
44
- ws.send(data);
92
+ connection.ws.send(data);
45
93
  console.log(`[ConnectionManager] Sent ${message.type} to client ${clientId}`);
46
94
  }
47
95
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/websocket/manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2BAA+B;AAC/B,+BAAoC;AAGpC,MAAa,iBAAiB;IACpB,WAAW,GAA2B,IAAI,GAAG,EAAE,CAAC;IAExD,aAAa,CAAC,EAAa;QACzB,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAoB;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAoB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACpH,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,IAAI,OAAO,eAAe,oBAAoB,CAAC,CAAC;QAExG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;YACxC,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,cAAc,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF;AArDD,8CAqDC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/websocket/manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2BAA+B;AAC/B,+BAAoC;AAQpC,MAAa,iBAAiB;IACpB,WAAW,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE/D,aAAa,CAAC,EAAa;QACzB,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB,EAAE,SAAiB;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;YACjC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,mBAAmB,SAAS,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAoB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,OAAoB;QAC5B,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;QACzG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,SAAiB,EAAE,OAAoB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YAChD,2CAA2C;YAC3C,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBACtF,IAAI,CAAC;oBACH,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,SAAS,EAAE,CAAC;oBACZ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,cAAc,QAAQ,eAAe,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACvH,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,IAAI,OAAO,SAAS,uBAAuB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChI,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAoB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACrH,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,IAAI,OAAO,eAAe,oBAAoB,CAAC,CAAC;QAExG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YAChD,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,cAAc,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF;AAzGD,8CAyGC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetstart/core",
3
- "version": "1.1.4",
3
+ "version": "1.4.0",
4
4
  "description": "Build server and orchestration for JetStart",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "homepage": "https://github.com/dev-phantom/jetstart#readme",
35
35
  "dependencies": {
36
- "@jetstart/shared": "^1.1.4",
36
+ "@jetstart/shared": "^1.4.0",
37
37
  "express": "^4.18.2",
38
38
  "ws": "^8.14.2",
39
39
  "chokidar": "^3.5.3",
@@ -5,6 +5,7 @@
5
5
 
6
6
  import * as path from 'path';
7
7
  import * as os from 'os';
8
+ import { EventEmitter } from 'events';
8
9
  import { createHttpServer } from './http';
9
10
  import { createWebSocketServer } from '../websocket';
10
11
  import { WebSocketHandler } from '../websocket/handler';
@@ -25,7 +26,7 @@ export interface ServerConfig {
25
26
  projectName?: string;
26
27
  }
27
28
 
28
- export class JetStartServer {
29
+ export class JetStartServer extends EventEmitter {
29
30
  private httpServer: any;
30
31
  private wsServer: any;
31
32
  private wsHandler: WebSocketHandler | null = null;
@@ -37,6 +38,7 @@ export class JetStartServer {
37
38
  private latestApkPath: string | null = null; // Store latest built APK path
38
39
 
39
40
  constructor(config: ServerConfig = {}) {
41
+ super();
40
42
  const bindHost = config.host || '0.0.0.0';
41
43
  const displayHost = config.displayHost || bindHost;
42
44
 
@@ -167,6 +169,8 @@ export class JetStartServer {
167
169
  if (this.wsHandler && this.currentSession) {
168
170
  this.wsHandler.sendBuildStart(this.currentSession.id);
169
171
  }
172
+ // Re-emit for external listeners (e.g., dev command)
173
+ this.emit('build:start');
170
174
  });
171
175
 
172
176
  this.buildService.on('build:complete', (result) => {
@@ -180,16 +184,21 @@ export class JetStartServer {
180
184
  this.wsHandler.sendBuildComplete(this.currentSession.id, downloadUrl);
181
185
  log(`APK download URL: ${downloadUrl}`);
182
186
  }
187
+ // Re-emit for external listeners (e.g., dev command) with result
188
+ this.emit('build:complete', result);
183
189
  });
184
190
 
185
191
  this.buildService.on('build:error', (errorMsg, details) => {
186
192
  error(`Build failed: ${errorMsg}`);
187
193
  // TODO: Send build-error message via WebSocket
194
+ // Re-emit for external listeners
195
+ this.emit('build:error', errorMsg, details);
188
196
  });
189
197
 
190
198
  this.buildService.on('watch:change', (files) => {
191
199
  // This event is just for logging/monitoring
192
200
  // Actual build logic is handled in startWatching callback
201
+ this.emit('watch:change', files);
193
202
  });
194
203
  }
195
204
 
@@ -1,28 +1,64 @@
1
1
  /**
2
2
  * Logger Utility
3
- * Colored logging for Core
3
+ * Colored logging for Core with log level support
4
+ *
5
+ * Environment Variables:
6
+ * - JETSTART_LOG_LEVEL: error | warn | info | debug (default: info)
7
+ * - DEBUG: Set to enable all debug logs
4
8
  */
5
9
 
6
10
  import chalk from 'chalk';
7
11
 
12
+ type LogLevel = 'error' | 'warn' | 'info' | 'debug';
13
+
14
+ const LOG_LEVELS: Record<LogLevel, number> = {
15
+ error: 0,
16
+ warn: 1,
17
+ info: 2,
18
+ debug: 3,
19
+ };
20
+
21
+ function getLogLevel(): LogLevel {
22
+ const level = process.env.JETSTART_LOG_LEVEL?.toLowerCase() as LogLevel;
23
+ return LOG_LEVELS[level] !== undefined ? level : 'info';
24
+ }
25
+
26
+ function shouldLog(level: LogLevel): boolean {
27
+ const currentLevel = getLogLevel();
28
+ return LOG_LEVELS[level] <= LOG_LEVELS[currentLevel];
29
+ }
30
+
8
31
  export function log(message: string) {
9
- console.log(chalk.cyan('[Core]'), message);
32
+ if (shouldLog('info')) {
33
+ console.log(chalk.cyan('[Core]'), message);
34
+ }
10
35
  }
11
36
 
12
37
  export function success(message: string) {
13
- console.log(chalk.green(''), chalk.cyan('[Core]'), message);
38
+ if (shouldLog('info')) {
39
+ console.log(chalk.green('✔'), chalk.cyan('[Core]'), message);
40
+ }
14
41
  }
15
42
 
16
43
  export function error(message: string) {
17
- console.error(chalk.red(''), chalk.cyan('[Core]'), message);
44
+ if (shouldLog('error')) {
45
+ console.error(chalk.red('✖'), chalk.cyan('[Core]'), message);
46
+ }
18
47
  }
19
48
 
20
49
  export function warn(message: string) {
21
- console.log(chalk.yellow(''), chalk.cyan('[Core]'), message);
50
+ if (shouldLog('warn')) {
51
+ console.log(chalk.yellow('⚠'), chalk.cyan('[Core]'), message);
52
+ }
22
53
  }
23
54
 
24
55
  export function debug(message: string) {
25
- if (process.env.DEBUG) {
56
+ if (process.env.DEBUG || shouldLog('debug')) {
26
57
  console.log(chalk.gray('[DEBUG]'), chalk.cyan('[Core]'), message);
27
58
  }
59
+ }
60
+
61
+ export function verbose(message: string) {
62
+ // Only log if DEBUG is set or log level is debug
63
+ debug(message);
28
64
  }
@@ -15,7 +15,7 @@ export class SessionManager {
15
15
  projectPath: string;
16
16
  }): Promise<ServerSession> {
17
17
  const session: ServerSession = {
18
- id: uuidv4(),
18
+ id: this.generateShortId(),
19
19
  token: this.generateToken(),
20
20
  projectName: data.projectName,
21
21
  projectPath: data.projectPath,
@@ -52,7 +52,24 @@ export class SessionManager {
52
52
  }
53
53
  }
54
54
 
55
+ private generateShortId(): string {
56
+ // Generate a short random ID (8 chars) for QR code efficiency
57
+ // Use base62 (alphanumeric) for better QR code density
58
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
59
+ let result = '';
60
+ for (let i = 0; i < 8; i++) {
61
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
62
+ }
63
+ return result;
64
+ }
65
+
55
66
  private generateToken(): string {
56
- return uuidv4().replace(/-/g, '');
67
+ // Generate a short random token (12 chars) for QR code efficiency
68
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
69
+ let result = '';
70
+ for (let i = 0; i < 12; i++) {
71
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
72
+ }
73
+ return result;
57
74
  }
58
75
  }
@@ -66,6 +66,9 @@ export class WebSocketHandler {
66
66
  private handleConnect(clientId: string, message: ClientMessage & { type: 'client:connect' }): void {
67
67
  log(`Client connecting with session: ${message.sessionId}`);
68
68
 
69
+ // Associate this client with the session for isolation
70
+ this.connectionManager.setClientSession(clientId, message.sessionId);
71
+
69
72
  // Send connected confirmation
70
73
  const response: CoreConnectedMessage = {
71
74
  type: 'core:connected',
@@ -95,7 +98,7 @@ export class WebSocketHandler {
95
98
  sessionId,
96
99
  };
97
100
 
98
- this.connectionManager.broadcast(message);
101
+ this.connectionManager.broadcastToSession(sessionId, message);
99
102
  }
100
103
 
101
104
  sendBuildComplete(sessionId: string, apkUrl: string): void {
@@ -116,11 +119,11 @@ export class WebSocketHandler {
116
119
  downloadUrl: apkUrl,
117
120
  };
118
121
 
119
- this.connectionManager.broadcast(message);
122
+ this.connectionManager.broadcastToSession(sessionId, message);
120
123
  }
121
124
 
122
125
  /**
123
- * Send UI update (DSL-based hot reload)
126
+ * Send UI update (DSL-based hot reload) - SECURE, session-isolated
124
127
  */
125
128
  sendUIUpdate(sessionId: string, dslContent: string, screens?: string[]): void {
126
129
  const message: CoreUIUpdateMessage = {
@@ -132,9 +135,9 @@ export class WebSocketHandler {
132
135
  hash: this.generateHash(dslContent),
133
136
  };
134
137
 
135
- log(`Sending UI update: ${dslContent.length} bytes`);
138
+ log(`Sending UI update to session ${sessionId}: ${dslContent.length} bytes`);
136
139
  log(`DSL Content: ${dslContent}`);
137
- this.connectionManager.broadcast(message);
140
+ this.connectionManager.broadcastToSession(sessionId, message);
138
141
  }
139
142
 
140
143
  private generateHash(content: string): string {
@@ -1,18 +1,23 @@
1
1
  /**
2
2
  * Connection Manager
3
- * Manages WebSocket connections
3
+ * Manages WebSocket connections with session isolation
4
4
  */
5
5
 
6
6
  import { WebSocket } from 'ws';
7
7
  import { v4 as uuidv4 } from 'uuid';
8
8
  import { CoreMessage } from '@jetstart/shared';
9
9
 
10
+ interface ClientConnection {
11
+ ws: WebSocket;
12
+ sessionId?: string; // Session ID for isolation
13
+ }
14
+
10
15
  export class ConnectionManager {
11
- private connections: Map<string, WebSocket> = new Map();
16
+ private connections: Map<string, ClientConnection> = new Map();
12
17
 
13
18
  addConnection(ws: WebSocket): string {
14
19
  const id = uuidv4();
15
- this.connections.set(id, ws);
20
+ this.connections.set(id, { ws, sessionId: undefined });
16
21
  return id;
17
22
  }
18
23
 
@@ -21,18 +26,31 @@ export class ConnectionManager {
21
26
  }
22
27
 
23
28
  getConnection(id: string): WebSocket | undefined {
24
- return this.connections.get(id);
29
+ return this.connections.get(id)?.ws;
30
+ }
31
+
32
+ /**
33
+ * Associate a client with a session for isolation
34
+ */
35
+ setClientSession(clientId: string, sessionId: string): void {
36
+ const connection = this.connections.get(clientId);
37
+ if (connection) {
38
+ connection.sessionId = sessionId;
39
+ if (process.env.DEBUG) {
40
+ console.log(`[ConnectionManager] Client ${clientId} joined session ${sessionId}`);
41
+ }
42
+ }
25
43
  }
26
44
 
27
45
  sendToClient(clientId: string, message: CoreMessage): boolean {
28
- const ws = this.connections.get(clientId);
29
-
30
- if (!ws || ws.readyState !== WebSocket.OPEN) {
46
+ const connection = this.connections.get(clientId);
47
+
48
+ if (!connection || connection.ws.readyState !== WebSocket.OPEN) {
31
49
  return false;
32
50
  }
33
51
 
34
52
  try {
35
- ws.send(JSON.stringify(message));
53
+ connection.ws.send(JSON.stringify(message));
36
54
  return true;
37
55
  } catch (err) {
38
56
  console.error(`Failed to send message to ${clientId}:`, err);
@@ -40,15 +58,54 @@ export class ConnectionManager {
40
58
  }
41
59
  }
42
60
 
61
+ /**
62
+ * Broadcast to all clients (UNSAFE - use broadcastToSession instead)
63
+ * @deprecated Use broadcastToSession for session isolation
64
+ */
43
65
  broadcast(message: CoreMessage): void {
66
+ console.warn('[ConnectionManager] WARNING: Using unsafe broadcast() - use broadcastToSession() instead');
67
+ this.broadcastToAll(message);
68
+ }
69
+
70
+ /**
71
+ * Broadcast to all clients in a specific session (SECURE)
72
+ */
73
+ broadcastToSession(sessionId: string, message: CoreMessage): void {
74
+ const data = JSON.stringify(message);
75
+ let sentCount = 0;
76
+
77
+ this.connections.forEach((connection, clientId) => {
78
+ // Only send to clients in the same session
79
+ if (connection.sessionId === sessionId && connection.ws.readyState === WebSocket.OPEN) {
80
+ try {
81
+ connection.ws.send(data);
82
+ sentCount++;
83
+ if (process.env.DEBUG) {
84
+ console.log(`[ConnectionManager] Sent ${message.type} to client ${clientId} in session ${sessionId.slice(0, 8)}...`);
85
+ }
86
+ } catch (err) {
87
+ console.error(`Failed to send to ${clientId}:`, err);
88
+ }
89
+ }
90
+ });
91
+
92
+ if (process.env.DEBUG) {
93
+ console.log(`[ConnectionManager] Broadcasted ${message.type} to ${sentCount} clients in session ${sessionId.slice(0, 8)}...`);
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Broadcast to ALL clients regardless of session (use with caution)
99
+ */
100
+ private broadcastToAll(message: CoreMessage): void {
44
101
  const data = JSON.stringify(message);
45
- const connectionCount = Array.from(this.connections.values()).filter(ws => ws.readyState === WebSocket.OPEN).length;
102
+ const connectionCount = Array.from(this.connections.values()).filter(c => c.ws.readyState === WebSocket.OPEN).length;
46
103
  console.log(`[ConnectionManager] Broadcasting ${message.type} to ${connectionCount} connected clients`);
47
104
 
48
- this.connections.forEach((ws, clientId) => {
49
- if (ws.readyState === WebSocket.OPEN) {
105
+ this.connections.forEach((connection, clientId) => {
106
+ if (connection.ws.readyState === WebSocket.OPEN) {
50
107
  try {
51
- ws.send(data);
108
+ connection.ws.send(data);
52
109
  console.log(`[ConnectionManager] Sent ${message.type} to client ${clientId}`);
53
110
  } catch (err) {
54
111
  console.error(`Failed to broadcast to ${clientId}:`, err);