@beignet/core 0.0.1 → 0.0.3

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 (287) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +202 -8
  3. package/dist/application/index.d.ts +93 -9
  4. package/dist/application/index.d.ts.map +1 -1
  5. package/dist/application/index.js +11 -11
  6. package/dist/application/index.js.map +1 -1
  7. package/dist/client/client.d.ts +73 -12
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +37 -12
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/index.d.ts +12 -0
  12. package/dist/client/index.d.ts.map +1 -1
  13. package/dist/client/index.js +6 -0
  14. package/dist/client/index.js.map +1 -1
  15. package/dist/client/types.d.ts +69 -8
  16. package/dist/client/types.d.ts.map +1 -1
  17. package/dist/config/index.d.ts +84 -0
  18. package/dist/config/index.d.ts.map +1 -1
  19. package/dist/config/index.js +36 -0
  20. package/dist/config/index.js.map +1 -1
  21. package/dist/contracts/contract-builder.d.ts +49 -22
  22. package/dist/contracts/contract-builder.d.ts.map +1 -1
  23. package/dist/contracts/contract-builder.js +48 -21
  24. package/dist/contracts/contract-builder.js.map +1 -1
  25. package/dist/contracts/contract-group.d.ts +35 -19
  26. package/dist/contracts/contract-group.d.ts.map +1 -1
  27. package/dist/contracts/contract-group.js +35 -19
  28. package/dist/contracts/contract-group.js.map +1 -1
  29. package/dist/contracts/contract-like.d.ts +4 -4
  30. package/dist/contracts/contract-like.d.ts.map +1 -1
  31. package/dist/contracts/contract-like.js +2 -1
  32. package/dist/contracts/contract-like.js.map +1 -1
  33. package/dist/contracts/index.d.ts +28 -0
  34. package/dist/contracts/index.d.ts.map +1 -1
  35. package/dist/contracts/index.js +12 -0
  36. package/dist/contracts/index.js.map +1 -1
  37. package/dist/contracts/openapi-meta.d.ts +8 -8
  38. package/dist/contracts/openapi-meta.d.ts.map +1 -1
  39. package/dist/contracts/path-template.d.ts +27 -0
  40. package/dist/contracts/path-template.d.ts.map +1 -1
  41. package/dist/contracts/path-template.js +6 -0
  42. package/dist/contracts/path-template.js.map +1 -1
  43. package/dist/contracts/types.d.ts +104 -10
  44. package/dist/contracts/types.d.ts.map +1 -1
  45. package/dist/contracts/types.js +15 -0
  46. package/dist/contracts/types.js.map +1 -1
  47. package/dist/contracts/utils.d.ts +6 -0
  48. package/dist/contracts/utils.d.ts.map +1 -1
  49. package/dist/contracts/utils.js +6 -0
  50. package/dist/contracts/utils.js.map +1 -1
  51. package/dist/domain/entity.d.ts +22 -11
  52. package/dist/domain/entity.d.ts.map +1 -1
  53. package/dist/domain/entity.js +5 -1
  54. package/dist/domain/entity.js.map +1 -1
  55. package/dist/domain/events.d.ts +5 -2
  56. package/dist/domain/events.d.ts.map +1 -1
  57. package/dist/domain/events.js +4 -1
  58. package/dist/domain/events.js.map +1 -1
  59. package/dist/domain/value-object.d.ts +19 -9
  60. package/dist/domain/value-object.d.ts.map +1 -1
  61. package/dist/domain/value-object.js +5 -1
  62. package/dist/domain/value-object.js.map +1 -1
  63. package/dist/errors/catalog.d.ts +40 -16
  64. package/dist/errors/catalog.d.ts.map +1 -1
  65. package/dist/errors/catalog.js +18 -7
  66. package/dist/errors/catalog.js.map +1 -1
  67. package/dist/errors/response.d.ts +16 -4
  68. package/dist/errors/response.d.ts.map +1 -1
  69. package/dist/errors/response.js +3 -3
  70. package/dist/errors/response.js.map +1 -1
  71. package/dist/errors/validation.d.ts +10 -1
  72. package/dist/errors/validation.d.ts.map +1 -1
  73. package/dist/errors/validation.js +3 -0
  74. package/dist/errors/validation.js.map +1 -1
  75. package/dist/events/index.d.ts +133 -0
  76. package/dist/events/index.d.ts.map +1 -1
  77. package/dist/events/index.js +30 -0
  78. package/dist/events/index.js.map +1 -1
  79. package/dist/idempotency/index.d.ts +355 -0
  80. package/dist/idempotency/index.d.ts.map +1 -0
  81. package/dist/idempotency/index.js +360 -0
  82. package/dist/idempotency/index.js.map +1 -0
  83. package/dist/jobs/index.d.ts +248 -4
  84. package/dist/jobs/index.d.ts.map +1 -1
  85. package/dist/jobs/index.js +183 -1
  86. package/dist/jobs/index.js.map +1 -1
  87. package/dist/mail/index.d.ts +149 -0
  88. package/dist/mail/index.d.ts.map +1 -1
  89. package/dist/mail/index.js +30 -0
  90. package/dist/mail/index.js.map +1 -1
  91. package/dist/notifications/index.d.ts +369 -0
  92. package/dist/notifications/index.d.ts.map +1 -0
  93. package/dist/notifications/index.js +310 -0
  94. package/dist/notifications/index.js.map +1 -0
  95. package/dist/openapi/index.d.ts +132 -16
  96. package/dist/openapi/index.d.ts.map +1 -1
  97. package/dist/openapi/index.js +1 -1
  98. package/dist/openapi/index.js.map +1 -1
  99. package/dist/outbox/index.d.ts +474 -0
  100. package/dist/outbox/index.d.ts.map +1 -0
  101. package/dist/outbox/index.js +538 -0
  102. package/dist/outbox/index.js.map +1 -0
  103. package/dist/pagination/index.d.ts +166 -0
  104. package/dist/pagination/index.d.ts.map +1 -0
  105. package/dist/pagination/index.js +96 -0
  106. package/dist/pagination/index.js.map +1 -0
  107. package/dist/ports/audit.d.ts +271 -0
  108. package/dist/ports/audit.d.ts.map +1 -1
  109. package/dist/ports/audit.js +128 -0
  110. package/dist/ports/audit.js.map +1 -1
  111. package/dist/ports/auth.d.ts +70 -0
  112. package/dist/ports/auth.d.ts.map +1 -1
  113. package/dist/ports/auth.js +30 -0
  114. package/dist/ports/auth.js.map +1 -1
  115. package/dist/ports/cache.d.ts +41 -0
  116. package/dist/ports/cache.d.ts.map +1 -1
  117. package/dist/ports/cache.js +10 -0
  118. package/dist/ports/cache.js.map +1 -1
  119. package/dist/ports/clock.d.ts +38 -0
  120. package/dist/ports/clock.d.ts.map +1 -1
  121. package/dist/ports/clock.js +20 -0
  122. package/dist/ports/clock.js.map +1 -1
  123. package/dist/ports/id-generator.d.ts +37 -0
  124. package/dist/ports/id-generator.d.ts.map +1 -1
  125. package/dist/ports/id-generator.js +22 -0
  126. package/dist/ports/id-generator.js.map +1 -1
  127. package/dist/ports/index.d.ts +83 -0
  128. package/dist/ports/index.d.ts.map +1 -1
  129. package/dist/ports/index.js +41 -5
  130. package/dist/ports/index.js.map +1 -1
  131. package/dist/ports/logger.d.ts +56 -0
  132. package/dist/ports/logger.d.ts.map +1 -1
  133. package/dist/ports/logger.js +17 -0
  134. package/dist/ports/logger.js.map +1 -1
  135. package/dist/ports/policy.d.ts +132 -0
  136. package/dist/ports/policy.d.ts.map +1 -1
  137. package/dist/ports/policy.js +45 -0
  138. package/dist/ports/policy.js.map +1 -1
  139. package/dist/ports/rate-limit.d.ts +25 -0
  140. package/dist/ports/rate-limit.d.ts.map +1 -1
  141. package/dist/ports/rate-limit.js +10 -0
  142. package/dist/ports/rate-limit.js.map +1 -1
  143. package/dist/ports/redaction.d.ts +101 -0
  144. package/dist/ports/redaction.d.ts.map +1 -1
  145. package/dist/ports/redaction.js +59 -0
  146. package/dist/ports/redaction.js.map +1 -1
  147. package/dist/ports/storage.d.ts +100 -0
  148. package/dist/ports/storage.d.ts.map +1 -1
  149. package/dist/ports/storage.js +10 -0
  150. package/dist/ports/storage.js.map +1 -1
  151. package/dist/ports/testing.d.ts +47 -0
  152. package/dist/ports/testing.d.ts.map +1 -1
  153. package/dist/ports/testing.js +23 -0
  154. package/dist/ports/testing.js.map +1 -1
  155. package/dist/ports/unit-of-work.d.ts +60 -3
  156. package/dist/ports/unit-of-work.d.ts.map +1 -1
  157. package/dist/ports/unit-of-work.js +11 -2
  158. package/dist/ports/unit-of-work.js.map +1 -1
  159. package/dist/providers/instrumentation.d.ts +205 -1
  160. package/dist/providers/instrumentation.d.ts.map +1 -1
  161. package/dist/providers/instrumentation.js +14 -0
  162. package/dist/providers/instrumentation.js.map +1 -1
  163. package/dist/providers/provider.d.ts +14 -1
  164. package/dist/providers/provider.d.ts.map +1 -1
  165. package/dist/providers/provider.js.map +1 -1
  166. package/dist/schedules/index.d.ts +246 -0
  167. package/dist/schedules/index.d.ts.map +1 -1
  168. package/dist/schedules/index.js +27 -0
  169. package/dist/schedules/index.js.map +1 -1
  170. package/dist/server/health.d.ts +14 -5
  171. package/dist/server/health.d.ts.map +1 -1
  172. package/dist/server/health.js +5 -2
  173. package/dist/server/health.js.map +1 -1
  174. package/dist/server/hooks/auth.d.ts +68 -26
  175. package/dist/server/hooks/auth.d.ts.map +1 -1
  176. package/dist/server/hooks/auth.js +44 -55
  177. package/dist/server/hooks/auth.js.map +1 -1
  178. package/dist/server/hooks/cors.d.ts +27 -0
  179. package/dist/server/hooks/cors.d.ts.map +1 -1
  180. package/dist/server/hooks/cors.js +12 -0
  181. package/dist/server/hooks/cors.js.map +1 -1
  182. package/dist/server/hooks/errors.d.ts +15 -6
  183. package/dist/server/hooks/errors.d.ts.map +1 -1
  184. package/dist/server/hooks/errors.js.map +1 -1
  185. package/dist/server/hooks/index.d.ts +4 -1
  186. package/dist/server/hooks/index.d.ts.map +1 -1
  187. package/dist/server/hooks/index.js +3 -0
  188. package/dist/server/hooks/index.js.map +1 -1
  189. package/dist/server/hooks/logging.d.ts +36 -0
  190. package/dist/server/hooks/logging.d.ts.map +1 -1
  191. package/dist/server/hooks/logging.js +6 -0
  192. package/dist/server/hooks/logging.js.map +1 -1
  193. package/dist/server/hooks/rate-limit.d.ts +33 -0
  194. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  195. package/dist/server/hooks/rate-limit.js +11 -0
  196. package/dist/server/hooks/rate-limit.js.map +1 -1
  197. package/dist/server/http.d.ts +222 -0
  198. package/dist/server/http.d.ts.map +1 -1
  199. package/dist/server/http.js +20 -1
  200. package/dist/server/http.js.map +1 -1
  201. package/dist/server/index.d.ts +19 -1
  202. package/dist/server/index.d.ts.map +1 -1
  203. package/dist/server/index.js +7 -1
  204. package/dist/server/index.js.map +1 -1
  205. package/dist/server/openapi.d.ts +5 -3
  206. package/dist/server/openapi.d.ts.map +1 -1
  207. package/dist/server/openapi.js +4 -2
  208. package/dist/server/openapi.js.map +1 -1
  209. package/dist/server/providers/loadProviderConfig.d.ts +9 -0
  210. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  211. package/dist/server/providers/loadProviderConfig.js +9 -0
  212. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  213. package/dist/server/server.d.ts +159 -19
  214. package/dist/server/server.d.ts.map +1 -1
  215. package/dist/server/server.js +72 -31
  216. package/dist/server/server.js.map +1 -1
  217. package/dist/testing/index.d.ts +171 -0
  218. package/dist/testing/index.d.ts.map +1 -0
  219. package/dist/testing/index.js +127 -0
  220. package/dist/testing/index.js.map +1 -0
  221. package/dist/uploads/client.d.ts +278 -0
  222. package/dist/uploads/client.d.ts.map +1 -0
  223. package/dist/uploads/client.js +428 -0
  224. package/dist/uploads/client.js.map +1 -0
  225. package/dist/uploads/index.d.ts +361 -0
  226. package/dist/uploads/index.d.ts.map +1 -0
  227. package/dist/uploads/index.js +543 -0
  228. package/dist/uploads/index.js.map +1 -0
  229. package/package.json +31 -2
  230. package/src/application/index.ts +85 -22
  231. package/src/client/client.ts +73 -12
  232. package/src/client/index.ts +12 -0
  233. package/src/client/types.ts +70 -9
  234. package/src/config/index.ts +86 -0
  235. package/src/contracts/contract-builder.ts +49 -22
  236. package/src/contracts/contract-group.ts +35 -19
  237. package/src/contracts/contract-like.ts +4 -4
  238. package/src/contracts/index.ts +28 -1
  239. package/src/contracts/openapi-meta.ts +8 -8
  240. package/src/contracts/path-template.ts +27 -0
  241. package/src/contracts/types.ts +111 -10
  242. package/src/contracts/utils.ts +6 -0
  243. package/src/domain/entity.ts +22 -11
  244. package/src/domain/events.ts +5 -2
  245. package/src/domain/value-object.ts +19 -9
  246. package/src/errors/catalog.ts +40 -16
  247. package/src/errors/response.ts +16 -4
  248. package/src/errors/validation.ts +10 -1
  249. package/src/events/index.ts +134 -0
  250. package/src/idempotency/index.ts +767 -0
  251. package/src/jobs/index.ts +437 -5
  252. package/src/mail/index.ts +149 -0
  253. package/src/notifications/index.ts +771 -0
  254. package/src/openapi/index.ts +133 -16
  255. package/src/outbox/index.ts +1104 -0
  256. package/src/pagination/index.ts +278 -0
  257. package/src/ports/audit.ts +271 -0
  258. package/src/ports/auth.ts +70 -0
  259. package/src/ports/cache.ts +41 -0
  260. package/src/ports/clock.ts +38 -0
  261. package/src/ports/id-generator.ts +37 -0
  262. package/src/ports/index.ts +106 -11
  263. package/src/ports/logger.ts +56 -0
  264. package/src/ports/policy.ts +133 -0
  265. package/src/ports/rate-limit.ts +25 -0
  266. package/src/ports/redaction.ts +101 -0
  267. package/src/ports/storage.ts +100 -0
  268. package/src/ports/testing.ts +47 -0
  269. package/src/ports/unit-of-work.ts +60 -3
  270. package/src/providers/instrumentation.ts +211 -1
  271. package/src/providers/provider.ts +14 -1
  272. package/src/schedules/index.ts +247 -0
  273. package/src/server/health.ts +14 -5
  274. package/src/server/hooks/auth.ts +105 -120
  275. package/src/server/hooks/cors.ts +27 -0
  276. package/src/server/hooks/errors.ts +15 -6
  277. package/src/server/hooks/index.ts +4 -5
  278. package/src/server/hooks/logging.ts +36 -0
  279. package/src/server/hooks/rate-limit.ts +33 -0
  280. package/src/server/http.ts +249 -1
  281. package/src/server/index.ts +19 -1
  282. package/src/server/openapi.ts +5 -3
  283. package/src/server/providers/loadProviderConfig.ts +9 -0
  284. package/src/server/server.ts +296 -30
  285. package/src/testing/index.ts +348 -0
  286. package/src/uploads/client.ts +861 -0
  287. package/src/uploads/index.ts +1067 -0
