Files
FEDEO/backend/src/utils/secrets.ts

140 lines
3.7 KiB
TypeScript

import {InfisicalSDK} from "@infisical/sdk"
const client = new InfisicalSDK({
siteUrl: "https://secrets.fedeo.io"
})
export let secrets = {
} as {
COOKIE_SECRET: string
JWT_SECRET: string
PORT: number
HOST: string
DATABASE_URL: string
S3_BUCKET: string
ENCRYPTION_KEY: string
MAILER_SMTP_HOST: string
MAILER_SMTP_PORT: number
MAILER_SMTP_SSL: string
MAILER_SMTP_USER: string
MAILER_SMTP_PASS: string
MAILER_FROM: string
S3_ENDPOINT: string
S3_REGION: string
S3_ACCESS_KEY: string
S3_SECRET_KEY: string
M2M_API_KEY: string
API_BASE_URL: string
GOCARDLESS_BASE_URL: string
GOCARDLESS_SECRET_ID: string
GOCARDLESS_SECRET_KEY: string
DOKUBOX_IMAP_HOST: string
DOKUBOX_IMAP_PORT: number
DOKUBOX_IMAP_SECURE: boolean
DOKUBOX_IMAP_USER: string
DOKUBOX_IMAP_PASSWORD: string
OPENAI_API_KEY: string
STIRLING_API_KEY: string
MATRIX_HOMESERVER_URL?: string
MATRIX_SERVER_NAME?: string
MATRIX_RTC_HOST?: string
MATRIX_RTC_JWT_URL?: string
MATRIX_LIVEKIT_URL?: string
MATRIX_REGISTRATION_SHARED_SECRET?: string
MATRIX_SERVICE_USER_LOCALPART?: string
}
const secretKeys = [
"COOKIE_SECRET",
"JWT_SECRET",
"PORT",
"HOST",
"DATABASE_URL",
"S3_BUCKET",
"ENCRYPTION_KEY",
"MAILER_SMTP_HOST",
"MAILER_SMTP_PORT",
"MAILER_SMTP_SSL",
"MAILER_SMTP_USER",
"MAILER_SMTP_PASS",
"MAILER_FROM",
"S3_ENDPOINT",
"S3_REGION",
"S3_ACCESS_KEY",
"S3_SECRET_KEY",
"M2M_API_KEY",
"API_BASE_URL",
"GOCARDLESS_BASE_URL",
"GOCARDLESS_SECRET_ID",
"GOCARDLESS_SECRET_KEY",
"DOKUBOX_IMAP_HOST",
"DOKUBOX_IMAP_PORT",
"DOKUBOX_IMAP_SECURE",
"DOKUBOX_IMAP_USER",
"DOKUBOX_IMAP_PASSWORD",
"OPENAI_API_KEY",
"STIRLING_API_KEY",
"MATRIX_HOMESERVER_URL",
"MATRIX_SERVER_NAME",
"MATRIX_RTC_HOST",
"MATRIX_RTC_JWT_URL",
"MATRIX_LIVEKIT_URL",
"MATRIX_REGISTRATION_SHARED_SECRET",
"MATRIX_SERVICE_USER_LOCALPART",
] as const
const numberKeys = new Set(["PORT", "MAILER_SMTP_PORT", "DOKUBOX_IMAP_PORT"])
const booleanKeys = new Set(["DOKUBOX_IMAP_SECURE"])
function normalizeEnvValue(key: string, value: string) {
if (numberKeys.has(key)) return Number(value)
if (booleanKeys.has(key)) return value === "true"
return value
}
function loadSecretsFromEnv() {
let loaded = 0
secretKeys.forEach((key) => {
const value = process.env[key]
if (value === undefined || value === "") return
;(secrets as Record<string, any>)[key] = normalizeEnvValue(key, value)
loaded++
})
if (!secrets.HOST) secrets.HOST = "0.0.0.0"
if (!secrets.PORT) secrets.PORT = 3100
return loaded
}
export async function loadSecrets () {
const envSecretCount = loadSecretsFromEnv()
if (!process.env.INFISICAL_CLIENT_ID || !process.env.INFISICAL_CLIENT_SECRET) {
console.log(`✅ Secrets aus Umgebungsvariablen geladen (${envSecretCount} Stück)`)
return
}
await client.auth().universalAuth.login({
clientId: process.env.INFISICAL_CLIENT_ID,
clientSecret: process.env.INFISICAL_CLIENT_SECRET,
});
const allSecrets = await client.secrets().listSecrets({
environment: "dev", // stg, dev, prod, or custom environment slugs
projectId: "39774094-2aaf-49fb-a213-d6b2c10f6144"
});
allSecrets.secrets.forEach(secret => {
;(secrets as Record<string, any>)[secret.secretKey] = normalizeEnvValue(secret.secretKey, secret.secretValue)
})
loadSecretsFromEnv()
console.log("✅ Secrets aus Infisical und Umgebungsvariablen geladen");
console.log(Object.keys(secrets).length + " Stück")
}