@zintrust/core 0.1.5 → 0.1.7

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.
Files changed (321) hide show
  1. package/bin/z.d.ts +2 -2
  2. package/bin/z.d.ts.map +1 -1
  3. package/bin/z.js +3 -2
  4. package/bin/zin.d.ts +2 -2
  5. package/bin/zin.d.ts.map +1 -1
  6. package/bin/zin.js +3 -2
  7. package/bin/zintrust-main.d.ts +9 -0
  8. package/bin/zintrust-main.d.ts.map +1 -0
  9. package/bin/zintrust-main.js +101 -0
  10. package/bin/zintrust-microservices.js +7 -7
  11. package/bin/zintrust.d.ts +5 -4
  12. package/bin/zintrust.d.ts.map +1 -1
  13. package/bin/zintrust.js +7 -87
  14. package/bin/zt.d.ts +2 -2
  15. package/bin/zt.d.ts.map +1 -1
  16. package/bin/zt.js +3 -2
  17. package/package.json +13 -3
  18. package/public/index.html +4 -0
  19. package/src/boot/Application.js +13 -13
  20. package/src/boot/Server.d.ts.map +1 -1
  21. package/src/boot/Server.js +47 -39
  22. package/src/boot/bootstrap.js +71 -36
  23. package/src/builder/BundleOptimizer.js +3 -3
  24. package/src/cache/Cache.js +6 -6
  25. package/src/cache/drivers/KVDriver.js +2 -2
  26. package/src/cache/drivers/MongoDriver.js +3 -3
  27. package/src/cache/drivers/RedisDriver.js +3 -3
  28. package/src/cli/BaseCommand.d.ts +2 -0
  29. package/src/cli/BaseCommand.d.ts.map +1 -1
  30. package/src/cli/BaseCommand.js +12 -2
  31. package/src/cli/CLI.js +23 -23
  32. package/src/cli/ErrorHandler.d.ts.map +1 -1
  33. package/src/cli/ErrorHandler.js +14 -8
  34. package/src/cli/commands/AddCommand.js +15 -15
  35. package/src/cli/commands/ConfigCommand.js +6 -6
  36. package/src/cli/commands/D1MigrateCommand.js +6 -6
  37. package/src/cli/commands/DebugCommand.js +3 -3
  38. package/src/cli/commands/FixCommand.js +5 -5
  39. package/src/cli/commands/KeyGenerateCommand.js +5 -5
  40. package/src/cli/commands/LogsCleanupCommand.js +2 -2
  41. package/src/cli/commands/LogsCommand.js +6 -6
  42. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  43. package/src/cli/commands/MakeMailTemplateCommand.js +8 -7
  44. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  45. package/src/cli/commands/MakeNotificationTemplateCommand.js +8 -7
  46. package/src/cli/commands/MigrateCommand.js +2 -2
  47. package/src/cli/commands/NewCommand.js +11 -11
  48. package/src/cli/commands/PluginCommand.js +3 -3
  49. package/src/cli/commands/PrepareCommand.js +6 -6
  50. package/src/cli/commands/QACommand.js +8 -8
  51. package/src/cli/commands/SecretsCommand.js +3 -3
  52. package/src/cli/commands/SimulateCommand.js +6 -6
  53. package/src/cli/commands/StartCommand.js +7 -7
  54. package/src/cli/commands/TemplatesCommand.js +5 -5
  55. package/src/cli/commands/index.js +12 -12
  56. package/src/cli/config/ConfigManager.js +5 -5
  57. package/src/cli/config/ConfigValidator.js +1 -1
  58. package/src/cli/config/index.js +3 -3
  59. package/src/cli/debug/Dashboard.js +3 -3
  60. package/src/cli/index.js +10 -10
  61. package/src/cli/logger/Logger.js +2 -2
  62. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  63. package/src/cli/scaffolding/ControllerGenerator.js +48 -64
  64. package/src/cli/scaffolding/FactoryGenerator.js +6 -6
  65. package/src/cli/scaffolding/FeatureScaffolder.js +8 -8
  66. package/src/cli/scaffolding/FileGenerator.js +4 -4
  67. package/src/cli/scaffolding/MigrationGenerator.js +4 -4
  68. package/src/cli/scaffolding/ModelGenerator.js +5 -5
  69. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  70. package/src/cli/scaffolding/ProjectScaffolder.js +78 -15
  71. package/src/cli/scaffolding/RequestFactoryGenerator.js +5 -5
  72. package/src/cli/scaffolding/ResponseFactoryGenerator.js +5 -5
  73. package/src/cli/scaffolding/RouteGenerator.js +4 -4
  74. package/src/cli/scaffolding/SeederGenerator.js +7 -7
  75. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +5 -5
  76. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +4 -4
  77. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  78. package/src/cli/scaffolding/ServiceScaffolder.js +24 -23
  79. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
  80. package/src/cli/scaffolding/TemplateEngine.js +0 -2
  81. package/src/cli/scaffolding/TemplateGenerator.js +4 -4
  82. package/src/cli/scaffolding/WorkflowGenerator.js +4 -4
  83. package/src/cli/scaffolding/index.js +16 -16
  84. package/src/cli/utils/DistPackager.js +4 -4
  85. package/src/cli/utils/EnvFileLoader.js +2 -2
  86. package/src/cli/utils/spawn.d.ts.map +1 -1
  87. package/src/cli/utils/spawn.js +18 -7
  88. package/src/common/AwsSigV4.js +1 -1
  89. package/src/common/index.js +5 -5
  90. package/src/common/uuid.js +2 -2
  91. package/src/config/FileLogWriter.js +4 -4
  92. package/src/config/SecretsManager.d.ts +1 -42
  93. package/src/config/SecretsManager.d.ts.map +1 -1
  94. package/src/config/SecretsManager.js +2 -2
  95. package/src/config/StartupConfigValidator.d.ts +1 -9
  96. package/src/config/StartupConfigValidator.d.ts.map +1 -1
  97. package/src/config/StartupConfigValidator.js +115 -22
  98. package/src/config/app.d.ts +1 -1
  99. package/src/config/app.d.ts.map +1 -1
  100. package/src/config/app.js +1 -1
  101. package/src/config/broadcast.d.ts +1 -26
  102. package/src/config/broadcast.d.ts.map +1 -1
  103. package/src/config/broadcast.js +1 -1
  104. package/src/config/cache.d.ts +1 -22
  105. package/src/config/cache.d.ts.map +1 -1
  106. package/src/config/cache.js +1 -1
  107. package/src/config/cloudflare.d.ts +1 -13
  108. package/src/config/cloudflare.d.ts.map +1 -1
  109. package/src/config/database.d.ts +2 -47
  110. package/src/config/database.d.ts.map +1 -1
  111. package/src/config/database.js +1 -1
  112. package/src/config/env.d.ts.map +1 -1
  113. package/src/config/env.js +6 -2
  114. package/src/config/features.js +2 -2
  115. package/src/config/index.d.ts +10 -287
  116. package/src/config/index.d.ts.map +1 -1
  117. package/src/config/index.js +16 -16
  118. package/src/config/logger.d.ts.map +1 -1
  119. package/src/config/logger.js +10 -8
  120. package/src/config/logging/HttpLogger.js +4 -4
  121. package/src/config/logging/KvLogger.js +2 -2
  122. package/src/config/logging/SlackLogger.js +3 -3
  123. package/src/config/mail.d.ts +1 -27
  124. package/src/config/mail.d.ts.map +1 -1
  125. package/src/config/mail.js +1 -1
  126. package/src/config/microservices.js +1 -1
  127. package/src/config/middleware.d.ts +2 -6
  128. package/src/config/middleware.d.ts.map +1 -1
  129. package/src/config/middleware.js +5 -5
  130. package/src/config/notification.d.ts +0 -21
  131. package/src/config/notification.d.ts.map +1 -1
  132. package/src/config/notification.js +1 -1
  133. package/src/config/queue.d.ts +1 -39
  134. package/src/config/queue.d.ts.map +1 -1
  135. package/src/config/queue.js +1 -1
  136. package/src/config/security.d.ts +12 -0
  137. package/src/config/security.d.ts.map +1 -1
  138. package/src/config/security.js +17 -5
  139. package/src/config/startup.d.ts +2 -0
  140. package/src/config/startup.d.ts.map +1 -1
  141. package/src/config/startup.js +2 -1
  142. package/src/config/storage.d.ts +1 -48
  143. package/src/config/storage.d.ts.map +1 -1
  144. package/src/config/storage.js +1 -1
  145. package/src/config/type.d.ts +335 -0
  146. package/src/config/type.d.ts.map +1 -0
  147. package/src/config/type.js +1 -0
  148. package/src/container/ServiceContainer.js +1 -1
  149. package/src/exceptions/ZintrustError.js +1 -1
  150. package/src/features/Queue.js +2 -2
  151. package/src/functions/cloudflare.js +4 -4
  152. package/src/functions/deno.js +4 -4
  153. package/src/functions/lambda.js +4 -4
  154. package/src/health/RuntimeHealthProbes.js +3 -3
  155. package/src/health/StartupHealthChecks.js +9 -9
  156. package/src/http/Kernel.js +10 -10
  157. package/src/http/RequestContext.js +2 -2
  158. package/src/http/Response.js +1 -1
  159. package/src/index.d.ts +36 -1
  160. package/src/index.d.ts.map +1 -1
  161. package/src/index.js +69 -36
  162. package/src/microservices/MicroserviceBootstrap.js +5 -5
  163. package/src/microservices/MicroserviceGenerator.js +10 -10
  164. package/src/microservices/MicroserviceManager.js +4 -4
  165. package/src/microservices/PostgresAdapter.js +3 -3
  166. package/src/microservices/RequestTracingMiddleware.js +3 -3
  167. package/src/microservices/ServiceAuthMiddleware.js +3 -3
  168. package/src/microservices/ServiceBundler.js +3 -3
  169. package/src/microservices/ServiceHealthMonitor.js +2 -2
  170. package/src/middleware/CsrfMiddleware.js +3 -3
  171. package/src/middleware/ErrorHandlerMiddleware.js +4 -4
  172. package/src/middleware/LoggingMiddleware.js +3 -3
  173. package/src/middleware/RateLimiter.js +1 -1
  174. package/src/middleware/index.js +6 -6
  175. package/src/node-singletons/http.d.ts +2 -2
  176. package/src/node-singletons/http.d.ts.map +1 -1
  177. package/src/node-singletons/http.js +1 -1
  178. package/src/node-singletons/index.js +14 -14
  179. package/src/node-singletons/path.d.ts +1 -1
  180. package/src/node.d.ts +5 -0
  181. package/src/node.d.ts.map +1 -0
  182. package/src/node.js +4 -0
  183. package/src/orm/ConnectionManager.js +3 -3
  184. package/src/orm/Database.js +8 -8
  185. package/src/orm/Model.js +5 -5
  186. package/src/orm/QueryBuilder.js +1 -1
  187. package/src/orm/Relationships.js +1 -1
  188. package/src/orm/adapters/D1Adapter.js +5 -5
  189. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  190. package/src/orm/adapters/MySQLAdapter.js +4 -6
  191. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  192. package/src/orm/adapters/PostgreSQLAdapter.js +4 -6
  193. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  194. package/src/orm/adapters/SQLServerAdapter.js +4 -6
  195. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  196. package/src/orm/adapters/SQLiteAdapter.js +5 -7
  197. package/src/performance/CodeGenerationBenchmark.js +5 -5
  198. package/src/performance/Optimizer.js +3 -3
  199. package/src/performance/establish-baseline.js +4 -4
  200. package/src/profiling/RequestProfiler.js +4 -4
  201. package/src/runtime/PluginManager.js +8 -8
  202. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  203. package/src/runtime/RuntimeDetector.js +22 -12
  204. package/src/runtime/adapters/CloudflareAdapter.js +3 -3
  205. package/src/runtime/adapters/DenoAdapter.js +2 -2
  206. package/src/runtime/adapters/FargateAdapter.js +4 -4
  207. package/src/runtime/adapters/LambdaAdapter.js +4 -4
  208. package/src/runtime/adapters/NodeServerAdapter.js +4 -4
  209. package/src/scheduler/ScheduleRunner.js +2 -2
  210. package/src/scheduler/index.js +1 -1
  211. package/src/schedules/index.js +1 -1
  212. package/src/schedules/log-cleanup.js +2 -2
  213. package/src/scripts/GenerateEnvArtifacts.js +4 -4
  214. package/src/scripts/TemplateSync.js +8 -6
  215. package/src/security/CsrfTokenManager.js +2 -2
  216. package/src/security/Encryptor.js +3 -3
  217. package/src/security/Hash.js +2 -2
  218. package/src/security/JwtManager.js +2 -2
  219. package/src/security/StartupSecretValidation.js +4 -4
  220. package/src/security/UrlValidator.js +1 -1
  221. package/src/security/Xss.js +1 -1
  222. package/src/security/XssProtection.d.ts.map +1 -1
  223. package/src/security/XssProtection.js +8 -3
  224. package/src/templates/adapters/MySQLAdapter.ts.tpl +0 -2
  225. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +0 -3
  226. package/src/templates/adapters/SQLServerAdapter.ts.tpl +0 -2
  227. package/src/templates/adapters/SQLiteAdapter.ts.tpl +0 -2
  228. package/src/templates/project/basic/.env.tpl +8 -1
  229. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +3 -2
  230. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +3 -2
  231. package/src/templates/project/basic/app/Middleware/index.ts.tpl +8 -14
  232. package/src/templates/project/basic/app/Models/Post.ts.tpl +2 -1
  233. package/src/templates/project/basic/app/Models/User.ts.tpl +1 -1
  234. package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +1 -1
  235. package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +1 -1
  236. package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +1 -1
  237. package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +1 -1
  238. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +2 -4
  239. package/src/templates/project/basic/config/SecretsManager.ts.tpl +6 -39
  240. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +154 -37
  241. package/src/templates/project/basic/config/app.ts.tpl +1 -5
  242. package/src/templates/project/basic/config/broadcast.ts.tpl +6 -36
  243. package/src/templates/project/basic/config/cache.ts.tpl +1 -42
  244. package/src/templates/project/basic/config/cloudflare.ts.tpl +1 -15
  245. package/src/templates/project/basic/config/database.ts.tpl +5 -51
  246. package/src/templates/project/basic/config/env.ts.tpl +6 -7
  247. package/src/templates/project/basic/config/features.ts.tpl +1 -1
  248. package/src/templates/project/basic/config/index.ts.tpl +1 -1
  249. package/src/templates/project/basic/config/logger.ts.tpl +3 -1
  250. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +1 -1
  251. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +1 -1
  252. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +1 -1
  253. package/src/templates/project/basic/config/mail.ts.tpl +1 -57
  254. package/src/templates/project/basic/config/microservices.ts.tpl +1 -1
  255. package/src/templates/project/basic/config/middleware.ts.tpl +2 -6
  256. package/src/templates/project/basic/config/notification.ts.tpl +1 -36
  257. package/src/templates/project/basic/config/queue.ts.tpl +1 -49
  258. package/src/templates/project/basic/config/security.ts.tpl +13 -1
  259. package/src/templates/project/basic/config/startup.ts.tpl +2 -0
  260. package/src/templates/project/basic/config/storage.ts.tpl +6 -54
  261. package/src/templates/project/basic/config/type.ts.tpl +414 -0
  262. package/src/templates/project/basic/package.json.tpl +1 -0
  263. package/src/templates/project/basic/routes/api.ts.tpl +1 -1
  264. package/src/templates/project/basic/routes/broadcast.ts.tpl +1 -1
  265. package/src/templates/project/basic/routes/health.ts.tpl +1 -1
  266. package/src/templates/project/basic/routes/storage.ts.tpl +1 -1
  267. package/src/templates/project/basic/src/index.ts.tpl +49 -41
  268. package/src/templates/project/basic/template.json +1 -1
  269. package/src/templates/project/basic/tsconfig.json.tpl +3 -1
  270. package/src/toolkit/Secrets/EnvFile.js +3 -3
  271. package/src/toolkit/Secrets/Manifest.js +3 -3
  272. package/src/toolkit/Secrets/index.js +5 -5
  273. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +2 -2
  274. package/src/toolkit/Secrets/providers/CloudflareKv.js +1 -1
  275. package/src/tools/broadcast/Broadcast.js +6 -6
  276. package/src/tools/broadcast/drivers/BaseDriver.js +1 -1
  277. package/src/tools/broadcast/drivers/Pusher.d.ts +1 -1
  278. package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -1
  279. package/src/tools/broadcast/drivers/Pusher.js +2 -2
  280. package/src/tools/broadcast/drivers/Redis.js +1 -1
  281. package/src/tools/broadcast/drivers/RedisHttps.js +3 -3
  282. package/src/tools/broadcast/index.js +6 -6
  283. package/src/tools/http/Http.js +4 -4
  284. package/src/tools/http/HttpResponse.js +1 -1
  285. package/src/tools/http/index.js +2 -2
  286. package/src/tools/mail/Mail.js +8 -8
  287. package/src/tools/mail/attachments.js +1 -1
  288. package/src/tools/mail/drivers/BaseDriver.js +1 -1
  289. package/src/tools/mail/drivers/Mailgun.js +1 -1
  290. package/src/tools/mail/drivers/SendGrid.js +1 -1
  291. package/src/tools/mail/drivers/Ses.js +2 -2
  292. package/src/tools/mail/drivers/Smtp.js +4 -4
  293. package/src/tools/mail/templates/markdown/index.js +3 -3
  294. package/src/tools/mail/templates/markdown/registry.js +5 -5
  295. package/src/tools/mail/templates/markdown/validator.js +1 -1
  296. package/src/tools/mail/testing.js +1 -1
  297. package/src/tools/notification/Notification.js +1 -1
  298. package/src/tools/notification/Registry.js +3 -3
  299. package/src/tools/notification/Service.js +3 -3
  300. package/src/tools/notification/config.js +1 -1
  301. package/src/tools/notification/drivers/BaseDriver.js +1 -1
  302. package/src/tools/notification/drivers/Slack.js +1 -1
  303. package/src/tools/notification/drivers/Termii.js +1 -1
  304. package/src/tools/notification/drivers/Twilio.js +1 -1
  305. package/src/tools/notification/templates/markdown/index.js +3 -3
  306. package/src/tools/notification/templates/markdown/registry.js +5 -5
  307. package/src/tools/notification/testing.js +1 -1
  308. package/src/tools/notification/testingHelpers.js +2 -2
  309. package/src/tools/queue/Queue.js +1 -1
  310. package/src/tools/queue/drivers/InMemory.js +1 -1
  311. package/src/tools/queue/drivers/Redis.js +2 -2
  312. package/src/tools/storage/LocalSignedUrl.js +2 -2
  313. package/src/tools/storage/drivers/Gcs.js +1 -1
  314. package/src/tools/storage/drivers/Local.js +5 -5
  315. package/src/tools/storage/drivers/R2.js +2 -2
  316. package/src/tools/storage/drivers/S3.js +3 -3
  317. package/src/tools/storage/index.js +6 -6
  318. package/src/tools/storage/testing.js +1 -1
  319. package/src/tools/templates/MarkdownRenderer.js +2 -2
  320. package/src/tools/templates/index.js +1 -1
  321. package/src/validation/Validator.js +3 -3
