@superdangerous/app-framework 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/api/logsRouter.d.ts +20 -0
  4. package/dist/api/logsRouter.d.ts.map +1 -0
  5. package/dist/api/logsRouter.js +515 -0
  6. package/dist/api/logsRouter.js.map +1 -0
  7. package/dist/cli/dev-server.d.ts +7 -0
  8. package/dist/cli/dev-server.d.ts.map +1 -0
  9. package/dist/cli/dev-server.js +640 -0
  10. package/dist/cli/dev-server.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +26 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/StandardServer.d.ts +129 -0
  16. package/dist/core/StandardServer.d.ts.map +1 -0
  17. package/dist/core/StandardServer.js +453 -0
  18. package/dist/core/StandardServer.js.map +1 -0
  19. package/dist/core/apiResponse.d.ts +69 -0
  20. package/dist/core/apiResponse.d.ts.map +1 -0
  21. package/dist/core/apiResponse.js +127 -0
  22. package/dist/core/apiResponse.js.map +1 -0
  23. package/dist/core/healthCheck.d.ts +160 -0
  24. package/dist/core/healthCheck.d.ts.map +1 -0
  25. package/dist/core/healthCheck.js +398 -0
  26. package/dist/core/healthCheck.js.map +1 -0
  27. package/dist/core/index.d.ts +40 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +40 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/logger.d.ts +117 -0
  32. package/dist/core/logger.d.ts.map +1 -0
  33. package/dist/core/logger.js +826 -0
  34. package/dist/core/logger.js.map +1 -0
  35. package/dist/core/portUtils.d.ts +71 -0
  36. package/dist/core/portUtils.d.ts.map +1 -0
  37. package/dist/core/portUtils.js +240 -0
  38. package/dist/core/portUtils.js.map +1 -0
  39. package/dist/core/storageService.d.ts +119 -0
  40. package/dist/core/storageService.d.ts.map +1 -0
  41. package/dist/core/storageService.js +405 -0
  42. package/dist/core/storageService.js.map +1 -0
  43. package/dist/desktop/bundler.d.ts +40 -0
  44. package/dist/desktop/bundler.d.ts.map +1 -0
  45. package/dist/desktop/bundler.js +176 -0
  46. package/dist/desktop/bundler.js.map +1 -0
  47. package/dist/desktop/index.d.ts +25 -0
  48. package/dist/desktop/index.d.ts.map +1 -0
  49. package/dist/desktop/index.js +15 -0
  50. package/dist/desktop/index.js.map +1 -0
  51. package/dist/desktop/native-modules.d.ts +66 -0
  52. package/dist/desktop/native-modules.d.ts.map +1 -0
  53. package/dist/desktop/native-modules.js +200 -0
  54. package/dist/desktop/native-modules.js.map +1 -0
  55. package/dist/index.d.ts +29 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +39 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logging/LogCategories.d.ts +87 -0
  60. package/dist/logging/LogCategories.d.ts.map +1 -0
  61. package/dist/logging/LogCategories.js +205 -0
  62. package/dist/logging/LogCategories.js.map +1 -0
  63. package/dist/middleware/aiErrorHandler.d.ts +31 -0
  64. package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
  65. package/dist/middleware/aiErrorHandler.js +181 -0
  66. package/dist/middleware/aiErrorHandler.js.map +1 -0
  67. package/dist/middleware/auth.d.ts +101 -0
  68. package/dist/middleware/auth.d.ts.map +1 -0
  69. package/dist/middleware/auth.js +230 -0
  70. package/dist/middleware/auth.js.map +1 -0
  71. package/dist/middleware/cors.d.ts +56 -0
  72. package/dist/middleware/cors.d.ts.map +1 -0
  73. package/dist/middleware/cors.js +123 -0
  74. package/dist/middleware/cors.js.map +1 -0
  75. package/dist/middleware/errorHandler.d.ts +13 -0
  76. package/dist/middleware/errorHandler.d.ts.map +1 -0
  77. package/dist/middleware/errorHandler.js +85 -0
  78. package/dist/middleware/errorHandler.js.map +1 -0
  79. package/dist/middleware/fileUpload.d.ts +62 -0
  80. package/dist/middleware/fileUpload.d.ts.map +1 -0
  81. package/dist/middleware/fileUpload.js +175 -0
  82. package/dist/middleware/fileUpload.js.map +1 -0
  83. package/dist/middleware/health.d.ts +48 -0
  84. package/dist/middleware/health.d.ts.map +1 -0
  85. package/dist/middleware/health.js +143 -0
  86. package/dist/middleware/health.js.map +1 -0
  87. package/dist/middleware/index.d.ts +20 -0
  88. package/dist/middleware/index.d.ts.map +1 -0
  89. package/dist/middleware/index.js +18 -0
  90. package/dist/middleware/index.js.map +1 -0
  91. package/dist/middleware/openapi.d.ts +64 -0
  92. package/dist/middleware/openapi.d.ts.map +1 -0
  93. package/dist/middleware/openapi.js +258 -0
  94. package/dist/middleware/openapi.js.map +1 -0
  95. package/dist/middleware/requestLogging.d.ts +22 -0
  96. package/dist/middleware/requestLogging.d.ts.map +1 -0
  97. package/dist/middleware/requestLogging.js +61 -0
  98. package/dist/middleware/requestLogging.js.map +1 -0
  99. package/dist/middleware/session.d.ts +84 -0
  100. package/dist/middleware/session.d.ts.map +1 -0
  101. package/dist/middleware/session.js +189 -0
  102. package/dist/middleware/session.js.map +1 -0
  103. package/dist/middleware/validation.d.ts +1337 -0
  104. package/dist/middleware/validation.d.ts.map +1 -0
  105. package/dist/middleware/validation.js +483 -0
  106. package/dist/middleware/validation.js.map +1 -0
  107. package/dist/services/aiService.d.ts +180 -0
  108. package/dist/services/aiService.d.ts.map +1 -0
  109. package/dist/services/aiService.js +547 -0
  110. package/dist/services/aiService.js.map +1 -0
  111. package/dist/services/conversationStorage.d.ts +38 -0
  112. package/dist/services/conversationStorage.d.ts.map +1 -0
  113. package/dist/services/conversationStorage.js +158 -0
  114. package/dist/services/conversationStorage.js.map +1 -0
  115. package/dist/services/crossPlatformBuffer.d.ts +84 -0
  116. package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
  117. package/dist/services/crossPlatformBuffer.js +246 -0
  118. package/dist/services/crossPlatformBuffer.js.map +1 -0
  119. package/dist/services/index.d.ts +17 -0
  120. package/dist/services/index.d.ts.map +1 -0
  121. package/dist/services/index.js +18 -0
  122. package/dist/services/index.js.map +1 -0
  123. package/dist/services/networkService.d.ts +81 -0
  124. package/dist/services/networkService.d.ts.map +1 -0
  125. package/dist/services/networkService.js +268 -0
  126. package/dist/services/networkService.js.map +1 -0
  127. package/dist/services/queueService.d.ts +112 -0
  128. package/dist/services/queueService.d.ts.map +1 -0
  129. package/dist/services/queueService.js +338 -0
  130. package/dist/services/queueService.js.map +1 -0
  131. package/dist/services/settingsService.d.ts +135 -0
  132. package/dist/services/settingsService.d.ts.map +1 -0
  133. package/dist/services/settingsService.js +425 -0
  134. package/dist/services/settingsService.js.map +1 -0
  135. package/dist/services/systemMonitor.d.ts +208 -0
  136. package/dist/services/systemMonitor.d.ts.map +1 -0
  137. package/dist/services/systemMonitor.js +693 -0
  138. package/dist/services/systemMonitor.js.map +1 -0
  139. package/dist/services/updateService.d.ts +78 -0
  140. package/dist/services/updateService.d.ts.map +1 -0
  141. package/dist/services/updateService.js +252 -0
  142. package/dist/services/updateService.js.map +1 -0
  143. package/dist/services/websocketEvents.d.ts +372 -0
  144. package/dist/services/websocketEvents.d.ts.map +1 -0
  145. package/dist/services/websocketEvents.js +338 -0
  146. package/dist/services/websocketEvents.js.map +1 -0
  147. package/dist/services/websocketServer.d.ts +80 -0
  148. package/dist/services/websocketServer.d.ts.map +1 -0
  149. package/dist/services/websocketServer.js +299 -0
  150. package/dist/services/websocketServer.js.map +1 -0
  151. package/dist/settings/SettingsSchema.d.ts +151 -0
  152. package/dist/settings/SettingsSchema.d.ts.map +1 -0
  153. package/dist/settings/SettingsSchema.js +424 -0
  154. package/dist/settings/SettingsSchema.js.map +1 -0
  155. package/dist/testing/TestServer.d.ts +69 -0
  156. package/dist/testing/TestServer.d.ts.map +1 -0
  157. package/dist/testing/TestServer.js +250 -0
  158. package/dist/testing/TestServer.js.map +1 -0
  159. package/dist/types/index.d.ts +137 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +5 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/utils/appPaths.d.ts +74 -0
  164. package/dist/utils/appPaths.d.ts.map +1 -0
  165. package/dist/utils/appPaths.js +162 -0
  166. package/dist/utils/appPaths.js.map +1 -0
  167. package/dist/utils/fs-utils.d.ts +50 -0
  168. package/dist/utils/fs-utils.d.ts.map +1 -0
  169. package/dist/utils/fs-utils.js +114 -0
  170. package/dist/utils/fs-utils.js.map +1 -0
  171. package/dist/utils/index.d.ts +12 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +10 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/standardConfig.d.ts +61 -0
  176. package/dist/utils/standardConfig.d.ts.map +1 -0
  177. package/dist/utils/standardConfig.js +109 -0
  178. package/dist/utils/standardConfig.js.map +1 -0
  179. package/dist/utils/startupBanner.d.ts +34 -0
  180. package/dist/utils/startupBanner.d.ts.map +1 -0
  181. package/dist/utils/startupBanner.js +169 -0
  182. package/dist/utils/startupBanner.js.map +1 -0
  183. package/dist/utils/startupLogger.d.ts +45 -0
  184. package/dist/utils/startupLogger.d.ts.map +1 -0
  185. package/dist/utils/startupLogger.js +200 -0
  186. package/dist/utils/startupLogger.js.map +1 -0
  187. package/package.json +151 -0
  188. package/src/api/logsRouter.ts +600 -0
  189. package/src/cli/dev-server.ts +803 -0
  190. package/src/cli/index.ts +31 -0
  191. package/src/core/StandardServer.ts +587 -0
  192. package/src/core/apiResponse.ts +202 -0
  193. package/src/core/healthCheck.ts +565 -0
  194. package/src/core/index.ts +80 -0
  195. package/src/core/logger.ts +1092 -0
  196. package/src/core/portUtils.ts +319 -0
  197. package/src/core/storageService.ts +595 -0
  198. package/src/desktop/bundler.ts +271 -0
  199. package/src/desktop/index.ts +18 -0
  200. package/src/desktop/native-modules.ts +289 -0
  201. package/src/index.ts +142 -0
  202. package/src/logging/LogCategories.ts +302 -0
  203. package/src/middleware/aiErrorHandler.ts +278 -0
  204. package/src/middleware/auth.ts +329 -0
  205. package/src/middleware/cors.ts +187 -0
  206. package/src/middleware/errorHandler.ts +103 -0
  207. package/src/middleware/fileUpload.ts +252 -0
  208. package/src/middleware/health.ts +206 -0
  209. package/src/middleware/index.ts +71 -0
  210. package/src/middleware/openapi.ts +305 -0
  211. package/src/middleware/requestLogging.ts +92 -0
  212. package/src/middleware/session.ts +238 -0
  213. package/src/middleware/validation.ts +603 -0
  214. package/src/services/aiService.ts +789 -0
  215. package/src/services/conversationStorage.ts +232 -0
  216. package/src/services/crossPlatformBuffer.ts +341 -0
  217. package/src/services/index.ts +47 -0
  218. package/src/services/networkService.ts +351 -0
  219. package/src/services/queueService.ts +446 -0
  220. package/src/services/settingsService.ts +549 -0
  221. package/src/services/systemMonitor.ts +936 -0
  222. package/src/services/updateService.ts +334 -0
  223. package/src/services/websocketEvents.ts +409 -0
  224. package/src/services/websocketServer.ts +394 -0
  225. package/src/settings/SettingsSchema.ts +664 -0
  226. package/src/testing/TestServer.ts +312 -0
  227. package/src/types/index.ts +154 -0
  228. package/src/utils/appPaths.ts +196 -0
  229. package/src/utils/fs-utils.ts +130 -0
  230. package/src/utils/index.ts +15 -0
  231. package/src/utils/standardConfig.ts +178 -0
  232. package/src/utils/startupBanner.ts +287 -0
  233. package/src/utils/startupLogger.ts +268 -0
  234. package/ui/dist/index.d.mts +1221 -0
  235. package/ui/dist/index.d.ts +1221 -0
  236. package/ui/dist/index.js +73 -0
  237. package/ui/dist/index.js.map +1 -0
  238. package/ui/dist/index.mjs +73 -0
  239. package/ui/dist/index.mjs.map +1 -0
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Startup logger for clean console output
3
+ */
4
+
5
+ import chalk from "chalk";
6
+ import boxen from "boxen";
7
+
8
+ // Suppress dotenv's default logging
9
+ process.env.DOTENV_CONFIG_QUIET = "true";
10
+
11
+ // Suppress punycode deprecation warning
12
+ process.removeAllListeners("warning");
13
+ process.on("warning", (warning) => {
14
+ if (
15
+ warning.name === "DeprecationWarning" &&
16
+ warning.message.includes("punycode")
17
+ ) {
18
+ return; // Ignore punycode deprecation
19
+ }
20
+ console.warn(warning);
21
+ });
22
+
23
+ // Store original console.log to restore later
24
+ const originalConsoleLog = console.log;
25
+
26
+ interface Step {
27
+ icon: string;
28
+ message: string;
29
+ timestamp: number;
30
+ }
31
+
32
+ interface ConflictInfo {
33
+ port: number;
34
+ process?: {
35
+ pid: number;
36
+ command: string;
37
+ };
38
+ }
39
+
40
+ interface StartupConfig {
41
+ get?: (key: string) => any;
42
+ app_title?: string;
43
+ appTitle?: string;
44
+ version?: string;
45
+ webStarted?: boolean;
46
+ webPort?: number;
47
+ apiPort?: number;
48
+ }
49
+
50
+ class StartupLogger {
51
+ private startTime: number;
52
+ private steps: Step[];
53
+ private concise: boolean;
54
+
55
+ constructor() {
56
+ this.startTime = Date.now();
57
+ this.steps = [];
58
+ this.concise = true; // default to concise, beautiful output
59
+ }
60
+
61
+ startSuppression(): void {
62
+ // Suppression no longer needed
63
+ // Override console.log to suppress external logs
64
+ console.log = (...args: any[]) => {
65
+ // Only show our formatted logs, suppress others
66
+ const message = args.join(" ");
67
+ if (
68
+ !message.includes("[ConfigService]") &&
69
+ !message.includes("[SecureFileHandler]") &&
70
+ !message.includes("[ConversationStorage]") &&
71
+ !message.includes("[WebSocket]") &&
72
+ !message.includes("[API]")
73
+ ) {
74
+ originalConsoleLog(...args);
75
+ }
76
+ };
77
+ }
78
+
79
+ stopSuppression(): void {
80
+ // Restore original console.log
81
+ console.log = originalConsoleLog;
82
+ }
83
+
84
+ banner(config: StartupConfig | null = null): void {
85
+ // Concise mode: no verbose banner; the summary box will contain all info
86
+ if (!this.concise) {
87
+ const appTitle =
88
+ config?.get?.("app_title") || config?.app_title || "Device Simulator";
89
+ const version = config?.get?.("version") || config?.version || "2.0.0";
90
+ const description = "Cross-Platform Industrial Device Simulation";
91
+ const banner = boxen(
92
+ chalk.bold.cyan(`🚀 ${appTitle} v${version}\n`) +
93
+ chalk.gray(description),
94
+ {
95
+ padding: 1,
96
+ margin: 1,
97
+ borderStyle: "double",
98
+ borderColor: "cyan",
99
+ align: "center",
100
+ },
101
+ );
102
+ console.log(banner);
103
+ }
104
+ }
105
+
106
+ section(title: string): void {
107
+ if (this.concise) return;
108
+ console.log(chalk.bold.white(`\n${title}`));
109
+ console.log(chalk.gray("─".repeat(50)));
110
+ }
111
+
112
+ step(icon: string, message: string, details?: string): void {
113
+ if (this.concise) return;
114
+ const timestamp = chalk.gray(`[${this.getElapsedTime()}s]`);
115
+ console.log(`${timestamp} ${icon} ${message}`);
116
+ if (details) {
117
+ console.log(chalk.gray(` ${details}`));
118
+ }
119
+ this.steps.push({ icon, message, timestamp: Date.now() });
120
+ }
121
+
122
+ success(message: string, details?: string): void {
123
+ this.step("✅", chalk.green(message), details);
124
+ }
125
+
126
+ warning(message: string, details?: string): void {
127
+ this.step("⚠️ ", chalk.yellow(message), details);
128
+ }
129
+
130
+ error(message: string, details?: string): void {
131
+ this.step("❌", chalk.red(message), details);
132
+ }
133
+
134
+ info(message: string, details?: string): void {
135
+ this.step("ℹ️ ", chalk.blue(message), details);
136
+ }
137
+
138
+ loading(message: string): void {
139
+ this.step("⏳", chalk.gray(message));
140
+ }
141
+
142
+ getElapsedTime(): string {
143
+ const elapsed = (Date.now() - this.startTime) / 1000;
144
+ return elapsed.toFixed(1).padStart(4, " ");
145
+ }
146
+
147
+ summary(config: StartupConfig): void {
148
+ if (process.env.SILENT_STARTUP === "1") return; // Orchestrator will print final summary
149
+ const appTitle =
150
+ config?.get?.("app_title") || config?.appTitle || "Device Simulator";
151
+ const version = config?.get?.("version") || config?.version || "2.0.0";
152
+
153
+ const labelPad = (label: string) => label.padEnd(10, " ");
154
+ let webValue: string;
155
+ // If started via npm start (vite preview picks free port), avoid showing a possibly wrong port
156
+ const isPreview = ["start", "start:api"].includes(
157
+ process.env.npm_lifecycle_event || "",
158
+ );
159
+ if (config.webStarted && isPreview) {
160
+ webValue = chalk.white("Vite preview (see above)");
161
+ } else if (config.webStarted) {
162
+ webValue = chalk.white(`http://localhost:${config.webPort}`);
163
+ } else {
164
+ webValue = chalk.white("Not started");
165
+ }
166
+
167
+ const lines = [
168
+ `${chalk.cyan(labelPad("Web UI"))}${webValue}`,
169
+ `${chalk.cyan(labelPad("API"))}${chalk.white(`http://localhost:${config.apiPort}`)}`,
170
+ `${chalk.cyan(labelPad("WebSocket"))}${chalk.white(`ws://localhost:${config.apiPort}`)}`,
171
+ "",
172
+ `${chalk.green("✔ All systems ready")}${chalk.gray(` • ${this.getElapsedTime()}s`)}`,
173
+ chalk.gray("Press Ctrl+C to quit"),
174
+ ];
175
+
176
+ const summaryBox = boxen(lines.join("\n"), {
177
+ padding: { top: 1, right: 2, bottom: 1, left: 2 },
178
+ borderStyle: "round",
179
+ borderColor: "green",
180
+ align: "left",
181
+ title: chalk.bold(`${appTitle} v${version}`),
182
+ titleAlignment: "center",
183
+ });
184
+
185
+ console.log("\n" + summaryBox + "\n");
186
+ }
187
+
188
+ portConflict(conflicts: ConflictInfo[]): void {
189
+ const items = conflicts
190
+ .map((c) => {
191
+ const lines: string[] = [];
192
+ lines.push(` Port ${chalk.yellow(c.port)}`);
193
+ if (c.process) {
194
+ lines.push(` ${chalk.gray("PID:")} ${c.process.pid}`);
195
+ lines.push(
196
+ ` ${chalk.gray("Process:")} ${c.process.command.substring(0, 80)}${c.process.command.length > 80 ? "..." : ""}`,
197
+ );
198
+ lines.push(
199
+ ` ${chalk.gray("Kill:")} ${chalk.cyan(`kill -9 ${c.process.pid}`)}`,
200
+ );
201
+ } else {
202
+ lines.push(
203
+ ` ${chalk.gray("Kill:")} ${chalk.cyan(`lsof -ti:${c.port} | xargs kill -9`)}`,
204
+ );
205
+ }
206
+ return lines.join("\n");
207
+ })
208
+ .join("\n\n");
209
+
210
+ const body =
211
+ chalk.bold.red("Port conflict detected") +
212
+ "\n\n" +
213
+ items +
214
+ "\n\n" +
215
+ chalk.bold("To resolve:") +
216
+ "\n" +
217
+ " 1. Kill the process using the command above\n" +
218
+ " 2. Or change the port in settings (server.port)\n" +
219
+ ` 3. Restart: ${chalk.cyan("npm start")}`;
220
+
221
+ const conflictBox = boxen(body, {
222
+ padding: { top: 1, right: 2, bottom: 1, left: 2 },
223
+ borderStyle: "round",
224
+ borderColor: "red",
225
+ align: "left",
226
+ title: chalk.bold("Startup blocked"),
227
+ titleAlignment: "center",
228
+ });
229
+
230
+ console.log("\n" + conflictBox + "\n");
231
+ }
232
+
233
+ table(title: string, data: Record<string, any>): void {
234
+ console.log(chalk.bold.white(`\n${title}`));
235
+ console.log(chalk.gray("─".repeat(50)));
236
+
237
+ for (const [key, value] of Object.entries(data)) {
238
+ const paddedKey = key.padEnd(20, " ");
239
+ console.log(` ${chalk.cyan(paddedKey)} ${value}`);
240
+ }
241
+ }
242
+
243
+ setConcise(concise: boolean): void {
244
+ this.concise = concise;
245
+ }
246
+
247
+ isConcise(): boolean {
248
+ return this.concise;
249
+ }
250
+ }
251
+
252
+ // Export singleton instance with lazy initialization
253
+ let _logger: StartupLogger | null = null;
254
+
255
+ export function getStartupLogger(): StartupLogger {
256
+ if (!_logger) {
257
+ _logger = new StartupLogger();
258
+ }
259
+ return _logger;
260
+ }
261
+
262
+ // For backward compatibility
263
+ export const logger = new Proxy({} as StartupLogger, {
264
+ get(_target, prop) {
265
+ return (getStartupLogger() as any)[prop];
266
+ },
267
+ });
268
+ export default logger;