Skip to content

Commit 245cfc4

Browse files
committed
feat: add filter and transform properties to event schemas and update Zod validation
1 parent 4ffb4e1 commit 245cfc4

7 files changed

Lines changed: 39 additions & 14 deletions

File tree

packages/spec/json-schema/kernel/EventBusConfig.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
"exclusiveMinimum": 0,
1818
"description": "Days to retain persisted events"
1919
},
20+
"filter": {
21+
"description": "Optional filter function to select which events to persist"
22+
},
2023
"storage": {
2124
"type": "string",
2225
"enum": [
@@ -272,6 +275,9 @@
272275
"default": 30000,
273276
"description": "Request timeout in milliseconds"
274277
},
278+
"transform": {
279+
"description": "Transform event before sending"
280+
},
275281
"enabled": {
276282
"type": "boolean",
277283
"default": true,
@@ -405,6 +411,9 @@
405411
"eventPattern": {
406412
"type": "string",
407413
"description": "Event pattern for channel"
414+
},
415+
"filter": {
416+
"description": "Additional filter function"
408417
}
409418
},
410419
"required": [
@@ -496,6 +505,9 @@
496505
"type": "string",
497506
"description": "Name of event to handle (supports wildcards like user.*)"
498507
},
508+
"handler": {
509+
"description": "Handler function"
510+
},
499511
"priority": {
500512
"type": "integer",
501513
"default": 0,
@@ -535,6 +547,9 @@
535547
"type": "integer",
536548
"exclusiveMinimum": 0,
537549
"description": "Handler timeout in milliseconds"
550+
},
551+
"filter": {
552+
"description": "Optional filter to determine if handler should execute"
538553
}
539554
},
540555
"required": [

packages/spec/json-schema/kernel/EventHandler.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"type": "string",
1313
"description": "Name of event to handle (supports wildcards like user.*)"
1414
},
15+
"handler": {
16+
"description": "Handler function"
17+
},
1518
"priority": {
1619
"type": "integer",
1720
"default": 0,
@@ -51,6 +54,9 @@
5154
"type": "integer",
5255
"exclusiveMinimum": 0,
5356
"description": "Handler timeout in milliseconds"
57+
},
58+
"filter": {
59+
"description": "Optional filter to determine if handler should execute"
5460
}
5561
},
5662
"required": [

packages/spec/json-schema/kernel/EventPersistence.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
"exclusiveMinimum": 0,
1515
"description": "Days to retain persisted events"
1616
},
17+
"filter": {
18+
"description": "Optional filter function to select which events to persist"
19+
},
1720
"storage": {
1821
"type": "string",
1922
"enum": [

packages/spec/json-schema/kernel/EventRoute.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
"type": "string"
1515
},
1616
"description": "Target event names to route to"
17+
},
18+
"transform": {
19+
"description": "Optional function to transform payload"
1720
}
1821
},
1922
"required": [

packages/spec/json-schema/kernel/EventWebhookConfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@
102102
"default": 30000,
103103
"description": "Request timeout in milliseconds"
104104
},
105+
"transform": {
106+
"description": "Transform event before sending"
107+
},
105108
"enabled": {
106109
"type": "boolean",
107110
"default": true,

packages/spec/json-schema/kernel/RealTimeNotificationConfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@
4646
"eventPattern": {
4747
"type": "string",
4848
"description": "Event pattern for channel"
49+
},
50+
"filter": {
51+
"description": "Additional filter function"
4952
}
5053
},
5154
"required": [

packages/spec/src/kernel/events.zod.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,7 @@ export const EventHandlerSchema = z.object({
136136
/**
137137
* Handler function
138138
*/
139-
handler: z.function()
140-
.args(EventSchema)
141-
.returns(z.promise(z.void()))
139+
handler: z.any()
142140
.describe('Handler function'),
143141

144142
/**
@@ -168,9 +166,7 @@ export const EventHandlerSchema = z.object({
168166
/**
169167
* Filter function
170168
*/
171-
filter: z.function()
172-
.args(EventSchema)
173-
.returns(z.boolean())
169+
filter: z.any()
174170
.optional()
175171
.describe('Optional filter to determine if handler should execute'),
176172
});
@@ -184,7 +180,7 @@ export type EventHandler = z.infer<typeof EventHandlerSchema>;
184180
export const EventRouteSchema = z.object({
185181
from: z.string().describe('Source event pattern (supports wildcards, e.g., user.* or *.created)'),
186182
to: z.array(z.string()).describe('Target event names to route to'),
187-
transform: z.function().optional().describe('Optional function to transform payload'),
183+
transform: z.any().optional().describe('Optional function to transform payload'),
188184
});
189185

190186
export type EventRoute = z.infer<typeof EventRouteSchema>;
@@ -196,7 +192,7 @@ export type EventRoute = z.infer<typeof EventRouteSchema>;
196192
export const EventPersistenceSchema = z.object({
197193
enabled: z.boolean().default(false).describe('Enable event persistence'),
198194
retention: z.number().int().positive().describe('Days to retain persisted events'),
199-
filter: z.function().optional().describe('Optional filter function to select which events to persist'),
195+
filter: z.any().optional().describe('Optional filter function to select which events to persist'),
200196
storage: z.enum(['database', 'file', 's3', 'custom']).default('database')
201197
.describe('Storage backend for persisted events'),
202198
});
@@ -529,9 +525,7 @@ export const EventWebhookConfigSchema = z.object({
529525
/**
530526
* Event transformation
531527
*/
532-
transform: z.function()
533-
.args(EventSchema)
534-
.returns(z.any())
528+
transform: z.any()
535529
.optional()
536530
.describe('Transform event before sending'),
537531

@@ -658,9 +652,7 @@ export const RealTimeNotificationConfigSchema = z.object({
658652
channels: z.array(z.object({
659653
name: z.string().describe('Channel name'),
660654
eventPattern: z.string().describe('Event pattern for channel'),
661-
filter: z.function()
662-
.args(EventSchema)
663-
.returns(z.boolean())
655+
filter: z.any()
664656
.optional()
665657
.describe('Additional filter function'),
666658
})).optional().describe('Named channels for event broadcasting'),

0 commit comments

Comments
 (0)