@ixo/oracles-events
Advanced tools
| import { BaseEvent, type WithRequiredEventProps } from '../base-event/base-event'; | ||
| import { IActionCallEvent } from './types'; | ||
| import { type IActionCallEvent } from './types'; | ||
| export declare class ActionCallEvent extends BaseEvent<IActionCallEvent> { | ||
@@ -4,0 +4,0 @@ payload: WithRequiredEventProps<IActionCallEvent>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"action-call.event.d.ts","sourceRoot":"","sources":["../../../src/events/action-call/action-call.event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,eAAgB,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAC3C,OAAO,EAAE,sBAAsB,CAAC,gBAAgB,CAAC;gBAAjD,OAAO,EAAE,sBAAsB,CAAC,gBAAgB,CAAC;IAK7D,SAAS,gBAAc;IAE9B,MAAM,CAAC,SAAS,gBAAc;CAC/B"} | ||
| {"version":3,"file":"action-call.event.d.ts","sourceRoot":"","sources":["../../../src/events/action-call/action-call.event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,qBAAa,eAAgB,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAC3C,OAAO,EAAE,sBAAsB,CAAC,gBAAgB,CAAC;gBAAjD,OAAO,EAAE,sBAAsB,CAAC,gBAAgB,CAAC;IAK7D,SAAS,gBAAc;IAE9B,MAAM,CAAC,SAAS,gBAAc;CAC/B"} |
@@ -5,4 +5,4 @@ export declare const EVENT_NAME = "browser_tool_call"; | ||
| toolName: string; | ||
| args: any; | ||
| args: Record<string, unknown>; | ||
| } | ||
| //# sourceMappingURL=types.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/browser-tool-call/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;CACX"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/browser-tool-call/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B"} |
| import { BaseEvent, type WithRequiredEventProps } from '../base-event/base-event'; | ||
| import { IReasoningEvent } from './types'; | ||
| import { type IReasoningEvent } from './types'; | ||
| export declare class ReasoningEvent extends BaseEvent<IReasoningEvent> { | ||
@@ -4,0 +4,0 @@ static readonly eventName: "reasoning"; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reasoning-event.d.ts","sourceRoot":"","sources":["../../../src/events/reasoning-event/reasoning-event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,eAAe,EAAE,MAAM,SAAS,CAAC;AAEtD,qBAAa,cAAe,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC5D,gBAAyB,SAAS,cAAc;IAChD,QAAQ,CAAC,SAAS,cAA4B;IACvC,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;gBAE5C,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;IAc5D;;OAEG;IACI,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/C;;OAEG;IACI,YAAY,IAAI,IAAI;IAI3B;;OAEG;WACW,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,EACtD,UAAU,UAAQ,GACjB,cAAc;CAUlB"} | ||
| {"version":3,"file":"reasoning-event.d.ts","sourceRoot":"","sources":["../../../src/events/reasoning-event/reasoning-event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAE3D,qBAAa,cAAe,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC5D,gBAAyB,SAAS,cAAc;IAChD,QAAQ,CAAC,SAAS,cAA4B;IACvC,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;gBAE5C,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;IAc5D;;OAEG;IACI,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/C;;OAEG;IACI,YAAY,IAAI,IAAI;IAI3B;;OAEG;WACW,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,EACtD,UAAU,UAAQ,GACjB,cAAc;CAUlB"} |
| import { BaseEvent, type WithRequiredEventProps } from '../base-event/base-event'; | ||
| import { IToolCallEvent } from './types'; | ||
| import { type IToolCallEvent } from './types'; | ||
| export declare class ToolCallEvent extends BaseEvent<IToolCallEvent> { | ||
@@ -4,0 +4,0 @@ payload: WithRequiredEventProps<IToolCallEvent>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"tool-call.event.d.ts","sourceRoot":"","sources":["../../../src/events/tool-call/tool-call.event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,cAAc,EAAE,MAAM,SAAS,CAAC;AAErD,qBAAa,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IACvC,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC;gBAA/C,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC;IAK3D,SAAS,cAAc;IAE9B,MAAM,CAAC,SAAS,cAAc;CAC/B"} | ||
| {"version":3,"file":"tool-call.event.d.ts","sourceRoot":"","sources":["../../../src/events/tool-call/tool-call.event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1D,qBAAa,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IACvC,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC;gBAA/C,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC;IAK3D,SAAS,cAAc;IAE9B,MAAM,CAAC,SAAS,cAAc;CAC/B"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"graph-event-emitter.d.ts","sourceRoot":"","sources":["../src/graph-event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAY/D,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,qBAAqB,CAC1B,MAAM,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GACjD,IAAI;CASR"} | ||
| {"version":3,"file":"graph-event-emitter.d.ts","sourceRoot":"","sources":["../src/graph-event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAW/D,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,qBAAqB,CAC1B,MAAM,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GACjD,IAAI;CASR"} |
@@ -8,3 +8,2 @@ "use strict"; | ||
| const tool_call_event_1 = require("./events/tool-call/tool-call.event"); | ||
| // eslint-disable-next-line @typescript-eslint/no-extraneous-class -- this class is used in the gateway | ||
| class GraphEventEmitter { | ||
@@ -11,0 +10,0 @@ static registerEventHandlers(server) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"root-event-emitter.d.ts","sourceRoot":"","sources":["../../src/root-event-emitter/root-event-emitter.ts"],"names":[],"mappings":"AAEA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO;WAIO,WAAW,IAAI,gBAAgB;IAWtC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAIxC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAI/D,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;CAGR;AAED,eAAO,MAAM,gBAAgB,kBAAiC,CAAC"} | ||
| {"version":3,"file":"root-event-emitter.d.ts","sourceRoot":"","sources":["../../src/root-event-emitter/root-event-emitter.ts"],"names":[],"mappings":"AAIA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO;WAIO,WAAW,IAAI,gBAAgB;IAmBtC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAIxC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAI/D,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;CAGR;AAED,eAAO,MAAM,gBAAgB,kBAAiC,CAAC"} |
@@ -8,2 +8,3 @@ "use strict"; | ||
| const eventemitter2_1 = __importDefault(require("eventemitter2")); | ||
| const GLOBAL_KEY = Symbol.for('@ixo/oracles-events:root-event-emitter'); | ||
| class RootEventEmitter { | ||
@@ -19,5 +20,12 @@ static instance = null; | ||
| } | ||
| // Use a process-global symbol to ensure a single instance across | ||
| // duplicate copies of this package (npm + workspace link) | ||
| const globalRegistry = globalThis; | ||
| if (globalRegistry[GLOBAL_KEY]) { | ||
| return globalRegistry[GLOBAL_KEY]; | ||
| } | ||
| if (!RootEventEmitter.instance) { | ||
| RootEventEmitter.instance = new RootEventEmitter(); | ||
| } | ||
| globalRegistry[GLOBAL_KEY] = RootEventEmitter.instance; | ||
| return RootEventEmitter.instance; | ||
@@ -24,0 +32,0 @@ } |
+6
-9
| { | ||
| "name": "@ixo/oracles-events", | ||
| "version": "1.0.3", | ||
| "description": "Events for the IXO Oracles", | ||
| "version": "1.0.4", | ||
| "description": "Events for QiForge", | ||
| "private": false, | ||
@@ -33,10 +33,7 @@ "main": "./dist/server.js", | ||
| "devDependencies": { | ||
| "@types/jest": "^29.5.2", | ||
| "jest": "^29.5.0", | ||
| "socket.io": "4.8.0", | ||
| "ts-jest": "^29.1.0", | ||
| "typescript": "^5.3.3", | ||
| "@ixo/eslint-config": "1.0.0", | ||
| "@ixo/jest-config": "0.0.0", | ||
| "@ixo/typescript-config": "1.0.0" | ||
| "@ixo/eslint-config": "2.0.0", | ||
| "@ixo/typescript-config": "1.0.0", | ||
| "@ixo/vitest-config": "1.0.0" | ||
| }, | ||
@@ -48,4 +45,4 @@ "dependencies": { | ||
| "build": "tsc", | ||
| "test": "jest" | ||
| "test": "vitest run" | ||
| } | ||
| } |
+1
-2
| # `@ixo/oracles-events` | ||
| Real-time event system for the IXO Oracles Framework. Handles streaming communication between your oracle (server) and client applications via **Server-Sent Events (SSE)** and **WebSocket (WS)** connections. | ||
| Real-time event system for QiForge. Handles streaming communication between your oracle (server) and client applications via **Server-Sent Events (SSE)** and **WebSocket (WS)** connections. | ||
@@ -387,3 +387,2 @@ **Table of Contents** | ||
| ### Required Payload Properties | ||
@@ -390,0 +389,0 @@ |
| export {}; | ||
| //# sourceMappingURL=base-event.test.d.ts.map |
| {"version":3,"file":"base-event.test.d.ts","sourceRoot":"","sources":["../../../src/events/base-event/base-event.test.ts"],"names":[],"mappings":""} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const root_event_emitter_1 = require("../../root-event-emitter/root-event-emitter"); | ||
| const base_event_1 = require("./base-event"); | ||
| describe('BaseEvent', () => { | ||
| class TestEvent extends base_event_1.BaseEvent { | ||
| payload; | ||
| static eventName = 'testEvent'; | ||
| eventName = TestEvent.eventName; | ||
| constructor(payload) { | ||
| super(); | ||
| this.payload = payload; | ||
| } | ||
| } | ||
| it('should throw an error if used in the browser', () => { | ||
| const originalWindow = global.window; | ||
| global.window = {}; | ||
| expect(() => new TestEvent({ | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| })).toThrow('Events should not be used in the browser.'); | ||
| global.window = originalWindow; | ||
| }); | ||
| it('should throw an error if eventName is not defined', () => { | ||
| class InvalidEvent extends base_event_1.BaseEvent { | ||
| payload; | ||
| eventName = ''; | ||
| constructor(payload) { | ||
| super(); | ||
| this.payload = payload; | ||
| } | ||
| } | ||
| expect(() => new InvalidEvent({ | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| })).toThrow('Derived classes must define a static eventName property of type string.'); | ||
| }); | ||
| it('should emit an event with the correct payload', () => { | ||
| const payload = { sessionId: '456', requestId: '789' }; | ||
| const event = new TestEvent(payload); | ||
| const emitSpy = jest.spyOn(root_event_emitter_1.rootEventEmitter, 'emit'); | ||
| event.emit(); | ||
| expect(emitSpy).toHaveBeenCalledWith(TestEvent.eventName, payload); | ||
| }); | ||
| it('should register event handlers correctly', () => { | ||
| const payload = { sessionId: '456', requestId: '789' }; | ||
| const server = { | ||
| to: jest.fn().mockReturnThis(), | ||
| emit: jest.fn(), | ||
| }; | ||
| const logSpy = jest.spyOn(console, 'log'); | ||
| TestEvent.registerEventHandlers(server); | ||
| root_event_emitter_1.rootEventEmitter.emit(TestEvent.eventName, payload); | ||
| expect(logSpy).toHaveBeenCalled(); | ||
| expect(server.to).toHaveBeenCalledWith(payload.sessionId); | ||
| expect(server.emit).toHaveBeenCalledWith(TestEvent.eventName, payload); | ||
| }); | ||
| }); | ||
| describe('shouldHaveSessionId', () => { | ||
| it('should throw an error if payload is null or undefined', () => { | ||
| expect(() => (0, base_event_1.shouldHaveSessionId)(null)).toThrow('Payload must be provided and cannot be null or undefined.'); | ||
| expect(() => (0, base_event_1.shouldHaveSessionId)(undefined)).toThrow('Payload must be provided and cannot be null or undefined.'); | ||
| }); | ||
| it('should throw an error if payload is not an object', () => { | ||
| expect(() => (0, base_event_1.shouldHaveSessionId)(123)).toThrow('Payload must be an object. Received: number'); | ||
| expect(() => (0, base_event_1.shouldHaveSessionId)('string')).toThrow('Payload must be an object. Received: string'); | ||
| }); | ||
| it('should throw an error if payload does not include sessionId', () => { | ||
| expect(() => (0, base_event_1.shouldHaveSessionId)({})).toThrow('Payload must include a sessionId property.'); | ||
| }); | ||
| it('should return the payload if it includes connectionId', () => { | ||
| const payload = { connectionId: '123', sessionId: '456', requestId: '789' }; | ||
| expect((0, base_event_1.shouldHaveSessionId)(payload)).toBe(payload); | ||
| }); | ||
| }); |
| export {}; | ||
| //# sourceMappingURL=render-component.event.test.d.ts.map |
| {"version":3,"file":"render-component.event.test.d.ts","sourceRoot":"","sources":["../../../src/events/render-component/render-component.event.test.ts"],"names":[],"mappings":""} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const root_event_emitter_1 = require("../../root-event-emitter/root-event-emitter"); | ||
| const test_utils_1 = require("../test-utils"); | ||
| const render_component_event_1 = require("./render-component.event"); | ||
| describe('RenderComponentEvent', () => { | ||
| it('should have a default status of "isRunning" if not provided', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| componentName: 'testComponent', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new render_component_event_1.RenderComponentEvent(payload); | ||
| expect(event.payload.status).toBe('isRunning'); | ||
| }); | ||
| it('should retain the provided status', () => { | ||
| const payload = { | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| componentName: 'testComponent', | ||
| status: 'done', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new render_component_event_1.RenderComponentEvent(payload); | ||
| expect(event.payload.status).toBe('done'); | ||
| }); | ||
| it('should have the correct eventName', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| componentName: 'testComponent', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new render_component_event_1.RenderComponentEvent(payload); | ||
| expect(event.eventName).toBe('render_component'); | ||
| expect(render_component_event_1.RenderComponentEvent.eventName).toBe('render_component'); | ||
| }); | ||
| it('should emit an event with the correct payload', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| componentName: 'testComponent', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new render_component_event_1.RenderComponentEvent(payload); | ||
| const emitSpy = jest.spyOn(root_event_emitter_1.rootEventEmitter, 'emit'); | ||
| event.emit(); | ||
| expect(emitSpy).toHaveBeenCalledWith(render_component_event_1.RenderComponentEvent.eventName, payload); | ||
| }); | ||
| it('should register event handlers correctly', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| componentName: 'testComponent', | ||
| eventId: '101112', | ||
| }; | ||
| expect((0, test_utils_1.shouldRegisterEvent)(render_component_event_1.RenderComponentEvent, payload)).toBe(true); | ||
| }); | ||
| }); |
| export {}; | ||
| //# sourceMappingURL=router.test.d.ts.map |
| {"version":3,"file":"router.test.d.ts","sourceRoot":"","sources":["../../../src/events/router-event/router.test.ts"],"names":[],"mappings":""} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const root_event_emitter_1 = require("../../root-event-emitter/root-event-emitter"); | ||
| const test_utils_1 = require("../test-utils"); | ||
| const router_event_1 = require("./router.event"); | ||
| describe('RouterEvent', () => { | ||
| it('should initialize with the correct payload and eventName', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| step: 'initial', | ||
| }; | ||
| const event = new router_event_1.RouterEvent(payload); | ||
| expect(event.payload).toEqual(payload); | ||
| expect(event.eventName).toBe(router_event_1.RouterEvent.eventName); | ||
| }); | ||
| it('should update the step in the payload', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| step: 'initial', | ||
| }; | ||
| const event = new router_event_1.RouterEvent(payload); | ||
| event.updateStep('nextStep'); | ||
| expect(event.payload.step).toBe('nextStep'); | ||
| }); | ||
| it('should emit an event with the correct payload', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| step: 'initial', | ||
| }; | ||
| const event = new router_event_1.RouterEvent(payload); | ||
| const emitSpy = jest.spyOn(root_event_emitter_1.rootEventEmitter, 'emit'); | ||
| event.emit(); | ||
| expect(emitSpy).toHaveBeenCalledWith(router_event_1.RouterEvent.eventName, payload); | ||
| }); | ||
| it('should register event handlers correctly', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| step: 'initial', | ||
| }; | ||
| expect((0, test_utils_1.shouldRegisterEvent)(router_event_1.RouterEvent, payload)).toBe(true); | ||
| }); | ||
| }); |
| import { type AllEventsAsClass } from 'src/types'; | ||
| /** | ||
| * Utility function to test if an event should be registered. | ||
| * | ||
| * @param EventClass - The class of the event to be registered. | ||
| * @param payload - The payload of the event. | ||
| * | ||
| * @remarks | ||
| * This function mocks a socket and spies on the Logger's `info` method to verify | ||
| * that event handlers are registered correctly. It emits the event using the | ||
| * `rootEventEmitter` and checks that the appropriate log message is generated | ||
| * and that the socket's `to` and `emit` methods are called with the correct arguments. | ||
| */ | ||
| export declare const shouldRegisterEvent: <C extends (typeof AllEventsAsClass)[number]>(EventClass: C, payload: InstanceType<C>["payload"]) => boolean; | ||
| //# sourceMappingURL=test-utils.d.ts.map |
| {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/events/test-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAC9B,CAAC,SAAS,CAAC,OAAO,gBAAgB,EAAE,MAAM,CAAC,EAE3C,YAAY,CAAC,EACb,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAClC,OAeF,CAAC"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.shouldRegisterEvent = void 0; | ||
| const root_event_emitter_1 = require("src/root-event-emitter"); | ||
| /** | ||
| * Utility function to test if an event should be registered. | ||
| * | ||
| * @param EventClass - The class of the event to be registered. | ||
| * @param payload - The payload of the event. | ||
| * | ||
| * @remarks | ||
| * This function mocks a socket and spies on the Logger's `info` method to verify | ||
| * that event handlers are registered correctly. It emits the event using the | ||
| * `rootEventEmitter` and checks that the appropriate log message is generated | ||
| * and that the socket's `to` and `emit` methods are called with the correct arguments. | ||
| */ | ||
| const shouldRegisterEvent = (EventClass, payload) => { | ||
| const server = { | ||
| to: jest.fn().mockReturnThis(), | ||
| emit: jest.fn(), | ||
| }; | ||
| const logSpy = jest.spyOn(console, 'log'); | ||
| EventClass.registerEventHandlers(server); | ||
| root_event_emitter_1.rootEventEmitter.emit(EventClass.eventName, payload); | ||
| expect(logSpy).toHaveBeenCalled(); | ||
| expect(server.to).toHaveBeenCalledWith(payload.sessionId); | ||
| expect(server.emit).toHaveBeenCalledWith(EventClass.eventName, payload); | ||
| return true; | ||
| }; | ||
| exports.shouldRegisterEvent = shouldRegisterEvent; |
| export {}; | ||
| //# sourceMappingURL=tool-call.event.test.d.ts.map |
| {"version":3,"file":"tool-call.event.test.d.ts","sourceRoot":"","sources":["../../../src/events/tool-call/tool-call.event.test.ts"],"names":[],"mappings":""} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const root_event_emitter_1 = require("../../root-event-emitter/root-event-emitter"); | ||
| const test_utils_1 = require("../test-utils"); | ||
| const tool_call_event_1 = require("./tool-call.event"); | ||
| describe('ToolCallEvent', () => { | ||
| it('should have a default status of "isRunning" if not provided', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| toolName: 'testTool', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new tool_call_event_1.ToolCallEvent(payload); | ||
| expect(event.payload.status).toBe('isRunning'); | ||
| }); | ||
| it('should retain the provided status', () => { | ||
| const payload = { | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| toolName: 'testTool', | ||
| status: 'done', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new tool_call_event_1.ToolCallEvent(payload); | ||
| expect(event.payload.status).toBe('done'); | ||
| }); | ||
| it('should have the correct eventName', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| toolName: 'testTool', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new tool_call_event_1.ToolCallEvent(payload); | ||
| expect(event.eventName).toBe('tool_call'); | ||
| expect(tool_call_event_1.ToolCallEvent.eventName).toBe('tool_call'); | ||
| }); | ||
| it('should emit an event with the correct payload', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| toolName: 'testTool', | ||
| eventId: '101112', | ||
| }; | ||
| const event = new tool_call_event_1.ToolCallEvent(payload); | ||
| const emitSpy = jest.spyOn(root_event_emitter_1.rootEventEmitter, 'emit'); | ||
| event.emit(); | ||
| expect(emitSpy).toHaveBeenCalledWith(tool_call_event_1.ToolCallEvent.eventName, payload); | ||
| }); | ||
| it('should register event handlers correctly', () => { | ||
| const payload = { | ||
| connectionId: '123', | ||
| sessionId: '456', | ||
| requestId: '789', | ||
| toolName: 'testTool', | ||
| eventId: '101112', | ||
| }; | ||
| expect((0, test_utils_1.shouldRegisterEvent)(tool_call_event_1.ToolCallEvent, payload)).toBe(true); | ||
| }); | ||
| }); |
| export {}; | ||
| //# sourceMappingURL=root-event-emitter.test.d.ts.map |
| {"version":3,"file":"root-event-emitter.test.d.ts","sourceRoot":"","sources":["../../src/root-event-emitter/root-event-emitter.test.ts"],"names":[],"mappings":""} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const root_event_emitter_1 = require("./root-event-emitter"); | ||
| describe('RootEventEmitter', () => { | ||
| it('should return the same instance on multiple calls', () => { | ||
| const instance1 = root_event_emitter_1.rootEventEmitter; | ||
| const instance2 = root_event_emitter_1.RootEventEmitter.getInstance(); | ||
| expect(instance1).toBe(instance2); | ||
| }); | ||
| it('should throw an error if used in the browser', () => { | ||
| const originalWindow = global.window; | ||
| global.window = {}; | ||
| expect(() => root_event_emitter_1.RootEventEmitter.getInstance()).toThrow('RootEventEmitter should not be used in the browser.'); | ||
| global.window = originalWindow; | ||
| }); | ||
| it('should emit and listen to events', () => { | ||
| const event = 'testEvent'; | ||
| const data = { key: 'value' }; | ||
| const listener = jest.fn(); | ||
| root_event_emitter_1.rootEventEmitter.on(event, listener); | ||
| root_event_emitter_1.rootEventEmitter.emit(event, data); | ||
| expect(listener).toHaveBeenCalledWith(data); | ||
| }); | ||
| it('should remove event listeners', () => { | ||
| const event = 'testEvent'; | ||
| const listener = jest.fn(); | ||
| root_event_emitter_1.rootEventEmitter.on(event, listener); | ||
| root_event_emitter_1.rootEventEmitter.removeListener(event, listener); | ||
| root_event_emitter_1.rootEventEmitter.emit(event, {}); | ||
| expect(listener).not.toHaveBeenCalled(); | ||
| }); | ||
| }); |
5
-37.5%60444
-20.04%83
-17.82%799
-29.04%509
-0.2%