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.
Files changed (37) hide show
  1. package/dist/commands/product/add-tags.d.ts +9 -0
  2. package/dist/commands/product/add-tags.d.ts.map +1 -0
  3. package/dist/commands/product/add-tags.js +93 -0
  4. package/dist/commands/product/add-tags.js.map +1 -0
  5. package/dist/commands/product/create.d.ts.map +1 -1
  6. package/dist/commands/product/create.js +78 -4
  7. package/dist/commands/product/create.js.map +1 -1
  8. package/dist/commands/product/index.d.ts.map +1 -1
  9. package/dist/commands/product/index.js +32 -0
  10. package/dist/commands/product/index.js.map +1 -1
  11. package/dist/commands/product/queries.d.ts +23 -0
  12. package/dist/commands/product/queries.d.ts.map +1 -1
  13. package/dist/commands/product/queries.js +80 -0
  14. package/dist/commands/product/queries.js.map +1 -1
  15. package/dist/commands/product/remove-tags.d.ts +9 -0
  16. package/dist/commands/product/remove-tags.d.ts.map +1 -0
  17. package/dist/commands/product/remove-tags.js +108 -0
  18. package/dist/commands/product/remove-tags.js.map +1 -0
  19. package/dist/commands/product/service.d.ts +81 -2
  20. package/dist/commands/product/service.d.ts.map +1 -1
  21. package/dist/commands/product/service.js +291 -13
  22. package/dist/commands/product/service.js.map +1 -1
  23. package/dist/commands/product/set-tags.d.ts +9 -0
  24. package/dist/commands/product/set-tags.d.ts.map +1 -0
  25. package/dist/commands/product/set-tags.js +107 -0
  26. package/dist/commands/product/set-tags.js.map +1 -0
  27. package/dist/commands/product/types.d.ts +58 -0
  28. package/dist/commands/product/types.d.ts.map +1 -1
  29. package/dist/commands/product/update-images.d.ts +8 -0
  30. package/dist/commands/product/update-images.d.ts.map +1 -0
  31. package/dist/commands/product/update-images.js +191 -0
  32. package/dist/commands/product/update-images.js.map +1 -0
  33. package/dist/lib/image-library.d.ts +65 -0
  34. package/dist/lib/image-library.d.ts.map +1 -0
  35. package/dist/lib/image-library.js +143 -0
  36. package/dist/lib/image-library.js.map +1 -0
  37. 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;AA4EH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAgI/D"}
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
- Default Images: 6 product images are automatically added to every product.
72
- These default images will be visible on your storefront immediately.
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
- console.error('\n✅ Product created and published to all sales channels. Inventory tracking is disabled. 6 default images added.\n');
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":"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"}
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,CAwH9C"}
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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"}