# SDK: errors

> PithyxError, the problem shape and the SDK transport error codes.

Source: https://pithyx.org/docs/reference/sdk/errors/
Markdown: https://pithyx.org/docs/reference/sdk/errors.md

Every failed call rejects with a `PithyxError`. Daemon problems pass through unchanged; the `sdk.*` codes come from the connection between app and desktop. Every code is in the [error reference](https://pithyx.org/docs/reference/errors/).

Generated from the TSDoc comments of @pithyx/sdk 1.0.0-rc.9 at build time; the text below the headings is the comment in the source.

## Classes

### PithyxError

The error every failed SDK call rejects with. It carries the problem's fields, so an app branches on `code` and
translates it itself; `message` is the English `detail`, or the code when there is none.

#### Example

```ts
try {
  await app.storage.set('draft', draft);
} catch (error) {
  if (error instanceof PithyxError && error.code === 'app.storage.too_large') {
    showTooLarge();
  } else {
    await app.ui.showError(error);
  }
}
```

#### Extends

- `Error`

#### Implements

- [`Problem`](#problem)

#### Constructors

##### Constructor

```ts
new PithyxError(problem): PithyxError;
```

An error from a problem, as the SDK builds it from a desktop or daemon answer.

###### Parameters

| Parameter | Type                  | Description                                        |
| --------- | --------------------- | -------------------------------------------------- |
| `problem` | [`Problem`](#problem) | The problem's code, params, detail and request id. |

###### Returns

[`PithyxError`](#pithyxerror)

###### Overrides

```ts
Error.constructor;
```

#### Properties

##### code

```ts
readonly code: string;
```

Stable code, `area.object.reason`, for example [`fs.entry.not_found`](https://pithyx.org/docs/reference/errors/#fs.entry.not_found).

###### Implementation of

[`Problem`](#problem).[`code`](#code)

##### params

```ts
readonly params: Record<string, unknown>;
```

Values for the translated message, for example `{ permission: 'files.read' }`.

###### Implementation of

[`Problem`](#problem).[`params`](#params)

##### detail?

```ts
readonly optional detail?: string;
```

English fallback text.

###### Implementation of

[`Problem`](#problem).[`detail`](#detail)

##### requestId?

```ts
readonly optional requestId?: string;
```

The request id for support, when the daemon was involved.

###### Implementation of

[`Problem`](#problem).[`requestId`](#requestid)

#### Methods

##### toProblem()

```ts
toProblem(): Problem;
```

The plain problem, for sending it over a transport.

###### Returns

[`Problem`](#problem)

The problem without the `Error` parts.

## Interfaces

### Problem

A problem as it travels between desktop and app: RFC 9457 fields the Pithyx API uses.

#### Properties

##### code

```ts
code: string;
```

Stable code, `area.object.reason`.

##### params

```ts
params: Record<string, unknown>;
```

Values for the translated message.

##### detail?

```ts
optional detail?: string;
```

English fallback text.

##### requestId?

```ts
optional requestId?: string;
```

The request id for support, when the daemon was involved.

## Type Aliases

### SdkErrorCode

```ts
type SdkErrorCode = (typeof sdkErrorCodes)[number];
```

A code of the SDK's own transport errors, translated under `errors.sdk.*`.

## Variables

### sdkErrorCodes

```ts
const sdkErrorCodes: readonly [
  'sdk.method.unknown',
  'sdk.request.invalid',
  'sdk.request.timeout',
  'sdk.transport.closed',
  'sdk.protocol.unsupported',
  'sdk.transfer.cancelled',
  'sdk.backend.endpoint_unknown',
  'sdk.backend.unreachable',
];
```

Codes the SDK itself can produce. Codes of the daemon API come through unchanged and are strings as well.

## Functions

### isProblem()

```ts
function isProblem(value): value is Problem;
```

Whether a value has the shape of a problem (RFC 9457 fields `code` and `params`).

#### Parameters

| Parameter | Type      | Description                                                     |
| --------- | --------- | --------------------------------------------------------------- |
| `value`   | `unknown` | Anything, for example a caught error or a parsed response body. |

#### Returns

`value is Problem`

Whether `value.code` is a string and `value.params` an object.
