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
|
@@ -42,18 +42,27 @@ export const patterns = [
|
|
|
42
42
|
|
|
43
43
|
const server = createServer({ port: 3000 })
|
|
44
44
|
.procedure('users.list')
|
|
45
|
-
.handler(async (
|
|
46
|
-
|
|
45
|
+
.handler(async (_input, ctx) => {
|
|
46
|
+
const services = ctx.services as {
|
|
47
|
+
users: { list(): Promise<unknown[]> }
|
|
48
|
+
}
|
|
49
|
+
return services.users.list()
|
|
47
50
|
})
|
|
48
51
|
|
|
49
52
|
.procedure('users.get')
|
|
50
53
|
.handler(async ({ id }, ctx) => {
|
|
51
|
-
|
|
54
|
+
const services = ctx.services as {
|
|
55
|
+
users: { get(id: string): Promise<unknown> }
|
|
56
|
+
}
|
|
57
|
+
return services.users.get(id)
|
|
52
58
|
})
|
|
53
59
|
|
|
54
60
|
.procedure('users.create')
|
|
55
61
|
.handler(async (input, ctx) => {
|
|
56
|
-
|
|
62
|
+
const services = ctx.services as {
|
|
63
|
+
users: { create(data: unknown): Promise<unknown> }
|
|
64
|
+
}
|
|
65
|
+
return services.users.create(input)
|
|
57
66
|
})
|
|
58
67
|
|
|
59
68
|
await server.start()`,
|
|
@@ -81,7 +90,10 @@ const server = createServer({ port: 3000 })
|
|
|
81
90
|
email: z.string()
|
|
82
91
|
}))
|
|
83
92
|
.handler(async (input, ctx) => {
|
|
84
|
-
|
|
93
|
+
const services = ctx.services as {
|
|
94
|
+
users: { create(data: unknown): Promise<unknown> }
|
|
95
|
+
}
|
|
96
|
+
return services.users.create(input)
|
|
85
97
|
})
|
|
86
98
|
|
|
87
99
|
await server.start()`,
|
|
@@ -381,7 +393,7 @@ const server = createServer()
|
|
|
381
393
|
// === Pattern 4: Providers (Dependency Injection) ===
|
|
382
394
|
{
|
|
383
395
|
name: 'Providers (Dependency Injection)',
|
|
384
|
-
description: 'Providers register singleton dependencies that are initialized at server.start()
|
|
396
|
+
description: 'Providers register singleton dependencies that are initialized at server.start(). In new code, prefer consuming them via ctx.services instead of broad top-level bags.',
|
|
385
397
|
components: ['provide', 'ProviderFactory', 'onShutdown'],
|
|
386
398
|
signature: `.provide('name', factoryFn, options?)
|
|
387
399
|
|
|
@@ -393,9 +405,11 @@ type ProviderFactory<T> = (deps: ResolvedProviders) => T | Promise<T>
|
|
|
393
405
|
onShutdown?: (instance: T) => Promise<void> // Cleanup on server.stop()
|
|
394
406
|
}
|
|
395
407
|
|
|
396
|
-
//
|
|
397
|
-
ctx.
|
|
398
|
-
|
|
408
|
+
// Preferred access in handlers
|
|
409
|
+
const services = ctx.services as {
|
|
410
|
+
db: PrismaClient
|
|
411
|
+
redis: Redis
|
|
412
|
+
}`,
|
|
399
413
|
correctExamples: [
|
|
400
414
|
{
|
|
401
415
|
title: 'Database Provider',
|
|
@@ -415,8 +429,8 @@ const server = createServer()
|
|
|
415
429
|
|
|
416
430
|
.procedure('users.list')
|
|
417
431
|
.handler(async (input, ctx) => {
|
|
418
|
-
|
|
419
|
-
return await
|
|
432
|
+
const services = ctx.services as { db: PrismaClient }
|
|
433
|
+
return await services.db.users.findMany()
|
|
420
434
|
})`,
|
|
421
435
|
},
|
|
422
436
|
{
|
|
@@ -519,22 +533,25 @@ import { z } from 'zod'
|
|
|
519
533
|
export const usersModule = createRouterModule()
|
|
520
534
|
.procedure('list')
|
|
521
535
|
.output(z.array(UserSchema))
|
|
522
|
-
.handler(async (
|
|
523
|
-
|
|
536
|
+
.handler(async (_input, ctx) => {
|
|
537
|
+
const services = ctx.services as { users: { list(): Promise<unknown[]> } }
|
|
538
|
+
return services.users.list()
|
|
524
539
|
})
|
|
525
540
|
|
|
526
541
|
.procedure('get')
|
|
527
542
|
.input(z.object({ id: z.string() }))
|
|
528
543
|
.output(UserSchema)
|
|
529
544
|
.handler(async ({ id }, ctx) => {
|
|
530
|
-
|
|
545
|
+
const services = ctx.services as { users: { get(id: string): Promise<unknown> } }
|
|
546
|
+
return services.users.get(id)
|
|
531
547
|
})
|
|
532
548
|
|
|
533
549
|
.procedure('create')
|
|
534
550
|
.input(CreateUserSchema)
|
|
535
551
|
.output(UserSchema)
|
|
536
552
|
.handler(async (input, ctx) => {
|
|
537
|
-
|
|
553
|
+
const services = ctx.services as { users: { create(data: unknown): Promise<unknown> } }
|
|
554
|
+
return services.users.create(input)
|
|
538
555
|
})`,
|
|
539
556
|
},
|
|
540
557
|
{
|
|
@@ -560,10 +577,16 @@ import { createRouterModule } from 'raffel'
|
|
|
560
577
|
|
|
561
578
|
export default createRouterModule()
|
|
562
579
|
.procedure('list')
|
|
563
|
-
.handler(async (_, ctx) =>
|
|
580
|
+
.handler(async (_, ctx) => {
|
|
581
|
+
const services = ctx.services as { users: { list(): Promise<unknown[]> } }
|
|
582
|
+
return services.users.list()
|
|
583
|
+
})
|
|
564
584
|
|
|
565
585
|
.procedure('create')
|
|
566
|
-
.handler(async (input, ctx) =>
|
|
586
|
+
.handler(async (input, ctx) => {
|
|
587
|
+
const services = ctx.services as { users: { create(data: unknown): Promise<unknown> } }
|
|
588
|
+
return services.users.create(input)
|
|
589
|
+
})
|
|
567
590
|
|
|
568
591
|
// Server auto-discovers:
|
|
569
592
|
// src/http/users.ts → users.list, users.create
|
|
@@ -642,7 +665,10 @@ const server = createServer()
|
|
|
642
665
|
.output(UserOutput)
|
|
643
666
|
.handler(async (input, ctx) => {
|
|
644
667
|
// input is typed as { name: string, email: string, age?: number }
|
|
645
|
-
|
|
668
|
+
const services = ctx.services as {
|
|
669
|
+
users: { create(args: { data: unknown }): Promise<unknown> }
|
|
670
|
+
}
|
|
671
|
+
return await services.users.create({ data: input })
|
|
646
672
|
})`,
|
|
647
673
|
},
|
|
648
674
|
{
|
|
@@ -663,7 +689,10 @@ const CreateOrderInput = yup.object({
|
|
|
663
689
|
server.procedure('orders.create')
|
|
664
690
|
.input(CreateOrderInput)
|
|
665
691
|
.handler(async (input, ctx) => {
|
|
666
|
-
|
|
692
|
+
const services = ctx.services as {
|
|
693
|
+
orders: { create(args: { data: unknown }): Promise<unknown> }
|
|
694
|
+
}
|
|
695
|
+
return await services.orders.create({ data: input })
|
|
667
696
|
})`,
|
|
668
697
|
},
|
|
669
698
|
{
|
|
@@ -740,7 +769,8 @@ onError: (error, protocol, ctx) => { ... }`,
|
|
|
740
769
|
|
|
741
770
|
server.procedure('users.get')
|
|
742
771
|
.handler(async ({ id }, ctx) => {
|
|
743
|
-
const
|
|
772
|
+
const services = ctx.services as { users: { get(id: string): Promise<unknown> } }
|
|
773
|
+
const user = await services.users.get(id)
|
|
744
774
|
|
|
745
775
|
if (!user) {
|
|
746
776
|
throw new RaffelError(
|
|
@@ -755,7 +785,13 @@ server.procedure('users.get')
|
|
|
755
785
|
|
|
756
786
|
server.procedure('users.create')
|
|
757
787
|
.handler(async (input, ctx) => {
|
|
758
|
-
const
|
|
788
|
+
const services = ctx.services as {
|
|
789
|
+
users: {
|
|
790
|
+
findByEmail(email: string): Promise<unknown>
|
|
791
|
+
create(data: unknown): Promise<unknown>
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
const existing = await services.users.findByEmail(input.email)
|
|
759
795
|
|
|
760
796
|
if (existing) {
|
|
761
797
|
throw new RaffelError(
|
|
@@ -765,7 +801,7 @@ server.procedure('users.create')
|
|
|
765
801
|
)
|
|
766
802
|
}
|
|
767
803
|
|
|
768
|
-
return await
|
|
804
|
+
return await services.users.create(input)
|
|
769
805
|
})`,
|
|
770
806
|
},
|
|
771
807
|
{
|
|
@@ -778,11 +814,14 @@ server.procedure('orders.process')
|
|
|
778
814
|
throw Errors.unauthenticated('Login required')
|
|
779
815
|
}
|
|
780
816
|
|
|
781
|
-
if (!ctx.auth?.
|
|
817
|
+
if (!ctx.auth?.roles?.includes('admin')) {
|
|
782
818
|
throw Errors.permissionDenied('Admin access required')
|
|
783
819
|
}
|
|
784
820
|
|
|
785
|
-
const
|
|
821
|
+
const services = ctx.services as {
|
|
822
|
+
orders: { get(id: string): Promise<unknown> }
|
|
823
|
+
}
|
|
824
|
+
const order = await services.orders.get(input.id)
|
|
786
825
|
if (!order) {
|
|
787
826
|
throw Errors.notFound(\`Order \${input.id} not found\`)
|
|
788
827
|
}
|
|
@@ -815,7 +854,12 @@ server.procedure('orders.process')
|
|
|
815
854
|
code: `server.procedure('payments.charge')
|
|
816
855
|
.error(async (error, ctx) => {
|
|
817
856
|
// Payment-specific error handling
|
|
818
|
-
|
|
857
|
+
const services = ctx.services as {
|
|
858
|
+
payments: {
|
|
859
|
+
update(args: { where: { id: string }, data: Record<string, unknown> }): Promise<unknown>
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
await services.payments.update({
|
|
819
863
|
where: { id: ctx.paymentId },
|
|
820
864
|
data: { status: 'failed', error: error.message }
|
|
821
865
|
})
|
|
@@ -912,7 +956,10 @@ server.stream('data.export')
|
|
|
912
956
|
})
|
|
913
957
|
|
|
914
958
|
// Producer
|
|
915
|
-
const
|
|
959
|
+
const services = ctx.services as {
|
|
960
|
+
records: { streamCursor(input: unknown): AsyncIterable<unknown> }
|
|
961
|
+
}
|
|
962
|
+
const cursor = services.records.streamCursor(input)
|
|
916
963
|
for await (const record of cursor) {
|
|
917
964
|
// write() returns false if buffer is full
|
|
918
965
|
const ready = stream.write(record)
|
|
@@ -939,7 +986,10 @@ server.stream('data.export')
|
|
|
939
986
|
;(async () => {
|
|
940
987
|
for await (const message of inputStream) {
|
|
941
988
|
// Process and broadcast
|
|
942
|
-
const
|
|
989
|
+
const services = ctx.services as {
|
|
990
|
+
messages: { create(data: unknown): Promise<unknown> }
|
|
991
|
+
}
|
|
992
|
+
const saved = await services.messages.create(message)
|
|
943
993
|
output.write({ type: 'message', data: saved })
|
|
944
994
|
}
|
|
945
995
|
})()
|
|
@@ -1005,7 +1055,7 @@ server.stream('data.process')
|
|
|
1005
1055
|
// Emit from a procedure
|
|
1006
1056
|
server.procedure('pages.view')
|
|
1007
1057
|
.handler(async (input, ctx) => {
|
|
1008
|
-
await ctx.emit('analytics.pageView', { page: input.path, userId: ctx.auth?.
|
|
1058
|
+
await ctx.emit('analytics.pageView', { page: input.path, userId: ctx.auth?.principalId })
|
|
1009
1059
|
return { ok: true }
|
|
1010
1060
|
})`,
|
|
1011
1061
|
},
|
|
@@ -1050,7 +1100,10 @@ server.procedure('pages.view')
|
|
|
1050
1100
|
} catch (error) {
|
|
1051
1101
|
if (error.code === 'DEVICE_NOT_REGISTERED') {
|
|
1052
1102
|
// Don't retry - device is invalid
|
|
1053
|
-
|
|
1103
|
+
const services = ctx.services as {
|
|
1104
|
+
devices: { delete(args: { where: { id: string } }): Promise<unknown> }
|
|
1105
|
+
}
|
|
1106
|
+
await services.devices.delete({ where: { id: payload.deviceId } })
|
|
1054
1107
|
ack() // Acknowledge to stop retries
|
|
1055
1108
|
}
|
|
1056
1109
|
// Other errors: don't ack, will retry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/mcp/docs/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,oCAAoC;IACpC;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EACT,uKAAuK;QACzK,UAAU,EAAE;YACV,cAAc;YACd,WAAW;YACX,QAAQ;YACR,OAAO;YACP,KAAK;YACL,OAAO;YACP,OAAO;YACP,SAAS;SACV;QACD,SAAS,EAAE;;;;;;;;;;;;;;;qDAesC;QACjD,eAAe,EAAE;YACf;gBACE,KAAK,EAAE,8BAA8B;gBACrC,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/mcp/docs/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Getting started with Raffel - from zero to production-ready API.
|
|
5
5
|
*/
|
|
6
|
-
export declare const quickstartGuide = "# Raffel Quickstart\n\n## Installation\n\n```bash\npnpm add raffel\n# or\nnpm install raffel\n```\n\n## Basic Server\n\n```typescript\nimport { createServer } from 'raffel'\n\nconst server = createServer({ port: 3000 })\n .procedure('hello')\n .handler(async (input, ctx) => {\n return { message: `Hello, ${input.name || 'World'}!` }\n })\n\nawait server.start()\nconsole.log('Server running on http://localhost:3000')\n```\n\n## Core Concepts\n\n### 1. Procedures (RPC Endpoints)\n\n```typescript\n// Unary RPC: Input \u2192 Output\nserver.procedure('users.create')\n .handler(async (input, ctx) => {\n
|
|
6
|
+
export declare const quickstartGuide = "# Raffel Quickstart\n\n## Installation\n\n```bash\nnpm i -g raffel\n# or use npx without a global install\npnpm add raffel\nnpx raffel new api my-service\ncd my-service\npnpm install\nnpx raffel inspect src/server.ts\nnpx raffel doctor src/server.ts\nnpx raffel playground src/server.ts --port 4301\nnpx raffel contract-tests src/server.ts\npnpm dev\n# or\nnpm install raffel\n```\n\n## Basic Server\n\nThe recommended flow is:\n\n```bash\nnpx raffel new api my-service\ncd my-service\nnpx raffel inspect src/server.ts\nnpx raffel doctor src/server.ts\nnpx raffel playground src/server.ts --port 4301\nnpx raffel contract-tests src/server.ts\npnpm dev\n```\n\nIf you want the smallest possible manual server, start here:\n\n```typescript\nimport { createServer } from 'raffel'\n\nconst server = createServer({ port: 3000 })\n .procedure('hello')\n .handler(async (input, ctx) => {\n return { message: `Hello, ${input.name || 'World'}!` }\n })\n\nawait server.start()\nconsole.log('Server running on http://localhost:3000')\n```\n\n## Core Concepts\n\n### 1. Procedures (RPC Endpoints)\n\n```typescript\n// Unary RPC: Input \u2192 Output\nserver.procedure('users.create')\n .handler(async (input, ctx) => {\n const services = ctx.services as {\n users: { create(data: unknown): Promise<unknown> }\n }\n return services.users.create(input)\n })\n```\n\n### 2. Input/Output Validation\n\n```typescript\nimport { z } from 'zod'\nimport { registerValidator, createZodAdapter } from 'raffel'\n\nregisterValidator(createZodAdapter(z))\n\nserver.procedure('users.create')\n .input(z.object({\n name: z.string().min(2),\n email: z.string().email()\n }))\n .output(z.object({\n id: z.string(),\n name: z.string(),\n email: z.string()\n }))\n .handler(async (input, ctx) => {\n // input is validated and typed\n const services = ctx.services as {\n users: { create(data: unknown): Promise<unknown> }\n }\n return services.users.create(input)\n })\n```\n\n### 3. Context & Authentication\n\n```typescript\nimport { createAuthMiddleware, createBearerStrategy } from 'raffel'\n\nserver\n .use(createAuthMiddleware({\n strategies: [createBearerStrategy({\n verify: async (token) => {\n const payload = await verifyJwt(token)\n return payload ? { authenticated: true, principal: payload.sub, claims: payload } : null\n }\n })]\n }))\n\n .procedure('users.me')\n .handler(async (_input, ctx) => {\n return { userId: ctx.auth?.principalId }\n })\n```\n\n### 4. Streaming\n\n```typescript\n// Server sends multiple responses\nserver.stream('logs.tail')\n .handler(async function* (input, ctx) {\n while (!ctx.signal.aborted) {\n const logs = await getNewLogs(input.filter)\n for (const log of logs) {\n yield log\n }\n await sleep(1000)\n }\n })\n```\n\n### 5. Events\n\n```typescript\n// Fire-and-forget with retries\nserver.event('orders.notify')\n .delivery('at-least-once')\n .retryPolicy({ maxAttempts: 5 })\n .handler(async (payload, ctx, ack) => {\n await sendNotification(payload)\n ack() // Acknowledge success\n })\n```\n\n### 6. Multiple Protocols\n\n```typescript\nconst server = createServer({ port: 3000 })\n // HTTP is default\n .websocket({ path: '/ws' }) // Add WebSocket\n .jsonrpc({ path: '/rpc' }) // Add JSON-RPC\n .grpc({ port: 50051 }) // Add gRPC\n .configureGraphQL({ path: '/graphql' }) // Add GraphQL\n```\n\n## HTTP Mapping\n\n| Handler | HTTP | Path |\n|---------|------|------|\n| procedure | POST | {basePath}/{name} |\n| stream | GET (SSE) | {basePath}/streams/{name} |\n| event | POST | {basePath}/events/{name} |\n\nBase path defaults to `/`. Set `basePath` in `createServer` to add a prefix.\n\n## Complete Example\n\n```typescript\nimport { createServer, registerValidator, createZodAdapter, createAuthMiddleware, createBearerStrategy, RaffelError } from 'raffel'\nimport { z } from 'zod'\n\n// Setup validation\nregisterValidator(createZodAdapter(z))\n\nconst server = createServer({ port: 3000 })\n // Providers (DI)\n .provide('users', async () => createUsersService())\n\n // Global middleware\n .use(createAuthMiddleware({\n strategies: [createBearerStrategy({ verify: verifyToken })]\n }))\n\n // Procedures\n .procedure('users.list')\n .output(z.array(UserSchema))\n .handler(async (_input, ctx) => {\n const services = ctx.services as {\n users: { list(): Promise<unknown[]> }\n }\n return services.users.list()\n })\n\n .procedure('users.get')\n .input(z.object({ id: z.string() }))\n .output(UserSchema)\n .handler(async ({ id }, ctx) => {\n const services = ctx.services as {\n users: { get(id: string): Promise<unknown> }\n }\n const user = await services.users.get(id)\n if (!user) throw new RaffelError('NOT_FOUND', `User ${id} not found`)\n return user\n })\n\n .procedure('users.create')\n .input(CreateUserSchema)\n .output(UserSchema)\n .handler(async (input, ctx) => {\n const services = ctx.services as {\n users: { create(data: unknown): Promise<unknown> }\n }\n return services.users.create(input)\n })\n\nawait server.start()\n```\n\n## Next Steps\n\n- **Interceptors**: Add rate limiting, caching, metrics\n- **Streaming**: Real-time data with generators\n- **Events**: Background processing with delivery guarantees\n- **Multi-protocol**: Same handlers on HTTP, WebSocket, gRPC, TCP, and UDP\n- **Observability**: Metrics and distributed tracing\n- **Spec-driven mocks**: Start mock endpoints from OpenAPI/USD with `createMockServer()`\n";
|
|
7
7
|
export declare const boilerplates: {
|
|
8
8
|
'basic-api': {
|
|
9
9
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../../src/mcp/docs/quickstart.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../../src/mcp/docs/quickstart.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,ykLA+N3B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmexB,CAAA;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,OAAO,YAAY,GAC9B,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,GAAG,SAAS,CAE9D;AAED,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAM9F"}
|
|
@@ -8,13 +8,37 @@ export const quickstartGuide = `# Raffel Quickstart
|
|
|
8
8
|
## Installation
|
|
9
9
|
|
|
10
10
|
\`\`\`bash
|
|
11
|
+
npm i -g raffel
|
|
12
|
+
# or use npx without a global install
|
|
11
13
|
pnpm add raffel
|
|
14
|
+
npx raffel new api my-service
|
|
15
|
+
cd my-service
|
|
16
|
+
pnpm install
|
|
17
|
+
npx raffel inspect src/server.ts
|
|
18
|
+
npx raffel doctor src/server.ts
|
|
19
|
+
npx raffel playground src/server.ts --port 4301
|
|
20
|
+
npx raffel contract-tests src/server.ts
|
|
21
|
+
pnpm dev
|
|
12
22
|
# or
|
|
13
23
|
npm install raffel
|
|
14
24
|
\`\`\`
|
|
15
25
|
|
|
16
26
|
## Basic Server
|
|
17
27
|
|
|
28
|
+
The recommended flow is:
|
|
29
|
+
|
|
30
|
+
\`\`\`bash
|
|
31
|
+
npx raffel new api my-service
|
|
32
|
+
cd my-service
|
|
33
|
+
npx raffel inspect src/server.ts
|
|
34
|
+
npx raffel doctor src/server.ts
|
|
35
|
+
npx raffel playground src/server.ts --port 4301
|
|
36
|
+
npx raffel contract-tests src/server.ts
|
|
37
|
+
pnpm dev
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
If you want the smallest possible manual server, start here:
|
|
41
|
+
|
|
18
42
|
\`\`\`typescript
|
|
19
43
|
import { createServer } from 'raffel'
|
|
20
44
|
|
|
@@ -36,7 +60,10 @@ console.log('Server running on http://localhost:3000')
|
|
|
36
60
|
// Unary RPC: Input → Output
|
|
37
61
|
server.procedure('users.create')
|
|
38
62
|
.handler(async (input, ctx) => {
|
|
39
|
-
|
|
63
|
+
const services = ctx.services as {
|
|
64
|
+
users: { create(data: unknown): Promise<unknown> }
|
|
65
|
+
}
|
|
66
|
+
return services.users.create(input)
|
|
40
67
|
})
|
|
41
68
|
\`\`\`
|
|
42
69
|
|
|
@@ -60,7 +87,10 @@ server.procedure('users.create')
|
|
|
60
87
|
}))
|
|
61
88
|
.handler(async (input, ctx) => {
|
|
62
89
|
// input is validated and typed
|
|
63
|
-
|
|
90
|
+
const services = ctx.services as {
|
|
91
|
+
users: { create(data: unknown): Promise<unknown> }
|
|
92
|
+
}
|
|
93
|
+
return services.users.create(input)
|
|
64
94
|
})
|
|
65
95
|
\`\`\`
|
|
66
96
|
|
|
@@ -81,7 +111,7 @@ server
|
|
|
81
111
|
|
|
82
112
|
.procedure('users.me')
|
|
83
113
|
.handler(async (_input, ctx) => {
|
|
84
|
-
return { userId: ctx.auth?.
|
|
114
|
+
return { userId: ctx.auth?.principalId }
|
|
85
115
|
})
|
|
86
116
|
\`\`\`
|
|
87
117
|
|
|
@@ -146,11 +176,7 @@ registerValidator(createZodAdapter(z))
|
|
|
146
176
|
|
|
147
177
|
const server = createServer({ port: 3000 })
|
|
148
178
|
// Providers (DI)
|
|
149
|
-
.provide('
|
|
150
|
-
const prisma = new PrismaClient()
|
|
151
|
-
await prisma.$connect()
|
|
152
|
-
return prisma
|
|
153
|
-
}, { onShutdown: (db) => db.$disconnect() })
|
|
179
|
+
.provide('users', async () => createUsersService())
|
|
154
180
|
|
|
155
181
|
// Global middleware
|
|
156
182
|
.use(createAuthMiddleware({
|
|
@@ -160,15 +186,21 @@ const server = createServer({ port: 3000 })
|
|
|
160
186
|
// Procedures
|
|
161
187
|
.procedure('users.list')
|
|
162
188
|
.output(z.array(UserSchema))
|
|
163
|
-
.handler(async (
|
|
164
|
-
|
|
189
|
+
.handler(async (_input, ctx) => {
|
|
190
|
+
const services = ctx.services as {
|
|
191
|
+
users: { list(): Promise<unknown[]> }
|
|
192
|
+
}
|
|
193
|
+
return services.users.list()
|
|
165
194
|
})
|
|
166
195
|
|
|
167
196
|
.procedure('users.get')
|
|
168
197
|
.input(z.object({ id: z.string() }))
|
|
169
198
|
.output(UserSchema)
|
|
170
199
|
.handler(async ({ id }, ctx) => {
|
|
171
|
-
const
|
|
200
|
+
const services = ctx.services as {
|
|
201
|
+
users: { get(id: string): Promise<unknown> }
|
|
202
|
+
}
|
|
203
|
+
const user = await services.users.get(id)
|
|
172
204
|
if (!user) throw new RaffelError('NOT_FOUND', \`User \${id} not found\`)
|
|
173
205
|
return user
|
|
174
206
|
})
|
|
@@ -177,7 +209,10 @@ const server = createServer({ port: 3000 })
|
|
|
177
209
|
.input(CreateUserSchema)
|
|
178
210
|
.output(UserSchema)
|
|
179
211
|
.handler(async (input, ctx) => {
|
|
180
|
-
|
|
212
|
+
const services = ctx.services as {
|
|
213
|
+
users: { create(data: unknown): Promise<unknown> }
|
|
214
|
+
}
|
|
215
|
+
return services.users.create(input)
|
|
181
216
|
})
|
|
182
217
|
|
|
183
218
|
await server.start()
|
|
@@ -188,8 +223,9 @@ await server.start()
|
|
|
188
223
|
- **Interceptors**: Add rate limiting, caching, metrics
|
|
189
224
|
- **Streaming**: Real-time data with generators
|
|
190
225
|
- **Events**: Background processing with delivery guarantees
|
|
191
|
-
- **Multi-protocol**: Same handlers on HTTP, WebSocket, gRPC
|
|
226
|
+
- **Multi-protocol**: Same handlers on HTTP, WebSocket, gRPC, TCP, and UDP
|
|
192
227
|
- **Observability**: Metrics and distributed tracing
|
|
228
|
+
- **Spec-driven mocks**: Start mock endpoints from OpenAPI/USD with \`createMockServer()\`
|
|
193
229
|
`;
|
|
194
230
|
export const boilerplates = {
|
|
195
231
|
'basic-api': {
|
|
@@ -362,15 +398,14 @@ const server = createServer({ port: 3000 })
|
|
|
362
398
|
.procedure('users.me')
|
|
363
399
|
.handler(async (_input, ctx) => {
|
|
364
400
|
return {
|
|
365
|
-
userId: ctx.auth?.
|
|
366
|
-
|
|
367
|
-
roles: ctx.auth?.claims?.roles,
|
|
401
|
+
userId: ctx.auth?.principalId,
|
|
402
|
+
roles: ctx.auth?.roles,
|
|
368
403
|
}
|
|
369
404
|
})
|
|
370
405
|
|
|
371
406
|
.procedure('admin.stats')
|
|
372
407
|
.handler(async (_input, ctx) => {
|
|
373
|
-
if (!ctx.auth?.
|
|
408
|
+
if (!ctx.auth?.roles?.includes('admin')) {
|
|
374
409
|
throw new RaffelError('PERMISSION_DENIED', 'Admin access required')
|
|
375
410
|
}
|
|
376
411
|
return { users: 100, orders: 500 }
|
|
@@ -431,8 +466,9 @@ const server = createServer({ port: 3000 })
|
|
|
431
466
|
})
|
|
432
467
|
|
|
433
468
|
.procedure('users.list')
|
|
434
|
-
.handler(async (
|
|
435
|
-
|
|
469
|
+
.handler(async (_input, ctx) => {
|
|
470
|
+
const services = ctx.services as { db: PrismaClient }
|
|
471
|
+
return await services.db.user.findMany({
|
|
436
472
|
orderBy: { createdAt: 'desc' }
|
|
437
473
|
})
|
|
438
474
|
})
|
|
@@ -440,7 +476,8 @@ const server = createServer({ port: 3000 })
|
|
|
440
476
|
.procedure('users.get')
|
|
441
477
|
.input(z.object({ id: z.string() }))
|
|
442
478
|
.handler(async ({ id }, ctx) => {
|
|
443
|
-
const
|
|
479
|
+
const services = ctx.services as { db: PrismaClient }
|
|
480
|
+
const user = await services.db.user.findUnique({ where: { id } })
|
|
444
481
|
if (!user) throw new RaffelError('NOT_FOUND', \`User \${id} not found\`)
|
|
445
482
|
return user
|
|
446
483
|
})
|
|
@@ -448,13 +485,14 @@ const server = createServer({ port: 3000 })
|
|
|
448
485
|
.procedure('users.create')
|
|
449
486
|
.input(CreateUserInput)
|
|
450
487
|
.handler(async (input, ctx) => {
|
|
451
|
-
const
|
|
488
|
+
const services = ctx.services as { db: PrismaClient }
|
|
489
|
+
const existing = await services.db.user.findUnique({
|
|
452
490
|
where: { email: input.email }
|
|
453
491
|
})
|
|
454
492
|
if (existing) {
|
|
455
493
|
throw new RaffelError('ALREADY_EXISTS', 'Email already registered')
|
|
456
494
|
}
|
|
457
|
-
return await
|
|
495
|
+
return await services.db.user.create({ data: input })
|
|
458
496
|
})
|
|
459
497
|
|
|
460
498
|
.procedure('users.update')
|
|
@@ -464,8 +502,9 @@ const server = createServer({ port: 3000 })
|
|
|
464
502
|
email: z.string().email().optional()
|
|
465
503
|
}))
|
|
466
504
|
.handler(async ({ id, ...data }, ctx) => {
|
|
505
|
+
const services = ctx.services as { db: PrismaClient }
|
|
467
506
|
try {
|
|
468
|
-
return await
|
|
507
|
+
return await services.db.user.update({ where: { id }, data })
|
|
469
508
|
} catch {
|
|
470
509
|
throw new RaffelError('NOT_FOUND', \`User \${id} not found\`)
|
|
471
510
|
}
|
|
@@ -474,8 +513,9 @@ const server = createServer({ port: 3000 })
|
|
|
474
513
|
.procedure('users.delete')
|
|
475
514
|
.input(z.object({ id: z.string() }))
|
|
476
515
|
.handler(async ({ id }, ctx) => {
|
|
516
|
+
const services = ctx.services as { db: PrismaClient }
|
|
477
517
|
try {
|
|
478
|
-
await
|
|
518
|
+
await services.db.user.delete({ where: { id } })
|
|
479
519
|
return { success: true }
|
|
480
520
|
} catch {
|
|
481
521
|
throw new RaffelError('NOT_FOUND', \`User \${id} not found\`)
|
|
@@ -539,7 +579,7 @@ const server = createServer({ port: 3000 })
|
|
|
539
579
|
id: crypto.randomUUID(),
|
|
540
580
|
channel: input.channel,
|
|
541
581
|
message: input.message,
|
|
542
|
-
sender: ctx.auth?.
|
|
582
|
+
sender: ctx.auth?.principalId ?? 'anonymous',
|
|
543
583
|
timestamp: new Date().toISOString()
|
|
544
584
|
}
|
|
545
585
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/mcp/docs/quickstart.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/mcp/docs/quickstart.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+N9B,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE;QACX,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE;YACL,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFtB;YACK,cAAc,EAAE;;;;;;;;;;;;;;;;EAgBpB;SACG;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE;YACL,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;SACI;KACF;IACD,aAAa,EAAE;QACb,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE;YACL,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGtB;YACK,sBAAsB,EAAE;;;;;;;;;;;;;;;;CAgB7B;SACI;KACF;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE;YACL,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;SACI;KACF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,8DAA8D;QAC3E,KAAK,EAAE;YACL,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;SACI;KACF;CACF,CAAA;AAED,MAAM,UAAU,cAAc,CAC5B,IAA+B;IAE/B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI;QACJ,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,WAAW;KAC5B,CAAC,CAAC,CAAA;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAe1F,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAe1F,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAmMD,wBAAgB,UAAU,IAAI,aAAa,EAAE,CAG5C;AAED,wBAAgB,eAAe,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAGxF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnE;AAID,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAkElD;AAID,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CAuC5D;AA+fD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA4KtE"}
|