raffel 1.0.6 → 1.0.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.
- package/README.md +80 -33
- package/dist/adapters/grpc.d.ts +2 -2
- package/dist/adapters/grpc.d.ts.map +1 -1
- package/dist/adapters/grpc.js +37 -7
- package/dist/adapters/grpc.js.map +1 -1
- package/dist/adapters/http.d.ts +2 -2
- package/dist/adapters/http.d.ts.map +1 -1
- package/dist/adapters/http.js +56 -2
- package/dist/adapters/http.js.map +1 -1
- package/dist/adapters/inbound/grpc.d.ts +9 -0
- package/dist/adapters/inbound/grpc.d.ts.map +1 -0
- package/dist/adapters/inbound/grpc.js +8 -0
- package/dist/adapters/inbound/grpc.js.map +1 -0
- package/dist/adapters/inbound/http.d.ts +9 -0
- package/dist/adapters/inbound/http.d.ts.map +1 -0
- package/dist/adapters/inbound/http.js +8 -0
- package/dist/adapters/inbound/http.js.map +1 -0
- package/dist/adapters/inbound/index.d.ts +22 -0
- package/dist/adapters/inbound/index.d.ts.map +1 -0
- package/dist/adapters/inbound/index.js +22 -0
- package/dist/adapters/inbound/index.js.map +1 -0
- package/dist/adapters/inbound/jsonrpc.d.ts +9 -0
- package/dist/adapters/inbound/jsonrpc.d.ts.map +1 -0
- package/dist/adapters/inbound/jsonrpc.js +8 -0
- package/dist/adapters/inbound/jsonrpc.js.map +1 -0
- package/dist/adapters/inbound/tcp.d.ts +9 -0
- package/dist/adapters/inbound/tcp.d.ts.map +1 -0
- package/dist/adapters/inbound/tcp.js +8 -0
- package/dist/adapters/inbound/tcp.js.map +1 -0
- package/dist/adapters/inbound/udp.d.ts +9 -0
- package/dist/adapters/inbound/udp.d.ts.map +1 -0
- package/dist/adapters/inbound/udp.js +8 -0
- package/dist/adapters/inbound/udp.js.map +1 -0
- package/dist/adapters/inbound/utils/connection-filter.d.ts +9 -0
- package/dist/adapters/inbound/utils/connection-filter.d.ts.map +1 -0
- package/dist/adapters/inbound/utils/connection-filter.js +8 -0
- package/dist/adapters/inbound/utils/connection-filter.js.map +1 -0
- package/dist/adapters/inbound/websocket.d.ts +9 -0
- package/dist/adapters/inbound/websocket.d.ts.map +1 -0
- package/dist/adapters/inbound/websocket.js +8 -0
- package/dist/adapters/inbound/websocket.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +13 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/jsonrpc.d.ts.map +1 -1
- package/dist/adapters/jsonrpc.js +39 -5
- package/dist/adapters/jsonrpc.js.map +1 -1
- package/dist/adapters/outbound/cache/file.d.ts +6 -0
- package/dist/adapters/outbound/cache/file.d.ts.map +1 -0
- package/dist/adapters/outbound/cache/file.js +6 -0
- package/dist/adapters/outbound/cache/file.js.map +1 -0
- package/dist/adapters/outbound/cache/index.d.ts +9 -0
- package/dist/adapters/outbound/cache/index.d.ts.map +1 -0
- package/dist/adapters/outbound/cache/index.js +9 -0
- package/dist/adapters/outbound/cache/index.js.map +1 -0
- package/dist/adapters/outbound/cache/memory.d.ts +6 -0
- package/dist/adapters/outbound/cache/memory.d.ts.map +1 -0
- package/dist/adapters/outbound/cache/memory.js +6 -0
- package/dist/adapters/outbound/cache/memory.js.map +1 -0
- package/dist/adapters/outbound/cache/redis.d.ts +6 -0
- package/dist/adapters/outbound/cache/redis.d.ts.map +1 -0
- package/dist/adapters/outbound/cache/redis.js +6 -0
- package/dist/adapters/outbound/cache/redis.js.map +1 -0
- package/dist/adapters/outbound/index.d.ts +15 -0
- package/dist/adapters/outbound/index.d.ts.map +1 -0
- package/dist/adapters/outbound/index.js +17 -0
- package/dist/adapters/outbound/index.js.map +1 -0
- package/dist/adapters/outbound/logger/index.d.ts +7 -0
- package/dist/adapters/outbound/logger/index.d.ts.map +1 -0
- package/dist/adapters/outbound/logger/index.js +7 -0
- package/dist/adapters/outbound/logger/index.js.map +1 -0
- package/dist/adapters/outbound/logger/pino.d.ts +12 -0
- package/dist/adapters/outbound/logger/pino.d.ts.map +1 -0
- package/dist/adapters/outbound/logger/pino.js +58 -0
- package/dist/adapters/outbound/logger/pino.js.map +1 -0
- package/dist/adapters/outbound/rate-limit/filesystem.d.ts +6 -0
- package/dist/adapters/outbound/rate-limit/filesystem.d.ts.map +1 -0
- package/dist/adapters/outbound/rate-limit/filesystem.js +6 -0
- package/dist/adapters/outbound/rate-limit/filesystem.js.map +1 -0
- package/dist/adapters/outbound/rate-limit/index.d.ts +10 -0
- package/dist/adapters/outbound/rate-limit/index.d.ts.map +1 -0
- package/dist/adapters/outbound/rate-limit/index.js +10 -0
- package/dist/adapters/outbound/rate-limit/index.js.map +1 -0
- package/dist/adapters/outbound/rate-limit/memory.d.ts +8 -0
- package/dist/adapters/outbound/rate-limit/memory.d.ts.map +1 -0
- package/dist/adapters/outbound/rate-limit/memory.js +8 -0
- package/dist/adapters/outbound/rate-limit/memory.js.map +1 -0
- package/dist/adapters/outbound/rate-limit/redis.d.ts +6 -0
- package/dist/adapters/outbound/rate-limit/redis.d.ts.map +1 -0
- package/dist/adapters/outbound/rate-limit/redis.js +6 -0
- package/dist/adapters/outbound/rate-limit/redis.js.map +1 -0
- package/dist/adapters/outbound/rate-limit/s3db.d.ts +6 -0
- package/dist/adapters/outbound/rate-limit/s3db.d.ts.map +1 -0
- package/dist/adapters/outbound/rate-limit/s3db.js +6 -0
- package/dist/adapters/outbound/rate-limit/s3db.js.map +1 -0
- package/dist/adapters/outbound/session/index.d.ts +12 -0
- package/dist/adapters/outbound/session/index.d.ts.map +1 -0
- package/dist/adapters/outbound/session/index.js +9 -0
- package/dist/adapters/outbound/session/index.js.map +1 -0
- package/dist/adapters/outbound/session/memory.d.ts +9 -0
- package/dist/adapters/outbound/session/memory.d.ts.map +1 -0
- package/dist/adapters/outbound/session/memory.js +8 -0
- package/dist/adapters/outbound/session/memory.js.map +1 -0
- package/dist/adapters/outbound/session/redis.d.ts +9 -0
- package/dist/adapters/outbound/session/redis.d.ts.map +1 -0
- package/dist/adapters/outbound/session/redis.js +8 -0
- package/dist/adapters/outbound/session/redis.js.map +1 -0
- package/dist/adapters/outbound/session/s3db.d.ts +9 -0
- package/dist/adapters/outbound/session/s3db.d.ts.map +1 -0
- package/dist/adapters/outbound/session/s3db.js +8 -0
- package/dist/adapters/outbound/session/s3db.js.map +1 -0
- package/dist/adapters/tcp.d.ts +2 -2
- package/dist/adapters/tcp.d.ts.map +1 -1
- package/dist/adapters/tcp.js +16 -3
- package/dist/adapters/tcp.js.map +1 -1
- package/dist/adapters/udp.d.ts +2 -2
- package/dist/adapters/udp.d.ts.map +1 -1
- package/dist/adapters/udp.js +16 -4
- package/dist/adapters/udp.js.map +1 -1
- package/dist/adapters/websocket.d.ts +2 -2
- package/dist/adapters/websocket.d.ts.map +1 -1
- package/dist/adapters/websocket.js +33 -9
- package/dist/adapters/websocket.js.map +1 -1
- package/dist/application/config-preview.d.ts +147 -0
- package/dist/application/config-preview.d.ts.map +1 -0
- package/dist/application/config-preview.js +122 -0
- package/dist/application/config-preview.js.map +1 -0
- package/dist/application/index.d.ts +13 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +13 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/registration.d.ts +71 -0
- package/dist/application/registration.d.ts.map +1 -0
- package/dist/application/registration.js +99 -0
- package/dist/application/registration.js.map +1 -0
- package/dist/application/runtime-preview.d.ts +67 -0
- package/dist/application/runtime-preview.d.ts.map +1 -0
- package/dist/application/runtime-preview.js +43 -0
- package/dist/application/runtime-preview.js.map +1 -0
- package/dist/bootstrap/config-normalization.d.ts +10 -0
- package/dist/bootstrap/config-normalization.d.ts.map +1 -0
- package/dist/bootstrap/config-normalization.js +14 -0
- package/dist/bootstrap/config-normalization.js.map +1 -0
- package/dist/bootstrap/create-server.d.ts +15 -0
- package/dist/bootstrap/create-server.d.ts.map +1 -0
- package/dist/bootstrap/create-server.js +17 -0
- package/dist/bootstrap/create-server.js.map +1 -0
- package/dist/bootstrap/index.d.ts +11 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +13 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/bootstrap/protocol-wiring.d.ts +13 -0
- package/dist/bootstrap/protocol-wiring.d.ts.map +1 -0
- package/dist/bootstrap/protocol-wiring.js +11 -0
- package/dist/bootstrap/protocol-wiring.js.map +1 -0
- package/dist/channels/channel-manager.d.ts +2 -1
- package/dist/channels/channel-manager.d.ts.map +1 -1
- package/dist/channels/channel-manager.js +52 -19
- package/dist/channels/channel-manager.js.map +1 -1
- package/dist/core/registry.d.ts +4 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +23 -3
- package/dist/core/registry.js.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +61 -10
- package/dist/core/router.js.map +1 -1
- package/dist/docs/generators/code-samples.d.ts.map +1 -1
- package/dist/docs/generators/code-samples.js +7 -75
- package/dist/docs/generators/code-samples.js.map +1 -1
- package/dist/docs/generators/grpc-generator.js +2 -2
- package/dist/docs/generators/grpc-generator.js.map +1 -1
- package/dist/docs/generators/http-generator.js +3 -2
- package/dist/docs/generators/http-generator.js.map +1 -1
- package/dist/docs/generators/index.d.ts +1 -1
- package/dist/docs/generators/index.d.ts.map +1 -1
- package/dist/docs/generators/index.js +1 -1
- package/dist/docs/generators/index.js.map +1 -1
- package/dist/docs/generators/jsonrpc-generator.js +2 -2
- package/dist/docs/generators/jsonrpc-generator.js.map +1 -1
- package/dist/docs/generators/schema-converter.d.ts +3 -3
- package/dist/docs/generators/schema-converter.d.ts.map +1 -1
- package/dist/docs/generators/schema-converter.js +8 -60
- package/dist/docs/generators/schema-converter.js.map +1 -1
- package/dist/docs/generators/streams-generator.js +2 -2
- package/dist/docs/generators/streams-generator.js.map +1 -1
- package/dist/docs/generators/tcp-generator.js +2 -2
- package/dist/docs/generators/tcp-generator.js.map +1 -1
- package/dist/docs/generators/udp-generator.js +2 -2
- package/dist/docs/generators/udp-generator.js.map +1 -1
- package/dist/docs/generators/websocket-generator.js +3 -3
- package/dist/docs/generators/websocket-generator.js.map +1 -1
- package/dist/docs/index.d.ts +1 -1
- package/dist/docs/index.d.ts.map +1 -1
- package/dist/docs/index.js +1 -1
- package/dist/docs/index.js.map +1 -1
- package/dist/docs/openapi/generator.d.ts +2 -0
- package/dist/docs/openapi/generator.d.ts.map +1 -1
- package/dist/docs/openapi/generator.js +16 -51
- package/dist/docs/openapi/generator.js.map +1 -1
- package/dist/dx/index.d.ts +2 -0
- package/dist/dx/index.d.ts.map +1 -1
- package/dist/dx/index.js +1 -0
- package/dist/dx/index.js.map +1 -1
- package/dist/dx/scaffold/index.d.ts +32 -0
- package/dist/dx/scaffold/index.d.ts.map +1 -0
- package/dist/dx/scaffold/index.js +471 -0
- package/dist/dx/scaffold/index.js.map +1 -0
- package/dist/graphql/adapter.d.ts.map +1 -1
- package/dist/graphql/adapter.js +58 -6
- package/dist/graphql/adapter.js.map +1 -1
- package/dist/graphql/schema-generator.d.ts +2 -2
- package/dist/graphql/schema-generator.d.ts.map +1 -1
- package/dist/graphql/schema-generator.js +228 -215
- package/dist/graphql/schema-generator.js.map +1 -1
- package/dist/http/app.d.ts +9 -4
- package/dist/http/app.d.ts.map +1 -1
- package/dist/http/app.js +125 -50
- package/dist/http/app.js.map +1 -1
- package/dist/http/context.d.ts +8 -1
- package/dist/http/context.d.ts.map +1 -1
- package/dist/http/context.js +2 -1
- package/dist/http/context.js.map +1 -1
- package/dist/http/cookie.d.ts +2 -2
- package/dist/http/cookie.js +1 -1
- package/dist/http/cors.d.ts +1 -1
- package/dist/http/cors.js +1 -1
- package/dist/http/guards.d.ts.map +1 -1
- package/dist/http/guards.js +38 -28
- package/dist/http/guards.js.map +1 -1
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/http/stream-auth.d.ts +1 -1
- package/dist/http/stream-auth.d.ts.map +1 -1
- package/dist/http/stream-auth.js +6 -5
- package/dist/http/stream-auth.js.map +1 -1
- package/dist/index.d.ts +23 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -3
- package/dist/index.js.map +1 -1
- package/dist/inspect/contracts.d.ts +47 -0
- package/dist/inspect/contracts.d.ts.map +1 -0
- package/dist/inspect/contracts.js +237 -0
- package/dist/inspect/contracts.js.map +1 -0
- package/dist/inspect/format-utils.d.ts +18 -0
- package/dist/inspect/format-utils.d.ts.map +1 -0
- package/dist/inspect/format-utils.js +55 -0
- package/dist/inspect/format-utils.js.map +1 -0
- package/dist/inspect/index.d.ts +13 -0
- package/dist/inspect/index.d.ts.map +1 -0
- package/dist/inspect/index.js +8 -0
- package/dist/inspect/index.js.map +1 -0
- package/dist/inspect/loader.d.ts +13 -0
- package/dist/inspect/loader.d.ts.map +1 -0
- package/dist/inspect/loader.js +115 -0
- package/dist/inspect/loader.js.map +1 -0
- package/dist/inspect/playground-html.d.ts +8 -0
- package/dist/inspect/playground-html.d.ts.map +1 -0
- package/dist/inspect/playground-html.js +381 -0
- package/dist/inspect/playground-html.js.map +1 -0
- package/dist/inspect/playground-invokers.d.ts +37 -0
- package/dist/inspect/playground-invokers.d.ts.map +1 -0
- package/dist/inspect/playground-invokers.js +950 -0
- package/dist/inspect/playground-invokers.js.map +1 -0
- package/dist/inspect/playground.d.ts +97 -0
- package/dist/inspect/playground.d.ts.map +1 -0
- package/dist/inspect/playground.js +412 -0
- package/dist/inspect/playground.js.map +1 -0
- package/dist/inspect/reports.d.ts +52 -0
- package/dist/inspect/reports.d.ts.map +1 -0
- package/dist/inspect/reports.js +400 -0
- package/dist/inspect/reports.js.map +1 -0
- package/dist/inspect/runtime-graph.d.ts +52 -0
- package/dist/inspect/runtime-graph.d.ts.map +1 -0
- package/dist/inspect/runtime-graph.js +739 -0
- package/dist/inspect/runtime-graph.js.map +1 -0
- package/dist/inspect/schema-samples.d.ts +18 -0
- package/dist/inspect/schema-samples.d.ts.map +1 -0
- package/dist/inspect/schema-samples.js +137 -0
- package/dist/inspect/schema-samples.js.map +1 -0
- package/dist/inspect/types.d.ts +146 -0
- package/dist/inspect/types.d.ts.map +1 -0
- package/dist/inspect/types.js +2 -0
- package/dist/inspect/types.js.map +1 -0
- package/dist/mcp/cli.d.ts +11 -12
- package/dist/mcp/cli.d.ts.map +1 -1
- package/dist/mcp/cli.js +303 -65
- package/dist/mcp/cli.js.map +1 -1
- package/dist/mcp/docs/patterns.d.ts.map +1 -1
- package/dist/mcp/docs/patterns.js +82 -29
- package/dist/mcp/docs/patterns.js.map +1 -1
- package/dist/mcp/docs/quickstart.d.ts +1 -1
- package/dist/mcp/docs/quickstart.d.ts.map +1 -1
- package/dist/mcp/docs/quickstart.js +65 -25
- package/dist/mcp/docs/quickstart.js.map +1 -1
- package/dist/mcp/resources/index.d.ts.map +1 -1
- package/dist/mcp/resources/index.js +82 -5
- package/dist/mcp/resources/index.js.map +1 -1
- package/dist/mcp/tools/definitions.d.ts.map +1 -1
- package/dist/mcp/tools/definitions.js +36 -0
- package/dist/mcp/tools/definitions.js.map +1 -1
- package/dist/mcp/tools/handlers.d.ts.map +1 -1
- package/dist/mcp/tools/handlers.js +148 -12
- package/dist/mcp/tools/handlers.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +3 -2
- package/dist/middleware/auth.js.map +1 -1
- package/dist/mock-server/cli.d.ts +14 -0
- package/dist/mock-server/cli.d.ts.map +1 -0
- package/dist/mock-server/cli.js +314 -0
- package/dist/mock-server/cli.js.map +1 -0
- package/dist/mock-server/fake-data.d.ts +14 -0
- package/dist/mock-server/fake-data.d.ts.map +1 -0
- package/dist/mock-server/fake-data.js +21 -0
- package/dist/mock-server/fake-data.js.map +1 -0
- package/dist/mock-server/index.d.ts +69 -0
- package/dist/mock-server/index.d.ts.map +1 -0
- package/dist/mock-server/index.js +400 -0
- package/dist/mock-server/index.js.map +1 -0
- package/dist/mock-server/route-extractor.d.ts +40 -0
- package/dist/mock-server/route-extractor.d.ts.map +1 -0
- package/dist/mock-server/route-extractor.js +211 -0
- package/dist/mock-server/route-extractor.js.map +1 -0
- package/dist/mock-server/types.d.ts +64 -0
- package/dist/mock-server/types.d.ts.map +1 -0
- package/dist/mock-server/types.js +5 -0
- package/dist/mock-server/types.js.map +1 -0
- package/dist/policy/runtime.d.ts +7 -0
- package/dist/policy/runtime.d.ts.map +1 -0
- package/dist/policy/runtime.js +82 -0
- package/dist/policy/runtime.js.map +1 -0
- package/dist/ports/index.d.ts +18 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +11 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/outbound/cache-driver.d.ts +9 -0
- package/dist/ports/outbound/cache-driver.d.ts.map +1 -0
- package/dist/ports/outbound/cache-driver.js +9 -0
- package/dist/ports/outbound/cache-driver.js.map +1 -0
- package/dist/ports/outbound/cache-store.d.ts +8 -0
- package/dist/ports/outbound/cache-store.d.ts.map +1 -0
- package/dist/ports/outbound/cache-store.js +8 -0
- package/dist/ports/outbound/cache-store.js.map +1 -0
- package/dist/ports/outbound/channel-presence.d.ts +30 -0
- package/dist/ports/outbound/channel-presence.d.ts.map +1 -0
- package/dist/ports/outbound/channel-presence.js +9 -0
- package/dist/ports/outbound/channel-presence.js.map +1 -0
- package/dist/ports/outbound/event-store.d.ts +9 -0
- package/dist/ports/outbound/event-store.d.ts.map +1 -0
- package/dist/ports/outbound/event-store.js +9 -0
- package/dist/ports/outbound/event-store.js.map +1 -0
- package/dist/ports/outbound/logger.d.ts +31 -0
- package/dist/ports/outbound/logger.d.ts.map +1 -0
- package/dist/ports/outbound/logger.js +8 -0
- package/dist/ports/outbound/logger.js.map +1 -0
- package/dist/ports/outbound/rate-limit-driver.d.ts +9 -0
- package/dist/ports/outbound/rate-limit-driver.d.ts.map +1 -0
- package/dist/ports/outbound/rate-limit-driver.js +9 -0
- package/dist/ports/outbound/rate-limit-driver.js.map +1 -0
- package/dist/ports/outbound/session-store.d.ts +9 -0
- package/dist/ports/outbound/session-store.d.ts.map +1 -0
- package/dist/ports/outbound/session-store.js +9 -0
- package/dist/ports/outbound/session-store.js.map +1 -0
- package/dist/ports/outbound/validator.d.ts +9 -0
- package/dist/ports/outbound/validator.d.ts.map +1 -0
- package/dist/ports/outbound/validator.js +9 -0
- package/dist/ports/outbound/validator.js.map +1 -0
- package/dist/server/builder/config-preview.d.ts +2 -33
- package/dist/server/builder/config-preview.d.ts.map +1 -1
- package/dist/server/builder/config-preview.js +1 -94
- package/dist/server/builder/config-preview.js.map +1 -1
- package/dist/server/builder/lifecycle.d.ts +11 -1
- package/dist/server/builder/lifecycle.d.ts.map +1 -1
- package/dist/server/builder/lifecycle.js +117 -3
- package/dist/server/builder/lifecycle.js.map +1 -1
- package/dist/server/builder/single-port-utils.d.ts +11 -2
- package/dist/server/builder/single-port-utils.d.ts.map +1 -1
- package/dist/server/builder/single-port-utils.js +88 -16
- package/dist/server/builder/single-port-utils.js.map +1 -1
- package/dist/server/builder.d.ts.map +1 -1
- package/dist/server/builder.js +203 -78
- package/dist/server/builder.js.map +1 -1
- package/dist/server/discovery-utils.d.ts +5 -1
- package/dist/server/discovery-utils.d.ts.map +1 -1
- package/dist/server/discovery-utils.js +4 -1
- package/dist/server/discovery-utils.js.map +1 -1
- package/dist/server/front-door.d.ts +3 -1
- package/dist/server/front-door.d.ts.map +1 -1
- package/dist/server/front-door.js +80 -18
- package/dist/server/front-door.js.map +1 -1
- package/dist/server/fs-routes/middleware-processor.d.ts.map +1 -1
- package/dist/server/fs-routes/middleware-processor.js +9 -8
- package/dist/server/fs-routes/middleware-processor.js.map +1 -1
- package/dist/server/handler-builders.d.ts +2 -1
- package/dist/server/handler-builders.d.ts.map +1 -1
- package/dist/server/handler-builders.js +21 -0
- package/dist/server/handler-builders.js.map +1 -1
- package/dist/server/index.d.ts +4 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/port-binding.d.ts +8 -2
- package/dist/server/port-binding.d.ts.map +1 -1
- package/dist/server/port-binding.js +11 -1
- package/dist/server/port-binding.js.map +1 -1
- package/dist/server/protocol-config.d.ts.map +1 -1
- package/dist/server/protocol-config.js +1 -0
- package/dist/server/protocol-config.js.map +1 -1
- package/dist/server/protocol-fusion-diagnostics.d.ts +20 -0
- package/dist/server/protocol-fusion-diagnostics.d.ts.map +1 -0
- package/dist/server/protocol-fusion-diagnostics.js +51 -0
- package/dist/server/protocol-fusion-diagnostics.js.map +1 -0
- package/dist/server/rest-middleware.d.ts +3 -3
- package/dist/server/rest-middleware.d.ts.map +1 -1
- package/dist/server/rest-middleware.js +37 -5
- package/dist/server/rest-middleware.js.map +1 -1
- package/dist/server/router-module.d.ts +3 -1
- package/dist/server/router-module.d.ts.map +1 -1
- package/dist/server/router-module.js +14 -0
- package/dist/server/router-module.js.map +1 -1
- package/dist/server/shared-context.d.ts +3 -3
- package/dist/server/shared-context.d.ts.map +1 -1
- package/dist/server/shared-context.js +7 -9
- package/dist/server/shared-context.js.map +1 -1
- package/dist/server/single-port/dispatcher.d.ts.map +1 -1
- package/dist/server/single-port/dispatcher.js +20 -13
- package/dist/server/single-port/dispatcher.js.map +1 -1
- package/dist/server/types.d.ts +104 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/types/context.d.ts +167 -4
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/context.js +168 -2
- package/dist/types/context.js.map +1 -1
- package/dist/types/handlers.d.ts +3 -0
- package/dist/types/handlers.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/policies.d.ts +54 -0
- package/dist/types/policies.d.ts.map +1 -0
- package/dist/types/policies.js +109 -0
- package/dist/types/policies.js.map +1 -0
- package/dist/ui/core/registry.d.ts +4 -0
- package/dist/ui/core/registry.d.ts.map +1 -1
- package/dist/ui/core/router.d.ts.map +1 -1
- package/dist/ui/docs/generators/code-samples.d.ts.map +1 -1
- package/dist/ui/docs/generators/index.d.ts +1 -1
- package/dist/ui/docs/generators/index.d.ts.map +1 -1
- package/dist/ui/docs/generators/schema-converter.d.ts +3 -3
- package/dist/ui/docs/generators/schema-converter.d.ts.map +1 -1
- package/dist/ui/docs/index.d.ts +1 -1
- package/dist/ui/docs/index.d.ts.map +1 -1
- package/dist/ui/docs/openapi/generator.d.ts +2 -0
- package/dist/ui/docs/openapi/generator.d.ts.map +1 -1
- package/dist/ui/middleware/interceptors/rate-limit.d.ts +147 -0
- package/dist/ui/middleware/interceptors/rate-limit.d.ts.map +1 -0
- package/dist/ui/middleware/interceptors/timeout.d.ts +121 -0
- package/dist/ui/middleware/interceptors/timeout.d.ts.map +1 -0
- package/dist/ui/middleware/types.d.ts +396 -0
- package/dist/ui/middleware/types.d.ts.map +1 -0
- package/dist/ui/policy/runtime.d.ts +7 -0
- package/dist/ui/policy/runtime.d.ts.map +1 -0
- package/dist/ui/rate-limit/drivers/filesystem.d.ts +19 -0
- package/dist/ui/rate-limit/drivers/filesystem.d.ts.map +1 -0
- package/dist/ui/rate-limit/drivers/memory.d.ts +17 -0
- package/dist/ui/rate-limit/drivers/memory.d.ts.map +1 -0
- package/dist/ui/rate-limit/drivers/redis.d.ts +14 -0
- package/dist/ui/rate-limit/drivers/redis.d.ts.map +1 -0
- package/dist/ui/rate-limit/drivers/s3db.d.ts +31 -0
- package/dist/ui/rate-limit/drivers/s3db.d.ts.map +1 -0
- package/dist/ui/rate-limit/factory.d.ts +12 -0
- package/dist/ui/rate-limit/factory.d.ts.map +1 -0
- package/dist/ui/rate-limit/types.d.ts +81 -0
- package/dist/ui/rate-limit/types.d.ts.map +1 -0
- package/dist/ui/server/fs-routes/middleware-processor.d.ts.map +1 -1
- package/dist/ui/types/context.d.ts +167 -4
- package/dist/ui/types/context.d.ts.map +1 -1
- package/dist/ui/types/handlers.d.ts +3 -0
- package/dist/ui/types/handlers.d.ts.map +1 -1
- package/dist/ui/types/index.d.ts +4 -2
- package/dist/ui/types/index.d.ts.map +1 -1
- package/dist/ui/types/policies.d.ts +54 -0
- package/dist/ui/types/policies.d.ts.map +1 -0
- package/dist/ui/usd/spec/types.d.ts +3 -0
- package/dist/ui/usd/spec/types.d.ts.map +1 -1
- package/dist/ui/utils/schema-examples.d.ts +39 -0
- package/dist/ui/utils/schema-examples.d.ts.map +1 -0
- package/dist/ui/validation/descriptor.d.ts +26 -0
- package/dist/ui/validation/descriptor.d.ts.map +1 -0
- package/dist/ui/validation/index.d.ts +1 -0
- package/dist/ui/validation/index.d.ts.map +1 -1
- package/dist/usd/spec/types.d.ts +3 -0
- package/dist/usd/spec/types.d.ts.map +1 -1
- package/dist/usd/spec/types.js.map +1 -1
- package/dist/utils/context-utils.d.ts +3 -2
- package/dist/utils/context-utils.d.ts.map +1 -1
- package/dist/utils/context-utils.js +4 -0
- package/dist/utils/context-utils.js.map +1 -1
- package/dist/utils/schema-examples.d.ts +39 -0
- package/dist/utils/schema-examples.d.ts.map +1 -0
- package/dist/utils/schema-examples.js +240 -0
- package/dist/utils/schema-examples.js.map +1 -0
- package/dist/validation/descriptor.d.ts +26 -0
- package/dist/validation/descriptor.d.ts.map +1 -0
- package/dist/validation/descriptor.js +155 -0
- package/dist/validation/descriptor.js.map +1 -0
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -0
- package/dist/validation/index.js.map +1 -1
- package/package.json +11 -3
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock Server — Route Extractor
|
|
3
|
+
*
|
|
4
|
+
* Walks OpenAPI/USD paths and extracts MockRoute objects ready for serving.
|
|
5
|
+
*/
|
|
6
|
+
import { generateFromSchema } from './fake-data.js';
|
|
7
|
+
const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'];
|
|
8
|
+
/**
|
|
9
|
+
* Extract all HTTP routes from an OpenAPI/USD document.
|
|
10
|
+
* Document should have $refs already inlined.
|
|
11
|
+
*/
|
|
12
|
+
export function extractRoutes(doc) {
|
|
13
|
+
const paths = doc.paths;
|
|
14
|
+
if (!paths)
|
|
15
|
+
return [];
|
|
16
|
+
const routes = [];
|
|
17
|
+
for (const [path, pathItem] of Object.entries(paths)) {
|
|
18
|
+
if (!pathItem || typeof pathItem !== 'object')
|
|
19
|
+
continue;
|
|
20
|
+
const item = pathItem;
|
|
21
|
+
for (const method of HTTP_METHODS) {
|
|
22
|
+
const operation = item[method];
|
|
23
|
+
if (!operation)
|
|
24
|
+
continue;
|
|
25
|
+
const params = mergeParameters(item.parameters, operation.parameters);
|
|
26
|
+
const { schema: bodySchema, required: bodyRequired } = extractRequestBodySchema(operation);
|
|
27
|
+
const response = resolveResponse(operation);
|
|
28
|
+
routes.push({
|
|
29
|
+
method: method.toUpperCase(),
|
|
30
|
+
pathPattern: toExpressPath(path),
|
|
31
|
+
operationId: operation.operationId,
|
|
32
|
+
parameters: params,
|
|
33
|
+
requestBodySchema: bodySchema,
|
|
34
|
+
requestBodyRequired: bodyRequired,
|
|
35
|
+
response,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return routes;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convert OpenAPI path template to Express-style pattern.
|
|
43
|
+
* /users/{userId}/posts/{postId} => /users/:userId/posts/:postId
|
|
44
|
+
*/
|
|
45
|
+
export function toExpressPath(openapiPath) {
|
|
46
|
+
return openapiPath.replace(/\{([^}]+)\}/g, ':$1');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the best mock response for an operation.
|
|
50
|
+
*
|
|
51
|
+
* Picks the success response (200 > 201 > 204 > first 2xx), then:
|
|
52
|
+
* 1. response.content['application/json'].example
|
|
53
|
+
* 2. response.content['application/json'].examples (first named example's value)
|
|
54
|
+
* 3. response.content['application/json'].schema.example
|
|
55
|
+
* 4. generateFromSchema(schema)
|
|
56
|
+
*/
|
|
57
|
+
export function resolveResponse(operation) {
|
|
58
|
+
const responses = operation.responses;
|
|
59
|
+
if (!responses) {
|
|
60
|
+
return { statusCode: 200, contentType: 'application/json', body: {} };
|
|
61
|
+
}
|
|
62
|
+
// Find best success response
|
|
63
|
+
const statusCode = pickSuccessStatus(responses);
|
|
64
|
+
const response = responses[String(statusCode)];
|
|
65
|
+
if (!response) {
|
|
66
|
+
return { statusCode, contentType: 'application/json', body: {} };
|
|
67
|
+
}
|
|
68
|
+
// Extract headers
|
|
69
|
+
const headers = {};
|
|
70
|
+
if (response.headers) {
|
|
71
|
+
for (const [name, header] of Object.entries(response.headers)) {
|
|
72
|
+
if (header.schema) {
|
|
73
|
+
const val = generateFromSchema(header.schema);
|
|
74
|
+
if (val != null)
|
|
75
|
+
headers[name] = String(val);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// No content (e.g. 204)
|
|
80
|
+
if (!response.content) {
|
|
81
|
+
return {
|
|
82
|
+
statusCode,
|
|
83
|
+
contentType: 'application/json',
|
|
84
|
+
body: statusCode === 204 ? undefined : {},
|
|
85
|
+
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Find media type (prefer application/json)
|
|
89
|
+
const [contentType, mediaType] = pickMediaType(response.content);
|
|
90
|
+
if (!mediaType) {
|
|
91
|
+
return { statusCode, contentType: 'application/json', body: {}, headers: Object.keys(headers).length > 0 ? headers : undefined };
|
|
92
|
+
}
|
|
93
|
+
const body = resolveBody(mediaType);
|
|
94
|
+
return {
|
|
95
|
+
statusCode,
|
|
96
|
+
contentType,
|
|
97
|
+
body,
|
|
98
|
+
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract request body JSON Schema from an operation.
|
|
103
|
+
*/
|
|
104
|
+
export function extractRequestBodySchema(operation) {
|
|
105
|
+
if (!operation.requestBody)
|
|
106
|
+
return { schema: undefined, required: false };
|
|
107
|
+
const rb = operation.requestBody;
|
|
108
|
+
const content = rb.content;
|
|
109
|
+
if (!content)
|
|
110
|
+
return { schema: undefined, required: rb.required ?? false };
|
|
111
|
+
// Prefer application/json
|
|
112
|
+
const jsonMedia = content['application/json'];
|
|
113
|
+
if (jsonMedia?.schema) {
|
|
114
|
+
return {
|
|
115
|
+
schema: jsonMedia.schema,
|
|
116
|
+
required: rb.required ?? false,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Try first content type
|
|
120
|
+
for (const media of Object.values(content)) {
|
|
121
|
+
if (media.schema) {
|
|
122
|
+
return {
|
|
123
|
+
schema: media.schema,
|
|
124
|
+
required: rb.required ?? false,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { schema: undefined, required: rb.required ?? false };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Merge path-level and operation-level parameters.
|
|
132
|
+
* Operation params override path params on same name+in.
|
|
133
|
+
*/
|
|
134
|
+
export function mergeParameters(pathParams, opParams) {
|
|
135
|
+
const map = new Map();
|
|
136
|
+
const toResolved = (p) => ({
|
|
137
|
+
name: p.name,
|
|
138
|
+
in: p.in,
|
|
139
|
+
required: p.required,
|
|
140
|
+
schema: p.schema,
|
|
141
|
+
example: p.example,
|
|
142
|
+
});
|
|
143
|
+
if (pathParams) {
|
|
144
|
+
for (const p of pathParams) {
|
|
145
|
+
map.set(`${p.in}:${p.name}`, toResolved(p));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (opParams) {
|
|
149
|
+
for (const p of opParams) {
|
|
150
|
+
map.set(`${p.in}:${p.name}`, toResolved(p));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return [...map.values()];
|
|
154
|
+
}
|
|
155
|
+
// ── Internal helpers ───────────────────────────────────────────────────────────
|
|
156
|
+
function pickSuccessStatus(responses) {
|
|
157
|
+
// Prefer 200, 201, 204, then first 2xx
|
|
158
|
+
for (const preferred of [200, 201, 204]) {
|
|
159
|
+
if (String(preferred) in responses)
|
|
160
|
+
return preferred;
|
|
161
|
+
}
|
|
162
|
+
for (const code of Object.keys(responses)) {
|
|
163
|
+
const n = Number(code);
|
|
164
|
+
if (n >= 200 && n < 300)
|
|
165
|
+
return n;
|
|
166
|
+
}
|
|
167
|
+
// Fallback: default or first status
|
|
168
|
+
if ('default' in responses)
|
|
169
|
+
return 200;
|
|
170
|
+
const first = Object.keys(responses)[0];
|
|
171
|
+
return first ? Number(first) || 200 : 200;
|
|
172
|
+
}
|
|
173
|
+
function pickMediaType(content) {
|
|
174
|
+
// Prefer application/json
|
|
175
|
+
if (content['application/json'])
|
|
176
|
+
return ['application/json', content['application/json']];
|
|
177
|
+
// Try *json* content types
|
|
178
|
+
for (const [ct, media] of Object.entries(content)) {
|
|
179
|
+
if (ct.includes('json'))
|
|
180
|
+
return [ct, media];
|
|
181
|
+
}
|
|
182
|
+
// First available
|
|
183
|
+
const first = Object.entries(content)[0];
|
|
184
|
+
if (first)
|
|
185
|
+
return [first[0], first[1]];
|
|
186
|
+
return ['application/json', undefined];
|
|
187
|
+
}
|
|
188
|
+
function resolveBody(mediaType) {
|
|
189
|
+
// 1. Direct example
|
|
190
|
+
if (mediaType.example !== undefined)
|
|
191
|
+
return mediaType.example;
|
|
192
|
+
// 2. Named examples — first one's value
|
|
193
|
+
if (mediaType.examples) {
|
|
194
|
+
for (const ex of Object.values(mediaType.examples)) {
|
|
195
|
+
if (ex && 'value' in ex && ex.value !== undefined)
|
|
196
|
+
return ex.value;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// 3. Schema example
|
|
200
|
+
if (mediaType.schema) {
|
|
201
|
+
const schema = mediaType.schema;
|
|
202
|
+
if (schema.example !== undefined)
|
|
203
|
+
return schema.example;
|
|
204
|
+
}
|
|
205
|
+
// 4. Generate from schema
|
|
206
|
+
if (mediaType.schema) {
|
|
207
|
+
return generateFromSchema(mediaType.schema);
|
|
208
|
+
}
|
|
209
|
+
return {};
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=route-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-extractor.js","sourceRoot":"","sources":["../../src/mock-server/route-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock Server — Types
|
|
3
|
+
*/
|
|
4
|
+
import type { USDDocument } from '../usd/spec/types.js';
|
|
5
|
+
/** Accepted spec input: raw object (OpenAPI 3.x or USD) */
|
|
6
|
+
export type SpecDocument = USDDocument | Record<string, unknown>;
|
|
7
|
+
export interface MockServerOptions {
|
|
8
|
+
/** OpenAPI/USD spec: raw JSON/YAML string, parsed object, or file path */
|
|
9
|
+
spec: string | SpecDocument;
|
|
10
|
+
/** HTTP port. Default: 3000 */
|
|
11
|
+
port?: number;
|
|
12
|
+
/** Hostname. Default: '0.0.0.0' */
|
|
13
|
+
hostname?: string;
|
|
14
|
+
/** Simulate network latency in ms */
|
|
15
|
+
delay?: number;
|
|
16
|
+
/** Validate incoming request bodies against schema. Default: true */
|
|
17
|
+
validateRequests?: boolean;
|
|
18
|
+
/** Which protocols to enable beyond HTTP (only if USD doc) */
|
|
19
|
+
protocols?: {
|
|
20
|
+
/** Enable WebSocket procedures. Default: false */
|
|
21
|
+
ws?: boolean;
|
|
22
|
+
/** Enable JSON-RPC on /rpc. Default: false */
|
|
23
|
+
jsonrpc?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** Called once listening */
|
|
26
|
+
onListen?: () => void;
|
|
27
|
+
}
|
|
28
|
+
export interface MockModuleOptions {
|
|
29
|
+
/** Simulate network latency in ms */
|
|
30
|
+
delay?: number;
|
|
31
|
+
/** Validate incoming request bodies against schema. Default: true */
|
|
32
|
+
validateRequests?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/** A resolved HTTP route ready to be served */
|
|
35
|
+
export interface MockRoute {
|
|
36
|
+
/** HTTP method (GET, POST, etc.) */
|
|
37
|
+
method: string;
|
|
38
|
+
/** Express-style path pattern (/users/:id) */
|
|
39
|
+
pathPattern: string;
|
|
40
|
+
/** OpenAPI operationId */
|
|
41
|
+
operationId?: string;
|
|
42
|
+
/** Resolved parameters */
|
|
43
|
+
parameters: ResolvedParam[];
|
|
44
|
+
/** JSON Schema for request body validation */
|
|
45
|
+
requestBodySchema?: Record<string, unknown>;
|
|
46
|
+
/** Whether request body is required */
|
|
47
|
+
requestBodyRequired?: boolean;
|
|
48
|
+
/** Pre-resolved mock response */
|
|
49
|
+
response: MockResponse;
|
|
50
|
+
}
|
|
51
|
+
export interface ResolvedParam {
|
|
52
|
+
name: string;
|
|
53
|
+
in: 'path' | 'query' | 'header' | 'cookie';
|
|
54
|
+
required?: boolean;
|
|
55
|
+
schema?: Record<string, unknown>;
|
|
56
|
+
example?: unknown;
|
|
57
|
+
}
|
|
58
|
+
export interface MockResponse {
|
|
59
|
+
statusCode: number;
|
|
60
|
+
contentType: string;
|
|
61
|
+
body: unknown;
|
|
62
|
+
headers?: Record<string, string>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mock-server/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhE,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;IAC3B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,8DAA8D;IAC9D,SAAS,CAAC,EAAE;QACV,kDAAkD;QAClD,EAAE,CAAC,EAAE,OAAO,CAAA;QACZ,8CAA8C;QAC9C,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAA;IACnB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mock-server/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime helpers for contract-bound policy metadata.
|
|
3
|
+
*/
|
|
4
|
+
import type { Interceptor } from '../types/index.js';
|
|
5
|
+
import type { ContractPolicies } from '../types/policies.js';
|
|
6
|
+
export declare function createPolicyInterceptors(policies?: ContractPolicies): Interceptor[];
|
|
7
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/policy/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAqB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,sBAAsB,CAAA;AAgE7B,wBAAgB,wBAAwB,CACtC,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,WAAW,EAAE,CA2Bf"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime helpers for contract-bound policy metadata.
|
|
3
|
+
*/
|
|
4
|
+
import { RaffelError } from '../core/router.js';
|
|
5
|
+
import { createRateLimitInterceptor } from '../middleware/interceptors/rate-limit.js';
|
|
6
|
+
import { createTimeoutInterceptor } from '../middleware/interceptors/timeout.js';
|
|
7
|
+
import { getAuthRoles, getAuthScopes, getPrincipalId } from '../types/index.js';
|
|
8
|
+
import { normalizeContractPolicies } from '../types/policies.js';
|
|
9
|
+
function createContractAuthPolicyInterceptor(policy) {
|
|
10
|
+
const mode = policy.mode ?? 'required';
|
|
11
|
+
const requiredRoles = policy.roles ?? [];
|
|
12
|
+
const requiredScopes = policy.scopes ?? [];
|
|
13
|
+
return async (_envelope, ctx, next) => {
|
|
14
|
+
const auth = ctx.auth;
|
|
15
|
+
const isAuthenticated = auth?.authenticated === true && typeof auth.principal === 'string';
|
|
16
|
+
if (!isAuthenticated) {
|
|
17
|
+
if (mode === 'optional') {
|
|
18
|
+
return next();
|
|
19
|
+
}
|
|
20
|
+
throw new RaffelError('UNAUTHENTICATED', 'Authentication required');
|
|
21
|
+
}
|
|
22
|
+
if (requiredRoles.length > 0) {
|
|
23
|
+
const roles = [...getAuthRoles(ctx.auth)];
|
|
24
|
+
const allowed = requiredRoles.some((role) => roles.includes(role));
|
|
25
|
+
if (!allowed) {
|
|
26
|
+
throw new RaffelError('PERMISSION_DENIED', 'Required role policy not satisfied', {
|
|
27
|
+
requiredRoles,
|
|
28
|
+
roles,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (requiredScopes.length > 0) {
|
|
33
|
+
const scopes = [...getAuthScopes(ctx.auth)];
|
|
34
|
+
const allowed = requiredScopes.some((scope) => scopes.includes(scope));
|
|
35
|
+
if (!allowed) {
|
|
36
|
+
throw new RaffelError('PERMISSION_DENIED', 'Required scope policy not satisfied', {
|
|
37
|
+
requiredScopes,
|
|
38
|
+
scopes,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return next();
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function createRateLimitKeyGenerator(policy) {
|
|
46
|
+
switch (policy.key) {
|
|
47
|
+
case 'user':
|
|
48
|
+
return (_envelope, ctx) => getPrincipalId(ctx.auth?.principal) ?? `req:${ctx.requestId}`;
|
|
49
|
+
case 'client':
|
|
50
|
+
return (envelope, ctx) => envelope.metadata['x-client-id']
|
|
51
|
+
|| envelope.metadata['x-forwarded-for']
|
|
52
|
+
|| getPrincipalId(ctx.auth?.principal)
|
|
53
|
+
|| `req:${ctx.requestId}`;
|
|
54
|
+
case 'request':
|
|
55
|
+
return (_envelope, ctx) => `req:${ctx.requestId}`;
|
|
56
|
+
default:
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function createPolicyInterceptors(policies) {
|
|
61
|
+
const normalized = normalizeContractPolicies(policies);
|
|
62
|
+
if (!normalized)
|
|
63
|
+
return [];
|
|
64
|
+
const interceptors = [];
|
|
65
|
+
if (normalized.auth) {
|
|
66
|
+
interceptors.push(createContractAuthPolicyInterceptor(normalized.auth));
|
|
67
|
+
}
|
|
68
|
+
if (normalized.timeout) {
|
|
69
|
+
interceptors.push(createTimeoutInterceptor({ defaultMs: normalized.timeout.timeoutMs }));
|
|
70
|
+
}
|
|
71
|
+
if (normalized.rateLimit) {
|
|
72
|
+
interceptors.push(createRateLimitInterceptor({
|
|
73
|
+
windowMs: normalized.rateLimit.windowMs,
|
|
74
|
+
maxRequests: normalized.rateLimit.maxRequests,
|
|
75
|
+
...(createRateLimitKeyGenerator(normalized.rateLimit) && {
|
|
76
|
+
keyGenerator: createRateLimitKeyGenerator(normalized.rateLimit),
|
|
77
|
+
}),
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
return interceptors;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/policy/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAM/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAEhE,SAAS,mCAAmC,CAAC,MAA0B;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAA;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;IACxC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;IAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACrB,MAAM,eAAe,GAAG,IAAI,EAAE,aAAa,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAA;QAE1F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;YACD,MAAM,IAAI,WAAW,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAA;QACrE,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YAClE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE,oCAAoC,EAAE;oBAC/E,aAAa;oBACb,KAAK;iBACN,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YACtE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE,qCAAqC,EAAE;oBAChF,cAAc;oBACd,MAAM;iBACP,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,MAA+B;IAE/B,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;QAC1F,KAAK,QAAQ;YACX,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CACvB,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;mBAC7B,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;mBACpC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;mBACnC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;QAC7B,KAAK,SAAS;YACZ,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;QACnD;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAA2B;IAE3B,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACtD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IAE1B,MAAM,YAAY,GAAkB,EAAE,CAAA;IAEtC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC,mCAAmC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC1F,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,YAAY,CAAC,IAAI,CACf,0BAA0B,CAAC;YACzB,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ;YACvC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW;YAC7C,GAAG,CAAC,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI;gBACvD,YAAY,EAAE,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAC;aAChE,CAAC;SACH,CAAC,CACH,CAAA;IACH,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ports — Hexagonal Architecture Boundaries
|
|
3
|
+
*
|
|
4
|
+
* This module exports all port interfaces (contracts) that define the boundaries
|
|
5
|
+
* between Raffel's core domain and external infrastructure.
|
|
6
|
+
*
|
|
7
|
+
* Outbound ports: interfaces that the core requires, implemented by adapters.
|
|
8
|
+
* (e.g., LoggerPort, SessionStore, CacheDriver, RateLimitDriver, etc.)
|
|
9
|
+
*/
|
|
10
|
+
export type { LoggerPort, LoggerFactory, LogData } from './outbound/logger.js';
|
|
11
|
+
export type { SessionStore, SessionData, Session } from './outbound/session-store.js';
|
|
12
|
+
export type { RateLimitDriver, RateLimitRecord } from './outbound/rate-limit-driver.js';
|
|
13
|
+
export type { CacheDriver, CacheEntry, CacheGetResult, CacheStats } from './outbound/cache-driver.js';
|
|
14
|
+
export type { CacheStore } from './outbound/cache-store.js';
|
|
15
|
+
export type { EventDeliveryStore } from './outbound/event-store.js';
|
|
16
|
+
export type { ValidatorAdapter, ValidationResult, ValidationErrorDetails } from './outbound/validator.js';
|
|
17
|
+
export type { ChannelPresencePort } from './outbound/channel-presence.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAGrF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAGvF,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGrG,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAGzG,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ports — Hexagonal Architecture Boundaries
|
|
3
|
+
*
|
|
4
|
+
* This module exports all port interfaces (contracts) that define the boundaries
|
|
5
|
+
* between Raffel's core domain and external infrastructure.
|
|
6
|
+
*
|
|
7
|
+
* Outbound ports: interfaces that the core requires, implemented by adapters.
|
|
8
|
+
* (e.g., LoggerPort, SessionStore, CacheDriver, RateLimitDriver, etc.)
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Driver Port
|
|
3
|
+
*
|
|
4
|
+
* Canonical interface for cache backends.
|
|
5
|
+
* Re-exports from cache/types.ts to establish the port
|
|
6
|
+
* as the single source of truth.
|
|
7
|
+
*/
|
|
8
|
+
export type { CacheDriver, CacheEntry, CacheGetResult, CacheStats } from '../../cache/types.js';
|
|
9
|
+
//# sourceMappingURL=cache-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-driver.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/cache-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-driver.js","sourceRoot":"","sources":["../../../src/ports/outbound/cache-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-store.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/cache-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-store.js","sourceRoot":"","sources":["../../../src/ports/outbound/cache-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel Presence Port
|
|
3
|
+
*
|
|
4
|
+
* Interface for channel state management and presence tracking.
|
|
5
|
+
* Extracted from the ChannelManager to allow alternative implementations
|
|
6
|
+
* (e.g., Redis-backed presence for multi-instance deployments).
|
|
7
|
+
*/
|
|
8
|
+
import type { ChannelMember } from '../../channels/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Channel presence port — manages member tracking in presence channels.
|
|
11
|
+
*
|
|
12
|
+
* The default in-memory implementation lives in `channels/channel-manager.ts`.
|
|
13
|
+
* Alternative implementations (Redis, S3db) can satisfy this port for
|
|
14
|
+
* multi-instance deployments where presence state must be shared.
|
|
15
|
+
*/
|
|
16
|
+
export interface ChannelPresencePort {
|
|
17
|
+
/** Get all members in a presence channel */
|
|
18
|
+
getMembers(channel: string): ChannelMember[];
|
|
19
|
+
/** Get a specific member */
|
|
20
|
+
getMember(channel: string, socketId: string): ChannelMember | undefined;
|
|
21
|
+
/** Get member count */
|
|
22
|
+
getMemberCount(channel: string): number;
|
|
23
|
+
/** Add a member to a channel */
|
|
24
|
+
addMember(channel: string, member: ChannelMember): void;
|
|
25
|
+
/** Remove a member from a channel */
|
|
26
|
+
removeMember(channel: string, socketId: string): void;
|
|
27
|
+
/** Check if a member exists */
|
|
28
|
+
hasMember(channel: string, socketId: string): boolean;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=channel-presence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-presence.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/channel-presence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAAA;IAE5C,4BAA4B;IAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAEvE,uBAAuB;IACvB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvC,gCAAgC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAEvD,qCAAqC;IACrC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAErD,+BAA+B;IAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;CACtD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel Presence Port
|
|
3
|
+
*
|
|
4
|
+
* Interface for channel state management and presence tracking.
|
|
5
|
+
* Extracted from the ChannelManager to allow alternative implementations
|
|
6
|
+
* (e.g., Redis-backed presence for multi-instance deployments).
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=channel-presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-presence.js","sourceRoot":"","sources":["../../../src/ports/outbound/channel-presence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Delivery Store Port
|
|
3
|
+
*
|
|
4
|
+
* Canonical interface for event delivery state persistence.
|
|
5
|
+
* Re-exports from core/event-delivery.ts to establish the port
|
|
6
|
+
* as the single source of truth.
|
|
7
|
+
*/
|
|
8
|
+
export type { EventDeliveryStore } from '../../core/event-delivery.js';
|
|
9
|
+
//# sourceMappingURL=event-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/event-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../../src/ports/outbound/event-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Port
|
|
3
|
+
*
|
|
4
|
+
* Canonical logging interface for Raffel's hexagonal architecture.
|
|
5
|
+
* Any logger implementation (pino, winston, console, etc.) can satisfy this port.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Structured log data — arbitrary key/value pairs for structured logging.
|
|
9
|
+
*/
|
|
10
|
+
export type LogData = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Logger port — the minimal logging contract used throughout Raffel core.
|
|
13
|
+
*
|
|
14
|
+
* All core and application modules depend on this interface, never on a
|
|
15
|
+
* concrete logger (e.g., pino). Concrete adapters live in `adapters/outbound/logger/`.
|
|
16
|
+
*/
|
|
17
|
+
export interface LoggerPort {
|
|
18
|
+
debug(msg: string): void;
|
|
19
|
+
debug(data: LogData, msg: string): void;
|
|
20
|
+
info(msg: string): void;
|
|
21
|
+
info(data: LogData, msg: string): void;
|
|
22
|
+
warn(msg: string): void;
|
|
23
|
+
warn(data: LogData, msg: string): void;
|
|
24
|
+
error(msg: string): void;
|
|
25
|
+
error(data: LogData, msg: string): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Logger factory — creates child loggers scoped to a component.
|
|
29
|
+
*/
|
|
30
|
+
export type LoggerFactory = (component: string) => LoggerPort;
|
|
31
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/ports/outbound/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limit Driver Port
|
|
3
|
+
*
|
|
4
|
+
* Canonical interface for rate limiting backends.
|
|
5
|
+
* Re-exports from rate-limit/types.ts to establish the port
|
|
6
|
+
* as the single source of truth.
|
|
7
|
+
*/
|
|
8
|
+
export type { RateLimitDriver, RateLimitRecord } from '../../rate-limit/types.js';
|
|
9
|
+
//# sourceMappingURL=rate-limit-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit-driver.d.ts","sourceRoot":"","sources":["../../../src/ports/outbound/rate-limit-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA"}
|