@veloxts/events 0.6.55 → 0.6.57

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.
package/dist/index.d.ts CHANGED
@@ -43,3 +43,22 @@ export { createEventsManager, createManagerFromDriver, type EventsManager, event
43
43
  export { _resetStandaloneEvents, eventsPlugin, getEvents, getEventsFromInstance, } from './plugin.js';
44
44
  export { ClientMessageSchema, formatValidationErrors, PresenceMemberSchema, SseSubscribeBodySchema, SseUnsubscribeBodySchema, type ValidationResult, validateBody, WsAuthBodySchema, } from './schemas.js';
45
45
  export type { BroadcastDriver, BroadcastEvent, Channel, ChannelAuthorizer, ChannelAuthResult, ChannelType, ClientConnection, ClientMessage, EventsBaseOptions, EventsDefaultOptions, EventsManagerOptions, EventsPluginOptions, EventsSseOptions, EventsWsOptions, PresenceMember, ServerMessage, Subscription, } from './types.js';
46
+ /**
47
+ * DI tokens and providers for @veloxts/events
48
+ *
49
+ * Use these to integrate events services with the @veloxts/core DI container.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * import { Container } from '@veloxts/core';
54
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
55
+ *
56
+ * const container = new Container();
57
+ * await registerEventsProviders(container, { driver: 'ws' });
58
+ *
59
+ * const events = container.resolve(EVENTS_MANAGER);
60
+ * await events.broadcast('orders', 'order.created', { id: '123' });
61
+ * ```
62
+ */
63
+ export { registerEventsProviders } from './providers.js';
64
+ export { EVENTS_CONFIG, EVENTS_DRIVER, EVENTS_MANAGER } from './tokens.js';
package/dist/index.js CHANGED
@@ -47,3 +47,27 @@ export { createEventsManager, createManagerFromDriver, events, } from './manager
47
47
  export { _resetStandaloneEvents, eventsPlugin, getEvents, getEventsFromInstance, } from './plugin.js';
48
48
  // Schemas (for validation)
49
49
  export { ClientMessageSchema, formatValidationErrors, PresenceMemberSchema, SseSubscribeBodySchema, SseUnsubscribeBodySchema, validateBody, WsAuthBodySchema, } from './schemas.js';
50
+ // ============================================================================
51
+ // Dependency Injection
52
+ // ============================================================================
53
+ /**
54
+ * DI tokens and providers for @veloxts/events
55
+ *
56
+ * Use these to integrate events services with the @veloxts/core DI container.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * import { Container } from '@veloxts/core';
61
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
62
+ *
63
+ * const container = new Container();
64
+ * await registerEventsProviders(container, { driver: 'ws' });
65
+ *
66
+ * const events = container.resolve(EVENTS_MANAGER);
67
+ * await events.broadcast('orders', 'order.created', { id: '123' });
68
+ * ```
69
+ */
70
+ // Provider exports - factory functions for registering services
71
+ export { registerEventsProviders } from './providers.js';
72
+ // Token exports - unique identifiers for DI resolution
73
+ export { EVENTS_CONFIG, EVENTS_DRIVER, EVENTS_MANAGER } from './tokens.js';
@@ -0,0 +1,59 @@
1
+ /**
2
+ * DI Providers for @veloxts/events
3
+ *
4
+ * Factory provider functions for registering events services with the DI container.
5
+ * These providers allow services to be managed by the container for testability and flexibility.
6
+ *
7
+ * @module events/providers
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { Container } from '@veloxts/core';
12
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
13
+ *
14
+ * const container = new Container();
15
+ * await registerEventsProviders(container, {
16
+ * driver: 'ws',
17
+ * path: '/ws',
18
+ * });
19
+ *
20
+ * const events = container.resolve(EVENTS_MANAGER);
21
+ * await events.broadcast('orders', 'order.created', { id: '123' });
22
+ * ```
23
+ */
24
+ import type { Container } from '@veloxts/core';
25
+ import type { EventsPluginOptions } from './types.js';
26
+ /**
27
+ * Registers events providers with a container
28
+ *
29
+ * This handles async initialization of the events manager and registers
30
+ * the resolved instance directly for synchronous resolution.
31
+ *
32
+ * @param container - The DI container to register providers with
33
+ * @param config - Events plugin options (driver, path, etc.)
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * import { Container } from '@veloxts/core';
38
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
39
+ *
40
+ * const container = new Container();
41
+ *
42
+ * // WebSocket driver (default, recommended for real-time)
43
+ * await registerEventsProviders(container, {
44
+ * driver: 'ws',
45
+ * path: '/ws',
46
+ * redis: process.env.REDIS_URL, // For horizontal scaling
47
+ * });
48
+ *
49
+ * // SSE driver (fallback for environments without WebSocket)
50
+ * await registerEventsProviders(container, {
51
+ * driver: 'sse',
52
+ * path: '/events',
53
+ * });
54
+ *
55
+ * const events = container.resolve(EVENTS_MANAGER);
56
+ * await events.broadcast('orders.123', 'order.shipped', { trackingNumber: 'TRACK123' });
57
+ * ```
58
+ */
59
+ export declare function registerEventsProviders(container: Container, config?: EventsPluginOptions): Promise<void>;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * DI Providers for @veloxts/events
3
+ *
4
+ * Factory provider functions for registering events services with the DI container.
5
+ * These providers allow services to be managed by the container for testability and flexibility.
6
+ *
7
+ * @module events/providers
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { Container } from '@veloxts/core';
12
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
13
+ *
14
+ * const container = new Container();
15
+ * await registerEventsProviders(container, {
16
+ * driver: 'ws',
17
+ * path: '/ws',
18
+ * });
19
+ *
20
+ * const events = container.resolve(EVENTS_MANAGER);
21
+ * await events.broadcast('orders', 'order.created', { id: '123' });
22
+ * ```
23
+ */
24
+ import { createEventsManager } from './manager.js';
25
+ import { EVENTS_CONFIG, EVENTS_DRIVER, EVENTS_MANAGER } from './tokens.js';
26
+ // ============================================================================
27
+ // Bulk Registration Helpers
28
+ // ============================================================================
29
+ /**
30
+ * Registers events providers with a container
31
+ *
32
+ * This handles async initialization of the events manager and registers
33
+ * the resolved instance directly for synchronous resolution.
34
+ *
35
+ * @param container - The DI container to register providers with
36
+ * @param config - Events plugin options (driver, path, etc.)
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { Container } from '@veloxts/core';
41
+ * import { registerEventsProviders, EVENTS_MANAGER } from '@veloxts/events';
42
+ *
43
+ * const container = new Container();
44
+ *
45
+ * // WebSocket driver (default, recommended for real-time)
46
+ * await registerEventsProviders(container, {
47
+ * driver: 'ws',
48
+ * path: '/ws',
49
+ * redis: process.env.REDIS_URL, // For horizontal scaling
50
+ * });
51
+ *
52
+ * // SSE driver (fallback for environments without WebSocket)
53
+ * await registerEventsProviders(container, {
54
+ * driver: 'sse',
55
+ * path: '/events',
56
+ * });
57
+ *
58
+ * const events = container.resolve(EVENTS_MANAGER);
59
+ * await events.broadcast('orders.123', 'order.shipped', { trackingNumber: 'TRACK123' });
60
+ * ```
61
+ */
62
+ export async function registerEventsProviders(container, config = {}) {
63
+ // Register config
64
+ container.register({
65
+ provide: EVENTS_CONFIG,
66
+ useValue: config,
67
+ });
68
+ // Create events manager (async operation)
69
+ const eventsManager = await createEventsManager(config);
70
+ // Register the driver for direct access
71
+ container.register({
72
+ provide: EVENTS_DRIVER,
73
+ useValue: eventsManager.driver,
74
+ });
75
+ // Register the resolved events manager instance directly
76
+ // This allows synchronous resolution from the container
77
+ container.register({
78
+ provide: EVENTS_MANAGER,
79
+ useValue: eventsManager,
80
+ });
81
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * DI Tokens for @veloxts/events
3
+ *
4
+ * Symbol-based tokens for type-safe dependency injection.
5
+ * These tokens allow events services to be registered, resolved, and mocked via the DI container.
6
+ *
7
+ * @module events/tokens
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { Container } from '@veloxts/core';
12
+ * import { EVENTS_MANAGER, registerEventsProviders } from '@veloxts/events';
13
+ *
14
+ * const container = new Container();
15
+ * await registerEventsProviders(container, { driver: 'ws' });
16
+ *
17
+ * const events = container.resolve(EVENTS_MANAGER);
18
+ * await events.broadcast('orders', 'order.created', { id: '123' });
19
+ * ```
20
+ */
21
+ import type { BroadcastDriver, EventsManager, EventsPluginOptions } from './types.js';
22
+ /**
23
+ * Events manager token
24
+ *
25
+ * The main events manager instance for broadcasting events.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const events = container.resolve(EVENTS_MANAGER);
30
+ * await events.broadcast('orders.123', 'order.shipped', { trackingNumber: 'TRACK123' });
31
+ * await events.broadcastToMany(['user.1', 'user.2'], 'notification', { message: 'Hello!' });
32
+ * ```
33
+ */
34
+ export declare const EVENTS_MANAGER: import("@veloxts/core").SymbolToken<EventsManager>;
35
+ /**
36
+ * Broadcast driver token
37
+ *
38
+ * The underlying broadcast driver (WebSocket or SSE).
39
+ * Use EVENTS_MANAGER for high-level operations; use this for direct driver access.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const driver = container.resolve(EVENTS_DRIVER);
44
+ * await driver.broadcast({ channel: 'orders', event: 'created', data: { id: '123' } });
45
+ * ```
46
+ */
47
+ export declare const EVENTS_DRIVER: import("@veloxts/core").SymbolToken<BroadcastDriver>;
48
+ /**
49
+ * Events configuration token
50
+ *
51
+ * Contains events plugin options including driver and driver-specific config.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const config = container.resolve(EVENTS_CONFIG);
56
+ * console.log(config.driver); // 'ws' or 'sse'
57
+ * ```
58
+ */
59
+ export declare const EVENTS_CONFIG: import("@veloxts/core").SymbolToken<EventsPluginOptions>;
package/dist/tokens.js ADDED
@@ -0,0 +1,65 @@
1
+ /**
2
+ * DI Tokens for @veloxts/events
3
+ *
4
+ * Symbol-based tokens for type-safe dependency injection.
5
+ * These tokens allow events services to be registered, resolved, and mocked via the DI container.
6
+ *
7
+ * @module events/tokens
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { Container } from '@veloxts/core';
12
+ * import { EVENTS_MANAGER, registerEventsProviders } from '@veloxts/events';
13
+ *
14
+ * const container = new Container();
15
+ * await registerEventsProviders(container, { driver: 'ws' });
16
+ *
17
+ * const events = container.resolve(EVENTS_MANAGER);
18
+ * await events.broadcast('orders', 'order.created', { id: '123' });
19
+ * ```
20
+ */
21
+ import { token } from '@veloxts/core';
22
+ // ============================================================================
23
+ // Core Events Tokens
24
+ // ============================================================================
25
+ /**
26
+ * Events manager token
27
+ *
28
+ * The main events manager instance for broadcasting events.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const events = container.resolve(EVENTS_MANAGER);
33
+ * await events.broadcast('orders.123', 'order.shipped', { trackingNumber: 'TRACK123' });
34
+ * await events.broadcastToMany(['user.1', 'user.2'], 'notification', { message: 'Hello!' });
35
+ * ```
36
+ */
37
+ export const EVENTS_MANAGER = token.symbol('EVENTS_MANAGER');
38
+ /**
39
+ * Broadcast driver token
40
+ *
41
+ * The underlying broadcast driver (WebSocket or SSE).
42
+ * Use EVENTS_MANAGER for high-level operations; use this for direct driver access.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const driver = container.resolve(EVENTS_DRIVER);
47
+ * await driver.broadcast({ channel: 'orders', event: 'created', data: { id: '123' } });
48
+ * ```
49
+ */
50
+ export const EVENTS_DRIVER = token.symbol('EVENTS_DRIVER');
51
+ // ============================================================================
52
+ // Configuration Tokens
53
+ // ============================================================================
54
+ /**
55
+ * Events configuration token
56
+ *
57
+ * Contains events plugin options including driver and driver-specific config.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const config = container.resolve(EVENTS_CONFIG);
62
+ * console.log(config.driver); // 'ws' or 'sse'
63
+ * ```
64
+ */
65
+ export const EVENTS_CONFIG = token.symbol('EVENTS_CONFIG');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veloxts/events",
3
- "version": "0.6.55",
3
+ "version": "0.6.57",
4
4
  "description": "Real-time event broadcasting for VeloxTS framework",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "superjson": "2.2.2",
31
31
  "ws": "8.18.2",
32
32
  "zod": "3.24.4",
33
- "@veloxts/core": "0.6.55"
33
+ "@veloxts/core": "0.6.57"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "fastify": "^5.0.0",
@@ -49,7 +49,7 @@
49
49
  "ioredis": "5.6.1",
50
50
  "typescript": "5.8.3",
51
51
  "vitest": "4.0.16",
52
- "@veloxts/testing": "0.6.55"
52
+ "@veloxts/testing": "0.6.57"
53
53
  },
54
54
  "publishConfig": {
55
55
  "access": "public"