@ehrenkind/shopify-lib 0.0.2

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 (95) hide show
  1. package/README.md +172 -0
  2. package/dist/generated-api-types/2025-04/admin.generated.d.ts +181 -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 +57664 -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 +11356 -0
  9. package/dist/generated-api-types/2025-04/admin.types.js.map +1 -0
  10. package/dist/index.cjs +752 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.cts +18290 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +3 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.mjs +719 -0
  18. package/dist/index.mjs.map +1 -0
  19. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts +4 -0
  20. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts.map +1 -0
  21. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js +56 -0
  22. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js.map +1 -0
  23. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts +3 -0
  24. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts.map +1 -0
  25. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js +11 -0
  26. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js.map +1 -0
  27. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts +2 -0
  28. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts.map +1 -0
  29. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js +11 -0
  30. package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js.map +1 -0
  31. package/dist/queries/orders/getOrderByName.d.ts +26 -0
  32. package/dist/queries/orders/getOrderByName.d.ts.map +1 -0
  33. package/dist/queries/orders/getOrderByName.js +117 -0
  34. package/dist/queries/orders/getOrderByName.js.map +1 -0
  35. package/dist/queries/orders/getOrderByName.mock.d.ts +21 -0
  36. package/dist/queries/orders/getOrderByName.mock.d.ts.map +1 -0
  37. package/dist/queries/orders/getOrderByName.mock.js +55 -0
  38. package/dist/queries/orders/getOrderByName.mock.js.map +1 -0
  39. package/dist/queries/orders/getOrderByName.queries.d.ts +3 -0
  40. package/dist/queries/orders/getOrderByName.queries.d.ts.map +1 -0
  41. package/dist/queries/orders/getOrderByName.queries.js +335 -0
  42. package/dist/queries/orders/getOrderByName.queries.js.map +1 -0
  43. package/dist/queries/orders/getOrderByName.test.d.ts +2 -0
  44. package/dist/queries/orders/getOrderByName.test.d.ts.map +1 -0
  45. package/dist/queries/orders/getOrderByName.test.js +28 -0
  46. package/dist/queries/orders/getOrderByName.test.js.map +1 -0
  47. package/dist/queries/productVariants/getLeanProductVariants.d.ts +21 -0
  48. package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +1 -0
  49. package/dist/queries/productVariants/getLeanProductVariants.js +81 -0
  50. package/dist/queries/productVariants/getLeanProductVariants.js.map +1 -0
  51. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +3 -0
  52. package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +1 -0
  53. package/dist/queries/productVariants/getLeanProductVariants.mock.js +33 -0
  54. package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +1 -0
  55. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +2 -0
  56. package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +1 -0
  57. package/dist/queries/productVariants/getLeanProductVariants.test.js +38 -0
  58. package/dist/queries/productVariants/getLeanProductVariants.test.js.map +1 -0
  59. package/dist/utils/logger.d.ts +11 -0
  60. package/dist/utils/logger.d.ts.map +1 -0
  61. package/dist/utils/logger.js +50 -0
  62. package/dist/utils/logger.js.map +1 -0
  63. package/dist/utils/mswHandlers.d.ts +2 -0
  64. package/dist/utils/mswHandlers.d.ts.map +1 -0
  65. package/dist/utils/mswHandlers.js +32 -0
  66. package/dist/utils/mswHandlers.js.map +1 -0
  67. package/dist/utils/shopifyClient.d.ts +6 -0
  68. package/dist/utils/shopifyClient.d.ts.map +1 -0
  69. package/dist/utils/shopifyClient.js +82 -0
  70. package/dist/utils/shopifyClient.js.map +1 -0
  71. package/dist/utils/shopifyClient.mock.d.ts +3 -0
  72. package/dist/utils/shopifyClient.mock.d.ts.map +1 -0
  73. package/dist/utils/shopifyClient.mock.js +19 -0
  74. package/dist/utils/shopifyClient.mock.js.map +1 -0
  75. package/dist/utils/shopifyClient.test.d.ts +2 -0
  76. package/dist/utils/shopifyClient.test.d.ts.map +1 -0
  77. package/dist/utils/shopifyClient.test.js +27 -0
  78. package/dist/utils/shopifyClient.test.js.map +1 -0
  79. package/dist/utils/shopifyFetch.d.ts +19 -0
  80. package/dist/utils/shopifyFetch.d.ts.map +1 -0
  81. package/dist/utils/shopifyFetch.js +60 -0
  82. package/dist/utils/shopifyFetch.js.map +1 -0
  83. package/dist/utils/shopifyFetch.test.d.ts +2 -0
  84. package/dist/utils/shopifyFetch.test.d.ts.map +1 -0
  85. package/dist/utils/shopifyFetch.test.js +17 -0
  86. package/dist/utils/shopifyFetch.test.js.map +1 -0
  87. package/dist/utils/test-setup.d.ts +2 -0
  88. package/dist/utils/test-setup.d.ts.map +1 -0
  89. package/dist/utils/test-setup.js +13 -0
  90. package/dist/utils/test-setup.js.map +1 -0
  91. package/dist/utils/zod.d.ts +3 -0
  92. package/dist/utils/zod.d.ts.map +1 -0
  93. package/dist/utils/zod.js +19 -0
  94. package/dist/utils/zod.js.map +1 -0
  95. package/package.json +75 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,719 @@
