ecomcoder-cli 1.3.3 → 1.3.4

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 (60) hide show
  1. package/README.md +0 -23
  2. package/dist/cli.js +16 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/product/create.d.ts +8 -0
  5. package/dist/commands/product/create.d.ts.map +1 -0
  6. package/dist/commands/product/create.js +166 -0
  7. package/dist/commands/product/create.js.map +1 -0
  8. package/dist/commands/product/get-metafield.d.ts +8 -0
  9. package/dist/commands/product/get-metafield.d.ts.map +1 -0
  10. package/dist/commands/product/get-metafield.js +131 -0
  11. package/dist/commands/product/get-metafield.js.map +1 -0
  12. package/dist/commands/product/index.d.ts.map +1 -1
  13. package/dist/commands/product/index.js +42 -0
  14. package/dist/commands/product/index.js.map +1 -1
  15. package/dist/commands/product/queries.d.ts +19 -0
  16. package/dist/commands/product/queries.d.ts.map +1 -1
  17. package/dist/commands/product/queries.js +122 -0
  18. package/dist/commands/product/queries.js.map +1 -1
  19. package/dist/commands/product/service.d.ts +35 -1
  20. package/dist/commands/product/service.d.ts.map +1 -1
  21. package/dist/commands/product/service.js +241 -1
  22. package/dist/commands/product/service.js.map +1 -1
  23. package/dist/commands/product/set-metafield.d.ts +8 -0
  24. package/dist/commands/product/set-metafield.d.ts.map +1 -0
  25. package/dist/commands/product/set-metafield.js +174 -0
  26. package/dist/commands/product/set-metafield.js.map +1 -0
  27. package/dist/commands/product/types.d.ts +88 -0
  28. package/dist/commands/product/types.d.ts.map +1 -1
  29. package/dist/commands/product/update-status.d.ts +8 -0
  30. package/dist/commands/product/update-status.d.ts.map +1 -0
  31. package/dist/commands/product/update-status.js +105 -0
  32. package/dist/commands/product/update-status.js.map +1 -0
  33. package/dist/commands/products/index.d.ts.map +1 -1
  34. package/dist/commands/products/index.js +0 -10
  35. package/dist/commands/products/index.js.map +1 -1
  36. package/dist/commands/shop/get-metafield.d.ts +8 -0
  37. package/dist/commands/shop/get-metafield.d.ts.map +1 -0
  38. package/dist/commands/shop/get-metafield.js +117 -0
  39. package/dist/commands/shop/get-metafield.js.map +1 -0
  40. package/dist/commands/shop/index.d.ts +10 -0
  41. package/dist/commands/shop/index.d.ts.map +1 -0
  42. package/dist/commands/shop/index.js +61 -0
  43. package/dist/commands/shop/index.js.map +1 -0
  44. package/dist/commands/shop/queries.d.ts +24 -0
  45. package/dist/commands/shop/queries.d.ts.map +1 -0
  46. package/dist/commands/shop/queries.js +83 -0
  47. package/dist/commands/shop/queries.js.map +1 -0
  48. package/dist/commands/shop/service.d.ts +30 -0
  49. package/dist/commands/shop/service.d.ts.map +1 -0
  50. package/dist/commands/shop/service.js +131 -0
  51. package/dist/commands/shop/service.js.map +1 -0
  52. package/dist/commands/shop/set-metafield.d.ts +8 -0
  53. package/dist/commands/shop/set-metafield.d.ts.map +1 -0
  54. package/dist/commands/shop/set-metafield.js +174 -0
  55. package/dist/commands/shop/set-metafield.js.map +1 -0
  56. package/dist/commands/shop/types.d.ts +84 -0
  57. package/dist/commands/shop/types.d.ts.map +1 -0
  58. package/dist/commands/shop/types.js +6 -0
  59. package/dist/commands/shop/types.js.map +1 -0
  60. package/package.json +1 -1
