diff --git a/packages/core/src/blitzkit/assertSecret.ts b/packages/core/src/blitzkit/assertSecret.ts deleted file mode 100644 index 934379286..000000000 --- a/packages/core/src/blitzkit/assertSecret.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function assertSecret(secret?: Type) { - if (secret === undefined) throw new Error("Missing secret"); - return secret; -} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d070608a3..3adddc0bf 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -7,3 +7,4 @@ export * from "./protobuf"; export * from "./statistics"; export * from "./streams"; export * from "./types"; +export * from "./secrets"; diff --git a/packages/core/src/secrets/hasSecret.ts b/packages/core/src/secrets/hasSecret.ts new file mode 100644 index 000000000..49c49dd66 --- /dev/null +++ b/packages/core/src/secrets/hasSecret.ts @@ -0,0 +1,5 @@ +import { PassableSecretName } from "./secret"; + +export function hasSecret(name: PassableSecretName) { + return name in import.meta.env; +} diff --git a/packages/core/src/secrets/index.ts b/packages/core/src/secrets/index.ts new file mode 100644 index 000000000..36c5d98c8 --- /dev/null +++ b/packages/core/src/secrets/index.ts @@ -0,0 +1,3 @@ +export * from "./secret"; +export * from "./hasSecret"; +export * from "./wellKnown"; diff --git a/packages/core/src/secrets/secret.ts b/packages/core/src/secrets/secret.ts new file mode 100644 index 000000000..b4fb3b637 --- /dev/null +++ b/packages/core/src/secrets/secret.ts @@ -0,0 +1,38 @@ +import { hasSecret } from "./hasSecret"; +import { WellKnownSecret } from "./wellKnown"; + +export enum SecretType { + String, + Number, +} + +export type PassableSecretName = WellKnownSecret | (string & {}); + +export function secret( + name: PassableSecretName, + type?: SecretType.String, +): string; + +export function secret( + name: PassableSecretName, + type: SecretType.Number, +): number; + +export function secret( + name: WellKnownSecret | (string & {}), + type = SecretType.String, +) { + if (!hasSecret(name)) { + throw new Error(`Secret "${name}" not defined`); + } + + const value = import.meta.env[name]; + + switch (type) { + case SecretType.String: + return value; + + case SecretType.Number: + return Number(value); + } +} diff --git a/packages/core/src/secrets/wellKnown.ts b/packages/core/src/secrets/wellKnown.ts new file mode 100644 index 000000000..2f6e77f70 --- /dev/null +++ b/packages/core/src/secrets/wellKnown.ts @@ -0,0 +1,10 @@ +export type WellKnownSecret = + | "BUILD_CHUNK" + | "TEXTURE_CHUNKS" + | "TEMP" + | "WOTB_SERVER" + | "WOTB_VERSION" + | "PUBLIC_WOTB_CLIENT" + | "WOTB_USMAP" + | "GOOGLE_APPLICATION_CREDENTIALS" + | "PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID";