@jetstart/core 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/.eslintrc.json +6 -0
  2. package/README.md +124 -0
  3. package/dist/build/builder.d.ts +57 -0
  4. package/dist/build/builder.d.ts.map +1 -0
  5. package/dist/build/builder.js +151 -0
  6. package/dist/build/builder.js.map +1 -0
  7. package/dist/build/cache.d.ts +51 -0
  8. package/dist/build/cache.d.ts.map +1 -0
  9. package/dist/build/cache.js +152 -0
  10. package/dist/build/cache.js.map +1 -0
  11. package/dist/build/dsl-parser.d.ts +54 -0
  12. package/dist/build/dsl-parser.d.ts.map +1 -0
  13. package/dist/build/dsl-parser.js +373 -0
  14. package/dist/build/dsl-parser.js.map +1 -0
  15. package/dist/build/dsl-types.d.ts +47 -0
  16. package/dist/build/dsl-types.d.ts.map +1 -0
  17. package/dist/build/dsl-types.js +7 -0
  18. package/dist/build/dsl-types.js.map +1 -0
  19. package/dist/build/gradle-injector.d.ts +14 -0
  20. package/dist/build/gradle-injector.d.ts.map +1 -0
  21. package/dist/build/gradle-injector.js +77 -0
  22. package/dist/build/gradle-injector.js.map +1 -0
  23. package/dist/build/gradle.d.ts +43 -0
  24. package/dist/build/gradle.d.ts.map +1 -0
  25. package/dist/build/gradle.js +281 -0
  26. package/dist/build/gradle.js.map +1 -0
  27. package/dist/build/index.d.ts +10 -0
  28. package/dist/build/index.d.ts.map +1 -0
  29. package/dist/build/index.js +26 -0
  30. package/dist/build/index.js.map +1 -0
  31. package/dist/build/parser.d.ts +12 -0
  32. package/dist/build/parser.d.ts.map +1 -0
  33. package/dist/build/parser.js +71 -0
  34. package/dist/build/parser.js.map +1 -0
  35. package/dist/build/watcher.d.ts +30 -0
  36. package/dist/build/watcher.d.ts.map +1 -0
  37. package/dist/build/watcher.js +120 -0
  38. package/dist/build/watcher.js.map +1 -0
  39. package/dist/index.d.ts +11 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +26 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/server/http.d.ts +12 -0
  44. package/dist/server/http.d.ts.map +1 -0
  45. package/dist/server/http.js +32 -0
  46. package/dist/server/http.js.map +1 -0
  47. package/dist/server/index.d.ts +35 -0
  48. package/dist/server/index.d.ts.map +1 -0
  49. package/dist/server/index.js +262 -0
  50. package/dist/server/index.js.map +1 -0
  51. package/dist/server/middleware.d.ts +7 -0
  52. package/dist/server/middleware.d.ts.map +1 -0
  53. package/dist/server/middleware.js +42 -0
  54. package/dist/server/middleware.js.map +1 -0
  55. package/dist/server/routes.d.ts +7 -0
  56. package/dist/server/routes.d.ts.map +1 -0
  57. package/dist/server/routes.js +104 -0
  58. package/dist/server/routes.js.map +1 -0
  59. package/dist/types/index.d.ts +20 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +6 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/utils/index.d.ts +7 -0
  64. package/dist/utils/index.d.ts.map +1 -0
  65. package/dist/utils/index.js +23 -0
  66. package/dist/utils/index.js.map +1 -0
  67. package/dist/utils/logger.d.ts +10 -0
  68. package/dist/utils/logger.d.ts.map +1 -0
  69. package/dist/utils/logger.js +33 -0
  70. package/dist/utils/logger.js.map +1 -0
  71. package/dist/utils/qr.d.ts +8 -0
  72. package/dist/utils/qr.d.ts.map +1 -0
  73. package/dist/utils/qr.js +48 -0
  74. package/dist/utils/qr.js.map +1 -0
  75. package/dist/utils/session.d.ts +18 -0
  76. package/dist/utils/session.d.ts.map +1 -0
  77. package/dist/utils/session.js +49 -0
  78. package/dist/utils/session.js.map +1 -0
  79. package/dist/websocket/handler.d.ts +25 -0
  80. package/dist/websocket/handler.d.ts.map +1 -0
  81. package/dist/websocket/handler.js +126 -0
  82. package/dist/websocket/handler.js.map +1 -0
  83. package/dist/websocket/index.d.ts +18 -0
  84. package/dist/websocket/index.d.ts.map +1 -0
  85. package/dist/websocket/index.js +40 -0
  86. package/dist/websocket/index.js.map +1 -0
  87. package/dist/websocket/manager.d.ts +16 -0
  88. package/dist/websocket/manager.d.ts.map +1 -0
  89. package/dist/websocket/manager.js +58 -0
  90. package/dist/websocket/manager.js.map +1 -0
  91. package/package.json +78 -0
  92. package/src/build/builder.ts +192 -0
  93. package/src/build/cache.ts +144 -0
  94. package/src/build/dsl-parser.ts +382 -0
  95. package/src/build/dsl-types.ts +50 -0
  96. package/src/build/gradle-injector.ts +64 -0
  97. package/src/build/gradle.ts +305 -0
  98. package/src/build/index.ts +10 -0
  99. package/src/build/parser.ts +75 -0
  100. package/src/build/watcher.ts +103 -0
  101. package/src/index.ts +20 -0
  102. package/src/server/http.ts +38 -0
  103. package/src/server/index.ts +272 -0
  104. package/src/server/middleware.ts +43 -0
  105. package/src/server/routes.ts +116 -0
  106. package/src/types/index.ts +21 -0
  107. package/src/utils/index.ts +7 -0
  108. package/src/utils/logger.ts +28 -0
  109. package/src/utils/qr.ts +46 -0
  110. package/src/utils/session.ts +58 -0
  111. package/src/websocket/handler.ts +150 -0
  112. package/src/websocket/index.ts +56 -0
  113. package/src/websocket/manager.ts +63 -0
  114. package/tests/build.test.ts +13 -0
  115. package/tests/server.test.ts +13 -0
  116. package/tsconfig.json +25 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP Server
