# StorageManager

Defined in: [packages/synapse-sdk/src/storage/manager.ts:147](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L147)

## Constructors

### Constructor

> **new StorageManager**(`options`): `StorageManager`

Defined in: [packages/synapse-sdk/src/storage/manager.ts:158](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L158)

Creates a new StorageManager

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options` | [`StorageManagerOptions`](/reference/filoz/synapse-sdk/storage/interfaces/storagemanageroptions/) | The options for the StorageManager [StorageManagerOptions](/reference/filoz/synapse-sdk/storage/interfaces/storagemanageroptions/) |

#### Returns

`StorageManager`

## Accessors

### source

#### Get Signature

> **get** **source**(): `string` \| `null`

Defined in: [packages/synapse-sdk/src/storage/manager.ts:170](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L170)

The application source identifier used for dataset namespace isolation.
Set via `Synapse.create({ source })`. Used by `combineMetadata` to tag
datasets so that different applications sharing a wallet don't collide.

##### Returns

`string` \| `null`

***

### withCDN

#### Get Signature

> **get** **withCDN**(): `boolean`

Defined in: [packages/synapse-sdk/src/storage/manager.ts:178](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L178)

Whether CDN rails are enabled for new datasets by default.
Set via `Synapse.create({ withCDN })`.

##### Returns

`boolean`

## Methods

### calculateMultiContextCosts()

> **calculateMultiContextCosts**(`contexts`, `options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`OutputType`](/reference/filoz/synapse-sdk/synapse/namespaces/getuploadcosts/type-aliases/outputtype/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:707](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L707)

Calculate upload costs aggregated across multiple storage contexts.

Each context creates its own PDP payment rail with its own lockup. This method
correctly sums per-context lockup while computing account-level debt, runway,
and buffer only once (they are shared across all contexts from the same payer).

Dataset sizes are fetched from chain for existing datasets to get accurate
rate deltas.

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `contexts` | [`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)[] | Storage contexts to aggregate costs for |
| `options` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`PrepareOptions`](/reference/filoz/synapse-sdk/synapse/interfaces/prepareoptions/), `"dataSize"` \| `"extraRunwayEpochs"` \| `"bufferEpochs"`\> | Upload options (dataSize, extraRunwayEpochs, bufferEpochs) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`OutputType`](/reference/filoz/synapse-sdk/synapse/namespaces/getuploadcosts/type-aliases/outputtype/)\>

Aggregated upload costs with summed rates and single deposit/approval

***

### createContext()

> **createContext**(`options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:939](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L939)

Create a single storage context with specified options

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `options?` | [`StorageServiceOptions`](/reference/filoz/synapse-sdk/synapse/interfaces/storageserviceoptions/) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)\>

***

### createContexts()

> **createContexts**(`options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)[]\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:881](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L881)

Creates storage contexts for multi-provider storage deals and other operations.

By storing data with multiple independent providers, you reduce dependency on any
single provider and improve overall data availability. Use contexts together as a group.

Contexts are selected by priority:
1. Specified datasets (`dataSetIds`) - uses their existing providers
2. Specified providers (`providerIds`) - finds or creates matching datasets
3. Automatically selected from remaining approved providers

For automatic selection, existing datasets matching the `metadata` are reused.
Providers are randomly chosen to distribute across the network.

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options?` | [`CreateContextsOptions`](/reference/filoz/synapse-sdk/synapse/interfaces/createcontextsoptions/) | Configuration options [CreateContextsOptions](/reference/filoz/synapse-sdk/synapse/interfaces/createcontextsoptions/) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)[]\>

Promise resolving to array of storage contexts

***

### download()

> **download**(`options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`Uint8Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)\<`ArrayBufferLike`\>\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:560](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L560)

Download data from storage
If context is provided, routes to context.download()
Otherwise performs SP-agnostic download

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `options` | [`StorageManagerDownloadOptions`](/reference/filoz/synapse-sdk/storage/interfaces/storagemanagerdownloadoptions/) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`Uint8Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)\<`ArrayBufferLike`\>\>

***

### findDataSets()

> **findDataSets**(`options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`EnhancedDataSetInfo`](/reference/filoz/synapse-sdk/synapse/interfaces/enhanceddatasetinfo/)[]\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:1010](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L1010)

Query data sets for this client

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options` | \{ `address?`: `` `0x${string}` ``; \} | The options for the find data sets |
| `options.address?` | `` `0x${string}` `` | The client address, defaults to current signer |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`EnhancedDataSetInfo`](/reference/filoz/synapse-sdk/synapse/interfaces/enhanceddatasetinfo/)[]\>

Array of enhanced data set information including management status

***

### getDefaultContext()

> **getDefaultContext**(): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:1000](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L1000)

Get or create the default context

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageContext`](/reference/filoz/synapse-sdk/storage/classes/storagecontext/)\>

***

### getStorageInfo()

