opinionated-machine 6.13.2 → 6.15.0

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 (38) hide show
  1. package/README.md +199 -1
  2. package/dist/lib/dualmode/index.d.ts +1 -1
  3. package/dist/lib/dualmode/index.js.map +1 -1
  4. package/dist/lib/routes/fastifyRouteBuilder.js +15 -0
  5. package/dist/lib/routes/fastifyRouteBuilder.js.map +1 -1
  6. package/dist/lib/routes/fastifyRouteTypes.d.ts +24 -2
  7. package/dist/lib/routes/fastifyRouteTypes.js.map +1 -1
  8. package/dist/lib/routes/index.d.ts +1 -1
  9. package/dist/lib/routes/index.js.map +1 -1
  10. package/dist/lib/sse/AbstractSSEController.js +4 -3
  11. package/dist/lib/sse/AbstractSSEController.js.map +1 -1
  12. package/dist/lib/sse/index.d.ts +2 -1
  13. package/dist/lib/sse/index.js +2 -0
  14. package/dist/lib/sse/index.js.map +1 -1
  15. package/dist/lib/sse/rooms/SSERoomBroadcaster.d.ts +20 -4
  16. package/dist/lib/sse/rooms/SSERoomBroadcaster.js +44 -12
  17. package/dist/lib/sse/rooms/SSERoomBroadcaster.js.map +1 -1
  18. package/dist/lib/sse/rooms/SSERoomManager.d.ts +5 -2
  19. package/dist/lib/sse/rooms/SSERoomManager.js +8 -5
  20. package/dist/lib/sse/rooms/SSERoomManager.js.map +1 -1
  21. package/dist/lib/sse/rooms/adapters/InMemoryAdapter.d.ts +1 -1
  22. package/dist/lib/sse/rooms/adapters/InMemoryAdapter.js +1 -1
  23. package/dist/lib/sse/rooms/adapters/InMemoryAdapter.js.map +1 -1
  24. package/dist/lib/sse/rooms/index.d.ts +1 -1
  25. package/dist/lib/sse/rooms/types.d.ts +34 -2
  26. package/dist/lib/sse/subscriptions/SSESubscriptionManager.d.ts +47 -0
  27. package/dist/lib/sse/subscriptions/SSESubscriptionManager.js +298 -0
  28. package/dist/lib/sse/subscriptions/SSESubscriptionManager.js.map +1 -0
  29. package/dist/lib/sse/subscriptions/defineEventMetadata.d.ts +50 -0
  30. package/dist/lib/sse/subscriptions/defineEventMetadata.js +44 -0
  31. package/dist/lib/sse/subscriptions/defineEventMetadata.js.map +1 -0
  32. package/dist/lib/sse/subscriptions/index.d.ts +3 -0
  33. package/dist/lib/sse/subscriptions/index.js +3 -0
  34. package/dist/lib/sse/subscriptions/index.js.map +1 -0
  35. package/dist/lib/sse/subscriptions/types.d.ts +141 -0
  36. package/dist/lib/sse/subscriptions/types.js +2 -0
  37. package/dist/lib/sse/subscriptions/types.js.map +1 -0
  38. package/package.json +1 -1