package/README.md CHANGED
@@ -53,22 +53,6 @@ ecomcoder products list --limit=50
53
53
  **Options:**
54
54
  - `--limit` - Maximum number of products to retrieve (default: 50)
55
55
 
56
- #### Set Product Rating
57
-
58
- Add rating metafields to a product (useful for testing review systems).
59
-
60
- ```bash
61
- ecomcoder products set-rating \
62
- --product-id="gid://shopify/Product/123456789" \
63
- --rating=4.5 \
64
- --count=127
65
- ```
66
-
67
- **Options:**
68
- - `--product-id` - Shopify product GID
69
- - `--rating` - Rating value (e.g., 4.5)
70
- - `--count` - Number of reviews/ratings
71
-
72
56
  ### Metafields
73
57
 
74
58
  #### Create Metafield Definition
@@ -173,7 +157,6 @@ ecomcoder-cli/
173
157
  │ ├── commands/ # Command implementations
174
158
  │ │ ├── create-dummy-products.ts
175
159
  │ │ ├── list-products.ts
176
- │ │ ├── set-product-rating.ts
177
160
  │ │ ├── create-metafield.ts
178
161
  │ │ ├── get-metafield.ts
179
162
  │ │ └── docs-search.ts
@@ -253,12 +236,6 @@ ecomcoder products create --count=25
253
236
  # List all products (up to 100)
254
237
  ecomcoder products list --limit=100
255
238
 
256
- # Add a 4.8 star rating with 243 reviews
257
- ecomcoder products set-rating \
258
- --product-id="gid://shopify/Product/8234567890" \
259
- --rating=4.8 \
260
- --count=243
261
-
262
239
  # Create a shop-level recommended products metafield
263
240
  ecomcoder metafield create \
264
241
  --name="Recommended Products" \
package/dist/cli.js CHANGED
@@ -14,12 +14,14 @@ import { getPositionalArgs } from './lib/args-parser.js';
14
14
  import { registry } from './lib/command-registry.js';
15
15
  // Register all command groups
16
16
  import { registerProductCommands } from './commands/product/index.js';
17
+ import { registerShopCommands } from './commands/shop/index.js';
17
18
  import { registerMetafieldCommands } from './commands/metafield/index.js';
18
19
  import { registerProductsCommands } from './commands/products/index.js';
19
20
  import { registerDocsCommands } from './commands/docs/index.js';
20
21
  import { registerDiscountCommands } from './commands/discount/index.js';
21
22
  // Initialize registry
22
23
  registerProductCommands();
24
+ registerShopCommands();
23
25
  registerMetafieldCommands();
24
26
  registerProductsCommands();
25
27
  registerDocsCommands();
@@ -34,14 +36,18 @@ USAGE:
34
36
  COMMANDS:
35
37
  products create Create dummy Shopify products for testing
36
38
  products list List products in your Shopify store
37
- products set-rating Set rating metafields on a product
39
+ product create Create a new product from scratch
38
40
  product get Get detailed product data
41
+ product set-metafield Set or update product metafield values
39
42
  product update-title Update product title
40
43
  product update-description Update product description
41
44
  product update-price Update product price and compare-at price
45
+ product update-status Update product status (ACTIVE, DRAFT, ARCHIVED)
42
46
  product update-template Change product template assignment
43
47
  product create-variants Create product variants (bulk operation)
44
48
  product delete-variants Delete product variants (bulk operation)
49
+ shop set-metafield Set or update shop metafield values (store-wide)
50
+ shop get-metafield View shop metafield values (store-wide)
45
51
  discount create-basic Create basic discount (percentage or fixed amount)
46
52
  discount create-bxgy Create BXGY (Buy X Get Y) discount
47
53
  discount create-shipping Create free shipping discount
@@ -69,13 +75,17 @@ EXAMPLES:
69
75
  # List 50 products
