Files
twenty/packages/twenty-chrome-extension/src/utils/requestDb.ts
Aditya Pimpalkar c63ee519ea feat: oauth for chrome extension (#4870)
Previously we had to create a separate API key to give access to chrome
extension so we can make calls to the DB. This PR includes logic to
initiate a oauth flow with PKCE method which redirects to the
`Authorise` screen to give access to server tokens.

Implemented in this PR- 
1. make `redirectUrl` a non-nullable parameter 
2. Add `NODE_ENV` to environment variable service
3. new env variable `CHROME_EXTENSION_REDIRECT_URL` on server side
4. strict checks for redirectUrl
5. try catch blocks on utils db query methods
6. refactor Apollo Client to handle `unauthorized` condition
7. input field to enter server url (for self-hosting)
8. state to show user if its already connected
9. show error if oauth flow is cancelled by user

Follow up PR -
Renew token logic

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
2024-04-24 11:45:16 +02:00

37 lines
890 B
TypeScript

import { OperationVariables } from '@apollo/client';
import { DocumentNode } from 'graphql';
import getApolloClient from '~/utils/apolloClient';
import { isDefined } from '~/utils/isDefined';
export const callQuery = async <T>(
query: DocumentNode,
variables?: OperationVariables,
): Promise<T | null> => {
try {
const client = await getApolloClient();
const { data } = await client.query<T>({ query, variables });
if (isDefined(data)) return data;
else return null;
} catch (error) {
return null;
}
};
export const callMutation = async <T>(
mutation: DocumentNode,
variables?: OperationVariables,
): Promise<T | null> => {
try {
const client = await getApolloClient();
const { data } = await client.mutate<T>({ mutation, variables });
if (isDefined(data)) return data;
else return null;
} catch (error) {
return null;
}
};