@@ -1,83 +1,187 @@
1
1
  import type { StandardSchemaV1 } from "@standard-schema/spec";
2
2
 
3
+ /**
4
+ * Any Standard Schema compatible validator.
5
+ */
3
6
  export type StandardSchema = StandardSchemaV1<unknown, unknown>;
7
+
8
+ /**
9
+ * Value or promise of that value.
10
+ */
4
11
  export type MaybePromise<T> = T | Promise<T>;
5
12
 
13
+ /**
14
+ * Infer the parsed output type from a Standard Schema.
15
+ */
6
16
  export type InferSchemaOutput<T extends StandardSchemaV1> =
7
17
  StandardSchemaV1.InferOutput<T>;
8
18
 
19
+ /**
20
+ * Minimal event definition shape accepted by event bus helpers.
21
+ */
9
22
  export interface EventPayloadDef<
10
23
  Name extends string = string,
11
24
  Payload extends StandardSchema = StandardSchema,
12
25
  > {
26
+ /**
27
+ * Stable event name.
28
+ */
13
29
  readonly name: Name;
30
+ /**
31
+ * Standard Schema payload validator.
32
+ */
14
33
  readonly payload: Payload;
34
+ /**
35
+ * Optional human-readable description for docs and tooling.
36
+ */
15
37
  readonly description?: string;
16
38
  }
