ecomcoder-cli 1.3.12 → 1.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/commands/product/add-tags.d.ts +9 -0
  2. package/dist/commands/product/add-tags.d.ts.map +1 -0
  3. package/dist/commands/product/add-tags.js +93 -0
  4. package/dist/commands/product/add-tags.js.map +1 -0
  5. package/dist/commands/product/create.d.ts.map +1 -1
  6. package/dist/commands/product/create.js +78 -4
  7. package/dist/commands/product/create.js.map +1 -1
  8. package/dist/commands/product/index.d.ts.map +1 -1
  9. package/dist/commands/product/index.js +32 -0
  10. package/dist/commands/product/index.js.map +1 -1
  11. package/dist/commands/product/queries.d.ts +23 -0
  12. package/dist/commands/product/queries.d.ts.map +1 -1
  13. package/dist/commands/product/queries.js +80 -0
  14. package/dist/commands/product/queries.js.map +1 -1
  15. package/dist/commands/product/remove-tags.d.ts +9 -0
  16. package/dist/commands/product/remove-tags.d.ts.map +1 -0
  17. package/dist/commands/product/remove-tags.js +108 -0
  18. package/dist/commands/product/remove-tags.js.map +1 -0
  19. package/dist/commands/product/service.d.ts +81 -2
  20. package/dist/commands/product/service.d.ts.map +1 -1
  21. package/dist/commands/product/service.js +291 -13
  22. package/dist/commands/product/service.js.map +1 -1
  23. package/dist/commands/product/set-tags.d.ts +9 -0
  24. package/dist/commands/product/set-tags.d.ts.map +1 -0
  25. package/dist/commands/product/set-tags.js +107 -0
  26. package/dist/commands/product/set-tags.js.map +1 -0
  27. package/dist/commands/product/types.d.ts +58 -0
  28. package/dist/commands/product/types.d.ts.map +1 -1
  29. package/dist/commands/product/update-images.d.ts +8 -0
  30. package/dist/commands/product/update-images.d.ts.map +1 -0
  31. package/dist/commands/product/update-images.js +191 -0
  32. package/dist/commands/product/update-images.js.map +1 -0
  33. package/dist/lib/image-library.d.ts +65 -0
  34. package/dist/lib/image-library.d.ts.map +1 -0
  35. package/dist/lib/image-library.js +143 -0
  36. package/dist/lib/image-library.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Set/Replace Product Tags Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ProductService
