export default async function main(args) {
let { apikey, subdomain, tablename, rowData } = args.inputVars; // Input variables
// Check if the user has inputted the required variables
if (!apikey || !subdomain || !tablename || !rowData) {
return {
// Returns the error path so we can continue the design
next: { path: 'error' },
// Renders a debug message in Voiceflow
trace: [{ type: "debug", payload: { message: "Missing required input variables for this function" } }]
};
}
// Base URL for creating a new row
const url = `https://${subdomain}.supabase.co/rest/v1/${tablename}`;
// Setup the request options, including headers
const config = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': `Bearer ${apikey}`,
'apikey': apikey,
'Connection': 'keep-alive'
},
body: rowData // Include the row data in the request body
};
// This is where we made the fetch request, we use try-catch for error handling
try {
// Make the fetch request
const response = await fetch(url, config);
// Check if the response status is OK (status in the range 200-299)
if (response.status!=201) {
// If not OK, throw an error to be caught by the catch block
throw new Error(`HTTP error! status: ${response.status}`);
}
// // Map the fetch request response
const responseBody = await response.json;
// // Checks if the fetch request returned a body
// if (!responseBody || typeof responseBody !== 'object') {
// // If no body was returned, throw an error
// throw new Error(`Invalid or missing response body from the API`);
// }
// Create the return objects if this is successful
return {
// Map our output variables
outputVars: {
createdRow: true // Return the created row
},
trace: [{ type: "debug", payload: { message: "Created row with data: "+ rowData } }], // Map the success path so we can continue in our flow
next: { path: 'success' }
};
}
// Catches all the errors we threw and displays the debug message
catch (error) {
return {
// Maps the error path so we can continue in our design
next: { path: 'error' },
// Renders a debug message in Voiceflow with the error
trace: [{ type: "debug", payload: { message: "Error:" + error.message + ' ' + url } }]
};
}
}