@ehrenkind/shopify-lib 0.0.6 → 0.1.0

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.
Files changed (115) hide show
  1. package/README.md +2 -34
  2. package/dist/generated-api-types/2025-04/admin.generated.d.ts +209 -0
  3. package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +1 -0
  4. package/dist/generated-api-types/2025-04/admin.generated.js +5 -0
  5. package/dist/generated-api-types/2025-04/admin.generated.js.map +1 -0
  6. package/dist/generated-api-types/2025-04/admin.types.d.ts +60044 -0
  7. package/dist/generated-api-types/2025-04/admin.types.d.ts.map +1 -0
  8. package/dist/generated-api-types/2025-04/admin.types.js +11451 -0
  9. package/dist/generated-api-types/2025-04/admin.types.js.map +1 -0
  10. package/dist/index.cjs +96 -37
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +168 -49
  13. package/dist/index.d.ts +5 -18816
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +5 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.mjs +95 -37
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/mutations/customers/deleteCustomerById.d.ts +4 -0
  20. package/dist/mutations/customers/deleteCustomerById.d.ts.map +1 -0
  21. package/dist/mutations/customers/deleteCustomerById.js +38 -0
  22. package/dist/mutations/customers/deleteCustomerById.js.map +1 -0
  23. package/dist/mutations/customers/deleteCustomerById.mock.d.ts +4 -0
  24. package/dist/mutations/customers/deleteCustomerById.mock.d.ts.map +1 -0
  25. package/dist/mutations/customers/deleteCustomerById.mock.js +8 -0
  26. package/dist/mutations/customers/deleteCustomerById.mock.js.map +1 -0
  27. package/dist/mutations/customers/deleteCustomerById.test.d.ts +2 -0
  28. package/dist/mutations/customers/deleteCustomerById.test.d.ts.map +1 -0
  29. package/dist/mutations/customers/deleteCustomerById.test.js +10 -0
  30. package/dist/mutations/customers/deleteCustomerById.test.js.map +1 -0
  31. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts +4 -0
  32. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts.map +1 -0
  33. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js +56 -0
  34. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js.map +1 -0
  35. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts +3 -0
  36. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts.map +1 -0
  37. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js +11 -0
  38. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js.map +1 -0
  39. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts +2 -0
  40. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts.map +1 -0
  41. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js +11 -0
  42. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js.map +1 -0
  43. package/dist/queries/orders/getOrderByName.d.ts +72 -0
  44. package/dist/queries/orders/getOrderByName.d.ts.map +1 -0
  45. package/dist/queries/orders/getOrderByName.js +117 -0
  46. package/dist/queries/orders/getOrderByName.js.map +1 -0
  47. package/dist/queries/orders/getOrderByName.mock.d.ts +21 -0
  48. package/dist/queries/orders/getOrderByName.mock.d.ts.map +1 -0
  49. package/dist/queries/orders/getOrderByName.mock.js +55 -0
  50. package/dist/queries/orders/getOrderByName.mock.js.map +1 -0
  51. package/dist/queries/orders/getOrderByName.queries.d.ts +3 -0
  52. package/dist/queries/orders/getOrderByName.queries.d.ts.map +1 -0
  53. package/dist/queries/orders/getOrderByName.queries.js +335 -0
  54. package/dist/queries/orders/getOrderByName.queries.js.map +1 -0
  55. package/dist/queries/orders/getOrderByName.test.d.ts +2 -0
  56. package/dist/queries/orders/getOrderByName.test.d.ts.map +1 -0
  57. package/dist/queries/orders/getOrderByName.test.js +28 -0
  58. package/dist/queries/orders/getOrderByName.test.js.map +1 -0
  59. package/dist/queries/orders/getOrderPaymentDetails.d.ts +130 -0
  60. package/dist/queries/orders/getOrderPaymentDetails.d.ts.map +1 -0
  61. package/dist/queries/orders/getOrderPaymentDetails.js +45 -0
  62. package/dist/queries/orders/getOrderPaymentDetails.js.map +1 -0
  63. package/dist/queries/orders/getOrderPaymentDetails.queries.d.ts +2 -0
  64. package/dist/queries/orders/getOrderPaymentDetails.queries.d.ts.map +1 -0
  65. package/dist/queries/orders/getOrderPaymentDetails.queries.js +21 -0
  66. package/dist/queries/orders/getOrderPaymentDetails.queries.js.map +1 -0
  67. package/dist/queries/productVariants/getLeanProductVariants.d.ts +33 -0
  68. package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +1 -0
  69. package/dist/queries/productVariants/getLeanProductVariants.js +81 -0
  70. package/dist/queries/productVariants/getLeanProductVariants.js.map +1 -0
  71. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +3 -0
  72. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +1 -0
  73. package/dist/queries/productVariants/getLeanProductVariants.mock.js +33 -0
  74. package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +1 -0
  75. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +2 -0
  76. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +1 -0
  77. package/dist/queries/productVariants/getLeanProductVariants.test.js +38 -0
  78. package/dist/queries/productVariants/getLeanProductVariants.test.js.map +1 -0
  79. package/dist/utils/logger.d.ts +11 -0
  80. package/dist/utils/logger.d.ts.map +1 -0
  81. package/dist/utils/logger.js +50 -0
  82. package/dist/utils/logger.js.map +1 -0
  83. package/dist/utils/mswHandlers.d.ts +2 -0
  84. package/dist/utils/mswHandlers.d.ts.map +1 -0
  85. package/dist/utils/mswHandlers.js +41 -0
  86. package/dist/utils/mswHandlers.js.map +1 -0
  87. package/dist/utils/shopifyClient.d.ts +6 -0
  88. package/dist/utils/shopifyClient.d.ts.map +1 -0
  89. package/dist/utils/shopifyClient.js +82 -0
  90. package/dist/utils/shopifyClient.js.map +1 -0
  91. package/dist/utils/shopifyClient.mock.d.ts +3 -0
  92. package/dist/utils/shopifyClient.mock.d.ts.map +1 -0
  93. package/dist/utils/shopifyClient.mock.js +19 -0
  94. package/dist/utils/shopifyClient.mock.js.map +1 -0
  95. package/dist/utils/shopifyClient.test.d.ts +2 -0
  96. package/dist/utils/shopifyClient.test.d.ts.map +1 -0
  97. package/dist/utils/shopifyClient.test.js +27 -0
  98. package/dist/utils/shopifyClient.test.js.map +1 -0
  99. package/dist/utils/shopifyFetch.d.ts +24 -0
  100. package/dist/utils/shopifyFetch.d.ts.map +1 -0
  101. package/dist/utils/shopifyFetch.js +67 -0
  102. package/dist/utils/shopifyFetch.js.map +1 -0
  103. package/dist/utils/shopifyFetch.test.d.ts +2 -0
  104. package/dist/utils/shopifyFetch.test.d.ts.map +1 -0
  105. package/dist/utils/shopifyFetch.test.js +17 -0
  106. package/dist/utils/shopifyFetch.test.js.map +1 -0
  107. package/dist/utils/test-setup.d.ts +2 -0
  108. package/dist/utils/test-setup.d.ts.map +1 -0
  109. package/dist/utils/test-setup.js +13 -0
  110. package/dist/utils/test-setup.js.map +1 -0
  111. package/dist/utils/zod.d.ts +3 -0
  112. package/dist/utils/zod.d.ts.map +1 -0
  113. package/dist/utils/zod.js +19 -0
  114. package/dist/utils/zod.js.map +1 -0
  115. package/package.json +3 -2
