@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,121 @@
|
|
|
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
|
+
|
|
17
|
+
import type { ProcedurePath } from "../procedures/types.js";
|
|
18
|
+
import type { Interceptor } from "../procedures/invoke.js";
|
|
19
|
+
import { timeoutInterceptor } from "../procedures/interceptors.js";
|
|
20
|
+
import type { BrowserGuardOptions } from "./browser-guard.js";
|
|
21
|
+
import type { ProcedureRegistry } from "../procedures/registry.js";
|
|
22
|
+
import type { ProcedureServerOptions } from "./procedure-server.js";
|
|
23
|
+
|
|
24
|
+
/** The procedures of a host that are tools: namespaces (first path segments), less some keys. */
|
|
25
|
+
export interface ToolSurface {
|
|
26
|
+
namespaces: readonly string[];
|
|
27
|
+
exclude?: readonly string[] | undefined;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The rule of a list of patterns: an exact key (`git.status`), a prefix (`git.*`) or `*`. */
|
|
31
|
+
export function exposePatterns(patterns: readonly string[]): (path: ProcedurePath) => boolean {
|
|
32
|
+
const exact = new Set<string>();
|
|
33
|
+
const prefixes: string[] = [];
|
|
34
|
+
let all = false;
|
|
35
|
+
for (const pattern of patterns) {
|
|
36
|
+
if (pattern === "*") all = true;
|
|
37
|
+
else if (pattern.endsWith(".*")) prefixes.push(pattern.slice(0, -1));
|
|
38
|
+
else exact.add(pattern);
|
|
39
|
+
}
|
|
40
|
+
return (path) => {
|
|
41
|
+
if (all) return true;
|
|
42
|
+
const key = path.join(".");
|
|
43
|
+
return exact.has(key) || prefixes.some((prefix) => key.startsWith(prefix));
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The rule of a tool surface: the namespaces, less the excluded keys. */
|
|
48
|
+
export function surfaceRule(surface: ToolSurface): (path: ProcedurePath) => boolean {
|
|
49
|
+
const namespaces = new Set(surface.namespaces);
|
|
50
|
+
const excluded = new Set(surface.exclude ?? []);
|
|
51
|
+
return (path) => namespaces.has(path[0] ?? "") && !excluded.has(path.join("."));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** The options of `hostPolicy()`. */
|
|
55
|
+
export interface HostPolicyOptions {
|
|
56
|
+
/** The procedures that callers reach. Without it: every procedure of the registry. */
|
|
57
|
+
expose?: readonly string[] | ToolSurface | ((path: ProcedurePath) => boolean) | undefined;
|
|
58
|
+
/** Keys that callers do not reach, also when `expose` matches them. */
|
|
59
|
+
exclude?: readonly string[] | undefined;
|
|
60
|
+
/** A procedure of code with no `metadata.calls` calls only exposed procedures. */
|
|
61
|
+
strictCalls?: boolean | undefined;
|
|
62
|
+
/** The time limit of each call from a caller, in milliseconds. 0 or no value: no limit. */
|
|
63
|
+
timeoutMs?: number | undefined;
|
|
64
|
+
/** More interceptors, after the policy's own (tracing, metrics). */
|
|
65
|
+
interceptors?: readonly Interceptor[] | undefined;
|
|
66
|
+
/** The token that each network request must send (HTTP and WebSocket transports). */
|
|
67
|
+
token?: string | undefined;
|
|
68
|
+
/** The browser checks of the network transports (`allowedOrigins`, `allowedHosts`, `allowGet`). */
|
|
69
|
+
browser?: BrowserGuardOptions | undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** What a host lets its callers do. */
|
|
73
|
+
export interface HostPolicy {
|
|
74
|
+
readonly expose: ((path: ProcedurePath) => boolean) | undefined;
|
|
75
|
+
readonly strictCalls: boolean;
|
|
76
|
+
readonly interceptors: readonly Interceptor[];
|
|
77
|
+
readonly token: string | undefined;
|
|
78
|
+
readonly browser: BrowserGuardOptions;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function exposeOf(options: HostPolicyOptions): ((path: ProcedurePath) => boolean) | undefined {
|
|
82
|
+
const { expose } = options;
|
|
83
|
+
const rule =
|
|
84
|
+
expose === undefined
|
|
85
|
+
? undefined
|
|
86
|
+
: typeof expose === "function"
|
|
87
|
+
? expose
|
|
88
|
+
: Array.isArray(expose)
|
|
89
|
+
? exposePatterns(expose as readonly string[])
|
|
90
|
+
: surfaceRule(expose as ToolSurface);
|
|
91
|
+
const excluded = new Set(options.exclude ?? []);
|
|
92
|
+
if (excluded.size === 0) return rule;
|
|
93
|
+
return (path) => !excluded.has(path.join(".")) && (rule ? rule(path) : true);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** This function builds the policy of a host from its options. */
|
|
97
|
+
export function hostPolicy(options: HostPolicyOptions = {}): HostPolicy {
|
|
98
|
+
const interceptors: Interceptor[] = [];
|
|
99
|
+
if (options.timeoutMs !== undefined && options.timeoutMs > 0) {
|
|
100
|
+
interceptors.push(timeoutInterceptor({ ms: options.timeoutMs }));
|
|
101
|
+
}
|
|
102
|
+
interceptors.push(...(options.interceptors ?? []));
|
|
103
|
+
return {
|
|
104
|
+
expose: exposeOf(options),
|
|
105
|
+
strictCalls: options.strictCalls ?? false,
|
|
106
|
+
interceptors,
|
|
107
|
+
token: options.token,
|
|
108
|
+
browser: options.browser ?? {},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** The options of a `ProcedureServer` that serves a registry under a policy. */
|
|
113
|
+
export function procedureServerOptions(policy: HostPolicy, registry?: ProcedureRegistry): ProcedureServerOptions {
|
|
114
|
+
return {
|
|
115
|
+
autoRegister: true,
|
|
116
|
+
...(registry ? { registry } : {}),
|
|
117
|
+
...(policy.expose ? { expose: policy.expose } : {}),
|
|
118
|
+
strictCalls: policy.strictCalls,
|
|
119
|
+
...(policy.interceptors.length > 0 ? { interceptors: policy.interceptors } : {}),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
|
|
37
|
+
export { Server } from "./server.js";
|
|
38
|
+
export type { ServerOptions } from "./server.js";
|
|
39
|
+
|
|
40
|
+
export { ProcedureServer, createProcedureServer } from "./procedure-server.js";
|
|
41
|
+
export type { ProcedureServerOptions, StorageConfig } from "./procedure-server.js";
|
|
42
|
+
export { pathToMethod, methodToPath } from "./method.js";
|
|
43
|
+
export {
|
|
44
|
+
HandlerNotFoundError,
|
|
45
|
+
ServerError,
|
|
46
|
+
type ServerRequest,
|
|
47
|
+
type ServerResponse,
|
|
48
|
+
type ServerHandler,
|
|
49
|
+
type ServerMiddleware,
|
|
50
|
+
type ServerContext,
|
|
51
|
+
type ServerRunner,
|
|
52
|
+
type ServerTransport,
|
|
53
|
+
} from "./types.js";
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
HttpServerTransport,
|
|
57
|
+
defaultServerUrlStrategy,
|
|
58
|
+
rpcServerUrlStrategy,
|
|
59
|
+
} from "../adapters/http/server/index.js";
|
|
60
|
+
export type {
|
|
61
|
+
HttpServerTransportOptions,
|
|
62
|
+
HttpUrlStrategy,
|
|
63
|
+
} from "../adapters/http/server/index.js";
|
|
64
|
+
export { WebSocketServerTransport } from "../adapters/websocket/server/index.js";
|
|
65
|
+
export type {
|
|
66
|
+
WebSocketServerTransportOptions,
|
|
67
|
+
WebSocketAuthHandler,
|
|
68
|
+
WebSocketConnectionHandler,
|
|
69
|
+
WebSocketMessage,
|
|
70
|
+
} from "../adapters/websocket/server/index.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
import type { Method } from "../client/types.js";
|
|
14
|
+
import type { ProcedurePath } from "../procedures/types.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* This function gives the transport method of a procedure path. A path needs at least two
|
|
18
|
+
* segments, because a method has a service and an operation.
|
|
19
|
+
*/
|
|
20
|
+
export function pathToMethod(path: readonly string[]): Method {
|
|
21
|
+
if (path.length < 2) {
|
|
22
|
+
throw new Error(`Invalid procedure path (it needs two segments or more): ${path.join(".")}`);
|
|
23
|
+
}
|
|
24
|
+
return { service: path.slice(0, -1).join("."), operation: path[path.length - 1]! };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* This function gives the procedure path of a transport method. It accepts both encodings:
|
|
29
|
+
* `{ service: "a.b", operation: "c" }` and `{ service: "a", operation: "b.c" }` give `["a", "b", "c"]`.
|
|
30
|
+
*/
|
|
31
|
+
export function methodToPath(method: Pick<Method, "service" | "operation">): ProcedurePath {
|
|
32
|
+
return [...method.service.split("."), ...method.operation.split(".")].filter((segment) => segment !== "");
|
|
33
|
+
}
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedure Server
|
|
3
|
+
*
|
|
4
|
+
* Server implementation with procedure auto-registration and repository pattern.
|
|
5
|
+
* Integrates with ProcedureRegistry and CollectionStorage backends.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Server, type ServerOptions } from "./server.js";
|
|
9
|
+
import type { Method, ServerHandler, ServerRequest, ServerResponse } from "./types.js";
|
|
10
|
+
import { methodToPath, pathToMethod } from "./method.js";
|
|
11
|
+
import type {
|
|
12
|
+
AnyProcedure,
|
|
13
|
+
ProcedurePath,
|
|
14
|
+
RepositoryProvider,
|
|
15
|
+
ProcedureModule,
|
|
16
|
+
} from "../procedures/types.js";
|
|
17
|
+
import { pathToKey } from "../procedures/types.js";
|
|
18
|
+
import { ProcedureRegistry, PROCEDURE_REGISTRY } from "../procedures/registry.js";
|
|
19
|
+
import { createCollectionProcedures } from "../procedures/collection/procedures.js";
|
|
20
|
+
import { InvocationError, invokeProcedure, type Interceptor } from "../procedures/invoke.js";
|
|
21
|
+
import type { CollectionStorage } from "../procedures/collection/storage.js";
|
|
22
|
+
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Types
|
|
25
|
+
// =============================================================================
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Storage configuration for a collection.
|
|
29
|
+
*/
|
|
30
|
+
export interface StorageConfig<T = unknown> {
|
|
31
|
+
/** Storage backend instance */
|
|
32
|
+
storage: CollectionStorage<T>;
|
|
33
|
+
/** Collection name (for mapping) */
|
|
34
|
+
name: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Options for ProcedureServer.
|
|
39
|
+
*/
|
|
40
|
+
export interface ProcedureServerOptions extends ServerOptions {
|
|
41
|
+
/** Procedure registry to use (defaults to global) */
|
|
42
|
+
registry?: ProcedureRegistry;
|
|
43
|
+
|
|
44
|
+
/** Whether to auto-register all procedures from registry */
|
|
45
|
+
autoRegister?: boolean;
|
|
46
|
+
|
|
47
|
+
/** Collections to configure with storage backends */
|
|
48
|
+
collections?: Record<string, CollectionStorage<unknown>>;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The procedures that the callers of this server can reach. `registerFromRegistry()` registers
|
|
52
|
+
* only these procedures. A data-driven procedure (control flow, `eval`, a procedure that
|
|
53
|
+
* `procedure.define` made) can call only these procedures too, because its caller chooses
|
|
54
|
+
* what it calls. A procedure of code calls the procedures of its `metadata.calls`
|
|
55
|
+
* (`docker.run` declares `shell.run`) and the exposed ones. Without this rule, the server
|
|
56
|
+
* exposes every procedure. See `procedures/policy.ts` (deep dive MCP-3).
|
|
57
|
+
*/
|
|
58
|
+
expose?: ((path: ProcedurePath) => boolean) | undefined;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* True: a procedure of code without `metadata.calls` can call only the exposed procedures.
|
|
62
|
+
* A server for an outside caller (the MCP server of the dev tools) sets it.
|
|
63
|
+
*/
|
|
64
|
+
strictCalls?: boolean | undefined;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The interceptors of each request and its nested calls, the outermost first: policy,
|
|
68
|
+
* tracing, timeouts, metrics (see `procedures/interceptors.ts`).
|
|
69
|
+
*/
|
|
70
|
+
interceptors?: readonly Interceptor[] | undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The error response of a failed invocation. An invocation error keeps its code
|
|
75
|
+
* (VALIDATION_ERROR, NOT_EXPOSED, ABORTED and so on). An error of the handler is HANDLER_ERROR.
|
|
76
|
+
*/
|
|
77
|
+
export function errorResponse(id: string, error: unknown): ServerResponse<unknown> {
|
|
78
|
+
// An error that says it is retryable stays retryable: before, every error lost the flag
|
|
79
|
+
// (deep dive TRN-7)
|
|
80
|
+
const retryable = (error as { retryable?: unknown } | undefined)?.retryable;
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
status: {
|
|
84
|
+
type: "error",
|
|
85
|
+
code: error instanceof InvocationError ? error.code : "HANDLER_ERROR",
|
|
86
|
+
message: error instanceof Error ? error.message : String(error),
|
|
87
|
+
retryable: typeof retryable === "boolean" ? retryable : false,
|
|
88
|
+
},
|
|
89
|
+
metadata: {},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// =============================================================================
|
|
94
|
+
// Procedure Server
|
|
95
|
+
// =============================================================================
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Server with procedure auto-registration and repository pattern.
|
|
99
|
+
*
|
|
100
|
+
* Features:
|
|
101
|
+
* - Auto-registers handlers from procedure definitions
|
|
102
|
+
* - Repository pattern for storage backend injection
|
|
103
|
+
* - Collection storage configuration per-collection
|
|
104
|
+
* - Integrates with ProcedureRegistry
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const server = new ProcedureServer({
|
|
109
|
+
* collections: {
|
|
110
|
+
* users: new ApiStorage(remoteClient, { service: 'users' }),
|
|
111
|
+
* cache: new InMemoryStorage(),
|
|
112
|
+
* }
|
|
113
|
+
* });
|
|
114
|
+
*
|
|
115
|
+
* // Register collection procedures
|
|
116
|
+
* server.registerCollectionProcedures('users');
|
|
117
|
+
*
|
|
118
|
+
* // Or auto-register all from registry
|
|
119
|
+
* server.registerFromRegistry();
|
|
120
|
+
*
|
|
121
|
+
* await server.start();
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export class ProcedureServer extends Server implements RepositoryProvider {
|
|
125
|
+
private readonly procedureRegistry: ProcedureRegistry;
|
|
126
|
+
private readonly storages = new Map<string, CollectionStorage<unknown>>();
|
|
127
|
+
/** The procedures that `registerProcedure` pinned, by key */
|
|
128
|
+
private readonly pinnedProcedures = new Map<string, AnyProcedure>();
|
|
129
|
+
/**
|
|
130
|
+
* True after `registerFromRegistry()`: the server serves each procedure of the registry that
|
|
131
|
+
* has a handler and passes the expose rule, looked up when the request arrives (deep dive
|
|
132
|
+
* TRN-13). Before, the server copied the registry at startup: a later registration was not
|
|
133
|
+
* found, and an override or an unregistration was not seen.
|
|
134
|
+
*/
|
|
135
|
+
private servesRegistry = false;
|
|
136
|
+
private readonly expose: ((path: ProcedurePath) => boolean) | undefined;
|
|
137
|
+
private readonly strictCalls: boolean;
|
|
138
|
+
private readonly interceptors: readonly Interceptor[];
|
|
139
|
+
|
|
140
|
+
constructor(options: ProcedureServerOptions = {}) {
|
|
141
|
+
super(options);
|
|
142
|
+
|
|
143
|
+
this.procedureRegistry = options.registry ?? PROCEDURE_REGISTRY;
|
|
144
|
+
this.expose = options.expose;
|
|
145
|
+
this.strictCalls = options.strictCalls ?? false;
|
|
146
|
+
this.interceptors = options.interceptors ?? [];
|
|
147
|
+
|
|
148
|
+
// Configure collections
|
|
149
|
+
if (options.collections) {
|
|
150
|
+
for (const [name, storage] of Object.entries(options.collections)) {
|
|
151
|
+
this.storages.set(name, storage);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Auto-register if enabled
|
|
156
|
+
if (options.autoRegister) {
|
|
157
|
+
this.registerFromRegistry();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ===========================================================================
|
|
162
|
+
// RepositoryProvider Implementation
|
|
163
|
+
// ===========================================================================
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Get storage for a collection.
|
|
167
|
+
*
|
|
168
|
+
* @param collection - Collection name
|
|
169
|
+
* @returns Storage instance
|
|
170
|
+
* @throws Error if collection not configured
|
|
171
|
+
*/
|
|
172
|
+
getStorage<T>(collection: string): CollectionStorage<T> {
|
|
173
|
+
const storage = this.storages.get(collection);
|
|
174
|
+
if (!storage) {
|
|
175
|
+
throw new Error(`Collection storage not configured: ${collection}`);
|
|
176
|
+
}
|
|
177
|
+
return storage as CollectionStorage<T>;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Check if a collection is configured.
|
|
182
|
+
*
|
|
183
|
+
* @param collection - Collection name
|
|
184
|
+
*/
|
|
185
|
+
hasCollection(collection: string): boolean {
|
|
186
|
+
return this.storages.has(collection);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ===========================================================================
|
|
190
|
+
// Storage Configuration
|
|
191
|
+
// ===========================================================================
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Configure storage for a collection.
|
|
195
|
+
*
|
|
196
|
+
* @param name - Collection name
|
|
197
|
+
* @param storage - Storage backend
|
|
198
|
+
* @returns this (for chaining)
|
|
199
|
+
*/
|
|
200
|
+
useStorage<T>(name: string, storage: CollectionStorage<T>): this {
|
|
201
|
+
this.storages.set(name, storage as CollectionStorage<unknown>);
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Configure multiple storages at once.
|
|
207
|
+
*
|
|
208
|
+
* @param storages - Map of collection names to storage backends
|
|
209
|
+
* @returns this (for chaining)
|
|
210
|
+
*/
|
|
211
|
+
useStorages(storages: Record<string, CollectionStorage<unknown>>): this {
|
|
212
|
+
for (const [name, storage] of Object.entries(storages)) {
|
|
213
|
+
this.storages.set(name, storage);
|
|
214
|
+
}
|
|
215
|
+
return this;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Get all configured collection names.
|
|
220
|
+
*/
|
|
221
|
+
getCollectionNames(): string[] {
|
|
222
|
+
return Array.from(this.storages.keys());
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ===========================================================================
|
|
226
|
+
// Procedure Registration
|
|
227
|
+
// ===========================================================================
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Register a procedure as a server handler. The server keeps this procedure object. A
|
|
231
|
+
* procedure of the registry at the same path comes first when the server serves the registry.
|
|
232
|
+
*
|
|
233
|
+
* @param procedure - Procedure definition
|
|
234
|
+
*/
|
|
235
|
+
registerProcedure(procedure: AnyProcedure): void {
|
|
236
|
+
// Must have a handler
|
|
237
|
+
if (!procedure.handler) {
|
|
238
|
+
throw new Error(`Procedure at ${pathToKey(procedure.path)} has no handler`);
|
|
239
|
+
}
|
|
240
|
+
// The path must make a method: this throws for a path of one segment
|
|
241
|
+
pathToMethod(procedure.path);
|
|
242
|
+
this.pinnedProcedures.set(pathToKey(procedure.path), procedure);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Register multiple procedures.
|
|
247
|
+
*
|
|
248
|
+
* @param procedures - Array of procedures
|
|
249
|
+
*/
|
|
250
|
+
registerProcedures(procedures: AnyProcedure[]): void {
|
|
251
|
+
for (const procedure of procedures) {
|
|
252
|
+
this.registerProcedure(procedure);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Register a procedure module.
|
|
258
|
+
*
|
|
259
|
+
* @param module - Module with procedures array
|
|
260
|
+
*/
|
|
261
|
+
registerModule(module: ProcedureModule): void {
|
|
262
|
+
this.registerProcedures(module.procedures);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Serve the procedures of the registry. The server looks up each request in the registry when
|
|
267
|
+
* the request arrives, so a later registration, an override or an unregistration takes effect
|
|
268
|
+
* at once. A procedure without a handler (a stub synced from storage, BUGS-2026-07 H14/H28) or
|
|
269
|
+
* outside the expose rule is not served.
|
|
270
|
+
*/
|
|
271
|
+
registerFromRegistry(): void {
|
|
272
|
+
this.servesRegistry = true;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* The procedure that answers a method, or undefined. The registry comes first (when the server
|
|
277
|
+
* serves it), then the pinned procedures.
|
|
278
|
+
*/
|
|
279
|
+
private resolveProcedure(method: Method): AnyProcedure | undefined {
|
|
280
|
+
const path = methodToPath(method);
|
|
281
|
+
if (this.servesRegistry) {
|
|
282
|
+
const procedure = this.procedureRegistry.get(path);
|
|
283
|
+
if (procedure?.handler && (!this.expose || this.expose(procedure.path))) {
|
|
284
|
+
return procedure;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return this.pinnedProcedures.get(pathToKey(path));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* The handlers that `register()` added come first (exact or pattern matches). Then the server
|
|
292
|
+
* looks up the procedure of the method.
|
|
293
|
+
*/
|
|
294
|
+
protected override findHandler(method: Method): ServerHandler | null {
|
|
295
|
+
const handler = super.findHandler(method);
|
|
296
|
+
if (handler) return handler;
|
|
297
|
+
const procedure = this.resolveProcedure(method);
|
|
298
|
+
return procedure ? (request) => this.invoke(procedure, request) : null;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/** Run a procedure for a request. */
|
|
302
|
+
private async invoke(procedure: AnyProcedure, request: ServerRequest<unknown>): Promise<ServerResponse<unknown>> {
|
|
303
|
+
try {
|
|
304
|
+
// One invocation path for every host (ARCHITECTURE-PROPOSALS P1): input validation, the
|
|
305
|
+
// context, the expose rule for nested calls (BUGS-2026-07 H18) and output validation
|
|
306
|
+
const output = await invokeProcedure(procedure, request.payload, {
|
|
307
|
+
registry: this.procedureRegistry,
|
|
308
|
+
metadata: request.metadata,
|
|
309
|
+
signal: request.signal,
|
|
310
|
+
repository: this,
|
|
311
|
+
expose: this.expose,
|
|
312
|
+
strictCalls: this.strictCalls,
|
|
313
|
+
interceptors: this.interceptors,
|
|
314
|
+
});
|
|
315
|
+
if (output.kind === "stream") {
|
|
316
|
+
return { id: request.id, status: { type: "success", code: 200 }, stream: output.items, metadata: {} };
|
|
317
|
+
}
|
|
318
|
+
return { id: request.id, status: { type: "success", code: 200 }, payload: output.value, metadata: {} };
|
|
319
|
+
} catch (error) {
|
|
320
|
+
return errorResponse(request.id, error);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Register collection procedures for a specific collection.
|
|
326
|
+
* Creates standard CRUD procedures using the configured storage.
|
|
327
|
+
*
|
|
328
|
+
* @param collectionName - Collection name
|
|
329
|
+
*/
|
|
330
|
+
registerCollectionProcedures(collectionName: string): void {
|
|
331
|
+
// Uses a top-level import; require() is not available in this ESM package and
|
|
332
|
+
// previously threw "Cannot find module" on every call. See BUGS-2026-07 H13.
|
|
333
|
+
const procedures = createCollectionProcedures(collectionName);
|
|
334
|
+
|
|
335
|
+
// Register with the procedure registry first
|
|
336
|
+
this.procedureRegistry.registerAll(procedures);
|
|
337
|
+
|
|
338
|
+
// Then register as server handlers
|
|
339
|
+
this.registerProcedures(procedures);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// ===========================================================================
|
|
343
|
+
// Utility Methods
|
|
344
|
+
// ===========================================================================
|
|
345
|
+
|
|
346
|
+
/** The paths that the server serves now. */
|
|
347
|
+
private servedKeys(): Set<string> {
|
|
348
|
+
const keys = new Set(this.pinnedProcedures.keys());
|
|
349
|
+
if (this.servesRegistry) {
|
|
350
|
+
for (const procedure of this.procedureRegistry.getAll()) {
|
|
351
|
+
if (procedure.handler && (!this.expose || this.expose(procedure.path))) {
|
|
352
|
+
keys.add(pathToKey(procedure.path));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return keys;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Get count of the procedures that the server serves now.
|
|
361
|
+
*/
|
|
362
|
+
get procedureCount(): number {
|
|
363
|
+
return this.servedKeys().size;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Check if the server serves a procedure now.
|
|
368
|
+
*
|
|
369
|
+
* @param path - Procedure path
|
|
370
|
+
*/
|
|
371
|
+
/**
|
|
372
|
+
* The registry that this server serves. A face of the server (the MCP transport) lists its
|
|
373
|
+
* tools from it: with an explicit registry (`createRegistry()`), the global registry is not the
|
|
374
|
+
* server's.
|
|
375
|
+
*/
|
|
376
|
+
getRegistry(): ProcedureRegistry {
|
|
377
|
+
return this.procedureRegistry;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
hasProcedure(path: ProcedurePath): boolean {
|
|
381
|
+
return this.resolveProcedure(pathToMethod(path)) !== undefined;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Close all storage backends.
|
|
386
|
+
*/
|
|
387
|
+
async closeStorages(): Promise<void> {
|
|
388
|
+
const closePromises = Array.from(this.storages.values()).map((s) =>
|
|
389
|
+
s.close()
|
|
390
|
+
);
|
|
391
|
+
await Promise.all(closePromises);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Stop server and close storages.
|
|
396
|
+
*/
|
|
397
|
+
override async stop(): Promise<void> {
|
|
398
|
+
await super.stop();
|
|
399
|
+
await this.closeStorages();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// =============================================================================
|
|
404
|
+
// Factory Functions
|
|
405
|
+
// =============================================================================
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Create a procedure server with common configuration.
|
|
409
|
+
*
|
|
410
|
+
* @param options - Server options
|
|
411
|
+
* @returns Configured ProcedureServer
|
|
412
|
+
*/
|
|
413
|
+
export function createProcedureServer(
|
|
414
|
+
options: ProcedureServerOptions = {}
|
|
415
|
+
): ProcedureServer {
|
|
416
|
+
return new ProcedureServer(options);
|
|
417
|
+
}
|