@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.
Files changed (105) hide show
  1. package/.eslintrc.js +26 -0
  2. package/README.md +542 -0
  3. package/__tests__/integration/ChatSuite.test.ts +235 -0
  4. package/__tests__/unit/ConfigManager.test.ts +122 -0
  5. package/__tests__/unit/MessageOrchestrator.test.ts +223 -0
  6. package/__tests__/unit/UserManager.test.ts +208 -0
  7. package/dist/ChatSuite.d.ts +76 -0
  8. package/dist/ChatSuite.d.ts.map +1 -0
  9. package/dist/ChatSuite.js +273 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +37 -0
  13. package/dist/neverhub/discovery.d.ts +40 -0
  14. package/dist/neverhub/discovery.d.ts.map +1 -0
  15. package/dist/neverhub/discovery.js +106 -0
  16. package/dist/neverhub/event-handlers.d.ts +38 -0
  17. package/dist/neverhub/event-handlers.d.ts.map +1 -0
  18. package/dist/neverhub/event-handlers.js +125 -0
  19. package/dist/neverhub/index.d.ts +4 -0
  20. package/dist/neverhub/index.d.ts.map +1 -0
  21. package/dist/neverhub/index.js +26 -0
  22. package/dist/neverhub/service-registration.d.ts +29 -0
  23. package/dist/neverhub/service-registration.d.ts.map +1 -0
  24. package/dist/neverhub/service-registration.js +66 -0
  25. package/dist/providers/ChatKitProvider.d.ts +53 -0
  26. package/dist/providers/ChatKitProvider.d.ts.map +1 -0
  27. package/dist/providers/ChatKitProvider.js +167 -0
  28. package/dist/providers/ExternalProviders.d.ts +101 -0
  29. package/dist/providers/ExternalProviders.d.ts.map +1 -0
  30. package/dist/providers/ExternalProviders.js +153 -0
  31. package/dist/providers/index.d.ts +3 -0
  32. package/dist/providers/index.d.ts.map +1 -0
  33. package/dist/providers/index.js +25 -0
  34. package/dist/services/ConfigManager.d.ts +50 -0
  35. package/dist/services/ConfigManager.d.ts.map +1 -0
  36. package/dist/services/ConfigManager.js +95 -0
  37. package/dist/services/HealthMonitor.d.ts +58 -0
  38. package/dist/services/HealthMonitor.d.ts.map +1 -0
  39. package/dist/services/HealthMonitor.js +148 -0
  40. package/dist/services/MessageOrchestrator.d.ts +63 -0
  41. package/dist/services/MessageOrchestrator.d.ts.map +1 -0
  42. package/dist/services/MessageOrchestrator.js +212 -0
  43. package/dist/services/ProviderManager.d.ts +83 -0
  44. package/dist/services/ProviderManager.d.ts.map +1 -0
  45. package/dist/services/ProviderManager.js +204 -0
  46. package/dist/services/UserManager.d.ts +61 -0
  47. package/dist/services/UserManager.d.ts.map +1 -0
  48. package/dist/services/UserManager.js +141 -0
  49. package/dist/services/index.d.ts +6 -0
  50. package/dist/services/index.d.ts.map +1 -0
  51. package/dist/services/index.js +28 -0
  52. package/dist/types/index.d.ts +4 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/index.js +26 -0
  55. package/dist/types/message-types.d.ts +80 -0
  56. package/dist/types/message-types.d.ts.map +1 -0
  57. package/dist/types/message-types.js +32 -0
  58. package/dist/types/provider-types.d.ts +96 -0
  59. package/dist/types/provider-types.d.ts.map +1 -0
  60. package/dist/types/provider-types.js +9 -0
  61. package/dist/types/suite-types.d.ts +101 -0
  62. package/dist/types/suite-types.d.ts.map +1 -0
  63. package/dist/types/suite-types.js +9 -0
  64. package/dist/utils/config-inheritance.d.ts +24 -0
  65. package/dist/utils/config-inheritance.d.ts.map +1 -0
  66. package/dist/utils/config-inheritance.js +167 -0
  67. package/dist/utils/error-handling.d.ts +37 -0
  68. package/dist/utils/error-handling.d.ts.map +1 -0
  69. package/dist/utils/error-handling.js +102 -0
  70. package/dist/utils/index.d.ts +5 -0
  71. package/dist/utils/index.d.ts.map +1 -0
  72. package/dist/utils/index.js +27 -0
  73. package/dist/utils/message-bridge.d.ts +68 -0
  74. package/dist/utils/message-bridge.d.ts.map +1 -0
  75. package/dist/utils/message-bridge.js +126 -0
  76. package/dist/utils/user-mapping.d.ts +63 -0
  77. package/dist/utils/user-mapping.d.ts.map +1 -0
  78. package/dist/utils/user-mapping.js +110 -0
  79. package/jest.config.cjs +30 -0
  80. package/package.json +67 -0
  81. package/src/ChatSuite.ts +347 -0
  82. package/src/index.ts +25 -0
  83. package/src/neverhub/discovery.ts +137 -0
  84. package/src/neverhub/event-handlers.ts +141 -0
  85. package/src/neverhub/index.ts +11 -0
  86. package/src/neverhub/service-registration.ts +89 -0
  87. package/src/providers/ChatKitProvider.ts +193 -0
  88. package/src/providers/ExternalProviders.ts +171 -0
  89. package/src/providers/index.ts +10 -0
  90. package/src/services/ConfigManager.ts +112 -0
  91. package/src/services/HealthMonitor.ts +169 -0
  92. package/src/services/MessageOrchestrator.ts +271 -0
  93. package/src/services/ProviderManager.ts +247 -0
  94. package/src/services/UserManager.ts +176 -0
  95. package/src/services/index.ts +13 -0
  96. package/src/types/index.ts +11 -0
  97. package/src/types/message-types.ts +94 -0
  98. package/src/types/provider-types.ts +116 -0
  99. package/src/types/suite-types.ts +117 -0
  100. package/src/utils/config-inheritance.ts +189 -0
  101. package/src/utils/error-handling.ts +114 -0
  102. package/src/utils/index.ts +12 -0
  103. package/src/utils/message-bridge.ts +164 -0
  104. package/src/utils/user-mapping.ts +132 -0
  105. package/tsconfig.json +31 -0