@@ -0,0 +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,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAA;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { deleteCustomerById } from './mutations/customers/deleteCustomerById.js';
2
+ export { getOrderByName } from './queries/orders/getOrderByName.js';
3
+ export { getLeanProductVariants } from './queries/productVariants/getLeanProductVariants.js';
4
+ export { getOrderPaymentDetailsById } from './queries/orders/getOrderPaymentDetails.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAA;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // src/queries/orders/getOrderByName.ts
1
+ // src/mutations/customers/deleteCustomerById.ts
2
2
  import z3 from "zod";
3
3
 
4
4
  // src/utils/logger.ts
@@ -206,6 +206,47 @@ async function returnOutputParsed(data, Model) {
206
206
  return parsed.data;
207
207
  }
208
208
 
209
+ // src/mutations/customers/deleteCustomerById.ts
210
+ var DeleteCustomerByIdReturn = z3.string().nullable();
211
+ async function deleteCustomerById(customerId) {
212
+ const mutation = gql`#graphql
213
+ mutation customerDelete($input: CustomerDeleteInput!) {
214
+ customerDelete(input: $input) {
215
+ deletedCustomerId
216
+ userErrors {
217
+ field
218
+ message
219
+ }
220
+ }
221
+ }
222
+ `;
223
+ const variables = {
224
+ input: { id: customerId }
225
+ };
226
+ const response = await fetchShopifyGraphql({
227
+ query: mutation,
228
+ variables,
229
+ dataExtractor: (data) => {
230
+ if (!data.customerDelete) {
231
+ throw new Error("GraphQL response missing 'customerDelete' field");
232
+ }
233
+ return {
234
+ nodes: [
235
+ { deletedCustomerId: data.customerDelete.deletedCustomerId ?? null }
236
+ ],
237
+ userErrors: data.customerDelete.userErrors
238
+ };
239
+ }
240
+ });
241
+ return returnOutputParsed(
242
+ response[0]?.deletedCustomerId ?? null,
243
+ DeleteCustomerByIdReturn
244
+ );
245
+ }
246
+
247
+ // src/queries/orders/getOrderByName.ts
248
+ import z4 from "zod";
249
+
209
250
  // src/queries/orders/getOrderByName.queries.ts