> **getStorageInfo**(): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageInfo`](/reference/filoz/synapse-sdk/synapse/interfaces/storageinfo/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:1066](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L1066)

Get comprehensive information about the storage service including
approved providers, pricing, contract addresses, and current allowances

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`StorageInfo`](/reference/filoz/synapse-sdk/synapse/interfaces/storageinfo/)\>

Complete storage service information

***

### getUploadCosts()

> **getUploadCosts**(`options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`OutputType`](/reference/filoz/synapse-sdk/synapse/namespaces/getuploadcosts/type-aliases/outputtype/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:636](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L636)

Get upload costs including rate, deposit needed, and approval state.

Wraps the synapse-core `getUploadCosts()` function, automatically injecting
the client address. No StorageContext needed — works with primitive values.

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options` | [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)\<[`GetUploadCostsOptions`](/reference/filoz/synapse-sdk/synapse/type-aliases/getuploadcostsoptions/), `"clientAddress"`\> | Upload cost options (clientAddress auto-injected) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`OutputType`](/reference/filoz/synapse-sdk/synapse/namespaces/getuploadcosts/type-aliases/outputtype/)\>

Upload costs including rate, deposit needed, and readiness

***

### prepare()

> **prepare**(`options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`PrepareResult`](/reference/filoz/synapse-sdk/synapse/interfaces/prepareresult/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:658](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L658)

Prepare the account for upload by computing costs and returning a transaction to execute.

Can accept pre-computed costs (from a prior `getUploadCosts()` call) to skip redundant RPC,
or computes them internally. When no context is provided, creates default contexts
(mirroring the upload() flow).

Aggregates per-context lockup correctly for any number of contexts:
- Fetches each existing dataset's size from chain
- Sums lockup across all contexts
- Computes debt, runway, and buffer once at the account level

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options` | [`PrepareOptions`](/reference/filoz/synapse-sdk/synapse/interfaces/prepareoptions/) | [PrepareOptions](/reference/filoz/synapse-sdk/synapse/interfaces/prepareoptions/) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`PrepareResult`](/reference/filoz/synapse-sdk/synapse/interfaces/prepareresult/)\>

PrepareResult with costs and an optional transaction

***

### terminateService()

> **terminateService**(`options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`TerminateServiceResult`](/reference/filoz/synapse-sdk/synapse/interfaces/terminateserviceresult/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:1037](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L1037)

Terminate the storage service for a data set belonging to the synapse signer.

By default the request is relayed through the data set's service provider:
the client signs an EIP-712 authorization and the provider submits the
transaction (paying the gas), in exchange for a small fee drawn from the
payer's account. Provider-relayed termination takes effect immediately;
it requires the payer's account to cover settlement in full and fails
otherwise, rather than falling back to a lockup wind-down.

With `skipProvider: true` the transaction is submitted directly from the
signer's wallet. No provider cooperation is needed, but the service and
its payments run to the end of the lockup period (typically ~30 days;
the actual end is `endEpoch` in the result).

Either way, termination ends the service and its payments; the data set's
remaining on-chain state is cleaned up later by the provider, not by this
call.

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `options` | [`TerminateServiceOptions`](/reference/filoz/synapse-sdk/synapse/interfaces/terminateserviceoptions/) | [TerminateServiceOptions](/reference/filoz/synapse-sdk/synapse/interfaces/terminateserviceoptions/) |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`TerminateServiceResult`](/reference/filoz/synapse-sdk/synapse/interfaces/terminateserviceresult/)\>

The termination outcome [TerminateServiceResult](/reference/filoz/synapse-sdk/synapse/interfaces/terminateserviceresult/)

***

### upload()

> **upload**(`data`, `options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`UploadResult`](/reference/filoz/synapse-sdk/synapse/interfaces/uploadresult/)\>

Defined in: [packages/synapse-sdk/src/storage/manager.ts:206](https://github.com/FilOzone/synapse-sdk/blob/218f90f1cf7635dc33af6f880b64b845c99676bc/packages/synapse-sdk/src/storage/manager.ts#L206)

Upload data to Filecoin Onchain Cloud using a store->pull->commit flow across
multiple providers.

By default, uploads to 2 providers (primary + secondary) for redundancy.
Data is uploaded once to the primary, then secondaries pull from the primary
via SP-to-SP transfer.

This method only throws if zero copies succeed. Partial success (some but
not all copies) is indicated by `result.complete === false`. Check `complete`
to determine overall success. Don't use `failedAttempts.length` as a failure
signal as `failedAttempts` exists as a diagnostic for intermediate failures.

For large files, prefer streaming to minimize memory usage.

For uploading multiple files, use the split operations API directly:
createContexts() -> store() -> presignForCommit() -> pull() -> commit()

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `data` | [`UploadPieceStreamingData`](/reference/filoz/synapse-core/sp/type-aliases/uploadpiecestreamingdata/) | Raw bytes (Uint8Array) or ReadableStream to upload |
| `options?` | [`StorageManagerUploadOptions`](/reference/filoz/synapse-sdk/storage/interfaces/storagemanageruploadoptions/) | Upload options including contexts, callbacks, and abort signal |

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`UploadResult`](/reference/filoz/synapse-sdk/synapse/interfaces/uploadresult/)\>

Upload result with pieceCid, copies, and completion status

#### Throws

StoreError if primary store fails (before any data is committed)

#### Throws

CommitError if all commit attempts fail (data stored but not on-chain)