@app-connect/core 1.7.36 → 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 (287) 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} +548 -450
  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/dist/lib/migrateCallLogsSchema.js +339 -0
  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 +13 -1
  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/migrateCallLogsSchema.js +0 -237
  198. package/lib/ringcentral.js +0 -267
  199. package/mcp/README.md +0 -420
  200. package/mcp/tools/index.js +0 -51
  201. package/mcp/ui/App/App.tsx +0 -358
  202. package/mcp/ui/App/components/AuthInfoForm.tsx +0 -113
  203. package/mcp/ui/App/components/AuthSuccess.tsx +0 -22
  204. package/mcp/ui/App/components/ConnectorList.tsx +0 -82
  205. package/mcp/ui/App/components/DebugPanel.tsx +0 -43
  206. package/mcp/ui/App/components/OAuthConnect.tsx +0 -270
  207. package/mcp/ui/App/lib/callTool.ts +0 -130
  208. package/mcp/ui/App/lib/debugLog.ts +0 -41
  209. package/mcp/ui/App/lib/developerPortal.ts +0 -111
  210. package/mcp/ui/App/main.css +0 -6
  211. package/mcp/ui/App/root.tsx +0 -13
  212. package/mcp/ui/dist/index.html +0 -53
  213. package/mcp/ui/vite.config.ts +0 -16
  214. package/models/accountDataModel.js +0 -34
  215. package/models/adminConfigModel.js +0 -35
  216. package/models/callLogModel.js +0 -39
  217. package/models/dynamo/connectorSchema.js +0 -146
  218. package/models/llmSessionModel.js +0 -17
  219. package/models/sequelize.js +0 -17
  220. package/models/userModel.js +0 -45
  221. package/test/connector/developerPortal.test.js +0 -166
  222. package/test/connector/mock.test.js +0 -131
  223. package/test/connector/proxy/engine.test.js +0 -211
  224. package/test/connector/proxy/index.test.js +0 -525
  225. package/test/connector/proxy/sample.json +0 -162
  226. package/test/connector/registry.test.js +0 -416
  227. package/test/handlers/admin.test.js +0 -960
  228. package/test/handlers/appointment.test.js +0 -260
  229. package/test/handlers/auth.test.js +0 -1096
  230. package/test/handlers/calldown.test.js +0 -310
  231. package/test/handlers/contact.test.js +0 -1014
  232. package/test/handlers/disposition.test.js +0 -396
  233. package/test/handlers/log.test.js +0 -1847
  234. package/test/handlers/managedAuth.test.js +0 -458
  235. package/test/handlers/managedOAuth.test.js +0 -262
  236. package/test/handlers/plugin.test.js +0 -429
  237. package/test/handlers/user.test.js +0 -381
  238. package/test/index.test.js +0 -301
  239. package/test/lib/analytics.test.js +0 -146
  240. package/test/lib/authSession.test.js +0 -173
  241. package/test/lib/cacheCleanup.test.js +0 -127
  242. package/test/lib/callLogComposer.test.js +0 -1231
  243. package/test/lib/debugTracer.test.js +0 -328
  244. package/test/lib/encode.test.js +0 -59
  245. package/test/lib/errorHandler.test.js +0 -246
  246. package/test/lib/generalErrorMessage.test.js +0 -82
  247. package/test/lib/jwt.test.js +0 -176
  248. package/test/lib/logger.test.js +0 -206
  249. package/test/lib/oauth.test.js +0 -359
  250. package/test/lib/ringcentral.test.js +0 -467
  251. package/test/lib/s3ErrorLogReport.test.js +0 -187
  252. package/test/lib/sharedSMSComposer.test.js +0 -1084
  253. package/test/lib/util.test.js +0 -329
  254. package/test/mcp/mcpHandler.test.js +0 -73
  255. package/test/mcp/mcpHandlerMore.test.js +0 -384
  256. package/test/mcp/tools/appointmentTools.test.js +0 -362
  257. package/test/mcp/tools/checkAuthStatus.test.js +0 -83
  258. package/test/mcp/tools/createCallLog.test.js +0 -436
  259. package/test/mcp/tools/createContact.test.js +0 -58
  260. package/test/mcp/tools/createMessageLog.test.js +0 -595
  261. package/test/mcp/tools/doAuth.test.js +0 -113
  262. package/test/mcp/tools/findContactByName.test.js +0 -275
  263. package/test/mcp/tools/findContactByPhone.test.js +0 -296
  264. package/test/mcp/tools/getCallLog.test.js +0 -298
  265. package/test/mcp/tools/getGoogleFilePicker.test.js +0 -281
  266. package/test/mcp/tools/getPublicConnectors.test.js +0 -107
  267. package/test/mcp/tools/getSessionInfo.test.js +0 -127
  268. package/test/mcp/tools/logout.test.js +0 -233
  269. package/test/mcp/tools/rcGetCallLogs.test.js +0 -56
  270. package/test/mcp/tools/updateCallLog.test.js +0 -360
  271. package/test/models/accountDataModel.test.js +0 -98
  272. package/test/models/callDownListModel.test.js +0 -125
  273. package/test/models/dynamo/connectorSchema.test.js +0 -189
  274. package/test/models/dynamo/lockSchema.test.js +0 -37
  275. package/test/models/dynamo/noteCacheSchema.test.js +0 -45
  276. package/test/models/llmSessionModel.test.js +0 -91
  277. package/test/models/models.test.js +0 -660
  278. package/test/routes/calldownRoutes.test.js +0 -224
  279. package/test/routes/coreRouterBroadRoutes.test.js +0 -855
  280. package/test/routes/dispositionRoutes.test.js +0 -192
  281. package/test/routes/managedAuthRoutes.test.js +0 -386
  282. package/test/routes/pluginRoutes.test.js +0 -262
  283. package/test/setup.js +0 -178
  284. /package/{mcp → dist/mcp}/ui/index.html +0 -0
  285. /package/{mcp → dist/mcp}/ui/package-lock.json +0 -0
  286. /package/{mcp → dist/mcp}/ui/package.json +0 -0
  287. /package/{mcp → dist/mcp}/ui/tsconfig.json +0 -0