210
251
  var queryOrdersByName = gql`#graphql
211
252
  query ordersByName($first: Int!, $queryFilter: String!) {
@@ -542,22 +583,22 @@ var queryOrdersByNameFull = gql`#graphql
542
583
  `;
543
584
 
544
585
  // src/queries/orders/getOrderByName.ts
545
- var GetLeanOrderByNameReturn = z3.object({
546
- id: z3.string(),
547
- name: z3.string(),
548
- createdAt: z3.string(),
549
- updatedAt: z3.string(),
550
- totalPrice: z3.object({
551
- amount: z3.string(),
552
- currencyCode: z3.string()
586
+ var GetLeanOrderByNameReturn = z4.object({
587
+ id: z4.string(),
588
+ name: z4.string(),
589
+ createdAt: z4.string(),
590
+ updatedAt: z4.string(),
591
+ totalPrice: z4.object({
592
+ amount: z4.string(),
593
+ currencyCode: z4.string()
553
594
  }),
554
- customer: z3.object({
555
- id: z3.string(),
556
- displayName: z3.string(),
557
- emailAddress: z3.string().nullable()
595
+ customer: z4.object({
596
+ id: z4.string(),
597
+ displayName: z4.string(),
598
+ emailAddress: z4.string().nullable()
558
599
  }).nullable(),
559
- financialStatus: z3.string().nullable(),
560
- fulfillmentStatus: z3.string().nullable()
600
+ financialStatus: z4.string().nullable(),
601
+ fulfillmentStatus: z4.string().nullable()
561
602
  }).nullable();
562
603
  async function getOrderByName(orderName, detailLevel = "lean") {
563
604
  if (detailLevel === "lean") {
@@ -648,14 +689,14 @@ async function getFullOrderByName(orderName) {
648
689
  }
649
690
 
650
691
  // src/queries/productVariants/getLeanProductVariants.ts
651
- import z4 from "zod";
652
- var GetLeanProductVariantsReturn = z4.array(
653
- z4.object({
654
- productId: z4.string(),
655
- productTitle: z4.string(),
656
- variantId: z4.string(),
657
- variantTitle: z4.string(),
658
- sku: z4.string()
692
+ import z5 from "zod";
693
+ var GetLeanProductVariantsReturn = z5.array(
694
+ z5.object({
695
+ productId: z5.string(),
696
+ productTitle: z5.string(),
697
+ variantId: z5.string(),
698
+ variantTitle: z5.string(),
699
+ sku: z5.string()
659
700
  })
660
701
  );
661
702
  async function getLeanProductVariants(skus) {
@@ -723,14 +764,20 @@ async function getLeanProductVariants(skus) {
723
764
  return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn);
724
765
  }
725
766
 
726
- // src/queries/order/getOrderPaymentDetails.ts
727
- import z5 from "zod";
767
+ // src/queries/orders/getOrderPaymentDetails.ts
768
+ import z6 from "zod";
728
769
 
729
- // src/queries/order/getOrderPaymentDetails.queries.ts
770
+ // src/queries/orders/getOrderPaymentDetails.queries.ts
730
771
  var queryOrderPaymentDetails = gql`#graphql
