Skip to content

SDK: errors

View as Markdown

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.

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.

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.

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);
}
}
  • Error
new PithyxError(problem): PithyxError;

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

Parameter Type Description
problem Problem The problem’s code, params, detail and request id.

PithyxError

Error.constructor;
readonly code: string;

Stable code, area.object.reason, for example fs.entry.not_found.

Problem.code

readonly params: Record<string, unknown>;

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

Problem.params

readonly optional detail?: string;

English fallback text.

Problem.detail

readonly optional requestId?: string;

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

Problem.requestId

toProblem(): Problem;

The plain problem, for sending it over a transport.

Problem

The problem without the Error parts.

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

code: string;

Stable code, area.object.reason.

params: Record<string, unknown>;

Values for the translated message.

optional detail?: string;

English fallback text.

optional requestId?: string;

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

type SdkErrorCode = (typeof sdkErrorCodes)[number];

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

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.

function isProblem(value): value is Problem;

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

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

value is Problem

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