0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-03-17 22:31:28 -05:00

feat: update connectors table and load connector logic (#2468)

Co-authored-by: wangsijie <wangsijie@silverhand.io>
This commit is contained in:
Darcy Ye 2022-11-18 12:06:53 +08:00 committed by GitHub
parent 9487611b11
commit 8a7a9e418e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 153 additions and 65 deletions

View file

@ -18,8 +18,8 @@
},
"devDependencies": {
"@fontsource/roboto-mono": "^4.5.7",
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@logto/phrases": "workspace:^",
"@logto/phrases-ui": "workspace:^",
"@logto/react": "1.0.0-beta.13",

View file

@ -20,9 +20,9 @@
},
"dependencies": {
"@logto/cli": "workspace:^",
"@logto/connector-kit": "1.0.0-beta.20",
"@logto/connector-kit": "1.0.0-beta.22",
"@logto/core-kit": "^1.0.0-beta.18",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.21",
"@logto/phrases": "workspace:^",
"@logto/phrases-ui": "workspace:^",
"@logto/schemas": "workspace:^",

View file

@ -80,6 +80,9 @@ export const mockConnector0: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_123,
syncProfile: false,
metadata: {},
connectorId: 'id0',
};
export const mockConnector1: Connector = {
@ -87,6 +90,9 @@ export const mockConnector1: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_234,
syncProfile: false,
metadata: {},
connectorId: 'id1',
};
export const mockConnector2: Connector = {
@ -94,6 +100,9 @@ export const mockConnector2: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_345,
syncProfile: false,
metadata: {},
connectorId: 'id2',
};
export const mockConnector3: Connector = {
@ -101,6 +110,9 @@ export const mockConnector3: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_456,
syncProfile: false,
metadata: {},
connectorId: 'id3',
};
export const mockConnector4: Connector = {
@ -108,6 +120,9 @@ export const mockConnector4: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_567,
syncProfile: false,
metadata: {},
connectorId: 'id4',
};
export const mockConnector5: Connector = {
@ -115,6 +130,9 @@ export const mockConnector5: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_567,
syncProfile: false,
metadata: {},
connectorId: 'id5',
};
export const mockConnector6: Connector = {
@ -122,4 +140,7 @@ export const mockConnector6: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_567,
syncProfile: false,
metadata: {},
connectorId: 'id6',
};

View file

