@ehrenkind/shopify-lib 0.0.7 → 0.2.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 (139) hide show
  1. package/README.md +2 -34
  2. package/dist/generated-api-types/2025-04/admin.generated.d.ts +283 -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 +370 -41
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +328 -58
  13. package/dist/index.d.ts +6 -18874
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +6 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.mjs +368 -41
  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/getOrderById.d.ts +136 -0
  44. package/dist/queries/orders/getOrderById.d.ts.map +1 -0
  45. package/dist/queries/orders/getOrderById.js +125 -0
  46. package/dist/queries/orders/getOrderById.js.map +1 -0
  47. package/dist/queries/orders/getOrderById.mock.d.ts +82 -0
  48. package/dist/queries/orders/getOrderById.mock.d.ts.map +1 -0
  49. package/dist/queries/orders/getOrderById.mock.js +204 -0
  50. package/dist/queries/orders/getOrderById.mock.js.map +1 -0
  51. package/dist/queries/orders/getOrderById.queries.d.ts +3 -0
  52. package/dist/queries/orders/getOrderById.queries.d.ts.map +1 -0
  53. package/dist/queries/orders/getOrderById.queries.js +174 -0
  54. package/dist/queries/orders/getOrderById.queries.js.map +1 -0
  55. package/dist/queries/orders/getOrderById.test.d.ts +2 -0
  56. package/dist/queries/orders/getOrderById.test.d.ts.map +1 -0
  57. package/dist/queries/orders/getOrderById.test.js +46 -0
  58. package/dist/queries/orders/getOrderById.test.js.map +1 -0
  59. package/dist/queries/orders/getOrderByName.d.ts +72 -0
  60. package/dist/queries/orders/getOrderByName.d.ts.map +1 -0
  61. package/dist/queries/orders/getOrderByName.js +117 -0
  62. package/dist/queries/orders/getOrderByName.js.map +1 -0
  63. package/dist/queries/orders/getOrderByName.mock.d.ts +21 -0
  64. package/dist/queries/orders/getOrderByName.mock.d.ts.map +1 -0
  65. package/dist/queries/orders/getOrderByName.mock.js +55 -0
  66. package/dist/queries/orders/getOrderByName.mock.js.map +1 -0
  67. package/dist/queries/orders/getOrderByName.queries.d.ts +3 -0
  68. package/dist/queries/orders/getOrderByName.queries.d.ts.map +1 -0
  69. package/dist/queries/orders/getOrderByName.queries.js +335 -0
  70. package/dist/queries/orders/getOrderByName.queries.js.map +1 -0
  71. package/dist/queries/orders/getOrderByName.test.d.ts +2 -0
  72. package/dist/queries/orders/getOrderByName.test.d.ts.map +1 -0
  73. package/dist/queries/orders/getOrderByName.test.js +30 -0
  74. package/dist/queries/orders/getOrderByName.test.js.map +1 -0
  75. package/dist/queries/orders/getOrderPaymentDetails.d.ts +130 -0
  76. package/dist/queries/orders/getOrderPaymentDetails.d.ts.map +1 -0
  77. package/dist/queries/orders/getOrderPaymentDetails.js +45 -0
  78. package/dist/queries/orders/getOrderPaymentDetails.js.map +1 -0
  79. package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts +12 -0
  80. package/dist/queries/orders/getOrderPaymentDetails.mock.d.ts.map +1 -0
  81. package/dist/queries/orders/getOrderPaymentDetails.mock.js +24 -0
  82. package/dist/queries/orders/getOrderPaymentDetails.mock.js.map +1 -0
  83. package/dist/queries/orders/getOrderPaymentDetails.queries.d.ts +2 -0
  84. package/dist/queries/orders/getOrderPaymentDetails.queries.d.ts.map +1 -0
  85. package/dist/queries/orders/getOrderPaymentDetails.queries.js +21 -0
  86. package/dist/queries/orders/getOrderPaymentDetails.queries.js.map +1 -0
  87. package/dist/queries/orders/getOrderPaymentDetails.test.d.ts +2 -0
  88. package/dist/queries/orders/getOrderPaymentDetails.test.d.ts.map +1 -0
  89. package/dist/queries/orders/getOrderPaymentDetails.test.js +19 -0
  90. package/dist/queries/orders/getOrderPaymentDetails.test.js.map +1 -0
  91. package/dist/queries/productVariants/getLeanProductVariants.d.ts +33 -0
  92. package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +1 -0
  93. package/dist/queries/productVariants/getLeanProductVariants.js +81 -0
  94. package/dist/queries/productVariants/getLeanProductVariants.js.map +1 -0
  95. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +3 -0
  96. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +1 -0
  97. package/dist/queries/productVariants/getLeanProductVariants.mock.js +33 -0
  98. package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +1 -0
  99. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +2 -0
  100. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +1 -0
  101. package/dist/queries/productVariants/getLeanProductVariants.test.js +38 -0
  102. package/dist/queries/productVariants/getLeanProductVariants.test.js.map +1 -0
  103. package/dist/utils/logger.d.ts +11 -0
  104. package/dist/utils/logger.d.ts.map +1 -0
  105. package/dist/utils/logger.js +50 -0
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/mswHandlers.d.ts +2 -0
  108. package/dist/utils/mswHandlers.d.ts.map +1 -0
  109. package/dist/utils/mswHandlers.js +46 -0
  110. package/dist/utils/mswHandlers.js.map +1 -0
  111. package/dist/utils/shopifyClient.d.ts +6 -0
  112. package/dist/utils/shopifyClient.d.ts.map +1 -0
  113. package/dist/utils/shopifyClient.js +82 -0
  114. package/dist/utils/shopifyClient.js.map +1 -0
  115. package/dist/utils/shopifyClient.mock.d.ts +3 -0
  116. package/dist/utils/shopifyClient.mock.d.ts.map +1 -0
  117. package/dist/utils/shopifyClient.mock.js +19 -0
  118. package/dist/utils/shopifyClient.mock.js.map +1 -0
  119. package/dist/utils/shopifyClient.test.d.ts +2 -0
  120. package/dist/utils/shopifyClient.test.d.ts.map +1 -0
  121. package/dist/utils/shopifyClient.test.js +27 -0
  122. package/dist/utils/shopifyClient.test.js.map +1 -0
  123. package/dist/utils/shopifyFetch.d.ts +24 -0
  124. package/dist/utils/shopifyFetch.d.ts.map +1 -0
  125. package/dist/utils/shopifyFetch.js +67 -0
  126. package/dist/utils/shopifyFetch.js.map +1 -0
  127. package/dist/utils/shopifyFetch.test.d.ts +2 -0
  128. package/dist/utils/shopifyFetch.test.d.ts.map +1 -0
  129. package/dist/utils/shopifyFetch.test.js +17 -0
  130. package/dist/utils/shopifyFetch.test.js.map +1 -0
  131. package/dist/utils/test-setup.d.ts +2 -0
  132. package/dist/utils/test-setup.d.ts.map +1 -0
  133. package/dist/utils/test-setup.js +13 -0
  134. package/dist/utils/test-setup.js.map +1 -0
  135. package/dist/utils/zod.d.ts +3 -0
  136. package/dist/utils/zod.d.ts.map +1 -0
  137. package/dist/utils/zod.js +19 -0
  138. package/dist/utils/zod.js.map +1 -0
  139. package/package.json +8 -5
