@bernierllc/chat-suite 1.0.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.
- package/.eslintrc.js +26 -0
- package/README.md +542 -0
- package/__tests__/integration/ChatSuite.test.ts +235 -0
- package/__tests__/unit/ConfigManager.test.ts +122 -0
- package/__tests__/unit/MessageOrchestrator.test.ts +223 -0
- package/__tests__/unit/UserManager.test.ts +208 -0
- package/dist/ChatSuite.d.ts +76 -0
- package/dist/ChatSuite.d.ts.map +1 -0
- package/dist/ChatSuite.js +273 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/neverhub/discovery.d.ts +40 -0
- package/dist/neverhub/discovery.d.ts.map +1 -0
- package/dist/neverhub/discovery.js +106 -0
- package/dist/neverhub/event-handlers.d.ts +38 -0
- package/dist/neverhub/event-handlers.d.ts.map +1 -0
- package/dist/neverhub/event-handlers.js +125 -0
- package/dist/neverhub/index.d.ts +4 -0
- package/dist/neverhub/index.d.ts.map +1 -0
- package/dist/neverhub/index.js +26 -0
- package/dist/neverhub/service-registration.d.ts +29 -0
- package/dist/neverhub/service-registration.d.ts.map +1 -0
- package/dist/neverhub/service-registration.js +66 -0
- package/dist/providers/ChatKitProvider.d.ts +53 -0
- package/dist/providers/ChatKitProvider.d.ts.map +1 -0
- package/dist/providers/ChatKitProvider.js +167 -0
- package/dist/providers/ExternalProviders.d.ts +101 -0
- package/dist/providers/ExternalProviders.d.ts.map +1 -0
- package/dist/providers/ExternalProviders.js +153 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +25 -0
- package/dist/services/ConfigManager.d.ts +50 -0
- package/dist/services/ConfigManager.d.ts.map +1 -0
- package/dist/services/ConfigManager.js +95 -0
- package/dist/services/HealthMonitor.d.ts +58 -0
- package/dist/services/HealthMonitor.d.ts.map +1 -0
- package/dist/services/HealthMonitor.js +148 -0
- package/dist/services/MessageOrchestrator.d.ts +63 -0
- package/dist/services/MessageOrchestrator.d.ts.map +1 -0
- package/dist/services/MessageOrchestrator.js +212 -0
- package/dist/services/ProviderManager.d.ts +83 -0
- package/dist/services/ProviderManager.d.ts.map +1 -0
- package/dist/services/ProviderManager.js +204 -0
- package/dist/services/UserManager.d.ts +61 -0
- package/dist/services/UserManager.d.ts.map +1 -0
- package/dist/services/UserManager.js +141 -0
- package/dist/services/index.d.ts +6 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +28 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/message-types.d.ts +80 -0
- package/dist/types/message-types.d.ts.map +1 -0
- package/dist/types/message-types.js +32 -0
- package/dist/types/provider-types.d.ts +96 -0
- package/dist/types/provider-types.d.ts.map +1 -0
- package/dist/types/provider-types.js +9 -0
- package/dist/types/suite-types.d.ts +101 -0
- package/dist/types/suite-types.d.ts.map +1 -0
- package/dist/types/suite-types.js +9 -0
- package/dist/utils/config-inheritance.d.ts +24 -0
- package/dist/utils/config-inheritance.d.ts.map +1 -0
- package/dist/utils/config-inheritance.js +167 -0
- package/dist/utils/error-handling.d.ts +37 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +102 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +27 -0
- package/dist/utils/message-bridge.d.ts +68 -0
- package/dist/utils/message-bridge.d.ts.map +1 -0
- package/dist/utils/message-bridge.js +126 -0
- package/dist/utils/user-mapping.d.ts +63 -0
- package/dist/utils/user-mapping.d.ts.map +1 -0
- package/dist/utils/user-mapping.js +110 -0
- package/jest.config.cjs +30 -0
- package/package.json +67 -0
- package/src/ChatSuite.ts +347 -0
- package/src/index.ts +25 -0
- package/src/neverhub/discovery.ts +137 -0
- package/src/neverhub/event-handlers.ts +141 -0
- package/src/neverhub/index.ts +11 -0
- package/src/neverhub/service-registration.ts +89 -0
- package/src/providers/ChatKitProvider.ts +193 -0
- package/src/providers/ExternalProviders.ts +171 -0
- package/src/providers/index.ts +10 -0
- package/src/services/ConfigManager.ts +112 -0
- package/src/services/HealthMonitor.ts +169 -0
- package/src/services/MessageOrchestrator.ts +271 -0
- package/src/services/ProviderManager.ts +247 -0
- package/src/services/UserManager.ts +176 -0
- package/src/services/index.ts +13 -0
- package/src/types/index.ts +11 -0
- package/src/types/message-types.ts +94 -0
- package/src/types/provider-types.ts +116 -0
- package/src/types/suite-types.ts +117 -0
- package/src/utils/config-inheritance.ts +189 -0
- package/src/utils/error-handling.ts +114 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/message-bridge.ts +164 -0
- package/src/utils/user-mapping.ts +132 -0
- package/tsconfig.json +31 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
parser: '@typescript-eslint/parser',
|
|
11
|
+
extends: [
|
|
12
|
+
'eslint:recommended',
|
|
13
|
+
'plugin:@typescript-eslint/recommended'
|
|
14
|
+
],
|
|
15
|
+
parserOptions: {
|
|
16
|
+
ecmaVersion: 2020,
|
|
17
|
+
sourceType: 'module',
|
|
18
|
+
project: './tsconfig.json'
|
|
19
|
+
},
|
|
20
|
+
rules: {
|
|
21
|
+
'@typescript-eslint/explicit-module-boundary-types': 'error',
|
|
22
|
+
'@typescript-eslint/no-explicit-any': 'error',
|
|
23
|
+
'@typescript-eslint/no-unused-vars': 'error',
|
|
24
|
+
'no-console': 'off'
|
|
25
|
+
}
|
|
26
|
+
};
|
package/README.md
ADDED
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
# @bernierllc/chat-suite
|
|
2
|
+
|
|
3
|
+
Comprehensive chat orchestration suite with AI-powered routing and multi-provider support.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @bernierllc/chat-suite
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The Chat Suite provides a unified interface for orchestrating multiple chat providers (ChatKit, Slack, Discord, Teams) with AI-powered routing, analytics, and NeverHub integration. It handles cross-platform message bridging, user management, health monitoring, and intelligent message routing.
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- **Multi-Provider Orchestration** - Unified interface for multiple chat platforms
|
|
18
|
+
- **AI-Powered Routing** - Intelligent message routing based on intent analysis
|
|
19
|
+
- **Cross-Platform Bridging** - Seamless message flow between platforms
|
|
20
|
+
- **User Management** - Unified user identity across all platforms
|
|
21
|
+
- **Health Monitoring** - Real-time health status of all providers
|
|
22
|
+
- **NeverHub Integration** - Service discovery and event orchestration
|
|
23
|
+
- **Analytics Integration** - Comprehensive usage metrics and insights
|
|
24
|
+
- **Graceful Degradation** - Works with minimal configuration
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
### Minimal Configuration (ChatKit Only)
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { ChatSuite } from '@bernierllc/chat-suite';
|
|
32
|
+
|
|
33
|
+
const chatSuite = new ChatSuite({
|
|
34
|
+
providers: {
|
|
35
|
+
chatkit: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
priority: 1,
|
|
38
|
+
config: {
|
|
39
|
+
serviceName: 'chatkit-adapter'
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
await chatSuite.initialize();
|
|
46
|
+
|
|
47
|
+
// Send a message
|
|
48
|
+
const result = await chatSuite.sendMessage('chatkit', {
|
|
49
|
+
content: 'Hello from the chat suite!',
|
|
50
|
+
userId: 'user123'
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
console.log('Message sent:', result.data?.messageId);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Full Configuration (Multiple Providers)
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { ChatSuite } from '@bernierllc/chat-suite';
|
|
60
|
+
|
|
61
|
+
const chatSuite = new ChatSuite({
|
|
62
|
+
enabled: true,
|
|
63
|
+
|
|
64
|
+
providers: {
|
|
65
|
+
chatkit: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
priority: 1,
|
|
68
|
+
config: {
|
|
69
|
+
serviceName: 'chatkit-adapter',
|
|
70
|
+
features: ['streaming', 'attachments', 'threads']
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
slack: {
|
|
74
|
+
enabled: true,
|
|
75
|
+
priority: 2,
|
|
76
|
+
config: {
|
|
77
|
+
serviceName: 'chat-integration-slack',
|
|
78
|
+
channels: ['#general', '#dev']
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
aiRouting: {
|
|
84
|
+
enabled: true,
|
|
85
|
+
serviceName: 'chat-ai-router',
|
|
86
|
+
fallbackToHuman: true,
|
|
87
|
+
intentThreshold: 0.8
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
analytics: {
|
|
91
|
+
enabled: true,
|
|
92
|
+
serviceName: 'chat-analytics',
|
|
93
|
+
metricsInterval: 60000
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
neverhub: {
|
|
97
|
+
enabled: true,
|
|
98
|
+
serviceName: 'chat-suite',
|
|
99
|
+
capabilities: [
|
|
100
|
+
{ type: 'chat', name: 'multi-provider-chat', version: '1.0.0' },
|
|
101
|
+
{ type: 'orchestration', name: 'chat-orchestration', version: '1.0.0' }
|
|
102
|
+
],
|
|
103
|
+
dependencies: ['chat-provider-*', 'chat-ai-router', 'chat-analytics']
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
await chatSuite.initialize();
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Core Concepts
|
|
111
|
+
|
|
112
|
+
### Providers
|
|
113
|
+
|
|
114
|
+
Providers are chat platform adapters that implement a common interface:
|
|
115
|
+
|
|
116
|
+
- **ChatKit** (Required) - Primary chat provider using `@bernierllc/chatkit-adapter`
|
|
117
|
+
- **Slack** (Optional) - Requires `@bernierllc/chat-integration-slack`
|
|
118
|
+
- **Discord** (Optional) - Requires `@bernierllc/chat-integration-discord`
|
|
119
|
+
- **Teams** (Optional) - Requires `@bernierllc/chat-integration-teams`
|
|
120
|
+
|
|
121
|
+
### Priority System
|
|
122
|
+
|
|
123
|
+
Providers are assigned priorities (1 = highest). Messages are routed to the highest priority available provider unless specified otherwise.
|
|
124
|
+
|
|
125
|
+
### Message Orchestration
|
|
126
|
+
|
|
127
|
+
The suite coordinates messages across providers, handling:
|
|
128
|
+
- Message queueing and delivery
|
|
129
|
+
- Cross-platform bridging
|
|
130
|
+
- Retry logic with exponential backoff
|
|
131
|
+
- Error handling and recovery
|
|
132
|
+
|
|
133
|
+
## API Reference
|
|
134
|
+
|
|
135
|
+
### ChatSuite
|
|
136
|
+
|
|
137
|
+
Main orchestration class.
|
|
138
|
+
|
|
139
|
+
#### `constructor(config?: Partial<ChatSuiteConfig>)`
|
|
140
|
+
|
|
141
|
+
Create a new chat suite instance.
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
const suite = new ChatSuite({
|
|
145
|
+
providers: {
|
|
146
|
+
chatkit: { enabled: true, priority: 1, config: {} }
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### `async initialize(): Promise<SuiteInitResult>`
|
|
152
|
+
|
|
153
|
+
Initialize the chat suite and all enabled providers.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
const result = await suite.initialize();
|
|
157
|
+
console.log('Initialized providers:', result.providersInitialized);
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### `async sendMessage(providerType, message): Promise<SuiteResult<ProviderMessageResult>>`
|
|
161
|
+
|
|
162
|
+
Send a message through a specific provider.
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
const result = await suite.sendMessage('chatkit', {
|
|
166
|
+
content: 'Hello!',
|
|
167
|
+
userId: 'user123',
|
|
168
|
+
channelId: 'channel456'
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### `async broadcastMessage(config): Promise<SuiteResult<ProviderMessageResult[]>>`
|
|
173
|
+
|
|
174
|
+
Broadcast a message to multiple providers.
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
const result = await suite.broadcastMessage({
|
|
178
|
+
content: 'Important announcement!',
|
|
179
|
+
platforms: ['chatkit', 'slack'],
|
|
180
|
+
channels: ['#announcements'],
|
|
181
|
+
priority: MessagePriority.HIGH
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### `async getHealth(): Promise<ChatSuiteHealth>`
|
|
186
|
+
|
|
187
|
+
Get health status of all providers.
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
const health = await suite.getHealth();
|
|
191
|
+
console.log('Suite status:', health.status);
|
|
192
|
+
console.log('Provider health:', health.providers);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### `getUserManager(): UserManager`
|
|
196
|
+
|
|
197
|
+
Get the user manager for cross-platform user management.
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
const userManager = suite.getUserManager();
|
|
201
|
+
|
|
202
|
+
userManager.registerUser({
|
|
203
|
+
provider: 'chatkit',
|
|
204
|
+
platformUserId: 'chatkit123',
|
|
205
|
+
displayName: 'John Doe',
|
|
206
|
+
email: 'john@example.com'
|
|
207
|
+
});
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### `getConfigManager(): ConfigManager`
|
|
211
|
+
|
|
212
|
+
Get the configuration manager.
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
const configManager = suite.getConfigManager();
|
|
216
|
+
|
|
217
|
+
configManager.updateConfig({
|
|
218
|
+
analytics: { enabled: false }
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### `async shutdown(): Promise<void>`
|
|
223
|
+
|
|
224
|
+
Shutdown the chat suite and all providers.
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
await suite.shutdown();
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### UserManager
|
|
231
|
+
|
|
232
|
+
Cross-platform user identity management.
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
const userManager = suite.getUserManager();
|
|
236
|
+
|
|
237
|
+
// Register a user
|
|
238
|
+
const result = userManager.registerUser({
|
|
239
|
+
provider: 'chatkit',
|
|
240
|
+
platformUserId: 'chatkit123',
|
|
241
|
+
displayName: 'Alice',
|
|
242
|
+
email: 'alice@example.com'
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
const unifiedId = result.data?.unifiedId;
|
|
246
|
+
|
|
247
|
+
// Link another platform
|
|
248
|
+
userManager.linkPlatform(unifiedId!, 'slack', 'slack456');
|
|
249
|
+
|
|
250
|
+
// Get unified ID from platform ID
|
|
251
|
+
const id = userManager.getUnifiedId('chatkit', 'chatkit123');
|
|
252
|
+
|
|
253
|
+
// Search users
|
|
254
|
+
const users = userManager.searchUsers('Alice');
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Usage Examples
|
|
258
|
+
|
|
259
|
+
### Basic Chat Operations
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
import { ChatSuite, MessagePriority } from '@bernierllc/chat-suite';
|
|
263
|
+
|
|
264
|
+
const suite = new ChatSuite();
|
|
265
|
+
await suite.initialize();
|
|
266
|
+
|
|
267
|
+
// Send a simple message
|
|
268
|
+
await suite.sendMessage('chatkit', {
|
|
269
|
+
content: 'Hello, world!',
|
|
270
|
+
userId: 'user123'
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// Send a message with attachments
|
|
274
|
+
await suite.sendMessage('chatkit', {
|
|
275
|
+
content: 'Check out this file',
|
|
276
|
+
userId: 'user123',
|
|
277
|
+
attachments: [{
|
|
278
|
+
filename: 'document.pdf',
|
|
279
|
+
contentType: 'application/pdf',
|
|
280
|
+
data: fileBuffer,
|
|
281
|
+
size: fileBuffer.length
|
|
282
|
+
}]
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// Broadcast to multiple platforms
|
|
286
|
+
await suite.broadcastMessage({
|
|
287
|
+
content: 'System maintenance tonight at 10 PM',
|
|
288
|
+
platforms: ['chatkit', 'slack'],
|
|
289
|
+
priority: MessagePriority.URGENT
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### User Management
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
const userManager = suite.getUserManager();
|
|
297
|
+
|
|
298
|
+
// Register users from different platforms
|
|
299
|
+
userManager.registerUser({
|
|
300
|
+
provider: 'chatkit',
|
|
301
|
+
platformUserId: 'chatkit123',
|
|
302
|
+
displayName: 'Alice',
|
|
303
|
+
email: 'alice@example.com'
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
userManager.registerUser({
|
|
307
|
+
provider: 'slack',
|
|
308
|
+
platformUserId: 'slack456',
|
|
309
|
+
displayName: 'Bob',
|
|
310
|
+
email: 'bob@example.com'
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// Link platforms for the same user
|
|
314
|
+
const aliceId = userManager.getUnifiedId('chatkit', 'chatkit123');
|
|
315
|
+
userManager.linkPlatform(aliceId!, 'slack', 'slackAlice');
|
|
316
|
+
|
|
317
|
+
// Search for users
|
|
318
|
+
const results = userManager.searchUsers('alice@example.com');
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Health Monitoring
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
// Get overall health
|
|
325
|
+
const health = await suite.getHealth();
|
|
326
|
+
|
|
327
|
+
console.log('Suite Status:', health.status);
|
|
328
|
+
console.log('ChatKit Health:', health.providers.chatkit);
|
|
329
|
+
|
|
330
|
+
// Check specific provider
|
|
331
|
+
const providerManager = suite.getProviderManager();
|
|
332
|
+
const chatkit = providerManager.getProvider('chatkit');
|
|
333
|
+
|
|
334
|
+
if (chatkit) {
|
|
335
|
+
const providerHealth = await chatkit.getHealth();
|
|
336
|
+
console.log('ChatKit Latency:', providerHealth.latency);
|
|
337
|
+
console.log('Error Count:', providerHealth.errorCount);
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Configuration Management
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
const configManager = suite.getConfigManager();
|
|
345
|
+
|
|
346
|
+
// Update configuration
|
|
347
|
+
configManager.updateConfig({
|
|
348
|
+
analytics: { enabled: false },
|
|
349
|
+
aiRouting: {
|
|
350
|
+
enabled: true,
|
|
351
|
+
intentThreshold: 0.9
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
// Get current config
|
|
356
|
+
const config = configManager.getConfig();
|
|
357
|
+
|
|
358
|
+
// Export configuration
|
|
359
|
+
const json = configManager.toJSON();
|
|
360
|
+
|
|
361
|
+
// Load configuration
|
|
362
|
+
configManager.fromJSON(json);
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## External Provider Integration
|
|
366
|
+
|
|
367
|
+
The suite supports optional external providers. To enable them:
|
|
368
|
+
|
|
369
|
+
### Slack Integration
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
npm install @bernierllc/chat-integration-slack
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
import { ChatSuite } from '@bernierllc/chat-suite';
|
|
377
|
+
// When available: import { SlackProvider } from '@bernierllc/chat-integration-slack';
|
|
378
|
+
|
|
379
|
+
const suite = new ChatSuite({
|
|
380
|
+
providers: {
|
|
381
|
+
chatkit: { enabled: true, priority: 1, config: {} },
|
|
382
|
+
slack: {
|
|
383
|
+
enabled: true,
|
|
384
|
+
priority: 2,
|
|
385
|
+
config: {
|
|
386
|
+
token: process.env.SLACK_BOT_TOKEN,
|
|
387
|
+
channels: ['#general', '#dev']
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Discord Integration
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
npm install @bernierllc/chat-integration-discord
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
```typescript
|
|
401
|
+
// When available: import { DiscordProvider } from '@bernierllc/chat-integration-discord';
|
|
402
|
+
|
|
403
|
+
const suite = new ChatSuite({
|
|
404
|
+
providers: {
|
|
405
|
+
chatkit: { enabled: true, priority: 1, config: {} },
|
|
406
|
+
discord: {
|
|
407
|
+
enabled: true,
|
|
408
|
+
priority: 3,
|
|
409
|
+
config: {
|
|
410
|
+
token: process.env.DISCORD_BOT_TOKEN,
|
|
411
|
+
guilds: ['123456789012345678']
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Teams Integration
|
|
419
|
+
|
|
420
|
+
```bash
|
|
421
|
+
npm install @bernierllc/chat-integration-teams
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
```typescript
|
|
425
|
+
// When available: import { TeamsProvider } from '@bernierllc/chat-integration-teams';
|
|
426
|
+
|
|
427
|
+
const suite = new ChatSuite({
|
|
428
|
+
providers: {
|
|
429
|
+
chatkit: { enabled: true, priority: 1, config: {} },
|
|
430
|
+
teams: {
|
|
431
|
+
enabled: true,
|
|
432
|
+
priority: 4,
|
|
433
|
+
config: {
|
|
434
|
+
tenantId: process.env.TEAMS_TENANT_ID,
|
|
435
|
+
clientId: process.env.TEAMS_CLIENT_ID,
|
|
436
|
+
clientSecret: process.env.TEAMS_CLIENT_SECRET
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
## NeverHub Integration
|
|
444
|
+
|
|
445
|
+
The suite integrates with NeverHub for service discovery and event orchestration:
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
const suite = new ChatSuite({
|
|
449
|
+
neverhub: {
|
|
450
|
+
enabled: true,
|
|
451
|
+
serviceName: 'chat-suite',
|
|
452
|
+
capabilities: [
|
|
453
|
+
{ type: 'chat', name: 'multi-provider-chat', version: '1.0.0' },
|
|
454
|
+
{ type: 'orchestration', name: 'chat-orchestration', version: '1.0.0' }
|
|
455
|
+
],
|
|
456
|
+
dependencies: ['chat-provider-*', 'chat-ai-router', 'chat-analytics']
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
await suite.initialize();
|
|
461
|
+
|
|
462
|
+
// NeverHub will automatically:
|
|
463
|
+
// - Register the chat suite as a service
|
|
464
|
+
// - Discover available chat providers
|
|
465
|
+
// - Publish message events
|
|
466
|
+
// - Subscribe to relevant events
|
|
467
|
+
// - Report health status
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Integration Status
|
|
471
|
+
|
|
472
|
+
- **Logger**: Not applicable (suite-level component, uses console logging)
|
|
473
|
+
- **Docs-Suite**: Ready - All types and APIs documented with JSDoc
|
|
474
|
+
- **NeverHub**: Integrated - Full service discovery, event publishing, and health monitoring
|
|
475
|
+
|
|
476
|
+
## TypeScript Support
|
|
477
|
+
|
|
478
|
+
Full TypeScript support with strict type checking:
|
|
479
|
+
|
|
480
|
+
```typescript
|
|
481
|
+
import {
|
|
482
|
+
ChatSuite,
|
|
483
|
+
ChatSuiteConfig,
|
|
484
|
+
MessagePriority,
|
|
485
|
+
ProviderType,
|
|
486
|
+
SuiteResult
|
|
487
|
+
} from '@bernierllc/chat-suite';
|
|
488
|
+
|
|
489
|
+
const config: ChatSuiteConfig = {
|
|
490
|
+
enabled: true,
|
|
491
|
+
providers: {
|
|
492
|
+
chatkit: {
|
|
493
|
+
enabled: true,
|
|
494
|
+
priority: 1,
|
|
495
|
+
config: {}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
const suite = new ChatSuite(config);
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
## Error Handling
|
|
504
|
+
|
|
505
|
+
All operations return structured results:
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
const result = await suite.sendMessage('chatkit', {
|
|
509
|
+
content: 'Test message'
|
|
510
|
+
});
|
|
511
|
+
|
|
512
|
+
if (!result.success) {
|
|
513
|
+
console.error('Message failed:', result.error);
|
|
514
|
+
} else {
|
|
515
|
+
console.log('Message sent:', result.data?.messageId);
|
|
516
|
+
}
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
## Dependencies
|
|
520
|
+
|
|
521
|
+
### Required
|
|
522
|
+
- `@bernierllc/neverhub-adapter` - NeverHub integration
|
|
523
|
+
- `@bernierllc/chatkit-adapter` - ChatKit provider
|
|
524
|
+
- `@bernierllc/chat-ai-router` - AI routing (optional feature)
|
|
525
|
+
- `@bernierllc/chat-analytics` - Analytics (optional feature)
|
|
526
|
+
- `zod` - Configuration validation
|
|
527
|
+
|
|
528
|
+
### Optional (Peer Dependencies)
|
|
529
|
+
- `@bernierllc/chat-integration-slack` - Slack integration
|
|
530
|
+
- `@bernierllc/chat-integration-discord` - Discord integration
|
|
531
|
+
- `@bernierllc/chat-integration-teams` - Teams integration
|
|
532
|
+
|
|
533
|
+
## License
|
|
534
|
+
|
|
535
|
+
Copyright (c) 2025 Bernier LLC. All rights reserved.
|
|
536
|
+
|
|
537
|
+
## See Also
|
|
538
|
+
|
|
539
|
+
- [@bernierllc/chatkit-adapter](../chatkit-adapter) - ChatKit provider implementation
|
|
540
|
+
- [@bernierllc/chat-ai-router](../chat-ai-router) - AI-powered message routing
|
|
541
|
+
- [@bernierllc/chat-analytics](../chat-analytics) - Chat analytics and insights
|
|
542
|
+
- [@bernierllc/neverhub-adapter](../../core/neverhub-adapter) - NeverHub integration
|