LedeWire SDK API Reference
    Preparing search index...

    Class ForbiddenError

    Thrown when the authenticated user does not have permission to perform the requested operation.

    Common cause — merchant login with the wrong account role: POST /v1/auth/merchant/login/email and POST /v1/auth/merchant/login/google return 403 Forbidden (not 401) when the credentials are valid but the account has no merchant store associations (e.g. a buyer account used on the merchant endpoint). The err.message will be: "This account does not have merchant access. Use a merchant or owner account."

    Use a different account or ask a store owner to add your account as a member.

    // Browser
    import { ForbiddenError, AuthError } from '@ledewire/browser'

    try {
    await lw.auth.loginWithGoogle({ id_token })
    } catch (err) {
    if (err instanceof ForbiddenError) {
    // Credentials were valid but account lacks the required role.
    console.error('Access denied:', err.message)
    } else if (err instanceof AuthError) {
    // Bad credentials or expired token — re-authenticate.
    console.error('Authentication failed:', err.message)
    }
    }
    // Node
    import { ForbiddenError, AuthError } from '@ledewire/node'

    try {
    await client.merchant.auth.loginWithGoogle({ id_token })
    } catch (err) {
    if (err instanceof ForbiddenError) {
    // Credentials were valid but account has no merchant store access.
    // err.message → "This account does not have merchant access. Use a merchant or owner account."
    console.error('Wrong account role:', err.message)
    } else if (err instanceof AuthError) {
    // Bad credentials or expired token — re-authenticate.
    console.error('Authentication failed:', err.message)
    }
    }

    Hierarchy (View Summary)

    Index
    • Parameters

      • message: string
      • Optionalcode: number
      • Optionaltype: ErrorTypeValue
      • Optionaldetails: Record<string, unknown>
      • OptionalretryAfter: number

      Returns ForbiddenError

    code: number | undefined

    Machine-readable error code from the API error body, if present.

    details: Readonly<Record<string, unknown>> | undefined

    Extra top-level fields from the API error response body, excluding error itself. For example, a selection_too_large refusal from POST /v1/acquisitions (422) carries maximum and submitted alongside error. undefined when the body carried no other top-level fields, which is the common case.

    retryAfter: number | undefined

    Seconds to wait before retrying, from the response's Retry-After header. undefined when the response carried no usable header. Present on rate-limit (429) and busy (503) refusals, so a caller can back off without guessing.

    statusCode: number

    HTTP status code returned by the API (e.g. 400, 401, 404, 422).

    type: ErrorTypeValue | undefined

    Machine-readable reason from the API error body's error.type, if present. See ErrorType for the documented values and how to branch on them — the API may emit other values it hasn't documented yet, which still land here as a plain string rather than being dropped.

    brand: string

    Class-identity brand used for cross-bundle instanceof (see [Symbol.hasInstance]). Hardcoded per class — never derived from constructor.name or this.name, either of which a minifier can rewrite, silently breaking the brand match.

    • Makes err instanceof LedewireError (and every subclass below) true even when err was constructed by a different bundled copy of this module. Each published package (@ledewire/node, @ledewire/browser, @ledewire/x402-client) bundles its own copy of @ledewire/core via tsup, so the classes are distinct objects with unrelated prototypes — the plain prototype-chain check instanceof normally does would fail.

      Falls back to the brand list every instance carries under a Symbol.for('@ledewire/error-brands') key (collected from the brand static along the constructing class's prototype chain): true when the ordinary check passes, OR the instance's brand list includes this class's own brand.

      Parameters

      • instance: unknown

      Returns boolean