konobangu/packages/env/index.ts

70 lines
2.6 KiB
TypeScript

import { createEnv } from '@t3-oss/env-nextjs';
import { z } from 'zod';
const server: Parameters<typeof createEnv>[0]['server'] = {
BETTER_AUTH_SECRET: z.string().min(1),
DATABASE_URL: z.string().min(1).url(),
BETTERSTACK_API_KEY: z.string().min(1).optional(),
BETTERSTACK_URL: z.string().min(1).url().optional(),
ARCJET_KEY: z.string().min(1).startsWith('ajkey_').optional(),
ANALYZE: z.string().optional(),
SVIX_TOKEN: z
.union([
z.string().min(1).startsWith('sk_'),
z.string().min(1).startsWith('testsk_'),
])
.optional(),
LIVEBLOCKS_SECRET: z.string().min(1).startsWith('sk_').optional(),
OPENAI_API_KEY: z.string().min(1).startsWith('sk-').optional(),
UPSTASH_REDIS_REST_URL: z.string().min(1).url().optional(),
UPSTASH_REDIS_REST_TOKEN: z.string().min(1).optional(),
// Added by Sentry Integration, Vercel Marketplace
SENTRY_ORG: z.string().min(1).optional(),
SENTRY_PROJECT: z.string().min(1).optional(),
// Added by Vercel
VERCEL: z.string().optional(),
NEXT_RUNTIME: z.enum(['nodejs', 'edge']).optional(),
FLAGS_SECRET: z.string().min(1).optional(),
BLOB_READ_WRITE_TOKEN: z.string().min(1).optional(),
};
const client: Parameters<typeof createEnv>[0]['client'] = {
NEXT_PUBLIC_APP_URL: z.string().min(1).url(),
NEXT_PUBLIC_WEB_URL: z.string().min(1).url(),
NEXT_PUBLIC_API_URL: z.string().min(1).url().optional(),
// Added by Vercel
NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL: z.string().min(1),
};
export const env = createEnv({
client,
server,
runtimeEnv: {
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET,
DATABASE_URL: process.env.DATABASE_URL,
BETTERSTACK_API_KEY: process.env.BETTERSTACK_API_KEY,
BETTERSTACK_URL: process.env.BETTERSTACK_URL,
ARCJET_KEY: process.env.ARCJET_KEY,
ANALYZE: process.env.ANALYZE,
SENTRY_ORG: process.env.SENTRY_ORG,
SENTRY_PROJECT: process.env.SENTRY_PROJECT,
VERCEL: process.env.VERCEL,
NEXT_RUNTIME: process.env.NEXT_RUNTIME,
FLAGS_SECRET: process.env.FLAGS_SECRET,
BLOB_READ_WRITE_TOKEN: process.env.BLOB_READ_WRITE_TOKEN,
SVIX_TOKEN: process.env.SVIX_TOKEN,
LIVEBLOCKS_SECRET: process.env.LIVEBLOCKS_SECRET,
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
NEXT_PUBLIC_WEB_URL: process.env.NEXT_PUBLIC_WEB_URL,
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
NEXT_PUBLIC_DOCS_URL: process.env.NEXT_PUBLIC_DOCS_URL,
NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL:
process.env.NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL,
},
emptyStringAsUndefined: true
});