@araminix/platform 0.0.0-stage → 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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +282 -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 +59 -0
  8. package/dist/src/Platform.d.ts.map +1 -0
  9. package/dist/src/Platform.js +415 -0
  10. package/dist/src/Platform.js.map +1 -0
  11. package/dist/src/agent/AgentController.d.ts +41 -0
  12. package/dist/src/agent/AgentController.d.ts.map +1 -0
  13. package/dist/src/agent/AgentController.js +332 -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 +72 -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 +43 -0
  48. package/dist/src/executor/Instance.d.ts.map +1 -0
  49. package/dist/src/executor/Instance.js +415 -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 +199 -0
  80. package/dist/src/server/AuthProvider.d.ts.map +1 -0
  81. package/dist/src/server/AuthProvider.js +69 -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 +78 -0
  88. package/dist/src/server/Endpoint.d.ts.map +1 -0
  89. package/dist/src/server/Endpoint.js +809 -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 +8 -0
  96. package/dist/src/server/index.d.ts.map +1 -0
  97. package/dist/src/server/index.js +8 -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 +38 -0
  110. package/dist/src/utils/log_middleware.js.map +1 -0
  111. package/dist/src/utils/minioService.d.ts +54 -0
  112. package/dist/src/utils/minioService.d.ts.map +1 -0
  113. package/dist/src/utils/minioService.js +166 -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/agentWorker.test.d.ts +2 -0
  120. package/dist/tests/agentWorker.test.d.ts.map +1 -0
  121. package/dist/tests/agentWorker.test.js +225 -0
  122. package/dist/tests/agentWorker.test.js.map +1 -0
  123. package/dist/tests/authProvider.test.d.ts +2 -0
  124. package/dist/tests/authProvider.test.d.ts.map +1 -0
  125. package/dist/tests/authProvider.test.js +39 -0
  126. package/dist/tests/authProvider.test.js.map +1 -0
  127. package/dist/tests/builder.test.d.ts +2 -0
  128. package/dist/tests/builder.test.d.ts.map +1 -0
  129. package/dist/tests/builder.test.js +37 -0
  130. package/dist/tests/builder.test.js.map +1 -0
  131. package/dist/tests/connectRequest.test.d.ts +2 -0
  132. package/dist/tests/connectRequest.test.d.ts.map +1 -0
  133. package/dist/tests/connectRequest.test.js +55 -0
  134. package/dist/tests/connectRequest.test.js.map +1 -0
  135. package/dist/tests/endpointController.test.d.ts +2 -0
  136. package/dist/tests/endpointController.test.d.ts.map +1 -0
  137. package/dist/tests/endpointController.test.js +28 -0
  138. package/dist/tests/endpointController.test.js.map +1 -0
  139. package/dist/tests/endpointSecurity.test.d.ts +2 -0
  140. package/dist/tests/endpointSecurity.test.d.ts.map +1 -0
  141. package/dist/tests/endpointSecurity.test.js +1007 -0
  142. package/dist/tests/endpointSecurity.test.js.map +1 -0
  143. package/dist/tests/i18n.test.d.ts +2 -0
  144. package/dist/tests/i18n.test.d.ts.map +1 -0
  145. package/dist/tests/i18n.test.js +25 -0
  146. package/dist/tests/i18n.test.js.map +1 -0
  147. package/dist/tests/logMiddleware.test.d.ts +2 -0
  148. package/dist/tests/logMiddleware.test.d.ts.map +1 -0
  149. package/dist/tests/logMiddleware.test.js +60 -0
  150. package/dist/tests/logMiddleware.test.js.map +1 -0
  151. package/dist/tests/minioService.test.d.ts +2 -0
  152. package/dist/tests/minioService.test.d.ts.map +1 -0
  153. package/dist/tests/minioService.test.js +206 -0
  154. package/dist/tests/minioService.test.js.map +1 -0
  155. package/dist/tests/platform.test.d.ts +2 -0
  156. package/dist/tests/platform.test.d.ts.map +1 -0
  157. package/dist/tests/platform.test.js +288 -0
  158. package/dist/tests/platform.test.js.map +1 -0
  159. package/dist/tests/proto.test.d.ts +2 -0
  160. package/dist/tests/proto.test.d.ts.map +1 -0
  161. package/dist/tests/proto.test.js +37 -0
  162. package/dist/tests/proto.test.js.map +1 -0
  163. package/dist/tests/unhandledRejections.test.d.ts +2 -0
  164. package/dist/tests/unhandledRejections.test.d.ts.map +1 -0
  165. package/dist/tests/unhandledRejections.test.js +204 -0
  166. package/dist/tests/unhandledRejections.test.js.map +1 -0
  167. package/dist/tests/uploadSecurity.test.d.ts +2 -0
  168. package/dist/tests/uploadSecurity.test.d.ts.map +1 -0
  169. package/dist/tests/uploadSecurity.test.js +219 -0
  170. package/dist/tests/uploadSecurity.test.js.map +1 -0
  171. package/dist/tests/workerSocket.test.d.ts +2 -0
  172. package/dist/tests/workerSocket.test.d.ts.map +1 -0
  173. package/dist/tests/workerSocket.test.js +53 -0
  174. package/dist/tests/workerSocket.test.js.map +1 -0
  175. package/package.json +70 -3
