@araminix/platform 0.0.0-stage → 1.0.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 (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +210 -2
  3. package/dist/index.d.ts +15 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +15 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/Platform.d.ts +48 -0
  8. package/dist/src/Platform.d.ts.map +1 -0
  9. package/dist/src/Platform.js +275 -0
  10. package/dist/src/Platform.js.map +1 -0
  11. package/dist/src/agent/AgentController.d.ts +20 -0
  12. package/dist/src/agent/AgentController.d.ts.map +1 -0
  13. package/dist/src/agent/AgentController.js +224 -0
  14. package/dist/src/agent/AgentController.js.map +1 -0
  15. package/dist/src/agent/agentWorkerDriver.d.ts +11 -0
  16. package/dist/src/agent/agentWorkerDriver.d.ts.map +1 -0
  17. package/dist/src/agent/agentWorkerDriver.js +20 -0
  18. package/dist/src/agent/agentWorkerDriver.js.map +1 -0
  19. package/dist/src/agent/d.d.ts +39 -0
  20. package/dist/src/agent/d.d.ts.map +1 -0
  21. package/dist/src/agent/d.js +91 -0
  22. package/dist/src/agent/d.js.map +1 -0
  23. package/dist/src/agent/worker.d.ts +2 -0
  24. package/dist/src/agent/worker.d.ts.map +1 -0
  25. package/dist/src/agent/worker.js +67 -0
  26. package/dist/src/agent/worker.js.map +1 -0
  27. package/dist/src/builder/Fragment.d.ts +40 -0
  28. package/dist/src/builder/Fragment.d.ts.map +1 -0
  29. package/dist/src/builder/Fragment.js +87 -0
  30. package/dist/src/builder/Fragment.js.map +1 -0
  31. package/dist/src/builder/Panel.d.ts +30 -0
  32. package/dist/src/builder/Panel.d.ts.map +1 -0
  33. package/dist/src/builder/Panel.js +45 -0
  34. package/dist/src/builder/Panel.js.map +1 -0
  35. package/dist/src/builder/builder.d.ts +31 -0
  36. package/dist/src/builder/builder.d.ts.map +1 -0
  37. package/dist/src/builder/builder.js +43 -0
  38. package/dist/src/builder/builder.js.map +1 -0
  39. package/dist/src/executor/ActivityInstance.d.ts +98 -0
  40. package/dist/src/executor/ActivityInstance.d.ts.map +1 -0
  41. package/dist/src/executor/ActivityInstance.js +389 -0
  42. package/dist/src/executor/ActivityInstance.js.map +1 -0
  43. package/dist/src/executor/AppInstance.d.ts +73 -0
  44. package/dist/src/executor/AppInstance.d.ts.map +1 -0
  45. package/dist/src/executor/AppInstance.js +399 -0
  46. package/dist/src/executor/AppInstance.js.map +1 -0
  47. package/dist/src/executor/Instance.d.ts +37 -0
  48. package/dist/src/executor/Instance.d.ts.map +1 -0
  49. package/dist/src/executor/Instance.js +303 -0
  50. package/dist/src/executor/Instance.js.map +1 -0
  51. package/dist/src/executor/index.d.ts +4 -0
  52. package/dist/src/executor/index.d.ts.map +1 -0
  53. package/dist/src/executor/index.js +3 -0
  54. package/dist/src/executor/index.js.map +1 -0
  55. package/dist/src/executor/proto.d.ts +120 -0
  56. package/dist/src/executor/proto.d.ts.map +1 -0
  57. package/dist/src/executor/proto.js +207 -0
  58. package/dist/src/executor/proto.js.map +1 -0
  59. package/dist/src/executor/worker.d.ts +2 -0
  60. package/dist/src/executor/worker.d.ts.map +1 -0
  61. package/dist/src/executor/worker.js +154 -0
  62. package/dist/src/executor/worker.js.map +1 -0
  63. package/dist/src/executor/workerDriver.d.ts +14 -0
  64. package/dist/src/executor/workerDriver.d.ts.map +1 -0
  65. package/dist/src/executor/workerDriver.js +26 -0
  66. package/dist/src/executor/workerDriver.js.map +1 -0
  67. package/dist/src/lib/actors.d.ts +94 -0
  68. package/dist/src/lib/actors.d.ts.map +1 -0
  69. package/dist/src/lib/actors.js +139 -0
  70. package/dist/src/lib/actors.js.map +1 -0
  71. package/dist/src/lib/d.d.ts +145 -0
  72. package/dist/src/lib/d.d.ts.map +1 -0
  73. package/dist/src/lib/d.js +296 -0
  74. package/dist/src/lib/d.js.map +1 -0
  75. package/dist/src/lib/worker_socket.d.ts +56 -0
  76. package/dist/src/lib/worker_socket.d.ts.map +1 -0
  77. package/dist/src/lib/worker_socket.js +161 -0
  78. package/dist/src/lib/worker_socket.js.map +1 -0
  79. package/dist/src/server/AuthProvider.d.ts +130 -0
  80. package/dist/src/server/AuthProvider.d.ts.map +1 -0
  81. package/dist/src/server/AuthProvider.js +58 -0
  82. package/dist/src/server/AuthProvider.js.map +1 -0
  83. package/dist/src/server/ConnectRequest.d.ts +15 -0
  84. package/dist/src/server/ConnectRequest.d.ts.map +1 -0
  85. package/dist/src/server/ConnectRequest.js +36 -0
  86. package/dist/src/server/ConnectRequest.js.map +1 -0
  87. package/dist/src/server/Endpoint.d.ts +49 -0
  88. package/dist/src/server/Endpoint.d.ts.map +1 -0
  89. package/dist/src/server/Endpoint.js +414 -0
  90. package/dist/src/server/Endpoint.js.map +1 -0
  91. package/dist/src/server/EndpointController.d.ts +15 -0
  92. package/dist/src/server/EndpointController.d.ts.map +1 -0
  93. package/dist/src/server/EndpointController.js +92 -0
  94. package/dist/src/server/EndpointController.js.map +1 -0
  95. package/dist/src/server/index.d.ts +7 -0
  96. package/dist/src/server/index.d.ts.map +1 -0
  97. package/dist/src/server/index.js +7 -0
  98. package/dist/src/server/index.js.map +1 -0
  99. package/dist/src/utils/i18n.d.ts +20 -0
  100. package/dist/src/utils/i18n.d.ts.map +1 -0
  101. package/dist/src/utils/i18n.js +41 -0
  102. package/dist/src/utils/i18n.js.map +1 -0
  103. package/dist/src/utils/index.d.ts +4 -0
  104. package/dist/src/utils/index.d.ts.map +1 -0
  105. package/dist/src/utils/index.js +4 -0
  106. package/dist/src/utils/index.js.map +1 -0
  107. package/dist/src/utils/log_middleware.d.ts +3 -0
  108. package/dist/src/utils/log_middleware.d.ts.map +1 -0
  109. package/dist/src/utils/log_middleware.js +37 -0
  110. package/dist/src/utils/log_middleware.js.map +1 -0
  111. package/dist/src/utils/minioService.d.ts +53 -0
  112. package/dist/src/utils/minioService.d.ts.map +1 -0
  113. package/dist/src/utils/minioService.js +163 -0
  114. package/dist/src/utils/minioService.js.map +1 -0
  115. package/dist/tests/actors.test.d.ts +2 -0
  116. package/dist/tests/actors.test.d.ts.map +1 -0
  117. package/dist/tests/actors.test.js +45 -0
  118. package/dist/tests/actors.test.js.map +1 -0
  119. package/dist/tests/authProvider.test.d.ts +2 -0
  120. package/dist/tests/authProvider.test.d.ts.map +1 -0
  121. package/dist/tests/authProvider.test.js +24 -0
  122. package/dist/tests/authProvider.test.js.map +1 -0
  123. package/dist/tests/builder.test.d.ts +2 -0
  124. package/dist/tests/builder.test.d.ts.map +1 -0
  125. package/dist/tests/builder.test.js +37 -0
  126. package/dist/tests/builder.test.js.map +1 -0
  127. package/dist/tests/connectRequest.test.d.ts +2 -0
  128. package/dist/tests/connectRequest.test.d.ts.map +1 -0
  129. package/dist/tests/connectRequest.test.js +55 -0
  130. package/dist/tests/connectRequest.test.js.map +1 -0
  131. package/dist/tests/endpointController.test.d.ts +2 -0
  132. package/dist/tests/endpointController.test.d.ts.map +1 -0
  133. package/dist/tests/endpointController.test.js +28 -0
  134. package/dist/tests/endpointController.test.js.map +1 -0
  135. package/dist/tests/i18n.test.d.ts +2 -0
  136. package/dist/tests/i18n.test.d.ts.map +1 -0
  137. package/dist/tests/i18n.test.js +25 -0
  138. package/dist/tests/i18n.test.js.map +1 -0
  139. package/dist/tests/logMiddleware.test.d.ts +2 -0
  140. package/dist/tests/logMiddleware.test.d.ts.map +1 -0
  141. package/dist/tests/logMiddleware.test.js +10 -0
  142. package/dist/tests/logMiddleware.test.js.map +1 -0
  143. package/dist/tests/minioService.test.d.ts +2 -0
  144. package/dist/tests/minioService.test.d.ts.map +1 -0
  145. package/dist/tests/minioService.test.js +29 -0
  146. package/dist/tests/minioService.test.js.map +1 -0
  147. package/dist/tests/platform.test.d.ts +2 -0
  148. package/dist/tests/platform.test.d.ts.map +1 -0
  149. package/dist/tests/platform.test.js +43 -0
  150. package/dist/tests/platform.test.js.map +1 -0
  151. package/dist/tests/proto.test.d.ts +2 -0
  152. package/dist/tests/proto.test.d.ts.map +1 -0
  153. package/dist/tests/proto.test.js +37 -0
  154. package/dist/tests/proto.test.js.map +1 -0
  155. package/dist/tests/workerSocket.test.d.ts +2 -0
  156. package/dist/tests/workerSocket.test.d.ts.map +1 -0
  157. package/dist/tests/workerSocket.test.js +53 -0
  158. package/dist/tests/workerSocket.test.js.map +1 -0
  159. package/package.json +69 -3
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Amin Abbasi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,211 @@
1
- # Temporary Holding Version
1
+ # @araminix/platform
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ > **Enterprise-grade actor runtime, WebSocket endpoint platform, and multi-threaded agent execution engine.**
4
+
5
+ [![npm version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://www.npmjs.com/package/@araminix/platform)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.4-blue.svg)](https://www.typescriptlang.org/)
8
+ [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20.0.0-green.svg)](https://nodejs.org/)
9
+
10
+ **Araminix Platform** (`@araminix/platform`) is a high-performance backend orchestration engine designed for complex real-time applications. Built on top of [`@araminix/lib`](../araminix-lib), it integrates an enterprise WebSocket & HTTP server, worker-thread agent execution, dynamic component/UI assembly, authentication (with 2FA and Google OAuth), and S3/MinIO cloud storage.
11
+
12
+ ---
13
+
14
+ ## 🌟 Key Features
15
+
16
+ - ⚡ **Unified WebSocket & HTTP Endpoint**: Built on Express & `express-ws`, providing automatic WebSocket route dispatching, session cookies, Google OAuth, and two-factor authentication (2FA).
17
+ - 🧵 **Multi-Threaded Agent Runtime**: Spawns isolated worker processes (`worker_threads`) with type-safe `MessageChannel` IPC, protecting the main thread from CPU-heavy tasks and crashes.
18
+ - 🧩 **Dynamic UI Builder & Actor Engine**: Assemble complex interactive interfaces on the fly using `Panel`, `Fragment`, and `Actor` lifecycles.
19
+ - 🗄️ **Integrated MinIO / S3 Storage**: Built-in presigned URL generation, file uploads (`multer`), MIME type mapping, and bucket management.
20
+ - 🌐 **First-Class Internationalization**: Integrated `I18nService` with type-safe generic dictionary translations and automatic language fallbacks.
21
+ - 🛡️ **Zero-Crash Functional Core**: Powered by `@araminix/lib`'s `Result<T, E>` monads and multiplexed streaming channels.
22
+
23
+ ---
24
+
25
+ ## 📐 Architecture
26
+
27
+ ```
28
+ +------------------------------------+
29
+ | Platform |
30
+ +-----------------+------------------+
31
+ |
32
+ +-----------------------------+-----------------------------+
33
+ | |
34
+ v v
35
+ +----------------------------+ +----------------------------+
36
+ | Endpoint | | AgentController |
37
+ | (Express WS + HTTP + 2FA) | | (worker_threads) |
38
+ +--------------+-------------+ +--------------+-------------+
39
+ | |
40
+ +--------------+-------------+ +--------------+-------------+
41
+ | MinIO S3 / Storage | | WorkerSocket / IPC Port |
42
+ +----------------------------+ +----------------------------+
43
+ ```
44
+
45
+ ---
46
+
47
+ ## 📦 Installation
48
+
49
+ ```bash
50
+ # npm
51
+ npm install @araminix/platform @araminix/lib
52
+
53
+ # pnpm
54
+ pnpm add @araminix/platform @araminix/lib
55
+
56
+ # yarn
57
+ yarn add @araminix/platform @araminix/lib
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 🚀 Quick Start
63
+
64
+ ### 1. Initializing the Platform and Endpoint
65
+
66
+ ```typescript
67
+ import { AuthProvider, ClientInfo, Ok, Platform, Result } from '@araminix/platform';
68
+
69
+ // 1. Define custom authentication logic
70
+ class CustomAuthProvider extends AuthProvider {
71
+ async getInfo(token: string): Promise<Result<ClientInfo, unknown>> {
72
+ // Retrieve and return client information
73
+ return new Ok({
74
+ id: 'user-100',
75
+ clientType: 'User',
76
+ runtimeId: 'rt-100',
77
+ } as ClientInfo);
78
+ }
79
+
80
+ async auth(data: any) {
81
+ /* verify credentials */ return new Ok('token-xyz');
82
+ }
83
+ async googleAuth(data: any) {
84
+ /* Google OAuth */ return new Ok('token-xyz');
85
+ }
86
+ async destroy(token: string) {
87
+ /* session cleanup */
88
+ }
89
+ async refreshToken(token: string) {
90
+ return new Ok('new-token');
91
+ }
92
+ async request2FA(userId: string) {
93
+ return new Ok('otpauth://...');
94
+ }
95
+ async enable2FA(userId: string, secret: string, code: string) {
96
+ return new Ok(true);
97
+ }
98
+ async verify2FA(account: string, code: string, uuid: string) {
99
+ return new Ok(true);
100
+ }
101
+ async disable2FA(userId: string) {
102
+ return new Ok(true);
103
+ }
104
+ async requestUploadUrl(id: string, name: string, mime: string) {
105
+ return new Ok('https://...');
106
+ }
107
+ async requestDownloadUrl(id: string, name: string) {
108
+ return new Ok('https://...');
109
+ }
110
+ async mobileRequests(data: any) {
111
+ return { status: 200, result: 'OK' };
112
+ }
113
+ }
114
+
115
+ // 2. Configure and launch the Platform
116
+ const platform = new Platform({
117
+ appIndexPath: new URL('file:///path/to/apps/index.js'),
118
+ agentIndexPath: new URL('file:///path/to/agents/index.js'),
119
+ authProvider: new CustomAuthProvider(),
120
+ instanceUserLimit: 10,
121
+ port: 3000,
122
+ mount: '/api',
123
+ });
124
+
125
+ // Start listening for HTTP & WebSocket connections
126
+ await platform.start();
127
+ console.log('Araminix Platform running on http://localhost:3000/api');
128
+ ```
129
+
130
+ ---
131
+
132
+ ### 2. Spawning Multi-Threaded Agents
133
+
134
+ ```typescript
135
+ import { AgentController } from '@araminix/platform';
136
+
137
+ const controller = new AgentController(new URL('file:///path/to/agentWorker.js'));
138
+
139
+ // Acquire or send tasks to background worker threads
140
+ const taskResult = await controller.task('worker-1', {
141
+ action: 'computeAnalytics',
142
+ payload: { range: '30d' },
143
+ });
144
+
145
+ if (taskResult.isOk()) {
146
+ console.log('Agent Response:', taskResult.unwrap());
147
+ }
148
+ ```
149
+
150
+ ---
151
+
152
+ ### 3. Dynamic UI Building with Fragments & Panels
153
+
154
+ ```typescript
155
+ import { Fragment, panel } from '@araminix/platform';
156
+
157
+ class UserProfileFragment extends Fragment {
158
+ build() {
159
+ return {
160
+ type: 'card',
161
+ props: { title: 'User Information' },
162
+ };
163
+ }
164
+ }
165
+
166
+ // Assemble nested reactive panels
167
+ const dashboard = panel({ header: 'System Overview' })
168
+ .panel(panel({ header: 'Metrics' }))
169
+ .fragment(new UserProfileFragment())
170
+ .build();
171
+ ```
172
+
173
+ ---
174
+
175
+ ## 🛠️ Module Exports
176
+
177
+ | Submodule | Purpose |
178
+ | -------------------- | ---------------------------------------------------------------------------------------------- |
179
+ | `Platform` | Primary orchestrator managing endpoints, apps, and user session lifecycles. |
180
+ | `Endpoint` | Express + `express-ws` HTTP/WebSocket server handling auth, sessions, 2FA, and upload streams. |
181
+ | `AgentController` | Spawns and supervises isolated worker threads with `MessageChannel` IPC. |
182
+ | `Panel` / `Fragment` | Fluent builder API for dynamic UI layout structures. |
183
+ | `MinioService` | Object storage client for S3/MinIO presigned URLs and file lifecycle operations. |
184
+ | `I18nService` | Type-safe multi-language translation and fallback engine. |
185
+
186
+ ---
187
+
188
+ ## 🧪 Testing
189
+
190
+ ```bash
191
+ # Run unit tests
192
+ npm test
193
+
194
+ # Run tests with built-in code coverage report
195
+ npm run test:coverage
196
+ ```
197
+
198
+ ---
199
+
200
+ ## 👤 Author
201
+
202
+ **Amin Abbasi**
203
+
204
+ - Organization: [araminix](https://github.com/araminix)
205
+ - GitHub: [@abbasi](https://github.com)
206
+
207
+ ---
208
+
209
+ ## 📄 License
210
+
211
+ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,15 @@
1
+ import Fragment from './src/builder/Fragment.js';
2
+ import panel from './src/builder/Panel.js';
3
+ import Platform, { UserInstance } from './src/Platform.js';
4
+ import { ConnectRequest } from './src/server/ConnectRequest.js';
5
+ import Endpoint from './src/server/Endpoint.js';
6
+ export * from '@araminix/lib';
7
+ export * from './src/server/index.js';
8
+ export * from './src/utils/index.js';
9
+ export * from './src/lib/d.js';
10
+ export * from './src/lib/actors.js';
11
+ export * from './src/lib/worker_socket.js';
12
+ export * from './src/agent/d.js';
13
+ export * from './src/executor/index.js';
14
+ export { Platform, Endpoint, ConnectRequest, Fragment, panel, UserInstance };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,KAAK,MAAM,wBAAwB,CAAC;AAC3C,OAAO,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAEhD,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ import Fragment from './src/builder/Fragment.js';
2
+ import panel from './src/builder/Panel.js';
3
+ import Platform from './src/Platform.js';
4
+ import { ConnectRequest } from './src/server/ConnectRequest.js';
5
+ import Endpoint from './src/server/Endpoint.js';
6
+ export * from '@araminix/lib';
7
+ export * from './src/server/index.js';
8
+ export * from './src/utils/index.js';
9
+ export * from './src/lib/d.js';
10
+ export * from './src/lib/actors.js';
11
+ export * from './src/lib/worker_socket.js';
12
+ export * from './src/agent/d.js';
13
+ export * from './src/executor/index.js';
14
+ export { Platform, Endpoint, ConnectRequest, Fragment, panel };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,KAAK,MAAM,wBAAwB,CAAC;AAC3C,OAAO,QAA0B,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAEhD,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAgB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Result, Socket, Stream } from '@araminix/lib';
2
+ import Instance from './executor/Instance.js';
3
+ import { AppListing } from './lib/d.js';
4
+ import { AuthProvider, ClientInfo } from './server/AuthProvider.js';
5
+ import Endpoint from './server/Endpoint.js';
6
+ export interface PlatformConfig {
7
+ appIndexPath: URL;
8
+ agentIndexPath: URL;
9
+ authProvider: AuthProvider;
10
+ instanceUserLimit: number;
11
+ port?: number;
12
+ mount?: string;
13
+ cookieSecret?: string;
14
+ tabLimit?: number;
15
+ uploadDir?: string;
16
+ onCustomStream?: {
17
+ [key: string]: (client: ClientInfo, stream: Stream) => Promise<void>;
18
+ };
19
+ }
20
+ export type UserInstance = {
21
+ id: string;
22
+ appName: string;
23
+ appTitle: string;
24
+ activityTitle?: string;
25
+ profile: string | null;
26
+ touched: number;
27
+ };
28
+ export default class Platform {
29
+ private readonly config;
30
+ readonly endpoint: Endpoint;
31
+ private appIndex;
32
+ private agentController;
33
+ readonly instances: Map<string, Map<string, Instance>>;
34
+ constructor(config: PlatformConfig);
35
+ private serve;
36
+ private processInstanceCloseStream;
37
+ processCustomStreams(clientInfo: ClientInfo, endpointSocket: Socket): void;
38
+ processUserInfo(clientInfo: ClientInfo, endpointSocket: Socket): void;
39
+ listUserInstances(runtimeId: string): Promise<Array<UserInstance>>;
40
+ listUserApps(userId: string): Promise<Result<Array<AppListing>, void>>;
41
+ private processInstanceListStream;
42
+ private processInstanceStream;
43
+ private processAppsListStream;
44
+ private serveInstance;
45
+ start(): Promise<void>;
46
+ stop(): void;
47
+ }
48
+ //# sourceMappingURL=Platform.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,275 @@
1
+ import { Err, loop, LoopResult, Ok, t } from '@araminix/lib';
2
+ import AgentController from './agent/AgentController.js';
3
+ import Instance from './executor/Instance.js';
4
+ import { ClientType } from './server/AuthProvider.js';
5
+ import Endpoint from './server/Endpoint.js';
6
+ export default class Platform {
7
+ config;
8
+ endpoint;
9
+ appIndex;
10
+ agentController;
11
+ instances = new Map();
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.endpoint = new Endpoint({
15
+ authProvider: config.authProvider,
16
+ port: config.port,
17
+ mount: config.mount,
18
+ cookieSecret: config.cookieSecret,
19
+ uploadDir: config.uploadDir,
20
+ });
21
+ this.agentController = new AgentController(this.config.agentIndexPath);
22
+ this.serve();
23
+ }
24
+ serve() {
25
+ loop(async () => {
26
+ const acquireResult = await this.endpoint.acquire('platform');
27
+ if (acquireResult.isErr())
28
+ return LoopResult.Stop;
29
+ const request = acquireResult.unwrap();
30
+ if (request.info.clientType !== ClientType.User) {
31
+ request.deny();
32
+ return LoopResult.Cont;
33
+ }
34
+ const acceptResult = request.accept();
35
+ if (acceptResult.isOk()) {
36
+ const socket = acceptResult.unwrap();
37
+ const runtimeId = request.info.runtimeId;
38
+ this.processInstanceListStream(runtimeId, socket);
39
+ this.processInstanceStream(request.info.id, runtimeId, socket);
40
+ this.processInstanceCloseStream(runtimeId, socket);
41
+ this.processAppsListStream(request.info.id, socket);
42
+ this.processUserInfo(request.info, socket);
43
+ this.processCustomStreams(request.info, socket);
44
+ }
45
+ return LoopResult.Cont;
46
+ });
47
+ loop(async () => {
48
+ const acquireResult = await this.endpoint.acquire('instance');
49
+ if (acquireResult.isErr())
50
+ return LoopResult.Stop;
51
+ const request = acquireResult.unwrap();
52
+ if (request.info.clientType !== ClientType.User) {
53
+ request.deny();
54
+ return LoopResult.Cont;
55
+ }
56
+ this.serveInstance(request.info.runtimeId, request).then();
57
+ return LoopResult.Cont;
58
+ });
59
+ loop(async () => {
60
+ const acquireResult = await this.endpoint.acquire('agent');
61
+ if (acquireResult.isErr())
62
+ return LoopResult.Stop;
63
+ const request = acquireResult.unwrap();
64
+ if (request.info.clientType !== ClientType.Agent) {
65
+ request.deny();
66
+ return LoopResult.Cont;
67
+ }
68
+ this.agentController.connect(request.info, request).then();
69
+ return LoopResult.Cont;
70
+ });
71
+ }
72
+ processInstanceCloseStream(runtimeId, endpointSocket) {
73
+ loop(async () => {
74
+ const streamResult = await endpointSocket.incomingStream('closeInstance');
75
+ if (streamResult.isErr()) {
76
+ return LoopResult.Stop;
77
+ }
78
+ 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) {
86
+ stream.closeOk();
87
+ return LoopResult.Cont;
88
+ }
89
+ const instance = userInstances.get(instanceId);
90
+ if (!instance) {
91
+ stream.closeOk();
92
+ return LoopResult.Cont;
93
+ }
94
+ instance.destroy();
95
+ stream.closeOk();
96
+ return LoopResult.Cont;
97
+ });
98
+ }
99
+ processCustomStreams(clientInfo, endpointSocket) {
100
+ if (!this.config.onCustomStream)
101
+ return;
102
+ for (const streamName in this.config.onCustomStream) {
103
+ const handler = this.config.onCustomStream[streamName];
104
+ loop(async () => {
105
+ const streamResult = await endpointSocket.incomingStream(`custom/${streamName}`);
106
+ if (streamResult.isErr()) {
107
+ return LoopResult.Stop;
108
+ }
109
+ await handler(clientInfo, streamResult.unwrap());
110
+ return LoopResult.Cont;
111
+ });
112
+ }
113
+ }
114
+ processUserInfo(clientInfo, endpointSocket) {
115
+ loop(async () => {
116
+ const streamResult = await endpointSocket.incomingStream('clientInfo');
117
+ if (streamResult.isErr()) {
118
+ return LoopResult.Stop;
119
+ }
120
+ const stream = streamResult.unwrap();
121
+ const result = await stream.write(clientInfo);
122
+ if (result.isErr()) {
123
+ stream.closeErr();
124
+ }
125
+ else {
126
+ stream.closeOk();
127
+ }
128
+ return LoopResult.Cont;
129
+ });
130
+ }
131
+ async listUserInstances(runtimeId) {
132
+ const userInstances = this.instances.get(runtimeId);
133
+ if (!userInstances) {
134
+ return [];
135
+ }
136
+ return [...userInstances.entries()].map(([id, instance]) => ({
137
+ id,
138
+ appTitle: instance.appTitle,
139
+ appName: instance.appName,
140
+ activityTitle: instance.activityTitle,
141
+ profile: instance.profile,
142
+ touched: instance.touched,
143
+ }));
144
+ }
145
+ async listUserApps(userId) {
146
+ const userAppResult = await this.appIndex.userApps(userId);
147
+ if (userAppResult.isErr()) {
148
+ return new Err(undefined);
149
+ }
150
+ return new Ok(userAppResult.unwrap());
151
+ }
152
+ processInstanceListStream(runtimeId, endpointSocket) {
153
+ loop(async () => {
154
+ const streamResult = await endpointSocket.incomingStream('listInstances');
155
+ if (streamResult.isErr()) {
156
+ return LoopResult.Stop;
157
+ }
158
+ const stream = streamResult.unwrap();
159
+ const list = await this.listUserInstances(runtimeId);
160
+ await stream.write(list);
161
+ stream.closeOk();
162
+ return LoopResult.Cont;
163
+ });
164
+ }
165
+ processInstanceStream(userId, runtimeId, endpointSocket) {
166
+ const startInstanceArg = t.type({
167
+ appName: t.string,
168
+ profile: t.union([t.string, t.null]),
169
+ });
170
+ loop(async () => {
171
+ const streamResult = await endpointSocket.incomingStream('createInstance');
172
+ if (streamResult.isErr()) {
173
+ return LoopResult.Stop;
174
+ }
175
+ 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) {
210
+ this.instances.delete(runtimeId);
211
+ }
212
+ }
213
+ });
214
+ if (instanceInitResult.isErr()) {
215
+ stream.closeErr();
216
+ return LoopResult.Cont;
217
+ }
218
+ const writeResult = await stream.write(instance.id);
219
+ if (writeResult.isErr()) {
220
+ instance.destroy();
221
+ }
222
+ stream.closeOk();
223
+ return LoopResult.Cont;
224
+ });
225
+ }
226
+ processAppsListStream(userId, endpointSocket) {
227
+ loop(async () => {
228
+ const streamResult = await endpointSocket.incomingStream('listApps');
229
+ if (streamResult.isErr()) {
230
+ return LoopResult.Stop;
231
+ }
232
+ const stream = streamResult.unwrap();
233
+ const userAppResult = await this.listUserApps(userId);
234
+ if (userAppResult.isErr()) {
235
+ stream.closeErr();
236
+ return LoopResult.Cont;
237
+ }
238
+ await stream.write(userAppResult.unwrap());
239
+ stream.closeOk();
240
+ return LoopResult.Cont;
241
+ });
242
+ }
243
+ async serveInstance(runtimeId, request) {
244
+ const instanceId = request.arg;
245
+ const userInstances = this.instances.get(runtimeId);
246
+ if (!userInstances) {
247
+ request.deny();
248
+ return;
249
+ }
250
+ const instance = userInstances.get(instanceId);
251
+ if (!instance) {
252
+ request.deny();
253
+ return;
254
+ }
255
+ const acceptResult = request.accept();
256
+ if (acceptResult.isOk()) {
257
+ instance.connect(acceptResult.unwrap());
258
+ }
259
+ }
260
+ async start() {
261
+ const AppIndexClass = (await import(this.config.appIndexPath.href)).default;
262
+ this.appIndex = new AppIndexClass();
263
+ this.endpoint.open();
264
+ }
265
+ stop() {
266
+ this.instances.forEach((userInstances) => {
267
+ userInstances.forEach((instance) => {
268
+ instance.destroy();
269
+ });
270
+ });
271
+ this.instances.clear();
272
+ this.endpoint.close();
273
+ }
274
+ }
275
+ //# sourceMappingURL=Platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { R, Result, t } from '@araminix/lib';
2
+ import { MessagePort } from 'worker_threads';
3
+ import { AgentInfo } from '../server/AuthProvider.js';
4
+ import { ConnectRequest } from '../server/ConnectRequest.js';
5
+ export type AgentInit = {
6
+ info: AgentInfo;
7
+ responsePort: MessagePort;
8
+ requestPort: MessagePort;
9
+ workerIndexPath: string;
10
+ };
11
+ export default class AgentController {
12
+ private workerIndex;
13
+ private instances;
14
+ constructor(workerIndex: URL);
15
+ task(id: string, taskName: string, data: t.Any | unknown, hp: number): Promise<Result<any, undefined>>;
16
+ list(type: string): string[];
17
+ acquire(type: string, id: string): R;
18
+ connect(info: AgentInfo, acceptRequest: ConnectRequest): Promise<R>;
19
+ }
20
+ //# sourceMappingURL=AgentController.d.ts.map
@@ -0,0 +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"}