@@ -0,0 +1,46 @@
1
+ import { graphql } from 'msw';
2
+ import { setupServer } from 'msw/node';
3
+ import { customerDeleteMock } from '../mutations/customers/deleteCustomerById.mock';
4
+ import { connectMetaObjectToProductVariantMock } from '../mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock';
5
+ import { orderByIdFullMock, orderByIdMock, } from '../queries/orders/getOrderById.mock';
6
+ import { ordersByNameMock } from '../queries/orders/getOrderByName.mock';
7
+ import { orderPaymentDetailsMock } from '../queries/orders/getOrderPaymentDetails.mock';
8
+ import { leanProductVariantsMock } from '../queries/productVariants/getLeanProductVariants.mock';
9
+ import { logger } from './logger';
10
+ import { productHandlesMock } from './shopifyClient.mock';
11
+ const orders = [
12
+ graphql.query('orderById', createGqlResponse(orderByIdMock)),
13
+ graphql.query('orderByIdFull', createGqlResponse(orderByIdFullMock)),
14
+ graphql.query('ordersByName', createGqlResponse(ordersByNameMock)),
15
+ graphql.query('ordersByNameFull', createGqlResponse(ordersByNameMock)),
16
+ graphql.query('orderPaymentDetailsById', createGqlResponse(orderPaymentDetailsMock)),
17
+ ];
18
+ const productVariants = [
19
+ graphql.query('productHandles', createGqlResponse(productHandlesMock)),
20
+ graphql.query('leanProductVariants', createGqlResponse(leanProductVariantsMock)),
21
+ ];
22
+ const productVariantsBulkUpdate = [
23
+ graphql.mutation('connectMetaObjectToProductVariant', createGqlResponse(connectMetaObjectToProductVariantMock)),
24
+ ];
25
+ const customers = [
26
+ graphql.mutation('customerDelete', createGqlResponse(customerDeleteMock)),
27
+ ];
28
+ const handlers = [
29
+ ...orders,
30
+ ...productVariants,
31
+ ...productVariantsBulkUpdate,
32
+ ...customers,
33
+ ];
34
+ function createGqlResponse(mockData) {
35
+ return ({ operationName, query, }) => {
36
+ logger.debug(`[MSW] Mocking GraphQL query: ${operationName}`);
37
+ logger.debug(query);
38
+ return new Response(JSON.stringify({ data: mockData }), {
39
+ headers: {
40
+ 'Content-Type': 'application/json',
41
+ },
42
+ });
43
+ };
44
+ }
45
+ export const server = setupServer(...handlers);
46
+ //# sourceMappingURL=mswHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mswHandlers.js","sourceRoot":"","sources":["../../src/utils/mswHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;AACnF,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAA;AACrI,OAAO,EACL,iBAAiB,EACjB,aAAa,GACd,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAA;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAA;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,MAAM,GAAG;IACb,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,CACX,yBAAyB,EACzB,iBAAiB,CAAC,uBAAuB,CAAC,CAC3C;CACF,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,CACX,qBAAqB,EACrB,iBAAiB,CAAC,uBAAuB,CAAC,CAC3C;CACF,CAAA;AAED,MAAM,yBAAyB,GAAG;IAChC,OAAO,CAAC,QAAQ,CACd,mCAAmC,EACnC,iBAAiB,CAAC,qCAAqC,CAAC,CACzD;CACF,CAAA;AAED,MAAM,SAAS,GAAG;IAChB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;CAC1E,CAAA;AAED,MAAM,QAAQ,GAAG;IACf,GAAG,MAAM;IACT,GAAG,eAAe;IAClB,GAAG,yBAAyB;IAC5B,GAAG,SAAS;CACb,CAAA;AAED,SAAS,iBAAiB,CAAI,QAAW;IACvC,OAAO,CAAC,EACN,aAAa,EACb,KAAK,GAIN,EAAE,EAAE;QACH,MAAM,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;YACtD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { ApiVersion, type GraphqlClient } from '@shopify/shopify-api';
2
+ import '@shopify/shopify-api/adapters/node';
3
+ export declare const SHOPIFY_API_VERSION = ApiVersion.April25;
4
+ declare let shopifyGraphqlClient: GraphqlClient;
5
+ export { shopifyGraphqlClient as shopifyClient };
6
+ //# sourceMappingURL=shopifyClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,oCAAoC,CAAA;AAM3C,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAuCrD,QAAA,IAAI,oBAAoB,EAAE,aAAa,CAAA;AA2CvC,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { ApiVersion, LogSeverity, Session, shopifyApi, } from '@shopify/shopify-api';
2
+ import '@shopify/shopify-api/adapters/node';
3
+ import dotenv from 'dotenv';
4
+ import { z } from 'zod';
5
+ import { activeLogLevelName, logger } from './logger.js';
6
+ // https://shopify.dev/docs/api/admin-graphql/2025-04/
7
+ export const SHOPIFY_API_VERSION = ApiVersion.April25;
8
+ dotenv.config();
9
+ const envSchema = z.object({
10
+ SHOPIFY_API_KEY: z.string({
11
+ required_error: 'SHOPIFY_API_KEY is required',
12
+ }),
13
+ SHOPIFY_API_SECRET: z.string({
14
+ required_error: 'SHOPIFY_API_SECRET is required',
15
+ }),
16
+ SHOPIFY_API_HOSTNAME: z.string({
17
+ required_error: 'SHOPIFY_API_HOSTNAME is required',
18
+ }),
19
+ SHOPIFY_ACCESS_TOKEN: z.string({
20
+ required_error: 'SHOPIFY_ACCESS_TOKEN is required',
21
+ }),
22
+ NODE_ENV: z
23
+ .enum(['development', 'production', 'test'])
24
+ .default('development'),
25
+ });
26
+ const mapLogLevelToShopifySeverity = (level) => {
27
+ switch (level) {
28
+ case 'silent':
29
+ return LogSeverity.Error;
30
+ case 'debug':
31
+ return LogSeverity.Debug;
32
+ case 'info':
33
+ return LogSeverity.Info;
34
+ case 'warn':
35
+ return LogSeverity.Warning;
36
+ case 'error':
37
+ return LogSeverity.Error;
38
+ default:
39
+ return LogSeverity.Info;
40
+ }
41
+ };
42
+ let shopifyGraphqlClient;
43
+ try {
44
+ // biome-ignore lint/nursery/noProcessEnv: <explanation>
45
+ const env = envSchema.parse(process.env);
46
+ const shopify = shopifyApi({
47
+ apiKey: env.SHOPIFY_API_KEY,
48
+ apiSecretKey: env.SHOPIFY_API_SECRET,
49
+ hostName: env.SHOPIFY_API_HOSTNAME,
50
+ apiVersion: SHOPIFY_API_VERSION,
51
+ isEmbeddedApp: false,
52
+ logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },
53
+ future: {
54
+ customerAddressDefaultFix: true,
55
+ lineItemBilling: true,
56
+ unstable_managedPricingSupport: false,
57
+ },
58
+ });
59
+ const shopifySession = new Session({
60
+ id: `custom-session-${env.SHOPIFY_API_HOSTNAME}`,
61
+ shop: env.SHOPIFY_API_HOSTNAME,
62
+ state: 'authenticated',
63
+ isOnline: true,
64
+ accessToken: env.SHOPIFY_ACCESS_TOKEN,
65
+ });
66
+ shopifyGraphqlClient = new shopify.clients.Graphql({
67
+ session: shopifySession,
68
+ });
69
+ logger.info('Shopify API client initialized successfully.');
70
+ }
71
+ catch (error) {
72
+ if (error instanceof z.ZodError) {
73
+ const msg = JSON.stringify(error.format(), null, 2);
74
+ logger.error(msg);
75
+ }
76
+ else {
77
+ logger.error('Failed to initialize Shopify API client:', error);
78
+ }
79
+ throw error;
80
+ }
81
+ export { shopifyGraphqlClient as shopifyClient };
82
+ //# sourceMappingURL=shopifyClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProductHandlesQuery } from '../generated-api-types/2025-04/admin.generated';
2
+ export declare const productHandlesMock: ProductHandlesQuery;
3
+ //# sourceMappingURL=shopifyClient.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.mock.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAA;AAEzF,eAAO,MAAM,kBAAkB,EAAE,mBAiBhC,CAAA"}
@@ -0,0 +1,19 @@
1
+ export const productHandlesMock = {
2
+ products: {
3
+ edges: [
4
+ {
5
+ node: {
6
+ handle: 'product-1',
7
+ title: 'Product 1',
8
+ },
9
+ },
10
+ {
11
+ node: {
12
+ handle: 'product-2',
13
+ title: 'Product 2',
14
+ },
15
+ },
16
+ ],
17
+ },
18
+ };
19
+ //# sourceMappingURL=shopifyClient.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.mock.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,WAAW;iBACnB;aACF;YACD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,WAAW;iBACnB;aACF;SACF;KACF;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shopifyClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.test.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { shopifyClient } from './shopifyClient';
3
+ describe('Shopify GraphQL Client', () => {
4
+ it('should be initialized', () => {
5
+ expect(shopifyClient).toBeDefined();
6
+ });
7
+ it('should fetch product handles using the request method', async () => {
8
+ const query = `#graphql
9
+ query productHandles($first: Int!) {
10
+ products(first: $first) {
11
+ edges {
12
+ node {
13
+ handle
14
+ title
15
+ }
16
+ }
17
+ }
18
+ }`;
19
+ const variables = {
20
+ first: 10,
21
+ };
22
+ const response = await shopifyClient.request(query, { variables });
23
+ expect(response.data).toBeDefined();
24
+ expect(response.data?.products).toBeDefined();
25
+ });
26
+ });
27
+ //# sourceMappingURL=shopifyClient.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyClient.test.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,KAAK,GAAG;;;;;;;;;;QAUV,CAAA;QAEJ,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,EAAE;SACV,CAAA;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;QAElE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;QACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAC/C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ export declare function convertIdIntoGid(id: bigint, type: 'Order' | 'Customer'): string;
2
+ interface PageInfo {
3
+ hasNextPage: boolean;
4
+ endCursor?: string | null | undefined;
5
+ }
6
+ type TExtractorFunctionType<TResultNode, TPageData> = (pageData: TPageData) => {
7
+ nodes: TResultNode[];
8
+ pageInfo?: PageInfo;
9
+ userErrors?: {
10
+ message?: string;
11
+ }[];
12
+ };
13
+ export declare function fetchShopifyGraphql<TResultNode, TPageData>(params: {
14
+ query: string;
15
+ variables: Record<string, unknown>;
16
+ dataExtractor?: TExtractorFunctionType<TResultNode, TPageData>;
17
+ fetchAllPages?: boolean;
18
+ }): Promise<TResultNode[]>;
19
+ export declare function fetchShopifyGraphql<TReturnType>(params: {
20
+ query: string;
21
+ variables: Record<string, unknown>;
22
+ }): Promise<TReturnType>;
23
+ export {};
24
+ //# sourceMappingURL=shopifyFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyFetch.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyFetch.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,GAAG,UAAU,GACzB,MAAM,CAER;AAED,UAAU,QAAQ;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACtC;AAOD,KAAK,sBAAsB,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK;IAC7E,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACpC,CAAA;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,aAAa,CAAC,EAAE,sBAAsB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;AAC1B,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { logger } from './logger.js';
2
+ import { shopifyClient } from './shopifyClient.js';
3
+ export function convertIdIntoGid(id, type) {
4
+ return `gid://shopify/${type}/${id}`;
5
+ }
6
+ export async function fetchShopifyGraphql(params) {
7
+ const { query, variables: initialVariables, dataExtractor, fetchAllPages = false, } = params;
8
+ let currentVariables = { ...initialVariables };
9
+ if (!dataExtractor) {
10
+ return makeRequest(query, currentVariables);
11
+ }
12
+ const allNodes = [];
13
+ let hasNextLoop = true;
14
+ do {
15
+ const response = await makeRequest(query, currentVariables);
16
+ const { nodes, pageInfo, userErrors } = dataExtractor(response);
17
+ // Handle Shopify mutation userErrors pattern
18
+ if (Array.isArray(userErrors) && userErrors.length > 0) {
19
+ const errorMessages = userErrors
20
+ .map((e) => e.message || JSON.stringify(e))
21
+ .join('\n');
22
+ logger.error('Shopify mutation userErrors:', errorMessages);
23
+ throw new Error(`Shopify mutation userErrors: ${errorMessages}`);
24
+ }
25
+ allNodes.push(...nodes);
26
+ hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false;
27
+ if (hasNextLoop && pageInfo?.endCursor) {
28
+ currentVariables = {
29
+ ...currentVariables,
30
+ after: pageInfo.endCursor,
31
+ };
32
+ }
33
+ } while (hasNextLoop);
34
+ return allNodes;
35
+ }
36
+ async function makeRequest(query, variables) {
37
+ const response = (await shopifyClient.request(query, {
38
+ variables,
39
+ }));
40
+ if (response.errors) {
41
+ let errorMessages = 'GraphQL query failed.';
42
+ const errors = response.errors;
43
+ if (Array.isArray(errors)) {
44
+ errorMessages = errors
45
+ .map((e) => e.message || JSON.stringify(e))
46
+ .join('\n');
47
+ }
48
+ else if (typeof errors === 'object' &&
49
+ errors !== null &&
50
+ 'message' in errors) {
51
+ errorMessages = errors.message || JSON.stringify(errors);
52
+ }
53
+ else if (typeof errors === 'string') {
54
+ errorMessages = errors;
55
+ }
56
+ else {
57
+ errorMessages = JSON.stringify(errors);
58
+ }
59
+ logger.error('GraphQL query failed:', errorMessages);
60
+ throw new Error(`GraphQL errors: ${errorMessages}`);
61
+ }
62
+ if (!response.data) {
63
+ throw new Error('No data in Shopify API response');
64
+ }
65
+ return response.data;
66
+ }
67
+ //# sourceMappingURL=shopifyFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyFetch.js","sourceRoot":"","sources":["../../src/utils/shopifyFetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shopifyFetch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyFetch.test.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyFetch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { convertIdIntoGid } from './shopifyFetch';
3
+ describe('convertIdIntoGid', () => {
4
+ it('should convert an Order ID to a GID', () => {
5
+ const id = 12345n;
6
+ const type = 'Order';
7
+ const expectedGid = 'gid://shopify/Order/12345';
8
+ expect(convertIdIntoGid(id, type)).toBe(expectedGid);
9
+ });
10
+ it('should convert a Customer ID to a GID', () => {
11
+ const id = 67890n;
12
+ const type = 'Customer';
13
+ const expectedGid = 'gid://shopify/Customer/67890';
14
+ expect(convertIdIntoGid(id, type)).toBe(expectedGid);
15
+ });
16
+ });
17
+ //# sourceMappingURL=shopifyFetch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopifyFetch.test.js","sourceRoot":"","sources":["../../src/utils/shopifyFetch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAA;QACjB,MAAM,IAAI,GAAG,OAAO,CAAA;QACpB,MAAM,WAAW,GAAG,2BAA2B,CAAA;QAC/C,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAA;QACjB,MAAM,IAAI,GAAG,UAAU,CAAA;QACvB,MAAM,WAAW,GAAG,8BAA8B,CAAA;QAClD,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../src/utils/test-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { afterAll, afterEach, beforeAll, vi } from 'vitest';
2
+ import { server } from './mswHandlers';
3
+ beforeAll(() => {
4
+ server.listen();
5
+ });
6
+ afterEach(() => {
7
+ server.resetHandlers();
8
+ vi.clearAllMocks();
9
+ });
10
+ afterAll(() => {
11
+ server.close();
12
+ });
13
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../src/utils/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,MAAM,EAAE,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,aAAa,EAAE,CAAA;IACtB,EAAE,CAAC,aAAa,EAAE,CAAA;AACpB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,GAAG,EAAE;IACZ,MAAM,CAAC,KAAK,EAAE,CAAA;AAChB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import z from 'zod';
2
+ export declare function returnOutputParsed<T>(data: unknown, Model: z.ZodType<T>): Promise<T>;
3
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/utils/zod.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAGnB,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAepB"}
@@ -0,0 +1,19 @@
1
+ import z from 'zod';
2
+ import { logger } from './logger.js';
3
+ export async function returnOutputParsed(data, Model) {
4
+ const parsed = await Model.safeParseAsync(data);
5
+ if (!parsed.success) {
6
+ if (parsed.error instanceof z.ZodError) {
7
+ const msg = JSON.stringify(parsed.error.format(), null, 2);
8
+ logger.error(msg);
9
+ }
10
+ else {
11
+ logger.error('Failed to parse:', parsed.error);
12
+ }
13
+ // throw parsedVariants.error
14
+ throw new Error('Failed to parse product variants');
15
+ }
16
+ logger.info('Parsed data successfully');
17
+ return parsed.data;
18
+ }
19
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/utils/zod.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAa,EACb,KAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAChD,CAAC;QACD,6BAA6B;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ehrenkind/shopify-lib",
3
- "version": "0.0.7",
3
+ "version": "0.2.0",
4
4
  "main": "dist/index.cjs",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -43,6 +43,7 @@
