11import { z } from 'zod' ;
2- import type { SagasConfig , TriggersConfig } from '../../../types.ts' ;
3-
42import { AppConfigSchema } from './app-schema.ts' ;
53
64import { AspireConfigSchema } from './aspire-schema.ts' ;
@@ -21,15 +19,104 @@ import { SdkConfigSchema } from './sdk-schema.ts';
2119
2220import { ServiceConfigSchema } from './service-schema.ts' ;
2321
22+ const SagaRetryConfigSchema = z . object ( {
23+ maxAttempts : z . number ( ) ,
24+ initialDelay : z . number ( ) ,
25+ maxDelay : z . number ( ) ,
26+ backoffMultiplier : z . number ( ) ,
27+ jitter : z . boolean ( ) ,
28+ } ) ;
29+
30+ const SagaTimeoutConfigSchema = z . object ( {
31+ completionTimeout : z . number ( ) . optional ( ) ,
32+ minTimeout : z . number ( ) ,
33+ maxTimeout : z . number ( ) ,
34+ } ) ;
35+
36+ const SagaDefinitionSchema = z . object ( {
37+ id : z . string ( ) ,
38+ topic : z . string ( ) . optional ( ) ,
39+ name : z . string ( ) ,
40+ description : z . string ( ) . optional ( ) ,
41+ entrypoint : z . string ( ) ,
42+ enabled : z . boolean ( ) . default ( true ) ,
43+ retry : SagaRetryConfigSchema . optional ( ) ,
44+ timeout : SagaTimeoutConfigSchema . optional ( ) ,
45+ tags : z . array ( z . string ( ) ) . optional ( ) ,
46+ metadata : z . record ( z . string ( ) , z . unknown ( ) ) . optional ( ) ,
47+ } ) ;
48+
49+ const SagaScalingConfigSchema = z . object ( {
50+ concurrency : z . number ( ) ,
51+ mode : z . enum ( [ 'combined' , 'distributed' ] ) ,
52+ } ) ;
53+
54+ const SagaRetentionConfigSchema = z . object ( {
55+ activeDays : z . number ( ) ,
56+ completedDays : z . number ( ) ,
57+ archiveToDb : z . boolean ( ) ,
58+ } ) ;
59+
60+ const SagaGroupSchema = z . object ( {
61+ topic : z . string ( ) ,
62+ scaling : SagaScalingConfigSchema . optional ( ) ,
63+ retention : SagaRetentionConfigSchema . optional ( ) ,
64+ sagas : z . array ( SagaDefinitionSchema ) . default ( [ ] ) ,
65+ } ) ;
66+
2467const SagasConfigSectionSchema = z
25- . unknown ( )
26- . optional ( )
27- . transform ( ( value ) => value as SagasConfig | undefined ) ;
68+ . object ( {
69+ sagasDir : z . string ( ) . default ( 'sagas' ) ,
70+ transportProvider : z . enum ( [ 'auto' , 'redis' , 'rabbitmq' , 'inmemory' ] ) . default ( 'auto' ) ,
71+ storeProvider : z . enum ( [ 'auto' , 'redis' , 'postgres' , 'inmemory' ] ) . default ( 'auto' ) ,
72+ concurrency : z . number ( ) . default ( 1 ) ,
73+ retry : SagaRetryConfigSchema . optional ( ) ,
74+ timeout : SagaTimeoutConfigSchema . optional ( ) ,
75+ sagas : z . array ( SagaDefinitionSchema ) . default ( [ ] ) ,
76+ groups : z . array ( SagaGroupSchema ) . default ( [ ] ) ,
77+ enabled : z . boolean ( ) . default ( true ) ,
78+ } )
79+ . optional ( ) ;
80+
81+ const TriggerDefinitionSchema = z . object ( {
82+ id : z . string ( ) ,
83+ name : z . string ( ) ,
84+ type : z . enum ( [ 'file' , 'webhook' , 'cron' , 'manual' ] ) . default ( 'webhook' ) ,
85+ enabled : z . boolean ( ) . default ( true ) ,
86+ entrypoint : z . string ( ) . optional ( ) ,
87+ tags : z . array ( z . string ( ) ) . default ( [ ] ) ,
88+ } ) ;
89+
90+ const TriggerScalingConfigSchema = z . object ( {
91+ concurrency : z . number ( ) ,
92+ } ) ;
93+
94+ const TriggerRetentionConfigSchema = z . object ( {
95+ kvDays : z . number ( ) ,
96+ dbDays : z . number ( ) ,
97+ } ) ;
98+
99+ const TriggerGroupSchema = z . object ( {
100+ topic : z . string ( ) ,
101+ scaling : TriggerScalingConfigSchema . default ( { concurrency : 10 } ) ,
102+ retention : TriggerRetentionConfigSchema . default ( { kvDays : 7 , dbDays : 90 } ) ,
103+ triggers : z . array ( TriggerDefinitionSchema ) . default ( [ ] ) ,
104+ } ) ;
105+
106+ const WebhookConfigSchema = z . object ( {
107+ enabled : z . boolean ( ) . default ( false ) ,
108+ basePath : z . string ( ) . default ( '/api/v1/webhooks' ) ,
109+ rateLimitPerMinute : z . number ( ) . default ( 60 ) ,
110+ } ) ;
28111
29112const TriggersConfigSectionSchema = z
30- . unknown ( )
31- . optional ( )
32- . transform ( ( value ) => value as TriggersConfig | undefined ) ;
113+ . object ( {
114+ triggersDir : z . string ( ) . default ( 'triggers' ) ,
115+ groups : z . array ( TriggerGroupSchema ) . default ( [ ] ) ,
116+ webhooks : WebhookConfigSchema . optional ( ) ,
117+ enabled : z . boolean ( ) . default ( true ) ,
118+ } )
119+ . optional ( ) ;
33120
34121/**
35122 * Main NetScript configuration schema.
0 commit comments