ecomcoder-cli 1.3.11 → 1.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/commands/asset/delete.d.ts.map +1 -1
- package/dist/commands/asset/delete.js +14 -0
- package/dist/commands/asset/delete.js.map +1 -1
- package/dist/commands/asset/import.d.ts.map +1 -1
- package/dist/commands/asset/import.js +14 -0
- package/dist/commands/asset/import.js.map +1 -1
- package/dist/commands/asset/upload.d.ts.map +1 -1
- package/dist/commands/asset/upload.js +14 -0
- package/dist/commands/asset/upload.js.map +1 -1
- package/dist/commands/create-dummy-products.d.ts.map +1 -1
- package/dist/commands/create-dummy-products.js +14 -0
- package/dist/commands/create-dummy-products.js.map +1 -1
- package/dist/commands/create-metafield.d.ts.map +1 -1
- package/dist/commands/create-metafield.js +14 -0
- package/dist/commands/create-metafield.js.map +1 -1
- package/dist/commands/discount/create-basic.d.ts.map +1 -1
- package/dist/commands/discount/create-basic.js +14 -0
- package/dist/commands/discount/create-basic.js.map +1 -1
- package/dist/commands/discount/create-bxgy.d.ts.map +1 -1
- package/dist/commands/discount/create-bxgy.js +14 -0
- package/dist/commands/discount/create-bxgy.js.map +1 -1
- package/dist/commands/discount/create-shipping.d.ts.map +1 -1
- package/dist/commands/discount/create-shipping.js +14 -0
- package/dist/commands/discount/create-shipping.js.map +1 -1
- package/dist/commands/discount/delete.d.ts.map +1 -1
- package/dist/commands/discount/delete.js +14 -0
- package/dist/commands/discount/delete.js.map +1 -1
- package/dist/commands/product/add-options.d.ts.map +1 -1
- package/dist/commands/product/add-options.js +14 -0
- package/dist/commands/product/add-options.js.map +1 -1
- package/dist/commands/product/add-tags.d.ts +9 -0
- package/dist/commands/product/add-tags.d.ts.map +1 -0
- package/dist/commands/product/add-tags.js +93 -0
- package/dist/commands/product/add-tags.js.map +1 -0
- package/dist/commands/product/create-variants.d.ts.map +1 -1
- package/dist/commands/product/create-variants.js +14 -0
- package/dist/commands/product/create-variants.js.map +1 -1
- package/dist/commands/product/create.d.ts.map +1 -1
- package/dist/commands/product/create.js +92 -4
- package/dist/commands/product/create.js.map +1 -1
- package/dist/commands/product/delete-variants.d.ts.map +1 -1
- package/dist/commands/product/delete-variants.js +14 -0
- package/dist/commands/product/delete-variants.js.map +1 -1
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +32 -0
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/product/queries.d.ts +23 -0
- package/dist/commands/product/queries.d.ts.map +1 -1
- package/dist/commands/product/queries.js +80 -0
- package/dist/commands/product/queries.js.map +1 -1
- package/dist/commands/product/remove-tags.d.ts +9 -0
- package/dist/commands/product/remove-tags.d.ts.map +1 -0
- package/dist/commands/product/remove-tags.js +108 -0
- package/dist/commands/product/remove-tags.js.map +1 -0
- package/dist/commands/product/service.d.ts +81 -2
- package/dist/commands/product/service.d.ts.map +1 -1
- package/dist/commands/product/service.js +291 -13
- package/dist/commands/product/service.js.map +1 -1
- package/dist/commands/product/set-metafield.d.ts.map +1 -1
- package/dist/commands/product/set-metafield.js +14 -0
- package/dist/commands/product/set-metafield.js.map +1 -1
- package/dist/commands/product/set-tags.d.ts +9 -0
- package/dist/commands/product/set-tags.d.ts.map +1 -0
- package/dist/commands/product/set-tags.js +107 -0
- package/dist/commands/product/set-tags.js.map +1 -0
- package/dist/commands/product/types.d.ts +58 -0
- package/dist/commands/product/types.d.ts.map +1 -1
- package/dist/commands/product/update-description.d.ts.map +1 -1
- package/dist/commands/product/update-description.js +14 -0
- package/dist/commands/product/update-description.js.map +1 -1
- package/dist/commands/product/update-images.d.ts +8 -0
- package/dist/commands/product/update-images.d.ts.map +1 -0
- package/dist/commands/product/update-images.js +191 -0
- package/dist/commands/product/update-images.js.map +1 -0
- package/dist/commands/product/update-options.d.ts.map +1 -1
- package/dist/commands/product/update-options.js +14 -0
- package/dist/commands/product/update-options.js.map +1 -1
- package/dist/commands/product/update-price.d.ts.map +1 -1
- package/dist/commands/product/update-price.js +14 -0
- package/dist/commands/product/update-price.js.map +1 -1
- package/dist/commands/product/update-status.d.ts.map +1 -1
- package/dist/commands/product/update-status.js +14 -0
- package/dist/commands/product/update-status.js.map +1 -1
- package/dist/commands/product/update-template.d.ts.map +1 -1
- package/dist/commands/product/update-template.js +14 -0
- package/dist/commands/product/update-template.js.map +1 -1
- package/dist/commands/product/update-title.d.ts.map +1 -1
- package/dist/commands/product/update-title.js +14 -0
- package/dist/commands/product/update-title.js.map +1 -1
- package/dist/commands/set-product-rating.d.ts.map +1 -1
- package/dist/commands/set-product-rating.js +14 -0
- package/dist/commands/set-product-rating.js.map +1 -1
- package/dist/commands/shop/set-metafield.d.ts.map +1 -1
- package/dist/commands/shop/set-metafield.js +14 -0
- package/dist/commands/shop/set-metafield.js.map +1 -1
- package/dist/lib/approval.d.ts +28 -0
- package/dist/lib/approval.d.ts.map +1 -0
- package/dist/lib/approval.js +38 -0
- package/dist/lib/approval.js.map +1 -0
- package/dist/lib/image-library.d.ts +65 -0
- package/dist/lib/image-library.d.ts.map +1 -0
- package/dist/lib/image-library.js +143 -0
- package/dist/lib/image-library.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Product Images 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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
11
|
+
function showHelp() {
|
|
12
|
+
console.log(`
|
|
13
|
+
Update Product Images
|
|
14
|
+
|
|
15
|
+
Add smart, context-aware images to your products. Images are automatically
|
|
16
|
+
selected based on your product title, or you can provide custom URLs.
|
|
17
|
+
|
|
18
|
+
USAGE:
|
|
19
|
+
ecomcoder product update-images [OPTIONS]
|
|
20
|
+
|
|
21
|
+
REQUIRED:
|
|
22
|
+
--id <id> Product ID (numeric or GID format)
|
|
23
|
+
|
|
24
|
+
OPTIONS (at least one required):
|
|
25
|
+
--images <json> JSON array of image URLs or objects with url/alt
|
|
26
|
+
--search <query> Search Pexels for specific images (e.g., "organic skincare")
|
|
27
|
+
--random <count> Generate N random placeholder images (default: 6)
|
|
28
|
+
--source <source> Image source: 'pexels' or 'picsum' (default: pexels)
|
|
29
|
+
--session-id Session ID (auto-provided via SESSION_ID env var)
|
|
30
|
+
--help, -h Show this help message
|
|
31
|
+
|
|
32
|
+
EXAMPLES:
|
|
33
|
+
# Add images from custom URLs
|
|
34
|
+
ecomcoder product update-images --id=123 \\
|
|
35
|
+
--images='["https://example.com/1.jpg","https://example.com/2.jpg"]'
|
|
36
|
+
|
|
37
|
+
# Add images with alt text
|
|
38
|
+
ecomcoder product update-images --id=123 \\
|
|
39
|
+
--images='[{"url":"https://example.com/1.jpg","alt":"Front view"}]'
|
|
40
|
+
|
|
41
|
+
# Search Pexels for specific images
|
|
42
|
+
ecomcoder product update-images --id=123 --search="organic skincare"
|
|
43
|
+
|
|
44
|
+
# Generate 5 random placeholder images
|
|
45
|
+
ecomcoder product update-images --id=123 --random=5
|
|
46
|
+
|
|
47
|
+
# Use Lorem Picsum instead of Pexels
|
|
48
|
+
ecomcoder product update-images --id=123 --random=6 --source=picsum
|
|
49
|
+
|
|
50
|
+
SMART IMAGE SELECTION:
|
|
51
|
+
When using --search, the CLI searches Pexels for relevant, high-quality
|
|
52
|
+
stock photos. This gives your products professional imagery that matches
|
|
53
|
+
the product type.
|
|
54
|
+
|
|
55
|
+
Example: Searching for "hair serum" returns actual skincare product images
|
|
56
|
+
instead of random placeholders.
|
|
57
|
+
|
|
58
|
+
IMPORTANT NOTES:
|
|
59
|
+
⚠️ Adding Images: This command ADDS new images to the product.
|
|
60
|
+
It does not replace existing images. To replace all images:
|
|
61
|
+
1. Delete old images manually in Shopify Admin
|
|
62
|
+
2. Run this command to add new images
|
|
63
|
+
|
|
64
|
+
ℹ️ Image Sources:
|
|
65
|
+
- pexels: High-quality stock photos (requires PEXELS_API_KEY env var)
|
|
66
|
+
Falls back to Lorem Picsum if API key not set
|
|
67
|
+
- picsum: Lorem Picsum placeholders (no API key required)
|
|
68
|
+
|
|
69
|
+
ℹ️ Async Upload: Shopify processes image uploads asynchronously.
|
|
70
|
+
Images may take a few seconds to appear in your store.
|
|
71
|
+
|
|
72
|
+
ℹ️ Get Pexels API Key: https://www.pexels.com/api/ (free, 200/hour limit)
|
|
73
|
+
Set environment variable: export PEXELS_API_KEY=your-key-here
|
|
74
|
+
`);
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
78
|
+
if (hasHelpFlag(argv)) {
|
|
79
|
+
showHelp();
|
|
80
|
+
}
|
|
81
|
+
const args = parseArgs(argv);
|
|
82
|
+
// Validate required argument
|
|
83
|
+
if (!args.id) {
|
|
84
|
+
console.error(JSON.stringify({
|
|
85
|
+
success: false,
|
|
86
|
+
error: 'Missing required argument: --id'
|
|
87
|
+
}));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
// Validate that at least one image source is provided
|
|
91
|
+
if (!args.images && !args.search && !args.random) {
|
|
92
|
+
console.error(JSON.stringify({
|
|
93
|
+
success: false,
|
|
94
|
+
error: 'At least one of --images, --search, or --random must be provided'
|
|
95
|
+
}));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
// Parse images if provided
|
|
99
|
+
let parsedImages;
|
|
100
|
+
if (args.images) {
|
|
101
|
+
try {
|
|
102
|
+
parsedImages = JSON.parse(args.images);
|
|
103
|
+
if (!Array.isArray(parsedImages)) {
|
|
104
|
+
throw new Error('--images must be a JSON array');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error(JSON.stringify({
|
|
109
|
+
success: false,
|
|
110
|
+
error: `Invalid --images format: ${error.message}. Expected JSON array.`
|
|
111
|
+
}));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Validate source if provided
|
|
116
|
+
if (args.source && !['picsum', 'pexels'].includes(args.source)) {
|
|
117
|
+
console.error(JSON.stringify({
|
|
118
|
+
success: false,
|
|
119
|
+
error: 'Invalid --source. Must be "picsum" or "pexels"'
|
|
120
|
+
}));
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
// Validate random count if provided
|
|
124
|
+
if (args.random) {
|
|
125
|
+
const count = parseInt(args.random);
|
|
126
|
+
if (isNaN(count) || count < 1 || count > 50) {
|
|
127
|
+
console.error(JSON.stringify({
|
|
128
|
+
success: false,
|
|
129
|
+
error: 'Invalid --random value. Must be a number between 1 and 50'
|
|
130
|
+
}));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
// Get credentials
|
|
136
|
+
const sessionId = getSessionId(args.sessionId);
|
|
137
|
+
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
138
|
+
// Request approval
|
|
139
|
+
const operationDesc = args.images
|
|
140
|
+
? `add custom images`
|
|
141
|
+
: args.search
|
|
142
|
+
? `add images for "${args.search}"`
|
|
143
|
+
: `add ${args.random || 6} random images`;
|
|
144
|
+
const approved = await requestApproval({
|
|
145
|
+
command: `ecomcoder product update-images --id=${args.id}`,
|
|
146
|
+
message: `This will ${operationDesc} to product ${args.id}`,
|
|
147
|
+
riskLevel: 'moderate'
|
|
148
|
+
});
|
|
149
|
+
if (!approved) {
|
|
150
|
+
console.log(JSON.stringify({
|
|
151
|
+
success: false,
|
|
152
|
+
error: 'Operation cancelled by user'
|
|
153
|
+
}));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
// Build input for service
|
|
157
|
+
const input = {
|
|
158
|
+
id: args.id
|
|
159
|
+
};
|
|
160
|
+
if (parsedImages) {
|
|
161
|
+
input.images = parsedImages;
|
|
162
|
+
}
|
|
163
|
+
if (args.search) {
|
|
164
|
+
input.search = args.search;
|
|
165
|
+
}
|
|
166
|
+
if (args.random) {
|
|
167
|
+
input.random = parseInt(args.random);
|
|
168
|
+
}
|
|
169
|
+
if (args.source) {
|
|
170
|
+
input.source = args.source;
|
|
171
|
+
}
|
|
172
|
+
// Execute update via service
|
|
173
|
+
const result = await ProductService.updateImages(credentials, input);
|
|
174
|
+
// Output result
|
|
175
|
+
console.log(JSON.stringify(result, null, 2));
|
|
176
|
+
if (result.success) {
|
|
177
|
+
console.error(`\n✅ ${result.data?.imagesAdded || 0} image(s) added to product. Images upload asynchronously and may take a few seconds to appear.\n`);
|
|
178
|
+
}
|
|
179
|
+
if (!result.success) {
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error(JSON.stringify({
|
|
185
|
+
success: false,
|
|
186
|
+
error: error.message || 'Unknown error occurred'
|
|
187
|
+
}));
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=update-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-images.js","sourceRoot":"","sources":["../../../src/commands/product/update-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-options.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update-options.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsFH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA2K/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Update Product Options
|
|
@@ -207,6 +208,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
207
208
|
// Get credentials
|
|
208
209
|
const sessionId = getSessionId(args.sessionId);
|
|
209
210
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
211
|
+
// Request approval before executing
|
|
212
|
+
const approved = await requestApproval({
|
|
213
|
+
command: `ecomcoder product update-options --id=${args.id} --option-id=${args.optionId}`,
|
|
214
|
+
message: `This will update product options on your live Shopify store`,
|
|
215
|
+
riskLevel: 'moderate'
|
|
216
|
+
});
|
|
217
|
+
if (!approved) {
|
|
218
|
+
console.log(JSON.stringify({
|
|
219
|
+
success: false,
|
|
220
|
+
error: 'Operation cancelled by user'
|
|
221
|
+
}));
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
210
224
|
// Execute via service
|
|
211
225
|
const result = await ProductService.updateOption(credentials, {
|
|
212
226
|
id: args.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-options.js","sourceRoot":"","sources":["../../../src/commands/product/update-options.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;
|
|
1
|
+
{"version":3,"file":"update-options.js","sourceRoot":"","sources":["../../../src/commands/product/update-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-price.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-price.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update-price.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-price.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAmE/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Update Product Price
|
|
@@ -76,6 +77,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
76
77
|
// Get credentials
|
|
77
78
|
const sessionId = getSessionId(args.sessionId);
|
|
78
79
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
80
|
+
// Request approval before executing
|
|
81
|
+
const approved = await requestApproval({
|
|
82
|
+
command: `ecomcoder product update-price --id=${args.id} --price=${args.price}`,
|
|
83
|
+
message: `This will update product pricing on your live Shopify store. This affects real customer purchases.`,
|
|
84
|
+
riskLevel: 'high'
|
|
85
|
+
});
|
|
86
|
+
if (!approved) {
|
|
87
|
+
console.log(JSON.stringify({
|
|
88
|
+
success: false,
|
|
89
|
+
error: 'Operation cancelled by user'
|
|
90
|
+
}));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
79
93
|
// Execute update via service
|
|
80
94
|
const result = await ProductService.updatePrice(credentials, {
|
|
81
95
|
id: args.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-price.js","sourceRoot":"","sources":["../../../src/commands/product/update-price.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;
|
|
1
|
+
{"version":3,"file":"update-price.js","sourceRoot":"","sources":["../../../src/commands/product/update-price.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-status.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update-status.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkDH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA2E/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Update Product Status
|
|
@@ -83,6 +84,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
83
84
|
// Get credentials
|
|
84
85
|
const sessionId = getSessionId(args.sessionId);
|
|
85
86
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
87
|
+
// Request approval before executing
|
|
88
|
+
const approved = await requestApproval({
|
|
89
|
+
command: `ecomcoder product update-status --id=${args.id} --status=${statusUpper}`,
|
|
90
|
+
message: `This will change product status to ${statusUpper} on your live Shopify store`,
|
|
91
|
+
riskLevel: 'moderate'
|
|
92
|
+
});
|
|
93
|
+
if (!approved) {
|
|
94
|
+
console.log(JSON.stringify({
|
|
95
|
+
success: false,
|
|
96
|
+
error: 'Operation cancelled by user'
|
|
97
|
+
}));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
86
100
|
// Execute update via service
|
|
87
101
|
const result = await ProductService.updateStatus(credentials, {
|
|
88
102
|
id: args.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-status.js","sourceRoot":"","sources":["../../../src/commands/product/update-status.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;
|
|
1
|
+
{"version":3,"file":"update-status.js","sourceRoot":"","sources":["../../../src/commands/product/update-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-template.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-template.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update-template.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-template.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuDH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAiF/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Update Product Template Assignment
|
|
@@ -77,6 +78,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
77
78
|
// Get credentials
|
|
78
79
|
const sessionId = getSessionId(args.sessionId);
|
|
79
80
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
81
|
+
// Request approval before executing
|
|
82
|
+
const approved = await requestApproval({
|
|
83
|
+
command: `ecomcoder product update-template --id=${args.id} --template=${args.template}`,
|
|
84
|
+
message: `This will change the product template on your live Shopify store`,
|
|
85
|
+
riskLevel: 'moderate'
|
|
86
|
+
});
|
|
87
|
+
if (!approved) {
|
|
88
|
+
console.log(JSON.stringify({
|
|
89
|
+
success: false,
|
|
90
|
+
error: 'Operation cancelled by user'
|
|
91
|
+
}));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
80
94
|
// Execute update via service
|
|
81
95
|
const result = await ProductService.updateTemplate(credentials, {
|
|
82
96
|
id: args.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-template.js","sourceRoot":"","sources":["../../../src/commands/product/update-template.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;
|
|
1
|
+
{"version":3,"file":"update-template.js","sourceRoot":"","sources":["../../../src/commands/product/update-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-title.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-title.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update-title.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-title.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyCH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAwE/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
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
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Update Product Title
|
|
@@ -72,6 +73,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
72
73
|
// Get credentials
|
|
73
74
|
const sessionId = getSessionId(args.sessionId);
|
|
74
75
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
76
|
+
// Request approval before executing
|
|
77
|
+
const approved = await requestApproval({
|
|
78
|
+
command: `ecomcoder product update-title --id=${args.id}`,
|
|
79
|
+
message: `This will update the product title on your live Shopify store`,
|
|
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
|
+
}
|
|
75
89
|
// Execute update via service
|
|
76
90
|
const result = await ProductService.updateTitle(credentials, {
|
|
77
91
|
id: args.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-title.js","sourceRoot":"","sources":["../../../src/commands/product/update-title.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;
|
|
1
|
+
{"version":3,"file":"update-title.js","sourceRoot":"","sources":["../../../src/commands/product/update-title.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-product-rating.d.ts","sourceRoot":"","sources":["../../src/commands/set-product-rating.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"set-product-rating.d.ts","sourceRoot":"","sources":["../../src/commands/set-product-rating.ts"],"names":[],"mappings":"AA2BA,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA4G/D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getCredentials, getSessionId } from '../lib/api-client.js';
|
|
2
2
|
import { shopifyGraphQL } from '../lib/shopify-client.js';
|
|
3
3
|
import { parseArgs, hasHelpFlag } from '../lib/args-parser.js';
|
|
4
|
+
import { requestApproval } from '../lib/approval.js';
|
|
4
5
|
function showHelp() {
|
|
5
6
|
console.log(`
|
|
6
7
|
Set Product Rating Metafields
|
|
@@ -46,6 +47,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
46
47
|
try {
|
|
47
48
|
const sessionId = getSessionId(args.sessionId);
|
|
48
49
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
50
|
+
// Request approval before executing
|
|
51
|
+
const approved = await requestApproval({
|
|
52
|
+
command: `ecomcoder products set-rating --product-id=${args.productId} --rating=${rating}`,
|
|
53
|
+
message: `This will set product rating metafields on your live Shopify store`,
|
|
54
|
+
riskLevel: 'moderate'
|
|
55
|
+
});
|
|
56
|
+
if (!approved) {
|
|
57
|
+
console.log(JSON.stringify({
|
|
58
|
+
success: false,
|
|
59
|
+
error: 'Operation cancelled by user'
|
|
60
|
+
}));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
49
63
|
const result = await shopifyGraphQL(credentials, `
|
|
50
64
|
mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
|
|
51
65
|
metafieldsSet(metafields: $metafields) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-product-rating.js","sourceRoot":"","sources":["../../src/commands/set-product-rating.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"set-product-rating.js","sourceRoot":"","sources":["../../src/commands/set-product-rating.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-metafield.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/set-metafield.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"set-metafield.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/set-metafield.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoIH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA4D/D"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { getCredentials, getSessionId } from '../../lib/api-client.js';
|
|
8
8
|
import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
|
|
9
9
|
import { ShopService } from './service.js';
|
|
10
|
+
import { requestApproval } from '../../lib/approval.js';
|
|
10
11
|
function showHelp() {
|
|
11
12
|
console.log(`
|
|
12
13
|
Set Shop Metafield
|
|
@@ -150,6 +151,19 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
150
151
|
// Get credentials
|
|
151
152
|
const sessionId = getSessionId(args.sessionId);
|
|
152
153
|
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
154
|
+
// Request approval before executing
|
|
155
|
+
const approved = await requestApproval({
|
|
156
|
+
command: `ecomcoder shop set-metafield --namespace=${args.namespace} --key=${args.key}`,
|
|
157
|
+
message: `This will set a global shop-level metafield on your live Shopify store`,
|
|
158
|
+
riskLevel: 'moderate'
|
|
159
|
+
});
|
|
160
|
+
if (!approved) {
|
|
161
|
+
console.log(JSON.stringify({
|
|
162
|
+
success: false,
|
|
163
|
+
error: 'Operation cancelled by user'
|
|
164
|
+
}));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
153
167
|
// Execute set metafield via service
|
|
154
168
|
const result = await ShopService.setMetafield(credentials, {
|
|
155
169
|
namespace: args.namespace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-metafield.js","sourceRoot":"","sources":["../../../src/commands/shop/set-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,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"set-metafield.js","sourceRoot":"","sources":["../../../src/commands/shop/set-metafield.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Approval Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles approval protocol for destructive commands
|
|
5
|
+
* Communicates with ecomcoder-app via stdout/stdin
|
|
6
|
+
*/
|
|
7
|
+
export interface ApprovalRequest {
|
|
8
|
+
command: string;
|
|
9
|
+
message: string;
|
|
10
|
+
riskLevel: 'moderate' | 'high';
|
|
11
|
+
}
|
|
12
|
+
export interface ApprovalResponse {
|
|
13
|
+
approved: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Request approval from user (via ecomcoder-app)
|
|
18
|
+
*
|
|
19
|
+
* Protocol:
|
|
20
|
+
* 1. Check if APPROVAL_GRANTED=true env var is set
|
|
21
|
+
* 2. If set, return true (approved)
|
|
22
|
+
* 3. If not set, output APPROVAL_REQUIRED JSON and exit
|
|
23
|
+
*
|
|
24
|
+
* @param request - Approval request details
|
|
25
|
+
* @returns true if approved (only returns if pre-approved via env var)
|
|
26
|
+
*/
|
|
27
|
+
export declare function requestApproval(request: ApprovalRequest): Promise<boolean>;
|
|
28
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBhF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Approval Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles approval protocol for destructive commands
|
|
5
|
+
* Communicates with ecomcoder-app via stdout/stdin
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Request approval from user (via ecomcoder-app)
|
|
10
|
+
*
|
|
11
|
+
* Protocol:
|
|
12
|
+
* 1. Check if APPROVAL_GRANTED=true env var is set
|
|
13
|
+
* 2. If set, return true (approved)
|
|
14
|
+
* 3. If not set, output APPROVAL_REQUIRED JSON and exit
|
|
15
|
+
*
|
|
16
|
+
* @param request - Approval request details
|
|
17
|
+
* @returns true if approved (only returns if pre-approved via env var)
|
|
18
|
+
*/
|
|
19
|
+
export async function requestApproval(request) {
|
|
20
|
+
// Check if approval was pre-granted via environment variable
|
|
21
|
+
if (process.env.APPROVAL_GRANTED === 'true') {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
const approvalId = randomUUID();
|
|
25
|
+
// Output approval request JSON to stdout
|
|
26
|
+
const approvalRequest = {
|
|
27
|
+
type: 'APPROVAL_REQUIRED',
|
|
28
|
+
command: request.command,
|
|
29
|
+
message: request.message,
|
|
30
|
+
riskLevel: request.riskLevel,
|
|
31
|
+
approvalId,
|
|
32
|
+
timestamp: new Date().toISOString()
|
|
33
|
+
};
|
|
34
|
+
console.log(JSON.stringify(approvalRequest));
|
|
35
|
+
// Exit immediately - ecomcoder-app will re-run with APPROVAL_GRANTED=true if approved
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAapC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,6DAA6D;IAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAEhC,yCAAyC;IACzC,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAE7C,sFAAsF;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|