I am writing an app for Freshdesk that contains a serverside component for displaying additional information about the user that posted a ticket. This additional information is retrieved from an external resource through HTTPs using the request method with request templates.
In my development environment, I am using fdk 9.0.8, npm 10.4.0 and node v18.17.1 on macOS.
When I run fdk run on the command line, the following error is displayed:
Validation failed due to the following issue(s):
✖ app/app.js::64: Parsing error: Unexpected token client
On line 64 of app.js, the serverside function is invoked:
let result = await client.request.invoke("onTicketCreateHandler", { data });
This is the relevant code snippet from app.js:
function getTicketDetails(data, error) {
client.data.get("ticket")
.then(data)
.catch(error);
}
async function updateUserInformation(client) {
getTicketDetails(
function (data) {
try {
let result = await client.request.invoke("onTicketCreateHandler", { data });
}
catch (error) {
console.error(error);
}
},
function (error) {
console.error(error);
});
}
I cannot use client.request.invokeTemplate() in app.js because the username and password for the HTTP request are defined as secure values in iparams.json and are therefore not accessible in app.js.
The relevant code from server.js is:
onTicketCreateHandler: async function(args) {
await $request.invokeTemplate("getUserInformation", {
context: {
"email": args.data.ticket.sender_email
}
});
}
The request is defined in requests.js as follows:
{
"getUserInformation": {
"schema": {
"protocol": "https",
"method": "GET",
"host": "somewhere.com",
"path": "/path/to/the/api",
"headers": {
"Authorization": "Basic <%= encode(iparam.api_username + ':' + iparam.api_password) %>",
"Content-Type": "application/json"
},
"query": {
"email": "<%= context.email %>",
"token": "<%= iparam.api_security_token %>"
}
},
"options": {
"retryDelay": 1000,
"isOAuth": false
}
}
}
Both the request and the serverside function are registered in manifest.js:
{
"platform-version": "2.3",
"product": {
"freshdesk": {
"location": {
"ticket_sidebar": {
"url": "template.html",
"icon": "./resources/img/icon.svg"
}
},
"functions": {
"onTicketCreateHandler": {
"timeout": 15
}
},
"requests": {
"getUserInformation": {}
}
}
},
"engines": {
"node": "18.17.1",
"fdk": "9.0.8"
}
}
When I change the async function and await client.request.invoke in app.js to a synchronous function, I do not get the error message when I run fdk run, but the serverless function is not invoked properly.
Can anyone please point out what I am doing wrong or what I am missing?