import { SecretsManager } from 'aws-sdk' import { Secret } from '../typings/global' export class Secrets { private _client: SecretsManager constructor() { this._client = new SecretsManager() } async loadEnvironment(): Promise { globalThis.secret = await this.resolveSecret() process.env.FIREBASE_AUTH_MIGRATION_HASH = globalThis.secret.firebase_auth.migration_hash process.env.SMARTFIT_API_ENDPOINT = globalThis.secret.smartfit.api.endpoint process.env.SMARTFIT_API_CLIENT_TOKEN = globalThis.secret.smartfit.api.token.client process.env.SMARTFIT_API_AUTHORIZATION_TOKEN = globalThis.secret.smartfit.api.token.authorization process.env.AWS_SNS_REGION = globalThis.secret.aws.region process.env.COMTELE_ENABLED = `${globalThis.secret.comtele.enabled}` process.env.COMTELE_API_KEY = globalThis.secret.comtele.api_key this.makeRedisURL() } private async resolveSecret(): Promise { return new Promise((resolve, reject) => { this._client.getSecretValue({ SecretId: process.env.SECRET_ID }, function(err, data) { try { if (err) return reject(err) const secrets = JSON.parse('SecretString' in data ? data.SecretString : data.SecretBinary.toString('ascii')) return resolve(secrets) } catch (error) { if (error?.message?.startsWith('Unexpected token')) return reject(new Error('Malformed JSON of secret parameters')) return reject(error) } }) }) } private makeRedisURL(): void { if (!process.env.REDIS_PORT) return globalThis.secret.redis.url = `redis://localhost:${process.env.REDIS_PORT}` } }