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.
- package/README.md +0 -23
- package/dist/cli.js +16 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/product/create.d.ts +8 -0
- package/dist/commands/product/create.d.ts.map +1 -0
- package/dist/commands/product/create.js +166 -0
- package/dist/commands/product/create.js.map +1 -0
- package/dist/commands/product/get-metafield.d.ts +8 -0
- package/dist/commands/product/get-metafield.d.ts.map +1 -0
- package/dist/commands/product/get-metafield.js +131 -0
- package/dist/commands/product/get-metafield.js.map +1 -0
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +42 -0
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/product/queries.d.ts +19 -0
- package/dist/commands/product/queries.d.ts.map +1 -1
- package/dist/commands/product/queries.js +122 -0
- package/dist/commands/product/queries.js.map +1 -1
- package/dist/commands/product/service.d.ts +35 -1
- package/dist/commands/product/service.d.ts.map +1 -1
- package/dist/commands/product/service.js +241 -1
- package/dist/commands/product/service.js.map +1 -1
- package/dist/commands/product/set-metafield.d.ts +8 -0
- package/dist/commands/product/set-metafield.d.ts.map +1 -0
- package/dist/commands/product/set-metafield.js +174 -0
- package/dist/commands/product/set-metafield.js.map +1 -0
- package/dist/commands/product/types.d.ts +88 -0
- package/dist/commands/product/types.d.ts.map +1 -1
- package/dist/commands/product/update-status.d.ts +8 -0
- package/dist/commands/product/update-status.d.ts.map +1 -0
- package/dist/commands/product/update-status.js +105 -0
- package/dist/commands/product/update-status.js.map +1 -0
- package/dist/commands/products/index.d.ts.map +1 -1
- package/dist/commands/products/index.js +0 -10
- package/dist/commands/products/index.js.map +1 -1
- package/dist/commands/shop/get-metafield.d.ts +8 -0
- package/dist/commands/shop/get-metafield.d.ts.map +1 -0
- package/dist/commands/shop/get-metafield.js +117 -0
- package/dist/commands/shop/get-metafield.js.map +1 -0
- package/dist/commands/shop/index.d.ts +10 -0
- package/dist/commands/shop/index.d.ts.map +1 -0
- package/dist/commands/shop/index.js +61 -0
- package/dist/commands/shop/index.js.map +1 -0
- package/dist/commands/shop/queries.d.ts +24 -0
- package/dist/commands/shop/queries.d.ts.map +1 -0
- package/dist/commands/shop/queries.js +83 -0
- package/dist/commands/shop/queries.js.map +1 -0
- package/dist/commands/shop/service.d.ts +30 -0
- package/dist/commands/shop/service.d.ts.map +1 -0
- package/dist/commands/shop/service.js +131 -0
- package/dist/commands/shop/service.js.map +1 -0
- package/dist/commands/shop/set-metafield.d.ts +8 -0
- package/dist/commands/shop/set-metafield.d.ts.map +1 -0
- package/dist/commands/shop/set-metafield.js +174 -0
- package/dist/commands/shop/set-metafield.js.map +1 -0
- package/dist/commands/shop/types.d.ts +84 -0
- package/dist/commands/shop/types.d.ts.map +1 -0
- package/dist/commands/shop/types.js +6 -0
- package/dist/commands/shop/types.js.map +1 -0
- 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
|
-
|
|
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
|
-
#
|
|
73
|
-
ecomcoder
|
|
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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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,
|
|
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
|
|
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"}
|