dynamic vars

This commit is contained in:
Max Peintner
2025-01-30 08:35:45 +01:00
parent dbeb1f7936
commit 90a222b12a
2 changed files with 30 additions and 21 deletions

View File

@@ -2,8 +2,12 @@ declare namespace NodeJS {
interface ProcessEnv {
// Allow any environment variable that matches the pattern
[key: `${string}_AUDIENCE`]: string; // The system api url
[key: `${string}_AUDIENCE`]: string; // The service user id
[key: `${string}_AUDIENCE`]: string; // The service user private key
[key: `${string}_SYSTEM_USER_ID`]: string; // The service user id
[key: `${string}_SYSTEM_USER_PRIVATE_KEY`]: string; // The service user private key
AUDIENCE: string; // The fallback system api url
SYSTEM_USER_ID: string; // The fallback service user id
SYSTEM_USER_PRIVATE_KEY: string; // The fallback service user private key
/**
* Self hosting: The instance url

View File

@@ -5,31 +5,36 @@ export async function systemAPIToken({
}: {
serviceRegion: string;
}) {
const REGIONS = ["eu1", "us1"].map((region) => {
return {
id: region,
audience: process.env[region + "_AUDIENCE"],
userID: process.env[region + "_SYSTEM_USER_ID"],
const prefix = serviceRegion.toUpperCase();
const token = {
audience: process.env[prefix + "_AUDIENCE"],
userID: process.env[prefix + "_SYSTEM_USER_ID"],
token: Buffer.from(
process.env[prefix.toUpperCase() + "_SYSTEM_USER_PRIVATE_KEY"] as string,
"base64",
).toString("utf-8"),
};
if (!token.audience || !token.userID || !token.token) {
const fallbackToken = {
audience: process.env.AUDIENCE,
userID: process.env.SYSTEM_USER_ID,
token: Buffer.from(
process.env[
region.toUpperCase() + "_SYSTEM_USER_PRIVATE_KEY"
] as string,
process.env.SYSTEM_USER_PRIVATE_KEY,
"base64",
).toString("utf-8"),
};
});
const region = REGIONS.find((region) => region.id === serviceRegion);
if (!region || !region.audience || !region.userID || !region.token) {
throw new Error("Invalid region");
return newSystemToken({
audience: fallbackToken.audience,
subject: fallbackToken.userID,
key: fallbackToken.token,
});
}
const token = newSystemToken({
audience: region.audience,
subject: region.userID,
key: region.token,
return newSystemToken({
audience: token.audience,
subject: token.userID,
key: token.token,
});
return token;
}