1
+ // src/queries/orders/getOrderByName.ts
2
+ import z3 from "zod";
3
+
4
+ // src/utils/logger.ts
5
+ var { env } = process;
6
+ var gql = String.raw;
7
+ var logLevels = {
8
+ silent: 0,
9
+ error: 1,
10
+ warn: 2,
11
+ info: 3,
12
+ debug: 4
13
+ };
14
+ function getLogLevel(nodeEnv, logLevelEnv) {
15
+ if (logLevelEnv && logLevelEnv in logLevels) {
16
+ return logLevelEnv;
17
+ }
18
+ if (nodeEnv === "test") {
19
+ return "silent";
20
+ }
21
+ if (nodeEnv === "production") {
22
+ return "info";
23
+ }
24
+ return "debug";
25
+ }
26
+ var activeLogLevelName = getLogLevel(env.NODE_ENV, env.LOG_LEVEL);
27
+ var activeLogLevelValue = logLevels[activeLogLevelName];
28
+ var logger = {
29
+ debug: (...args) => {
30
+ if (logLevels.debug <= activeLogLevelValue) {
31
+ console.debug(...args);
32
+ }
33
+ },
34
+ info: (...args) => {
35
+ if (logLevels.info <= activeLogLevelValue) {
36
+ console.info(...args);
37
+ }
38
+ },
39
+ warn: (...args) => {
40
+ if (logLevels.warn <= activeLogLevelValue) {
41
+ console.warn(...args);
42
+ }
43
+ },
44
+ error: (...args) => {
45
+ if (logLevels.error <= activeLogLevelValue) {
46
+ console.error(...args);
47
+ }
48
+ }
49
+ };
50
+
51
+ // src/utils/shopifyClient.ts
52
+ import {
53
+ ApiVersion,
54
+ LogSeverity,
55
+ Session,
56
+ shopifyApi
57
+ } from "@shopify/shopify-api";
58
+ import "@shopify/shopify-api/adapters/node";
59
+ import dotenv from "dotenv";
60
+ import { z } from "zod";
61
+ var SHOPIFY_API_VERSION = ApiVersion.April25;
62
+ dotenv.config();
63
+ var envSchema = z.object({
64
+ SHOPIFY_API_KEY: z.string({
65
+ error: () => ({ message: "SHOPIFY_API_KEY is required" })
66
+ }),
67
+ SHOPIFY_API_SECRET: z.string({
68
+ error: () => ({ message: "SHOPIFY_API_SECRET is required" })
69
+ }),
70
+ SHOPIFY_API_HOSTNAME: z.string({
71
+ error: () => ({ message: "SHOPIFY_API_HOSTNAME is required" })
72
+ }),
73
+ SHOPIFY_ACCESS_TOKEN: z.string({
74
+ error: () => ({ message: "SHOPIFY_ACCESS_TOKEN is required" })
75
+ }),
76
+ NODE_ENV: z.enum(["development", "production", "test"]).default("development")
77
+ });
78
+ var mapLogLevelToShopifySeverity = (level) => {
79
+ switch (level) {
80
+ case "silent":
81
+ return LogSeverity.Error;
82
+ case "debug":
83
+ return LogSeverity.Debug;
84
+ case "info":
85
+ return LogSeverity.Info;
86
+ case "warn":
87
+ return LogSeverity.Warning;
88
+ case "error":
89
+ return LogSeverity.Error;
90
+ default:
91
+ return LogSeverity.Info;
92
+ }
93
+ };
94
+ var shopifyGraphqlClient;
95
+ try {
96
+ const env2 = envSchema.parse(process.env);
97
+ const shopify = shopifyApi({
98
+ apiKey: env2.SHOPIFY_API_KEY,
99
+ apiSecretKey: env2.SHOPIFY_API_SECRET,
100
+ hostName: env2.SHOPIFY_API_HOSTNAME,
101
+ apiVersion: SHOPIFY_API_VERSION,
102
+ isEmbeddedApp: false,
103
+ logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },
104
+ future: {
105
+ customerAddressDefaultFix: true,
106
+ lineItemBilling: true,
107
+ unstable_managedPricingSupport: false
108
+ }
109
+ });
110
+ const shopifySession = new Session({
111
+ id: `custom-session-${env2.SHOPIFY_API_HOSTNAME}`,
112
+ shop: env2.SHOPIFY_API_HOSTNAME,
113
+ state: "authenticated",
114
+ isOnline: true,
115
+ accessToken: env2.SHOPIFY_ACCESS_TOKEN
116
+ });
117
+ shopifyGraphqlClient = new shopify.clients.Graphql({
118
+ session: shopifySession
119
+ });
120
+ logger.info("Shopify API client initialized successfully.");
121
+ } catch (error) {
122
+ if (error instanceof z.ZodError) {
123
+ const msg = z.prettifyError(error);
124
+ logger.error(msg);
125
+ } else {
126
+ logger.error("Failed to initialize Shopify API client:", error);
127
+ }
128
+ throw error;
129
+ }
130
+
131
+ // src/utils/shopifyFetch.ts
132
+ async function fetchShopifyGraphql(params) {
133
+ const {
134
+ query,
135
+ variables: initialVariables,
136
+ dataExtractor,
137
+ fetchAllPages = false
138
+ } = params;
139
+ const allNodes = [];
140
+ let currentVariables = { ...initialVariables };
141
+ let hasNextLoop = true;
142
+ do {
143
+ const response = await shopifyGraphqlClient.request(query, {
144
+ variables: currentVariables
145
+ });
146
+ if (response.errors) {
147
+ let errorMessages = "GraphQL query failed.";
148
+ const errors = response.errors;
149
+ if (Array.isArray(errors)) {
150
+ errorMessages = errors.map((e) => e.message || JSON.stringify(e)).join("\n");
151
+ } else if (typeof errors === "object" && errors !== null && "message" in errors) {
152
+ errorMessages = errors.message || JSON.stringify(errors);
153
+ } else if (typeof errors === "string") {
154
+ errorMessages = errors;
155
+ } else {
156
+ errorMessages = JSON.stringify(errors);
157
+ }
158
+ logger.error("GraphQL query failed:", errorMessages);
159
+ throw new Error(`GraphQL errors: ${errorMessages}`);
160
+ }
161
+ if (!response.data) {
162
+ throw new Error("No data in Shopify API response");
163
+ }
164
+ const { nodes, pageInfo, userErrors } = dataExtractor(response.data);
165
+ if (Array.isArray(userErrors) && userErrors.length > 0) {
166
+ const errorMessages = userErrors.map((e) => e.message || JSON.stringify(e)).join("\n");
167
+ logger.error("Shopify mutation userErrors:", errorMessages);
168
+ throw new Error(`Shopify mutation userErrors: ${errorMessages}`);
169
+ }
170
+ allNodes.push(...nodes);
171
+ hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false;
172
+ if (hasNextLoop && pageInfo?.endCursor) {
173
+ currentVariables = {
174
+ ...currentVariables,
175
+ after: pageInfo.endCursor
176
+ };
177
+ }
178
+ } while (hasNextLoop);
179
+ return allNodes;
180
+ }
181
+
182
+ // src/utils/zod.ts
183
+ import z2 from "zod";
184
+ async function returnOutputParsed(data, Model) {
185
+ const parsed = await Model.safeParseAsync(data);
186
+ if (!parsed.success) {
187
+ if (parsed.error instanceof z2.ZodError) {
188
+ const msg = z2.prettifyError(parsed.error);
189
+ logger.error(msg);
190
+ } else {
191
+ logger.error("Failed to parse:", parsed.error);
192
+ }
193
+ throw new Error("Failed to parse product variants");
194
+ }
195
+ logger.info("Parsed data successfully");
196
+ return parsed.data;
197
+ }
198
+
199
+ // src/queries/orders/getOrderByName.queries.ts
200
+ var queryOrdersByName = gql`#graphql
201
+ query ordersByName($first: Int!, $queryFilter: String!) {
202
+ orders(first: $first, query: $queryFilter) {
203
+ edges {
204
+ node {
205
+ id
206
+ name
207
+ createdAt
208
+ updatedAt
209
+ totalPriceSet {
210
+ shopMoney {
211
+ amount
212
+ currencyCode
213
+ }
214
+ }
215
+ customer {
216
+ id
217
+ lastName
218
+ defaultEmailAddress {
219
+ emailAddress
220
+ }
221
+ displayName
222
+ firstName
223
+ }
224
+ displayFinancialStatus
225
+ displayFulfillmentStatus
226
+ }
227
+ }
228
+ pageInfo {
229
+ hasNextPage
230
+ endCursor
231
+ }
232
+ }
233
+ }
234
+ `;
235
+ var queryOrdersByNameFull = gql`#graphql
236
+ query ordersByNameFull($first: Int!, $queryFilter: String!) {
237
+ orders(first: $first, query: $queryFilter) {
238
+ edges {
239
+ node {
240
+ billingAddress {
241
+ address1
242
+ address2
243
+ city
244
+ company
245
+ country
246
+ countryCodeV2
247
+ firstName
248
+ formattedArea
249
+ id
250
+ lastName
251
+ name
252
+ phone
253
+ province
254
+ provinceCode
255
+ timeZone
256
+ zip
257
+ }
258
+ billingAddressMatchesShippingAddress
259
+ cancelReason
260
+ cancellation {
261
+ staffNote
262
+ }
263
+ cancelledAt
264
+ capturable
265
+ clientIp
266
+ closed
267
+ closedAt
268
+ confirmed
269
+ createdAt
270
+ currencyCode
271
+ currentCartDiscountAmountSet {
272
+ presentmentMoney {
273
+ amount
274
+ currencyCode
275
+ }
276
+ shopMoney {
277
+ amount
278
+ currencyCode
279
+ }
280
+ }
281
+ currentShippingPriceSet {
282
+ presentmentMoney {
283
+ amount
284
+ currencyCode
285
+ }
286
+ shopMoney {
287
+ amount
288
+ currencyCode
289
+ }
290
+ }
291
+ currentSubtotalLineItemsQuantity
292
+ currentSubtotalPriceSet {
293
+ presentmentMoney {
294
+ amount
295
+ currencyCode
296
+ }
297
+ shopMoney {
298
+ amount
299
+ currencyCode
300
+ }
301
+ }
302
+ currentTaxLines {
303
+ channelLiable
304
+ rate
305
+ ratePercentage
306
+ source
307
+ title
308
+ priceSet {
309
+ presentmentMoney {
310
+ amount
311
+ currencyCode
312
+ }
313
+ shopMoney {
314
+ amount
315
+ currencyCode
316
+ }
317
+ }
318
+ }
319
+ currentTotalAdditionalFeesSet {
320
+ presentmentMoney {
321
+ amount
322
+ currencyCode
323
+ }
324
+ shopMoney {
325
+ amount
326
+ currencyCode
327
+ }
328
+ }
329
+ currentTotalDiscountsSet {
330
+ presentmentMoney {
331
+ amount
332
+ currencyCode
333
+ currencyCode
334
+ }
335
+ shopMoney {
336
+ amount
337
+ currencyCode
338
+ }
339
+ }
340
+ currentTotalDutiesSet {
341
+ presentmentMoney {
342
+ amount
343
+ currencyCode
344
+ }
345
+ shopMoney {
346
+ amount
347
+ currencyCode
348
+ }
349
+ }
350
+ currentTotalPriceSet {
351
+ presentmentMoney {
352
+ amount
353
+ currencyCode
354
+ }
355
+ shopMoney {
356
+ amount
357
+ currencyCode
358
+ }
359
+ }
360
+ currentTotalTaxSet {
361
+ presentmentMoney {
362
+ amount
363
+ currencyCode
364
+ }
365
+ shopMoney {
366
+ amount
367
+ currencyCode
368
+ }
369
+ }
370
+ currentTotalWeight
371
+ customer {
372
+ id
373
+ lastName
374
+ defaultEmailAddress {
375
+ emailAddress
376
+ }
377
+ displayName
378
+ firstName
379
+ }
380
+ customerAcceptsMarketing
381
+ discountCodes
382
+ discountCode
383
+ displayAddress {
384
+ address1
385
+ address2
386
+ city
387
+ company
388
+ country
389
+ countryCodeV2
390
+ firstName
391
+ formattedArea
392
+ id
393
+ lastName
394
+ name
395
+ phone
396
+ province
397
+ provinceCode
398
+ timeZone
399
+ zip
400
+ }
401
+ displayFinancialStatus
402
+ displayFulfillmentStatus
403
+ dutiesIncluded
404
+ edited
405
+ email
406
+ estimatedTaxes
407
+ fulfillable
408
+ fulfillments(first: 20) {
409
+ createdAt
410
+ deliveredAt
411
+ displayStatus
412
+ estimatedDeliveryAt
413
+ updatedAt
414
+ trackingInfo(first: 10) {
415
+ company
416
+ url
417
+ }
418
+ totalQuantity
419
+ status
420
+ name
421
+ id
422
+ }
423
+ fullyPaid
424
+ id
425
+ lineItems(first: 50) {
426
+ edges {
427
+ node {
428
+ id
429
+ name
430
+ originalUnitPriceSet {
431
+ presentmentMoney {
432
+ amount
433
+ currencyCode
434
+ }
435
+ shopMoney {
436
+ amount
437
+ currencyCode
438
+ }
439
+ }
440
+ quantity
441
+ requiresShipping
442
+ sku
443
+ title
444
+ variantTitle
445
+ }
446
+ }
447
+ }
448
+ name
449
+ note
450
+ processedAt
451
+ shippingAddress {
452
+ address1
453
+ address2
454
+ city
455
+ company
456
+ country
457
+ countryCodeV2
458
+ firstName
459
+ formattedArea
460
+ id
461
+ lastName
462
+ name
463
+ phone
464
+ province
465
+ provinceCode
466
+ timeZone
467
+ zip
468
+ }
469
+ statusPageUrl
470
+ tags
471
+ totalPriceSet {
472
+ presentmentMoney {
473
+ amount
474
+ currencyCode
475
+ }
476
+ shopMoney {
477
+ amount
478
+ currencyCode
479
+ }
480
+ }
481
+ totalReceivedSet {
482
+ presentmentMoney {
483
+ amount
484
+ currencyCode
485
+ }
486
+ shopMoney {
487
+ amount
488
+ currencyCode
489
+ }
490
+ }
491
+ totalRefundedSet {
492
+ presentmentMoney {
493
+ amount
494
+ currencyCode
495
+ }
496
+ shopMoney {
497
+ amount
498
+ currencyCode
499
+ }
500
+ }
501
+ totalShippingPriceSet {
502
+ presentmentMoney {
503
+ amount
504
+ currencyCode
505
+ }
506
+ shopMoney {
507
+ amount
508
+ currencyCode
509
+ }
510
+ }
511
+ totalTaxSet {
512
+ presentmentMoney {
513
+ amount
514
+ currencyCode
515
+ }
516
+ shopMoney {
517
+ amount
518
+ currencyCode
519
+ }
520
+ }
521
+ totalWeight
522
+ unpaid
523
+ updatedAt
524
+ }
525
+ }
526
+ pageInfo {
527
+ hasNextPage
528
+ endCursor
529
+ }
530
+ }
531
+ }
532
+ `;
533
+
534
+ // src/queries/orders/getOrderByName.ts
535
+ var GetLeanOrderByNameReturn = z3.object({
536
+ id: z3.string(),
537
+ name: z3.string(),
538
+ createdAt: z3.string(),
539
+ updatedAt: z3.string(),
540
+ totalPrice: z3.object({
541
+ amount: z3.string(),
542
+ currencyCode: z3.string()
543
+ }),
544
+ customer: z3.object({
545
+ id: z3.string(),
546
+ displayName: z3.string(),
547
+ emailAddress: z3.string().nullable()
548
+ }).nullable(),
549
+ financialStatus: z3.string().nullable(),
550
+ fulfillmentStatus: z3.string().nullable()
551
+ }).nullable();
552
+ async function getOrderByName(orderName, detailLevel = "lean") {
553
+ if (detailLevel === "lean") {
554
+ return getLeanOrderByName(orderName);
555
+ }
556
+ return getFullOrderByName(orderName);
557
+ }
558
+ async function getLeanOrderByName(orderName) {
559
+ const variables = {
560
+ first: 1,
561
+ queryFilter: `name:${orderName}`
562
+ };
563
+ const extractedNodes = await fetchShopifyGraphql({
564
+ query: queryOrdersByName,
565
+ variables,
566
+ dataExtractor: (pageData) => {
567
+ if (!pageData.orders) {
568
+ throw new Error(
569
+ "GraphQL response for orders is missing the 'orders' field."
570
+ );
571
+ }
572
+ const nodes = pageData.orders.edges.map(
573
+ (edge) => edge.node
574
+ );
575
+ return {
576
+ nodes
577
+ };
578
+ },
579
+ fetchAllPages: false
580
+ });
581
+ const order = extractedNodes[0];
582
+ if (!order) {
583
+ logger.debug(`No order found with name: ${orderName}`);
584
+ return null;
585
+ }
586
+ const leanOrder = {
587
+ id: order.id,
588
+ name: order.name,
589
+ createdAt: order.createdAt,
590
+ updatedAt: order.updatedAt,
591
+ totalPrice: {
592
+ amount: order.totalPriceSet?.shopMoney?.amount ?? "",
593
+ currencyCode: order.totalPriceSet?.shopMoney?.currencyCode ?? ""
594
+ },
595
+ customer: order.customer ? {
596
+ id: order.customer.id,
597
+ displayName: order.customer.displayName,
598
+ emailAddress: order.customer.defaultEmailAddress?.emailAddress ?? null
599
+ } : null,
600
+ financialStatus: order.displayFinancialStatus ?? null,
601
+ fulfillmentStatus: order.displayFulfillmentStatus ?? null
602
+ };
603
+ return await returnOutputParsed(leanOrder, GetLeanOrderByNameReturn);
604
+ }
605
+ async function getFullOrderByName(orderName) {
606
+ const variables = {
607
+ first: 1,
608
+ queryFilter: `name:${orderName}`
609
+ };
610
+ const extractedNodes = await fetchShopifyGraphql({
611
+ query: queryOrdersByNameFull,
612
+ variables,
613
+ dataExtractor: (pageData) => {
614
+ if (!pageData.orders) {
615
+ throw new Error(
616
+ "GraphQL response for orders is missing the 'orders' field."
617
+ );
618
+ }
619
+ const nodes = pageData.orders.edges.map(
620
+ (edge) => edge.node
621
+ );
622
+ return {
623
+ nodes
624
+ };
625
+ },
626
+ fetchAllPages: false
627
+ });
628
+ if (extractedNodes.length === 0) {
629
+ logger.debug(`No order found with name: ${orderName}`);
630
+ return null;
631
+ }
632
+ const order = extractedNodes[0];
633
+ if (!order) {
634
+ logger.debug(`No order found with name: ${orderName}`);
635
+ return null;
636
+ }
637
+ return order;
638
+ }
639
+
640
+ // src/queries/productVariants/getLeanProductVariants.ts
641
+ import z4 from "zod";
642
+ var GetLeanProductVariantsReturn = z4.array(
643
+ z4.object({
644
+ productId: z4.string(),
645
+ productTitle: z4.string(),
646
+ variantId: z4.string(),
647
+ variantTitle: z4.string(),
648
+ sku: z4.string()
649
+ })
650
+ );
651
+ async function getLeanProductVariants(skus) {
652
+ const queryGql = gql`#graphql
653
+ query leanProductVariants($first: Int!, $after: String, $queryFilter: String) {
654
+ productVariants(first: $first, after: $after, query: $queryFilter) {
655
+ edges {
656
+ node {
657
+ id
658
+ title
659
+ sku
660
+ product {
661
+ id
662
+ title
663
+ }
664
+ }
665
+ }
666
+ pageInfo {
667
+ hasNextPage
668
+ endCursor
669
+ }
670
+ }
671
+ }
672
+ `;
673
+ const initialVariables = { first: 250 };
674
+ if (skus && skus.length > 0) {
675
+ initialVariables.queryFilter = skus.map((sku) => `sku:${sku}`).join(" OR ");
676
+ }
677
+ const extractedNodes = await fetchShopifyGraphql({
678
+ query: queryGql,
679
+ variables: initialVariables,
680
+ dataExtractor: (pageData) => {
681
+ if (!pageData.productVariants) {
682
+ throw new Error(
683
+ "GraphQL response for product variants is missing the 'productVariants' field."
684
+ );
685
+ }
686
+ const nodes = pageData.productVariants.edges.map(
687
+ (edge) => edge.node
688
+ );
689
+ return {
690
+ nodes,
691
+ pageInfo: pageData.productVariants.pageInfo
692
+ };
693
+ },
694
+ fetchAllPages: true
695
+ });
696
+ const allVariants = extractedNodes.flatMap((v) => {
697
+ if (v.sku) {
698
+ return [
699
+ {
700
+ productId: v.product.id,
701
+ productTitle: v.product.title,
702
+ variantId: v.id,
703
+ variantTitle: v.title,
704
+ sku: v.sku
705
+ }
706
+ ];
707
+ }
708
+ logger.debug(
709
+ `Product ${v.product.title} (ID: ${v.product.id}) has a variant (ID: ${v.id}) with no SKU. Filtering out.`
710
+ );
711
+ return [];
712
+ });
713
+ return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn);
714
+ }
715
+ export {
716
+ getLeanProductVariants,
717
+ getOrderByName
718
+ };
719
+ //# sourceMappingURL=index.mjs.map