ts / dist / cjs / errors.js
472 words
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"use strict";
/**
 * Every failure raised by this client is a plain `Error` tagged with a
 * `kind`, so callers narrow with the type guards below (or on `kind`):
 *
 *   try { await domains.check(client, 'x.ro') }
 *   catch (e) { if (isApiError(e) && e.status === 402) ... }
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.isUploadFailedError = exports.isJobFailedError = exports.isTimeoutError = exports.isDomainDeniedError = exports.isConfigError = exports.isTransportError = exports.isApiError = exports.isIrdError = exports.uploadFailed = exports.jobFailed = exports.timeoutError = exports.domainDenied = exports.configError = exports.transportError = exports.apiError = void 0;
const NAMES = {
    api: 'IrdApiError',
    transport: 'IrdTransportError',
    config: 'IrdConfigError',
    domainDenied: 'IrdDomainDeniedError',
    timeout: 'IrdTimeoutError',
    jobFailed: 'IrdJobFailedError',
    uploadFailed: 'IrdUploadFailedError',
};
const tagged = (message, fields, cause) => {
    const error = cause === undefined ? new Error(message) : new Error(message, { cause });
    return Object.assign(error, { name: NAMES[fields.kind] }, fields);
};
/** Error returned by the ird API (non-2xx HTTP status). */
const apiError = (message, code, status, response) => tagged(message, { kind: 'api', code, status, response });
exports.apiError = apiError;
/** Low-level failure talking to the API (connection failure, non-JSON body, ...). */
const transportError = (message, detail, cause) => tagged(message, { kind: 'transport', detail }, cause);
exports.transportError = transportError;
/** Invalid client configuration or call arguments. */
const configError = (message, detail) => tagged(message, { kind: 'config', detail });
exports.configError = configError;
/**
 * Client-side domain gate violation: the operation targets a domain that the
 * client's deniedDomains/allowedDomains configuration forbids. Thrown before
 * any request reaches the API.
 */
const domainDenied = (domain, matchedPattern, op) => tagged(`Domain gate: ${domain ?? '(unknown domain)'} may not be touched by ${op}`, {
    kind: 'domainDenied',
    domain,
    matchedPattern,
    op,
});
exports.domainDenied = domainDenied;
/** A polling helper ran past its deadline; `last` is the last response seen. */
const timeoutError = (message, last) => tagged(message, { kind: 'timeout', last });
exports.timeoutError = timeoutError;
/** An async job reached a terminal failed status. */
const jobFailed = (message, job) => tagged(message, { kind: 'jobFailed', job });
exports.jobFailed = jobFailed;
/** An IPFS upload failed or expired. */
const uploadFailed = (message, upload) => tagged(message, { kind: 'uploadFailed', upload });
exports.uploadFailed = uploadFailed;
const KINDS = new Set(Object.keys(NAMES));
const isIrdError = (e) => e instanceof Error && KINDS.has(e.kind);
exports.isIrdError = isIrdError;
const isApiError = (e) => (0, exports.isIrdError)(e) && e.kind === 'api';
exports.isApiError = isApiError;
const isTransportError = (e) => (0, exports.isIrdError)(e) && e.kind === 'transport';
exports.isTransportError = isTransportError;
const isConfigError = (e) => (0, exports.isIrdError)(e) && e.kind === 'config';
exports.isConfigError = isConfigError;
const isDomainDeniedError = (e) => (0, exports.isIrdError)(e) && e.kind === 'domainDenied';
exports.isDomainDeniedError = isDomainDeniedError;
const isTimeoutError = (e) => (0, exports.isIrdError)(e) && e.kind === 'timeout';
exports.isTimeoutError = isTimeoutError;
const isJobFailedError = (e) => (0, exports.isIrdError)(e) && e.kind === 'jobFailed';
exports.isJobFailedError = isJobFailedError;
const isUploadFailedError = (e) => (0, exports.isIrdError)(e) && e.kind === 'uploadFailed';
exports.isUploadFailedError = isUploadFailedError;

static mirror of HEAD · about · clone: git clone https://ird.cod-sursa.ro/ts.git