# SDK: Fehler

> PithyxError, die Form eines Problems und die Fehlercodes des SDK-Transports.

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

Jeder fehlgeschlagene Aufruf lehnt mit einem `PithyxError` ab. Probleme des Daemons kommen unverändert durch; die Codes `sdk.*` stammen aus der Verbindung zwischen App und Desktop. Jeder Code steht in der [Fehlerreferenz](https://pithyx.org/de/docs/reference/errors/).

Beim Build aus den TSDoc-Kommentaren von @pithyx/sdk 1.0.0-rc.9 erzeugt; der Text unter den Überschriften ist der Kommentar im Quelltext und bleibt Englisch.

## Klassen

### 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.

#### Beispiel

```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);
  }
}
```

#### Erweitert

- `Error`

#### Implementiert

- [`Problem`](#problem)

#### Konstruktoren

##### Konstruktor

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

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

###### Parameter

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

###### Rückgabewert

[`PithyxError`](#pithyxerror)

###### Überschreibt

```ts
Error.constructor;
```

#### Eigenschaften

##### code

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

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

###### Implementierung von

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

##### params

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

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

###### Implementierung von

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

##### detail?

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

English fallback text.

###### Implementierung von

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

##### requestId?

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

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

###### Implementierung von

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

#### Methoden

##### toProblem()

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

The plain problem, for sending it over a transport.

###### Rückgabewert

[`Problem`](#problem)

The problem without the `Error` parts.

## Schnittstellen

### Problem

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

#### Eigenschaften

##### 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.

## Typenaliasse

### SdkErrorCode

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

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

## Variablen

### 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.

## Funktionen

### isProblem()

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

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

#### Parameter

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

#### Rückgabewert

`value is Problem`

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