@tailor-platform/shopify
Version:
Shopify Admin API client with Tailor Platform integration
265 lines (260 loc) • 15.3 kB
TypeScript
interface AdminApiClientConfig {
storeDomain: string;
apiVersion: string;
accessToken: string;
}
interface GraphQLError {
message: string;
extensions?: Record<string, unknown>;
path?: (string | number)[];
locations?: {
line: number;
column: number;
}[];
}
interface GraphQLResponse<TData = unknown> {
data?: TData;
errors?: GraphQLError[];
extensions?: {
cost?: {
requestedQueryCost: number;
actualQueryCost: number;
throttleStatus: {
maximumAvailable: number;
currentlyAvailable: number;
restoreRate: number;
};
};
[key: string]: unknown;
};
}
interface AdminApiClientRequestOptions<TVariables = Record<string, unknown>> {
variables?: TVariables;
headers?: Record<string, string>;
}
interface AdminApiClient {
request: <TData = unknown, TVariables = Record<string, unknown>>(operation: string | TypedGraphQLDocument<TData, TVariables>, options?: AdminApiClientRequestOptions<TVariables>) => Promise<GraphQLResponse<TData>>;
}
/**
* Type-safe GraphQL document type
* @template TData - The expected response data type
* @template TVariables - The expected variables type
*/
interface TypedGraphQLDocument<TData = unknown, TVariables = Record<string, unknown>> {
readonly query: string;
readonly __types?: {
data: TData;
variables: TVariables;
};
}
/**
* Type helper for GraphQL operations with typed variables and responses.
*
* @template TData - The expected response data type
* @template TVariables - The expected variables type
*
* @example
* const query = gql<ProductData, ProductVariables>`
* query GetProduct($id: ID!) {
* product(id: $id) {
* id
* title
* }
* }
* `;
*
* // Then use with client.request:
* const { data } = await client.request(query, { variables });
* // TypeScript will infer ProductData and ProductVariables from the query
*/
declare function gql<TData = unknown, TVariables = Record<string, unknown>>(strings: TemplateStringsArray, ...values: unknown[]): TypedGraphQLDocument<TData, TVariables>;
declare function createAdminApiClient(config: AdminApiClientConfig): AdminApiClient;
declare class ShopifyApiError extends Error {
errors: unknown[] | undefined;
extensions: unknown;
constructor(message: string, errors?: unknown[], extensions?: unknown);
}
declare class NetworkError extends Error {
statusCode: number | undefined;
response: Response | undefined;
constructor(message: string, statusCode?: number, response?: Response);
}
declare class ConfigurationError extends Error {
constructor(message: string);
}
/**
* Available Shopify API versions
* @see https://shopify.dev/docs/api/usage/versioning
*
* Note: Shopify releases new API versions quarterly (January, April, July, October)
* Each stable version is supported for a minimum of 12 months.
* Versions older than 2023-10 may no longer be supported.
*/
declare const ApiVersion: {
readonly October25: "2025-10";
readonly July25: "2025-07";
readonly April25: "2025-04";
readonly January25: "2025-01";
readonly October24: "2024-10";
readonly July24: "2024-07";
readonly April24: "2024-04";
readonly January24: "2024-01";
readonly October23: "2023-10";
readonly Unstable: "unstable";
};
type ApiVersionValue = (typeof ApiVersion)[keyof typeof ApiVersion];
/**
* Latest stable API version
*/
declare const LATEST_API_VERSION: "2025-10";
/**
* API version aliases for convenience
*/
declare const API_VERSION_ALIASES: {
readonly October25: "2025-10";
readonly July25: "2025-07";
readonly April25: "2025-04";
readonly January25: "2025-01";
readonly October24: "2024-10";
readonly July24: "2024-07";
readonly April24: "2024-04";
readonly January24: "2024-01";
readonly October23: "2023-10";
readonly Unstable: "unstable";
readonly latest: "2025-10";
};
type ApiVersionAlias = (typeof API_VERSION_ALIASES)[keyof typeof API_VERSION_ALIASES];
declare const API_VERSIONS: {
readonly October25: "2025-10";
readonly July25: "2025-07";
readonly April25: "2025-04";
readonly January25: "2025-01";
readonly October24: "2024-10";
readonly July24: "2024-07";
readonly April24: "2024-04";
readonly January24: "2024-01";
readonly October23: "2023-10";
readonly Unstable: "unstable";
};
/**
* Webhook topic constants mapping GraphQL enum values to event names
* @see https://shopify.dev/docs/api/admin-graphql/unstable/enums/WebhookSubscriptionTopic
*/
declare const WebhookTopic: {
readonly APP_UNINSTALLED: "app/uninstalled";
readonly APP_SUBSCRIPTIONS_UPDATE: "app_subscriptions/update";
readonly APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT: "app_subscriptions/approaching_capped_amount";
readonly CARTS_CREATE: "carts/create";
readonly CARTS_UPDATE: "carts/update";
readonly CHECKOUTS_CREATE: "checkouts/create";
readonly CHECKOUTS_UPDATE: "checkouts/update";
readonly CHECKOUTS_DELETE: "checkouts/delete";
readonly COLLECTIONS_CREATE: "collections/create";
readonly COLLECTIONS_UPDATE: "collections/update";
readonly COLLECTIONS_DELETE: "collections/delete";
readonly CUSTOMERS_CREATE: "customers/create";
readonly CUSTOMERS_UPDATE: "customers/update";
readonly CUSTOMERS_DELETE: "customers/delete";
readonly CUSTOMERS_DISABLE: "customers/disable";
readonly CUSTOMERS_ENABLE: "customers/enable";
readonly CUSTOMERS_DATA_REQUEST: "customers/data_request";
readonly CUSTOMERS_REDACT: "customers/redact";
readonly CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE: "customers/email_marketing_consent/update";
readonly CUSTOMER_GROUPS_CREATE: "customer_groups/create";
readonly CUSTOMER_GROUPS_UPDATE: "customer_groups/update";
readonly CUSTOMER_GROUPS_DELETE: "customer_groups/delete";
readonly CUSTOMER_PAYMENT_METHODS_CREATE: "customer_payment_methods/create";
readonly CUSTOMER_PAYMENT_METHODS_UPDATE: "customer_payment_methods/update";
readonly CUSTOMER_PAYMENT_METHODS_REVOKE: "customer_payment_methods/revoke";
readonly DISPUTES_CREATE: "disputes/create";
readonly DISPUTES_UPDATE: "disputes/update";
readonly DRAFT_ORDERS_CREATE: "draft_orders/create";
readonly DRAFT_ORDERS_UPDATE: "draft_orders/update";
readonly DRAFT_ORDERS_DELETE: "draft_orders/delete";
readonly FULFILLMENTS_CREATE: "fulfillments/create";
readonly FULFILLMENTS_UPDATE: "fulfillments/update";
readonly FULFILLMENT_EVENTS_CREATE: "fulfillment_events/create";
readonly FULFILLMENT_EVENTS_DELETE: "fulfillment_events/delete";
readonly FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED: "fulfillment_orders/cancellation_request_accepted";
readonly FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED: "fulfillment_orders/cancellation_request_rejected";
readonly FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED: "fulfillment_orders/cancellation_request_submitted";
readonly FULFILLMENT_ORDERS_CANCELLED: "fulfillment_orders/cancelled";
readonly FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED: "fulfillment_orders/fulfillment_request_accepted";
readonly FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED: "fulfillment_orders/fulfillment_request_rejected";
readonly FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED: "fulfillment_orders/fulfillment_request_submitted";
readonly FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE: "fulfillment_orders/fulfillment_service_failed_to_complete";
readonly FULFILLMENT_ORDERS_IN_PROGRESS: "fulfillment_orders/in_progress";
readonly FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY: "fulfillment_orders/line_items_prepared_for_local_delivery";
readonly FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP: "fulfillment_orders/line_items_prepared_for_pickup";
readonly FULFILLMENT_ORDERS_MOVED: "fulfillment_orders/moved";
readonly FULFILLMENT_ORDERS_OPEN: "fulfillment_orders/open";
readonly FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE: "fulfillment_orders/order_routing_complete";
readonly FULFILLMENT_ORDERS_PLACED_ON_HOLD: "fulfillment_orders/placed_on_hold";
readonly FULFILLMENT_ORDERS_READY_FOR_PICKUP: "fulfillment_orders/ready_for_pickup";
readonly FULFILLMENT_ORDERS_RELEASED_FROM_HOLD: "fulfillment_orders/released_from_hold";
readonly FULFILLMENT_ORDERS_RESCHEDULED: "fulfillment_orders/rescheduled";
readonly FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY: "fulfillment_orders/scheduled_fulfillment_order_ready";
readonly INVENTORY_ITEMS_CREATE: "inventory_items/create";
readonly INVENTORY_ITEMS_UPDATE: "inventory_items/update";
readonly INVENTORY_ITEMS_DELETE: "inventory_items/delete";
readonly INVENTORY_LEVELS_CONNECT: "inventory_levels/connect";
readonly INVENTORY_LEVELS_UPDATE: "inventory_levels/update";
readonly INVENTORY_LEVELS_DISCONNECT: "inventory_levels/disconnect";
readonly LOCATIONS_CREATE: "locations/create";
readonly LOCATIONS_UPDATE: "locations/update";
readonly LOCATIONS_DELETE: "locations/delete";
readonly LOCATIONS_ACTIVATE: "locations/activate";
readonly LOCATIONS_DEACTIVATE: "locations/deactivate";
readonly ORDERS_CREATE: "orders/create";
readonly ORDERS_UPDATE: "orders/update";
readonly ORDERS_DELETE: "orders/delete";
readonly ORDERS_CANCELLED: "orders/cancelled";
readonly ORDERS_EDITED: "orders/edited";
readonly ORDERS_FULFILLED: "orders/fulfilled";
readonly ORDERS_PAID: "orders/paid";
readonly ORDERS_PARTIALLY_FULFILLED: "orders/partially_fulfilled";
readonly ORDER_TRANSACTIONS_CREATE: "order_transactions/create";
readonly PRODUCTS_CREATE: "products/create";
readonly PRODUCTS_UPDATE: "products/update";
readonly PRODUCTS_DELETE: "products/delete";
readonly PRODUCT_LISTINGS_ADD: "product_listings/add";
readonly PRODUCT_LISTINGS_UPDATE: "product_listings/update";
readonly PRODUCT_LISTINGS_REMOVE: "product_listings/remove";
readonly PRODUCT_FEEDS_CREATE: "product_feeds/create";
readonly PRODUCT_FEEDS_UPDATE: "product_feeds/update";
readonly REFUNDS_CREATE: "refunds/create";
readonly SHOP_UPDATE: "shop/update";
readonly SHOP_REDACT: "shop/redact";
readonly THEMES_CREATE: "themes/create";
readonly THEMES_UPDATE: "themes/update";
readonly THEMES_DELETE: "themes/delete";
readonly THEMES_PUBLISH: "themes/publish";
readonly SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS: "subscription_billing_attempts/success";
readonly SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE: "subscription_billing_attempts/failure";
readonly SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED: "subscription_billing_attempts/challenged";
readonly SUBSCRIPTION_CONTRACTS_CREATE: "subscription_contracts/create";
readonly SUBSCRIPTION_CONTRACTS_UPDATE: "subscription_contracts/update";
readonly TENDER_TRANSACTIONS_CREATE: "tender_transactions/create";
readonly COMPANY_LOCATIONS_CREATE: "company_locations/create";
readonly COMPANY_LOCATIONS_UPDATE: "company_locations/update";
readonly COMPANY_LOCATIONS_DELETE: "company_locations/delete";
};
type WebhookTopicKey = keyof typeof WebhookTopic;
type WebhookTopicValue = (typeof WebhookTopic)[WebhookTopicKey];
/**
* Reverse mapping from event name to GraphQL enum
*/
declare const WebhookTopicReverse: Record<WebhookTopicValue, "APP_UNINSTALLED" | "APP_SUBSCRIPTIONS_UPDATE" | "APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT" | "CARTS_CREATE" | "CARTS_UPDATE" | "CHECKOUTS_CREATE" | "CHECKOUTS_UPDATE" | "CHECKOUTS_DELETE" | "COLLECTIONS_CREATE" | "COLLECTIONS_UPDATE" | "COLLECTIONS_DELETE" | "CUSTOMERS_CREATE" | "CUSTOMERS_UPDATE" | "CUSTOMERS_DELETE" | "CUSTOMERS_DISABLE" | "CUSTOMERS_ENABLE" | "CUSTOMERS_DATA_REQUEST" | "CUSTOMERS_REDACT" | "CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE" | "CUSTOMER_GROUPS_CREATE" | "CUSTOMER_GROUPS_UPDATE" | "CUSTOMER_GROUPS_DELETE" | "CUSTOMER_PAYMENT_METHODS_CREATE" | "CUSTOMER_PAYMENT_METHODS_UPDATE" | "CUSTOMER_PAYMENT_METHODS_REVOKE" | "DISPUTES_CREATE" | "DISPUTES_UPDATE" | "DRAFT_ORDERS_CREATE" | "DRAFT_ORDERS_UPDATE" | "DRAFT_ORDERS_DELETE" | "FULFILLMENTS_CREATE" | "FULFILLMENTS_UPDATE" | "FULFILLMENT_EVENTS_CREATE" | "FULFILLMENT_EVENTS_DELETE" | "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED" | "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED" | "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED" | "FULFILLMENT_ORDERS_CANCELLED" | "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED" | "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED" | "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED" | "FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE" | "FULFILLMENT_ORDERS_IN_PROGRESS" | "FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY" | "FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP" | "FULFILLMENT_ORDERS_MOVED" | "FULFILLMENT_ORDERS_OPEN" | "FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE" | "FULFILLMENT_ORDERS_PLACED_ON_HOLD" | "FULFILLMENT_ORDERS_READY_FOR_PICKUP" | "FULFILLMENT_ORDERS_RELEASED_FROM_HOLD" | "FULFILLMENT_ORDERS_RESCHEDULED" | "FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY" | "INVENTORY_ITEMS_CREATE" | "INVENTORY_ITEMS_UPDATE" | "INVENTORY_ITEMS_DELETE" | "INVENTORY_LEVELS_CONNECT" | "INVENTORY_LEVELS_UPDATE" | "INVENTORY_LEVELS_DISCONNECT" | "LOCATIONS_CREATE" | "LOCATIONS_UPDATE" | "LOCATIONS_DELETE" | "LOCATIONS_ACTIVATE" | "LOCATIONS_DEACTIVATE" | "ORDERS_CREATE" | "ORDERS_UPDATE" | "ORDERS_DELETE" | "ORDERS_CANCELLED" | "ORDERS_EDITED" | "ORDERS_FULFILLED" | "ORDERS_PAID" | "ORDERS_PARTIALLY_FULFILLED" | "ORDER_TRANSACTIONS_CREATE" | "PRODUCTS_CREATE" | "PRODUCTS_UPDATE" | "PRODUCTS_DELETE" | "PRODUCT_LISTINGS_ADD" | "PRODUCT_LISTINGS_UPDATE" | "PRODUCT_LISTINGS_REMOVE" | "PRODUCT_FEEDS_CREATE" | "PRODUCT_FEEDS_UPDATE" | "REFUNDS_CREATE" | "SHOP_UPDATE" | "SHOP_REDACT" | "THEMES_CREATE" | "THEMES_UPDATE" | "THEMES_DELETE" | "THEMES_PUBLISH" | "SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS" | "SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE" | "SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED" | "SUBSCRIPTION_CONTRACTS_CREATE" | "SUBSCRIPTION_CONTRACTS_UPDATE" | "TENDER_TRANSACTIONS_CREATE" | "COMPANY_LOCATIONS_CREATE" | "COMPANY_LOCATIONS_UPDATE" | "COMPANY_LOCATIONS_DELETE">;
/**
* Helper function to convert GraphQL topic enum to event name
* @example
* getWebhookEventName('ORDERS_CREATE') // returns 'orders/create'
*/
declare function getWebhookEventName(topic: WebhookTopicKey): WebhookTopicValue;
/**
* Helper function to convert event name to GraphQL topic enum
* @example
* getWebhookTopicEnum('orders/create') // returns 'ORDERS_CREATE'
*/
declare function getWebhookTopicEnum(eventName: WebhookTopicValue): WebhookTopicKey;
export { API_VERSIONS, API_VERSION_ALIASES, type AdminApiClient, type AdminApiClientConfig, type AdminApiClientRequestOptions, ApiVersion, type ApiVersionAlias, type ApiVersionValue, ConfigurationError, type GraphQLError, type GraphQLResponse, LATEST_API_VERSION, NetworkError, ShopifyApiError, type TypedGraphQLDocument, WebhookTopic, type WebhookTopicKey, WebhookTopicReverse, type WebhookTopicValue, createAdminApiClient, getWebhookEventName, getWebhookTopicEnum, gql };