@@ -6,11 +6,7 @@
6
6
  * Safe for both Node.js and serverless runtimes (Cloudflare Workers, Deno, Lambda)
7
7
  */
8
8
 
9
- type ProcessLike = {
10
- env?: Record<string, string | undefined>;
11
- execPath?: string;
12
- platform?: string;
13
- };
9
+ import { ProcessLike } from '@config/type';
14
10
 
15
11
  const getProcessLike = (): ProcessLike | undefined => {
16
12
  return typeof process === 'undefined' ? undefined : (process as unknown as ProcessLike);
@@ -35,6 +31,7 @@ const getInt = (key: string, defaultValue?: number): number => {
35
31
  const env = proc?.env ?? {};
36
32
  const value = env[key];
37
33
  if (value === undefined || value === null) return defaultValue ?? 0;
34
+ if (typeof value === 'string' && value.trim() === '') return defaultValue ?? 0;
38
35
  return Number.parseInt(value, 10);
39
36
  };
40
37
 
@@ -62,7 +59,8 @@ export const Env = Object.freeze({
62
59
 
63
60
  // Core
64
61
  NODE_ENV: get('NODE_ENV', 'development'),
65
- PORT: getInt('APP_PORT', 3000),
62
+ // Prefer PORT, fallback to APP_PORT for compatibility
63
+ PORT: getInt('PORT', getInt('APP_PORT', 3000)),
66
64
  HOST: get('HOST', 'localhost'),
67
65
  APP_NAME: get('APP_NAME', 'ZinTrust'),
68
66
  APP_KEY: get('APP_KEY', ''),
@@ -71,7 +69,8 @@ export const Env = Object.freeze({
71
69
  DB_CONNECTION: get('DB_CONNECTION', 'sqlite'),
72
70
  DB_HOST: get('DB_HOST', 'localhost'),
73
71
  DB_PORT: getInt('DB_PORT', 5432),
74
- DB_DATABASE: get('DB_DATABASE', 'zintrust'),
72
+ // Accept DB_PATH as an alias for sqlite file path (many env templates use it).
73
+ DB_DATABASE: get('DB_DATABASE', get('DB_PATH', 'zintrust')),
75
74
  DB_USERNAME: get('DB_USERNAME', 'postgres'),
76
75
  DB_PASSWORD: get('DB_PASSWORD', ''),
77
76
  DB_READ_HOSTS: get('DB_READ_HOSTS', ''),
@@ -1,4 +1,4 @@
1
- import { Env } from '@config/env';
1
+ import { Env } from '@zintrust/core';
2
2
  import { Logger } from '@config/logger';
3
3
 
4
4
  /**
@@ -16,7 +16,7 @@ export { appConfig, type AppConfig } from '@config/app';
16
16
  export { cacheConfig, type CacheConfig } from '@config/cache';
17
17
  export { databaseConfig, type DatabaseConfig } from '@config/database';
18
18
  export { microservicesConfig, type MicroservicesConfig } from '@config/microservices';
19
- export { middlewareConfig, type MiddlewareConfig } from '@config/middleware';
19
+ export { middlewareConfig } from '@config/middleware';
20
20
  export { queueConfig, type QueueConfig } from '@config/queue';
21
21
  export { securityConfig } from '@config/security';
22
22
  export { storageConfig, type StorageConfig } from '@config/storage';
@@ -100,7 +100,9 @@ const getFileWriter = (): void => {
100
100
 
101
101
  const shouldLogToFile = (): boolean => {
102
102
  // Prefer dynamic lookup so late-bound env (tests, some runtimes) is respected.
103
- if (!Env.getBool('LOG_TO_FILE', false)) return false;
103
+ const channel = Env.get('LOG_CHANNEL', '').trim().toLowerCase();
104
+ const channelWantsFile = channel === 'file' || channel === 'all';
105
+ if (!Env.getBool('LOG_TO_FILE', false) && !channelWantsFile) return false;
104
106
  if (typeof process === 'undefined') return false;
105
107
  return true;
106
108
  };
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import { delay } from '@zintrust/core';
13
- import { Env } from '@config/env';
13
+ import { Env } from '@zintrust/core';
14
14
  import { ErrorFactory } from '@zintrust/core';
15
15
  import { HttpClient } from '@zintrust/core';
16
16
 
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import { Cloudflare } from '@config/cloudflare';
12
- import { Env } from '@config/env';
12
+ import { Env } from '@zintrust/core';
13
13
 
14
14
  export type KvLogEvent = {
15
15
  timestamp: string;
@@ -9,7 +9,7 @@
9
9
  * - SLACK_LOG_BATCH_WINDOW_MS (default: 5000)
10
10
  */
11
11
 
12
- import { Env } from '@config/env';
12
+ import { Env } from '@zintrust/core';
13
13
  import { ErrorFactory } from '@zintrust/core';
14
14
  import { HttpClient } from '@zintrust/core';
15
15
 
@@ -5,63 +5,7 @@
5
5
  */
6
6
 
7
7
  import { Env } from '@config/env';
8
-
9
- export type MailDriverName = 'disabled' | 'sendgrid' | 'smtp' | 'ses' | 'mailgun';
10
-
11
- export type DisabledMailDriverConfig = {
12
- driver: 'disabled';
13
- };
14
-
15
- export type SendGridMailDriverConfig = {
16
- driver: 'sendgrid';
17
- apiKey: string;
18
- };
19
-
20
- export type MailgunMailDriverConfig = {
21
- driver: 'mailgun';
22
- apiKey: string;
23
- domain: string;
24
- baseUrl: string;
25
- };
26
-
27
- // Placeholders for future drivers (kept config-first)
28
- export type SmtpMailDriverConfig = {
29
- driver: 'smtp';
30
- host: string;
31
- port: number;
32
- username: string;
33
- password: string;
34
- secure: boolean | 'starttls';
35
- };
36
-
37
- export type SesMailDriverConfig = {
38
- driver: 'ses';
39
- region: string;
40
- };
41
-
42
- export type MailDriverConfig =
43
- | DisabledMailDriverConfig
44
- | SendGridMailDriverConfig
45
- | MailgunMailDriverConfig
46
- | SmtpMailDriverConfig
47
- | SesMailDriverConfig;
48
-
49
- type MailDrivers = {
50
- disabled: DisabledMailDriverConfig;
51
- sendgrid: SendGridMailDriverConfig;
52
- mailgun: MailgunMailDriverConfig;
53
- smtp: SmtpMailDriverConfig;
54
- ses: SesMailDriverConfig;
55
- };
56
-
57
- type MailConfigInput = {
58
- default: MailDriverName;
59
- from: {
60
- address: string;
61
- name: string;
62
- };
63
- drivers: MailDrivers;
64
- };
8
+ import type { MailConfigInput, MailDriverConfig, MailDriverName, MailDrivers } from '@config/type';
65
9
 
66
10
  const getMailDriver = (config: MailConfigInput): MailDriverConfig => {
67
11
  const defaultDriver = config.default;
@@ -4,7 +4,7 @@
4
4
  * Sealed namespace for immutability
5
5
  */
6
6
 
7
- import { Env } from '@config/env';
7
+ import { Env } from '@zintrust/core';
8
8
 
9
9
  const microservicesConfigObj = {
10
10
  /**
@@ -1,3 +1,4 @@
1
+ import { MiddlewareConfigType } from '@config/type';
1
2
  import { CsrfMiddleware } from '@middleware/CsrfMiddleware';
2
3
  import { ErrorHandlerMiddleware } from '@middleware/ErrorHandlerMiddleware';
3
4
  import { LoggingMiddleware } from '@middleware/LoggingMiddleware';
@@ -5,11 +6,6 @@ import type { Middleware } from '@middleware/MiddlewareStack';
5
6
  import { RateLimiter } from '@middleware/RateLimiter';
6
7
  import { SecurityMiddleware } from '@middleware/SecurityMiddleware';
7
8
 
8
- export type MiddlewareConfig = {
9
- global: Middleware[];
10
- route: Record<string, Middleware>;
11
- };
12
-
13
9
  const shared = Object.freeze({
14
10
  log: LoggingMiddleware.create(),
15
11
  error: ErrorHandlerMiddleware.create(),
@@ -18,7 +14,7 @@ const shared = Object.freeze({
18
14
  csrf: CsrfMiddleware.create(),
19
15
  } satisfies Record<string, Middleware>);
20
16
 
21
- const middlewareConfigObj: MiddlewareConfig = {
17
+ const middlewareConfigObj: MiddlewareConfigType = {
22
18
  global: [shared.log, shared.error, shared.security, shared.rateLimit, shared.csrf],
23
19
  route: shared,
24
20
  };
@@ -6,42 +6,7 @@
6
6
  */
7
7
 
8
8
  import { Env } from '@config/env';
9
-
10
- export type KnownNotificationDriverName = 'console' | 'termii' | 'twilio' | 'slack';
11
-
12
- export type ConsoleNotificationDriverConfig = { driver: 'console' };
13
-
14
- export type TermiiNotificationDriverConfig = {
15
- driver: 'termii';
16
- apiKey: string;
17
- sender: string;
18
- endpoint: string;
19
- };
20
-
21
- export type TwilioNotificationDriverConfig = {
22
- driver: 'twilio';
23
- accountSid: string;
24
- authToken: string;
25
- fromNumber: string;
26
- };
27
-
28
- export type SlackNotificationDriverConfig = {
29
- driver: 'slack';
30
- webhookUrl: string;
31
- };
32
-
33
- export type KnownNotificationDriverConfig =
34
- | ConsoleNotificationDriverConfig
35
- | TermiiNotificationDriverConfig
36
- | TwilioNotificationDriverConfig
37
- | SlackNotificationDriverConfig;
38
-
39
- type NotificationProviders = {
40
- console: ConsoleNotificationDriverConfig;
41
- termii: TermiiNotificationDriverConfig;
42
- twilio: TwilioNotificationDriverConfig;
43
- slack: SlackNotificationDriverConfig;
44
- };
9
+ import type { NotificationProviders } from '@config/type';
45
10
 
46
11
  const notificationConfigObj = {
47
12
  /**
@@ -6,55 +6,7 @@
6
6
 
7
7
  import { Env } from '@config/env';
8
8
 
9
- type QueueDriverName = 'sync' | 'database' | 'redis' | 'rabbitmq' | 'sqs';
10
-
11
- type SyncQueueDriverConfig = {
12
- driver: 'sync';
13
- };
14
-
15
- type DatabaseQueueDriverConfig = {
16
- driver: 'database';
17
- table: string;
18
- connection: string;
19
- };
20
-
21
- type RedisQueueDriverConfig = {
22
- driver: 'redis';
23
- host: string;
24
- port: number;
25
- password?: string;
26
- database: number;
27
- };
28
-
29
- type RabbitMqQueueDriverConfig = {
30
- driver: 'rabbitmq';
31
- host: string;
32
- port: number;
33
- username: string;
34
- password: string;
35
- vhost: string;
36
- };
37
-
38
- type SqsQueueDriverConfig = {
39
- driver: 'sqs';
40
- key?: string;
41
- secret?: string;
42
- region: string;
43
- queueUrl?: string;
44
- };
45
-
46
- type QueueDriversConfig = {
47
- sync: SyncQueueDriverConfig;
48
- database: DatabaseQueueDriverConfig;
49
- redis: RedisQueueDriverConfig;
50
- rabbitmq: RabbitMqQueueDriverConfig;
51
- sqs: SqsQueueDriverConfig;
52
- };
53
-
54
- type QueueConfigWithDrivers = {
55
- default: QueueDriverName;
56
- drivers: QueueDriversConfig;
57
- };
9
+ import type { QueueConfigWithDrivers, QueueDriverName, QueueDriversConfig } from '@config/type';
58
10
 
59
11
  const getQueueDriver = (config: QueueConfigWithDrivers): QueueDriversConfig[QueueDriverName] => {
60
12
  const driverName = config.default;
@@ -2,6 +2,18 @@
2
2
  * Security Configuration
3
3
  * JWT, CSRF, encryption and other security settings
4
4
  * Sealed namespace for immutability
5
+ *
6
+ * APP_KEY: Primary encryption key for storage signing and app-level encryption.
7
+ * Set automatically during project scaffolding.
8
+ *
9
+ * Security keys can be configured per domain:
10
+ * - APP_KEY: Default encryption key for all operations (auto-generated)
11
+ * - API_KEY_SECRET: Optional API key authentication (if API_KEY_ENABLED=true)
12
+ * - ENCRYPTION_KEY: Optional separate encryption key (overrides APP_KEY if set)
13
+ * - JWT_SECRET: JWT token signing key
14
+ *
15
+ * Developers can use a single APP_KEY or configure separate keys for different
16
+ * security domains (e.g., different keys for different microservices).
5
17
  */
6
18
 
7
19
  import { appConfig } from '@config/app';
@@ -72,7 +84,7 @@ const securityConfigObj = {
72
84
  * API Key Authentication
73
85
  */
74
86
  apiKey: {
75
- enabled: Env.getBool('API_KEY_ENABLED', true),
87
+ enabled: Env.getBool('API_KEY_ENABLED', false),
76
88
  headerName: Env.get('API_KEY_HEADER', 'x-api-key'),
77
89
  secret: Env.get('API_KEY_SECRET'),
78
90
  },
@@ -9,6 +9,7 @@ import { Env } from '@config/env';
9
9
  export type StartupConfig = {
10
10
  healthChecksEnabled: boolean;
11
11
  validateSecrets: boolean;
12
+ requireEnv: boolean;
12
13
  checkDatabase: boolean;
13
14
  checkCache: boolean;
14
15
  timeoutMs: number;
@@ -18,6 +19,7 @@ export type StartupConfig = {
18
19
  export const startupConfig = Object.freeze({
19
20
  healthChecksEnabled: Env.getBool('STARTUP_HEALTH_CHECKS', true),
20
21
  validateSecrets: Env.getBool('STARTUP_VALIDATE_SECRETS', true),
22
+ requireEnv: Env.getBool('STARTUP_REQUIRE_ENV', false),
21
23
  checkDatabase: Env.getBool('STARTUP_CHECK_DB', false),
22
24
  checkCache: Env.getBool('STARTUP_CHECK_CACHE', false),
23
25
  timeoutMs: Env.getInt('STARTUP_HEALTH_TIMEOUT_MS', 2500),
@@ -5,60 +5,12 @@
5
5
  */
6
6
 
7
7
  import { Env } from '@config/env';
8
-
9
- type EnvGetValue = ReturnType<typeof Env.get>;
10
- type EnvGetBoolValue = ReturnType<typeof Env.getBool>;
11
-
12
- type LocalStorageDriverConfig = {
13
- driver: 'local';
14
- root: EnvGetValue;
15
- url: EnvGetValue;
16
- visibility: EnvGetValue;
17
- };
18
-
19
- type S3StorageDriverConfig = {
20
- driver: 's3';
21
- accessKeyId: EnvGetValue;
22
- secretAccessKey: EnvGetValue;
23
- region: typeof Env.AWS_REGION;
24
- bucket: EnvGetValue;
25
- url: EnvGetValue;
26
- endpoint: EnvGetValue;
27
- usePathStyleUrl: EnvGetBoolValue;
28
- };
29
-
30
- type R2StorageDriverConfig = {
31
- driver: 'r2';
32
- accessKeyId: EnvGetValue;
33
- secretAccessKey: EnvGetValue;
34
- region: EnvGetValue;
35
- bucket: EnvGetValue;
36
- endpoint: EnvGetValue;
37
- url: EnvGetValue;
38
- };
39
-
40
- type GcsStorageDriverConfig = {
41
- driver: 'gcs';
42
- projectId: EnvGetValue;
43
- keyFile: EnvGetValue;
44
- bucket: EnvGetValue;
45
- url: EnvGetValue;
46
- };
47
-
48
- type StorageDrivers = {
49
- local: LocalStorageDriverConfig;
50
- s3: S3StorageDriverConfig;
51
- r2: R2StorageDriverConfig;
52
- gcs: GcsStorageDriverConfig;
53
- };
54
-
55
- type StorageDriverName = keyof StorageDrivers;
56
- type StorageDriverConfig = StorageDrivers[StorageDriverName];
57
-
58
- type StorageConfigRuntime = {
59
- readonly default: string;
60
- readonly drivers: StorageDrivers;
61
- };
8
+ import type {
9
+ StorageConfigRuntime,
10
+ StorageDriverConfig,
11
+ StorageDriverName,
12
+ StorageDrivers,
13
+ } from '@config/type';
62
14
 
63
15
  const isStorageDriverName = (
64
16
  value: string,