@ehrenkind/shopify-lib 0.3.0 → 0.4.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 (125) hide show
  1. package/dist/generated-api-types/2025-04/admin.generated.d.ts +125 -0
  2. package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +1 -1
  3. package/dist/index.d.ts +7 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +7 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/mutations/customers/deleteCustomerById.d.ts +1 -3
  8. package/dist/mutations/customers/deleteCustomerById.d.ts.map +1 -1
  9. package/dist/mutations/customers/deleteCustomerById.js +1 -4
  10. package/dist/mutations/customers/deleteCustomerById.js.map +1 -1
  11. package/dist/queries/customers/getCustomersByEmail.d.ts +13 -0
  12. package/dist/queries/customers/getCustomersByEmail.d.ts.map +1 -0
  13. package/dist/queries/customers/getCustomersByEmail.js +26 -0
  14. package/dist/queries/customers/getCustomersByEmail.js.map +1 -0
  15. package/dist/queries/customers/getCustomersByEmail.mock.d.ts +8 -0
  16. package/dist/queries/customers/getCustomersByEmail.mock.d.ts.map +1 -0
  17. package/dist/queries/customers/getCustomersByEmail.mock.js +54 -0
  18. package/dist/queries/customers/getCustomersByEmail.mock.js.map +1 -0
  19. package/dist/queries/customers/getCustomersByEmail.queries.d.ts +2 -0
  20. package/dist/queries/customers/getCustomersByEmail.queries.d.ts.map +1 -0
  21. package/dist/queries/customers/getCustomersByEmail.queries.js +41 -0
  22. package/dist/queries/customers/getCustomersByEmail.queries.js.map +1 -0
  23. package/dist/queries/customers/getCustomersByEmail.test.d.ts +2 -0
  24. package/dist/queries/customers/getCustomersByEmail.test.d.ts.map +1 -0
  25. package/dist/queries/customers/getCustomersByEmail.test.js +29 -0
  26. package/dist/queries/customers/getCustomersByEmail.test.js.map +1 -0
  27. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.d.ts +14 -0
  28. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.d.ts.map +1 -0
  29. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.js +27 -0
  30. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.js.map +1 -0
  31. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.d.ts +12 -0
  32. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.d.ts.map +1 -0
  33. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.js +41 -0
  34. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.js.map +1 -0
  35. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.d.ts +2 -0
  36. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.d.ts.map +1 -0
  37. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.js +28 -0
  38. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.js.map +1 -0
  39. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.d.ts +2 -0
  40. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.d.ts.map +1 -0
  41. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.js +19 -0
  42. package/dist/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.js.map +1 -0
  43. package/dist/queries/fulfillments/getFulfillmentById.d.ts +12 -0
  44. package/dist/queries/fulfillments/getFulfillmentById.d.ts.map +1 -0
  45. package/dist/queries/fulfillments/getFulfillmentById.js +27 -0
  46. package/dist/queries/fulfillments/getFulfillmentById.js.map +1 -0
  47. package/dist/queries/fulfillments/getFulfillmentById.mock.d.ts +21 -0
  48. package/dist/queries/fulfillments/getFulfillmentById.mock.d.ts.map +1 -0
  49. package/dist/queries/fulfillments/getFulfillmentById.mock.js +83 -0
  50. package/dist/queries/fulfillments/getFulfillmentById.mock.js.map +1 -0
  51. package/dist/queries/fulfillments/getFulfillmentById.queries.d.ts +2 -0
  52. package/dist/queries/fulfillments/getFulfillmentById.queries.d.ts.map +1 -0
  53. package/dist/queries/fulfillments/getFulfillmentById.queries.js +60 -0
  54. package/dist/queries/fulfillments/getFulfillmentById.queries.js.map +1 -0
  55. package/dist/queries/fulfillments/getFulfillmentById.test.d.ts +2 -0
  56. package/dist/queries/fulfillments/getFulfillmentById.test.d.ts.map +1 -0
  57. package/dist/queries/fulfillments/getFulfillmentById.test.js +37 -0
  58. package/dist/queries/fulfillments/getFulfillmentById.test.js.map +1 -0
  59. package/dist/queries/fulfillments/getFulfillmentTrackingIds.d.ts +14 -0
  60. package/dist/queries/fulfillments/getFulfillmentTrackingIds.d.ts.map +1 -0
  61. package/dist/queries/fulfillments/getFulfillmentTrackingIds.js +36 -0
  62. package/dist/queries/fulfillments/getFulfillmentTrackingIds.js.map +1 -0
  63. package/dist/queries/fulfillments/getFulfillmentTrackingIds.mock.d.ts +5 -0
  64. package/dist/queries/fulfillments/getFulfillmentTrackingIds.mock.d.ts.map +1 -0
  65. package/dist/queries/fulfillments/getFulfillmentTrackingIds.mock.js +20 -0
  66. package/dist/queries/fulfillments/getFulfillmentTrackingIds.mock.js.map +1 -0
  67. package/dist/queries/fulfillments/getFulfillmentTrackingIds.queries.d.ts +2 -0
  68. package/dist/queries/fulfillments/getFulfillmentTrackingIds.queries.d.ts.map +1 -0
  69. package/dist/queries/fulfillments/getFulfillmentTrackingIds.queries.js +13 -0
  70. package/dist/queries/fulfillments/getFulfillmentTrackingIds.queries.js.map +1 -0
  71. package/dist/queries/fulfillments/getFulfillmentTrackingIds.test.d.ts +2 -0
  72. package/dist/queries/fulfillments/getFulfillmentTrackingIds.test.d.ts.map +1 -0
  73. package/dist/queries/fulfillments/getFulfillmentTrackingIds.test.js +61 -0
  74. package/dist/queries/fulfillments/getFulfillmentTrackingIds.test.js.map +1 -0
  75. package/dist/queries/orders/getOrderById.d.ts +14 -14
  76. package/dist/queries/orders/getOrderById.mock.d.ts.map +1 -1
  77. package/dist/queries/orders/getOrderByName.d.ts +6 -6
  78. package/dist/queries/orders/getOrderCancellationInfo.d.ts +12 -0
  79. package/dist/queries/orders/getOrderCancellationInfo.d.ts.map +1 -0
  80. package/dist/queries/orders/getOrderCancellationInfo.js +35 -0
  81. package/dist/queries/orders/getOrderCancellationInfo.js.map +1 -0
  82. package/dist/queries/orders/getOrderCancellationInfo.mock.d.ts +6 -0
  83. package/dist/queries/orders/getOrderCancellationInfo.mock.d.ts.map +1 -0
  84. package/dist/queries/orders/getOrderCancellationInfo.mock.js +29 -0
  85. package/dist/queries/orders/getOrderCancellationInfo.mock.js.map +1 -0
  86. package/dist/queries/orders/getOrderCancellationInfo.queries.d.ts +2 -0
  87. package/dist/queries/orders/getOrderCancellationInfo.queries.d.ts.map +1 -0
  88. package/dist/queries/orders/getOrderCancellationInfo.queries.js +15 -0
  89. package/dist/queries/orders/getOrderCancellationInfo.queries.js.map +1 -0
  90. package/dist/queries/orders/getOrderCancellationInfo.test.d.ts +2 -0
  91. package/dist/queries/orders/getOrderCancellationInfo.test.d.ts.map +1 -0
  92. package/dist/queries/orders/getOrderCancellationInfo.test.js +34 -0
  93. package/dist/queries/orders/getOrderCancellationInfo.test.js.map +1 -0
  94. package/dist/queries/orders/getOrderPaymentDetails.d.ts +5 -123
  95. package/dist/queries/orders/getOrderPaymentDetails.d.ts.map +1 -1
  96. package/dist/queries/orders/getOrderPaymentDetails.js +3 -22
  97. package/dist/queries/orders/getOrderPaymentDetails.js.map +1 -1
  98. package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts +7 -9
  99. package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts.map +1 -1
  100. package/dist/queries/orders/getOrderPaymentDetails.mock.js +1 -3
  101. package/dist/queries/orders/getOrderPaymentDetails.mock.js.map +1 -1
  102. package/dist/queries/orders/getOrdersByCustomerId.d.ts +15 -0
  103. package/dist/queries/orders/getOrdersByCustomerId.d.ts.map +1 -0
  104. package/dist/queries/orders/getOrdersByCustomerId.js +32 -0
  105. package/dist/queries/orders/getOrdersByCustomerId.js.map +1 -0
  106. package/dist/queries/orders/getOrdersByCustomerId.mock.d.ts +15 -0
  107. package/dist/queries/orders/getOrdersByCustomerId.mock.d.ts.map +1 -0
  108. package/dist/queries/orders/getOrdersByCustomerId.mock.js +76 -0
  109. package/dist/queries/orders/getOrdersByCustomerId.mock.js.map +1 -0
  110. package/dist/queries/orders/getOrdersByCustomerId.queries.d.ts +2 -0
  111. package/dist/queries/orders/getOrdersByCustomerId.queries.d.ts.map +1 -0
  112. package/dist/queries/orders/getOrdersByCustomerId.queries.js +41 -0
  113. package/dist/queries/orders/getOrdersByCustomerId.queries.js.map +1 -0
  114. package/dist/queries/orders/getOrdersByCustomerId.test.d.ts +2 -0
  115. package/dist/queries/orders/getOrdersByCustomerId.test.d.ts.map +1 -0
  116. package/dist/queries/orders/getOrdersByCustomerId.test.js +33 -0
  117. package/dist/queries/orders/getOrdersByCustomerId.test.js.map +1 -0
  118. package/dist/queries/productVariants/getLeanProductVariants.d.ts +2 -2
  119. package/dist/utils/mswHandlers.d.ts.map +1 -1
  120. package/dist/utils/mswHandlers.js +18 -0
  121. package/dist/utils/mswHandlers.js.map +1 -1
  122. package/dist/utils/shopifyFetch.d.ts +1 -1
  123. package/dist/utils/shopifyFetch.d.ts.map +1 -1
  124. package/dist/utils/shopifyFetch.js.map +1 -1
  125. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ import type { FulfillmentOrdersByOrderIdQuery } from '../../generated-api-types/2025-04/admin.generated';
