@veloxts/events 0.6.56 → 0.6.58
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/README.md +2 -25
- package/dist/index.d.ts +19 -0
- package/dist/index.js +24 -0
- package/dist/providers.d.ts +59 -0
- package/dist/providers.js +81 -0
- package/dist/tokens.d.ts +59 -0
- package/dist/tokens.js +65 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,31 +1,8 @@
|
|
|
1
1
|
# @veloxts/events
|
|
2
2
|
|
|
3
|
-
> **Early Preview** - APIs may change
|
|
3
|
+
> **Early Preview (v0.6.x)** - APIs are stabilizing but may still change. Use with caution in production.
|
|
4
4
|
|
|
5
|
-
Real-time event broadcasting
|
|
6
|
-
|
|
7
|
-
## Installation
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install @veloxts/events
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Quick Start
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
import { eventsPlugin } from '@veloxts/events';
|
|
17
|
-
|
|
18
|
-
app.use(eventsPlugin({ driver: 'ws', path: '/ws' }));
|
|
19
|
-
|
|
20
|
-
// Broadcast an event
|
|
21
|
-
await ctx.broadcast({
|
|
22
|
-
channel: 'orders.123',
|
|
23
|
-
event: 'order.shipped',
|
|
24
|
-
data: { trackingNumber: 'TRACK123' },
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
See [GUIDE.md](./GUIDE.md) for detailed documentation.
|
|
5
|
+
Real-time event broadcasting for VeloxTS Framework - provides WebSocket and SSE drivers with channel authorization and optional Redis pub/sub for horizontal scaling. Learn more at [@veloxts/velox](https://www.npmjs.com/package/@veloxts/velox).
|
|
29
6
|
|
|
30
7
|
## License
|
|
31
8
|
|
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
|
+
}
|
package/dist/tokens.d.ts
ADDED
|
@@ -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.
|
|
3
|
+
"version": "0.6.58",
|
|
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.
|
|
33
|
+
"@veloxts/core": "0.6.58"
|
|
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.
|
|
52
|
+
"@veloxts/testing": "0.6.58"
|
|
53
53
|
},
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"access": "public"
|