This example demonstrates a full Express.js integration using cookie-session to persist the access token. It handles the initial redirect to authorization, the callback handling, and automatic token updates via onTokenUpdate.
import express from 'express';
import { Configuration, DealsApi, OAuth2Configuration } from 'pipedrive/v2';
import cookieParser from 'cookie-parser';
import cookieSession from 'cookie-session';
const app = express();
app.use(cookieParser());
app.use(cookieSession({
name: 'session',
keys: ['key1']
}));
const PORT = 3000;
const oauth2 = new OAuth2Configuration({
clientId: 'clientId',
clientSecret: 'clientSecret',
redirectUri: 'redirectUri'
});
// Register callback to persist refreshed tokens automatically
oauth2.onTokenUpdate = function (token) {
req.session.token = token;
};
app.get('/', async (req, res) => {
try {
// updateToken handles returning null if no token is available
const token = oauth2.updateToken(req.session?.accessToken);
if (!token) {
const authUrl = oauth2.authorizationUrl;
return res.redirect(authUrl);
}
const apiConfig = new Configuration({
accessToken: oauth2.getAccessToken,
basePath: oauth2.basePath,
});
const dealsApi = new DealsApi(apiConfig);
const response = await dealsApi.getDeals();
const { data: deals } = response;
return res.send(deals);
} catch (error){
console.error(error)
return res.status(500).send(error)
}
});
app.get('/callback', async (req, res) => {
try {
const authCode = req.query.code as string;
const newAccessToken = await oauth2.authorize(authCode);
req.session.accessToken = newAccessToken;
return res.redirect('/');
}catch (error) {
console.error(error)
return res.status(500).send(error)
}
});
app.listen(PORT);