@@ -0,0 +1,208 @@
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
+ import { UserManager } from '../../src/services/UserManager';
10
+
11
+ describe('UserManager', () => {
12
+ let manager: UserManager;
13
+
14
+ beforeEach(() => {
15
+ manager = new UserManager();
16
+ });
17
+
18
+ describe('user registration', () => {
19
+ it('should register a new user', () => {
20
+ const result = manager.registerUser({
21
+ provider: 'chatkit',
22
+ platformUserId: 'user123',
23
+ displayName: 'Test User',
24
+ email: 'test@example.com'
25
+ });
26
+
27
+ expect(result.success).toBe(true);
28
+ expect(result.data?.displayName).toBe('Test User');
29
+ expect(result.data?.email).toBe('test@example.com');
30
+ });
31
+
32
+ it('should update existing user', () => {
33
+ const first = manager.registerUser({
34
+ provider: 'chatkit',
35
+ platformUserId: 'user123',
36
+ displayName: 'First Name'
37
+ });
38
+
39
+ const updated = manager.registerUser({
40
+ provider: 'chatkit',
41
+ platformUserId: 'user123',
42
+ displayName: 'Updated Name'
43
+ });
44
+
45
+ expect(updated.success).toBe(true);
46
+ expect(updated.data?.displayName).toBe('Updated Name');
47
+ expect(updated.data?.unifiedId).toBe(first.data?.unifiedId);
48
+ });
49
+ });
50
+
51
+ describe('platform linking', () => {
52
+ it('should link platform to existing user', () => {
53
+ const registered = manager.registerUser({
54
+ provider: 'chatkit',
55
+ platformUserId: 'chatkit123'
56
+ });
57
+
58
+ const unifiedId = registered.data!.unifiedId;
59
+
60
+ const linked = manager.linkPlatform(unifiedId, 'slack', 'slack456');
61
+
62
+ expect(linked.success).toBe(true);
63
+ expect(linked.data?.platformIds.has('slack')).toBe(true);
64
+ expect(linked.data?.platformIds.get('slack')).toBe('slack456');
65
+ });
66
+
67
+ it('should fail to link to non-existent user', () => {
68
+ const result = manager.linkPlatform('invalid-id', 'slack', 'slack123');
69
+
70
+ expect(result.success).toBe(false);
71
+ expect(result.error).toBeDefined();
72
+ });
73
+ });
74
+
75
+ describe('user lookup', () => {
76
+ beforeEach(() => {
77
+ manager.registerUser({
78
+ provider: 'chatkit',
79
+ platformUserId: 'chatkit123',
80
+ displayName: 'Test User'
81
+ });
82
+ });
83
+
84
+ it('should get unified ID from platform ID', () => {
85
+ const unifiedId = manager.getUnifiedId('chatkit', 'chatkit123');
86
+
87
+ expect(unifiedId).toBeDefined();
88
+ });
89
+
90
+ it('should get platform ID from unified ID', () => {
91
+ const unifiedId = manager.getUnifiedId('chatkit', 'chatkit123')!;
92
+ const platformId = manager.getPlatformId(unifiedId, 'chatkit');
93
+
94
+ expect(platformId).toBe('chatkit123');
95
+ });
96
+
97
+ it('should get user by unified ID', () => {
98
+ const unifiedId = manager.getUnifiedId('chatkit', 'chatkit123')!;
99
+ const result = manager.getUser(unifiedId);
100
+
101
+ expect(result.success).toBe(true);
102
+ expect(result.data?.displayName).toBe('Test User');
103
+ });
104
+
105
+ it('should return error for non-existent user', () => {
106
+ const result = manager.getUser('invalid-id');
107
+
108
+ expect(result.success).toBe(false);
109
+ expect(result.error).toBeDefined();
110
+ });
111
+ });
112
+
113
+ describe('user search', () => {
114
+ beforeEach(() => {
115
+ manager.registerUser({
116
+ provider: 'chatkit',
117
+ platformUserId: 'user1',
118
+ displayName: 'Alice Smith',
119
+ email: 'alice@example.com'
120
+ });
121
+
122
+ manager.registerUser({
123
+ provider: 'chatkit',
124
+ platformUserId: 'user2',
125
+ displayName: 'Bob Jones',
126
+ email: 'bob@example.com'
127
+ });
128
+ });
129
+
130
+ it('should search users by display name', () => {
131
+ const results = manager.searchUsers('Alice');
132
+
133
+ expect(results).toHaveLength(1);
134
+ expect(results[0].displayName).toBe('Alice Smith');
135
+ });
136
+
137
+ it('should search users by email', () => {
138
+ const results = manager.searchUsers('bob@example.com');
139
+
140
+ expect(results).toHaveLength(1);
141
+ expect(results[0].email).toBe('bob@example.com');
142
+ });
143
+
144
+ it('should be case insensitive', () => {
145
+ const results = manager.searchUsers('alice');
146
+
147
+ expect(results).toHaveLength(1);
148
+ });
149
+ });
150
+
151
+ describe('user removal', () => {
152
+ it('should remove a user', () => {
153
+ const registered = manager.registerUser({
154
+ provider: 'chatkit',
155
+ platformUserId: 'user123'
156
+ });
157
+
158
+ const unifiedId = registered.data!.unifiedId;
159
+ const result = manager.removeUser(unifiedId);
160
+
161
+ expect(result.success).toBe(true);
162
+ expect(manager.getUserCount()).toBe(0);
163
+ });
164
+
165
+ it('should fail to remove non-existent user', () => {
166
+ const result = manager.removeUser('invalid-id');
167
+
168
+ expect(result.success).toBe(false);
169
+ });
170
+ });
171
+
172
+ describe('bulk operations', () => {
173
+ it('should get all users', () => {
174
+ manager.registerUser({
175
+ provider: 'chatkit',
176
+ platformUserId: 'user1'
177
+ });
178
+
179
+ manager.registerUser({
180
+ provider: 'chatkit',
181
+ platformUserId: 'user2'
182
+ });
183
+
184
+ const users = manager.getAllUsers();
185
+ expect(users).toHaveLength(2);
186
+ });
187
+
188
+ it('should get user count', () => {
189
+ manager.registerUser({
190
+ provider: 'chatkit',
191
+ platformUserId: 'user1'
192
+ });
193
+
194
+ expect(manager.getUserCount()).toBe(1);
195
+ });
196
+
197
+ it('should clear all users', () => {
198
+ manager.registerUser({
199
+ provider: 'chatkit',
200
+ platformUserId: 'user1'
201
+ });
202
+
203
+ manager.clear();
204
+
205
+ expect(manager.getUserCount()).toBe(0);
206
+ });
207
+ });
208
+ });
@@ -0,0 +1,76 @@
1
+ import type { ChatSuiteConfig, SuiteInitResult, ChatSuiteHealth, BroadcastConfig, ProviderMessage, ProviderMessageResult, SuiteResult, ProviderType } from './types';
2
+ import { ConfigManager } from './services/ConfigManager';
3
+ import { UserManager } from './services/UserManager';
4
+ import { ProviderManager } from './services/ProviderManager';
5
+ import { MessageOrchestrator } from './services/MessageOrchestrator';
6
+ /**
7
+ * Main chat suite orchestration class
8
+ */
9
+ export declare class ChatSuite {
10
+ private configManager;
11
+ private userManager;
12
+ private healthMonitor;
13
+ private providerManager;
14
+ private messageOrchestrator;
15
+ private neverhubAdapter?;
16
+ private neverhubConnected;
17
+ private initialized;
18
+ constructor(config?: Partial<ChatSuiteConfig>);
19
+ /**
20
+ * Initialize the chat suite
21
+ */
22
+ initialize(): Promise<SuiteInitResult>;
23
+ /**
24
+ * Initialize NeverHub connection
25
+ */
26
+ private initializeNeverHub;
27
+ /**
28
+ * Initialize ChatKit provider
29
+ */
30
+ private initializeChatKitProvider;
31
+ /**
32
+ * Send a message through a specific provider
33
+ */
34
+ sendMessage(providerType: ProviderType, message: ProviderMessage): Promise<SuiteResult<ProviderMessageResult>>;
35
+ /**
36
+ * Broadcast a message to multiple providers
37
+ */
38
+ broadcastMessage(config: BroadcastConfig): Promise<SuiteResult<ProviderMessageResult[]>>;
39
+ /**
40
+ * Get health status
41
+ */
42
+ getHealth(): Promise<ChatSuiteHealth>;
43
+ /**
44
+ * Get user manager
45
+ */
46
+ getUserManager(): UserManager;
47
+ /**
48
+ * Get config manager
49
+ */
50
+ getConfigManager(): ConfigManager;
51
+ /**
52
+ * Check if initialized
53
+ */
54
+ isInitialized(): boolean;
55
+ /**
56
+ * Check if NeverHub is connected
57
+ */
58
+ isNeverHubConnected(): boolean;
59
+ /**
60
+ * Get provider manager
61
+ */
62
+ getProviderManager(): ProviderManager;
63
+ /**
64
+ * Get message orchestrator
65
+ */
66
+ getMessageOrchestrator(): MessageOrchestrator;
67
+ /**
68
+ * Shutdown the chat suite
69
+ */
70
+ shutdown(): Promise<void>;
71
+ /**
72
+ * Get initialized provider types
73
+ */
74
+ private getInitializedProviderTypes;
75
+ }
76
+ //# sourceMappingURL=ChatSuite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatSuite.d.ts","sourceRoot":"","sources":["../src/ChatSuite.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,WAAW,EAEX,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAcrE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IAEjD,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAQ7C;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAyDnD;;OAEG;YACW,kBAAkB;IA+BhC;;OAEG;YACW,yBAAyB;IAsDvC;;OAEG;IACU,WAAW,CACtB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAgC9C;;OAEG;IACU,gBAAgB,CAC3B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAoBhD;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAIlD;;OAEG;IACI,cAAc,IAAI,WAAW;IAIpC;;OAEG;IACI,gBAAgB,IAAI,aAAa;IAIxC;;OAEG;IACI,aAAa,IAAI,OAAO;IAI/B;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAIrC;;OAEG;IACI,kBAAkB,IAAI,eAAe;IAI5C;;OAEG;IACI,sBAAsB,IAAI,mBAAmB;IAIpD;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtC;;OAEG;IACH,OAAO,CAAC,2BAA2B;CAKpC"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ChatSuite = void 0;
11
+ const neverhub_adapter_1 = require("@bernierllc/neverhub-adapter");
12
+ const ConfigManager_1 = require("./services/ConfigManager");
13
+ const UserManager_1 = require("./services/UserManager");
14
+ const HealthMonitor_1 = require("./services/HealthMonitor");
15
+ const ProviderManager_1 = require("./services/ProviderManager");
16
+ const MessageOrchestrator_1 = require("./services/MessageOrchestrator");
17
+ const ChatKitProvider_1 = require("./providers/ChatKitProvider");
18
+ const message_bridge_1 = require("./utils/message-bridge");
19
+ const error_handling_1 = require("./utils/error-handling");
20
+ const neverhub_1 = require("./neverhub");
21
+ /**
22
+ * Main chat suite orchestration class
23
+ */
24
+ class ChatSuite {
25
+ constructor(config) {
26
+ this.neverhubConnected = false;
27
+ this.initialized = false;
28
+ this.configManager = new ConfigManager_1.ConfigManager(config);
29
+ this.userManager = new UserManager_1.UserManager();
30
+ this.healthMonitor = new HealthMonitor_1.HealthMonitor();
31
+ this.providerManager = new ProviderManager_1.ProviderManager();
32
+ this.messageOrchestrator = new MessageOrchestrator_1.MessageOrchestrator();
33
+ }
34
+ /**
35
+ * Initialize the chat suite
36
+ */
37
+ async initialize() {
38
+ try {
39
+ const config = this.configManager.getConfig();
40
+ // 1. Initialize NeverHub (if enabled)
41
+ if (config.neverhub?.enabled) {
42
+ await this.initializeNeverHub();
43
+ }
44
+ // 2. Initialize ChatKit provider (always required)
45
+ const chatKitResult = await this.initializeChatKitProvider(config);
46
+ if (!chatKitResult.success) {
47
+ throw new error_handling_1.ChatSuiteError(error_handling_1.ChatSuiteErrorType.INITIALIZATION_ERROR, `Failed to initialize ChatKit: ${chatKitResult.error}`);
48
+ }
49
+ // 3. Initialize message bridge (if configured)
50
+ if (config.messageBridge) {
51
+ const bridge = new message_bridge_1.MessageBridge(config.messageBridge);
52
+ this.messageOrchestrator.setMessageBridge(bridge);
53
+ }
54
+ // 4. Start health monitoring
55
+ this.healthMonitor.startMonitoring(60000);
56
+ // 5. Update NeverHub health status
57
+ if (this.neverhubConnected && this.neverhubAdapter) {
58
+ await (0, neverhub_1.updateHealthStatus)(this.neverhubAdapter, 'healthy', {
59
+ providersInitialized: this.providerManager.getProviderCount().initialized
60
+ });
61
+ }
62
+ this.initialized = true;
63
+ return {
64
+ success: true,
65
+ providersInitialized: this.getInitializedProviderTypes(),
66
+ providersFailed: [],
67
+ aiRoutingEnabled: config.aiRouting?.enabled || false,
68
+ analyticsEnabled: config.analytics?.enabled || false,
69
+ neverhubConnected: this.neverhubConnected
70
+ };
71
+ }
72
+ catch (error) {
73
+ return {
74
+ success: false,
75
+ providersInitialized: [],
76
+ providersFailed: ['chatkit'],
77
+ aiRoutingEnabled: false,
78
+ analyticsEnabled: false,
79
+ neverhubConnected: false,
80
+ error: error instanceof Error ? error.message : 'Initialization failed'
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * Initialize NeverHub connection
86
+ */
87
+ async initializeNeverHub() {
88
+ try {
89
+ const detected = await neverhub_adapter_1.NeverHubAdapter.detect();
90
+ if (!detected) {
91
+ console.log('⚠️ NeverHub not available - running without service discovery');
92
+ return;
93
+ }
94
+ this.neverhubAdapter = new neverhub_adapter_1.NeverHubAdapter();
95
+ const config = this.configManager.getConfig();
96
+ if (config.neverhub) {
97
+ const registered = await (0, neverhub_1.registerWithNeverHub)(this.neverhubAdapter, config.neverhub);
98
+ if (registered) {
99
+ this.neverhubConnected = true;
100
+ // Discover available services
101
+ const discovered = await (0, neverhub_1.discoverAllChatServices)(this.neverhubAdapter);
102
+ console.log(`✅ Discovered services:`, {
103
+ providers: discovered.providers.length,
104
+ aiRouter: !!discovered.aiRouter,
105
+ analytics: !!discovered.analytics
106
+ });
107
+ }
108
+ }
109
+ }
110
+ catch (error) {
111
+ console.error('❌ NeverHub initialization failed (continuing without):', error);
112
+ this.neverhubConnected = false;
113
+ }
114
+ }
115
+ /**
116
+ * Initialize ChatKit provider
117
+ */
118
+ async initializeChatKitProvider(config) {
119
+ try {
120
+ const chatKitConfig = config.providers.chatkit;
121
+ if (!chatKitConfig || !chatKitConfig.enabled) {
122
+ return {
123
+ success: false,
124
+ error: 'ChatKit provider is not enabled in configuration'
125
+ };
126
+ }
127
+ const provider = new ChatKitProvider_1.ChatKitProvider({
128
+ serviceName: chatKitConfig.config.serviceName,
129
+ features: chatKitConfig.config.features,
130
+ config: chatKitConfig.config
131
+ });
132
+ // Register provider
133
+ const registerResult = this.providerManager.registerProvider({
134
+ provider,
135
+ priority: chatKitConfig.priority,
136
+ enabled: chatKitConfig.enabled
137
+ });
138
+ if (!registerResult.success) {
139
+ return registerResult;
140
+ }
141
+ // Initialize provider
142
+ const initResult = await this.providerManager.initializeProvider('chatkit');
143
+ if (!initResult.success) {
144
+ return initResult;
145
+ }
146
+ // Register with health monitor
147
+ this.healthMonitor.registerProvider(provider);
148
+ // Publish provider initialized event
149
+ if (this.neverhubConnected && this.neverhubAdapter) {
150
+ await (0, neverhub_1.publishProviderEvent)(this.neverhubAdapter, neverhub_1.ChatSuiteEventType.PROVIDER_INITIALIZED, 'chatkit');
151
+ }
152
+ return { success: true };
153
+ }
154
+ catch (error) {
155
+ return {
156
+ success: false,
157
+ error: error instanceof Error ? error.message : 'Failed to initialize ChatKit'
158
+ };
159
+ }
160
+ }
161
+ /**
162
+ * Send a message through a specific provider
163
+ */
164
+ async sendMessage(providerType, message) {
165
+ if (!this.initialized) {
166
+ return {
167
+ success: false,
168
+ error: 'Chat suite is not initialized'
169
+ };
170
+ }
171
+ const provider = this.providerManager.getProvider(providerType);
172
+ if (!provider) {
173
+ return {
174
+ success: false,
175
+ error: `Provider ${providerType} not found`
176
+ };
177
+ }
178
+ const result = await this.messageOrchestrator.sendMessage(provider, message);
179
+ // Publish message event
180
+ if (this.neverhubConnected && this.neverhubAdapter && result.success && result.data) {
181
+ await (0, neverhub_1.publishMessageEvent)(this.neverhubAdapter, {
182
+ type: 'message.sent',
183
+ messageId: result.data.messageId || 'unknown',
184
+ provider: providerType,
185
+ timestamp: new Date(),
186
+ data: { content: message.content }
187
+ });
188
+ }
189
+ return result;
190
+ }
191
+ /**
192
+ * Broadcast a message to multiple providers
193
+ */
194
+ async broadcastMessage(config) {
195
+ if (!this.initialized) {
196
+ return {
197
+ success: false,
198
+ error: 'Chat suite is not initialized'
199
+ };
200
+ }
201
+ const providers = new Map();
202
+ for (const type of config.platforms) {
203
+ const provider = this.providerManager.getProvider(type);
204
+ if (provider && this.providerManager.isInitialized(type)) {
205
+ providers.set(type, provider);
206
+ }
207
+ }
208
+ return this.messageOrchestrator.broadcastMessage(providers, config);
209
+ }
210
+ /**
211
+ * Get health status
212
+ */
213
+ async getHealth() {
214
+ return this.healthMonitor.checkHealth();
215
+ }
216
+ /**
217
+ * Get user manager
218
+ */
219
+ getUserManager() {
220
+ return this.userManager;
221
+ }
222
+ /**
223
+ * Get config manager
224
+ */
225
+ getConfigManager() {
226
+ return this.configManager;
227
+ }
228
+ /**
229
+ * Check if initialized
230
+ */
231
+ isInitialized() {
232
+ return this.initialized;
233
+ }
234
+ /**
235
+ * Check if NeverHub is connected
236
+ */
237
+ isNeverHubConnected() {
238
+ return this.neverhubConnected;
239
+ }
240
+ /**
241
+ * Get provider manager
242
+ */
243
+ getProviderManager() {
244
+ return this.providerManager;
245
+ }
246
+ /**
247
+ * Get message orchestrator
248
+ */
249
+ getMessageOrchestrator() {
250
+ return this.messageOrchestrator;
251
+ }
252
+ /**
253
+ * Shutdown the chat suite
254
+ */
255
+ async shutdown() {
256
+ this.healthMonitor.stopMonitoring();
257
+ await this.providerManager.shutdownAll();
258
+ if (this.neverhubConnected && this.neverhubAdapter) {
259
+ await (0, neverhub_1.unregisterFromNeverHub)(this.neverhubAdapter);
260
+ }
261
+ this.initialized = false;
262
+ this.neverhubConnected = false;
263
+ }
264
+ /**
265
+ * Get initialized provider types
266
+ */
267
+ getInitializedProviderTypes() {
268
+ return this.providerManager
269
+ .getInitializedProviders()
270
+ .map(p => p.type);
271
+ }
272
+ }
273
+ exports.ChatSuite = ChatSuite;
@@ -0,0 +1,7 @@
1
+ export { ChatSuite } from './ChatSuite';
2
+ export * from './types';
3
+ export * from './services';
4
+ export * from './providers';
5
+ export * from './utils';
6
+ export * from './neverhub';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,cAAc,SAAS,CAAC;AAGxB,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ChatSuite = void 0;
25
+ // Main export
26
+ var ChatSuite_1 = require("./ChatSuite");
27
+ Object.defineProperty(exports, "ChatSuite", { enumerable: true, get: function () { return ChatSuite_1.ChatSuite; } });
28
+ // Types
29
+ __exportStar(require("./types"), exports);
30
+ // Services
31
+ __exportStar(require("./services"), exports);
32
+ // Providers
33
+ __exportStar(require("./providers"), exports);
34
+ // Utilities
35
+ __exportStar(require("./utils"), exports);
36
+ // NeverHub integration
37
+ __exportStar(require("./neverhub"), exports);
@@ -0,0 +1,40 @@
1
+ import { NeverHubAdapter } from '@bernierllc/neverhub-adapter';
2
+ /**
3
+ * Discovered service information
4
+ */
5
+ export interface DiscoveredService {
6
+ name: string;
7
+ type: string;
8
+ version: string;
9
+ capabilities: Array<{
10
+ type: string;
11
+ name: string;
12
+ version: string;
13
+ }>;
14
+ endpoint?: string;
15
+ }
16
+ /**
17
+ * Discover chat providers through NeverHub
18
+ */
19
+ export declare function discoverProviders(adapter: NeverHubAdapter): Promise<DiscoveredService[]>;
20
+ /**
21
+ * Discover AI routing service
22
+ */
23
+ export declare function discoverAIRouter(adapter: NeverHubAdapter): Promise<DiscoveredService | undefined>;
24
+ /**
25
+ * Discover analytics service
26
+ */
27
+ export declare function discoverAnalytics(adapter: NeverHubAdapter): Promise<DiscoveredService | undefined>;
28
+ /**
29
+ * Discover all chat-related services
30
+ */
31
+ export declare function discoverAllChatServices(adapter: NeverHubAdapter): Promise<{
32
+ providers: DiscoveredService[];
33
+ aiRouter?: DiscoveredService;
34
+ analytics?: DiscoveredService;
35
+ }>;
36
+ /**
37
+ * Get service by name
38
+ */
39
+ export declare function getService(adapter: NeverHubAdapter, serviceName: string): Promise<DiscoveredService | undefined>;
40
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/neverhub/discovery.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAiBxC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAiBxC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC;IACT,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC,CAYD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAaxC"}