43
43
  "lefthook": "1.11.12",
44
44
  "msw": "2.10.2",
45
45
  "tsup": "8.5.0",
46
+ "tsx": "4.21.0",
46
47
  "typescript": "^5.8.2",
47
48
  "vitest": "^3.1.1"
48
49
  },
@@ -61,14 +62,16 @@
61
62
  "ci-light": "pnpm format:check",
62
63
  "format:check": "biome check .",
63
64
  "format:fix": "biome check --fix .",
64
- "check-exports": "attw --pack . --ignore-rules=cjs-resolves-to-esm",
65
+ "check-exports": "attw --pack . --ignore-rules=cjs-resolves-to-esm --ignore-rules=internal-resolution-error",
65
66
  "test": "vitest run --test-name-pattern '^((?!Live).)*$'",
66
67
  "test:watch": "vitest --test-name-pattern '^((?!Live).)*$'",
67
- "test-all-including-live": "vitest run",
68
- "local-release": "changeset version && changeset publish",
68
+ "test+live": "vitest run",
69
+ "change": "changeset",
70
+ "release": "[ -z \"$(git status --porcelain)\" ] || (echo 'Release aborted: commit or stash uncommitted changes first.' && exit 1) && changeset version && git add . && git commit -m \"release: v$(node -p \"require('./package.json').version\")\" && changeset publish && git push --follow-tags",
69
71
  "typecheck": "tsc",
70
72
  "knip": "knip --max-issues 10",
71
73
  "knip:fix": "knip --fix",
72
- "codegen": "graphql-codegen-esm"
74
+ "codegen": "graphql-codegen-esm",
75
+ "fetch-mock": "tsx scripts/fetch-mock-data.ts"
73
76
  }
74
77
  }