Fixes zoom expiry date (#1315)
* Fixes zoom expiry date * Ensure backwards compatibility with old zoom connections Co-authored-by: Bailey Pumfleet <pumfleet@hey.com>
This commit is contained in:
parent
c2a60657d4
commit
5c5d9d3406
2 changed files with 14 additions and 6 deletions
|
@ -60,7 +60,8 @@ export interface ZoomEventResult {
|
||||||
|
|
||||||
interface ZoomToken {
|
interface ZoomToken {
|
||||||
scope: "meeting:write";
|
scope: "meeting:write";
|
||||||
expires_in: number;
|
expiry_date: number;
|
||||||
|
expires_in?: number; // deprecated, purely for backwards compatibility; superseeded by expiry_date.
|
||||||
token_type: "bearer";
|
token_type: "bearer";
|
||||||
access_token: string;
|
access_token: string;
|
||||||
refresh_token: string;
|
refresh_token: string;
|
||||||
|
@ -68,7 +69,7 @@ interface ZoomToken {
|
||||||
|
|
||||||
const zoomAuth = (credential: Credential) => {
|
const zoomAuth = (credential: Credential) => {
|
||||||
const credentialKey = credential.key as unknown as ZoomToken;
|
const credentialKey = credential.key as unknown as ZoomToken;
|
||||||
const isExpired = (expiryDate: number) => expiryDate < +new Date();
|
const isExpired = (expiryDate: number) => expiryDate < Date.now();
|
||||||
const authHeader =
|
const authHeader =
|
||||||
"Basic " +
|
"Basic " +
|
||||||
Buffer.from(process.env.ZOOM_CLIENT_ID + ":" + process.env.ZOOM_CLIENT_SECRET).toString("base64");
|
Buffer.from(process.env.ZOOM_CLIENT_ID + ":" + process.env.ZOOM_CLIENT_SECRET).toString("base64");
|
||||||
|
@ -87,6 +88,9 @@ const zoomAuth = (credential: Credential) => {
|
||||||
})
|
})
|
||||||
.then(handleErrorsJson)
|
.then(handleErrorsJson)
|
||||||
.then(async (responseBody) => {
|
.then(async (responseBody) => {
|
||||||
|
// set expiry date as offset from current time.
|
||||||
|
responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000);
|
||||||
|
delete responseBody.expires_in;
|
||||||
// Store new tokens in database.
|
// Store new tokens in database.
|
||||||
await prisma.credential.update({
|
await prisma.credential.update({
|
||||||
where: {
|
where: {
|
||||||
|
@ -96,14 +100,14 @@ const zoomAuth = (credential: Credential) => {
|
||||||
key: responseBody,
|
key: responseBody,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
credentialKey.expiry_date = responseBody.expiry_date;
|
||||||
credentialKey.access_token = responseBody.access_token;
|
credentialKey.access_token = responseBody.access_token;
|
||||||
credentialKey.expires_in = Math.round(+new Date() / 1000 + responseBody.expires_in);
|
|
||||||
return credentialKey.access_token;
|
return credentialKey.access_token;
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getToken: () =>
|
getToken: () =>
|
||||||
!isExpired(credentialKey.expires_in)
|
!isExpired(credentialKey.expires_in || credentialKey.expiry_date)
|
||||||
? Promise.resolve(credentialKey.access_token)
|
? Promise.resolve(credentialKey.access_token)
|
||||||
: refreshAccessToken(credentialKey.refresh_token),
|
: refreshAccessToken(credentialKey.refresh_token),
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,7 +30,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
const json = await result.json();
|
|
||||||
|
const responseBody = await result.json();
|
||||||
|
|
||||||
|
responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000);
|
||||||
|
delete responseBody.expires_in;
|
||||||
|
|
||||||
await prisma.user.update({
|
await prisma.user.update({
|
||||||
where: {
|
where: {
|
||||||
|
@ -40,7 +44,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
|
||||||
credentials: {
|
credentials: {
|
||||||
create: {
|
create: {
|
||||||
type: "zoom_video",
|
type: "zoom_video",
|
||||||
key: json,
|
key: responseBody,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue