@stateflowx/runtime 0.1.8 → 0.2.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 (56) hide show
  1. package/README.md +38 -87
  2. package/dist/app.module.js +4 -1
  3. package/dist/app.module.js.map +1 -1
  4. package/dist/core/protocol/json-rpc/json-rpc.protocol.d.ts +5 -4
  5. package/dist/core/protocol/json-rpc/json-rpc.protocol.js +5 -5
  6. package/dist/core/protocol/json-rpc/json-rpc.protocol.js.map +1 -1
  7. package/dist/core/protocol/protocol.interface.d.ts +4 -0
  8. package/dist/core/protocol/protocol.interface.js +2 -0
  9. package/dist/core/protocol/protocol.interface.js.map +1 -0
  10. package/dist/core/provider/provider.manager.js +2 -2
  11. package/dist/core/provider/provider.manager.js.map +1 -1
  12. package/dist/core/provider/providers/gemini.provider.js +3 -1
  13. package/dist/core/provider/providers/gemini.provider.js.map +1 -1
  14. package/dist/core/runtime/bootstrap.js.map +1 -1
  15. package/dist/core/runtime/create-runtime-config.interface.d.ts +4 -2
  16. package/dist/core/runtime/create-runtime.d.ts +2 -7
  17. package/dist/core/runtime/create-runtime.js +21 -15
  18. package/dist/core/runtime/create-runtime.js.map +1 -1
  19. package/dist/core/runtime/runtime-config.interface.d.ts +2 -1
  20. package/dist/core/runtime/runtime-context.interface.d.ts +1 -3
  21. package/dist/core/service/service.manager.js +1 -1
  22. package/dist/core/service/service.manager.js.map +1 -1
  23. package/dist/core/storage/in-memory.db.js +3 -1
  24. package/dist/core/storage/in-memory.db.js.map +1 -1
  25. package/dist/core/transport/http/http.controller.d.ts +6 -0
  26. package/dist/core/transport/http/http.controller.js +35 -0
  27. package/dist/core/transport/http/http.controller.js.map +1 -0
  28. package/dist/core/transport/http/http.transport.d.ts +9 -0
  29. package/dist/core/transport/http/http.transport.js +15 -0
  30. package/dist/core/transport/http/http.transport.js.map +1 -0
  31. package/dist/core/transport/transport.interface.d.ts +6 -1
  32. package/dist/core/transport/ws/events.gateway.d.ts +2 -6
  33. package/dist/core/transport/ws/events.gateway.js +2 -74
  34. package/dist/core/transport/ws/events.gateway.js.map +1 -1
  35. package/dist/core/transport/ws/utils.d.ts +0 -3
  36. package/dist/core/transport/ws/utils.js +0 -63
  37. package/dist/core/transport/ws/utils.js.map +1 -1
  38. package/dist/core/transport/ws/ws.transport.d.ts +13 -0
  39. package/dist/core/transport/ws/ws.transport.js +42 -0
  40. package/dist/core/transport/ws/ws.transport.js.map +1 -0
  41. package/dist/examples/ping-pong/ping-pong.app.d.ts +1 -1
  42. package/dist/examples/ping-pong/ping-pong.app.js.map +1 -1
  43. package/dist/examples/ping-pong/ping-pong.app.spec.js.map +1 -1
  44. package/dist/examples/relay-ops/agent/agent.service.js +0 -1
  45. package/dist/examples/relay-ops/agent/agent.service.js.map +1 -1
  46. package/dist/examples/relay-ops/relay-ops.controller.js +0 -1
  47. package/dist/examples/relay-ops/relay-ops.controller.js.map +1 -1
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.js +3 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/main.js +20 -0
  52. package/dist/main.js.map +1 -1
  53. package/dist/runtime.spec.d.ts +1 -0
  54. package/dist/runtime.spec.js +98 -0
  55. package/dist/runtime.spec.js.map +1 -0
  56. package/package.json +1 -2
package/README.md CHANGED
@@ -40,110 +40,61 @@ This demonstrates:
40
40
 
41
41
  ---
42
42
 
43
- ## Demo Client Application
44
-
45
- Example Angular client implementation:
46
-
47
- <https://github.com/bws9000/stateflowx-client-demo>
48
-
49
- ## Demo Host Application
50
-
51
- <https://github.com/bws9000/stateflowx-runtime-host-example>
52
-
53
- ---
54
-
55
43
  ## Basic Runtime Host Example
56
44
 
57
45
  ```ts
58
46
  import 'dotenv/config';
59
47
 
60
- import { WebSocketServer } from 'ws';
61
-
62
48
  import {
63
49
  createRuntime,
50
+ bootstrapRuntime,
64
51
  RuntimeInitializeApp,
65
52
  GeminiProvider,
53
+ JsonRpcProtocol,
54
+ WebSocketTransport,
66
55
  } from '@stateflowx/runtime';
67
56
 
68
- const wss = new WebSocketServer({
69
- port: 3000,
70
- });
57
+ import { WebSocketServer } from 'ws';
71
58
 
72
- wss.on('connection', (socket) => {
73
- const runtime = createRuntime(
74
- {
75
- send(data) {
76
- socket.send(data);
77
- },
78
- },
79
- {
80
- apps: [
81
- new RuntimeInitializeApp(),
82
- ],
83
-
84
- providers: [
85
- {
86
- name: 'default',
87
- provider: new GeminiProvider(),
88
- },
89
- ],
90
-
91
- services: [],
92
- }
93
- );
94
-
95
- socket.on('message', async (message) => {
96
- const payload = JSON.parse(message.toString());
97
-
98
- await runtime.receiveAndSend(payload);
59
+ const server =
60
+ new WebSocketServer({
61
+ port: 3000,
99
62
  });
100
- });
101
63
 
102
- console.log(
103
- 'StateFlowX runtime listening on ws://localhost:3000'
104
- );
105
- ```
64
+ const transport =
65
+ new WebSocketTransport(server);
106
66
 
