@app-connect/core 1.7.37 → 1.7.38
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 +17 -16
- package/dist/connector/developerPortal.d.ts +6 -0
- package/{connector → dist/connector}/developerPortal.js +29 -12
- package/dist/connector/mock.d.ts +1 -0
- package/{connector → dist/connector}/mock.js +33 -17
- package/dist/connector/proxy/engine.d.ts +10 -0
- package/dist/connector/proxy/engine.js +222 -0
- package/dist/connector/proxy/index.d.ts +5 -0
- package/dist/connector/proxy/index.js +511 -0
- package/dist/connector/registry.d.ts +1 -0
- package/dist/connector/registry.js +243 -0
- package/dist/handlers/admin.d.ts +1 -0
- package/{handlers → dist/handlers}/admin.js +137 -78
- package/dist/handlers/appointment.d.ts +9 -0
- package/{handlers → dist/handlers}/appointment.js +58 -29
- package/dist/handlers/auth.d.ts +9 -0
- package/{handlers → dist/handlers}/auth.js +68 -40
- package/dist/handlers/calldown.d.ts +10 -0
- package/dist/handlers/calldown.js +134 -0
- package/dist/handlers/contact.d.ts +1 -0
- package/{handlers → dist/handlers}/contact.js +61 -39
- package/dist/handlers/disposition.d.ts +1 -0
- package/{handlers → dist/handlers}/disposition.js +20 -10
- package/dist/handlers/log.d.ts +1 -0
- package/{handlers → dist/handlers}/log.js +91 -124
- package/dist/handlers/managedAuth.d.ts +1 -0
- package/{handlers → dist/handlers}/managedAuth.js +134 -61
- package/dist/handlers/managedOAuth.d.ts +13 -0
- package/{handlers → dist/handlers}/managedOAuth.js +102 -30
- package/dist/handlers/plugin.d.ts +1 -0
- package/{handlers → dist/handlers}/plugin.js +59 -27
- package/dist/handlers/user.d.ts +1 -0
- package/{handlers → dist/handlers}/user.js +45 -27
- package/dist/index.d.ts +1 -0
- package/{index.js → dist/index.js} +538 -449
- package/dist/jest.config.d.ts +1 -0
- package/dist/jest.config.js +65 -0
- package/dist/lib/analytics.d.ts +4 -0
- package/{lib → dist/lib}/analytics.js +8 -6
- package/dist/lib/authSession.d.ts +5 -0
- package/{lib → dist/lib}/authSession.js +15 -43
- package/dist/lib/cacheCleanup.d.ts +4 -0
- package/{lib → dist/lib}/cacheCleanup.js +5 -17
- package/dist/lib/callLogComposer.d.ts +109 -0
- package/{lib → dist/lib}/callLogComposer.js +157 -197
- package/dist/lib/callLogLookup.d.ts +6 -0
- package/{lib → dist/lib}/callLogLookup.js +12 -34
- package/dist/lib/constants.d.ts +6 -0
- package/dist/lib/constants.js +9 -0
- package/dist/lib/debugTracer.d.ts +17 -0
- package/{lib → dist/lib}/debugTracer.js +7 -83
- package/dist/lib/encode.d.ts +3 -0
- package/dist/lib/encode.js +50 -0
- package/dist/lib/errorHandler.d.ts +7 -0
- package/dist/lib/errorHandler.js +161 -0
- package/dist/lib/generalErrorMessage.d.ts +7 -0
- package/{lib → dist/lib}/generalErrorMessage.js +6 -6
- package/dist/lib/jwt.d.ts +4 -0
- package/dist/lib/jwt.js +18 -0
- package/dist/lib/logger.d.ts +24 -0
- package/dist/lib/logger.js +126 -0
- package/dist/lib/migrateCallLogsSchema.d.ts +32 -0
- package/{lib → dist/lib}/migrateCallLogsSchema.js +75 -160
- package/dist/lib/oauth.d.ts +4 -0
- package/{lib → dist/lib}/oauth.js +157 -160
- package/dist/lib/ringcentral.d.ts +24 -0
- package/dist/lib/ringcentral.js +226 -0
- package/dist/lib/s3ErrorLogReport.d.ts +4 -0
- package/{lib → dist/lib}/s3ErrorLogReport.js +11 -23
- package/dist/lib/sharedSMSComposer.d.ts +7 -0
- package/{lib → dist/lib}/sharedSMSComposer.js +21 -107
- package/dist/lib/util.d.ts +7 -0
- package/{lib → dist/lib}/util.js +9 -20
- package/dist/mcp/lib/oauthError.d.ts +1 -0
- package/dist/mcp/lib/oauthError.js +25 -0
- package/dist/mcp/lib/validator.d.ts +1 -0
- package/{mcp → dist/mcp}/lib/validator.js +16 -20
- package/dist/mcp/lib/widgetSessionToken.d.ts +1 -0
- package/dist/mcp/lib/widgetSessionToken.js +46 -0
- package/dist/mcp/mcpHandler.d.ts +8 -0
- package/{mcp → dist/mcp}/mcpHandler.js +98 -88
- package/dist/mcp/tools/cancelAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/cancelAppointment.js +7 -16
- package/dist/mcp/tools/checkAuthStatus.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/checkAuthStatus.js +21 -14
- package/dist/mcp/tools/confirmAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/confirmAppointment.js +7 -16
- package/dist/mcp/tools/createAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createAppointment.js +7 -19
- package/dist/mcp/tools/createCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createCallLog.js +18 -29
- package/dist/mcp/tools/createContact.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createContact.js +8 -20
- package/dist/mcp/tools/createMessageLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createMessageLog.js +14 -26
- package/dist/mcp/tools/doAuth.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/doAuth.js +17 -13
- package/dist/mcp/tools/findContactByName.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/findContactByName.js +9 -15
- package/dist/mcp/tools/findContactByPhone.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/findContactByPhone.js +8 -15
- package/dist/mcp/tools/getCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getCallLog.js +12 -21
- package/dist/mcp/tools/getGoogleFilePicker.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getGoogleFilePicker.js +9 -18
- package/dist/mcp/tools/getHelp.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getHelp.js +5 -6
- package/dist/mcp/tools/getPublicConnectors.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getPublicConnectors.js +19 -18
- package/dist/mcp/tools/getSessionInfo.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getSessionInfo.js +10 -16
- package/dist/mcp/tools/index.d.ts +8 -0
- package/dist/mcp/tools/index.js +50 -0
- package/dist/mcp/tools/listAppointments.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/listAppointments.js +7 -19
- package/dist/mcp/tools/logout.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/logout.js +16 -14
- package/dist/mcp/tools/rcGetCallLogs.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/rcGetCallLogs.js +10 -8
- package/dist/mcp/tools/updateAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/updateAppointment.js +17 -22
- package/dist/mcp/tools/updateCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/updateCallLog.js +16 -26
- package/dist/models/accountDataModel.d.ts +3 -0
- package/dist/models/accountDataModel.js +39 -0
- package/dist/models/adminConfigModel.d.ts +2 -0
- package/dist/models/adminConfigModel.js +39 -0
- package/dist/models/cacheModel.d.ts +2 -0
- package/{models → dist/models}/cacheModel.js +7 -3
- package/dist/models/callDownListModel.d.ts +2 -0
- package/{models → dist/models}/callDownListModel.js +8 -4
- package/dist/models/callLogModel.d.ts +2 -0
- package/dist/models/callLogModel.js +43 -0
- package/dist/models/dynamo/connectorSchema.d.ts +2 -0
- package/dist/models/dynamo/connectorSchema.js +141 -0
- package/dist/models/dynamo/lockSchema.d.ts +2 -0
- package/{models → dist/models}/dynamo/lockSchema.js +5 -7
- package/dist/models/dynamo/noteCacheSchema.d.ts +2 -0
- package/{models → dist/models}/dynamo/noteCacheSchema.js +4 -6
- package/dist/models/llmSessionModel.d.ts +2 -0
- package/dist/models/llmSessionModel.js +21 -0
- package/dist/models/messageLogModel.d.ts +2 -0
- package/{models → dist/models}/messageLogModel.js +8 -4
- package/dist/models/sequelize.d.ts +2 -0
- package/dist/models/sequelize.js +68 -0
- package/dist/models/userModel.d.ts +2 -0
- package/dist/models/userModel.js +49 -0
- package/dist/package.json +100 -0
- package/dist/releaseNotes.json +1222 -0
- package/dist/tsconfig.json +14 -0
- package/dist/types/admin.d.ts +141 -0
- package/dist/types/analytics.d.ts +14 -0
- package/dist/types/appointment.d.ts +50 -0
- package/dist/types/auth.d.ts +137 -0
- package/dist/types/authSession.d.ts +35 -0
- package/dist/types/cacheCleanup.d.ts +12 -0
- package/dist/types/calldown.d.ts +54 -0
- package/dist/types/common.d.ts +46 -0
- package/dist/types/connector.d.ts +165 -0
- package/dist/types/contact.d.ts +125 -0
- package/dist/types/errorHandler.d.ts +60 -0
- package/dist/types/index.d.ts +76 -0
- package/dist/types/json.d.ts +9 -0
- package/dist/types/jwt.d.ts +8 -0
- package/dist/types/logging.d.ts +224 -0
- package/dist/types/managedAuth.d.ts +114 -0
- package/dist/types/managedOAuth.d.ts +59 -0
- package/dist/types/manifest.d.ts +120 -0
- package/dist/types/migration.d.ts +15 -0
- package/dist/types/plugin.d.ts +74 -0
- package/dist/types/ringcentral.d.ts +61 -0
- package/dist/types/s3ErrorLogReport.d.ts +16 -0
- package/dist/types/sharedSMSComposer.d.ts +105 -0
- package/dist/types/user.d.ts +46 -0
- package/dist/types/util.d.ts +7 -0
- package/package.json +34 -6
- package/releaseNotes.json +8 -0
- package/.env.test +0 -5
- package/connector/proxy/engine.js +0 -165
- package/connector/proxy/index.js +0 -500
- package/connector/registry.js +0 -252
- package/docs/README.md +0 -50
- package/docs/architecture.md +0 -94
- package/docs/connectors.md +0 -116
- package/docs/handlers.md +0 -128
- package/docs/libraries.md +0 -98
- package/docs/models.md +0 -146
- package/docs/routes.md +0 -119
- package/docs/tests.md +0 -73
- package/handlers/calldown.js +0 -99
- package/jest.config.js +0 -57
- package/lib/constants.js +0 -9
- package/lib/encode.js +0 -30
- package/lib/errorHandler.js +0 -218
- package/lib/jwt.js +0 -18
- package/lib/logger.js +0 -190
- package/lib/ringcentral.js +0 -267
- package/mcp/README.md +0 -420
- package/mcp/tools/index.js +0 -51
- package/mcp/ui/App/App.tsx +0 -358
- package/mcp/ui/App/components/AuthInfoForm.tsx +0 -113
- package/mcp/ui/App/components/AuthSuccess.tsx +0 -22
- package/mcp/ui/App/components/ConnectorList.tsx +0 -82
- package/mcp/ui/App/components/DebugPanel.tsx +0 -43
- package/mcp/ui/App/components/OAuthConnect.tsx +0 -270
- package/mcp/ui/App/lib/callTool.ts +0 -130
- package/mcp/ui/App/lib/debugLog.ts +0 -41
- package/mcp/ui/App/lib/developerPortal.ts +0 -111
- package/mcp/ui/App/main.css +0 -6
- package/mcp/ui/App/root.tsx +0 -13
- package/mcp/ui/dist/index.html +0 -53
- package/mcp/ui/vite.config.ts +0 -16
- package/models/accountDataModel.js +0 -34
- package/models/adminConfigModel.js +0 -35
- package/models/callLogModel.js +0 -39
- package/models/dynamo/connectorSchema.js +0 -146
- package/models/llmSessionModel.js +0 -17
- package/models/sequelize.js +0 -17
- package/models/userModel.js +0 -45
- package/test/connector/developerPortal.test.js +0 -166
- package/test/connector/mock.test.js +0 -131
- package/test/connector/proxy/engine.test.js +0 -211
- package/test/connector/proxy/index.test.js +0 -525
- package/test/connector/proxy/sample.json +0 -162
- package/test/connector/registry.test.js +0 -416
- package/test/handlers/admin.test.js +0 -960
- package/test/handlers/appointment.test.js +0 -260
- package/test/handlers/auth.test.js +0 -1096
- package/test/handlers/calldown.test.js +0 -310
- package/test/handlers/contact.test.js +0 -1014
- package/test/handlers/disposition.test.js +0 -396
- package/test/handlers/log.test.js +0 -1847
- package/test/handlers/managedAuth.test.js +0 -458
- package/test/handlers/managedOAuth.test.js +0 -262
- package/test/handlers/plugin.test.js +0 -429
- package/test/handlers/user.test.js +0 -381
- package/test/index.test.js +0 -301
- package/test/lib/analytics.test.js +0 -146
- package/test/lib/authSession.test.js +0 -173
- package/test/lib/cacheCleanup.test.js +0 -127
- package/test/lib/callLogComposer.test.js +0 -1231
- package/test/lib/debugTracer.test.js +0 -328
- package/test/lib/encode.test.js +0 -59
- package/test/lib/errorHandler.test.js +0 -246
- package/test/lib/generalErrorMessage.test.js +0 -82
- package/test/lib/jwt.test.js +0 -176
- package/test/lib/logger.test.js +0 -206
- package/test/lib/oauth.test.js +0 -359
- package/test/lib/ringcentral.test.js +0 -467
- package/test/lib/s3ErrorLogReport.test.js +0 -187
- package/test/lib/sharedSMSComposer.test.js +0 -1084
- package/test/lib/util.test.js +0 -329
- package/test/mcp/mcpHandler.test.js +0 -73
- package/test/mcp/mcpHandlerMore.test.js +0 -384
- package/test/mcp/tools/appointmentTools.test.js +0 -362
- package/test/mcp/tools/checkAuthStatus.test.js +0 -83
- package/test/mcp/tools/createCallLog.test.js +0 -436
- package/test/mcp/tools/createContact.test.js +0 -58
- package/test/mcp/tools/createMessageLog.test.js +0 -595
- package/test/mcp/tools/doAuth.test.js +0 -113
- package/test/mcp/tools/findContactByName.test.js +0 -275
- package/test/mcp/tools/findContactByPhone.test.js +0 -296
- package/test/mcp/tools/getCallLog.test.js +0 -298
- package/test/mcp/tools/getGoogleFilePicker.test.js +0 -281
- package/test/mcp/tools/getPublicConnectors.test.js +0 -107
- package/test/mcp/tools/getSessionInfo.test.js +0 -127
- package/test/mcp/tools/logout.test.js +0 -233
- package/test/mcp/tools/rcGetCallLogs.test.js +0 -56
- package/test/mcp/tools/updateCallLog.test.js +0 -360
- package/test/models/accountDataModel.test.js +0 -98
- package/test/models/callDownListModel.test.js +0 -125
- package/test/models/dynamo/connectorSchema.test.js +0 -189
- package/test/models/dynamo/lockSchema.test.js +0 -37
- package/test/models/dynamo/noteCacheSchema.test.js +0 -45
- package/test/models/llmSessionModel.test.js +0 -91
- package/test/models/models.test.js +0 -660
- package/test/routes/calldownRoutes.test.js +0 -224
- package/test/routes/coreRouterBroadRoutes.test.js +0 -855
- package/test/routes/dispositionRoutes.test.js +0 -192
- package/test/routes/managedAuthRoutes.test.js +0 -386
- package/test/routes/pluginRoutes.test.js +0 -262
- package/test/setup.js +0 -178
- /package/{mcp → dist/mcp}/ui/index.html +0 -0
- /package/{mcp → dist/mcp}/ui/package-lock.json +0 -0
- /package/{mcp → dist/mcp}/ui/package.json +0 -0
- /package/{mcp → dist/mcp}/ui/tsconfig.json +0 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// core/src/connector/registry.ts
|
|
3
|
+
// @ts-check
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const logger = require('../lib/logger');
|
|
6
|
+
/** @typedef {import('../types').ConnectorCapabilities} ConnectorCapabilities */
|
|
7
|
+
/** @typedef {import('../types').ConnectorImplementation} ConnectorImplementation */
|
|
8
|
+
/** @typedef {import('../types').ConnectorInterfaceFunction} ConnectorInterfaceFunction */
|
|
9
|
+
/** @typedef {import('../types').ConnectorManifest} ConnectorManifest */
|
|
10
|
+
class ConnectorRegistry {
|
|
11
|
+
constructor() {
|
|
12
|
+
/** @type {Map<string, ConnectorImplementation>} */
|
|
13
|
+
this.connectors = new Map();
|
|
14
|
+
/** @type {Map<string, ConnectorManifest>} */
|
|
15
|
+
this.manifests = new Map();
|
|
16
|
+
/** @type {unknown} */
|
|
17
|
+
this.releaseNotes = {};
|
|
18
|
+
/** @type {Map<string, Map<string, ConnectorInterfaceFunction>>} */
|
|
19
|
+
this.platformInterfaces = new Map(); // Store interface functions per platform
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @param {ConnectorManifest} manifest
|
|
23
|
+
*/
|
|
24
|
+
setDefaultManifest(manifest) {
|
|
25
|
+
this.manifests.set('default', manifest);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register an interface function for a specific platform
|
|
29
|
+
* @param {string} platformName - Platform identifier (e.g., 'pipedrive', 'salesforce')
|
|
30
|
+
* @param {string} interfaceName - Interface function name (e.g., 'createCallLog', 'findContact')
|
|
31
|
+
* @param {ConnectorInterfaceFunction} interfaceFunction - The interface function to register
|
|
32
|
+
*/
|
|
33
|
+
registerConnectorInterface(platformName, interfaceName, interfaceFunction) {
|
|
34
|
+
if (typeof interfaceFunction !== 'function') {
|
|
35
|
+
throw new Error(`Interface function must be a function, got: ${typeof interfaceFunction}`);
|
|
36
|
+
}
|
|
37
|
+
if (!this.platformInterfaces.has(platformName)) {
|
|
38
|
+
this.platformInterfaces.set(platformName, new Map());
|
|
39
|
+
}
|
|
40
|
+
const platformInterfaceMap = this.platformInterfaces.get(platformName);
|
|
41
|
+
platformInterfaceMap.set(interfaceName, interfaceFunction);
|
|
42
|
+
logger.info(`Registered interface function: ${platformName}.${interfaceName}`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get registered interface functions for a platform
|
|
46
|
+
* @param {string} platformName - Platform identifier
|
|
47
|
+
* @returns {Map<string, ConnectorInterfaceFunction>} Map of interface functions
|
|
48
|
+
*/
|
|
49
|
+
getPlatformInterfaces(platformName) {
|
|
50
|
+
return this.platformInterfaces.get(platformName) || new Map();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if an interface function is registered for a platform
|
|
54
|
+
* @param {string} platformName - Platform identifier
|
|
55
|
+
* @param {string} interfaceName - Interface function name
|
|
56
|
+
* @returns {boolean} True if interface is registered
|
|
57
|
+
*/
|
|
58
|
+
hasPlatformInterface(platformName, interfaceName) {
|
|
59
|
+
const platformInterfaceMap = this.platformInterfaces.get(platformName);
|
|
60
|
+
return platformInterfaceMap ? platformInterfaceMap.has(interfaceName) : false;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Unregister an interface function for a platform
|
|
64
|
+
* @param {string} platformName - Platform identifier
|
|
65
|
+
* @param {string} interfaceName - Interface function name
|
|
66
|
+
*/
|
|
67
|
+
unregisterConnectorInterface(platformName, interfaceName) {
|
|
68
|
+
const platformInterfaceMap = this.platformInterfaces.get(platformName);
|
|
69
|
+
if (platformInterfaceMap && platformInterfaceMap.has(interfaceName)) {
|
|
70
|
+
platformInterfaceMap.delete(interfaceName);
|
|
71
|
+
logger.info(`Unregistered interface function: ${platformName}.${interfaceName}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Register an connector with the core system
|
|
76
|
+
* @param {string} platform - Platform identifier (e.g., 'pipedrive', 'salesforce')
|
|
77
|
+
* @param {ConnectorImplementation} connector - Connector implementation
|
|
78
|
+
* @param {ConnectorManifest | null} manifest - Connector manifest configuration
|
|
79
|
+
*/
|
|
80
|
+
registerConnector(platform, connector, manifest = null) {
|
|
81
|
+
// Validate connector interface
|
|
82
|
+
this.validateConnectorInterface(platform, connector);
|
|
83
|
+
this.connectors.set(platform, connector);
|
|
84
|
+
if (manifest) {
|
|
85
|
+
this.manifests.set(platform, manifest);
|
|
86
|
+
}
|
|
87
|
+
logger.info(`Registered connector: ${platform}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get connector by platform name with composed interfaces
|
|
91
|
+
* @param {string} platform - Platform identifier
|
|
92
|
+
* @returns {ConnectorImplementation} Composed connector with interface functions
|
|
93
|
+
*/
|
|
94
|
+
getConnector(platform) {
|
|
95
|
+
let connector = this.connectors.get(platform);
|
|
96
|
+
const platformInterfaceMap = this.platformInterfaces.get(platform);
|
|
97
|
+
if (!connector && (!platformInterfaceMap || platformInterfaceMap.size === 0)) {
|
|
98
|
+
connector = this.connectors.get('proxy');
|
|
99
|
+
if (connector) {
|
|
100
|
+
return connector;
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`Connector not found for platform: ${platform}`);
|
|
103
|
+
}
|
|
104
|
+
// If no connector but interfaces exist, create a composed object with just interfaces
|
|
105
|
+
if (!connector && platformInterfaceMap && platformInterfaceMap.size > 0) {
|
|
106
|
+
/** @type {ConnectorImplementation} */
|
|
107
|
+
const composedConnector = {};
|
|
108
|
+
// Add interface functions to the composed connector
|
|
109
|
+
for (const [interfaceName, interfaceFunction] of platformInterfaceMap) {
|
|
110
|
+
composedConnector[interfaceName] = interfaceFunction;
|
|
111
|
+
}
|
|
112
|
+
logger.info(`Returning interface-only connector for platform: ${platform}`);
|
|
113
|
+
return composedConnector;
|
|
114
|
+
}
|
|
115
|
+
// If connector exists but no interfaces, return original connector
|
|
116
|
+
if (connector && (!platformInterfaceMap || platformInterfaceMap.size === 0)) {
|
|
117
|
+
return connector;
|
|
118
|
+
}
|
|
119
|
+
// If both connector and interfaces exist, create a composed object
|
|
120
|
+
/** @type {ConnectorImplementation} */
|
|
121
|
+
const composedConnector = Object.create(connector);
|
|
122
|
+
// Add interface functions to the composed connector
|
|
123
|
+
for (const [interfaceName, interfaceFunction] of platformInterfaceMap) {
|
|
124
|
+
// Only add if the interface doesn't already exist in the connector
|
|
125
|
+
if (!Object.prototype.hasOwnProperty.call(connector, interfaceName)) {
|
|
126
|
+
composedConnector[interfaceName] = interfaceFunction;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return composedConnector;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the original connector without composed interfaces
|
|
133
|
+
* @param {string} platform - Platform identifier
|
|
134
|
+
* @returns {ConnectorImplementation} Original connector implementation
|
|
135
|
+
*/
|
|
136
|
+
getOriginalConnector(platform) {
|
|
137
|
+
const connector = this.connectors.get(platform);
|
|
138
|
+
if (!connector) {
|
|
139
|
+
throw new Error(`Connector not found for platform: ${platform}`);
|
|
140
|
+
}
|
|
141
|
+
return connector;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get manifest for a platform
|
|
145
|
+
* @param {string} platform - Platform identifier
|
|
146
|
+
* @param {boolean} [fallbackToDefault] - Use default manifest when platform-specific manifest is missing
|
|
147
|
+
* @returns {ConnectorManifest} Manifest configuration
|
|
148
|
+
*/
|
|
149
|
+
getManifest(platform, fallbackToDefault = false) {
|
|
150
|
+
let manifest = this.manifests.get(platform);
|
|
151
|
+
if (!manifest && fallbackToDefault) {
|
|
152
|
+
manifest = this.manifests.get('default');
|
|
153
|
+
}
|
|
154
|
+
if (!manifest) {
|
|
155
|
+
throw new Error(`Manifest not found for platform: ${platform}`);
|
|
156
|
+
}
|
|
157
|
+
return manifest;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get all registered platforms
|
|
161
|
+
* @returns {Array<string>} Array of platform names
|
|
162
|
+
*/
|
|
163
|
+
getRegisteredPlatforms() {
|
|
164
|
+
return Array.from(this.connectors.keys());
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if platform is registered
|
|
168
|
+
* @param {string} platform - Platform identifier
|
|
169
|
+
* @returns {boolean} True if platform is registered
|
|
170
|
+
*/
|
|
171
|
+
isRegistered(platform) {
|
|
172
|
+
return this.connectors.has(platform);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate that connector implements required interface
|
|
176
|
+
* @param {string} platform - Platform identifier
|
|
177
|
+
* @param {ConnectorImplementation} connector - Connector to validate
|
|
178
|
+
*/
|
|
179
|
+
validateConnectorInterface(platform, connector) {
|
|
180
|
+
const requiredMethods = [
|
|
181
|
+
'createCallLog',
|
|
182
|
+
'updateCallLog',
|
|
183
|
+
];
|
|
184
|
+
for (const method of requiredMethods) {
|
|
185
|
+
if (typeof connector[method] !== 'function') {
|
|
186
|
+
throw new Error(`Connector ${platform} missing required method: ${method}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Unregister an connector
|
|
192
|
+
* @param {string} platform - Platform identifier
|
|
193
|
+
*/
|
|
194
|
+
unregisterConnector(platform) {
|
|
195
|
+
this.connectors.delete(platform);
|
|
196
|
+
this.manifests.delete(platform);
|
|
197
|
+
this.platformInterfaces.delete(platform);
|
|
198
|
+
logger.info(`Unregistered connector: ${platform}`);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* @param {unknown} releaseNotes
|
|
202
|
+
*/
|
|
203
|
+
setReleaseNotes(releaseNotes) {
|
|
204
|
+
this.releaseNotes = releaseNotes;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* @returns {unknown}
|
|
208
|
+
*/
|
|
209
|
+
getReleaseNotes() {
|
|
210
|
+
return this.releaseNotes;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get connector capabilities summary including composed interfaces
|
|
214
|
+
* @param {string} platform - Platform identifier
|
|
215
|
+
* @returns {Promise<ConnectorCapabilities>} Connector capabilities
|
|
216
|
+
*/
|
|
217
|
+
async getConnectorCapabilities(platform) {
|
|
218
|
+
const originalConnector = this.getOriginalConnector(platform);
|
|
219
|
+
const composedConnector = this.getConnector(platform);
|
|
220
|
+
const platformInterfaceMap = this.getPlatformInterfaces(platform);
|
|
221
|
+
const capabilities = {
|
|
222
|
+
platform,
|
|
223
|
+
originalMethods: Object.keys(originalConnector),
|
|
224
|
+
composedMethods: Object.keys(composedConnector),
|
|
225
|
+
registeredInterfaces: Array.from(platformInterfaceMap.keys()),
|
|
226
|
+
authType: null
|
|
227
|
+
};
|
|
228
|
+
// Get auth type if available
|
|
229
|
+
if (typeof originalConnector.getAuthType === 'function') {
|
|
230
|
+
try {
|
|
231
|
+
capabilities.authType = await originalConnector.getAuthType();
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.error('Error getting auth type', { stack: /** @type {any} */ (error).stack });
|
|
235
|
+
capabilities.authType = 'unknown';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return capabilities;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Export singleton instance
|
|
242
|
+
const connectorRegistry = new ConnectorRegistry();
|
|
243
|
+
module.exports = connectorRegistry;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|