@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,50 @@
1
+ /**
2
+ * File system utilities to replace fs-extra with native Node.js fs
3
+ * Provides cross-platform compatibility without ESM issues
4
+ */
5
+ import fs from "fs/promises";
6
+ import { createReadStream, createWriteStream } from "fs";
7
+ /**
8
+ * Ensure a directory exists, creating it if necessary
9
+ */
10
+ export declare function ensureDir(dir: string): Promise<void>;
11
+ /**
12
+ * Check if a path exists
13
+ */
14
+ export declare function pathExists(filePath: string): Promise<boolean>;
15
+ /**
16
+ * Copy a file or directory
17
+ */
18
+ export declare function copy(src: string, dest: string): Promise<void>;
19
+ /**
20
+ * Move a file or directory
21
+ */
22
+ export declare function move(src: string, dest: string, options?: {
23
+ overwrite?: boolean;
24
+ }): Promise<void>;
25
+ /**
26
+ * Remove a file or directory
27
+ */
28
+ export declare function remove(filePath: string): Promise<void>;
29
+ /**
30
+ * Read a JSON file
31
+ */
32
+ export declare function readJson(filePath: string): Promise<any>;
33
+ /**
34
+ * Write a JSON file
35
+ */
36
+ export declare function writeJson(filePath: string, data: any, options?: {
37
+ spaces?: number;
38
+ }): Promise<void>;
39
+ /**
40
+ * Empty a directory without removing it
41
+ */
42
+ export declare function emptyDir(dir: string): Promise<void>;
43
+ export { fs };
44
+ export { createReadStream, createWriteStream };
45
+ export declare const readFile: typeof fs.readFile;
46
+ export declare const writeFile: typeof fs.writeFile;
47
+ export declare const readdir: typeof fs.readdir;
48
+ export declare const stat: typeof fs.stat;
49
+ export declare const unlink: typeof fs.unlink;
50
+ //# sourceMappingURL=fs-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAGzD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBnE;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzD;AAGD,OAAO,EAAE,EAAE,EAAE,CAAC;AACd,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;AAC/C,eAAO,MAAM,QAAQ,oBAAuB,CAAC;AAC7C,eAAO,MAAM,SAAS,qBAAwB,CAAC;AAC/C,eAAO,MAAM,OAAO,mBAAsB,CAAC;AAC3C,eAAO,MAAM,IAAI,gBAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,kBAAY,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * File system utilities to replace fs-extra with native Node.js fs
3
+ * Provides cross-platform compatibility without ESM issues
4
+ */
5
+ import fs from "fs/promises";
6
+ import { createReadStream, createWriteStream } from "fs";
7
+ import path from "path";
8
+ /**
9
+ * Ensure a directory exists, creating it if necessary
10
+ */
11
+ export async function ensureDir(dir) {
12
+ await fs.mkdir(dir, { recursive: true });
13
+ }
14
+ /**
15
+ * Check if a path exists
16
+ */
17
+ export async function pathExists(filePath) {
18
+ try {
19
+ await fs.access(filePath);
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ /**
27
+ * Copy a file or directory
28
+ */
29
+ export async function copy(src, dest) {
30
+ const stats = await fs.stat(src);
31
+ if (stats.isDirectory()) {
32
+ await ensureDir(dest);
33
+ const entries = await fs.readdir(src, { withFileTypes: true });
34
+ for (const entry of entries) {
35
+ const srcPath = path.join(src, entry.name);
36
+ const destPath = path.join(dest, entry.name);
37
+ if (entry.isDirectory()) {
38
+ await copy(srcPath, destPath);
39
+ }
40
+ else {
41
+ await fs.copyFile(srcPath, destPath);
42
+ }
43
+ }
44
+ }
45
+ else {
46
+ await fs.copyFile(src, dest);
47
+ }
48
+ }
49
+ /**
50
+ * Move a file or directory
51
+ */
52
+ export async function move(src, dest, options) {
53
+ const { overwrite = true } = options || {};
54
+ if (!overwrite && (await pathExists(dest))) {
55
+ throw new Error(`Destination already exists: ${dest}`);
56
+ }
57
+ try {
58
+ await fs.rename(src, dest);
59
+ }
60
+ catch (error) {
61
+ // If cross-device move, copy then delete
62
+ if (error.code === "EXDEV") {
63
+ await copy(src, dest);
64
+ await fs.rm(src, { recursive: true, force: true });
65
+ }
66
+ else {
67
+ throw error;
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Remove a file or directory
73
+ */
74
+ export async function remove(filePath) {
75
+ await fs.rm(filePath, { recursive: true, force: true });
76
+ }
77
+ /**
78
+ * Read a JSON file
79
+ */
80
+ export async function readJson(filePath) {
81
+ const content = await fs.readFile(filePath, "utf8");
82
+ return JSON.parse(content);
83
+ }
84
+ /**
85
+ * Write a JSON file
86
+ */
87
+ export async function writeJson(filePath, data, options) {
88
+ const { spaces = 2 } = options || {};
89
+ const content = JSON.stringify(data, null, spaces);
90
+ await fs.writeFile(filePath, content, "utf8");
91
+ }
92
+ /**
93
+ * Empty a directory without removing it
94
+ */
95
+ export async function emptyDir(dir) {
96
+ if (await pathExists(dir)) {
97
+ const entries = await fs.readdir(dir);
98
+ for (const entry of entries) {
99
+ await remove(path.join(dir, entry));
100
+ }
101
+ }
102
+ else {
103
+ await ensureDir(dir);
104
+ }
105
+ }
106
+ // Re-export native fs methods that don't need replacement
107
+ export { fs };
108
+ export { createReadStream, createWriteStream };
109
+ export const readFile = fs.readFile.bind(fs);
110
+ export const writeFile = fs.writeFile.bind(fs);
111
+ export const readdir = fs.readdir.bind(fs);
112
+ export const stat = fs.stat.bind(fs);
113
+ export const unlink = fs.unlink;
114
+ //# sourceMappingURL=fs-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Utilities Module Exports
3
+ */
4
+ export { default as startupLogger } from "./startupLogger.js";
5
+ export * from "../core/apiResponse.js";
6
+ export { displayStartupBanner, displayMinimalStartup, } from "./startupBanner.js";
7
+ export type { StartupBannerOptions } from "./startupBanner.js";
8
+ export { loadStandardConfig, getDefaultPorts } from "./standardConfig.js";
9
+ export type { StandardAppConfig } from "./standardConfig.js";
10
+ export * from "./appPaths.js";
11
+ export * as fsUtils from "./fs-utils.js";
12
+ //# 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,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Utilities Module Exports
3
+ */
4
+ export { default as startupLogger } from "./startupLogger.js";
5
+ export * from "../core/apiResponse.js";
6
+ export { displayStartupBanner, displayMinimalStartup, } from "./startupBanner.js";
7
+ export { loadStandardConfig, getDefaultPorts } from "./standardConfig.js";
8
+ export * from "./appPaths.js";
9
+ export * as fsUtils from "./fs-utils.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE1E,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Standard Configuration Loader
3
+ * Provides consistent config loading across all SuperDangerous applications
4
+ */
5
+ export interface StandardAppConfig {
6
+ app: {
7
+ name: string;
8
+ version: string;
9
+ title: string;
10
+ description?: string;
11
+ };
12
+ server: {
13
+ port: number;
14
+ host: string;
15
+ webPort?: number;
16
+ websocketPort?: number;
17
+ };
18
+ ui?: {
19
+ theme?: "light" | "dark";
20
+ branding?: {
21
+ logo?: string;
22
+ primaryColor?: string;
23
+ secondaryColor?: string;
24
+ };
25
+ };
26
+ logging?: {
27
+ level?: string;
28
+ directory?: string;
29
+ file_pattern?: string;
30
+ maxSize?: string;
31
+ maxFiles?: string;
32
+ console_level?: string;
33
+ };
34
+ desktop?: {
35
+ enabled: boolean;
36
+ window?: {
37
+ width?: number;
38
+ height?: number;
39
+ minWidth?: number;
40
+ minHeight?: number;
41
+ };
42
+ };
43
+ defaults?: {
44
+ timeout?: number;
45
+ retryAttempts?: number;
46
+ };
47
+ [key: string]: any;
48
+ }
49
+ /**
50
+ * Load application configuration with environment variable overrides
51
+ */
52
+ export declare function loadStandardConfig(dirname: string): StandardAppConfig;
53
+ /**
54
+ * Get default ports for an application
55
+ * Applications can override these by providing their own configuration
56
+ */
57
+ export declare function getDefaultPorts(_appName: string): {
58
+ api: number;
59
+ web: number;
60
+ };
61
+ //# sourceMappingURL=standardConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardConfig.d.ts","sourceRoot":"","sources":["../../src/utils/standardConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,EAAE,CAAC,EAAE;QACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE;YACP,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CA6GrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAGA"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Standard Configuration Loader
3
+ * Provides consistent config loading across all SuperDangerous applications
4
+ */
5
+ import { readFileSync, existsSync } from "fs";
6
+ import path from "path";
7
+ /**
8
+ * Load application configuration with environment variable overrides
9
+ */
10
+ export function loadStandardConfig(dirname) {
11
+ // Load package.json for defaults
12
+ const packageJsonPath = path.join(dirname, "../package.json");
13
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
14
+ // Load app.json config if it exists
15
+ const configPath = path.join(dirname, "../data/config/app.json");
16
+ let appConfig = {};
17
+ if (existsSync(configPath)) {
18
+ appConfig = JSON.parse(readFileSync(configPath, "utf-8"));
19
+ }
20
+ // Normalize config structure (handle different formats)
21
+ const normalizedConfig = {
22
+ app: {
23
+ name: process.env.APP_NAME ||
24
+ appConfig.app?.name ||
25
+ packageJson.name ||
26
+ "SuperDangerous App",
27
+ version: appConfig.app?.version || packageJson.version || "1.0.0",
28
+ title: process.env.APP_TITLE ||
29
+ appConfig.app?.title ||
30
+ appConfig.app_title || // Legacy support
31
+ packageJson.displayName || // Some packages use displayName
32
+ packageJson.name
33
+ ?.replace(/@[^/]+\//, "")
34
+ .replace(/-/g, " ")
35
+ .replace(/\b\w/g, (l) => l.toUpperCase()) ||
36
+ "SuperDangerous Application",
37
+ description: process.env.APP_DESCRIPTION ||
38
+ appConfig.app?.description ||
39
+ packageJson.description,
40
+ },
41
+ server: {
42
+ port: Number(process.env.PORT ||
43
+ process.env.API_PORT ||
44
+ appConfig.server?.port ||
45
+ appConfig.server?.api?.port ||
46
+ appConfig.api?.port ||
47
+ 8080),
48
+ host: process.env.HOST ||
49
+ appConfig.server?.host ||
50
+ appConfig.server?.api?.host ||
51
+ appConfig.api?.host ||
52
+ "0.0.0.0",
53
+ webPort: Number(process.env.WEB_PORT ||
54
+ appConfig.server?.webPort ||
55
+ appConfig.server?.web?.port ||
56
+ appConfig.webPort ||
57
+ 5173),
58
+ websocketPort: Number(process.env.WEBSOCKET_PORT ||
59
+ appConfig.server?.websocketPort ||
60
+ appConfig.server?.websocket?.port ||
61
+ appConfig.webSocketPort ||
62
+ appConfig.server?.port ||
63
+ appConfig.api?.port),
64
+ },
65
+ ui: appConfig.ui || {},
66
+ logging: {
67
+ level: process.env.LOG_LEVEL || appConfig.logging?.level || "INFO",
68
+ directory: appConfig.logging?.directory || "logs",
69
+ file_pattern: appConfig.logging?.file_pattern || "app.log",
70
+ maxSize: appConfig.logging?.maxSize || "20m",
71
+ maxFiles: appConfig.logging?.maxFiles || "14d",
72
+ console_level: process.env.CONSOLE_LOG_LEVEL ||
73
+ appConfig.logging?.console_level ||
74
+ "INFO",
75
+ },
76
+ desktop: {
77
+ enabled: process.env.DESKTOP === "true" || appConfig.desktop?.enabled || false,
78
+ ...appConfig.desktop,
79
+ },
80
+ defaults: appConfig.defaults || {
81
+ timeout: 5000,
82
+ retryAttempts: 3,
83
+ },
84
+ };
85
+ // Merge in any app-specific config
86
+ Object.keys(appConfig).forEach((key) => {
87
+ if (![
88
+ "app",
89
+ "server",
90
+ "api",
91
+ "ui",
92
+ "logging",
93
+ "desktop",
94
+ "defaults",
95
+ ].includes(key)) {
96
+ normalizedConfig[key] = appConfig[key];
97
+ }
98
+ });
99
+ return normalizedConfig;
100
+ }
101
+ /**
102
+ * Get default ports for an application
103
+ * Applications can override these by providing their own configuration
104
+ */
105
+ export function getDefaultPorts(_appName) {
106
+ // Return sensible defaults - applications should define their own ports
107
+ return { api: 8080, web: 3000 };
108
+ }
109
+ //# sourceMappingURL=standardConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardConfig.js","sourceRoot":"","sources":["../../src/utils/standardConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Standardized Startup Banner for SuperDangerous Applications
3
+ */
4
+ export interface BannerOptions {
5
+ appName: string;
6
+ appVersion: string;
7
+ environment?: string;
8
+ port?: number;
9
+ additionalInfo?: string[];
10
+ showTips?: boolean;
11
+ showCredits?: boolean;
12
+ color?: "blue" | "green" | "yellow" | "red";
13
+ }
14
+ export interface StartupBannerOptions extends BannerOptions {
15
+ appName: string;
16
+ appVersion: string;
17
+ packageName?: string;
18
+ description?: string;
19
+ port: number;
20
+ webPort?: number;
21
+ webSocketPort?: number;
22
+ environment?: string;
23
+ startTime?: number;
24
+ }
25
+ /**
26
+ * Display a standardized startup banner for SuperDangerous applications
27
+ * All apps should use this exact same format for consistency
28
+ */
29
+ export declare function displayStartupBanner(options: StartupBannerOptions): void;
30
+ /**
31
+ * Display a minimal startup message (for silent mode)
32
+ */
33
+ export declare function displayMinimalStartup(appName: string, port: number): void;
34
+ //# sourceMappingURL=startupBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startupBanner.d.ts","sourceRoot":"","sources":["../../src/utils/startupBanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAiLxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOzE"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Standardized Startup Banner for SuperDangerous Applications
3
+ */
4
+ import chalk from "chalk";
5
+ import fs from "fs";
6
+ import path from "path";
7
+ // Force colors to ensure consistent output
8
+ chalk.level = 3; // Full color support
9
+ // Get framework version dynamically
10
+ function getFrameworkVersion() {
11
+ // Try multiple strategies to find the framework version
12
+ const strategies = [
13
+ // Strategy 1: Check if we're in the framework itself (during development)
14
+ () => {
15
+ const localPkg = path.join(__dirname, "../../package.json");
16
+ if (fs.existsSync(localPkg)) {
17
+ const pkg = JSON.parse(fs.readFileSync(localPkg, "utf-8"));
18
+ if (pkg.name === "@superdangerous/app-framework") {
19
+ return pkg.version;
20
+ }
21
+ }
22
+ return null;
23
+ },
24
+ // Strategy 2: Check node_modules in current working directory
25
+ () => {
26
+ const nodeModulesPath = path.join(process.cwd(), "node_modules", "@superdangerous", "app-framework", "package.json");
27
+ if (fs.existsSync(nodeModulesPath)) {
28
+ const pkg = JSON.parse(fs.readFileSync(nodeModulesPath, "utf-8"));
29
+ return pkg.version;
30
+ }
31
+ return null;
32
+ },
33
+ // Strategy 3: Try require.resolve to find the module
34
+ () => {
35
+ try {
36
+ const pkgPath = require.resolve("@superdangerous/app-framework/package.json", { paths: [process.cwd()] });
37
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
38
+ return pkg.version;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ },
44
+ ];
45
+ for (const strategy of strategies) {
46
+ try {
47
+ const version = strategy();
48
+ if (version)
49
+ return version;
50
+ }
51
+ catch {
52
+ // Try next strategy
53
+ }
54
+ }
55
+ return "unknown";
56
+ }
57
+ const version = getFrameworkVersion();
58
+ /**
59
+ * Display a standardized startup banner for SuperDangerous applications
60
+ * All apps should use this exact same format for consistency
61
+ */
62
+ export function displayStartupBanner(options) {
63
+ const { appName, appVersion, description, port, webPort, // Use separate web port if provided
64
+ webSocketPort, // WebSocket port
65
+ environment = process.env.NODE_ENV || "development", startTime, } = options;
66
+ const width = 50; // Reduced width to match horizontal dividers
67
+ const border = "─".repeat(width); // Full width for top/bottom borders
68
+ // Calculate startup time if provided
69
+ const startupTime = startTime
70
+ ? `${((Date.now() - startTime) / 1000).toFixed(1)}s`
71
+ : "0.0s";
72
+ // Helper to create a line with proper padding
73
+ const makeLine = (content, align = "center") => {
74
+ // eslint-disable-next-line no-control-regex
75
+ const visibleLength = content.replace(/\x1b\[[0-9;]*m/g, "").length; // Strip ANSI codes for length calculation
76
+ if (align === "center") {
77
+ const leftPad = Math.max(0, Math.floor((width - visibleLength) / 2));
78
+ const rightPad = Math.max(0, width - visibleLength - leftPad);
79
+ return (chalk.gray("│") +
80
+ " ".repeat(leftPad) +
81
+ content +
82
+ " ".repeat(rightPad) +
83
+ chalk.gray("│"));
84
+ }
85
+ else {
86
+ const padding = Math.max(0, width - visibleLength);
87
+ return chalk.gray("│") + content + " ".repeat(padding) + chalk.gray("│");
88
+ }
89
+ };
90
+ // Helper to wrap text
91
+ const wrapText = (text, maxWidth) => {
92
+ const words = text.split(" ");
93
+ const lines = [];
94
+ let currentLine = "";
95
+ for (const word of words) {
96
+ if ((currentLine + " " + word).trim().length <= maxWidth) {
97
+ currentLine = currentLine ? `${currentLine} ${word}` : word;
98
+ }
99
+ else {
100
+ if (currentLine)
101
+ lines.push(currentLine);
102
+ currentLine = word;
103
+ }
104
+ }
105
+ if (currentLine)
106
+ lines.push(currentLine);
107
+ return lines;
108
+ };
109
+ const emptyLine = chalk.gray("│") + " ".repeat(width) + chalk.gray("│");
110
+ const separator = chalk.gray("│ ") + chalk.gray("─".repeat(width - 2)) + chalk.gray(" │");
111
+ // Build the banner
112
+ console.log("");
113
+ console.log(chalk.gray("╭" + border + "╮"));
114
+ console.log(chalk.gray(emptyLine));
115
+ // App name in light gray
116
+ console.log(makeLine(chalk.gray(appName)));
117
+ console.log(emptyLine);
118
+ // Version in amber to match Ctrl+C
119
+ console.log(makeLine(chalk.yellow(`v${appVersion}`)));
120
+ console.log(emptyLine);
121
+ // Description (wrapped if needed)
122
+ if (description) {
123
+ const wrappedLines = wrapText(description, width - 4);
124
+ for (const line of wrappedLines) {
125
+ console.log(makeLine(line));
126
+ }
127
+ console.log(emptyLine);
128
+ }
129
+ console.log(separator);
130
+ console.log(emptyLine);
131
+ // URLs - no emojis, keys dark gray, values light gray
132
+ if (webPort && webPort !== port) {
133
+ // Both web UI and API are configured on different ports
134
+ console.log(makeLine(`${chalk.gray(" Web UI :")} ${chalk.gray(`http://localhost:${webPort}`)}`, "left"));
135
+ console.log(makeLine(`${chalk.gray(" API :")} ${chalk.gray(`http://localhost:${port}/api`)}`, "left"));
136
+ }
137
+ else if (webPort === port) {
138
+ // Web UI and API share the same port (production mode)
139
+ console.log(makeLine(`${chalk.gray(" Web UI :")} ${chalk.gray(`http://localhost:${port}`)}`, "left"));
140
+ console.log(makeLine(`${chalk.gray(" API :")} ${chalk.gray(`http://localhost:${port}/api`)}`, "left"));
141
+ }
142
+ else {
143
+ // API-only mode
144
+ console.log(makeLine(`${chalk.gray(" API Server :")} ${chalk.gray(`http://localhost:${port}`)}`, "left"));
145
+ console.log(makeLine(`${chalk.gray(" Endpoints :")} ${chalk.gray(`http://localhost:${port}/api/*`)}`, "left"));
146
+ }
147
+ console.log(makeLine(`${chalk.gray(" WebSocket :")} ${chalk.gray(`ws://localhost:${webSocketPort || port}`)}`, "left"));
148
+ console.log(emptyLine);
149
+ console.log(separator);
150
+ console.log(emptyLine);
151
+ // Status lines
152
+ console.log(makeLine(`${chalk.gray(" Ready in")} ${chalk.green(startupTime)}`, "left"));
153
+ console.log(makeLine(`${chalk.gray(" Environment:")} ${chalk.gray(environment)}`, "left"));
154
+ console.log(makeLine(`${chalk.gray(" Framework:")} ${chalk.gray(`@superdangerous/app-framework v${version}`)}`, "left"));
155
+ console.log(emptyLine);
156
+ console.log(separator);
157
+ console.log(emptyLine);
158
+ console.log(makeLine(`${chalk.gray(" Press")} ${chalk.yellow("Ctrl+C")} ${chalk.gray("to stop")}`, "left"));
159
+ console.log(chalk.gray(emptyLine));
160
+ console.log(chalk.gray("╰" + border + "╯"));
161
+ console.log("");
162
+ }
163
+ /**
164
+ * Display a minimal startup message (for silent mode)
165
+ */
166
+ export function displayMinimalStartup(appName, port) {
167
+ console.log(chalk.green("✓"), chalk.bold(appName), "started on port", chalk.cyan(port));
168
+ }
169
+ //# sourceMappingURL=startupBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startupBanner.js","sourceRoot":"","sources":["../../src/utils/startupBanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Startup logger for clean console output
3
+ */
4
+ interface ConflictInfo {
5
+ port: number;
6
+ process?: {
7
+ pid: number;
8
+ command: string;
9
+ };
10
+ }
11
+ interface StartupConfig {
12
+ get?: (key: string) => any;
13
+ app_title?: string;
14
+ appTitle?: string;
15
+ version?: string;
16
+ webStarted?: boolean;
17
+ webPort?: number;
18
+ apiPort?: number;
19
+ }
20
+ declare class StartupLogger {
21
+ private startTime;
22
+ private steps;
23
+ private concise;
24
+ constructor();
25
+ startSuppression(): void;
26
+ stopSuppression(): void;
27
+ banner(config?: StartupConfig | null): void;
28
+ section(title: string): void;
29
+ step(icon: string, message: string, details?: string): void;
30
+ success(message: string, details?: string): void;
31
+ warning(message: string, details?: string): void;
32
+ error(message: string, details?: string): void;
33
+ info(message: string, details?: string): void;
34
+ loading(message: string): void;
35
+ getElapsedTime(): string;
36
+ summary(config: StartupConfig): void;
37
+ portConflict(conflicts: ConflictInfo[]): void;
38
+ table(title: string, data: Record<string, any>): void;
39
+ setConcise(concise: boolean): void;
40
+ isConcise(): boolean;
41
+ }
42
+ export declare function getStartupLogger(): StartupLogger;
43
+ export declare const logger: StartupLogger;
44
+ export default logger;
45
+ //# sourceMappingURL=startupLogger.d.ts.map