Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add authentication optional api url parameter #5803

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/twenty-zapier/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "twenty-zapier",
"version": "1.0.0",
"version": "1.0.1",
"description": "Effortlessly sync Twenty with 3000+ apps. Automate tasks, boost productivity, and supercharge your customer relationships!",
"main": "src/index.ts",
"scripts": {
Expand All @@ -10,6 +10,7 @@
"build": "yarn clean && tsc",
"deploy": "yarn build && zapier push",
"validate": "yarn build && zapier validate",
"versions": "yarn build && zapier versions",
"clean": "rimraf ./lib ./build",
"watch": "yarn clean && tsc --watch",
"_zapier-build": "yarn build"
Expand Down
10 changes: 10 additions & 0 deletions packages/twenty-zapier/src/authentication.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ export default {
helpText:
'Create an API key in [your twenty workspace](https://app.twenty.com/settings/developers)',
},
{
computed: false,
key: 'apiUrl',
required: false,
label: 'Api Url',
type: 'string',
placeholder: 'https://api.twenty.com',
helpText:
'Set this only if you self-host Twenty. Use the same value as `REACT_APP_SERVER_BASE_URL` in https://docs.twenty.com/start/self-hosting/',
},
],
connectionLabel: '{{data.currentWorkspace.displayName}}',
customConfig: {},
Expand Down
33 changes: 31 additions & 2 deletions packages/twenty-zapier/src/test/authentication.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,43 @@ describe('custom auth', () => {
expect(response.data.currentWorkspace).toHaveProperty('displayName');
});

it('passes authentication with api url and returns json', async () => {
const bundle = getBundle();
const bundleWithApiUrl = {
...bundle,
authData: { ...bundle.authData, apiUrl: 'http://localhost:3000' },
};
const response = await appTester(App.authentication.test, bundleWithApiUrl);
expect(response.data).toHaveProperty('currentWorkspace');
expect(response.data.currentWorkspace).toHaveProperty('displayName');
});

it('fail authentication with bad api url', async () => {
const bundle = getBundle();
const bundleWithApiUrl = {
...bundle,
authData: { ...bundle.authData, apiUrl: 'http://invalid' },
};
try {
const response = await appTester(
App.authentication.test,
bundleWithApiUrl,
);
expect(response.data).toHaveProperty('currentWorkspace');
expect(response.data.currentWorkspace).toHaveProperty('displayName');
} catch (error: any) {
expect(error.message).toContain('ENOTFOUND');
}
});

it('fails on bad auth token format', async () => {
const bundle = getBundle();
bundle.authData.apiKey = 'bad';

try {
await appTester(App.authentication.test, bundle);
} catch (error: any) {
expect(error.message).toContain('Unauthenticated');
expect(error.message).toContain('UNAUTHENTICATED');
return;
}
throw new Error('appTester should have thrown');
Expand All @@ -71,7 +100,7 @@ describe('custom auth', () => {
try {
await appTester(App.authentication.test, bundleWithExpiredApiKey);
} catch (error: any) {
expect(error.message).toContain('Unauthenticated');
expect(error.message).toContain('UNAUTHENTICATED');
return;
}
throw new Error('appTester should have thrown');
Expand Down
6 changes: 4 additions & 2 deletions packages/twenty-zapier/src/utils/requestDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const requestDb = async (
endpoint = 'graphql',
) => {
const options = {
url: `${process.env.SERVER_BASE_URL}/${endpoint}`,
url: `${bundle.authData.apiUrl || process.env.SERVER_BASE_URL}/${endpoint}`,
method: 'POST',
headers: {
'Content-Type': 'application/json',
Expand Down Expand Up @@ -81,7 +81,9 @@ export const requestDbViaRestApi = (
objectNamePlural: string,
) => {
const options = {
url: `${process.env.SERVER_BASE_URL}/rest/${objectNamePlural}?limit:3`,
url: `${
bundle.authData.apiUrl || process.env.SERVER_BASE_URL
}/rest/${objectNamePlural}?limit:3`,
method: 'GET',
headers: {
'Content-Type': 'application/json',
Expand Down
Loading