UNPKG

@tailor-platform/shopify

Version:

Shopify Admin API client with Tailor Platform integration

265 lines (260 loc) 15.3 kB
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 };