Files
twenty/packages/twenty-zapier/src/utils/requestDb.ts

104 lines
2.4 KiB
TypeScript

import { Bundle, HttpRequestOptions, ZObject } from 'zapier-platform-core';
import { Schema } from '../utils/data.types';
export const requestSchema = async (
z: ZObject,
bundle: Bundle,
): Promise<Schema> => {
const query = `query GetObjects {
objects(paging: {first: 1000}, filter: {isActive: {is:true}}) {
edges {
node {
nameSingular
namePlural
labelSingular
fields(paging: {first: 1000}, filter: {isActive: {is:true}}) {
edges {
node {
type
name
label
description
isNullable
defaultValue
}
}
}
}
}
}
}`;
const endpoint = 'metadata';
return await requestDb(z, bundle, query, endpoint);
};
const requestDb = async (
z: ZObject,
bundle: Bundle,
query: string,
endpoint = 'graphql',
) => {
const options = {
url: `${bundle.authData.apiUrl || process.env.SERVER_BASE_URL}/${endpoint}`,
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: `Bearer ${bundle.authData.apiKey}`,
},
body: {
query,
},
} satisfies HttpRequestOptions;
return z
.request(options)
.then((response) => {
const results = response.json;
if (results.errors) {
throw new z.errors.Error(
`query: ${query}, error: ${JSON.stringify(results.errors)}`,
'ApiError',
response.status,
);
}
response.throwForStatus();
return results;
})
.catch((err) => {
throw new z.errors.Error(
`query: ${query}, error: ${err.message}`,
'Error',
err.status,
);
});
};
export const requestDbViaRestApi = (
z: ZObject,
bundle: Bundle,
objectNamePlural: string,
) => {
const options = {
url: `${
bundle.authData.apiUrl || process.env.SERVER_BASE_URL
}/rest/${objectNamePlural}?limit:3`,
method: 'GET',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: `Bearer ${bundle.authData.apiKey}`,
},
} satisfies HttpRequestOptions;
return z
.request(options)
.then((response) => response.json.data[objectNamePlural])
.catch((err) => {
throw new z.errors.Error(`Error: ${err.message}`, 'Error', err.status);
});
};
export default requestDb;