# resolveProviderLocations

> **resolveProviderLocations**(`client`, `options`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`OutputType`](/reference/filoz/synapse-core/warm-storage/namespaces/resolveproviderlocations/type-aliases/outputtype/)\>

Defined in: [packages/synapse-core/src/warm-storage/resolve-provider-locations.ts:70](https://github.com/FilOzone/synapse-sdk/blob/5989c4b03ed2fe4cf8b1ef29efe1d4ff1ad4c7bc/packages/synapse-core/src/warm-storage/resolve-provider-locations.ts#L70)

Resolve the location to store on for each of a set of specific providers.

Reads the providers from the registry, so they do not need to be approved,
and the client's data sets with [getPdpDataSets](/reference/filoz/synapse-core/warm-storage/functions/getpdpdatasets/) once, then selects
with [selectProviders](/reference/filoz/synapse-core/warm-storage/functions/selectproviders/) and `providerId` for each provider. Each
location is the provider's best metadata-matching data set, or a new-dataset
location when none matches.

This function does NOT ping the providers.

## Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `client` | `Client`\<`Transport`, `Chain`\> | The client to use to read the providers and data sets. |
| `options` | [`OptionsType`](/reference/filoz/synapse-core/warm-storage/namespaces/resolveproviderlocations/type-aliases/optionstype/) | [resolveProviderLocations.OptionsType](/reference/filoz/synapse-core/warm-storage/namespaces/resolveproviderlocations/type-aliases/optionstype/) |

## Returns

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

The resolved locations [resolveProviderLocations.OutputType](/reference/filoz/synapse-core/warm-storage/namespaces/resolveproviderlocations/type-aliases/outputtype/)

## Example

```ts
import { resolveProviderLocations } from '@filoz/synapse-core/warm-storage'
import { createPublicClient, http } from 'viem'
import { calibration } from '@filoz/synapse-core/chains'

const client = createPublicClient({
  chain: calibration,
  transport: http(),
})

const [first, second] = await resolveProviderLocations(client, {
  address: '0x1234567890123456789012345678901234567890',
  providerIds: [1n, 2n],
  metadata: { source: 'my-app' },
})

console.log(first.dataSetId ?? 'new data set', second.dataSetId ?? 'new data set')
```

## Throws

Errors [resolveProviderLocations.ErrorType](/reference/filoz/synapse-core/warm-storage/namespaces/resolveproviderlocations/type-aliases/errortype/). Throws
  `PDPProviderUnavailableError` for the first provider that does not exist
  or has no active PDP product.