aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/env.ts20
-rw-r--r--src/lib/featureFlags.ts15
2 files changed, 32 insertions, 3 deletions
diff --git a/src/lib/env.ts b/src/lib/env.ts
index 927e756..920df14 100644
--- a/src/lib/env.ts
+++ b/src/lib/env.ts
@@ -1,5 +1,10 @@
import { ZodIssueCode, z } from 'zod'
+const interpretEnvVarAsBool = (val: unknown): boolean => {
+ if (typeof val !== 'string') return false
+ return ['true', 'yes', '1', 'on'].includes(val.toLowerCase())
+}
+
const envSchema = z
.object({
POSTGRES_URL_NON_POOLING: z.string().url(),
@@ -12,14 +17,23 @@ const envSchema = z
? `https://${process.env.VERCEL_URL}`
: 'http://localhost:3000',
),
- NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS: z.coerce.boolean().default(false),
+ NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS: z.preprocess(
+ interpretEnvVarAsBool,
+ z.boolean().default(false),
+ ),
S3_UPLOAD_KEY: z.string().optional(),
S3_UPLOAD_SECRET: z.string().optional(),
S3_UPLOAD_BUCKET: z.string().optional(),
S3_UPLOAD_REGION: z.string().optional(),
S3_UPLOAD_ENDPOINT: z.string().optional(),
- NEXT_PUBLIC_ENABLE_RECEIPT_EXTRACT: z.coerce.boolean().default(false),
- NEXT_PUBLIC_ENABLE_CATEGORY_EXTRACT: z.coerce.boolean().default(false),
+ NEXT_PUBLIC_ENABLE_RECEIPT_EXTRACT: z.preprocess(
+ interpretEnvVarAsBool,
+ z.boolean().default(false),
+ ),
+ NEXT_PUBLIC_ENABLE_CATEGORY_EXTRACT: z.preprocess(
+ interpretEnvVarAsBool,
+ z.boolean().default(false),
+ ),
OPENAI_API_KEY: z.string().optional(),
})
.superRefine((env, ctx) => {
diff --git a/src/lib/featureFlags.ts b/src/lib/featureFlags.ts
new file mode 100644
index 0000000..e57ca9c
--- /dev/null
+++ b/src/lib/featureFlags.ts
@@ -0,0 +1,15 @@
+'use server'
+
+import { env } from './env'
+
+export async function getRuntimeFeatureFlags() {
+ return {
+ enableExpenseDocuments: env.NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS,
+ enableReceiptExtract: env.NEXT_PUBLIC_ENABLE_RECEIPT_EXTRACT,
+ enableCategoryExtract: env.NEXT_PUBLIC_ENABLE_CATEGORY_EXTRACT,
+ }
+}
+
+export type RuntimeFeatureFlags = Awaited<
+ ReturnType<typeof getRuntimeFeatureFlags>
+>