@spfn/core 0.1.0-alpha.88 → 0.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1046 -384
- package/dist/boss-D-fGtVgM.d.ts +187 -0
- package/dist/cache/index.d.ts +13 -33
- package/dist/cache/index.js +14 -703
- package/dist/cache/index.js.map +1 -1
- package/dist/codegen/index.d.ts +167 -17
- package/dist/codegen/index.js +76 -1419
- package/dist/codegen/index.js.map +1 -1
- package/dist/config/index.d.ts +1191 -0
- package/dist/config/index.js +264 -0
- package/dist/config/index.js.map +1 -0
- package/dist/db/index.d.ts +728 -59
- package/dist/db/index.js +1028 -1225
- package/dist/db/index.js.map +1 -1
- package/dist/env/index.d.ts +579 -308
- package/dist/env/index.js +438 -930
- package/dist/env/index.js.map +1 -1
- package/dist/errors/index.d.ts +417 -29
- package/dist/errors/index.js +359 -98
- package/dist/errors/index.js.map +1 -1
- package/dist/event/index.d.ts +108 -0
- package/dist/event/index.js +122 -0
- package/dist/event/index.js.map +1 -0
- package/dist/job/index.d.ts +172 -0
- package/dist/job/index.js +361 -0
- package/dist/job/index.js.map +1 -0
- package/dist/logger/index.d.ts +20 -79
- package/dist/logger/index.js +82 -387
- package/dist/logger/index.js.map +1 -1
- package/dist/middleware/index.d.ts +2 -11
- package/dist/middleware/index.js +49 -703
- package/dist/middleware/index.js.map +1 -1
- package/dist/nextjs/index.d.ts +120 -0
- package/dist/nextjs/index.js +416 -0
- package/dist/nextjs/index.js.map +1 -0
- package/dist/{client/nextjs/index.d.ts → nextjs/server.d.ts} +288 -262
- package/dist/nextjs/server.js +568 -0
- package/dist/nextjs/server.js.map +1 -0
- package/dist/route/index.d.ts +686 -25
- package/dist/route/index.js +440 -1287
- package/dist/route/index.js.map +1 -1
- package/dist/route/types.d.ts +38 -0
- package/dist/route/types.js +3 -0
- package/dist/route/types.js.map +1 -0
- package/dist/server/index.d.ts +201 -67
- package/dist/server/index.js +921 -3182
- package/dist/server/index.js.map +1 -1
- package/dist/types-BGl4QL1w.d.ts +77 -0
- package/dist/types-DRG2XMTR.d.ts +157 -0
- package/package.json +52 -47
- package/dist/auto-loader-JFaZ9gON.d.ts +0 -80
- package/dist/client/index.d.ts +0 -358
- package/dist/client/index.js +0 -357
- package/dist/client/index.js.map +0 -1
- package/dist/client/nextjs/index.js +0 -371
- package/dist/client/nextjs/index.js.map +0 -1
- package/dist/codegen/generators/index.d.ts +0 -19
- package/dist/codegen/generators/index.js +0 -1404
- package/dist/codegen/generators/index.js.map +0 -1
- package/dist/database-errors-BNNmLTJE.d.ts +0 -86
- package/dist/events/index.d.ts +0 -183
- package/dist/events/index.js +0 -77
- package/dist/events/index.js.map +0 -1
- package/dist/index-DHiAqhKv.d.ts +0 -101
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -3674
- package/dist/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -121
- package/dist/types/index.js +0 -38
- package/dist/types/index.js.map +0 -1
- package/dist/types-BXibIEyj.d.ts +0 -60
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { defineEnvSchema, envUrl, envNumber, envString, envBoolean, envEnum, parseRedisUrl, parsePostgresUrl, createEnvRegistry } from '@spfn/core/env';
|
|
2
|
+
|
|
3
|
+
// src/config/index.ts
|
|
4
|
+
var coreEnvSchema = defineEnvSchema({
|
|
5
|
+
// ========================================================================
|
|
6
|
+
// Core Environment
|
|
7
|
+
// ========================================================================
|
|
8
|
+
NODE_ENV: envEnum(["local", "development", "production", "test"], {
|
|
9
|
+
description: "Node.js runtime environment",
|
|
10
|
+
default: "local"
|
|
11
|
+
}),
|
|
12
|
+
// ========================================================================
|
|
13
|
+
// Database - Connection
|
|
14
|
+
// ========================================================================
|
|
15
|
+
DATABASE_URL: envString({
|
|
16
|
+
description: "Primary database connection URL",
|
|
17
|
+
required: false,
|
|
18
|
+
sensitive: true,
|
|
19
|
+
validator: parsePostgresUrl,
|
|
20
|
+
examples: ["postgresql://user:password@localhost:5432/dbname"]
|
|
21
|
+
}),
|
|
22
|
+
DATABASE_WRITE_URL: envString({
|
|
23
|
+
description: "Write database URL (master-replica pattern)",
|
|
24
|
+
required: false,
|
|
25
|
+
sensitive: true,
|
|
26
|
+
validator: parsePostgresUrl,
|
|
27
|
+
examples: ["postgresql://user:password@master:5432/dbname"]
|
|
28
|
+
}),
|
|
29
|
+
DATABASE_READ_URL: envString({
|
|
30
|
+
description: "Read database URL (master-replica pattern)",
|
|
31
|
+
required: false,
|
|
32
|
+
sensitive: true,
|
|
33
|
+
validator: parsePostgresUrl,
|
|
34
|
+
examples: ["postgresql://user:password@replica:5432/dbname"]
|
|
35
|
+
}),
|
|
36
|
+
// ========================================================================
|
|
37
|
+
// Database - Connection Pool
|
|
38
|
+
// ========================================================================
|
|
39
|
+
DB_POOL_MAX: envNumber({
|
|
40
|
+
description: "Maximum number of database connections in pool",
|
|
41
|
+
default: 10,
|
|
42
|
+
examples: [10, 20, 50]
|
|
43
|
+
}),
|
|
44
|
+
DB_POOL_IDLE_TIMEOUT: envNumber({
|
|
45
|
+
description: "Database connection idle timeout in seconds",
|
|
46
|
+
default: 30,
|
|
47
|
+
examples: [20, 30, 60]
|
|
48
|
+
}),
|
|
49
|
+
// ========================================================================
|
|
50
|
+
// Database - Retry Configuration
|
|
51
|
+
// ========================================================================
|
|
52
|
+
DB_RETRY_MAX: envNumber({
|
|
53
|
+
description: "Maximum number of database connection retry attempts",
|
|
54
|
+
default: 3,
|
|
55
|
+
examples: [3, 5, 10]
|
|
56
|
+
}),
|
|
57
|
+
DB_RETRY_INITIAL_DELAY: envNumber({
|
|
58
|
+
description: "Initial delay between database retry attempts (milliseconds)",
|
|
59
|
+
default: 100,
|
|
60
|
+
examples: [50, 100, 200]
|
|
61
|
+
}),
|
|
62
|
+
DB_RETRY_MAX_DELAY: envNumber({
|
|
63
|
+
description: "Maximum delay cap for database retry attempts (milliseconds)",
|
|
64
|
+
default: 1e4,
|
|
65
|
+
examples: [5e3, 1e4, 3e4]
|
|
66
|
+
}),
|
|
67
|
+
DB_RETRY_FACTOR: envNumber({
|
|
68
|
+
description: "Exponential backoff factor for database retry delays",
|
|
69
|
+
default: 2,
|
|
70
|
+
examples: [2, 1.5, 3]
|
|
71
|
+
}),
|
|
72
|
+
// ========================================================================
|
|
73
|
+
// Database - Health Check
|
|
74
|
+
// ========================================================================
|
|
75
|
+
DB_HEALTH_CHECK_ENABLED: envBoolean({
|
|
76
|
+
description: "Enable periodic database health checks",
|
|
77
|
+
default: true,
|
|
78
|
+
examples: [true, false]
|
|
79
|
+
}),
|
|
80
|
+
DB_HEALTH_CHECK_INTERVAL: envNumber({
|
|
81
|
+
description: "Database health check interval (milliseconds)",
|
|
82
|
+
default: 6e4,
|
|
83
|
+
examples: [3e4, 6e4, 12e4]
|
|
84
|
+
}),
|
|
85
|
+
DB_HEALTH_CHECK_RECONNECT: envBoolean({
|
|
86
|
+
description: "Reconnect to database on health check failure",
|
|
87
|
+
default: true,
|
|
88
|
+
examples: [true, false]
|
|
89
|
+
}),
|
|
90
|
+
DB_HEALTH_CHECK_MAX_RETRIES: envNumber({
|
|
91
|
+
description: "Maximum health check retry attempts before marking as failed",
|
|
92
|
+
default: 3,
|
|
93
|
+
examples: [3, 5, 10]
|
|
94
|
+
}),
|
|
95
|
+
DB_HEALTH_CHECK_RETRY_INTERVAL: envNumber({
|
|
96
|
+
description: "Interval between health check retry attempts (milliseconds)",
|
|
97
|
+
default: 5e3,
|
|
98
|
+
examples: [5e3, 1e4, 15e3]
|
|
99
|
+
}),
|
|
100
|
+
// ========================================================================
|
|
101
|
+
// Database - Monitoring
|
|
102
|
+
// ========================================================================
|
|
103
|
+
DB_MONITORING_ENABLED: envBoolean({
|
|
104
|
+
description: "Enable database query performance monitoring",
|
|
105
|
+
default: false,
|
|
106
|
+
examples: [true, false]
|
|
107
|
+
}),
|
|
108
|
+
DB_MONITORING_SLOW_THRESHOLD: envNumber({
|
|
109
|
+
description: "Slow query threshold for monitoring (milliseconds)",
|
|
110
|
+
default: 1e3,
|
|
111
|
+
examples: [500, 1e3, 2e3]
|
|
112
|
+
}),
|
|
113
|
+
DB_MONITORING_LOG_QUERIES: envBoolean({
|
|
114
|
+
description: "Log all database queries (not just slow queries)",
|
|
115
|
+
default: false,
|
|
116
|
+
examples: [true, false]
|
|
117
|
+
}),
|
|
118
|
+
// ========================================================================
|
|
119
|
+
// Database - Transaction
|
|
120
|
+
// ========================================================================
|
|
121
|
+
TRANSACTION_TIMEOUT: envNumber({
|
|
122
|
+
description: "Transaction timeout in milliseconds",
|
|
123
|
+
default: 3e4,
|
|
124
|
+
examples: [1e4, 3e4, 6e4]
|
|
125
|
+
}),
|
|
126
|
+
// ========================================================================
|
|
127
|
+
// Database - Development
|
|
128
|
+
// ========================================================================
|
|
129
|
+
DB_DEBUG_TRACE: envBoolean({
|
|
130
|
+
description: "Enable detailed debug tracing for database operations",
|
|
131
|
+
default: false,
|
|
132
|
+
examples: [true, false]
|
|
133
|
+
}),
|
|
134
|
+
// ========================================================================
|
|
135
|
+
// Drizzle ORM
|
|
136
|
+
// ========================================================================
|
|
137
|
+
DRIZZLE_SCHEMA_PATH: envString({
|
|
138
|
+
description: "Path to Drizzle schema configuration",
|
|
139
|
+
required: false,
|
|
140
|
+
default: "./src/server/entities/config.ts",
|
|
141
|
+
examples: ["./src/db/schema.ts", "./src/server/entities/config.ts"]
|
|
142
|
+
}),
|
|
143
|
+
DRIZZLE_OUT_DIR: envString({
|
|
144
|
+
description: "Output directory for Drizzle migrations",
|
|
145
|
+
required: false,
|
|
146
|
+
default: "./drizzle",
|
|
147
|
+
examples: ["./drizzle", "./migrations"]
|
|
148
|
+
}),
|
|
149
|
+
// ========================================================================
|
|
150
|
+
// Logger - Core
|
|
151
|
+
// ========================================================================
|
|
152
|
+
SPFN_LOG_LEVEL: envEnum(["debug", "info", "warn", "error", "fatal"], {
|
|
153
|
+
description: "Minimum log level to output",
|
|
154
|
+
default: "info"
|
|
155
|
+
}),
|
|
156
|
+
// ========================================================================
|
|
157
|
+
// Cache (Redis/Valkey)
|
|
158
|
+
// ========================================================================
|
|
159
|
+
CACHE_URL: envString({
|
|
160
|
+
description: "Single Redis/Valkey instance URL",
|
|
161
|
+
required: false,
|
|
162
|
+
sensitive: true,
|
|
163
|
+
validator: parseRedisUrl,
|
|
164
|
+
examples: ["redis://localhost:6379", "rediss://secure.cache.com:6380"]
|
|
165
|
+
}),
|
|
166
|
+
CACHE_WRITE_URL: envString({
|
|
167
|
+
description: "Master Redis/Valkey URL for writes (master-replica pattern)",
|
|
168
|
+
required: false,
|
|
169
|
+
sensitive: true,
|
|
170
|
+
validator: parseRedisUrl,
|
|
171
|
+
examples: ["redis://master:6379"]
|
|
172
|
+
}),
|
|
173
|
+
CACHE_READ_URL: envString({
|
|
174
|
+
description: "Replica Redis/Valkey URL for reads (master-replica pattern)",
|
|
175
|
+
required: false,
|
|
176
|
+
sensitive: true,
|
|
177
|
+
validator: parseRedisUrl,
|
|
178
|
+
examples: ["redis://replica:6379"]
|
|
179
|
+
}),
|
|
180
|
+
CACHE_SENTINEL_HOSTS: envString({
|
|
181
|
+
description: "Comma-separated Redis Sentinel hosts",
|
|
182
|
+
required: false,
|
|
183
|
+
examples: ["sentinel1:26379,sentinel2:26379"]
|
|
184
|
+
}),
|
|
185
|
+
CACHE_CLUSTER_NODES: envString({
|
|
186
|
+
description: "Comma-separated Redis Cluster nodes",
|
|
187
|
+
required: false,
|
|
188
|
+
examples: ["node1:6379,node2:6379,node3:6379"]
|
|
189
|
+
}),
|
|
190
|
+
CACHE_MASTER_NAME: envString({
|
|
191
|
+
description: "Redis Sentinel master name",
|
|
192
|
+
required: false,
|
|
193
|
+
examples: ["mymaster"]
|
|
194
|
+
}),
|
|
195
|
+
CACHE_PASSWORD: envString({
|
|
196
|
+
description: "Redis/Valkey authentication password",
|
|
197
|
+
required: false,
|
|
198
|
+
sensitive: true,
|
|
199
|
+
examples: ["your-redis-password"]
|
|
200
|
+
}),
|
|
201
|
+
CACHE_TLS_REJECT_UNAUTHORIZED: envBoolean({
|
|
202
|
+
description: "Verify TLS certificates for secure Redis connections",
|
|
203
|
+
default: true,
|
|
204
|
+
examples: [true, false]
|
|
205
|
+
}),
|
|
206
|
+
// ========================================================================
|
|
207
|
+
// Server - Core
|
|
208
|
+
// ========================================================================
|
|
209
|
+
PORT: envNumber({
|
|
210
|
+
description: "Server port number",
|
|
211
|
+
default: 4e3,
|
|
212
|
+
examples: [3e3, 4e3, 8080]
|
|
213
|
+
}),
|
|
214
|
+
HOST: envString({
|
|
215
|
+
description: "Server hostname",
|
|
216
|
+
default: "localhost",
|
|
217
|
+
required: false,
|
|
218
|
+
examples: ["localhost", "0.0.0.0", "127.0.0.1"]
|
|
219
|
+
}),
|
|
220
|
+
// ========================================================================
|
|
221
|
+
// Server - Timeout
|
|
222
|
+
// ========================================================================
|
|
223
|
+
SERVER_TIMEOUT: envNumber({
|
|
224
|
+
description: "Request timeout in milliseconds",
|
|
225
|
+
default: 12e4,
|
|
226
|
+
examples: [6e4, 12e4, 3e5]
|
|
227
|
+
}),
|
|
228
|
+
SERVER_KEEPALIVE_TIMEOUT: envNumber({
|
|
229
|
+
description: "Keep-alive timeout in milliseconds",
|
|
230
|
+
default: 65e3,
|
|
231
|
+
examples: [3e4, 65e3, 12e4]
|
|
232
|
+
}),
|
|
233
|
+
SERVER_HEADERS_TIMEOUT: envNumber({
|
|
234
|
+
description: "Headers timeout in milliseconds",
|
|
235
|
+
default: 6e4,
|
|
236
|
+
examples: [3e4, 6e4, 12e4]
|
|
237
|
+
}),
|
|
238
|
+
SHUTDOWN_TIMEOUT: envNumber({
|
|
239
|
+
description: "Graceful shutdown timeout in milliseconds",
|
|
240
|
+
default: 3e4,
|
|
241
|
+
examples: [1e4, 3e4, 6e4]
|
|
242
|
+
}),
|
|
243
|
+
// ========================================================================
|
|
244
|
+
// Next.js Client
|
|
245
|
+
// ========================================================================
|
|
246
|
+
SPFN_API_URL: envUrl({
|
|
247
|
+
description: "Next.js API URL (required for client-side API calls)",
|
|
248
|
+
required: true,
|
|
249
|
+
examples: ["http://localhost:3000", "https://your-app.com"]
|
|
250
|
+
}),
|
|
251
|
+
SPFN_APP_URL: envUrl({
|
|
252
|
+
description: "Next.js application URL (required for server-side API calls)",
|
|
253
|
+
required: false,
|
|
254
|
+
examples: ["http://localhost:3000", "https://your-app.com"]
|
|
255
|
+
})
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
// src/config/index.ts
|
|
259
|
+
var registry = createEnvRegistry(coreEnvSchema);
|
|
260
|
+
var env = registry.validate();
|
|
261
|
+
|
|
262
|
+
export { env, coreEnvSchema as envSchema, registry };
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
264
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/config/schema.ts","../../src/config/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core Package Environment Variable Schema\n *\n * Centralized schema definition for all environment variables used in @spfn/core.\n * This provides type safety, validation, and documentation for environment configuration.\n *\n * @module config/schema\n */\n\nimport {\n defineEnvSchema,\n envEnum,\n envNumber,\n envBoolean,\n envUrl,\n envString,\n parsePostgresUrl,\n parseRedisUrl,\n} from '@spfn/core/env';\n\n/**\n * Core package environment variable schema\n *\n * Defines all environment variables with:\n * - Type information\n * - Default values\n * - Validation rules\n * - Documentation\n *\n * @example\n * ```typescript\n * import { coreEnvSchema } from '@spfn/core/config';\n *\n * // Access schema information\n * console.log(coreEnvSchema.DB_POOL_MAX.description);\n * console.log(coreEnvSchema.DB_POOL_MAX.default);\n * ```\n */\nexport const coreEnvSchema = defineEnvSchema({\n // ========================================================================\n // Core Environment\n // ========================================================================\n\n NODE_ENV: envEnum(['local', 'development', 'production', 'test'] as const, {\n description: 'Node.js runtime environment',\n default: 'local',\n }),\n\n // ========================================================================\n // Database - Connection\n // ========================================================================\n\n DATABASE_URL: envString({\n description: 'Primary database connection URL',\n required: false,\n sensitive: true,\n validator: parsePostgresUrl,\n examples: ['postgresql://user:password@localhost:5432/dbname'],\n }),\n\n DATABASE_WRITE_URL: envString({\n description: 'Write database URL (master-replica pattern)',\n required: false,\n sensitive: true,\n validator: parsePostgresUrl,\n examples: ['postgresql://user:password@master:5432/dbname'],\n }),\n\n DATABASE_READ_URL: envString({\n description: 'Read database URL (master-replica pattern)',\n required: false,\n sensitive: true,\n validator: parsePostgresUrl,\n examples: ['postgresql://user:password@replica:5432/dbname'],\n }),\n\n\n // ========================================================================\n // Database - Connection Pool\n // ========================================================================\n\n DB_POOL_MAX: envNumber({\n description: 'Maximum number of database connections in pool',\n default: 10,\n examples: [10, 20, 50],\n }),\n\n DB_POOL_IDLE_TIMEOUT: envNumber({\n description: 'Database connection idle timeout in seconds',\n default: 30,\n examples: [20, 30, 60],\n }),\n\n // ========================================================================\n // Database - Retry Configuration\n // ========================================================================\n\n DB_RETRY_MAX: envNumber({\n description: 'Maximum number of database connection retry attempts',\n default: 3,\n examples: [3, 5, 10],\n }),\n\n DB_RETRY_INITIAL_DELAY: envNumber({\n description: 'Initial delay between database retry attempts (milliseconds)',\n default: 100,\n examples: [50, 100, 200],\n }),\n\n DB_RETRY_MAX_DELAY: envNumber({\n description: 'Maximum delay cap for database retry attempts (milliseconds)',\n default: 10000,\n examples: [5000, 10000, 30000],\n }),\n\n DB_RETRY_FACTOR: envNumber({\n description: 'Exponential backoff factor for database retry delays',\n default: 2,\n examples: [2, 1.5, 3],\n }),\n\n // ========================================================================\n // Database - Health Check\n // ========================================================================\n\n DB_HEALTH_CHECK_ENABLED: envBoolean({\n description: 'Enable periodic database health checks',\n default: true,\n examples: [true, false],\n }),\n\n DB_HEALTH_CHECK_INTERVAL: envNumber({\n description: 'Database health check interval (milliseconds)',\n default: 60000,\n examples: [30000, 60000, 120000],\n }),\n\n DB_HEALTH_CHECK_RECONNECT: envBoolean({\n description: 'Reconnect to database on health check failure',\n default: true,\n examples: [true, false],\n }),\n\n DB_HEALTH_CHECK_MAX_RETRIES: envNumber({\n description: 'Maximum health check retry attempts before marking as failed',\n default: 3,\n examples: [3, 5, 10],\n }),\n\n DB_HEALTH_CHECK_RETRY_INTERVAL: envNumber({\n description: 'Interval between health check retry attempts (milliseconds)',\n default: 5000,\n examples: [5000, 10000, 15000],\n }),\n\n // ========================================================================\n // Database - Monitoring\n // ========================================================================\n\n DB_MONITORING_ENABLED: envBoolean({\n description: 'Enable database query performance monitoring',\n default: false,\n examples: [true, false],\n }),\n\n DB_MONITORING_SLOW_THRESHOLD: envNumber({\n description: 'Slow query threshold for monitoring (milliseconds)',\n default: 1000,\n examples: [500, 1000, 2000],\n }),\n\n DB_MONITORING_LOG_QUERIES: envBoolean({\n description: 'Log all database queries (not just slow queries)',\n default: false,\n examples: [true, false],\n }),\n\n // ========================================================================\n // Database - Transaction\n // ========================================================================\n\n TRANSACTION_TIMEOUT: envNumber({\n description: 'Transaction timeout in milliseconds',\n default: 30000,\n examples: [10000, 30000, 60000],\n }),\n\n // ========================================================================\n // Database - Development\n // ========================================================================\n\n DB_DEBUG_TRACE: envBoolean({\n description: 'Enable detailed debug tracing for database operations',\n default: false,\n examples: [true, false],\n }),\n\n // ========================================================================\n // Drizzle ORM\n // ========================================================================\n\n DRIZZLE_SCHEMA_PATH: envString({\n description: 'Path to Drizzle schema configuration',\n required: false,\n default: './src/server/entities/config.ts',\n examples: ['./src/db/schema.ts', './src/server/entities/config.ts'],\n }),\n\n DRIZZLE_OUT_DIR: envString({\n description: 'Output directory for Drizzle migrations',\n required: false,\n default: './drizzle',\n examples: ['./drizzle', './migrations'],\n }),\n\n // ========================================================================\n // Logger - Core\n // ========================================================================\n\n SPFN_LOG_LEVEL: envEnum(['debug', 'info', 'warn', 'error', 'fatal'] as const, {\n description: 'Minimum log level to output',\n default: 'info'\n }),\n\n // ========================================================================\n // Cache (Redis/Valkey)\n // ========================================================================\n\n CACHE_URL: envString({\n description: 'Single Redis/Valkey instance URL',\n required: false,\n sensitive: true,\n validator: parseRedisUrl,\n examples: ['redis://localhost:6379', 'rediss://secure.cache.com:6380'],\n }),\n\n CACHE_WRITE_URL: envString({\n description: 'Master Redis/Valkey URL for writes (master-replica pattern)',\n required: false,\n sensitive: true,\n validator: parseRedisUrl,\n examples: ['redis://master:6379'],\n }),\n\n CACHE_READ_URL: envString({\n description: 'Replica Redis/Valkey URL for reads (master-replica pattern)',\n required: false,\n sensitive: true,\n validator: parseRedisUrl,\n examples: ['redis://replica:6379'],\n }),\n\n CACHE_SENTINEL_HOSTS: envString({\n description: 'Comma-separated Redis Sentinel hosts',\n required: false,\n examples: ['sentinel1:26379,sentinel2:26379'],\n }),\n\n CACHE_CLUSTER_NODES: envString({\n description: 'Comma-separated Redis Cluster nodes',\n required: false,\n examples: ['node1:6379,node2:6379,node3:6379'],\n }),\n\n CACHE_MASTER_NAME: envString({\n description: 'Redis Sentinel master name',\n required: false,\n examples: ['mymaster'],\n }),\n\n CACHE_PASSWORD: envString({\n description: 'Redis/Valkey authentication password',\n required: false,\n sensitive: true,\n examples: ['your-redis-password'],\n }),\n\n CACHE_TLS_REJECT_UNAUTHORIZED: envBoolean({\n description: 'Verify TLS certificates for secure Redis connections',\n default: true,\n examples: [true, false],\n }),\n\n // ========================================================================\n // Server - Core\n // ========================================================================\n\n PORT: envNumber({\n description: 'Server port number',\n default: 4000,\n examples: [3000, 4000, 8080],\n }),\n\n HOST: envString({\n description: 'Server hostname',\n default: 'localhost',\n required: false,\n examples: ['localhost', '0.0.0.0', '127.0.0.1'],\n }),\n\n // ========================================================================\n // Server - Timeout\n // ========================================================================\n\n SERVER_TIMEOUT: envNumber({\n description: 'Request timeout in milliseconds',\n default: 120000,\n examples: [60000, 120000, 300000],\n }),\n\n SERVER_KEEPALIVE_TIMEOUT: envNumber({\n description: 'Keep-alive timeout in milliseconds',\n default: 65000,\n examples: [30000, 65000, 120000],\n }),\n\n SERVER_HEADERS_TIMEOUT: envNumber({\n description: 'Headers timeout in milliseconds',\n default: 60000,\n examples: [30000, 60000, 120000],\n }),\n\n SHUTDOWN_TIMEOUT: envNumber({\n description: 'Graceful shutdown timeout in milliseconds',\n default: 30000,\n examples: [10000, 30000, 60000],\n }),\n\n // ========================================================================\n // Next.js Client\n // ========================================================================\n SPFN_API_URL: envUrl({\n description: 'Next.js API URL (required for client-side API calls)',\n required: true,\n examples: ['http://localhost:3000', 'https://your-app.com'],\n }),\n\n SPFN_APP_URL: envUrl({\n description: 'Next.js application URL (required for server-side API calls)',\n required: false,\n examples: ['http://localhost:3000', 'https://your-app.com'],\n }),\n});","/**\n * Core Package Configuration\n *\n * @example\n * ```typescript\n * import { registry } from '@spfn/core/config';\n *\n * const env = registry.validate();\n * console.log(env.DB_POOL_MAX);\n * ```\n *\n * @module config\n */\n\nimport { createEnvRegistry } from '@spfn/core/env';\nimport { coreEnvSchema } from './schema';\n\n/**\n * Core environment schema\n */\nexport { coreEnvSchema as envSchema } from './schema';\n\n/**\n * Environment registry\n *\n * @example\n * ```typescript\n * // Reset for testing\n * registry.reset();\n * ```\n */\nexport const registry = createEnvRegistry(coreEnvSchema);\n\n/**\n * Validated environment configuration\n */\nexport const env = registry.validate();"]}
|