sourcebot/packages/crypto/src/tokenUtils.ts

30 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-11-01 23:45:09 +00:00
import { SecretManagerServiceClient } from "@google-cloud/secret-manager";
2025-11-02 04:55:12 +00:00
import { Token } from "@sourcebot/schemas/v3/shared.type";
2025-11-02 00:07:10 +00:00
export const getTokenFromConfig = async (token: Token): Promise<string> => {
if ('env' in token) {
const envToken = process.env[token.env];
if (!envToken) {
throw new Error(`Environment variable ${token.env} not found.`);
}
return envToken;
2025-11-02 04:45:32 +00:00
} else if ('googleCloudSecret' in token) {
2025-11-02 04:55:12 +00:00
try {
const client = new SecretManagerServiceClient();
const [response] = await client.accessSecretVersion({
name: token.googleCloudSecret,
});
2025-11-01 23:45:09 +00:00
2025-11-02 04:55:12 +00:00
if (!response.payload?.data) {
throw new Error(`Secret ${token.googleCloudSecret} not found.`);
}
2025-11-01 23:45:09 +00:00
2025-11-02 04:55:12 +00:00
return response.payload.data.toString();
} catch (error) {
throw new Error(`Failed to access Google Cloud secret ${token.googleCloudSecret}: ${error instanceof Error ? error.message : String(error)}`);
}
} else {
throw new Error('Invalid token configuration');
}
};