UNPKG

inventora-shopify-admin-api

Version:

Shopify Admin API is a NodeJS library built to help developers easily authenticate and make calls against the Shopify API. It was inspired by and borrows heavily from ShopifySharp.

63 lines (47 loc) 2.1 kB
import { Response } from 'node-fetch'; export type ErrorType1 = { errors: string }; export type ErrorType2 = { errors: { [index:string]: string | string[] } }; export type ErrorType3 = { error: string, error_description: string }; function isType1(err): err is ErrorType1 { return err.errors && (typeof(err.errors) === "string"); } function isType2(err): err is ErrorType2 { return err.errors && (typeof(err.errors) === "object"); } function isType3(err): err is ErrorType3 { return err.error && err.error_description; } export class ShopifyError extends Error { constructor(response: { status: number, statusText: string}, public body: ErrorType1 | ErrorType2 | ErrorType3) { super(); this.statusCode = response.status; this.statusText = response.statusText; this.apiRateLimitReached = this.statusCode === 429 /* Too Many Requests */; this.message = `[Shopify Admin API] ${this.statusCode} ${this.statusText}. `; // Errors can be any of the following: // 1. { errors: "some error message"} // 2. { errors: { "order" : "some error message", "customer": [ "some error message" ] } } // 3. { error: "invalid_request", error_description:"The authorization code was not found or was already used" } if (isType1(body)) { this.errors["generic"] = [body.errors]; } else if (isType2(body)) { for (const property in body.errors) { const value = body.errors[property]; this.errors[property] = Array.isArray(value) ? value : [value]; } } else if (isType3(body)) { this.errors[body.error] = [body.error_description]; } } public get isShopifyPrime() { return true; } /** * True when the requesting application has made too many requests and reached Shopify's API rate limit. */ public apiRateLimitReached = false; public statusCode: number; public statusText: string; public errors: { [index: string]: string[] } = {}; } export default ShopifyError;