---
url: >-
  https://adk.nht.io/api/@nhtio/adk/batteries/storage/flydrive/classes/FlydriveSpoolStore.md
description: '"Give bytes, get a reader" persistence layer over a flydrive {@link Disk}.'
---

# Class: FlydriveSpoolStore

Defined in: [batteries/storage/flydrive/index.ts:314](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L314)

"Give bytes, get a reader" persistence layer over a flydrive Disk.

## Remarks

`write(callId, bytes)` calls `disk.put(key, bytes)` where `key = keyPrefix + callId`, then
returns a fresh [FlydriveSpoolReader](FlydriveSpoolReader.md) pointed at the same key. `read(callId)` returns
a reader without re-writing; `delete(callId)` calls `disk.delete(key)`.

The store is stateless — it owns no in-memory cache of writes. Multiple `FlydriveSpoolStore`
instances sharing the same disk + key prefix see the same data.

## Example

```ts
import { Disk } from "flydrive";
import { FSDriver } from "flydrive/drivers/fs";
import { FlydriveSpoolStore } from "@nhtio/adk/batteries/storage/flydrive";

const disk = new Disk(
  new FSDriver({ location: "./tmp", visibility: "public" }),
);
const store = new FlydriveSpoolStore(disk);

const bytes = await tool.executor(ctx)(args);
const reader = await store.write(callId, bytes);
const Ctor = tool.artifactConstructor?.() ?? SpooledArtifact;
const artifact = new Ctor(reader);
```

## Implements

* [`SpoolStore`](../../../../common/type-aliases/SpoolStore.md)

## Constructors

### Constructor

```ts
new FlydriveSpoolStore(disk: Disk, opts?: FlydriveSpoolStoreOptions): FlydriveSpoolStore;
```

Defined in: [batteries/storage/flydrive/index.ts:319](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L319)

#### Parameters

| Parameter | Type                                                                      |
| --------- | ------------------------------------------------------------------------- |
| `disk`    | `Disk`                                                                    |
| `opts`    | [`FlydriveSpoolStoreOptions`](../interfaces/FlydriveSpoolStoreOptions.md) |

#### Returns

`FlydriveSpoolStore`

## Methods

### delete()

```ts
delete(callId: string): Promise<boolean>;
```

Defined in: [batteries/storage/flydrive/index.ts:387](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L387)

Removes the entry under `callId`.

#### Parameters

| Parameter | Type     | Description                               |
| --------- | -------- | ----------------------------------------- |
| `callId`  | `string` | Identifier whose entry should be removed. |

#### Returns

`Promise`<`boolean`>

`true` if the key existed and was removed; `false` if it didn't exist.

#### Implementation of

```ts
SpoolStore.delete;
```

***

### keyFor()

```ts
keyFor(callId: string): string;
```

Defined in: [batteries/storage/flydrive/index.ts:401](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L401)

Returns the full disk key for a given `callId` (i.e. `keyPrefix + callId`).

#### Parameters

| Parameter | Type     |
| --------- | -------- |
| `callId`  | `string` |

#### Returns

`string`

#### Remarks

Useful for tests or for callers that want to interact with the underlying disk directly.

***

### read()

```ts
read(callId: string, opts?: FlydriveSpoolReaderOptions): Promise<FlydriveSpoolReader | undefined>;
```

Defined in: [batteries/storage/flydrive/index.ts:370](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L370)

Returns a reader over the bytes previously written under `callId`.

#### Parameters

| Parameter | Type                                                                        | Description                                                             |
| --------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `callId`  | `string`                                                                    | Identifier supplied to a prior [FlydriveSpoolStore.write](#write) call. |
| `opts?`   | [`FlydriveSpoolReaderOptions`](../interfaces/FlydriveSpoolReaderOptions.md) | Per-call override for `streamThresholdBytes`.                           |

#### Returns

`Promise`<[`FlydriveSpoolReader`](FlydriveSpoolReader.md) | `undefined`>

A [FlydriveSpoolReader](FlydriveSpoolReader.md), or `undefined` if the key is missing.

#### Remarks

Returns `undefined` if the underlying key does not exist. Existence is checked via
`disk.exists(key)` before the reader is returned, so callers can rely on a defined return
value pointing at a real object.

#### Implementation of

```ts
SpoolStore.read;
```

***

### write()

```ts
write(
   callId: string,
   bytes:
  | string
  | Uint8Array<ArrayBufferLike>
  | ReadableStream<Uint8Array<ArrayBufferLike>>,
opts?: FlydriveSpoolReaderOptions): Promise<FlydriveSpoolReader>;
```

Defined in: [batteries/storage/flydrive/index.ts:339](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/batteries/storage/flydrive/index.ts#L339)

Persists `bytes` under `callId` and returns a reader bound to the stored key.

#### Parameters

| Parameter | Type                                                                                                      | Description                                                                       |
| --------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `callId`  | `string`                                                                                                  | Identifier used to retrieve the bytes via [FlydriveSpoolStore.read](#read).       |
| `bytes`   | | `string` | `Uint8Array`<`ArrayBufferLike`> | `ReadableStream`<`Uint8Array`<`ArrayBufferLike`>> | The bytes to store, as a `string`, `Uint8Array`, or `ReadableStream<Uint8Array>`. |
| `opts?`   | [`FlydriveSpoolReaderOptions`](../interfaces/FlydriveSpoolReaderOptions.md)                               | Per-call override for `streamThresholdBytes`.                                     |

#### Returns

`Promise`<[`FlydriveSpoolReader`](FlydriveSpoolReader.md)>

A [FlydriveSpoolReader](FlydriveSpoolReader.md) over the stored bytes.

#### Remarks

`string`/`Uint8Array` input goes through `disk.put`; `ReadableStream<Uint8Array>` is forwarded
to `disk.putStream` (via `Readable.fromWeb`) so the payload streams straight to the backing
driver — to disk for `FSDriver`, to the object store for S3/GCS — without being materialized
in memory first.

#### Implementation of

```ts
SpoolStore.write;
```