@ -30,6 +30,9 @@ export const mockConnector: Connector = {
enabled: true,
config: {},
createdAt: 1_234_567_890_123,
syncProfile: false,
metadata: {},
connectorId: 'id',
};
export const mockLogtoConnector = {
@ -222,6 +225,9 @@ export const mockSocialConnectors: LogtoConnector[] = [
enabled: false,
config: {},
createdAt: 1_234_567_890_123,
syncProfile: false,
metadata: {},
connectorId: 'id0',
},
metadata: {
...mockMetadata,
@ -236,6 +242,9 @@ export const mockSocialConnectors: LogtoConnector[] = [
enabled: true,
config: {},
createdAt: 1_234_567_890_123,
syncProfile: false,
metadata: {},
connectorId: 'id1',
},
metadata: {
...mockMetadata,
@ -250,6 +259,9 @@ export const mockSocialConnectors: LogtoConnector[] = [
enabled: false,
config: {},
createdAt: 1_234_567_890_123,
syncProfile: false,
metadata: {},
connectorId: 'id2',
},
metadata: {
...mockMetadata,

View file

@ -92,20 +92,20 @@ const loadConnectors = async () => {
export const getLogtoConnectors = async (): Promise<LogtoConnector[]> => {
const connectors = await findAllConnectors();
const connectorMap = new Map(connectors.map((connector) => [connector.id, connector]));
const logtoConnectors = await loadConnectors();
const virtualConnectors = await loadConnectors();
return logtoConnectors.map((element) => {
const { id } = element.metadata;
const connector = connectorMap.get(id);
return connectors.map((connector) => {
const { metadata, connectorId } = connector;
const virtualConnector = virtualConnectors.find(({ metadata: { id } }) => id === connectorId);
if (!connector) {
throw new RequestError({ code: 'entity.not_found', id, status: 404 });
if (!virtualConnector) {
throw new RequestError({ code: 'entity.not_found', connectorId, status: 404 });
}
return {
...element,
...virtualConnector,
metadata: { ...virtualConnector.metadata, ...metadata },
dbEntry: connector,
};
});
@ -144,6 +144,7 @@ export const initConnectors = async () => {
newConnectors.map(async ({ metadata: { id } }) => {
await insertConnector({
id,
connectorId: id,
});
})
);

View file

@ -10,6 +10,9 @@ const connectors: Connector[] = [
enabled: true,
config: { foo: 'bar' },
createdAt: 0,
syncProfile: false,
connectorId: 'id',
metadata: {},
},
];

View file

@ -44,18 +44,26 @@ describe('connector queries', () => {
const connector = {
...mockConnector,
config: JSON.stringify(mockConnector.config),
metadata: JSON.stringify(mockConnector.metadata),
};
const expectSql = `
insert into "connectors" ("id", "enabled", "config")
values ($1, $2, $3)
insert into "connectors" ("id", "enabled", "sync_profile", "connector_id", "config", "metadata")
values ($1, $2, $3, $4, $5, $6)
returning *
`;
mockQuery.mockImplementationOnce(async (sql, values) => {
expectSqlAssert(sql, expectSql);
expect(values).toEqual([connector.id, connector.enabled, connector.config]);
expect(values).toEqual([
connector.id,
connector.enabled,
connector.syncProfile,
connector.connectorId,
connector.config,
connector.metadata,
]);
return createMockQueryResult([connector]);
});

View file

@ -17,8 +17,8 @@
"stylelint": "stylelint \"src/**/*.scss\""
},
"devDependencies": {
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@logto/phrases": "workspace:^",
"@logto/react": "1.0.0-beta.13",
"@logto/schemas": "workspace:^",

View file

@ -31,8 +31,8 @@
"url": "https://github.com/logto-io/logto/issues"
},
"dependencies": {
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@silverhand/essentials": "^1.3.0",
"zod": "^3.19.1"
},

View file

@ -31,8 +31,8 @@
"url": "https://github.com/logto-io/logto/issues"
},
"dependencies": {
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@silverhand/essentials": "^1.3.0",
"zod": "^3.19.1"
},

View file

@ -0,0 +1,25 @@
import { sql } from 'slonik';
import type { AlterationScript } from '../lib/types/alteration';
const alteration: AlterationScript = {
up: async (pool) => {
await pool.query(sql`
ALTER TABLE connectors ADD COLUMN sync_profile boolean NOT NULL DEFAULT false;
ALTER TABLE connectors ADD COLUMN connector_id varchar(128);
UPDATE connectors SET connector_id = id;
ALTER TABLE connectors ALTER COLUMN connector_id SET NOT NULL;
ALTER TABLE connectors ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb;
`);
},
down: async (pool) => {
await pool.query(sql`
DELETE FROM connectors WHERE id <> connector_id;
ALTER TABLE connectors DROP COLUMN metadata;
ALTER TABLE connectors DROP COLUMN connector_id;
ALTER TABLE connectors DROP COLUMN sync_profile;
`);
},
};
export default alteration;

View file

@ -67,9 +67,9 @@
},
"prettier": "@silverhand/eslint-config/.prettierrc",
"dependencies": {
"@logto/connector-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/connector-kit": "1.0.0-beta.22",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@logto/phrases": "workspace:^",
"@logto/phrases-ui": "workspace:^",
"zod": "^3.19.1"

View file

@ -2,6 +2,11 @@ import { hexColorRegEx } from '@logto/core-kit';
import { languageTagGuard } from '@logto/language-kit';
import { z } from 'zod';
export {
configurableConnectorMetadataGuard,
type ConfigurableConnectorMetadata,
} from '@logto/connector-kit';
/**
* Commonly Used
*/

View file

@ -5,6 +5,6 @@ import type { Connector } from '../db-entries';
export type { ConnectorMetadata } from '@logto/connector-kit';
export { ConnectorType, ConnectorPlatform } from '@logto/connector-kit';
export type ConnectorResponse = Connector &
export type ConnectorResponse = Omit<Connector, 'metadata'> &
Omit<BaseConnector<ConnectorType>, 'configGuard' | 'metadata'> &
ConnectorMetadata;

View file

@ -1,7 +1,10 @@
create table connectors (
id varchar(128) not null,
enabled boolean not null default FALSE,
sync_profile boolean not null default FALSE,
connector_id varchar(128) not null,
config jsonb /* @use ArbitraryObject */ not null default '{}'::jsonb,
metadata jsonb /* @use ConfigurableConnectorMetadata */ not null default '{}'::jsonb,
created_at timestamptz not null default(now()),
primary key (id)
);

View file

@ -16,8 +16,8 @@
"test": "jest"
},
"devDependencies": {
"@logto/core-kit": "1.0.0-beta.20",
"@logto/language-kit": "1.0.0-beta.20",
"@logto/core-kit": "1.0.0-beta.21",
"@logto/language-kit": "1.0.0-beta.21",
"@logto/phrases": "workspace:^",
"@logto/phrases-ui": "workspace:^",
"@logto/schemas": "workspace:^",

86
pnpm-lock.yaml generated
View file

@ -105,8 +105,8 @@ importers:
packages/console:
specifiers:
'@fontsource/roboto-mono': ^4.5.7
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': workspace:^
'@logto/phrases-ui': workspace:^
'@logto/react': 1.0.0-beta.13
@ -177,8 +177,8 @@ importers:
zod: ^3.19.1
devDependencies:
'@fontsource/roboto-mono': 4.5.7
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': link:../phrases
'@logto/phrases-ui': link:../phrases-ui
'@logto/react': 1.0.0-beta.13_react@18.2.0
@ -251,9 +251,9 @@ importers:
packages/core:
specifiers:
'@logto/cli': workspace:^
'@logto/connector-kit': 1.0.0-beta.20
'@logto/connector-kit': 1.0.0-beta.22
'@logto/core-kit': ^1.0.0-beta.18
'@logto/language-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': workspace:^
'@logto/phrases-ui': workspace:^
'@logto/schemas': workspace:^
@ -329,9 +329,9 @@ importers:
zod: ^3.19.1
dependencies:
'@logto/cli': link:../cli
'@logto/connector-kit': 1.0.0-beta.20
'@logto/connector-kit': 1.0.0-beta.22
'@logto/core-kit': 1.0.0-beta.18
'@logto/language-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': link:../phrases
'@logto/phrases-ui': link:../phrases-ui
'@logto/schemas': link:../schemas
@ -415,8 +415,8 @@ importers:
packages/demo-app:
specifiers:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': workspace:^
'@logto/react': 1.0.0-beta.13
'@logto/schemas': workspace:^
@ -442,8 +442,8 @@ importers:
stylelint: ^14.9.1
typescript: ^4.7.4
devDependencies:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': link:../phrases
'@logto/react': 1.0.0-beta.13_react@18.2.0
'@logto/schemas': link:../schemas
@ -525,8 +525,8 @@ importers:
packages/phrases:
specifiers:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@silverhand/eslint-config': 1.3.0
'@silverhand/essentials': ^1.3.0
'@silverhand/ts-config': 1.2.1
@ -536,8 +536,8 @@ importers:
typescript: ^4.7.4
zod: ^3.19.1
dependencies:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@silverhand/essentials': 1.3.0
zod: 3.19.1
devDependencies:
@ -550,8 +550,8 @@ importers:
packages/phrases-ui:
specifiers:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@silverhand/eslint-config': 1.3.0
'@silverhand/essentials': ^1.3.0
'@silverhand/ts-config': 1.2.1
@ -561,8 +561,8 @@ importers:
typescript: ^4.7.4
zod: ^3.19.1
dependencies:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@silverhand/essentials': 1.3.0
zod: 3.19.1
devDependencies:
@ -575,9 +575,9 @@ importers:
packages/schemas:
specifiers:
'@logto/connector-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/connector-kit': 1.0.0-beta.22
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': workspace:^
'@logto/phrases-ui': workspace:^
'@silverhand/eslint-config': 1.3.0
@ -600,9 +600,9 @@ importers:
typescript: ^4.7.4
zod: ^3.19.1
dependencies:
'@logto/connector-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/connector-kit': 1.0.0-beta.22
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': link:../phrases
'@logto/phrases-ui': link:../phrases-ui
zod: 3.19.1
@ -663,8 +663,8 @@ importers:
packages/ui:
specifiers:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': workspace:^
'@logto/phrases-ui': workspace:^
'@logto/schemas': workspace:^
@ -716,8 +716,8 @@ importers:
typescript: ^4.7.4
use-debounced-loader: ^0.1.1
devDependencies:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@logto/phrases': link:../phrases
'@logto/phrases-ui': link:../phrases-ui
'@logto/schemas': link:../schemas
@ -2293,12 +2293,12 @@ packages:
lodash.once: 4.1.1
dev: true
/@logto/connector-kit/1.0.0-beta.20:
resolution: {integrity: sha512-Z9rrrjpUJFKdxfs7CKrabiTmrHFyTFnUuPFfl6HG38I6EUOaURITJ3c6FJjCdu60nIRuwaM29+i/h4AChzLwew==}
/@logto/connector-kit/1.0.0-beta.22:
resolution: {integrity: sha512-ZlZup6yPaaWerpH53din/FcTfEK6M1M0TMh0W9CIYQtazGNilPWiJh1wo1iVZlFzC9KS+m/x2HDj41NVwKlHwQ==}
engines: {node: ^16.0.0}
dependencies:
'@logto/core-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.20
'@logto/core-kit': 1.0.0-beta.21
'@logto/language-kit': 1.0.0-beta.21
'@silverhand/essentials': 1.3.0
zod: 3.19.1
dev: false
@ -2307,7 +2307,7 @@ packages:
resolution: {integrity: sha512-VgSBWbPeFHgSOiOoYiE+TQF8byImxfd2xGTjA37RtFHMeUfT8CNTQWESUYuP7JWrKNm1N2ua7DTZZAJAKH9qMg==}
engines: {node: ^16.0.0}
dependencies:
'@logto/language-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.21
color: 4.2.3
nanoid: 3.3.4
zod: 3.19.1
@ -2317,7 +2317,17 @@ packages:
resolution: {integrity: sha512-seYvL/aGYRfO4d0FYfKIW/Cu9PnFMRpRM5/oRXwXbcbv+LY1a3TcAX0itrVXeBygIrxiAmWd9DL7CGIWzb48Qg==}
engines: {node: ^16.0.0}
dependencies:
'@logto/language-kit': 1.0.0-beta.20
'@logto/language-kit': 1.0.0-beta.21
color: 4.2.3
nanoid: 3.3.4
zod: 3.19.1
dev: true
/@logto/core-kit/1.0.0-beta.21:
resolution: {integrity: sha512-kCFjRMTNgTYyEN3KRqC2K3A9zoaPncgOZQ3/SjWiStHPDnMj1zqgaphULlyphWJYLIQASoC319vLJIgQdM/EnA==}
engines: {node: ^16.0.0}
dependencies:
'@logto/language-kit': 1.0.0-beta.21
color: 4.2.3
nanoid: 3.3.4
zod: 3.19.1
@ -2332,8 +2342,8 @@ packages:
lodash.get: 4.4.2
dev: true
/@logto/language-kit/1.0.0-beta.20:
resolution: {integrity: sha512-nBqWQo2xGAlVcD9O/txpCzRyy7eKXNXBAHm8J1y/u5Fp3BMObMmJv+v4Zk+UhckdFpsnFJF0wYIX45ta2+IipA==}
/@logto/language-kit/1.0.0-beta.21:
resolution: {integrity: sha512-ZjjRfY5MzzKSJii1+ox31KIxckv3sakM0kGRnShCUDRa7oyLUiJo7O1BxAWAEzpRKLGrtXrUFM7s8XYw/a897w==}
engines: {node: ^16.0.0}
dependencies:
zod: 3.19.1