6
+ * DESTRUCTIVE - Requires approval flow
7
+ */
8
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
9
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
10
+ import { ProductService } from './service.js';
11
+ import { requestApproval } from '../../lib/approval.js';
12
+ function showHelp() {
13
+ console.log(`
14
+ Set/Replace Product Tags
15
+
16
+ USAGE:
17
+ ecomcoder product set-tags --id=<id> --tags=<tag1,tag2,tag3>
18
+
19
+ REQUIRED OPTIONS:
20
+ --id <id> Product ID (numeric or GID)
21
+ --tags <tags> Comma-separated tags (replaces ALL existing tags)
22
+
23
+ EXAMPLES:
24
+ # Replace all tags
25
+ ecomcoder product set-tags --id=123 --tags="summer,sale,featured"
26
+
27
+ # Remove all tags (set to empty)
28
+ ecomcoder product set-tags --id=123 --tags=""
29
+
30
+ # Using GID
31
+ ecomcoder product set-tags --id="gid://shopify/Product/123" --tags="clearance"
32
+
33
+ NOTES:
34
+ - DESTRUCTIVE operation (replaces ALL existing tags)
35
+ - Requires approval before execution
36
+ - Pass empty string ("") to remove all tags
37
+ - Use add-tags for non-destructive tag additions
38
+ - Use remove-tags to selectively remove specific tags
39
+ - Tags are case-sensitive
40
+ `);
41
+ process.exit(0);
42
+ }
43
+ export async function run(argv = process.argv.slice(2)) {
44
+ if (hasHelpFlag(argv)) {
45
+ showHelp();
46
+ }
47
+ const args = parseArgs(argv);
48
+ // Validate required arguments
49
+ if (!args.id) {
50
+ console.error(JSON.stringify({
51
+ success: false,
52
+ error: 'Missing required argument: --id'
53
+ }));
54
+ process.exit(1);
55
+ }
56
+ if (args.tags === undefined) {
57
+ console.error(JSON.stringify({
58
+ success: false,
59
+ error: 'Missing required argument: --tags (use "" to remove all tags)'
60
+ }));
61
+ process.exit(1);
62
+ }
63
+ try {
64
+ // Parse tags from comma-separated string (empty string = remove all)
65
+ const tags = args.tags === ''
66
+ ? []
67
+ : args.tags.split(',').map((tag) => tag.trim()).filter(Boolean);
68
+ // Get credentials
69
+ const sessionId = getSessionId(args.sessionId);
70
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
71
+ // Request approval before executing
72
+ const tagCount = tags.length;
73
+ const message = tagCount === 0
74
+ ? `This will REMOVE ALL tags from your product on the live Shopify store.`
75
+ : `This will REPLACE all existing tags with ${tagCount} new tag(s) on your live Shopify store. All current tags will be removed.`;
76
+ const approved = await requestApproval({
77
+ command: `ecomcoder product set-tags --id=${args.id} --tags=${args.tags}`,
78
+ message,
79
+ riskLevel: 'moderate'
80
+ });
81
+ if (!approved) {
82
+ console.log(JSON.stringify({
83
+ success: false,
84
+ error: 'Operation cancelled by user'
85
+ }));
86
+ process.exit(1);
87
+ }
88
+ // Execute set via service
89
+ const result = await ProductService.setTags(credentials, {
90
+ id: args.id,
91
+ tags
92
+ });
93
+ // Output result
94
+ console.log(JSON.stringify(result, null, 2));
95
+ if (!result.success) {
96
+ process.exit(1);
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.error(JSON.stringify({
101
+ success: false,
102
+ error: error.message || 'Unknown error occurred'
103
+ }));
104
+ process.exit(1);
105
+ }
106
+ }
107
+ //# sourceMappingURL=set-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-tags.js","sourceRoot":"","sources":["../../../src/commands/product/set-tags.ts"],"names":[],"mappings":"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"}
@@ -211,6 +211,16 @@ export interface UpdateOptionInput {
211
211
  deleteValues?: string[];
212
212
  variantStrategy?: 'LEAVE_AS_IS' | 'CREATE';
213
213
  }
214
+ export interface UpdateImagesInput {
215
+ id: string;
216
+ images?: Array<string | {
217
+ url: string;
218
+ alt?: string;
219
+ }>;
220
+ search?: string;
221
+ random?: number;
222
+ source?: 'pexels' | 'picsum';
223
+ }
214
224
  /**
215
225
  * Shopify GraphQL response types
216
226
  */
@@ -221,6 +231,7 @@ export interface ProductUpdateResponse {
221
231
  title: string;
222
232
  description: string;
223
233
  templateSuffix: string | null;
234
+ tags?: string[];
224
235
  };
225
236
  userErrors: ShopifyUserError[];
226
237
  };
@@ -402,4 +413,51 @@ export interface NormalizedId {
402
413
  gid: string;
403
414
  numeric: string;
404
415
  }