17
39
 
40
+ /**
41
+ * Event definition created by `defineEvent(...)`.
42
+ */
18
43
  export interface EventDef<
19
44
  Name extends string = string,
20
45
  Payload extends StandardSchema = StandardSchema,
21
46
  > extends EventPayloadDef<Name, Payload> {
47
+ /**
48
+ * Discriminator for event definitions.
49
+ */
22
50
  readonly kind: "event";
23
51
  }
24
52
 
53
+ /**
54
+ * Infer the parsed payload type for an event definition.
55
+ */
25
56
  export type InferEventPayload<E extends EventPayloadDef> =
26
57
  E["payload"] extends StandardSchemaV1<unknown, infer Output> ? Output : never;
27
58
 
59
+ /**
60
+ * Options for `defineEvent(...)`.
61
+ */
28
62
  export interface DefineEventOptions<Payload extends StandardSchema> {
63
+ /**
64
+ * Standard Schema payload validator.
65
+ */
29
66
  payload: Payload;
67
+ /**
68
+ * Optional human-readable description for docs and tooling.
69
+ */
30
70
  description?: string;
31
71
  }
32
72
 
73
+ /**
74
+ * Arguments passed to a listener handler.
75
+ */
33
76
  export interface ListenerHandleArgs<E extends EventDef, Ctx> {
77
+ /**
78
+ * Event definition being handled.
79
+ */
34
80
  event: E;
81
+ /**
82
+ * Parsed event payload.
83
+ */
35
84
  payload: InferEventPayload<E>;
85
+ /**
86
+ * Listener context.
87
+ */
36
88
  ctx: Ctx;
37
89
  }
