@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
+ * Network Service
3
+ * Detects and manages network interfaces
4
+ */
5
+ import os from "os";
6
+ import fs from "fs";
7
+ import net from "net";
8
+ class NetworkService {
9
+ /**
10
+ * Get all available network interfaces with their addresses
11
+ */
12
+ getNetworkInterfaces() {
13
+ const interfaces = os.networkInterfaces();
14
+ const result = [];
15
+ for (const [name, addresses] of Object.entries(interfaces)) {
16
+ if (!addresses)
17
+ continue;
18
+ const validAddresses = addresses
19
+ .filter((addr) => addr.family === "IPv4" && !addr.internal)
20
+ .map((addr) => ({
21
+ address: addr.address,
22
+ family: addr.family,
23
+ internal: addr.internal,
24
+ }));
25
+ if (validAddresses.length > 0) {
26
+ result.push({
27
+ name,
28
+ addresses: validAddresses,
29
+ });
30
+ }
31
+ }
32
+ // Always include localhost option
33
+ result.unshift({
34
+ name: "localhost",
35
+ addresses: [
36
+ {
37
+ address: "127.0.0.1",
38
+ family: "IPv4",
39
+ internal: true,
40
+ },
41
+ ],
42
+ });
43
+ // Always include all interfaces option
44
+ result.unshift({
45
+ name: "all",
46
+ addresses: [
47
+ {
48
+ address: "0.0.0.0",
49
+ family: "IPv4",
50
+ internal: false,
51
+ },
52
+ ],
53
+ });
54
+ return result;
55
+ }
56
+ /**
57
+ * Get a formatted list of binding options for UI
58
+ */
59
+ getBindingOptions() {
60
+ const interfaces = this.getNetworkInterfaces();
61
+ const options = [];
62
+ // Always add default binding options first
63
+ options.push({
64
+ value: "0.0.0.0",
65
+ label: "All interfaces",
66
+ description: "Listen on all available network interfaces",
67
+ interface: "all",
68
+ });
69
+ options.push({
70
+ value: "127.0.0.1",
71
+ label: "Localhost only",
72
+ description: "Only accessible from this machine",
73
+ interface: "localhost",
74
+ });
75
+ // Add specific interface options (excluding duplicates of the default options)
76
+ for (const iface of interfaces) {
77
+ for (const addr of iface.addresses) {
78
+ // Skip if this address is already in our default options
79
+ if (addr.address === "0.0.0.0" || addr.address === "127.0.0.1") {
80
+ continue;
81
+ }
82
+ options.push({
83
+ label: `${iface.name} (${addr.address})`,
84
+ value: addr.address,
85
+ description: `Accept connections on ${iface.name} network interface`,
86
+ interface: iface.name,
87
+ });
88
+ }
89
+ }
90
+ return options;
91
+ }
92
+ /**
93
+ * Get the current machine's primary IP address
94
+ */
95
+ getPrimaryIpAddress() {
96
+ const interfaces = this.getNetworkInterfaces();
97
+ // Look for the first non-localhost, non-all interface
98
+ for (const iface of interfaces) {
99
+ if (iface.name === "localhost" || iface.name === "all")
100
+ continue;
101
+ for (const addr of iface.addresses) {
102
+ if (!addr.internal && addr.family === "IPv4") {
103
+ return addr.address;
104
+ }
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ /**
110
+ * Validate if an IP address is valid for binding
111
+ */
112
+ isValidBindingAddress(address) {
113
+ // Check for special addresses
114
+ if (address === "0.0.0.0" || address === "127.0.0.1") {
115
+ return true;
116
+ }
117
+ // Check if it's one of the machine's interfaces
118
+ const interfaces = this.getNetworkInterfaces();
119
+ for (const iface of interfaces) {
120
+ for (const addr of iface.addresses) {
121
+ if (addr.address === address) {
122
+ return true;
123
+ }
124
+ }
125
+ }
126
+ return false;
127
+ }
128
+ /**
129
+ * Format network information for display
130
+ */
131
+ getNetworkInfo() {
132
+ const hostname = os.hostname();
133
+ const primaryIp = this.getPrimaryIpAddress();
134
+ const interfaces = this.getNetworkInterfaces();
135
+ return {
136
+ hostname,
137
+ primaryIp,
138
+ interfaces: interfaces.filter((i) => i.name !== "all" && i.name !== "localhost"),
139
+ bindingOptions: this.getBindingOptions(),
140
+ };
141
+ }
142
+ /**
143
+ * Check if running in Docker container
144
+ */
145
+ isDocker() {
146
+ try {
147
+ // Check for .dockerenv file
148
+ // fs already imported at top
149
+ if (fs.existsSync("/.dockerenv")) {
150
+ return true;
151
+ }
152
+ // Check cgroup for docker
153
+ const cgroup = fs.readFileSync("/proc/self/cgroup", "utf8");
154
+ return cgroup.includes("docker");
155
+ }
156
+ catch {
157
+ return false;
158
+ }
159
+ }
160
+ /**
161
+ * Get recommended binding address based on environment
162
+ */
163
+ getRecommendedBindingAddress() {
164
+ if (this.isDocker()) {
165
+ // In Docker, bind to all interfaces
166
+ return "0.0.0.0";
167
+ }
168
+ if (process.env.NODE_ENV === "production") {
169
+ // In production, bind to primary IP
170
+ return this.getPrimaryIpAddress() || "0.0.0.0";
171
+ }
172
+ // In development, bind to localhost
173
+ return "127.0.0.1";
174
+ }
175
+ /**
176
+ * Parse connection string (host:port)
177
+ */
178
+ parseConnectionString(connectionString) {
179
+ const parts = connectionString.split(":");
180
+ if (parts.length !== 2)
181
+ return null;
182
+ const host = parts[0];
183
+ const port = parseInt(parts[1], 10);
184
+ if (isNaN(port) || port < 1 || port > 65535)
185
+ return null;
186
+ return { host, port };
187
+ }
188
+ /**
189
+ * Format connection URL
190
+ */
191
+ formatConnectionUrl(protocol, host, port, path = "") {
192
+ // Handle IPv6 addresses
193
+ const formattedHost = host.includes(":") ? `[${host}]` : host;
194
+ return `${protocol}://${formattedHost}:${port}${path}`;
195
+ }
196
+ /**
197
+ * Get network latency to a host
198
+ */
199
+ async getLatency(host, timeout = 5000) {
200
+ const start = Date.now();
201
+ return new Promise((resolve) => {
202
+ // net already imported at top
203
+ const socket = new net.Socket();
204
+ const timer = setTimeout(() => {
205
+ socket.destroy();
206
+ resolve(null);
207
+ }, timeout);
208
+ socket.connect(80, host, () => {
209
+ clearTimeout(timer);
210
+ socket.destroy();
211
+ resolve(Date.now() - start);
212
+ });
213
+ socket.on("error", () => {
214
+ clearTimeout(timer);
215
+ resolve(null);
216
+ });
217
+ });
218
+ }
219
+ /**
220
+ * Check if a host is reachable
221
+ */
222
+ async isHostReachable(host, port, timeout = 5000) {
223
+ return new Promise((resolve) => {
224
+ // net already imported at top
225
+ const socket = new net.Socket();
226
+ const timer = setTimeout(() => {
227
+ socket.destroy();
228
+ resolve(false);
229
+ }, timeout);
230
+ socket.connect(port, host, () => {
231
+ clearTimeout(timer);
232
+ socket.destroy();
233
+ resolve(true);
234
+ });
235
+ socket.on("error", () => {
236
+ clearTimeout(timer);
237
+ resolve(false);
238
+ });
239
+ });
240
+ }
241
+ /**
242
+ * Get network statistics
243
+ */
244
+ getNetworkStats() {
245
+ const interfaces = os.networkInterfaces();
246
+ const stats = {};
247
+ for (const [name, addresses] of Object.entries(interfaces)) {
248
+ if (!addresses)
249
+ continue;
250
+ stats[name] = {
251
+ ipv4: addresses.filter((a) => a.family === "IPv4").length,
252
+ ipv6: addresses.filter((a) => a.family === "IPv6").length,
253
+ internal: addresses.some((a) => a.internal),
254
+ };
255
+ }
256
+ return stats;
257
+ }
258
+ }
259
+ // Singleton instance
260
+ let networkService = null;
261
+ export function getNetworkService() {
262
+ if (!networkService) {
263
+ networkService = new NetworkService();
264
+ }
265
+ return networkService;
266
+ }
267
+ export default NetworkService;
268
+ //# sourceMappingURL=networkService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkService.js","sourceRoot":"","sources":["../../src/services/networkService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Queue Service for background job processing
3
+ * Based on patterns from mila-ai but enhanced with TypeScript and better error handling
4
+ */
5
+ import { EventEmitter } from "events";
6
+ export interface QueueJob {
7
+ id: string;
8
+ type: string;
9
+ data: any;
10
+ status: "pending" | "processing" | "completed" | "failed";
11
+ priority: number;
12
+ retries: number;
13
+ maxRetries: number;
14
+ createdAt: Date;
15
+ updatedAt: Date;
16
+ processedAt?: Date;
17
+ error?: string;
18
+ }
19
+ export interface QueueConfig {
20
+ maxConcurrentJobs?: number;
21
+ pollingInterval?: number;
22
+ maxRetries?: number;
23
+ enablePersistence?: boolean;
24
+ }
25
+ export type JobHandler = (job: QueueJob) => Promise<void>;
26
+ export declare class QueueService extends EventEmitter {
27
+ private jobs;
28
+ private handlers;
29
+ private isRunning;
30
+ private activeJobs;
31
+ private config;
32
+ private pollingTimer?;
33
+ private fileHandler;
34
+ constructor(config?: QueueConfig);
35
+ /**
36
+ * Register a job handler
37
+ */
38
+ registerHandler(jobType: string, handler: JobHandler): void;
39
+ /**
40
+ * Add a job to the queue
41
+ */
42
+ addJob(type: string, data: any, priority?: number): Promise<string>;
43
+ /**
44
+ * Start processing jobs
45
+ */
46
+ start(): Promise<void>;
47
+ /**
48
+ * Stop processing jobs
49
+ */
50
+ stop(): Promise<void>;
51
+ /**
52
+ * Process the next job in the queue
53
+ */
54
+ private processNextJob;
55
+ /**
56
+ * Get the next pending job based on priority
57
+ */
58
+ private getNextPendingJob;
59
+ /**
60
+ * Mark a job as completed
61
+ */
62
+ private completeJob;
63
+ /**
64
+ * Handle job error
65
+ */
66
+ private handleJobError;
67
+ /**
68
+ * Mark a job as failed
69
+ */
70
+ private failJob;
71
+ /**
72
+ * Move failed job to dead-letter queue
73
+ */
74
+ private moveToDeadLetterQueue;
75
+ /**
76
+ * Start polling for jobs
77
+ */
78
+ private startPolling;
79
+ /**
80
+ * Persist job to file
81
+ */
82
+ private persistJob;
83
+ /**
84
+ * Load persisted jobs
85
+ */
86
+ private loadPersistedJobs;
87
+ /**
88
+ * Get queue statistics
89
+ */
90
+ getStats(): {
91
+ total: number;
92
+ pending: number;
93
+ processing: number;
94
+ completed: number;
95
+ failed: number;
96
+ activeJobs: number;
97
+ };
98
+ /**
99
+ * Get job by ID
100
+ */
101
+ getJob(jobId: string): QueueJob | undefined;
102
+ /**
103
+ * Get all jobs
104
+ */
105
+ getAllJobs(): QueueJob[];
106
+ /**
107
+ * Clear completed and failed jobs
108
+ */
109
+ clearFinishedJobs(): void;
110
+ }
111
+ export default QueueService;
112
+ //# sourceMappingURL=queueService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueService.d.ts","sourceRoot":"","sources":["../../src/services/queueService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAatC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1D,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,GAAE,WAAgB;IAkBpC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAK3D;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAiD5E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;YACW,cAAc;IAgD5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,WAAW;IAiBzB;;OAEG;YACW,cAAc;IAsB5B;;OAEG;YACW,OAAO;IAcrB;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,UAAU;IAaxB;;OAEG;YACW,iBAAiB;IAoC/B;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB;IAaD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI3C;;OAEG;IACH,UAAU,IAAI,QAAQ,EAAE;IAIxB;;OAEG;IACH,iBAAiB,IAAI,IAAI;CAQ1B;AAED,eAAe,YAAY,CAAC"}