diff --git a/packages/backend/src/apps/twitter/index.ts b/packages/backend/src/apps/twitter/index.ts index b3db9314..09d1db82 100644 --- a/packages/backend/src/apps/twitter/index.ts +++ b/packages/backend/src/apps/twitter/index.ts @@ -38,4 +38,9 @@ export default class Twitter { screenName: verifiedCredentials.screenName } } + + async isStillVerified() { + const userData = await this.client.currentUser(); + return userData.id ? true : false + } } diff --git a/packages/backend/src/graphql/queries/test-connection.ts b/packages/backend/src/graphql/queries/test-connection.ts new file mode 100644 index 00000000..87fb4e12 --- /dev/null +++ b/packages/backend/src/graphql/queries/test-connection.ts @@ -0,0 +1,31 @@ +import { GraphQLString, GraphQLNonNull, GraphQLBoolean } from 'graphql'; +import Connection from '../../models/connection'; +import RequestWithCurrentUser from '../../types/express/request-with-current-user'; + +type Params = { + id: string, + data: object +} +const testConnectionResolver = async (params: Params, req: RequestWithCurrentUser) => { + let connection = await Connection.query().findOne({ + user_id: req.currentUser.id, + id: params.id + }) + + const appClass = (await import(`../../apps/${connection.key}`)).default; + + const appInstance = new appClass(connection.data) + const isStillVerified = await appInstance.isStillVerified(); + + return isStillVerified; +} + +const testConnection = { + type: GraphQLBoolean, + args: { + id: { type: GraphQLNonNull(GraphQLString) } + }, + resolve: (_: any, params: Params, req: RequestWithCurrentUser) => testConnectionResolver(params, req) +}; + +export default testConnection; diff --git a/packages/backend/src/graphql/root-query.ts b/packages/backend/src/graphql/root-query.ts index 01b129c0..7a5a976b 100644 --- a/packages/backend/src/graphql/root-query.ts +++ b/packages/backend/src/graphql/root-query.ts @@ -3,6 +3,7 @@ import getApps from './queries/get-apps'; import getApp from './queries/get-app'; import getConnectedApps from './queries/get-connected-apps'; import getAppConnections from './queries/get-app-connections'; +import testConnection from './queries/test-connection'; const rootQuery = new GraphQLObjectType({ name: 'Query', @@ -10,7 +11,8 @@ const rootQuery = new GraphQLObjectType({ getApps, getApp, getConnectedApps, - getAppConnections + getAppConnections, + testConnection } }); diff --git a/packages/web/src/graphql/mutations/create-connection.ts b/packages/web/src/graphql/mutations/create-connection.ts index dab27933..c505b91f 100644 --- a/packages/web/src/graphql/mutations/create-connection.ts +++ b/packages/web/src/graphql/mutations/create-connection.ts @@ -5,10 +5,6 @@ export const CREATE_CONNECTION = gql` createConnection(key: $key, data: $data) { key id - data { - consumerKey - consumerSecret - } } } `; diff --git a/packages/web/src/graphql/mutations/update-connection.ts b/packages/web/src/graphql/mutations/update-connection.ts index 9e854540..6e4ead32 100644 --- a/packages/web/src/graphql/mutations/update-connection.ts +++ b/packages/web/src/graphql/mutations/update-connection.ts @@ -6,10 +6,6 @@ export const UPDATE_CONNECTION = gql` id key verified - data { - consumerKey - consumerSecret - } } } `;