@astrale-os/kernel-client 0.6.0-beta.8 → 0.6.0-beta.80
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 +25 -10
- package/dist/auth/auth.js +5 -7
- package/dist/auth/authorization.d.ts +6 -4
- package/dist/auth/authorization.js +25 -6
- package/dist/auth/credential.d.ts +11 -2
- package/dist/auth/credential.js +6 -3
- package/dist/auth/identity.d.ts +6 -9
- package/dist/auth/identity.js +0 -1
- package/dist/auth/index.d.ts +4 -5
- package/dist/auth/index.js +2 -4
- package/dist/auth/register.d.ts +24 -0
- package/dist/auth/register.js +10 -0
- package/dist/client/admission.d.ts +4 -2
- package/dist/client/admission.js +8 -2
- package/dist/client/client.d.ts +4 -3
- package/dist/client/client.js +13 -3
- package/dist/client/credential.d.ts +4 -3
- package/dist/client/credential.js +7 -3
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.js +1 -2
- package/dist/client/request.d.ts +10 -4
- package/dist/client/request.js +33 -6
- 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/exchange-error.d.ts +19 -0
- package/dist/errors/exchange-error.js +9 -0
- package/dist/errors/index.d.ts +8 -7
- package/dist/errors/index.js +8 -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 +0 -1
- package/dist/errors/response-error.js +0 -1
- 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 +147 -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 +124 -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 +1 -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 +10 -2
- 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 +7 -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 +3 -1
- package/dist/graph/query.js +33 -13
- package/dist/graph/read.d.ts +3 -4
- package/dist/graph/read.js +6 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -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 +1 -2
- package/dist/schema/admission.js +0 -1
- 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 +1 -2
- package/dist/schema/introspection.d.ts +1 -2
- package/dist/schema/introspection.js +9 -2
- package/dist/schema/operation.d.ts +0 -1
- package/dist/schema/operation.js +2 -3
- package/dist/schema/schema.d.ts +13 -10
- package/dist/schema/schema.js +83 -11
- package/dist/session/admission.d.ts +6 -0
- package/dist/session/admission.js +59 -0
- package/dist/session/bound.d.ts +48 -0
- package/dist/session/bound.js +110 -0
- package/dist/session/content.d.ts +27 -0
- package/dist/session/content.js +158 -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 +5 -2
- package/dist/session/context/operation.js +19 -17
- package/dist/session/context/policy.d.ts +0 -1
- package/dist/session/context/policy.js +0 -1
- package/dist/session/credential/index.d.ts +1 -0
- package/dist/session/credential/index.js +1 -0
- package/dist/session/credential/limits.d.ts +12 -0
- package/dist/session/credential/limits.js +12 -0
- package/dist/session/credential/provider.d.ts +56 -0
- package/dist/session/credential/provider.js +236 -0
- package/dist/session/discovery/bundle.d.ts +5 -2
- package/dist/session/discovery/bundle.js +34 -15
- package/dist/session/discovery/discovery.d.ts +4 -2
- package/dist/session/discovery/discovery.js +34 -6
- package/dist/session/discovery/index.d.ts +3 -1
- package/dist/session/discovery/index.js +1 -1
- package/dist/session/discovery/publication.d.ts +0 -1
- package/dist/session/discovery/publication.js +4 -4
- package/dist/session/discovery/snapshot.d.ts +0 -1
- 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/exchange/domain.d.ts +27 -0
- package/dist/session/exchange/domain.js +63 -0
- package/dist/session/exchange/exchange.d.ts +54 -0
- package/dist/session/exchange/exchange.js +58 -0
- package/dist/session/exchange/index.d.ts +5 -0
- package/dist/session/exchange/index.js +5 -0
- package/dist/session/exchange/issuer.d.ts +18 -0
- package/dist/session/exchange/issuer.js +149 -0
- package/dist/session/exchange/limits.d.ts +10 -0
- package/dist/session/exchange/limits.js +10 -0
- package/dist/session/exchange/options.d.ts +29 -0
- package/dist/session/exchange/options.js +57 -0
- package/dist/session/exchange/presentation.d.ts +18 -0
- package/dist/session/exchange/presentation.js +73 -0
- package/dist/session/exchange/source.d.ts +32 -0
- package/dist/session/exchange/source.js +78 -0
- package/dist/session/execution.d.ts +65 -0
- package/dist/session/execution.js +34 -0
- package/dist/session/index.d.ts +9 -4
- package/dist/session/index.js +4 -1
- package/dist/session/reference.d.ts +40 -12
- package/dist/session/reference.js +56 -14
- package/dist/session/routing/auth.d.ts +10 -1
- package/dist/session/routing/auth.js +8 -2
- package/dist/session/routing/cache.d.ts +27 -8
- package/dist/session/routing/cache.js +218 -25
- package/dist/session/routing/dispatch.d.ts +15 -8
- package/dist/session/routing/dispatch.js +121 -48
- package/dist/session/routing/envelope.d.ts +2 -1
- package/dist/session/routing/envelope.js +14 -10
- package/dist/session/routing/index.d.ts +3 -5
- package/dist/session/routing/index.js +2 -3
- package/dist/session/routing/request.d.ts +9 -1
- package/dist/session/routing/request.js +17 -1
- package/dist/session/session.d.ts +41 -8
- package/dist/session/session.js +129 -41
- package/dist/session/session.typecheck.d.ts +0 -1
- package/dist/session/session.typecheck.js +172 -3
- package/dist/session/views/catalog.d.ts +0 -1
- package/dist/session/views/catalog.js +14 -5
- 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 +0 -1
- 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 +38 -15
- package/dist/store/mutation.d.ts +1 -2
- package/dist/store/mutation.js +6 -4
- 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 +4 -2
- package/dist/store/shape.js +4 -2
- package/dist/store/store.d.ts +2 -4
- package/dist/store/store.js +6 -5
- package/dist/store/store.typecheck.d.ts +0 -1
- package/dist/store/store.typecheck.js +3 -9
- package/dist/transport/auto/decision.d.ts +0 -1
- package/dist/transport/auto/decision.js +0 -1
- package/dist/transport/auto/fallback.d.ts +2 -2
- package/dist/transport/auto/fallback.js +10 -11
- 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 +5 -3
- 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 +18 -0
- package/dist/transport/http/byte-stream.js +94 -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 +0 -1
- package/dist/transport/http/response.js +0 -1
- package/dist/transport/http/stream.d.ts +0 -1
- package/dist/transport/http/stream.js +7 -7
- package/dist/transport/http/transport.d.ts +3 -1
- package/dist/transport/http/transport.js +87 -30
- 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 +0 -1
- package/dist/transport/websocket/connection.js +16 -26
- package/dist/transport/websocket/exchange.d.ts +0 -1
- package/dist/transport/websocket/exchange.js +5 -9
- 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 +7 -20
- package/package.json +12 -14
- 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 +0 -9
- package/dist/auth/provision.d.ts.map +0 -1
- package/dist/auth/provision.js +0 -11
- 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/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/reference.d.ts.map +0 -1
- package/dist/session/reference.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/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/expectation.d.ts +0 -7
- package/dist/session/routing/expectation.d.ts.map +0 -1
- package/dist/session/routing/expectation.js +0 -2
- package/dist/session/routing/expectation.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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ClientError } from './client-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Why a Domain token exchange failed.
|
|
4
|
+
*
|
|
5
|
+
* - `discovery`: the Domain issuer's configuration could not be read or admitted.
|
|
6
|
+
* - `unsupported`: the Domain issuer advertises no token exchange endpoint.
|
|
7
|
+
* - `unavailable`: a Domain issuer endpoint could not be reached.
|
|
8
|
+
* - `rejected`: the Domain refused the delegation; its public error is the `cause`.
|
|
9
|
+
* - `invalid-response`: the exchange response or its credential failed admission.
|
|
10
|
+
* - `source-exhausted`: the source credential can no longer grant the lifetime the exchange needs.
|
|
11
|
+
*/
|
|
12
|
+
export type ExchangeFailure = 'discovery' | 'unsupported' | 'unavailable' | 'rejected' | 'invalid-response' | 'source-exhausted';
|
|
13
|
+
export interface ExchangeErrorOptions extends ErrorOptions {
|
|
14
|
+
readonly failure: ExchangeFailure;
|
|
15
|
+
}
|
|
16
|
+
export declare class ExchangeError extends ClientError {
|
|
17
|
+
readonly failure: ExchangeFailure;
|
|
18
|
+
constructor(message: string, options: ExchangeErrorOptions);
|
|
19
|
+
}
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
|
|
1
|
+
export * from './client-error.js';
|
|
2
|
+
export * from './exchange-error.js';
|
|
3
|
+
export * from './miss-error.js';
|
|
4
|
+
export * from './protocol-error.js';
|
|
5
|
+
export * from './response-error.js';
|
|
6
|
+
export * from './session-error.js';
|
|
7
|
+
export * from './stale-route-error.js';
|
|
8
|
+
export * from './transport-error.js';
|
package/dist/errors/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
|
|
1
|
+
export * from './client-error.js';
|
|
2
|
+
export * from './exchange-error.js';
|
|
3
|
+
export * from './miss-error.js';
|
|
4
|
+
export * from './protocol-error.js';
|
|
5
|
+
export * from './response-error.js';
|
|
6
|
+
export * from './session-error.js';
|
|
7
|
+
export * from './stale-route-error.js';
|
|
8
|
+
export * from './transport-error.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ClientError } from './client-error.js';
|
|
2
|
+
export type SessionFailure = 'cancelled' | 'closed' | 'timeout';
|
|
3
|
+
export interface SessionErrorOptions extends ErrorOptions {
|
|
4
|
+
readonly failure: SessionFailure;
|
|
5
|
+
}
|
|
6
|
+
export declare class SessionError extends ClientError {
|
|
7
|
+
readonly failure: SessionFailure;
|
|
8
|
+
constructor(message: string, options: SessionErrorOptions);
|
|
9
|
+
}
|
|
@@ -3,16 +3,28 @@ import { ClientError } from './client-error.js';
|
|
|
3
3
|
/** Whether an invocation is proven not to have crossed the transport boundary. */
|
|
4
4
|
export type TransportDelivery = 'not-sent' | 'unknown';
|
|
5
5
|
/** Observable transport phase in which communication stopped. */
|
|
6
|
-
export type TransportPhase = 'connect' | 'send' | 'receive' | 'timeout' | 'closed';
|
|
7
|
-
export
|
|
8
|
-
readonly
|
|
6
|
+
export type TransportPhase = 'connect' | 'send' | 'receive' | 'timeout' | 'closed' | 'unknown';
|
|
7
|
+
export type TransportContext = {
|
|
8
|
+
readonly kind: 'acquisition';
|
|
9
|
+
readonly resource: 'publication' | 'bundle';
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'invocation';
|
|
9
12
|
readonly delivery: TransportDelivery;
|
|
10
13
|
readonly invocation?: protocol.InvocationId;
|
|
14
|
+
};
|
|
15
|
+
export interface AcquisitionTransportErrorOptions extends ErrorOptions {
|
|
16
|
+
readonly phase: TransportPhase;
|
|
17
|
+
readonly resource: 'publication' | 'bundle';
|
|
11
18
|
}
|
|
12
|
-
export
|
|
19
|
+
export interface InvocationTransportErrorOptions extends ErrorOptions {
|
|
13
20
|
readonly phase: TransportPhase;
|
|
14
21
|
readonly delivery: TransportDelivery;
|
|
15
22
|
readonly invocation?: protocol.InvocationId;
|
|
16
|
-
constructor(message: string, options: TransportErrorOptions);
|
|
17
23
|
}
|
|
18
|
-
|
|
24
|
+
export declare class TransportError extends ClientError {
|
|
25
|
+
readonly phase: TransportPhase;
|
|
26
|
+
readonly context: TransportContext;
|
|
27
|
+
private constructor();
|
|
28
|
+
static acquisition(message: string, options: AcquisitionTransportErrorOptions): TransportError;
|
|
29
|
+
static invocation(message: string, options: InvocationTransportErrorOptions): TransportError;
|
|
30
|
+
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { ClientError } from './client-error.js';
|
|
2
2
|
export class TransportError extends ClientError {
|
|
3
3
|
phase;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(message, options) {
|
|
4
|
+
context;
|
|
5
|
+
constructor(message, phase, context, options) {
|
|
7
6
|
super(message, options);
|
|
7
|
+
this.phase = phase;
|
|
8
|
+
this.context = context;
|
|
8
9
|
this.name = 'TransportError';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
Object.freeze(context);
|
|
11
|
+
}
|
|
12
|
+
static acquisition(message, options) {
|
|
13
|
+
return new TransportError(message, options.phase, { kind: 'acquisition', resource: options.resource }, options);
|
|
14
|
+
}
|
|
15
|
+
static invocation(message, options) {
|
|
16
|
+
return new TransportError(message, options.phase, { kind: 'invocation', delivery: options.delivery, invocation: options.invocation }, options);
|
|
12
17
|
}
|
|
13
18
|
}
|
|
14
|
-
//# sourceMappingURL=transport-error.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Edge } from '@astrale-os/kernel-core/graph/edge';
|
|
2
|
+
import type { Node } from '@astrale-os/kernel-core/graph/node';
|
|
3
|
+
import type { QueryAST, QuerySingleSourceClassOf } from '@astrale-os/kernel-core/graph/query';
|
|
4
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1/domain';
|
|
5
|
+
import type { AnyResolvedClass, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
|
|
6
|
+
import type { GraphApi, GraphQueryOptions } from '../graph.js';
|
|
7
|
+
import type { BoundEdge, BoundNode } from './model.js';
|
|
8
|
+
import type { BoundQueryPage } from './page.js';
|
|
9
|
+
import type { MethodCall } from './project.js';
|
|
10
|
+
export type DomainQueryOptions = Omit<GraphQueryOptions, 'expected'>;
|
|
11
|
+
type AdmittedSourceClasses<Query extends QueryAST> = [QuerySingleSourceClassOf<Query>] extends [
|
|
12
|
+
never
|
|
13
|
+
] ? never : QuerySingleSourceClassOf<Query> extends AnyResolvedClass ? unknown : never;
|
|
14
|
+
export interface DomainBinding<DomainValue extends Domain = Domain> {
|
|
15
|
+
readonly domain: DomainValue;
|
|
16
|
+
readonly graph: GraphApi;
|
|
17
|
+
query<Query extends QueryAST>(query: Query & AdmittedSourceClasses<Query>, options: DomainQueryOptions): Promise<BoundQueryPage<Query>>;
|
|
18
|
+
wrapNode<Class extends ResolvedClass<'node'>>(selected: Class, node: Node): BoundNode<Class>;
|
|
19
|
+
wrapEdge<Class extends ResolvedClass<'edge'>>(selected: Class, edge: Edge): BoundEdge<Class>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createDomainBinding<DomainValue extends Domain>(domain: DomainValue, graph: GraphApi, call: MethodCall): DomainBinding<DomainValue>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { ClassKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import { isDomain } from '@astrale-os/kernel-dsl/v1/domain';
|
|
3
|
+
import { provenanceOfGraphValue, provenanceOfResponse } from '../provenance.js';
|
|
4
|
+
import { selectedEdges, selectedNodes } from './page.js';
|
|
5
|
+
import { projectEdge, projectNode } from './project.js';
|
|
6
|
+
import { provenanceOfProjectedValue, sameClosure } from './provenance.js';
|
|
7
|
+
export function createDomainBinding(domain, graph, call) {
|
|
8
|
+
if (!isDomain(domain))
|
|
9
|
+
throw new TypeError('Domain binding requires an admitted DSL Domain.');
|
|
10
|
+
const wrapNode = (selected, node) => {
|
|
11
|
+
requireOwnedClass(domain, selected);
|
|
12
|
+
const provenance = requireProvenance(domain, node);
|
|
13
|
+
const exact = requireExactClass(domain, node.class, 'node');
|
|
14
|
+
if (!exact.satisfies(selected))
|
|
15
|
+
throw new TypeError(`${exact.key} does not satisfy ${selected.key}.`);
|
|
16
|
+
const diagnostics = exact.validateProperties(node.props);
|
|
17
|
+
if (diagnostics.length > 0)
|
|
18
|
+
throw new TypeError(`Node ${node.id} has invalid exact Properties.`);
|
|
19
|
+
return projectNode(selected, node, provenance, call);
|
|
20
|
+
};
|
|
21
|
+
const wrapEdge = (selected, edge) => {
|
|
22
|
+
requireOwnedClass(domain, selected);
|
|
23
|
+
const provenance = requireProvenance(domain, edge);
|
|
24
|
+
const exact = requireExactClass(domain, edge.class, 'edge');
|
|
25
|
+
if (!exact.satisfies(selected))
|
|
26
|
+
throw new TypeError(`${exact.key} does not satisfy ${selected.key}.`);
|
|
27
|
+
const diagnostics = exact.validateProperties(edge.props);
|
|
28
|
+
if (diagnostics.length > 0)
|
|
29
|
+
throw new TypeError('Edge has invalid exact Properties.');
|
|
30
|
+
return projectEdge(selected, edge, provenance);
|
|
31
|
+
};
|
|
32
|
+
return Object.freeze({
|
|
33
|
+
domain,
|
|
34
|
+
graph,
|
|
35
|
+
async query(query, options) {
|
|
36
|
+
const selected = selectedSourceClass(domain, query);
|
|
37
|
+
const response = await graph.query(query, { ...options, expected: domain.closure });
|
|
38
|
+
const provenance = provenanceOfResponse(response);
|
|
39
|
+
if (provenance === undefined || !sameClosure(provenance.closure, domain.closure)) {
|
|
40
|
+
throw new TypeError('Authenticated query provenance was not retained.');
|
|
41
|
+
}
|
|
42
|
+
const next = response.page.next === undefined
|
|
43
|
+
? undefined
|
|
44
|
+
: () => this.query(query, {
|
|
45
|
+
...options,
|
|
46
|
+
page: { ...options.page, after: response.page.next },
|
|
47
|
+
});
|
|
48
|
+
if (selected.kind === 'node') {
|
|
49
|
+
const nodes = selectedNodes(response).map((node) => wrapNode(selected, node));
|
|
50
|
+
return Object.freeze({
|
|
51
|
+
nodes: Object.freeze(nodes),
|
|
52
|
+
raw: response,
|
|
53
|
+
...(next === undefined ? {} : { next }),
|
|
54
|
+
refine: (value, target) => refineNode(domain, call, value, target, provenance),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const edges = selectedEdges(response).map((edge) => wrapEdge(selected, edge));
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
edges: Object.freeze(edges),
|
|
60
|
+
raw: response,
|
|
61
|
+
...(next === undefined ? {} : { next }),
|
|
62
|
+
refine: (value, target) => refineEdge(domain, value, target, provenance),
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
wrapNode,
|
|
66
|
+
wrapEdge,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function selectedSourceClass(domain, query) {
|
|
70
|
+
if (query.steps.some((step) => step.op === 'expand')) {
|
|
71
|
+
throw new TypeError('Rich Domain queries do not yet project expanded bindings.');
|
|
72
|
+
}
|
|
73
|
+
if (query.source.terms.length !== 1 || query.source.terms[0]?.kind !== 'class') {
|
|
74
|
+
throw new TypeError('Rich Domain queries require one exact Class source term.');
|
|
75
|
+
}
|
|
76
|
+
const sourceBinding = query.source.kind === 'node' ? query.source.binding : query.source.bindings.edge;
|
|
77
|
+
if (query.select.binding !== sourceBinding) {
|
|
78
|
+
throw new TypeError('Rich Domain queries must select their original source binding.');
|
|
79
|
+
}
|
|
80
|
+
const selected = domain.definition(query.source.terms[0].class);
|
|
81
|
+
if (selected?.ref.kind !== 'class' || selected.kind !== query.source.kind) {
|
|
82
|
+
throw new TypeError('Query source Class is absent or has the wrong graph kind.');
|
|
83
|
+
}
|
|
84
|
+
return selected;
|
|
85
|
+
}
|
|
86
|
+
function refineNode(domain, call, value, target, page) {
|
|
87
|
+
requireOwnedClass(domain, target);
|
|
88
|
+
const provenance = requirePageProvenance(value, page);
|
|
89
|
+
const exact = requireExactClass(domain, value.class, 'node');
|
|
90
|
+
return exact.satisfies(target) ? projectNode(target, value, provenance, call) : undefined;
|
|
91
|
+
}
|
|
92
|
+
function refineEdge(domain, value, target, page) {
|
|
93
|
+
requireOwnedClass(domain, target);
|
|
94
|
+
const provenance = requirePageProvenance(value, page);
|
|
95
|
+
const exact = requireExactClass(domain, value.class, 'edge');
|
|
96
|
+
return exact.satisfies(target) ? projectEdge(target, value, provenance) : undefined;
|
|
97
|
+
}
|
|
98
|
+
function requirePageProvenance(value, page) {
|
|
99
|
+
const provenance = provenanceOfProjectedValue(value);
|
|
100
|
+
if (provenance?.page !== page.page) {
|
|
101
|
+
throw new TypeError('Refinement requires a value from this exact result page.');
|
|
102
|
+
}
|
|
103
|
+
return provenance;
|
|
104
|
+
}
|
|
105
|
+
function requireOwnedClass(domain, selected) {
|
|
106
|
+
if (domain.definition(selected.key) !== selected) {
|
|
107
|
+
throw new TypeError('Selected Class does not belong to the bound Domain closure.');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function requireProvenance(domain, value) {
|
|
111
|
+
const provenance = provenanceOfGraphValue(value);
|
|
112
|
+
if (provenance === undefined || !sameClosure(provenance.closure, domain.closure)) {
|
|
113
|
+
throw new TypeError('Graph value lacks matching authenticated query provenance.');
|
|
114
|
+
}
|
|
115
|
+
return provenance;
|
|
116
|
+
}
|
|
117
|
+
function requireExactClass(domain, key, kind) {
|
|
118
|
+
const exact = domain.definition(ClassKey.ref(ClassKey(key)));
|
|
119
|
+
if (exact?.ref.kind !== 'class' || exact.kind !== kind || exact.abstract) {
|
|
120
|
+
throw new TypeError(`Exact ${kind} Class ${key} is not active and concrete.`);
|
|
121
|
+
}
|
|
122
|
+
return exact;
|
|
123
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { NodeId } from '@astrale-os/kernel-core/graph/node';
|
|
2
|
+
import { Query, QueryAST } from '@astrale-os/kernel-core/graph/query';
|
|
3
|
+
import { Path } from '@astrale-os/kernel-core/path';
|
|
4
|
+
import { schema } from '@astrale-os/kernel-dsl/v1';
|
|
5
|
+
import { defineSchema, edgeClass, method, nodeClass, property, valueSchema, } from '@astrale-os/kernel-dsl/v1/builder';
|
|
6
|
+
const Resource = nodeClass({
|
|
7
|
+
abstract: true,
|
|
8
|
+
properties: {
|
|
9
|
+
title: property(valueSchema()({ type: 'string' }), { required: true }),
|
|
10
|
+
},
|
|
11
|
+
methods: {
|
|
12
|
+
rename: method({
|
|
13
|
+
auth: 'authenticated',
|
|
14
|
+
input: valueSchema()({
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: { title: { type: 'string' } },
|
|
17
|
+
required: ['title'],
|
|
18
|
+
additionalProperties: false,
|
|
19
|
+
}),
|
|
20
|
+
output: valueSchema()({ type: 'string' }),
|
|
21
|
+
}),
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
const Document = nodeClass({
|
|
25
|
+
extends: [Resource],
|
|
26
|
+
properties: { body: property(valueSchema()({ type: 'string' })) },
|
|
27
|
+
});
|
|
28
|
+
const MethodlessParent = nodeClass({
|
|
29
|
+
abstract: true,
|
|
30
|
+
properties: {},
|
|
31
|
+
});
|
|
32
|
+
const MethodlessChild = nodeClass({
|
|
33
|
+
extends: [MethodlessParent],
|
|
34
|
+
properties: {},
|
|
35
|
+
});
|
|
36
|
+
const PrototypeMembers = nodeClass({
|
|
37
|
+
properties: {
|
|
38
|
+
toString: property(valueSchema()({ type: 'string' }), { required: true }),
|
|
39
|
+
},
|
|
40
|
+
methods: {
|
|
41
|
+
constructor: method({
|
|
42
|
+
auth: 'authenticated',
|
|
43
|
+
input: valueSchema()({ type: 'string' }),
|
|
44
|
+
output: valueSchema()({ type: 'string' }),
|
|
45
|
+
}),
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
const Work = schema.resolve(defineSchema('client-binding-types.example', {
|
|
49
|
+
classes: {
|
|
50
|
+
Resource,
|
|
51
|
+
Document,
|
|
52
|
+
MethodlessParent,
|
|
53
|
+
MethodlessChild,
|
|
54
|
+
PrototypeMembers,
|
|
55
|
+
Related: edgeClass.directed({
|
|
56
|
+
source: { as: 'source', accepts: [Resource], outgoing: '0..*' },
|
|
57
|
+
target: { as: 'target', accepts: [Resource], incoming: '0..*' },
|
|
58
|
+
}),
|
|
59
|
+
},
|
|
60
|
+
}));
|
|
61
|
+
const source = Query.from({ nodes: [Work.classes.Resource] });
|
|
62
|
+
const query = source.select({ kind: 'nodes', projection: { kind: 'value' } });
|
|
63
|
+
const prototypeSource = Query.from({ nodes: [Work.classes.PrototypeMembers] });
|
|
64
|
+
const prototypeQuery = prototypeSource.select({ kind: 'nodes', projection: { kind: 'value' } });
|
|
65
|
+
// @ts-expect-error Concrete Method shortcuts are absent from a child-selected projection.
|
|
66
|
+
const resourceAcceptsDocument = documentProjection;
|
|
67
|
+
void resourceAcceptsDocument;
|
|
68
|
+
const resourceReceiverAcceptsDocument = documentProjection;
|
|
69
|
+
void resourceReceiverAcceptsDocument;
|
|
70
|
+
// @ts-expect-error A projection selected for another unrelated Class is not a Resource projection.
|
|
71
|
+
const resourceRejectsPrototype = prototypeProjection;
|
|
72
|
+
void resourceRejectsPrototype;
|
|
73
|
+
// @ts-expect-error Receiver evidence selected for an unrelated Class is not accepted.
|
|
74
|
+
const resourceReceiverRejectsPrototype = prototypeProjection;
|
|
75
|
+
void resourceReceiverRejectsPrototype;
|
|
76
|
+
const methodlessParentAcceptsChild = methodlessChildProjection;
|
|
77
|
+
void methodlessParentAcceptsChild;
|
|
78
|
+
// @ts-expect-error Selected ancestor provenance cannot be widened into a child projection.
|
|
79
|
+
const documentRejectsResource = resourceProjection;
|
|
80
|
+
void documentRejectsResource;
|
|
81
|
+
async function typeProof() {
|
|
82
|
+
await graph.get(definitionRef);
|
|
83
|
+
await graph.getOrThrow(definitionRef);
|
|
84
|
+
await graph.get(Work.classes.Resource.ref);
|
|
85
|
+
await graph.neighbors(definitionRef, Work.classes.Related.ref, {
|
|
86
|
+
direction: 'outgoing',
|
|
87
|
+
page: { size: 1 },
|
|
88
|
+
});
|
|
89
|
+
const page = await binding.query(query, { page: { size: 10 } });
|
|
90
|
+
const resource = page.nodes[0];
|
|
91
|
+
const title = resource.title;
|
|
92
|
+
const renamed = await resource.rename({ title: 'next' });
|
|
93
|
+
// @ts-expect-error Ancestor projection does not expose child-only Properties.
|
|
94
|
+
resource.body;
|
|
95
|
+
const document = page.refine(resource, Work.classes.Document);
|
|
96
|
+
const body = document?.body;
|
|
97
|
+
const detached = QueryAST.decode(query);
|
|
98
|
+
// @ts-expect-error Decoding destroys the authoring Class provenance required for rich projection.
|
|
99
|
+
await binding.query(detached, { page: { size: 10 } });
|
|
100
|
+
const multipleClasses = Query.from({
|
|
101
|
+
nodes: [Work.classes.Resource, Work.classes.Document],
|
|
102
|
+
}).select({ kind: 'nodes', projection: { kind: 'value' } });
|
|
103
|
+
// @ts-expect-error Multiple Class terms do not establish one rich selected-Class contract.
|
|
104
|
+
await binding.query(multipleClasses, { page: { size: 10 } });
|
|
105
|
+
const mixedSource = Query.from({
|
|
106
|
+
nodes: [NodeId('document'), Work.classes.Resource],
|
|
107
|
+
}).select({ kind: 'nodes', projection: { kind: 'value' } });
|
|
108
|
+
// @ts-expect-error Path and Class terms do not establish one rich selected-Class contract.
|
|
109
|
+
await binding.query(mixedSource, { page: { size: 10 } });
|
|
110
|
+
const detachedRefSource = Query.from({ nodes: [Work.classes.Resource.ref] }).select({
|
|
111
|
+
kind: 'nodes',
|
|
112
|
+
projection: { kind: 'value' },
|
|
113
|
+
});
|
|
114
|
+
// @ts-expect-error A ClassRef has no resolved schema witness for rich projection.
|
|
115
|
+
await binding.query(detachedRefSource, { page: { size: 10 } });
|
|
116
|
+
const detachedKeySource = Query.from({ nodes: [Work.classes.Resource.key] }).select({
|
|
117
|
+
kind: 'nodes',
|
|
118
|
+
projection: { kind: 'value' },
|
|
119
|
+
});
|
|
120
|
+
// @ts-expect-error A ClassKey has no resolved schema witness for rich projection.
|
|
121
|
+
await binding.query(detachedKeySource, { page: { size: 10 } });
|
|
122
|
+
const prototypePage = await binding.query(prototypeQuery, { page: { size: 1 } });
|
|
123
|
+
const prototype = prototypePage.nodes[0];
|
|
124
|
+
const toString = prototype.toString;
|
|
125
|
+
const constructed = await prototype.constructor('input');
|
|
126
|
+
const structural = Path.project(Work.classes.Resource.ref).raw;
|
|
127
|
+
await graph.get(structural);
|
|
128
|
+
await graph.getOrThrow(structural);
|
|
129
|
+
await graph.neighbors(structural, Work.classes.Related, {
|
|
130
|
+
direction: 'outgoing',
|
|
131
|
+
page: { size: 1 },
|
|
132
|
+
});
|
|
133
|
+
const exact = NodeId('document');
|
|
134
|
+
await graph.get(exact);
|
|
135
|
+
await graph.getOrThrow(exact);
|
|
136
|
+
await graph.neighbors(exact, Work.classes.Related, {
|
|
137
|
+
direction: 'outgoing',
|
|
138
|
+
page: { size: 1 },
|
|
139
|
+
});
|
|
140
|
+
// @ts-expect-error Neighbor traversal requires Edge Classes, not Node Classes.
|
|
141
|
+
await graph.neighbors(exact, Work.classes.Resource, {
|
|
142
|
+
direction: 'outgoing',
|
|
143
|
+
page: { size: 1 },
|
|
144
|
+
});
|
|
145
|
+
return { title, renamed, body, toString, constructed };
|
|
146
|
+
}
|
|
147
|
+
void typeProof;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Edge } from '@astrale-os/kernel-core/graph/edge';
|
|
2
|
+
import type { Node } from '@astrale-os/kernel-core/graph/node';
|
|
3
|
+
import type { DefinitionKey, Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
4
|
+
import type { AnyResolvedClass, BoundMethodShortcutsOf, ClassSatisfactionKeysOf, MethodAccessOf, PropertyAccessOf, PropertyShortcutsOf, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
|
|
5
|
+
import type { Binary } from '../../client/index.js';
|
|
6
|
+
type NodeReserved = keyof Node | 'property' | 'method';
|
|
7
|
+
type EdgeReserved = keyof Edge | 'property';
|
|
8
|
+
declare const BOUND_CLASS: unique symbol;
|
|
9
|
+
/** Node evidence selected as one exact Class key, without duplicating its rich projection. */
|
|
10
|
+
export type BoundNodeFor<ClassKey extends DefinitionKey<Key.Origin, 'class'> = DefinitionKey<Key.Origin, 'class'>> = Node & {
|
|
11
|
+
readonly [BOUND_CLASS]: Readonly<Record<ClassKey, true>>;
|
|
12
|
+
};
|
|
13
|
+
/** One selected-Class view over an exact admitted Node. */
|
|
14
|
+
export type BoundNode<Class extends ResolvedClass<'node'> = ResolvedClass<'node'>, BinaryValue = Binary> = BoundNodeFor<ClassSatisfactionKeysOf<Class>> & PropertyShortcutsOf<Class, NodeReserved> & BoundMethodShortcutsOf<Class, BinaryValue, NodeReserved> & PropertyAccessOf<Class> & MethodAccessOf<Class, BinaryValue>;
|
|
15
|
+
/** One selected-Class view over an exact admitted Edge. */
|
|
16
|
+
export type BoundEdge<Class extends ResolvedClass<'edge'> = ResolvedClass<'edge'>> = Edge & PropertyShortcutsOf<Class, EdgeReserved> & PropertyAccessOf<Class>;
|
|
17
|
+
export type BoundGraphValue<Class extends AnyResolvedClass> = Class extends ResolvedClass<'node'> ? BoundNode<Class> : Class extends ResolvedClass<'edge'> ? BoundEdge<Class> : never;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Edge } from '@astrale-os/kernel-core/graph/edge';
|
|
2
|
+
import type { Node } from '@astrale-os/kernel-core/graph/node';
|
|
3
|
+
import type { QueryAST, QueryEdgeGraphResult, QueryEdgeResult, QueryNodeGraphResult, QueryNodeResult, QueryResultFor, QuerySingleSourceClassOf } from '@astrale-os/kernel-core/graph/query';
|
|
4
|
+
import type { AnyResolvedClass, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
|
|
5
|
+
import type { QueryResponse } from '../page-contract.js';
|
|
6
|
+
import type { BoundEdge, BoundNode } from './model.js';
|
|
7
|
+
type SourceClass<Query> = Extract<QuerySingleSourceClassOf<Query>, AnyResolvedClass>;
|
|
8
|
+
export interface BoundNodePage<Query extends QueryAST = QueryAST, Class extends ResolvedClass<'node'> = Extract<SourceClass<Query>, ResolvedClass<'node'>>> {
|
|
9
|
+
readonly nodes: readonly BoundNode<Class>[];
|
|
10
|
+
readonly raw: QueryResponse<QueryResultFor<Query>>;
|
|
11
|
+
readonly next?: () => Promise<BoundNodePage<Query, Class>>;
|
|
12
|
+
refine<Target extends ResolvedClass<'node'>>(value: BoundNode<Class>, target: Target): BoundNode<Target> | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface BoundEdgePage<Query extends QueryAST = QueryAST, Class extends ResolvedClass<'edge'> = Extract<SourceClass<Query>, ResolvedClass<'edge'>>> {
|
|
15
|
+
readonly edges: readonly BoundEdge<Class>[];
|
|
16
|
+
readonly raw: QueryResponse<QueryResultFor<Query>>;
|
|
17
|
+
readonly next?: () => Promise<BoundEdgePage<Query, Class>>;
|
|
18
|
+
refine<Target extends ResolvedClass<'edge'>>(value: BoundEdge<Class>, target: Target): BoundEdge<Target> | undefined;
|
|
19
|
+
}
|
|
20
|
+
export type BoundQueryPage<Query extends QueryAST> = QueryResultFor<Query> extends QueryNodeGraphResult | QueryNodeResult ? BoundNodePage<Query> : QueryResultFor<Query> extends QueryEdgeGraphResult | QueryEdgeResult ? BoundEdgePage<Query> : never;
|
|
21
|
+
export declare function selectedNodes(response: QueryResponse): readonly Node[];
|
|
22
|
+
export declare function selectedEdges(response: QueryResponse): readonly Edge[];
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { edgeKeyOf, equalEdgeKeys } from '@astrale-os/kernel-core/graph/edge';
|
|
2
|
+
export function selectedNodes(response) {
|
|
3
|
+
const result = response.result;
|
|
4
|
+
if (result.kind === 'graph') {
|
|
5
|
+
if (result.selection.kind !== 'node')
|
|
6
|
+
throw new TypeError('Query did not select Nodes.');
|
|
7
|
+
const byId = new Map(result.graph.nodes.map((node) => [node.id, node]));
|
|
8
|
+
return result.selection.ids.map((id) => {
|
|
9
|
+
const node = byId.get(id);
|
|
10
|
+
if (node === undefined)
|
|
11
|
+
throw new TypeError(`Selected Node ${id} is absent.`);
|
|
12
|
+
return node;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (result.kind !== 'nodes')
|
|
16
|
+
throw new TypeError('Query did not select Nodes.');
|
|
17
|
+
return result.nodes.map((item) => {
|
|
18
|
+
if (item.kind !== 'value')
|
|
19
|
+
throw new TypeError('Rich Node queries require value projection.');
|
|
20
|
+
return item.value;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function selectedEdges(response) {
|
|
24
|
+
const result = response.result;
|
|
25
|
+
if (result.kind === 'graph') {
|
|
26
|
+
if (result.selection.kind !== 'edge')
|
|
27
|
+
throw new TypeError('Query did not select Edges.');
|
|
28
|
+
return result.selection.keys.map((key) => {
|
|
29
|
+
const edge = result.graph.edges.find((candidate) => equalEdgeKeys(edgeKeyOf(candidate), key));
|
|
30
|
+
if (edge === undefined)
|
|
31
|
+
throw new TypeError('Selected Edge is absent.');
|
|
32
|
+
return edge;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (result.kind !== 'edges')
|
|
36
|
+
throw new TypeError('Query did not select Edges.');
|
|
37
|
+
return result.edges.map((item) => {
|
|
38
|
+
if (item.edge.kind !== 'value')
|
|
39
|
+
throw new TypeError('Rich Edge queries require value projection.');
|
|
40
|
+
return item.edge.value;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Edge } from '@astrale-os/kernel-core/graph/edge';
|
|
2
|
+
import type { Node } from '@astrale-os/kernel-core/graph/node';
|
|
3
|
+
import type { ResolvedClass, ResolvedMethod } from '@astrale-os/kernel-dsl/v1/language';
|
|
4
|
+
import type { BoundEdge, BoundNode } from './model.js';
|
|
5
|
+
import type { QueryProvenance } from './provenance.js';
|
|
6
|
+
export type MethodCall = (node: Node, method: ResolvedMethod, input: unknown) => Promise<unknown>;
|
|
7
|
+
export declare function projectNode<Class extends ResolvedClass<'node'>>(selected: Class, node: Node, provenance: QueryProvenance, call: MethodCall): BoundNode<Class>;
|
|
8
|
+
export declare function projectEdge<Class extends ResolvedClass<'edge'>>(selected: Class, edge: Edge, provenance: QueryProvenance): BoundEdge<Class>;
|