@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.
- package/README.md +172 -0
- package/dist/generated-api-types/2025-04/admin.generated.d.ts +181 -0
- package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +1 -0
- package/dist/generated-api-types/2025-04/admin.generated.js +5 -0
- package/dist/generated-api-types/2025-04/admin.generated.js.map +1 -0
- package/dist/generated-api-types/2025-04/admin.types.d.ts +57664 -0
- package/dist/generated-api-types/2025-04/admin.types.d.ts.map +1 -0
- package/dist/generated-api-types/2025-04/admin.types.js +11356 -0
- package/dist/generated-api-types/2025-04/admin.types.js.map +1 -0
- package/dist/index.cjs +752 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +18290 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +719 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts +4 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js +56 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts +3 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js +11 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts +2 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts.map +1 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js +11 -0
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js.map +1 -0
- package/dist/queries/orders/getOrderByName.d.ts +26 -0
- package/dist/queries/orders/getOrderByName.d.ts.map +1 -0
- package/dist/queries/orders/getOrderByName.js +117 -0
- package/dist/queries/orders/getOrderByName.js.map +1 -0
- package/dist/queries/orders/getOrderByName.mock.d.ts +21 -0
- package/dist/queries/orders/getOrderByName.mock.d.ts.map +1 -0
- package/dist/queries/orders/getOrderByName.mock.js +55 -0
- package/dist/queries/orders/getOrderByName.mock.js.map +1 -0
- package/dist/queries/orders/getOrderByName.queries.d.ts +3 -0
- package/dist/queries/orders/getOrderByName.queries.d.ts.map +1 -0
- package/dist/queries/orders/getOrderByName.queries.js +335 -0
- package/dist/queries/orders/getOrderByName.queries.js.map +1 -0
- package/dist/queries/orders/getOrderByName.test.d.ts +2 -0
- package/dist/queries/orders/getOrderByName.test.d.ts.map +1 -0
- package/dist/queries/orders/getOrderByName.test.js +28 -0
- package/dist/queries/orders/getOrderByName.test.js.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.d.ts +21 -0
- package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.js +81 -0
- package/dist/queries/productVariants/getLeanProductVariants.js.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +3 -0
- package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.mock.js +33 -0
- package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +2 -0
- package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +1 -0
- package/dist/queries/productVariants/getLeanProductVariants.test.js +38 -0
- package/dist/queries/productVariants/getLeanProductVariants.test.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mswHandlers.d.ts +2 -0
- package/dist/utils/mswHandlers.d.ts.map +1 -0
- package/dist/utils/mswHandlers.js +32 -0
- package/dist/utils/mswHandlers.js.map +1 -0
- package/dist/utils/shopifyClient.d.ts +6 -0
- package/dist/utils/shopifyClient.d.ts.map +1 -0
- package/dist/utils/shopifyClient.js +82 -0
- package/dist/utils/shopifyClient.js.map +1 -0
- package/dist/utils/shopifyClient.mock.d.ts +3 -0
- package/dist/utils/shopifyClient.mock.d.ts.map +1 -0
- package/dist/utils/shopifyClient.mock.js +19 -0
- package/dist/utils/shopifyClient.mock.js.map +1 -0
- package/dist/utils/shopifyClient.test.d.ts +2 -0
- package/dist/utils/shopifyClient.test.d.ts.map +1 -0
- package/dist/utils/shopifyClient.test.js +27 -0
- package/dist/utils/shopifyClient.test.js.map +1 -0
- package/dist/utils/shopifyFetch.d.ts +19 -0
- package/dist/utils/shopifyFetch.d.ts.map +1 -0
- package/dist/utils/shopifyFetch.js +60 -0
- package/dist/utils/shopifyFetch.js.map +1 -0
- package/dist/utils/shopifyFetch.test.d.ts +2 -0
- package/dist/utils/shopifyFetch.test.d.ts.map +1 -0
- package/dist/utils/shopifyFetch.test.js +17 -0
- package/dist/utils/shopifyFetch.test.js.map +1 -0
- package/dist/utils/test-setup.d.ts +2 -0
- package/dist/utils/test-setup.d.ts.map +1 -0
- package/dist/utils/test-setup.js +13 -0
- package/dist/utils/test-setup.js.map +1 -0
- package/dist/utils/zod.d.ts +3 -0
- package/dist/utils/zod.d.ts.map +1 -0
- package/dist/utils/zod.js +19 -0
- package/dist/utils/zod.js.map +1 -0
- 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
|