create-sekiban-app
Version:
Create a new Sekiban application with Dapr
51 lines (38 loc) • 1.8 kB
text/typescript
import { z } from 'zod';
import dotenv from 'dotenv';
dotenv.config();
const ConfigSchema = z.object({
NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
PORT: z.string().default('3000').transform(Number),
ACTOR_SERVER_PORT: z.string().default('50010').transform(Number),
// Storage configuration
STORAGE_TYPE: z.enum(['inmemory', 'postgres', 'cosmos']).default('inmemory'),
// PostgreSQL configuration
DATABASE_URL: z.string().default('postgresql://sekiban:sekiban_password@localhost:5432/sekiban_events'),
// Cosmos DB configuration
COSMOS_CONNECTION_STRING: z.string().optional(),
COSMOS_DATABASE: z.string().default('sekiban-events'),
COSMOS_CONTAINER: z.string().default('events'),
// Dapr configuration
DAPR_HTTP_PORT: z.string().default('3500').transform(Number),
DAPR_GRPC_PORT: z.string().default('50001').transform(Number),
DAPR_APP_ID: z.string().default('sekiban-api'),
DAPR_STATE_STORE_NAME: z.string().default('statestore'),
DAPR_PUBSUB_NAME: z.string().default('pubsub'),
DAPR_EVENT_TOPIC: z.string().default('events'),
// Actor configuration - must match Sekiban's internal actor names
DAPR_ACTOR_TYPE: z.string().default('AggregateActor'),
DAPR_APP_ID_FOR_ACTORS: z.string().default('sekiban-api'), // App ID where actors are hosted
// API configuration
API_PREFIX: z.string().default('/api'),
CORS_ORIGIN: z.string().default('*'),
// Logging
LOG_LEVEL: z.enum(['error', 'warn', 'info', 'debug']).default('info')
});
const configResult = ConfigSchema.safeParse(process.env);
if (!configResult.success) {
console.error('Invalid configuration:', configResult.error.format());
process.exit(1);
}
export const config = configResult.data;
export type Config = typeof config;