@procedures/client 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +832 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/http/client/index.d.ts +11 -0
- package/dist/adapters/http/client/index.d.ts.map +1 -0
- package/dist/adapters/http/client/index.js +18 -0
- package/dist/adapters/http/client/index.js.map +1 -0
- package/dist/adapters/http/client/transport.d.ts +72 -0
- package/dist/adapters/http/client/transport.d.ts.map +1 -0
- package/dist/adapters/http/client/transport.js +282 -0
- package/dist/adapters/http/client/transport.js.map +1 -0
- package/dist/adapters/http/client/types.d.ts +27 -0
- package/dist/adapters/http/client/types.d.ts.map +1 -0
- package/dist/adapters/http/client/types.js +8 -0
- package/dist/adapters/http/client/types.js.map +1 -0
- package/dist/adapters/http/index.d.ts +7 -0
- package/dist/adapters/http/index.d.ts.map +1 -0
- package/dist/adapters/http/index.js +7 -0
- package/dist/adapters/http/index.js.map +1 -0
- package/dist/adapters/http/server/index.d.ts +9 -0
- package/dist/adapters/http/server/index.d.ts.map +1 -0
- package/dist/adapters/http/server/index.js +10 -0
- package/dist/adapters/http/server/index.js.map +1 -0
- package/dist/adapters/http/server/strategies.d.ts +39 -0
- package/dist/adapters/http/server/strategies.d.ts.map +1 -0
- package/dist/adapters/http/server/strategies.js +90 -0
- package/dist/adapters/http/server/strategies.js.map +1 -0
- package/dist/adapters/http/server/transport.d.ts +66 -0
- package/dist/adapters/http/server/transport.d.ts.map +1 -0
- package/dist/adapters/http/server/transport.js +561 -0
- package/dist/adapters/http/server/transport.js.map +1 -0
- package/dist/adapters/http/server/types.d.ts +71 -0
- package/dist/adapters/http/server/types.d.ts.map +1 -0
- package/dist/adapters/http/server/types.js +7 -0
- package/dist/adapters/http/server/types.js.map +1 -0
- package/dist/adapters/http/shared/constants.d.ts +95 -0
- package/dist/adapters/http/shared/constants.d.ts.map +1 -0
- package/dist/adapters/http/shared/constants.js +102 -0
- package/dist/adapters/http/shared/constants.js.map +1 -0
- package/dist/adapters/http/shared/errors.d.ts +78 -0
- package/dist/adapters/http/shared/errors.d.ts.map +1 -0
- package/dist/adapters/http/shared/errors.js +151 -0
- package/dist/adapters/http/shared/errors.js.map +1 -0
- package/dist/adapters/http/shared/headers.d.ts +122 -0
- package/dist/adapters/http/shared/headers.d.ts.map +1 -0
- package/dist/adapters/http/shared/headers.js +216 -0
- package/dist/adapters/http/shared/headers.js.map +1 -0
- package/dist/adapters/http/shared/index.d.ts +12 -0
- package/dist/adapters/http/shared/index.d.ts.map +1 -0
- package/dist/adapters/http/shared/index.js +17 -0
- package/dist/adapters/http/shared/index.js.map +1 -0
- package/dist/adapters/http/shared/status-codes.d.ts +92 -0
- package/dist/adapters/http/shared/status-codes.d.ts.map +1 -0
- package/dist/adapters/http/shared/status-codes.js +189 -0
- package/dist/adapters/http/shared/status-codes.js.map +1 -0
- package/dist/adapters/http/shared/strategies.d.ts +90 -0
- package/dist/adapters/http/shared/strategies.d.ts.map +1 -0
- package/dist/adapters/http/shared/strategies.js +180 -0
- package/dist/adapters/http/shared/strategies.js.map +1 -0
- package/dist/adapters/local/client/index.d.ts +8 -0
- package/dist/adapters/local/client/index.d.ts.map +1 -0
- package/dist/adapters/local/client/index.js +8 -0
- package/dist/adapters/local/client/index.js.map +1 -0
- package/dist/adapters/local/client/transport.d.ts +81 -0
- package/dist/adapters/local/client/transport.d.ts.map +1 -0
- package/dist/adapters/local/client/transport.js +172 -0
- package/dist/adapters/local/client/transport.js.map +1 -0
- package/dist/adapters/local/client/types.d.ts +39 -0
- package/dist/adapters/local/client/types.d.ts.map +1 -0
- package/dist/adapters/local/client/types.js +13 -0
- package/dist/adapters/local/client/types.js.map +1 -0
- package/dist/adapters/metadata.d.ts +10 -0
- package/dist/adapters/metadata.d.ts.map +1 -0
- package/dist/adapters/metadata.js +19 -0
- package/dist/adapters/metadata.js.map +1 -0
- package/dist/adapters/mock/client/builder.d.ts +35 -0
- package/dist/adapters/mock/client/builder.d.ts.map +1 -0
- package/dist/adapters/mock/client/builder.js +58 -0
- package/dist/adapters/mock/client/builder.js.map +1 -0
- package/dist/adapters/mock/client/index.d.ts +9 -0
- package/dist/adapters/mock/client/index.d.ts.map +1 -0
- package/dist/adapters/mock/client/index.js +10 -0
- package/dist/adapters/mock/client/index.js.map +1 -0
- package/dist/adapters/mock/client/transport.d.ts +149 -0
- package/dist/adapters/mock/client/transport.d.ts.map +1 -0
- package/dist/adapters/mock/client/transport.js +289 -0
- package/dist/adapters/mock/client/transport.js.map +1 -0
- package/dist/adapters/mock/client/types.d.ts +86 -0
- package/dist/adapters/mock/client/types.d.ts.map +1 -0
- package/dist/adapters/mock/client/types.js +7 -0
- package/dist/adapters/mock/client/types.js.map +1 -0
- package/dist/adapters/websocket/client/index.d.ts +9 -0
- package/dist/adapters/websocket/client/index.d.ts.map +1 -0
- package/dist/adapters/websocket/client/index.js +9 -0
- package/dist/adapters/websocket/client/index.js.map +1 -0
- package/dist/adapters/websocket/client/transport.d.ts +106 -0
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -0
- package/dist/adapters/websocket/client/transport.js +647 -0
- package/dist/adapters/websocket/client/transport.js.map +1 -0
- package/dist/adapters/websocket/client/types.d.ts +192 -0
- package/dist/adapters/websocket/client/types.d.ts.map +1 -0
- package/dist/adapters/websocket/client/types.js +17 -0
- package/dist/adapters/websocket/client/types.js.map +1 -0
- package/dist/adapters/websocket/index.d.ts +8 -0
- package/dist/adapters/websocket/index.d.ts.map +1 -0
- package/dist/adapters/websocket/index.js +8 -0
- package/dist/adapters/websocket/index.js.map +1 -0
- package/dist/adapters/websocket/server/index.d.ts +8 -0
- package/dist/adapters/websocket/server/index.d.ts.map +1 -0
- package/dist/adapters/websocket/server/index.js +8 -0
- package/dist/adapters/websocket/server/index.js.map +1 -0
- package/dist/adapters/websocket/server/transport.d.ts +112 -0
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -0
- package/dist/adapters/websocket/server/transport.js +619 -0
- package/dist/adapters/websocket/server/transport.js.map +1 -0
- package/dist/adapters/websocket/server/types.d.ts +140 -0
- package/dist/adapters/websocket/server/types.d.ts.map +1 -0
- package/dist/adapters/websocket/server/types.js +7 -0
- package/dist/adapters/websocket/server/types.js.map +1 -0
- package/dist/browser.d.ts +48 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +86 -0
- package/dist/browser.js.map +1 -0
- package/dist/client/batch-executor.d.ts +160 -0
- package/dist/client/batch-executor.d.ts.map +1 -0
- package/dist/client/batch-executor.js +397 -0
- package/dist/client/batch-executor.js.map +1 -0
- package/dist/client/call-types.d.ts +271 -0
- package/dist/client/call-types.d.ts.map +1 -0
- package/dist/client/call-types.js +208 -0
- package/dist/client/call-types.js.map +1 -0
- package/dist/client/client.d.ts +517 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +990 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/consumption.d.ts +191 -0
- package/dist/client/consumption.d.ts.map +1 -0
- package/dist/client/consumption.js +98 -0
- package/dist/client/consumption.js.map +1 -0
- package/dist/client/context.d.ts +116 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +111 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/errors/codes.d.ts +71 -0
- package/dist/client/errors/codes.d.ts.map +1 -0
- package/dist/client/errors/codes.js +81 -0
- package/dist/client/errors/codes.js.map +1 -0
- package/dist/client/errors/factory.d.ts +102 -0
- package/dist/client/errors/factory.d.ts.map +1 -0
- package/dist/client/errors/factory.js +210 -0
- package/dist/client/errors/factory.js.map +1 -0
- package/dist/client/errors/http-errors.d.ts +47 -0
- package/dist/client/errors/http-errors.d.ts.map +1 -0
- package/dist/client/errors/http-errors.js +548 -0
- package/dist/client/errors/http-errors.js.map +1 -0
- package/dist/client/errors/http-status.d.ts +73 -0
- package/dist/client/errors/http-status.d.ts.map +1 -0
- package/dist/client/errors/http-status.js +79 -0
- package/dist/client/errors/http-status.js.map +1 -0
- package/dist/client/errors/index.d.ts +36 -0
- package/dist/client/errors/index.d.ts.map +1 -0
- package/dist/client/errors/index.js +40 -0
- package/dist/client/errors/index.js.map +1 -0
- package/dist/client/errors/registry.d.ts +38 -0
- package/dist/client/errors/registry.d.ts.map +1 -0
- package/dist/client/errors/registry.js +535 -0
- package/dist/client/errors/registry.js.map +1 -0
- package/dist/client/errors/types.d.ts +112 -0
- package/dist/client/errors/types.d.ts.map +1 -0
- package/dist/client/errors/types.js +45 -0
- package/dist/client/errors/types.js.map +1 -0
- package/dist/client/index.d.ts +44 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +36 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/middleware/auth.d.ts +90 -0
- package/dist/client/middleware/auth.d.ts.map +1 -0
- package/dist/client/middleware/auth.js +98 -0
- package/dist/client/middleware/auth.js.map +1 -0
- package/dist/client/middleware/batching.d.ts +102 -0
- package/dist/client/middleware/batching.d.ts.map +1 -0
- package/dist/client/middleware/batching.js +245 -0
- package/dist/client/middleware/batching.js.map +1 -0
- package/dist/client/middleware/cache.d.ts +124 -0
- package/dist/client/middleware/cache.d.ts.map +1 -0
- package/dist/client/middleware/cache.js +208 -0
- package/dist/client/middleware/cache.js.map +1 -0
- package/dist/client/middleware/circuit-breaker.d.ts +113 -0
- package/dist/client/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/client/middleware/circuit-breaker.js +236 -0
- package/dist/client/middleware/circuit-breaker.js.map +1 -0
- package/dist/client/middleware/contexts.d.ts +199 -0
- package/dist/client/middleware/contexts.d.ts.map +1 -0
- package/dist/client/middleware/contexts.js +74 -0
- package/dist/client/middleware/contexts.js.map +1 -0
- package/dist/client/middleware/items.d.ts +37 -0
- package/dist/client/middleware/items.d.ts.map +1 -0
- package/dist/client/middleware/items.js +100 -0
- package/dist/client/middleware/items.js.map +1 -0
- package/dist/client/middleware/lru.d.ts +32 -0
- package/dist/client/middleware/lru.d.ts.map +1 -0
- package/dist/client/middleware/lru.js +62 -0
- package/dist/client/middleware/lru.js.map +1 -0
- package/dist/client/middleware/pagination.d.ts +114 -0
- package/dist/client/middleware/pagination.d.ts.map +1 -0
- package/dist/client/middleware/pagination.js +148 -0
- package/dist/client/middleware/pagination.js.map +1 -0
- package/dist/client/middleware/rate-limit.d.ts +105 -0
- package/dist/client/middleware/rate-limit.d.ts.map +1 -0
- package/dist/client/middleware/rate-limit.js +222 -0
- package/dist/client/middleware/rate-limit.js.map +1 -0
- package/dist/client/middleware/retry.d.ts +100 -0
- package/dist/client/middleware/retry.d.ts.map +1 -0
- package/dist/client/middleware/retry.js +150 -0
- package/dist/client/middleware/retry.js.map +1 -0
- package/dist/client/middleware/timeout.d.ts +91 -0
- package/dist/client/middleware/timeout.d.ts.map +1 -0
- package/dist/client/middleware/timeout.js +253 -0
- package/dist/client/middleware/timeout.js.map +1 -0
- package/dist/client/middleware/tracing.d.ts +118 -0
- package/dist/client/middleware/tracing.d.ts.map +1 -0
- package/dist/client/middleware/tracing.js +152 -0
- package/dist/client/middleware/tracing.js.map +1 -0
- package/dist/client/route-resolver.d.ts +181 -0
- package/dist/client/route-resolver.d.ts.map +1 -0
- package/dist/client/route-resolver.js +300 -0
- package/dist/client/route-resolver.js.map +1 -0
- package/dist/client/typed-method.d.ts +29 -0
- package/dist/client/typed-method.d.ts.map +1 -0
- package/dist/client/typed-method.js +36 -0
- package/dist/client/typed-method.js.map +1 -0
- package/dist/client/typed.d.ts +102 -0
- package/dist/client/typed.d.ts.map +1 -0
- package/dist/client/typed.js +52 -0
- package/dist/client/typed.js.map +1 -0
- package/dist/client/types.d.ts +296 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +26 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/validation/index.d.ts +34 -0
- package/dist/client/validation/index.d.ts.map +1 -0
- package/dist/client/validation/index.js +36 -0
- package/dist/client/validation/index.js.map +1 -0
- package/dist/client/validation/middleware.d.ts +82 -0
- package/dist/client/validation/middleware.d.ts.map +1 -0
- package/dist/client/validation/middleware.js +138 -0
- package/dist/client/validation/middleware.js.map +1 -0
- package/dist/client/validation/types.d.ts +118 -0
- package/dist/client/validation/types.d.ts.map +1 -0
- package/dist/client/validation/types.js +59 -0
- package/dist/client/validation/types.js.map +1 -0
- package/dist/collections/async/async-queue.d.ts +144 -0
- package/dist/collections/async/async-queue.d.ts.map +1 -0
- package/dist/collections/async/async-queue.js +347 -0
- package/dist/collections/async/async-queue.js.map +1 -0
- package/dist/collections/async/channels.d.ts +188 -0
- package/dist/collections/async/channels.d.ts.map +1 -0
- package/dist/collections/async/channels.js +312 -0
- package/dist/collections/async/channels.js.map +1 -0
- package/dist/collections/behaviors/bounded.d.ts +79 -0
- package/dist/collections/behaviors/bounded.d.ts.map +1 -0
- package/dist/collections/behaviors/bounded.js +384 -0
- package/dist/collections/behaviors/bounded.js.map +1 -0
- package/dist/collections/behaviors/evented.d.ts +154 -0
- package/dist/collections/behaviors/evented.d.ts.map +1 -0
- package/dist/collections/behaviors/evented.js +299 -0
- package/dist/collections/behaviors/evented.js.map +1 -0
- package/dist/collections/behaviors/lru.d.ts +84 -0
- package/dist/collections/behaviors/lru.d.ts.map +1 -0
- package/dist/collections/behaviors/lru.js +330 -0
- package/dist/collections/behaviors/lru.js.map +1 -0
- package/dist/collections/behaviors/readonly.d.ts +73 -0
- package/dist/collections/behaviors/readonly.d.ts.map +1 -0
- package/dist/collections/behaviors/readonly.js +158 -0
- package/dist/collections/behaviors/readonly.js.map +1 -0
- package/dist/collections/behaviors/safe.d.ts +163 -0
- package/dist/collections/behaviors/safe.d.ts.map +1 -0
- package/dist/collections/behaviors/safe.js +172 -0
- package/dist/collections/behaviors/safe.js.map +1 -0
- package/dist/collections/behaviors/synchronized.d.ts +88 -0
- package/dist/collections/behaviors/synchronized.d.ts.map +1 -0
- package/dist/collections/behaviors/synchronized.js +294 -0
- package/dist/collections/behaviors/synchronized.js.map +1 -0
- package/dist/collections/behaviors/ttl.d.ts +118 -0
- package/dist/collections/behaviors/ttl.d.ts.map +1 -0
- package/dist/collections/behaviors/ttl.js +338 -0
- package/dist/collections/behaviors/ttl.js.map +1 -0
- package/dist/collections/core/effects.d.ts +176 -0
- package/dist/collections/core/effects.d.ts.map +1 -0
- package/dist/collections/core/effects.js +180 -0
- package/dist/collections/core/effects.js.map +1 -0
- package/dist/collections/core/events.d.ts +192 -0
- package/dist/collections/core/events.d.ts.map +1 -0
- package/dist/collections/core/events.js +291 -0
- package/dist/collections/core/events.js.map +1 -0
- package/dist/collections/core/middleware.d.ts +231 -0
- package/dist/collections/core/middleware.d.ts.map +1 -0
- package/dist/collections/core/middleware.js +161 -0
- package/dist/collections/core/middleware.js.map +1 -0
- package/dist/collections/core/policies.d.ts +220 -0
- package/dist/collections/core/policies.d.ts.map +1 -0
- package/dist/collections/core/policies.js +48 -0
- package/dist/collections/core/policies.js.map +1 -0
- package/dist/collections/core/traits.d.ts +142 -0
- package/dist/collections/core/traits.d.ts.map +1 -0
- package/dist/collections/core/traits.js +8 -0
- package/dist/collections/core/traits.js.map +1 -0
- package/dist/collections/examples.d.ts +13 -0
- package/dist/collections/examples.d.ts.map +1 -0
- package/dist/collections/examples.js +302 -0
- package/dist/collections/examples.js.map +1 -0
- package/dist/collections/fx/collectors.d.ts +190 -0
- package/dist/collections/fx/collectors.d.ts.map +1 -0
- package/dist/collections/fx/collectors.js +369 -0
- package/dist/collections/fx/collectors.js.map +1 -0
- package/dist/collections/fx/iter.d.ts +166 -0
- package/dist/collections/fx/iter.d.ts.map +1 -0
- package/dist/collections/fx/iter.js +421 -0
- package/dist/collections/fx/iter.js.map +1 -0
- package/dist/collections/impl/array-deque.d.ts +107 -0
- package/dist/collections/impl/array-deque.d.ts.map +1 -0
- package/dist/collections/impl/array-deque.js +381 -0
- package/dist/collections/impl/array-deque.js.map +1 -0
- package/dist/collections/impl/array-list.d.ts +101 -0
- package/dist/collections/impl/array-list.d.ts.map +1 -0
- package/dist/collections/impl/array-list.js +387 -0
- package/dist/collections/impl/array-list.js.map +1 -0
- package/dist/collections/impl/hash-map.d.ts +141 -0
- package/dist/collections/impl/hash-map.d.ts.map +1 -0
- package/dist/collections/impl/hash-map.js +450 -0
- package/dist/collections/impl/hash-map.js.map +1 -0
- package/dist/collections/impl/hash-set.d.ts +125 -0
- package/dist/collections/impl/hash-set.d.ts.map +1 -0
- package/dist/collections/impl/hash-set.js +264 -0
- package/dist/collections/impl/hash-set.js.map +1 -0
- package/dist/collections/impl/linked-hash-map.d.ts +141 -0
- package/dist/collections/impl/linked-hash-map.d.ts.map +1 -0
- package/dist/collections/impl/linked-hash-map.js +472 -0
- package/dist/collections/impl/linked-hash-map.js.map +1 -0
- package/dist/collections/impl/linked-list.d.ts +109 -0
- package/dist/collections/impl/linked-list.d.ts.map +1 -0
- package/dist/collections/impl/linked-list.js +491 -0
- package/dist/collections/impl/linked-list.js.map +1 -0
- package/dist/collections/impl/priority-queue.d.ts +134 -0
- package/dist/collections/impl/priority-queue.d.ts.map +1 -0
- package/dist/collections/impl/priority-queue.js +336 -0
- package/dist/collections/impl/priority-queue.js.map +1 -0
- package/dist/collections/impl/tree-map.d.ts +146 -0
- package/dist/collections/impl/tree-map.d.ts.map +1 -0
- package/dist/collections/impl/tree-map.js +781 -0
- package/dist/collections/impl/tree-map.js.map +1 -0
- package/dist/collections/impl/tree-set.d.ts +112 -0
- package/dist/collections/impl/tree-set.d.ts.map +1 -0
- package/dist/collections/impl/tree-set.js +374 -0
- package/dist/collections/impl/tree-set.js.map +1 -0
- package/dist/collections/index.d.ts +105 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +135 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/interfaces/collection.d.ts +119 -0
- package/dist/collections/interfaces/collection.d.ts.map +1 -0
- package/dist/collections/interfaces/collection.js +8 -0
- package/dist/collections/interfaces/collection.js.map +1 -0
- package/dist/collections/interfaces/list.d.ts +247 -0
- package/dist/collections/interfaces/list.d.ts.map +1 -0
- package/dist/collections/interfaces/list.js +8 -0
- package/dist/collections/interfaces/list.js.map +1 -0
- package/dist/collections/interfaces/map.d.ts +344 -0
- package/dist/collections/interfaces/map.d.ts.map +1 -0
- package/dist/collections/interfaces/map.js +8 -0
- package/dist/collections/interfaces/map.js.map +1 -0
- package/dist/collections/interfaces/queue.d.ts +304 -0
- package/dist/collections/interfaces/queue.d.ts.map +1 -0
- package/dist/collections/interfaces/queue.js +8 -0
- package/dist/collections/interfaces/queue.js.map +1 -0
- package/dist/collections/interfaces/set.d.ts +137 -0
- package/dist/collections/interfaces/set.d.ts.map +1 -0
- package/dist/collections/interfaces/set.js +8 -0
- package/dist/collections/interfaces/set.js.map +1 -0
- package/dist/collections/storage/api.d.ts +109 -0
- package/dist/collections/storage/api.d.ts.map +1 -0
- package/dist/collections/storage/api.js +182 -0
- package/dist/collections/storage/api.js.map +1 -0
- package/dist/collections/storage/hybrid.d.ts +164 -0
- package/dist/collections/storage/hybrid.d.ts.map +1 -0
- package/dist/collections/storage/hybrid.js +416 -0
- package/dist/collections/storage/hybrid.js.map +1 -0
- package/dist/collections/storage/index.d.ts +16 -0
- package/dist/collections/storage/index.d.ts.map +1 -0
- package/dist/collections/storage/index.js +13 -0
- package/dist/collections/storage/index.js.map +1 -0
- package/dist/collections/storage/interface.d.ts +141 -0
- package/dist/collections/storage/interface.d.ts.map +1 -0
- package/dist/collections/storage/interface.js +23 -0
- package/dist/collections/storage/interface.js.map +1 -0
- package/dist/collections/storage/memory.d.ts +68 -0
- package/dist/collections/storage/memory.d.ts.map +1 -0
- package/dist/collections/storage/memory.js +154 -0
- package/dist/collections/storage/memory.js.map +1 -0
- package/dist/collections/utils/defaults.d.ts +135 -0
- package/dist/collections/utils/defaults.d.ts.map +1 -0
- package/dist/collections/utils/defaults.js +322 -0
- package/dist/collections/utils/defaults.js.map +1 -0
- package/dist/collections/utils/factories.d.ts +144 -0
- package/dist/collections/utils/factories.d.ts.map +1 -0
- package/dist/collections/utils/factories.js +293 -0
- package/dist/collections/utils/factories.js.map +1 -0
- package/dist/collections/utils/helpers.d.ts +137 -0
- package/dist/collections/utils/helpers.d.ts.map +1 -0
- package/dist/collections/utils/helpers.js +221 -0
- package/dist/collections/utils/helpers.js.map +1 -0
- package/dist/collections.d.ts +12 -0
- package/dist/collections.d.ts.map +1 -0
- package/dist/collections.js +10 -0
- package/dist/collections.js.map +1 -0
- package/dist/components/define.d.ts +134 -0
- package/dist/components/define.d.ts.map +1 -0
- package/dist/components/define.js +486 -0
- package/dist/components/define.js.map +1 -0
- package/dist/components/index.d.ts +39 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +38 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/types.d.ts +264 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +46 -0
- package/dist/components/types.js.map +1 -0
- package/dist/events/bus.d.ts +193 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +511 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +34 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +36 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +242 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +8 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/compose.d.ts +88 -0
- package/dist/middleware/compose.d.ts.map +1 -0
- package/dist/middleware/compose.js +108 -0
- package/dist/middleware/compose.js.map +1 -0
- package/dist/middleware/index.d.ts +12 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/types.d.ts +112 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +14 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/procedures/cli/announce.d.ts +67 -0
- package/dist/procedures/cli/announce.d.ts.map +1 -0
- package/dist/procedures/cli/announce.js +392 -0
- package/dist/procedures/cli/announce.js.map +1 -0
- package/dist/procedures/cli/discover.d.ts +66 -0
- package/dist/procedures/cli/discover.d.ts.map +1 -0
- package/dist/procedures/cli/discover.js +310 -0
- package/dist/procedures/cli/discover.js.map +1 -0
- package/dist/procedures/cli/index.d.ts +13 -0
- package/dist/procedures/cli/index.d.ts.map +1 -0
- package/dist/procedures/cli/index.js +201 -0
- package/dist/procedures/cli/index.js.map +1 -0
- package/dist/procedures/cli/init.d.ts +17 -0
- package/dist/procedures/cli/init.d.ts.map +1 -0
- package/dist/procedures/cli/init.js +336 -0
- package/dist/procedures/cli/init.js.map +1 -0
- package/dist/procedures/collection/index.d.ts +10 -0
- package/dist/procedures/collection/index.d.ts.map +1 -0
- package/dist/procedures/collection/index.js +10 -0
- package/dist/procedures/collection/index.js.map +1 -0
- package/dist/procedures/collection/procedures.d.ts +21 -0
- package/dist/procedures/collection/procedures.d.ts.map +1 -0
- package/dist/procedures/collection/procedures.js +198 -0
- package/dist/procedures/collection/procedures.js.map +1 -0
- package/dist/procedures/collection/schemas.d.ts +131 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -0
- package/dist/procedures/collection/schemas.js +422 -0
- package/dist/procedures/collection/schemas.js.map +1 -0
- package/dist/procedures/collection/storage.d.ts +53 -0
- package/dist/procedures/collection/storage.d.ts.map +1 -0
- package/dist/procedures/collection/storage.js +2 -0
- package/dist/procedures/collection/storage.js.map +1 -0
- package/dist/procedures/core/array.d.ts +276 -0
- package/dist/procedures/core/array.d.ts.map +1 -0
- package/dist/procedures/core/array.js +637 -0
- package/dist/procedures/core/array.js.map +1 -0
- package/dist/procedures/core/comparison.d.ts +85 -0
- package/dist/procedures/core/comparison.d.ts.map +1 -0
- package/dist/procedures/core/comparison.js +156 -0
- package/dist/procedures/core/comparison.js.map +1 -0
- package/dist/procedures/core/index.d.ts +261 -0
- package/dist/procedures/core/index.d.ts.map +1 -0
- package/dist/procedures/core/index.js +585 -0
- package/dist/procedures/core/index.js.map +1 -0
- package/dist/procedures/core/logic.d.ts +144 -0
- package/dist/procedures/core/logic.d.ts.map +1 -0
- package/dist/procedures/core/logic.js +169 -0
- package/dist/procedures/core/logic.js.map +1 -0
- package/dist/procedures/core/math.d.ts +139 -0
- package/dist/procedures/core/math.d.ts.map +1 -0
- package/dist/procedures/core/math.js +273 -0
- package/dist/procedures/core/math.js.map +1 -0
- package/dist/procedures/core/meta.d.ts +111 -0
- package/dist/procedures/core/meta.d.ts.map +1 -0
- package/dist/procedures/core/meta.js +239 -0
- package/dist/procedures/core/meta.js.map +1 -0
- package/dist/procedures/core/object.d.ts +109 -0
- package/dist/procedures/core/object.d.ts.map +1 -0
- package/dist/procedures/core/object.js +270 -0
- package/dist/procedures/core/object.js.map +1 -0
- package/dist/procedures/core/operands.d.ts +51 -0
- package/dist/procedures/core/operands.d.ts.map +1 -0
- package/dist/procedures/core/operands.js +90 -0
- package/dist/procedures/core/operands.js.map +1 -0
- package/dist/procedures/core/outputs.d.ts +28 -0
- package/dist/procedures/core/outputs.d.ts.map +1 -0
- package/dist/procedures/core/outputs.js +42 -0
- package/dist/procedures/core/outputs.js.map +1 -0
- package/dist/procedures/core/results.d.ts +202 -0
- package/dist/procedures/core/results.d.ts.map +1 -0
- package/dist/procedures/core/results.js +106 -0
- package/dist/procedures/core/results.js.map +1 -0
- package/dist/procedures/core/schemas.d.ts +48 -0
- package/dist/procedures/core/schemas.d.ts.map +1 -0
- package/dist/procedures/core/schemas.js +102 -0
- package/dist/procedures/core/schemas.js.map +1 -0
- package/dist/procedures/core/string.d.ts +138 -0
- package/dist/procedures/core/string.d.ts.map +1 -0
- package/dist/procedures/core/string.js +268 -0
- package/dist/procedures/core/string.js.map +1 -0
- package/dist/procedures/core/type.d.ts +101 -0
- package/dist/procedures/core/type.d.ts.map +1 -0
- package/dist/procedures/core/type.js +208 -0
- package/dist/procedures/core/type.js.map +1 -0
- package/dist/procedures/define-procedure.d.ts +187 -0
- package/dist/procedures/define-procedure.d.ts.map +1 -0
- package/dist/procedures/define-procedure.js +356 -0
- package/dist/procedures/define-procedure.js.map +1 -0
- package/dist/procedures/define.d.ts +228 -0
- package/dist/procedures/define.d.ts.map +1 -0
- package/dist/procedures/define.js +300 -0
- package/dist/procedures/define.js.map +1 -0
- package/dist/procedures/discovery.d.ts +57 -0
- package/dist/procedures/discovery.d.ts.map +1 -0
- package/dist/procedures/discovery.js +68 -0
- package/dist/procedures/discovery.js.map +1 -0
- package/dist/procedures/index.d.ts +24 -0
- package/dist/procedures/index.d.ts.map +1 -0
- package/dist/procedures/index.js +69 -0
- package/dist/procedures/index.js.map +1 -0
- package/dist/procedures/interceptors.d.ts +82 -0
- package/dist/procedures/interceptors.d.ts.map +1 -0
- package/dist/procedures/interceptors.js +193 -0
- package/dist/procedures/interceptors.js.map +1 -0
- package/dist/procedures/invoke.d.ts +127 -0
- package/dist/procedures/invoke.d.ts.map +1 -0
- package/dist/procedures/invoke.js +277 -0
- package/dist/procedures/invoke.js.map +1 -0
- package/dist/procedures/module.d.ts +49 -0
- package/dist/procedures/module.d.ts.map +1 -0
- package/dist/procedures/module.js +93 -0
- package/dist/procedures/module.js.map +1 -0
- package/dist/procedures/policy.d.ts +70 -0
- package/dist/procedures/policy.d.ts.map +1 -0
- package/dist/procedures/policy.js +138 -0
- package/dist/procedures/policy.js.map +1 -0
- package/dist/procedures/ref.d.ts +606 -0
- package/dist/procedures/ref.d.ts.map +1 -0
- package/dist/procedures/ref.js +895 -0
- package/dist/procedures/ref.js.map +1 -0
- package/dist/procedures/registry.d.ts +208 -0
- package/dist/procedures/registry.d.ts.map +1 -0
- package/dist/procedures/registry.js +402 -0
- package/dist/procedures/registry.js.map +1 -0
- package/dist/procedures/schema.d.ts +126 -0
- package/dist/procedures/schema.d.ts.map +1 -0
- package/dist/procedures/schema.js +108 -0
- package/dist/procedures/schema.js.map +1 -0
- package/dist/procedures/storage/adapter.d.ts +148 -0
- package/dist/procedures/storage/adapter.d.ts.map +1 -0
- package/dist/procedures/storage/adapter.js +214 -0
- package/dist/procedures/storage/adapter.js.map +1 -0
- package/dist/procedures/storage/api.d.ts +125 -0
- package/dist/procedures/storage/api.d.ts.map +1 -0
- package/dist/procedures/storage/api.js +220 -0
- package/dist/procedures/storage/api.js.map +1 -0
- package/dist/procedures/storage/factory.d.ts +134 -0
- package/dist/procedures/storage/factory.d.ts.map +1 -0
- package/dist/procedures/storage/factory.js +166 -0
- package/dist/procedures/storage/factory.js.map +1 -0
- package/dist/procedures/storage/hybrid.d.ts +193 -0
- package/dist/procedures/storage/hybrid.d.ts.map +1 -0
- package/dist/procedures/storage/hybrid.js +519 -0
- package/dist/procedures/storage/hybrid.js.map +1 -0
- package/dist/procedures/storage/index.d.ts +17 -0
- package/dist/procedures/storage/index.d.ts.map +1 -0
- package/dist/procedures/storage/index.js +17 -0
- package/dist/procedures/storage/index.js.map +1 -0
- package/dist/procedures/storage/procedures.d.ts +39 -0
- package/dist/procedures/storage/procedures.d.ts.map +1 -0
- package/dist/procedures/storage/procedures.js +261 -0
- package/dist/procedures/storage/procedures.js.map +1 -0
- package/dist/procedures/storage/serialization.d.ts +123 -0
- package/dist/procedures/storage/serialization.d.ts.map +1 -0
- package/dist/procedures/storage/serialization.js +216 -0
- package/dist/procedures/storage/serialization.js.map +1 -0
- package/dist/procedures/storage/synced-registry.d.ts +246 -0
- package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
- package/dist/procedures/storage/synced-registry.js +575 -0
- package/dist/procedures/storage/synced-registry.js.map +1 -0
- package/dist/procedures/storage/types.d.ts +130 -0
- package/dist/procedures/storage/types.d.ts.map +1 -0
- package/dist/procedures/storage/types.js +8 -0
- package/dist/procedures/storage/types.js.map +1 -0
- package/dist/procedures/types.d.ts +370 -0
- package/dist/procedures/types.d.ts.map +1 -0
- package/dist/procedures/types.js +23 -0
- package/dist/procedures/types.js.map +1 -0
- package/dist/server/browser-guard.d.ts +69 -0
- package/dist/server/browser-guard.d.ts.map +1 -0
- package/dist/server/browser-guard.js +103 -0
- package/dist/server/browser-guard.js.map +1 -0
- package/dist/server/host-policy.d.ts +59 -0
- package/dist/server/host-policy.d.ts.map +1 -0
- package/dist/server/host-policy.js +82 -0
- package/dist/server/host-policy.js.map +1 -0
- package/dist/server/index.d.ts +46 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +42 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/method.d.ts +24 -0
- package/dist/server/method.d.ts.map +1 -0
- package/dist/server/method.js +29 -0
- package/dist/server/method.js.map +1 -0
- package/dist/server/procedure-server.d.ts +212 -0
- package/dist/server/procedure-server.d.ts.map +1 -0
- package/dist/server/procedure-server.js +323 -0
- package/dist/server/procedure-server.js.map +1 -0
- package/dist/server/server.d.ts +161 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +279 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +106 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +29 -0
- package/dist/server/types.js.map +1 -0
- package/package.json +115 -3
- package/src/adapters/http/client/index.ts +51 -0
- package/src/adapters/http/client/transport.ts +338 -0
- package/src/adapters/http/client/types.ts +33 -0
- package/src/adapters/http/index.ts +7 -0
- package/src/adapters/http/server/index.ts +14 -0
- package/src/adapters/http/server/strategies.ts +105 -0
- package/src/adapters/http/server/transport.ts +622 -0
- package/src/adapters/http/server/types.ts +81 -0
- package/src/adapters/http/shared/constants.ts +108 -0
- package/src/adapters/http/shared/errors.ts +199 -0
- package/src/adapters/http/shared/headers.ts +291 -0
- package/src/adapters/http/shared/index.ts +21 -0
- package/src/adapters/http/shared/status-codes.ts +212 -0
- package/src/adapters/http/shared/strategies.ts +255 -0
- package/src/adapters/local/client/index.ts +11 -0
- package/src/adapters/local/client/transport.ts +188 -0
- package/src/adapters/local/client/types.ts +50 -0
- package/src/adapters/metadata.ts +17 -0
- package/src/adapters/mock/client/builder.ts +64 -0
- package/src/adapters/mock/client/index.ts +19 -0
- package/src/adapters/mock/client/transport.ts +352 -0
- package/src/adapters/mock/client/types.ts +99 -0
- package/src/adapters/websocket/client/index.ts +18 -0
- package/src/adapters/websocket/client/transport.ts +733 -0
- package/src/adapters/websocket/client/types.ts +235 -0
- package/src/adapters/websocket/index.ts +24 -0
- package/src/adapters/websocket/server/index.ts +18 -0
- package/src/adapters/websocket/server/transport.ts +705 -0
- package/src/adapters/websocket/server/types.ts +169 -0
- package/src/browser.ts +373 -0
- package/src/client/batch-executor.ts +514 -0
- package/src/client/call-types.ts +491 -0
- package/src/client/client.ts +1202 -0
- package/src/client/consumption.ts +288 -0
- package/src/client/context.ts +228 -0
- package/src/client/errors/README.md +279 -0
- package/src/client/errors/codes.ts +88 -0
- package/src/client/errors/factory.ts +263 -0
- package/src/client/errors/http-errors.ts +601 -0
- package/src/client/errors/http-status.ts +82 -0
- package/src/client/errors/index.ts +72 -0
- package/src/client/errors/registry.ts +595 -0
- package/src/client/errors/types.ts +139 -0
- package/src/client/index.ts +124 -0
- package/src/client/middleware/auth.ts +132 -0
- package/src/client/middleware/cache.ts +316 -0
- package/src/client/middleware/circuit-breaker.ts +339 -0
- package/src/client/middleware/contexts.ts +319 -0
- package/src/client/middleware/items.ts +114 -0
- package/src/client/middleware/lru.ts +66 -0
- package/src/client/middleware/pagination.ts +213 -0
- package/src/client/middleware/rate-limit.ts +315 -0
- package/src/client/middleware/retry.ts +236 -0
- package/src/client/middleware/timeout.ts +308 -0
- package/src/client/middleware/tracing.ts +191 -0
- package/src/client/route-resolver.ts +407 -0
- package/src/client/typed-method.ts +65 -0
- package/src/client/typed.ts +140 -0
- package/src/client/types.ts +361 -0
- package/src/client/validation/index.ts +56 -0
- package/src/client/validation/middleware.ts +254 -0
- package/src/client/validation/types.ts +162 -0
- package/src/events/bus.ts +594 -0
- package/src/events/index.ts +67 -0
- package/src/events/types.ts +263 -0
- package/src/index.ts +33 -0
- package/src/middleware/compose.ts +159 -0
- package/src/middleware/index.ts +28 -0
- package/src/middleware/types.ts +166 -0
- package/src/procedures/cli/announce.ts +470 -0
- package/src/procedures/cli/discover.ts +390 -0
- package/src/procedures/cli/index.ts +229 -0
- package/src/procedures/cli/init.ts +370 -0
- package/src/procedures/collection/index.ts +51 -0
- package/src/procedures/collection/procedures.ts +245 -0
- package/src/procedures/collection/schemas.ts +550 -0
- package/src/procedures/collection/storage.ts +53 -0
- package/src/procedures/core/array.ts +1024 -0
- package/src/procedures/core/comparison.ts +263 -0
- package/src/procedures/core/index.ts +895 -0
- package/src/procedures/core/logic.ts +225 -0
- package/src/procedures/core/math.ts +469 -0
- package/src/procedures/core/meta.ts +384 -0
- package/src/procedures/core/object.ts +427 -0
- package/src/procedures/core/operands.ts +119 -0
- package/src/procedures/core/outputs.ts +48 -0
- package/src/procedures/core/results.ts +296 -0
- package/src/procedures/core/schemas.ts +123 -0
- package/src/procedures/core/string.ts +458 -0
- package/src/procedures/core/type.ts +344 -0
- package/src/procedures/define-procedure.ts +531 -0
- package/src/procedures/define.ts +387 -0
- package/src/procedures/discovery.ts +76 -0
- package/src/procedures/index.ts +228 -0
- package/src/procedures/interceptors.ts +272 -0
- package/src/procedures/invoke.ts +413 -0
- package/src/procedures/module.ts +107 -0
- package/src/procedures/policy.ts +171 -0
- package/src/procedures/ref.ts +1305 -0
- package/src/procedures/registry.ts +473 -0
- package/src/procedures/schema.ts +225 -0
- package/src/procedures/types.ts +485 -0
- package/src/server/browser-guard.ts +147 -0
- package/src/server/host-policy.ts +121 -0
- package/src/server/index.ts +70 -0
- package/src/server/method.ts +33 -0
- package/src/server/procedure-server.ts +417 -0
- package/src/server/server.ts +364 -0
- package/src/server/types.ts +147 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks of requests that a web browser can send to a procedure server.
|
|
3
|
+
*
|
|
4
|
+
* A server serves its whole registry, often with `shell.*` in it, and a web page that the user
|
|
5
|
+
* opens can send requests to `127.0.0.1`. Before, the HTTP server transport read any request
|
|
6
|
+
* body as JSON, so a "simple" cross-site POST (`Content-Type: text/plain`, no CORS preflight)
|
|
7
|
+
* ran any procedure, and the WebSocket server accepted a connection from any page
|
|
8
|
+
* (cross-site WebSocket hijacking). The checks here are on by default in both transports:
|
|
9
|
+
*
|
|
10
|
+
* - A connection that arrives on a loopback address must name a loopback host in its `Host`
|
|
11
|
+
* header. A DNS rebinding attack sends the name of the attacker's site.
|
|
12
|
+
* - A browser request (an `Origin` header) must come from the server's own origin, or from an
|
|
13
|
+
* origin in `allowedOrigins`.
|
|
14
|
+
* - A request that the browser marks `Sec-Fetch-Site: cross-site` or `same-site` and that has
|
|
15
|
+
* no allowed origin is refused (an image tag or a form sends no `Origin` for a GET).
|
|
16
|
+
* - HTTP only: a procedure call by GET or HEAD is refused unless `allowGet` is true, and a
|
|
17
|
+
* request body must be JSON.
|
|
18
|
+
*/
|
|
19
|
+
const LOOPBACK_NAMES = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
|
|
20
|
+
/** True for a host name or a bind address that only this computer can reach. */
|
|
21
|
+
export function isLoopbackHost(host) {
|
|
22
|
+
return LOOPBACK_NAMES.has(host.toLowerCase());
|
|
23
|
+
}
|
|
24
|
+
/** True for a local socket address on the loopback interface (IPv4, IPv6, or IPv4 in IPv6). */
|
|
25
|
+
export function isLoopbackAddress(address) {
|
|
26
|
+
if (!address)
|
|
27
|
+
return false;
|
|
28
|
+
const plain = address.startsWith("::ffff:") ? address.slice("::ffff:".length) : address;
|
|
29
|
+
return plain === "::1" || plain.startsWith("127.");
|
|
30
|
+
}
|
|
31
|
+
/** The name of a Host header without its port: "localhost:3000" gives "localhost", "[::1]:80" gives "[::1]". */
|
|
32
|
+
export function hostNameOf(header) {
|
|
33
|
+
if (!header)
|
|
34
|
+
return "";
|
|
35
|
+
if (header.startsWith("["))
|
|
36
|
+
return header.slice(0, header.indexOf("]") + 1).toLowerCase();
|
|
37
|
+
return (header.split(":")[0] ?? "").toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
function originAllowedBy(origin, allowed) {
|
|
40
|
+
if (allowed === "*")
|
|
41
|
+
return true;
|
|
42
|
+
if (typeof allowed === "function")
|
|
43
|
+
return allowed(origin);
|
|
44
|
+
return (allowed ?? []).includes(origin);
|
|
45
|
+
}
|
|
46
|
+
/** True when the origin is the origin of the server that the request names in its Host header. */
|
|
47
|
+
function sameOrigin(origin, hostHeader) {
|
|
48
|
+
if (!hostHeader)
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
return new URL(origin).host.toLowerCase() === hostHeader.toLowerCase();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** True for a media type of JSON: `application/json` or a `+json` type. */
|
|
58
|
+
function isJsonType(contentType) {
|
|
59
|
+
const type = (contentType ?? "").split(";")[0].trim().toLowerCase();
|
|
60
|
+
return type === "application/json" || type.endsWith("+json");
|
|
61
|
+
}
|
|
62
|
+
/** True when the request has a body: a `Content-Length` above 0, or a chunked body. */
|
|
63
|
+
function hasBody(headers) {
|
|
64
|
+
const length = Number(headers["content-length"] ?? 0);
|
|
65
|
+
return length > 0 || headers["transfer-encoding"] !== undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The checks of the host, the origin and the fetch site, for HTTP and WebSocket requests.
|
|
69
|
+
* `http` adds the checks of the method and the body.
|
|
70
|
+
*/
|
|
71
|
+
export function checkBrowserRequest(req, options = {}, http = false) {
|
|
72
|
+
const { headers } = req;
|
|
73
|
+
// DNS rebinding: a request on a loopback address must name a loopback host
|
|
74
|
+
if (options.allowedHosts !== "*" && isLoopbackAddress(req.socket?.localAddress)) {
|
|
75
|
+
const name = hostNameOf(headers.host);
|
|
76
|
+
if (!LOOPBACK_NAMES.has(name) && !(options.allowedHosts ?? []).includes(name)) {
|
|
77
|
+
return { ok: false, status: 403, code: "FORBIDDEN_HOST", message: `Forbidden: the host "${name}" is not allowed` };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const origin = typeof headers.origin === "string" ? headers.origin : undefined;
|
|
81
|
+
if (origin !== undefined) {
|
|
82
|
+
if (!sameOrigin(origin, headers.host) && !originAllowedBy(origin, options.allowedOrigins)) {
|
|
83
|
+
return { ok: false, status: 403, code: "FORBIDDEN_ORIGIN", message: `Forbidden: the origin "${origin}" is not allowed` };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const site = headers["sec-fetch-site"];
|
|
88
|
+
if ((site === "cross-site" || site === "same-site") && options.allowedOrigins !== "*") {
|
|
89
|
+
return { ok: false, status: 403, code: "FORBIDDEN_ORIGIN", message: "Forbidden: a request from another site" };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (http) {
|
|
93
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
94
|
+
if ((method === "GET" || method === "HEAD") && !options.allowGet) {
|
|
95
|
+
return { ok: false, status: 405, code: "METHOD_NOT_ALLOWED", message: "Call a procedure with POST" };
|
|
96
|
+
}
|
|
97
|
+
if (hasBody(headers) && !isJsonType(headers["content-type"])) {
|
|
98
|
+
return { ok: false, status: 415, code: "UNSUPPORTED_MEDIA_TYPE", message: "The request body must be JSON (Content-Type: application/json)" };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return { ok: true };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=browser-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-guard.js","sourceRoot":"","sources":["../../src/server/browser-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The policy of a host: one place that builds what a server lets its callers do (roadmap 2.3).
|
|
3
|
+
*
|
|
4
|
+
* The three hosts (the MCP dev-tools server, the `server` CLI, the warm server of `mark`) each
|
|
5
|
+
* built their own expose rule, call rule, time limit and token. `hostPolicy()` builds them from
|
|
6
|
+
* one set of options, and `procedureServerOptions()` gives them to a `ProcedureServer`.
|
|
7
|
+
*
|
|
8
|
+
* - `expose`: the procedures that callers reach. Patterns: an exact key (`git.status`), a prefix
|
|
9
|
+
* (`git.*`) or `*`. A tool surface: namespaces and the keys to leave out. Without it: every
|
|
10
|
+
* procedure.
|
|
11
|
+
* - `strictCalls`: a procedure of code that declares no `metadata.calls` calls only exposed
|
|
12
|
+
* procedures (a host for an outside caller sets it).
|
|
13
|
+
* - `timeoutMs`: the time limit of each call from a caller (not of its nested calls).
|
|
14
|
+
* - `token`, `browser`: the checks of the network transports (`client-server` applies them).
|
|
15
|
+
*/
|
|
16
|
+
import type { ProcedurePath } from "../procedures/types.js";
|
|
17
|
+
import type { Interceptor } from "../procedures/invoke.js";
|
|
18
|
+
import type { BrowserGuardOptions } from "./browser-guard.js";
|
|
19
|
+
import type { ProcedureRegistry } from "../procedures/registry.js";
|
|
20
|
+
import type { ProcedureServerOptions } from "./procedure-server.js";
|
|
21
|
+
/** The procedures of a host that are tools: namespaces (first path segments), less some keys. */
|
|
22
|
+
export interface ToolSurface {
|
|
23
|
+
namespaces: readonly string[];
|
|
24
|
+
exclude?: readonly string[] | undefined;
|
|
25
|
+
}
|
|
26
|
+
/** The rule of a list of patterns: an exact key (`git.status`), a prefix (`git.*`) or `*`. */
|
|
27
|
+
export declare function exposePatterns(patterns: readonly string[]): (path: ProcedurePath) => boolean;
|
|
28
|
+
/** The rule of a tool surface: the namespaces, less the excluded keys. */
|
|
29
|
+
export declare function surfaceRule(surface: ToolSurface): (path: ProcedurePath) => boolean;
|
|
30
|
+
/** The options of `hostPolicy()`. */
|
|
31
|
+
export interface HostPolicyOptions {
|
|
32
|
+
/** The procedures that callers reach. Without it: every procedure of the registry. */
|
|
33
|
+
expose?: readonly string[] | ToolSurface | ((path: ProcedurePath) => boolean) | undefined;
|
|
34
|
+
/** Keys that callers do not reach, also when `expose` matches them. */
|
|
35
|
+
exclude?: readonly string[] | undefined;
|
|
36
|
+
/** A procedure of code with no `metadata.calls` calls only exposed procedures. */
|
|
37
|
+
strictCalls?: boolean | undefined;
|
|
38
|
+
/** The time limit of each call from a caller, in milliseconds. 0 or no value: no limit. */
|
|
39
|
+
timeoutMs?: number | undefined;
|
|
40
|
+
/** More interceptors, after the policy's own (tracing, metrics). */
|
|
41
|
+
interceptors?: readonly Interceptor[] | undefined;
|
|
42
|
+
/** The token that each network request must send (HTTP and WebSocket transports). */
|
|
43
|
+
token?: string | undefined;
|
|
44
|
+
/** The browser checks of the network transports (`allowedOrigins`, `allowedHosts`, `allowGet`). */
|
|
45
|
+
browser?: BrowserGuardOptions | undefined;
|
|
46
|
+
}
|
|
47
|
+
/** What a host lets its callers do. */
|
|
48
|
+
export interface HostPolicy {
|
|
49
|
+
readonly expose: ((path: ProcedurePath) => boolean) | undefined;
|
|
50
|
+
readonly strictCalls: boolean;
|
|
51
|
+
readonly interceptors: readonly Interceptor[];
|
|
52
|
+
readonly token: string | undefined;
|
|
53
|
+
readonly browser: BrowserGuardOptions;
|
|
54
|
+
}
|
|
55
|
+
/** This function builds the policy of a host from its options. */
|
|
56
|
+
export declare function hostPolicy(options?: HostPolicyOptions): HostPolicy;
|
|
57
|
+
/** The options of a `ProcedureServer` that serves a registry under a policy. */
|
|
58
|
+
export declare function procedureServerOptions(policy: HostPolicy, registry?: ProcedureRegistry): ProcedureServerOptions;
|
|
59
|
+
//# sourceMappingURL=host-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-policy.d.ts","sourceRoot":"","sources":["../../src/server/host-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAc5F;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAIlF;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC1F,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IAClD,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,mGAAmG;IACnG,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC3C;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC;AAiBD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAatE;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,sBAAsB,CAQ/G"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The policy of a host: one place that builds what a server lets its callers do (roadmap 2.3).
|
|
3
|
+
*
|
|
4
|
+
* The three hosts (the MCP dev-tools server, the `server` CLI, the warm server of `mark`) each
|
|
5
|
+
* built their own expose rule, call rule, time limit and token. `hostPolicy()` builds them from
|
|
6
|
+
* one set of options, and `procedureServerOptions()` gives them to a `ProcedureServer`.
|
|
7
|
+
*
|
|
8
|
+
* - `expose`: the procedures that callers reach. Patterns: an exact key (`git.status`), a prefix
|
|
9
|
+
* (`git.*`) or `*`. A tool surface: namespaces and the keys to leave out. Without it: every
|
|
10
|
+
* procedure.
|
|
11
|
+
* - `strictCalls`: a procedure of code that declares no `metadata.calls` calls only exposed
|
|
12
|
+
* procedures (a host for an outside caller sets it).
|
|
13
|
+
* - `timeoutMs`: the time limit of each call from a caller (not of its nested calls).
|
|
14
|
+
* - `token`, `browser`: the checks of the network transports (`client-server` applies them).
|
|
15
|
+
*/
|
|
16
|
+
import { timeoutInterceptor } from "../procedures/interceptors.js";
|
|
17
|
+
/** The rule of a list of patterns: an exact key (`git.status`), a prefix (`git.*`) or `*`. */
|
|
18
|
+
export function exposePatterns(patterns) {
|
|
19
|
+
const exact = new Set();
|
|
20
|
+
const prefixes = [];
|
|
21
|
+
let all = false;
|
|
22
|
+
for (const pattern of patterns) {
|
|
23
|
+
if (pattern === "*")
|
|
24
|
+
all = true;
|
|
25
|
+
else if (pattern.endsWith(".*"))
|
|
26
|
+
prefixes.push(pattern.slice(0, -1));
|
|
27
|
+
else
|
|
28
|
+
exact.add(pattern);
|
|
29
|
+
}
|
|
30
|
+
return (path) => {
|
|
31
|
+
if (all)
|
|
32
|
+
return true;
|
|
33
|
+
const key = path.join(".");
|
|
34
|
+
return exact.has(key) || prefixes.some((prefix) => key.startsWith(prefix));
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** The rule of a tool surface: the namespaces, less the excluded keys. */
|
|
38
|
+
export function surfaceRule(surface) {
|
|
39
|
+
const namespaces = new Set(surface.namespaces);
|
|
40
|
+
const excluded = new Set(surface.exclude ?? []);
|
|
41
|
+
return (path) => namespaces.has(path[0] ?? "") && !excluded.has(path.join("."));
|
|
42
|
+
}
|
|
43
|
+
function exposeOf(options) {
|
|
44
|
+
const { expose } = options;
|
|
45
|
+
const rule = expose === undefined
|
|
46
|
+
? undefined
|
|
47
|
+
: typeof expose === "function"
|
|
48
|
+
? expose
|
|
49
|
+
: Array.isArray(expose)
|
|
50
|
+
? exposePatterns(expose)
|
|
51
|
+
: surfaceRule(expose);
|
|
52
|
+
const excluded = new Set(options.exclude ?? []);
|
|
53
|
+
if (excluded.size === 0)
|
|
54
|
+
return rule;
|
|
55
|
+
return (path) => !excluded.has(path.join(".")) && (rule ? rule(path) : true);
|
|
56
|
+
}
|
|
57
|
+
/** This function builds the policy of a host from its options. */
|
|
58
|
+
export function hostPolicy(options = {}) {
|
|
59
|
+
const interceptors = [];
|
|
60
|
+
if (options.timeoutMs !== undefined && options.timeoutMs > 0) {
|
|
61
|
+
interceptors.push(timeoutInterceptor({ ms: options.timeoutMs }));
|
|
62
|
+
}
|
|
63
|
+
interceptors.push(...(options.interceptors ?? []));
|
|
64
|
+
return {
|
|
65
|
+
expose: exposeOf(options),
|
|
66
|
+
strictCalls: options.strictCalls ?? false,
|
|
67
|
+
interceptors,
|
|
68
|
+
token: options.token,
|
|
69
|
+
browser: options.browser ?? {},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** The options of a `ProcedureServer` that serves a registry under a policy. */
|
|
73
|
+
export function procedureServerOptions(policy, registry) {
|
|
74
|
+
return {
|
|
75
|
+
autoRegister: true,
|
|
76
|
+
...(registry ? { registry } : {}),
|
|
77
|
+
...(policy.expose ? { expose: policy.expose } : {}),
|
|
78
|
+
strictCalls: policy.strictCalls,
|
|
79
|
+
...(policy.interceptors.length > 0 ? { interceptors: policy.interceptors } : {}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=host-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-policy.js","sourceRoot":"","sources":["../../src/server/host-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal Server
|
|
3
|
+
*
|
|
4
|
+
* Protocol-agnostic RPC server architecture.
|
|
5
|
+
* Mirrors the universal client for symmetrical design.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Protocol-agnostic (HTTP, WebSocket, gRPC via adapters)
|
|
9
|
+
* - Unified RPC format internally
|
|
10
|
+
* - Middleware support
|
|
11
|
+
* - Handler registry with pattern matching
|
|
12
|
+
* - Graceful shutdown
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { Server, HttpServerTransport } from "@common/server";
|
|
17
|
+
*
|
|
18
|
+
* const server = new Server();
|
|
19
|
+
*
|
|
20
|
+
* // Register handlers
|
|
21
|
+
* server.register(
|
|
22
|
+
* { service: "users", operation: "get" },
|
|
23
|
+
* async (req) => ({
|
|
24
|
+
* id: req.id,
|
|
25
|
+
* status: { type: "success", code: 200 },
|
|
26
|
+
* payload: { id: req.payload.id, name: "John" },
|
|
27
|
+
* metadata: {}
|
|
28
|
+
* })
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* // Add HTTP transport
|
|
32
|
+
* const httpTransport = new HttpServerTransport(server, { port: 3000 });
|
|
33
|
+
* await httpTransport.start();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export { Server } from "./server.js";
|
|
37
|
+
export type { ServerOptions } from "./server.js";
|
|
38
|
+
export { ProcedureServer, createProcedureServer } from "./procedure-server.js";
|
|
39
|
+
export type { ProcedureServerOptions, StorageConfig } from "./procedure-server.js";
|
|
40
|
+
export { pathToMethod, methodToPath } from "./method.js";
|
|
41
|
+
export { HandlerNotFoundError, ServerError, type ServerRequest, type ServerResponse, type ServerHandler, type ServerMiddleware, type ServerContext, type ServerRunner, type ServerTransport, } from "./types.js";
|
|
42
|
+
export { HttpServerTransport, defaultServerUrlStrategy, rpcServerUrlStrategy, } from "../adapters/http/server/index.js";
|
|
43
|
+
export type { HttpServerTransportOptions, HttpUrlStrategy, } from "../adapters/http/server/index.js";
|
|
44
|
+
export { WebSocketServerTransport } from "../adapters/websocket/server/index.js";
|
|
45
|
+
export type { WebSocketServerTransportOptions, WebSocketAuthHandler, WebSocketConnectionHandler, WebSocketMessage, } from "../adapters/websocket/server/index.js";
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,0BAA0B,EAC1B,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EACV,+BAA+B,EAC/B,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal Server
|
|
3
|
+
*
|
|
4
|
+
* Protocol-agnostic RPC server architecture.
|
|
5
|
+
* Mirrors the universal client for symmetrical design.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Protocol-agnostic (HTTP, WebSocket, gRPC via adapters)
|
|
9
|
+
* - Unified RPC format internally
|
|
10
|
+
* - Middleware support
|
|
11
|
+
* - Handler registry with pattern matching
|
|
12
|
+
* - Graceful shutdown
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { Server, HttpServerTransport } from "@common/server";
|
|
17
|
+
*
|
|
18
|
+
* const server = new Server();
|
|
19
|
+
*
|
|
20
|
+
* // Register handlers
|
|
21
|
+
* server.register(
|
|
22
|
+
* { service: "users", operation: "get" },
|
|
23
|
+
* async (req) => ({
|
|
24
|
+
* id: req.id,
|
|
25
|
+
* status: { type: "success", code: 200 },
|
|
26
|
+
* payload: { id: req.payload.id, name: "John" },
|
|
27
|
+
* metadata: {}
|
|
28
|
+
* })
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* // Add HTTP transport
|
|
32
|
+
* const httpTransport = new HttpServerTransport(server, { port: 3000 });
|
|
33
|
+
* await httpTransport.start();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export { Server } from "./server.js";
|
|
37
|
+
export { ProcedureServer, createProcedureServer } from "./procedure-server.js";
|
|
38
|
+
export { pathToMethod, methodToPath } from "./method.js";
|
|
39
|
+
export { HandlerNotFoundError, ServerError, } from "./types.js";
|
|
40
|
+
export { HttpServerTransport, defaultServerUrlStrategy, rpcServerUrlStrategy, } from "../adapters/http/server/index.js";
|
|
41
|
+
export { WebSocketServerTransport } from "../adapters/websocket/server/index.js";
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,WAAW,GAQZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one mapping between a procedure path and a transport method.
|
|
3
|
+
*
|
|
4
|
+
* A path `["docker", "compose", "up"]` is the method `{ service: "docker.compose", operation: "up" }`:
|
|
5
|
+
* the last segment is the operation, and the other segments are the service. Before, some hosts
|
|
6
|
+
* sent `{ service: "docker", operation: "compose.up" }` and others the form above, and the
|
|
7
|
+
* server matched methods exactly, so a 3-segment procedure was not found through a warm server
|
|
8
|
+
* (deep dive architecture review 3.3).
|
|
9
|
+
*
|
|
10
|
+
* `methodToPath` splits both the service and the operation on ".", so it reads both forms.
|
|
11
|
+
*/
|
|
12
|
+
import type { Method } from "../client/types.js";
|
|
13
|
+
import type { ProcedurePath } from "../procedures/types.js";
|
|
14
|
+
/**
|
|
15
|
+
* This function gives the transport method of a procedure path. A path needs at least two
|
|
16
|
+
* segments, because a method has a service and an operation.
|
|
17
|
+
*/
|
|
18
|
+
export declare function pathToMethod(path: readonly string[]): Method;
|
|
19
|
+
/**
|
|
20
|
+
* This function gives the procedure path of a transport method. It accepts both encodings:
|
|
21
|
+
* `{ service: "a.b", operation: "c" }` and `{ service: "a", operation: "b.c" }` give `["a", "b", "c"]`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function methodToPath(method: Pick<Method, "service" | "operation">): ProcedurePath;
|
|
24
|
+
//# sourceMappingURL=method.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../src/server/method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC,GAAG,aAAa,CAEzF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one mapping between a procedure path and a transport method.
|
|
3
|
+
*
|
|
4
|
+
* A path `["docker", "compose", "up"]` is the method `{ service: "docker.compose", operation: "up" }`:
|
|
5
|
+
* the last segment is the operation, and the other segments are the service. Before, some hosts
|
|
6
|
+
* sent `{ service: "docker", operation: "compose.up" }` and others the form above, and the
|
|
7
|
+
* server matched methods exactly, so a 3-segment procedure was not found through a warm server
|
|
8
|
+
* (deep dive architecture review 3.3).
|
|
9
|
+
*
|
|
10
|
+
* `methodToPath` splits both the service and the operation on ".", so it reads both forms.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* This function gives the transport method of a procedure path. A path needs at least two
|
|
14
|
+
* segments, because a method has a service and an operation.
|
|
15
|
+
*/
|
|
16
|
+
export function pathToMethod(path) {
|
|
17
|
+
if (path.length < 2) {
|
|
18
|
+
throw new Error(`Invalid procedure path (it needs two segments or more): ${path.join(".")}`);
|
|
19
|
+
}
|
|
20
|
+
return { service: path.slice(0, -1).join("."), operation: path[path.length - 1] };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* This function gives the procedure path of a transport method. It accepts both encodings:
|
|
24
|
+
* `{ service: "a.b", operation: "c" }` and `{ service: "a", operation: "b.c" }` give `["a", "b", "c"]`.
|
|
25
|
+
*/
|
|
26
|
+
export function methodToPath(method) {
|
|
27
|
+
return [...method.service.split("."), ...method.operation.split(".")].filter((segment) => segment !== "");
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=method.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.js","sourceRoot":"","sources":["../../src/server/method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB;IAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2DAA2D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA6C;IACxE,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedure Server
|
|
3
|
+
*
|
|
4
|
+
* Server implementation with procedure auto-registration and repository pattern.
|
|
5
|
+
* Integrates with ProcedureRegistry and CollectionStorage backends.
|
|
6
|
+
*/
|
|
7
|
+
import { Server, type ServerOptions } from "./server.js";
|
|
8
|
+
import type { Method, ServerHandler, ServerResponse } from "./types.js";
|
|
9
|
+
import type { AnyProcedure, ProcedurePath, RepositoryProvider, ProcedureModule } from "../procedures/types.js";
|
|
10
|
+
import { ProcedureRegistry } from "../procedures/registry.js";
|
|
11
|
+
import { type Interceptor } from "../procedures/invoke.js";
|
|
12
|
+
import type { CollectionStorage } from "../procedures/collection/storage.js";
|
|
13
|
+
/**
|
|
14
|
+
* Storage configuration for a collection.
|
|
15
|
+
*/
|
|
16
|
+
export interface StorageConfig<T = unknown> {
|
|
17
|
+
/** Storage backend instance */
|
|
18
|
+
storage: CollectionStorage<T>;
|
|
19
|
+
/** Collection name (for mapping) */
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Options for ProcedureServer.
|
|
24
|
+
*/
|
|
25
|
+
export interface ProcedureServerOptions extends ServerOptions {
|
|
26
|
+
/** Procedure registry to use (defaults to global) */
|
|
27
|
+
registry?: ProcedureRegistry;
|
|
28
|
+
/** Whether to auto-register all procedures from registry */
|
|
29
|
+
autoRegister?: boolean;
|
|
30
|
+
/** Collections to configure with storage backends */
|
|
31
|
+
collections?: Record<string, CollectionStorage<unknown>>;
|
|
32
|
+
/**
|
|
33
|
+
* The procedures that the callers of this server can reach. `registerFromRegistry()` registers
|
|
34
|
+
* only these procedures. A data-driven procedure (control flow, `eval`, a procedure that
|
|
35
|
+
* `procedure.define` made) can call only these procedures too, because its caller chooses
|
|
36
|
+
* what it calls. A procedure of code calls the procedures of its `metadata.calls`
|
|
37
|
+
* (`docker.run` declares `shell.run`) and the exposed ones. Without this rule, the server
|
|
38
|
+
* exposes every procedure. See `procedures/policy.ts` (deep dive MCP-3).
|
|
39
|
+
*/
|
|
40
|
+
expose?: ((path: ProcedurePath) => boolean) | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* True: a procedure of code without `metadata.calls` can call only the exposed procedures.
|
|
43
|
+
* A server for an outside caller (the MCP server of the dev tools) sets it.
|
|
44
|
+
*/
|
|
45
|
+
strictCalls?: boolean | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* The interceptors of each request and its nested calls, the outermost first: policy,
|
|
48
|
+
* tracing, timeouts, metrics (see `procedures/interceptors.ts`).
|
|
49
|
+
*/
|
|
50
|
+
interceptors?: readonly Interceptor[] | undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The error response of a failed invocation. An invocation error keeps its code
|
|
54
|
+
* (VALIDATION_ERROR, NOT_EXPOSED, ABORTED and so on). An error of the handler is HANDLER_ERROR.
|
|
55
|
+
*/
|
|
56
|
+
export declare function errorResponse(id: string, error: unknown): ServerResponse<unknown>;
|
|
57
|
+
/**
|
|
58
|
+
* Server with procedure auto-registration and repository pattern.
|
|
59
|
+
*
|
|
60
|
+
* Features:
|
|
61
|
+
* - Auto-registers handlers from procedure definitions
|
|
62
|
+
* - Repository pattern for storage backend injection
|
|
63
|
+
* - Collection storage configuration per-collection
|
|
64
|
+
* - Integrates with ProcedureRegistry
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const server = new ProcedureServer({
|
|
69
|
+
* collections: {
|
|
70
|
+
* users: new ApiStorage(remoteClient, { service: 'users' }),
|
|
71
|
+
* cache: new InMemoryStorage(),
|
|
72
|
+
* }
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* // Register collection procedures
|
|
76
|
+
* server.registerCollectionProcedures('users');
|
|
77
|
+
*
|
|
78
|
+
* // Or auto-register all from registry
|
|
79
|
+
* server.registerFromRegistry();
|
|
80
|
+
*
|
|
81
|
+
* await server.start();
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare class ProcedureServer extends Server implements RepositoryProvider {
|
|
85
|
+
private readonly procedureRegistry;
|
|
86
|
+
private readonly storages;
|
|
87
|
+
/** The procedures that `registerProcedure` pinned, by key */
|
|
88
|
+
private readonly pinnedProcedures;
|
|
89
|
+
/**
|
|
90
|
+
* True after `registerFromRegistry()`: the server serves each procedure of the registry that
|
|
91
|
+
* has a handler and passes the expose rule, looked up when the request arrives (deep dive
|
|
92
|
+
* TRN-13). Before, the server copied the registry at startup: a later registration was not
|
|
93
|
+
* found, and an override or an unregistration was not seen.
|
|
94
|
+
*/
|
|
95
|
+
private servesRegistry;
|
|
96
|
+
private readonly expose;
|
|
97
|
+
private readonly strictCalls;
|
|
98
|
+
private readonly interceptors;
|
|
99
|
+
constructor(options?: ProcedureServerOptions);
|
|
100
|
+
/**
|
|
101
|
+
* Get storage for a collection.
|
|
102
|
+
*
|
|
103
|
+
* @param collection - Collection name
|
|
104
|
+
* @returns Storage instance
|
|
105
|
+
* @throws Error if collection not configured
|
|
106
|
+
*/
|
|
107
|
+
getStorage<T>(collection: string): CollectionStorage<T>;
|
|
108
|
+
/**
|
|
109
|
+
* Check if a collection is configured.
|
|
110
|
+
*
|
|
111
|
+
* @param collection - Collection name
|
|
112
|
+
*/
|
|
113
|
+
hasCollection(collection: string): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Configure storage for a collection.
|
|
116
|
+
*
|
|
117
|
+
* @param name - Collection name
|
|
118
|
+
* @param storage - Storage backend
|
|
119
|
+
* @returns this (for chaining)
|
|
120
|
+
*/
|
|
121
|
+
useStorage<T>(name: string, storage: CollectionStorage<T>): this;
|
|
122
|
+
/**
|
|
123
|
+
* Configure multiple storages at once.
|
|
124
|
+
*
|
|
125
|
+
* @param storages - Map of collection names to storage backends
|
|
126
|
+
* @returns this (for chaining)
|
|
127
|
+
*/
|
|
128
|
+
useStorages(storages: Record<string, CollectionStorage<unknown>>): this;
|
|
129
|
+
/**
|
|
130
|
+
* Get all configured collection names.
|
|
131
|
+
*/
|
|
132
|
+
getCollectionNames(): string[];
|
|
133
|
+
/**
|
|
134
|
+
* Register a procedure as a server handler. The server keeps this procedure object. A
|
|
135
|
+
* procedure of the registry at the same path comes first when the server serves the registry.
|
|
136
|
+
*
|
|
137
|
+
* @param procedure - Procedure definition
|
|
138
|
+
*/
|
|
139
|
+
registerProcedure(procedure: AnyProcedure): void;
|
|
140
|
+
/**
|
|
141
|
+
* Register multiple procedures.
|
|
142
|
+
*
|
|
143
|
+
* @param procedures - Array of procedures
|
|
144
|
+
*/
|
|
145
|
+
registerProcedures(procedures: AnyProcedure[]): void;
|
|
146
|
+
/**
|
|
147
|
+
* Register a procedure module.
|
|
148
|
+
*
|
|
149
|
+
* @param module - Module with procedures array
|
|
150
|
+
*/
|
|
151
|
+
registerModule(module: ProcedureModule): void;
|
|
152
|
+
/**
|
|
153
|
+
* Serve the procedures of the registry. The server looks up each request in the registry when
|
|
154
|
+
* the request arrives, so a later registration, an override or an unregistration takes effect
|
|
155
|
+
* at once. A procedure without a handler (a stub synced from storage, BUGS-2026-07 H14/H28) or
|
|
156
|
+
* outside the expose rule is not served.
|
|
157
|
+
*/
|
|
158
|
+
registerFromRegistry(): void;
|
|
159
|
+
/**
|
|
160
|
+
* The procedure that answers a method, or undefined. The registry comes first (when the server
|
|
161
|
+
* serves it), then the pinned procedures.
|
|
162
|
+
*/
|
|
163
|
+
private resolveProcedure;
|
|
164
|
+
/**
|
|
165
|
+
* The handlers that `register()` added come first (exact or pattern matches). Then the server
|
|
166
|
+
* looks up the procedure of the method.
|
|
167
|
+
*/
|
|
168
|
+
protected findHandler(method: Method): ServerHandler | null;
|
|
169
|
+
/** Run a procedure for a request. */
|
|
170
|
+
private invoke;
|
|
171
|
+
/**
|
|
172
|
+
* Register collection procedures for a specific collection.
|
|
173
|
+
* Creates standard CRUD procedures using the configured storage.
|
|
174
|
+
*
|
|
175
|
+
* @param collectionName - Collection name
|
|
176
|
+
*/
|
|
177
|
+
registerCollectionProcedures(collectionName: string): void;
|
|
178
|
+
/** The paths that the server serves now. */
|
|
179
|
+
private servedKeys;
|
|
180
|
+
/**
|
|
181
|
+
* Get count of the procedures that the server serves now.
|
|
182
|
+
*/
|
|
183
|
+
get procedureCount(): number;
|
|
184
|
+
/**
|
|
185
|
+
* Check if the server serves a procedure now.
|
|
186
|
+
*
|
|
187
|
+
* @param path - Procedure path
|
|
188
|
+
*/
|
|
189
|
+
/**
|
|
190
|
+
* The registry that this server serves. A face of the server (the MCP transport) lists its
|
|
191
|
+
* tools from it: with an explicit registry (`createRegistry()`), the global registry is not the
|
|
192
|
+
* server's.
|
|
193
|
+
*/
|
|
194
|
+
getRegistry(): ProcedureRegistry;
|
|
195
|
+
hasProcedure(path: ProcedurePath): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Close all storage backends.
|
|
198
|
+
*/
|
|
199
|
+
closeStorages(): Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Stop server and close storages.
|
|
202
|
+
*/
|
|
203
|
+
stop(): Promise<void>;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Create a procedure server with common configuration.
|
|
207
|
+
*
|
|
208
|
+
* @param options - Server options
|
|
209
|
+
* @returns Configured ProcedureServer
|
|
210
|
+
*/
|
|
211
|
+
export declare function createProcedureServer(options?: ProcedureServerOptions): ProcedureServer;
|
|
212
|
+
//# sourceMappingURL=procedure-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure-server.d.ts","sourceRoot":"","sources":["../../src/server/procedure-server.ts"],"names":[],"mappings":"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"}
|