416
+ /**
417
+ * Input type for add-tags command
418
+ */
419
+ export interface AddTagsInput {
420
+ id: string;
421
+ tags: string[];
422
+ }
423
+ /**
424
+ * Input type for remove-tags command
425
+ */
426
+ export interface RemoveTagsInput {
427
+ id: string;
428
+ tags: string[];
429
+ }
430
+ /**
431
+ * Input type for set-tags command
432
+ */
433
+ export interface SetTagsInput {
434
+ id: string;
435
+ tags: string[];
436
+ }
437
+ /**
438
+ * Response type for tagsAdd mutation
439
+ */
440
+ export interface TagsAddResponse {
441
+ tagsAdd: {
442
+ node: {
443
+ id: string;
444
+ title: string;
445
+ tags: string[];
446
+ } | null;
447
+ userErrors: ShopifyUserError[];
448
+ };
449
+ }
450
+ /**
451
+ * Response type for tagsRemove mutation
452
+ */
453
+ export interface TagsRemoveResponse {
454
+ tagsRemove: {
455
+ node: {
456
+ id: string;
457
+ title: string;
458
+ tags: string[];
459
+ } | null;
460
+ userErrors: ShopifyUserError[];
461
+ };
462
+ }
405
463
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/product/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/product/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Update Product Images 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=update-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-images.d.ts","sourceRoot":"","sources":["../../../src/commands/product/update-images.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0EH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAkI/D"}
@@ -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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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Image Library Service
3
+ * Provides smart, context-aware images for products
4
+ *
5
+ * Strategy:
6
+ * 1. Extract keywords from product title
7
+ * 2. Search Pexels for relevant images (if API key available)
8
+ * 3. Fallback to Lorem Picsum if Pexels unavailable/fails
9
+ */
10
+ export interface ImageSource {
11
+ url: string;
12
+ alt?: string;
13
+ }
14
+ /**
15
+ * Extract meaningful keywords from product title for image search
16
+ *
17
+ * Examples:
18
+ * - "Premium Hair Serum - Natural Formula" → "hair serum"
19
+ * - "Nike Running Shoes Size 10" → "running shoes"
20
+ * - "Organic Skincare Bundle" → "skincare"
21
+ */
22
+ export declare function extractSearchKeywords(title: string): string;
23
+ /**
24
+ * Generate random placeholder images using Lorem Picsum
25
+ * No API key required, no rate limits
26
+ *
27
+ * @param count Number of images to generate (default: 6)
28
+ * @returns Array of image sources with Lorem Picsum URLs
29
+ */
30
+ export declare function getRandomPlaceholderImages(count?: number): ImageSource[];
31
+ /**
32
+ * Search Pexels for relevant product images based on query
33
+ * Requires PEXELS_API_KEY environment variable
34
+ *
35
+ * @param query Search query (e.g., "hair serum", "running shoes")
36
+ * @param count Number of images to fetch (default: 6, max: 80)
37
+ * @returns Array of high-quality stock photos from Pexels
38
+ */
39
+ export declare function searchPexelsForProduct(query: string, count?: number): Promise<ImageSource[]>;
40
+ /**
41
+ * Get smart, context-aware images for a product
42
+ *
43
+ * This is the main function to use for product image generation.
44
+ * It intelligently selects images based on the product title.
45
+ *
46
+ * Strategy:
47
+ * 1. Extract keywords from product title
48
+ * 2. Search Pexels for relevant images (if API key available)
49
+ * 3. Fallback to Lorem Picsum if needed
50
+ *
51
+ * @param productTitle The product title (e.g., "Premium Hair Serum")
52
+ * @param count Number of images to fetch (default: 6)
53
+ * @param customQuery Optional custom search query (overrides title extraction)
54
+ * @returns Array of context-appropriate images
55
+ *
56
+ * @example
57
+ * // Automatically extracts "hair serum" and searches Pexels
58
+ * const images = await getSmartProductImages("Premium Hair Serum - Natural Formula");
59
+ *
60
+ * @example
61
+ * // Use custom search query
62
+ * const images = await getSmartProductImages("Product Name", 5, "organic skincare");
63
+ */
64
+ export declare function getSmartProductImages(productTitle: string, count?: number, customQuery?: string): Promise<ImageSource[]>;
65
+ //# sourceMappingURL=image-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-library.d.ts","sourceRoot":"","sources":["../../src/lib/image-library.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2B3D;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,MAAU,GAAG,WAAW,EAAE,CAY3E;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAoDxB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,MAAU,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,EAAE,CAAC,CAQxB"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Image Library Service
3
+ * Provides smart, context-aware images for products
4
+ *
5
+ * Strategy:
6
+ * 1. Extract keywords from product title
7
+ * 2. Search Pexels for relevant images (if API key available)
8
+ * 3. Fallback to Lorem Picsum if Pexels unavailable/fails
9
+ */
10
+ /**
11
+ * Extract meaningful keywords from product title for image search
12
+ *
13
+ * Examples:
14
+ * - "Premium Hair Serum - Natural Formula" → "hair serum"
15
+ * - "Nike Running Shoes Size 10" → "running shoes"
16
+ * - "Organic Skincare Bundle" → "skincare"
17
+ */
18
+ export function extractSearchKeywords(title) {
19
+ // Remove common filler words and qualifiers
20
+ const fillerWords = [
21
+ 'premium', 'deluxe', 'professional', 'natural', 'organic',
22
+ 'new', 'best', 'top', 'quality', 'high', 'low',
23
+ 'small', 'medium', 'large', 'xl', 'xxl',
24
+ 'pack', 'set', 'bundle', 'kit', 'collection',
25
+ 'size', 'color', 'variant', 'option'
26
+ ];
27
+ // Remove HTML tags if present
28
+ let cleanTitle = title.replace(/<[^>]*>/g, '');
29
+ // Split by common separators
30
+ cleanTitle = cleanTitle.split(/[-–—:|]/)[0].trim();
31
+ // Convert to lowercase and split into words
32
+ const words = cleanTitle.toLowerCase()
33
+ .replace(/[^\w\s]/g, ' ') // Remove special chars
34
+ .split(/\s+/)
35
+ .filter(word => word.length > 2); // Remove very short words
36
+ // Filter out filler words
37
+ const meaningfulWords = words.filter(word => !fillerWords.includes(word));
38
+ // Return first 2-3 meaningful words for better search results
39
+ return meaningfulWords.slice(0, 3).join(' ') || cleanTitle.toLowerCase();
40
+ }
41
+ /**
42
+ * Generate random placeholder images using Lorem Picsum
43
+ * No API key required, no rate limits
44
+ *
45
+ * @param count Number of images to generate (default: 6)
46
+ * @returns Array of image sources with Lorem Picsum URLs
47
+ */
48
+ export function getRandomPlaceholderImages(count = 6) {
49
+ const images = [];
50
+ for (let i = 0; i < count; i++) {
51
+ const seed = Date.now() + i; // Unique seed for variety
52
+ images.push({
53
+ url: `https://picsum.photos/seed/${seed}/800/800`,
54
+ alt: `Product Image ${i + 1}`
55
+ });
56
+ }
57
+ return images;
58
+ }
59
+ /**
60
+ * Search Pexels for relevant product images based on query
61
+ * Requires PEXELS_API_KEY environment variable
62
+ *
63
+ * @param query Search query (e.g., "hair serum", "running shoes")
64
+ * @param count Number of images to fetch (default: 6, max: 80)
65
+ * @returns Array of high-quality stock photos from Pexels
66
+ */
67
+ export async function searchPexelsForProduct(query, count = 6) {
68
+ const apiKey = process.env.PEXELS_API_KEY;
69
+ if (!apiKey) {
70
+ console.error('ℹ️ PEXELS_API_KEY not set. Using Lorem Picsum placeholders instead.');
71
+ console.error(' Get free API key at: https://www.pexels.com/api/');
72
+ return getRandomPlaceholderImages(count);
73
+ }
74
+ try {
75
+ const limit = Math.min(count, 80); // Pexels max per request
76
+ const params = new URLSearchParams({
77
+ query: query,
78
+ per_page: limit.toString(),
79
+ orientation: 'square' // Square images work best for product thumbnails
80
+ });
81
+ const response = await fetch(`https://api.pexels.com/v1/search?${params}`, {
82
+ headers: {
83
+ 'Authorization': apiKey
84
+ }
85
+ });
86
+ if (!response.ok) {
87
+ if (response.status === 429) {
88
+ console.error('⚠️ Pexels rate limit exceeded. Using Lorem Picsum placeholders.');
89
+ console.error(' Free tier: 200/hour, 20,000/month');
90
+ return getRandomPlaceholderImages(count);
91
+ }
92
+ throw new Error(`Pexels API error: ${response.status}`);
93
+ }
94
+ const data = await response.json();
95
+ if (!data.photos || data.photos.length === 0) {
96
+ console.error(`ℹ️ No Pexels images found for "${query}". Using Lorem Picsum placeholders.`);
97
+ return getRandomPlaceholderImages(count);
98
+ }
99
+ // Map Pexels photos to our ImageSource format
100
+ const images = data.photos.map((photo, index) => ({
101
+ url: photo.src.large2x || photo.src.large, // High quality image
102
+ alt: photo.alt || `${query} - Image ${index + 1}`
103
+ }));
104
+ console.error(`✅ Found ${images.length} relevant images from Pexels for "${query}"`);
105
+ return images;
106
+ }
107
+ catch (error) {
108
+ console.error(`⚠️ Pexels search failed: ${error.message}. Using Lorem Picsum placeholders.`);
109
+ return getRandomPlaceholderImages(count);
110
+ }
111
+ }
112
+ /**
113
+ * Get smart, context-aware images for a product
114
+ *
115
+ * This is the main function to use for product image generation.
116
+ * It intelligently selects images based on the product title.
117
+ *
118
+ * Strategy:
119
+ * 1. Extract keywords from product title
120
+ * 2. Search Pexels for relevant images (if API key available)
121
+ * 3. Fallback to Lorem Picsum if needed
122
+ *
123
+ * @param productTitle The product title (e.g., "Premium Hair Serum")
124
+ * @param count Number of images to fetch (default: 6)
125
+ * @param customQuery Optional custom search query (overrides title extraction)
126
+ * @returns Array of context-appropriate images
127
+ *
128
+ * @example
129
+ * // Automatically extracts "hair serum" and searches Pexels
130
+ * const images = await getSmartProductImages("Premium Hair Serum - Natural Formula");
131
+ *
132
+ * @example
133
+ * // Use custom search query
134
+ * const images = await getSmartProductImages("Product Name", 5, "organic skincare");
135
+ */
136
+ export async function getSmartProductImages(productTitle, count = 6, customQuery) {
137
+ // Use custom query if provided, otherwise extract from title
138
+ const searchQuery = customQuery || extractSearchKeywords(productTitle);
139
+ console.error(`🔍 Searching for images: "${searchQuery}"`);
140
+ // Try Pexels first, will auto-fallback to Lorem Picsum if needed
141
+ return await searchPexelsForProduct(searchQuery, count);
142
+ }
143
+ //# sourceMappingURL=image-library.js.map