@ehrenkind/shopify-lib 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated-api-types/2025-04/admin.generated.d.ts +74 -0
- package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +1 -1
- package/dist/generated-api-types/2025-04/admin.types.d.ts +4 -4
- package/dist/generated-api-types/2025-04/admin.types.d.ts.map +1 -1
- package/dist/generated-api-types/2025-04/admin.types.js +4 -4
- package/dist/generated-api-types/2025-04/admin.types.js.map +1 -1
- package/dist/index.cjs +365 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +256 -10
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +361 -38
- package/dist/index.mjs.map +1 -1
- package/dist/queries/orders/getOrderById.d.ts +136 -0
- package/dist/queries/orders/getOrderById.d.ts.map +1 -0
- package/dist/queries/orders/getOrderById.js +126 -0
- package/dist/queries/orders/getOrderById.js.map +1 -0
- package/dist/queries/orders/getOrderById.mock.d.ts +82 -0
- package/dist/queries/orders/getOrderById.mock.d.ts.map +1 -0
- package/dist/queries/orders/getOrderById.mock.js +204 -0
- package/dist/queries/orders/getOrderById.mock.js.map +1 -0
- package/dist/queries/orders/getOrderById.queries.d.ts +3 -0
- package/dist/queries/orders/getOrderById.queries.d.ts.map +1 -0
- package/dist/queries/orders/getOrderById.queries.js +174 -0
- package/dist/queries/orders/getOrderById.queries.js.map +1 -0
- package/dist/queries/orders/getOrderById.test.d.ts +2 -0
- package/dist/queries/orders/getOrderById.test.d.ts.map +1 -0
- package/dist/queries/orders/getOrderById.test.js +46 -0
- package/dist/queries/orders/getOrderById.test.js.map +1 -0
- package/dist/queries/orders/getOrderByName.d.ts +5 -5
- package/dist/queries/orders/getOrderByName.d.ts.map +1 -1
- package/dist/queries/orders/getOrderByName.js +1 -1
- package/dist/queries/orders/getOrderByName.js.map +1 -1
- package/dist/queries/orders/getOrderByName.test.js +6 -4
- package/dist/queries/orders/getOrderByName.test.js.map +1 -1
- package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts +12 -0
- package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts.map +1 -0
- package/dist/queries/orders/getOrderPaymentDetails.mock.js +24 -0
- package/dist/queries/orders/getOrderPaymentDetails.mock.js.map +1 -0
- package/dist/queries/orders/getOrderPaymentDetails.test.d.ts +2 -0
- package/dist/queries/orders/getOrderPaymentDetails.test.d.ts.map +1 -0
- package/dist/queries/orders/getOrderPaymentDetails.test.js +19 -0
- package/dist/queries/orders/getOrderPaymentDetails.test.js.map +1 -0
- package/dist/utils/mswHandlers.d.ts.map +1 -1
- package/dist/utils/mswHandlers.js +5 -0
- package/dist/utils/mswHandlers.js.map +1 -1
- package/dist/utils/parseGid.d.ts +9 -0
- package/dist/utils/parseGid.d.ts.map +1 -0
- package/dist/utils/parseGid.js +12 -0
- package/dist/utils/parseGid.js.map +1 -0
- package/dist/utils/parseGid.test.d.ts +2 -0
- package/dist/utils/parseGid.test.d.ts.map +1 -0
- package/dist/utils/parseGid.test.js +26 -0
- package/dist/utils/parseGid.test.js.map +1 -0
- package/package.json +6 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/mutations/customers/deleteCustomerById.ts","../src/utils/logger.ts","../src/utils/shopifyClient.ts","../src/utils/shopifyFetch.ts","../src/utils/zod.ts","../src/queries/orders/getOrderByName.ts","../src/queries/orders/getOrderByName.queries.ts","../src/queries/productVariants/getLeanProductVariants.ts","../src/queries/orders/getOrderPaymentDetails.ts","../src/queries/orders/getOrderPaymentDetails.queries.ts"],"sourcesContent":["export { deleteCustomerById } from './mutations/customers/deleteCustomerById.js'\nexport { getOrderByName } from './queries/orders/getOrderByName.js'\nexport { getLeanProductVariants } from './queries/productVariants/getLeanProductVariants.js'\nexport { getOrderPaymentDetailsById } from './queries/orders/getOrderPaymentDetails.js'\n","import z from 'zod'\nimport type {\n CustomerDeleteMutation,\n CustomerDeleteMutationVariables,\n} from '../../generated-api-types/2025-04/admin.generated'\nimport { gql } from '../../utils/logger'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch'\nimport { returnOutputParsed } from '../../utils/zod'\n\nexport const DeleteCustomerByIdReturn = z.string().nullable()\n\ntype SingleNode = { deletedCustomerId: string | null }\n\nexport async function deleteCustomerById(\n customerId: string,\n): Promise<z.infer<typeof DeleteCustomerByIdReturn>> {\n const mutation = gql`#graphql\n mutation customerDelete($input: CustomerDeleteInput!) {\n customerDelete(input: $input) {\n deletedCustomerId\n userErrors {\n field\n message\n }\n }\n }\n `\n\n const variables: CustomerDeleteMutationVariables = {\n input: { id: customerId },\n }\n\n const response = await fetchShopifyGraphql<\n SingleNode,\n CustomerDeleteMutation\n >({\n query: mutation,\n variables,\n dataExtractor: (data: CustomerDeleteMutation) => {\n if (!data.customerDelete) {\n throw new Error(\"GraphQL response missing 'customerDelete' field\")\n }\n return {\n nodes: [\n { deletedCustomerId: data.customerDelete.deletedCustomerId ?? null },\n ],\n userErrors: data.customerDelete.userErrors,\n }\n },\n })\n\n return returnOutputParsed(\n response[0]?.deletedCustomerId ?? null,\n DeleteCustomerByIdReturn,\n )\n}\n","const { env } = process\n\nexport const gql = String.raw\n\nconst logLevels = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n} as const\n\ntype LogLevelName = keyof typeof logLevels\n\nfunction getLogLevel(\n nodeEnv: string | undefined,\n logLevelEnv: string | undefined,\n): LogLevelName {\n if (logLevelEnv && logLevelEnv in logLevels) {\n return logLevelEnv as LogLevelName\n }\n\n if (nodeEnv === 'test') {\n return 'silent'\n }\n\n if (nodeEnv === 'production') {\n return 'info'\n }\n return 'debug'\n}\n\nexport const activeLogLevelName = getLogLevel(env.NODE_ENV, env.LOG_LEVEL)\nconst activeLogLevelValue = logLevels[activeLogLevelName]\n\nexport const logger = {\n debug: (...args: unknown[]) => {\n if (logLevels.debug <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.debug(...args)\n }\n },\n info: (...args: unknown[]) => {\n if (logLevels.info <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.info(...args)\n }\n },\n warn: (...args: unknown[]) => {\n if (logLevels.warn <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.warn(...args)\n }\n },\n error: (...args: unknown[]) => {\n if (logLevels.error <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.error(...args)\n }\n },\n}\n","import {\n ApiVersion,\n type GraphqlClient,\n LogSeverity,\n Session,\n shopifyApi,\n} from '@shopify/shopify-api'\nimport '@shopify/shopify-api/adapters/node'\nimport dotenv from 'dotenv'\nimport { z } from 'zod'\nimport { activeLogLevelName, logger } from './logger.js'\n\n// https://shopify.dev/docs/api/admin-graphql/2025-04/\nexport const SHOPIFY_API_VERSION = ApiVersion.April25\n\ndotenv.config()\n\nconst envSchema = z.object({\n SHOPIFY_API_KEY: z.string({\n required_error: 'SHOPIFY_API_KEY is required',\n }),\n SHOPIFY_API_SECRET: z.string({\n required_error: 'SHOPIFY_API_SECRET is required',\n }),\n SHOPIFY_API_HOSTNAME: z.string({\n required_error: 'SHOPIFY_API_HOSTNAME is required',\n }),\n SHOPIFY_ACCESS_TOKEN: z.string({\n required_error: 'SHOPIFY_ACCESS_TOKEN is required',\n }),\n NODE_ENV: z\n .enum(['development', 'production', 'test'])\n .default('development'),\n})\n\nconst mapLogLevelToShopifySeverity = (level: string): LogSeverity => {\n switch (level) {\n case 'silent':\n return LogSeverity.Error\n case 'debug':\n return LogSeverity.Debug\n case 'info':\n return LogSeverity.Info\n case 'warn':\n return LogSeverity.Warning\n case 'error':\n return LogSeverity.Error\n default:\n return LogSeverity.Info\n }\n}\n\nlet shopifyGraphqlClient: GraphqlClient\n\ntry {\n // biome-ignore lint/nursery/noProcessEnv: <explanation>\n const env = envSchema.parse(process.env)\n\n const shopify = shopifyApi({\n apiKey: env.SHOPIFY_API_KEY,\n apiSecretKey: env.SHOPIFY_API_SECRET,\n hostName: env.SHOPIFY_API_HOSTNAME,\n apiVersion: SHOPIFY_API_VERSION,\n isEmbeddedApp: false,\n logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },\n future: {\n customerAddressDefaultFix: true,\n lineItemBilling: true,\n unstable_managedPricingSupport: false,\n },\n })\n\n const shopifySession = new Session({\n id: `custom-session-${env.SHOPIFY_API_HOSTNAME}`,\n shop: env.SHOPIFY_API_HOSTNAME,\n state: 'authenticated',\n isOnline: true,\n accessToken: env.SHOPIFY_ACCESS_TOKEN,\n })\n\n shopifyGraphqlClient = new shopify.clients.Graphql({\n session: shopifySession,\n })\n\n logger.info('Shopify API client initialized successfully.')\n} catch (error) {\n if (error instanceof z.ZodError) {\n const msg = JSON.stringify(error.format(), null, 2)\n logger.error(msg)\n } else {\n logger.error('Failed to initialize Shopify API client:', error)\n }\n throw error\n}\n\nexport { shopifyGraphqlClient as shopifyClient }\n","import { logger } from './logger.js'\nimport { shopifyClient } from './shopifyClient.js'\n\nexport function convertIdIntoGid(\n id: bigint,\n type: 'Order' | 'Customer',\n): string {\n return `gid://shopify/${type}/${id}`\n}\n\ninterface PageInfo {\n hasNextPage: boolean\n endCursor?: string | null | undefined\n}\n\ninterface ShopifyErrorWithMessage {\n message?: string\n [key: string]: unknown\n}\n\ntype TExtractorFunctionType<TResultNode, TPageData> = (pageData: TPageData) => {\n nodes: TResultNode[]\n pageInfo?: PageInfo\n userErrors?: { message?: string }[]\n}\n\nexport async function fetchShopifyGraphql<TResultNode, TPageData>(params: {\n query: string\n variables: Record<string, unknown>\n dataExtractor?: TExtractorFunctionType<TResultNode, TPageData>\n fetchAllPages?: boolean\n}): Promise<TResultNode[]>\nexport async function fetchShopifyGraphql<TReturnType>(params: {\n query: string\n variables: Record<string, unknown>\n}): Promise<TReturnType>\nexport async function fetchShopifyGraphql<\n TResultNode,\n TPageData,\n TReturnType,\n>(params: {\n query: string\n variables: Record<string, unknown>\n dataExtractor?: TExtractorFunctionType<TResultNode, TPageData>\n fetchAllPages?: boolean\n}): Promise<TResultNode[] | TReturnType> {\n const {\n query,\n variables: initialVariables,\n dataExtractor,\n fetchAllPages = false,\n } = params\n\n let currentVariables = { ...initialVariables }\n\n if (!dataExtractor) {\n return makeRequest<NonNullable<TReturnType>>(query, currentVariables)\n }\n\n const allNodes: TResultNode[] = []\n let hasNextLoop = true\n\n do {\n const response = await makeRequest<TPageData>(query, currentVariables)\n const { nodes, pageInfo, userErrors } = dataExtractor(response)\n\n // Handle Shopify mutation userErrors pattern\n if (Array.isArray(userErrors) && userErrors.length > 0) {\n const errorMessages = userErrors\n .map((e) => e.message || JSON.stringify(e))\n .join('\\n')\n logger.error('Shopify mutation userErrors:', errorMessages)\n throw new Error(`Shopify mutation userErrors: ${errorMessages}`)\n }\n\n allNodes.push(...nodes)\n\n hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false\n if (hasNextLoop && pageInfo?.endCursor) {\n currentVariables = {\n ...currentVariables,\n after: pageInfo.endCursor,\n }\n }\n } while (hasNextLoop)\n\n return allNodes\n}\n\nasync function makeRequest<TReturnDataType>(\n query: string,\n variables: Record<string, unknown>,\n): Promise<NonNullable<TReturnDataType>> {\n type ShopifyRequestErrorType = {\n errors?: ShopifyErrorWithMessage | ShopifyErrorWithMessage[]\n }\n\n const response = (await shopifyClient.request<TReturnDataType>(query, {\n variables,\n })) as { data?: TReturnDataType } & ShopifyRequestErrorType\n\n if (response.errors) {\n let errorMessages = 'GraphQL query failed.'\n const errors = response.errors\n if (Array.isArray(errors)) {\n errorMessages = errors\n .map((e: ShopifyErrorWithMessage) => e.message || JSON.stringify(e))\n .join('\\n')\n } else if (\n typeof errors === 'object' &&\n errors !== null &&\n 'message' in errors\n ) {\n errorMessages = errors.message || JSON.stringify(errors)\n } else if (typeof errors === 'string') {\n errorMessages = errors\n } else {\n errorMessages = JSON.stringify(errors)\n }\n logger.error('GraphQL query failed:', errorMessages)\n throw new Error(`GraphQL errors: ${errorMessages}`)\n }\n\n if (!response.data) {\n throw new Error('No data in Shopify API response')\n }\n\n return response.data\n}\n","import z from 'zod'\nimport { logger } from './logger.js'\n\nexport async function returnOutputParsed<T>(\n data: unknown,\n Model: z.ZodType<T>,\n) {\n const parsed = await Model.safeParseAsync(data)\n if (!parsed.success) {\n if (parsed.error instanceof z.ZodError) {\n const msg = JSON.stringify(parsed.error.format(), null, 2)\n logger.error(msg)\n } else {\n logger.error('Failed to parse:', parsed.error)\n }\n // throw parsedVariants.error\n throw new Error('Failed to parse product variants')\n }\n logger.info('Parsed data successfully')\n return parsed.data\n}\n","import z from 'zod'\nimport type {\n OrdersByNameFullQuery,\n OrdersByNameQuery,\n OrdersByNameQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport {\n queryOrdersByName,\n queryOrdersByNameFull,\n} from './getOrderByName.queries.js'\n\nconst GetLeanOrderByNameReturn = z\n .object({\n id: z.string(),\n name: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n totalPrice: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n customer: z\n .object({\n id: z.string(),\n displayName: z.string(),\n emailAddress: z.string().nullable(),\n })\n .nullable(),\n financialStatus: z.string().nullable(),\n fulfillmentStatus: z.string().nullable(),\n })\n .nullable()\n\ntype GetLeanOrderByNameReturnType = z.infer<typeof GetLeanOrderByNameReturn>\n\ntype GetFullOrderByNameReturnType = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n> | null\n\ntype OrderDetailLevel = 'lean' | 'full'\n\n// Function overloads\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'lean',\n): Promise<GetLeanOrderByNameReturnType>\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'full',\n): Promise<GetFullOrderByNameReturnType>\nexport function getOrderByName(\n orderName: string,\n): Promise<GetLeanOrderByNameReturnType>\n\n/**\n * Retrieves a single order from Shopify by its order name (e.g., \"B12345\").\n * Returns null if no order is found with the specified name.\n *\n * @param {string} orderName - The order name to search for (e.g., \"B12345\").\n * @param {OrderDetailLevel} detailLevel - The level of detail to return ('lean' or 'full'). Defaults to 'lean'.\n * @returns {Promise<GetLeanOrderByNameReturnType | GetFullOrderByNameReturnType>} A promise that resolves to the order data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderByName(\n orderName: string,\n detailLevel: OrderDetailLevel = 'lean',\n): Promise<GetLeanOrderByNameReturnType | GetFullOrderByNameReturnType> {\n if (detailLevel === 'lean') {\n return getLeanOrderByName(orderName)\n }\n return getFullOrderByName(orderName)\n}\n\nasync function getLeanOrderByName(\n orderName: string,\n): Promise<GetLeanOrderByNameReturnType> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameQuery\n >({\n query: queryOrdersByName,\n variables,\n dataExtractor: (pageData: OrdersByNameQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const leanOrder = {\n id: order.id,\n name: order.name,\n createdAt: order.createdAt,\n updatedAt: order.updatedAt,\n totalPrice: {\n amount: order.totalPriceSet?.shopMoney?.amount ?? '',\n currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? '',\n },\n customer: order.customer\n ? {\n id: order.customer.id,\n displayName: order.customer.displayName,\n emailAddress:\n order.customer.defaultEmailAddress?.emailAddress ?? null,\n }\n : null,\n financialStatus: order.displayFinancialStatus ?? null,\n fulfillmentStatus: order.displayFulfillmentStatus ?? null,\n }\n\n return await returnOutputParsed(leanOrder, GetLeanOrderByNameReturn)\n}\n\nasync function getFullOrderByName(\n orderName: string,\n): Promise<GetFullOrderByNameReturnType> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameFullQuery\n >({\n query: queryOrdersByNameFull,\n variables,\n dataExtractor: (pageData: OrdersByNameFullQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n if (extractedNodes.length === 0) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n return order\n}\n","import { gql } from '../../utils/logger'\n\nexport const queryOrdersByName = gql`#graphql\n query ordersByName($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n id\n name\n createdAt\n updatedAt\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n\nexport const queryOrdersByNameFull = gql`#graphql\n query ordersByNameFull($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n billingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n billingAddressMatchesShippingAddress\n cancelReason\n cancellation {\n staffNote\n }\n cancelledAt\n capturable\n clientIp\n closed\n closedAt\n confirmed\n createdAt\n currencyCode\n currentCartDiscountAmountSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentSubtotalLineItemsQuantity\n currentSubtotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTaxLines {\n channelLiable\n rate\n ratePercentage\n source\n title\n priceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n currentTotalAdditionalFeesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDiscountsSet {\n presentmentMoney {\n amount\n currencyCode\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDutiesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalWeight\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n customerAcceptsMarketing\n discountCodes\n discountCode\n displayAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n displayFinancialStatus\n displayFulfillmentStatus\n dutiesIncluded\n edited\n email\n estimatedTaxes\n fulfillable\n fulfillments(first: 20) {\n createdAt\n deliveredAt\n displayStatus\n estimatedDeliveryAt\n updatedAt\n trackingInfo(first: 10) {\n company\n url\n }\n totalQuantity\n status\n name\n id\n }\n fullyPaid\n id\n lineItems(first: 50) {\n edges {\n node {\n id\n name\n originalUnitPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n quantity\n requiresShipping\n sku\n title\n variantTitle\n }\n }\n }\n name\n note\n processedAt\n shippingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n statusPageUrl\n tags\n totalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalReceivedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalRefundedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalWeight\n unpaid\n updatedAt\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n","import z from 'zod'\nimport type {\n LeanProductVariantsQuery,\n LeanProductVariantsQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { gql, logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\n\nconst GetLeanProductVariantsReturn = z.array(\n z.object({\n productId: z.string(),\n productTitle: z.string(),\n variantId: z.string(),\n variantTitle: z.string(),\n sku: z.string(),\n }),\n)\n\ntype GetLeanProductVariantsReturnType = z.infer<\n typeof GetLeanProductVariantsReturn\n>\n\n/**\n * Retrieves a lean list of product variants from Shopify, optionally filtered by SKUs.\n * Product variants are mapped to a simpler output structure.\n * Variants missing essential properties (e.g., SKU) will be filtered out and logged.\n *\n * @param {string[]} [skus] - An optional array of SKUs to filter by. If provided, only variants matching these SKUs will be fetched.\n * @returns {Promise<GetLeanProductVariantsReturnType>} A promise that resolves to an array of lean product variant data.\n * @throws {Error} If the GraphQL query fails, returns no data, or if the `productVariants` field is missing in the response.\n */\nexport async function getLeanProductVariants(\n skus?: string[],\n): Promise<GetLeanProductVariantsReturnType> {\n const queryGql = gql`#graphql\n query leanProductVariants($first: Int!, $after: String, $queryFilter: String) {\n productVariants(first: $first, after: $after, query: $queryFilter) {\n edges {\n node { \n id\n title\n sku\n product {\n id\n title\n }\n }\n }\n pageInfo { \n hasNextPage\n endCursor\n }\n }\n }\n `\n\n const initialVariables: LeanProductVariantsQueryVariables = { first: 250 }\n if (skus && skus.length > 0) {\n initialVariables.queryFilter = skus\n .map((sku: string) => `sku:${sku}`)\n .join(' OR ')\n }\n\n // Type for a single node from the productVariants query\n type SingleNode = NonNullable<\n NonNullable<\n LeanProductVariantsQuery['productVariants']\n >['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n LeanProductVariantsQuery\n >({\n query: queryGql,\n variables: initialVariables,\n dataExtractor: (pageData: LeanProductVariantsQuery) => {\n if (!pageData.productVariants) {\n throw new Error(\n \"GraphQL response for product variants is missing the 'productVariants' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.productVariants.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n pageInfo: pageData.productVariants.pageInfo,\n }\n },\n fetchAllPages: true,\n })\n\n const allVariants = extractedNodes.flatMap<\n GetLeanProductVariantsReturnType[number]\n >((v) => {\n if (v.sku) {\n return [\n {\n productId: v.product.id,\n productTitle: v.product.title,\n variantId: v.id,\n variantTitle: v.title,\n sku: v.sku,\n },\n ]\n }\n logger.debug(\n `Product ${v.product.title} (ID: ${v.product.id}) has a variant (ID: ${v.id}) with no SKU. Filtering out.`,\n )\n return []\n })\n\n return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn)\n}\n","import z from 'zod'\nimport type {\n OrderPaymentDetailsByIdQuery,\n OrderPaymentDetailsByIdQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport {\n convertIdIntoGid,\n fetchShopifyGraphql,\n} from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport { queryOrderPaymentDetails } from './getOrderPaymentDetails.queries.js'\n\nconst GetOrderPaymentDetailsByIdReturn = z.object({\n order: z.object({\n transactions: z.array(\n z.object({\n amountSet: z.object({\n shopMoney: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n }),\n createdAt: z.string(),\n gateway: z.string(),\n formattedGateway: z.string(),\n kind: z.string(),\n paymentId: z.string(),\n }),\n ),\n }),\n})\n\ntype GetOrderPaymentDetailsByIdReturnType = z.infer<\n typeof GetOrderPaymentDetailsByIdReturn\n>\n\n/**\n * Retrieves payment details for a single order from Shopify by its ID.\n * Returns null if no order is found with the specified ID.\n *\n * @param {bigint} id - The numerical Shopify order ID (e.g., 12345678n).\n * @returns {Promise<GetOrderPaymentDetailsByIdReturnType | null>} A promise that resolves to the order payment data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderPaymentDetailsById(\n id: bigint,\n): Promise<GetOrderPaymentDetailsByIdReturnType | null> {\n const variables: OrderPaymentDetailsByIdQueryVariables = {\n id: convertIdIntoGid(id, 'Order'),\n }\n\n const response = await fetchShopifyGraphql<OrderPaymentDetailsByIdQuery>({\n query: queryOrderPaymentDetails,\n variables,\n })\n\n if (!response.order) {\n logger.debug(`No order found with ID: ${id}`)\n return null\n }\n\n return await returnOutputParsed(response, GetOrderPaymentDetailsByIdReturn)\n}\n","import { gql } from '../../utils/logger.js'\n\nexport const queryOrderPaymentDetails = gql`#graphql\n query orderPaymentDetailsById($id: ID!) {\n order(id: $id) {\n transactions {\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n createdAt\n gateway\n formattedGateway\n kind\n paymentId\n }\n }\n }\n`\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoC1B,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["import_zod","dotenv","env","import_zod","z","z","import_zod","z","import_zod","z","import_zod","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/mutations/customers/deleteCustomerById.ts","../src/utils/logger.ts","../src/utils/shopifyClient.ts","../src/utils/shopifyFetch.ts","../src/utils/zod.ts","../src/queries/orders/getOrderById.ts","../src/queries/orders/getOrderById.queries.ts","../src/queries/orders/getOrderByName.ts","../src/queries/orders/getOrderByName.queries.ts","../src/queries/productVariants/getLeanProductVariants.ts","../src/queries/orders/getOrderPaymentDetails.ts","../src/queries/orders/getOrderPaymentDetails.queries.ts","../src/utils/toRestFormat.ts","../src/utils/parseGid.ts"],"sourcesContent":["export { deleteCustomerById } from './mutations/customers/deleteCustomerById.js'\nexport {\n getOrderById,\n type FullOrder,\n type LeanOrder,\n} from './queries/orders/getOrderById.js'\nexport {\n getOrderByName,\n type FullOrderByName,\n type LeanOrderByName,\n} from './queries/orders/getOrderByName.js'\nexport { getLeanProductVariants } from './queries/productVariants/getLeanProductVariants.js'\nexport { getOrderPaymentDetailsById } from './queries/orders/getOrderPaymentDetails.js'\nexport { toRestFormat } from './utils/toRestFormat.js'\nexport { parseGid } from './utils/parseGid.js'\n","import z from 'zod'\nimport type {\n CustomerDeleteMutation,\n CustomerDeleteMutationVariables,\n} from '../../generated-api-types/2025-04/admin.generated'\nimport { gql } from '../../utils/logger'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch'\nimport { returnOutputParsed } from '../../utils/zod'\n\nexport const DeleteCustomerByIdReturn = z.string().nullable()\n\ntype SingleNode = { deletedCustomerId: string | null }\n\nexport async function deleteCustomerById(\n customerId: string,\n): Promise<z.infer<typeof DeleteCustomerByIdReturn>> {\n const mutation = gql`#graphql\n mutation customerDelete($input: CustomerDeleteInput!) {\n customerDelete(input: $input) {\n deletedCustomerId\n userErrors {\n field\n message\n }\n }\n }\n `\n\n const variables: CustomerDeleteMutationVariables = {\n input: { id: customerId },\n }\n\n const response = await fetchShopifyGraphql<\n SingleNode,\n CustomerDeleteMutation\n >({\n query: mutation,\n variables,\n dataExtractor: (data: CustomerDeleteMutation) => {\n if (!data.customerDelete) {\n throw new Error(\"GraphQL response missing 'customerDelete' field\")\n }\n return {\n nodes: [\n { deletedCustomerId: data.customerDelete.deletedCustomerId ?? null },\n ],\n userErrors: data.customerDelete.userErrors,\n }\n },\n })\n\n return returnOutputParsed(\n response[0]?.deletedCustomerId ?? null,\n DeleteCustomerByIdReturn,\n )\n}\n","const { env } = process\n\nexport const gql = String.raw\n\nconst logLevels = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n} as const\n\ntype LogLevelName = keyof typeof logLevels\n\nfunction getLogLevel(\n nodeEnv: string | undefined,\n logLevelEnv: string | undefined,\n): LogLevelName {\n if (logLevelEnv && logLevelEnv in logLevels) {\n return logLevelEnv as LogLevelName\n }\n\n if (nodeEnv === 'test') {\n return 'silent'\n }\n\n if (nodeEnv === 'production') {\n return 'info'\n }\n return 'debug'\n}\n\nexport const activeLogLevelName = getLogLevel(env.NODE_ENV, env.LOG_LEVEL)\nconst activeLogLevelValue = logLevels[activeLogLevelName]\n\nexport const logger = {\n debug: (...args: unknown[]) => {\n if (logLevels.debug <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.debug(...args)\n }\n },\n info: (...args: unknown[]) => {\n if (logLevels.info <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.info(...args)\n }\n },\n warn: (...args: unknown[]) => {\n if (logLevels.warn <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.warn(...args)\n }\n },\n error: (...args: unknown[]) => {\n if (logLevels.error <= activeLogLevelValue) {\n // biome-ignore lint/suspicious/noConsole: <explanation>\n console.error(...args)\n }\n },\n}\n","import {\n ApiVersion,\n type GraphqlClient,\n LogSeverity,\n Session,\n shopifyApi,\n} from '@shopify/shopify-api'\nimport '@shopify/shopify-api/adapters/node'\nimport dotenv from 'dotenv'\nimport { z } from 'zod'\nimport { activeLogLevelName, logger } from './logger.js'\n\n// https://shopify.dev/docs/api/admin-graphql/2025-04/\nexport const SHOPIFY_API_VERSION = ApiVersion.April25\n\ndotenv.config()\n\nconst envSchema = z.object({\n SHOPIFY_API_KEY: z.string({\n required_error: 'SHOPIFY_API_KEY is required',\n }),\n SHOPIFY_API_SECRET: z.string({\n required_error: 'SHOPIFY_API_SECRET is required',\n }),\n SHOPIFY_API_HOSTNAME: z.string({\n required_error: 'SHOPIFY_API_HOSTNAME is required',\n }),\n SHOPIFY_ACCESS_TOKEN: z.string({\n required_error: 'SHOPIFY_ACCESS_TOKEN is required',\n }),\n NODE_ENV: z\n .enum(['development', 'production', 'test'])\n .default('development'),\n})\n\nconst mapLogLevelToShopifySeverity = (level: string): LogSeverity => {\n switch (level) {\n case 'silent':\n return LogSeverity.Error\n case 'debug':\n return LogSeverity.Debug\n case 'info':\n return LogSeverity.Info\n case 'warn':\n return LogSeverity.Warning\n case 'error':\n return LogSeverity.Error\n default:\n return LogSeverity.Info\n }\n}\n\nlet shopifyGraphqlClient: GraphqlClient\n\ntry {\n // biome-ignore lint/nursery/noProcessEnv: <explanation>\n const env = envSchema.parse(process.env)\n\n const shopify = shopifyApi({\n apiKey: env.SHOPIFY_API_KEY,\n apiSecretKey: env.SHOPIFY_API_SECRET,\n hostName: env.SHOPIFY_API_HOSTNAME,\n apiVersion: SHOPIFY_API_VERSION,\n isEmbeddedApp: false,\n logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },\n future: {\n customerAddressDefaultFix: true,\n lineItemBilling: true,\n unstable_managedPricingSupport: false,\n },\n })\n\n const shopifySession = new Session({\n id: `custom-session-${env.SHOPIFY_API_HOSTNAME}`,\n shop: env.SHOPIFY_API_HOSTNAME,\n state: 'authenticated',\n isOnline: true,\n accessToken: env.SHOPIFY_ACCESS_TOKEN,\n })\n\n shopifyGraphqlClient = new shopify.clients.Graphql({\n session: shopifySession,\n })\n\n logger.info('Shopify API client initialized successfully.')\n} catch (error) {\n if (error instanceof z.ZodError) {\n const msg = JSON.stringify(error.format(), null, 2)\n logger.error(msg)\n } else {\n logger.error('Failed to initialize Shopify API client:', error)\n }\n throw error\n}\n\nexport { shopifyGraphqlClient as shopifyClient }\n","import { logger } from './logger.js'\nimport { shopifyClient } from './shopifyClient.js'\n\nexport function convertIdIntoGid(\n id: bigint,\n type: 'Order' | 'Customer',\n): string {\n return `gid://shopify/${type}/${id}`\n}\n\ninterface PageInfo {\n hasNextPage: boolean\n endCursor?: string | null | undefined\n}\n\ninterface ShopifyErrorWithMessage {\n message?: string\n [key: string]: unknown\n}\n\ntype TExtractorFunctionType<TResultNode, TPageData> = (pageData: TPageData) => {\n nodes: TResultNode[]\n pageInfo?: PageInfo\n userErrors?: { message?: string }[]\n}\n\nexport async function fetchShopifyGraphql<TResultNode, TPageData>(params: {\n query: string\n variables: Record<string, unknown>\n dataExtractor?: TExtractorFunctionType<TResultNode, TPageData>\n fetchAllPages?: boolean\n}): Promise<TResultNode[]>\nexport async function fetchShopifyGraphql<TReturnType>(params: {\n query: string\n variables: Record<string, unknown>\n}): Promise<TReturnType>\nexport async function fetchShopifyGraphql<\n TResultNode,\n TPageData,\n TReturnType,\n>(params: {\n query: string\n variables: Record<string, unknown>\n dataExtractor?: TExtractorFunctionType<TResultNode, TPageData>\n fetchAllPages?: boolean\n}): Promise<TResultNode[] | TReturnType> {\n const {\n query,\n variables: initialVariables,\n dataExtractor,\n fetchAllPages = false,\n } = params\n\n let currentVariables = { ...initialVariables }\n\n if (!dataExtractor) {\n return makeRequest<NonNullable<TReturnType>>(query, currentVariables)\n }\n\n const allNodes: TResultNode[] = []\n let hasNextLoop = true\n\n do {\n const response = await makeRequest<TPageData>(query, currentVariables)\n const { nodes, pageInfo, userErrors } = dataExtractor(response)\n\n // Handle Shopify mutation userErrors pattern\n if (Array.isArray(userErrors) && userErrors.length > 0) {\n const errorMessages = userErrors\n .map((e) => e.message || JSON.stringify(e))\n .join('\\n')\n logger.error('Shopify mutation userErrors:', errorMessages)\n throw new Error(`Shopify mutation userErrors: ${errorMessages}`)\n }\n\n allNodes.push(...nodes)\n\n hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false\n if (hasNextLoop && pageInfo?.endCursor) {\n currentVariables = {\n ...currentVariables,\n after: pageInfo.endCursor,\n }\n }\n } while (hasNextLoop)\n\n return allNodes\n}\n\nasync function makeRequest<TReturnDataType>(\n query: string,\n variables: Record<string, unknown>,\n): Promise<NonNullable<TReturnDataType>> {\n type ShopifyRequestErrorType = {\n errors?: ShopifyErrorWithMessage | ShopifyErrorWithMessage[]\n }\n\n const response = (await shopifyClient.request<TReturnDataType>(query, {\n variables,\n })) as { data?: TReturnDataType } & ShopifyRequestErrorType\n\n if (response.errors) {\n let errorMessages = 'GraphQL query failed.'\n const errors = response.errors\n if (Array.isArray(errors)) {\n errorMessages = errors\n .map((e: ShopifyErrorWithMessage) => e.message || JSON.stringify(e))\n .join('\\n')\n } else if (\n typeof errors === 'object' &&\n errors !== null &&\n 'message' in errors\n ) {\n errorMessages = errors.message || JSON.stringify(errors)\n } else if (typeof errors === 'string') {\n errorMessages = errors\n } else {\n errorMessages = JSON.stringify(errors)\n }\n logger.error('GraphQL query failed:', errorMessages)\n throw new Error(`GraphQL errors: ${errorMessages}`)\n }\n\n if (!response.data) {\n throw new Error('No data in Shopify API response')\n }\n\n return response.data\n}\n","import z from 'zod'\nimport { logger } from './logger.js'\n\nexport async function returnOutputParsed<T>(\n data: unknown,\n Model: z.ZodType<T>,\n) {\n const parsed = await Model.safeParseAsync(data)\n if (!parsed.success) {\n if (parsed.error instanceof z.ZodError) {\n const msg = JSON.stringify(parsed.error.format(), null, 2)\n logger.error(msg)\n } else {\n logger.error('Failed to parse:', parsed.error)\n }\n // throw parsedVariants.error\n throw new Error('Failed to parse product variants')\n }\n logger.info('Parsed data successfully')\n return parsed.data\n}\n","import z from 'zod'\nimport type {\n OrderByIdFullQuery,\n OrderByIdQuery,\n OrderByIdQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport {\n convertIdIntoGid,\n fetchShopifyGraphql,\n} from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport { queryOrderById, queryOrderByIdFull } from './getOrderById.queries.js'\n\n// Address schema (shared between lean and full)\nconst AddressSchema = z\n .object({\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n address1: z.string().nullable(),\n address2: z.string().nullable(),\n city: z.string().nullable(),\n province: z.string().nullable(),\n country: z.string().nullable(),\n zip: z.string().nullable(),\n })\n .nullable()\n\n// Lean order schema\nconst GetLeanOrderByIdReturn = z\n .object({\n id: z.string(),\n name: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n cancelledAt: z.string().nullable(),\n cancelReason: z.string().nullable(),\n totalPrice: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n customer: z\n .object({\n id: z.string(),\n displayName: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n emailAddress: z.string().nullable(),\n })\n .nullable(),\n financialStatus: z.string().nullable(),\n fulfillmentStatus: z.string().nullable(),\n shippingAddress: AddressSchema,\n })\n .nullable()\n\nexport type LeanOrder = z.infer<typeof GetLeanOrderByIdReturn>\n\n// Full order type - derived from the generated GraphQL types\nexport type FullOrder = NonNullable<OrderByIdFullQuery['order']> | null\n\ntype OrderDetailLevel = 'lean' | 'full'\n\n// Function overloads\nexport function getOrderById(id: number | bigint): Promise<LeanOrder>\nexport function getOrderById(\n id: number | bigint,\n detailLevel: 'lean',\n): Promise<LeanOrder>\nexport function getOrderById(\n id: number | bigint,\n detailLevel: 'full',\n): Promise<FullOrder>\n\n/**\n * Retrieves a single order from Shopify by its numeric ID.\n * Returns null if no order is found with the specified ID.\n *\n * @param {number | bigint} id - The numerical Shopify order ID (e.g., 12345678 or 12345678n).\n * @param {OrderDetailLevel} detailLevel - The level of detail to return ('lean' or 'full'). Defaults to 'lean'.\n * @returns {Promise<LeanOrder | FullOrder>} A promise that resolves to the order data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderById(\n id: number | bigint,\n detailLevel: OrderDetailLevel = 'lean',\n): Promise<LeanOrder | FullOrder> {\n const bigIntId = typeof id === 'number' ? BigInt(id) : id\n if (detailLevel === 'lean') {\n return getLeanOrderById(bigIntId)\n }\n return getFullOrderById(bigIntId)\n}\n\nasync function getLeanOrderById(id: bigint): Promise<LeanOrder> {\n const variables: OrderByIdQueryVariables = {\n id: convertIdIntoGid(id, 'Order'),\n }\n\n const response = await fetchShopifyGraphql<OrderByIdQuery>({\n query: queryOrderById,\n variables,\n })\n\n if (!response.order) {\n logger.debug(`No order found with ID: ${id}`)\n return null\n }\n\n const order = response.order\n\n const leanOrder = {\n id: order.id,\n name: order.name,\n createdAt: order.createdAt,\n updatedAt: order.updatedAt,\n cancelledAt: order.cancelledAt ?? null,\n cancelReason: order.cancelReason ?? null,\n totalPrice: {\n amount: order.totalPriceSet?.shopMoney?.amount ?? '',\n currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? '',\n },\n customer: order.customer\n ? {\n id: order.customer.id,\n displayName: order.customer.displayName,\n firstName: order.customer.firstName ?? null,\n lastName: order.customer.lastName ?? null,\n emailAddress:\n order.customer.defaultEmailAddress?.emailAddress ?? null,\n }\n : null,\n financialStatus: order.displayFinancialStatus ?? null,\n fulfillmentStatus: order.displayFulfillmentStatus ?? null,\n shippingAddress: order.shippingAddress\n ? {\n firstName: order.shippingAddress.firstName ?? null,\n lastName: order.shippingAddress.lastName ?? null,\n address1: order.shippingAddress.address1 ?? null,\n address2: order.shippingAddress.address2 ?? null,\n city: order.shippingAddress.city ?? null,\n province: order.shippingAddress.province ?? null,\n country: order.shippingAddress.country ?? null,\n zip: order.shippingAddress.zip ?? null,\n }\n : null,\n }\n\n return await returnOutputParsed(leanOrder, GetLeanOrderByIdReturn)\n}\n\nasync function getFullOrderById(id: bigint): Promise<FullOrder> {\n const variables: OrderByIdQueryVariables = {\n id: convertIdIntoGid(id, 'Order'),\n }\n\n const response = await fetchShopifyGraphql<OrderByIdFullQuery>({\n query: queryOrderByIdFull,\n variables,\n })\n\n if (!response.order) {\n logger.debug(`No order found with ID: ${id}`)\n return null\n }\n\n return response.order\n}\n","import { gql } from '../../utils/logger'\n\nexport const queryOrderById = gql`#graphql\n query orderById($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n }\n }\n`\n\nexport const queryOrderByIdFull = gql`#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n`\n","import z from 'zod'\nimport type {\n OrdersByNameFullQuery,\n OrdersByNameQuery,\n OrdersByNameQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport {\n queryOrdersByName,\n queryOrdersByNameFull,\n} from './getOrderByName.queries.js'\n\nconst GetLeanOrderByNameReturn = z\n .object({\n id: z.string(),\n name: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n totalPrice: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n customer: z\n .object({\n id: z.string(),\n displayName: z.string(),\n emailAddress: z.string().nullable(),\n })\n .nullable(),\n financialStatus: z.string().nullable(),\n fulfillmentStatus: z.string().nullable(),\n })\n .nullable()\n\nexport type LeanOrderByName = z.infer<typeof GetLeanOrderByNameReturn>\n\nexport type FullOrderByName = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n> | null\n\ntype OrderDetailLevel = 'lean' | 'full'\n\n// Function overloads\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'lean',\n): Promise<LeanOrderByName>\nexport function getOrderByName(\n orderName: string,\n detailLevel: 'full',\n): Promise<FullOrderByName>\nexport function getOrderByName(orderName: string): Promise<LeanOrderByName>\n\n/**\n * Retrieves a single order from Shopify by its order name (e.g., \"B12345\").\n * Returns null if no order is found with the specified name.\n *\n * @param {string} orderName - The order name to search for (e.g., \"B12345\").\n * @param {OrderDetailLevel} detailLevel - The level of detail to return ('lean' or 'full'). Defaults to 'lean'.\n * @returns {Promise<LeanOrderByName | FullOrderByName>} A promise that resolves to the order data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderByName(\n orderName: string,\n detailLevel: OrderDetailLevel = 'lean',\n): Promise<LeanOrderByName | FullOrderByName> {\n if (detailLevel === 'lean') {\n return getLeanOrderByName(orderName)\n }\n return getFullOrderByName(orderName)\n}\n\nasync function getLeanOrderByName(orderName: string): Promise<LeanOrderByName> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameQuery\n >({\n query: queryOrdersByName,\n variables,\n dataExtractor: (pageData: OrdersByNameQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const leanOrder = {\n id: order.id,\n name: order.name,\n createdAt: order.createdAt,\n updatedAt: order.updatedAt,\n totalPrice: {\n amount: order.totalPriceSet?.shopMoney?.amount ?? '',\n currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? '',\n },\n customer: order.customer\n ? {\n id: order.customer.id,\n displayName: order.customer.displayName,\n emailAddress:\n order.customer.defaultEmailAddress?.emailAddress ?? null,\n }\n : null,\n financialStatus: order.displayFinancialStatus ?? null,\n fulfillmentStatus: order.displayFulfillmentStatus ?? null,\n }\n\n return await returnOutputParsed(leanOrder, GetLeanOrderByNameReturn)\n}\n\nasync function getFullOrderByName(orderName: string): Promise<FullOrderByName> {\n const variables: OrdersByNameQueryVariables = {\n first: 1,\n queryFilter: `name:${orderName}`,\n }\n\n type SingleNode = NonNullable<\n NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n OrdersByNameFullQuery\n >({\n query: queryOrdersByNameFull,\n variables,\n dataExtractor: (pageData: OrdersByNameFullQuery) => {\n if (!pageData.orders) {\n throw new Error(\n \"GraphQL response for orders is missing the 'orders' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.orders.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n }\n },\n fetchAllPages: false,\n })\n\n if (extractedNodes.length === 0) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n const order = extractedNodes[0]\n if (!order) {\n logger.debug(`No order found with name: ${orderName}`)\n return null\n }\n\n return order\n}\n","import { gql } from '../../utils/logger'\n\nexport const queryOrdersByName = gql`#graphql\n query ordersByName($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n id\n name\n createdAt\n updatedAt\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n\nexport const queryOrdersByNameFull = gql`#graphql\n query ordersByNameFull($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n billingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n billingAddressMatchesShippingAddress\n cancelReason\n cancellation {\n staffNote\n }\n cancelledAt\n capturable\n clientIp\n closed\n closedAt\n confirmed\n createdAt\n currencyCode\n currentCartDiscountAmountSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentSubtotalLineItemsQuantity\n currentSubtotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTaxLines {\n channelLiable\n rate\n ratePercentage\n source\n title\n priceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n currentTotalAdditionalFeesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDiscountsSet {\n presentmentMoney {\n amount\n currencyCode\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalDutiesSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n currentTotalWeight\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n customerAcceptsMarketing\n discountCodes\n discountCode\n displayAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n displayFinancialStatus\n displayFulfillmentStatus\n dutiesIncluded\n edited\n email\n estimatedTaxes\n fulfillable\n fulfillments(first: 20) {\n createdAt\n deliveredAt\n displayStatus\n estimatedDeliveryAt\n updatedAt\n trackingInfo(first: 10) {\n company\n url\n }\n totalQuantity\n status\n name\n id\n }\n fullyPaid\n id\n lineItems(first: 50) {\n edges {\n node {\n id\n name\n originalUnitPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n quantity\n requiresShipping\n sku\n title\n variantTitle\n }\n }\n }\n name\n note\n processedAt\n shippingAddress {\n address1\n address2\n city\n company\n country\n countryCodeV2\n firstName\n formattedArea\n id\n lastName\n name\n phone\n province\n provinceCode\n timeZone\n zip\n }\n statusPageUrl\n tags\n totalPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalReceivedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalRefundedSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalShippingPriceSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalTaxSet {\n presentmentMoney {\n amount\n currencyCode\n }\n shopMoney {\n amount\n currencyCode\n }\n }\n totalWeight\n unpaid\n updatedAt\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`\n","import z from 'zod'\nimport type {\n LeanProductVariantsQuery,\n LeanProductVariantsQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { gql, logger } from '../../utils/logger.js'\nimport { fetchShopifyGraphql } from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\n\nconst GetLeanProductVariantsReturn = z.array(\n z.object({\n productId: z.string(),\n productTitle: z.string(),\n variantId: z.string(),\n variantTitle: z.string(),\n sku: z.string(),\n }),\n)\n\ntype GetLeanProductVariantsReturnType = z.infer<\n typeof GetLeanProductVariantsReturn\n>\n\n/**\n * Retrieves a lean list of product variants from Shopify, optionally filtered by SKUs.\n * Product variants are mapped to a simpler output structure.\n * Variants missing essential properties (e.g., SKU) will be filtered out and logged.\n *\n * @param {string[]} [skus] - An optional array of SKUs to filter by. If provided, only variants matching these SKUs will be fetched.\n * @returns {Promise<GetLeanProductVariantsReturnType>} A promise that resolves to an array of lean product variant data.\n * @throws {Error} If the GraphQL query fails, returns no data, or if the `productVariants` field is missing in the response.\n */\nexport async function getLeanProductVariants(\n skus?: string[],\n): Promise<GetLeanProductVariantsReturnType> {\n const queryGql = gql`#graphql\n query leanProductVariants($first: Int!, $after: String, $queryFilter: String) {\n productVariants(first: $first, after: $after, query: $queryFilter) {\n edges {\n node { \n id\n title\n sku\n product {\n id\n title\n }\n }\n }\n pageInfo { \n hasNextPage\n endCursor\n }\n }\n }\n `\n\n const initialVariables: LeanProductVariantsQueryVariables = { first: 250 }\n if (skus && skus.length > 0) {\n initialVariables.queryFilter = skus\n .map((sku: string) => `sku:${sku}`)\n .join(' OR ')\n }\n\n // Type for a single node from the productVariants query\n type SingleNode = NonNullable<\n NonNullable<\n LeanProductVariantsQuery['productVariants']\n >['edges'][number]['node']\n >\n\n const extractedNodes = await fetchShopifyGraphql<\n SingleNode,\n LeanProductVariantsQuery\n >({\n query: queryGql,\n variables: initialVariables,\n dataExtractor: (pageData: LeanProductVariantsQuery) => {\n if (!pageData.productVariants) {\n throw new Error(\n \"GraphQL response for product variants is missing the 'productVariants' field.\",\n )\n }\n const nodes: SingleNode[] = pageData.productVariants.edges.map(\n (edge: { node: SingleNode }) => edge.node,\n )\n return {\n nodes,\n pageInfo: pageData.productVariants.pageInfo,\n }\n },\n fetchAllPages: true,\n })\n\n const allVariants = extractedNodes.flatMap<\n GetLeanProductVariantsReturnType[number]\n >((v) => {\n if (v.sku) {\n return [\n {\n productId: v.product.id,\n productTitle: v.product.title,\n variantId: v.id,\n variantTitle: v.title,\n sku: v.sku,\n },\n ]\n }\n logger.debug(\n `Product ${v.product.title} (ID: ${v.product.id}) has a variant (ID: ${v.id}) with no SKU. Filtering out.`,\n )\n return []\n })\n\n return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn)\n}\n","import z from 'zod'\nimport type {\n OrderPaymentDetailsByIdQuery,\n OrderPaymentDetailsByIdQueryVariables,\n} from '../../generated-api-types/2025-04/admin.generated.js'\nimport { logger } from '../../utils/logger.js'\nimport {\n convertIdIntoGid,\n fetchShopifyGraphql,\n} from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport { queryOrderPaymentDetails } from './getOrderPaymentDetails.queries.js'\n\nconst GetOrderPaymentDetailsByIdReturn = z.object({\n order: z.object({\n transactions: z.array(\n z.object({\n amountSet: z.object({\n shopMoney: z.object({\n amount: z.string(),\n currencyCode: z.string(),\n }),\n }),\n createdAt: z.string(),\n gateway: z.string(),\n formattedGateway: z.string(),\n kind: z.string(),\n paymentId: z.string(),\n }),\n ),\n }),\n})\n\ntype GetOrderPaymentDetailsByIdReturnType = z.infer<\n typeof GetOrderPaymentDetailsByIdReturn\n>\n\n/**\n * Retrieves payment details for a single order from Shopify by its ID.\n * Returns null if no order is found with the specified ID.\n *\n * @param {bigint} id - The numerical Shopify order ID (e.g., 12345678n).\n * @returns {Promise<GetOrderPaymentDetailsByIdReturnType | null>} A promise that resolves to the order payment data or null if not found.\n * @throws {Error} If the GraphQL query fails or if the response structure is invalid.\n */\nexport async function getOrderPaymentDetailsById(\n id: bigint,\n): Promise<GetOrderPaymentDetailsByIdReturnType | null> {\n const variables: OrderPaymentDetailsByIdQueryVariables = {\n id: convertIdIntoGid(id, 'Order'),\n }\n\n const response = await fetchShopifyGraphql<OrderPaymentDetailsByIdQuery>({\n query: queryOrderPaymentDetails,\n variables,\n })\n\n if (!response.order) {\n logger.debug(`No order found with ID: ${id}`)\n return null\n }\n\n return await returnOutputParsed(response, GetOrderPaymentDetailsByIdReturn)\n}\n","import { gql } from '../../utils/logger.js'\n\nexport const queryOrderPaymentDetails = gql`#graphql\n query orderPaymentDetailsById($id: ID!) {\n order(id: $id) {\n transactions {\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n createdAt\n gateway\n formattedGateway\n kind\n paymentId\n }\n }\n }\n`\n","/**\n * Transforms GraphQL responses to REST-like format.\n *\n * This utility recursively:\n * 1. Flattens `{ edges: [{ node: ... }] }` → `[...]`\n * 2. Converts camelCase to snake_case (`lineItems` → `line_items`)\n * 3. Extracts numeric IDs from GIDs (`gid://shopify/Order/123` → `123`)\n */\n\n/**\n * Convert a camelCase string to snake_case\n */\nfunction camelToSnake(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`)\n}\n\n/**\n * Extract numeric ID from a Shopify GID string\n */\nfunction extractNumericId(gid: string): number {\n const match = gid.match(/\\d+$/)\n return match ? parseInt(match[0], 10) : 0\n}\n\n/**\n * Transform a GraphQL response object to REST-like format.\n *\n * @example\n * ```typescript\n * const graphqlOrder = {\n * id: 'gid://shopify/Order/123',\n * lineItems: {\n * edges: [{ node: { id: 'gid://shopify/LineItem/456', sku: 'ABC' } }]\n * }\n * };\n *\n * const restOrder = toRestFormat(graphqlOrder);\n * // Result:\n * // {\n * // id: 123,\n * // line_items: [{ id: 456, sku: 'ABC' }]\n * // }\n * ```\n */\nexport function toRestFormat<T>(obj: T): unknown {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(toRestFormat)\n }\n\n if (typeof obj === 'object') {\n const record = obj as Record<string, unknown>\n const result: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(record)) {\n // Flatten edges/node pattern: { edges: [{ node: ... }] } → [...]\n if (\n key === 'edges' &&\n Array.isArray(value) &&\n value.every(\n (item) =>\n typeof item === 'object' && item !== null && 'node' in item,\n )\n ) {\n return value.map((edge: { node: unknown }) => toRestFormat(edge.node))\n }\n\n // Convert GID to numeric ID\n if (\n key === 'id' &&\n typeof value === 'string' &&\n value.startsWith('gid://')\n ) {\n result[key] = extractNumericId(value)\n continue\n }\n\n // Convert camelCase to snake_case and recurse\n const snakeKey = camelToSnake(key)\n result[snakeKey] = toRestFormat(value)\n }\n\n return result\n }\n\n return obj\n}\n","/**\n * Extract numeric ID from a Shopify GID string.\n *\n * @example\n * parseGid('gid://shopify/Order/12345678901234') // → 12345678901234\n * parseGid('gid://shopify/LineItem/999') // → 999\n */\nexport function parseGid(gid: string): number {\n const match = gid.match(/\\d+$/)\n return match ? parseInt(match[0], 10) : 0\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAoC1B,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADxBrC,IAAM,2BAA2B,YAAAC,QAC9B,OAAO;AAAA,EACN,IAAI,YAAAA,QAAE,OAAO;AAAA,EACb,MAAM,YAAAA,QAAE,OAAO;AAAA,EACf,WAAW,YAAAA,QAAE,OAAO;AAAA,EACpB,WAAW,YAAAA,QAAE,OAAO;AAAA,EACpB,YAAY,YAAAA,QAAE,OAAO;AAAA,IACnB,QAAQ,YAAAA,QAAE,OAAO;AAAA,IACjB,cAAc,YAAAA,QAAE,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,UAAU,YAAAA,QACP,OAAO;AAAA,IACN,IAAI,YAAAA,QAAE,OAAO;AAAA,IACb,aAAa,YAAAA,QAAE,OAAO;AAAA,IACtB,cAAc,YAAAA,QAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AAAA,EACZ,iBAAiB,YAAAA,QAAE,OAAO,EAAE,SAAS;AAAA,EACrC,mBAAmB,YAAAA,QAAE,OAAO,EAAE,SAAS;AACzC,CAAC,EACA,SAAS;AA8BZ,eAAsB,eACpB,WACA,cAAgC,QACY;AAC5C,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,mBAAmB,SAAS;AAAA,EACrC;AACA,SAAO,mBAAmB,SAAS;AACrC;AAEA,eAAe,mBAAmB,WAA6C;AAC7E,QAAM,YAAwC;AAAA,IAC5C,OAAO;AAAA,IACP,aAAa,QAAQ,SAAS;AAAA,EAChC;AAMA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,eAAe,CAAC,aAAgC;AAC9C,UAAI,CAAC,SAAS,QAAQ;AACpB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,OAAO,MAAM;AAAA,QAChD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,QAAQ,eAAe,CAAC;AAC9B,MAAI,CAAC,OAAO;AACV,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,YAAY;AAAA,IAChB,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,YAAY;AAAA,MACV,QAAQ,MAAM,eAAe,WAAW,UAAU;AAAA,MAClD,cAAc,MAAM,eAAe,WAAW,gBAAgB;AAAA,IAChE;AAAA,IACA,UAAU,MAAM,WACZ;AAAA,MACE,IAAI,MAAM,SAAS;AAAA,MACnB,aAAa,MAAM,SAAS;AAAA,MAC5B,cACE,MAAM,SAAS,qBAAqB,gBAAgB;AAAA,IACxD,IACA;AAAA,IACJ,iBAAiB,MAAM,0BAA0B;AAAA,IACjD,mBAAmB,MAAM,4BAA4B;AAAA,EACvD;AAEA,SAAO,MAAM,mBAAmB,WAAW,wBAAwB;AACrE;AAEA,eAAe,mBAAmB,WAA6C;AAC7E,QAAM,YAAwC;AAAA,IAC5C,OAAO;AAAA,IACP,aAAa,QAAQ,SAAS;AAAA,EAChC;AAMA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,eAAe,CAAC,aAAoC;AAClD,UAAI,CAAC,SAAS,QAAQ;AACpB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,OAAO,MAAM;AAAA,QAChD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,MAAI,eAAe,WAAW,GAAG;AAC/B,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,eAAe,CAAC;AAC9B,MAAI,CAAC,OAAO;AACV,WAAO,MAAM,6BAA6B,SAAS,EAAE;AACrD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AEpLA,IAAAC,cAAc;AASd,IAAM,+BAA+B,YAAAC,QAAE;AAAA,EACrC,YAAAA,QAAE,OAAO;AAAA,IACP,WAAW,YAAAA,QAAE,OAAO;AAAA,IACpB,cAAc,YAAAA,QAAE,OAAO;AAAA,IACvB,WAAW,YAAAA,QAAE,OAAO;AAAA,IACpB,cAAc,YAAAA,QAAE,OAAO;AAAA,IACvB,KAAK,YAAAA,QAAE,OAAO;AAAA,EAChB,CAAC;AACH;AAeA,eAAsB,uBACpB,MAC2C;AAC3C,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBjB,QAAM,mBAAsD,EAAE,OAAO,IAAI;AACzE,MAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,qBAAiB,cAAc,KAC5B,IAAI,CAAC,QAAgB,OAAO,GAAG,EAAE,EACjC,KAAK,MAAM;AAAA,EAChB;AASA,QAAM,iBAAiB,MAAM,oBAG3B;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,eAAe,CAAC,aAAuC;AACrD,UAAI,CAAC,SAAS,iBAAiB;AAC7B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAsB,SAAS,gBAAgB,MAAM;AAAA,QACzD,CAAC,SAA+B,KAAK;AAAA,MACvC;AACA,aAAO;AAAA,QACL;AAAA,QACA,UAAU,SAAS,gBAAgB;AAAA,MACrC;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AAED,QAAM,cAAc,eAAe,QAEjC,CAAC,MAAM;AACP,QAAI,EAAE,KAAK;AACT,aAAO;AAAA,QACL;AAAA,UACE,WAAW,EAAE,QAAQ;AAAA,UACrB,cAAc,EAAE,QAAQ;AAAA,UACxB,WAAW,EAAE;AAAA,UACb,cAAc,EAAE;AAAA,UAChB,KAAK,EAAE;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE,EAAE;AAAA,IAC7E;AACA,WAAO,CAAC;AAAA,EACV,CAAC;AAED,SAAO,MAAM,mBAAmB,aAAa,4BAA4B;AAC3E;;;ACnHA,IAAAC,eAAc;;;ACEP,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADWxC,IAAM,mCAAmC,aAAAC,QAAE,OAAO;AAAA,EAChD,OAAO,aAAAA,QAAE,OAAO;AAAA,IACd,cAAc,aAAAA,QAAE;AAAA,MACd,aAAAA,QAAE,OAAO;AAAA,QACP,WAAW,aAAAA,QAAE,OAAO;AAAA,UAClB,WAAW,aAAAA,QAAE,OAAO;AAAA,YAClB,QAAQ,aAAAA,QAAE,OAAO;AAAA,YACjB,cAAc,aAAAA,QAAE,OAAO;AAAA,UACzB,CAAC;AAAA,QACH,CAAC;AAAA,QACD,WAAW,aAAAA,QAAE,OAAO;AAAA,QACpB,SAAS,aAAAA,QAAE,OAAO;AAAA,QAClB,kBAAkB,aAAAA,QAAE,OAAO;AAAA,QAC3B,MAAM,aAAAA,QAAE,OAAO;AAAA,QACf,WAAW,aAAAA,QAAE,OAAO;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;AAcD,eAAsB,2BACpB,IACsD;AACtD,QAAM,YAAmD;AAAA,IACvD,IAAI,iBAAiB,IAAI,OAAO;AAAA,EAClC;AAEA,QAAM,WAAW,MAAM,oBAAkD;AAAA,IACvE,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AAED,MAAI,CAAC,SAAS,OAAO;AACnB,WAAO,MAAM,2BAA2B,EAAE,EAAE;AAC5C,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,mBAAmB,UAAU,gCAAgC;AAC5E;;;AEnDA,SAAS,aAAa,KAAqB;AACzC,SAAO,IAAI,QAAQ,UAAU,CAAC,WAAW,IAAI,OAAO,YAAY,CAAC,EAAE;AACrE;AAKA,SAAS,iBAAiB,KAAqB;AAC7C,QAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,SAAO,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAC1C;AAsBO,SAAS,aAAgB,KAAiB;AAC/C,MAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,YAAY;AAAA,EAC7B;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,SAAS;AACf,UAAM,SAAkC,CAAC;AAEzC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAEjD,UACE,QAAQ,WACR,MAAM,QAAQ,KAAK,KACnB,MAAM;AAAA,QACJ,CAAC,SACC,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU;AAAA,MAC3D,GACA;AACA,eAAO,MAAM,IAAI,CAAC,SAA4B,aAAa,KAAK,IAAI,CAAC;AAAA,MACvE;AAGA,UACE,QAAQ,QACR,OAAO,UAAU,YACjB,MAAM,WAAW,QAAQ,GACzB;AACA,eAAO,GAAG,IAAI,iBAAiB,KAAK;AACpC;AAAA,MACF;AAGA,YAAM,WAAW,aAAa,GAAG;AACjC,aAAO,QAAQ,IAAI,aAAa,KAAK;AAAA,IACvC;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AClFO,SAAS,SAAS,KAAqB;AAC5C,QAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,SAAO,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAC1C;","names":["import_zod","dotenv","env","import_zod","z","z","import_zod","z","import_zod","z","import_zod","z","import_zod","z"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -12275,15 +12275,15 @@ declare enum OrderTransactionErrorCode {
|
|
|
12275
12275
|
ExpiredCard = "EXPIRED_CARD",
|
|
12276
12276
|
/** There was an unknown error with processing the payment. */
|
|
12277
12277
|
GenericError = "GENERIC_ERROR",
|
|
12278
|
-
/** The address
|
|
12278
|
+
/** The address is incorrect. */
|
|
12279
12279
|
IncorrectAddress = "INCORRECT_ADDRESS",
|
|
12280
|
-
/** The
|
|
12280
|
+
/** The card security code (CVC/CVV) is incorrect. */
|
|
12281
12281
|
IncorrectCvc = "INCORRECT_CVC",
|
|
12282
12282
|
/** The card number is incorrect. */
|
|
12283
12283
|
IncorrectNumber = "INCORRECT_NUMBER",
|
|
12284
|
-
/** The entered
|
|
12284
|
+
/** The PIN entered is incorrect. */
|
|
12285
12285
|
IncorrectPin = "INCORRECT_PIN",
|
|
12286
|
-
/** The ZIP or postal code
|
|
12286
|
+
/** The ZIP or postal code doesn't match the one on file. */
|
|
12287
12287
|
IncorrectZip = "INCORRECT_ZIP",
|
|
12288
12288
|
/** The amount is either too high or too low for the provider. */
|
|
12289
12289
|
InvalidAmount = "INVALID_AMOUNT",
|
|
@@ -18517,6 +18517,72 @@ type ConnectMetaObjectToProductVariantMutation = {
|
|
|
18517
18517
|
userErrors: Array<Pick<ProductVariantsBulkUpdateUserError, 'field' | 'message'>>;
|
|
18518
18518
|
}>;
|
|
18519
18519
|
};
|
|
18520
|
+
type OrderByIdQueryVariables = Exact<{
|
|
18521
|
+
id: Scalars['ID']['input'];
|
|
18522
|
+
}>;
|
|
18523
|
+
type OrderByIdQuery = {
|
|
18524
|
+
order?: Maybe<(Pick<Order, 'id' | 'name' | 'createdAt' | 'updatedAt' | 'cancelledAt' | 'cancelReason' | 'displayFinancialStatus' | 'displayFulfillmentStatus'> & {
|
|
18525
|
+
totalPriceSet: {
|
|
18526
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18527
|
+
};
|
|
18528
|
+
customer?: Maybe<(Pick<Customer, 'id' | 'lastName' | 'displayName' | 'firstName'> & {
|
|
18529
|
+
defaultEmailAddress?: Maybe<Pick<CustomerEmailAddress, 'emailAddress'>>;
|
|
18530
|
+
})>;
|
|
18531
|
+
shippingAddress?: Maybe<Pick<MailingAddress, 'firstName' | 'lastName' | 'address1' | 'address2' | 'city' | 'province' | 'country' | 'zip'>>;
|
|
18532
|
+
})>;
|
|
18533
|
+
};
|
|
18534
|
+
type OrderByIdFullQueryVariables = Exact<{
|
|
18535
|
+
id: Scalars['ID']['input'];
|
|
18536
|
+
}>;
|
|
18537
|
+
type OrderByIdFullQuery = {
|
|
18538
|
+
order?: Maybe<(Pick<Order, 'id' | 'name' | 'createdAt' | 'updatedAt' | 'processedAt' | 'closedAt' | 'cancelledAt' | 'cancelReason' | 'displayFinancialStatus' | 'displayFulfillmentStatus' | 'discountCodes'> & {
|
|
18539
|
+
totalPriceSet: {
|
|
18540
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18541
|
+
};
|
|
18542
|
+
customer?: Maybe<Pick<Customer, 'id' | 'firstName' | 'lastName' | 'email' | 'phone'>>;
|
|
18543
|
+
shippingAddress?: Maybe<Pick<MailingAddress, 'firstName' | 'lastName' | 'address1' | 'address2' | 'city' | 'province' | 'country' | 'zip'>>;
|
|
18544
|
+
billingAddress?: Maybe<Pick<MailingAddress, 'firstName' | 'lastName' | 'address1' | 'address2' | 'city' | 'province' | 'country' | 'zip'>>;
|
|
18545
|
+
lineItems: {
|
|
18546
|
+
edges: Array<{
|
|
18547
|
+
node: (Pick<LineItem, 'id' | 'sku' | 'title' | 'variantTitle' | 'quantity' | 'vendor'> & {
|
|
18548
|
+
customAttributes: Array<Pick<Attribute, 'key' | 'value'>>;
|
|
18549
|
+
originalUnitPriceSet: {
|
|
18550
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18551
|
+
};
|
|
18552
|
+
image?: Maybe<Pick<Image, 'url' | 'width' | 'height' | 'altText'>>;
|
|
18553
|
+
});
|
|
18554
|
+
}>;
|
|
18555
|
+
};
|
|
18556
|
+
fulfillments: Array<(Pick<Fulfillment, 'id' | 'name' | 'totalQuantity' | 'status' | 'createdAt' | 'estimatedDeliveryAt' | 'deliveredAt'> & {
|
|
18557
|
+
trackingInfo: Array<Pick<FulfillmentTrackingInfo, 'company' | 'number' | 'url'>>;
|
|
18558
|
+
fulfillmentLineItems: {
|
|
18559
|
+
edges: Array<{
|
|
18560
|
+
node: (Pick<FulfillmentLineItem, 'id' | 'quantity'> & {
|
|
18561
|
+
lineItem: Pick<LineItem, 'id'>;
|
|
18562
|
+
});
|
|
18563
|
+
}>;
|
|
18564
|
+
};
|
|
18565
|
+
})>;
|
|
18566
|
+
shippingLine?: Maybe<{
|
|
18567
|
+
originalPriceSet: {
|
|
18568
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18569
|
+
};
|
|
18570
|
+
}>;
|
|
18571
|
+
taxLines: Array<{
|
|
18572
|
+
priceSet: {
|
|
18573
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18574
|
+
};
|
|
18575
|
+
}>;
|
|
18576
|
+
totalDiscountsSet?: Maybe<{
|
|
18577
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18578
|
+
}>;
|
|
18579
|
+
refunds: Array<{
|
|
18580
|
+
totalRefundedSet: {
|
|
18581
|
+
shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
|
|
18582
|
+
};
|
|
18583
|
+
}>;
|
|
18584
|
+
})>;
|
|
18585
|
+
};
|
|
18520
18586
|
type OrdersByNameQueryVariables = Exact<{
|
|
18521
18587
|
first: Scalars['Int']['input'];
|
|
18522
18588
|
queryFilter: Scalars['String']['input'];
|
|
@@ -18665,6 +18731,14 @@ type ProductHandlesQuery = {
|
|
|
18665
18731
|
};
|
|
18666
18732
|
};
|
|
18667
18733
|
interface GeneratedQueryTypes {
|
|
18734
|
+
"#graphql\n query orderById($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n }\n }\n": {
|
|
18735
|
+
return: OrderByIdQuery;
|
|
18736
|
+
variables: OrderByIdQueryVariables;
|
|
18737
|
+
};
|
|
18738
|
+
"#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n": {
|
|
18739
|
+
return: OrderByIdFullQuery;
|
|
18740
|
+
variables: OrderByIdFullQueryVariables;
|
|
18741
|
+
};
|
|
18668
18742
|
"#graphql\n query ordersByName($first: Int!, $queryFilter: String!) {\n orders(first: $first, query: $queryFilter) {\n edges {\n node {\n id\n name\n createdAt\n updatedAt\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n lastName\n defaultEmailAddress {\n emailAddress\n }\n displayName\n firstName\n }\n displayFinancialStatus\n displayFulfillmentStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n": {
|
|
18669
18743
|
return: OrdersByNameQuery;
|
|
18670
18744
|
variables: OrdersByNameQueryVariables;
|
|
@@ -18704,6 +18778,139 @@ declare module '@shopify/admin-api-client' {
|
|
|
18704
18778
|
}
|
|
18705
18779
|
}
|
|
18706
18780
|
|
|
18781
|
+
declare const GetLeanOrderByIdReturn: z.ZodNullable<z.ZodObject<{
|
|
18782
|
+
id: z.ZodString;
|
|
18783
|
+
name: z.ZodString;
|
|
18784
|
+
createdAt: z.ZodString;
|
|
18785
|
+
updatedAt: z.ZodString;
|
|
18786
|
+
cancelledAt: z.ZodNullable<z.ZodString>;
|
|
18787
|
+
cancelReason: z.ZodNullable<z.ZodString>;
|
|
18788
|
+
totalPrice: z.ZodObject<{
|
|
18789
|
+
amount: z.ZodString;
|
|
18790
|
+
currencyCode: z.ZodString;
|
|
18791
|
+
}, "strip", z.ZodTypeAny, {
|
|
18792
|
+
currencyCode: string;
|
|
18793
|
+
amount: string;
|
|
18794
|
+
}, {
|
|
18795
|
+
currencyCode: string;
|
|
18796
|
+
amount: string;
|
|
18797
|
+
}>;
|
|
18798
|
+
customer: z.ZodNullable<z.ZodObject<{
|
|
18799
|
+
id: z.ZodString;
|
|
18800
|
+
displayName: z.ZodString;
|
|
18801
|
+
firstName: z.ZodNullable<z.ZodString>;
|
|
18802
|
+
lastName: z.ZodNullable<z.ZodString>;
|
|
18803
|
+
emailAddress: z.ZodNullable<z.ZodString>;
|
|
18804
|
+
}, "strip", z.ZodTypeAny, {
|
|
18805
|
+
id: string;
|
|
18806
|
+
displayName: string;
|
|
18807
|
+
lastName: string | null;
|
|
18808
|
+
firstName: string | null;
|
|
18809
|
+
emailAddress: string | null;
|
|
18810
|
+
}, {
|
|
18811
|
+
id: string;
|
|
18812
|
+
displayName: string;
|
|
18813
|
+
lastName: string | null;
|
|
18814
|
+
firstName: string | null;
|
|
18815
|
+
emailAddress: string | null;
|
|
18816
|
+
}>>;
|
|
18817
|
+
financialStatus: z.ZodNullable<z.ZodString>;
|
|
18818
|
+
fulfillmentStatus: z.ZodNullable<z.ZodString>;
|
|
18819
|
+
shippingAddress: z.ZodNullable<z.ZodObject<{
|
|
18820
|
+
firstName: z.ZodNullable<z.ZodString>;
|
|
18821
|
+
lastName: z.ZodNullable<z.ZodString>;
|
|
18822
|
+
address1: z.ZodNullable<z.ZodString>;
|
|
18823
|
+
address2: z.ZodNullable<z.ZodString>;
|
|
18824
|
+
city: z.ZodNullable<z.ZodString>;
|
|
18825
|
+
province: z.ZodNullable<z.ZodString>;
|
|
18826
|
+
country: z.ZodNullable<z.ZodString>;
|
|
18827
|
+
zip: z.ZodNullable<z.ZodString>;
|
|
18828
|
+
}, "strip", z.ZodTypeAny, {
|
|
18829
|
+
lastName: string | null;
|
|
18830
|
+
firstName: string | null;
|
|
18831
|
+
address1: string | null;
|
|
18832
|
+
address2: string | null;
|
|
18833
|
+
city: string | null;
|
|
18834
|
+
province: string | null;
|
|
18835
|
+
country: string | null;
|
|
18836
|
+
zip: string | null;
|
|
18837
|
+
}, {
|
|
18838
|
+
lastName: string | null;
|
|
18839
|
+
firstName: string | null;
|
|
18840
|
+
address1: string | null;
|
|
18841
|
+
address2: string | null;
|
|
18842
|
+
city: string | null;
|
|
18843
|
+
province: string | null;
|
|
18844
|
+
country: string | null;
|
|
18845
|
+
zip: string | null;
|
|
18846
|
+
}>>;
|
|
18847
|
+
}, "strip", z.ZodTypeAny, {
|
|
18848
|
+
id: string;
|
|
18849
|
+
createdAt: string;
|
|
18850
|
+
updatedAt: string;
|
|
18851
|
+
name: string;
|
|
18852
|
+
cancelledAt: string | null;
|
|
18853
|
+
cancelReason: string | null;
|
|
18854
|
+
customer: {
|
|
18855
|
+
id: string;
|
|
18856
|
+
displayName: string;
|
|
18857
|
+
lastName: string | null;
|
|
18858
|
+
firstName: string | null;
|
|
18859
|
+
emailAddress: string | null;
|
|
18860
|
+
} | null;
|
|
18861
|
+
shippingAddress: {
|
|
18862
|
+
lastName: string | null;
|
|
18863
|
+
firstName: string | null;
|
|
18864
|
+
address1: string | null;
|
|
18865
|
+
address2: string | null;
|
|
18866
|
+
city: string | null;
|
|
18867
|
+
province: string | null;
|
|
18868
|
+
country: string | null;
|
|
18869
|
+
zip: string | null;
|
|
18870
|
+
} | null;
|
|
18871
|
+
totalPrice: {
|
|
18872
|
+
currencyCode: string;
|
|
18873
|
+
amount: string;
|
|
18874
|
+
};
|
|
18875
|
+
fulfillmentStatus: string | null;
|
|
18876
|
+
financialStatus: string | null;
|
|
18877
|
+
}, {
|
|
18878
|
+
id: string;
|
|
18879
|
+
createdAt: string;
|
|
18880
|
+
updatedAt: string;
|
|
18881
|
+
name: string;
|
|
18882
|
+
cancelledAt: string | null;
|
|
18883
|
+
cancelReason: string | null;
|
|
18884
|
+
customer: {
|
|
18885
|
+
id: string;
|
|
18886
|
+
displayName: string;
|
|
18887
|
+
lastName: string | null;
|
|
18888
|
+
firstName: string | null;
|
|
18889
|
+
emailAddress: string | null;
|
|
18890
|
+
} | null;
|
|
18891
|
+
shippingAddress: {
|
|
18892
|
+
lastName: string | null;
|
|
18893
|
+
firstName: string | null;
|
|
18894
|
+
address1: string | null;
|
|
18895
|
+
address2: string | null;
|
|
18896
|
+
city: string | null;
|
|
18897
|
+
province: string | null;
|
|
18898
|
+
country: string | null;
|
|
18899
|
+
zip: string | null;
|
|
18900
|
+
} | null;
|
|
18901
|
+
totalPrice: {
|
|
18902
|
+
currencyCode: string;
|
|
18903
|
+
amount: string;
|
|
18904
|
+
};
|
|
18905
|
+
fulfillmentStatus: string | null;
|
|
18906
|
+
financialStatus: string | null;
|
|
18907
|
+
}>>;
|
|
18908
|
+
type LeanOrder = z.infer<typeof GetLeanOrderByIdReturn>;
|
|
18909
|
+
type FullOrder = NonNullable<OrderByIdFullQuery['order']> | null;
|
|
18910
|
+
declare function getOrderById(id: number | bigint): Promise<LeanOrder>;
|
|
18911
|
+
declare function getOrderById(id: number | bigint, detailLevel: 'lean'): Promise<LeanOrder>;
|
|
18912
|
+
declare function getOrderById(id: number | bigint, detailLevel: 'full'): Promise<FullOrder>;
|
|
18913
|
+
|
|
18707
18914
|
declare const GetLeanOrderByNameReturn: z.ZodNullable<z.ZodObject<{
|
|
18708
18915
|
id: z.ZodString;
|
|
18709
18916
|
name: z.ZodString;
|
|
@@ -18767,11 +18974,11 @@ declare const GetLeanOrderByNameReturn: z.ZodNullable<z.ZodObject<{
|
|
|
18767
18974
|
fulfillmentStatus: string | null;
|
|
18768
18975
|
financialStatus: string | null;
|
|
18769
18976
|
}>>;
|
|
18770
|
-
type
|
|
18771
|
-
type
|
|
18772
|
-
declare function getOrderByName(orderName: string, detailLevel: 'lean'): Promise<
|
|
18773
|
-
declare function getOrderByName(orderName: string, detailLevel: 'full'): Promise<
|
|
18774
|
-
declare function getOrderByName(orderName: string): Promise<
|
|
18977
|
+
type LeanOrderByName = z.infer<typeof GetLeanOrderByNameReturn>;
|
|
18978
|
+
type FullOrderByName = NonNullable<NonNullable<OrdersByNameFullQuery['orders']>['edges'][number]['node']> | null;
|
|
18979
|
+
declare function getOrderByName(orderName: string, detailLevel: 'lean'): Promise<LeanOrderByName>;
|
|
18980
|
+
declare function getOrderByName(orderName: string, detailLevel: 'full'): Promise<FullOrderByName>;
|
|
18981
|
+
declare function getOrderByName(orderName: string): Promise<LeanOrderByName>;
|
|
18775
18982
|
|
|
18776
18983
|
declare const GetLeanProductVariantsReturn: z.ZodArray<z.ZodObject<{
|
|
18777
18984
|
productId: z.ZodString;
|
|
@@ -18932,4 +19139,43 @@ type GetOrderPaymentDetailsByIdReturnType = z.infer<typeof GetOrderPaymentDetail
|
|
|
18932
19139
|
*/
|
|
18933
19140
|
declare function getOrderPaymentDetailsById(id: bigint): Promise<GetOrderPaymentDetailsByIdReturnType | null>;
|
|
18934
19141
|
|
|
18935
|
-
|
|
19142
|
+
/**
|
|
19143
|
+
* Transforms GraphQL responses to REST-like format.
|
|
19144
|
+
*
|
|
19145
|
+
* This utility recursively:
|
|
19146
|
+
* 1. Flattens `{ edges: [{ node: ... }] }` → `[...]`
|
|
19147
|
+
* 2. Converts camelCase to snake_case (`lineItems` → `line_items`)
|
|
19148
|
+
* 3. Extracts numeric IDs from GIDs (`gid://shopify/Order/123` → `123`)
|
|
19149
|
+
*/
|
|
19150
|
+
/**
|
|
19151
|
+
* Transform a GraphQL response object to REST-like format.
|
|
19152
|
+
*
|
|
19153
|
+
* @example
|
|
19154
|
+
* ```typescript
|
|
19155
|
+
* const graphqlOrder = {
|
|
19156
|
+
* id: 'gid://shopify/Order/123',
|
|
19157
|
+
* lineItems: {
|
|
19158
|
+
* edges: [{ node: { id: 'gid://shopify/LineItem/456', sku: 'ABC' } }]
|
|
19159
|
+
* }
|
|
19160
|
+
* };
|
|
19161
|
+
*
|
|
19162
|
+
* const restOrder = toRestFormat(graphqlOrder);
|
|
19163
|
+
* // Result:
|
|
19164
|
+
* // {
|
|
19165
|
+
* // id: 123,
|
|
19166
|
+
* // line_items: [{ id: 456, sku: 'ABC' }]
|
|
19167
|
+
* // }
|
|
19168
|
+
* ```
|
|
19169
|
+
*/
|
|
19170
|
+
declare function toRestFormat<T>(obj: T): unknown;
|
|
19171
|
+
|
|
19172
|
+
/**
|
|
19173
|
+
* Extract numeric ID from a Shopify GID string.
|
|
19174
|
+
*
|
|
19175
|
+
* @example
|
|
19176
|
+
* parseGid('gid://shopify/Order/12345678901234') // → 12345678901234
|
|
19177
|
+
* parseGid('gid://shopify/LineItem/999') // → 999
|
|
19178
|
+
*/
|
|
19179
|
+
declare function parseGid(gid: string): number;
|
|
19180
|
+
|
|
19181
|
+
export { type FullOrder, type FullOrderByName, type LeanOrder, type LeanOrderByName, deleteCustomerById, getLeanProductVariants, getOrderById, getOrderByName, getOrderPaymentDetailsById, parseGid, toRestFormat };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { deleteCustomerById } from './mutations/customers/deleteCustomerById.js';
|
|
2
|
-
export {
|
|
2
|
+
export { getOrderById, type FullOrder, type LeanOrder, } from './queries/orders/getOrderById.js';
|
|
3
|
+
export { getOrderByName, type FullOrderByName, type LeanOrderByName, } from './queries/orders/getOrderByName.js';
|
|
3
4
|
export { getLeanProductVariants } from './queries/productVariants/getLeanProductVariants.js';
|
|
4
5
|
export { getOrderPaymentDetailsById } from './queries/orders/getOrderPaymentDetails.js';
|
|
6
|
+
export { parseGid } from './utils/parseGid.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,EACL,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAA;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { deleteCustomerById } from './mutations/customers/deleteCustomerById.js';
|
|
2
|
-
export {
|
|
2
|
+
export { getOrderById, } from './queries/orders/getOrderById.js';
|
|
3
|
+
export { getOrderByName, } from './queries/orders/getOrderByName.js';
|
|
3
4
|
export { getLeanProductVariants } from './queries/productVariants/getLeanProductVariants.js';
|
|
4
5
|
export { getOrderPaymentDetailsById } from './queries/orders/getOrderPaymentDetails.js';
|
|
6
|
+
export { parseGid } from './utils/parseGid.js';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,EACL,YAAY,GAGb,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,cAAc,GAGf,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAA;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
|