38
90
 
91
+ /**
92
+ * Listener definition created by `defineListener(...)`.
93
+ */
39
94
  export interface ListenerDef<
40
95
  E extends EventDef = EventDef,
41
96
  Ctx = unknown,
42
97
  Name extends string = string,
43
98
  > {
99
+ /**
100
+ * Discriminator for listener definitions.
101
+ */
44
102
  readonly kind: "listener";
103
+ /**
104
+ * Stable listener name.
105
+ */
45
106
  readonly name: Name;
107
+ /**
108
+ * Event this listener handles.
109
+ */
46
110
  readonly event: E;
111
+ /**
112
+ * Handle a parsed event payload.
113
+ */
47
114
  handle(args: ListenerHandleArgs<E, Ctx>): MaybePromise<void>;
48
115
  }
49
116
 
117
+ /**
118
+ * Options for `defineListener(...)`.
119
+ */
50
120
  export interface DefineListenerOptions<
51
121
  E extends EventDef,
52
122
  Ctx,
53
123
  Name extends string,
54
124
  > {
125
+ /**
126
+ * Stable listener name.
127
+ */
55
128
  name: Name;
129
+ /**
130
+ * Handle a parsed event payload.
131
+ */
56
132
  handle(args: ListenerHandleArgs<E, Ctx>): MaybePromise<void>;
57
133
  }