70
76
  ecomcoder products list --limit=50
71
77
 
72
- # Set product rating
73
- ecomcoder products set-rating --product-id="gid://shopify/Product/123" --rating=4.5 --count=127
78
+ # Create a new product
79
+ ecomcoder product create --title="Premium Hair Serum" --price=29.99 --sku="HAIR-001"
74
80
 
75
81
  # Get product details
76
82
  ecomcoder product get --id=123456789
77
83
  ecomcoder product get --title="Blue T-Shirt"
78
84
 
85
+ # Set product metafield (AI bundle automation)
86
+ ecomcoder product set-metafield --id=123 --namespace=bundles --key=products \\
87
+ --value='["gid://shopify/Product/456"]' --type=list.product_reference
88
+
79
89
  # Update product title
80
90
  ecomcoder product update-title --id=123 --title="Premium Hair Serum"
81
91
 
@@ -85,6 +95,9 @@ EXAMPLES:
85
95
  # Update product price (all variants)
86
96
  ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99 --all-variants
87
97
 
98
+ # Update product status
99
+ ecomcoder product update-status --id=123 --status=ACTIVE
100
+
88
101
  # Change product template
89
102
  ecomcoder product update-template --id=123 --template=premium
90
103
 
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,8BAA8B;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,sBAAsB;AACtB,uBAAuB,EAAE,CAAC;AAC1B,yBAAyB,EAAE,CAAC;AAC5B,wBAAwB,EAAE,CAAC;AAC3B,oBAAoB,EAAE,CAAC;AACvB,wBAAwB,EAAE,CAAC;AAE3B,SAAS,YAAY;IACnB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,4BAA4B;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC;IAEzC,8CAA8C;IAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjE,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,oBAAoB;YACpB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,mBAAmB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,uBAAuB;YACvB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC;iBAC3D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,gBAAgB,UAAU,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,KAAK,CAAC,sBAAsB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kDAAkD;QAClD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;IAE1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Create Product Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ProductService
6
+ */
7
+ export declare function run(argv?: string[]): Promise<void>;
8
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqEH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAiH/D"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Create Product Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ProductService
6
+ */
7
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
8
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
9
+ import { ProductService } from './service.js';
10
+ function showHelp() {
11
+ console.log(`
12
+ Create Product
13
+
14
+ USAGE:
15
+ ecomcoder product create [OPTIONS]
16
+
17
+ REQUIRED OPTIONS:
18
+ --title <text> Product title (required)
19
+
20
+ OPTIONAL:
21
+ --description <text> Product description (HTML supported)
22
+ --price <amount> Initial variant price
23
+ --compare-at-price <amount> Sale/original price
24
+ --sku <sku> SKU for initial variant
25
+ --product-type <type> Product type/category
26
+ --vendor <name> Product vendor/brand
27
+ --status <status> Product status: ACTIVE, DRAFT, or ARCHIVED (default: DRAFT)
28
+ --handle <handle> URL slug (auto-generated from title if not provided)
29
+ --tags <tags> Comma-separated tags
30
+ --session-id Session ID (auto-provided via SESSION_ID env var)
31
+ --help, -h Show this help message
32
+
33
+ EXAMPLES:
34
+ # Minimal product (title only)
35
+ ecomcoder product create --title="Premium Hair Serum"
36
+
37
+ # Product with pricing
38
+ ecomcoder product create \\
39
+ --title="Premium Hair Serum" \\
40
+ --price=29.99 \\
41
+ --compare-at-price=44.95 \\
42
+ --sku="HAIR-001"
43
+
44
+ # Complete product
45
+ ecomcoder product create \\
46
+ --title="Therapy Hair Serum - Natural Formula" \\
47
+ --description="<h2>Premium Formula</h2><p>Natural ingredients for healthy hair</p>" \\
48
+ --price=34.99 \\
49
+ --sku="HAIR-SERUM-001" \\
50
+ --product-type="Hair Care" \\
51
+ --vendor="Beauty Co" \\
52
+ --status=ACTIVE \\
53
+ --tags="natural,organic,hair-care"
54
+
55
+ # Draft product (for review before publishing)
56
+ ecomcoder product create \\
57
+ --title="New Product Launch" \\
58
+ --status=DRAFT
59
+
60
+ IMPORTANT NOTES:
61
+ ⚠️ Inventory Setup Required: Created products start with 0 inventory.
62
+ You must set inventory quantities in Shopify Admin:
63
+ Products → [Product Name] → Variants → Edit inventory
64
+
65
+ ⚠️ Single Variant: Creates only 1 initial variant.
66
+ Use 'product create-variants' to add more variants.
67
+
68
+ ⚠️ No Images: Product images must be added separately.
69
+ `);
70
+ process.exit(0);
71
+ }
72
+ export async function run(argv = process.argv.slice(2)) {
73
+ if (hasHelpFlag(argv)) {
74
+ showHelp();
75
+ }
76
+ const args = parseArgs(argv);
77
+ // Validate required argument
78
+ if (!args.title) {
79
+ console.error(JSON.stringify({
80
+ success: false,
81
+ error: 'Missing required argument: --title'
82
+ }));
83
+ process.exit(1);
84
+ }
85
+ // Validate title is not empty
86
+ if (typeof args.title === 'string' && args.title.trim() === '') {
87
+ console.error(JSON.stringify({
88
+ success: false,
89
+ error: 'Title cannot be empty'
90
+ }));
91
+ process.exit(1);
92
+ }
93
+ // Validate status if provided
94
+ const validStatuses = ['ACTIVE', 'DRAFT', 'ARCHIVED'];
95
+ if (args.status && !validStatuses.includes(args.status.toUpperCase())) {
96
+ console.error(JSON.stringify({
97
+ success: false,
98
+ error: `Invalid status. Must be one of: ${validStatuses.join(', ')}`
99
+ }));
100
+ process.exit(1);
101
+ }
102
+ try {
103
+ // Get credentials
104
+ const sessionId = getSessionId(args.sessionId);
105
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
106
+ // Build input object
107
+ const input = {
108
+ title: args.title.trim()
109
+ };
110
+ // Add optional fields
111
+ if (args.description) {
112
+ input.descriptionHtml = args.description;
113
+ }
114
+ if (args.productType) {
115
+ input.productType = args.productType;
116
+ }
117
+ if (args.vendor) {
118
+ input.vendor = args.vendor;
119
+ }
120
+ if (args.status) {
121
+ input.status = args.status.toUpperCase();
122
+ }
123
+ if (args.handle) {
124
+ input.handle = args.handle;
125
+ }
126
+ if (args.tags) {
127
+ input.tags = args.tags.split(',').map((tag) => tag.trim());
128
+ }
129
+ // Build initial variant if price or SKU provided
130
+ // Service layer will update the variant after product creation
131
+ if (args.price || args.sku || args.compareAtPrice) {
132
+ const variant = {};
133
+ if (args.price) {
134
+ variant.price = args.price;
135
+ }
136
+ if (args.compareAtPrice) {
137
+ variant.compareAtPrice = args.compareAtPrice;
138
+ }
139
+ if (args.sku) {
140
+ variant.inventoryItem = {
141
+ sku: args.sku
142
+ };
143
+ }
144
+ input.variants = [variant];
145
+ }
146
+ // Execute create via service
147
+ const result = await ProductService.createProduct(credentials, input);
148
+ // Output result
149
+ console.log(JSON.stringify(result, null, 2));
150
+ // Show inventory warning if successful
151
+ if (result.success) {
152
+ console.error('\n⚠️ IMPORTANT: Product created with 0 inventory. Set inventory quantities in Shopify Admin.\n');
153
+ }
154
+ if (!result.success) {
155
+ process.exit(1);
156
+ }
157
+ }
158
+ catch (error) {
159
+ console.error(JSON.stringify({
160
+ success: false,
161
+ error: error.message || 'Unknown error occurred'
162
+ }));
163
+ process.exit(1);
164
+ }
165
+ }
166
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/product/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Get Product Metafield Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ProductService
6
+ */
7
+ export declare function run(argv?: string[]): Promise<void>;
8
+ //# sourceMappingURL=get-metafield.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-metafield.d.ts","sourceRoot":"","sources":["../../../src/commands/product/get-metafield.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmFH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAkD/D"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Get Product Metafield Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ProductService
6
+ */
7
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
8
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
9
+ import { ProductService } from './service.js';
10
+ function showHelp() {
11
+ console.log(`
12
+ Get Product Metafield
13
+
14
+ USAGE:
15
+ ecomcoder product get-metafield [OPTIONS]
16
+
17
+ REQUIRED OPTIONS:
18
+ --id <id> Product ID (numeric or GID)
19
+
20
+ QUERY OPTIONS (choose one):
21
+ --namespace <ns> --key <key> Get specific metafield
22
+ --namespace <ns> Get all metafields in namespace
23
+ (no namespace/key) Get all metafields for product
24
+
25
+ OPTIONAL:
26
+ --session-id Session ID (auto-provided via SESSION_ID env var)
27
+ --help, -h Show this help message
28
+
29
+ EXAMPLES:
30
+ # Get specific metafield by namespace and key
31
+ ecomcoder product get-metafield \\
32
+ --id=123 \\
33
+ --namespace=bundles \\
34
+ --key=products
35
+
36
+ # Get all metafields in a namespace
37
+ ecomcoder product get-metafield \\
38
+ --id=123 \\
39
+ --namespace=custom
40
+
41
+ # Get all metafields for product (all namespaces)
42
+ ecomcoder product get-metafield --id=123
43
+
44
+ OUTPUT FORMATS:
45
+ Specific metafield (namespace + key):
46
+ {
47
+ "success": true,
48
+ "data": {
49
+ "metafield": {
50
+ "id": "gid://shopify/Metafield/123",
51
+ "namespace": "bundles",
52
+ "key": "products",
53
+ "value": "[\\"gid://shopify/Product/456\\"]",
54
+ "type": "list.product_reference",
55
+ "createdAt": "2024-01-20T10:30:00Z",
56
+ "updatedAt": "2024-01-20T15:45:00Z"
57
+ }
58
+ }
59
+ }
60
+
61
+ Multiple metafields (namespace or all):
62
+ {
63
+ "success": true,
64
+ "data": {
65
+ "metafields": [...],
66
+ "count": 5
67
+ }
68
+ }
69
+
70
+ Not found:
71
+ {
72
+ "success": true,
73
+ "data": {
74
+ "metafield": null
75
+ }
76
+ }
77
+
78
+ NOTES:
79
+ - Returns up to 250 metafields when querying multiple
80
+ - Namespace filter is optional (omit to get all namespaces)
81
+ - Key requires namespace (cannot query by key alone)
82
+ - Metafield values are always strings (parse JSON for complex types)
83
+ `);
84
+ process.exit(0);
85
+ }
86
+ export async function run(argv = process.argv.slice(2)) {
87
+ if (hasHelpFlag(argv)) {
88
+ showHelp();
89
+ }
90
+ const args = parseArgs(argv);
91
+ // Validate required arguments
92
+ if (!args.id) {
93
+ console.error(JSON.stringify({
94
+ success: false,
95
+ error: 'Missing required argument: --id'
96
+ }));
97
+ process.exit(1);
98
+ }
99
+ // Validate key requires namespace
100
+ if (args.key && !args.namespace) {
101
+ console.error(JSON.stringify({
102
+ success: false,
103
+ error: 'Key requires namespace. Use --namespace with --key'
104
+ }));
105
+ process.exit(1);
106
+ }
107
+ try {
108
+ // Get credentials
109
+ const sessionId = getSessionId(args.sessionId);
110
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
111
+ // Execute get metafield via service
112
+ const result = await ProductService.getMetafield(credentials, {
113
+ id: args.id,
114
+ namespace: args.namespace,
115
+ key: args.key
116
+ });
117
+ // Output result
118
+ console.log(JSON.stringify(result, null, 2));
119
+ if (!result.success) {
120
+ process.exit(1);
121
+ }
122
+ }
123
+ catch (error) {
124
+ console.error(JSON.stringify({
125
+ success: false,
126
+ error: error.message || 'Unknown error occurred'
127
+ }));
128
+ process.exit(1);
129
+ }
130
+ }
131
+ //# sourceMappingURL=get-metafield.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-metafield.js","sourceRoot":"","sources":["../../../src/commands/product/get-metafield.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;AAE9C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,8BAA8B;IAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,iCAAiC;SACzC,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oDAAoD;SAC5D,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/E,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE;YAC5D,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;SACjD,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAmG9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAiJ9C"}
@@ -20,19 +20,34 @@ USAGE:
20
20
  ecomcoder product <subcommand> [options]
