@araminix/platform 1.0.0 → 1.7.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 (59) hide show
  1. package/README.md +73 -1
  2. package/dist/src/Platform.d.ts +12 -1
  3. package/dist/src/Platform.d.ts.map +1 -1
  4. package/dist/src/Platform.js +217 -77
  5. package/dist/src/Platform.js.map +1 -1
  6. package/dist/src/agent/AgentController.d.ts +24 -3
  7. package/dist/src/agent/AgentController.d.ts.map +1 -1
  8. package/dist/src/agent/AgentController.js +168 -60
  9. package/dist/src/agent/AgentController.js.map +1 -1
  10. package/dist/src/agent/worker.js +5 -0
  11. package/dist/src/agent/worker.js.map +1 -1
  12. package/dist/src/executor/Instance.d.ts +9 -3
  13. package/dist/src/executor/Instance.d.ts.map +1 -1
  14. package/dist/src/executor/Instance.js +148 -36
  15. package/dist/src/executor/Instance.js.map +1 -1
  16. package/dist/src/server/AuthProvider.d.ts +70 -1
  17. package/dist/src/server/AuthProvider.d.ts.map +1 -1
  18. package/dist/src/server/AuthProvider.js +12 -1
  19. package/dist/src/server/AuthProvider.js.map +1 -1
  20. package/dist/src/server/Endpoint.d.ts +30 -1
  21. package/dist/src/server/Endpoint.d.ts.map +1 -1
  22. package/dist/src/server/Endpoint.js +467 -72
  23. package/dist/src/server/Endpoint.js.map +1 -1
  24. package/dist/src/server/index.d.ts +1 -0
  25. package/dist/src/server/index.d.ts.map +1 -1
  26. package/dist/src/server/index.js +1 -0
  27. package/dist/src/server/index.js.map +1 -1
  28. package/dist/src/utils/log_middleware.d.ts.map +1 -1
  29. package/dist/src/utils/log_middleware.js +2 -1
  30. package/dist/src/utils/log_middleware.js.map +1 -1
  31. package/dist/src/utils/minioService.d.ts +1 -0
  32. package/dist/src/utils/minioService.d.ts.map +1 -1
  33. package/dist/src/utils/minioService.js +6 -3
  34. package/dist/src/utils/minioService.js.map +1 -1
  35. package/dist/tests/agentWorker.test.d.ts +2 -0
  36. package/dist/tests/agentWorker.test.d.ts.map +1 -0
  37. package/dist/tests/agentWorker.test.js +225 -0
  38. package/dist/tests/agentWorker.test.js.map +1 -0
  39. package/dist/tests/authProvider.test.js +15 -0
  40. package/dist/tests/authProvider.test.js.map +1 -1
  41. package/dist/tests/endpointSecurity.test.d.ts +2 -0
  42. package/dist/tests/endpointSecurity.test.d.ts.map +1 -0
  43. package/dist/tests/endpointSecurity.test.js +1007 -0
  44. package/dist/tests/endpointSecurity.test.js.map +1 -0
  45. package/dist/tests/logMiddleware.test.js +50 -0
  46. package/dist/tests/logMiddleware.test.js.map +1 -1
  47. package/dist/tests/minioService.test.js +178 -1
  48. package/dist/tests/minioService.test.js.map +1 -1
  49. package/dist/tests/platform.test.js +245 -0
  50. package/dist/tests/platform.test.js.map +1 -1
  51. package/dist/tests/unhandledRejections.test.d.ts +2 -0
  52. package/dist/tests/unhandledRejections.test.d.ts.map +1 -0
  53. package/dist/tests/unhandledRejections.test.js +204 -0
  54. package/dist/tests/unhandledRejections.test.js.map +1 -0
  55. package/dist/tests/uploadSecurity.test.d.ts +2 -0
  56. package/dist/tests/uploadSecurity.test.d.ts.map +1 -0
  57. package/dist/tests/uploadSecurity.test.js +219 -0
  58. package/dist/tests/uploadSecurity.test.js.map +1 -0
  59. package/package.json +4 -3
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Enterprise-grade actor runtime, WebSocket endpoint platform, and multi-threaded agent execution engine.**
4
4
 