731
772
  query orderPaymentDetailsById($id: ID!) {
732
773
  order(id: $id) {
733
774
  transactions {
775
+ amountSet {
776
+ shopMoney {
777
+ amount
778
+ currencyCode
779
+ }
780
+ }
734
781
  createdAt
735
782
  gateway
736
783
  formattedGateway
@@ -741,16 +788,22 @@ var queryOrderPaymentDetails = gql`#graphql
741
788
  }
742
789
  `;
743
790
 
744
- // src/queries/order/getOrderPaymentDetails.ts
745
- var GetOrderPaymentDetailsByNameReturn = z5.object({
746
- order: z5.object({
747
- transactions: z5.array(
748
- z5.object({
749
- createdAt: z5.string(),
750
- gateway: z5.string(),
751
- formattedGateway: z5.string(),
752
- kind: z5.string(),
753
- paymentId: z5.string()
791
+ // src/queries/orders/getOrderPaymentDetails.ts
792
+ var GetOrderPaymentDetailsByIdReturn = z6.object({
793
+ order: z6.object({
794
+ transactions: z6.array(
795
+ z6.object({
796
+ amountSet: z6.object({
797
+ shopMoney: z6.object({
798
+ amount: z6.string(),
799
+ currencyCode: z6.string()
800
+ })
801
+ }),
802
+ createdAt: z6.string(),
803
+ gateway: z6.string(),
804
+ formattedGateway: z6.string(),
805
+ kind: z6.string(),
806
+ paymentId: z6.string()
754
807
  })
755
808
  )
756
809
  })
@@ -763,9 +816,14 @@ async function getOrderPaymentDetailsById(id) {
763
816
  query: queryOrderPaymentDetails,
764
817
  variables
765
818
  });
766
- return await returnOutputParsed(response, GetOrderPaymentDetailsByNameReturn);
819
+ if (!response.order) {
820
+ logger.debug(`No order found with ID: ${id}`);
821
+ return null;
822
+ }
823
+ return await returnOutputParsed(response, GetOrderPaymentDetailsByIdReturn);
767
824
  }
768
825
  export {
826
+ deleteCustomerById,
769
827
  getLeanProductVariants,
770
828
  getOrderByName,
771
829
  getOrderPaymentDetailsById
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queries/orders/getOrderByName.ts","../src/utils/logger.ts","../src/utils/shopifyClient.ts","../src/utils/shopifyFetch.ts","../src/utils/zod.ts","../src/queries/orders/getOrderByName.queries.ts","../src/queries/productVariants/getLeanProductVariants.ts","../src/queries/order/getOrderPaymentDetails.ts","../src/queries/order/getOrderPaymentDetails.queries.ts"],"sourcesContent":["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","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 { 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 {\n convertIdIntoGid,\n fetchShopifyGraphql,\n} from '../../utils/shopifyFetch.js'\nimport { returnOutputParsed } from '../../utils/zod.js'\nimport { queryOrderPaymentDetails } from './getOrderPaymentDetails.queries.js'\n\nconst GetOrderPaymentDetailsByNameReturn = z.object({\n order: z.object({\n transactions: z.array(\n z.object({\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 GetOrderPaymentDetailsByNameReturnType = z.infer<\n typeof GetOrderPaymentDetailsByNameReturn\n>\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 {bigint} id - The numerical Shopify order id for (e.g., \"12345678\").\n * @returns {Promise<GetOrderPaymentDetailsByNameReturnType>} 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 getOrderPaymentDetailsById(\n id: bigint,\n): Promise<GetOrderPaymentDetailsByNameReturnType> {\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 return await returnOutputParsed(response, GetOrderPaymentDetailsByNameReturn)\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 createdAt\n gateway\n formattedGateway\n kind\n paymentId\n }\n }\n }\n`\n"],"mappings":"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","names":["z","env","z","z","z","z","z","z","z"]}
1
+ {"version":3,"sources":["../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":["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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C1B,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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","names":["z","env","z","z","z","z","z","z","z","z","z"]}
@@ -0,0 +1,4 @@
1
+ import z from 'zod';
2
+ export declare const DeleteCustomerByIdReturn: z.ZodNullable<z.ZodString>;
3
+ export declare function deleteCustomerById(customerId: string): Promise<z.infer<typeof DeleteCustomerByIdReturn>>;
4
+ //# sourceMappingURL=deleteCustomerById.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.d.ts","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AASnB,eAAO,MAAM,wBAAwB,4BAAwB,CAAA;AAI7D,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAwCnD"}
@@ -0,0 +1,38 @@
1
+ import z from 'zod';
2
+ import { gql } from '../../utils/logger';
3
+ import { fetchShopifyGraphql } from '../../utils/shopifyFetch';
4
+ import { returnOutputParsed } from '../../utils/zod';
5
+ export const DeleteCustomerByIdReturn = z.string().nullable();
6
+ export async function deleteCustomerById(customerId) {
7
+ const mutation = gql `#graphql
8
+ mutation customerDelete($input: CustomerDeleteInput!) {
9
+ customerDelete(input: $input) {
10
+ deletedCustomerId
11
+ userErrors {
12
+ field
13
+ message
14
+ }
15
+ }
16
+ }
17
+ `;
18
+ const variables = {
19
+ input: { id: customerId },
20
+ };
21
+ const response = await fetchShopifyGraphql({
22
+ query: mutation,
23
+ variables,
24
+ dataExtractor: (data) => {
25
+ if (!data.customerDelete) {
26
+ throw new Error("GraphQL response missing 'customerDelete' field");
27
+ }
28
+ return {
29
+ nodes: [
30
+ { deletedCustomerId: data.customerDelete.deletedCustomerId ?? null },
31
+ ],
32
+ userErrors: data.customerDelete.userErrors,
33
+ };
34
+ },
35
+ });
36
+ return returnOutputParsed(response[0]?.deletedCustomerId ?? null, DeleteCustomerByIdReturn);
37
+ }
38
+ //# sourceMappingURL=deleteCustomerById.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.js","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAKnB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAA;AAI7D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB;IAElB,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;GAUnB,CAAA;IAED,MAAM,SAAS,GAAoC;QACjD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;KAC1B,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAGxC;QACA,KAAK,EAAE,QAAQ;QACf,SAAS;QACT,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACpE,CAAC;YACD,OAAO;gBACL,KAAK,EAAE;oBACL,EAAE,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,IAAI,IAAI,EAAE;iBACrE;gBACD,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU;aAC3C,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,kBAAkB,CACvB,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,IAAI,EACtC,wBAAwB,CACzB,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CustomerDeleteMutation } from '../../generated-api-types/2025-04/admin.generated';
2
+ export declare const customerDeleteMock: CustomerDeleteMutation;
3
+ export declare const expectedDeletedCustomerId = "gid://shopify/Customer/1234567890";
4
+ //# sourceMappingURL=deleteCustomerById.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.mock.d.ts","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAA;AAE/F,eAAO,MAAM,kBAAkB,EAAE,sBAKhC,CAAA;AAED,eAAO,MAAM,yBAAyB,sCAAsC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const customerDeleteMock = {
2
+ customerDelete: {
3
+ deletedCustomerId: 'gid://shopify/Customer/1234567890',
4
+ userErrors: [],
5
+ },
6
+ };
7
+ export const expectedDeletedCustomerId = 'gid://shopify/Customer/1234567890';
8
+ //# sourceMappingURL=deleteCustomerById.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.mock.js","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,cAAc,EAAE;QACd,iBAAiB,EAAE,mCAAmC;QACtD,UAAU,EAAE,EAAE;KACf;CACF,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,mCAAmC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deleteCustomerById.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.test.d.ts","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { deleteCustomerById } from './deleteCustomerById';
3
+ import { expectedDeletedCustomerId } from './deleteCustomerById.mock';
4
+ describe('deleteCustomerById', () => {
5
+ it('should return deleted customer ID on success', async () => {
6
+ const result = await deleteCustomerById('gid://shopify/Customer/1234567890');
7
+ expect(result).toBe(expectedDeletedCustomerId);
8
+ });
9
+ });
10
+ //# sourceMappingURL=deleteCustomerById.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteCustomerById.test.js","sourceRoot":"","sources":["../../../src/mutations/customers/deleteCustomerById.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAErE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,mCAAmC,CAAC,CAAA;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import z from 'zod';
2
+ export declare const ConnectMetaObjectToProductVariantReturn: z.ZodArray<z.ZodString, "many">;
3
+ export declare function connectMetaObjectToProductVariant(productId: string, variantId: string, metaObjectId: string, metaObjectKey: string): Promise<z.infer<typeof ConnectMetaObjectToProductVariantReturn>>;
4
+ //# sourceMappingURL=connectMetaObjectToProductVariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AASnB,eAAO,MAAM,uCAAuC,iCAAsB,CAAA;AAS1E,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC,CA4DlE"}
@@ -0,0 +1,56 @@
1
+ import z from 'zod';
2
+ import { gql } from '../../utils/logger';
3
+ import { fetchShopifyGraphql } from '../../utils/shopifyFetch';
4
+ import { returnOutputParsed } from '../../utils/zod';
5
+ export const ConnectMetaObjectToProductVariantReturn = z.array(z.string());
6
+ export async function connectMetaObjectToProductVariant(productId, variantId, metaObjectId, metaObjectKey) {
7
+ const mutation = gql `#graphql
8
+ mutation connectMetaObjectToProductVariant($productId: ID!, $variantId: ID!, $metaObjectId: String!, $metaObjectKey: String!) {
9
+ productVariantsBulkUpdate(
10
+ productId: $productId
11
+ variants: [
12
+ {
13
+ id: $variantId
14
+ metafields: [
15
+ {
16
+ namespace: "custom"
17
+ key: $metaObjectKey
18
+ value: $metaObjectId
19
+ type: "metaobject_reference"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ ) {
25
+ productVariants {
26
+ id
27
+ }
28
+ userErrors {
29
+ field
30
+ message
31
+ }
32
+ }
33
+ }
34
+ `;
35
+ const variables = {
36
+ productId,
37
+ variantId,
38
+ metaObjectId,
39
+ metaObjectKey,
40
+ };
41
+ const response = await fetchShopifyGraphql({
42
+ query: mutation,
43
+ variables,
44
+ dataExtractor: (data) => {
45
+ if (!data.productVariantsBulkUpdate) {
46
+ throw new Error("GraphQL response for product variants bulk update is missing the 'productVariantsBulkUpdate' field.");
47
+ }
48
+ return {
49
+ nodes: data.productVariantsBulkUpdate.productVariants || [],
50
+ userErrors: data.productVariantsBulkUpdate.userErrors,
51
+ };
52
+ },
53
+ });
54
+ return returnOutputParsed(response.map((item) => item.id), ConnectMetaObjectToProductVariantReturn);
55
+ }
56
+ //# sourceMappingURL=connectMetaObjectToProductVariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAKnB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AAS1E,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,SAAiB,EACjB,SAAiB,EACjB,YAAoB,EACpB,aAAqB;IAErB,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BnB,CAAA;IAED,MAAM,SAAS,GAAuD;QACpE,SAAS;QACT,SAAS;QACT,YAAY;QACZ,aAAa;KACd,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAGxC;QACA,KAAK,EAAE,QAAQ;QACf,SAAS;QACT,aAAa,EAAE,CAAC,IAA+C,EAAE,EAAE;YACjE,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAA;YACH,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,eAAe,IAAI,EAAE;gBAC3D,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC,UAAU;aACtD,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,kBAAkB,CACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAC/B,uCAAuC,CACxC,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ConnectMetaObjectToProductVariantMutation } from '../../generated-api-types/2025-04/admin.generated';
2
+ export declare const connectMetaObjectToProductVariantMock: ConnectMetaObjectToProductVariantMutation;
3
+ //# sourceMappingURL=connectMetaObjectToProductVariant.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.mock.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,mDAAmD,CAAA;AAElH,eAAO,MAAM,qCAAqC,EAAE,yCAUjD,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const connectMetaObjectToProductVariantMock = {
2
+ productVariantsBulkUpdate: {
3
+ productVariants: [
4
+ {
5
+ id: 'gid://shopify/ProductVariant/1',
6
+ },
7
+ ],
8
+ userErrors: [],
9
+ },
10
+ };
11
+ //# sourceMappingURL=connectMetaObjectToProductVariant.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.mock.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qCAAqC,GAChD;IACE,yBAAyB,EAAE;QACzB,eAAe,EAAE;YACf;gBACE,EAAE,EAAE,gCAAgC;aACrC;SACF;QACD,UAAU,EAAE,EAAE;KACf;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=connectMetaObjectToProductVariant.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.test.d.ts","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { connectMetaObjectToProductVariant } from './connectMetaObjectToProductVariant';
3
+ import { connectMetaObjectToProductVariantMock } from './connectMetaObjectToProductVariant.mock';
4
+ describe('productVariantsBulkUpdate', () => {
5
+ const expectedResult = connectMetaObjectToProductVariantMock.productVariantsBulkUpdate?.productVariants?.map((variant) => variant.id);
6
+ it('connect meta object to product (variant)', async () => {
7
+ const actualResult = await connectMetaObjectToProductVariant('gid://shopify/Product/test', 'gid://shopify/ProductVariant/test', 'gid://shopify/Metaobject/test', 'erpnext_content_configuration');
8
+ expect(actualResult).toEqual(expectedResult);
9
+ });
10
+ });
11
+ //# sourceMappingURL=connectMetaObjectToProductVariant.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMetaObjectToProductVariant.test.js","sourceRoot":"","sources":["../../../src/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAA;AACvF,OAAO,EAAE,qCAAqC,EAAE,MAAM,0CAA0C,CAAA;AAEhG,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,cAAc,GAClB,qCAAqC,CAAC,yBAAyB,EAAE,eAAe,EAAE,GAAG,CACnF,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CACxB,CAAA;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,YAAY,GAAG,MAAM,iCAAiC,CAC1D,4BAA4B,EAC5B,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,CAChC,CAAA;QACD,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}