@app-connect/core 1.7.37 → 1.7.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -16
- package/dist/connector/developerPortal.d.ts +6 -0
- package/{connector → dist/connector}/developerPortal.js +29 -12
- package/dist/connector/mock.d.ts +1 -0
- package/{connector → dist/connector}/mock.js +33 -17
- package/dist/connector/proxy/engine.d.ts +10 -0
- package/dist/connector/proxy/engine.js +222 -0
- package/dist/connector/proxy/index.d.ts +5 -0
- package/dist/connector/proxy/index.js +511 -0
- package/dist/connector/registry.d.ts +1 -0
- package/dist/connector/registry.js +243 -0
- package/dist/handlers/admin.d.ts +1 -0
- package/{handlers → dist/handlers}/admin.js +137 -78
- package/dist/handlers/appointment.d.ts +9 -0
- package/{handlers → dist/handlers}/appointment.js +58 -29
- package/dist/handlers/auth.d.ts +9 -0
- package/{handlers → dist/handlers}/auth.js +68 -40
- package/dist/handlers/calldown.d.ts +10 -0
- package/dist/handlers/calldown.js +134 -0
- package/dist/handlers/contact.d.ts +1 -0
- package/{handlers → dist/handlers}/contact.js +61 -39
- package/dist/handlers/disposition.d.ts +1 -0
- package/{handlers → dist/handlers}/disposition.js +20 -10
- package/dist/handlers/log.d.ts +1 -0
- package/{handlers → dist/handlers}/log.js +91 -124
- package/dist/handlers/managedAuth.d.ts +1 -0
- package/{handlers → dist/handlers}/managedAuth.js +134 -61
- package/dist/handlers/managedOAuth.d.ts +13 -0
- package/{handlers → dist/handlers}/managedOAuth.js +102 -30
- package/dist/handlers/plugin.d.ts +1 -0
- package/{handlers → dist/handlers}/plugin.js +59 -27
- package/dist/handlers/user.d.ts +1 -0
- package/{handlers → dist/handlers}/user.js +45 -27
- package/dist/index.d.ts +1 -0
- package/{index.js → dist/index.js} +538 -449
- package/dist/jest.config.d.ts +1 -0
- package/dist/jest.config.js +65 -0
- package/dist/lib/analytics.d.ts +4 -0
- package/{lib → dist/lib}/analytics.js +8 -6
- package/dist/lib/authSession.d.ts +5 -0
- package/{lib → dist/lib}/authSession.js +15 -43
- package/dist/lib/cacheCleanup.d.ts +4 -0
- package/{lib → dist/lib}/cacheCleanup.js +5 -17
- package/dist/lib/callLogComposer.d.ts +109 -0
- package/{lib → dist/lib}/callLogComposer.js +157 -197
- package/dist/lib/callLogLookup.d.ts +6 -0
- package/{lib → dist/lib}/callLogLookup.js +12 -34
- package/dist/lib/constants.d.ts +6 -0
- package/dist/lib/constants.js +9 -0
- package/dist/lib/debugTracer.d.ts +17 -0
- package/{lib → dist/lib}/debugTracer.js +7 -83
- package/dist/lib/encode.d.ts +3 -0
- package/dist/lib/encode.js +50 -0
- package/dist/lib/errorHandler.d.ts +7 -0
- package/dist/lib/errorHandler.js +161 -0
- package/dist/lib/generalErrorMessage.d.ts +7 -0
- package/{lib → dist/lib}/generalErrorMessage.js +6 -6
- package/dist/lib/jwt.d.ts +4 -0
- package/dist/lib/jwt.js +18 -0
- package/dist/lib/logger.d.ts +24 -0
- package/dist/lib/logger.js +126 -0
- package/dist/lib/migrateCallLogsSchema.d.ts +32 -0
- package/{lib → dist/lib}/migrateCallLogsSchema.js +75 -160
- package/dist/lib/oauth.d.ts +4 -0
- package/{lib → dist/lib}/oauth.js +157 -160
- package/dist/lib/ringcentral.d.ts +24 -0
- package/dist/lib/ringcentral.js +226 -0
- package/dist/lib/s3ErrorLogReport.d.ts +4 -0
- package/{lib → dist/lib}/s3ErrorLogReport.js +11 -23
- package/dist/lib/sharedSMSComposer.d.ts +7 -0
- package/{lib → dist/lib}/sharedSMSComposer.js +21 -107
- package/dist/lib/util.d.ts +7 -0
- package/{lib → dist/lib}/util.js +9 -20
- package/dist/mcp/lib/oauthError.d.ts +1 -0
- package/dist/mcp/lib/oauthError.js +25 -0
- package/dist/mcp/lib/validator.d.ts +1 -0
- package/{mcp → dist/mcp}/lib/validator.js +16 -20
- package/dist/mcp/lib/widgetSessionToken.d.ts +1 -0
- package/dist/mcp/lib/widgetSessionToken.js +46 -0
- package/dist/mcp/mcpHandler.d.ts +8 -0
- package/{mcp → dist/mcp}/mcpHandler.js +98 -88
- package/dist/mcp/tools/cancelAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/cancelAppointment.js +7 -16
- package/dist/mcp/tools/checkAuthStatus.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/checkAuthStatus.js +21 -14
- package/dist/mcp/tools/confirmAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/confirmAppointment.js +7 -16
- package/dist/mcp/tools/createAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createAppointment.js +7 -19
- package/dist/mcp/tools/createCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createCallLog.js +18 -29
- package/dist/mcp/tools/createContact.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createContact.js +8 -20
- package/dist/mcp/tools/createMessageLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/createMessageLog.js +14 -26
- package/dist/mcp/tools/doAuth.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/doAuth.js +17 -13
- package/dist/mcp/tools/findContactByName.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/findContactByName.js +9 -15
- package/dist/mcp/tools/findContactByPhone.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/findContactByPhone.js +8 -15
- package/dist/mcp/tools/getCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getCallLog.js +12 -21
- package/dist/mcp/tools/getGoogleFilePicker.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getGoogleFilePicker.js +9 -18
- package/dist/mcp/tools/getHelp.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getHelp.js +5 -6
- package/dist/mcp/tools/getPublicConnectors.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getPublicConnectors.js +19 -18
- package/dist/mcp/tools/getSessionInfo.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/getSessionInfo.js +10 -16
- package/dist/mcp/tools/index.d.ts +8 -0
- package/dist/mcp/tools/index.js +50 -0
- package/dist/mcp/tools/listAppointments.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/listAppointments.js +7 -19
- package/dist/mcp/tools/logout.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/logout.js +16 -14
- package/dist/mcp/tools/rcGetCallLogs.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/rcGetCallLogs.js +10 -8
- package/dist/mcp/tools/updateAppointment.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/updateAppointment.js +17 -22
- package/dist/mcp/tools/updateCallLog.d.ts +1 -0
- package/{mcp → dist/mcp}/tools/updateCallLog.js +16 -26
- package/dist/models/accountDataModel.d.ts +3 -0
- package/dist/models/accountDataModel.js +39 -0
- package/dist/models/adminConfigModel.d.ts +2 -0
- package/dist/models/adminConfigModel.js +39 -0
- package/dist/models/cacheModel.d.ts +2 -0
- package/{models → dist/models}/cacheModel.js +7 -3
- package/dist/models/callDownListModel.d.ts +2 -0
- package/{models → dist/models}/callDownListModel.js +8 -4
- package/dist/models/callLogModel.d.ts +2 -0
- package/dist/models/callLogModel.js +43 -0
- package/dist/models/dynamo/connectorSchema.d.ts +2 -0
- package/dist/models/dynamo/connectorSchema.js +141 -0
- package/dist/models/dynamo/lockSchema.d.ts +2 -0
- package/{models → dist/models}/dynamo/lockSchema.js +5 -7
- package/dist/models/dynamo/noteCacheSchema.d.ts +2 -0
- package/{models → dist/models}/dynamo/noteCacheSchema.js +4 -6
- package/dist/models/llmSessionModel.d.ts +2 -0
- package/dist/models/llmSessionModel.js +21 -0
- package/dist/models/messageLogModel.d.ts +2 -0
- package/{models → dist/models}/messageLogModel.js +8 -4
- package/dist/models/sequelize.d.ts +2 -0
- package/dist/models/sequelize.js +68 -0
- package/dist/models/userModel.d.ts +2 -0
- package/dist/models/userModel.js +49 -0
- package/dist/package.json +100 -0
- package/dist/releaseNotes.json +1222 -0
- package/dist/tsconfig.json +14 -0
- package/dist/types/admin.d.ts +141 -0
- package/dist/types/analytics.d.ts +14 -0
- package/dist/types/appointment.d.ts +50 -0
- package/dist/types/auth.d.ts +137 -0
- package/dist/types/authSession.d.ts +35 -0
- package/dist/types/cacheCleanup.d.ts +12 -0
- package/dist/types/calldown.d.ts +54 -0
- package/dist/types/common.d.ts +46 -0
- package/dist/types/connector.d.ts +165 -0
- package/dist/types/contact.d.ts +125 -0
- package/dist/types/errorHandler.d.ts +60 -0
- package/dist/types/index.d.ts +76 -0
- package/dist/types/json.d.ts +9 -0
- package/dist/types/jwt.d.ts +8 -0
- package/dist/types/logging.d.ts +224 -0
- package/dist/types/managedAuth.d.ts +114 -0
- package/dist/types/managedOAuth.d.ts +59 -0
- package/dist/types/manifest.d.ts +120 -0
- package/dist/types/migration.d.ts +15 -0
- package/dist/types/plugin.d.ts +74 -0
- package/dist/types/ringcentral.d.ts +61 -0
- package/dist/types/s3ErrorLogReport.d.ts +16 -0
- package/dist/types/sharedSMSComposer.d.ts +105 -0
- package/dist/types/user.d.ts +46 -0
- package/dist/types/util.d.ts +7 -0
- package/package.json +34 -6
- package/releaseNotes.json +8 -0
- package/.env.test +0 -5
- package/connector/proxy/engine.js +0 -165
- package/connector/proxy/index.js +0 -500
- package/connector/registry.js +0 -252
- package/docs/README.md +0 -50
- package/docs/architecture.md +0 -94
- package/docs/connectors.md +0 -116
- package/docs/handlers.md +0 -128
- package/docs/libraries.md +0 -98
- package/docs/models.md +0 -146
- package/docs/routes.md +0 -119
- package/docs/tests.md +0 -73
- package/handlers/calldown.js +0 -99
- package/jest.config.js +0 -57
- package/lib/constants.js +0 -9
- package/lib/encode.js +0 -30
- package/lib/errorHandler.js +0 -218
- package/lib/jwt.js +0 -18
- package/lib/logger.js +0 -190
- package/lib/ringcentral.js +0 -267
- package/mcp/README.md +0 -420
- package/mcp/tools/index.js +0 -51
- package/mcp/ui/App/App.tsx +0 -358
- package/mcp/ui/App/components/AuthInfoForm.tsx +0 -113
- package/mcp/ui/App/components/AuthSuccess.tsx +0 -22
- package/mcp/ui/App/components/ConnectorList.tsx +0 -82
- package/mcp/ui/App/components/DebugPanel.tsx +0 -43
- package/mcp/ui/App/components/OAuthConnect.tsx +0 -270
- package/mcp/ui/App/lib/callTool.ts +0 -130
- package/mcp/ui/App/lib/debugLog.ts +0 -41
- package/mcp/ui/App/lib/developerPortal.ts +0 -111
- package/mcp/ui/App/main.css +0 -6
- package/mcp/ui/App/root.tsx +0 -13
- package/mcp/ui/dist/index.html +0 -53
- package/mcp/ui/vite.config.ts +0 -16
- package/models/accountDataModel.js +0 -34
- package/models/adminConfigModel.js +0 -35
- package/models/callLogModel.js +0 -39
- package/models/dynamo/connectorSchema.js +0 -146
- package/models/llmSessionModel.js +0 -17
- package/models/sequelize.js +0 -17
- package/models/userModel.js +0 -45
- package/test/connector/developerPortal.test.js +0 -166
- package/test/connector/mock.test.js +0 -131
- package/test/connector/proxy/engine.test.js +0 -211
- package/test/connector/proxy/index.test.js +0 -525
- package/test/connector/proxy/sample.json +0 -162
- package/test/connector/registry.test.js +0 -416
- package/test/handlers/admin.test.js +0 -960
- package/test/handlers/appointment.test.js +0 -260
- package/test/handlers/auth.test.js +0 -1096
- package/test/handlers/calldown.test.js +0 -310
- package/test/handlers/contact.test.js +0 -1014
- package/test/handlers/disposition.test.js +0 -396
- package/test/handlers/log.test.js +0 -1847
- package/test/handlers/managedAuth.test.js +0 -458
- package/test/handlers/managedOAuth.test.js +0 -262
- package/test/handlers/plugin.test.js +0 -429
- package/test/handlers/user.test.js +0 -381
- package/test/index.test.js +0 -301
- package/test/lib/analytics.test.js +0 -146
- package/test/lib/authSession.test.js +0 -173
- package/test/lib/cacheCleanup.test.js +0 -127
- package/test/lib/callLogComposer.test.js +0 -1231
- package/test/lib/debugTracer.test.js +0 -328
- package/test/lib/encode.test.js +0 -59
- package/test/lib/errorHandler.test.js +0 -246
- package/test/lib/generalErrorMessage.test.js +0 -82
- package/test/lib/jwt.test.js +0 -176
- package/test/lib/logger.test.js +0 -206
- package/test/lib/oauth.test.js +0 -359
- package/test/lib/ringcentral.test.js +0 -467
- package/test/lib/s3ErrorLogReport.test.js +0 -187
- package/test/lib/sharedSMSComposer.test.js +0 -1084
- package/test/lib/util.test.js +0 -329
- package/test/mcp/mcpHandler.test.js +0 -73
- package/test/mcp/mcpHandlerMore.test.js +0 -384
- package/test/mcp/tools/appointmentTools.test.js +0 -362
- package/test/mcp/tools/checkAuthStatus.test.js +0 -83
- package/test/mcp/tools/createCallLog.test.js +0 -436
- package/test/mcp/tools/createContact.test.js +0 -58
- package/test/mcp/tools/createMessageLog.test.js +0 -595
- package/test/mcp/tools/doAuth.test.js +0 -113
- package/test/mcp/tools/findContactByName.test.js +0 -275
- package/test/mcp/tools/findContactByPhone.test.js +0 -296
- package/test/mcp/tools/getCallLog.test.js +0 -298
- package/test/mcp/tools/getGoogleFilePicker.test.js +0 -281
- package/test/mcp/tools/getPublicConnectors.test.js +0 -107
- package/test/mcp/tools/getSessionInfo.test.js +0 -127
- package/test/mcp/tools/logout.test.js +0 -233
- package/test/mcp/tools/rcGetCallLogs.test.js +0 -56
- package/test/mcp/tools/updateCallLog.test.js +0 -360
- package/test/models/accountDataModel.test.js +0 -98
- package/test/models/callDownListModel.test.js +0 -125
- package/test/models/dynamo/connectorSchema.test.js +0 -189
- package/test/models/dynamo/lockSchema.test.js +0 -37
- package/test/models/dynamo/noteCacheSchema.test.js +0 -45
- package/test/models/llmSessionModel.test.js +0 -91
- package/test/models/models.test.js +0 -660
- package/test/routes/calldownRoutes.test.js +0 -224
- package/test/routes/coreRouterBroadRoutes.test.js +0 -855
- package/test/routes/dispositionRoutes.test.js +0 -192
- package/test/routes/managedAuthRoutes.test.js +0 -386
- package/test/routes/pluginRoutes.test.js +0 -262
- package/test/setup.js +0 -178
- /package/{mcp → dist/mcp}/ui/index.html +0 -0
- /package/{mcp → dist/mcp}/ui/package-lock.json +0 -0
- /package/{mcp → dist/mcp}/ui/package.json +0 -0
- /package/{mcp → dist/mcp}/ui/tsconfig.json +0 -0
|
@@ -1,25 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
// @ts-check
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
/** @typedef {import('../types').AppConnectManifest} AppConnectManifest */
|
|
5
|
+
/** @typedef {import('../types').DeveloperPortalManifestProvider} DeveloperPortalManifestProvider */
|
|
6
|
+
/** @typedef {import('../types').ManagedAuthAdminSettingsParams} ManagedAuthAdminSettingsParams */
|
|
7
|
+
/** @typedef {import('../types').ManagedAuthFieldDefinition} ManagedAuthFieldDefinition */
|
|
8
|
+
/** @typedef {import('../types').ManagedAuthFieldDefinitionParams} ManagedAuthFieldDefinitionParams */
|
|
9
|
+
/** @typedef {import('../types').ManagedAuthLoginFailureParams} ManagedAuthLoginFailureParams */
|
|
10
|
+
/** @typedef {import('../types').ManagedAuthRecord} ManagedAuthRecord */
|
|
11
|
+
/** @typedef {import('../types').ManagedAuthState} ManagedAuthState */
|
|
12
|
+
/** @typedef {import('../types').ManagedAuthStateParams} ManagedAuthStateParams */
|
|
13
|
+
/** @typedef {import('../types').ManagedAuthStoredValue} ManagedAuthStoredValue */
|
|
14
|
+
/** @typedef {import('../types').ManagedAuthUserParams} ManagedAuthUserParams */
|
|
15
|
+
/** @typedef {import('../types').ManagedAuthValue} ManagedAuthValue */
|
|
16
|
+
/** @typedef {import('../types').ManagedAuthValues} ManagedAuthValues */
|
|
17
|
+
/** @typedef {import('../types').PersistSubmittedManagedValuesParams} PersistSubmittedManagedValuesParams */
|
|
18
|
+
/** @typedef {import('../types').ResolveApiKeyLoginFieldsParams} ResolveApiKeyLoginFieldsParams */
|
|
19
|
+
/** @typedef {import('../types').ResolveApiKeyLoginFieldsResult} ResolveApiKeyLoginFieldsResult */
|
|
20
|
+
/** @typedef {import('../types').StoredFieldValue} StoredFieldValue */
|
|
21
|
+
/** @typedef {import('../types').UpsertOrgManagedAuthValuesParams} UpsertOrgManagedAuthValuesParams */
|
|
22
|
+
/** @typedef {import('../types').UpsertUserManagedAuthValuesParams} UpsertUserManagedAuthValuesParams */
|
|
23
|
+
const connectorRegistry = /** @type {{ getManifest(platform: string, fallback?: boolean): AppConnectManifest }} */ ( /** @type {unknown} */(require('../connector/registry')));
|
|
24
|
+
const developerPortal = /** @type {DeveloperPortalManifestProvider} */ ( /** @type {unknown} */(require('../connector/developerPortal')));
|
|
25
|
+
const { AccountDataModel: RawAccountDataModel } = require('../models/accountDataModel');
|
|
26
|
+
const AccountDataModel = /** @type {{ findOne(options: Record<string, unknown>): Promise<ManagedAuthRecord | null>, findAll(options: Record<string, unknown>): Promise<ManagedAuthRecord[]>, create(values: Record<string, unknown>): Promise<ManagedAuthRecord>, destroy(options: Record<string, unknown>): Promise<number> }} */ (RawAccountDataModel);
|
|
4
27
|
const { Op } = require('sequelize');
|
|
5
|
-
const { encode, decoded } = require('../lib/encode');
|
|
6
|
-
|
|
28
|
+
const { encode: rawEncode, decoded: rawDecoded } = require('../lib/encode');
|
|
29
|
+
const encode = /** @type {(value: string) => string} */ (rawEncode);
|
|
30
|
+
const decoded = /** @type {(value: string) => string} */ (rawDecoded);
|
|
7
31
|
const MANAGED_AUTH_ORG_DATA_KEY = 'managed-auth-org';
|
|
8
32
|
const MANAGED_AUTH_USER_DATA_KEY = 'managed-auth-user';
|
|
9
33
|
const MANAGED_AUTH_LOGIN_FAILURE_DATA_KEY = 'managed-auth-login-failure';
|
|
10
|
-
|
|
34
|
+
/**
|
|
35
|
+
* @param {{ rcExtensionId: string | number }} params
|
|
36
|
+
* @returns {string}
|
|
37
|
+
*/
|
|
11
38
|
function getUserManagedAuthDataKey({ rcExtensionId }) {
|
|
12
39
|
return `${MANAGED_AUTH_USER_DATA_KEY}:${rcExtensionId}`;
|
|
13
40
|
}
|
|
14
|
-
|
|
41
|
+
/**
|
|
42
|
+
* @param {{ rcExtensionId: string | number }} params
|
|
43
|
+
* @returns {string}
|
|
44
|
+
*/
|
|
15
45
|
function getManagedAuthLoginFailureDataKey({ rcExtensionId }) {
|
|
16
46
|
return `${MANAGED_AUTH_LOGIN_FAILURE_DATA_KEY}:${rcExtensionId}`;
|
|
17
47
|
}
|
|
18
|
-
|
|
48
|
+
/**
|
|
49
|
+
* @param {unknown} value
|
|
50
|
+
* @returns {boolean}
|
|
51
|
+
*/
|
|
19
52
|
function isFilled(value) {
|
|
20
53
|
return value !== undefined && value !== null && value !== '';
|
|
21
54
|
}
|
|
22
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @param {ManagedAuthFieldDefinitionParams} params
|
|
57
|
+
* @returns {Promise<ManagedAuthFieldDefinition[]>}
|
|
58
|
+
*/
|
|
23
59
|
async function getApiKeyFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate = false }) {
|
|
24
60
|
if (!platform) {
|
|
25
61
|
return [];
|
|
@@ -27,23 +63,29 @@ async function getApiKeyFieldDefinitions({ rcAccountId, platform, connectorId, i
|
|
|
27
63
|
if (connectorId) {
|
|
28
64
|
const manifest = await developerPortal.getConnectorManifest({ rcAccountId, connectorId, isPrivate });
|
|
29
65
|
if (manifest?.platforms?.[platform]?.auth?.apiKey?.page?.content) {
|
|
30
|
-
return manifest.platforms[platform].auth.apiKey.page.content;
|
|
66
|
+
return /** @type {ManagedAuthFieldDefinition[]} */ (manifest.platforms[platform].auth.apiKey.page.content);
|
|
31
67
|
}
|
|
32
68
|
}
|
|
33
69
|
try {
|
|
34
70
|
const manifest = connectorRegistry.getManifest(platform, true);
|
|
35
|
-
return manifest?.platforms?.[platform]?.auth?.apiKey?.page?.content ?? [];
|
|
71
|
+
return /** @type {ManagedAuthFieldDefinition[]} */ (manifest?.platforms?.[platform]?.auth?.apiKey?.page?.content ?? []);
|
|
36
72
|
}
|
|
37
73
|
catch (error) {
|
|
38
74
|
return [];
|
|
39
75
|
}
|
|
40
76
|
}
|
|
41
|
-
|
|
77
|
+
/**
|
|
78
|
+
* @param {ManagedAuthFieldDefinitionParams} params
|
|
79
|
+
* @returns {Promise<ManagedAuthFieldDefinition[]>}
|
|
80
|
+
*/
|
|
42
81
|
async function getManagedFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate = false }) {
|
|
43
82
|
const fieldDefinitions = await getApiKeyFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate });
|
|
44
83
|
return fieldDefinitions.filter(field => field?.managed);
|
|
45
84
|
}
|
|
46
|
-
|
|
85
|
+
/**
|
|
86
|
+
* @param {ManagedAuthValue} value
|
|
87
|
+
* @returns {ManagedAuthStoredValue}
|
|
88
|
+
*/
|
|
47
89
|
function encryptStoredValue(value) {
|
|
48
90
|
return {
|
|
49
91
|
version: 1,
|
|
@@ -51,17 +93,24 @@ function encryptStoredValue(value) {
|
|
|
51
93
|
value: encode(JSON.stringify(value))
|
|
52
94
|
};
|
|
53
95
|
}
|
|
54
|
-
|
|
96
|
+
/**
|
|
97
|
+
* @param {ManagedAuthValue} value
|
|
98
|
+
* @returns {ManagedAuthValue}
|
|
99
|
+
*/
|
|
55
100
|
function decryptStoredValue(value) {
|
|
56
101
|
if (!value) {
|
|
57
102
|
return undefined;
|
|
58
103
|
}
|
|
59
|
-
|
|
60
|
-
|
|
104
|
+
const storedValue = /** @type {ManagedAuthStoredValue} */ (value);
|
|
105
|
+
if (storedValue?.encrypted && storedValue?.value) {
|
|
106
|
+
return JSON.parse(decoded(storedValue.value));
|
|
61
107
|
}
|
|
62
108
|
return value;
|
|
63
109
|
}
|
|
64
|
-
|
|
110
|
+
/**
|
|
111
|
+
* @param {{ rcAccountId?: string | number, platform?: string, dataKey: string }} params
|
|
112
|
+
* @returns {Promise<ManagedAuthRecord | null>}
|
|
113
|
+
*/
|
|
65
114
|
async function getManagedAuthRecord({ rcAccountId, platform, dataKey }) {
|
|
66
115
|
if (!rcAccountId || !platform) {
|
|
67
116
|
return null;
|
|
@@ -74,7 +123,10 @@ async function getManagedAuthRecord({ rcAccountId, platform, dataKey }) {
|
|
|
74
123
|
}
|
|
75
124
|
});
|
|
76
125
|
}
|
|
77
|
-
|
|
126
|
+
/**
|
|
127
|
+
* @param {import('../types').ManagedAuthAccountParams} params
|
|
128
|
+
* @returns {Promise<ManagedAuthValues>}
|
|
129
|
+
*/
|
|
78
130
|
async function getOrgManagedAuthValues({ rcAccountId, platform }) {
|
|
79
131
|
const record = await getManagedAuthRecord({
|
|
80
132
|
rcAccountId,
|
|
@@ -82,13 +134,17 @@ async function getOrgManagedAuthValues({ rcAccountId, platform }) {
|
|
|
82
134
|
dataKey: MANAGED_AUTH_ORG_DATA_KEY
|
|
83
135
|
});
|
|
84
136
|
const fields = record?.data?.fields ?? {};
|
|
137
|
+
/** @type {ManagedAuthValues} */
|
|
85
138
|
const decryptedFields = {};
|
|
86
139
|
Object.keys(fields).forEach(key => {
|
|
87
140
|
decryptedFields[key] = decryptStoredValue(fields[key]);
|
|
88
141
|
});
|
|
89
142
|
return decryptedFields;
|
|
90
143
|
}
|
|
91
|
-
|
|
144
|
+
/**
|
|
145
|
+
* @param {ManagedAuthUserParams} params
|
|
146
|
+
* @returns {Promise<ManagedAuthValues>}
|
|
147
|
+
*/
|
|
92
148
|
async function getUserManagedAuthValues({ rcAccountId, platform, rcExtensionId }) {
|
|
93
149
|
if (!rcExtensionId) {
|
|
94
150
|
return {};
|
|
@@ -100,13 +156,17 @@ async function getUserManagedAuthValues({ rcAccountId, platform, rcExtensionId }
|
|
|
100
156
|
dataKey: userDataKey
|
|
101
157
|
});
|
|
102
158
|
const fields = scopedRecord?.data?.fields ?? {};
|
|
159
|
+
/** @type {ManagedAuthValues} */
|
|
103
160
|
const decryptedFields = {};
|
|
104
161
|
Object.keys(fields).forEach(key => {
|
|
105
162
|
decryptedFields[key] = decryptStoredValue(fields[key]);
|
|
106
163
|
});
|
|
107
164
|
return decryptedFields;
|
|
108
165
|
}
|
|
109
|
-
|
|
166
|
+
/**
|
|
167
|
+
* @param {ManagedAuthLoginFailureParams} params
|
|
168
|
+
* @returns {Promise<boolean>}
|
|
169
|
+
*/
|
|
110
170
|
async function hasManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionId }) {
|
|
111
171
|
if (!rcExtensionId) {
|
|
112
172
|
return false;
|
|
@@ -118,7 +178,10 @@ async function hasManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionId
|
|
|
118
178
|
});
|
|
119
179
|
return !!record;
|
|
120
180
|
}
|
|
121
|
-
|
|
181
|
+
/**
|
|
182
|
+
* @param {ManagedAuthLoginFailureParams} params
|
|
183
|
+
* @returns {Promise<ManagedAuthRecord | undefined>}
|
|
184
|
+
*/
|
|
122
185
|
async function markManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionId }) {
|
|
123
186
|
if (!rcAccountId || !platform || !rcExtensionId) {
|
|
124
187
|
return;
|
|
@@ -143,7 +206,10 @@ async function markManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionI
|
|
|
143
206
|
data
|
|
144
207
|
});
|
|
145
208
|
}
|
|
146
|
-
|
|
209
|
+
/**
|
|
210
|
+
* @param {ManagedAuthLoginFailureParams} params
|
|
211
|
+
* @returns {Promise<number | undefined>}
|
|
212
|
+
*/
|
|
147
213
|
async function clearManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionId }) {
|
|
148
214
|
if (!rcAccountId || !platform || !rcExtensionId) {
|
|
149
215
|
return 0;
|
|
@@ -156,17 +222,20 @@ async function clearManagedAuthLoginFailure({ rcAccountId, platform, rcExtension
|
|
|
156
222
|
}
|
|
157
223
|
});
|
|
158
224
|
}
|
|
159
|
-
|
|
225
|
+
/**
|
|
226
|
+
* @param {UpsertOrgManagedAuthValuesParams} params
|
|
227
|
+
* @returns {Promise<ManagedAuthRecord>}
|
|
228
|
+
*/
|
|
160
229
|
async function upsertOrgManagedAuthValues({ rcAccountId, platform, values = {}, fieldsToRemove = [] }) {
|
|
161
230
|
const existingRecord = await getManagedAuthRecord({
|
|
162
231
|
rcAccountId,
|
|
163
232
|
platform,
|
|
164
233
|
dataKey: MANAGED_AUTH_ORG_DATA_KEY
|
|
165
234
|
});
|
|
235
|
+
/** @type {Record<string, unknown>} */
|
|
166
236
|
const nextFields = {
|
|
167
237
|
...(existingRecord?.data?.fields ?? {})
|
|
168
238
|
};
|
|
169
|
-
|
|
170
239
|
Object.keys(values).forEach(key => {
|
|
171
240
|
if (isFilled(values[key])) {
|
|
172
241
|
nextFields[key] = encryptStoredValue(values[key]);
|
|
@@ -175,11 +244,9 @@ async function upsertOrgManagedAuthValues({ rcAccountId, platform, values = {},
|
|
|
175
244
|
fieldsToRemove.forEach(key => {
|
|
176
245
|
delete nextFields[key];
|
|
177
246
|
});
|
|
178
|
-
|
|
179
247
|
const nextData = {
|
|
180
248
|
fields: nextFields
|
|
181
249
|
};
|
|
182
|
-
|
|
183
250
|
if (existingRecord) {
|
|
184
251
|
await existingRecord.update({ data: nextData });
|
|
185
252
|
return existingRecord;
|
|
@@ -191,7 +258,10 @@ async function upsertOrgManagedAuthValues({ rcAccountId, platform, values = {},
|
|
|
191
258
|
data: nextData
|
|
192
259
|
});
|
|
193
260
|
}
|
|
194
|
-
|
|
261
|
+
/**
|
|
262
|
+
* @param {UpsertUserManagedAuthValuesParams} params
|
|
263
|
+
* @returns {Promise<ManagedAuthRecord>}
|
|
264
|
+
*/
|
|
195
265
|
async function upsertUserManagedAuthValues({ rcAccountId, platform, rcExtensionId, rcUserName, values = {}, fieldsToRemove = [] }) {
|
|
196
266
|
if (!rcExtensionId) {
|
|
197
267
|
throw new Error('rcExtensionId is required for user managed auth values');
|
|
@@ -202,10 +272,10 @@ async function upsertUserManagedAuthValues({ rcAccountId, platform, rcExtensionI
|
|
|
202
272
|
platform,
|
|
203
273
|
dataKey: userDataKey
|
|
204
274
|
});
|
|
275
|
+
/** @type {Record<string, unknown>} */
|
|
205
276
|
const nextFields = {
|
|
206
277
|
...(existingRecord?.data?.fields ?? {})
|
|
207
278
|
};
|
|
208
|
-
|
|
209
279
|
Object.keys(values).forEach(key => {
|
|
210
280
|
if (isFilled(values[key])) {
|
|
211
281
|
nextFields[key] = encryptStoredValue(values[key]);
|
|
@@ -214,13 +284,11 @@ async function upsertUserManagedAuthValues({ rcAccountId, platform, rcExtensionI
|
|
|
214
284
|
fieldsToRemove.forEach(key => {
|
|
215
285
|
delete nextFields[key];
|
|
216
286
|
});
|
|
217
|
-
|
|
218
287
|
const nextData = {
|
|
219
288
|
rcExtensionId,
|
|
220
289
|
rcUserName: rcUserName ?? existingRecord?.data?.rcUserName ?? '',
|
|
221
290
|
fields: nextFields
|
|
222
291
|
};
|
|
223
|
-
|
|
224
292
|
if (existingRecord) {
|
|
225
293
|
await existingRecord.update({ data: nextData });
|
|
226
294
|
return existingRecord;
|
|
@@ -232,7 +300,10 @@ async function upsertUserManagedAuthValues({ rcAccountId, platform, rcExtensionI
|
|
|
232
300
|
data: nextData
|
|
233
301
|
});
|
|
234
302
|
}
|
|
235
|
-
|
|
303
|
+
/**
|
|
304
|
+
* @param {{ value: unknown }} params
|
|
305
|
+
* @returns {StoredFieldValue}
|
|
306
|
+
*/
|
|
236
307
|
function getStoredFieldValue({ value }) {
|
|
237
308
|
if (!isFilled(value)) {
|
|
238
309
|
return {
|
|
@@ -245,7 +316,9 @@ function getStoredFieldValue({ value }) {
|
|
|
245
316
|
value
|
|
246
317
|
};
|
|
247
318
|
}
|
|
248
|
-
|
|
319
|
+
/**
|
|
320
|
+
* @param {ManagedAuthAdminSettingsParams} params
|
|
321
|
+
*/
|
|
249
322
|
async function getManagedAuthAdminSettings({ platform, rcAccountId, connectorId, isPrivate = false }) {
|
|
250
323
|
const fieldDefinitions = await getManagedFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate });
|
|
251
324
|
const orgFieldDefinitions = fieldDefinitions.filter(field => field.managedScope === 'account');
|
|
@@ -262,27 +335,27 @@ async function getManagedAuthAdminSettings({ platform, rcAccountId, connectorId,
|
|
|
262
335
|
});
|
|
263
336
|
const userEntries = userRecords
|
|
264
337
|
.map(record => {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
338
|
+
const extensionIdFromDataKey = record.dataKey?.split(`${MANAGED_AUTH_USER_DATA_KEY}:`)?.[1];
|
|
339
|
+
const rcExtensionId = record?.data?.rcExtensionId ?? extensionIdFromDataKey;
|
|
340
|
+
if (!rcExtensionId) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
rcExtensionId,
|
|
345
|
+
rcUserName: record?.data?.rcUserName ?? '',
|
|
346
|
+
fields: record?.data?.fields ?? {}
|
|
347
|
+
};
|
|
348
|
+
})
|
|
276
349
|
.filter(Boolean);
|
|
277
|
-
|
|
350
|
+
/** @type {Record<string, StoredFieldValue>} */
|
|
278
351
|
const adminOrgValues = {};
|
|
279
352
|
orgFieldDefinitions.forEach(field => {
|
|
280
353
|
adminOrgValues[field.const] = getStoredFieldValue({
|
|
281
354
|
value: orgValues[field.const]
|
|
282
355
|
});
|
|
283
356
|
});
|
|
284
|
-
|
|
285
357
|
const adminUserValues = userEntries.map(entry => {
|
|
358
|
+
/** @type {Record<string, StoredFieldValue>} */
|
|
286
359
|
const fields = {};
|
|
287
360
|
userFieldDefinitions.forEach(field => {
|
|
288
361
|
fields[field.const] = getStoredFieldValue({
|
|
@@ -295,7 +368,6 @@ async function getManagedAuthAdminSettings({ platform, rcAccountId, connectorId,
|
|
|
295
368
|
fields
|
|
296
369
|
};
|
|
297
370
|
});
|
|
298
|
-
|
|
299
371
|
return {
|
|
300
372
|
hasManagedAuth: fieldDefinitions.length > 0,
|
|
301
373
|
fields: fieldDefinitions,
|
|
@@ -305,18 +377,21 @@ async function getManagedAuthAdminSettings({ platform, rcAccountId, connectorId,
|
|
|
305
377
|
userValues: adminUserValues
|
|
306
378
|
};
|
|
307
379
|
}
|
|
308
|
-
|
|
380
|
+
/**
|
|
381
|
+
* @param {ManagedAuthStateParams} params
|
|
382
|
+
* @returns {Promise<ManagedAuthState>}
|
|
383
|
+
*/
|
|
309
384
|
async function getManagedAuthState({ platform, rcAccountId, rcExtensionId, connectorId, isPrivate = false }) {
|
|
310
385
|
const fieldDefinitions = await getApiKeyFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate });
|
|
311
386
|
const managedFieldDefinitions = fieldDefinitions.filter(field => field?.managed);
|
|
312
387
|
const orgValues = await getOrgManagedAuthValues({ rcAccountId, platform });
|
|
313
388
|
const userValues = await getUserManagedAuthValues({ rcAccountId, platform, rcExtensionId });
|
|
314
389
|
const hasLoginFailureFallback = await hasManagedAuthLoginFailure({ rcAccountId, platform, rcExtensionId });
|
|
315
|
-
|
|
390
|
+
/** @type {string[]} */
|
|
316
391
|
const visibleFieldConsts = [];
|
|
392
|
+
/** @type {string[]} */
|
|
317
393
|
const missingRequiredFieldConsts = [];
|
|
318
394
|
let allRequiredFieldsSatisfied = true;
|
|
319
|
-
|
|
320
395
|
// Default behavior for connectors without managed auth: render full API key form.
|
|
321
396
|
if (managedFieldDefinitions.length === 0) {
|
|
322
397
|
return {
|
|
@@ -327,7 +402,6 @@ async function getManagedAuthState({ platform, rcAccountId, rcExtensionId, conne
|
|
|
327
402
|
fallbackToManualAuth: false
|
|
328
403
|
};
|
|
329
404
|
}
|
|
330
|
-
|
|
331
405
|
if (hasLoginFailureFallback) {
|
|
332
406
|
return {
|
|
333
407
|
hasManagedAuth: true,
|
|
@@ -337,7 +411,6 @@ async function getManagedAuthState({ platform, rcAccountId, rcExtensionId, conne
|
|
|
337
411
|
fallbackToManualAuth: true
|
|
338
412
|
};
|
|
339
413
|
}
|
|
340
|
-
|
|
341
414
|
fieldDefinitions.forEach(field => {
|
|
342
415
|
const storedValue = field.managed
|
|
343
416
|
? (field.managedScope === 'user' ? userValues[field.const] : orgValues[field.const])
|
|
@@ -356,7 +429,6 @@ async function getManagedAuthState({ platform, rcAccountId, rcExtensionId, conne
|
|
|
356
429
|
allRequiredFieldsSatisfied = false;
|
|
357
430
|
}
|
|
358
431
|
});
|
|
359
|
-
|
|
360
432
|
return {
|
|
361
433
|
hasManagedAuth: managedFieldDefinitions.length > 0,
|
|
362
434
|
allRequiredFieldsSatisfied,
|
|
@@ -365,20 +437,23 @@ async function getManagedAuthState({ platform, rcAccountId, rcExtensionId, conne
|
|
|
365
437
|
fallbackToManualAuth: false
|
|
366
438
|
};
|
|
367
439
|
}
|
|
368
|
-
|
|
440
|
+
/**
|
|
441
|
+
* @param {ResolveApiKeyLoginFieldsParams} params
|
|
442
|
+
* @returns {Promise<ResolveApiKeyLoginFieldsResult>}
|
|
443
|
+
*/
|
|
369
444
|
async function resolveApiKeyLoginFields({ platform, rcAccountId, rcExtensionId, connectorId, isPrivate = false, apiKey, additionalInfo = {}, preferSubmittedValuesForManagedFields = false }) {
|
|
370
445
|
const fieldDefinitions = await getApiKeyFieldDefinitions({ rcAccountId, platform, connectorId, isPrivate });
|
|
446
|
+
/** @type {ManagedAuthValues} */
|
|
371
447
|
const resolvedAdditionalInfo = {
|
|
372
448
|
...(additionalInfo ?? {})
|
|
373
449
|
};
|
|
374
450
|
if (resolvedAdditionalInfo.apiKey === undefined && apiKey !== undefined) {
|
|
375
451
|
resolvedAdditionalInfo.apiKey = apiKey;
|
|
376
452
|
}
|
|
377
|
-
|
|
378
453
|
const orgValues = await getOrgManagedAuthValues({ rcAccountId, platform });
|
|
379
454
|
const userValues = await getUserManagedAuthValues({ rcAccountId, platform, rcExtensionId });
|
|
455
|
+
/** @type {string[]} */
|
|
380
456
|
const missingRequiredFieldConsts = [];
|
|
381
|
-
|
|
382
457
|
fieldDefinitions.forEach(field => {
|
|
383
458
|
if (!field?.managed) {
|
|
384
459
|
if (field.required && !isFilled(resolvedAdditionalInfo[field.const])) {
|
|
@@ -386,7 +461,6 @@ async function resolveApiKeyLoginFields({ platform, rcAccountId, rcExtensionId,
|
|
|
386
461
|
}
|
|
387
462
|
return;
|
|
388
463
|
}
|
|
389
|
-
|
|
390
464
|
const storedValue = field.managedScope === 'user'
|
|
391
465
|
? userValues[field.const]
|
|
392
466
|
: orgValues[field.const];
|
|
@@ -395,19 +469,20 @@ async function resolveApiKeyLoginFields({ platform, rcAccountId, rcExtensionId,
|
|
|
395
469
|
if (isFilled(storedValue) && !(preferSubmittedValuesForManagedFields && isFilled(resolvedAdditionalInfo[field.const]))) {
|
|
396
470
|
resolvedAdditionalInfo[field.const] = storedValue;
|
|
397
471
|
}
|
|
398
|
-
|
|
399
472
|
if (field.required && !isFilled(resolvedAdditionalInfo[field.const])) {
|
|
400
473
|
missingRequiredFieldConsts.push(field.const);
|
|
401
474
|
}
|
|
402
475
|
});
|
|
403
|
-
|
|
404
476
|
return {
|
|
405
477
|
resolvedAdditionalInfo,
|
|
406
478
|
resolvedApiKey: resolvedAdditionalInfo.apiKey ?? apiKey,
|
|
407
479
|
missingRequiredFieldConsts
|
|
408
480
|
};
|
|
409
481
|
}
|
|
410
|
-
|
|
482
|
+
/**
|
|
483
|
+
* @param {PersistSubmittedManagedValuesParams} params
|
|
484
|
+
* @returns {Promise<void>}
|
|
485
|
+
*/
|
|
411
486
|
async function persistSubmittedManagedValues({ platform, rcAccountId, rcExtensionId, rcUserName, submittedManagedValues = {} }) {
|
|
412
487
|
if (!rcAccountId) {
|
|
413
488
|
return;
|
|
@@ -429,7 +504,6 @@ async function persistSubmittedManagedValues({ platform, rcAccountId, rcExtensio
|
|
|
429
504
|
});
|
|
430
505
|
}
|
|
431
506
|
}
|
|
432
|
-
|
|
433
507
|
exports.MANAGED_AUTH_ORG_DATA_KEY = MANAGED_AUTH_ORG_DATA_KEY;
|
|
434
508
|
exports.MANAGED_AUTH_USER_DATA_KEY = MANAGED_AUTH_USER_DATA_KEY;
|
|
435
509
|
exports.getApiKeyFieldDefinitions = getApiKeyFieldDefinitions;
|
|
@@ -443,4 +517,3 @@ exports.resolveApiKeyLoginFields = resolveApiKeyLoginFields;
|
|
|
443
517
|
exports.persistSubmittedManagedValues = persistSubmittedManagedValues;
|
|
444
518
|
exports.upsertOrgManagedAuthValues = upsertOrgManagedAuthValues;
|
|
445
519
|
exports.upsertUserManagedAuthValues = upsertUserManagedAuthValues;
|
|
446
|
-
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** @typedef {import('../types').ManagedOAuthAccountParams} ManagedOAuthAccountParams */
|
|
2
|
+
/** @typedef {import('../types').ManagedOAuthPendingParams} ManagedOAuthPendingParams */
|
|
3
|
+
/** @typedef {import('../types').ManagedOAuthRecord} ManagedOAuthRecord */
|
|
4
|
+
/** @typedef {import('../types').ManagedOAuthResolution} ManagedOAuthResolution */
|
|
5
|
+
/** @typedef {import('../types').ManagedOAuthState} ManagedOAuthState */
|
|
6
|
+
/** @typedef {import('../types').ManagedOAuthStateParams} ManagedOAuthStateParams */
|
|
7
|
+
/** @typedef {import('../types').ManagedOAuthStoredData} ManagedOAuthStoredData */
|
|
8
|
+
/** @typedef {import('../types').ManagedOAuthStoredValue} ManagedOAuthStoredValue */
|
|
9
|
+
/** @typedef {import('../types').ManagedOAuthValue} ManagedOAuthValue */
|
|
10
|
+
/** @typedef {import('../types').ManagedOAuthValues} ManagedOAuthValues */
|
|
11
|
+
/** @typedef {import('../types').ResetManagedOAuthResult} ResetManagedOAuthResult */
|
|
12
|
+
/** @typedef {import('../types').UpsertPendingManagedOAuthParams} UpsertPendingManagedOAuthParams */
|
|
13
|
+
export {};
|