PHPackages                             bagart/ask-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. bagart/ask-client

ActiveLibrary

bagart/ask-client
=================

Async network client and HTTP transport layer for the ASK runtime

00

Since Jul 22Compare

[ Source](https://github.com/bagart/php-async-kernel-client)[ Packagist](https://packagist.org/packages/bagart/ask-client)[ RSS](/packages/bagart-ask-client/feed)WikiDiscussions Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

bagart/ask-client
=================

[](#bagartask-client)

Minimal deterministic execution engine: `execute(object $operation): ASKFuture`

Usage
-----

[](#usage)

```
use BAGArt\ASKClient\ASKClient;
use BAGArt\ASKClient\ASKTransport;
use BAGArt\ASKClient\ASKContext;
use BAGArt\ASKClient\ASKFuture;

$client = new ASKClient(
    transport: ASKTransport::wrap(fn (object $op, ASKContext $ctx): ASKFuture =>
        ASKFuture::resolved($result),
    ),
);

$result = $client->execute($operation)->await();
```

Future chain
------------

[](#future-chain)

```
$result = $client
    ->execute($operation)
    ->then(fn ($x) => $x + 1)
    ->then(fn ($x) => $x * 2)
    ->await();

$recovered = $client
    ->execute($operation)
    ->recover(fn (Throwable $e) => [])
    ->await();
```

Client with handlers
--------------------

[](#client-with-handlers)

```
$client = new ASKClient(
    transport: $transport,
    handlers: [new MyRetryHandler(), new MyLoggingHandler()],
);
```

Handler contract
----------------

[](#handler-contract)

A handler is a single unified type (no separate middleware/stage layers):

```
$handler = new class () implements ASKHandlerContract {
    public function __invoke(
        object $operation,
        ASKContextContract $context,
        ASKNextHandler $next,
    ): ASKFutureContract {
        return $next($operation, $context);
    }
};
```

Architecture
------------

[](#architecture)

```
execute(operation)
    ↓
handler chain
    ↓
transport
    ↓
future

```

- **ASKClient** — entry point, `::create(...$handlers)` factory
- **ASKFuture** — lazy future with `then` / `catch` / `recover` / `finally` chain
- **ASKContext** — immutable context with `with()` / `without()` / `merge()`
- **ASKTransport** — `wrap(callable)` / `null()` / `execute()`
- **ASKNextHandler** — typed next-handler replacing `callable`
- **Contracts\*** — interfaces for all core components

###  Health Score

9

—

LowBetter than 0% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/02a582356aa07935e42e622817f56810dce45be995af444215fabb072a39992b?d=identicon)[bagart](/maintainers/bagart)

### Embed Badge

![Health badge](/badges/bagart-ask-client/health.svg)

```
[![Health](https://phpackages.com/badges/bagart-ask-client/health.svg)](https://phpackages.com/packages/bagart-ask-client)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
