Add authentication optional api url parameter (#5803)

This commit is contained in:
martmull
2024-06-11 12:08:21 +02:00
committed by GitHub
parent af8c637355
commit 9307d206c5
4 changed files with 47 additions and 5 deletions

View File

@ -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": {
@ -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"

View File

@ -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: {},

View File

@ -37,6 +37,35 @@ 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';
@ -44,7 +73,7 @@ describe('custom auth', () => {
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');
@ -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');

View File

@ -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',
@ -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',