package/README.md CHANGED
@@ -58,6 +58,17 @@ Very opinionated DI framework for fastify, built on top of awilix
58
58
  - [Room Query Methods](#room-query-methods)
59
59
  - [Auto-Leave on Disconnect](#auto-leave-on-disconnect)
60
60
  - [Multi-Node Deployments with Redis](#multi-node-deployments-with-redis)
61
+ - [SSE Subscriptions](#sse-subscriptions)
62
+ - [Defining Event Metadata](#defining-event-metadata)
63
+ - [Defining Resolvers](#defining-resolvers)
64
+ - [Configuring the Manager](#configuring-the-manager)
65
+ - [Integrating with a Controller](#integrating-with-a-controller)
66
+ - [Publishing Events](#publishing-events)
67
+ - [Refreshing Preferences Mid-Connection](#refreshing-preferences-mid-connection)
68
+ - [Pipeline Semantics](#pipeline-semantics)
69
+ - [Multi-Node Support](#multi-node-support)
70
+ - [Data Loading with layered-loader](#data-loading-with-layered-loader)
71
+ - [Testing](#testing)
61
72
  - [SSE Test Utilities](#sse-test-utilities)
62
73
  - [Quick Reference](#quick-reference)
63
74
  - [Inject vs HTTP Comparison](#inject-vs-http-comparison)
@@ -1803,6 +1814,191 @@ The Redis adapter uses Pub/Sub for cross-node message propagation. When you call
1803
1814
 
1804
1815
  See the [@opinionated-machine/sse-rooms-redis](./packages/sse-rooms-redis/README.md) package for detailed documentation on Redis adapter configuration and usage.
1805
1816
 
1817
+ ### SSE Subscriptions
1818
+
1819
+ SSE Subscriptions add user-centered event filtering on top of SSE Rooms. Users connect once to a universal stream, and a **resolver pipeline** determines which events reach them based on membership, preferences, and arbitrary business rules.
1820
+
1821
+ #### Defining Event Metadata
1822
+
1823
+ Define a discriminated union describing all event scopes, then create type-safe guards with `defineEventMetadata()`:
1824
+
1825
+ ```typescript
1826
+ import { defineEventMetadata } from 'opinionated-machine'
1827
+
1828
+ type EventMetadata =
1829
+ | { scope: 'project'; projectId: string }
1830
+ | { scope: 'team'; teamId: string }
1831
+ | { scope: 'global' }
1832
+
1833
+ const meta = defineEventMetadata<EventMetadata>()('scope', ['project', 'team', 'global'])
1834
+
1835
+ // In resolvers, guards narrow the type:
1836
+ if (meta.project(event.metadata)) {
1837
+ event.metadata.projectId // TypeScript knows this is string
1838
+ }
1839
+ ```
1840
+
1841
+ #### Defining Resolvers
1842
+
1843
+ Resolvers are stateless filters evaluated in pipeline order. Each resolver can `allow`, `deny`, or `defer`:
1844
+
1845
+ ```typescript
1846
+ import type { SubscriptionResolver, SubscriptionContext, FilterVerdict } from 'opinionated-machine'
1847
+
1848
+ class ProjectMembershipResolver {
1849
+ readonly name = 'project-membership'
1850
+
1851
+ async onConnect(ctx: SubscriptionContext<UserCtx>) {
1852
+ const memberships = await this.membershipLoader.get(ctx.userContext.userId)
1853
+ const projectIds = new Set(memberships.map(m => m.projectId))
1854
+ return {
1855
+ userContext: { ...ctx.userContext, projectIds },
1856
+ rooms: Array.from(projectIds).map(id => `project:${id}`),
1857
+ }
1858
+ }
1859
+
1860
+ evaluate(ctx: SubscriptionContext<UserCtx>, event: IncomingEvent<EventMetadata>): FilterVerdict {
1861
+ if (meta.project(event.metadata)) {
1862
+ return ctx.userContext.projectIds.has(event.metadata.projectId)
1863
+ ? { action: 'allow' }
1864
+ : { action: 'deny', reason: 'not a project member' }
1865
+ }
1866
+ return { action: 'defer' }
1867
+ }
1868
+
1869
+ async refresh(ctx: SubscriptionContext<UserCtx>) {
1870
+ // Re-fetch memberships on demand
1871
+ const memberships = await this.membershipLoader.get(ctx.userContext.userId)
1872
+ const projectIds = new Set(memberships.map(m => m.projectId))
1873
+ return {
1874
+ userContext: { ...ctx.userContext, projectIds },
1875
+ rooms: Array.from(projectIds).map(id => `project:${id}`),
1876
+ }
1877
+ }
1878
+ }
1879
+ ```
1880
+
1881
+ #### Configuring the Manager
1882
+
1883
+ ```typescript
1884
+ import { SSESubscriptionManager } from 'opinionated-machine'
1885
+
1886
+ const subscriptionManager = new SSESubscriptionManager<UserCtx, EventMetadata>(
1887
+ {
1888
+ resolveUserContext: async (request) => ({
1889
+ userId: request.user.id,
1890
+ projectIds: new Set(),
1891
+ mutedEventTypes: new Set(),
1892
+ }),
1893
+ resolvers: [
1894
+ new ProjectMembershipResolver(membershipLoader),
1895
+ new MutePreferencesResolver(prefsLoader),
1896
+ ],
1897
+ defaultPolicy: 'deny',
1898
+ resolveUserId: (ctx) => ctx.userId,
1899
+ },
1900
+ { sseRoomManager, sseRoomBroadcaster },
1901
+ )
1902
+ ```
1903
+
1904
+ #### Integrating with a Controller
1905
+
1906
+ Wire `handleConnect` and `handleDisconnect` into the SSE session lifecycle:
1907
+
1908
+ ```typescript
1909
+ class NotificationController extends AbstractSSEController<Contracts> {
1910
+ private handleStream = buildHandler(contract, {
1911
+ sse: (request, sse) => {
1912
+ const session = sse.start('keepAlive')
1913
+ this.subscriptionManager.handleConnect(session).catch(() => {
1914
+ // Handle connection setup failure (e.g., resolver threw)
1915
+ })
1916
+ },
1917
+ }, {
1918
+ onClose: (session) => {
1919
+ this.subscriptionManager.handleDisconnect(session)
1920
+ },
1921
+ })
1922
+ }
1923
+ ```
1924
+
1925
+ #### Publishing Events
1926
+
1927
+ ```typescript
1928
+ const result = await subscriptionManager.publish({
1929
+ eventName: 'announcement',
1930
+ data: { message: 'New feature released!' },
1931
+ targetRooms: ['project:123'],
1932
+ metadata: { scope: 'project', projectId: '123' },
1933
+ })
1934
+ // result: { delivered: 5, filtered: 2 }
1935
+ ```
1936
+
1937
+ `targetRooms` controls routing:
1938
+ - **Specific rooms** (`['project:123']`) — broadcast to those rooms, filter via resolver pipeline
1939
+ - **`undefined`** (omitted) — broadcast to all rooms of all managed connections
1940
+ - **Empty array** (`[]`) — no-op, returns `{ delivered: 0, filtered: 0 }`
1941
+
1942
+ #### Refreshing Preferences Mid-Connection
1943
+
1944
+ When a user updates preferences (e.g., mutes an event type), refresh their active connections:
1945
+
1946
+ ```typescript
1947
+ // In your REST endpoint handler:
1948
+ await prefsLoader.invalidateCacheFor(userId)
1949
+ await subscriptionManager.refreshUser(userId)
1950
+ ```
1951
+
1952
+ The manager diffs rooms and joins/leaves as needed — no reconnection required.
1953
+
1954
+ #### Pipeline Semantics
1955
+
1956
+ - Resolvers are evaluated in array order
1957
+ - First `deny` short-circuits — event is not delivered
1958
+ - `allow` does not short-circuit — subsequent resolvers can still deny
1959
+ - If all resolvers return `defer`, `defaultPolicy` applies (default: `deny`)
1960
+ - Resolver `evaluate()` errors are treated as `deny`
1961
+ - Resolver `refresh()` errors are caught per-resolver — the failed resolver keeps its previous state while remaining resolvers continue refreshing
1962
+ - Later resolvers in the array receive the accumulated `userContext` from earlier resolvers — use spread (`{ ...ctx.userContext, ...newFields }`) to preserve prior resolver data
1963
+ - `defaultPolicy` defaults to `'deny'` when not specified
1964
+
1965
+ #### Multi-Node Support
1966
+
1967
+ - Metadata flows through the adapter chain (Redis pub/sub) alongside the SSE message
1968
+ - Resolver pipeline runs locally on each node for its own connections
1969
+ - Wire format is a single v1 schema with optional `meta` — older nodes simply have no metadata
1970
+ - Use `layered-loader` for distributed cache invalidation across nodes
1971
+
1972
+ #### Data Loading with layered-loader
1973
+
1974
+ `layered-loader` is recommended (not required) for resolver data loading. It provides in-memory → Redis → DB caching with TTL, refresh-ahead, and distributed invalidation:
1975
+
1976
+ ```typescript
1977
+ import { Loader } from 'layered-loader'
1978
+
1979
+ const membershipLoader = new Loader<ProjectMembership[]>({
1980
+ inMemoryCache: { cacheType: 'lru-map', ttlInMsecs: 120_000, maxItems: 500 },
1981
+ asyncCache: new RedisCache(redis, { json: true, ttlInMsecs: 900_000 }),
1982
+ dataSources: [membershipDataSource],
1983
+ })
1984
+ ```
1985
+
1986
+ #### Testing
1987
+
1988
+ Create mock resolvers for unit tests:
1989
+
1990
+ ```typescript
1991
+ const mockResolver = {
1992
+ name: 'mock',
1993
+ evaluate: vi.fn().mockReturnValue({ action: 'allow' }),
1994
+ }
1995
+
1996
+ const manager = new SSESubscriptionManager(
1997
+ { resolveUserContext: async () => mockContext, resolvers: [mockResolver] },
1998
+ { sseRoomManager, sseRoomBroadcaster },
1999
+ )
2000
+ ```
2001
+
1806
2002
  ### SSE Test Utilities
1807
2003
 
1808
2004
  The library provides utilities for testing SSE endpoints.
@@ -2206,7 +2402,9 @@ sync: (request, reply) => {
2206
2402
 
2207
2403
  ### Single Sync Handler
2208
2404
 
2209
- Dual-mode contracts use a single `sync` handler that returns the response data. The framework handles content-type negotiation automatically:
2405
+ Dual-mode contracts use a single `sync` handler that returns the response data. The framework validates the return value against the contract schema, then sends it. Do not call `reply.send()` — return the data directly instead. Use `reply.code()` to set status codes and `reply.header()` to set response headers.
2406
+
2407
+ > **Note:** The `reply` parameter is typed as `SyncModeReply`, which omits `send()` to prevent accidental misuse. The framework handles sending the response after validation.
2210
2408
 
2211
2409
  ```ts
2212
2410
  handlers: buildHandler(chatCompletionContract, {
@@ -1,4 +1,4 @@
1
1
  export type { AnyDualModeContractDefinition, DualModeContractDefinition, } from '@lokalise/api-contracts';
2
- export { type BuildFastifyDualModeRoutesReturnType, buildFastifyRoute, buildHandler, type DualModeHandlers, type DualModeRouteHandler, determineMode, extractPathTemplate, type FastifyDualModeHandlerConfig, type FastifyDualModeRouteOptions, type RegisterDualModeRoutesOptions, type SSEModeHandler, type SyncModeHandler, } from '../routes/index.js';
2
+ export { type BuildFastifyDualModeRoutesReturnType, buildFastifyRoute, buildHandler, type DualModeHandlers, type DualModeRouteHandler, determineMode, extractPathTemplate, type FastifyDualModeHandlerConfig, type FastifyDualModeRouteOptions, type RegisterDualModeRoutesOptions, type SSEModeHandler, type SyncModeHandler, type SyncModeReply, } from '../routes/index.js';
3
3
  export { AbstractDualModeController, type AllDualModeContractEventNames, type ExtractDualModeEventSchema, } from './AbstractDualModeController.js';
4
4
  export type { DualModeControllerConfig, DualModeLogger, DualModeType, } from './dualModeTypes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/dualmode/index.ts"],"names":[],"mappings":"AAKA,2CAA2C;AAC3C,OAAO,EAEL,iBAAiB,EACjB,YAAY,EAGZ,aAAa,EACb,mBAAmB,GAMpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,0BAA0B,GAG3B,MAAM,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/dualmode/index.ts"],"names":[],"mappings":"AAKA,2CAA2C;AAC3C,OAAO,EAEL,iBAAiB,EACjB,YAAY,EAGZ,aAAa,EACb,mBAAmB,GAOpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,0BAA0B,GAG3B,MAAM,iCAAiC,CAAA"}
@@ -122,6 +122,21 @@ async function handleSyncMode(contract, handlers,
122
122
  request, reply) {
123
123
  // biome-ignore lint/suspicious/noExplicitAny: Handler type depends on contract
124
124
  const response = await handlers.sync(request, reply);
125
+ // If the handler already called reply.send() directly (e.g. reply.status(200).send(data)),
126
+ // the reply is already sent. Skip validation and sending to avoid errors.
127
+ // Note: this means response validation is bypassed when handlers send replies directly.
128
+ // Handlers should return the response body and let the framework send it.
129
+ if (reply.sent) {
130
+ request.log.warn({
131
+ msg: 'Sync handler sent response directly, bypassing response validation',
132
+ tag: 'response_sent_directly',
133
+ method: request.method,
134
+ url: request.url,
135
+ routePath: request.routeOptions?.url,
136
+ reqId: request.id,
137
+ });
138
+ return;
139
+ }
125
140
  // Get the status code that was set by the handler (defaults to 200)
126
141
  const statusCode = reply.statusCode ?? 200;
127
142
  // Validate response based on status code:
@@ -1 +1 @@
1
- {"version":3,"file":"fastifyRouteBuilder.js","sourceRoot":"","sources":["../../../lib/routes/fastifyRouteBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fastifyRouteBuilder.js","sourceRoot":"","sources":["../../../lib/routes/fastifyRouteBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAU/B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,WAAW,GACZ,MAAM,wBAAwB,CAAA;AAE/B,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;;GAGG;AACH,SAAS,cAAc,CACrB,OAA2C;IAE3C,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAA2E,EAAE,CAAA;IAE5F,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAA;IACzD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAC/B,QAAuC,EACvC,QAAiB;IAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,yBAAyB,CAAA;IACjD,IAAI,CAAC,MAAM;QAAE,OAAM;IAEnB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,uBAAuB;YAChC,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SACnD,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAS,4BAA4B,CACnC,2BAAsF,EACtF,UAAkB,EAClB,QAAiB;IAEjB,IAAI,CAAC,2BAA2B;QAAE,OAAM;IAExC,sFAAsF;IACtF,MAAM,MAAM,GAAI,2BAAwE,CACtF,MAAM,CAAC,UAAU,CAAC,CACnB,CAAA;IACD,IAAI,CAAC,MAAM;QAAE,OAAM;IAEnB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,uBAAuB;YAChC,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SAC/D,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,qBAA+C,EAC/C,KAAmB;IAEnB,IAAI,CAAC,qBAAqB;QAAE,OAAM;IAClC,IAAI,CAAC,CAAC,OAAO,IAAI,qBAAqB,CAAC;QAAE,OAAM;IAE/C,iGAAiG;IACjG,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAC3B,qBAA4D,CAAC,KAAK,CACpE,CAAA;IACD,MAAM,iBAAiB,GAA4B,EAAE,CAAA;IACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IACjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,uBAAuB;YAChC,SAAS,EAAE,oCAAoC;YAC/C,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SACnD,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAC3B,QAAkB,EAClB,QAA4D;AAC5D,4FAA4F;AAC5F,OAAY,EACZ,KAAmB;IAEnB,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,MAAO,QAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAE7D,2FAA2F;IAC3F,0EAA0E;IAC1E,wFAAwF;IACxF,0EAA0E;IAC1E,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,oEAAoE;YACzE,GAAG,EAAE,wBAAwB;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,GAAG;YACpC,KAAK,EAAE,OAAO,CAAC,EAAE;SAClB,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAA;IAE1C,0CAA0C;IAC1C,qDAAqD;IACrD,gEAAgE;IAChE,IAAI,CAAC;QACH,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YAC1C,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,4BAA4B,CAAC,QAAQ,CAAC,+BAA+B,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iDAAiD;QACjD,sFAAsF;QACtF,yEAAyE;QACzE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACf,MAAM,GAAG,CAAA;IACX,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAE9B,uBAAuB,CAAC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;IAE7D,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,YAAyD,EACzD,UAEmE,EACnE,YAAgC,EAChC,gBAA+B,EAC/B,KAAmB,EACnB,IAA2C,EAC3C,2BAA2E;IAE3E,gFAAgF;IAChF,IAAI,YAAY,EAAE,CAAC;QACjB,6EAA6E;QAC7E,4BAA4B,CAAC,2BAA2B,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;QAE/F,8DAA8D;QAC9D,+EAA+E;QAC/E,0EAA0E;QAC1E,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;QACnC,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;QACvC,8EAA8E;QAC9E,4EAA4E;QAC5E,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC9E,OAAM;IACR,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,oEAAoE;QACpE,IAAI,YAAY,EAAE,CAAC;YACjB,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,oDAAoD;QACpD,MAAM,gBAAgB,CAAA;IACxB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,UAAqF,EACrF,QAAkB,EAClB,QAA4D;AAC5D,4FAA4F;AAC5F,OAAY,EACZ,KAAmB,EACnB,OAA0D;IAE1D,MAAM,aAAa,GAAG,gBAAgB,CACpC,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,CAAC,sBAAsB,EAC/B,OAAO,EACP,eAAe,CAChB,CAAA;IAED,IAAI,CAAC;QACH,6GAA6G;QAC7G,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,UAAiB,CAAC,CAAA;QAE5D,wCAAwC;QACxC,4DAA4D;QAC5D,gFAAgF;QAChF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,0DAA0D;gBACxD,0EAA0E,CAC7E,CAAA;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,uBAAuB,CAC3B,aAAa,CAAC,eAAe,EAAE,EAC/B,UAAU,EACV,aAAa,CAAC,eAAe,EAAE,EAC/B,aAAa,CAAC,gBAAgB,EAC9B,KAAK,EACL,aAAa,CAAC,OAAO,EAAE,EACvB,QAAQ,CAAC,+BAA+B,CACzC,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gFAAgF;QAChF,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAA;YACpD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,CAAA;YAC7E,CAAC;YACD,gFAAgF;YAChF,MAAM,GAAG,CAAA;QACX,CAAC;QAED,8DAA8D;QAC9D,oEAAoE;QACpE,kEAAkE;QAClE,6EAA6E;QAC7E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAA;QACxE,oEAAoE;QACpE,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAA;QACpE,MAAM,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAA;QACxE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC;YACnD,UAAU;YACV,KAAK,EAAE,UAAU;YACjB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,0BAA0B,CACjC,UAAqF,EACrF,MAA8C;IAE9C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC9C,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,MAAM,CAAA;IAElD,kDAAkD;IAClD,+FAA+F;IAC/F,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,YAAY,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,6EAA6E,QAAQ,CAAC,uBAAuB,EAAE,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE;YACzJ,SAAS,EAAE,uBAAuB;SACnC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IAExF,MAAM,YAAY,GAAiB;QACjC,GAAG,CAAC,OAAO,EAAE,6BAA6B,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG;QACH,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,oDAAoD;QAClF,MAAM,EAAE;YACN,MAAM,EAAE,QAAQ,CAAC,uBAAuB;YACxC,WAAW,EAAE,QAAQ,CAAC,kBAAkB;YACxC,OAAO,EAAE,QAAQ,CAAC,mBAAmB;YACrC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACvE,0DAA0D;SAC3D;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,wCAAwC;YACxC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAE/D,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YACjE,CAAC;YAED,OAAO,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QACrF,CAAC;KACF,CAAA;IAED,0CAA0C;IAC1C,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAC9C,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAC5B,UAA2E,EAC3E,MAAyC;IAEzC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAE9C,+FAA+F;IAC/F,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAuB,YAAY,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,6EAA6E,QAAQ,CAAC,uBAAuB,EAAE,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE;YACzJ,SAAS,EAAE,uBAAuB;SACnC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAA;IAExF,MAAM,YAAY,GAAiB;QACjC,GAAG,CAAC,OAAO,EAAE,6BAA6B,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG;QACH,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,oDAAoD;QAClF,MAAM,EAAE;YACN,MAAM,EAAE,QAAQ,CAAC,uBAAuB;YACxC,WAAW,EAAE,QAAQ,CAAC,kBAAkB;YACxC,OAAO,EAAE,QAAQ,CAAC,mBAAmB;YACrC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;SACxE;QACD,qJAAqJ;QACrJ,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,iDAAiD;YACjD,MAAM,aAAa,GAAG,gBAAgB,CACpC,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,CAAC,sBAAsB,EAC/B,OAAO,EACP,KAAK,CACN,CAAA;YAED,kDAAkD;YAClD,gFAAgF;YAChF,IAAI,CAAC;gBACH,oHAAoH;gBACpH,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAc,EAAE,aAAa,CAAC,UAAiB,CAAC,CAAA;gBAEnE,wCAAwC;gBACxC,4DAA4D;gBAC5D,gFAAgF;gBAChF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC/D,MAAM,IAAI,KAAK,CACb,0DAA0D;wBACxD,0EAA0E,CAC7E,CAAA;gBACH,CAAC;gBAED,qBAAqB;gBACrB,MAAM,uBAAuB,CAC3B,aAAa,CAAC,eAAe,EAAE,EAC/B,UAAU,EACV,aAAa,CAAC,eAAe,EAAE,EAC/B,aAAa,CAAC,gBAAgB,EAC9B,KAAK,EACL,aAAa,CAAC,OAAO,EAAE,EACvB,QAAQ,CAAC,+BAA+B,CACzC,CAAA;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gFAAgF;gBAChF,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAA;oBACpD,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,CAAA;oBAC7E,CAAC;oBACD,gFAAgF;oBAChF,MAAM,GAAG,CAAA;gBACX,CAAC;gBAED,8DAA8D;gBAC9D,oEAAoE;gBACpE,kEAAkE;gBAClE,6EAA6E;gBAC7E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAA;gBACxE,oEAAoE;gBACpE,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAA;gBACpE,MAAM,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAA;gBACxE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC;oBACnD,UAAU;oBACV,KAAK,EAAE,UAAU;oBACjB,OAAO;iBACR,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KACF,CAAA;IAED,0CAA0C;IAC1C,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAC9C,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAuCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAEmE,EACnE,OAE6C;IAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,sBAAsB,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,OAA8D,CAAA;QACtF,OAAO,0BAA0B,CAC/B,UAAuF,EACvF;YACE,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,OAAO,EAAE,eAAe,CAAC,OAAO;SACjC,CACF,CAAA;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,OAAoD,CAAA;QACvE,OAAO,qBAAqB,CAC1B,UAA6E,EAC7E;YACE,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CACF,CAAA;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,cAAc,GAAG,OAAsE,CAAA;IAC7F,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,IAAI,WAAW,CAAA;IACxD,MAAM,eAAe,GACnB,OAAO,cAAc,CAAC,QAAQ,EAAE,YAAY,KAAK,UAAU;QACzD,CAAC,CAAC,uBAAuB,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG;QACpE,CAAC,CAAC,iBAAiB,CAAA;IACvB,MAAM,IAAI,KAAK,CACb,0DAA0D,WAAW,SAAS,eAAe,IAAI;QAC/F,2GAA2G;QAC3G,uFAAuF;QACvF,sDAAsD,CACzD,CAAA;AACH,CAAC"}
@@ -455,9 +455,31 @@ export type InferSSERequest<Contract extends AnySSEContractDefinition> = Fastify
455
455
  Headers: InferOptionalSchema<Contract['requestHeaderSchema']>;
456
456
  Body: InferOptionalSchema<Contract['requestBodySchema'], undefined>;
457
457
  }>;
458
+ /**
459
+ * Reply object available to sync handlers.
460
+ *
461
+ * Unlike the full FastifyReply, this omits `send()` because the framework handles
462
+ * sending the response after validation. Sync handlers should return the response body
463
+ * directly instead of calling `reply.send()`.
464
+ *
465
+ * Fluent setters (code, status, header, etc.) are overridden to return SyncModeReply
466
+ * so that chaining `.send()` after them is a compile-time error.
467
+ *
468
+ * Use `reply.code()` to set status codes and `reply.header()` to set response headers.
469
+ */
470
+ type FastifyReplyFluentKeys = {
471
+ [K in keyof FastifyReply]: FastifyReply[K] extends (...args: never[]) => infer R ? [R] extends [FastifyReply] ? K : never : never;
472
+ }[keyof FastifyReply];
473
+ type ReplaceReturn<F, NewReturn> = F extends (...args: infer A) => FastifyReply ? (...args: A) => NewReturn : F;
474
+ export type SyncModeReply = Omit<FastifyReply, 'send' | FastifyReplyFluentKeys> & {
475
+ [K in Exclude<FastifyReplyFluentKeys, 'send'>]: ReplaceReturn<FastifyReply[K], SyncModeReply>;
476
+ };
458
477
  /**
459
478
  * Handler function for sync (non-streaming) mode.
460
- * Signature matches Fastify's `(request, reply)` pattern.
479
+ *
480
+ * The handler should return the response body directly. The framework will validate it
481
+ * against the contract schema and send it. Use `reply.code()` / `reply.header()` to set
482
+ * status codes and headers, but do not call `reply.send()`.
461
483
  *
462
484
  * @template Params - Path parameters type
463
485
  * @template Query - Query string parameters type
@@ -470,7 +492,7 @@ export type SyncModeHandler<Params = unknown, Query = unknown, Headers = unknown
470
492
  Querystring: Query;
471
493
  Headers: Headers;
472
494
  Body: Body;
473
- }>, reply: FastifyReply) => SyncResponse | Promise<SyncResponse>;
495
+ }>, reply: SyncModeReply) => SyncResponse | Promise<SyncResponse>;
474
496
  /**
475
497
  * Handler function for SSE mode with deferred headers.
476
498
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fastifyRouteTypes.js","sourceRoot":"","sources":["../../../lib/routes/fastifyRouteTypes.ts"],"names":[],"mappings":"AA05BA,MAAM,UAAU,YAAY,CAG1B,QAAkB,EAClB,QAAuC,EACvC,OAA8D;IAE9D,6FAA6F;IAC7F,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,OAAO;YACL,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE,QAAyC;YACnD,QAAQ,EAAE,QAAgE;YAC1E,OAAO,EAAE,OAAsC;SAChD,CAAA;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,QAAoC;QAC9C,4GAA4G;QAC5G,QAAQ,EAAE,QAAe;QACzB,OAAO,EAAE,OAAiC;KAC3C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"fastifyRouteTypes.js","sourceRoot":"","sources":["../../../lib/routes/fastifyRouteTypes.ts"],"names":[],"mappings":"AA+7BA,MAAM,UAAU,YAAY,CAG1B,QAAkB,EAClB,QAAuC,EACvC,OAA8D;IAE9D,6FAA6F;IAC7F,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,OAAO;YACL,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE,QAAyC;YACnD,QAAQ,EAAE,QAAgE;YAC1E,OAAO,EAAE,OAAsC;SAChD,CAAA;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,QAAoC;QAC9C,4GAA4G;QAC5G,QAAQ,EAAE,QAAe;QACzB,OAAO,EAAE,OAAiC;KAC3C,CAAA;AACH,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { buildFastifyRoute, extractPathTemplate } from './fastifyRouteBuilder.js';
2
- export { type BuildFastifyDualModeRoutesReturnType, type BuildFastifySSERoutesReturnType, buildHandler, type DualModeHandlers, type DualModeRouteHandler, type FastifyDualModeHandlerConfig, type FastifyDualModeRouteOptions, type FastifySSEHandlerConfig, type FastifySSEPreHandler, type FastifySSERouteOptions, type InferDualModeHandlers, type InferHandlers, type InferSSERequest, type RegisterDualModeRoutesOptions, type RegisterSSERoutesOptions, type SSEContext, type SSEHandlerResult, type SSEModeHandler, type SSEOnlyHandlers, type SSERespondResult, type SSERouteHandler, type SSESession, type SSESessionMode, type SSEStartOptions, type SSEStreamMessage, type SyncModeHandler, } from './fastifyRouteTypes.js';
2
+ export { type BuildFastifyDualModeRoutesReturnType, type BuildFastifySSERoutesReturnType, buildHandler, type DualModeHandlers, type DualModeRouteHandler, type FastifyDualModeHandlerConfig, type FastifyDualModeRouteOptions, type FastifySSEHandlerConfig, type FastifySSEPreHandler, type FastifySSERouteOptions, type InferDualModeHandlers, type InferHandlers, type InferSSERequest, type RegisterDualModeRoutesOptions, type RegisterSSERoutesOptions, type SSEContext, type SSEHandlerResult, type SSEModeHandler, type SSEOnlyHandlers, type SSERespondResult, type SSERouteHandler, type SSESession, type SSESessionMode, type SSEStartOptions, type SSEStreamMessage, type SyncModeHandler, type SyncModeReply, } from './fastifyRouteTypes.js';
3
3
  export { createSSEContext, determineMode, determineSyncFormat, handleReconnection, handleSSEError, isErrorLike, type SSECloseReason, type SSEContextResult, type SSEControllerLike, type SSELifecycleOptions, type SSEReply, type SSESessionSetupResult, type SyncFormatResult, sendReplayEvents, setupSSESession, } from './fastifyRouteUtils.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/routes/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEjF,cAAc;AACd,OAAO;AAGL,0BAA0B;AAC1B,YAAY,GA+Bb,MAAM,wBAAwB,CAAA;AAE/B,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,WAAW,EAQX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/routes/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEjF,cAAc;AACd,OAAO;AAGL,0BAA0B;AAC1B,YAAY,GAgCb,MAAM,wBAAwB,CAAA;AAE/B,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,WAAW,EAQX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAA"}
@@ -393,9 +393,9 @@ export class AbstractSSEController {
393
393
  * })
394
394
  * ```
395
395
  */
396
- broadcastToRoom(room, eventName, data, options) {
396
+ async broadcastToRoom(room, eventName, data, options) {
397
397
  if (!this._roomBroadcaster) {
398
- return Promise.resolve(0);
398
+ return 0;
399
399
  }
400
400
  const message = {
401
401
  event: eventName,
@@ -403,7 +403,8 @@ export class AbstractSSEController {
403
403
  id: options?.id ?? randomUUID(),
404
404
  retry: options?.retry,
405
405
  };
406
- return this._roomBroadcaster.broadcastMessage(room, message, options);
406
+ const { delivered } = await this._roomBroadcaster.broadcastMessage(room, message, options);
407
+ return delivered;
407
408
  }
408
409
  /**
409
410
  * Join a connection to one or more rooms.
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractSSEController.js","sourceRoot":"","sources":["../../../lib/sse/AbstractSSEController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractSSEController.js","sourceRoot":"","sources":["../../../lib/sse/AbstractSSEController.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export type { AllContractEventNames, AllContractEvents, AnySSEContractDefinition
2
2
  export { type BuildFastifySSERoutesReturnType, buildFastifyRoute, buildHandler, type FastifySSEHandlerConfig, type FastifySSEPreHandler, type FastifySSERouteOptions, type InferSSERequest, type RegisterSSERoutesOptions, type SSEContext, type SSEOnlyHandlers, type SSERouteHandler, type SSESession, } from '../routes/index.js';
3
3
  export { AbstractSSEController, type SSEControllerConfig, type SSEEventSender, type SSELogger, type SSEMessage, } from './AbstractSSEController.js';
4
4
  export { defineEvent, type SSEEventDefinition } from './defineEvent.js';
5
- export { defineRoom, InMemoryAdapter, type RoomBroadcastOptions, type RoomNameResolver, type SSERoomAdapter, SSERoomBroadcaster, SSERoomManager, type SSERoomManagerConfig, type SSERoomMessageHandler, type SSERoomOperations, } from './rooms/index.js';
5
+ export { defineRoom, InMemoryAdapter, type PreDeliveryFilter, type RoomBroadcastOptions, type RoomNameResolver, type SSERoomAdapter, SSERoomBroadcaster, SSERoomManager, type SSERoomManagerConfig, type SSERoomMessageHandler, type SSERoomOperations, } from './rooms/index.js';
6
6
  export { type SSESessionEvent, SSESessionSpy } from './SSESessionSpy.js';
7
7
  export { type ParsedSSEEvent, type ParseSSEBufferResult, parseSSEBuffer, parseSSEEvents, } from './sseParser.js';
8
+ export { defineEventMetadata, type ExtractMetadata, type FilterVerdict, type IncomingEvent, type MetadataGuard, type MetadataGuards, type PublishResult, type ResolverResult, SSESubscriptionManager, type SSESubscriptionManagerConfig, type SubscriptionContext, type SubscriptionPolicy, type SubscriptionResolver, } from './subscriptions/index.js';
@@ -6,4 +6,6 @@ export { defineEvent } from './defineEvent.js';
6
6
  export { defineRoom, InMemoryAdapter, SSERoomBroadcaster, SSERoomManager, } from './rooms/index.js';
7
7
  export { SSESessionSpy } from './SSESessionSpy.js';
8
8
  export { parseSSEBuffer, parseSSEEvents, } from './sseParser.js';
9
+ // SSE Subscriptions
10
+ export { defineEventMetadata, SSESubscriptionManager, } from './subscriptions/index.js';
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/sse/index.ts"],"names":[],"mappings":"AAUA,2CAA2C;AAC3C,OAAO,EAEL,iBAAiB,EACjB,YAAY,GAUb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,qBAAqB,GAKtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAA2B,MAAM,kBAAkB,CAAA;AACvE,mCAAmC;AACnC,OAAO,EACL,UAAU,EACV,eAAe,EAIf,kBAAkB,EAClB,cAAc,GAIf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAGL,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/sse/index.ts"],"names":[],"mappings":"AAUA,2CAA2C;AAC3C,OAAO,EAEL,iBAAiB,EACjB,YAAY,GAUb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,qBAAqB,GAKtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAA2B,MAAM,kBAAkB,CAAA;AACvE,mCAAmC;AACnC,OAAO,EACL,UAAU,EACV,eAAe,EAKf,kBAAkB,EAClB,cAAc,GAIf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAGL,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EAQnB,sBAAsB,GAKvB,MAAM,0BAA0B,CAAA"}
@@ -2,7 +2,7 @@ import type { z } from 'zod';
2
2
  import type { SSEEventDefinition } from '../defineEvent.js';
3
3
  import type { SSEMessage } from '../sseTypes.js';
4
4
  import type { SSERoomManager } from './SSERoomManager.js';
5
- import type { RoomBroadcastOptions } from './types.js';
5
+ import type { BroadcastResult, PreDeliveryFilter, RoomBroadcastOptions } from './types.js';
6
6
  /**
7
7
  * Shared, non-generic room broadcaster that can be registered once in DI
8
8
  * and used by multiple controllers and domain services.
@@ -31,9 +31,18 @@ export declare class SSERoomBroadcaster {
31
31
  private readonly _roomManager;
32
32
  private readonly senders;
33
33
  private readonly dedupCache;
34
+ private preDeliveryFilter?;
34
35
  constructor(deps: {
35
36
  sseRoomManager: SSERoomManager;
36
37
  });
38
+ /**
39
+ * Set a pre-delivery filter that runs before sending to each connection.
40
+ * Used by SSESubscriptionManager for resolver pipeline evaluation.
41
+ * Only one filter can be active at a time — calling this method twice throws,
42
+ * to prevent silently replacing an already-installed filter (which is almost
43
+ * always a wiring bug, e.g. registering two SSESubscriptionManagers).
44
+ */
45
+ setPreDeliveryFilter(filter: PreDeliveryFilter): void;
37
46
  /**
38
47
  * Public getter for the underlying room manager.
39
48
  * Used by the route builder for `session.rooms`.
@@ -54,11 +63,13 @@ export declare class SSERoomBroadcaster {
54
63
  * @param event - Event definition created by `defineEvent()`
55
64
  * @param data - Event data (must match the schema from the event definition)
56
65
  * @param options - Broadcast options (local, id, retry)
57
- * @returns Number of local connections the message was sent to
66
+ * @returns Number of local connections the message was successfully delivered to.
67
+ * For separate `delivered`/`filtered` counts, call {@link broadcastMessage}.
58
68
  */
59
69
  broadcastToRoom<T extends z.ZodType>(room: string | string[], event: SSEEventDefinition<string, T>, data: z.input<T>, options?: RoomBroadcastOptions & {
60
70
  id?: string;
61
71
  retry?: number;
72
+ metadata?: Record<string, unknown>;
62
73
  }): Promise<number>;
63
74
  /**
64
75
  * Lower-level broadcast API — sends a raw SSEMessage to all connections in one or more rooms.
@@ -68,9 +79,14 @@ export declare class SSERoomBroadcaster {
68
79
  * @param room - Room name or array of room names
69
80
  * @param message - The SSE message to broadcast
70
81
  * @param options - Broadcast options (local)
71
- * @returns Number of local connections the message was sent to
82
+ * @returns `delivered` is the number of local connections the message was sent to;
83
+ * `filtered` is the number of local connections skipped by the pre-delivery
84
+ * filter. Returning both per-call (rather than tracking on the broadcaster)
85
+ * avoids races between concurrent broadcasts.
72
86
  */
73
- broadcastMessage(room: string | string[], message: SSEMessage, options?: RoomBroadcastOptions): Promise<number>;
87
+ broadcastMessage(room: string | string[], message: SSEMessage, options?: RoomBroadcastOptions & {
88
+ metadata?: Record<string, unknown>;
89
+ }): Promise<BroadcastResult>;
74
90
  /**
75
91
  * Get all connection IDs in a room.
76
92
  *
@@ -29,13 +29,27 @@ export class SSERoomBroadcaster {
29
29
  _roomManager;
30
30
  senders = [];
31
31
  dedupCache = new Map();
32
+ preDeliveryFilter;
32
33
  constructor(deps) {
33
34
  this._roomManager = deps.sseRoomManager;
34
35
  // Wire up adapter message handler to forward remote broadcasts to local connections
35
- this._roomManager.onRemoteMessage((room, message, _sourceNodeId) => {
36
- return this.handleRemoteBroadcast(room, message);
36
+ this._roomManager.onRemoteMessage((room, message, _sourceNodeId, metadata) => {
37
+ return this.handleRemoteBroadcast(room, message, metadata);
37
38
  });
38
39
  }
40
+ /**
41
+ * Set a pre-delivery filter that runs before sending to each connection.
42
+ * Used by SSESubscriptionManager for resolver pipeline evaluation.
43
+ * Only one filter can be active at a time — calling this method twice throws,
44
+ * to prevent silently replacing an already-installed filter (which is almost
45
+ * always a wiring bug, e.g. registering two SSESubscriptionManagers).
46
+ */
47
+ setPreDeliveryFilter(filter) {
48
+ if (this.preDeliveryFilter) {
49
+ throw new Error('SSERoomBroadcaster pre-delivery filter is already set; only one filter can be active at a time');
50
+ }
51
+ this.preDeliveryFilter = filter;
52
+ }
39
53
  /**
40
54
  * Public getter for the underlying room manager.
41
55
  * Used by the route builder for `session.rooms`.
@@ -60,16 +74,18 @@ export class SSERoomBroadcaster {
60
74
  * @param event - Event definition created by `defineEvent()`
61
75
  * @param data - Event data (must match the schema from the event definition)
62
76
  * @param options - Broadcast options (local, id, retry)
63
- * @returns Number of local connections the message was sent to
77
+ * @returns Number of local connections the message was successfully delivered to.
78
+ * For separate `delivered`/`filtered` counts, call {@link broadcastMessage}.
64
79
  */
65
- broadcastToRoom(room, event, data, options) {
80
+ async broadcastToRoom(room, event, data, options) {
66
81
  const message = {
67
82
  event: event.event,
68
83
  data,
69
84
  id: options?.id ?? randomUUID(),
70
85
  retry: options?.retry,
71
86
  };
72
- return this.broadcastMessage(room, message, options);
87
+ const { delivered } = await this.broadcastMessage(room, message, options);
88
+ return delivered;
73
89
  }
74
90
  /**
75
91
  * Lower-level broadcast API — sends a raw SSEMessage to all connections in one or more rooms.
@@ -79,25 +95,36 @@ export class SSERoomBroadcaster {
79
95
  * @param room - Room name or array of room names
80
96
  * @param message - The SSE message to broadcast
81
97
  * @param options - Broadcast options (local)
82
- * @returns Number of local connections the message was sent to
98
+ * @returns `delivered` is the number of local connections the message was sent to;
99
+ * `filtered` is the number of local connections skipped by the pre-delivery
100
+ * filter. Returning both per-call (rather than tracking on the broadcaster)
101
+ * avoids races between concurrent broadcasts.
83
102
  */
84
103
  async broadcastMessage(room, message, options) {
85
104
  const rooms = Array.isArray(room) ? room : [room];
86
105
  const connectionIds = this.collectRoomConnections(rooms);
87
- // Send to all local connections
88
- let sent = 0;
106
+ let delivered = 0;
107
+ let filtered = 0;
89
108
  for (const connId of connectionIds) {
109
+ // Check pre-delivery filter if set
110
+ if (this.preDeliveryFilter) {
111
+ const allowed = await this.preDeliveryFilter(connId, message, options?.metadata);
112
+ if (!allowed) {
113
+ filtered++;
114
+ continue;
115
+ }
116
+ }
90
117
  if (await this.sendToConnection(connId, message)) {
91
- sent++;
118
+ delivered++;
92
119
  }
93
120
  }
94
121
  // Publish to adapter for cross-node propagation (unless local-only)
95
122
  if (!options?.local) {
96
123
  for (const r of rooms) {
97
- await this._roomManager.publish(r, message, options);
124
+ await this._roomManager.publish(r, message, options, options?.metadata);
98
125
  }
99
126
  }
100
- return sent;
127
+ return { delivered, filtered };
101
128
  }
102
129
  /**
103
130
  * Get all connection IDs in a room.
@@ -139,12 +166,17 @@ export class SSERoomBroadcaster {
139
166
  * Handle broadcasts from other nodes (via adapter).
140
167
  * Deduplicates messages per-connection based on message ID.
141
168
  */
142
- async handleRemoteBroadcast(room, message) {
169
+ async handleRemoteBroadcast(room, message, metadata) {
143
170
  const connectionIds = this._roomManager.getConnectionsInRoom(room);
144
171
  for (const connId of connectionIds) {
145
172
  if (this.isDuplicateMessage(connId, message.id)) {
146
173
  continue;
147
174
  }
175
+ if (this.preDeliveryFilter) {
176
+ const allowed = await this.preDeliveryFilter(connId, message, metadata);
177
+ if (!allowed)
178
+ continue;
179
+ }
148
180
  await this.sendToConnection(connId, message);
149
181
  }
150
182
  }