# UnifiedSwapStorage\<T>

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:45](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L45)

Unified swap persistence layer for the SDK utilizing an underlying [IUnifiedStorage](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/interfaces/IUnifiedStorage.md) instance with optional in-memory caching via weak refs WeakRef

## Type Parameters

| Type Parameter                                                                                                       |
| -------------------------------------------------------------------------------------------------------------------- |
| `T` *extends* [`ChainType`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/ChainType.md) |

## Constructors

### Constructor

```
new UnifiedSwapStorage<T>(storage, noWeakRefMap?): UnifiedSwapStorage<T>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:57](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L57)

#### Parameters

| Parameter       | Type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | Description                                                                                                                                                                                                                                   |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `storage`       | [`IUnifiedStorage`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/interfaces/IUnifiedStorage.md)\<readonly \[{ `key`: `"id"`; `nullable`: `false`; `type`: `"string"`; `unique`: `true`; }, { `key`: `"escrowHash"`; `nullable`: `true`; `type`: `"string"`; `unique`: `true`; }, { `key`: `"type"`; `nullable`: `false`; `type`: `"number"`; `unique`: `false`; }, { `key`: `"initiator"`; `nullable`: `false`; `type`: `"string"`; `unique`: `false`; }, { `key`: `"state"`; `nullable`: `false`; `type`: `"number"`; `unique`: `false`; }, { `key`: `"paymentHash"`; `nullable`: `true`; `type`: `"string"`; `unique`: `false`; }], readonly \[{ `keys`: readonly \[`"initiator"`, `"id"`]; `unique`: `false`; }, { `keys`: readonly \[`"type"`, `"state"`]; `unique`: `false`; }, { `keys`: readonly \[`"type"`, `"paymentHash"`]; `unique`: `false`; }, { `keys`: readonly \[`"type"`, `"initiator"`, `"state"`]; `unique`: `false`; }]> | Underlying storage persistence layer                                                                                                                                                                                                          |
| `noWeakRefMap?` | `boolean`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Whether to disable caching of the swap objects in the weak ref map, this should be set when you need multiple different clients accessing the same swap database (such as when running the SDK in a serverless environment like AWS or Azure) |

#### Returns

`UnifiedSwapStorage`<`T`>

## Properties

### noWeakRefMap?

```
readonly optional noWeakRefMap: boolean;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:49](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L49)

***

### storage

```
readonly storage: IUnifiedStorage<readonly [{

  key: "id";

  nullable: false;

  type: "string";

  unique: true;

}, {

  key: "escrowHash";

  nullable: true;

  type: "string";

  unique: true;

}, {

  key: "type";

  nullable: false;

  type: "number";

  unique: false;

}, {

  key: "initiator";

  nullable: false;

  type: "string";

  unique: false;

}, {

  key: "state";

  nullable: false;

  type: "number";

  unique: false;

}, {

  key: "paymentHash";

  nullable: true;

  type: "string";

  unique: false;

}], readonly [{

  keys: readonly ["initiator", "id"];

  unique: false;

}, {

  keys: readonly ["type", "state"];

  unique: false;

}, {

  keys: readonly ["type", "paymentHash"];

  unique: false;

}, {

  keys: readonly ["type", "initiator", "state"];

  unique: false;

}]>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:47](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L47)

***

### weakRefCache

```
readonly weakRefCache: Map<string, WeakRef<ISwap<T, SwapTypeDefinition<T, ISwapWrapper<T, any, ISwapWrapperOptions>, ISwap<T, any, any>>, number>>>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:48](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L48)

## Methods

### init()

```
init(): Promise<void>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:65](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L65)

Initializes the underlying storage

#### Returns

`Promise`<`void`>

***

### query()

```
query<S>(params, reviver): Promise<S[]>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:77](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L77)

Params are specified in the following way:

* \[\[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
* \[\[condition1], \[condition2]] - returns all rows where condition1 OR condition2 is met
* \[\[condition1, condition2], \[condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met

#### Type Parameters

| Type Parameter                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `S` *extends* [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`, `ISwapWrapperOptions`>, [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `any`, `any`>>, `number`> |

#### Parameters

| Parameter | Type                                                                                                             | Description |
| --------- | ---------------------------------------------------------------------------------------------------------------- | ----------- |
| `params`  | [`QueryParams`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/QueryParams.md)\[]\[] |             |
| `reviver` | (`obj`) => `S`                                                                                                   |             |

#### Returns

`Promise`<`S`\[]>

***

### remove()

```
remove<S>(value): Promise<void>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:142](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L142)

Removes a swap from storage

#### Type Parameters

| Type Parameter                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `S` *extends* [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`, `ISwapWrapperOptions`>, [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `any`, `any`>>, `number`> |

#### Parameters

| Parameter | Type | Description    |
| --------- | ---- | -------------- |
| `value`   | `S`  | Swap to remove |

#### Returns

`Promise`<`void`>

***

### removeAll()

```
removeAll<S>(values, lenient?): Promise<void>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:160](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L160)

Removes multiple swaps from storage in a batch operation

#### Type Parameters

| Type Parameter                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `S` *extends* [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`, `ISwapWrapperOptions`>, [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `any`, `any`>>, `number`> |

#### Parameters

| Parameter  | Type      | Description                                                                                                                                                                                                                                                                                   |
| ---------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `values`   | `S`\[]    | Array of swaps to remove                                                                                                                                                                                                                                                                      |
| `lenient?` | `boolean` | In lenient mode the underlying persistent layer doesn't throw on individual swap failures due to optimistic concurrency, or other (implementation specific), this flag is to be used when the saving of the swap isn't mission-critical for executing next steps (e.g. in tick or sync loops) |

#### Returns

`Promise`<`void`>

***

### save()

```
save<S>(value): Promise<void>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:105](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L105)

Saves the swap to storage, updating indexes as needed

#### Type Parameters

| Type Parameter                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `S` *extends* [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`, `ISwapWrapperOptions`>, [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `any`, `any`>>, `number`> |

#### Parameters

| Parameter | Type | Description  |
| --------- | ---- | ------------ |
| `value`   | `S`  | Swap to save |

#### Returns

`Promise`<`void`>

***

### saveAll()

```
saveAll<S>(values, lenient?): Promise<void>;
```

Defined in: [atomiq-sdk/src/storage/UnifiedSwapStorage.ts:123](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/storage/UnifiedSwapStorage.ts#L123)

Saves multiple swaps to storage in a batch operation

#### Type Parameters

| Type Parameter                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `S` *extends* [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`, `ISwapWrapperOptions`>, [`ISwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwap.md)<`T`, `any`, `any`>>, `number`> |

#### Parameters

| Parameter  | Type      | Description                                                                                                                                                                                                                                                                                   |
| ---------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `values`   | `S`\[]    | Array of swaps to save                                                                                                                                                                                                                                                                        |
| `lenient?` | `boolean` | In lenient mode the underlying persistent layer doesn't throw on individual swap failures due to optimistic concurrency, or other (implementation specific), this flag is to be used when the saving of the swap isn't mission-critical for executing next steps (e.g. in tick or sync loops) |

#### Returns

`Promise`<`void`>