21
21
 
22
22
  SUBCOMMANDS:
23
+ create Create a new product from scratch
23
24
  get Get product details by ID, title, or handle
25
+ get-metafield View product metafield values
26
+ set-metafield Set or update product metafield values
24
27
  update-title Update product title
25
28
  update-description Update product description
26
29
  update-price Update product price and compare-at price
30
+ update-status Update product status (ACTIVE, DRAFT, ARCHIVED, UNLISTED)
27
31
  update-template Change product template assignment
28
32
  create-variants Create product variants (bulk operation)
29
33
  delete-variants Delete product variants (bulk operation)
30
34
 
31
35
  EXAMPLES:
36
+ # Create product
37
+ ecomcoder product create --title="Premium Hair Serum" --price=29.99 --sku="HAIR-001"
38
+
32
39
  # Get product details
33
40
  ecomcoder product get --title="Blue T-Shirt"
34
41
  ecomcoder product get --id=123456789
35
42
 
43
+ # Get metafield value
44
+ ecomcoder product get-metafield --id=123 --namespace=bundles --key=products
45
+
46
+ # Set metafield (AI bundle automation)
47
+ ecomcoder product set-metafield --id=123 --namespace=bundles --key=products \\
48
+ --value='["gid://shopify/Product/456","gid://shopify/Product/789"]' \\
49
+ --type=list.product_reference
50
+
36
51
  # Update title
