{"_id":"@teliagen/events","_rev":"26-3f2507b9bb205a3227d6b06ab0d29dd6","name":"@teliagen/events","dist-tags":{"latest":"0.4.2"},"versions":{"0.4.0":{"name":"@teliagen/events","version":"0.4.0","keywords":["teliagen","events","framework","pubsub"],"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","_id":"@teliagen/events@0.4.0","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"dist":{"shasum":"8033340e9452fe9ece29fe3fef9db7ba0e017798","tarball":"https://registry.npmjs.org/@teliagen/events/-/events-0.4.0.tgz","fileCount":14,"integrity":"sha512-1DZf4WKMVdxLfrHU3OQaFS6/Yy0+NG3XaxIKX7uL4GOLiJNoBFmE2IIDMLmDvbR2qMj7LqFQasBes4YAW3ITCQ==","signatures":[{"sig":"MEUCIQDeoniGejSR2i7N6OQJi3tg39Qj1dWEg9TWFYhOdwms8gIgDblMbvuXAYYMxA3+cc97zjSuJD6yGF4yfxfPkk6meBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30138},"main":"dist/index.js","type":"module","_from":"file:teliagen-events-0.4.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./bus":{"types":"./dist/bus/index.d.ts","import":"./dist/bus/index.js","default":"./dist/bus/index.js","require":"./dist/bus/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","default":"./dist/types/index.js","require":"./dist/types/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc"},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\f80d4f301387a7c274177aa1663cab67\\teliagen-events-0.4.0.tgz","_integrity":"sha512-1DZf4WKMVdxLfrHU3OQaFS6/Yy0+NG3XaxIKX7uL4GOLiJNoBFmE2IIDMLmDvbR2qMj7LqFQasBes4YAW3ITCQ==","repository":{"url":"git+https://github.com/teliagen/teliagen-framework.git","type":"git","directory":"packages/events"},"_npmVersion":"11.6.2","description":"Type-safe event system for Teliagen Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@teliagen/logger":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.2.1","typescript":"^5.7.3","@types/node":"^22.10.7"},"_npmOperationalInternal":{"tmp":"tmp/events_0.4.0_1770857835691_0.7674792462008431","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@teliagen/events","version":"0.4.1","keywords":["teliagen","events","framework","pubsub"],"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","_id":"@teliagen/events@0.4.1","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"dist":{"shasum":"1f396c8260f06c12e20fc320a0ec20ad71f1b12f","tarball":"https://registry.npmjs.org/@teliagen/events/-/events-0.4.1.tgz","fileCount":14,"integrity":"sha512-jruDAG+qvHORwr6x3MkPO0orfJeWPqTmgr6aN/d9B/I2mqnOaayW2JttgI102hDXSfuLloNLBRT1TFYd+w3cNA==","signatures":[{"sig":"MEYCIQDYeakWvKJz9i9+MaHac5Z6BFJwmaqvNU/Y+ZKorQKBEQIhAJVWAdvzLa6Nv1gJeoxgB3pluEVdNnL6tl9EPe+Uf/gy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30138},"main":"dist/index.js","type":"module","_from":"file:teliagen-events-0.4.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./bus":{"types":"./dist/bus/index.d.ts","import":"./dist/bus/index.js","default":"./dist/bus/index.js","require":"./dist/bus/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","default":"./dist/types/index.js","require":"./dist/types/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc"},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\56b3cc1eb60f0bfd20d3f455aa72093b\\teliagen-events-0.4.1.tgz","_integrity":"sha512-jruDAG+qvHORwr6x3MkPO0orfJeWPqTmgr6aN/d9B/I2mqnOaayW2JttgI102hDXSfuLloNLBRT1TFYd+w3cNA==","repository":{"url":"git+https://github.com/teliagen/teliagen-framework.git","type":"git","directory":"packages/events"},"_npmVersion":"11.6.2","description":"Type-safe event system for Teliagen Framework","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@teliagen/logger":"0.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.2.1","typescript":"^5.7.3","@types/node":"^22.10.7"},"_npmOperationalInternal":{"tmp":"tmp/events_0.4.1_1770923595499_0.26383772933554095","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@teliagen/events","version":"0.4.2","private":false,"publishConfig":{"access":"public"},"description":"Type-safe event system for Teliagen Framework","main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","import":"./dist/index.js","require":"./dist/index.js"},"./bus":{"types":"./dist/bus/index.d.ts","default":"./dist/bus/index.js","import":"./dist/bus/index.js","require":"./dist/bus/index.js"},"./types":{"types":"./dist/types/index.d.ts","default":"./dist/types/index.js","import":"./dist/types/index.js","require":"./dist/types/index.js"}},"keywords":["teliagen","events","framework","pubsub"],"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"repository":{"type":"git","url":"git+https://github.com/teliagen/teliagen-framework.git","directory":"packages/events"},"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"license":"Apache-2.0","dependencies":{"@teliagen/logger":"0.4.2"},"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","vitest":"^1.2.1"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run"},"_id":"@teliagen/events@0.4.2","_integrity":"sha512-TP1LegZ5F0/KXltUo5sUgv2rW6+aCvrcOCmrdTa8g1K+z9GHiWHlhV0Zkg7NtplTaO6JEtDSwOIVZEQzQHLQXg==","_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\e7032a06c7b01dfe3a15bd6db880fc76\\teliagen-events-0.4.2.tgz","_from":"file:teliagen-events-0.4.2.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-TP1LegZ5F0/KXltUo5sUgv2rW6+aCvrcOCmrdTa8g1K+z9GHiWHlhV0Zkg7NtplTaO6JEtDSwOIVZEQzQHLQXg==","shasum":"b3415af4b122b12a8e4e008bfce72a1e5597581a","tarball":"https://registry.npmjs.org/@teliagen/events/-/events-0.4.2.tgz","fileCount":14,"unpackedSize":30138,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDevCwWJfHlb8vqC1oE/zNE4vG7GuN0EaI1eofSBKQsYQIgMsozpeup1usgq6gXmjuDP8uZKlCj7lt7FFQIojzntUg="}]},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"directories":{},"maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/events_0.4.2_1770925144921_0.8940491179193684"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T00:57:15.584Z","modified":"2026-02-12T19:39:05.228Z","0.1.0":"2026-01-19T19:17:19.025Z","0.1.1":"2026-01-19T19:55:45.913Z","0.1.2":"2026-01-19T21:14:16.593Z","0.1.3":"2026-01-19T21:27:14.645Z","0.1.4":"2026-01-25T07:46:55.074Z","0.1.5":"2026-01-25T16:04:20.670Z","0.1.6":"2026-01-25T23:49:22.536Z","0.1.7":"2026-01-26T00:07:22.242Z","0.1.8":"2026-01-26T00:10:51.763Z","0.1.9":"2026-01-26T00:14:19.118Z","0.1.10":"2026-01-26T00:18:35.704Z","0.1.11":"2026-01-26T00:39:47.609Z","0.1.12":"2026-01-26T00:52:40.411Z","0.1.13":"2026-01-26T00:56:56.969Z","0.1.15":"2026-01-26T01:17:21.158Z","0.1.16":"2026-01-26T01:21:52.824Z","0.1.17":"2026-01-26T01:42:58.018Z","0.1.18":"2026-01-26T02:16:35.765Z","0.1.19":"2026-01-26T02:25:59.578Z","0.4.0":"2026-02-12T00:57:15.847Z","0.4.1":"2026-02-12T19:13:15.669Z","0.4.2":"2026-02-12T19:39:05.104Z"},"bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","homepage":"https://docs.teliagen.org","keywords":["teliagen","events","framework","pubsub"],"repository":{"type":"git","url":"git+https://github.com/teliagen/teliagen-framework.git","directory":"packages/events"},"description":"Type-safe event system for Teliagen Framework","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"readme":"# @teliagen/events\r\n\r\n> Event system for the Teliagen Framework.\r\n\r\n[![npm version](https://img.shields.io/npm/v/@teliagen/events.svg)](https://www.npmjs.com/package/@teliagen/events)\r\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\r\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\r\n\r\n## Overview\r\n\r\n`@teliagen/events` provides a lightweight, type-safe event bus for decoupled communication:\r\n\r\n- **EventBus** – Global pub/sub event system\r\n- **Typed Events** – Full TypeScript support\r\n- **Async Handlers** – Support for async event handlers\r\n- **Wildcard Patterns** – Listen to event groups\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @teliagen/events\r\n# or\r\npnpm add @teliagen/events\r\n```\r\n\r\n## Quick Start\r\n\r\n```typescript\r\nimport { EventBus } from '@teliagen/events';\r\n\r\n// Subscribe to an event\r\nEventBus.on('user:created', async (data) => {\r\n  console.log('New user created:', data.user.email);\r\n  await sendWelcomeEmail(data.user.email);\r\n});\r\n\r\n// Emit an event\r\nEventBus.emit('user:created', {\r\n  user: { id: '123', email: 'alice@example.com' }\r\n});\r\n```\r\n\r\n## API Reference\r\n\r\n### EventBus\r\n\r\n```typescript\r\n// Subscribe to an event\r\nEventBus.on(event: string, handler: (data: any) => void | Promise<void>): () => void;\r\n\r\n// Subscribe once (auto-unsubscribe after first call)\r\nEventBus.once(event: string, handler: (data: any) => void | Promise<void>): () => void;\r\n\r\n// Unsubscribe\r\nEventBus.off(event: string, handler: Function): void;\r\n\r\n// Emit an event\r\nEventBus.emit(event: string, data?: any): Promise<void>;\r\n\r\n// Clear all handlers for an event\r\nEventBus.clear(event?: string): void;\r\n```\r\n\r\n## Usage Examples\r\n\r\n### Basic Events\r\n\r\n```typescript\r\nimport { EventBus } from '@teliagen/events';\r\n\r\n// Subscribe\r\nconst unsubscribe = EventBus.on('order:created', (data) => {\r\n  console.log('Order created:', data.orderId);\r\n});\r\n\r\n// Emit\r\nawait EventBus.emit('order:created', { orderId: '123', total: 99.99 });\r\n\r\n// Unsubscribe when done\r\nunsubscribe();\r\n```\r\n\r\n### One-Time Subscription\r\n\r\n```typescript\r\nEventBus.once('app:ready', () => {\r\n  console.log('App is ready!');\r\n  initializeServices();\r\n});\r\n\r\n// Handler is automatically removed after first emit\r\n```\r\n\r\n### Async Handlers\r\n\r\n```typescript\r\nEventBus.on('user:registered', async (data) => {\r\n  await sendWelcomeEmail(data.email);\r\n  await createDefaultSettings(data.userId);\r\n  await notifyAdmins(data);\r\n});\r\n\r\n// Emit waits for all handlers to complete\r\nawait EventBus.emit('user:registered', { userId: '123', email: 'test@example.com' });\r\nconsole.log('All handlers completed');\r\n```\r\n\r\n### Error Handling\r\n\r\n```typescript\r\nEventBus.on('payment:processed', async (data) => {\r\n  try {\r\n    await updateOrderStatus(data.orderId, 'paid');\r\n  } catch (error) {\r\n    console.error('Failed to update order:', error);\r\n    // Error is caught, doesn't break other handlers\r\n  }\r\n});\r\n```\r\n\r\n## Event Naming Conventions\r\n\r\nUse namespaced event names:\r\n\r\n```typescript\r\n// Format: domain:action\r\n'user:created'\r\n'user:updated'\r\n'user:deleted'\r\n'order:placed'\r\n'order:shipped'\r\n'payment:processed'\r\n'auth:login'\r\n'auth:logout'\r\n```\r\n\r\n## Framework Events\r\n\r\nTeliagen plugins emit events you can listen to:\r\n\r\n### Auth Plugin\r\n\r\n```typescript\r\nEventBus.on('auth:registered', async ({ user }) => { ... });\r\nEventBus.on('auth:login', async ({ user }) => { ... });\r\nEventBus.on('auth:logout', async ({ userId }) => { ... });\r\nEventBus.on('auth:passwordReset', async ({ user, token }) => { ... });\r\n```\r\n\r\n### Tenant Plugin\r\n\r\n```typescript\r\nEventBus.on('tenant:created', async ({ tenant, owner }) => { ... });\r\nEventBus.on('tenant:memberAdded', async ({ tenantId, userId, role }) => { ... });\r\nEventBus.on('tenant:invitationSent', async ({ invitation }) => { ... });\r\n```\r\n\r\n### RBAC Plugin\r\n\r\n```typescript\r\nEventBus.on('rbac:roleAssigned', async ({ userId, roleId }) => { ... });\r\nEventBus.on('rbac:roleRevoked', async ({ userId, roleId }) => { ... });\r\n```\r\n\r\n### Storage Plugin\r\n\r\n```typescript\r\nEventBus.on('storage:uploaded', async ({ disk, path, size }) => { ... });\r\nEventBus.on('storage:deleted', async ({ disk, path }) => { ... });\r\n```\r\n\r\n### Mail Plugin\r\n\r\n```typescript\r\nEventBus.on('mail:sent', async ({ to, subject }) => { ... });\r\nEventBus.on('mail:failed', async ({ to, error }) => { ... });\r\n```\r\n\r\n## Usage in Actions\r\n\r\n```typescript\r\nimport { Action, ActionProvider, Input } from '@teliagen/commons';\r\nimport { EventBus } from '@teliagen/events';\r\n\r\n@ActionProvider('orders', 'OrderActions')\r\nclass OrderActions {\r\n  @Action('createOrder')\r\n  async createOrder(@Input() input: CreateOrderInput) {\r\n    const order = await Order.create(input);\r\n    \r\n    // Emit event for other systems to react\r\n    await EventBus.emit('order:created', {\r\n      orderId: order.id,\r\n      userId: input.userId,\r\n      total: order.total\r\n    });\r\n    \r\n    return order;\r\n  }\r\n}\r\n```\r\n\r\n## Type-Safe Events\r\n\r\n```typescript\r\n// Define event types\r\ninterface AppEvents {\r\n  'user:created': { user: User };\r\n  'order:placed': { orderId: string; total: number };\r\n  'notification:send': { userId: string; message: string };\r\n}\r\n\r\n// Create typed event bus\r\nimport { createTypedEventBus } from '@teliagen/events';\r\n\r\nconst events = createTypedEventBus<AppEvents>();\r\n\r\n// Now fully typed!\r\nevents.on('user:created', (data) => {\r\n  console.log(data.user.email);  // TypeScript knows about user\r\n});\r\n\r\nevents.emit('order:placed', { \r\n  orderId: '123', \r\n  total: 99.99 \r\n});\r\n```\r\n\r\n## Requirements\r\n\r\n- **Node.js** >= 18.0.0\r\n- **TypeScript** >= 5.0.0 (for typed events)\r\n\r\n## Documentation\r\n\r\nFor full documentation, visit [docs.teliagen.org](https://docs.teliagen.org).\r\n\r\n## License\r\n\r\nApache-2.0\r\n\r\n---\r\n\r\n<p align=\"center\">\r\n  <strong>Part of <a href=\"https://github.com/teliagen/teliagen-framework\">Teliagen</a></strong>\r\n</p>\r\n","readmeFilename":"README.md"}