Error codes
Every error thrown by the SDK is an instance of ArlopassSDKError (or a subclass). Errors carry structured metadata for programmatic handling.
import {
ArlopassSDKError,
ArlopassStateError,
ArlopassTransportError,
ArlopassTimeoutError,
ArlopassProtocolBoundaryError,
ArlopassInvalidStateTransitionError,
} from "@arlopass/web-sdk";
Error hierarchy
// Error class hierarchy
ArlopassSDKError // Base class — all SDK errors extend this
├── ArlopassStateError // Invalid operation for current state
├── ArlopassInvalidStateTransitionError // Illegal state transition
├── ArlopassProtocolBoundaryError // Protocol envelope validation failure
├── ArlopassTransportError // Transport-layer failure (retryable by default)
└── ArlopassTimeoutError // Request timed out (retryable by default)
Error properties
All error subclasses inherit these properties from ArlopassSDKError.
| Prop | Type | Description |
|---|---|---|
message |
string |
Human-readable error description. |
machineCode |
SDKMachineCode |
Stable machine-readable code for programmatic handling. |
reasonCode |
ProtocolReasonCode |
Normalized reason code from the protocol layer. |
retryable |
boolean |
Whether this error can be retried. |
correlationId |
` string | undefined` |
details |
` Record<string, string | number |
cause |
` Error | undefined` |
SDK machine codes
Codes prefixed with ARLOPASS_SDK_ originate in the client SDK.
| Prop | Type | Description |
|---|---|---|
ARLOPASS_SDK_INVALID_STATE_TRANSITION |
SDK |
Attempted an illegal state transition (e.g. connect while already connected). |
ARLOPASS_SDK_INVALID_STATE_OPERATION |
SDK |
Operation not valid in the current state (e.g. chat.send while disconnected). |
ARLOPASS_SDK_MISSING_PROVIDER_SELECTION |
SDK |
Chat operation attempted without selecting a provider first. |
ARLOPASS_SDK_PROTOCOL_VIOLATION |
SDK |
Response envelope failed validation. |
ARLOPASS_SDK_TRANSPORT_ERROR |
SDK |
Transport-level failure (network, serialization, etc.). |
Protocol machine codes
Codes prefixed with ARLOPASS_ or ARLOPASS_PROTOCOL_ originate in the protocol layer or extension.
| Prop | Type | Description |
|---|---|---|
ARLOPASS_AUTH_FAILED |
Protocol |
Authentication failure (invalid credentials). |
ARLOPASS_PERMISSION_DENIED |
Protocol |
Caller lacks permission for the requested operation. |
ARLOPASS_TIMEOUT |
Protocol |
Request timed out. |
ARLOPASS_PROVIDER_UNAVAILABLE |
Protocol |
Selected provider is offline or unreachable. |
ARLOPASS_TRANSIENT_NETWORK |
Protocol |
Transient network error. |
ARLOPASS_POLICY_VIOLATION |
Protocol |
Request blocked by a policy rule. |
ARLOPASS_PROTOCOL_INVALID_ENVELOPE |
Protocol |
Envelope structure is invalid. |
ARLOPASS_PROTOCOL_MISSING_REQUIRED_FIELD |
Protocol |
A required field is missing from the envelope. |
ARLOPASS_PROTOCOL_ENVELOPE_EXPIRED |
Protocol |
Envelope TTL has expired. |
ARLOPASS_PROTOCOL_REPLAY_PRONE_METADATA |
Protocol |
Envelope metadata suggests a replay attack. |
ARLOPASS_PROTOCOL_UNSUPPORTED_VERSION |
Protocol |
Protocol version not supported. |
ARLOPASS_PROTOCOL_UNSUPPORTED_CAPABILITY |
Protocol |
Requested capability not supported. |
Reason codes
Normalized reason codes provide a human-readable classification. The SDK normalizes aliases (e.g. "timeout" → "transport.timeout").
| Prop | Type | Description |
|---|---|---|
allow |
Success |
Operation succeeded. |
auth.invalid |
Auth |
Invalid credentials. |
auth.expired |
Auth |
Credentials have expired. |
permission.denied |
Auth |
Insufficient permissions. |
policy.denied |
Policy |
Blocked by policy. |
provider.unavailable |
Provider |
Provider is offline or unreachable. |
request.invalid |
Request |
Malformed request. |
request.replay_prone |
Request |
Request metadata suggests a replay. |
request.expired |
Request |
Request envelope has expired. |
protocol.unsupported_version |
Protocol |
Protocol version mismatch. |
protocol.unsupported_capability |
Protocol |
Capability not recognized. |
protocol.invalid_envelope |
Protocol |
Envelope validation failed. |
transport.timeout |
Transport |
Operation timed out. |
transport.cancelled |
Transport |
Operation was cancelled (e.g. AbortSignal). |
transport.transient_failure |
Transport |
Temporary network or transport issue. |
Retryable vs non-retryable
Every error has a retryable boolean. Use it to decide whether to surface a retry button or fail permanently.
| Prop | Type | Description |
|---|---|---|
ArlopassTransportError |
retryable: true |
Transport failures are retryable by default. |
ArlopassTimeoutError |
retryable: true |
Timeouts are retryable by default. |
ArlopassStateError |
retryable: false |
State errors indicate logic bugs — not retryable. |
ArlopassInvalidStateTransitionError |
retryable: false |
Invalid transitions are logic bugs — not retryable. |
ArlopassProtocolBoundaryError |
retryable: false |
Protocol violations typically require a code fix. |
if (error instanceof ArlopassSDKError && error.retryable) {
await retry();
}