Skip to main content
Glama
getOrderById.ts5.08 kB
import type { GraphQLClient } from "graphql-request"; import { gql } from "graphql-request"; import { z } from "zod"; // Input schema for getOrderById const GetOrderByIdInputSchema = z.object({ orderId: z.string().min(1) }); type GetOrderByIdInput = z.infer<typeof GetOrderByIdInputSchema>; // Will be initialized in index.ts let shopifyClient: GraphQLClient; const getOrderById = { name: "get-order-by-id", description: "Get a specific order by ID", schema: GetOrderByIdInputSchema, // Add initialize method to set up the GraphQL client initialize(client: GraphQLClient) { shopifyClient = client; }, execute: async (input: GetOrderByIdInput) => { try { const { orderId } = input; const query = gql` query GetOrderById($id: ID!) { order(id: $id) { id name createdAt displayFinancialStatus displayFulfillmentStatus totalPriceSet { shopMoney { amount currencyCode } } subtotalPriceSet { shopMoney { amount currencyCode } } totalShippingPriceSet { shopMoney { amount currencyCode } } totalTaxSet { shopMoney { amount currencyCode } } customer { id firstName lastName email phone } shippingAddress { address1 address2 city provinceCode zip country phone } lineItems(first: 20) { edges { node { id title quantity originalTotalSet { shopMoney { amount currencyCode } } variant { id title sku } } } } tags note metafields(first: 20) { edges { node { id namespace key value type } } } } } `; const variables = { id: orderId }; const data = (await shopifyClient.request(query, variables)) as { order: any; }; if (!data.order) { throw new Error(`Order with ID ${orderId} not found`); } // Extract and format order data const order = data.order; // Format line items const lineItems = order.lineItems.edges.map((lineItemEdge: any) => { const lineItem = lineItemEdge.node; return { id: lineItem.id, title: lineItem.title, quantity: lineItem.quantity, originalTotal: lineItem.originalTotalSet.shopMoney, variant: lineItem.variant ? { id: lineItem.variant.id, title: lineItem.variant.title, sku: lineItem.variant.sku } : null }; }); // Format metafields const metafields = order.metafields.edges.map((metafieldEdge: any) => { const metafield = metafieldEdge.node; return { id: metafield.id, namespace: metafield.namespace, key: metafield.key, value: metafield.value, type: metafield.type }; }); const formattedOrder = { id: order.id, name: order.name, createdAt: order.createdAt, financialStatus: order.displayFinancialStatus, fulfillmentStatus: order.displayFulfillmentStatus, totalPrice: order.totalPriceSet.shopMoney, subtotalPrice: order.subtotalPriceSet.shopMoney, totalShippingPrice: order.totalShippingPriceSet.shopMoney, totalTax: order.totalTaxSet.shopMoney, customer: order.customer ? { id: order.customer.id, firstName: order.customer.firstName, lastName: order.customer.lastName, email: order.customer.email, phone: order.customer.phone } : null, shippingAddress: order.shippingAddress, lineItems, tags: order.tags, note: order.note, metafields }; return { order: formattedOrder }; } catch (error) { console.error("Error fetching order by ID:", error); throw new Error( `Failed to fetch order: ${ error instanceof Error ? error.message : String(error) }` ); } } }; export { getOrderById };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GeLi2001/shopify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server