37
52
  ecomcoder product update-title --id=123 --title="Premium Cotton T-Shirt"
38
53
 
@@ -42,6 +57,9 @@ EXAMPLES:
42
57
  # Update price
43
58
  ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99
44
59
 
60
+ # Update status
61
+ ecomcoder product update-status --id=123 --status=ACTIVE
62
+
45
63
  # Change template
46
64
  ecomcoder product update-template --id=123 --template=premium
47
65
 
@@ -57,12 +75,30 @@ For detailed help on a specific subcommand:
57
75
  }
58
76
  });
59
77
  // Register individual subcommands
78
+ registry.register({
79
+ command: 'product',
80
+ subcommand: 'create',
81
+ description: 'Create a new product from scratch',
82
+ handler: async () => await import('./create.js')
83
+ });
60
84
  registry.register({
61
85
  command: 'product',
62
86
  subcommand: 'get',
63
87
  description: 'Get product details by ID, title, or handle',
64
88
  handler: async () => await import('./get.js')
65
89
  });
90
+ registry.register({
91
+ command: 'product',
92
+ subcommand: 'get-metafield',
93
+ description: 'View product metafield values',
94
+ handler: async () => await import('./get-metafield.js')
95
+ });
96
+ registry.register({
97
+ command: 'product',
98
+ subcommand: 'set-metafield',
99
+ description: 'Set or update product metafield values',
100
+ handler: async () => await import('./set-metafield.js')
101
+ });
66
102
  registry.register({
67
103
  command: 'product',
68
104
  subcommand: 'update-title',
@@ -81,6 +117,12 @@ For detailed help on a specific subcommand:
81
117
  description: 'Update product price and compare-at price',
82
118
  handler: async () => await import('./update-price.js')
83
119
  });
