* Add credential sync .env variables * Add webhook to send app credentials * Upsert credentials when webhook called * Refresh oauth token from a specific endpoint * Pass appSlug * Add credential encryption * Move oauth helps into a folder * Create parse token response wrapper * Add OAuth helpers to apps * Clean up * Refactor `appDirName` to `appSlug` * Address feedback * Change to safe parse * Remove console.log --------- Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Co-authored-by: Omar López <zomars@me.com>
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { APP_CREDENTIAL_SHARING_ENABLED } from "@calcom/lib/constants";
|
|
|
|
const minimumTokenResponseSchema = z.object({
|
|
access_token: z.string(),
|
|
// Assume that any property with a number is the expiry
|
|
[z.string().toString()]: z.number(),
|
|
// Allow other properties in the token response
|
|
[z.string().optional().toString()]: z.unknown().optional(),
|
|
});
|
|
|
|
const parseRefreshTokenResponse = (response: any, schema: z.ZodTypeAny) => {
|
|
let refreshTokenResponse;
|
|
if (APP_CREDENTIAL_SHARING_ENABLED && process.env.CALCOM_CREDENTIAL_SYNC_ENDPOINT) {
|
|
refreshTokenResponse = minimumTokenResponseSchema.safeParse(response);
|
|
} else {
|
|
refreshTokenResponse = schema.safeParse(response);
|
|
}
|
|
|
|
if (!refreshTokenResponse.success) {
|
|
throw new Error("Invalid refreshed tokens were returned");
|
|
}
|
|
|
|
if (!refreshTokenResponse.data.refresh_token) {
|
|
refreshTokenResponse.data.refresh_token = "refresh_token";
|
|
}
|
|
|
|
return refreshTokenResponse;
|
|
};
|
|
|
|
export default parseRefreshTokenResponse;
|