58
134
 
135
+ /**
136
+ * Event bus shape required by Beignet listener registration helpers.
137
+ */
59
138
  export interface EventBusLike {
139
+ /**
140
+ * Publish an event payload.
141
+ */
60
142
  publish<E extends EventPayloadDef>(
61
143
  event: E,
62
144
  payload: InferEventPayload<E>,
63
145
  ): MaybePromise<void>;
146
+ /**
147
+ * Subscribe to an event and return an unsubscribe function.
148
+ */
64
149
  subscribe<E extends EventPayloadDef>(
65
150
  event: E,
66
151
  handler: (payload: InferEventPayload<E>) => MaybePromise<void>,
67
152
  ): () => void;
68
153
  }
69
154
 
155
+ /**
156
+ * Options for `registerListeners(...)`.
157
+ */
70
158
  export interface RegisterListenersOptions<Ctx> {
159
+ /**
160
+ * Static listener context or factory evaluated for each delivered event.
161
+ */
71
162
  ctx?: Ctx | (() => MaybePromise<Ctx>);
163
+ /**
164
+ * Called when a listener fails. When omitted, listener errors are rethrown to
165
+ * the event bus subscription callback.
166
+ */
72
167
  onError?: (error: unknown, listener: ListenerDef<EventDef, Ctx>) => void;
73
168
  }
