@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.
- package/LICENSE +21 -0
- package/README.md +652 -0
- package/dist/api/logsRouter.d.ts +20 -0
- package/dist/api/logsRouter.d.ts.map +1 -0
- package/dist/api/logsRouter.js +515 -0
- package/dist/api/logsRouter.js.map +1 -0
- package/dist/cli/dev-server.d.ts +7 -0
- package/dist/cli/dev-server.d.ts.map +1 -0
- package/dist/cli/dev-server.js +640 -0
- package/dist/cli/dev-server.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/StandardServer.d.ts +129 -0
- package/dist/core/StandardServer.d.ts.map +1 -0
- package/dist/core/StandardServer.js +453 -0
- package/dist/core/StandardServer.js.map +1 -0
- package/dist/core/apiResponse.d.ts +69 -0
- package/dist/core/apiResponse.d.ts.map +1 -0
- package/dist/core/apiResponse.js +127 -0
- package/dist/core/apiResponse.js.map +1 -0
- package/dist/core/healthCheck.d.ts +160 -0
- package/dist/core/healthCheck.d.ts.map +1 -0
- package/dist/core/healthCheck.js +398 -0
- package/dist/core/healthCheck.js.map +1 -0
- package/dist/core/index.d.ts +40 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +40 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +117 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +826 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/portUtils.d.ts +71 -0
- package/dist/core/portUtils.d.ts.map +1 -0
- package/dist/core/portUtils.js +240 -0
- package/dist/core/portUtils.js.map +1 -0
- package/dist/core/storageService.d.ts +119 -0
- package/dist/core/storageService.d.ts.map +1 -0
- package/dist/core/storageService.js +405 -0
- package/dist/core/storageService.js.map +1 -0
- package/dist/desktop/bundler.d.ts +40 -0
- package/dist/desktop/bundler.d.ts.map +1 -0
- package/dist/desktop/bundler.js +176 -0
- package/dist/desktop/bundler.js.map +1 -0
- package/dist/desktop/index.d.ts +25 -0
- package/dist/desktop/index.d.ts.map +1 -0
- package/dist/desktop/index.js +15 -0
- package/dist/desktop/index.js.map +1 -0
- package/dist/desktop/native-modules.d.ts +66 -0
- package/dist/desktop/native-modules.d.ts.map +1 -0
- package/dist/desktop/native-modules.js +200 -0
- package/dist/desktop/native-modules.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/LogCategories.d.ts +87 -0
- package/dist/logging/LogCategories.d.ts.map +1 -0
- package/dist/logging/LogCategories.js +205 -0
- package/dist/logging/LogCategories.js.map +1 -0
- package/dist/middleware/aiErrorHandler.d.ts +31 -0
- package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
- package/dist/middleware/aiErrorHandler.js +181 -0
- package/dist/middleware/aiErrorHandler.js.map +1 -0
- package/dist/middleware/auth.d.ts +101 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +230 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +56 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +123 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +13 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +85 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/fileUpload.d.ts +62 -0
- package/dist/middleware/fileUpload.d.ts.map +1 -0
- package/dist/middleware/fileUpload.js +175 -0
- package/dist/middleware/fileUpload.js.map +1 -0
- package/dist/middleware/health.d.ts +48 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/health.js +143 -0
- package/dist/middleware/health.js.map +1 -0
- package/dist/middleware/index.d.ts +20 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +18 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/openapi.d.ts +64 -0
- package/dist/middleware/openapi.d.ts.map +1 -0
- package/dist/middleware/openapi.js +258 -0
- package/dist/middleware/openapi.js.map +1 -0
- package/dist/middleware/requestLogging.d.ts +22 -0
- package/dist/middleware/requestLogging.d.ts.map +1 -0
- package/dist/middleware/requestLogging.js +61 -0
- package/dist/middleware/requestLogging.js.map +1 -0
- package/dist/middleware/session.d.ts +84 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +189 -0
- package/dist/middleware/session.js.map +1 -0
- package/dist/middleware/validation.d.ts +1337 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/middleware/validation.js +483 -0
- package/dist/middleware/validation.js.map +1 -0
- package/dist/services/aiService.d.ts +180 -0
- package/dist/services/aiService.d.ts.map +1 -0
- package/dist/services/aiService.js +547 -0
- package/dist/services/aiService.js.map +1 -0
- package/dist/services/conversationStorage.d.ts +38 -0
- package/dist/services/conversationStorage.d.ts.map +1 -0
- package/dist/services/conversationStorage.js +158 -0
- package/dist/services/conversationStorage.js.map +1 -0
- package/dist/services/crossPlatformBuffer.d.ts +84 -0
- package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
- package/dist/services/crossPlatformBuffer.js +246 -0
- package/dist/services/crossPlatformBuffer.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/networkService.d.ts +81 -0
- package/dist/services/networkService.d.ts.map +1 -0
- package/dist/services/networkService.js +268 -0
- package/dist/services/networkService.js.map +1 -0
- package/dist/services/queueService.d.ts +112 -0
- package/dist/services/queueService.d.ts.map +1 -0
- package/dist/services/queueService.js +338 -0
- package/dist/services/queueService.js.map +1 -0
- package/dist/services/settingsService.d.ts +135 -0
- package/dist/services/settingsService.d.ts.map +1 -0
- package/dist/services/settingsService.js +425 -0
- package/dist/services/settingsService.js.map +1 -0
- package/dist/services/systemMonitor.d.ts +208 -0
- package/dist/services/systemMonitor.d.ts.map +1 -0
- package/dist/services/systemMonitor.js +693 -0
- package/dist/services/systemMonitor.js.map +1 -0
- package/dist/services/updateService.d.ts +78 -0
- package/dist/services/updateService.d.ts.map +1 -0
- package/dist/services/updateService.js +252 -0
- package/dist/services/updateService.js.map +1 -0
- package/dist/services/websocketEvents.d.ts +372 -0
- package/dist/services/websocketEvents.d.ts.map +1 -0
- package/dist/services/websocketEvents.js +338 -0
- package/dist/services/websocketEvents.js.map +1 -0
- package/dist/services/websocketServer.d.ts +80 -0
- package/dist/services/websocketServer.d.ts.map +1 -0
- package/dist/services/websocketServer.js +299 -0
- package/dist/services/websocketServer.js.map +1 -0
- package/dist/settings/SettingsSchema.d.ts +151 -0
- package/dist/settings/SettingsSchema.d.ts.map +1 -0
- package/dist/settings/SettingsSchema.js +424 -0
- package/dist/settings/SettingsSchema.js.map +1 -0
- package/dist/testing/TestServer.d.ts +69 -0
- package/dist/testing/TestServer.d.ts.map +1 -0
- package/dist/testing/TestServer.js +250 -0
- package/dist/testing/TestServer.js.map +1 -0
- package/dist/types/index.d.ts +137 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/appPaths.d.ts +74 -0
- package/dist/utils/appPaths.d.ts.map +1 -0
- package/dist/utils/appPaths.js +162 -0
- package/dist/utils/appPaths.js.map +1 -0
- package/dist/utils/fs-utils.d.ts +50 -0
- package/dist/utils/fs-utils.d.ts.map +1 -0
- package/dist/utils/fs-utils.js +114 -0
- package/dist/utils/fs-utils.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/standardConfig.d.ts +61 -0
- package/dist/utils/standardConfig.d.ts.map +1 -0
- package/dist/utils/standardConfig.js +109 -0
- package/dist/utils/standardConfig.js.map +1 -0
- package/dist/utils/startupBanner.d.ts +34 -0
- package/dist/utils/startupBanner.d.ts.map +1 -0
- package/dist/utils/startupBanner.js +169 -0
- package/dist/utils/startupBanner.js.map +1 -0
- package/dist/utils/startupLogger.d.ts +45 -0
- package/dist/utils/startupLogger.d.ts.map +1 -0
- package/dist/utils/startupLogger.js +200 -0
- package/dist/utils/startupLogger.js.map +1 -0
- package/package.json +151 -0
- package/src/api/logsRouter.ts +600 -0
- package/src/cli/dev-server.ts +803 -0
- package/src/cli/index.ts +31 -0
- package/src/core/StandardServer.ts +587 -0
- package/src/core/apiResponse.ts +202 -0
- package/src/core/healthCheck.ts +565 -0
- package/src/core/index.ts +80 -0
- package/src/core/logger.ts +1092 -0
- package/src/core/portUtils.ts +319 -0
- package/src/core/storageService.ts +595 -0
- package/src/desktop/bundler.ts +271 -0
- package/src/desktop/index.ts +18 -0
- package/src/desktop/native-modules.ts +289 -0
- package/src/index.ts +142 -0
- package/src/logging/LogCategories.ts +302 -0
- package/src/middleware/aiErrorHandler.ts +278 -0
- package/src/middleware/auth.ts +329 -0
- package/src/middleware/cors.ts +187 -0
- package/src/middleware/errorHandler.ts +103 -0
- package/src/middleware/fileUpload.ts +252 -0
- package/src/middleware/health.ts +206 -0
- package/src/middleware/index.ts +71 -0
- package/src/middleware/openapi.ts +305 -0
- package/src/middleware/requestLogging.ts +92 -0
- package/src/middleware/session.ts +238 -0
- package/src/middleware/validation.ts +603 -0
- package/src/services/aiService.ts +789 -0
- package/src/services/conversationStorage.ts +232 -0
- package/src/services/crossPlatformBuffer.ts +341 -0
- package/src/services/index.ts +47 -0
- package/src/services/networkService.ts +351 -0
- package/src/services/queueService.ts +446 -0
- package/src/services/settingsService.ts +549 -0
- package/src/services/systemMonitor.ts +936 -0
- package/src/services/updateService.ts +334 -0
- package/src/services/websocketEvents.ts +409 -0
- package/src/services/websocketServer.ts +394 -0
- package/src/settings/SettingsSchema.ts +664 -0
- package/src/testing/TestServer.ts +312 -0
- package/src/types/index.ts +154 -0
- package/src/utils/appPaths.ts +196 -0
- package/src/utils/fs-utils.ts +130 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/standardConfig.ts +178 -0
- package/src/utils/startupBanner.ts +287 -0
- package/src/utils/startupLogger.ts +268 -0
- package/ui/dist/index.d.mts +1221 -0
- package/ui/dist/index.d.ts +1221 -0
- package/ui/dist/index.js +73 -0
- package/ui/dist/index.js.map +1 -0
- package/ui/dist/index.mjs +73 -0
- 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"}
|