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