74
169
 
170
+ /**
171
+ * Context-bound event helper factory.
172
+ */
75
173
  export interface EventHandlers<Ctx> {
174
+ /**
175
+ * Define a listener with the bound context type.
176
+ */
76
177
  defineListener<E extends EventDef, Name extends string = string>(
77
178
  event: E,
78
179
  options: DefineListenerOptions<E, Ctx, Name>,
79
180
  ): ListenerDef<E, Ctx, Name>;
80
181
 
182
+ /**
183
+ * Register listeners with an event bus.
184
+ */
81
185
  registerListeners(
82
186
  eventBus: EventBusLike,
83
187
  listeners: readonly ListenerDef<EventDef, Ctx>[],
@@ -85,7 +189,13 @@ export interface EventHandlers<Ctx> {
85
189
  ): () => void;
86
190
  }
87
191
 
192
+ /**
193
+ * Error thrown when event payload validation fails.
194
+ */
88
195
  export class EventValidationError extends Error {
196
+ /**
197
+ * Raw Standard Schema validation issues.
198
+ */
89
199
  readonly issues: readonly StandardSchemaV1.Issue[];
90
200
 
91
201
  constructor(args: {
@@ -152,6 +262,12 @@ async function resolveCtx<Ctx>(
152
262
  return ctx as Ctx;
153
263
  }
154
264
 
265
+ /**
266
+ * Define a typed event.
267
+ *
268
+ * Event payloads are validated before publishing through `publishEvent(...)`
269
+ * and before registered listeners run.
270
+ */
155
271
  export function defineEvent<
156
272
  Name extends string,
157
273
  Payload extends StandardSchema,
@@ -164,6 +280,9 @@ export function defineEvent<
164
280
  };
165
281
  }
166
282
 
283
+ /**
284
+ * Define a listener for one event.
285
+ */
167
286
  export function defineListener<
168
287
  E extends EventDef,
169
288
  Ctx = unknown,
@@ -180,6 +299,9 @@ export function defineListener<
180
299
  };
181
300
  }
182
301
 
302
+ /**
303
+ * Validate and parse an event payload with the event's Standard Schema.
304
+ */
183
305
  export async function parseEventPayload<E extends EventPayloadDef>(
184
306
  event: E,
185
307
  payload: unknown,
@@ -189,6 +311,9 @@ export async function parseEventPayload<E extends EventPayloadDef>(
189
311
  })) as InferEventPayload<E>;
190
312
  }
191
313
 
314
+ /**
315
+ * Validate an event payload and publish it through an event bus.
316
+ */
192
317
  export async function publishEvent<E extends EventPayloadDef>(
193
318
  eventBus: EventBusLike,
194
319
  event: E,
@@ -198,6 +323,12 @@ export async function publishEvent<E extends EventPayloadDef>(
198
323
  await eventBus.publish(event, parsed);
199
324
  }
200
325
 
326
+ /**
327
+ * Register listeners against an event bus and return an unsubscribe function.
328
+ *
329
+ * Payloads are validated before listener handlers run. Listener context is
330
+ * resolved per delivery when `options.ctx` is a factory.
331
+ */
201
332
  export function registerListeners<Ctx>(
202
333
  eventBus: EventBusLike,
203
334
  listeners: readonly ListenerDef<EventDef, Ctx>[],
@@ -226,6 +357,9 @@ export function registerListeners<Ctx>(
226
357
  };
227
358
  }
228
359
 
360
+ /**
361
+ * Create event helper methods bound to an application context type.
362
+ */
229
363
  export function createEventHandlers<Ctx>(): EventHandlers<Ctx> {
230
364
  return {
231
365
  defineListener<E extends EventDef, Name extends string = string>(