@@ -1,13 +1,14 @@
1
- const jwt = require('../../lib/jwt');
2
- const connectorRegistry = require('../../connector/registry');
3
- const appointmentCore = require('../../handlers/appointment');
4
-
1
+ "use strict";
2
+ // @ts-check
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const jwt = /** @type {any} */ (require('../../lib/jwt'));
5
+ const connectorRegistry = /** @type {any} */ (require('../../connector/registry'));
6
+ const appointmentCore = /** @type {any} */ (require('../../handlers/appointment'));
5
7
  /**
6
8
  * MCP Tool: Update Appointment
7
9
  *
8
10
  * Updates (reschedules or edits) an existing appointment/event in the CRM platform.
9
11
  */
10
-
11
12
  const toolDefinition = {
12
13
  name: 'updateAppointment',
13
14
  description: '⚠️ REQUIRES CRM CONNECTION. | Update or reschedule an existing appointment or event in the CRM platform. Provide only the fields you want to change alongside the appointmentId.',
@@ -66,7 +67,6 @@ const toolDefinition = {
66
67
  destructiveHint: false
67
68
  }
68
69
  };
69
-
70
70
  /**
71
71
  * Execute the updateAppointment tool
72
72
  * @param {Object} args
@@ -77,54 +77,50 @@ const toolDefinition = {
77
77
  * @param {string} [args.startTimeUtc] - New ISO 8601 UTC start time
78
78
  * @param {number} [args.durationMinutes] - New duration in minutes
79
79
  * @param {Array} [args.contacts] - Updated attendee contact IDs
80
- * @returns {Object} Result with updated appointment data
80
+ * @returns {Promise<any>} Result with updated appointment data
81
81
  */
