shared/panDomainAuth.ts (32 lines of code) (raw):
import iniparser from "iniparser";
import { S3 } from "@aws-sdk/client-s3";
import { Stage } from "./types/stage";
const STAGE = (process.env.STAGE as Stage) || "LOCAL";
const pandaConfigFilenameLookup: { [stage in Stage]: string } = {
PROD: "gutools.co.uk.settings",
CODE: "code.dev-gutools.co.uk.settings",
LOCAL: "local.dev-gutools.co.uk.settings",
} as const;
export const pandaSettingsBucketName = "pan-domain-auth-settings";
export const pandaPublicConfigFilename = `${
pandaConfigFilenameLookup[STAGE] || pandaConfigFilenameLookup["LOCAL"]
}.public`;
export const pandaCookieName = "gutoolsAuth-assym";
const pandaConfigLocation = {
Bucket: pandaSettingsBucketName,
Key:
STAGE === "PROD"
? pandaConfigFilenameLookup["PROD"]
: pandaConfigFilenameLookup["CODE"],
};
export const getPandaConfig = async <T>(s3: S3) => {
const pandaConfigIni = await s3
.getObject(pandaConfigLocation)
.then(({ Body }) => Body?.transformToString());
if (!pandaConfigIni) {
throw Error(
`could not read panda config ${JSON.stringify(pandaConfigLocation)}`
);
}
return iniparser.parseString(pandaConfigIni) as T;
};