4
+ * Serves APKs, handles REST endpoints
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createHttpServer = createHttpServer;
11
+ const express_1 = __importDefault(require("express"));
12
+ const middleware_1 = require("./middleware");
13
+ const routes_1 = require("./routes");
14
+ const logger_1 = require("../utils/logger");
15
+ async function createHttpServer(config) {
16
+ const app = (0, express_1.default)();
17
+ // Setup middleware
18
+ (0, middleware_1.setupMiddleware)(app);
19
+ // Setup routes
20
+ (0, routes_1.setupRoutes)(app, config.getLatestApk);
21
+ // Start server
22
+ return new Promise((resolve, reject) => {
23
+ const server = app.listen(config.port, config.host, () => {
24
+ (0, logger_1.log)(`HTTP server listening on ${config.host}:${config.port}`);
25
+ resolve(server);
26
+ });
27
+ server.on('error', (err) => {
28
+ reject(err);
29
+ });
30
+ });
31
+ }
32
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAcH,4CAoBC;AAhCD,sDAA2C;AAE3C,6CAA+C;AAC/C,qCAAuC;AACvC,4CAAsC;AAQ/B,KAAK,UAAU,gBAAgB,CAAC,MAAwB;IAC7D,MAAM,GAAG,GAAY,IAAA,iBAAO,GAAE,CAAC;IAE/B,mBAAmB;IACnB,IAAA,4BAAe,EAAC,GAAG,CAAC,CAAC;IAErB,eAAe;IACf,IAAA,oBAAW,EAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAEtC,eAAe;IACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACvD,IAAA,YAAG,EAAC,4BAA4B,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Main Server Entry Point
3
+ * Starts HTTP and WebSocket servers
4
+ */
5
+ import { ServerSession } from '../types';
6
+ export interface ServerConfig {
7
+ httpPort?: number;
8
+ wsPort?: number;
9
+ host?: string;
10
+ displayHost?: string;
11
+ projectPath?: string;
12
+ projectName?: string;
13
+ }
14
+ export declare class JetStartServer {
15
+ private httpServer;
16
+ private wsServer;
17
+ private wsHandler;
18
+ private config;
19
+ private sessionManager;
20
+ private buildService;
21
+ private currentSession;
22
+ private buildMutex;
23
+ private latestApkPath;
24
+ constructor(config?: ServerConfig);
25
+ start(): Promise<ServerSession>;
26
+ stop(): Promise<void>;
27
+ getSession(): ServerSession | null;
28
+ private setupBuildListeners;
29
+ private handleRebuild;
30
+ /**
31
+ * Handle UI file updates using DSL hot reload (FAST)
32
+ */
33
+ private handleUIUpdate;
34
+ }
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ /**
3
+ * Main Server Entry Point
4
+ * Starts HTTP and WebSocket servers
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.JetStartServer = void 0;
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const http_1 = require("./http");
44
+ const websocket_1 = require("../websocket");
45
+ const logger_1 = require("../utils/logger");
46
+ const shared_1 = require("@jetstart/shared");
47
+ const session_1 = require("../utils/session");
48
+ const build_1 = require("../build");
49
+ const dsl_parser_1 = require("../build/dsl-parser");
50
+ const gradle_injector_1 = require("../build/gradle-injector");
51
+ class JetStartServer {
52
+ httpServer;
53
+ wsServer;
54
+ wsHandler = null;
55
+ config;
56
+ sessionManager;
57
+ buildService;
58
+ currentSession = null;
59
+ buildMutex = false; // Prevent concurrent builds
60
+ latestApkPath = null; // Store latest built APK path
61
+ constructor(config = {}) {
62
+ const bindHost = config.host || '0.0.0.0';
63
+ const displayHost = config.displayHost || bindHost;
64
+ this.config = {
65
+ httpPort: config.httpPort || shared_1.DEFAULT_CORE_PORT,
66
+ wsPort: config.wsPort || shared_1.DEFAULT_WS_PORT,
67
+ host: bindHost,
68
+ displayHost: displayHost,
69
+ projectPath: config.projectPath || process.cwd(),
70
+ projectName: config.projectName || path.basename(config.projectPath || process.cwd()),
71
+ };
72
+ this.sessionManager = new session_1.SessionManager();
73
+ this.buildService = new build_1.BuildService({
74
+ cacheEnabled: true,
75
+ cachePath: path.join(os.tmpdir(), 'jetstart-cache'),
76
+ watchEnabled: true,
77
+ });
78
+ }
79
+ async start() {
80
+ try {
81
+ (0, logger_1.log)('Starting JetStart Core server...');
82
+ // Create development session
83
+ this.currentSession = await this.sessionManager.createSession({
84
+ projectName: this.config.projectName,
85
+ projectPath: this.config.projectPath,
86
+ });
87
+ // Inject server URL into build.gradle for hot reload
88
+ const serverUrl = `ws://${this.config.displayHost}:${this.config.wsPort}`;
89
+ await (0, gradle_injector_1.injectBuildConfigFields)(this.config.projectPath, [
90
+ { type: 'String', name: 'JETSTART_SERVER_URL', value: serverUrl },
91
+ { type: 'String', name: 'JETSTART_SESSION_ID', value: this.currentSession.id }
92
+ ]);
93
+ (0, logger_1.log)(`Injected server URL: ${serverUrl}`);
94
+ // Start HTTP server
95
+ this.httpServer = await (0, http_1.createHttpServer)({
96
+ port: this.config.httpPort,
97
+ host: this.config.host,
98
+ getLatestApk: () => this.latestApkPath,
99
+ });
100
+ // Start WebSocket server
101
+ const wsResult = await (0, websocket_1.createWebSocketServer)({
102
+ port: this.config.wsPort,
103
+ onClientConnected: async (sessionId) => {
104
+ // Trigger initial build when client connects
105
+ (0, logger_1.log)(`Triggering initial build for connected client (session: ${sessionId})`);
106
+ await this.handleRebuild();
107
+ },
108
+ });
109
+ this.wsServer = wsResult.server;
110
+ this.wsHandler = wsResult.handler;
111
+ // Setup build service event listeners
112
+ this.setupBuildListeners();
113
+ // Start watching for file changes
114
+ this.buildService.startWatching(this.config.projectPath, async (files) => {
115
+ (0, logger_1.log)(`Files changed: ${files.map(f => path.basename(f)).join(', ')}`);
116
+ // Check if only UI files changed (MainActivity.kt, screens/, components/)
117
+ const uiFiles = files.filter(f => f.includes('MainActivity.kt') ||
118
+ f.includes('/screens/') ||
119
+ f.includes('\\screens\\') ||
120
+ f.includes('/components/') ||
121
+ f.includes('\\components\\'));
122
+ // If ALL changed files are UI files, use DSL hot reload (FAST)
123
+ if (uiFiles.length > 0 && uiFiles.length === files.length) {
124
+ (0, logger_1.log)('🚀 UI-only changes detected, using DSL hot reload');
125
+ this.handleUIUpdate(uiFiles[0]);
126
+ }
127
+ else {
128
+ // Otherwise, full Gradle build
129
+ (0, logger_1.log)('📦 Non-UI changes detected, triggering full Gradle build');
130
+ this.buildService.clearCache();
131
+ await this.handleRebuild();
132
+ }
133
+ });
134
+ console.log();
135
+ (0, logger_1.success)('JetStart Core is running!');
136
+ (0, logger_1.log)(`HTTP Server: http://${this.config.displayHost}:${this.config.httpPort}`);
137
+ (0, logger_1.log)(`WebSocket Server: ws://${this.config.displayHost}:${this.config.wsPort}`);
138
+ (0, logger_1.log)(`Session ID: ${this.currentSession.id}`);
139
+ (0, logger_1.log)(`Session Token: ${this.currentSession.token}`);
140
+ console.log();
141
+ return this.currentSession;
142
+ }
143
+ catch (err) {
144
+ (0, logger_1.error)(`Failed to start server: ${err.message}`);
145
+ throw err;
146
+ }
147
+ }
148
+ async stop() {
149
+ (0, logger_1.log)('Stopping JetStart Core server...');
150
+ // Stop file watching
151
+ this.buildService.stopWatching();
152
+ if (this.wsServer) {
153
+ await this.wsServer.close();
154
+ }
155
+ if (this.httpServer) {
156
+ await new Promise((resolve) => {
157
+ this.httpServer.close(() => resolve());
158
+ });
159
+ }
160
+ (0, logger_1.success)('Server stopped');
161
+ }
162
+ getSession() {
163
+ return this.currentSession;
164
+ }
165
+ setupBuildListeners() {
166
+ this.buildService.on('build:start', () => {
167
+ (0, logger_1.log)('Build started');
168
+ if (this.wsHandler && this.currentSession) {
169
+ this.wsHandler.sendBuildStart(this.currentSession.id);
170
+ }
171
+ });
172
+ this.buildService.on('build:complete', (result) => {
173
+ (0, logger_1.success)(`Build completed in ${result.buildTime}ms`);
174
+ if (this.wsHandler && this.currentSession) {
175
+ // Store the APK path
176
+ this.latestApkPath = result.apkPath || null;
177
+ // Send full download URL to client (not just relative path)
178
+ const downloadUrl = `http://${this.config.displayHost}:${this.config.httpPort}/download/app.apk`;
179
+ this.wsHandler.sendBuildComplete(this.currentSession.id, downloadUrl);
180
+ (0, logger_1.log)(`APK download URL: ${downloadUrl}`);
181
+ }
182
+ });
183
+ this.buildService.on('build:error', (errorMsg, details) => {
184
+ (0, logger_1.error)(`Build failed: ${errorMsg}`);
185
+ // TODO: Send build-error message via WebSocket
186
+ });
187
+ this.buildService.on('watch:change', (files) => {
188
+ // This event is just for logging/monitoring
189
+ // Actual build logic is handled in startWatching callback
190
+ });
191
+ }
192
+ async handleRebuild() {
193
+ if (!this.currentSession) {
194
+ return;
195
+ }
196
+ // Atomic mutex check - prevents race condition
197
+ if (this.buildMutex) {
198
+ (0, logger_1.log)('Build already in progress, skipping duplicate build request');
199
+ return;
200
+ }
201
+ // Set mutex immediately before any async operations
202
+ this.buildMutex = true;
203
+ try {
204
+ // Trigger actual build using BuildService
205
+ const result = await this.buildService.build({
206
+ projectPath: this.config.projectPath,
207
+ outputPath: path.join(this.config.projectPath, 'build/outputs/apk'),
208
+ buildType: 'debug', // BuildType.DEBUG
209
+ minifyEnabled: false,
210
+ debuggable: true,
211
+ versionCode: 1,
212
+ versionName: '1.0.0',
213
+ applicationId: 'com.example.app',
214
+ });
215
+ if (result.success) {
216
+ (0, logger_1.success)(`Build completed successfully: ${result.apkPath || 'APK path not found'}`);
217
+ }
218
+ else {
219
+ (0, logger_1.error)(`Build failed: ${result.errors?.[0]?.message || 'Unknown error'}`);
220
+ }
221
+ }
222
+ catch (err) {
223
+ (0, logger_1.error)(`Build failed: ${err.message}`);
224
+ }
225
+ finally {
226
+ // Always release mutex
227
+ this.buildMutex = false;
228
+ }
229
+ }
230
+ /**
231
+ * Handle UI file updates using DSL hot reload (FAST)
232
+ */
233
+ handleUIUpdate(filePath) {
234
+ if (!this.currentSession || !this.wsHandler) {
235
+ return;
236
+ }
237
+ try {
238
+ (0, logger_1.log)(`Parsing UI file: ${path.basename(filePath)}`);
239
+ const parseResult = dsl_parser_1.DSLParser.parseFile(filePath);
240
+ if (parseResult.success && parseResult.dsl) {
241
+ const dslContent = JSON.stringify(parseResult.dsl);
242
+ (0, logger_1.log)(`DSL generated: ${dslContent.length} bytes`);
243
+ // Send DSL update via WebSocket (instant hot reload!)
244
+ this.wsHandler.sendUIUpdate(this.currentSession.id, dslContent, [path.basename(filePath)]);
245
+ (0, logger_1.success)(`UI hot reload sent in <100ms ⚡`);
246
+ }
247
+ else {
248
+ (0, logger_1.error)(`Failed to parse UI file: ${parseResult.errors?.join(', ')}`);
249
+ // Fallback to full build
250
+ (0, logger_1.log)('Falling back to full Gradle build...');
251
+ this.handleRebuild();
252
+ }
253
+ }
254
+ catch (err) {
255
+ (0, logger_1.error)(`UI update failed: ${err.message}`);
256
+ // Fallback to full build
257
+ this.handleRebuild();
258
+ }
259
+ }
260
+ }
261
+ exports.JetStartServer = JetStartServer;
262
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Express Middleware
3
+ * CORS, body parsing, error handling
4
+ */
5
+ import { Express } from 'express';
6
+ export declare function setupMiddleware(app: Express): void;
7
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAKnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAgClD"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Express Middleware
4
+ * CORS, body parsing, error handling
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.setupMiddleware = setupMiddleware;
11
+ const express_1 = __importDefault(require("express"));
12
+ const cors_1 = __importDefault(require("cors"));
13
+ const logger_1 = require("../utils/logger");
14
+ function setupMiddleware(app) {
15
+ // CORS
16
+ app.use((0, cors_1.default)({
17
+ origin: '*',
18
+ methods: ['GET', 'POST', 'PUT', 'DELETE'],
19
+ allowedHeaders: ['Content-Type', 'Authorization'],
20
+ }));
21
+ // Body parsing
22
+ app.use(express_1.default.json());
23
+ app.use(express_1.default.urlencoded({ extended: true }));
24
+ // Request logging
25
+ app.use((req, res, next) => {
26
+ const start = Date.now();
27
+ res.on('finish', () => {
28
+ const duration = Date.now() - start;
29
+ console.log(`${req.method} ${req.path} - ${res.statusCode} (${duration}ms)`);
30
+ });
31
+ next();
32
+ });
33
+ // Error handling
34
+ app.use((err, req, res, _next) => {
35
+ (0, logger_1.error)(`Server error: ${err.message}`);
36
+ res.status(500).json({
37
+ error: 'Internal server error',
38
+ message: err.message,
39
+ });
40
+ });
41
+ }
42
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAOH,0CAgCC;AApCD,sDAA8B;AAC9B,gDAAwB;AACxB,4CAAoD;AAEpD,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO;IACP,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,EAAC;QACX,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;QACzC,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;KAClD,CAAC,CAAC,CAAC;IAEJ,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhD,kBAAkB;IAClB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,UAAU,KAAK,QAAQ,KAAK,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAU,EAAE,GAAY,EAAE,GAAa,EAAE,KAAmB,EAAE,EAAE;QACvE,IAAA,cAAQ,EAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * HTTP Routes
3
+ * REST API endpoints
4
+ */
5
+ import { Express } from 'express';
6
+ export declare function setupRoutes(app: Express, getLatestApk?: () => string | null): void;
7
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AASrD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAqGlF"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP Routes
4
+ * REST API endpoints
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.setupRoutes = setupRoutes;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const session_1 = require("../utils/session");
13
+ const qr_1 = require("../utils/qr");
14
+ const shared_1 = require("@jetstart/shared");
15
+ const sessionManager = new session_1.SessionManager();
16
+ function setupRoutes(app, getLatestApk) {
17
+ // Health check
18
+ app.get('/health', (req, res) => {
19
+ res.json({
20
+ status: 'ok',
21
+ version: shared_1.JETSTART_VERSION,
22
+ uptime: process.uptime(),
23
+ });
24
+ });
25
+ // Get version
26
+ app.get('/version', (req, res) => {
27
+ res.json({
28
+ version: shared_1.JETSTART_VERSION,
29
+ });
30
+ });
31
+ // Create new session
32
+ app.post('/session/create', async (req, res) => {
33
+ try {
34
+ const { projectName, projectPath } = req.body;
35
+ if (!projectName || !projectPath) {
36
+ return res.status(400).json({
37
+ error: 'Missing required fields: projectName, projectPath',
38
+ });
39
+ }
40
+ const session = await sessionManager.createSession({
41
+ projectName,
42
+ projectPath,
43
+ });
44
+ // Generate QR code
45
+ const qrCode = await (0, qr_1.generateQRCode)({
46
+ sessionId: session.id,
47
+ serverUrl: `http://${req.hostname}:${req.socket.localPort}`,
48
+ wsUrl: `ws://${req.hostname}:${req.socket.localPort}`,
49
+ token: session.token,
50
+ projectName,
51
+ version: shared_1.JETSTART_VERSION,
52
+ });
53
+ res.json({
54
+ session,
55
+ qrCode,
56
+ });
57
+ }
58
+ catch (err) {
59
+ res.status(500).json({
60
+ error: 'Failed to create session',
61
+ message: err.message,
62
+ });
63
+ }
64
+ });
65
+ // Get session
66
+ app.get('/session/:sessionId', (req, res) => {
67
+ const session = sessionManager.getSession(req.params.sessionId);
68
+ if (!session) {
69
+ return res.status(404).json({
70
+ error: 'Session not found',
71
+ });
72
+ }
73
+ res.json(session);
74
+ });
75
+ // Download APK
76
+ app.get('/download/:filename', async (req, res) => {
77
+ // Get latest built APK path
78
+ const apkPath = getLatestApk?.();
79
+ if (!apkPath) {
80
+ return res.status(404).json({ error: 'No APK available. Build the app first.' });
81
+ }
82
+ // Check if file exists
83
+ if (!fs_1.default.existsSync(apkPath)) {
84
+ return res.status(404).json({ error: 'APK file not found at expected location' });
85
+ }
86
+ // Send the APK file
87
+ res.download(apkPath, req.params.filename || 'app-debug.apk', (err) => {
88
+ if (err) {
89
+ console.error(`Failed to send APK: ${err.message}`);
90
+ if (!res.headersSent) {
91
+ res.status(500).json({ error: 'Failed to send APK file' });
92
+ }
93
+ }
94
+ });
95
+ });
96
+ // 404 handler
97
+ app.use((req, res) => {
98
+ res.status(404).json({
99
+ error: 'Not found',
100
+ path: req.path,
101
+ });
102
+ });
103
+ }
104
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Core-specific types
3
+ */
4
+ export interface ServerSession {
5
+ id: string;
6
+ token: string;
7
+ projectName: string;
8
+ projectPath: string;
9
+ createdAt: number;
10
+ lastActivity: number;
11
+ }
12
+ export interface QRCodeOptions {
13
+ sessionId: string;
14
+ serverUrl: string;
15
+ wsUrl: string;
16
+ token: string;
17
+ projectName: string;
18
+ version: string;
19
+ }
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Core-specific types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Export all utilities
3
+ */
4
+ export * from './logger';
5
+ export * from './qr';
6
+ export * from './session';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Export all utilities
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./logger"), exports);
21
+ __exportStar(require("./qr"), exports);
22
+ __exportStar(require("./session"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,uCAAqB;AACrB,4CAA0B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Logger Utility
3
+ * Colored logging for Core
4
+ */
5
+ export declare function log(message: string): void;
6
+ export declare function success(message: string): void;
7
+ export declare function error(message: string): void;
8
+ export declare function warn(message: string): void;
9
+ export declare function debug(message: string): void;
10
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +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"}