82
82
  async function execute(args) {
83
83
  try {
84
84
  const { jwtToken, appointmentId, title, summary, startTimeUtc, durationMinutes, contacts } = args;
85
-
86
85
  if (!jwtToken) {
87
86
  throw new Error('Please go to Settings and authorize CRM platform');
88
87
  }
89
-
90
88
  if (!appointmentId) {
91
89
  throw new Error('appointmentId is required');
92
90
  }
93
-
94
91
  const decodedToken = jwt.decodeJwt(jwtToken);
95
92
  if (!decodedToken) {
96
93
  throw new Error('Invalid JWT token');
97
94
  }
98
95
  const { id: userId, platform } = decodedToken;
99
-
100
96
  if (!userId) {
101
97
  throw new Error('Invalid JWT token: userId not found');
102
98
  }
103
-
104
99
  const platformModule = connectorRegistry.getConnector(platform);
105
100
  if (!platformModule) {
106
101
  throw new Error(`Platform connector not found for: ${platform}`);
107
102
  }
108
-
109
103
  if (!platformModule.updateAppointment) {
110
104
  throw new Error(`updateAppointment is not implemented for platform: ${platform}`);
111
105
  }
112
-
113
106
  // Build the patch body from only the fields the caller supplied
114
107
  const patchBody = {};
115
- if (title !== undefined) patchBody.title = title;
116
- if (summary !== undefined) patchBody.summary = summary;
117
- if (startTimeUtc !== undefined) patchBody.startTimeUtc = startTimeUtc;
118
- if (durationMinutes !== undefined) patchBody.durationMinutes = Number(durationMinutes);
119
- if (contacts !== undefined) patchBody.contacts = contacts;
120
-
108
+ if (title !== undefined)
109
+ patchBody.title = title;
110
+ if (summary !== undefined)
111
+ patchBody.summary = summary;
112
+ if (startTimeUtc !== undefined)
113
+ patchBody.startTimeUtc = startTimeUtc;
114
+ if (durationMinutes !== undefined)
115
+ patchBody.durationMinutes = Number(durationMinutes);
116
+ if (contacts !== undefined)
117
+ patchBody.contacts = contacts;
121
118
  const { successful, appointment, returnMessage } = await appointmentCore.updateAppointment({
122
119
  platform,
123
120
  userId,
124
121
  appointmentId,
125
122
  patchBody
126
123
  });
127
-
128
124
  if (successful) {
129
125
  return {
130
126
  success: true,
@@ -149,6 +145,5 @@ async function execute(args) {
149
145
  };
150
146
  }
151
147
  }
152
-
153
148
  exports.definition = toolDefinition;
154
149
  exports.execute = execute;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,14 +1,15 @@
1
- const jwt = require('../../lib/jwt');
2
- const connectorRegistry = require('../../connector/registry');
3
- const logCore = require('../../handlers/log');
4
- const util = require('../../lib/util');
5
-
1
+ "use strict";
2
+ // @ts-check
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const jwt = /** @type {any} */ (require('../../lib/jwt'));
5
+ const connectorRegistry = /** @type {any} */ (require('../../connector/registry'));
6
+ const logCore = /** @type {any} */ (require('../../handlers/log'));
7
+ const util = /** @type {any} */ (require('../../lib/util'));
6
8
  /**
7
9
  * MCP Tool: Update Call Log
8
- *
10
+ *
9
11
  * This tool updates an existing call log in the CRM platform.
10
12
  */
11
-
12
13
  const toolDefinition = {
13
14
  name: 'updateCallLog',
14
15
  description: '⚠️ REQUIRES AUTHENTICATION: User must first authenticate using the "auth" tool to obtain a JWT token before using this tool. | Update an existing call log in the CRM platform. Returns the updated log ID if successful.',
@@ -50,55 +51,46 @@ const toolDefinition = {
50
51
  required: ['jwtToken', 'incomingData']
51
52
  }
52
53
  };
53
-
54
54
  /**
55
55
  * Execute the updateCallLog tool
56
56
  * @param {Object} args - The tool arguments
57
57
  * @param {string} args.jwtToken - JWT token with user and platform info
58
58
  * @param {Object} args.incomingData - Call log update data
59
- * @returns {Object} Result object with updated log ID
59
+ * @returns {Promise<any>} Result object with updated log ID
60
60
  */
61
61
  async function execute(args) {
62
62
  try {
63
63
  const { jwtToken, incomingData } = args;
64
-
65
64
  // Decode JWT to get userId and platform
66
65
  const decodedToken = jwt.decodeJwt(jwtToken);
67
66
  if (!decodedToken) {
68
67
  throw new Error('Invalid JWT token');
69
68
  }
70
69
  const { id: userId, platform } = decodedToken;
71
-
72
70
  if (!userId) {
73
71
  throw new Error('Invalid JWT token: userId not found');
74
72
  }
75
-
76
73
  // Get the platform connector module
77
74
  const platformModule = connectorRegistry.getConnector(platform);
78
-
79
75
  if (!platformModule) {
80
76
  throw new Error(`Platform connector not found for: ${platform}`);
81
77
  }
82
-
83
78
  // Check if updateCallLog is implemented
84
79
  if (!platformModule.updateCallLog) {
85
80
  throw new Error(`updateCallLog is not implemented for platform: ${platform}`);
86
81
  }
87
-
88
82
  // Calculate hashed account ID
89
- const hashedAccountId = incomingData.accountId
90
- ? util.getHashValue(incomingData.accountId, process.env.HASH_KEY)
83
+ const hashedAccountId = incomingData.accountId
84
+ ? util.getHashValue(incomingData.accountId, process.env.HASH_KEY)
91
85
  : undefined;
92
-
93
86
  // Call the updateCallLog method
94
- const { successful, logId, updatedNote, returnMessage } = await logCore.updateCallLog({
95
- platform,
96
- userId,
97
- incomingData,
87
+ const { successful, logId, updatedNote, returnMessage } = await logCore.updateCallLog({
88
+ platform,
89
+ userId,
90
+ incomingData,
98
91
  hashedAccountId,
99
- isFromSSCL: false
92
+ isFromSSCL: false
100
93
  });
101
-
102
94
  if (successful) {
103
95
  return {
104
96
  success: true,
@@ -124,7 +116,5 @@ async function execute(args) {
124
116
  };
125
117
  }
126
118
  }
127
-
128
119
  exports.definition = toolDefinition;
129
120
  exports.execute = execute;
130
-
@@ -0,0 +1,3 @@
1
+ declare const AccountDataModel: any;
2
+ declare function getOrRefreshAccountData({ rcAccountId, platformName, dataKey, forceRefresh, fetchFn }: any): Promise<any>;
3
+ export { AccountDataModel, getOrRefreshAccountData };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountDataModel = void 0;
4
+ exports.getOrRefreshAccountData = getOrRefreshAccountData;
5
+ const Sequelize = require('sequelize');
6
+ const { sequelize: rawSequelize } = require('./sequelize');
7
+ const sequelize = rawSequelize;
8
+ // Model for account data with composite primary key
9
+ const AccountDataModel = sequelize.define('accountData', {
10
+ rcAccountId: {
11
+ type: Sequelize.STRING,
12
+ primaryKey: true,
13
+ },
14
+ platformName: {
15
+ type: Sequelize.STRING,
16
+ primaryKey: true,
17
+ },
18
+ dataKey: {
19
+ type: Sequelize.STRING,
20
+ primaryKey: true,
21
+ },
22
+ data: {
23
+ type: Sequelize.JSON,
24
+ }
25
+ });
26
+ exports.AccountDataModel = AccountDataModel;
27
+ async function getOrRefreshAccountData({ rcAccountId, platformName, dataKey, forceRefresh, fetchFn }) {
28
+ const existing = await AccountDataModel.findOne({ where: { rcAccountId, platformName, dataKey } });
29
+ if (existing && !forceRefresh)
30
+ return existing.data;
31
+ const fresh = await fetchFn();
32
+ if (existing) {
33
+ await existing.update({ data: fresh });
34
+ }
35
+ else {
36
+ await AccountDataModel.create({ rcAccountId, platformName, dataKey, data: fresh });
37
+ }
38
+ return fresh;
39
+ }
@@ -0,0 +1,2 @@
1
+ declare const AdminConfigModel: any;
2
+ export { AdminConfigModel };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminConfigModel = void 0;
4
+ const Sequelize = require('sequelize');
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
7
+ // Model for Admin data
8
+ const AdminConfigModel = sequelize.define('adminConfigs', {
9
+ // hashed rc account ID
10
+ id: {
11
+ type: Sequelize.STRING,
12
+ primaryKey: true,
13
+ },
14
+ userSettings: {
15
+ type: Sequelize.JSON
16
+ },
17
+ // Obsolete
18
+ customAdapter: {
19
+ type: Sequelize.JSON
20
+ },
21
+ adminAccessToken: {
22
+ type: Sequelize.STRING(512),
23
+ },
24
+ adminRefreshToken: {
25
+ type: Sequelize.STRING(512),
26
+ },
27
+ adminTokenExpiry: {
28
+ type: Sequelize.DATE
29
+ },
30
+ // Array of:
31
+ // {
32
+ // crmUserId: string,
33
+ // rcExtensionId: array of strings
34
+ // }
35
+ userMappings: {
36
+ type: Sequelize.JSON
37
+ }
38
+ });
39
+ exports.AdminConfigModel = AdminConfigModel;
@@ -0,0 +1,2 @@
1
+ declare const CacheModel: any;
2
+ export { CacheModel };
@@ -1,8 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheModel = void 0;
1
4
  const Sequelize = require('sequelize');
2
- const { sequelize } = require('./sequelize');
3
-
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
4
7
  // Model for cache data
5
- exports.CacheModel = sequelize.define('cache', {
8
+ const CacheModel = sequelize.define('cache', {
6
9
  // id = {userId}-{cacheKey}
7
10
  id: {
8
11
  type: Sequelize.STRING,
@@ -28,3 +31,4 @@ exports.CacheModel = sequelize.define('cache', {
28
31
  { fields: ['expiry'] }
29
32
  ]
30
33
  });
34
+ exports.CacheModel = CacheModel;
@@ -0,0 +1,2 @@
1
+ declare const CallDownListModel: any;
2
+ export { CallDownListModel };
@@ -1,7 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CallDownListModel = void 0;
1
4
  const Sequelize = require('sequelize');
2
- const { sequelize } = require('./sequelize');
3
-
4
- exports.CallDownListModel = sequelize.define('callDownLists', {
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
7
+ const CallDownListModel = sequelize.define('callDownLists', {
5
8
  id: {
6
9
  type: Sequelize.STRING,
7
10
  primaryKey: true,
@@ -32,4 +35,5 @@ exports.CallDownListModel = sequelize.define('callDownLists', {
32
35
  { fields: ['scheduledAt'] },
33
36
  { fields: ['userId', 'status'] }
34
37
  ]
35
- });
38
+ });
39
+ exports.CallDownListModel = CallDownListModel;
@@ -0,0 +1,2 @@
1
+ declare const CallLogModel: any;
2
+ export { CallLogModel };
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CallLogModel = void 0;
4
+ const Sequelize = require('sequelize');
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
7
+ // Model for User data
8
+ const CallLogModel = sequelize.define('callLogs', {
9
+ // callId
10
+ id: {
11
+ type: Sequelize.STRING,
12
+ primaryKey: true,
13
+ },
14
+ sessionId: {
15
+ type: Sequelize.STRING,
16
+ primaryKey: true,
17
+ },
18
+ extensionNumber: {
19
+ type: Sequelize.STRING,
20
+ primaryKey: true,
21
+ allowNull: false,
22
+ defaultValue: '',
23
+ },
24
+ hashedExtensionId: {
25
+ type: Sequelize.STRING,
26
+ primaryKey: true,
27
+ allowNull: false,
28
+ defaultValue: '',
29
+ },
30
+ platform: {
31
+ type: Sequelize.STRING,
32
+ },
33
+ thirdPartyLogId: {
34
+ type: Sequelize.STRING,
35
+ },
36
+ userId: {
37
+ type: Sequelize.STRING,
38
+ },
39
+ contactId: {
40
+ type: Sequelize.STRING,
41
+ }
42
+ });
43
+ exports.CallLogModel = CallLogModel;
@@ -0,0 +1,2 @@
1
+ declare const Connector: any;
2
+ export { Connector };
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Connector = void 0;
4
+ const dynamoose = require('dynamoose');
5
+ const crypto = require('crypto');
6
+ const CONNECTOR_STATUS = {
7
+ PRIVATE: 'private',
8
+ UNDER_REVIEW: 'under_review',
9
+ APPROVED: 'approved',
10
+ REJECTED: 'rejected',
11
+ };
12
+ const connectorSchema = new dynamoose.Schema({
13
+ accountId: {
14
+ type: String,
15
+ hashKey: true,
16
+ },
17
+ id: {
18
+ type: String,
19
+ rangeKey: true,
20
+ },
21
+ // Reference to original connector (for partition records)
22
+ originalAccountId: {
23
+ type: String,
24
+ required: false, // Only set for partition records (under_review, approved)
25
+ },
26
+ // Basic Information
27
+ name: {
28
+ type: String,
29
+ required: true,
30
+ },
31
+ displayName: String,
32
+ description: String,
33
+ iconUrl: String,
34
+ // Status and Workflow
35
+ status: {
36
+ type: String,
37
+ required: true,
38
+ enum: Object.values(CONNECTOR_STATUS),
39
+ default: CONNECTOR_STATUS.PRIVATE,
40
+ index: {
41
+ name: 'statusIdIndex',
42
+ global: true,
43
+ rangeKey: 'id',
44
+ project: ['accountId', 'name', 'displayName', 'developer', 'originalAccountId'],
45
+ },
46
+ },
47
+ creatorId: String,
48
+ // Developer Information
49
+ developer: {
50
+ type: Object,
51
+ schema: {
52
+ name: String,
53
+ websiteUrl: String,
54
+ supportUrl: String,
55
+ },
56
+ },
57
+ // Manifest Management
58
+ manifest: {
59
+ type: Object,
60
+ required: true,
61
+ },
62
+ proxyConfig: {
63
+ type: Object,
64
+ required: false,
65
+ },
66
+ proxyId: {
67
+ type: String,
68
+ index: {
69
+ name: 'proxyIdIndex',
70
+ global: true,
71
+ project: ['id', 'accountId', 'creatorId', 'name', 'displayName', 'status', 'developer', 'originalAccountId', 'proxyConfig'],
72
+ }
73
+ },
74
+ // Review and Approval
75
+ submittedAt: Number,
76
+ reviewedBy: String,
77
+ reviewedAt: Number,
78
+ reviewNotes: String,
79
+ rejectionReason: String,
80
+ demoAccounts: String,
81
+ // Usage and Analytics
82
+ usageCount: {
83
+ type: Number,
84
+ default: 0,
85
+ },
86
+ lastUsedAt: Number,
87
+ allowedAccounts: {
88
+ type: Array,
89
+ schema: [String],
90
+ },
91
+ encodedSecretKey: String,
92
+ }, {
93
+ saveUnknown: ['manifest.**', 'proxyConfig.**'],
94
+ timestamps: true,
95
+ });
96
+ const tableOptions = {
97
+ prefix: process.env.DEVELOPER_DYNAMODB_TABLE_PREFIX,
98
+ };
99
+ if (process.env.NODE_ENV === 'production') {
100
+ tableOptions.create = false;
101
+ tableOptions.waitForActive = false;
102
+ }
103
+ const Connector = dynamoose.model('connectors', connectorSchema, tableOptions);
104
+ exports.Connector = Connector;
105
+ function getDeveloperCipherKey() {
106
+ if (!process.env.DEVELOPER_APP_SERVER_SECRET_KEY) {
107
+ throw new Error('DEVELOPER_APP_SERVER_SECRET_KEY is not defined');
108
+ }
109
+ if (process.env.DEVELOPER_APP_SERVER_SECRET_KEY.length < 32) {
110
+ // pad secret key with spaces if it is less than 32 bytes
111
+ return process.env.DEVELOPER_APP_SERVER_SECRET_KEY.padEnd(32, ' ');
112
+ }
113
+ if (process.env.DEVELOPER_APP_SERVER_SECRET_KEY.length > 32) {
114
+ // truncate secret key if it is more than 32 bytes
115
+ return process.env.DEVELOPER_APP_SERVER_SECRET_KEY.slice(0, 32);
116
+ }
117
+ return process.env.DEVELOPER_APP_SERVER_SECRET_KEY;
118
+ }
119
+ function decode(encryptedData) {
120
+ const decipher = crypto.createDecipheriv('aes-256-cbc', getDeveloperCipherKey(), Buffer.alloc(16, 0));
121
+ return decipher.update(encryptedData, 'hex', 'utf8') + decipher.final('utf8');
122
+ }
123
+ // ADD static method to get connector by proxyId
124
+ const ConnectorWithProxyConfig = Connector;
125
+ ConnectorWithProxyConfig.getProxyConfig = async (proxyId) => {
126
+ const connectors = await Connector
127
+ .query('proxyId')
128
+ .eq(proxyId)
129
+ .using('proxyIdIndex')
130
+ .exec();
131
+ if (connectors.length > 0) {
132
+ const proxyConfig = connectors[0].proxyConfig;
133
+ const encodedSecretKey = connectors[0].encodedSecretKey;
134
+ const secretKey = encodedSecretKey ? decode(encodedSecretKey) : null;
135
+ if (secretKey) {
136
+ proxyConfig.secretKey = secretKey;
137
+ }
138
+ return proxyConfig;
139
+ }
140
+ return null;
141
+ };
@@ -0,0 +1,2 @@
1
+ declare const Lock: any;
2
+ export { Lock };
@@ -1,25 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Lock = void 0;
1
4
  const dynamoose = require('dynamoose');
2
-
3
5
  const lockSchema = new dynamoose.Schema({
4
6
  userId: {
5
7
  type: String,
6
8
  hashKey: true
7
9
  },
8
10
  ttl: {
9
- type: Number
11
+ type: Number
10
12
  }
11
13
  });
12
-
13
14
  const tableOptions = {
14
15
  prefix: process.env.DYNAMODB_TABLE_PREFIX,
15
16
  expires: 60 // 60 seconds
16
17
  };
17
-
18
18
  if (process.env.NODE_ENV === 'production') {
19
19
  tableOptions.create = false;
20
20
  tableOptions.waitForActive = false;
21
21
  }
22
-
23
22
  const Lock = dynamoose.model('-token-refresh-lock', lockSchema, tableOptions);
24
-
25
- exports.Lock = Lock;
23
+ exports.Lock = Lock;
@@ -0,0 +1,2 @@
1
+ declare const NoteCache: any;
2
+ export { NoteCache };
@@ -1,5 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoteCache = void 0;
1
4
  const dynamoose = require('dynamoose');
2
-
3
5
  const noteCacheSchema = new dynamoose.Schema({
4
6
  sessionId: {
5
7
  type: String,
@@ -14,17 +16,13 @@ const noteCacheSchema = new dynamoose.Schema({
14
16
  required: true,
15
17
  },
16
18
  });
17
-
18
19
  const tableOptions = {
19
20
  prefix: process.env.DYNAMODB_TABLE_PREFIX,
20
21
  expires: 60 // 60 seconds
21
22
  };
22
-
23
23
  if (process.env.NODE_ENV === 'production') {
24
24
  tableOptions.create = false;
25
25
  tableOptions.waitForActive = false;
26
26
  }
27
-
28
27
  const NoteCache = dynamoose.model('-note-cache', noteCacheSchema, tableOptions);
29
-
30
- exports.NoteCache = NoteCache;
28
+ exports.NoteCache = NoteCache;
@@ -0,0 +1,2 @@
1
+ declare const LlmSessionModel: any;
2
+ export { LlmSessionModel };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LlmSessionModel = void 0;
4
+ const Sequelize = require('sequelize');
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
7
+ // Model for Admin data
8
+ const LlmSessionModel = sequelize.define('llmSessions', {
9
+ // LLM session ID
10
+ id: {
11
+ type: Sequelize.STRING,
12
+ primaryKey: true,
13
+ },
14
+ jwtToken: {
15
+ type: Sequelize.STRING,
16
+ },
17
+ expiry: {
18
+ type: Sequelize.DATE
19
+ }
20
+ });
21
+ exports.LlmSessionModel = LlmSessionModel;
@@ -0,0 +1,2 @@
1
+ declare const MessageLogModel: any;
2
+ export { MessageLogModel };
@@ -1,8 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageLogModel = void 0;
1
4
  const Sequelize = require('sequelize');
2
- const { sequelize } = require('./sequelize');
3
-
5
+ const { sequelize: rawSequelize } = require('./sequelize');
6
+ const sequelize = rawSequelize;
4
7
  // Model for User data
5
- exports.MessageLogModel = sequelize.define('messageLogs', {
8
+ const MessageLogModel = sequelize.define('messageLogs', {
6
9
  id: {
7
10
  type: Sequelize.STRING,
8
11
  primaryKey: true,
@@ -13,7 +16,7 @@ exports.MessageLogModel = sequelize.define('messageLogs', {
13
16
  conversationId: {
14
17
  type: Sequelize.STRING,
15
18
  },
16
- conversationLogId:{
19
+ conversationLogId: {
17
20
  type: Sequelize.STRING,
18
21
  },
19
22
  thirdPartyLogId: {
@@ -23,3 +26,4 @@ exports.MessageLogModel = sequelize.define('messageLogs', {
23
26
  type: Sequelize.STRING,
24
27
  }
25
28
  });
29
+ exports.MessageLogModel = MessageLogModel;
@@ -0,0 +1,2 @@
1
+ declare const sequelize: any;
2
+ export { sequelize };