107
- ---
67
+ const protocol =
68
+ new JsonRpcProtocol();
108
69
 
109
- ## Example Client Runtime Configuration
70
+ const runtime =
71
+ createRuntime({
72
+ transport,
110
73
 
111
- ```ts
112
- const config = defineConfig({
113
- protocol: jsonRpc(),
74
+ protocol,
114
75
 
115
- transport: websocket({
116
- url: 'ws://localhost:3000',
117
- }),
76
+ providers: [
77
+ {
78
+ name: 'default',
118
79
 
119
- providers: [
120
- gemini({
121
- priority: 1,
122
- }),
80
+ provider:
81
+ new GeminiProvider(),
82
+ },
83
+ ],
123
84
 
124
- mockProvider({
125
- priority: 2,
126
- }),
127
- ],
85
+ services: [],
86
+ });
128
87
 
129
- services: [
130
- {
131
- name: 'weather',
132
- type: 'http',
133
- method: 'GET',
134
- url: 'https://api.open-meteo.com/v1/forecast?...',
135
- },
88
+ bootstrapRuntime(
89
+ [
90
+ new RuntimeInitializeApp(),
136
91
  ],
92
+ runtime
93
+ );
137
94
 
138
- workflows: [
139
- {
140
- route: 'weather.execute',
141
- service: 'weather',
142
- provider: 'default',
143
- prompt: 'Format weather data into structured JSON',
144
- },
145
- ],
146
- });
95
+ console.log(
96
+ 'StateFlowX runtime listening on ws://localhost:3000'
97
+ );
147
98
  ```
148
99
 
149
100
  ---
@@ -151,17 +102,17 @@ const config = defineConfig({
151
102
  ## Architecture
152
103
 
153
104
  ```text
154
- Angular Client
105
+ Client
155
106
  ->
156
- WebSocket
107
+ HTTP / WebSocket
157
108
  ->
158
- JSON-RPC Runtime
109
+ JSON-RPC
159
110
  ->
160
- Dynamic Runtime Initialization
111
+ StateFlowX Runtime
161
112
  ->
162
- Workflow Registration
113
+ Workflow Execution
163
114
  ->
164
- HTTP Services
115
+ Services
165
116
  ->
166
117
  AI Providers
167
118
  ->
@@ -6,11 +6,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { Module } from '@nestjs/common';
8
8
  import EventsGateway from './core/transport/ws/events.gateway.js';
9
+ import { HttpTransport } from './core/transport/http/http.transport.js';
10
+ import { HttpRpcController } from './core/transport/http/http.controller.js';
9
11
  let AppModule = class AppModule {
10
12
  };
11
13
  AppModule = __decorate([
12
14
  Module({
13
- providers: [EventsGateway],
15
+ providers: [EventsGateway, HttpTransport],
16
+ controllers: [HttpRpcController],
14
17
  })
15
18
  ], AppModule);
16
19
  export { AppModule };
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,aAAa,MAAM,uCAAuC,CAAC;AAK3D,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,SAAS;IAHrB,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,aAAa,CAAC;KAC3B,CAAC;GACW,SAAS,CAAG"}
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,aAAa,MAAM,uCAAuC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAOtE,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,SAAS;IALrB,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;QAEzC,WAAW,EAAE,CAAC,iBAAiB,CAAC;KACjC,CAAC;GACW,SAAS,CAAG"}
@@ -1,7 +1,8 @@
1
1
  import { JSONRPCServer } from 'json-rpc-2.0';
2
- export declare class JsonRpcProtocol {
3
- private readonly jsonrpc;
4
- constructor(jsonrpc: JSONRPCServer);
2
+ import { Protocol } from '../protocol.interface.js';
3
+ export declare class JsonRpcProtocol implements Protocol {
4
+ private server;
5
+ constructor(server?: JSONRPCServer);
5
6
  addMethod(route: string, handler: Function): void;
6
- receive(payload: any): Promise<import("json-rpc-2.0").JSONRPCResponse | null>;
7
+ receive(payload: unknown): Promise<unknown>;
7
8
  }
@@ -1,13 +1,13 @@
1
+ import { JSONRPCServer } from 'json-rpc-2.0';
1
2
  export class JsonRpcProtocol {
2
- jsonrpc;
3
- constructor(jsonrpc) {
4
- this.jsonrpc = jsonrpc;
3
+ constructor(server = new JSONRPCServer()) {
4
+ this.server = server;
5
5
  }
6
6
  addMethod(route, handler) {
7
- this.jsonrpc.addMethod(route, handler);
7
+ this.server.addMethod(route, handler);
8
8
  }
9
9
  async receive(payload) {
10
- return this.jsonrpc.receive(payload);
10
+ return this.server.receive(payload);
11
11
  }
12
12
  }
13
13
  //# sourceMappingURL=json-rpc.protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-rpc.protocol.js","sourceRoot":"","sources":["../../../../src/core/protocol/json-rpc/json-rpc.protocol.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,SAAS,CAAC,KAAa,EAAE,OAAiB;QACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAY;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"json-rpc.protocol.js","sourceRoot":"","sources":["../../../../src/core/protocol/json-rpc/json-rpc.protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,OAAO,eAAe;IAC1B,YAAoB,SAAwB,IAAI,aAAa,EAAE;QAA3C,WAAM,GAAN,MAAM,CAAqC;IAAG,CAAC;IAEnE,SAAS,CAAC,KAAa,EAAE,OAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAc,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export interface Protocol {
2
+ addMethod(route: string, handler: Function): void;
3
+ receive(payload: unknown): Promise<unknown>;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.interface.js","sourceRoot":"","sources":["../../../src/core/protocol/protocol.interface.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  export class ProviderManager {
2
- providers = new Map();
3
- defaultProvider = 'gemini';
4
2
  constructor(providers = []) {
3
+ this.providers = new Map();
4
+ this.defaultProvider = 'gemini';
5
5
  providers.forEach(({ name, provider }) => {
6
6
  this.register(name, provider);
7
7
  });
@@ -1 +1 @@
1
- {"version":3,"file":"provider.manager.js","sourceRoot":"","sources":["../../../src/core/provider/provider.manager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAClB,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE7C,eAAe,GAAG,QAAQ,CAAC;IAEnC,YAAY,YAA8B,EAAE;QAC1C,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,QAAuB;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,YAAY,GAAG,IAAI,CAAC,eAAe;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"provider.manager.js","sourceRoot":"","sources":["../../../src/core/provider/provider.manager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAK1B,YAAY,YAA8B,EAAE;QAJpC,cAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;QAE7C,oBAAe,GAAG,QAAQ,CAAC;QAGjC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,QAAuB;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,YAAY,GAAG,IAAI,CAAC,eAAe;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -1,6 +1,8 @@
1
1
  import { GoogleGenerativeAI } from '@google/generative-ai';
2
2
  export class GeminiProvider {
3
- genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
3
+ constructor() {
4
+ this.genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
5
+ }
4
6
  async generate(prompt) {
5
7
  console.log('Gemini prompt:', prompt);
6
8
  const model = this.genAI.getGenerativeModel({
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../../../../src/core/provider/providers/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,OAAO,cAAc;IACjB,KAAK,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAe,CAAC,CAAC;IAEpE,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAC1C,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../../../../src/core/provider/providers/gemini.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,OAAO,cAAc;IAA3B;QACU,UAAK,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAe,CAAC,CAAC;IAiBtE,CAAC;IAfC,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAC1C,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAQnE,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,MAAqB;IAIrB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAClC,GAAG,EACH,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAMnE,MAAM,UAAU,gBAAgB,CAAC,IAAkB,EAAE,MAAqB;IACxE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAElD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { DB } from '../db.interface.js';
2
- import { RuntimeApp } from './runtime-app.interface.js';
3
2
  import { ProviderConfig } from '../provider/provider.config.interface.js';
4
3
  import { ServiceConfig } from '../service/service-config.interface.js';
4
+ import { Transport } from '../transport/transport.interface.js';
5
+ import { Protocol } from '../protocol/protocol.interface.js';
5
6
  export interface CreateRuntimeConfig {
6
- apps: RuntimeApp[];
7
+ transport: Transport;
8
+ protocol: Protocol;
7
9
  providers: ProviderConfig[];
8
10
  services?: ServiceConfig[];
9
11
  db?: DB;
@@ -1,8 +1,3 @@
1
1
  import { CreateRuntimeConfig } from './create-runtime-config.interface.js';
2
- interface RuntimeClient {
3
- send(data: string): void;
4
- }
5
- export declare function createRuntime(client: RuntimeClient, config: CreateRuntimeConfig): {
6
- receiveAndSend(payload: unknown): Promise<void>;
7
- };
8
- export {};
2
+ import { RuntimeConfig } from './runtime-config.interface.js';
3
+ export declare function createRuntime(config: CreateRuntimeConfig): RuntimeConfig;
@@ -1,23 +1,29 @@
1
- import { JSONRPCClient, JSONRPCServer, JSONRPCServerAndClient, } from 'json-rpc-2.0';
2
1
  import { InMemoryDB } from '../storage/in-memory.db.js';
3
- import { bootstrapRuntime } from './bootstrap.js';
4
- import { JsonRpcProtocol } from '../protocol/json-rpc/json-rpc.protocol.js';
5
- export function createRuntime(client, config) {
6
- const jsonSC = new JSONRPCServerAndClient(new JSONRPCServer(), new JSONRPCClient((request) => {
7
- client.send(JSON.stringify(request));
8
- return Promise.resolve();
9
- }));
2
+ export function createRuntime(config) {
10
3
  const runtimeConfig = {
11
4
  db: config.db ?? new InMemoryDB(),
12
- protocol: new JsonRpcProtocol(jsonSC.server),
5
+ protocol: config.protocol,
13
6
  providers: config.providers,
14
7
  services: config.services,
15
8
  };
16
- bootstrapRuntime(config.apps, runtimeConfig);
17
- return {
18
- receiveAndSend(payload) {
19
- return jsonSC.receiveAndSend(payload);
20
- },
21
- };
9
+ config.transport.onMessage(async (clientId, payload) => {
10
+ const response = await config.protocol.receive(payload);
11
+ console.log('PROTOCOL RESPONSE:', response);
12
+ //
13
+ // Push-based transports
14
+ // (websocket, mqtt, tcp)
15
+ // send responses
16
+ //
17
+ if (response !== undefined) {
18
+ await config.transport.send(clientId, response);
19
+ }
20
+ //
21
+ // Request/response transports
22
+ // (http)
23
+ // use direct return values
24
+ //
25
+ return response;
26
+ });
27
+ return runtimeConfig;
22
28
  }
23
29
  //# sourceMappingURL=create-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-runtime.js","sourceRoot":"","sources":["../../../src/core/runtime/create-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAU5E,MAAM,UAAU,aAAa,CAC3B,MAAqB,EACrB,MAA2B;IAE3B,MAAM,MAAM,GAAG,IAAI,sBAAsB,CACvC,IAAI,aAAa,EAAE,EAEnB,IAAI,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAErC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE;QAEjC,QAAQ,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QAE5C,SAAS,EAAE,MAAM,CAAC,SAAS;QAE3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IAEF,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE7C,OAAO;QACL,cAAc,CAAC,OAAgB;YAC7B,OAAO,MAAM,CAAC,cAAc,CAAC,OAAc,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"create-runtime.js","sourceRoot":"","sources":["../../../src/core/runtime/create-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,MAAM,UAAU,aAAa,CAC3B,MAA2B;IAE3B,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IAEF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QACrD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAE5C,EAAE;QACF,wBAAwB;QACxB,yBAAyB;QACzB,iBAAiB;QACjB,EAAE;QACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,EAAE;QACF,8BAA8B;QAC9B,SAAS;QACT,2BAA2B;QAC3B,EAAE;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { DB } from '../db.interface.js';
2
+ import { Protocol } from '../protocol/protocol.interface.js';
2
3
  import { ProviderConfig } from '../provider/provider.config.interface.js';
3
4
  import { ServiceConfig } from '../service/service-config.interface.js';
4
5
  export interface RuntimeConfig {
5
- protocol: any;
6
+ protocol: Protocol;
6
7
  providers: ProviderConfig[];
7
8
  services?: ServiceConfig[];
8
9
  db?: DB;
@@ -1,10 +1,8 @@
1
1
  import { DB } from '../db.interface.js';
2
+ import { Protocol } from '../protocol/protocol.interface.js';
2
3
  import { ProviderManager } from '../provider/provider.manager.js';
3
4
  import { ServiceManager } from '../service/service.manager.js';
4
5
  export type PromptHandler = (payload: unknown) => Promise<unknown> | unknown;
5
- export interface Protocol {
6
- register(route: string, handler: PromptHandler): void;
7
- }
8
6
  export interface RuntimeContext {
9
7
  db: DB;
10
8
  state: Record<string, unknown>;
@@ -1,6 +1,6 @@
1
1
  export class ServiceManager {
2
- services = new Map();
3
2
  constructor(services = []) {
3
+ this.services = new Map();
4
4
  services.forEach((service) => {
5
5
  this.register(service);
6
6
  });
@@ -1 +1 @@
1
- {"version":3,"file":"service.manager.js","sourceRoot":"","sources":["../../../src/core/service/service.manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEpD,YAAY,WAA4B,EAAE;QACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"service.manager.js","sourceRoot":"","sources":["../../../src/core/service/service.manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IAGzB,YAAY,WAA4B,EAAE;QAFlC,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAGlD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -1,5 +1,7 @@
1
1
  export class InMemoryDB {
2
- store = new Map();
2
+ constructor() {
3
+ this.store = new Map();
4
+ }
3
5
  get(key) {
4
6
  return this.store.get(key);
5
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory.db.js","sourceRoot":"","sources":["../../../src/core/storage/in-memory.db.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACb,KAAK,GAAG,IAAI,GAAG,EAAe,CAAC;IAEvC,GAAG,CAAU,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAU,GAAW,EAAE,KAAQ;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"in-memory.db.js","sourceRoot":"","sources":["../../../src/core/storage/in-memory.db.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAAvB;QACU,UAAK,GAAG,IAAI,GAAG,EAAe,CAAC;IAiBzC,CAAC;IAfC,GAAG,CAAU,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAU,GAAW,EAAE,KAAQ;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { HttpTransport } from './http.transport.js';
2
+ export declare class HttpRpcController {
3
+ private readonly transport;
4
+ constructor(transport: HttpTransport);
5
+ handleRpc(body: unknown): Promise<unknown>;
6
+ }
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Body, Controller, Post } from '@nestjs/common';
14
+ import { HttpTransport } from './http.transport.js';
15
+ let HttpRpcController = class HttpRpcController {
16
+ constructor(transport) {
17
+ this.transport = transport;
18
+ }
19
+ async handleRpc(body) {
20
+ return this.transport.handleRequest(body);
21
+ }
22
+ };
23
+ __decorate([
24
+ Post(),
25
+ __param(0, Body()),
26
+ __metadata("design:type", Function),
27
+ __metadata("design:paramtypes", [Object]),
28
+ __metadata("design:returntype", Promise)
29
+ ], HttpRpcController.prototype, "handleRpc", null);
30
+ HttpRpcController = __decorate([
31
+ Controller('rpc'),
32
+ __metadata("design:paramtypes", [HttpTransport])
33
+ ], HttpRpcController);
34
+ export { HttpRpcController };
35
+ //# sourceMappingURL=http.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.controller.js","sourceRoot":"","sources":["../../../../src/core/transport/http/http.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG7C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,SAAwB;QAAxB,cAAS,GAAT,SAAS,CAAe;IAAG,CAAC;IAGnD,AAAN,KAAK,CAAC,SAAS,CAAS,IAAa;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AAHO;IADL,IAAI,EAAE;IACU,WAAA,IAAI,EAAE,CAAA;;;;kDAEtB;AANU,iBAAiB;IAD7B,UAAU,CAAC,KAAK,CAAC;qCAEwB,aAAa;GAD1C,iBAAiB,CAO7B"}
@@ -0,0 +1,9 @@
1
+ import { Transport } from '../transport.interface.js';
2
+ export declare class HttpTransport implements Transport {
3
+ private messageHandler?;
4
+ onMessage(handler: (clientId: string, payload: unknown) => Promise<unknown>): void;
5
+ handleRequest(payload: unknown): Promise<unknown>;
6
+ send(): Promise<void>;
7
+ start(): Promise<void>;
8
+ stop(): Promise<void>;
9
+ }
@@ -0,0 +1,15 @@
1
+ export class HttpTransport {
2
+ onMessage(handler) {
3
+ this.messageHandler = handler;
4
+ }
5
+ async handleRequest(payload) {
6
+ if (!this.messageHandler) {
7
+ return;
8
+ }
9
+ return this.messageHandler('http-client', payload);
10
+ }
11
+ async send() { }
12
+ async start() { }
13
+ async stop() { }
14
+ }
15
+ //# sourceMappingURL=http.transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.transport.js","sourceRoot":"","sources":["../../../../src/core/transport/http/http.transport.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAMxB,SAAS,CACP,OAAiE;QAEjE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B,KAAK,CAAC,KAAK,KAAmB,CAAC;IAE/B,KAAK,CAAC,IAAI,KAAmB,CAAC;CAC/B"}
@@ -1 +1,6 @@
1
- export {};
1
+ export interface Transport {
2
+ start(): Promise<void>;
3
+ stop(): Promise<void>;
4
+ onMessage(handler: (clientId: string, payload: unknown) => Promise<unknown>): void;
5
+ send(clientId: string, payload: unknown): Promise<void>;
6
+ }
@@ -1,15 +1,11 @@
1
1
  import { OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit } from '@nestjs/websockets';
2
- import { Server, WebSocket } from 'ws';
2
+ import { Server } from 'ws';
3
3
  import { IWebSocket } from './ws.interface.js';
4
4
  export default class EventsGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
5
5
  server: Server & {
6
6
  clients: Set<IWebSocket>;
7
7
  };
8
- clientsMap: Map<string, IWebSocket>;
9
- maxDataLength: number;
10
8
  handleConnection(client: IWebSocket): void;
11
- handleMessage(client: WebSocket, message: string): void;
12
- handleDisconnect(clientWS: IWebSocket): void;
9
+ handleDisconnect(client: IWebSocket): void;
13
10
  afterInit(): void;
14
- isValidObject(value: unknown, client: IWebSocket): boolean;
15
11
  }
@@ -12,96 +12,24 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  import { ConnectedSocket, WebSocketGateway, WebSocketServer, } from '@nestjs/websockets';
14
14
  import { randomUUID } from 'crypto';
15
- import { isObject } from 'class-validator';
16
- import { createRuntime } from '../../runtime/create-runtime.js';
17
- import { applicationInputTypes } from './utils.js';
18
15
  import { logger } from '../../logger/logger.js';
19
- import { GeminiProvider } from '../../provider/providers/gemini.provider.js';
20
- import { RuntimeInitializeApp } from '../../runtime/runtime-app-init.js';
21
16
  let EventsGateway = class EventsGateway {
22
- server;
23
- clientsMap = new Map();
24
- maxDataLength = 1500;
25
17
  handleConnection(client) {
26
18
  client.id = randomUUID();
27
19
  logger.info({
28
20
  clientId: client.id,
29
21
  transport: 'websocket',
30
- protocol: 'json-rpc',
31
22
  connectedAt: Date.now(),
32
23
  }, 'Client connected');
33
- const runtime = createRuntime(client, {
34
- apps: [new RuntimeInitializeApp()],
35
- providers: [
36
- {
37
- name: 'gemini',
38
- provider: new GeminiProvider(),
39
- },
40
- ],
41
- services: []
42
- });
43
- client.runtime = runtime;
44
- client.on('message', async (msg) => {
45
- const rawMessage = msg.toString();
46
- logger.debug({
47
- clientId: client.id,
48
- size: rawMessage.length,
49
- }, 'Incoming websocket message');
50
- try {
51
- const data = JSON.parse(rawMessage);
52
- await runtime.receiveAndSend(data);
53
- }
54
- catch (err) {
55
- logger.error({
56
- clientId: client.id,
57
- err,
58
- }, 'Runtime execution failed');
59
- }
60
- });
61
24
  }
62
- handleMessage(client, message) {
63
- return client.send(message);
64
- }
65
- handleDisconnect(clientWS) {
25
+ handleDisconnect(client) {
66
26
  logger.info({
67
- clientId: clientWS.id,
27
+ clientId: client.id,
68
28
  }, 'Client disconnected');
69
- this.clientsMap.delete(clientWS.id);
70
29
  }
71
30
  afterInit() {
72
31
  logger.info('WebSocketGateway initialized');
73
32
  }
74
- isValidObject(value, client) {
75
- if (typeof value === 'object' && value !== null && 'data' in value) {
76
- const data = value.data;
77
- if (applicationInputTypes(data)) {
78
- if (typeof data === 'string') {
79
- const len = data.length;
80
- if (len <= this.maxDataLength) {
81
- return isObject(value);
82
- }
83
- client.terminate();
84
- logger.warn({
85
- clientId: client.id,
86
- maxDataLength: this.maxDataLength,
87
- }, 'Payload exceeded max length');
88
- return false;
89
- }
90
- client.terminate();
91
- logger.warn({
92
- clientId: client.id,
93
- reason: 'invalid-data-input',
94
- }, 'Client terminated');
95
- return false;
96
- }
97
- }
98
- client.terminate();
99
- logger.warn({
100
- clientId: client.id,
101
- reason: 'invalid-data-type',
102
- }, 'Client terminated');
103
- return false;
104
- }
105
33
  };
106
34
  __decorate([
107
35
  WebSocketServer(),
@@ -1 +1 @@
1
- {"version":3,"file":"events.gateway.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/events.gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.gateway.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/events.gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,eAAe,EAIf,gBAAgB,EAChB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGjC,IAAM,aAAa,GAAnB,MAAM,aAAa;IAQhC,gBAAgB,CAAC,MAAkB;QACjC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAEzB,MAAM,CAAC,IAAI,CACT;YACE,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,EACD,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,gBAAgB,CAEd,MAAkB;QAElB,MAAM,CAAC,IAAI,CACT;YACE,QAAQ,EAAE,MAAM,CAAC,EAAE;SACpB,EACD,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAhCC;IADC,eAAe,EAAE;;6CAGhB;AAeF;IACG,WAAA,eAAe,EAAE,CAAA;;;;qDASnB;AA/BkB,aAAa;IADjC,gBAAgB,EAAE;GACE,aAAa,CAoCjC;eApCoB,aAAa"}
@@ -1,5 +1,2 @@
1
1
  import { IWebSocket } from './ws.interface.js';
2
- export declare function parseJsonRPCData(d: any): any;
3
2
  export declare function isJsonString(event: string, ws: IWebSocket): boolean;
4
- export declare function isValidJSONRPCRequest(obj: any): boolean;
5
- export declare function applicationInputTypes(obj: any): boolean;
@@ -1,7 +1,3 @@
1
- export function parseJsonRPCData(d) {
2
- const dataObj = JSON.parse(JSON.stringify(d));
3
- return dataObj.data;
4
- }
5
1
  export function isJsonString(event, ws) {
6
2
  try {
7
3
  JSON.parse(event.toString());
@@ -12,63 +8,4 @@ export function isJsonString(event, ws) {
12
8
  }
13
9
  return true;
14
10
  }
15
- export function isValidJSONRPCRequest(obj) {
16
- let check;
17
- if (typeof obj === 'string') {
18
- try {
19
- check = JSON.parse(obj);
20
- }
21
- catch (err) {
22
- const message = err instanceof Error ? err.message : 'Unknown error';
23
- console.log('input error: ', message);
24
- return false;
25
- }
26
- }
27
- else if (typeof obj === 'object') {
28
- check = obj;
29
- }
30
- else {
31
- return false;
32
- }
33
- //my other input types:
34
- if (check && check.hasOwnProperty('type')) {
35
- return true;
36
- }
37
- else {
38
- //valid json-rpc
39
- if (check &&
40
- (typeof check !== 'object' || check === null || Array.isArray(check))) {
41
- return false;
42
- }
43
- if (check &&
44
- (!check.hasOwnProperty('jsonrpc') || check.jsonrpc !== '2.0')) {
45
- return false;
46
- }
47
- if (check &&
48
- (!check.hasOwnProperty('method') || typeof check.method !== 'string')) {
49
- return false;
50
- }
51
- if (check &&
52
- (!check.hasOwnProperty('params') ||
53
- (typeof check.params !== 'undefined' &&
54
- !Array.isArray(check.params) &&
55
- typeof check.params !== 'object'))) {
56
- return false;
57
- }
58
- if (check &&
59
- (!check.hasOwnProperty('id') ||
60
- (typeof check.id !== 'string' &&
61
- typeof check.id !== 'number' &&
62
- check.id !== null))) {
63
- return false;
64
- }
65
- }
66
- return true;
67
- }
68
- export function applicationInputTypes(obj) {
69
- if (isValidJSONRPCRequest(obj)) {
70
- return true;
71
- }
72
- return false;
73
- }
74
11
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,EAAc;IACxD,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACjE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { WebSocketServer } from 'ws';
2
+ import { Transport } from '../transport.interface.js';
3
+ export declare class WebSocketTransport implements Transport {
4
+ private server;
5
+ private clients;
6
+ private messageHandler?;
7
+ constructor(server: WebSocketServer);
8
+ start(): Promise<void>;
9
+ stop(): Promise<void>;
10
+ onMessage(handler: (clientId: string, payload: unknown) => Promise<void>): void;
11
+ send(clientId: string, payload: unknown): Promise<void>;
12
+ private handleConnection;
13
+ }
@@ -0,0 +1,42 @@
1
+ import { randomUUID } from 'crypto';
2
+ export class WebSocketTransport {
3
+ constructor(server) {
4
+ this.server = server;
5
+ this.clients = new Map();
6
+ this.server.on('connection', this.handleConnection.bind(this));
7
+ }
8
+ async start() { }
9
+ async stop() {
10
+ this.server.close();
11
+ }
12
+ onMessage(handler) {
13
+ this.messageHandler = handler;
14
+ }
15
+ async send(clientId, payload) {
16
+ const client = this.clients.get(clientId);
17
+ if (!client) {
18
+ return;
19
+ }
20
+ client.send(JSON.stringify(payload));
21
+ }
22
+ handleConnection(client) {
23
+ client.id = randomUUID();
24
+ this.clients.set(client.id, client);
25
+ client.on('message', async (raw) => {
26
+ if (!this.messageHandler) {
27
+ return;
28
+ }
29
+ try {
30
+ const payload = JSON.parse(raw.toString());
31
+ await this.messageHandler(client.id, payload);
32
+ }
33
+ catch (err) {
34
+ console.error(err);
35
+ }
36
+ });
37
+ client.on('close', () => {
38
+ this.clients.delete(client.id);
39
+ });
40
+ }
41
+ }
42
+ //# sourceMappingURL=ws.transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.transport.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/ws.transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,MAAM,OAAO,kBAAkB;IAQ7B,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAPnC,YAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;QAQ9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;IAE/B,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,SAAS,CACP,OAA8D;QAE9D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAgB;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,gBAAgB,CAAC,MAAkB;QACzC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAEzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEpC,MAAM,CAAC,EAAE,CACP,SAAS,EAET,KAAK,EAAE,GAAY,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAE3C,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { RuntimeContext, RuntimeApp } from "../../runtime/index.js";
1
+ import { RuntimeContext, RuntimeApp } from '../../runtime/index.js';
2
2
  export declare class PingPongApp implements RuntimeApp {
3
3
  register(runtime: RuntimeContext): void;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ping-pong.app.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAC,OAAuB;QAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAE1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAChC,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;aACjB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,cAAc,GACpB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"ping-pong.app.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAC,OAAuB;QAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAE1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAChC,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;aACjB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAExE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ping-pong.app.spec.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,MAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAE7B,gBAAgB,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE;YACpC,SAAS,EAAE,EAAE;YAEb,EAAE,EAAE,IAAI,UAAU,EAAE;YAEpB,QAAQ,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;SAEtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ping-pong.app.spec.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,MAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAE7B,gBAAgB,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE;YACpC,SAAS,EAAE,EAAE;YAEb,EAAE,EAAE,IAAI,UAAU,EAAE;YAEpB,QAAQ,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -10,7 +10,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import { Injectable } from '@nestjs/common';
11
11
  import { ProviderManager } from '../../../core/provider/provider.manager.js';
12
12
  let AgentService = class AgentService {
13
- providers;
14
13
  constructor(providers) {
15
14
  this.providers = providers;
16
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent.service.js","sourceRoot":"","sources":["../../../../src/examples/relay-ops/agent/agent.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGtE,IAAM,YAAY,GAAlB,MAAM,YAAY;IACM;IAA7B,YAA6B,SAA0B;QAA1B,cAAS,GAAT,SAAS,CAAiB;IAAG,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AANY,YAAY;IADxB,UAAU,EAAE;qCAE6B,eAAe;GAD5C,YAAY,CAMxB"}
1
+ {"version":3,"file":"agent.service.js","sourceRoot":"","sources":["../../../../src/examples/relay-ops/agent/agent.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGtE,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAA6B,SAA0B;QAA1B,cAAS,GAAT,SAAS,CAAiB;IAAG,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AANY,YAAY;IADxB,UAAU,EAAE;qCAE6B,eAAe;GAD5C,YAAY,CAMxB"}
@@ -13,7 +13,6 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  import { Body, Controller, Post } from '@nestjs/common';
14
14
  import { AgentService } from './agent/agent.service.js';
15
15
  let RelayOpsController = class RelayOpsController {
16
- agentService;
17
16
  constructor(agentService) {
18
17
  this.agentService = agentService;
19
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"relay-ops.controller.js","sourceRoot":"","sources":["../../../src/examples/relay-ops/relay-ops.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACA;IAA7B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAGrD,AAAN,KAAK,CAAC,MAAM,CAAS,IAAwB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO;YACL,QAAQ;SACT,CAAC;IACJ,CAAC;CACF,CAAA;AAPO;IADL,IAAI,CAAC,QAAQ,CAAC;IACD,WAAA,IAAI,EAAE,CAAA;;;;gDAMnB;AAVU,kBAAkB;IAD9B,UAAU,CAAC,WAAW,CAAC;qCAEqB,YAAY;GAD5C,kBAAkB,CAW9B"}
1
+ {"version":3,"file":"relay-ops.controller.js","sourceRoot":"","sources":["../../../src/examples/relay-ops/relay-ops.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAGrD,AAAN,KAAK,CAAC,MAAM,CAAS,IAAwB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO;YACL,QAAQ;SACT,CAAC;IACJ,CAAC;CACF,CAAA;AAPO;IADL,IAAI,CAAC,QAAQ,CAAC;IACD,WAAA,IAAI,EAAE,CAAA;;;;gDAMnB;AAVU,kBAAkB;IAD9B,UAAU,CAAC,WAAW,CAAC;qCAEqB,YAAY;GAD5C,kBAAkB,CAW9B"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from './core/runtime/create-runtime.js';
2
2
  export * from './core/runtime/runtime-app-init.js';
3
+ export * from './core/transport/ws/ws.transport.js';
4
+ export * from './core/runtime/bootstrap.js';
3
5
  export * from './core/provider/providers/gemini.provider.js';
6
+ export * from './core/transport/http/http.transport.js';
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
1
  export * from './core/runtime/create-runtime.js';
2
2
  export * from './core/runtime/runtime-app-init.js';
3
+ export * from './core/transport/ws/ws.transport.js';
4
+ export * from './core/runtime/bootstrap.js';
3
5
  export * from './core/provider/providers/gemini.provider.js';
6
+ export * from './core/transport/http/http.transport.js';
4
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AAEnD,cAAc,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC"}
package/dist/main.js CHANGED
@@ -2,10 +2,30 @@ import 'dotenv/config';
2
2
  import { NestFactory } from '@nestjs/core';
3
3
  import { WsAdapter } from '@nestjs/platform-ws';
4
4
  import { AppModule } from './app.module.js';
5
+ import { createRuntime, bootstrapRuntime, RuntimeInitializeApp, GeminiProvider, } from './index.js';
6
+ import { JsonRpcProtocol } from './core/protocol/json-rpc/json-rpc.protocol.js';
7
+ import { HttpTransport } from './core/transport/http/http.transport.js';
5
8
  async function bootstrap() {
6
9
  const app = await NestFactory.create(AppModule);
7
10
  app.useWebSocketAdapter(new WsAdapter(app));
11
+ app.enableCors({
12
+ origin: 'http://localhost:4200',
13
+ });
8
14
  await app.listen(3000);
15
+ const transport = app.get(HttpTransport);
16
+ const protocol = new JsonRpcProtocol();
17
+ const runtime = createRuntime({
18
+ transport,
19
+ protocol,
20
+ providers: [
21
+ {
22
+ name: 'gemini',
23
+ provider: new GeminiProvider(),
24
+ },
25
+ ],
26
+ services: [],
27
+ });
28
+ bootstrapRuntime([new RuntimeInitializeApp()], runtime);
9
29
  console.log('StateFlowX runtime listening on ws://localhost:3000');
10
30
  }
11
31
  bootstrap();
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEhD,GAAG,CAAC,mBAAmB,CACrB,IAAI,SAAS,CAAC,GAAG,CAAC,CACnB,CAAC;IAEF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,CAAC,GAAG,CACT,qDAAqD,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEhD,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5C,GAAG,CAAC,UAAU,CAAC;QACb,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IAEvC,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,SAAS;QACT,QAAQ;QACR,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI,cAAc,EAAE;aAC/B;SACF;QACD,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,gBAAgB,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ import { describe, expect, it } from '@jest/globals';
2
+ import { JSONRPCServer } from 'json-rpc-2.0';
3
+ import { createRuntime } from './core/runtime/create-runtime.js';
4
+ import { bootstrapRuntime } from './core/runtime/bootstrap.js';
5
+ import { JsonRpcProtocol } from './core/protocol/json-rpc/json-rpc.protocol.js';
6
+ import { HttpTransport } from './core/transport/http/http.transport.js';
7
+ import { RuntimeInitializeApp } from './core/runtime/runtime-app-init.js';
8
+ describe('Runtime HTTP Transport', () => {
9
+ it('should initialize and execute workflow over HTTP transport', async () => {
10
+ const transport = new HttpTransport();
11
+ const protocol = new JsonRpcProtocol(new JSONRPCServer());
12
+ const runtime = createRuntime({
13
+ transport,
14
+ protocol,
15
+ providers: [],
16
+ services: [],
17
+ });
18
+ bootstrapRuntime([new RuntimeInitializeApp()], runtime);
19
+ //
20
+ // Initialize runtime
21
+ //
22
+ const initializeResponse = await transport.handleRequest({
23
+ jsonrpc: '2.0',
24
+ method: 'runtime.initialize',
25
+ params: {
26
+ services: [
27
+ {
28
+ name: 'ping',
29
+ type: 'http',
30
+ method: 'GET',
31
+ url: 'https://example.com',
32
+ },
33
+ ],
34
+ workflows: [
35
+ {
36
+ route: 'ping.execute',
37
+ service: 'ping',
38
+ provider: 'default',
39
+ prompt: 'Return pong',
40
+ },
41
+ ],
42
+ },
43
+ id: 1,
44
+ });
45
+ expect(initializeResponse).toEqual({
46
+ jsonrpc: '2.0',
47
+ id: 1,
48
+ result: {
49
+ success: true,
50
+ },
51
+ });
52
+ });
53
+ it('should initialize and execute workflow over HTTP transport', async () => {
54
+ const transport = new HttpTransport();
55
+ const protocol = new JsonRpcProtocol(new JSONRPCServer());
56
+ const runtime = createRuntime({
57
+ transport,
58
+ protocol,
59
+ providers: [],
60
+ services: [],
61
+ });
62
+ bootstrapRuntime([new RuntimeInitializeApp()], runtime);
63
+ //
64
+ // Initialize runtime
65
+ //
66
+ const initializeResponse = await transport.handleRequest({
67
+ jsonrpc: '2.0',
68
+ method: 'runtime.initialize',
69
+ params: {
70
+ services: [
71
+ {
72
+ name: 'ping',
73
+ type: 'http',
74
+ method: 'GET',
75
+ url: 'https://example.com',
76
+ },
77
+ ],
78
+ workflows: [
79
+ {
80
+ route: 'ping.execute',
81
+ service: 'ping',
82
+ provider: 'default',
83
+ prompt: 'Return pong',
84
+ },
85
+ ],
86
+ },
87
+ id: 1,
88
+ });
89
+ expect(initializeResponse).toEqual({
90
+ jsonrpc: '2.0',
91
+ id: 1,
92
+ result: {
93
+ success: true,
94
+ },
95
+ });
96
+ });
97
+ });
98
+ //# sourceMappingURL=runtime.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.spec.js","sourceRoot":"","sources":["../src/runtime.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stateflowx/runtime",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "Realtime orchestration runtime framework for AI workflows and distributed systems.",
5
5
  "author": "Burt Snyder <snyder.burt@gmail.com>",
6
6
  "repository": {
@@ -41,7 +41,6 @@
41
41
  "start:dev": "nest start --watch",
42
42
  "start:prod": "node dist/main.js",
43
43
  "lint": "eslint \"src/**/*.ts\" --fix",
44
- "format": "prettier --write \"src/**/*.ts\"",
45
44
  "test": "jest --passWithNoTests"
46
45
  },
47
46
  "dependencies": {