2
+ export declare const fulfillmentOrdersByOrderIdMock: FulfillmentOrdersByOrderIdQuery;
3
+ export declare const expectedFulfillmentOrdersByOrderId: (Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentOrder, "id" | "status"> & {
4
+ lineItems: {
5
+ edges: Array<{
6
+ node: (Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentOrderLineItem, "id" | "remainingQuantity" | "totalQuantity"> & {
7
+ lineItem: Pick<import("../../generated-api-types/2025-04/admin.types").LineItem, "id">;
8
+ });
9
+ }>;
10
+ };
11
+ })[];
12
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.mock.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAA;AAGxG,eAAO,MAAM,8BAA8B,EAAE,+BAqC5C,CAAA;AAED,eAAO,MAAM,kCAAkC;;;;;;;;IAGtC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { FulfillmentOrderStatus } from '../../generated-api-types/2025-04/admin.types';
2
+ export const fulfillmentOrdersByOrderIdMock = {
3
+ order: {
4
+ fulfillmentOrders: {
5
+ edges: [
6
+ {
7
+ node: {
8
+ id: 'gid://shopify/FulfillmentOrder/7654321098765',
9
+ status: FulfillmentOrderStatus.Open,
10
+ lineItems: {
11
+ edges: [
12
+ {
13
+ node: {
14
+ id: 'gid://shopify/FulfillmentOrderLineItem/111111111111',
15
+ remainingQuantity: 1,
16
+ totalQuantity: 1,
17
+ lineItem: {
18
+ id: 'gid://shopify/LineItem/222222222222',
19
+ },
20
+ },
21
+ },
22
+ {
23
+ node: {
24
+ id: 'gid://shopify/FulfillmentOrderLineItem/444444444444',
25
+ remainingQuantity: 2,
26
+ totalQuantity: 2,
27
+ lineItem: {
28
+ id: 'gid://shopify/LineItem/555555555555',
29
+ },
30
+ },
31
+ },
32
+ ],
33
+ },
34
+ },
35
+ },
36
+ ],
37
+ },
38
+ },
39
+ };
40
+ export const expectedFulfillmentOrdersByOrderId = fulfillmentOrdersByOrderIdMock.order?.fulfillmentOrders.edges.map((edge) => edge.node) ?? [];
41
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.mock.js","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAEtF,MAAM,CAAC,MAAM,8BAA8B,GAAoC;IAC7E,KAAK,EAAE;QACL,iBAAiB,EAAE;YACjB,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE;wBACJ,EAAE,EAAE,8CAA8C;wBAClD,MAAM,EAAE,sBAAsB,CAAC,IAAI;wBACnC,SAAS,EAAE;4BACT,KAAK,EAAE;gCACL;oCACE,IAAI,EAAE;wCACJ,EAAE,EAAE,qDAAqD;wCACzD,iBAAiB,EAAE,CAAC;wCACpB,aAAa,EAAE,CAAC;wCAChB,QAAQ,EAAE;4CACR,EAAE,EAAE,qCAAqC;yCAC1C;qCACF;iCACF;gCACD;oCACE,IAAI,EAAE;wCACJ,EAAE,EAAE,qDAAqD;wCACzD,iBAAiB,EAAE,CAAC;wCACpB,aAAa,EAAE,CAAC;wCAChB,QAAQ,EAAE;4CACR,EAAE,EAAE,qCAAqC;yCAC1C;qCACF;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAA;AAED,MAAM,CAAC,MAAM,kCAAkC,GAC7C,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CACpB,IAAI,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const queryFulfillmentOrdersByOrderId: string;
2
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.queries.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,+BAA+B,QAyB3C,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { gql } from '../../utils/logger';
2
+ export const queryFulfillmentOrdersByOrderId = gql `#graphql
3
+ query fulfillmentOrdersByOrderId($orderId: ID!) {
4
+ order(id: $orderId) {
5
+ fulfillmentOrders(first: 50) {
6
+ edges {
7
+ node {
8
+ id
9
+ status
10
+ lineItems(first: 100) {
11
+ edges {
12
+ node {
13
+ id
14
+ remainingQuantity
15
+ totalQuantity
16
+ lineItem {
17
+ id
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+ `;
28
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.queries.js","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.test.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { graphql, passthrough } from 'msw';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { server } from '../../utils/mswHandlers';
4
+ import { getFulfillmentOrdersByOrderId } from './getFulfillmentOrdersByOrderId';
5
+ import { expectedFulfillmentOrdersByOrderId } from './getFulfillmentOrdersByOrderId.mock';
6
+ describe('getFulfillmentOrdersByOrderId', () => {
7
+ it('should return fulfillment orders for an order', async () => {
8
+ const result = await getFulfillmentOrdersByOrderId(5709883474250);
9
+ expect(result).toEqual(expectedFulfillmentOrdersByOrderId);
10
+ });
11
+ describe('Live', () => {
12
+ it('should return empty array when order not found', async () => {
13
+ server.use(graphql.query('fulfillmentOrdersByOrderId', () => passthrough()));
14
+ const result = await getFulfillmentOrdersByOrderId(99999999999);
15
+ expect(result).toEqual([]);
16
+ });
17
+ });
18
+ });
19
+ //# sourceMappingURL=getFulfillmentOrdersByOrderId.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentOrdersByOrderId.test.js","sourceRoot":"","sources":["../../../src/queries/fulfillmentOrders/getFulfillmentOrdersByOrderId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAA;AAEzF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAA;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,CAAC,GAAG,CACR,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CACjE,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAA;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { FulfillmentByIdQuery } from '../../generated-api-types/2025-04/admin.generated.js';
2
+ export type Fulfillment = NonNullable<FulfillmentByIdQuery['fulfillment']>;
3
+ /**
4
+ * Retrieves a single fulfillment from Shopify by its ID.
5
+ * Returns null if no fulfillment is found with the specified ID.
6
+ *
7
+ * @param {string | number | bigint} id - The Shopify fulfillment ID. Can be a GID string (e.g., "gid://shopify/Fulfillment/123456789") or a numeric ID (e.g., 123456789 or 123456789n).
8
+ * @returns {Promise<Fulfillment | null>} A promise that resolves to the fulfillment data or null if not found.
9
+ * @throws {Error} If the GraphQL query fails or if the response structure is invalid.
10
+ */
11
+ export declare function getFulfillmentById(id: string | number | bigint): Promise<Fulfillment | null>;
12
+ //# sourceMappingURL=getFulfillmentById.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,sDAAsD,CAAA;AAS7D,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAA;AAE1E;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsB7B"}
@@ -0,0 +1,27 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import { convertIdIntoGid, fetchShopifyGraphql, } from '../../utils/shopifyFetch.js';
3
+ import { queryFulfillmentById } from './getFulfillmentById.queries.js';
4
+ /**
5
+ * Retrieves a single fulfillment from Shopify by its ID.
6
+ * Returns null if no fulfillment is found with the specified ID.
7
+ *
8
+ * @param {string | number | bigint} id - The Shopify fulfillment ID. Can be a GID string (e.g., "gid://shopify/Fulfillment/123456789") or a numeric ID (e.g., 123456789 or 123456789n).
9
+ * @returns {Promise<Fulfillment | null>} A promise that resolves to the fulfillment data or null if not found.
10
+ * @throws {Error} If the GraphQL query fails or if the response structure is invalid.
11
+ */
12
+ export async function getFulfillmentById(id) {
13
+ const gid = typeof id === 'string'
14
+ ? id
15
+ : convertIdIntoGid(typeof id === 'number' ? BigInt(id) : id, 'Fulfillment');
16
+ const variables = { id: gid };
17
+ const response = await fetchShopifyGraphql({
18
+ query: queryFulfillmentById,
19
+ variables,
20
+ });
21
+ if (!response.fulfillment) {
22
+ logger.debug(`No fulfillment found with ID: ${id}`);
23
+ return null;
24
+ }
25
+ return response.fulfillment;
26
+ }
27
+ //# sourceMappingURL=getFulfillmentById.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAKtE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAA4B;IAE5B,MAAM,GAAG,GACP,OAAO,EAAE,KAAK,QAAQ;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,gBAAgB,CACd,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EACxC,aAAa,CACd,CAAA;IAEP,MAAM,SAAS,GAAkC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAuB;QAC/D,KAAK,EAAE,oBAAoB;QAC3B,SAAS;KACV,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAA;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,QAAQ,CAAC,WAAW,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { FulfillmentByIdQuery } from '../../generated-api-types/2025-04/admin.generated';
2
+ export declare const fulfillmentByIdMock: FulfillmentByIdQuery;
3
+ export declare const expectedFulfillmentById: import("../../generated-api-types/2025-04/admin.types").Maybe<Pick<import("../../generated-api-types/2025-04/admin.types").Fulfillment, "id" | "createdAt" | "updatedAt" | "name" | "status" | "totalQuantity" | "estimatedDeliveryAt" | "deliveredAt"> & {
4
+ location?: import("../../generated-api-types/2025-04/admin.types").Maybe<Pick<import("../../generated-api-types/2025-04/admin.types").Location, "id" | "legacyResourceId" | "name">>;
5
+ service?: import("../../generated-api-types/2025-04/admin.types").Maybe<Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentService, "handle" | "serviceName">>;
6
+ trackingInfo: Array<Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentTrackingInfo, "company" | "number" | "url">>;
7
+ originAddress?: import("../../generated-api-types/2025-04/admin.types").Maybe<Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentOriginAddress, "address1" | "address2" | "city" | "countryCode" | "provinceCode" | "zip">>;
8
+ fulfillmentLineItems: {
9
+ edges: Array<{
10
+ node: (Pick<import("../../generated-api-types/2025-04/admin.types").FulfillmentLineItem, "id" | "quantity"> & {
11
+ originalTotalSet: {
12
+ shopMoney: Pick<import("../../generated-api-types/2025-04/admin.types").MoneyV2, "amount" | "currencyCode">;
13
+ };
14
+ lineItem: (Pick<import("../../generated-api-types/2025-04/admin.types").LineItem, "id" | "title" | "sku"> & {
15
+ variant?: import("../../generated-api-types/2025-04/admin.types").Maybe<Pick<import("../../generated-api-types/2025-04/admin.types").ProductVariant, "id">>;
16
+ });
17
+ });
18
+ }>;
19
+ };
20
+ }> | undefined;
21
+ //# sourceMappingURL=getFulfillmentById.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.mock.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAA;AAM7F,eAAO,MAAM,mBAAmB,EAAE,oBA+EjC,CAAA;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;2BAC8uC,CAAC;;;;;cAD7sC,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { CurrencyCode, FulfillmentStatus, } from '../../generated-api-types/2025-04/admin.types';
2
+ export const fulfillmentByIdMock = {
3
+ fulfillment: {
4
+ id: 'gid://shopify/Fulfillment/5765989589285',
5
+ name: '#B12345.1',
6
+ createdAt: '2023-09-20T08:00:00Z',
7
+ updatedAt: '2023-09-21T10:00:00Z',
8
+ status: FulfillmentStatus.Success,
9
+ totalQuantity: 2,
10
+ estimatedDeliveryAt: '2023-09-22T12:00:00Z',
11
+ deliveredAt: '2023-09-21T10:00:00Z',
12
+ location: {
13
+ id: 'gid://shopify/Location/123456789',
14
+ legacyResourceId: '123456789',
15
+ name: 'Main Warehouse',
16
+ },
17
+ service: {
18
+ handle: 'dhl-express',
19
+ serviceName: 'DHL Express',
20
+ },
21
+ trackingInfo: [
22
+ {
23
+ company: 'DHL',
24
+ number: '123456789012',
25
+ url: 'https://tracking.dhl.com/123456789012',
26
+ },
27
+ ],
28
+ originAddress: {
29
+ address1: 'Warehouse Street 1',
30
+ address2: null,
31
+ city: 'Berlin',
32
+ countryCode: 'DE',
33
+ provinceCode: 'BE',
34
+ zip: '10115',
35
+ },
36
+ fulfillmentLineItems: {
37
+ edges: [
38
+ {
39
+ node: {
40
+ id: 'gid://shopify/FulfillmentLineItem/111111111111',
41
+ quantity: 1,
42
+ originalTotalSet: {
43
+ shopMoney: {
44
+ amount: '129.0',
45
+ currencyCode: CurrencyCode.Eur,
46
+ },
47
+ },
48
+ lineItem: {
49
+ id: 'gid://shopify/LineItem/222222222222',
50
+ title: 'Premium Mattress',
51
+ sku: 'MATTRESS-001',
52
+ variant: {
53
+ id: 'gid://shopify/ProductVariant/333333333333',
54
+ },
55
+ },
56
+ },
57
+ },
58
+ {
59
+ node: {
60
+ id: 'gid://shopify/FulfillmentLineItem/444444444444',
61
+ quantity: 1,
62
+ originalTotalSet: {
63
+ shopMoney: {
64
+ amount: '49.0',
65
+ currencyCode: CurrencyCode.Eur,
66
+ },
67
+ },
68
+ lineItem: {
69
+ id: 'gid://shopify/LineItem/555555555555',
70
+ title: 'Pillow Set',
71
+ sku: 'PILLOW-002',
72
+ variant: {
73
+ id: 'gid://shopify/ProductVariant/666666666666',
74
+ },
75
+ },
76
+ },
77
+ },
78
+ ],
79
+ },
80
+ },
81
+ };
82
+ export const expectedFulfillmentById = fulfillmentByIdMock.fulfillment;
83
+ //# sourceMappingURL=getFulfillmentById.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.mock.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.mock.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,GAClB,MAAM,+CAA+C,CAAA;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD,WAAW,EAAE;QACX,EAAE,EAAE,yCAAyC;QAC7C,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;QACjC,MAAM,EAAE,iBAAiB,CAAC,OAAO;QACjC,aAAa,EAAE,CAAC;QAChB,mBAAmB,EAAE,sBAAsB;QAC3C,WAAW,EAAE,sBAAsB;QACnC,QAAQ,EAAE;YACR,EAAE,EAAE,kCAAkC;YACtC,gBAAgB,EAAE,WAAW;YAC7B,IAAI,EAAE,gBAAgB;SACvB;QACD,OAAO,EAAE;YACP,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,aAAa;SAC3B;QACD,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,cAAc;gBACtB,GAAG,EAAE,uCAAuC;aAC7C;SACF;QACD,aAAa,EAAE;YACb,QAAQ,EAAE,oBAAoB;YAC9B,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,GAAG,EAAE,OAAO;SACb;QACD,oBAAoB,EAAE;YACpB,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE;wBACJ,EAAE,EAAE,gDAAgD;wBACpD,QAAQ,EAAE,CAAC;wBACX,gBAAgB,EAAE;4BAChB,SAAS,EAAE;gCACT,MAAM,EAAE,OAAO;gCACf,YAAY,EAAE,YAAY,CAAC,GAAG;6BAC/B;yBACF;wBACD,QAAQ,EAAE;4BACR,EAAE,EAAE,qCAAqC;4BACzC,KAAK,EAAE,kBAAkB;4BACzB,GAAG,EAAE,cAAc;4BACnB,OAAO,EAAE;gCACP,EAAE,EAAE,2CAA2C;6BAChD;yBACF;qBACF;iBACF;gBACD;oBACE,IAAI,EAAE;wBACJ,EAAE,EAAE,gDAAgD;wBACpD,QAAQ,EAAE,CAAC;wBACX,gBAAgB,EAAE;4BAChB,SAAS,EAAE;gCACT,MAAM,EAAE,MAAM;gCACd,YAAY,EAAE,YAAY,CAAC,GAAG;6BAC/B;yBACF;wBACD,QAAQ,EAAE;4BACR,EAAE,EAAE,qCAAqC;4BACzC,KAAK,EAAE,YAAY;4BACnB,GAAG,EAAE,YAAY;4BACjB,OAAO,EAAE;gCACP,EAAE,EAAE,2CAA2C;6BAChD;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const queryFulfillmentById: string;
2
+ //# sourceMappingURL=getFulfillmentById.queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.queries.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.queries.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,QAyDhC,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { gql } from '../../utils/logger';
2
+ export const queryFulfillmentById = gql `#graphql
3
+ query fulfillmentById($id: ID!) {
4
+ fulfillment(id: $id) {
5
+ id
6
+ name
7
+ createdAt
8
+ updatedAt
9
+ status
10
+ totalQuantity
11
+ estimatedDeliveryAt
12
+ deliveredAt
13
+ location {
14
+ id
15
+ legacyResourceId
16
+ name
17
+ }
18
+ service {
19
+ handle
20
+ serviceName
21
+ }
22
+ trackingInfo(first: 10) {
23
+ company
24
+ number
25
+ url
26
+ }
27
+ originAddress {
28
+ address1
29
+ address2
30
+ city
31
+ countryCode
32
+ provinceCode
33
+ zip
34
+ }
35
+ fulfillmentLineItems(first: 100) {
36
+ edges {
37
+ node {
38
+ id
39
+ quantity
40
+ originalTotalSet {
41
+ shopMoney {
42
+ amount
43
+ currencyCode
44
+ }
45
+ }
46
+ lineItem {
47
+ id
48
+ title
49
+ sku
50
+ variant {
51
+ id
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ `;
60
+ //# sourceMappingURL=getFulfillmentById.queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.queries.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDtC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getFulfillmentById.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.test.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { graphql, passthrough } from 'msw';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { server } from '../../utils/mswHandlers';
4
+ import { getFulfillmentById } from './getFulfillmentById';
5
+ import { expectedFulfillmentById } from './getFulfillmentById.mock';
6
+ describe('getFulfillmentById', () => {
7
+ it('should return fulfillment when found with GID string', async () => {
8
+ const result = await getFulfillmentById('gid://shopify/Fulfillment/5765989589285');
9
+ expect(result).toEqual(expectedFulfillmentById);
10
+ });
11
+ it('should return fulfillment when found with numeric ID', async () => {
12
+ const result = await getFulfillmentById(5765989589285n);
13
+ expect(result).toEqual(expectedFulfillmentById);
14
+ });
15
+ it('should return fulfillment when found with number', async () => {
16
+ const result = await getFulfillmentById(5765989589285);
17
+ expect(result).toEqual(expectedFulfillmentById);
18
+ });
19
+ it('should include fulfillmentLineItems', async () => {
20
+ const result = await getFulfillmentById('gid://shopify/Fulfillment/5765989589285');
21
+ expect(result?.fulfillmentLineItems.edges).toHaveLength(2);
22
+ expect(result?.fulfillmentLineItems.edges[0]?.node.lineItem.sku).toBe('MATTRESS-001');
23
+ });
24
+ it('should include tracking info', async () => {
25
+ const result = await getFulfillmentById('gid://shopify/Fulfillment/5765989589285');
26
+ expect(result?.trackingInfo).toHaveLength(1);
27
+ expect(result?.trackingInfo[0]?.company).toBe('DHL');
28
+ });
29
+ describe('Live', () => {
30
+ it('should return null when fulfillment not found', async () => {
31
+ server.use(graphql.query('fulfillmentById', () => passthrough()));
32
+ const result = await getFulfillmentById('gid://shopify/Fulfillment/99999999999');
33
+ expect(result).toBeNull();
34
+ });
35
+ });
36
+ });
37
+ //# sourceMappingURL=getFulfillmentById.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentById.test.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentById.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,yCAAyC,CAC1C,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAA;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAA;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,yCAAyC,CAC1C,CAAA;QACD,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CACnE,cAAc,CACf,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,yCAAyC,CAC1C,CAAA;QACD,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;YACjE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,uCAAuC,CACxC,CAAA;YACD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export type FulfillmentTrackingIds = {
2
+ trackingNumbers: string[];
3
+ trackingCompany: string | null;
4
+ };
5
+ /**
6
+ * Retrieves tracking information for a fulfillment by its ID.
7
+ * Returns the tracking numbers and the tracking company.
8
+ *
9
+ * @param {string | number | bigint} id - The Shopify fulfillment ID. Can be a GID string (e.g., "gid://shopify/Fulfillment/123456789") or a numeric ID (e.g., 123456789 or 123456789n).
10
+ * @returns {Promise<FulfillmentTrackingIds | null>} A promise that resolves to the tracking info or null if fulfillment not found.
11
+ * @throws {Error} If the GraphQL query fails.
12
+ */
13
+ export declare function getFulfillmentTrackingIds(id: string | number | bigint): Promise<FulfillmentTrackingIds | null>;
14
+ //# sourceMappingURL=getFulfillmentTrackingIds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAC3B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAgCxC"}
@@ -0,0 +1,36 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import { convertIdIntoGid, fetchShopifyGraphql, } from '../../utils/shopifyFetch.js';
3
+ import { queryFulfillmentTrackingIds } from './getFulfillmentTrackingIds.queries.js';
4
+ /**
5
+ * Retrieves tracking information for a fulfillment by its ID.
6
+ * Returns the tracking numbers and the tracking company.
7
+ *
8
+ * @param {string | number | bigint} id - The Shopify fulfillment ID. Can be a GID string (e.g., "gid://shopify/Fulfillment/123456789") or a numeric ID (e.g., 123456789 or 123456789n).
9
+ * @returns {Promise<FulfillmentTrackingIds | null>} A promise that resolves to the tracking info or null if fulfillment not found.
10
+ * @throws {Error} If the GraphQL query fails.
11
+ */
12
+ export async function getFulfillmentTrackingIds(id) {
13
+ const gid = typeof id === 'string'
14
+ ? id
15
+ : convertIdIntoGid(typeof id === 'number' ? BigInt(id) : id, 'Fulfillment');
16
+ const variables = { id: gid };
17
+ const response = await fetchShopifyGraphql({
18
+ query: queryFulfillmentTrackingIds,
19
+ variables,
20
+ });
21
+ if (!response.fulfillment) {
22
+ logger.debug(`No fulfillment found with ID: ${id}`);
23
+ return null;
24
+ }
25
+ const trackingInfo = response.fulfillment.trackingInfo;
26
+ const trackingNumbers = trackingInfo
27
+ .map((info) => info.number)
28
+ .filter((num) => num != null);
29
+ // Use the first company found (typically all tracking numbers share the same company)
30
+ const trackingCompany = trackingInfo[0]?.company ?? null;
31
+ return {
32
+ trackingNumbers,
33
+ trackingCompany,
34
+ };
35
+ }
36
+ //# sourceMappingURL=getFulfillmentTrackingIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAA;AAOpF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAA4B;IAE5B,MAAM,GAAG,GACP,OAAO,EAAE,KAAK,QAAQ;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,gBAAgB,CACd,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EACxC,aAAa,CACd,CAAA;IAEP,MAAM,SAAS,GAAyC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;IAEnE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAA8B;QACtE,KAAK,EAAE,2BAA2B;QAClC,SAAS;KACV,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAA;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAA;IACtD,MAAM,eAAe,GAAG,YAAY;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAC9C,sFAAsF;IACtF,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAA;IAExD,OAAO;QACL,eAAe;QACf,eAAe;KAChB,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FulfillmentTrackingIdsQuery } from '../../generated-api-types/2025-04/admin.generated';
2
+ import type { FulfillmentTrackingIds } from './getFulfillmentTrackingIds';
3
+ export declare const fulfillmentTrackingIdsMock: FulfillmentTrackingIdsQuery;
4
+ export declare const expectedFulfillmentTrackingIds: FulfillmentTrackingIds;
5
+ //# sourceMappingURL=getFulfillmentTrackingIds.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.mock.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAA;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEzE,eAAO,MAAM,0BAA0B,EAAE,2BAcxC,CAAA;AAED,eAAO,MAAM,8BAA8B,EAAE,sBAG5C,CAAA"}
@@ -0,0 +1,20 @@
1
+ export const fulfillmentTrackingIdsMock = {
2
+ fulfillment: {
3
+ id: 'gid://shopify/Fulfillment/5765989589285',
4
+ trackingInfo: [
5
+ {
6
+ company: 'DHL',
7
+ number: '123456789012',
8
+ },
9
+ {
10
+ company: 'DHL',
11
+ number: '987654321098',
12
+ },
13
+ ],
14
+ },
15
+ };
16
+ export const expectedFulfillmentTrackingIds = {
17
+ trackingNumbers: ['123456789012', '987654321098'],
18
+ trackingCompany: 'DHL',
19
+ };
20
+ //# sourceMappingURL=getFulfillmentTrackingIds.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.mock.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.mock.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,0BAA0B,GAAgC;IACrE,WAAW,EAAE;QACX,EAAE,EAAE,yCAAyC;QAC7C,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,cAAc;aACvB;YACD;gBACE,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,cAAc;aACvB;SACF;KACF;CACF,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAA2B;IACpE,eAAe,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;IACjD,eAAe,EAAE,KAAK;CACvB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const queryFulfillmentTrackingIds: string;
2
+ //# sourceMappingURL=getFulfillmentTrackingIds.queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.queries.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.queries.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,QAUvC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { gql } from '../../utils/logger';
2
+ export const queryFulfillmentTrackingIds = gql `#graphql
3
+ query fulfillmentTrackingIds($id: ID!) {
4
+ fulfillment(id: $id) {
5
+ id
6
+ trackingInfo(first: 50) {
7
+ company
8
+ number
9
+ }
10
+ }
11
+ }
12
+ `;
13
+ //# sourceMappingURL=getFulfillmentTrackingIds.queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.queries.js","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAA;;;;;;;;;;CAU7C,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getFulfillmentTrackingIds.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFulfillmentTrackingIds.test.d.ts","sourceRoot":"","sources":["../../../src/queries/fulfillments/getFulfillmentTrackingIds.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { HttpResponse, graphql, passthrough } from 'msw';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { server } from '../../utils/mswHandlers';
4
+ import { getFulfillmentTrackingIds } from './getFulfillmentTrackingIds';
5
+ import { expectedFulfillmentTrackingIds } from './getFulfillmentTrackingIds.mock';
6
+ describe('getFulfillmentTrackingIds', () => {
7
+ it('should return tracking info when found with GID string', async () => {
8
+ const result = await getFulfillmentTrackingIds('gid://shopify/Fulfillment/5765989589285');
9
+ expect(result).toEqual(expectedFulfillmentTrackingIds);
10
+ });
11
+ it('should return tracking info when found with numeric ID', async () => {
12
+ const result = await getFulfillmentTrackingIds(5765989589285n);
13
+ expect(result).toEqual(expectedFulfillmentTrackingIds);
14
+ });
15
+ it('should return tracking info when found with number', async () => {
16
+ const result = await getFulfillmentTrackingIds(5765989589285);
17
+ expect(result).toEqual(expectedFulfillmentTrackingIds);
18
+ });
19
+ it('should return empty tracking when fulfillment has no tracking info', async () => {
20
+ server.use(graphql.query('fulfillmentTrackingIds', () => HttpResponse.json({
21
+ data: {
22
+ fulfillment: {
23
+ id: 'gid://shopify/Fulfillment/5765989589285',
24
+ trackingInfo: [],
25
+ },
26
+ },
27
+ })));
28
+ const result = await getFulfillmentTrackingIds(5765989589285);
29
+ expect(result).toEqual({
30
+ trackingNumbers: [],
31
+ trackingCompany: null,
32
+ });
33
+ });
34
+ it('should filter out null tracking numbers', async () => {
35
+ server.use(graphql.query('fulfillmentTrackingIds', () => HttpResponse.json({
36
+ data: {
37
+ fulfillment: {
38
+ id: 'gid://shopify/Fulfillment/5765989589285',
39
+ trackingInfo: [
40
+ { number: '123456789', company: 'DHL' },
41
+ { number: null, company: 'DHL' },
42
+ { number: '987654321', company: 'DHL' },
43
+ ],
44
+ },
45
+ },
46
+ })));
47
+ const result = await getFulfillmentTrackingIds(5765989589285);
48
+ expect(result).toEqual({
49
+ trackingNumbers: ['123456789', '987654321'],
50
+ trackingCompany: 'DHL',
51
+ });
52
+ });
53
+ describe('Live', () => {
54
+ it('should return null when fulfillment not found', async () => {
55
+ server.use(graphql.query('fulfillmentTrackingIds', () => passthrough()));
56
+ const result = await getFulfillmentTrackingIds('gid://shopify/Fulfillment/99999999999');
57
+ expect(result).toBeNull();
58
+ });
59
+ });
60
+ });
61
+ //# sourceMappingURL=getFulfillmentTrackingIds.test.js.map