diff --git a/packages/connector-alipay-native/src/index.test.ts b/packages/connector-alipay-native/src/index.test.ts index 11f584307..93e879976 100644 --- a/packages/connector-alipay-native/src/index.test.ts +++ b/packages/connector-alipay-native/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import AlipayNativeConnector from '.'; import { alipayEndpoint } from './constant'; import { mockedAlipayNativeConfig, mockedAlipayNativeConfigWithValidPrivateKey } from './mock'; +import { AlipayNativeConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -25,21 +26,21 @@ describe('validateConfig', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = alipayNativeMethods.validateConfig; + const validator: ValidateConfig = alipayNativeMethods.validateConfig; expect(() => { validator(mockedAlipayNativeConfig); }).not.toThrow(); }); it('should fail on empty config', async () => { - const validator: ValidateConfig = alipayNativeMethods.validateConfig; + const validator: ValidateConfig = alipayNativeMethods.validateConfig; expect(() => { validator({}); }).toThrow(); }); it('should fail when missing required properties', async () => { - const validator: ValidateConfig = alipayNativeMethods.validateConfig; + const validator: ValidateConfig = alipayNativeMethods.validateConfig; expect(() => { validator({ appId: 'appId' }); }).toThrow(); diff --git a/packages/connector-alipay-web/src/index.test.ts b/packages/connector-alipay-web/src/index.test.ts index d6fff86bc..262906ee3 100644 --- a/packages/connector-alipay-web/src/index.test.ts +++ b/packages/connector-alipay-web/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import AlipayConnector from '.'; import { alipayEndpoint, authorizationEndpoint } from './constant'; import { mockedAlipayConfig, mockedAlipayConfigWithValidPrivateKey } from './mock'; +import { AlipayConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -25,7 +26,7 @@ describe('validateConfig', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = alipayMethods.validateConfig; + const validator: ValidateConfig = alipayMethods.validateConfig; expect(() => { validator({ appId: 'appId', @@ -36,14 +37,14 @@ describe('validateConfig', () => { }); it('should fail on empty config', async () => { - const validator: ValidateConfig = alipayMethods.validateConfig; + const validator: ValidateConfig = alipayMethods.validateConfig; expect(() => { validator({}); }).toThrow(); }); it('should fail when missing required properties', async () => { - const validator: ValidateConfig = alipayMethods.validateConfig; + const validator: ValidateConfig = alipayMethods.validateConfig; expect(() => { validator({ appId: 'appId' }); }).toThrow(); diff --git a/packages/connector-aliyun-dm/src/index.test.ts b/packages/connector-aliyun-dm/src/index.test.ts index 76a667066..f1b0c4b42 100644 --- a/packages/connector-aliyun-dm/src/index.test.ts +++ b/packages/connector-aliyun-dm/src/index.test.ts @@ -3,6 +3,7 @@ import { GetConnectorConfig, ValidateConfig } from '@logto/connector-types'; import AliyunDmConnector from '.'; import { mockedConfig } from './mock'; import { singleSendMail } from './single-send-mail'; +import { AliyunDmConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -34,7 +35,7 @@ describe('validateConfig()', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = aliyunDmMethods.validateConfig; + const validator: ValidateConfig = aliyunDmMethods.validateConfig; expect(() => { validator({ accessKeyId: 'accessKeyId', @@ -46,7 +47,7 @@ describe('validateConfig()', () => { }); it('should fail if config is invalid', async () => { - const validator: ValidateConfig = aliyunDmMethods.validateConfig; + const validator: ValidateConfig = aliyunDmMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-aliyun-sms/src/index.test.ts b/packages/connector-aliyun-sms/src/index.test.ts index 31840ac73..908145f78 100644 --- a/packages/connector-aliyun-sms/src/index.test.ts +++ b/packages/connector-aliyun-sms/src/index.test.ts @@ -3,6 +3,7 @@ import { GetConnectorConfig, ValidateConfig } from '@logto/connector-types'; import AliyunSmsConnector from '.'; import { mockedConnectorConfig, mockedValidConnectorConfig, phoneTest, codeTest } from './mock'; import { sendSms } from './single-send-text'; +import { AliyunSmsConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -30,14 +31,14 @@ describe('validateConfig()', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = aliyunSmsMethods.validateConfig; + const validator: ValidateConfig = aliyunSmsMethods.validateConfig; expect(() => { validator(mockedValidConnectorConfig); }).not.toThrow(); }); it('should fail if config is invalid', async () => { - const validator: ValidateConfig = aliyunSmsMethods.validateConfig; + const validator: ValidateConfig = aliyunSmsMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-apple/src/index.test.ts b/packages/connector-apple/src/index.test.ts index 190bf903e..6126d74b1 100644 --- a/packages/connector-apple/src/index.test.ts +++ b/packages/connector-apple/src/index.test.ts @@ -9,6 +9,7 @@ import { jwtVerify } from 'jose'; import AppleConnector from '.'; import { authorizationEndpoint } from './constant'; import { mockedConfig } from './mock'; +import { AppleConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -50,14 +51,14 @@ describe('validateConfig', () => { */ it('should be true on valid config', async () => { - const validator: ValidateConfig = appleMethods.validateConfig; + const validator: ValidateConfig = appleMethods.validateConfig; expect(() => { validator({ clientId: 'clientId' }); }).not.toThrow(); }); it('should be false on empty config', async () => { - const validator: ValidateConfig = appleMethods.validateConfig; + const validator: ValidateConfig = appleMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-facebook/src/index.test.ts b/packages/connector-facebook/src/index.test.ts index b2cd7f503..96dc270ab 100644 --- a/packages/connector-facebook/src/index.test.ts +++ b/packages/connector-facebook/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import FacebookConnector from '.'; import { accessTokenEndpoint, authorizationEndpoint, userInfoEndpoint } from './constant'; import { clientId, clientSecret, code, dummyRedirectUri, fields, mockedConfig } from './mock'; +import { FacebookConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -30,14 +31,14 @@ describe('facebook connector', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = facebookMethods.validateConfig; + const validator: ValidateConfig = facebookMethods.validateConfig; expect(() => { validator({ clientId, clientSecret }); }).not.toThrow(); }); it('should fail on invalid config', async () => { - const validator: ValidateConfig = facebookMethods.validateConfig; + const validator: ValidateConfig = facebookMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-github/src/index.test.ts b/packages/connector-github/src/index.test.ts index 31939be71..1f22a8b30 100644 --- a/packages/connector-github/src/index.test.ts +++ b/packages/connector-github/src/index.test.ts @@ -10,6 +10,7 @@ import * as qs from 'query-string'; import GithubConnector from '.'; import { accessTokenEndpoint, authorizationEndpoint, userInfoEndpoint } from './constant'; import { mockedConfig } from './mock'; +import { GithubConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -77,21 +78,21 @@ describe('validateConfig', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = githubMethods.validateConfig; + const validator: ValidateConfig = githubMethods.validateConfig; expect(() => { validator({ clientId: 'clientId', clientSecret: 'clientSecret' }); }).not.toThrow(); }); it('should fail on empty config', async () => { - const validator: ValidateConfig = githubMethods.validateConfig; + const validator: ValidateConfig = githubMethods.validateConfig; expect(() => { validator({}); }).toThrow(); }); it('should fail when missing clientSecret', async () => { - const validator: ValidateConfig = githubMethods.validateConfig; + const validator: ValidateConfig = githubMethods.validateConfig; expect(() => { validator({ clientId: 'clientId' }); }).toThrow(); diff --git a/packages/connector-google/src/index.test.ts b/packages/connector-google/src/index.test.ts index 4766725d6..c5451d3dc 100644 --- a/packages/connector-google/src/index.test.ts +++ b/packages/connector-google/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import GoogleConnector from '.'; import { accessTokenEndpoint, authorizationEndpoint, userInfoEndpoint } from './constant'; import { mockedConfig } from './mock'; +import { GoogleConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -30,14 +31,14 @@ describe('google connector', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = googleMethods.validateConfig; + const validator: ValidateConfig = googleMethods.validateConfig; expect(() => { validator({ clientId: 'clientId', clientSecret: 'clientSecret' }); }).not.toThrow(); }); it('should fail on invalid config', async () => { - const validator: ValidateConfig = googleMethods.validateConfig; + const validator: ValidateConfig = googleMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-sendgrid-mail/src/index.test.ts b/packages/connector-sendgrid-mail/src/index.test.ts index 2154b2c4e..860f26778 100644 --- a/packages/connector-sendgrid-mail/src/index.test.ts +++ b/packages/connector-sendgrid-mail/src/index.test.ts @@ -2,7 +2,7 @@ import { GetConnectorConfig, ValidateConfig } from '@logto/connector-types'; import SendGridMailConnector from '.'; import { mockedConfig } from './mock'; -import { ContextType } from './types'; +import { ContextType, SendGridMailConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -25,7 +25,7 @@ describe('validateConfig()', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = sendGridMailMethods.validateConfig; + const validator: ValidateConfig = sendGridMailMethods.validateConfig; expect(() => { validator({ apiKey: 'apiKey', @@ -44,7 +44,7 @@ describe('validateConfig()', () => { }); it('should be false if config is invalid', async () => { - const validator: ValidateConfig = sendGridMailMethods.validateConfig; + const validator: ValidateConfig = sendGridMailMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-smtp/src/index.test.ts b/packages/connector-smtp/src/index.test.ts index 24d504d1c..783282960 100644 --- a/packages/connector-smtp/src/index.test.ts +++ b/packages/connector-smtp/src/index.test.ts @@ -1,6 +1,7 @@ import { GetConnectorConfig, ValidateConfig } from '@logto/connector-types'; import SmtpConnector from '.'; +import { SmtpConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -17,7 +18,7 @@ describe('validateConfig()', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = smtpMethods.validateConfig; + const validator: ValidateConfig = smtpMethods.validateConfig; expect(() => { validator({ host: 'smtp.testing.com', @@ -56,7 +57,7 @@ describe('validateConfig()', () => { }); it('should be false if config is invalid', async () => { - const validator: ValidateConfig = smtpMethods.validateConfig; + const validator: ValidateConfig = smtpMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-twilio-sms/src/index.test.ts b/packages/connector-twilio-sms/src/index.test.ts index 703cafd01..5ea339723 100644 --- a/packages/connector-twilio-sms/src/index.test.ts +++ b/packages/connector-twilio-sms/src/index.test.ts @@ -2,6 +2,7 @@ import { GetConnectorConfig, ValidateConfig } from '@logto/connector-types'; import TwilioSmsConnector from '.'; import { mockedConfig } from './mock'; +import { TwilioSmsConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -18,14 +19,14 @@ describe('validateConfig()', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = twilioSmsMethods.validateConfig; + const validator: ValidateConfig = twilioSmsMethods.validateConfig; expect(() => { validator(mockedConfig); }).not.toThrow(); }); it('throws if config is invalid', async () => { - const validator: ValidateConfig = twilioSmsMethods.validateConfig; + const validator: ValidateConfig = twilioSmsMethods.validateConfig; expect(() => { validator({}); }).toThrow(); diff --git a/packages/connector-wechat-native/src/index.test.ts b/packages/connector-wechat-native/src/index.test.ts index bffa3286e..27e0144b2 100644 --- a/packages/connector-wechat-native/src/index.test.ts +++ b/packages/connector-wechat-native/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import WechatNativeConnector from '.'; import { accessTokenEndpoint, authorizationEndpoint, userInfoEndpoint } from './constant'; import { mockedConfig } from './mock'; +import { WechatNativeConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -102,21 +103,21 @@ describe('validateConfig', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = wechatNativeMethods.validateConfig; + const validator: ValidateConfig = wechatNativeMethods.validateConfig; expect(() => { validator({ appId: 'appId', appSecret: 'appSecret' }); }).not.toThrow(); }); it('should fail on empty config', async () => { - const validator: ValidateConfig = wechatNativeMethods.validateConfig; + const validator: ValidateConfig = wechatNativeMethods.validateConfig; expect(() => { validator({}); }).toThrow(); }); it('should fail when missing appSecret', async () => { - const validator: ValidateConfig = wechatNativeMethods.validateConfig; + const validator: ValidateConfig = wechatNativeMethods.validateConfig; expect(() => { validator({ appId: 'appId' }); }).toThrow(); diff --git a/packages/connector-wechat-web/src/index.test.ts b/packages/connector-wechat-web/src/index.test.ts index c4539899c..69146af89 100644 --- a/packages/connector-wechat-web/src/index.test.ts +++ b/packages/connector-wechat-web/src/index.test.ts @@ -9,6 +9,7 @@ import nock from 'nock'; import WechatConnector from '.'; import { accessTokenEndpoint, authorizationEndpoint, userInfoEndpoint } from './constant'; import { mockedConfig } from './mock'; +import { WechatConfig } from './types'; const getConnectorConfig = jest.fn() as GetConnectorConfig; @@ -102,21 +103,21 @@ describe('validateConfig', () => { */ it('should pass on valid config', async () => { - const validator: ValidateConfig = wechatMethods.validateConfig; + const validator: ValidateConfig = wechatMethods.validateConfig; expect(() => { validator({ appId: 'appId', appSecret: 'appSecret' }); }).not.toThrow(); }); it('should fail on empty config', async () => { - const validator: ValidateConfig = wechatMethods.validateConfig; + const validator: ValidateConfig = wechatMethods.validateConfig; expect(() => { validator({}); }).toThrow(); }); it('should fail when missing appSecret', async () => { - const validator: ValidateConfig = wechatMethods.validateConfig; + const validator: ValidateConfig = wechatMethods.validateConfig; expect(() => { validator({ appId: 'appId' }); }).toThrow(); diff --git a/packages/core/src/routes/connector.ts b/packages/core/src/routes/connector.ts index f96dfc456..f87346f11 100644 --- a/packages/core/src/routes/connector.ts +++ b/packages/core/src/routes/connector.ts @@ -1,5 +1,4 @@ import { - ValidateConfig, ConnectorInstance, EmailConnectorInstance, SmsConnectorInstance, @@ -89,6 +88,7 @@ export default function connectorRoutes(router: T) { const connectorInstance = await getConnectorInstanceById(id); const { connector: { config }, + validateConfig, metadata, } = connectorInstance; @@ -96,8 +96,7 @@ export default function connectorRoutes(router: T) { * Assertion functions always need explicit annotations. * See https://github.com/microsoft/TypeScript/issues/36931#issuecomment-589753014 */ - // eslint-disable-next-line unicorn/consistent-destructuring - const validator: ValidateConfig = connectorInstance.validateConfig; + const validator: typeof validateConfig = validateConfig; if (enabled) { validator(config); @@ -145,15 +144,13 @@ export default function connectorRoutes(router: T) { body, } = ctx.guard; - const connectorInstance = await getConnectorInstanceById(id); - const { metadata } = connectorInstance; + const { metadata, validateConfig } = await getConnectorInstanceById(id); /** * Assertion functions always need explicit annotations. * See https://github.com/microsoft/TypeScript/issues/36931#issuecomment-589753014 */ - // eslint-disable-next-line unicorn/consistent-destructuring - const validator: ValidateConfig = connectorInstance.validateConfig; + const validator: typeof validateConfig = validateConfig; if (body.config) { validator(body.config);