5
- [![npm version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://www.npmjs.com/package/@araminix/platform)
5
+ [![npm version](https://img.shields.io/badge/version-1.2.0-blue.svg)](https://www.npmjs.com/package/@araminix/platform)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.4-blue.svg)](https://www.typescriptlang.org/)
8
8
  [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20.0.0-green.svg)](https://nodejs.org/)
@@ -172,6 +172,78 @@ const dashboard = panel({ header: 'System Overview' })
172
172
 
173
173
  ---
174
174
 
175
+ ### 4. Session Security & Cookie Configuration
176
+
177
+ `Endpoint` issues signed, hardened session cookies by default:
178
+
179
+ - Default Flags: `HttpOnly: true`, `Secure: true`, `SameSite: 'lax'`, `Path: '/'`, and TTL-based `Max-Age`.
180
+ - Customizable via optional `cookieOptions` in `EndpointOptions`:
181
+
182
+ ```typescript
183
+ const endpoint = new Endpoint({
184
+ authProvider: new CustomAuthProvider(),
185
+ cookieOptions: {
186
+ secure: process.env.NODE_ENV === 'production',
187
+ sameSite: 'lax',
188
+ },
189
+ });
190
+ ```
191
+
192
+ #### WebSocket Authentication Routes
193
+
194
+ - **`/ws/:endpoint` (Recommended):**
195
+ - **Browsers:** Cookie-authenticated via `httpOnly` session cookie automatically attached on WebSocket upgrade.
196
+ - **Node Clients / Agents:** Header-authenticated by passing `x-token: <token>` in the HTTP upgrade request headers.
197
+ - **`/ws-token/:token/:endpoint` (`@deprecated`):**
198
+ - Maintained for backward compatibility with legacy clients. Tokens in URL paths are automatically redacted in server access logs.
199
+
200
+ #### Google OAuth Hardening (`/gauth`)
201
+
202
+ `Endpoint` verifies Google access tokens against Google's `tokeninfo` endpoint prior to retrieving user profile data:
203
+
204
+ - **Client ID Verification:** `EndpointOptions.googleClientIds` defines allowed OAuth client IDs. Replayed tokens issued to other Google OAuth applications are rejected with HTTP 401 (`Unauthorized`).
205
+ - **Verified Email Enforcement:** Rejects tokens unless Google confirms `email_verified === 'true'`.
206
+ - **Header-Only Authorization:** Access tokens are passed to `userinfo` strictly via the HTTP `Authorization: Bearer <token>` header rather than query strings.
207
+ - **Fail-Closed Protection:** If `googleClientIds` is not configured, `/gauth` requests are refused with HTTP 503 (`Service Unavailable`).
208
+ - **HTTP Timeouts:** All external Google API calls enforce an explicit 10-second timeout.
209
+
210
+ ```typescript
211
+ const endpoint = new Endpoint({
212
+ authProvider: new CustomAuthProvider(),
213
+ googleClientIds: [
214
+ '1234567890-example.apps.googleusercontent.com',
215
+ ],
216
+ });
217
+ ```
218
+
219
+ ---
220
+
221
+ ### 5. File Upload Security & Stored XSS Mitigation
222
+
223
+ `Endpoint` and `Platform` provide hardened file upload and static download controls:
224
+
225
+ - **Upload Size Limits:** Configured via `maxUploadBytes` (default: 20 MB). Oversized files are rejected with HTTP 413 (`Payload Too Large`). Only single-file uploads (`files: 1`) are permitted per request.
226
+ - **Allowlist Filtering:** Optional `uploadAllowlist` restricts uploads to specific extensions and/or MIME types. Unauthorized uploads are rejected with HTTP 415 (`Unsupported Media Type`):
227
+ ```typescript
228
+ const platform = new Platform({
229
+ uploadDir: '/var/data/uploads',
230
+ maxUploadBytes: 10 * 1024 * 1024, // 10 MB
231
+ uploadAllowlist: {
232
+ extensions: ['png', 'jpg', 'pdf'],
233
+ mimetypes: ['image/png', 'image/jpeg', 'application/pdf'],
234
+ },
235
+ // ...
236
+ });
237
+ ```
238
+ - **Filename Sanitization:** Uploaded filenames are stripped of path traversal sequences (`..`, `/`, `\`), null bytes, and non-printable control characters, with length capped at 255 characters.
239
+ - **Stored XSS Defenses:** Static file downloads (`/file/:fileId/:safeName`) enforce defense-in-depth security headers:
240
+ - `X-Content-Type-Options: nosniff`
241
+ - `Content-Disposition: attachment` (forces browser download instead of inline execution)
242
+ - `Content-Security-Policy: default-src 'none'; sandbox` (strips script execution privileges and isolates origin)
243
+ - `dotfiles: 'deny'` and `index: false`
244
+
245
+ ---
246
+
175
247
  ## 🛠️ Module Exports
176
248
 
177
249
  | Submodule | Purpose |
@@ -1,18 +1,27 @@
1
1
  import { Result, Socket, Stream } from '@araminix/lib';
2
+ import { ResourceLimits } from 'worker_threads';
2
3
  import Instance from './executor/Instance.js';
3
4
  import { AppListing } from './lib/d.js';
4
5
  import { AuthProvider, ClientInfo } from './server/AuthProvider.js';
5
- import Endpoint from './server/Endpoint.js';
6
+ import Endpoint, { MinioOptions, RateLimitConfig, UploadAllowlist } from './server/Endpoint.js';
6
7
  export interface PlatformConfig {
7
8
  appIndexPath: URL;
8
9
  agentIndexPath: URL;
9
10
  authProvider: AuthProvider;
10
11
  instanceUserLimit: number;
12
+ maxInstances?: number;
13
+ resourceLimits?: ResourceLimits;
11
14
  port?: number;
12
15
  mount?: string;
13
16
  cookieSecret?: string;
14
17
  tabLimit?: number;
15
18
  uploadDir?: string;
19
+ maxUploadBytes?: number;
20
+ uploadAllowlist?: UploadAllowlist;
21
+ googleClientIds?: string[];
22
+ allowedOrigins?: string[];
23
+ authRateLimit?: RateLimitConfig | boolean;
24
+ minio?: MinioOptions;
16
25
  onCustomStream?: {
17
26
  [key: string]: (client: ClientInfo, stream: Stream) => Promise<void>;
18
27
  };
@@ -31,10 +40,12 @@ export default class Platform {
31
40
  private appIndex;
32
41
  private agentController;
33
42
  readonly instances: Map<string, Map<string, Instance>>;
43
+ get totalInstances(): number;
34
44
  constructor(config: PlatformConfig);
35
45
  private serve;
36
46
  private processInstanceCloseStream;
37
47
  processCustomStreams(clientInfo: ClientInfo, endpointSocket: Socket): void;
48
+ private sanitizeClientInfo;
38
49
  processUserInfo(clientInfo: ClientInfo, endpointSocket: Socket): void;
39
50
  listUserInstances(runtimeId: string): Promise<Array<UserInstance>>;
40
51
  listUserApps(userId: string): Promise<Result<Array<AppListing>, void>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAK,MAAM,eAAe,CAAC;AAGrF,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAY,UAAU,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAc,MAAM,0BAA0B,CAAC;AAChF,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC3B,YAAY,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxE,CAAC;CACL;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAa;IAEnE,YAAY,MAAM,EAAE,cAAc,EAWjC;IAED,OAAO,CAAC,KAAK;IAgDb,OAAO,CAAC,0BAA0B;IA4BlC,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAazE;IAED,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAepE;IAEK,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAavE;IAEK,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAM3E;IAED,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,qBAAqB;IA8D7B,OAAO,CAAC,qBAAqB;YAkBf,aAAa;IAkBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3B;IAED,IAAI,IAAI,IAAI,CAQX;CACJ"}
1
+ {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Err, loop, LoopResult, Ok, t } from '@araminix/lib';
1
+ import { Err, logger, loop, LoopResult, Ok, t } from '@araminix/lib';
2
2
  import AgentController from './agent/AgentController.js';
3
3
  import Instance from './executor/Instance.js';
4
4
  import { ClientType } from './server/AuthProvider.js';
@@ -9,6 +9,13 @@ export default class Platform {
9
9
  appIndex;
10
10
  agentController;
11
11
  instances = new Map();
12
+ get totalInstances() {
13
+ let total = 0;
14
+ for (const userInstances of this.instances.values()) {
15
+ total += userInstances.size;
16
+ }
17
+ return total;
18
+ }
12
19
  constructor(config) {
13
20
  this.config = config;
14
21
  this.endpoint = new Endpoint({
@@ -17,6 +24,12 @@ export default class Platform {
17
24
  mount: config.mount,
18
25
  cookieSecret: config.cookieSecret,
19
26
  uploadDir: config.uploadDir,
27
+ maxUploadBytes: config.maxUploadBytes,
28
+ uploadAllowlist: config.uploadAllowlist,
29
+ googleClientIds: config.googleClientIds,
30
+ allowedOrigins: config.allowedOrigins,
31
+ authRateLimit: config.authRateLimit,
32
+ minio: config.minio,
20
33
  });
21
34
  this.agentController = new AgentController(this.config.agentIndexPath);
22
35
  this.serve();
@@ -53,7 +66,9 @@ export default class Platform {
53
66
  request.deny();
54
67
  return LoopResult.Cont;
55
68
  }
56
- this.serveInstance(request.info.runtimeId, request).then();
69
+ this.serveInstance(request.info.runtimeId, request).catch((err) => {
70
+ logger.error('Unhandled rejection in serveInstance:', err);
71
+ });
57
72
  return LoopResult.Cont;
58
73
  });
59
74
  loop(async () => {
@@ -65,7 +80,9 @@ export default class Platform {
65
80
  request.deny();
66
81
  return LoopResult.Cont;
67
82
  }
68
- this.agentController.connect(request.info, request).then();
83
+ this.agentController.connect(request.info, request).catch((err) => {
84
+ logger.error('Unhandled rejection in agentController.connect:', err);
85
+ });
69
86
  return LoopResult.Cont;
70
87
  });
71
88
  }
@@ -76,24 +93,38 @@ export default class Platform {
76
93
  return LoopResult.Stop;
77
94
  }
78
95
  const stream = streamResult.unwrap();
79
- if (typeof stream.args !== 'string') {
80
- stream.closeErr();
81
- return LoopResult.Cont;
82
- }
83
- const instanceId = stream.args;
84
- const userInstances = this.instances.get(runtimeId);
85
- if (!userInstances) {
96
+ try {
97
+ if (typeof stream.args !== 'string') {
98
+ stream.closeErr();
99
+ return LoopResult.Cont;
100
+ }
101
+ const instanceId = stream.args;
102
+ const userInstances = this.instances.get(runtimeId);
103
+ if (!userInstances) {
104
+ stream.closeOk();
105
+ return LoopResult.Cont;
106
+ }
107
+ const instance = userInstances.get(instanceId);
108
+ if (!instance) {
109
+ stream.closeOk();
110
+ return LoopResult.Cont;
111
+ }
112
+ instance.destroy();
113
+ userInstances.delete(instanceId);
114
+ if (userInstances.size === 0) {
115
+ this.instances.delete(runtimeId);
116
+ }
86
117
  stream.closeOk();
87
118
  return LoopResult.Cont;
88
119
  }
89
- const instance = userInstances.get(instanceId);
90
- if (!instance) {
91
- stream.closeOk();
120
+ catch (err) {
121
+ logger.error('Error processing closeInstance stream:', err);
122
+ try {
123
+ stream.closeErr();
124
+ }
125
+ catch { }
92
126
  return LoopResult.Cont;
93
127
  }
94
- instance.destroy();
95
- stream.closeOk();
96
- return LoopResult.Cont;
97
128
  });
98
129
  }
99
130
  processCustomStreams(clientInfo, endpointSocket) {
@@ -106,11 +137,38 @@ export default class Platform {
106
137
  if (streamResult.isErr()) {
107
138
  return LoopResult.Stop;
108
139
  }
109
- await handler(clientInfo, streamResult.unwrap());
140
+ const stream = streamResult.unwrap();
141
+ try {
142
+ await handler(clientInfo, stream);
143
+ }
144
+ catch (err) {
145
+ logger.error(`Error processing custom stream '${streamName}':`, err);
146
+ try {
147
+ stream.closeErr();
148
+ }
149
+ catch { }
150
+ }
110
151
  return LoopResult.Cont;
111
152
  });
112
153
  }
113
154
  }
155
+ sanitizeClientInfo(clientInfo) {
156
+ if (!clientInfo)
157
+ return clientInfo;
158
+ const info = clientInfo;
159
+ if (info.settings && info.settings.two_factor) {
160
+ const sanitizedSettings = {
161
+ ...info.settings,
162
+ two_factor: {
163
+ enabled: Boolean(info.settings.two_factor.enabled),
164
+ },
165
+ };
166
+ const sanitized = Object.create(Object.getPrototypeOf(clientInfo));
167
+ Object.assign(sanitized, clientInfo, { settings: sanitizedSettings });
168
+ return sanitized;
169
+ }
170
+ return clientInfo;
171
+ }
114
172
  processUserInfo(clientInfo, endpointSocket) {
115
173
  loop(async () => {
116
174
  const streamResult = await endpointSocket.incomingStream('clientInfo');
@@ -118,12 +176,22 @@ export default class Platform {
118
176
  return LoopResult.Stop;
119
177
  }
120
178
  const stream = streamResult.unwrap();
121
- const result = await stream.write(clientInfo);
122
- if (result.isErr()) {
123
- stream.closeErr();
179
+ try {
180
+ const sanitizedClientInfo = this.sanitizeClientInfo(clientInfo);
181
+ const result = await stream.write(sanitizedClientInfo);
182
+ if (result.isErr()) {
183
+ stream.closeErr();
184
+ }
185
+ else {
186
+ stream.closeOk();
187
+ }
124
188
  }
125
- else {
126
- stream.closeOk();
189
+ catch (err) {
190
+ logger.error('Error processing clientInfo stream:', err);
191
+ try {
192
+ stream.closeErr();
193
+ }
194
+ catch { }
127
195
  }
128
196
  return LoopResult.Cont;
129
197
  });
@@ -156,9 +224,18 @@ export default class Platform {
156
224
  return LoopResult.Stop;
157
225
  }
158
226
  const stream = streamResult.unwrap();
159
- const list = await this.listUserInstances(runtimeId);
160
- await stream.write(list);
161
- stream.closeOk();
227
+ try {
228
+ const list = await this.listUserInstances(runtimeId);
229
+ await stream.write(list);
230
+ stream.closeOk();
231
+ }
232
+ catch (err) {
233
+ logger.error('Error processing listInstances stream:', err);
234
+ try {
235
+ stream.closeErr();
236
+ }
237
+ catch { }
238
+ }
162
239
  return LoopResult.Cont;
163
240
  });
164
241
  }
@@ -173,54 +250,107 @@ export default class Platform {
173
250
  return LoopResult.Stop;
174
251
  }
175
252
  const stream = streamResult.unwrap();
176
- if (!startInstanceArg.is(stream.args)) {
177
- stream.closeErr();
178
- return LoopResult.Cont;
179
- }
180
- const appName = stream.args.appName;
181
- const profile = stream.args.profile;
182
- const userApps = await this.appIndex.userApps(userId);
183
- if (userApps.isErr()) {
184
- stream.closeErr();
185
- return LoopResult.Cont;
186
- }
187
- const appSearch = userApps.unwrap().find((listing) => {
188
- const app = listing.apps.find((a) => a.name === appName && a.profiles.includes(profile));
189
- return app !== undefined;
190
- });
191
- if (appSearch === undefined) {
192
- stream.closeErr();
193
- return LoopResult.Cont;
194
- }
195
- const instance = new Instance(userId, appName, profile, this.config.appIndexPath, this.config.tabLimit ?? 12, this.agentController);
196
- if (!this.instances.has(runtimeId)) {
197
- this.instances.set(runtimeId, new Map());
198
- }
199
- const instances = this.instances.get(runtimeId);
200
- if (instances.size === this.config.instanceUserLimit) {
201
- const first = instances.entries().next().value;
202
- first?.[1].destroy();
203
- }
204
- instances.set(instance.id, instance);
205
- const instanceInitResult = await instance.init(() => {
206
- const insts = this.instances.get(runtimeId);
207
- if (insts) {
208
- insts.delete(instance.id);
209
- if (insts.size === 0) {
253
+ let createdInstance;
254
+ try {
255
+ if (!startInstanceArg.is(stream.args)) {
256
+ stream.closeErr();
257
+ return LoopResult.Cont;
258
+ }
259
+ const appName = stream.args.appName;
260
+ const profile = stream.args.profile;
261
+ const userApps = await this.appIndex.userApps(userId);
262
+ if (userApps.isErr()) {
263
+ stream.closeErr();
264
+ return LoopResult.Cont;
265
+ }
266
+ const appSearch = userApps.unwrap().find((listing) => {
267
+ const app = listing.apps.find((a) => a.name === appName && a.profiles.includes(profile));
268
+ return app !== undefined;
269
+ });
270
+ if (appSearch === undefined) {
271
+ stream.closeErr();
272
+ return LoopResult.Cont;
273
+ }
274
+ if (!this.instances.has(runtimeId)) {
275
+ this.instances.set(runtimeId, new Map());
276
+ }
277
+ const instances = this.instances.get(runtimeId);
278
+ const limit = this.config.instanceUserLimit;
279
+ while (instances.size >= limit) {
280
+ let oldest;
281
+ for (const inst of instances.values()) {
282
+ if (!oldest || inst.touched < oldest.touched) {
283
+ oldest = inst;
284
+ }
285
+ }
286
+ if (!oldest) {
287
+ break;
288
+ }
289
+ instances.delete(oldest.id);
290
+ oldest.destroy();
291
+ }
292
+ if (this.config.maxInstances !== undefined && this.totalInstances >= this.config.maxInstances) {
293
+ if (instances.size === 0) {
210
294
  this.instances.delete(runtimeId);
211
295
  }
296
+ logger.warn(`Global instance limit reached (${this.totalInstances}/${this.config.maxInstances}). Rejecting createInstance.`);
297
+ stream.closeErr();
298
+ return LoopResult.Cont;
212
299
  }
213
- });
214
- if (instanceInitResult.isErr()) {
215
- stream.closeErr();
300
+ const instance = new Instance(userId, appName, profile, this.config.appIndexPath, this.config.tabLimit ?? 12, this.agentController, this.config.resourceLimits);
301
+ createdInstance = instance;
302
+ instances.set(instance.id, instance);
303
+ const instanceInitResult = await instance.init(() => {
304
+ const insts = this.instances.get(runtimeId);
305
+ if (insts) {
306
+ insts.delete(instance.id);
307
+ if (insts.size === 0) {
308
+ this.instances.delete(runtimeId);
309
+ }
310
+ }
311
+ });
312
+ if (instanceInitResult.isErr()) {
313
+ instances.delete(instance.id);
314
+ if (instances.size === 0) {
315
+ this.instances.delete(runtimeId);
316
+ }
317
+ instance.destroy();
318
+ stream.closeErr();
319
+ return LoopResult.Cont;
320
+ }
321
+ const writeResult = await stream.write(instance.id);
322
+ if (writeResult.isErr()) {
323
+ instances.delete(instance.id);
324
+ if (instances.size === 0) {
325
+ this.instances.delete(runtimeId);
326
+ }
327
+ instance.destroy();
328
+ return LoopResult.Cont;
329
+ }
330
+ stream.closeOk();
216
331
  return LoopResult.Cont;
217
332
  }
218
- const writeResult = await stream.write(instance.id);
219
- if (writeResult.isErr()) {
220
- instance.destroy();
333
+ catch (err) {
334
+ logger.error('Error processing createInstance stream:', err);
335
+ if (createdInstance) {
336
+ const insts = this.instances.get(runtimeId);
337
+ if (insts) {
338
+ insts.delete(createdInstance.id);
339
+ if (insts.size === 0) {
340
+ this.instances.delete(runtimeId);
341
+ }
342
+ }
343
+ try {
344
+ createdInstance.destroy();
345
+ }
346
+ catch { }
347
+ }
348
+ try {
349
+ stream.closeErr();
350
+ }
351
+ catch { }
352
+ return LoopResult.Cont;
221
353
  }
222
- stream.closeOk();
223
- return LoopResult.Cont;
224
354
  });
225
355
  }
226
356
  processAppsListStream(userId, endpointSocket) {
@@ -230,13 +360,22 @@ export default class Platform {
230
360
  return LoopResult.Stop;
231
361
  }
232
362
  const stream = streamResult.unwrap();
233
- const userAppResult = await this.listUserApps(userId);
234
- if (userAppResult.isErr()) {
235
- stream.closeErr();
236
- return LoopResult.Cont;
363
+ try {
364
+ const userAppResult = await this.listUserApps(userId);
365
+ if (userAppResult.isErr()) {
366
+ stream.closeErr();
367
+ return LoopResult.Cont;
368
+ }
369
+ await stream.write(userAppResult.unwrap());
370
+ stream.closeOk();
371
+ }
372
+ catch (err) {
373
+ logger.error('Error processing listApps stream:', err);
374
+ try {
375
+ stream.closeErr();
376
+ }
377
+ catch { }
237
378
  }
238
- await stream.write(userAppResult.unwrap());
239
- stream.closeOk();
240
379
  return LoopResult.Cont;
241
380
  });
242
381
  }
@@ -263,12 +402,13 @@ export default class Platform {
263
402
  this.endpoint.open();
264
403
  }
265
404
  stop() {
266
- this.instances.forEach((userInstances) => {
267
- userInstances.forEach((instance) => {
405
+ for (const userInstances of this.instances.values()) {
406
+ for (const instance of [...userInstances.values()]) {
268
407
  instance.destroy();
269
- });
270
- });
408
+ }
409
+ }
271
410
  this.instances.clear();
411
+ this.agentController?.stop?.();
272
412
  this.endpoint.close();
273
413
  }
274
414
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { R, Result, t } from '@araminix/lib';
1
+ import { R, Result, Socket, t } from '@araminix/lib';
2
2
  import { MessagePort } from 'worker_threads';
3
3
  import { AgentInfo } from '../server/AuthProvider.js';
4
4
  import { ConnectRequest } from '../server/ConnectRequest.js';
@@ -8,13 +8,34 @@ export type AgentInit = {
8
8
  requestPort: MessagePort;
9
9
  workerIndexPath: string;
10
10
  };
11
+ export declare class AgentInstance {
12
+ private workerIndex;
13
+ readonly info: AgentInfo;
14
+ private worker?;
15
+ private requestSocket;
16
+ private responseSocket;
17
+ private socket?;
18
+ private onDestroy?;
19
+ private timer?;
20
+ private controller;
21
+ private initTimeoutMs;
22
+ constructor(workerIndex: URL, info: AgentInfo, controller: AgentController, initTimeoutMs?: number);
23
+ init(onDestroy: () => void, timeoutMs?: number): Promise<R>;
24
+ run(): Promise<void>;
25
+ task<TData = unknown, R = unknown>(taskName: string, data: TData, hp?: number): Promise<Result<R, undefined>>;
26
+ connect(socket: Socket): void;
27
+ destroy(): void;
28
+ }
11
29
  export default class AgentController {
12
30
  private workerIndex;
13
31
  private instances;
14
- constructor(workerIndex: URL);
32
+ private pending;
33
+ private initTimeoutMs;
34
+ constructor(workerIndex: URL, initTimeoutMs?: number);
15
35
  task(id: string, taskName: string, data: t.Any | unknown, hp: number): Promise<Result<any, undefined>>;
16
36
  list(type: string): string[];
17
37
  acquire(type: string, id: string): R;
18
- connect(info: AgentInfo, acceptRequest: ConnectRequest): Promise<R>;
38
+ connect(info: AgentInfo, acceptRequest: ConnectRequest, timeoutMs?: number): Promise<R>;
39
+ stop(): void;
19
40
  }
20
41
  //# sourceMappingURL=AgentController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentController.d.ts","sourceRoot":"","sources":["../../../src/agent/AgentController.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8D,CAAC,EAAE,MAAM,EAAU,CAAC,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAkB,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAIrE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CAC3B,CAAC;AAqLF,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAyC;IAE1D,YAAY,WAAW,EAAE,GAAG,EAE3B;IAEK,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAM3G;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3B;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAMnC;IAEK,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBxE;CACJ"}
1
+ {"version":3,"file":"AgentController.d.ts","sourceRoot":"","sources":["../../../src/agent/AgentController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACzH,OAAO,EAAkB,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAIrE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,qBAAa,aAAa;IACtB,OAAO,CAAC,WAAW,CAAM;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,MAAM,CAAC,CAAqB;IACpC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,MAAM,CAAC,CAAqB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAyB;IAC3C,OAAO,CAAC,KAAK,CAAC,CAEJ;IACV,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAS;IAE9B,YAAY,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,GAAE,MAAa,EAQvG;IAEK,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,SAAS,GAAE,MAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CAsEpF;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAwCzB;IAEK,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAqBlH;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAkD5B;IAED,OAAO,IAAI,IAAI,CAyBd;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAAS;IAE9B,YAAY,WAAW,EAAE,GAAG,EAAE,aAAa,GAAE,MAAa,EAGzD;IAEK,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAM3G;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3B;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAMnC;IAEK,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAiD5F;IAED,IAAI,IAAI,IAAI,CAMX;CACJ"}