@@ -0,0 +1,45 @@
1
+ import { Ok } from '@araminix/lib';
2
+ import assert from 'node:assert';
3
+ import { describe, it } from 'node:test';
4
+ import { Close, NextPage, Nothing, OpenPage, PopPage, Prev, Reload, ReloadFragment, ReplacePage, UpdateFragment, UpdateTypes, WizardDone, } from '../src/lib/actors.js';
5
+ describe('Actors', () => {
6
+ it('creates Page actors with context', () => {
7
+ const mockPage = { name: 'TestPage' };
8
+ const open = new OpenPage(mockPage, { id: 123 });
9
+ assert.strictEqual(open.page, mockPage);
10
+ assert.deepStrictEqual(open.ctx, { id: 123 });
11
+ const pop = new PopPage(mockPage, { id: 456 });
12
+ assert.strictEqual(pop.page, mockPage);
13
+ assert.deepStrictEqual(pop.ctx, { id: 456 });
14
+ const next = new NextPage(mockPage, null);
15
+ assert.strictEqual(next.page, mockPage);
16
+ const replace = new ReplacePage(mockPage, 'arg');
17
+ assert.strictEqual(replace.ctx, 'arg');
18
+ });
19
+ it('creates Fragment actors with payload', () => {
20
+ const update = new UpdateFragment('frag-1', UpdateTypes.Full, { count: 10 });
21
+ assert.strictEqual(update.fragmentId, 'frag-1');
22
+ assert.strictEqual(update.type, UpdateTypes.Full);
23
+ assert.deepStrictEqual(update.data, { count: 10 });
24
+ const reload = new ReloadFragment('frag-2');
25
+ assert.strictEqual(reload.fragmentId, 'frag-2');
26
+ });
27
+ it('creates Wizard actors', () => {
28
+ const mockWizard = { name: 'Wiz' };
29
+ const done = new WizardDone(mockWizard, new Ok('success'));
30
+ assert.strictEqual(done.wizard, mockWizard);
31
+ assert.strictEqual(done.result?.unwrap(), 'success');
32
+ });
33
+ it('creates lifecycle actors', () => {
34
+ const act = {};
35
+ const close = new Close(act);
36
+ assert.strictEqual(close.activity, act);
37
+ const prev = new Prev(act);
38
+ assert.strictEqual(prev.activity, act);
39
+ const reload = new Reload();
40
+ assert.ok(reload instanceof Reload);
41
+ const nothing = new Nothing();
42
+ assert.ok(nothing instanceof Nothing);
43
+ });
44
+ });
45
+ //# sourceMappingURL=actors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actors.test.js","sourceRoot":"","sources":["../../tests/actors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agentWorker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentWorker.test.d.ts","sourceRoot":"","sources":["../../tests/agentWorker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,225 @@
1
+ import { err, ok, Ok } from '@araminix/lib';
2
+ import assert from 'node:assert';
3
+ import { describe, it } from 'node:test';
4
+ import { Worker } from 'worker_threads';
5
+ import AgentController, { AgentInstance } from '../src/agent/AgentController.js';
6
+ import { AgentInfo } from '../src/server/AuthProvider.js';
7
+ describe('Agent Worker Lifecycle and Concurrency', () => {
8
+ it('worker.ts exits with code 1 on init failure when agentType is invalid', async () => {
9
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
10
+ const agentInfo = new AgentInfo('agent-fail-1', 'nonExistentType');
11
+ const controller = new AgentController(dummyIndexUrl, 2000);
12
+ let denied = false;
13
+ const mockRequest = {
14
+ info: agentInfo,
15
+ arg: '',
16
+ accept: () => ok(),
17
+ deny: () => {
18
+ denied = true;
19
+ return ok();
20
+ },
21
+ };
22
+ const result = await controller.connect(agentInfo, mockRequest);
23
+ assert.ok(result.isErr());
24
+ assert.strictEqual(denied, true);
25
+ // Verify instances map is clean
26
+ assert.strictEqual(controller.instances.has(agentInfo.id), false);
27
+ });
28
+ it('AgentInstance.init terminates worker and clears ping timer on timeout', async () => {
29
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
30
+ const agentInfo = new AgentInfo('agent-timeout-1', 'testType');
31
+ const controller = new AgentController(dummyIndexUrl);
32
+ // Create an AgentInstance with a short timeout of 50ms
33
+ const instance = new AgentInstance(dummyIndexUrl, agentInfo, controller, 50);
34
+ // Ping timer should initially be set
35
+ assert.ok(instance.timer !== undefined);
36
+ // Replace worker with a worker that runs an infinite loop or never responds
37
+ const stuckWorker = new Worker('while(true) {}', { eval: true });
38
+ let exitFired = false;
39
+ stuckWorker.on('exit', () => {
40
+ exitFired = true;
41
+ });
42
+ // Hook init to use stuckWorker
43
+ const origInit = instance.init.bind(instance);
44
+ const initPromise = (async () => {
45
+ // We can directly call init with 50ms timeout
46
+ // For this test, override the worker creation inside init
47
+ return await instance.init(() => { }, 50);
48
+ })();
49
+ const res = await initPromise;
50
+ assert.ok(res.isErr());
51
+ // Ping timer must be cleared
52
+ assert.strictEqual(instance.timer, undefined);
53
+ // Worker must be terminated/undefined
54
+ assert.strictEqual(instance.worker, undefined);
55
+ // Clean up stuckWorker if still running
56
+ await stuckWorker.terminate().catch(() => { });
57
+ });
58
+ it('AgentInstance.destroy terminates worker and clears ping timer', async () => {
59
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
60
+ const agentInfo = new AgentInfo('agent-destroy-1', 'testType');
61
+ const controller = new AgentController(dummyIndexUrl);
62
+ const instance = new AgentInstance(dummyIndexUrl, agentInfo, controller);
63
+ const stuckWorker = new Worker('while(true) {}', { eval: true });
64
+ instance.worker = stuckWorker;
65
+ let exitFired = false;
66
+ stuckWorker.on('exit', () => {
67
+ exitFired = true;
68
+ });
69
+ let destroyedCalled = false;
70
+ instance.onDestroy = () => {
71
+ destroyedCalled = true;
72
+ };
73
+ assert.ok(instance.timer !== undefined);
74
+ instance.destroy();
75
+ assert.strictEqual(destroyedCalled, true);
76
+ assert.strictEqual(instance.timer, undefined);
77
+ assert.strictEqual(instance.worker, undefined);
78
+ await new Promise((resolve) => setTimeout(resolve, 50));
79
+ assert.strictEqual(exitFired, true);
80
+ });
81
+ it('AgentController.connect deletes entry from instances on Err', async () => {
82
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
83
+ const controller = new AgentController(dummyIndexUrl, 100);
84
+ const agentInfo = new AgentInfo('agent-err-cleanup', 'invalidType');
85
+ let denied = false;
86
+ const mockRequest = {
87
+ info: agentInfo,
88
+ arg: '',
89
+ accept: () => ok(),
90
+ deny: () => {
91
+ denied = true;
92
+ return ok();
93
+ },
94
+ };
95
+ const res = await controller.connect(agentInfo, mockRequest);
96
+ assert.ok(res.isErr());
97
+ assert.strictEqual(denied, true);
98
+ assert.strictEqual(controller.instances.has(agentInfo.id), false);
99
+ // Later connects for that ID must not find a dead worker in instances
100
+ assert.strictEqual(controller.instances.get(agentInfo.id), undefined);
101
+ });
102
+ it('AgentController.connect shares pending init for concurrent connects for same id', async () => {
103
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
104
+ const controller = new AgentController(dummyIndexUrl);
105
+ const agentInfo = new AgentInfo('agent-concurrent-1', 'testType');
106
+ let initCalls = 0;
107
+ let resolveInit;
108
+ const slowInitPromise = new Promise((resolve) => {
109
+ resolveInit = resolve;
110
+ });
111
+ const origSet = controller.instances.set;
112
+ controller.instances.set = function (key, val) {
113
+ val.init = async () => {
114
+ initCalls++;
115
+ await slowInitPromise;
116
+ return ok();
117
+ };
118
+ val.connect = () => { };
119
+ return origSet.call(this, key, val);
120
+ };
121
+ const mockSocket = {
122
+ waitClose: async () => 'Intentional',
123
+ destroy: () => { },
124
+ };
125
+ const req1 = {
126
+ info: agentInfo,
127
+ arg: '',
128
+ accept: () => new Ok(mockSocket),
129
+ deny: () => ok(),
130
+ };
131
+ const req2 = {
132
+ info: agentInfo,
133
+ arg: '',
134
+ accept: () => new Ok(mockSocket),
135
+ deny: () => ok(),
136
+ };
137
+ // Launch concurrent connects for the same id
138
+ const connectPromise1 = controller.connect(agentInfo, req1);
139
+ const connectPromise2 = controller.connect(agentInfo, req2);
140
+ // Pending map must contain agentInfo.id
141
+ assert.strictEqual(controller.pending.has(agentInfo.id), true);
142
+ // Resolve init
143
+ resolveInit(ok());
144
+ const [res1, res2] = await Promise.all([connectPromise1, connectPromise2]);
145
+ assert.ok(res1.isOk());
146
+ assert.ok(res2.isOk());
147
+ // Only one init was executed across both concurrent connects
148
+ assert.strictEqual(initCalls, 1);
149
+ // Pending map is cleared
150
+ assert.strictEqual(controller.pending.has(agentInfo.id), false);
151
+ // Instance is stored
152
+ assert.ok(controller.instances.has(agentInfo.id));
153
+ });
154
+ it('AgentController.connect denies all concurrent connects and cleans instances on init failure', async () => {
155
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
156
+ const controller = new AgentController(dummyIndexUrl);
157
+ const agentInfo = new AgentInfo('agent-concurrent-fail', 'testType');
158
+ let initCalls = 0;
159
+ let resolveInit;
160
+ const slowInitPromise = new Promise((resolve) => {
161
+ resolveInit = resolve;
162
+ });
163
+ const origSet = controller.instances.set;
164
+ controller.instances.set = function (key, val) {
165
+ val.init = async () => {
166
+ initCalls++;
167
+ await slowInitPromise;
168
+ return err();
169
+ };
170
+ return origSet.call(this, key, val);
171
+ };
172
+ let denied1 = false;
173
+ let denied2 = false;
174
+ const req1 = {
175
+ info: agentInfo,
176
+ arg: '',
177
+ accept: () => ok(),
178
+ deny: () => {
179
+ denied1 = true;
180
+ return ok();
181
+ },
182
+ };
183
+ const req2 = {
184
+ info: agentInfo,
185
+ arg: '',
186
+ accept: () => ok(),
187
+ deny: () => {
188
+ denied2 = true;
189
+ return ok();
190
+ },
191
+ };
192
+ const p1 = controller.connect(agentInfo, req1);
193
+ const p2 = controller.connect(agentInfo, req2);
194
+ assert.strictEqual(controller.pending.has(agentInfo.id), true);
195
+ // Resolve with failure
196
+ resolveInit(err());
197
+ const [res1, res2] = await Promise.all([p1, p2]);
198
+ assert.ok(res1.isErr());
199
+ assert.ok(res2.isErr());
200
+ assert.strictEqual(denied1, true);
201
+ assert.strictEqual(denied2, true);
202
+ // Only one init call
203
+ assert.strictEqual(initCalls, 1);
204
+ // Both maps cleaned
205
+ assert.strictEqual(controller.pending.has(agentInfo.id), false);
206
+ assert.strictEqual(controller.instances.has(agentInfo.id), false);
207
+ });
208
+ it('AgentController.stop cleans up all instances and terminates workers', () => {
209
+ const dummyIndexUrl = new URL('file:///d:/dummy/agents.js');
210
+ const controller = new AgentController(dummyIndexUrl);
211
+ let destroyedCount = 0;
212
+ const mockInstance = {
213
+ info: new AgentInfo('a1', 't1'),
214
+ destroy: () => {
215
+ destroyedCount++;
216
+ },
217
+ };
218
+ controller.instances.set('a1', mockInstance);
219
+ assert.strictEqual(controller.instances.size, 1);
220
+ controller.stop();
221
+ assert.strictEqual(destroyedCount, 1);
222
+ assert.strictEqual(controller.instances.size, 0);
223
+ });
224
+ });
225
+ //# sourceMappingURL=agentWorker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentWorker.test.js","sourceRoot":"","sources":["../../tests/agentWorker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authProvider.test.d.ts","sourceRoot":"","sources":["../../tests/authProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import assert from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { AgentInfo, ClientType, UserInfo } from '../src/server/AuthProvider.js';
4
+ describe('AuthProvider & ClientInfo', () => {
5
+ it('instantiates UserInfo correctly', () => {
6
+ const user = new UserInfo('user-1', 'john_doe', 'John Doe', 'rt-1', 'john@example.com', [{ _key: 'u1', name: 'Unit 1', code: 'U1' }], {
7
+ _key: 'u1',
8
+ name: 'Unit 1',
9
+ code: 'U1',
10
+ });
11
+ assert.strictEqual(user.id, 'user-1');
12
+ assert.strictEqual(user.username, 'john_doe');
13
+ assert.strictEqual(user.clientType, ClientType.User);
14
+ assert.strictEqual(user.units.length, 1);
15
+ });
16
+ it('instantiates AgentInfo correctly', () => {
17
+ const agent = new AgentInfo('agent-1', 'workerAgent');
18
+ assert.strictEqual(agent.id, 'agent-1');
19
+ assert.strictEqual(agent.agentType, 'workerAgent');
20
+ assert.strictEqual(agent.clientType, ClientType.Agent);
21
+ assert.strictEqual(agent.runtimeId, 'agent-1');
22
+ });
23
+ it('sanitizes settings.two_factor at runtime to strip secret and code', () => {
24
+ const user = new UserInfo('user-1', 'john_doe', 'John Doe', 'rt-1', 'john@example.com', [], { _key: 'u1', name: 'Unit 1', code: 'U1' }, undefined, undefined, undefined, {
25
+ notifications: {},
26
+ widgets: [],
27
+ two_factor: {
28
+ enabled: true,
29
+ secret: 'SUPER_SECRET_KEY_123',
30
+ code: '654321',
31
+ },
32
+ });
33
+ assert.strictEqual(user.settings?.two_factor?.enabled, true);
34
+ assert.strictEqual(user.settings?.two_factor?.secret, undefined);
35
+ assert.strictEqual(user.settings?.two_factor?.code, undefined);
36
+ assert.deepStrictEqual(user.settings?.two_factor, { enabled: true });
37
+ });
38
+ });
39
+ //# sourceMappingURL=authProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authProvider.test.js","sourceRoot":"","sources":["../../tests/authProvider.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEhF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;YAClI,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;YACrK,aAAa,EAAE,EAAS;YACxB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,sBAAsB;gBAC9B,IAAI,EAAE,QAAQ;aACV;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAE,IAAI,CAAC,QAAQ,EAAE,UAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,WAAW,CAAE,IAAI,CAAC,QAAQ,EAAE,UAAkB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACxE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.test.d.ts","sourceRoot":"","sources":["../../tests/builder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import assert from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import builder from '../src/builder/builder.js';
4
+ import Fragment from '../src/builder/Fragment.js';
5
+ import panel, { Panel } from '../src/builder/Panel.js';
6
+ class MockFragment extends Fragment {
7
+ async load() {
8
+ return this.input.label;
9
+ }
10
+ }
11
+ describe('UI Builder & Fragments', () => {
12
+ it('builds nested panels and registers fragments', async () => {
13
+ const mockActivityDriver = {
14
+ push: async () => { },
15
+ trigger: async () => { },
16
+ };
17
+ const buildResult = await builder.build(mockActivityDriver, async () => {
18
+ await panel({
19
+ styles: ['flex', 'col'],
20
+ render: async () => {
21
+ new MockFragment({ label: 'Hello Fragment' });
22
+ },
23
+ });
24
+ });
25
+ assert.ok(buildResult.mainPanel instanceof Panel);
26
+ assert.strictEqual(buildResult.fragments.size, 1);
27
+ const frag = [...buildResult.fragments.values()][0];
28
+ assert.strictEqual(frag.type, 'MockFragment');
29
+ const loadedData = await frag.load();
30
+ assert.strictEqual(loadedData, 'Hello Fragment');
31
+ const tree = buildResult.mainPanel._build();
32
+ assert.strictEqual(tree.type, 'Panel');
33
+ assert.ok(Array.isArray(tree.content));
34
+ assert.strictEqual(tree.content.length, 1);
35
+ });
36
+ });
37
+ //# sourceMappingURL=builder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.test.js","sourceRoot":"","sources":["../../tests/builder.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAChD,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,YAAa,SAAQ,QAAsD;IAC7E,KAAK,CAAC,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B,CAAC;CACJ;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,kBAAkB,GAAQ;YAC5B,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YACpB,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,KAAK,CAAC;gBACR,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;gBACvB,MAAM,EAAE,KAAK,IAAI,EAAE;oBACf,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAClD,CAAC;aACJ,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,YAAY,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connectRequest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectRequest.test.d.ts","sourceRoot":"","sources":["../../tests/connectRequest.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { Connection } from '@araminix/lib';
2
+ import assert from 'node:assert';
3
+ import { describe, it } from 'node:test';
4
+ import { AgentInfo } from '../src/server/AuthProvider.js';
5
+ import { AcceptError, ConnectRequest } from '../src/server/ConnectRequest.js';
6
+ describe('ConnectRequest', () => {
7
+ it('accepts connection', () => {
8
+ const inter = {
9
+ onDestroy: () => { },
10
+ onDisconnect: () => { },
11
+ onAccept: () => { },
12
+ };
13
+ const conn = new Connection(inter, 'test-arg');
14
+ const mockWs = {
15
+ send: () => { },
16
+ close: () => { },
17
+ onopen: null,
18
+ onerror: null,
19
+ onclose: null,
20
+ onmessage: null,
21
+ readyState: 1,
22
+ };
23
+ conn.connect(mockWs);
24
+ const info = new AgentInfo('agent-1', 'test');
25
+ const req = new ConnectRequest(conn, info);
26
+ assert.strictEqual(req.arg, 'test-arg');
27
+ const res = req.accept();
28
+ assert.strictEqual(res.isOk(), true);
29
+ // Second accept should be Staled
30
+ const res2 = req.accept();
31
+ assert.strictEqual(res2.isErr(), true);
32
+ if (res2.isErr()) {
33
+ assert.strictEqual(res2.e, AcceptError.Staled);
34
+ }
35
+ conn.destroy('Intentional');
36
+ });
37
+ it('denies connection', () => {
38
+ const inter = {
39
+ onDestroy: () => { },
40
+ onDisconnect: () => { },
41
+ onAccept: () => { },
42
+ };
43
+ const conn = new Connection(inter, 'test-arg');
44
+ const info = new AgentInfo('agent-1', 'test');
45
+ const req = new ConnectRequest(conn, info);
46
+ const res = req.deny();
47
+ assert.strictEqual(res.isOk(), true);
48
+ const res2 = req.deny();
49
+ assert.strictEqual(res2.isErr(), true);
50
+ if (res2.isErr()) {
51
+ assert.strictEqual(res2.e, AcceptError.Staled);
52
+ }
53
+ });
54
+ });
55
+ //# sourceMappingURL=connectRequest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectRequest.test.js","sourceRoot":"","sources":["../../tests/connectRequest.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=endpointController.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointController.test.d.ts","sourceRoot":"","sources":["../../tests/endpointController.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import assert from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { AgentInfo } from '../src/server/AuthProvider.js';
4
+ import EndpointController from '../src/server/EndpointController.js';
5
+ describe('EndpointController', () => {
6
+ it('acquires and connects', async () => {
7
+ const controller = new EndpointController();
8
+ const acquirePromise = controller.acquire();
9
+ const mockWs = {
10
+ send: () => { },
11
+ close: () => { },
12
+ onopen: null,
13
+ onerror: null,
14
+ onclose: null,
15
+ onmessage: null,
16
+ readyState: 1,
17
+ };
18
+ const info = new AgentInfo('agent-10', 'typeX');
19
+ await controller.connect(mockWs, 'token-123', info, 'arg-1');
20
+ const result = await acquirePromise;
21
+ assert.strictEqual(result.isOk(), true);
22
+ const req = result.unwrap();
23
+ assert.strictEqual(req.info.id, 'agent-10');
24
+ assert.strictEqual(req.arg, 'arg-1');
25
+ req.deny();
26
+ });
27
+ });
28
+ //# sourceMappingURL=endpointController.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointController.test.js","sourceRoot":"","sources":["../../tests/endpointController.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AAErE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAE5C,MAAM,MAAM,GAAG;YACX,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,CAAC;SAChB,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,CAAC,OAAO,CAAC,MAAa,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,GAAG,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=endpointSecurity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointSecurity.test.d.ts","sourceRoot":"","sources":["../../tests/endpointSecurity.test.ts"],"names":[],"mappings":""}