@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.
Files changed (286) hide show
  1. package/README.md +17 -16
  2. package/dist/connector/developerPortal.d.ts +6 -0
  3. package/{connector → dist/connector}/developerPortal.js +29 -12
  4. package/dist/connector/mock.d.ts +1 -0
  5. package/{connector → dist/connector}/mock.js +33 -17
  6. package/dist/connector/proxy/engine.d.ts +10 -0
  7. package/dist/connector/proxy/engine.js +222 -0
  8. package/dist/connector/proxy/index.d.ts +5 -0
  9. package/dist/connector/proxy/index.js +511 -0
  10. package/dist/connector/registry.d.ts +1 -0
  11. package/dist/connector/registry.js +243 -0
  12. package/dist/handlers/admin.d.ts +1 -0
  13. package/{handlers → dist/handlers}/admin.js +137 -78
  14. package/dist/handlers/appointment.d.ts +9 -0
  15. package/{handlers → dist/handlers}/appointment.js +58 -29
  16. package/dist/handlers/auth.d.ts +9 -0
  17. package/{handlers → dist/handlers}/auth.js +68 -40
  18. package/dist/handlers/calldown.d.ts +10 -0
  19. package/dist/handlers/calldown.js +134 -0
  20. package/dist/handlers/contact.d.ts +1 -0
  21. package/{handlers → dist/handlers}/contact.js +61 -39
  22. package/dist/handlers/disposition.d.ts +1 -0
  23. package/{handlers → dist/handlers}/disposition.js +20 -10
  24. package/dist/handlers/log.d.ts +1 -0
  25. package/{handlers → dist/handlers}/log.js +91 -124
  26. package/dist/handlers/managedAuth.d.ts +1 -0
  27. package/{handlers → dist/handlers}/managedAuth.js +134 -61
  28. package/dist/handlers/managedOAuth.d.ts +13 -0
  29. package/{handlers → dist/handlers}/managedOAuth.js +102 -30
  30. package/dist/handlers/plugin.d.ts +1 -0
  31. package/{handlers → dist/handlers}/plugin.js +59 -27
  32. package/dist/handlers/user.d.ts +1 -0
  33. package/{handlers → dist/handlers}/user.js +45 -27
  34. package/dist/index.d.ts +1 -0
  35. package/{index.js → dist/index.js} +538 -449
  36. package/dist/jest.config.d.ts +1 -0
  37. package/dist/jest.config.js +65 -0
  38. package/dist/lib/analytics.d.ts +4 -0
  39. package/{lib → dist/lib}/analytics.js +8 -6
  40. package/dist/lib/authSession.d.ts +5 -0
  41. package/{lib → dist/lib}/authSession.js +15 -43
  42. package/dist/lib/cacheCleanup.d.ts +4 -0
  43. package/{lib → dist/lib}/cacheCleanup.js +5 -17
  44. package/dist/lib/callLogComposer.d.ts +109 -0
  45. package/{lib → dist/lib}/callLogComposer.js +157 -197
  46. package/dist/lib/callLogLookup.d.ts +6 -0
  47. package/{lib → dist/lib}/callLogLookup.js +12 -34
  48. package/dist/lib/constants.d.ts +6 -0
  49. package/dist/lib/constants.js +9 -0
  50. package/dist/lib/debugTracer.d.ts +17 -0
  51. package/{lib → dist/lib}/debugTracer.js +7 -83
  52. package/dist/lib/encode.d.ts +3 -0
  53. package/dist/lib/encode.js +50 -0
  54. package/dist/lib/errorHandler.d.ts +7 -0
  55. package/dist/lib/errorHandler.js +161 -0
  56. package/dist/lib/generalErrorMessage.d.ts +7 -0
  57. package/{lib → dist/lib}/generalErrorMessage.js +6 -6
  58. package/dist/lib/jwt.d.ts +4 -0
  59. package/dist/lib/jwt.js +18 -0
  60. package/dist/lib/logger.d.ts +24 -0
  61. package/dist/lib/logger.js +126 -0
  62. package/dist/lib/migrateCallLogsSchema.d.ts +32 -0
  63. package/{lib → dist/lib}/migrateCallLogsSchema.js +75 -160
  64. package/dist/lib/oauth.d.ts +4 -0
  65. package/{lib → dist/lib}/oauth.js +157 -160
  66. package/dist/lib/ringcentral.d.ts +24 -0
  67. package/dist/lib/ringcentral.js +226 -0
  68. package/dist/lib/s3ErrorLogReport.d.ts +4 -0
  69. package/{lib → dist/lib}/s3ErrorLogReport.js +11 -23
  70. package/dist/lib/sharedSMSComposer.d.ts +7 -0
  71. package/{lib → dist/lib}/sharedSMSComposer.js +21 -107
  72. package/dist/lib/util.d.ts +7 -0
  73. package/{lib → dist/lib}/util.js +9 -20
  74. package/dist/mcp/lib/oauthError.d.ts +1 -0
  75. package/dist/mcp/lib/oauthError.js +25 -0
  76. package/dist/mcp/lib/validator.d.ts +1 -0
  77. package/{mcp → dist/mcp}/lib/validator.js +16 -20
  78. package/dist/mcp/lib/widgetSessionToken.d.ts +1 -0
  79. package/dist/mcp/lib/widgetSessionToken.js +46 -0
  80. package/dist/mcp/mcpHandler.d.ts +8 -0
  81. package/{mcp → dist/mcp}/mcpHandler.js +98 -88
  82. package/dist/mcp/tools/cancelAppointment.d.ts +1 -0
  83. package/{mcp → dist/mcp}/tools/cancelAppointment.js +7 -16
  84. package/dist/mcp/tools/checkAuthStatus.d.ts +1 -0
  85. package/{mcp → dist/mcp}/tools/checkAuthStatus.js +21 -14
  86. package/dist/mcp/tools/confirmAppointment.d.ts +1 -0
  87. package/{mcp → dist/mcp}/tools/confirmAppointment.js +7 -16
  88. package/dist/mcp/tools/createAppointment.d.ts +1 -0
  89. package/{mcp → dist/mcp}/tools/createAppointment.js +7 -19
  90. package/dist/mcp/tools/createCallLog.d.ts +1 -0
  91. package/{mcp → dist/mcp}/tools/createCallLog.js +18 -29
  92. package/dist/mcp/tools/createContact.d.ts +1 -0
  93. package/{mcp → dist/mcp}/tools/createContact.js +8 -20
  94. package/dist/mcp/tools/createMessageLog.d.ts +1 -0
  95. package/{mcp → dist/mcp}/tools/createMessageLog.js +14 -26
  96. package/dist/mcp/tools/doAuth.d.ts +1 -0
  97. package/{mcp → dist/mcp}/tools/doAuth.js +17 -13
  98. package/dist/mcp/tools/findContactByName.d.ts +1 -0
  99. package/{mcp → dist/mcp}/tools/findContactByName.js +9 -15
  100. package/dist/mcp/tools/findContactByPhone.d.ts +1 -0
  101. package/{mcp → dist/mcp}/tools/findContactByPhone.js +8 -15
  102. package/dist/mcp/tools/getCallLog.d.ts +1 -0
  103. package/{mcp → dist/mcp}/tools/getCallLog.js +12 -21
  104. package/dist/mcp/tools/getGoogleFilePicker.d.ts +1 -0
  105. package/{mcp → dist/mcp}/tools/getGoogleFilePicker.js +9 -18
  106. package/dist/mcp/tools/getHelp.d.ts +1 -0
  107. package/{mcp → dist/mcp}/tools/getHelp.js +5 -6
  108. package/dist/mcp/tools/getPublicConnectors.d.ts +1 -0
  109. package/{mcp → dist/mcp}/tools/getPublicConnectors.js +19 -18
  110. package/dist/mcp/tools/getSessionInfo.d.ts +1 -0
  111. package/{mcp → dist/mcp}/tools/getSessionInfo.js +10 -16
  112. package/dist/mcp/tools/index.d.ts +8 -0
  113. package/dist/mcp/tools/index.js +50 -0
  114. package/dist/mcp/tools/listAppointments.d.ts +1 -0
  115. package/{mcp → dist/mcp}/tools/listAppointments.js +7 -19
  116. package/dist/mcp/tools/logout.d.ts +1 -0
  117. package/{mcp → dist/mcp}/tools/logout.js +16 -14
  118. package/dist/mcp/tools/rcGetCallLogs.d.ts +1 -0
  119. package/{mcp → dist/mcp}/tools/rcGetCallLogs.js +10 -8
  120. package/dist/mcp/tools/updateAppointment.d.ts +1 -0
  121. package/{mcp → dist/mcp}/tools/updateAppointment.js +17 -22
  122. package/dist/mcp/tools/updateCallLog.d.ts +1 -0
  123. package/{mcp → dist/mcp}/tools/updateCallLog.js +16 -26
  124. package/dist/models/accountDataModel.d.ts +3 -0
  125. package/dist/models/accountDataModel.js +39 -0
  126. package/dist/models/adminConfigModel.d.ts +2 -0
  127. package/dist/models/adminConfigModel.js +39 -0
  128. package/dist/models/cacheModel.d.ts +2 -0
  129. package/{models → dist/models}/cacheModel.js +7 -3
  130. package/dist/models/callDownListModel.d.ts +2 -0
  131. package/{models → dist/models}/callDownListModel.js +8 -4
  132. package/dist/models/callLogModel.d.ts +2 -0
  133. package/dist/models/callLogModel.js +43 -0
  134. package/dist/models/dynamo/connectorSchema.d.ts +2 -0
  135. package/dist/models/dynamo/connectorSchema.js +141 -0
  136. package/dist/models/dynamo/lockSchema.d.ts +2 -0
  137. package/{models → dist/models}/dynamo/lockSchema.js +5 -7
  138. package/dist/models/dynamo/noteCacheSchema.d.ts +2 -0
  139. package/{models → dist/models}/dynamo/noteCacheSchema.js +4 -6
  140. package/dist/models/llmSessionModel.d.ts +2 -0
  141. package/dist/models/llmSessionModel.js +21 -0
  142. package/dist/models/messageLogModel.d.ts +2 -0
  143. package/{models → dist/models}/messageLogModel.js +8 -4
  144. package/dist/models/sequelize.d.ts +2 -0
  145. package/dist/models/sequelize.js +68 -0
  146. package/dist/models/userModel.d.ts +2 -0
  147. package/dist/models/userModel.js +49 -0
  148. package/dist/package.json +100 -0
  149. package/dist/releaseNotes.json +1222 -0
  150. package/dist/tsconfig.json +14 -0
  151. package/dist/types/admin.d.ts +141 -0
  152. package/dist/types/analytics.d.ts +14 -0
  153. package/dist/types/appointment.d.ts +50 -0
  154. package/dist/types/auth.d.ts +137 -0
  155. package/dist/types/authSession.d.ts +35 -0
  156. package/dist/types/cacheCleanup.d.ts +12 -0
  157. package/dist/types/calldown.d.ts +54 -0
  158. package/dist/types/common.d.ts +46 -0
  159. package/dist/types/connector.d.ts +165 -0
  160. package/dist/types/contact.d.ts +125 -0
  161. package/dist/types/errorHandler.d.ts +60 -0
  162. package/dist/types/index.d.ts +76 -0
  163. package/dist/types/json.d.ts +9 -0
  164. package/dist/types/jwt.d.ts +8 -0
  165. package/dist/types/logging.d.ts +224 -0
  166. package/dist/types/managedAuth.d.ts +114 -0
  167. package/dist/types/managedOAuth.d.ts +59 -0
  168. package/dist/types/manifest.d.ts +120 -0
  169. package/dist/types/migration.d.ts +15 -0
  170. package/dist/types/plugin.d.ts +74 -0
  171. package/dist/types/ringcentral.d.ts +61 -0
  172. package/dist/types/s3ErrorLogReport.d.ts +16 -0
  173. package/dist/types/sharedSMSComposer.d.ts +105 -0
  174. package/dist/types/user.d.ts +46 -0
  175. package/dist/types/util.d.ts +7 -0
  176. package/package.json +34 -6
  177. package/releaseNotes.json +8 -0
  178. package/.env.test +0 -5
  179. package/connector/proxy/engine.js +0 -165
  180. package/connector/proxy/index.js +0 -500
  181. package/connector/registry.js +0 -252
  182. package/docs/README.md +0 -50
  183. package/docs/architecture.md +0 -94
  184. package/docs/connectors.md +0 -116
  185. package/docs/handlers.md +0 -128
  186. package/docs/libraries.md +0 -98
  187. package/docs/models.md +0 -146
  188. package/docs/routes.md +0 -119
  189. package/docs/tests.md +0 -73
  190. package/handlers/calldown.js +0 -99
  191. package/jest.config.js +0 -57
  192. package/lib/constants.js +0 -9
  193. package/lib/encode.js +0 -30
  194. package/lib/errorHandler.js +0 -218
  195. package/lib/jwt.js +0 -18
  196. package/lib/logger.js +0 -190
  197. package/lib/ringcentral.js +0 -267
  198. package/mcp/README.md +0 -420
  199. package/mcp/tools/index.js +0 -51
  200. package/mcp/ui/App/App.tsx +0 -358
  201. package/mcp/ui/App/components/AuthInfoForm.tsx +0 -113
  202. package/mcp/ui/App/components/AuthSuccess.tsx +0 -22
  203. package/mcp/ui/App/components/ConnectorList.tsx +0 -82
  204. package/mcp/ui/App/components/DebugPanel.tsx +0 -43
  205. package/mcp/ui/App/components/OAuthConnect.tsx +0 -270
  206. package/mcp/ui/App/lib/callTool.ts +0 -130
  207. package/mcp/ui/App/lib/debugLog.ts +0 -41
  208. package/mcp/ui/App/lib/developerPortal.ts +0 -111
  209. package/mcp/ui/App/main.css +0 -6
  210. package/mcp/ui/App/root.tsx +0 -13
  211. package/mcp/ui/dist/index.html +0 -53
  212. package/mcp/ui/vite.config.ts +0 -16
  213. package/models/accountDataModel.js +0 -34
  214. package/models/adminConfigModel.js +0 -35
  215. package/models/callLogModel.js +0 -39
  216. package/models/dynamo/connectorSchema.js +0 -146
  217. package/models/llmSessionModel.js +0 -17
  218. package/models/sequelize.js +0 -17
  219. package/models/userModel.js +0 -45
  220. package/test/connector/developerPortal.test.js +0 -166
  221. package/test/connector/mock.test.js +0 -131
  222. package/test/connector/proxy/engine.test.js +0 -211
  223. package/test/connector/proxy/index.test.js +0 -525
  224. package/test/connector/proxy/sample.json +0 -162
  225. package/test/connector/registry.test.js +0 -416
  226. package/test/handlers/admin.test.js +0 -960
  227. package/test/handlers/appointment.test.js +0 -260
  228. package/test/handlers/auth.test.js +0 -1096
  229. package/test/handlers/calldown.test.js +0 -310
  230. package/test/handlers/contact.test.js +0 -1014
  231. package/test/handlers/disposition.test.js +0 -396
  232. package/test/handlers/log.test.js +0 -1847
  233. package/test/handlers/managedAuth.test.js +0 -458
  234. package/test/handlers/managedOAuth.test.js +0 -262
  235. package/test/handlers/plugin.test.js +0 -429
  236. package/test/handlers/user.test.js +0 -381
  237. package/test/index.test.js +0 -301
  238. package/test/lib/analytics.test.js +0 -146
  239. package/test/lib/authSession.test.js +0 -173
  240. package/test/lib/cacheCleanup.test.js +0 -127
  241. package/test/lib/callLogComposer.test.js +0 -1231
  242. package/test/lib/debugTracer.test.js +0 -328
  243. package/test/lib/encode.test.js +0 -59
  244. package/test/lib/errorHandler.test.js +0 -246
  245. package/test/lib/generalErrorMessage.test.js +0 -82
  246. package/test/lib/jwt.test.js +0 -176
  247. package/test/lib/logger.test.js +0 -206
  248. package/test/lib/oauth.test.js +0 -359
  249. package/test/lib/ringcentral.test.js +0 -467
  250. package/test/lib/s3ErrorLogReport.test.js +0 -187
  251. package/test/lib/sharedSMSComposer.test.js +0 -1084
  252. package/test/lib/util.test.js +0 -329
  253. package/test/mcp/mcpHandler.test.js +0 -73
  254. package/test/mcp/mcpHandlerMore.test.js +0 -384
  255. package/test/mcp/tools/appointmentTools.test.js +0 -362
  256. package/test/mcp/tools/checkAuthStatus.test.js +0 -83
  257. package/test/mcp/tools/createCallLog.test.js +0 -436
  258. package/test/mcp/tools/createContact.test.js +0 -58
  259. package/test/mcp/tools/createMessageLog.test.js +0 -595
  260. package/test/mcp/tools/doAuth.test.js +0 -113
  261. package/test/mcp/tools/findContactByName.test.js +0 -275
  262. package/test/mcp/tools/findContactByPhone.test.js +0 -296
  263. package/test/mcp/tools/getCallLog.test.js +0 -298
  264. package/test/mcp/tools/getGoogleFilePicker.test.js +0 -281
  265. package/test/mcp/tools/getPublicConnectors.test.js +0 -107
  266. package/test/mcp/tools/getSessionInfo.test.js +0 -127
  267. package/test/mcp/tools/logout.test.js +0 -233
  268. package/test/mcp/tools/rcGetCallLogs.test.js +0 -56
  269. package/test/mcp/tools/updateCallLog.test.js +0 -360
  270. package/test/models/accountDataModel.test.js +0 -98
  271. package/test/models/callDownListModel.test.js +0 -125
  272. package/test/models/dynamo/connectorSchema.test.js +0 -189
  273. package/test/models/dynamo/lockSchema.test.js +0 -37
  274. package/test/models/dynamo/noteCacheSchema.test.js +0 -45
  275. package/test/models/llmSessionModel.test.js +0 -91
  276. package/test/models/models.test.js +0 -660
  277. package/test/routes/calldownRoutes.test.js +0 -224
  278. package/test/routes/coreRouterBroadRoutes.test.js +0 -855
  279. package/test/routes/dispositionRoutes.test.js +0 -192
  280. package/test/routes/managedAuthRoutes.test.js +0 -386
  281. package/test/routes/pluginRoutes.test.js +0 -262
  282. package/test/setup.js +0 -178
  283. /package/{mcp → dist/mcp}/ui/index.html +0 -0
  284. /package/{mcp → dist/mcp}/ui/package-lock.json +0 -0
  285. /package/{mcp → dist/mcp}/ui/package.json +0 -0
  286. /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 {};