Hello, I’m building my first Custom UI APP. But I’m stuck on the initialization of the app SDK. I’m using Firebase functions to create an endpoint, but if I run it, I’m getting an error that AppExtensionsSDK is not a function.
const functions = require('firebase-functions');
const express = require('express');
const jwt = require('jsonwebtoken');
const initPD = require('./initPD')
const app = express();
app.get('/api/handlePipedriveRequest', async (req, res) => {
console.log(req.url);
console.log(JSON.stringify(req.body));
console.log(JSON.stringify(req.params));
console.log(JSON.stringify(req.query))
try {
const verifyToken = jwt.verify(req.query.token, 'XXXX');
console.log("TOKEN", JSON.stringify(verifyToken));
const sdk = await initPD.getCustomUISDK()
console.log("SDK", sdk);
const iframeContent = '<html><body>iframe content</body></html>';
res.status(200).send(iframeContent);
} catch (error) {
console.error('JWT verification failed:', error);
res.status(403).send('JWT token is invalid or expired');
}
});
exports.app = functions.https.onRequest(app);
And here is the initPD:
const { AppExtensionsSDK } = require('@pipedrive/app-extensions-sdk');
const getCustomUISDK = async () => {
try {
const SDK = await new AppExtensionsSDK({ identifier: '123abc' })
.initialize({ size: { height: 500 } });
return SDK
} catch(err) {
console.log(err);
}
}
module.exports = {
getCustomUISDK,
};
Lastly package.json:
{
"name": "functions",
"version": "1.0.0",
"description": "",
"main": "handlePipedriveRequest.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@pipedrive/app-extensions-sdk": "^0.9.0",
"express": "^4.18.2",
"firebase-admin": "^11.10.1",
"firebase-functions": "^4.4.1",
"firebase-tools": "^12.5.4",
"jsonwebtoken": "^9.0.2"
}
}
Thanks for helping me out. Plus I wanna ask about the constructor - how does it automatically determine the request ID from a URL when it is not passed to it?
P.S.: I know I’m using static request ID, but it doesn’t have to do anything with that. It should throw a different error I believe, not that it is not a constructor.