120
+ registry.register({
121
+ command: 'product',
122
+ subcommand: 'update-status',
123
+ description: 'Update product status (ACTIVE, DRAFT, ARCHIVED, UNLISTED)',
124
+ handler: async () => await import('./update-status.js')
125
+ });
84
126
  registry.register({
85
127
  command: 'product',
86
128
  subcommand: 'update-template',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCjB,CAAC,CAAC;QACC,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,oBAAoB;QAChC,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC;KAC7D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,2CAA2C;QACxD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;KAC1D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;KAC1D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,23 @@ export declare const PRODUCT_VARIANTS_BULK_DELETE = "\n mutation productVariant
39
39
  * Maximum 2,048 variants per product
40
40
  */
41
41
  export declare const PRODUCT_VARIANTS_BULK_CREATE = "\n mutation productVariantsBulkCreate($productId: ID!, $variants: [ProductVariantsBulkInput!]!) {\n productVariantsBulkCreate(productId: $productId, variants: $variants) {\n productVariants {\n id\n title\n sku\n price\n compareAtPrice\n inventoryQuantity\n }\n userErrors {\n field\n message\n }\n }\n }\n";
42
+ /**
43
+ * Get specific product metafield by namespace and key
44
+ */
45
+ export declare const GET_PRODUCT_METAFIELD = "\n query getProductMetafield($id: ID!, $namespace: String!, $key: String!) {\n product(id: $id) {\n id\n metafield(namespace: $namespace, key: $key) {\n id\n namespace\n key\n value\n type\n createdAt\n updatedAt\n }\n }\n }\n";
46
+ /**
47
+ * Get product metafields (multiple)
48
+ * Used for querying all metafields or by namespace
49
+ */
50
+ export declare const GET_PRODUCT_METAFIELDS = "\n query getProductMetafields($id: ID!, $namespace: String, $first: Int) {\n product(id: $id) {\n id\n metafields(namespace: $namespace, first: $first) {\n edges {\n node {\n id\n namespace\n key\n value\n type\n createdAt\n updatedAt\n }\n }\n }\n }\n }\n";
51
+ /**
52
+ * Set metafield values for a product
53
+ * Maximum 25 metafields per request, atomic operation
54
+ */
55
+ export declare const METAFIELDS_SET = "\n mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {\n metafieldsSet(metafields: $metafields) {\n metafields {\n id\n namespace\n key\n value\n type\n createdAt\n updatedAt\n }\n userErrors {\n field\n message\n code\n }\n }\n }\n";
56
+ /**
57
+ * Create a new product from scratch
58
+ * Creates product with 1 initial variant
59
+ */
60
+ export declare const PRODUCT_CREATE = "\n mutation productCreate($input: ProductInput!) {\n productCreate(input: $input) {\n product {\n id\n title\n description\n descriptionHtml\n handle\n status\n productType\n vendor\n tags\n templateSuffix\n options {\n id\n name\n position\n values\n }\n variants(first: 10) {\n edges {\n node {\n id\n title\n sku\n price\n compareAtPrice\n inventoryQuantity\n availableForSale\n }\n }\n }\n priceRangeV2 {\n minVariantPrice {\n amount\n currencyCode\n }\n maxVariantPrice {\n amount\n currencyCode\n }\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
42
61
  //# 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"}
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,q8BAkD1B,CAAC"}