@app-connect/core 1.7.25 → 1.7.26
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/.env.test +5 -5
- package/README.md +441 -441
- package/connector/developerPortal.js +31 -31
- package/connector/mock.js +84 -77
- package/connector/proxy/engine.js +164 -164
- package/connector/proxy/index.js +500 -500
- package/connector/registry.js +252 -252
- package/docs/README.md +50 -50
- package/docs/architecture.md +93 -93
- package/docs/connectors.md +116 -116
- package/docs/handlers.md +125 -125
- package/docs/libraries.md +101 -101
- package/docs/models.md +144 -144
- package/docs/routes.md +115 -115
- package/docs/tests.md +73 -73
- package/handlers/admin.js +523 -523
- package/handlers/appointment.js +193 -0
- package/handlers/auth.js +296 -296
- package/handlers/calldown.js +99 -99
- package/handlers/contact.js +280 -280
- package/handlers/disposition.js +82 -80
- package/handlers/log.js +984 -973
- package/handlers/managedAuth.js +446 -446
- package/handlers/plugin.js +208 -208
- package/handlers/user.js +142 -142
- package/index.js +3140 -2652
- package/jest.config.js +56 -56
- package/lib/analytics.js +54 -54
- package/lib/authSession.js +109 -109
- package/lib/cacheCleanup.js +21 -0
- package/lib/callLogComposer.js +898 -898
- package/lib/callLogLookup.js +34 -0
- package/lib/constants.js +8 -8
- package/lib/debugTracer.js +177 -177
- package/lib/encode.js +30 -30
- package/lib/errorHandler.js +218 -206
- package/lib/generalErrorMessage.js +41 -41
- package/lib/jwt.js +18 -18
- package/lib/logger.js +190 -190
- package/lib/migrateCallLogsSchema.js +116 -0
- package/lib/ringcentral.js +266 -266
- package/lib/s3ErrorLogReport.js +65 -65
- package/lib/sharedSMSComposer.js +471 -471
- package/lib/util.js +67 -67
- package/mcp/README.md +412 -395
- package/mcp/lib/validator.js +91 -91
- package/mcp/mcpHandler.js +425 -425
- package/mcp/tools/cancelAppointment.js +101 -0
- package/mcp/tools/checkAuthStatus.js +105 -105
- package/mcp/tools/confirmAppointment.js +101 -0
- package/mcp/tools/createAppointment.js +157 -0
- package/mcp/tools/createCallLog.js +327 -316
- package/mcp/tools/createContact.js +117 -117
- package/mcp/tools/createMessageLog.js +287 -287
- package/mcp/tools/doAuth.js +60 -60
- package/mcp/tools/findContactByName.js +93 -93
- package/mcp/tools/findContactByPhone.js +101 -101
- package/mcp/tools/getCallLog.js +111 -102
- package/mcp/tools/getGoogleFilePicker.js +99 -99
- package/mcp/tools/getHelp.js +43 -43
- package/mcp/tools/getPublicConnectors.js +94 -94
- package/mcp/tools/getSessionInfo.js +90 -90
- package/mcp/tools/index.js +51 -41
- package/mcp/tools/listAppointments.js +163 -0
- package/mcp/tools/logout.js +96 -96
- package/mcp/tools/rcGetCallLogs.js +65 -65
- package/mcp/tools/updateAppointment.js +154 -0
- package/mcp/tools/updateCallLog.js +130 -126
- package/mcp/ui/App/App.tsx +358 -358
- package/mcp/ui/App/components/AuthInfoForm.tsx +113 -113
- package/mcp/ui/App/components/AuthSuccess.tsx +22 -22
- package/mcp/ui/App/components/ConnectorList.tsx +82 -82
- package/mcp/ui/App/components/DebugPanel.tsx +43 -43
- package/mcp/ui/App/components/OAuthConnect.tsx +270 -270
- package/mcp/ui/App/lib/callTool.ts +130 -130
- package/mcp/ui/App/lib/debugLog.ts +41 -41
- package/mcp/ui/App/lib/developerPortal.ts +111 -111
- package/mcp/ui/App/main.css +5 -5
- package/mcp/ui/App/root.tsx +13 -13
- package/mcp/ui/index.html +13 -13
- package/mcp/ui/package-lock.json +6356 -6356
- package/mcp/ui/package.json +25 -25
- package/mcp/ui/tsconfig.json +26 -26
- package/mcp/ui/vite.config.ts +16 -16
- package/models/accountDataModel.js +33 -33
- package/models/adminConfigModel.js +35 -35
- package/models/cacheModel.js +30 -26
- package/models/callDownListModel.js +34 -34
- package/models/callLogModel.js +33 -27
- package/models/dynamo/connectorSchema.js +146 -146
- package/models/dynamo/lockSchema.js +24 -24
- package/models/dynamo/noteCacheSchema.js +29 -29
- package/models/llmSessionModel.js +17 -17
- package/models/messageLogModel.js +25 -25
- package/models/sequelize.js +16 -16
- package/models/userModel.js +45 -45
- package/package.json +1 -1
- package/releaseNotes.json +1093 -1081
- package/test/connector/proxy/engine.test.js +126 -126
- package/test/connector/proxy/index.test.js +279 -279
- package/test/connector/proxy/sample.json +161 -161
- package/test/connector/registry.test.js +415 -415
- package/test/handlers/admin.test.js +616 -616
- package/test/handlers/auth.test.js +1018 -1018
- package/test/handlers/contact.test.js +1014 -1014
- package/test/handlers/log.test.js +1298 -1160
- package/test/handlers/managedAuth.test.js +457 -457
- package/test/handlers/plugin.test.js +380 -380
- package/test/index.test.js +105 -105
- package/test/lib/cacheCleanup.test.js +42 -0
- package/test/lib/callLogComposer.test.js +1231 -1231
- package/test/lib/debugTracer.test.js +328 -328
- package/test/lib/jwt.test.js +176 -176
- package/test/lib/logger.test.js +206 -206
- package/test/lib/oauth.test.js +359 -359
- package/test/lib/ringcentral.test.js +467 -467
- package/test/lib/sharedSMSComposer.test.js +1084 -1084
- package/test/lib/util.test.js +329 -329
- package/test/mcp/tools/checkAuthStatus.test.js +83 -83
- package/test/mcp/tools/createCallLog.test.js +436 -436
- package/test/mcp/tools/createContact.test.js +58 -58
- package/test/mcp/tools/createMessageLog.test.js +595 -595
- package/test/mcp/tools/doAuth.test.js +113 -113
- package/test/mcp/tools/findContactByName.test.js +275 -275
- package/test/mcp/tools/findContactByPhone.test.js +296 -296
- package/test/mcp/tools/getCallLog.test.js +298 -298
- package/test/mcp/tools/getGoogleFilePicker.test.js +281 -281
- package/test/mcp/tools/getPublicConnectors.test.js +107 -107
- package/test/mcp/tools/getSessionInfo.test.js +127 -127
- package/test/mcp/tools/logout.test.js +233 -233
- package/test/mcp/tools/rcGetCallLogs.test.js +56 -56
- package/test/mcp/tools/updateCallLog.test.js +360 -360
- package/test/models/accountDataModel.test.js +98 -98
- package/test/models/dynamo/connectorSchema.test.js +189 -189
- package/test/models/models.test.js +568 -539
- package/test/routes/managedAuthRoutes.test.js +104 -104
- package/test/setup.js +178 -178
package/docs/handlers.md
CHANGED
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
# Handlers
|
|
2
|
-
|
|
3
|
-
Handlers contain the shared business workflows behind the route layer.
|
|
4
|
-
|
|
5
|
-
## Handler Overview
|
|
6
|
-
|
|
7
|
-
| File | Responsibility | Main exports |
|
|
8
|
-
| --- | --- | --- |
|
|
9
|
-
| `handlers/auth.js` | Connector login, OAuth callback handling, user persistence, and auth validation | `onOAuthCallback`, `onApiKeyLogin`, `authValidation`, `getLicenseStatus`, `onRingcentralOAuthCallback` |
|
|
10
|
-
| `handlers/contact.js` | Contact search, creation, and account-data caching | `findContact`, `createContact`, `findContactWithName` |
|
|
11
|
-
| `handlers/log.js` | Call logging, message logging, plugin execution, call-log lookup, and note cache writes | `createCallLog`, `updateCallLog`, `createMessageLog`, `getCallLog`, `saveNoteCache` |
|
|
12
|
-
| `handlers/admin.js` | Admin settings, RingCentral reporting, server logging settings, and user mapping | `validateAdminRole`, `upsertAdminSettings`, `getAdminSettings`, `updateAdminRcTokens`, `getServerLoggingSettings`, `updateServerLoggingSettings`, `getAdminReport`, `getUserReport`, `getUserMapping`, `reinitializeUserMapping` |
|
|
13
|
-
| `handlers/user.js` | User setting reads, admin/user setting merge, and updates | `getUserSettingsByAdmin`, `getUserSettings`, `updateUserSettings` |
|
|
14
|
-
| `handlers/disposition.js` | Call-disposition writes against an existing log | `upsertCallDisposition` |
|
|
15
|
-
| `handlers/calldown.js` | User-owned call-down scheduling | `schedule`, `list`, `remove`, `markCalled`, `update` |
|
|
16
|
-
| `handlers/plugin.js` | Async plugin task polling and cleanup | `getPluginAsyncTasks` |
|
|
17
|
-
| `handlers/managedAuth.js` | Shared API-key auth field discovery, secure storage, and login-time field resolution | `getManagedAuthAdminSettings`, `getManagedAuthState`, `resolveApiKeyLoginFields`, `upsertOrgManagedAuthValues`, `upsertUserManagedAuthValues` |
|
|
18
|
-
|
|
19
|
-
## Common Execution Pattern
|
|
20
|
-
|
|
21
|
-
Most connector-backed handlers follow the same sequence:
|
|
22
|
-
|
|
23
|
-
1. Load the current `UserModel` row.
|
|
24
|
-
2. Derive `proxyId` and optional proxy configuration from `platformAdditionalInfo`.
|
|
25
|
-
3. Resolve the connector from `connectorRegistry`.
|
|
26
|
-
4. Ask the connector for its auth type.
|
|
27
|
-
5. Refresh OAuth tokens through `lib/oauth.js` or build API-key auth.
|
|
28
|
-
6. Call the connector method with normalized inputs.
|
|
29
|
-
7. Return a shared `successful` plus `returnMessage` shape.
|
|
30
|
-
|
|
31
|
-
## `auth.js`
|
|
32
|
-
|
|
33
|
-
Key behavior:
|
|
34
|
-
|
|
35
|
-
- `onOAuthCallback()` completes the external OAuth code exchange, calls `getUserInfo()`, and persists the user through `saveUserInfo()`.
|
|
36
|
-
- `onApiKeyLogin()` uses connector-provided basic-auth construction and the same user persistence path.
|
|
37
|
-
- `onApiKeyLogin()` resolves shared API-key fields from `handlers/managedAuth.js`, ignores end-user overrides for shared fields, and returns `missingRequiredFieldConsts` when required fields are missing.
|
|
38
|
-
- `saveUserInfo()` updates or creates `UserModel`, preserving existing `platformAdditionalInfo` keys and adding `proxyId`.
|
|
39
|
-
- `authValidation()` refreshes OAuth tokens when needed, then delegates session validation to the connector.
|
|
40
|
-
- `getLicenseStatus()` is connector-defined and only wrapped here.
|
|
41
|
-
- `onRingcentralOAuthCallback()` stores admin RingCentral tokens in `AdminConfigModel`.
|
|
42
|
-
|
|
43
|
-
## `contact.js`
|
|
44
|
-
|
|
45
|
-
Key behavior:
|
|
46
|
-
|
|
47
|
-
- `findContact()` checks `AccountDataModel` cache first using `contact-${phoneNumber}` as the data key.
|
|
48
|
-
- Found contacts are cached per `rcAccountId` and `platformName`.
|
|
49
|
-
- Cache refresh can be forced with `isForceRefreshAccountData`.
|
|
50
|
-
- Missing or expired users return warning-style response objects rather than throwing.
|
|
51
|
-
- `findContactWithName()` mirrors the phone lookup path without the account-data cache.
|
|
52
|
-
|
|
53
|
-
Known caveat called out in code:
|
|
54
|
-
|
|
55
|
-
- account-data contact caching assumes one RingCentral account does not need separate caches for multiple CRM platforms at the same time
|
|
56
|
-
|
|
57
|
-
## `log.js`
|
|
58
|
-
|
|
59
|
-
This is the heaviest handler in the package.
|
|
60
|
-
|
|
61
|
-
Key responsibilities:
|
|
62
|
-
|
|
63
|
-
- prevents duplicate call-log creation by checking `CallLogModel` on `sessionId`
|
|
64
|
-
- loads note cache from DynamoDB when `USE_CACHE` and server-side call logging are enabled
|
|
65
|
-
- runs configured plugins before creating or updating logs
|
|
66
|
-
- composes log body content with `composeCallLog()` or `composeSharedSMSLog()`
|
|
67
|
-
- stores local mappings between telephony ids and CRM log ids
|
|
68
|
-
- handles normal SMS, fax, group SMS, and shared SMS cases
|
|
69
|
-
- enriches tracking metadata for analytics callers
|
|
70
|
-
|
|
71
|
-
Important persistence behavior:
|
|
72
|
-
|
|
73
|
-
- `CallLogModel` stores the App Connect to CRM mapping for call logs
|
|
74
|
-
- `MessageLogModel` stores the App Connect to CRM mapping for message logs
|
|
75
|
-
- `CacheModel` stores async plugin task state
|
|
76
|
-
- `NoteCache` stores temporary notes keyed by session id
|
|
77
|
-
|
|
78
|
-
## `admin.js`
|
|
79
|
-
|
|
80
|
-
Key responsibilities:
|
|
81
|
-
|
|
82
|
-
- validates RingCentral admin role from the current extension token
|
|
83
|
-
- validates arbitrary RingCentral user tokens with `validateRcUserToken()`
|
|
84
|
-
- stores and reads account-level admin configuration
|
|
85
|
-
- stores admin OAuth tokens used for RingCentral reporting
|
|
86
|
-
- fetches call aggregation and user activity metrics from RingCentral
|
|
87
|
-
- delegates server-side logging settings to connector-specific methods when available
|
|
88
|
-
- builds CRM user to RingCentral extension mappings through `getUserList()`
|
|
89
|
-
|
|
90
|
-
## `user.js`
|
|
91
|
-
|
|
92
|
-
This module is mainly about merging account-level policy with per-user preferences.
|
|
93
|
-
|
|
94
|
-
Rules implemented here:
|
|
95
|
-
|
|
96
|
-
- if no admin settings exist, return user settings directly
|
|
97
|
-
- admin settings can override or hide user settings
|
|
98
|
-
- plugin settings merge at both the plugin level and nested config-field level
|
|
99
|
-
- connectors can intercept setting updates with `onUpdateUserSettings()`
|
|
100
|
-
|
|
101
|
-
## Smaller Handler Modules
|
|
102
|
-
|
|
103
|
-
`disposition.js`:
|
|
104
|
-
|
|
105
|
-
- requires an existing local call-log mapping before writing disposition data
|
|
106
|
-
|
|
107
|
-
`calldown.js`:
|
|
108
|
-
|
|
109
|
-
- decodes the JWT directly
|
|
110
|
-
- keeps operations scoped to the authenticated user
|
|
111
|
-
- supports schedule, list, remove, mark-as-called, and partial update flows
|
|
112
|
-
|
|
113
|
-
`plugin.js`:
|
|
114
|
-
|
|
115
|
-
- returns cached async task status
|
|
116
|
-
- deletes terminal task cache records after the client reads them
|
|
117
|
-
|
|
118
|
-
`managedAuth.js`:
|
|
119
|
-
|
|
120
|
-
- reads API-key field definitions from either the developer portal manifest or the connector registry manifest
|
|
121
|
-
- isolates managed field definitions with `managed: true` and `managedScope` (`account` or `user`)
|
|
122
|
-
- encrypts managed auth values before writing to `AccountDataModel`
|
|
123
|
-
- provides admin views with stored values using `{ hasValue, value }` while keeping database values encrypted at rest
|
|
124
|
-
- resolves login fields by merging stored managed values and non-managed end-user inputs
|
|
125
|
-
|
|
1
|
+
# Handlers
|
|
2
|
+
|
|
3
|
+
Handlers contain the shared business workflows behind the route layer.
|
|
4
|
+
|
|
5
|
+
## Handler Overview
|
|
6
|
+
|
|
7
|
+
| File | Responsibility | Main exports |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `handlers/auth.js` | Connector login, OAuth callback handling, user persistence, and auth validation | `onOAuthCallback`, `onApiKeyLogin`, `authValidation`, `getLicenseStatus`, `onRingcentralOAuthCallback` |
|
|
10
|
+
| `handlers/contact.js` | Contact search, creation, and account-data caching | `findContact`, `createContact`, `findContactWithName` |
|
|
11
|
+
| `handlers/log.js` | Call logging, message logging, plugin execution, call-log lookup, and note cache writes | `createCallLog`, `updateCallLog`, `createMessageLog`, `getCallLog`, `saveNoteCache` |
|
|
12
|
+
| `handlers/admin.js` | Admin settings, RingCentral reporting, server logging settings, and user mapping | `validateAdminRole`, `upsertAdminSettings`, `getAdminSettings`, `updateAdminRcTokens`, `getServerLoggingSettings`, `updateServerLoggingSettings`, `getAdminReport`, `getUserReport`, `getUserMapping`, `reinitializeUserMapping` |
|
|
13
|
+
| `handlers/user.js` | User setting reads, admin/user setting merge, and updates | `getUserSettingsByAdmin`, `getUserSettings`, `updateUserSettings` |
|
|
14
|
+
| `handlers/disposition.js` | Call-disposition writes against an existing log | `upsertCallDisposition` |
|
|
15
|
+
| `handlers/calldown.js` | User-owned call-down scheduling | `schedule`, `list`, `remove`, `markCalled`, `update` |
|
|
16
|
+
| `handlers/plugin.js` | Async plugin task polling and cleanup | `getPluginAsyncTasks` |
|
|
17
|
+
| `handlers/managedAuth.js` | Shared API-key auth field discovery, secure storage, and login-time field resolution | `getManagedAuthAdminSettings`, `getManagedAuthState`, `resolveApiKeyLoginFields`, `upsertOrgManagedAuthValues`, `upsertUserManagedAuthValues` |
|
|
18
|
+
|
|
19
|
+
## Common Execution Pattern
|
|
20
|
+
|
|
21
|
+
Most connector-backed handlers follow the same sequence:
|
|
22
|
+
|
|
23
|
+
1. Load the current `UserModel` row.
|
|
24
|
+
2. Derive `proxyId` and optional proxy configuration from `platformAdditionalInfo`.
|
|
25
|
+
3. Resolve the connector from `connectorRegistry`.
|
|
26
|
+
4. Ask the connector for its auth type.
|
|
27
|
+
5. Refresh OAuth tokens through `lib/oauth.js` or build API-key auth.
|
|
28
|
+
6. Call the connector method with normalized inputs.
|
|
29
|
+
7. Return a shared `successful` plus `returnMessage` shape.
|
|
30
|
+
|
|
31
|
+
## `auth.js`
|
|
32
|
+
|
|
33
|
+
Key behavior:
|
|
34
|
+
|
|
35
|
+
- `onOAuthCallback()` completes the external OAuth code exchange, calls `getUserInfo()`, and persists the user through `saveUserInfo()`.
|
|
36
|
+
- `onApiKeyLogin()` uses connector-provided basic-auth construction and the same user persistence path.
|
|
37
|
+
- `onApiKeyLogin()` resolves shared API-key fields from `handlers/managedAuth.js`, ignores end-user overrides for shared fields, and returns `missingRequiredFieldConsts` when required fields are missing.
|
|
38
|
+
- `saveUserInfo()` updates or creates `UserModel`, preserving existing `platformAdditionalInfo` keys and adding `proxyId`.
|
|
39
|
+
- `authValidation()` refreshes OAuth tokens when needed, then delegates session validation to the connector.
|
|
40
|
+
- `getLicenseStatus()` is connector-defined and only wrapped here.
|
|
41
|
+
- `onRingcentralOAuthCallback()` stores admin RingCentral tokens in `AdminConfigModel`.
|
|
42
|
+
|
|
43
|
+
## `contact.js`
|
|
44
|
+
|
|
45
|
+
Key behavior:
|
|
46
|
+
|
|
47
|
+
- `findContact()` checks `AccountDataModel` cache first using `contact-${phoneNumber}` as the data key.
|
|
48
|
+
- Found contacts are cached per `rcAccountId` and `platformName`.
|
|
49
|
+
- Cache refresh can be forced with `isForceRefreshAccountData`.
|
|
50
|
+
- Missing or expired users return warning-style response objects rather than throwing.
|
|
51
|
+
- `findContactWithName()` mirrors the phone lookup path without the account-data cache.
|
|
52
|
+
|
|
53
|
+
Known caveat called out in code:
|
|
54
|
+
|
|
55
|
+
- account-data contact caching assumes one RingCentral account does not need separate caches for multiple CRM platforms at the same time
|
|
56
|
+
|
|
57
|
+
## `log.js`
|
|
58
|
+
|
|
59
|
+
This is the heaviest handler in the package.
|
|
60
|
+
|
|
61
|
+
Key responsibilities:
|
|
62
|
+
|
|
63
|
+
- prevents duplicate call-log creation by checking `CallLogModel` on `sessionId`
|
|
64
|
+
- loads note cache from DynamoDB when `USE_CACHE` and server-side call logging are enabled
|
|
65
|
+
- runs configured plugins before creating or updating logs
|
|
66
|
+
- composes log body content with `composeCallLog()` or `composeSharedSMSLog()`
|
|
67
|
+
- stores local mappings between telephony ids and CRM log ids
|
|
68
|
+
- handles normal SMS, fax, group SMS, and shared SMS cases
|
|
69
|
+
- enriches tracking metadata for analytics callers
|
|
70
|
+
|
|
71
|
+
Important persistence behavior:
|
|
72
|
+
|
|
73
|
+
- `CallLogModel` stores the App Connect to CRM mapping for call logs
|
|
74
|
+
- `MessageLogModel` stores the App Connect to CRM mapping for message logs
|
|
75
|
+
- `CacheModel` stores async plugin task state
|
|
76
|
+
- `NoteCache` stores temporary notes keyed by session id
|
|
77
|
+
|
|
78
|
+
## `admin.js`
|
|
79
|
+
|
|
80
|
+
Key responsibilities:
|
|
81
|
+
|
|
82
|
+
- validates RingCentral admin role from the current extension token
|
|
83
|
+
- validates arbitrary RingCentral user tokens with `validateRcUserToken()`
|
|
84
|
+
- stores and reads account-level admin configuration
|
|
85
|
+
- stores admin OAuth tokens used for RingCentral reporting
|
|
86
|
+
- fetches call aggregation and user activity metrics from RingCentral
|
|
87
|
+
- delegates server-side logging settings to connector-specific methods when available
|
|
88
|
+
- builds CRM user to RingCentral extension mappings through `getUserList()`
|
|
89
|
+
|
|
90
|
+
## `user.js`
|
|
91
|
+
|
|
92
|
+
This module is mainly about merging account-level policy with per-user preferences.
|
|
93
|
+
|
|
94
|
+
Rules implemented here:
|
|
95
|
+
|
|
96
|
+
- if no admin settings exist, return user settings directly
|
|
97
|
+
- admin settings can override or hide user settings
|
|
98
|
+
- plugin settings merge at both the plugin level and nested config-field level
|
|
99
|
+
- connectors can intercept setting updates with `onUpdateUserSettings()`
|
|
100
|
+
|
|
101
|
+
## Smaller Handler Modules
|
|
102
|
+
|
|
103
|
+
`disposition.js`:
|
|
104
|
+
|
|
105
|
+
- requires an existing local call-log mapping before writing disposition data
|
|
106
|
+
|
|
107
|
+
`calldown.js`:
|
|
108
|
+
|
|
109
|
+
- decodes the JWT directly
|
|
110
|
+
- keeps operations scoped to the authenticated user
|
|
111
|
+
- supports schedule, list, remove, mark-as-called, and partial update flows
|
|
112
|
+
|
|
113
|
+
`plugin.js`:
|
|
114
|
+
|
|
115
|
+
- returns cached async task status
|
|
116
|
+
- deletes terminal task cache records after the client reads them
|
|
117
|
+
|
|
118
|
+
`managedAuth.js`:
|
|
119
|
+
|
|
120
|
+
- reads API-key field definitions from either the developer portal manifest or the connector registry manifest
|
|
121
|
+
- isolates managed field definitions with `managed: true` and `managedScope` (`account` or `user`)
|
|
122
|
+
- encrypts managed auth values before writing to `AccountDataModel`
|
|
123
|
+
- provides admin views with stored values using `{ hasValue, value }` while keeping database values encrypted at rest
|
|
124
|
+
- resolves login fields by merging stored managed values and non-managed end-user inputs
|
|
125
|
+
|
package/docs/libraries.md
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
# Libraries
|
|
2
|
-
|
|
3
|
-
The `lib/` directory contains cross-cutting helpers used by routes, handlers, and connectors.
|
|
4
|
-
|
|
5
|
-
## Infrastructure And Security
|
|
6
|
-
|
|
7
|
-
| File | Responsibility |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| `lib/jwt.js` | Signs and verifies long-lived JWTs with `APP_SERVER_SECRET_KEY` |
|
|
10
|
-
| `lib/oauth.js` | Builds OAuth clients and refreshes access tokens with lock protection |
|
|
11
|
-
| `lib/authSession.js` | Stores and updates auth-session records used by auth flows |
|
|
12
|
-
| `lib/encode.js` | Small encoding and decoding helpers for encrypted values |
|
|
13
|
-
| `lib/errorHandler.js` | Normalizes API and database errors and exports Express error middleware |
|
|
14
|
-
| `lib/logger.js` | Structured logger plus exported `Logger` class and log-level constants |
|
|
15
|
-
| `lib/debugTracer.js` | Request-scoped trace collector used when debug mode is enabled |
|
|
16
|
-
| `lib/s3ErrorLogReport.js` | S3 bucket setup and presigned upload URL generation for debug reports |
|
|
17
|
-
|
|
18
|
-
## RingCentral And Analytics Helpers
|
|
19
|
-
|
|
20
|
-
| File | Responsibility |
|
|
21
|
-
| --- | --- |
|
|
22
|
-
| `lib/ringcentral.js` | RingCentral API wrapper plus token-validity helpers |
|
|
23
|
-
| `lib/analytics.js` | Mixpanel initialization and event tracking |
|
|
24
|
-
| `lib/generalErrorMessage.js` | Shared user-facing warning messages for auth and rate-limit cases |
|
|
25
|
-
|
|
26
|
-
## Formatting And Utility Helpers
|
|
27
|
-
|
|
28
|
-
| File | Responsibility |
|
|
29
|
-
| --- | --- |
|
|
30
|
-
| `lib/callLogComposer.js` | Builds plain text, HTML, or Markdown call-log bodies |
|
|
31
|
-
| `lib/sharedSMSComposer.js` | Builds shared-SMS conversation log content |
|
|
32
|
-
| `lib/constants.js` | Defines `LOG_DETAILS_FORMAT_TYPE` values |
|
|
33
|
-
| `lib/util.js` | Hashing, timezone lookup, media-reader links, plugin setting extraction, and date helpers |
|
|
34
|
-
|
|
35
|
-
## Notes By File
|
|
36
|
-
|
|
37
|
-
### `lib/analytics.js`
|
|
38
|
-
|
|
39
|
-
- no-op unless `MIXPANEL_TOKEN` is present
|
|
40
|
-
- attaches package version, app name, connector name, browser, OS, device, and caller metadata to events
|
|
41
|
-
- requires `extensionId` to emit an event
|
|
42
|
-
|
|
43
|
-
### `lib/jwt.js`
|
|
44
|
-
|
|
45
|
-
- `generateJwt()` signs with a very long expiration window
|
|
46
|
-
- `decodeJwt()` logs and returns `null` on verification failure instead of throwing
|
|
47
|
-
|
|
48
|
-
### `lib/errorHandler.js`
|
|
49
|
-
|
|
50
|
-
Exports:
|
|
51
|
-
|
|
52
|
-
- `handleApiError()`
|
|
53
|
-
- `handleDatabaseError()`
|
|
54
|
-
- `asyncHandler()`
|
|
55
|
-
- `errorMiddleware()`
|
|
56
|
-
- `getOperationErrorMessage()`
|
|
57
|
-
|
|
58
|
-
Notable behavior:
|
|
59
|
-
|
|
60
|
-
- HTTP 429 becomes a rate-limit warning
|
|
61
|
-
- HTTP 4xx up to 409 becomes an authorization-style warning
|
|
62
|
-
- everything else becomes an operation-specific warning response
|
|
63
|
-
|
|
64
|
-
### `lib/callLogComposer.js`
|
|
65
|
-
|
|
66
|
-
This module centralizes log-body generation for call logs.
|
|
67
|
-
|
|
68
|
-
It supports:
|
|
69
|
-
|
|
70
|
-
- plain text
|
|
71
|
-
- HTML
|
|
72
|
-
- Markdown
|
|
73
|
-
- note insertion
|
|
74
|
-
- session id, subject, duration, result, recording, and timestamp formatting
|
|
75
|
-
- transcript and AI note insertion
|
|
76
|
-
- leg journey formatting
|
|
77
|
-
- ACE transcript, summary, score, bullet summary, and deep link sections
|
|
78
|
-
|
|
79
|
-
### `lib/sharedSMSComposer.js`
|
|
80
|
-
|
|
81
|
-
This module formats shared SMS conversations for CRM logging.
|
|
82
|
-
|
|
83
|
-
It handles:
|
|
84
|
-
|
|
85
|
-
- message, note, and assignment entities
|
|
86
|
-
- owner and assignee metadata
|
|
87
|
-
- per-format output generation
|
|
88
|
-
- summary counts and formatted timeline entries
|
|
89
|
-
|
|
90
|
-
### `lib/util.js`
|
|
91
|
-
|
|
92
|
-
Exports:
|
|
93
|
-
|
|
94
|
-
- `getTimeZone()`
|
|
95
|
-
- `getHashValue()`
|
|
96
|
-
- `secondsToHoursMinutesSeconds()`
|
|
97
|
-
- `getMostRecentDate()`
|
|
98
|
-
- `getMediaReaderLinkByPlatformMediaLink()`
|
|
99
|
-
- `getPluginsFromUserSettings()`
|
|
100
|
-
|
|
101
|
-
`getPluginsFromUserSettings()` is especially important because logging handlers use it to discover which plugins should run for call, SMS, or fax workflows.
|
|
1
|
+
# Libraries
|
|
2
|
+
|
|
3
|
+
The `lib/` directory contains cross-cutting helpers used by routes, handlers, and connectors.
|
|
4
|
+
|
|
5
|
+
## Infrastructure And Security
|
|
6
|
+
|
|
7
|
+
| File | Responsibility |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `lib/jwt.js` | Signs and verifies long-lived JWTs with `APP_SERVER_SECRET_KEY` |
|
|
10
|
+
| `lib/oauth.js` | Builds OAuth clients and refreshes access tokens with lock protection |
|
|
11
|
+
| `lib/authSession.js` | Stores and updates auth-session records used by auth flows |
|
|
12
|
+
| `lib/encode.js` | Small encoding and decoding helpers for encrypted values |
|
|
13
|
+
| `lib/errorHandler.js` | Normalizes API and database errors and exports Express error middleware |
|
|
14
|
+
| `lib/logger.js` | Structured logger plus exported `Logger` class and log-level constants |
|
|
15
|
+
| `lib/debugTracer.js` | Request-scoped trace collector used when debug mode is enabled |
|
|
16
|
+
| `lib/s3ErrorLogReport.js` | S3 bucket setup and presigned upload URL generation for debug reports |
|
|
17
|
+
|
|
18
|
+
## RingCentral And Analytics Helpers
|
|
19
|
+
|
|
20
|
+
| File | Responsibility |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `lib/ringcentral.js` | RingCentral API wrapper plus token-validity helpers |
|
|
23
|
+
| `lib/analytics.js` | Mixpanel initialization and event tracking |
|
|
24
|
+
| `lib/generalErrorMessage.js` | Shared user-facing warning messages for auth and rate-limit cases |
|
|
25
|
+
|
|
26
|
+
## Formatting And Utility Helpers
|
|
27
|
+
|
|
28
|
+
| File | Responsibility |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `lib/callLogComposer.js` | Builds plain text, HTML, or Markdown call-log bodies |
|
|
31
|
+
| `lib/sharedSMSComposer.js` | Builds shared-SMS conversation log content |
|
|
32
|
+
| `lib/constants.js` | Defines `LOG_DETAILS_FORMAT_TYPE` values |
|
|
33
|
+
| `lib/util.js` | Hashing, timezone lookup, media-reader links, plugin setting extraction, and date helpers |
|
|
34
|
+
|
|
35
|
+
## Notes By File
|
|
36
|
+
|
|
37
|
+
### `lib/analytics.js`
|
|
38
|
+
|
|
39
|
+
- no-op unless `MIXPANEL_TOKEN` is present
|
|
40
|
+
- attaches package version, app name, connector name, browser, OS, device, and caller metadata to events
|
|
41
|
+
- requires `extensionId` to emit an event
|
|
42
|
+
|
|
43
|
+
### `lib/jwt.js`
|
|
44
|
+
|
|
45
|
+
- `generateJwt()` signs with a very long expiration window
|
|
46
|
+
- `decodeJwt()` logs and returns `null` on verification failure instead of throwing
|
|
47
|
+
|
|
48
|
+
### `lib/errorHandler.js`
|
|
49
|
+
|
|
50
|
+
Exports:
|
|
51
|
+
|
|
52
|
+
- `handleApiError()`
|
|
53
|
+
- `handleDatabaseError()`
|
|
54
|
+
- `asyncHandler()`
|
|
55
|
+
- `errorMiddleware()`
|
|
56
|
+
- `getOperationErrorMessage()`
|
|
57
|
+
|
|
58
|
+
Notable behavior:
|
|
59
|
+
|
|
60
|
+
- HTTP 429 becomes a rate-limit warning
|
|
61
|
+
- HTTP 4xx up to 409 becomes an authorization-style warning
|
|
62
|
+
- everything else becomes an operation-specific warning response
|
|
63
|
+
|
|
64
|
+
### `lib/callLogComposer.js`
|
|
65
|
+
|
|
66
|
+
This module centralizes log-body generation for call logs.
|
|
67
|
+
|
|
68
|
+
It supports:
|
|
69
|
+
|
|
70
|
+
- plain text
|
|
71
|
+
- HTML
|
|
72
|
+
- Markdown
|
|
73
|
+
- note insertion
|
|
74
|
+
- session id, subject, duration, result, recording, and timestamp formatting
|
|
75
|
+
- transcript and AI note insertion
|
|
76
|
+
- leg journey formatting
|
|
77
|
+
- ACE transcript, summary, score, bullet summary, and deep link sections
|
|
78
|
+
|
|
79
|
+
### `lib/sharedSMSComposer.js`
|
|
80
|
+
|
|
81
|
+
This module formats shared SMS conversations for CRM logging.
|
|
82
|
+
|
|
83
|
+
It handles:
|
|
84
|
+
|
|
85
|
+
- message, note, and assignment entities
|
|
86
|
+
- owner and assignee metadata
|
|
87
|
+
- per-format output generation
|
|
88
|
+
- summary counts and formatted timeline entries
|
|
89
|
+
|
|
90
|
+
### `lib/util.js`
|
|
91
|
+
|
|
92
|
+
Exports:
|
|
93
|
+
|
|
94
|
+
- `getTimeZone()`
|
|
95
|
+
- `getHashValue()`
|
|
96
|
+
- `secondsToHoursMinutesSeconds()`
|
|
97
|
+
- `getMostRecentDate()`
|
|
98
|
+
- `getMediaReaderLinkByPlatformMediaLink()`
|
|
99
|
+
- `getPluginsFromUserSettings()`
|
|
100
|
+
|
|
101
|
+
`getPluginsFromUserSettings()` is especially important because logging handlers use it to discover which plugins should run for call, SMS, or fax workflows.
|