@astrale-os/kernel-client 0.5.1 → 0.6.0-beta.10
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/dist/auth/auth.d.ts +18 -0
- package/dist/auth/auth.js +15 -0
- package/dist/auth/authorization.d.ts +13 -0
- package/dist/auth/authorization.js +17 -0
- package/dist/auth/credential.d.ts +19 -0
- package/dist/auth/credential.js +21 -0
- package/dist/auth/identity.d.ts +14 -0
- package/dist/auth/identity.js +15 -0
- package/dist/auth/index.d.ts +6 -16
- package/dist/auth/index.js +5 -10
- package/dist/auth/provision.d.ts +8 -0
- package/dist/auth/provision.js +10 -0
- package/dist/client/admission.d.ts +4 -0
- package/dist/client/admission.js +34 -0
- package/dist/client/client.d.ts +24 -109
- package/dist/client/client.js +80 -381
- package/dist/client/credential.d.ts +12 -0
- package/dist/client/credential.js +51 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +4 -0
- package/dist/client/request.d.ts +26 -0
- package/dist/client/request.js +100 -0
- package/dist/client/result.d.ts +35 -0
- package/dist/client/result.js +28 -0
- package/dist/client/routing-control.d.ts +10 -0
- package/dist/client/routing-control.js +23 -0
- package/dist/errors/client-error.d.ts +3 -0
- package/dist/errors/client-error.js +8 -0
- package/dist/errors/index.d.ts +7 -6
- package/dist/errors/index.js +7 -4
- package/dist/errors/miss-error.d.ts +8 -0
- package/dist/errors/miss-error.js +10 -0
- package/dist/errors/protocol-error.d.ts +9 -0
- package/dist/errors/protocol-error.js +9 -0
- package/dist/errors/response-error.d.ts +11 -0
- package/dist/errors/response-error.js +16 -0
- package/dist/errors/session-error.d.ts +8 -20
- package/dist/errors/session-error.js +6 -22
- package/dist/errors/stale-route-error.d.ts +9 -0
- package/dist/errors/stale-route-error.js +12 -0
- package/dist/errors/transport-error.d.ts +30 -0
- package/dist/errors/transport-error.js +18 -0
- package/dist/graph/domain/binding.d.ts +22 -0
- package/dist/graph/domain/binding.js +123 -0
- package/dist/graph/domain/domain.typecheck.d.ts +1 -0
- package/dist/graph/domain/domain.typecheck.js +139 -0
- package/dist/graph/domain/index.d.ts +3 -0
- package/dist/graph/domain/index.js +1 -0
- package/dist/graph/domain/model.d.ts +18 -0
- package/dist/graph/domain/model.js +1 -0
- package/dist/graph/domain/page.d.ts +23 -0
- package/dist/graph/domain/page.js +42 -0
- package/dist/graph/domain/project.d.ts +8 -0
- package/dist/graph/domain/project.js +120 -0
- package/dist/graph/domain/provenance.d.ts +6 -0
- package/dist/graph/domain/provenance.js +11 -0
- package/dist/graph/errors.d.ts +8 -0
- package/dist/graph/errors.js +14 -0
- package/dist/graph/graph.d.ts +26 -0
- package/dist/graph/graph.js +18 -0
- package/dist/graph/index.d.ts +8 -26
- package/dist/graph/index.js +6 -21
- package/dist/graph/mutation.d.ts +5 -0
- package/dist/graph/mutation.js +17 -0
- package/dist/graph/page/index.d.ts +2 -0
- package/dist/graph/page/index.js +1 -0
- package/dist/graph/page/neighbors.d.ts +9 -0
- package/dist/graph/page/neighbors.js +34 -0
- package/dist/graph/page/page.d.ts +37 -0
- package/dist/graph/page/page.js +55 -0
- package/dist/graph/page-contract.d.ts +13 -0
- package/dist/graph/page-contract.js +1 -0
- package/dist/graph/provenance.d.ts +12 -0
- package/dist/graph/provenance.js +37 -0
- package/dist/graph/query.d.ts +4 -0
- package/dist/graph/query.js +69 -0
- package/dist/graph/read.d.ts +6 -0
- package/dist/graph/read.js +17 -0
- package/dist/index.d.ts +6 -25
- package/dist/index.js +6 -21
- package/dist/pacer/batcher/batcher.d.ts +7 -0
- package/dist/pacer/batcher/batcher.js +13 -0
- package/dist/pacer/batcher/defaults.d.ts +2 -0
- package/dist/pacer/batcher/defaults.js +2 -0
- package/dist/pacer/batcher/index.d.ts +1 -0
- package/dist/pacer/batcher/index.js +1 -0
- package/dist/pacer/index.d.ts +4 -10
- package/dist/pacer/index.js +4 -11
- package/dist/pacer/limiter/defaults.d.ts +2 -0
- package/dist/pacer/limiter/defaults.js +2 -0
- package/dist/pacer/limiter/index.d.ts +1 -0
- package/dist/pacer/limiter/index.js +1 -0
- package/dist/pacer/limiter/limiter.d.ts +7 -0
- package/dist/pacer/limiter/limiter.js +14 -0
- package/dist/pacer/queue/defaults.d.ts +1 -0
- package/dist/pacer/queue/defaults.js +1 -0
- package/dist/pacer/queue/index.d.ts +1 -0
- package/dist/pacer/queue/index.js +1 -0
- package/dist/pacer/queue/queue.d.ts +6 -0
- package/dist/pacer/queue/queue.js +12 -0
- package/dist/pacer/retry/defaults.d.ts +6 -0
- package/dist/pacer/retry/defaults.js +16 -0
- package/dist/pacer/retry/index.d.ts +1 -0
- package/dist/pacer/retry/index.js +1 -0
- package/dist/pacer/retry/retry.d.ts +9 -0
- package/dist/pacer/retry/retry.js +55 -0
- package/dist/pool/index.d.ts +2 -4
- package/dist/pool/index.js +0 -2
- package/dist/pool/pool.d.ts +19 -59
- package/dist/pool/pool.js +46 -64
- package/dist/pool/target.d.ts +15 -0
- package/dist/pool/target.js +49 -0
- package/dist/schema/admission.d.ts +12 -0
- package/dist/schema/admission.js +17 -0
- package/dist/schema/contracts.d.ts +12 -0
- package/dist/schema/contracts.js +1 -0
- package/dist/schema/index.d.ts +3 -16
- package/dist/schema/index.js +2 -12
- package/dist/schema/introspection.d.ts +5 -0
- package/dist/schema/introspection.js +15 -0
- package/dist/schema/operation.d.ts +5 -0
- package/dist/schema/operation.js +9 -0
- package/dist/schema/schema.d.ts +19 -0
- package/dist/schema/schema.js +43 -0
- package/dist/session/bound.d.ts +42 -9
- package/dist/session/bound.js +70 -37
- package/dist/session/context/control.d.ts +5 -0
- package/dist/session/context/control.js +17 -0
- package/dist/session/context/index.d.ts +4 -0
- package/dist/session/context/index.js +4 -0
- package/dist/session/context/limits.d.ts +7 -0
- package/dist/session/context/limits.js +18 -0
- package/dist/session/context/operation.d.ts +19 -0
- package/dist/session/context/operation.js +72 -0
- package/dist/session/context/policy.d.ts +11 -0
- package/dist/session/context/policy.js +69 -0
- package/dist/session/discovery/bundle.d.ts +17 -0
- package/dist/session/discovery/bundle.js +55 -0
- package/dist/session/discovery/discovery.d.ts +19 -0
- package/dist/session/discovery/discovery.js +55 -0
- package/dist/session/discovery/index.d.ts +20 -0
- package/dist/session/discovery/index.js +15 -0
- package/dist/session/discovery/publication.d.ts +23 -0
- package/dist/session/discovery/publication.js +123 -0
- package/dist/session/discovery/snapshot.d.ts +12 -0
- package/dist/session/discovery/snapshot.js +3 -0
- package/dist/session/discovery/transport.d.ts +6 -0
- package/dist/session/discovery/transport.js +13 -0
- package/dist/session/index.d.ts +10 -16
- package/dist/session/index.js +3 -9
- package/dist/session/reference.d.ts +36 -0
- package/dist/session/reference.js +74 -0
- package/dist/session/routing/auth.d.ts +18 -0
- package/dist/session/routing/auth.js +39 -0
- package/dist/session/routing/cache.d.ts +20 -0
- package/dist/session/routing/cache.js +115 -0
- package/dist/session/routing/dispatch.d.ts +34 -0
- package/dist/session/routing/dispatch.js +137 -0
- package/dist/session/routing/envelope.d.ts +13 -0
- package/dist/session/routing/envelope.js +35 -0
- package/dist/session/routing/expectation.d.ts +6 -0
- package/dist/session/routing/expectation.js +1 -0
- package/dist/session/routing/index.d.ts +6 -0
- package/dist/session/routing/index.js +5 -0
- package/dist/session/routing/request.d.ts +8 -0
- package/dist/session/routing/request.js +25 -0
- package/dist/session/session.d.ts +67 -0
- package/dist/session/session.js +257 -0
- package/dist/session/session.typecheck.d.ts +1 -0
- package/dist/session/session.typecheck.js +31 -0
- package/dist/session/views/catalog.d.ts +15 -0
- package/dist/session/views/catalog.js +70 -0
- package/dist/session/views/index.d.ts +2 -0
- package/dist/session/views/index.js +2 -0
- package/dist/session/views/resolve.d.ts +11 -0
- package/dist/session/views/resolve.js +13 -0
- package/dist/store/entity-index.d.ts +22 -0
- package/dist/store/entity-index.js +94 -0
- package/dist/store/index.d.ts +1 -26
- package/dist/store/index.js +1 -19
- package/dist/store/memory.d.ts +46 -97
- package/dist/store/memory.js +346 -763
- package/dist/store/mutation.d.ts +5 -0
- package/dist/store/mutation.js +34 -0
- package/dist/store/observe.d.ts +3 -0
- package/dist/store/observe.js +17 -0
- package/dist/store/optimistic.d.ts +12 -0
- package/dist/store/optimistic.js +43 -0
- package/dist/store/query-key.d.ts +5 -0
- package/dist/store/query-key.js +22 -0
- package/dist/store/shape.d.ts +25 -0
- package/dist/store/shape.js +29 -0
- package/dist/store/store.d.ts +68 -0
- package/dist/store/store.js +144 -0
- package/dist/store/store.typecheck.d.ts +1 -0
- package/dist/store/store.typecheck.js +40 -0
- package/dist/transport/auto/decision.d.ts +22 -0
- package/dist/transport/auto/decision.js +48 -0
- package/dist/transport/auto/fallback.d.ts +16 -0
- package/dist/transport/auto/fallback.js +75 -0
- package/dist/transport/auto/index.d.ts +2 -0
- package/dist/transport/auto/index.js +2 -0
- package/dist/transport/auto/transport.d.ts +37 -0
- package/dist/transport/auto/transport.js +140 -0
- package/dist/transport/auto/warning.d.ts +13 -0
- package/dist/transport/auto/warning.js +18 -0
- package/dist/transport/deadline.d.ts +11 -0
- package/dist/transport/deadline.js +39 -0
- package/dist/transport/failure.d.ts +7 -0
- package/dist/transport/failure.js +9 -0
- package/dist/transport/http/index.d.ts +1 -0
- package/dist/transport/http/index.js +1 -0
- package/dist/transport/http/response.d.ts +8 -0
- package/dist/transport/http/response.js +79 -0
- package/dist/transport/http/stream.d.ts +26 -0
- package/dist/transport/http/stream.js +214 -0
- package/dist/transport/http/transport.d.ts +32 -0
- package/dist/transport/http/transport.js +343 -0
- package/dist/transport/index.d.ts +2 -8
- package/dist/transport/index.js +1 -6
- package/dist/transport/transport.d.ts +34 -0
- package/dist/transport/transport.js +1 -0
- package/dist/transport/websocket/connection.d.ts +38 -0
- package/dist/transport/websocket/connection.js +284 -0
- package/dist/transport/websocket/exchange.d.ts +46 -0
- package/dist/transport/websocket/exchange.js +300 -0
- package/dist/transport/websocket/index.d.ts +1 -0
- package/dist/transport/websocket/index.js +1 -0
- package/dist/transport/websocket/transport.d.ts +46 -0
- package/dist/transport/websocket/transport.js +164 -0
- package/package.json +41 -35
- package/dist/auth/addressing.d.ts +0 -32
- package/dist/auth/addressing.d.ts.map +0 -1
- package/dist/auth/addressing.js +0 -36
- package/dist/auth/addressing.js.map +0 -1
- package/dist/auth/api.d.ts +0 -70
- package/dist/auth/api.d.ts.map +0 -1
- package/dist/auth/api.js +0 -36
- package/dist/auth/api.js.map +0 -1
- package/dist/auth/batch.d.ts +0 -18
- package/dist/auth/batch.d.ts.map +0 -1
- package/dist/auth/batch.js +0 -25
- package/dist/auth/batch.js.map +0 -1
- package/dist/auth/composition.d.ts +0 -27
- package/dist/auth/composition.d.ts.map +0 -1
- package/dist/auth/composition.js +0 -83
- package/dist/auth/composition.js.map +0 -1
- package/dist/auth/defaults.d.ts +0 -3
- package/dist/auth/defaults.d.ts.map +0 -1
- package/dist/auth/defaults.js +0 -3
- package/dist/auth/defaults.js.map +0 -1
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/minting.d.ts +0 -35
- package/dist/auth/minting.d.ts.map +0 -1
- package/dist/auth/minting.js +0 -31
- package/dist/auth/minting.js.map +0 -1
- package/dist/auth/permissions.d.ts +0 -55
- package/dist/auth/permissions.d.ts.map +0 -1
- package/dist/auth/permissions.js +0 -47
- package/dist/auth/permissions.js.map +0 -1
- package/dist/auth/principal.d.ts +0 -19
- package/dist/auth/principal.d.ts.map +0 -1
- package/dist/auth/principal.js +0 -46
- package/dist/auth/principal.js.map +0 -1
- package/dist/auth/shorthands.d.ts +0 -19
- package/dist/auth/shorthands.d.ts.map +0 -1
- package/dist/auth/shorthands.js +0 -27
- package/dist/auth/shorthands.js.map +0 -1
- package/dist/client/batch.d.ts +0 -26
- package/dist/client/batch.d.ts.map +0 -1
- package/dist/client/batch.js +0 -8
- package/dist/client/batch.js.map +0 -1
- package/dist/client/bound.d.ts +0 -27
- package/dist/client/bound.d.ts.map +0 -1
- package/dist/client/bound.js +0 -14
- package/dist/client/bound.js.map +0 -1
- package/dist/client/client.d.ts.map +0 -1
- package/dist/client/client.js.map +0 -1
- package/dist/client/config.d.ts +0 -112
- package/dist/client/config.d.ts.map +0 -1
- package/dist/client/config.js +0 -10
- package/dist/client/config.js.map +0 -1
- package/dist/client/fn-map.d.ts +0 -61
- package/dist/client/fn-map.d.ts.map +0 -1
- package/dist/client/fn-map.js +0 -2
- package/dist/client/fn-map.js.map +0 -1
- package/dist/client/freeze.d.ts +0 -32
- package/dist/client/freeze.d.ts.map +0 -1
- package/dist/client/freeze.js +0 -42
- package/dist/client/freeze.js.map +0 -1
- package/dist/client/hooks.d.ts +0 -49
- package/dist/client/hooks.d.ts.map +0 -1
- package/dist/client/hooks.js +0 -2
- package/dist/client/hooks.js.map +0 -1
- package/dist/errors/errors.d.ts +0 -156
- package/dist/errors/errors.d.ts.map +0 -1
- package/dist/errors/errors.js +0 -238
- package/dist/errors/errors.js.map +0 -1
- package/dist/errors/guards.d.ts +0 -39
- package/dist/errors/guards.d.ts.map +0 -1
- package/dist/errors/guards.js +0 -127
- package/dist/errors/guards.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/session-error.d.ts.map +0 -1
- package/dist/errors/session-error.js.map +0 -1
- package/dist/graph/api.d.ts +0 -85
- package/dist/graph/api.d.ts.map +0 -1
- package/dist/graph/api.js +0 -66
- package/dist/graph/api.js.map +0 -1
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/mutate/builder.d.ts +0 -108
- package/dist/graph/mutate/builder.d.ts.map +0 -1
- package/dist/graph/mutate/builder.js +0 -127
- package/dist/graph/mutate/builder.js.map +0 -1
- package/dist/graph/mutate/index.d.ts +0 -5
- package/dist/graph/mutate/index.d.ts.map +0 -1
- package/dist/graph/mutate/index.js +0 -3
- package/dist/graph/mutate/index.js.map +0 -1
- package/dist/graph/mutate/shorthands.d.ts +0 -42
- package/dist/graph/mutate/shorthands.d.ts.map +0 -1
- package/dist/graph/mutate/shorthands.js +0 -65
- package/dist/graph/mutate/shorthands.js.map +0 -1
- package/dist/graph/named.d.ts +0 -38
- package/dist/graph/named.d.ts.map +0 -1
- package/dist/graph/named.js +0 -47
- package/dist/graph/named.js.map +0 -1
- package/dist/graph/query/builder.d.ts +0 -116
- package/dist/graph/query/builder.d.ts.map +0 -1
- package/dist/graph/query/builder.js +0 -136
- package/dist/graph/query/builder.js.map +0 -1
- package/dist/graph/query/edge-ref.d.ts +0 -13
- package/dist/graph/query/edge-ref.d.ts.map +0 -1
- package/dist/graph/query/edge-ref.js +0 -56
- package/dist/graph/query/edge-ref.js.map +0 -1
- package/dist/graph/query/edges.d.ts +0 -10
- package/dist/graph/query/edges.d.ts.map +0 -1
- package/dist/graph/query/edges.js +0 -11
- package/dist/graph/query/edges.js.map +0 -1
- package/dist/graph/query/errors.d.ts +0 -31
- package/dist/graph/query/errors.d.ts.map +0 -1
- package/dist/graph/query/errors.js +0 -28
- package/dist/graph/query/errors.js.map +0 -1
- package/dist/graph/query/filter.d.ts +0 -50
- package/dist/graph/query/filter.d.ts.map +0 -1
- package/dist/graph/query/filter.js +0 -32
- package/dist/graph/query/filter.js.map +0 -1
- package/dist/graph/query/index.d.ts +0 -12
- package/dist/graph/query/index.d.ts.map +0 -1
- package/dist/graph/query/index.js +0 -7
- package/dist/graph/query/index.js.map +0 -1
- package/dist/graph/query/lower.d.ts +0 -30
- package/dist/graph/query/lower.d.ts.map +0 -1
- package/dist/graph/query/lower.js +0 -171
- package/dist/graph/query/lower.js.map +0 -1
- package/dist/graph/query/shorthands.d.ts +0 -34
- package/dist/graph/query/shorthands.d.ts.map +0 -1
- package/dist/graph/query/shorthands.js +0 -71
- package/dist/graph/query/shorthands.js.map +0 -1
- package/dist/graph/query/traverse.d.ts +0 -59
- package/dist/graph/query/traverse.d.ts.map +0 -1
- package/dist/graph/query/traverse.js +0 -144
- package/dist/graph/query/traverse.js.map +0 -1
- package/dist/graph/reconcile/execute.d.ts +0 -8
- package/dist/graph/reconcile/execute.d.ts.map +0 -1
- package/dist/graph/reconcile/execute.js +0 -56
- package/dist/graph/reconcile/execute.js.map +0 -1
- package/dist/graph/reconcile/index.d.ts +0 -5
- package/dist/graph/reconcile/index.d.ts.map +0 -1
- package/dist/graph/reconcile/index.js +0 -3
- package/dist/graph/reconcile/index.js.map +0 -1
- package/dist/graph/reconcile/input.d.ts +0 -80
- package/dist/graph/reconcile/input.d.ts.map +0 -1
- package/dist/graph/reconcile/input.js +0 -5
- package/dist/graph/reconcile/input.js.map +0 -1
- package/dist/graph/reconcile/normalize.d.ts +0 -3
- package/dist/graph/reconcile/normalize.d.ts.map +0 -1
- package/dist/graph/reconcile/normalize.js +0 -144
- package/dist/graph/reconcile/normalize.js.map +0 -1
- package/dist/graph/reconcile/result.d.ts +0 -19
- package/dist/graph/reconcile/result.d.ts.map +0 -1
- package/dist/graph/reconcile/result.js +0 -95
- package/dist/graph/reconcile/result.js.map +0 -1
- package/dist/graph/reconcile/scope.d.ts +0 -6
- package/dist/graph/reconcile/scope.d.ts.map +0 -1
- package/dist/graph/reconcile/scope.js +0 -69
- package/dist/graph/reconcile/scope.js.map +0 -1
- package/dist/graph/result/envelope.d.ts +0 -37
- package/dist/graph/result/envelope.d.ts.map +0 -1
- package/dist/graph/result/envelope.js +0 -59
- package/dist/graph/result/envelope.js.map +0 -1
- package/dist/graph/result/index.d.ts +0 -6
- package/dist/graph/result/index.d.ts.map +0 -1
- package/dist/graph/result/index.js +0 -4
- package/dist/graph/result/index.js.map +0 -1
- package/dist/graph/result/next.d.ts +0 -16
- package/dist/graph/result/next.d.ts.map +0 -1
- package/dist/graph/result/next.js +0 -77
- package/dist/graph/result/next.js.map +0 -1
- package/dist/graph/result/paged.d.ts +0 -30
- package/dist/graph/result/paged.d.ts.map +0 -1
- package/dist/graph/result/paged.js +0 -41
- package/dist/graph/result/paged.js.map +0 -1
- package/dist/graph/wire.d.ts +0 -33
- package/dist/graph/wire.d.ts.map +0 -1
- package/dist/graph/wire.js +0 -16
- package/dist/graph/wire.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/pacer/batcher.d.ts +0 -11
- package/dist/pacer/batcher.d.ts.map +0 -1
- package/dist/pacer/batcher.js +0 -15
- package/dist/pacer/batcher.js.map +0 -1
- package/dist/pacer/defaults.d.ts +0 -18
- package/dist/pacer/defaults.d.ts.map +0 -1
- package/dist/pacer/defaults.js +0 -18
- package/dist/pacer/defaults.js.map +0 -1
- package/dist/pacer/index.d.ts.map +0 -1
- package/dist/pacer/index.js.map +0 -1
- package/dist/pacer/queue.d.ts +0 -11
- package/dist/pacer/queue.d.ts.map +0 -1
- package/dist/pacer/queue.js +0 -15
- package/dist/pacer/queue.js.map +0 -1
- package/dist/pacer/rate-limiter.d.ts +0 -11
- package/dist/pacer/rate-limiter.d.ts.map +0 -1
- package/dist/pacer/rate-limiter.js +0 -15
- package/dist/pacer/rate-limiter.js.map +0 -1
- package/dist/pacer/retry.d.ts +0 -14
- package/dist/pacer/retry.d.ts.map +0 -1
- package/dist/pacer/retry.js +0 -50
- package/dist/pacer/retry.js.map +0 -1
- package/dist/pool/errors.d.ts +0 -13
- package/dist/pool/errors.d.ts.map +0 -1
- package/dist/pool/errors.js +0 -16
- package/dist/pool/errors.js.map +0 -1
- package/dist/pool/index.d.ts.map +0 -1
- package/dist/pool/index.js.map +0 -1
- package/dist/pool/pool.d.ts.map +0 -1
- package/dist/pool/pool.js.map +0 -1
- package/dist/schema/bound/binder.d.ts +0 -49
- package/dist/schema/bound/binder.d.ts.map +0 -1
- package/dist/schema/bound/binder.js +0 -195
- package/dist/schema/bound/binder.js.map +0 -1
- package/dist/schema/bound/bound-node.d.ts +0 -105
- package/dist/schema/bound/bound-node.d.ts.map +0 -1
- package/dist/schema/bound/bound-node.js +0 -128
- package/dist/schema/bound/bound-node.js.map +0 -1
- package/dist/schema/bound/index.d.ts +0 -10
- package/dist/schema/bound/index.d.ts.map +0 -1
- package/dist/schema/bound/index.js +0 -5
- package/dist/schema/bound/index.js.map +0 -1
- package/dist/schema/bound/view.d.ts +0 -44
- package/dist/schema/bound/view.d.ts.map +0 -1
- package/dist/schema/bound/view.js +0 -117
- package/dist/schema/bound/view.js.map +0 -1
- package/dist/schema/bound/write-props.d.ts +0 -38
- package/dist/schema/bound/write-props.d.ts.map +0 -1
- package/dist/schema/bound/write-props.js +0 -2
- package/dist/schema/bound/write-props.js.map +0 -1
- package/dist/schema/call-args.d.ts +0 -6
- package/dist/schema/call-args.d.ts.map +0 -1
- package/dist/schema/call-args.js +0 -21
- package/dist/schema/call-args.js.map +0 -1
- package/dist/schema/class-proxy.d.ts +0 -11
- package/dist/schema/class-proxy.d.ts.map +0 -1
- package/dist/schema/class-proxy.js +0 -46
- package/dist/schema/class-proxy.js.map +0 -1
- package/dist/schema/extract.d.ts +0 -24
- package/dist/schema/extract.d.ts.map +0 -1
- package/dist/schema/extract.js +0 -45
- package/dist/schema/extract.js.map +0 -1
- package/dist/schema/from-entries.d.ts +0 -12
- package/dist/schema/from-entries.d.ts.map +0 -1
- package/dist/schema/from-entries.js +0 -39
- package/dist/schema/from-entries.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/known-dispatch.d.ts +0 -6
- package/dist/schema/known-dispatch.d.ts.map +0 -1
- package/dist/schema/known-dispatch.js +0 -39
- package/dist/schema/known-dispatch.js.map +0 -1
- package/dist/schema/node-proxy.d.ts +0 -21
- package/dist/schema/node-proxy.d.ts.map +0 -1
- package/dist/schema/node-proxy.js +0 -75
- package/dist/schema/node-proxy.js.map +0 -1
- package/dist/schema/persistence.d.ts +0 -31
- package/dist/schema/persistence.d.ts.map +0 -1
- package/dist/schema/persistence.js +0 -2
- package/dist/schema/persistence.js.map +0 -1
- package/dist/schema/proxy-types.d.ts +0 -131
- package/dist/schema/proxy-types.d.ts.map +0 -1
- package/dist/schema/proxy-types.js +0 -2
- package/dist/schema/proxy-types.js.map +0 -1
- package/dist/schema/registry.d.ts +0 -50
- package/dist/schema/registry.d.ts.map +0 -1
- package/dist/schema/registry.js +0 -110
- package/dist/schema/registry.js.map +0 -1
- package/dist/schema/resolve.d.ts +0 -26
- package/dist/schema/resolve.d.ts.map +0 -1
- package/dist/schema/resolve.js +0 -27
- package/dist/schema/resolve.js.map +0 -1
- package/dist/schema/typed-client.d.ts +0 -10
- package/dist/schema/typed-client.d.ts.map +0 -1
- package/dist/schema/typed-client.js +0 -26
- package/dist/schema/typed-client.js.map +0 -1
- package/dist/schema/types.d.ts +0 -9
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js +0 -2
- package/dist/schema/types.js.map +0 -1
- package/dist/session/bound.d.ts.map +0 -1
- package/dist/session/bound.js.map +0 -1
- package/dist/session/client-session.d.ts +0 -72
- package/dist/session/client-session.d.ts.map +0 -1
- package/dist/session/client-session.js +0 -673
- package/dist/session/client-session.js.map +0 -1
- package/dist/session/config.d.ts +0 -168
- package/dist/session/config.d.ts.map +0 -1
- package/dist/session/config.js +0 -2
- package/dist/session/config.js.map +0 -1
- package/dist/session/delegation/cache.d.ts +0 -139
- package/dist/session/delegation/cache.d.ts.map +0 -1
- package/dist/session/delegation/cache.js +0 -256
- package/dist/session/delegation/cache.js.map +0 -1
- package/dist/session/delegation/errors.d.ts +0 -44
- package/dist/session/delegation/errors.d.ts.map +0 -1
- package/dist/session/delegation/errors.js +0 -62
- package/dist/session/delegation/errors.js.map +0 -1
- package/dist/session/delegation/policy.d.ts +0 -183
- package/dist/session/delegation/policy.d.ts.map +0 -1
- package/dist/session/delegation/policy.js +0 -114
- package/dist/session/delegation/policy.js.map +0 -1
- package/dist/session/delegation/utils.d.ts +0 -4
- package/dist/session/delegation/utils.d.ts.map +0 -1
- package/dist/session/delegation/utils.js +0 -12
- package/dist/session/delegation/utils.js.map +0 -1
- package/dist/session/delegation-mint.d.ts +0 -13
- package/dist/session/delegation-mint.d.ts.map +0 -1
- package/dist/session/delegation-mint.js +0 -39
- package/dist/session/delegation-mint.js.map +0 -1
- package/dist/session/dispatch-routes.d.ts +0 -27
- package/dist/session/dispatch-routes.d.ts.map +0 -1
- package/dist/session/dispatch-routes.js +0 -77
- package/dist/session/dispatch-routes.js.map +0 -1
- package/dist/session/errors/index.d.ts +0 -6
- package/dist/session/errors/index.d.ts.map +0 -1
- package/dist/session/errors/index.js +0 -8
- package/dist/session/errors/index.js.map +0 -1
- package/dist/session/errors/session-errors.d.ts +0 -52
- package/dist/session/errors/session-errors.d.ts.map +0 -1
- package/dist/session/errors/session-errors.js +0 -70
- package/dist/session/errors/session-errors.js.map +0 -1
- package/dist/session/forward.d.ts +0 -15
- package/dist/session/forward.d.ts.map +0 -1
- package/dist/session/forward.js +0 -40
- package/dist/session/forward.js.map +0 -1
- package/dist/session/helpers.d.ts +0 -23
- package/dist/session/helpers.d.ts.map +0 -1
- package/dist/session/helpers.js +0 -56
- package/dist/session/helpers.js.map +0 -1
- package/dist/session/hooks.d.ts +0 -140
- package/dist/session/hooks.d.ts.map +0 -1
- package/dist/session/hooks.js +0 -2
- package/dist/session/hooks.js.map +0 -1
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js.map +0 -1
- package/dist/session/redirect/errors.d.ts +0 -45
- package/dist/session/redirect/errors.d.ts.map +0 -1
- package/dist/session/redirect/errors.js +0 -52
- package/dist/session/redirect/errors.js.map +0 -1
- package/dist/session/redirect/policy.d.ts +0 -79
- package/dist/session/redirect/policy.d.ts.map +0 -1
- package/dist/session/redirect/policy.js +0 -69
- package/dist/session/redirect/policy.js.map +0 -1
- package/dist/session/types.d.ts +0 -54
- package/dist/session/types.d.ts.map +0 -1
- package/dist/session/types.js +0 -2
- package/dist/session/types.js.map +0 -1
- package/dist/store/canonicalize.d.ts +0 -44
- package/dist/store/canonicalize.d.ts.map +0 -1
- package/dist/store/canonicalize.js +0 -0
- package/dist/store/canonicalize.js.map +0 -1
- package/dist/store/entities.d.ts +0 -81
- package/dist/store/entities.d.ts.map +0 -1
- package/dist/store/entities.js +0 -202
- package/dist/store/entities.js.map +0 -1
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js.map +0 -1
- package/dist/store/invalidate.d.ts +0 -66
- package/dist/store/invalidate.d.ts.map +0 -1
- package/dist/store/invalidate.js +0 -117
- package/dist/store/invalidate.js.map +0 -1
- package/dist/store/memory.d.ts.map +0 -1
- package/dist/store/memory.js.map +0 -1
- package/dist/store/overlay.d.ts +0 -118
- package/dist/store/overlay.d.ts.map +0 -1
- package/dist/store/overlay.js +0 -237
- package/dist/store/overlay.js.map +0 -1
- package/dist/store/schedule.d.ts +0 -31
- package/dist/store/schedule.d.ts.map +0 -1
- package/dist/store/schedule.js +0 -76
- package/dist/store/schedule.js.map +0 -1
- package/dist/store/shapes.d.ts +0 -92
- package/dist/store/shapes.d.ts.map +0 -1
- package/dist/store/shapes.js +0 -369
- package/dist/store/shapes.js.map +0 -1
- package/dist/store/types.d.ts +0 -168
- package/dist/store/types.d.ts.map +0 -1
- package/dist/store/types.js +0 -7
- package/dist/store/types.js.map +0 -1
- package/dist/transport/binary.d.ts +0 -15
- package/dist/transport/binary.d.ts.map +0 -1
- package/dist/transport/binary.js +0 -2
- package/dist/transport/binary.js.map +0 -1
- package/dist/transport/contract.d.ts +0 -58
- package/dist/transport/contract.d.ts.map +0 -1
- package/dist/transport/contract.js +0 -11
- package/dist/transport/contract.js.map +0 -1
- package/dist/transport/fetch.d.ts +0 -31
- package/dist/transport/fetch.d.ts.map +0 -1
- package/dist/transport/fetch.js +0 -78
- package/dist/transport/fetch.js.map +0 -1
- package/dist/transport/http-envelope.d.ts +0 -49
- package/dist/transport/http-envelope.d.ts.map +0 -1
- package/dist/transport/http-envelope.js +0 -418
- package/dist/transport/http-envelope.js.map +0 -1
- package/dist/transport/http-routed.d.ts +0 -61
- package/dist/transport/http-routed.d.ts.map +0 -1
- package/dist/transport/http-routed.js +0 -409
- package/dist/transport/http-routed.js.map +0 -1
- package/dist/transport/index.d.ts.map +0 -1
- package/dist/transport/index.js.map +0 -1
- package/dist/transport/request-id.d.ts +0 -9
- package/dist/transport/request-id.d.ts.map +0 -1
- package/dist/transport/request-id.js +0 -12
- package/dist/transport/request-id.js.map +0 -1
- package/dist/transport/ws-envelope.d.ts +0 -74
- package/dist/transport/ws-envelope.d.ts.map +0 -1
- package/dist/transport/ws-envelope.js +0 -567
- package/dist/transport/ws-envelope.js.map +0 -1
- package/dist/util/race-signal.d.ts +0 -12
- package/dist/util/race-signal.d.ts.map +0 -1
- package/dist/util/race-signal.js +0 -34
- package/dist/util/race-signal.js.map +0 -1
- package/dist/wire/controller.d.ts +0 -38
- package/dist/wire/controller.d.ts.map +0 -1
- package/dist/wire/controller.js +0 -38
- package/dist/wire/controller.js.map +0 -1
- package/dist/wire/index.d.ts +0 -7
- package/dist/wire/index.d.ts.map +0 -1
- package/dist/wire/index.js +0 -4
- package/dist/wire/index.js.map +0 -1
- package/dist/wire/meta.d.ts +0 -81
- package/dist/wire/meta.d.ts.map +0 -1
- package/dist/wire/meta.js +0 -44
- package/dist/wire/meta.js.map +0 -1
- package/dist/wire/sse.d.ts +0 -67
- package/dist/wire/sse.d.ts.map +0 -1
- package/dist/wire/sse.js +0 -170
- package/dist/wire/sse.js.map +0 -1
package/dist/client/client.js
CHANGED
|
@@ -1,393 +1,92 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* - Lifecycle: `disconnect()` releases held resources (open WS).
|
|
24
|
-
*/
|
|
25
|
-
export class KernelClient {
|
|
26
|
-
url;
|
|
27
|
-
defaultTimeout;
|
|
28
|
-
defaultTransport;
|
|
29
|
-
defaultProtocol;
|
|
30
|
-
hooks;
|
|
31
|
-
codec;
|
|
32
|
-
schema;
|
|
33
|
-
httpEnvelope;
|
|
34
|
-
httpRouted;
|
|
35
|
-
wsFactory;
|
|
36
|
-
logger;
|
|
37
|
-
ws = null;
|
|
38
|
-
wsState = 'unknown';
|
|
39
|
-
constructor(config) {
|
|
40
|
-
this.url = config.url.replace(/\/$/, '');
|
|
41
|
-
this.defaultTimeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
42
|
-
this.defaultTransport = config.defaultTransport ?? 'http';
|
|
43
|
-
this.defaultProtocol = config.defaultProtocol ?? 'envelope';
|
|
44
|
-
this.hooks = config.hooks ?? {};
|
|
45
|
-
this.codec = config.codec ?? 'json';
|
|
46
|
-
this.logger = config.logger ?? console;
|
|
47
|
-
// Schema: either an existing registry (shared across clients) or an
|
|
48
|
-
// array we load into a fresh registry. `SchemaRegistry.is` is a duck
|
|
49
|
-
// check — `instanceof` fails across package duplicates / realms.
|
|
50
|
-
if (SchemaRegistry.is(config.schema)) {
|
|
51
|
-
this.schema = config.schema;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.schema = new SchemaRegistry();
|
|
55
|
-
if (Array.isArray(config.schema) && config.schema.length > 0) {
|
|
56
|
-
this.schema.load(config.schema);
|
|
57
|
-
}
|
|
1
|
+
import { ClientError } from '../errors/index.js';
|
|
2
|
+
import { HttpTransport } from '../transport/http/index.js';
|
|
3
|
+
import { authenticated, resolveCredential } from './credential.js';
|
|
4
|
+
import { admitRequest, invocation } from './request.js';
|
|
5
|
+
import { requireBinary, requireStream, requireValue } from './result.js';
|
|
6
|
+
import { admittedMissError, admittedStaleRouteError } from './routing-control.js';
|
|
7
|
+
const controlledDispatch = new WeakMap();
|
|
8
|
+
/** Package-private redirect continuation path; intentionally absent from the public Client facade. */
|
|
9
|
+
export function dispatchTrace(client, credential, call, options, trace) {
|
|
10
|
+
const dispatch = controlledDispatch.get(client);
|
|
11
|
+
if (dispatch === undefined)
|
|
12
|
+
throw new TypeError('Trace dispatch requires an owned Client.');
|
|
13
|
+
return dispatch(credential, call, options, trace);
|
|
14
|
+
}
|
|
15
|
+
/** Pure client for the universal remote Function invocation boundary. */
|
|
16
|
+
export class Client {
|
|
17
|
+
transport;
|
|
18
|
+
lifecycle = new AbortController();
|
|
19
|
+
closed = false;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
if (options === null || typeof options !== 'object') {
|
|
22
|
+
throw new TypeError('Client options must be an object.');
|
|
58
23
|
}
|
|
59
|
-
this.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
retry: config.retry,
|
|
64
|
-
fetch: config.fetch,
|
|
65
|
-
});
|
|
66
|
-
this.httpRouted = new HttpRoutedTransport({
|
|
67
|
-
requestTimeout: this.defaultTimeout,
|
|
68
|
-
fetch: config.fetch,
|
|
69
|
-
});
|
|
70
|
-
this.wsFactory = () => new WsEnvelopeTransport({
|
|
71
|
-
url: this.url,
|
|
72
|
-
codec: this.codec,
|
|
73
|
-
requestTimeout: this.defaultTimeout,
|
|
74
|
-
});
|
|
24
|
+
this.transport = Object.hasOwn(options, 'transport')
|
|
25
|
+
? admitTransport(options.transport)
|
|
26
|
+
: new HttpTransport(options);
|
|
27
|
+
controlledDispatch.set(this, (credential, call, requestOptions, trace) => this.dispatchWith(credential, call, requestOptions, trace));
|
|
75
28
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return this.dispatchUnary('call', method, params, credential, opts);
|
|
29
|
+
dispatch(call, options) {
|
|
30
|
+
return this.dispatchWith(undefined, call, options);
|
|
79
31
|
}
|
|
80
|
-
|
|
81
|
-
return this.
|
|
32
|
+
call(call, options) {
|
|
33
|
+
return requireValue(this.dispatch(call, options));
|
|
82
34
|
}
|
|
83
|
-
|
|
84
|
-
return this.
|
|
35
|
+
stream(call, options) {
|
|
36
|
+
return requireStream(this.dispatch(call, options));
|
|
85
37
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const { transport, transportReq } = this.selectTransport('signal', method, params, credential, opts, schemaEntry);
|
|
89
|
-
const beforeCtx = this.beforeCtx(method, params, credential, transport.name, transportReq, opts);
|
|
90
|
-
void this.runHooks('onBeforeSend', beforeCtx);
|
|
91
|
-
transport.signal(transportReq);
|
|
92
|
-
void this.runHooks('onAfterSignal', { ...beforeCtx, dispatchedAt: Date.now() });
|
|
93
|
-
}
|
|
94
|
-
async batch(requests, credential, opts) {
|
|
95
|
-
if (requests.length === 0)
|
|
96
|
-
return [];
|
|
97
|
-
// Batch uses the envelope transport — the only path with a
|
|
98
|
-
// multi-request wire shape. Snapshot each entry's schema once so an
|
|
99
|
-
// external registry mutating mid-dispatch doesn't retarget half the
|
|
100
|
-
// batch. Mixing routed-only methods in is a policy error — flag it
|
|
101
|
-
// before any wire work starts.
|
|
102
|
-
const snapshot = requests.map((r) => ({
|
|
103
|
-
method: r.method,
|
|
104
|
-
params: r.params,
|
|
105
|
-
schema: this.lookupSchema(r.method, opts),
|
|
106
|
-
}));
|
|
107
|
-
for (const entry of snapshot) {
|
|
108
|
-
if (isRoutedOnly(entry.schema)) {
|
|
109
|
-
throw new InvalidTransportError(`Method "${entry.method}" has a route binding; batch only supports envelope calls`);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
const transportRequests = snapshot.map((entry) => this.buildEnvelopeRequest(entry.method, entry.params, credential, opts, entry.schema));
|
|
113
|
-
const entries = await this.httpEnvelope.batch(transportRequests);
|
|
114
|
-
return entries;
|
|
38
|
+
binary(call, options) {
|
|
39
|
+
return requireBinary(this.dispatch(call, options));
|
|
115
40
|
}
|
|
116
|
-
// ─── Identity & schema views ──────────────────────────────────────────────
|
|
117
41
|
as(credential) {
|
|
118
|
-
return
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Return a schema-typed proxy. `defaultCredential` — used by
|
|
122
|
-
* `BoundClientView.withSchema` — supplies a credential when the
|
|
123
|
-
* per-call `ProxyCallOptions.credential` is absent. Unbound callers
|
|
124
|
-
* that provide neither send a no-auth request; the server decides
|
|
125
|
-
* whether that's valid (per §9.0.1 the client treats credentials as
|
|
126
|
-
* opaque and never pre-judges them).
|
|
127
|
-
*/
|
|
128
|
-
withSchema(schema, defaultCredential) {
|
|
129
|
-
return createSchemaClient(async (method, params, credential, opts) => {
|
|
130
|
-
const effective = (credential ?? defaultCredential?.() ?? '');
|
|
131
|
-
const result = await this.send(method, params, effective, opts);
|
|
132
|
-
if (result.kind === 'redirect') {
|
|
133
|
-
// Proxy is value-path only by contract (§9.4). Callers wanting
|
|
134
|
-
// redirect awareness use `client.send` directly.
|
|
135
|
-
const err = new KernelError(`Unhandled redirect: "${method}" resolved to ${result.redirection.url}. ` +
|
|
136
|
-
`Use client.send() to handle redirects explicitly.`, KERNEL_ERROR_CODES.INTERNAL_ERROR, 'UNHANDLED_REDIRECT');
|
|
137
|
-
withDetails(err, {
|
|
138
|
-
method: String(method),
|
|
139
|
-
params,
|
|
140
|
-
url: this.url,
|
|
141
|
-
transport: result.meta.transport,
|
|
142
|
-
correlationId: opts?.correlationId,
|
|
143
|
-
meta: result.meta,
|
|
144
|
-
redirection: result.redirection,
|
|
145
|
-
});
|
|
146
|
-
throw err;
|
|
147
|
-
}
|
|
148
|
-
return result.value;
|
|
149
|
-
}, schema);
|
|
150
|
-
}
|
|
151
|
-
describe(method) {
|
|
152
|
-
return this.schema.get(method);
|
|
153
|
-
}
|
|
154
|
-
// ─── Connection lifecycle ─────────────────────────────────────────────────
|
|
155
|
-
/**
|
|
156
|
-
* Release any held resources (open WebSocket). Idempotent. The client
|
|
157
|
-
* stays reusable — a subsequent `send(...)` lazily re-opens a fresh
|
|
158
|
-
* WebSocket if the default or per-call transport selects `'ws'`. Resets
|
|
159
|
-
* the `'auto'` probe state so the next call re-probes.
|
|
160
|
-
*/
|
|
161
|
-
disconnect() {
|
|
162
|
-
this.ws?.disconnect();
|
|
163
|
-
this.ws = null;
|
|
164
|
-
this.httpEnvelope.disconnect();
|
|
165
|
-
this.httpRouted.disconnect();
|
|
166
|
-
this.wsState = 'unknown';
|
|
167
|
-
}
|
|
168
|
-
// ─── Internals ────────────────────────────────────────────────────────────
|
|
169
|
-
lookupSchema(method, opts) {
|
|
170
|
-
return this.schema.resolve(method, opts?.class) ?? this.schema.get(method);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Resolve the transport instance + request shape for this call.
|
|
174
|
-
* `canFallback` signals to `dispatchUnary` that a WS `ConnectionError`
|
|
175
|
-
* on this attempt should retry on HTTP (auto-mode probe only).
|
|
176
|
-
*/
|
|
177
|
-
selectTransport(kind, method, params, credential, opts, schemaEntry) {
|
|
178
|
-
const requested = opts?.transport ?? this.defaultTransport;
|
|
179
|
-
const protocol = opts?.protocol ?? this.defaultProtocol;
|
|
180
|
-
const binding = schemaEntry?.binding;
|
|
181
|
-
const route = binding?.route;
|
|
182
|
-
const remoteUrl = opts?.url ?? binding?.remoteUrl;
|
|
183
|
-
const preferRoute = protocol === 'auto' && !!route;
|
|
184
|
-
if (preferRoute) {
|
|
185
|
-
if (!remoteUrl) {
|
|
186
|
-
// Binding without remoteUrl is a schema misconfig — caller can
|
|
187
|
-
// still rescue by passing opts.url, but both missing is broken.
|
|
188
|
-
throw new InvalidTransportError(`Method "${method}" declares a route binding but has no remoteUrl; ` +
|
|
189
|
-
`register a schema with binding.remoteUrl or pass opts.url`);
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
transport: this.httpRouted,
|
|
193
|
-
transportReq: this.buildRoutedRequest(method, params, credential, opts, route, remoteUrl),
|
|
194
|
-
canFallback: false,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
const resolved = this.resolveEnvelopePipe(requested, kind);
|
|
198
|
-
return {
|
|
199
|
-
transport: resolved === 'ws' ? this.envelopeWs() : this.httpEnvelope,
|
|
200
|
-
transportReq: this.buildEnvelopeRequest(method, params, credential, opts, schemaEntry),
|
|
201
|
-
canFallback: requested === 'auto' && resolved === 'ws' && this.wsState === 'unknown',
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Resolve `CallTransport` to a concrete envelope pipe. Binary is always
|
|
206
|
-
* HTTP (server-side WS binary unimplemented). In `'auto'+unknown`, signal
|
|
207
|
-
* stays on HTTP — fire-and-forget can't communicate fallback.
|
|
208
|
-
*/
|
|
209
|
-
resolveEnvelopePipe(requested, kind) {
|
|
210
|
-
if (kind === 'binary')
|
|
211
|
-
return 'http';
|
|
212
|
-
if (requested === 'http')
|
|
213
|
-
return 'http';
|
|
214
|
-
if (requested === 'ws')
|
|
215
|
-
return 'ws';
|
|
216
|
-
if (this.wsState === 'unavailable')
|
|
217
|
-
return 'http';
|
|
218
|
-
if (this.wsState === 'proven')
|
|
219
|
-
return 'ws';
|
|
220
|
-
return kind === 'signal' ? 'http' : 'ws';
|
|
221
|
-
}
|
|
222
|
-
envelopeWs() {
|
|
223
|
-
if (!this.ws)
|
|
224
|
-
this.ws = this.wsFactory();
|
|
225
|
-
return this.ws;
|
|
226
|
-
}
|
|
227
|
-
buildEnvelopeRequest(method, params, credential, opts, schemaEntry) {
|
|
228
|
-
const binding = schemaEntry?.binding;
|
|
229
|
-
const remoteUrl = opts?.url ?? binding?.remoteUrl;
|
|
230
|
-
const url = remoteUrl && params && typeof params === 'object'
|
|
231
|
-
? substituteTemplate(remoteUrl, params)
|
|
232
|
-
: remoteUrl;
|
|
233
|
-
return {
|
|
234
|
-
method,
|
|
235
|
-
params,
|
|
236
|
-
credential,
|
|
237
|
-
timeout: opts?.timeout ?? this.defaultTimeout,
|
|
238
|
-
signal: opts?.signal,
|
|
239
|
-
correlationId: opts?.correlationId,
|
|
240
|
-
url,
|
|
241
|
-
...(opts?.self !== undefined && { self: opts.self }),
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
buildRoutedRequest(method, params, credential, opts, route, remoteUrl) {
|
|
245
|
-
return {
|
|
246
|
-
method,
|
|
247
|
-
params: params ?? {},
|
|
248
|
-
credential,
|
|
249
|
-
timeout: opts?.timeout ?? this.defaultTimeout,
|
|
250
|
-
signal: opts?.signal,
|
|
251
|
-
correlationId: opts?.correlationId,
|
|
252
|
-
route,
|
|
253
|
-
remoteUrl,
|
|
254
|
-
};
|
|
42
|
+
return authenticated((bound, request, options) => this.dispatchWith(bound, request, options), credential);
|
|
255
43
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
* `onBeforeSend`, awaits the transport, freezes the result (deeply,
|
|
259
|
-
* including `meta.wire`), wraps streams in the observability
|
|
260
|
-
* iterator, fires `onAfterReceive`, and decorates errors with
|
|
261
|
-
* `ClientErrorDetails` if the transport didn't already.
|
|
262
|
-
*/
|
|
263
|
-
async dispatchUnary(kind, method, params, credential, opts) {
|
|
264
|
-
const schemaEntry = this.lookupSchema(method, opts);
|
|
265
|
-
const selection = this.selectTransport(kind, method, params, credential, opts, schemaEntry);
|
|
266
|
-
try {
|
|
267
|
-
return await this.dispatchOnce(kind, method, params, credential, opts, selection, !selection.canFallback);
|
|
268
|
-
}
|
|
269
|
-
catch (err) {
|
|
270
|
-
if (selection.canFallback && err instanceof ConnectionError) {
|
|
271
|
-
this.wsState = 'unavailable';
|
|
272
|
-
const httpSel = this.selectTransport(kind, method, params, credential, opts, schemaEntry);
|
|
273
|
-
return this.dispatchOnce(kind, method, params, credential, opts, httpSel, true);
|
|
274
|
-
}
|
|
275
|
-
throw err;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* One dispatch attempt: hooks + wire + freeze. `fireErrorHook = false`
|
|
280
|
-
* suppresses `onError` so a recovered auto-mode WS probe failure doesn't
|
|
281
|
-
* surface as a phantom error when the fallback HTTP call succeeds.
|
|
282
|
-
*/
|
|
283
|
-
async dispatchOnce(kind, method, params, credential, opts, selection, fireErrorHook) {
|
|
284
|
-
const { transport, transportReq } = selection;
|
|
285
|
-
const beforeCtx = this.beforeCtx(method, params, credential, transport.name, transportReq, opts);
|
|
286
|
-
await this.runHooks('onBeforeSend', beforeCtx);
|
|
287
|
-
try {
|
|
288
|
-
const raw = kind === 'call'
|
|
289
|
-
? await transport.call(transportReq)
|
|
290
|
-
: kind === 'stream'
|
|
291
|
-
? await transport.stream(transportReq)
|
|
292
|
-
: await transport.binary(transportReq);
|
|
293
|
-
if (transport.name === 'ws-envelope' && this.wsState === 'unknown') {
|
|
294
|
-
this.wsState = 'proven';
|
|
295
|
-
}
|
|
296
|
-
// For streams, wrap `chunks` in the instrumented iterable BEFORE
|
|
297
|
-
// freezing — hook and caller must see the same iterable so a hook
|
|
298
|
-
// that iterates doesn't steal frames from the caller.
|
|
299
|
-
const toFreeze = raw.kind === 'stream' && this.hooks.onStreamFrame
|
|
300
|
-
? {
|
|
301
|
-
...raw,
|
|
302
|
-
chunks: this.instrumentStream(raw.chunks, beforeCtx, raw.meta),
|
|
303
|
-
}
|
|
304
|
-
: raw;
|
|
305
|
-
const frozen = freezeResult(toFreeze);
|
|
306
|
-
await this.runHooks('onAfterReceive', {
|
|
307
|
-
...beforeCtx,
|
|
308
|
-
result: frozen,
|
|
309
|
-
meta: frozen.meta,
|
|
310
|
-
});
|
|
311
|
-
return frozen;
|
|
312
|
-
}
|
|
313
|
-
catch (err) {
|
|
314
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
315
|
-
if (error instanceof WebOSError && !error.details) {
|
|
316
|
-
withDetails(error, {
|
|
317
|
-
method,
|
|
318
|
-
params,
|
|
319
|
-
url: transport.url ?? this.url,
|
|
320
|
-
transport: transport.name,
|
|
321
|
-
correlationId: opts?.correlationId,
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
if (fireErrorHook) {
|
|
325
|
-
await this.runHooks('onError', {
|
|
326
|
-
...beforeCtx,
|
|
327
|
-
error,
|
|
328
|
-
meta: error.details?.meta,
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
throw error;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
beforeCtx(method, params, credential, transport, transportReq, opts) {
|
|
335
|
-
return {
|
|
336
|
-
method,
|
|
337
|
-
params,
|
|
338
|
-
credential,
|
|
339
|
-
transport,
|
|
340
|
-
url: transportReq.url ?? this.url,
|
|
341
|
-
correlationId: opts?.correlationId,
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Wrap a stream iterable so each chunk fires `onStreamFrame`. Errors
|
|
346
|
-
* during hook evaluation are swallowed per the hook contract (pure
|
|
347
|
-
* observation); a hook that misbehaves never aborts the stream.
|
|
348
|
-
*/
|
|
349
|
-
async *instrumentStream(chunks, beforeCtx, meta) {
|
|
350
|
-
let index = 0;
|
|
351
|
-
for await (const data of chunks) {
|
|
352
|
-
if (this.hooks.onStreamFrame) {
|
|
353
|
-
try {
|
|
354
|
-
await this.hooks.onStreamFrame({ ...beforeCtx, index, data, meta });
|
|
355
|
-
}
|
|
356
|
-
catch (err) {
|
|
357
|
-
this.logHookError('onStreamFrame', err);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
index++;
|
|
361
|
-
yield data;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
async runHooks(key, ctx) {
|
|
365
|
-
const hook = this.hooks[key];
|
|
366
|
-
if (!hook)
|
|
44
|
+
close() {
|
|
45
|
+
if (this.closed)
|
|
367
46
|
return;
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
47
|
+
this.closed = true;
|
|
48
|
+
const failure = new ClientError('Client is closed.');
|
|
49
|
+
this.lifecycle.abort(failure);
|
|
50
|
+
this.transport.close?.();
|
|
51
|
+
}
|
|
52
|
+
async dispatchWith(credential, input, options, trace) {
|
|
53
|
+
if (this.closed)
|
|
54
|
+
throw new ClientError('Client is closed.');
|
|
55
|
+
const request = admitRequest(input, options, this.lifecycle.signal);
|
|
56
|
+
const resolved = credential === undefined
|
|
57
|
+
? undefined
|
|
58
|
+
: await resolveCredential(credential, request.options.signal);
|
|
59
|
+
requireRequestLive(request.options.signal);
|
|
60
|
+
const result = await this.transport.dispatch(invocation(request, resolved, trace), request.options);
|
|
61
|
+
if (result.kind === 'stale')
|
|
62
|
+
throw admittedStaleRouteError(result.current, result.invocation);
|
|
63
|
+
if (result.kind === 'miss')
|
|
64
|
+
throw admittedMissError(result.invocation);
|
|
65
|
+
return result;
|
|
385
66
|
}
|
|
386
67
|
}
|
|
387
|
-
function
|
|
388
|
-
if (
|
|
389
|
-
return
|
|
390
|
-
const
|
|
391
|
-
|
|
68
|
+
function requireRequestLive(signal) {
|
|
69
|
+
if (signal?.aborted !== true)
|
|
70
|
+
return;
|
|
71
|
+
const reason = signal.reason;
|
|
72
|
+
throw reason instanceof Error
|
|
73
|
+
? reason
|
|
74
|
+
: new ClientError('Client request was cancelled.', { cause: reason });
|
|
75
|
+
}
|
|
76
|
+
function admitTransport(input) {
|
|
77
|
+
if (input === null || typeof input !== 'object') {
|
|
78
|
+
throw new TypeError('Client transport must be an object.');
|
|
79
|
+
}
|
|
80
|
+
const dispatch = input.dispatch;
|
|
81
|
+
if (typeof dispatch !== 'function') {
|
|
82
|
+
throw new TypeError('Client transport must implement dispatch().');
|
|
83
|
+
}
|
|
84
|
+
const close = input.close;
|
|
85
|
+
if (close !== undefined && typeof close !== 'function') {
|
|
86
|
+
throw new TypeError('Client transport close capability is invalid.');
|
|
87
|
+
}
|
|
88
|
+
return Object.freeze({
|
|
89
|
+
dispatch: dispatch.bind(input),
|
|
90
|
+
...(close === undefined ? {} : { close: close.bind(input) }),
|
|
91
|
+
});
|
|
392
92
|
}
|
|
393
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Call, ClientDispatchOptions } from './request.js';
|
|
2
|
+
import type { BinaryResponse, Result, StreamResult, ValueResult } from './result.js';
|
|
3
|
+
export type RemoteCredential = string | (() => string | Promise<string>);
|
|
4
|
+
export interface AuthenticatedClient {
|
|
5
|
+
dispatch(call: Call, options?: ClientDispatchOptions): Promise<Result>;
|
|
6
|
+
call(call: Call, options?: ClientDispatchOptions): Promise<ValueResult>;
|
|
7
|
+
stream(call: Call, options?: ClientDispatchOptions): Promise<StreamResult>;
|
|
8
|
+
binary(call: Call, options?: ClientDispatchOptions): Promise<BinaryResponse>;
|
|
9
|
+
}
|
|
10
|
+
export type CredentialDispatch = (credential: RemoteCredential, call: Call, options?: ClientDispatchOptions) => Promise<Result>;
|
|
11
|
+
export declare function authenticated(dispatchWith: CredentialDispatch, credential: RemoteCredential): AuthenticatedClient;
|
|
12
|
+
export declare function resolveCredential(input: RemoteCredential, signal?: AbortSignal): Promise<string>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ClientError } from '../errors/index.js';
|
|
2
|
+
import { requireBinary, requireStream, requireValue } from './result.js';
|
|
3
|
+
export function authenticated(dispatchWith, credential) {
|
|
4
|
+
const dispatch = (call, options) => dispatchWith(credential, call, options);
|
|
5
|
+
return Object.freeze({
|
|
6
|
+
dispatch,
|
|
7
|
+
call: (call, options) => requireValue(dispatch(call, options)),
|
|
8
|
+
stream: (call, options) => requireStream(dispatch(call, options)),
|
|
9
|
+
binary: (call, options) => requireBinary(dispatch(call, options)),
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export async function resolveCredential(input, signal) {
|
|
13
|
+
requireLive(signal);
|
|
14
|
+
const pending = Promise.resolve(typeof input === 'function' ? input() : input);
|
|
15
|
+
const credential = await observeWhileLive(pending, signal);
|
|
16
|
+
if (typeof credential !== 'string' || credential.length === 0) {
|
|
17
|
+
throw new TypeError('Remote credentials must be non-empty strings.');
|
|
18
|
+
}
|
|
19
|
+
return credential;
|
|
20
|
+
}
|
|
21
|
+
function observeWhileLive(pending, signal) {
|
|
22
|
+
if (signal === undefined)
|
|
23
|
+
return pending;
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const cancelled = () => {
|
|
26
|
+
signal.removeEventListener('abort', cancelled);
|
|
27
|
+
reject(cancellation(signal.reason));
|
|
28
|
+
};
|
|
29
|
+
signal.addEventListener('abort', cancelled, { once: true });
|
|
30
|
+
if (signal.aborted) {
|
|
31
|
+
cancelled();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
void pending.then((value) => {
|
|
35
|
+
signal.removeEventListener('abort', cancelled);
|
|
36
|
+
resolve(value);
|
|
37
|
+
}, (error) => {
|
|
38
|
+
signal.removeEventListener('abort', cancelled);
|
|
39
|
+
reject(error);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function requireLive(signal) {
|
|
44
|
+
if (signal?.aborted === true)
|
|
45
|
+
throw cancellation(signal.reason);
|
|
46
|
+
}
|
|
47
|
+
function cancellation(reason) {
|
|
48
|
+
return reason instanceof Error
|
|
49
|
+
? reason
|
|
50
|
+
: new ClientError('Client request was cancelled.', { cause: reason });
|
|
51
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Client, dispatchTrace, type ClientOptions } from './client.js';
|
|
2
|
+
export { acceptCall } from './admission.js';
|
|
3
|
+
export type { AuthenticatedClient, RemoteCredential } from './credential.js';
|
|
4
|
+
export { call, type Call, type ClientDispatchOptions } from './request.js';
|
|
5
|
+
export type { Binary, BinaryResponse, Input, RedirectResult, Result, Stream, StreamResult, ValueResult, } from './result.js';
|
|
6
|
+
export { isAdmittedMissError, isAdmittedStaleRouteError } from './routing-control.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PathLike } from '@astrale-os/kernel-core/path';
|
|
2
|
+
import type * as protocol from '@astrale-os/kernel-protocol/invocation';
|
|
3
|
+
import type { RequestOptions, TransportRequest } from '../transport/index.js';
|
|
4
|
+
import type { Input } from './result.js';
|
|
5
|
+
/** One portable call before Path canonicalization, correlation, and credential binding. */
|
|
6
|
+
export interface Call {
|
|
7
|
+
readonly target: PathLike;
|
|
8
|
+
readonly input: Input;
|
|
9
|
+
}
|
|
10
|
+
export interface ClientDispatchOptions extends RequestOptions {
|
|
11
|
+
/** Untrusted delivery context; it changes neither Call meaning nor authority. */
|
|
12
|
+
readonly delegate?: protocol.Delegate;
|
|
13
|
+
readonly routing?: protocol.Routing;
|
|
14
|
+
/** Package-owned local-target or remote-revision precondition for a bound invocation. */
|
|
15
|
+
readonly schema?: protocol.SchemaTarget;
|
|
16
|
+
}
|
|
17
|
+
export interface AdmittedRequest {
|
|
18
|
+
readonly call: protocol.Call;
|
|
19
|
+
readonly delegate?: protocol.Delegate;
|
|
20
|
+
readonly routing?: protocol.Routing;
|
|
21
|
+
readonly schema?: protocol.SchemaTarget;
|
|
22
|
+
readonly options: RequestOptions;
|
|
23
|
+
}
|
|
24
|
+
export declare function call(target: PathLike, input: Input): Call;
|
|
25
|
+
export declare function admitRequest(input: Call, options: ClientDispatchOptions | undefined, lifecycle: AbortSignal): AdmittedRequest;
|
|
26
|
+
export declare function invocation(request: AdmittedRequest, credential?: string, trace?: protocol.Trace): TransportRequest;
|