import { SecretsManagerClient, GetSecretValueCommand, } from '@aws-sdk/client-secrets-manager'; let cachedSecrets: OauthSecrets; class OauthSecretsObject { client_id = ''; client_secret = ''; redirect_uri = ''; } // @Injectable() export class OauthSecrets { hubspot = new OauthSecretsObject(); google = new OauthSecretsObject(); mailchimp = new OauthSecretsObject(); facebook = new OauthSecretsObject(); salesforce = new OauthSecretsObject(); 'google-login' = new OauthSecretsObject(); } export async function getOauthSecrets() { if (cachedSecrets) return cachedSecrets; const secrets = new OauthSecrets(); const path = process.env.SM_OAUTH_PATH; const secretsManagerClient = new SecretsManagerClient({}); for (const key in secrets) { console.log(`Fetching secret for ${key} from path ${path}/${key}`); const getSecretComand = new GetSecretValueCommand({ SecretId: `${path}/${key}`, }); const res = await secretsManagerClient .send(getSecretComand) .catch((err) => { console.error(`Error fetching secret for ${key}:`, err); return null; }); if (res) { secrets[key] = JSON.parse(res.SecretString); console.log(JSON.parse(res.SecretString).client_id) } else { console.log("No secret found for", key); secrets[key] = { client_id: 'id', client_secret: 'id', redirect_uri: 'id', }; } } cachedSecrets = secrets; return secrets; }