@astrale-os/kernel-client 0.6.0-beta.3 → 0.6.0-beta.31
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 +902 -0
- package/dist/auth/auth.d.ts +3 -4
- package/dist/auth/auth.js +0 -1
- package/dist/auth/authorization.d.ts +2 -3
- package/dist/auth/authorization.js +3 -4
- package/dist/auth/credential.d.ts +1 -2
- package/dist/auth/credential.js +5 -6
- package/dist/auth/identity.d.ts +6 -9
- package/dist/auth/identity.js +4 -5
- package/dist/auth/index.d.ts +1 -2
- package/dist/auth/index.js +0 -1
- package/dist/auth/provision.d.ts +0 -1
- package/dist/auth/provision.js +2 -3
- package/dist/client/admission.d.ts +0 -1
- package/dist/client/admission.js +0 -1
- package/dist/client/client.d.ts +0 -1
- package/dist/client/client.js +0 -1
- package/dist/client/credential.d.ts +0 -1
- package/dist/client/credential.js +0 -1
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.js +0 -1
- package/dist/client/request.d.ts +1 -2
- package/dist/client/request.js +1 -2
- package/dist/client/result.d.ts +3 -4
- package/dist/client/result.js +3 -1
- package/dist/client/routing-control.d.ts +0 -1
- package/dist/client/routing-control.js +0 -1
- package/dist/errors/client-error.d.ts +0 -1
- package/dist/errors/client-error.js +2 -1
- package/dist/errors/index.d.ts +7 -7
- package/dist/errors/index.js +7 -7
- package/dist/errors/miss-error.d.ts +0 -1
- package/dist/errors/miss-error.js +0 -1
- package/dist/errors/protocol-error.d.ts +0 -1
- package/dist/errors/protocol-error.js +0 -1
- package/dist/errors/response-error.d.ts +2 -2
- package/dist/errors/response-error.js +1 -2
- package/dist/errors/session-error.d.ts +9 -0
- package/dist/errors/session-error.js +9 -0
- package/dist/errors/stale-route-error.d.ts +0 -1
- package/dist/errors/stale-route-error.js +0 -1
- package/dist/errors/transport-error.d.ts +18 -6
- package/dist/errors/transport-error.js +11 -7
- 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 +2 -3
- package/dist/graph/errors.js +2 -2
- package/dist/graph/expectation.d.ts +3 -0
- package/dist/graph/expectation.js +6 -0
- package/dist/graph/graph.d.ts +12 -8
- package/dist/graph/graph.js +0 -1
- package/dist/graph/index.d.ts +2 -2
- package/dist/graph/index.js +1 -1
- package/dist/graph/mutation.d.ts +2 -4
- package/dist/graph/mutation.js +12 -4
- package/dist/graph/page/index.d.ts +0 -1
- package/dist/graph/page/index.js +0 -1
- package/dist/graph/page/neighbors.d.ts +4 -5
- package/dist/graph/page/neighbors.js +6 -7
- package/dist/graph/page/page.d.ts +5 -2
- package/dist/graph/page/page.js +0 -1
- package/dist/graph/page-contract.d.ts +1 -2
- package/dist/graph/page-contract.js +0 -1
- package/dist/graph/provenance.d.ts +14 -0
- package/dist/graph/provenance.js +42 -0
- package/dist/graph/query.d.ts +0 -1
- package/dist/graph/query.js +21 -13
- package/dist/graph/read.d.ts +3 -4
- package/dist/graph/read.js +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/pacer/batcher/batcher.d.ts +0 -1
- package/dist/pacer/batcher/batcher.js +0 -1
- package/dist/pacer/batcher/defaults.d.ts +0 -1
- package/dist/pacer/batcher/defaults.js +0 -1
- package/dist/pacer/batcher/index.d.ts +0 -1
- package/dist/pacer/batcher/index.js +0 -1
- package/dist/pacer/index.d.ts +0 -1
- package/dist/pacer/index.js +0 -1
- package/dist/pacer/limiter/defaults.d.ts +0 -1
- package/dist/pacer/limiter/defaults.js +0 -1
- package/dist/pacer/limiter/index.d.ts +0 -1
- package/dist/pacer/limiter/index.js +0 -1
- package/dist/pacer/limiter/limiter.d.ts +0 -1
- package/dist/pacer/limiter/limiter.js +0 -1
- package/dist/pacer/queue/defaults.d.ts +0 -1
- package/dist/pacer/queue/defaults.js +0 -1
- package/dist/pacer/queue/index.d.ts +0 -1
- package/dist/pacer/queue/index.js +0 -1
- package/dist/pacer/queue/queue.d.ts +0 -1
- package/dist/pacer/queue/queue.js +0 -1
- package/dist/pacer/retry/defaults.d.ts +0 -1
- package/dist/pacer/retry/defaults.js +0 -1
- package/dist/pacer/retry/index.d.ts +0 -1
- package/dist/pacer/retry/index.js +0 -1
- package/dist/pacer/retry/retry.d.ts +0 -1
- package/dist/pacer/retry/retry.js +0 -1
- package/dist/pool/index.d.ts +0 -1
- package/dist/pool/index.js +0 -1
- package/dist/pool/pool.d.ts +0 -1
- package/dist/pool/pool.js +0 -1
- package/dist/pool/target.d.ts +0 -1
- package/dist/pool/target.js +0 -1
- package/dist/schema/admission.d.ts +9 -7
- package/dist/schema/admission.js +6 -12
- package/dist/schema/contracts.d.ts +6 -16
- package/dist/schema/contracts.js +0 -1
- package/dist/schema/index.d.ts +2 -3
- package/dist/schema/index.js +0 -1
- package/dist/schema/introspection.d.ts +1 -2
- package/dist/schema/introspection.js +7 -4
- package/dist/schema/operation.d.ts +0 -1
- package/dist/schema/operation.js +1 -2
- package/dist/schema/schema.d.ts +9 -10
- package/dist/schema/schema.js +47 -10
- package/dist/session/bound.d.ts +45 -0
- package/dist/session/bound.js +89 -0
- package/dist/session/context/control.d.ts +0 -1
- package/dist/session/context/control.js +0 -1
- package/dist/session/context/index.d.ts +0 -1
- package/dist/session/context/index.js +0 -1
- package/dist/session/context/limits.d.ts +0 -1
- package/dist/session/context/limits.js +0 -1
- package/dist/session/context/operation.d.ts +0 -1
- package/dist/session/context/operation.js +19 -17
- package/dist/session/context/policy.d.ts +1 -2
- package/dist/session/context/policy.js +2 -3
- package/dist/session/discovery/bundle.d.ts +0 -1
- package/dist/session/discovery/bundle.js +6 -6
- package/dist/session/discovery/discovery.d.ts +1 -2
- package/dist/session/discovery/discovery.js +0 -1
- package/dist/session/discovery/index.d.ts +1 -2
- package/dist/session/discovery/index.js +0 -1
- package/dist/session/discovery/publication.d.ts +1 -2
- package/dist/session/discovery/publication.js +6 -5
- package/dist/session/discovery/snapshot.d.ts +1 -2
- package/dist/session/discovery/snapshot.js +0 -1
- package/dist/session/discovery/transport.d.ts +6 -0
- package/dist/session/discovery/transport.js +13 -0
- package/dist/session/index.d.ts +6 -4
- package/dist/session/index.js +3 -2
- package/dist/session/reference.d.ts +36 -0
- package/dist/session/reference.js +74 -0
- package/dist/session/routing/auth.d.ts +1 -2
- package/dist/session/routing/auth.js +1 -2
- package/dist/session/routing/cache.d.ts +28 -8
- package/dist/session/routing/cache.js +212 -26
- package/dist/session/routing/dispatch.d.ts +3 -7
- package/dist/session/routing/dispatch.js +32 -25
- package/dist/session/routing/envelope.d.ts +2 -1
- package/dist/session/routing/envelope.js +14 -10
- package/dist/session/routing/expectation.d.ts +6 -0
- package/dist/session/routing/expectation.js +1 -0
- package/dist/session/routing/index.d.ts +2 -3
- package/dist/session/routing/index.js +1 -2
- package/dist/session/routing/request.d.ts +1 -2
- package/dist/session/routing/request.js +1 -2
- package/dist/session/session.d.ts +16 -10
- package/dist/session/session.js +50 -36
- package/dist/session/session.typecheck.d.ts +0 -1
- package/dist/session/session.typecheck.js +23 -2
- package/dist/session/views/catalog.d.ts +2 -3
- package/dist/session/views/catalog.js +15 -7
- package/dist/session/views/index.d.ts +0 -1
- package/dist/session/views/index.js +0 -1
- package/dist/session/views/resolve.d.ts +0 -1
- package/dist/session/views/resolve.js +4 -3
- package/dist/store/entity-index.d.ts +0 -1
- package/dist/store/entity-index.js +0 -1
- package/dist/store/index.d.ts +0 -1
- package/dist/store/index.js +0 -1
- package/dist/store/memory.d.ts +2 -2
- package/dist/store/memory.js +24 -13
- package/dist/store/mutation.d.ts +0 -1
- package/dist/store/mutation.js +0 -1
- package/dist/store/observe.d.ts +0 -1
- package/dist/store/observe.js +0 -1
- package/dist/store/optimistic.d.ts +0 -1
- package/dist/store/optimistic.js +0 -1
- package/dist/store/query-key.d.ts +2 -2
- package/dist/store/query-key.js +7 -3
- package/dist/store/shape.d.ts +3 -2
- package/dist/store/shape.js +3 -2
- package/dist/store/store.d.ts +2 -4
- package/dist/store/store.js +5 -4
- package/dist/store/store.typecheck.d.ts +0 -1
- package/dist/store/store.typecheck.js +3 -4
- package/dist/transport/auto/decision.d.ts +0 -1
- package/dist/transport/auto/decision.js +0 -1
- package/dist/transport/auto/fallback.d.ts +0 -1
- package/dist/transport/auto/fallback.js +8 -10
- package/dist/transport/auto/index.d.ts +0 -1
- package/dist/transport/auto/index.js +0 -1
- package/dist/transport/auto/transport.d.ts +0 -1
- package/dist/transport/auto/transport.js +5 -6
- package/dist/transport/auto/warning.d.ts +0 -1
- package/dist/transport/auto/warning.js +0 -1
- package/dist/transport/deadline.d.ts +0 -1
- package/dist/transport/deadline.js +0 -1
- package/dist/transport/failure.d.ts +7 -0
- package/dist/transport/failure.js +9 -0
- package/dist/transport/http/byte-stream.d.ts +17 -0
- package/dist/transport/http/byte-stream.js +86 -0
- package/dist/transport/http/index.d.ts +0 -1
- package/dist/transport/http/index.js +0 -1
- package/dist/transport/http/response.d.ts +2 -2
- package/dist/transport/http/response.js +2 -2
- package/dist/transport/http/stream.d.ts +2 -2
- package/dist/transport/http/stream.js +8 -8
- package/dist/transport/http/transport.d.ts +0 -1
- package/dist/transport/http/transport.js +36 -15
- package/dist/transport/index.d.ts +0 -1
- package/dist/transport/index.js +0 -1
- package/dist/transport/transport.d.ts +0 -1
- package/dist/transport/transport.js +0 -1
- package/dist/transport/websocket/connection.d.ts +2 -2
- package/dist/transport/websocket/connection.js +12 -25
- package/dist/transport/websocket/exchange.d.ts +1 -2
- package/dist/transport/websocket/exchange.js +6 -10
- package/dist/transport/websocket/index.d.ts +0 -1
- package/dist/transport/websocket/index.js +0 -1
- package/dist/transport/websocket/transport.d.ts +0 -1
- package/dist/transport/websocket/transport.js +8 -20
- package/package.json +21 -18
- package/dist/auth/auth.d.ts.map +0 -1
- package/dist/auth/auth.js.map +0 -1
- package/dist/auth/authorization.d.ts.map +0 -1
- package/dist/auth/authorization.js.map +0 -1
- package/dist/auth/credential.d.ts.map +0 -1
- package/dist/auth/credential.js.map +0 -1
- package/dist/auth/identity.d.ts.map +0 -1
- package/dist/auth/identity.js.map +0 -1
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/provision.d.ts.map +0 -1
- package/dist/auth/provision.js.map +0 -1
- package/dist/client/admission.d.ts.map +0 -1
- package/dist/client/admission.js.map +0 -1
- package/dist/client/client.d.ts.map +0 -1
- package/dist/client/client.js.map +0 -1
- package/dist/client/credential.d.ts.map +0 -1
- package/dist/client/credential.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/request.d.ts.map +0 -1
- package/dist/client/request.js.map +0 -1
- package/dist/client/result.d.ts.map +0 -1
- package/dist/client/result.js.map +0 -1
- package/dist/client/routing-control.d.ts.map +0 -1
- package/dist/client/routing-control.js.map +0 -1
- package/dist/domain/binding.d.ts +0 -24
- package/dist/domain/binding.d.ts.map +0 -1
- package/dist/domain/binding.js +0 -69
- package/dist/domain/binding.js.map +0 -1
- package/dist/domain/callable.d.ts +0 -25
- package/dist/domain/callable.d.ts.map +0 -1
- package/dist/domain/callable.js +0 -70
- package/dist/domain/callable.js.map +0 -1
- package/dist/domain/domain.typecheck.d.ts +0 -2
- package/dist/domain/domain.typecheck.d.ts.map +0 -1
- package/dist/domain/domain.typecheck.js +0 -69
- package/dist/domain/domain.typecheck.js.map +0 -1
- package/dist/domain/index.d.ts +0 -4
- package/dist/domain/index.d.ts.map +0 -1
- package/dist/domain/index.js +0 -2
- package/dist/domain/index.js.map +0 -1
- package/dist/domain/node.d.ts +0 -10
- package/dist/domain/node.d.ts.map +0 -1
- package/dist/domain/node.js +0 -6
- package/dist/domain/node.js.map +0 -1
- package/dist/errors/client-error.d.ts.map +0 -1
- package/dist/errors/client-error.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/miss-error.d.ts.map +0 -1
- package/dist/errors/miss-error.js.map +0 -1
- package/dist/errors/protocol-error.d.ts.map +0 -1
- package/dist/errors/protocol-error.js.map +0 -1
- package/dist/errors/response-error.d.ts.map +0 -1
- package/dist/errors/response-error.js.map +0 -1
- package/dist/errors/stale-route-error.d.ts.map +0 -1
- package/dist/errors/stale-route-error.js.map +0 -1
- package/dist/errors/transport-error.d.ts.map +0 -1
- package/dist/errors/transport-error.js.map +0 -1
- package/dist/graph/errors.d.ts.map +0 -1
- package/dist/graph/errors.js.map +0 -1
- package/dist/graph/graph.d.ts.map +0 -1
- package/dist/graph/graph.js.map +0 -1
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/mutation.d.ts.map +0 -1
- package/dist/graph/mutation.js.map +0 -1
- package/dist/graph/page/index.d.ts.map +0 -1
- package/dist/graph/page/index.js.map +0 -1
- package/dist/graph/page/neighbors.d.ts.map +0 -1
- package/dist/graph/page/neighbors.js.map +0 -1
- package/dist/graph/page/page.d.ts.map +0 -1
- package/dist/graph/page/page.js.map +0 -1
- package/dist/graph/page-contract.d.ts.map +0 -1
- package/dist/graph/page-contract.js.map +0 -1
- package/dist/graph/query.d.ts.map +0 -1
- package/dist/graph/query.js.map +0 -1
- package/dist/graph/read.d.ts.map +0 -1
- package/dist/graph/read.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/pacer/batcher/batcher.d.ts.map +0 -1
- package/dist/pacer/batcher/batcher.js.map +0 -1
- package/dist/pacer/batcher/defaults.d.ts.map +0 -1
- package/dist/pacer/batcher/defaults.js.map +0 -1
- package/dist/pacer/batcher/index.d.ts.map +0 -1
- package/dist/pacer/batcher/index.js.map +0 -1
- package/dist/pacer/index.d.ts.map +0 -1
- package/dist/pacer/index.js.map +0 -1
- package/dist/pacer/limiter/defaults.d.ts.map +0 -1
- package/dist/pacer/limiter/defaults.js.map +0 -1
- package/dist/pacer/limiter/index.d.ts.map +0 -1
- package/dist/pacer/limiter/index.js.map +0 -1
- package/dist/pacer/limiter/limiter.d.ts.map +0 -1
- package/dist/pacer/limiter/limiter.js.map +0 -1
- package/dist/pacer/queue/defaults.d.ts.map +0 -1
- package/dist/pacer/queue/defaults.js.map +0 -1
- package/dist/pacer/queue/index.d.ts.map +0 -1
- package/dist/pacer/queue/index.js.map +0 -1
- package/dist/pacer/queue/queue.d.ts.map +0 -1
- package/dist/pacer/queue/queue.js.map +0 -1
- package/dist/pacer/retry/defaults.d.ts.map +0 -1
- package/dist/pacer/retry/defaults.js.map +0 -1
- package/dist/pacer/retry/index.d.ts.map +0 -1
- package/dist/pacer/retry/index.js.map +0 -1
- package/dist/pacer/retry/retry.d.ts.map +0 -1
- package/dist/pacer/retry/retry.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/pool/target.d.ts.map +0 -1
- package/dist/pool/target.js.map +0 -1
- package/dist/schema/admission.d.ts.map +0 -1
- package/dist/schema/admission.js.map +0 -1
- package/dist/schema/contracts.d.ts.map +0 -1
- package/dist/schema/contracts.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/introspection.d.ts.map +0 -1
- package/dist/schema/introspection.js.map +0 -1
- package/dist/schema/operation.d.ts.map +0 -1
- package/dist/schema/operation.js.map +0 -1
- package/dist/schema/schema.d.ts.map +0 -1
- package/dist/schema/schema.js.map +0 -1
- package/dist/session/context/control.d.ts.map +0 -1
- package/dist/session/context/control.js.map +0 -1
- package/dist/session/context/index.d.ts.map +0 -1
- package/dist/session/context/index.js.map +0 -1
- package/dist/session/context/limits.d.ts.map +0 -1
- package/dist/session/context/limits.js.map +0 -1
- package/dist/session/context/operation.d.ts.map +0 -1
- package/dist/session/context/operation.js.map +0 -1
- package/dist/session/context/policy.d.ts.map +0 -1
- package/dist/session/context/policy.js.map +0 -1
- package/dist/session/discovery/bundle.d.ts.map +0 -1
- package/dist/session/discovery/bundle.js.map +0 -1
- package/dist/session/discovery/discovery.d.ts.map +0 -1
- package/dist/session/discovery/discovery.js.map +0 -1
- package/dist/session/discovery/index.d.ts.map +0 -1
- package/dist/session/discovery/index.js.map +0 -1
- package/dist/session/discovery/publication.d.ts.map +0 -1
- package/dist/session/discovery/publication.js.map +0 -1
- package/dist/session/discovery/snapshot.d.ts.map +0 -1
- package/dist/session/discovery/snapshot.js.map +0 -1
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js.map +0 -1
- package/dist/session/routing/auth.d.ts.map +0 -1
- package/dist/session/routing/auth.js.map +0 -1
- package/dist/session/routing/bound.d.ts +0 -7
- package/dist/session/routing/bound.d.ts.map +0 -1
- package/dist/session/routing/bound.js +0 -2
- package/dist/session/routing/bound.js.map +0 -1
- package/dist/session/routing/cache.d.ts.map +0 -1
- package/dist/session/routing/cache.js.map +0 -1
- package/dist/session/routing/dispatch.d.ts.map +0 -1
- package/dist/session/routing/dispatch.js.map +0 -1
- package/dist/session/routing/envelope.d.ts.map +0 -1
- package/dist/session/routing/envelope.js.map +0 -1
- package/dist/session/routing/index.d.ts.map +0 -1
- package/dist/session/routing/index.js.map +0 -1
- package/dist/session/routing/request.d.ts.map +0 -1
- package/dist/session/routing/request.js.map +0 -1
- package/dist/session/session.d.ts.map +0 -1
- package/dist/session/session.js.map +0 -1
- package/dist/session/session.typecheck.d.ts.map +0 -1
- package/dist/session/session.typecheck.js.map +0 -1
- package/dist/session/views/catalog.d.ts.map +0 -1
- package/dist/session/views/catalog.js.map +0 -1
- package/dist/session/views/index.d.ts.map +0 -1
- package/dist/session/views/index.js.map +0 -1
- package/dist/session/views/resolve.d.ts.map +0 -1
- package/dist/session/views/resolve.js.map +0 -1
- package/dist/store/entity-index.d.ts.map +0 -1
- package/dist/store/entity-index.js.map +0 -1
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js.map +0 -1
- package/dist/store/memory.d.ts.map +0 -1
- package/dist/store/memory.js.map +0 -1
- package/dist/store/mutation.d.ts.map +0 -1
- package/dist/store/mutation.js.map +0 -1
- package/dist/store/observe.d.ts.map +0 -1
- package/dist/store/observe.js.map +0 -1
- package/dist/store/optimistic.d.ts.map +0 -1
- package/dist/store/optimistic.js.map +0 -1
- package/dist/store/query-key.d.ts.map +0 -1
- package/dist/store/query-key.js.map +0 -1
- package/dist/store/shape.d.ts.map +0 -1
- package/dist/store/shape.js.map +0 -1
- package/dist/store/store.d.ts.map +0 -1
- package/dist/store/store.js.map +0 -1
- package/dist/store/store.typecheck.d.ts.map +0 -1
- package/dist/store/store.typecheck.js.map +0 -1
- package/dist/transport/auto/decision.d.ts.map +0 -1
- package/dist/transport/auto/decision.js.map +0 -1
- package/dist/transport/auto/fallback.d.ts.map +0 -1
- package/dist/transport/auto/fallback.js.map +0 -1
- package/dist/transport/auto/index.d.ts.map +0 -1
- package/dist/transport/auto/index.js.map +0 -1
- package/dist/transport/auto/transport.d.ts.map +0 -1
- package/dist/transport/auto/transport.js.map +0 -1
- package/dist/transport/auto/warning.d.ts.map +0 -1
- package/dist/transport/auto/warning.js.map +0 -1
- package/dist/transport/deadline.d.ts.map +0 -1
- package/dist/transport/deadline.js.map +0 -1
- package/dist/transport/http/index.d.ts.map +0 -1
- package/dist/transport/http/index.js.map +0 -1
- package/dist/transport/http/response.d.ts.map +0 -1
- package/dist/transport/http/response.js.map +0 -1
- package/dist/transport/http/stream.d.ts.map +0 -1
- package/dist/transport/http/stream.js.map +0 -1
- package/dist/transport/http/transport.d.ts.map +0 -1
- package/dist/transport/http/transport.js.map +0 -1
- package/dist/transport/index.d.ts.map +0 -1
- package/dist/transport/index.js.map +0 -1
- package/dist/transport/transport.d.ts.map +0 -1
- package/dist/transport/transport.js.map +0 -1
- package/dist/transport/websocket/connection.d.ts.map +0 -1
- package/dist/transport/websocket/connection.js.map +0 -1
- package/dist/transport/websocket/exchange.d.ts.map +0 -1
- package/dist/transport/websocket/exchange.js.map +0 -1
- package/dist/transport/websocket/index.d.ts.map +0 -1
- package/dist/transport/websocket/index.js.map +0 -1
- package/dist/transport/websocket/transport.d.ts.map +0 -1
- package/dist/transport/websocket/transport.js.map +0 -1
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { ClientError } from '../../errors/index.js';
|
|
2
2
|
import { allowEndpoint } from '../context/index.js';
|
|
3
3
|
export function selectEnvelope(endpoints, preference, websocketAvailable, pool, policy) {
|
|
4
|
+
const destination = selectEnvelopeTarget(endpoints, preference, websocketAvailable, policy);
|
|
5
|
+
const client = pool.clientFor(destination);
|
|
6
|
+
if (client === null ||
|
|
7
|
+
typeof client !== 'object' ||
|
|
8
|
+
typeof client.dispatch !== 'function' ||
|
|
9
|
+
typeof client.as !== 'function' ||
|
|
10
|
+
typeof client.close !== 'function') {
|
|
11
|
+
throw new TypeError('Session client pool capability returned an invalid Client.');
|
|
12
|
+
}
|
|
13
|
+
return Object.freeze({ client, destination });
|
|
14
|
+
}
|
|
15
|
+
/** Resolve and admit one route endpoint without acquiring a transport Client. */
|
|
16
|
+
export function selectEnvelopeTarget(endpoints, preference, websocketAvailable, policy) {
|
|
4
17
|
let destination;
|
|
5
18
|
if (preference === 'websocket') {
|
|
6
19
|
if (endpoints.websocket === undefined) {
|
|
@@ -23,14 +36,5 @@ export function selectEnvelope(endpoints, preference, websocketAvailable, pool,
|
|
|
23
36
|
allowEndpoint(endpoints.http, policy);
|
|
24
37
|
destination = Object.freeze({ transport: 'http', url: endpoints.http });
|
|
25
38
|
}
|
|
26
|
-
|
|
27
|
-
if (client === null ||
|
|
28
|
-
typeof client !== 'object' ||
|
|
29
|
-
typeof client.dispatch !== 'function' ||
|
|
30
|
-
typeof client.as !== 'function' ||
|
|
31
|
-
typeof client.close !== 'function') {
|
|
32
|
-
throw new TypeError('Session client pool capability returned an invalid Client.');
|
|
33
|
-
}
|
|
34
|
-
return Object.freeze({ client, destination });
|
|
39
|
+
return destination;
|
|
35
40
|
}
|
|
36
|
-
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { admitSessionAuth, resolveAuth, type Auth, type EffectiveAuth, type SessionAuth, } from './auth.js';
|
|
2
|
-
export type {
|
|
3
|
-
export { RouteCache, type LearnedRoute } from './cache.js';
|
|
2
|
+
export type { SchemaExpectation } from './expectation.js';
|
|
3
|
+
export { RouteCache, type LearnedRoute, type PersistedRoute, type SessionRouteArtifact, type SessionRouteStore, } from './cache.js';
|
|
4
4
|
export { requireResultKind, SessionDispatcher, type SessionDispatcherOptions } from './dispatch.js';
|
|
5
5
|
export { type ClientPoolCapability, type EnvelopeSelection } from './envelope.js';
|
|
6
6
|
export { admitEnvelopeTransport, admitRequestOptions, type SessionEnvelopeTransport, type SessionRequestOptions, } from './request.js';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { admitSessionAuth, resolveAuth, } from './auth.js';
|
|
2
|
-
export { RouteCache } from './cache.js';
|
|
2
|
+
export { RouteCache, } from './cache.js';
|
|
3
3
|
export { requireResultKind, SessionDispatcher } from './dispatch.js';
|
|
4
4
|
export {} from './envelope.js';
|
|
5
5
|
export { admitEnvelopeTransport, admitRequestOptions, } from './request.js';
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as invocation from '@astrale-os/kernel-protocol/invocation';
|
|
2
2
|
import type { SessionControlOptions } from '../context/index.js';
|
|
3
3
|
export type SessionEnvelopeTransport = 'auto' | 'http' | 'websocket';
|
|
4
4
|
export interface SessionRequestOptions extends SessionControlOptions {
|
|
@@ -6,4 +6,3 @@ export interface SessionRequestOptions extends SessionControlOptions {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function admitRequestOptions(input?: SessionRequestOptions): Readonly<SessionRequestOptions>;
|
|
8
8
|
export declare function admitEnvelopeTransport(input: SessionEnvelopeTransport): SessionEnvelopeTransport;
|
|
9
|
-
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as invocationProtocol from '@astrale-os/kernel-protocol/invocation';
|
|
2
2
|
import { admitControlOptions } from '../context/index.js';
|
|
3
3
|
export function admitRequestOptions(input = {}) {
|
|
4
4
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) {
|
|
@@ -23,4 +23,3 @@ export function admitEnvelopeTransport(input) {
|
|
|
23
23
|
}
|
|
24
24
|
return input;
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=request.js.map
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import type { IssuerId } from '@astrale-os/kernel-core/auth';
|
|
1
|
+
import type { IssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
2
2
|
import type { PathLike } from '@astrale-os/kernel-core/path';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1/domain';
|
|
4
4
|
import type { Call, Input, Result } from '../client/index.js';
|
|
5
|
+
import type { DomainBinding, GraphApi } from '../graph/index.js';
|
|
5
6
|
import type { ClientFactory, ClientPool as ClientPoolType } from '../pool/index.js';
|
|
6
|
-
import type {
|
|
7
|
+
import type { SchemaApi } from '../schema/index.js';
|
|
7
8
|
import type { ClientWarning } from '../transport/auto/index.js';
|
|
8
9
|
import type { Fetch } from '../transport/http/index.js';
|
|
9
10
|
import type { WebSocketConstructor } from '../transport/websocket/index.js';
|
|
10
11
|
import type { SessionControlOptions, SessionPolicy } from './context/index.js';
|
|
11
12
|
import type { SessionSnapshot } from './discovery/index.js';
|
|
12
|
-
import type {
|
|
13
|
+
import type { CallableReference, InputOfReference, OutputOfReference } from './reference.js';
|
|
14
|
+
import type { SessionRouteStore, SessionAuth, SessionEnvelopeTransport, SessionRequestOptions } from './routing/index.js';
|
|
13
15
|
import type { ViewCatalog } from './views/index.js';
|
|
14
16
|
export interface ClientSessionOptions {
|
|
15
17
|
/** Exact canonical source Kernel identity; its invocation and discovery endpoints are derived. */
|
|
@@ -19,6 +21,8 @@ export interface ClientSessionOptions {
|
|
|
19
21
|
readonly pool?: Pick<ClientPoolType, 'clientFor'>;
|
|
20
22
|
readonly websocket?: WebSocketConstructor;
|
|
21
23
|
readonly auth?: SessionAuth;
|
|
24
|
+
/** Optional caller-owned persistence for bounded confidential route artifacts. */
|
|
25
|
+
readonly routeStore?: SessionRouteStore;
|
|
22
26
|
readonly policy: SessionPolicy;
|
|
23
27
|
readonly envelopeTransport?: SessionEnvelopeTransport;
|
|
24
28
|
readonly onWarning?: (warning: ClientWarning) => void;
|
|
@@ -27,15 +31,15 @@ export interface ClientSessionOptions {
|
|
|
27
31
|
readonly maximumResponseBytes?: number;
|
|
28
32
|
readonly timeoutMs?: number;
|
|
29
33
|
}
|
|
30
|
-
export type ConnectOptions = Omit<ClientSessionOptions, 'policy'> & {
|
|
34
|
+
export type ConnectOptions = Omit<ClientSessionOptions, 'kernel' | 'policy'> & {
|
|
35
|
+
readonly url: string;
|
|
31
36
|
readonly policy?: SessionPolicy;
|
|
32
37
|
};
|
|
33
|
-
/** Package-private exact-Publication dispatch used by Domain bindings. */
|
|
34
|
-
export declare function dispatchBound(session: ClientSession, call: Call, expected: BoundTarget, options?: SessionRequestOptions): Promise<Result>;
|
|
35
38
|
/** Caller-owned discovery and redirect-following conversation with one exact source Kernel. */
|
|
36
39
|
export declare class ClientSession {
|
|
37
40
|
readonly kernel: IssuerId;
|
|
38
41
|
readonly schema: SchemaApi;
|
|
42
|
+
readonly graph: GraphApi;
|
|
39
43
|
private readonly ownedPool?;
|
|
40
44
|
private readonly discovery;
|
|
41
45
|
private readonly dispatcher;
|
|
@@ -45,17 +49,19 @@ export declare class ClientSession {
|
|
|
45
49
|
private readonly admitTargetViews;
|
|
46
50
|
private closed;
|
|
47
51
|
constructor(options: ClientSessionOptions);
|
|
52
|
+
/** Bind one admitted DSL Domain to authenticated graph projection and Method dispatch. */
|
|
53
|
+
bind<const DomainValue extends Domain>(domain: DomainValue): DomainBinding<DomainValue>;
|
|
48
54
|
snapshot(options?: SessionControlOptions): Promise<SessionSnapshot>;
|
|
49
55
|
viewsFor(target: PathLike, options?: SessionControlOptions): Promise<ViewCatalog>;
|
|
50
|
-
installed(origin: Key.Origin, options?: SessionControlOptions): Promise<ReadyInstallation>;
|
|
51
56
|
dispatch(call: Call, options?: SessionRequestOptions): Promise<Result>;
|
|
52
57
|
call(call: Call, options?: SessionRequestOptions): Promise<Input>;
|
|
58
|
+
invoke<const Reference extends CallableReference>(reference: Reference, input: InputOfReference<Reference>, options?: SessionRequestOptions): Promise<OutputOfReference<Reference>>;
|
|
53
59
|
stream(call: Call, options?: SessionRequestOptions): Promise<import("../client/result.js").Stream>;
|
|
54
|
-
binary(call: Call, options?: SessionRequestOptions): Promise<import("@astrale-os/kernel-core/
|
|
60
|
+
binary(call: Call, options?: SessionRequestOptions): Promise<import("@astrale-os/kernel-core/callable").BinaryOutput>;
|
|
55
61
|
close(): void;
|
|
56
62
|
private requireOpen;
|
|
63
|
+
private invokeDomainMethod;
|
|
57
64
|
private operation;
|
|
58
65
|
}
|
|
59
66
|
/** Open one caller-owned conversation with a Kernel using secure defaults. */
|
|
60
67
|
export declare function connect(options: ConnectOptions): ClientSession;
|
|
61
|
-
//# sourceMappingURL=session.d.ts.map
|
package/dist/session/session.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { Path } from '@astrale-os/kernel-core/path';
|
|
1
2
|
import { Client } from '../client/index.js';
|
|
2
|
-
import {
|
|
3
|
+
import { SessionError } from '../errors/index.js';
|
|
4
|
+
import { createDomainBinding } from '../graph/domain/binding.js';
|
|
5
|
+
import { createGraph } from '../graph/index.js';
|
|
3
6
|
import { ClientPool } from '../pool/index.js';
|
|
4
7
|
import { createSchema } from '../schema/index.js';
|
|
5
8
|
import { AutoTransport } from '../transport/auto/index.js';
|
|
@@ -7,21 +10,15 @@ import { HttpTransport } from '../transport/http/index.js';
|
|
|
7
10
|
import { WebSocketTransport } from '../transport/websocket/index.js';
|
|
8
11
|
import { admitControlOptions, admitPolicy, createSessionOperation, DEFAULT_MAXIMUM_BUNDLE_BYTES, DEFAULT_MAXIMUM_PUBLICATION_BYTES, DEFAULT_MAXIMUM_RESPONSE_BYTES, DEFAULT_TIMEOUT_MS, admitKernel, kernelInvocationEndpoint, platformDuration, positive, } from './context/index.js';
|
|
9
12
|
import { createSessionDiscovery } from './discovery/index.js';
|
|
13
|
+
import { admitReference } from './reference.js';
|
|
10
14
|
import { admitEnvelopeTransport, admitRequestOptions, admitSessionAuth, requireResultKind, RouteCache, SessionDispatcher, } from './routing/index.js';
|
|
11
15
|
import { resolveViewsFor, targetViewCatalog } from './views/index.js';
|
|
12
16
|
const DEFAULT_SESSION_POLICY = Object.freeze({ maximumRouteAgeMs: 60_000 });
|
|
13
|
-
const boundDispatch = new WeakMap();
|
|
14
|
-
/** Package-private exact-Publication dispatch used by Domain bindings. */
|
|
15
|
-
export function dispatchBound(session, call, expected, options) {
|
|
16
|
-
const dispatch = boundDispatch.get(session);
|
|
17
|
-
if (dispatch === undefined)
|
|
18
|
-
throw new TypeError('Bound dispatch requires an owned ClientSession.');
|
|
19
|
-
return dispatch(call, expected, options);
|
|
20
|
-
}
|
|
21
17
|
/** Caller-owned discovery and redirect-following conversation with one exact source Kernel. */
|
|
22
18
|
export class ClientSession {
|
|
23
19
|
kernel;
|
|
24
20
|
schema;
|
|
21
|
+
graph;
|
|
25
22
|
ownedPool;
|
|
26
23
|
discovery;
|
|
27
24
|
dispatcher;
|
|
@@ -80,7 +77,7 @@ export class ClientSession {
|
|
|
80
77
|
requireOpen: () => this.requireOpen(),
|
|
81
78
|
acquisitionOperation: () => this.operation(undefined),
|
|
82
79
|
});
|
|
83
|
-
this.routes = new RouteCache(policy.maximumRouteAgeMs);
|
|
80
|
+
this.routes = new RouteCache(policy.maximumRouteAgeMs, undefined, options.routeStore);
|
|
84
81
|
this.dispatcher = new SessionDispatcher({
|
|
85
82
|
kernel: this.kernel,
|
|
86
83
|
sourceEndpoint,
|
|
@@ -90,17 +87,17 @@ export class ClientSession {
|
|
|
90
87
|
cache: this.routes,
|
|
91
88
|
policy,
|
|
92
89
|
envelopeTransport: admitEnvelopeTransport(options.envelopeTransport ?? 'http'),
|
|
93
|
-
discovery: this.discovery,
|
|
94
90
|
requireOpen: () => this.requireOpen(),
|
|
95
91
|
});
|
|
96
92
|
this.schema = createSchema((request, options) => this.dispatch(request, options), {
|
|
97
93
|
maximumPublicationBytes,
|
|
98
94
|
maximumBundleBytes,
|
|
99
95
|
});
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
this.graph = createGraph((call, options) => this.call(call, options));
|
|
97
|
+
}
|
|
98
|
+
/** Bind one admitted DSL Domain to authenticated graph projection and Method dispatch. */
|
|
99
|
+
bind(domain) {
|
|
100
|
+
return createDomainBinding(domain, this.graph, (node, method, input) => this.invokeDomainMethod(domain, node, method, input));
|
|
104
101
|
}
|
|
105
102
|
snapshot(options) {
|
|
106
103
|
return this.discovery.snapshot(this.operation(admitControlOptions(options)));
|
|
@@ -109,23 +106,6 @@ export class ClientSession {
|
|
|
109
106
|
this.requireOpen();
|
|
110
107
|
return resolveViewsFor(async (call, operation) => requireResultKind('value', await this.dispatcher.dispatch(call, {}, operation)).value, this.admitTargetViews, target, this.operation(admitControlOptions(options)));
|
|
111
108
|
}
|
|
112
|
-
async installed(origin, options) {
|
|
113
|
-
const result = await this.schema.introspect({
|
|
114
|
-
from: { kind: 'installation', origin },
|
|
115
|
-
select: {
|
|
116
|
-
state: true,
|
|
117
|
-
target: true,
|
|
118
|
-
source: true,
|
|
119
|
-
bundle: true,
|
|
120
|
-
readiness: true,
|
|
121
|
-
capabilities: true,
|
|
122
|
-
},
|
|
123
|
-
}, options);
|
|
124
|
-
if (result?.state !== 'ready' || result.readiness === null) {
|
|
125
|
-
throw new ClientError(`Domain ${origin} is not ready on this Kernel.`);
|
|
126
|
-
}
|
|
127
|
-
return result;
|
|
128
|
-
}
|
|
129
109
|
dispatch(call, options) {
|
|
130
110
|
const admitted = admitRequestOptions(options);
|
|
131
111
|
return this.dispatcher.dispatch(call, admitted, this.operation(admitted));
|
|
@@ -134,6 +114,21 @@ export class ClientSession {
|
|
|
134
114
|
const result = await this.dispatch(call, options);
|
|
135
115
|
return requireResultKind('value', result).value;
|
|
136
116
|
}
|
|
117
|
+
async invoke(reference, input, options) {
|
|
118
|
+
const admittedReference = admitReference(reference);
|
|
119
|
+
const admittedOptions = admitRequestOptions(options);
|
|
120
|
+
const expected = Object.freeze({
|
|
121
|
+
origin: admittedReference.origin,
|
|
122
|
+
revision: admittedReference.revision,
|
|
123
|
+
});
|
|
124
|
+
const result = await this.dispatcher.dispatch({ target: admittedReference.target, input }, admittedOptions, this.operation(admittedOptions), expected);
|
|
125
|
+
const narrowed = requireResultKind(admittedReference.outputMode, result);
|
|
126
|
+
return (narrowed.kind === 'value'
|
|
127
|
+
? narrowed.value
|
|
128
|
+
: narrowed.kind === 'stream'
|
|
129
|
+
? narrowed.stream
|
|
130
|
+
: narrowed.value);
|
|
131
|
+
}
|
|
137
132
|
async stream(call, options) {
|
|
138
133
|
const result = await this.dispatch(call, options);
|
|
139
134
|
return requireResultKind('stream', result).stream;
|
|
@@ -146,14 +141,29 @@ export class ClientSession {
|
|
|
146
141
|
if (this.closed)
|
|
147
142
|
return;
|
|
148
143
|
this.closed = true;
|
|
149
|
-
this.lifecycle.abort(new
|
|
144
|
+
this.lifecycle.abort(new SessionError('ClientSession is closed.', { failure: 'closed' }));
|
|
150
145
|
this.ownedPool?.close();
|
|
151
146
|
this.routes.clear();
|
|
152
147
|
this.discovery.clear();
|
|
153
148
|
}
|
|
154
149
|
requireOpen() {
|
|
155
150
|
if (this.closed)
|
|
156
|
-
throw new
|
|
151
|
+
throw new SessionError('ClientSession is closed.', { failure: 'closed' });
|
|
152
|
+
}
|
|
153
|
+
invokeDomainMethod(domain, node, method, input) {
|
|
154
|
+
const diagnostics = method.validateInput(input);
|
|
155
|
+
if (diagnostics.length > 0)
|
|
156
|
+
throw new TypeError(`Method ${method.key} input is invalid.`);
|
|
157
|
+
const owner = domain.closure.find(({ origin }) => origin === method.owner.ref.origin);
|
|
158
|
+
if (owner === undefined)
|
|
159
|
+
throw new TypeError(`Method owner ${method.owner.ref.origin} is absent.`);
|
|
160
|
+
return this.invoke({
|
|
161
|
+
origin: owner.origin,
|
|
162
|
+
revision: owner.revision,
|
|
163
|
+
callable: method.key,
|
|
164
|
+
target: Path.instanceMethod(Path.id(node.id), method.name),
|
|
165
|
+
outputMode: method.output.mode,
|
|
166
|
+
}, input);
|
|
157
167
|
}
|
|
158
168
|
operation(options) {
|
|
159
169
|
this.requireOpen();
|
|
@@ -162,8 +172,13 @@ export class ClientSession {
|
|
|
162
172
|
}
|
|
163
173
|
/** Open one caller-owned conversation with a Kernel using secure defaults. */
|
|
164
174
|
export function connect(options) {
|
|
175
|
+
if (options === null || typeof options !== 'object') {
|
|
176
|
+
throw new TypeError('Connect options are invalid.');
|
|
177
|
+
}
|
|
178
|
+
const { url, ...rest } = options;
|
|
165
179
|
return new ClientSession({
|
|
166
|
-
...
|
|
180
|
+
...rest,
|
|
181
|
+
kernel: url,
|
|
167
182
|
policy: options.policy ?? DEFAULT_SESSION_POLICY,
|
|
168
183
|
});
|
|
169
184
|
}
|
|
@@ -222,4 +237,3 @@ function defaultClientFactory(options) {
|
|
|
222
237
|
}
|
|
223
238
|
};
|
|
224
239
|
}
|
|
225
|
-
//# sourceMappingURL=session.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NodeId } from '@astrale-os/kernel-core/graph/node';
|
|
2
|
+
import { Path } from '@astrale-os/kernel-core/path';
|
|
3
|
+
import { defineSchema, method, nodeClass, schema } from '@astrale-os/kernel-dsl/v1';
|
|
4
|
+
import { ClientSession, reference } from './index.js';
|
|
2
5
|
void new ClientSession(options);
|
|
3
6
|
void auth;
|
|
4
7
|
void control;
|
|
@@ -6,5 +9,23 @@ void envelope;
|
|
|
6
9
|
void policy;
|
|
7
10
|
void request;
|
|
8
11
|
void snapshot;
|
|
12
|
+
const dynamicReference = reference(dynamicDomain, dynamicMethod)(Path.id(NodeId('dynamic-node')));
|
|
13
|
+
void session.invoke(dynamicReference, dynamicInput);
|
|
14
|
+
const dynamicInputIsClientInput = true;
|
|
15
|
+
const dynamicOutputIsUnknown = true;
|
|
16
|
+
void dynamicInputIsClientInput;
|
|
17
|
+
void dynamicOutputIsUnknown;
|
|
18
|
+
const abstractMethod = method({
|
|
19
|
+
auth: 'authenticated',
|
|
20
|
+
input: { type: 'null' },
|
|
21
|
+
output: { type: 'null' },
|
|
22
|
+
inheritance: 'abstract',
|
|
23
|
+
});
|
|
24
|
+
const abstractDomain = schema.resolve(defineSchema('client.reference.typecheck', {
|
|
25
|
+
classes: {
|
|
26
|
+
AbstractItem: nodeClass({ abstract: true, methods: { abstractMethod } }),
|
|
27
|
+
},
|
|
28
|
+
}));
|
|
29
|
+
// @ts-expect-error Abstract Methods are declarations and cannot become Client references.
|
|
30
|
+
reference(abstractDomain, abstractDomain.classes.AbstractItem.methods.abstractMethod);
|
|
9
31
|
void {};
|
|
10
|
-
//# sourceMappingURL=session.typecheck.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Key, bundle } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
import type { publication } from '@astrale-os/kernel-protocol';
|
|
3
|
-
import {
|
|
3
|
+
import { type ResolvedView } from '@astrale-os/kernel-core/schema/kernel/syscalls/view-resolution';
|
|
4
|
+
export type { ResolvedView } from '@astrale-os/kernel-core/schema/kernel/syscalls/view-resolution';
|
|
4
5
|
import type { SessionPolicy } from '../context/index.js';
|
|
5
6
|
/** One verified View declaration joined with its owning Publication and provenance. */
|
|
6
|
-
export type ResolvedView = syscalls.view.ResolvedView;
|
|
7
7
|
/** Immutable canonical-key-ordered inventory of Views resolved under one Session revision. */
|
|
8
8
|
export interface ViewCatalog {
|
|
9
9
|
readonly entrypoint?: ResolvedView;
|
|
@@ -13,4 +13,3 @@ export declare function rootViewCatalog(publication: publication.Publication, ar
|
|
|
13
13
|
export declare function catalogFromKeys(root: ViewCatalog, keys: readonly Key.View[]): ViewCatalog;
|
|
14
14
|
/** Re-admit one Runtime-resolved heterogeneous View catalog at the Client trust boundary. */
|
|
15
15
|
export declare function targetViewCatalog(input: unknown, policy: Readonly<SessionPolicy>): ViewCatalog;
|
|
16
|
-
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Key as ViewKey
|
|
1
|
+
import { acceptViewResolution, } from '@astrale-os/kernel-core/schema/kernel/syscalls/view-resolution';
|
|
2
|
+
import { Key as ViewKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import { ClientError } from '../../errors/index.js';
|
|
4
4
|
import { allowEndpoint } from '../context/index.js';
|
|
5
5
|
export function rootViewCatalog(publication, artifact, policy) {
|
|
6
6
|
const views = publication.bindings.views
|
|
7
7
|
.map((binding) => {
|
|
8
8
|
allowEndpoint(binding.href, policy);
|
|
9
|
-
const declaration = artifact.root.views[
|
|
9
|
+
const declaration = artifact.root.views[viewName(binding.view)];
|
|
10
10
|
if (declaration === undefined) {
|
|
11
11
|
throw new ClientError('Published View has no verified root declaration.');
|
|
12
12
|
}
|
|
13
|
+
const { ref: _ref, ...viewDeclaration } = declaration;
|
|
13
14
|
return Object.freeze({
|
|
14
15
|
key: binding.view,
|
|
15
|
-
declaration,
|
|
16
|
+
declaration: Object.freeze(viewDeclaration),
|
|
16
17
|
href: binding.href,
|
|
17
18
|
handshake: binding.handshake,
|
|
19
|
+
...(binding.iframe === undefined ? {} : { iframe: binding.iframe }),
|
|
18
20
|
issuer: publication.identity.issuer,
|
|
19
21
|
etag: publication.etag,
|
|
20
22
|
revision: publication.schema.revision,
|
|
@@ -25,7 +27,7 @@ export function rootViewCatalog(publication, artifact, policy) {
|
|
|
25
27
|
const entrypointRef = publication.manifest?.entrypoint;
|
|
26
28
|
const entrypoint = entrypointRef === undefined
|
|
27
29
|
? undefined
|
|
28
|
-
: catalogViews.find(({ key }) => key === ViewKey.of(
|
|
30
|
+
: catalogViews.find(({ key }) => key === ViewKey.of(entrypointRef));
|
|
29
31
|
if (entrypointRef !== undefined && entrypoint === undefined) {
|
|
30
32
|
throw new ClientError('Published View entrypoint has no verified Publication binding.');
|
|
31
33
|
}
|
|
@@ -48,7 +50,7 @@ export function catalogFromKeys(root, keys) {
|
|
|
48
50
|
export function targetViewCatalog(input, policy) {
|
|
49
51
|
let resolution;
|
|
50
52
|
try {
|
|
51
|
-
resolution =
|
|
53
|
+
resolution = acceptViewResolution(input);
|
|
52
54
|
}
|
|
53
55
|
catch (cause) {
|
|
54
56
|
throw new ClientError('Resolved View catalog is invalid.', { cause });
|
|
@@ -60,4 +62,10 @@ export function targetViewCatalog(input, policy) {
|
|
|
60
62
|
function compareKeys(left, right) {
|
|
61
63
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
62
64
|
}
|
|
63
|
-
|
|
65
|
+
function viewName(input) {
|
|
66
|
+
const coordinate = input.slice(input.indexOf(':') + 1);
|
|
67
|
+
const match = /^view\.([A-Za-z][A-Za-z0-9_]*)$/u.exec(coordinate);
|
|
68
|
+
if (match === null)
|
|
69
|
+
throw new ClientError('Published View key is invalid.');
|
|
70
|
+
return match[1];
|
|
71
|
+
}
|
|
@@ -9,4 +9,3 @@ export type ViewCatalogAdmission = (input: unknown) => ViewCatalog;
|
|
|
9
9
|
* its heterogeneous installed-Publication projection.
|
|
10
10
|
*/
|
|
11
11
|
export declare function resolveViewsFor(invoke: ViewInvoker, admitCatalog: ViewCatalogAdmission, target: PathLike, operation: SessionOperation): Promise<ViewCatalog>;
|
|
12
|
-
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Path } from '@astrale-os/kernel-core/path';
|
|
2
|
-
import {
|
|
2
|
+
import { view } from '@astrale-os/kernel-core/schema/kernel/syscalls/references';
|
|
3
3
|
import { call } from '../../client/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Invoke Runtime-owned target View resolution through the canonical source Kernel call, then admit
|
|
@@ -7,6 +7,7 @@ import { call } from '../../client/index.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export async function resolveViewsFor(invoke, admitCatalog, target, operation) {
|
|
9
9
|
const path = Path.from(target).raw;
|
|
10
|
-
|
|
10
|
+
const owner = Path.project(view.resolve.owner);
|
|
11
|
+
const targetView = Path.staticMethod(owner, view.resolve.name);
|
|
12
|
+
return admitCatalog(await invoke(call(targetView, { target: path }), operation));
|
|
11
13
|
}
|
|
12
|
-
//# sourceMappingURL=resolve.js.map
|
package/dist/store/index.d.ts
CHANGED
package/dist/store/index.js
CHANGED
package/dist/store/memory.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { QueryAST } from '@astrale-os/kernel-core/graph/query';
|
|
2
|
+
import type { DomainDependency } from '@astrale-os/kernel-dsl/v1/schema';
|
|
2
3
|
import type { QueryPageRequest } from '../graph/index.js';
|
|
3
4
|
import type { GraphApi } from '../graph/index.js';
|
|
4
5
|
import type { StoreQueryResponse, StoreReadOptions, StoreSnapshot } from './store.js';
|
|
@@ -24,7 +25,7 @@ export declare class GraphMemory {
|
|
|
24
25
|
private readonly pending;
|
|
25
26
|
private active;
|
|
26
27
|
constructor(options: GraphMemoryOptions);
|
|
27
|
-
ensure(key: string, ast: QueryAST, page: QueryPageRequest): QueryShape;
|
|
28
|
+
ensure(key: string, ast: QueryAST, page: QueryPageRequest, expected: readonly DomainDependency[] | undefined): QueryShape;
|
|
28
29
|
get(key: string): QueryShape | undefined;
|
|
29
30
|
read(shape: QueryShape, options: StoreReadOptions): Promise<StoreQueryResponse>;
|
|
30
31
|
snapshot(shape: QueryShape | undefined): StoreSnapshot;
|
|
@@ -46,4 +47,3 @@ export declare class GraphMemory {
|
|
|
46
47
|
private drain;
|
|
47
48
|
private report;
|
|
48
49
|
}
|
|
49
|
-
//# sourceMappingURL=memory.d.ts.map
|
package/dist/store/memory.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { encodeEdgeKey } from '@astrale-os/kernel-core/graph/edge';
|
|
2
2
|
import { ClientError } from '../errors/index.js';
|
|
3
|
+
import { retainDerivedQueryProvenance } from '../graph/provenance.js';
|
|
3
4
|
import { edgeIdentity, EntityIndex } from './entity-index.js';
|
|
4
5
|
import { OptimisticOverlay } from './optimistic.js';
|
|
5
6
|
import { COLD_SNAPSHOT, QueryShape } from './shape.js';
|
|
@@ -13,7 +14,7 @@ export class GraphMemory {
|
|
|
13
14
|
constructor(options) {
|
|
14
15
|
this.options = options;
|
|
15
16
|
}
|
|
16
|
-
ensure(key, ast, page) {
|
|
17
|
+
ensure(key, ast, page, expected) {
|
|
17
18
|
const existing = this.shapes.get(key);
|
|
18
19
|
const now = this.options.now();
|
|
19
20
|
if (existing !== undefined) {
|
|
@@ -26,7 +27,7 @@ export class GraphMemory {
|
|
|
26
27
|
if (this.shapes.size >= this.options.maximumShapes) {
|
|
27
28
|
throw new ClientError('GraphStore shape capacity is exhausted by observed or in-flight queries.');
|
|
28
29
|
}
|
|
29
|
-
const shape = new QueryShape(key, ast, page, now);
|
|
30
|
+
const shape = new QueryShape(key, ast, page, expected, now);
|
|
30
31
|
shape.releasedAt = now;
|
|
31
32
|
this.shapes.set(key, shape);
|
|
32
33
|
return shape;
|
|
@@ -52,7 +53,7 @@ export class GraphMemory {
|
|
|
52
53
|
const prior = shape.response;
|
|
53
54
|
this.publish(shape, prior === undefined ? 'loading' : this.overlay.hasAny() ? 'optimistic' : 'refreshing');
|
|
54
55
|
const inflight = this.schedule(async () => {
|
|
55
|
-
const result = await this.options.graph.query(shape.ast, queryOptions(shape.page, this.options.lifecycle));
|
|
56
|
+
const result = await this.options.graph.query(shape.ast, queryOptions(shape.page, this.options.lifecycle, shape.expected));
|
|
56
57
|
this.options.requireOpen();
|
|
57
58
|
const integration = this.entities.integrate(result.result);
|
|
58
59
|
shape.references = integration.references;
|
|
@@ -182,10 +183,11 @@ export class GraphMemory {
|
|
|
182
183
|
this.pending.shift()?.reject(error);
|
|
183
184
|
}
|
|
184
185
|
materialize(template, references) {
|
|
185
|
-
|
|
186
|
+
const response = Object.freeze({
|
|
186
187
|
result: this.materializeResult(template.result, references),
|
|
187
188
|
page: template.page,
|
|
188
189
|
});
|
|
190
|
+
return retainDerivedQueryProvenance(template, response);
|
|
189
191
|
}
|
|
190
192
|
materializeResult(template, references) {
|
|
191
193
|
if (template.kind === 'nodes') {
|
|
@@ -196,8 +198,9 @@ export class GraphMemory {
|
|
|
196
198
|
continue;
|
|
197
199
|
}
|
|
198
200
|
const node = this.overlay.node(projection.value.id, this.entities);
|
|
199
|
-
if (node !== undefined)
|
|
200
|
-
nodes.push(Object.freeze({ kind: 'value', value: node }));
|
|
201
|
+
if (node !== undefined) {
|
|
202
|
+
nodes.push(Object.freeze({ kind: 'value', value: materializeNode(node) }));
|
|
203
|
+
}
|
|
201
204
|
}
|
|
202
205
|
return Object.freeze({
|
|
203
206
|
kind: 'nodes',
|
|
@@ -213,7 +216,7 @@ export class GraphMemory {
|
|
|
213
216
|
const value = this.entities.edge(edgeIdentity(item.edge.value));
|
|
214
217
|
return value === undefined
|
|
215
218
|
? undefined
|
|
216
|
-
: Object.freeze({ kind: 'value', value });
|
|
219
|
+
: Object.freeze({ kind: 'value', value: materializeEdge(value) });
|
|
217
220
|
})();
|
|
218
221
|
const source = item.source.kind === 'reference'
|
|
219
222
|
? item.source
|
|
@@ -221,7 +224,7 @@ export class GraphMemory {
|
|
|
221
224
|
const value = this.overlay.node(item.source.value.id, this.entities);
|
|
222
225
|
return value === undefined
|
|
223
226
|
? undefined
|
|
224
|
-
: Object.freeze({ kind: 'value', value });
|
|
227
|
+
: Object.freeze({ kind: 'value', value: materializeNode(value) });
|
|
225
228
|
})();
|
|
226
229
|
const target = item.target.kind === 'reference'
|
|
227
230
|
? item.target
|
|
@@ -229,7 +232,7 @@ export class GraphMemory {
|
|
|
229
232
|
const value = this.overlay.node(item.target.value.id, this.entities);
|
|
230
233
|
return value === undefined
|
|
231
234
|
? undefined
|
|
232
|
-
: Object.freeze({ kind: 'value', value });
|
|
235
|
+
: Object.freeze({ kind: 'value', value: materializeNode(value) });
|
|
233
236
|
})();
|
|
234
237
|
if (edge !== undefined && source !== undefined && target !== undefined) {
|
|
235
238
|
edges.push(Object.freeze({ edge, source, target }));
|
|
@@ -242,11 +245,13 @@ export class GraphMemory {
|
|
|
242
245
|
}
|
|
243
246
|
const nodes = references.nodes
|
|
244
247
|
.map((id) => this.overlay.node(id, this.entities))
|
|
245
|
-
.filter((node) => node !== undefined)
|
|
248
|
+
.filter((node) => node !== undefined)
|
|
249
|
+
.map(materializeNode);
|
|
246
250
|
const visibleNodeIds = new Set(nodes.map(({ id }) => id));
|
|
247
251
|
const edges = references.edges
|
|
248
252
|
.map((key) => this.entities.edge(key))
|
|
249
|
-
.filter((edge) => edge !== undefined && visibleNodeIds.has(edge.source) && visibleNodeIds.has(edge.target))
|
|
253
|
+
.filter((edge) => edge !== undefined && visibleNodeIds.has(edge.source) && visibleNodeIds.has(edge.target))
|
|
254
|
+
.map(materializeEdge);
|
|
250
255
|
const graph = Object.freeze({ nodes: Object.freeze(nodes), edges: Object.freeze(edges) });
|
|
251
256
|
const selection = materializeSelection(template.selection, visibleNodeIds, edges);
|
|
252
257
|
return selection.kind === 'node'
|
|
@@ -297,6 +302,12 @@ export class GraphMemory {
|
|
|
297
302
|
}
|
|
298
303
|
}
|
|
299
304
|
}
|
|
305
|
+
function materializeNode(value) {
|
|
306
|
+
return Object.freeze({ ...value });
|
|
307
|
+
}
|
|
308
|
+
function materializeEdge(value) {
|
|
309
|
+
return Object.freeze({ ...value });
|
|
310
|
+
}
|
|
300
311
|
function materializeSelection(selection, visibleNodes, visibleEdges) {
|
|
301
312
|
if (selection.kind === 'node') {
|
|
302
313
|
return Object.freeze({
|
|
@@ -310,10 +321,11 @@ function materializeSelection(selection, visibleNodes, visibleEdges) {
|
|
|
310
321
|
keys: Object.freeze(selection.keys.filter((key) => edges.has(encodeEdgeKey(key)))),
|
|
311
322
|
});
|
|
312
323
|
}
|
|
313
|
-
function queryOptions(page, lifecycle) {
|
|
324
|
+
function queryOptions(page, lifecycle, expected) {
|
|
314
325
|
return Object.freeze({
|
|
315
326
|
signal: lifecycle,
|
|
316
327
|
page,
|
|
328
|
+
...(expected === undefined ? {} : { expected }),
|
|
317
329
|
});
|
|
318
330
|
}
|
|
319
331
|
function observeRead(pending, options, lifecycle) {
|
|
@@ -394,4 +406,3 @@ function sameSnapshot(left, right) {
|
|
|
394
406
|
}
|
|
395
407
|
return left.state !== 'failed' || right.state !== 'failed' || left.error === right.error;
|
|
396
408
|
}
|
|
397
|
-
//# sourceMappingURL=memory.js.map
|