ecomcoder-cli 1.3.12 → 1.3.13
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/dist/commands/product/add-tags.d.ts +9 -0
- package/dist/commands/product/add-tags.d.ts.map +1 -0
- package/dist/commands/product/add-tags.js +93 -0
- package/dist/commands/product/add-tags.js.map +1 -0
- package/dist/commands/product/create.d.ts.map +1 -1
- package/dist/commands/product/create.js +78 -4
- package/dist/commands/product/create.js.map +1 -1
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +32 -0
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/product/queries.d.ts +23 -0
- package/dist/commands/product/queries.d.ts.map +1 -1
- package/dist/commands/product/queries.js +80 -0
- package/dist/commands/product/queries.js.map +1 -1
- package/dist/commands/product/remove-tags.d.ts +9 -0
- package/dist/commands/product/remove-tags.d.ts.map +1 -0
- package/dist/commands/product/remove-tags.js +108 -0
- package/dist/commands/product/remove-tags.js.map +1 -0
- package/dist/commands/product/service.d.ts +81 -2
- package/dist/commands/product/service.d.ts.map +1 -1
- package/dist/commands/product/service.js +291 -13
- package/dist/commands/product/service.js.map +1 -1
- package/dist/commands/product/set-tags.d.ts +9 -0
- package/dist/commands/product/set-tags.d.ts.map +1 -0
- package/dist/commands/product/set-tags.js +107 -0
- package/dist/commands/product/set-tags.js.map +1 -0
- package/dist/commands/product/types.d.ts +58 -0
- package/dist/commands/product/types.d.ts.map +1 -1
- package/dist/commands/product/update-images.d.ts +8 -0
- package/dist/commands/product/update-images.d.ts.map +1 -0
- package/dist/commands/product/update-images.js +191 -0
- package/dist/commands/product/update-images.js.map +1 -0
- package/dist/lib/image-library.d.ts +65 -0
- package/dist/lib/image-library.d.ts.map +1 -0
- package/dist/lib/image-library.js +143 -0
- package/dist/lib/image-library.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add Product Tags Command
|
|
3
|
+
*
|
|
4
|
+
* Following Command Pattern - thin orchestration layer
|
|
5
|
+
* Delegates business logic to ProductService
|
|
6
|
+
* NON-DESTRUCTIVE - No approval required
|
|
7
|
+
*/
|
|
8
|
+
export declare function run(argv?: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=add-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-tags.d.ts","sourceRoot":"","sources":["../../../src/commands/product/add-tags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoCH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA6D/D"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add Product Tags Command
|
|
3
|
+
*
|
|
4
|
+
* Following Command Pattern - thin orchestration layer
|
|
5
|
+
* Delegates business logic to ProductService
|
|
6
|
+
* NON-DESTRUCTIVE - No approval required
|
|
7
|
+
*/
|
|
8
|
+
import { getCredentials, getSessionId } from '../../lib/api-client.js';
|
|
9
|
+
import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
|
|
10
|
+
import { ProductService } from './service.js';
|
|
11
|
+
function showHelp() {
|
|
12
|
+
console.log(`
|
|
13
|
+
Add Product Tags
|
|
14
|
+
|
|
15
|
+
USAGE:
|
|
16
|
+
ecomcoder product add-tags --id=<id> --tags=<tag1,tag2,tag3>
|
|
17
|
+
|
|
18
|
+
REQUIRED OPTIONS:
|
|
19
|
+
--id <id> Product ID (numeric or GID)
|
|
20
|
+
--tags <tags> Comma-separated tags to add
|
|
21
|
+
|
|
22
|
+
EXAMPLES:
|
|
23
|
+
# Add single tag
|
|
24
|
+
ecomcoder product add-tags --id=123 --tags="summer-collection"
|
|
25
|
+
|
|
26
|
+
# Add multiple tags
|
|
27
|
+
ecomcoder product add-tags --id=123 --tags="eco-friendly,sustainable,organic"
|
|
28
|
+
|
|
29
|
+
# Using GID
|
|
30
|
+
ecomcoder product add-tags --id="gid://shopify/Product/123" --tags="new-arrival"
|
|
31
|
+
|
|
32
|
+
NOTES:
|
|
33
|
+
- Non-destructive operation (preserves existing tags)
|
|
34
|
+
- Duplicate tags are automatically handled by Shopify
|
|
35
|
+
- Tags are searchable keywords for organizing products
|
|
36
|
+
- Tags are case-sensitive
|
|
37
|
+
`);
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
41
|
+
if (hasHelpFlag(argv)) {
|
|
42
|
+
showHelp();
|
|
43
|
+
}
|
|
44
|
+
const args = parseArgs(argv);
|
|
45
|
+
// Validate required arguments
|
|
46
|
+
if (!args.id) {
|
|
47
|
+
console.error(JSON.stringify({
|
|
48
|
+
success: false,
|
|
49
|
+
error: 'Missing required argument: --id'
|
|
50
|
+
}));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (!args.tags) {
|
|
54
|
+
console.error(JSON.stringify({
|
|
55
|
+
success: false,
|
|
56
|
+
error: 'Missing required argument: --tags'
|
|
57
|
+
}));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
// Parse tags from comma-separated string
|
|
62
|
+
const tags = args.tags.split(',').map((tag) => tag.trim()).filter(Boolean);
|
|
63
|
+
if (tags.length === 0) {
|
|
64
|
+
console.error(JSON.stringify({
|
|
65
|
+
success: false,
|
|
66
|
+
error: 'No valid tags provided'
|
|
67
|
+
}));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
// Get credentials
|
|
71
|
+
const sessionId = getSessionId(args.sessionId);
|
|
72
|
+
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
73
|
+
// NO APPROVAL NEEDED - non-destructive operation
|
|
74
|
+
// Execute add via service
|
|
75
|
+
const result = await ProductService.addTags(credentials, {
|
|
76
|
+
id: args.id,
|
|
77
|
+
tags
|
|
78
|
+
});
|
|
79
|
+
// Output result
|
|
80
|
+
console.log(JSON.stringify(result, null, 2));
|
|
81
|
+
if (!result.success) {
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(JSON.stringify({
|
|
87
|
+
success: false,
|
|
88
|
+
error: error.message || 'Unknown error occurred'
|
|
89
|
+
}));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=add-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-tags.js","sourceRoot":"","sources":["../../../src/commands/product/add-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6FH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAyL/D"}
|
|
@@ -8,6 +8,7 @@ import { getCredentials, getSessionId } from '../../lib/api-client.js';
|
|
|
8
8
|
import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
|
|
9
9
|
import { ProductService } from './service.js';
|
|
10
10
|
import { requestApproval } from '../../lib/approval.js';
|
|
11
|
+
import { getSmartProductImages } from '../../lib/image-library.js';
|
|
11
12
|
function showHelp() {
|
|
12
13
|
console.log(`
|
|
13
14
|
Create Product
|
|
@@ -28,6 +29,8 @@ OPTIONAL:
|
|
|
28
29
|
--status <status> Product status: ACTIVE, DRAFT, or ARCHIVED (default: DRAFT)
|
|
29
30
|
--handle <handle> URL slug (auto-generated from title if not provided)
|
|
30
31
|
--tags <tags> Comma-separated tags
|
|
32
|
+
--no-images Skip adding images (product created without images)
|
|
33
|
+
--images <json> Custom images to add (JSON array of URLs or objects)
|
|
31
34
|
--session-id Session ID (auto-provided via SESSION_ID env var)
|
|
32
35
|
--help, -h Show this help message
|
|
33
36
|
|
|
@@ -58,6 +61,16 @@ EXAMPLES:
|
|
|
58
61
|
--title="New Product Launch" \\
|
|
59
62
|
--status=DRAFT
|
|
60
63
|
|
|
64
|
+
# Create without images
|
|
65
|
+
ecomcoder product create \\
|
|
66
|
+
--title="Test Product" \\
|
|
67
|
+
--no-images
|
|
68
|
+
|
|
69
|
+
# Create with custom images
|
|
70
|
+
ecomcoder product create \\
|
|
71
|
+
--title="Premium Serum" \\
|
|
72
|
+
--images='["https://example.com/1.jpg","https://example.com/2.jpg"]'
|
|
73
|
+
|
|
61
74
|
IMPORTANT NOTES:
|
|
62
75
|
✅ Auto-Published: Products are automatically published to ALL sales channels.
|
|
63
76
|
The product will be immediately available on your storefront and all
|
|
@@ -68,8 +81,12 @@ IMPORTANT NOTES:
|
|
|
68
81
|
You can enable tracking later in Shopify Admin if needed:
|
|
69
82
|
Products → [Product Name] → Variants → Track quantity
|
|
70
83
|
|
|
71
|
-
✅
|
|
72
|
-
|
|
84
|
+
✅ Smart Images: 6 relevant images are automatically added based on product title.
|
|
85
|
+
Example: "Hair Serum" product automatically gets hair care images from Pexels.
|
|
86
|
+
- Requires PEXELS_API_KEY environment variable (free at pexels.com/api)
|
|
87
|
+
- Falls back to placeholder images if API key not set
|
|
88
|
+
- Use --no-images to skip, or --images to provide custom URLs
|
|
89
|
+
- Update images later with: ecomcoder product update-images
|
|
73
90
|
|
|
74
91
|
⚠️ Single Variant: Creates only 1 initial variant.
|
|
75
92
|
Use 'product create-variants' to add more variants.
|
|
@@ -163,13 +180,70 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
163
180
|
}
|
|
164
181
|
input.variants = [variant];
|
|
165
182
|
}
|
|
183
|
+
// Handle smart image generation
|
|
184
|
+
let mediaToAdd = null;
|
|
185
|
+
if (!args.noImages) {
|
|
186
|
+
if (args.images) {
|
|
187
|
+
// User provided custom images
|
|
188
|
+
try {
|
|
189
|
+
const parsedImages = JSON.parse(args.images);
|
|
190
|
+
if (!Array.isArray(parsedImages)) {
|
|
191
|
+
throw new Error('--images must be a JSON array');
|
|
192
|
+
}
|
|
193
|
+
mediaToAdd = parsedImages.map((img, index) => {
|
|
194
|
+
if (typeof img === 'string') {
|
|
195
|
+
return {
|
|
196
|
+
originalSource: img,
|
|
197
|
+
alt: `Product Image ${index + 1}`,
|
|
198
|
+
mediaContentType: 'IMAGE'
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
return {
|
|
203
|
+
originalSource: img.url,
|
|
204
|
+
alt: img.alt || `Product Image ${index + 1}`,
|
|
205
|
+
mediaContentType: 'IMAGE'
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
console.error(`ℹ️ Adding ${mediaToAdd.length} custom image(s)`);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
console.error(`⚠️ Invalid --images format: ${error.message}. Using smart image search instead.`);
|
|
213
|
+
// Fall through to smart search
|
|
214
|
+
const smartImages = await getSmartProductImages(args.title.trim(), 6);
|
|
215
|
+
mediaToAdd = smartImages.map(img => ({
|
|
216
|
+
originalSource: img.url,
|
|
217
|
+
alt: img.alt || 'Product Image',
|
|
218
|
+
mediaContentType: 'IMAGE'
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Use smart image search based on product title
|
|
224
|
+
console.error(`🔍 Finding relevant images for "${args.title.trim()}"...`);
|
|
225
|
+
const smartImages = await getSmartProductImages(args.title.trim(), 6);
|
|
226
|
+
mediaToAdd = smartImages.map(img => ({
|
|
227
|
+
originalSource: img.url,
|
|
228
|
+
alt: img.alt || 'Product Image',
|
|
229
|
+
mediaContentType: 'IMAGE'
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
console.error('ℹ️ Skipping images (--no-images flag provided)');
|
|
235
|
+
}
|
|
166
236
|
// Execute create via service
|
|
167
|
-
const result = await ProductService.createProduct(credentials, input);
|
|
237
|
+
const result = await ProductService.createProduct(credentials, input, mediaToAdd);
|
|
168
238
|
// Output result
|
|
169
239
|
console.log(JSON.stringify(result, null, 2));
|
|
170
240
|
// Show success message if successful
|
|
171
241
|
if (result.success) {
|
|
172
|
-
|
|
242
|
+
const imageCount = mediaToAdd ? mediaToAdd.length : 0;
|
|
243
|
+
const imageMsg = imageCount > 0
|
|
244
|
+
? `${imageCount} relevant image(s) added.`
|
|
245
|
+
: 'No images added.';
|
|
246
|
+
console.error(`\n✅ Product created and published to all sales channels. Inventory tracking is disabled. ${imageMsg}\n`);
|
|
173
247
|
}
|
|
174
248
|
if (!result.success) {
|
|
175
249
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA4J9C"}
|
|
@@ -85,6 +85,14 @@ export function registerProductCommands() {
|
|
|
85
85
|
category: 'Updates',
|
|
86
86
|
handler: async () => await import('./update-template.js')
|
|
87
87
|
});
|
|
88
|
+
registry.register({
|
|
89
|
+
command: 'product',
|
|
90
|
+
subcommand: 'update-images',
|
|
91
|
+
description: 'Add or update product images with smart selection',
|
|
92
|
+
category: 'Updates',
|
|
93
|
+
quickExample: 'ecomcoder product update-images --id=123 --search="organic skincare"',
|
|
94
|
+
handler: async () => await import('./update-images.js')
|
|
95
|
+
});
|
|
88
96
|
registry.register({
|
|
89
97
|
command: 'product',
|
|
90
98
|
subcommand: 'add-options',
|
|
@@ -101,6 +109,30 @@ export function registerProductCommands() {
|
|
|
101
109
|
quickExample: 'ecomcoder product update-options --id=123 --option-id=456 --name="Tint"',
|
|
102
110
|
handler: async () => await import('./update-options.js')
|
|
103
111
|
});
|
|
112
|
+
registry.register({
|
|
113
|
+
command: 'product',
|
|
114
|
+
subcommand: 'add-tags',
|
|
115
|
+
description: 'Add tags to product (preserves existing tags)',
|
|
116
|
+
category: 'Updates',
|
|
117
|
+
quickExample: 'ecomcoder product add-tags --id=123 --tags="summer,sale"',
|
|
118
|
+
handler: async () => await import('./add-tags.js')
|
|
119
|
+
});
|
|
120
|
+
registry.register({
|
|
121
|
+
command: 'product',
|
|
122
|
+
subcommand: 'remove-tags',
|
|
123
|
+
description: 'Remove specific tags from product',
|
|
124
|
+
category: 'Updates',
|
|
125
|
+
quickExample: 'ecomcoder product remove-tags --id=123 --tags="discontinued"',
|
|
126
|
+
handler: async () => await import('./remove-tags.js')
|
|
127
|
+
});
|
|
128
|
+
registry.register({
|
|
129
|
+
command: 'product',
|
|
130
|
+
subcommand: 'set-tags',
|
|
131
|
+
description: 'Replace all product tags (destructive)',
|
|
132
|
+
category: 'Updates',
|
|
133
|
+
quickExample: 'ecomcoder product set-tags --id=123 --tags="new,featured"',
|
|
134
|
+
handler: async () => await import('./set-tags.js')
|
|
135
|
+
});
|
|
104
136
|
registry.register({
|
|
105
137
|
command: 'product',
|
|
106
138
|
subcommand: 'create-variants',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,13 @@ export declare const GET_PRODUCT_BY_HANDLE = "\n query getProductByHandle($hand
|
|
|
19
19
|
* Update product fields (description, title, template, etc.)
|
|
20
20
|
*/
|
|
21
21
|
export declare const UPDATE_PRODUCT = "\n mutation productUpdate($input: ProductInput!) {\n productUpdate(input: $input) {\n product {\n id\n title\n description\n descriptionHtml\n templateSuffix\n }\n userErrors {\n field\n message\n }\n }\n }\n";
|
|
22
|
+
/**
|
|
23
|
+
* Update product with new media/images
|
|
24
|
+
* Used by update-images command to add images to products
|
|
25
|
+
*
|
|
26
|
+
* Note: This ADDS images to the product, doesn't replace existing ones
|
|
27
|
+
*/
|
|
28
|
+
export declare const UPDATE_PRODUCT_MEDIA = "\n mutation UpdateProductWithMedia($product: ProductUpdateInput!, $media: [CreateMediaInput!]) {\n productUpdate(product: $product, media: $media) {\n product {\n id\n title\n media(first: 50) {\n nodes {\n ... on MediaImage {\n id\n image {\n url\n }\n alt\n mediaContentType\n }\n }\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
|
|
22
29
|
/**
|
|
23
30
|
* Update product variant (price, compareAtPrice, inventory, etc.)
|
|
24
31
|
* @deprecated Use PRODUCT_VARIANTS_BULK_UPDATE instead
|
|
@@ -78,4 +85,20 @@ export declare const GET_PUBLICATIONS = "\n query getPublications($first: Int!)
|
|
|
78
85
|
* Makes product available on selected channels
|
|
79
86
|
*/
|
|
80
87
|
export declare const PUBLISHABLE_PUBLISH = "\n mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n publishablePublish(id: $id, input: $input) {\n publishable {\n availablePublicationsCount {\n count\n }\n publicationCount\n }\n shop {\n id\n }\n userErrors {\n field\n message\n }\n }\n }\n";
|
|
88
|
+
/**
|
|
89
|
+
* Tags Add Mutation
|
|
90
|
+
*
|
|
91
|
+
* Adds tags to a product (non-destructive, preserves existing tags)
|
|
92
|
+
* GraphQL Admin API Reference:
|
|
93
|
+
* https://shopify.dev/docs/api/admin-graphql/latest/mutations/tagsAdd
|
|
94
|
+
*/
|
|
95
|
+
export declare const TAGS_ADD = "\n mutation tagsAdd($id: ID!, $tags: [String!]!) {\n tagsAdd(id: $id, tags: $tags) {\n node {\n ... on Product {\n id\n title\n tags\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
|
|
96
|
+
/**
|
|
97
|
+
* Tags Remove Mutation
|
|
98
|
+
*
|
|
99
|
+
* Removes specified tags from a product
|
|
100
|
+
* GraphQL Admin API Reference:
|
|
101
|
+
* https://shopify.dev/docs/api/admin-graphql/latest/mutations/tagsRemove
|
|
102
|
+
*/
|
|
103
|
+
export declare const TAGS_REMOVE = "\n mutation tagsRemove($id: ID!, $tags: [String!]!) {\n tagsRemove(id: $id, tags: $tags) {\n node {\n ... on Product {\n id\n title\n tags\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
|
|
81
104
|
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/product/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,87BAuD7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,gaAqBpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,89BAuDjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,kSAgB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,gRAc1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,oVAcxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,oeAuBxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,2YAiBxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,+SAejC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,yYAmBlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,yVAmB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,2vCA+D1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,03BA8ClC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gpCAoDjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gLAW5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wWAkB/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/product/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,87BAuD7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,gaAqBpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,89BAuDjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,kSAgB1B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,shBAyBhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,gRAc1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,oVAcxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,oeAuBxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,2YAiBxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,+SAejC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,yYAmBlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,yVAmB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,2vCA+D1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,03BA8ClC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gpCAoDjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gLAW5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wWAkB/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,mRAgBpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,yRAgBvB,CAAC"}
|
|
@@ -166,6 +166,38 @@ export const UPDATE_PRODUCT = `
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
`;
|
|
169
|
+
/**
|
|
170
|
+
* Update product with new media/images
|
|
171
|
+
* Used by update-images command to add images to products
|
|
172
|
+
*
|
|
173
|
+
* Note: This ADDS images to the product, doesn't replace existing ones
|
|
174
|
+
*/
|
|
175
|
+
export const UPDATE_PRODUCT_MEDIA = `
|
|
176
|
+
mutation UpdateProductWithMedia($product: ProductUpdateInput!, $media: [CreateMediaInput!]) {
|
|
177
|
+
productUpdate(product: $product, media: $media) {
|
|
178
|
+
product {
|
|
179
|
+
id
|
|
180
|
+
title
|
|
181
|
+
media(first: 50) {
|
|
182
|
+
nodes {
|
|
183
|
+
... on MediaImage {
|
|
184
|
+
id
|
|
185
|
+
image {
|
|
186
|
+
url
|
|
187
|
+
}
|
|
188
|
+
alt
|
|
189
|
+
mediaContentType
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
userErrors {
|
|
195
|
+
field
|
|
196
|
+
message
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
`;
|
|
169
201
|
/**
|
|
170
202
|
* Update product variant (price, compareAtPrice, inventory, etc.)
|
|
171
203
|
* @deprecated Use PRODUCT_VARIANTS_BULK_UPDATE instead
|
|
@@ -536,4 +568,52 @@ export const PUBLISHABLE_PUBLISH = `
|
|
|
536
568
|
}
|
|
537
569
|
}
|
|
538
570
|
`;
|
|
571
|
+
/**
|
|
572
|
+
* Tags Add Mutation
|
|
573
|
+
*
|
|
574
|
+
* Adds tags to a product (non-destructive, preserves existing tags)
|
|
575
|
+
* GraphQL Admin API Reference:
|
|
576
|
+
* https://shopify.dev/docs/api/admin-graphql/latest/mutations/tagsAdd
|
|
577
|
+
*/
|
|
578
|
+
export const TAGS_ADD = `
|
|
579
|
+
mutation tagsAdd($id: ID!, $tags: [String!]!) {
|
|
580
|
+
tagsAdd(id: $id, tags: $tags) {
|
|
581
|
+
node {
|
|
582
|
+
... on Product {
|
|
583
|
+
id
|
|
584
|
+
title
|
|
585
|
+
tags
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
userErrors {
|
|
589
|
+
field
|
|
590
|
+
message
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
`;
|
|
595
|
+
/**
|
|
596
|
+
* Tags Remove Mutation
|
|
597
|
+
*
|
|
598
|
+
* Removes specified tags from a product
|
|
599
|
+
* GraphQL Admin API Reference:
|
|
600
|
+
* https://shopify.dev/docs/api/admin-graphql/latest/mutations/tagsRemove
|
|
601
|
+
*/
|
|
602
|
+
export const TAGS_REMOVE = `
|
|
603
|
+
mutation tagsRemove($id: ID!, $tags: [String!]!) {
|
|
604
|
+
tagsRemove(id: $id, tags: $tags) {
|
|
605
|
+
node {
|
|
606
|
+
... on Product {
|
|
607
|
+
id
|
|
608
|
+
title
|
|
609
|
+
tags
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
userErrors {
|
|
613
|
+
field
|
|
614
|
+
message
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
`;
|
|
539
619
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/product/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDhC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBvC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDpC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;CAc7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;CAc3C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB3C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;CAiB3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;CAepC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;CAmBrC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;CAmB7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAW/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;CAkBlC,CAAC"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/product/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDhC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBvC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDpC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;CAc7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;CAc3C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB3C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;CAiB3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;CAepC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;CAmBrC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;CAmB7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAW/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;CAgBvB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;CAgB1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove Product Tags Command
|
|
3
|
+
*
|
|
4
|
+
* Following Command Pattern - thin orchestration layer
|
|
5
|
+
* Delegates business logic to ProductService
|
|
6
|
+
* DESTRUCTIVE - Requires approval flow
|
|
7
|
+
*/
|
|
8
|
+
export declare function run(argv?: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=remove-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-tags.d.ts","sourceRoot":"","sources":["../../../src/commands/product/remove-tags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsCH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA2E/D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove Product Tags Command
|
|
3
|
+
*
|
|
4
|
+
* Following Command Pattern - thin orchestration layer
|
|
5
|
+
* Delegates business logic to ProductService
|
|
6
|
+
* DESTRUCTIVE - Requires approval flow
|
|
7
|
+
*/
|
|
8
|
+
import { getCredentials, getSessionId } from '../../lib/api-client.js';
|
|
9
|
+
import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
|
|
10
|
+
import { ProductService } from './service.js';
|
|
11
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
12
|
+
function showHelp() {
|
|
13
|
+
console.log(`
|
|
14
|
+
Remove Product Tags
|
|
15
|
+
|
|
16
|
+
USAGE:
|
|
17
|
+
ecomcoder product remove-tags --id=<id> --tags=<tag1,tag2,tag3>
|
|
18
|
+
|
|
19
|
+
REQUIRED OPTIONS:
|
|
20
|
+
--id <id> Product ID (numeric or GID)
|
|
21
|
+
--tags <tags> Comma-separated tags to remove
|
|
22
|
+
|
|
23
|
+
EXAMPLES:
|
|
24
|
+
# Remove single tag
|
|
25
|
+
ecomcoder product remove-tags --id=123 --tags="discontinued"
|
|
26
|
+
|
|
27
|
+
# Remove multiple tags
|
|
28
|
+
ecomcoder product remove-tags --id=123 --tags="old-collection,winter-2023"
|
|
29
|
+
|
|
30
|
+
# Using GID
|
|
31
|
+
ecomcoder product remove-tags --id="gid://shopify/Product/123" --tags="clearance"
|
|
32
|
+
|
|
33
|
+
NOTES:
|
|
34
|
+
- Destructive operation (removes tags from product)
|
|
35
|
+
- Requires approval before execution
|
|
36
|
+
- Silently ignores tags that don't exist on product
|
|
37
|
+
- Removed tags can be re-added using add-tags command
|
|
38
|
+
- Tags are case-sensitive
|
|
39
|
+
`);
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
42
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
43
|
+
if (hasHelpFlag(argv)) {
|
|
44
|
+
showHelp();
|
|
45
|
+
}
|
|
46
|
+
const args = parseArgs(argv);
|
|
47
|
+
// Validate required arguments
|
|
48
|
+
if (!args.id) {
|
|
49
|
+
console.error(JSON.stringify({
|
|
50
|
+
success: false,
|
|
51
|
+
error: 'Missing required argument: --id'
|
|
52
|
+
}));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (!args.tags) {
|
|
56
|
+
console.error(JSON.stringify({
|
|
57
|
+
success: false,
|
|
58
|
+
error: 'Missing required argument: --tags'
|
|
59
|
+
}));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
// Parse tags from comma-separated string
|
|
64
|
+
const tags = args.tags.split(',').map((tag) => tag.trim()).filter(Boolean);
|
|
65
|
+
if (tags.length === 0) {
|
|
66
|
+
console.error(JSON.stringify({
|
|
67
|
+
success: false,
|
|
68
|
+
error: 'No valid tags provided'
|
|
69
|
+
}));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
// Get credentials
|
|
73
|
+
const sessionId = getSessionId(args.sessionId);
|
|
74
|
+
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
75
|
+
// Request approval before executing
|
|
76
|
+
const tagCount = tags.length;
|
|
77
|
+
const approved = await requestApproval({
|
|
78
|
+
command: `ecomcoder product remove-tags --id=${args.id} --tags=${args.tags}`,
|
|
79
|
+
message: `This will remove ${tagCount} tag(s) from your product on the live Shopify store. Removed tags can be re-added later.`,
|
|
80
|
+
riskLevel: 'moderate'
|
|
81
|
+
});
|
|
82
|
+
if (!approved) {
|
|
83
|
+
console.log(JSON.stringify({
|
|
84
|
+
success: false,
|
|
85
|
+
error: 'Operation cancelled by user'
|
|
86
|
+
}));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
// Execute remove via service
|
|
90
|
+
const result = await ProductService.removeTags(credentials, {
|
|
91
|
+
id: args.id,
|
|
92
|
+
tags
|
|
93
|
+
});
|
|
94
|
+
// Output result
|
|
95
|
+
console.log(JSON.stringify(result, null, 2));
|
|
96
|
+
if (!result.success) {
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(JSON.stringify({
|
|
102
|
+
success: false,
|
|
103
|
+
error: error.message || 'Unknown error occurred'
|
|
104
|
+
}));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=remove-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-tags.js","sourceRoot":"","sources":["../../../src/commands/product/remove-tags.ts"],"names":[],"mappings":"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"}
|