ecomcoder-cli 1.3.9 → 1.3.10

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 (39) hide show
  1. package/dist/cli.js +2 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/asset/delete.d.ts +5 -0
  4. package/dist/commands/asset/delete.d.ts.map +1 -0
  5. package/dist/commands/asset/delete.js +54 -0
  6. package/dist/commands/asset/delete.js.map +1 -0
  7. package/dist/commands/asset/get.d.ts +5 -0
  8. package/dist/commands/asset/get.d.ts.map +1 -0
  9. package/dist/commands/asset/get.js +54 -0
  10. package/dist/commands/asset/get.js.map +1 -0
  11. package/dist/commands/asset/import.d.ts +5 -0
  12. package/dist/commands/asset/import.d.ts.map +1 -0
  13. package/dist/commands/asset/import.js +57 -0
  14. package/dist/commands/asset/import.js.map +1 -0
  15. package/dist/commands/asset/index.d.ts +5 -0
  16. package/dist/commands/asset/index.d.ts.map +1 -0
  17. package/dist/commands/asset/index.js +58 -0
  18. package/dist/commands/asset/index.js.map +1 -0
  19. package/dist/commands/asset/list.d.ts +5 -0
  20. package/dist/commands/asset/list.d.ts.map +1 -0
  21. package/dist/commands/asset/list.js +53 -0
  22. package/dist/commands/asset/list.js.map +1 -0
  23. package/dist/commands/asset/queries.d.ts +12 -0
  24. package/dist/commands/asset/queries.d.ts.map +1 -0
  25. package/dist/commands/asset/queries.js +135 -0
  26. package/dist/commands/asset/queries.js.map +1 -0
  27. package/dist/commands/asset/service.d.ts +50 -0
  28. package/dist/commands/asset/service.d.ts.map +1 -0
  29. package/dist/commands/asset/service.js +348 -0
  30. package/dist/commands/asset/service.js.map +1 -0
  31. package/dist/commands/asset/types.d.ts +137 -0
  32. package/dist/commands/asset/types.d.ts.map +1 -0
  33. package/dist/commands/asset/types.js +5 -0
  34. package/dist/commands/asset/types.js.map +1 -0
  35. package/dist/commands/asset/upload.d.ts +5 -0
  36. package/dist/commands/asset/upload.d.ts.map +1 -0
  37. package/dist/commands/asset/upload.js +57 -0
  38. package/dist/commands/asset/upload.js.map +1 -0
  39. package/package.json +4 -2
package/dist/cli.js CHANGED
@@ -23,6 +23,7 @@ import { registerMetafieldCommands } from './commands/metafield/index.js';
23
23
  import { registerProductsCommands } from './commands/products/index.js';
24
24
  import { registerDocsCommands } from './commands/docs/index.js';
25
25
  import { registerDiscountCommands } from './commands/discount/index.js';
26
+ import { registerAssetCommands } from './commands/asset/index.js';
26
27
  // Initialize registry
27
28
  registerProductCommands();
28
29
  registerShopCommands();
@@ -30,6 +31,7 @@ registerMetafieldCommands();
30
31
  registerProductsCommands();
31
32
  registerDocsCommands();
32
33
  registerDiscountCommands();
34
+ registerAssetCommands();
33
35
  function showMainHelp() {
34
36
  console.log(HelpGenerator.generateMainHelp());
35
37
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Delete Asset Command
3
+ */
4
+ export declare function run(argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuBH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAmC/D"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Delete Asset Command
3
+ */
4
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Delete Asset
10
+
11
+ USAGE:
12
+ ecomcoder asset delete [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --id <id> Asset ID (required)
16
+ --help, -h Show this help message
17
+
18
+ EXAMPLES:
19
+ ecomcoder asset delete --id=gid://shopify/MediaImage/123456789
20
+ `);
21
+ process.exit(0);
22
+ }
23
+ export async function run(argv = process.argv.slice(2)) {
24
+ if (hasHelpFlag(argv)) {
25
+ showHelp();
26
+ }
27
+ const args = parseArgs(argv);
28
+ if (!args.id) {
29
+ console.error(JSON.stringify({
30
+ success: false,
31
+ error: 'Missing required argument: --id'
32
+ }));
33
+ process.exit(1);
34
+ }
35
+ try {
36
+ const sessionId = getSessionId(args.sessionId);
37
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
38
+ const result = await AssetService.delete(credentials, {
39
+ id: args.id
40
+ });
41
+ console.log(JSON.stringify(result, null, 2));
42
+ if (!result.success) {
43
+ process.exit(1);
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.error(JSON.stringify({
48
+ success: false,
49
+ error: error.message || 'Unknown error occurred'
50
+ }));
51
+ process.exit(1);
52
+ }
53
+ }
54
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/asset/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,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,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,IAAI,CAAC;QACH,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,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE;YACpD,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC;QAEH,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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Get Asset Command
3
+ */
4
+ export declare function run(argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/get.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuBH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAmC/D"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Get Asset Command
3
+ */
4
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Get Asset Details
10
+
11
+ USAGE:
12
+ ecomcoder asset get [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --id <id> Asset ID (required)
16
+ --help, -h Show this help message
17
+
18
+ EXAMPLES:
19
+ ecomcoder asset get --id=gid://shopify/MediaImage/123456789
20
+ `);
21
+ process.exit(0);
22
+ }
23
+ export async function run(argv = process.argv.slice(2)) {
24
+ if (hasHelpFlag(argv)) {
25
+ showHelp();
26
+ }
27
+ const args = parseArgs(argv);
28
+ if (!args.id) {
29
+ console.error(JSON.stringify({
30
+ success: false,
31
+ error: 'Missing required argument: --id'
32
+ }));
33
+ process.exit(1);
34
+ }
35
+ try {
36
+ const sessionId = getSessionId(args.sessionId);
37
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
38
+ const result = await AssetService.get(credentials, {
39
+ id: args.id
40
+ });
41
+ console.log(JSON.stringify(result, null, 2));
42
+ if (!result.success) {
43
+ process.exit(1);
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.error(JSON.stringify({
48
+ success: false,
49
+ error: error.message || 'Unknown error occurred'
50
+ }));
51
+ process.exit(1);
52
+ }
53
+ }
54
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/asset/get.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,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,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,IAAI,CAAC;QACH,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,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE;YACjD,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC;QAEH,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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Import Assets Command (Bulk Upload)
3
+ */
4
+ export declare function run(argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/import.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAoC/D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Import Assets Command (Bulk Upload)
3
+ */
4
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Bulk Import Assets
10
+
11
+ USAGE:
12
+ ecomcoder asset import [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --directory <path> Directory path (required)
16
+ --pattern <pattern> File pattern (optional, e.g., "*.png")
17
+ --help, -h Show this help message
18
+
19
+ EXAMPLES:
20
+ ecomcoder asset import --directory=./images
21
+ ecomcoder asset import --directory=./assets --pattern="*.jpg"
22
+ `);
23
+ process.exit(0);
24
+ }
25
+ export async function run(argv = process.argv.slice(2)) {
26
+ if (hasHelpFlag(argv)) {
27
+ showHelp();
28
+ }
29
+ const args = parseArgs(argv);
30
+ if (!args.directory) {
31
+ console.error(JSON.stringify({
32
+ success: false,
33
+ error: 'Missing required argument: --directory'
34
+ }));
35
+ process.exit(1);
36
+ }
37
+ try {
38
+ const sessionId = getSessionId(args.sessionId);
39
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
40
+ const result = await AssetService.import(credentials, {
41
+ directory: args.directory,
42
+ pattern: args.pattern
43
+ });
44
+ console.log(JSON.stringify(result, null, 2));
45
+ if (!result.success) {
46
+ process.exit(1);
47
+ }
48
+ }
49
+ catch (error) {
50
+ console.error(JSON.stringify({
51
+ success: false,
52
+ error: error.message || 'Unknown error occurred'
53
+ }));
54
+ process.exit(1);
55
+ }
56
+ }
57
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/asset/import.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcb,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,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wCAAwC;SAChD,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,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,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Asset Command Registration
3
+ */
4
+ export declare function registerAssetCommands(): void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,qBAAqB,IAAI,IAAI,CAwD5C"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Asset Command Registration
3
+ */
4
+ import { registry } from '../../lib/command-registry.js';
5
+ import { HelpGenerator } from '../../lib/help-generator.js';
6
+ export function registerAssetCommands() {
7
+ // Register group
8
+ registry.registerGroup({
9
+ command: 'asset',
10
+ description: 'Manage store assets (images, videos, files)',
11
+ showHelp: () => {
12
+ console.log(HelpGenerator.generateGroupHelp('asset'));
13
+ }
14
+ });
15
+ // CRUD operations
16
+ registry.register({
17
+ command: 'asset',
18
+ subcommand: 'upload',
19
+ description: 'Upload asset to Shopify',
20
+ category: 'CRUD',
21
+ quickExample: 'ecomcoder asset upload --file=logo.png --alt="Logo"',
22
+ handler: async () => await import('./upload.js')
23
+ });
24
+ registry.register({
25
+ command: 'asset',
26
+ subcommand: 'get',
27
+ description: 'Get asset details by ID',
28
+ category: 'CRUD',
29
+ quickExample: 'ecomcoder asset get --id=gid://shopify/MediaImage/123',
30
+ handler: async () => await import('./get.js')
31
+ });
32
+ registry.register({
33
+ command: 'asset',
34
+ subcommand: 'delete',
35
+ description: 'Delete asset from Shopify',
36
+ category: 'CRUD',
37
+ quickExample: 'ecomcoder asset delete --id=gid://shopify/MediaImage/123',
38
+ handler: async () => await import('./delete.js')
39
+ });
40
+ // Manage operations
41
+ registry.register({
42
+ command: 'asset',
43
+ subcommand: 'list',
44
+ description: 'List all assets',
45
+ category: 'Manage',
46
+ quickExample: 'ecomcoder asset list --type=IMAGE --limit=50',
47
+ handler: async () => await import('./list.js')
48
+ });
49
+ registry.register({
50
+ command: 'asset',
51
+ subcommand: 'import',
52
+ description: 'Bulk import assets from directory',
53
+ category: 'Manage',
54
+ quickExample: 'ecomcoder asset import --directory=./images --pattern="*.png"',
55
+ handler: async () => await import('./import.js')
56
+ });
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/asset/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,qBAAqB;IACnC,iBAAiB;IACjB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;KACF,CAAC,CAAC;IAEH,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,qDAAqD;QACnE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC;KACjD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,uDAAuD;QACrE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,0DAA0D;QACxE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC;KACjD,CAAC,CAAC;IAEH,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,8CAA8C;QAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC;KAC/C,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,+DAA+D;QAC7E,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC;KACjD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * List Assets Command
3
+ */
4
+ export declare function run(argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA6B/D"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * List Assets Command
3
+ */
4
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ List All Assets
10
+
11
+ USAGE:
12
+ ecomcoder asset list [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --type <IMAGE|VIDEO> Filter by asset type (optional)
16
+ --limit <number> Maximum number of results (default: 50)
17
+ --cursor <string> Pagination cursor for next page (optional)
18
+ --help, -h Show this help message
19
+
20
+ EXAMPLES:
21
+ ecomcoder asset list
22
+ ecomcoder asset list --type=IMAGE --limit=10
23
+ ecomcoder asset list --cursor=eyJsYXN0X2lkIjo...
24
+ `);
25
+ process.exit(0);
26
+ }
27
+ export async function run(argv = process.argv.slice(2)) {
28
+ if (hasHelpFlag(argv)) {
29
+ showHelp();
30
+ }
31
+ const args = parseArgs(argv);
32
+ try {
33
+ const sessionId = getSessionId(args.sessionId);
34
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
35
+ const result = await AssetService.list(credentials, {
36
+ type: args.type,
37
+ limit: args.limit ? parseInt(args.limit) : undefined,
38
+ cursor: args.cursor
39
+ });
40
+ console.log(JSON.stringify(result, null, 2));
41
+ if (!result.success) {
42
+ process.exit(1);
43
+ }
44
+ }
45
+ catch (error) {
46
+ console.error(JSON.stringify({
47
+ success: false,
48
+ error: error.message || 'Unknown error occurred'
49
+ }));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/asset/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;CAgBb,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,IAAI,CAAC;QACH,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,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE;YAClD,IAAI,EAAE,IAAI,CAAC,IAAqC;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACpD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shopify Files API GraphQL Operations
3
+ *
4
+ * Using Shopify Admin API 2025-10
5
+ * Docs: https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/fileCreate
6
+ */
7
+ export declare const STAGED_UPLOADS_CREATE = "\n mutation stagedUploadsCreate($input: [StagedUploadInput!]!) {\n stagedUploadsCreate(input: $input) {\n stagedTargets {\n url\n resourceUrl\n parameters {\n name\n value\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
8
+ export declare const FILE_CREATE = "\n mutation fileCreate($files: [FileCreateInput!]!) {\n fileCreate(files: $files) {\n files {\n id\n alt\n fileStatus\n createdAt\n ... on MediaImage {\n id\n alt\n preview {\n image {\n url\n width\n height\n }\n }\n }\n ... on Video {\n id\n alt\n sources {\n url\n width\n height\n }\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n";
9
+ export declare const FILES_LIST = "\n query files($first: Int!, $after: String, $query: String) {\n files(first: $first, after: $after, query: $query) {\n edges {\n node {\n id\n alt\n fileStatus\n createdAt\n ... on MediaImage {\n image {\n url\n width\n height\n }\n }\n ... on Video {\n sources {\n url\n width\n height\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n";
10
+ export declare const FILE_GET = "\n query file($id: ID!) {\n node(id: $id) {\n ... on MediaImage {\n id\n alt\n image {\n url\n width\n height\n }\n createdAt\n }\n ... on Video {\n id\n alt\n sources {\n url\n width\n height\n }\n createdAt\n }\n }\n }\n";
11
+ export declare const FILE_DELETE = "\n mutation fileDelete($fileIds: [ID!]!) {\n fileDelete(fileIds: $fileIds) {\n deletedFileIds\n userErrors {\n field\n message\n }\n }\n }\n";
12
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,qBAAqB,+TAiBjC,CAAC;AAGF,eAAO,MAAM,WAAW,kmBAmCvB,CAAC;AAGF,eAAO,MAAM,UAAU,mmBA+BtB,CAAC;AAGF,eAAO,MAAM,QAAQ,2XAyBpB,CAAC;AAGF,eAAO,MAAM,WAAW,sLAUvB,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Shopify Files API GraphQL Operations
3
+ *
4
+ * Using Shopify Admin API 2025-10
5
+ * Docs: https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/fileCreate
6
+ */
7
+ // Create staged upload (step 1 of upload process)
8
+ export const STAGED_UPLOADS_CREATE = `
9
+ mutation stagedUploadsCreate($input: [StagedUploadInput!]!) {
10
+ stagedUploadsCreate(input: $input) {
11
+ stagedTargets {
12
+ url
13
+ resourceUrl
14
+ parameters {
15
+ name
16
+ value
17
+ }
18
+ }
19
+ userErrors {
20
+ field
21
+ message
22
+ }
23
+ }
24
+ }
25
+ `;
26
+ // Upload asset via staged upload (step 2)
27
+ export const FILE_CREATE = `
28
+ mutation fileCreate($files: [FileCreateInput!]!) {
29
+ fileCreate(files: $files) {
30
+ files {
31
+ id
32
+ alt
33
+ fileStatus
34
+ createdAt
35
+ ... on MediaImage {
36
+ id
37
+ alt
38
+ preview {
39
+ image {
40
+ url
41
+ width
42
+ height
43
+ }
44
+ }
45
+ }
46
+ ... on Video {
47
+ id
48
+ alt
49
+ sources {
50
+ url
51
+ width
52
+ height
53
+ }
54
+ }
55
+ }
56
+ userErrors {
57
+ field
58
+ message
59
+ }
60
+ }
61
+ }
62
+ `;
63
+ // List all files (images + videos)
64
+ export const FILES_LIST = `
65
+ query files($first: Int!, $after: String, $query: String) {
66
+ files(first: $first, after: $after, query: $query) {
67
+ edges {
68
+ node {
69
+ id
70
+ alt
71
+ fileStatus
72
+ createdAt
73
+ ... on MediaImage {
74
+ image {
75
+ url
76
+ width
77
+ height
78
+ }
79
+ }
80
+ ... on Video {
81
+ sources {
82
+ url
83
+ width
84
+ height
85
+ }
86
+ }
87
+ }
88
+ }
89
+ pageInfo {
90
+ hasNextPage
91
+ endCursor
92
+ }
93
+ }
94
+ }
95
+ `;
96
+ // Get single file details
97
+ export const FILE_GET = `
98
+ query file($id: ID!) {
99
+ node(id: $id) {
100
+ ... on MediaImage {
101
+ id
102
+ alt
103
+ image {
104
+ url
105
+ width
106
+ height
107
+ }
108
+ createdAt
109
+ }
110
+ ... on Video {
111
+ id
112
+ alt
113
+ sources {
114
+ url
115
+ width
116
+ height
117
+ }
118
+ createdAt
119
+ }
120
+ }
121
+ }
122
+ `;
123
+ // Delete file
124
+ export const FILE_DELETE = `
125
+ mutation fileDelete($fileIds: [ID!]!) {
126
+ fileDelete(fileIds: $fileIds) {
127
+ deletedFileIds
128
+ userErrors {
129
+ field
130
+ message
131
+ }
132
+ }
133
+ }
134
+ `;
135
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/asset/queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;CAiBpC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC1B,CAAC;AAEF,mCAAmC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BzB,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvB,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;CAU1B,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Asset Service
3
+ *
4
+ * Handles all asset management business logic
5
+ * Following Service Layer Pattern
6
+ */
7
+ import { ShopifyCredentials } from '../../lib/types.js';
8
+ import { CommandResult, UploadAssetInput, ListAssetsInput, GetAssetInput, DeleteAssetInput, ImportAssetsInput, FormattedAsset } from './types.js';
9
+ export declare class AssetService {
10
+ /**
11
+ * Upload single asset to Shopify
12
+ *
13
+ * Three-step process:
14
+ * 1. Create staged upload target
15
+ * 2. Upload file to signed URL
16
+ * 3. Create file record in Shopify
17
+ */
18
+ static upload(credentials: ShopifyCredentials, input: UploadAssetInput): Promise<CommandResult<{
19
+ asset: FormattedAsset;
20
+ }>>;
21
+ /**
22
+ * List all assets
23
+ */
24
+ static list(credentials: ShopifyCredentials, input?: ListAssetsInput): Promise<CommandResult<{
25
+ assets: FormattedAsset[];
26
+ hasMore: boolean;
27
+ cursor: string | null;
28
+ }>>;
29
+ /**
30
+ * Get single asset details
31
+ */
32
+ static get(credentials: ShopifyCredentials, input: GetAssetInput): Promise<CommandResult<{
33
+ asset: FormattedAsset;
34
+ }>>;
35
+ /**
36
+ * Delete asset
37
+ */
38
+ static delete(credentials: ShopifyCredentials, input: DeleteAssetInput): Promise<CommandResult<{
39
+ deletedId: string;
40
+ }>>;
41
+ /**
42
+ * Bulk import assets from directory
43
+ */
44
+ static import(credentials: ShopifyCredentials, input: ImportAssetsInput): Promise<CommandResult<{
45
+ uploaded: number;
46
+ failed: number;
47
+ errors: string[];
48
+ }>>;
49
+ }
50
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAYxD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EAMf,MAAM,YAAY,CAAC;AAEpB,qBAAa,YAAY;IACvB;;;;;;;OAOG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAiJpD;;OAEG;WACU,IAAI,CACf,WAAW,EAAE,kBAAkB,EAC/B,KAAK,GAAE,eAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC;QAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAyChG;;OAEG;WACU,GAAG,CACd,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IA6BpD;;OAEG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA+BhD;;OAEG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAkDlF"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Asset Service
3
+ *
4
+ * Handles all asset management business logic
5
+ * Following Service Layer Pattern
6
+ */
7
+ import { shopifyGraphQL } from '../../lib/shopify-client.js';
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import FormData from 'form-data';
11
+ import { URL } from 'url';
12
+ import { FILE_CREATE, FILES_LIST, FILE_GET, FILE_DELETE, STAGED_UPLOADS_CREATE } from './queries.js';
13
+ export class AssetService {
14
+ /**
15
+ * Upload single asset to Shopify
16
+ *
17
+ * Three-step process:
18
+ * 1. Create staged upload target
19
+ * 2. Upload file to signed URL
20
+ * 3. Create file record in Shopify
21
+ */
22
+ static async upload(credentials, input) {
23
+ try {
24
+ // Step 1: Validate file exists
25
+ if (!fs.existsSync(input.file)) {
26
+ return {
27
+ success: false,
28
+ error: `File not found: ${input.file}`
29
+ };
30
+ }
31
+ // Step 2: Get file metadata
32
+ const stats = fs.statSync(input.file);
33
+ const fileName = path.basename(input.file);
34
+ const mimeType = getMimeType(input.file);
35
+ const fileSize = stats.size;
36
+ // Step 3: Detect content type
37
+ const contentType = input.contentType || detectContentType(mimeType);
38
+ // Step 4: Create staged upload
39
+ // CRITICAL: httpMethod must match the actual upload request method (POST for multipart)
40
+ const stagedUpload = await shopifyGraphQL(credentials, STAGED_UPLOADS_CREATE, {
41
+ input: [{
42
+ filename: fileName,
43
+ mimeType,
44
+ resource: 'FILE',
45
+ fileSize: fileSize.toString(),
46
+ httpMethod: 'POST' // Required: Must match the upload request method
47
+ }]
48
+ });
49
+ if (stagedUpload.errors || !stagedUpload.data?.stagedUploadsCreate?.stagedTargets?.[0]) {
50
+ return {
51
+ success: false,
52
+ error: stagedUpload.errors?.[0]?.message || 'Failed to create staged upload'
53
+ };
54
+ }
55
+ const target = stagedUpload.data.stagedUploadsCreate.stagedTargets[0];
56
+ // Step 5: Upload file to signed URL
57
+ // CRITICAL: GCS signed URLs require multipart/form-data with parameters
58
+ // Reference: https://community.shopify.com/c/shopify-apis-and-sdks/error-uploading-file-after-stageduploadscreate/td-p/1718315
59
+ const fileBuffer = fs.readFileSync(input.file);
60
+ const form = new FormData();
61
+ // Add parameters from stagedUploadsCreate response FIRST (required for GCS auth)
62
+ target.parameters.forEach(param => {
63
+ form.append(param.name, param.value);
64
+ });
65
+ // Add file as LAST parameter (required by GCS)
66
+ form.append('file', fileBuffer, {
67
+ filename: fileName,
68
+ contentType: mimeType
69
+ });
70
+ // Upload to signed URL using form.submit() (required for form-data package)
71
+ // CRITICAL: Don't add extra headers - form.submit() handles everything
72
+ const urlObj = new URL(target.url);
73
+ try {
74
+ await new Promise((resolve, reject) => {
75
+ form.submit({
76
+ protocol: urlObj.protocol,
77
+ host: urlObj.host,
78
+ path: urlObj.pathname + urlObj.search,
79
+ method: 'POST'
80
+ }, (err, res) => {
81
+ if (err) {
82
+ return reject(new Error(`Upload request failed: ${err.message}`));
83
+ }
84
+ let responseBody = '';
85
+ res.on('data', (chunk) => { responseBody += chunk; });
86
+ res.on('end', () => {
87
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
88
+ resolve();
89
+ }
90
+ else {
91
+ reject(new Error(`Upload failed (${res.statusCode}): ${responseBody}`));
92
+ }
93
+ });
94
+ res.on('error', (err) => {
95
+ reject(new Error(`Response error: ${err.message}`));
96
+ });
97
+ });
98
+ });
99
+ }
100
+ catch (error) {
101
+ return {
102
+ success: false,
103
+ error: error.message || 'Unknown error during file upload'
104
+ };
105
+ }
106
+ // Step 6: Create file record in Shopify
107
+ const fileCreate = await shopifyGraphQL(credentials, FILE_CREATE, {
108
+ files: [{
109
+ alt: input.alt || fileName,
110
+ contentType,
111
+ originalSource: target.resourceUrl
112
+ }]
113
+ });
114
+ if (fileCreate.errors || fileCreate.data?.fileCreate?.userErrors?.length) {
115
+ return {
116
+ success: false,
117
+ error: fileCreate.data?.fileCreate?.userErrors?.[0]?.message ||
118
+ fileCreate.errors?.[0]?.message ||
119
+ 'Failed to create file record'
120
+ };
121
+ }
122
+ const file = fileCreate.data.fileCreate.files[0];
123
+ return {
124
+ success: true,
125
+ data: {
126
+ asset: {
127
+ id: file.id,
128
+ url: file.preview?.image?.url || target.resourceUrl,
129
+ alt: file.alt,
130
+ mediaContentType: contentType,
131
+ width: file.preview?.image?.width || null,
132
+ height: file.preview?.image?.height || null,
133
+ fileSize,
134
+ mimeType,
135
+ createdAt: file.createdAt
136
+ }
137
+ }
138
+ };
139
+ }
140
+ catch (error) {
141
+ return {
142
+ success: false,
143
+ error: error.message || 'Unknown error during upload'
144
+ };
145
+ }
146
+ }
147
+ /**
148
+ * List all assets
149
+ */
150
+ static async list(credentials, input = {}) {
151
+ try {
152
+ const limit = input.limit || 50;
153
+ const query = input.type ? `media_type:${input.type}` : undefined;
154
+ const response = await shopifyGraphQL(credentials, FILES_LIST, {
155
+ first: limit,
156
+ after: input.cursor || null,
157
+ query
158
+ });
159
+ if (response.errors) {
160
+ return {
161
+ success: false,
162
+ error: response.errors[0]?.message || 'Failed to list assets'
163
+ };
164
+ }
165
+ const files = response.data?.files?.edges || [];
166
+ const assets = files.map(edge => formatAsset(edge.node));
167
+ return {
168
+ success: true,
169
+ data: {
170
+ assets,
171
+ hasMore: response.data?.files?.pageInfo?.hasNextPage || false,
172
+ cursor: response.data?.files?.pageInfo?.endCursor || null
173
+ }
174
+ };
175
+ }
176
+ catch (error) {
177
+ return {
178
+ success: false,
179
+ error: error.message || 'Unknown error while listing assets'
180
+ };
181
+ }
182
+ }
183
+ /**
184
+ * Get single asset details
185
+ */
186
+ static async get(credentials, input) {
187
+ try {
188
+ const response = await shopifyGraphQL(credentials, FILE_GET, { id: input.id });
189
+ if (response.errors || !response.data?.node) {
190
+ return {
191
+ success: false,
192
+ error: response.errors?.[0]?.message || 'Asset not found'
193
+ };
194
+ }
195
+ return {
196
+ success: true,
197
+ data: {
198
+ asset: formatAsset(response.data.node)
199
+ }
200
+ };
201
+ }
202
+ catch (error) {
203
+ return {
204
+ success: false,
205
+ error: error.message || 'Unknown error while fetching asset'
206
+ };
207
+ }
208
+ }
209
+ /**
210
+ * Delete asset
211
+ */
212
+ static async delete(credentials, input) {
213
+ try {
214
+ const response = await shopifyGraphQL(credentials, FILE_DELETE, { fileIds: [input.id] });
215
+ if (response.errors || response.data?.fileDelete?.userErrors?.length) {
216
+ return {
217
+ success: false,
218
+ error: response.data?.fileDelete?.userErrors?.[0]?.message ||
219
+ response.errors?.[0]?.message ||
220
+ 'Failed to delete asset'
221
+ };
222
+ }
223
+ return {
224
+ success: true,
225
+ data: {
226
+ deletedId: response.data.fileDelete.deletedFileIds[0]
227
+ }
228
+ };
229
+ }
230
+ catch (error) {
231
+ return {
232
+ success: false,
233
+ error: error.message || 'Unknown error while deleting asset'
234
+ };
235
+ }
236
+ }
237
+ /**
238
+ * Bulk import assets from directory
239
+ */
240
+ static async import(credentials, input) {
241
+ try {
242
+ // Validate directory exists
243
+ if (!fs.existsSync(input.directory)) {
244
+ return {
245
+ success: false,
246
+ error: `Directory not found: ${input.directory}`
247
+ };
248
+ }
249
+ // Get all files in directory
250
+ const files = getFilesInDirectory(input.directory, input.pattern);
251
+ if (files.length === 0) {
252
+ return {
253
+ success: false,
254
+ error: 'No files found matching criteria'
255
+ };
256
+ }
257
+ let uploaded = 0;
258
+ let failed = 0;
259
+ const errors = [];
260
+ // Upload each file
261
+ for (const file of files) {
262
+ const result = await this.upload(credentials, { file });
263
+ if (result.success) {
264
+ uploaded++;
265
+ }
266
+ else {
267
+ failed++;
268
+ errors.push(`${path.basename(file)}: ${result.error}`);
269
+ }
270
+ // Rate limit: 500ms between uploads
271
+ await new Promise(resolve => setTimeout(resolve, 500));
272
+ }
273
+ return {
274
+ success: failed === 0,
275
+ data: { uploaded, failed, errors }
276
+ };
277
+ }
278
+ catch (error) {
279
+ return {
280
+ success: false,
281
+ error: error.message || 'Unknown error during bulk import'
282
+ };
283
+ }
284
+ }
285
+ }
286
+ // Helper functions
287
+ function getMimeType(filePath) {
288
+ const ext = path.extname(filePath).toLowerCase();
289
+ const mimeTypes = {
290
+ '.jpg': 'image/jpeg',
291
+ '.jpeg': 'image/jpeg',
292
+ '.png': 'image/png',
293
+ '.gif': 'image/gif',
294
+ '.webp': 'image/webp',
295
+ '.svg': 'image/svg+xml',
296
+ '.mp4': 'video/mp4',
297
+ '.mov': 'video/quicktime',
298
+ '.avi': 'video/x-msvideo',
299
+ '.webm': 'video/webm'
300
+ };
301
+ return mimeTypes[ext] || 'application/octet-stream';
302
+ }
303
+ function detectContentType(mimeType) {
304
+ if (mimeType.startsWith('image/'))
305
+ return 'IMAGE';
306
+ if (mimeType.startsWith('video/'))
307
+ return 'VIDEO';
308
+ return 'GENERIC_FILE';
309
+ }
310
+ function formatAsset(node) {
311
+ return {
312
+ id: node.id,
313
+ url: node.image?.url || node.sources?.[0]?.url || '',
314
+ alt: node.alt || null,
315
+ mediaContentType: node.image ? 'IMAGE' : (node.sources ? 'VIDEO' : 'GENERIC_FILE'),
316
+ width: node.image?.width || node.sources?.[0]?.width || null,
317
+ height: node.image?.height || node.sources?.[0]?.height || null,
318
+ fileSize: node.fileSize || node.sources?.[0]?.fileSize || null,
319
+ mimeType: node.mimeType || node.sources?.[0]?.mimeType || null,
320
+ createdAt: node.createdAt
321
+ };
322
+ }
323
+ function getFilesInDirectory(directory, pattern) {
324
+ const files = [];
325
+ // Read all files in directory
326
+ const entries = fs.readdirSync(directory, { withFileTypes: true });
327
+ for (const entry of entries) {
328
+ if (entry.isFile()) {
329
+ const fullPath = path.join(directory, entry.name);
330
+ // If pattern provided, match it
331
+ if (pattern) {
332
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
333
+ if (regex.test(entry.name)) {
334
+ files.push(fullPath);
335
+ }
336
+ }
337
+ else {
338
+ // No pattern, include all image/video files
339
+ const ext = path.extname(entry.name).toLowerCase();
340
+ if (['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.mp4', '.mov', '.avi', '.webm'].includes(ext)) {
341
+ files.push(fullPath);
342
+ }
343
+ }
344
+ }
345
+ }
346
+ return files;
347
+ }
348
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/asset/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Asset Management Types
3
+ */
4
+ export interface CommandResult<T = any> {
5
+ success: boolean;
6
+ data?: T;
7
+ error?: string;
8
+ }
9
+ export interface UploadAssetInput {
10
+ file: string;
11
+ alt?: string;
12
+ contentType?: 'IMAGE' | 'VIDEO' | 'GENERIC_FILE';
13
+ }
14
+ export interface ListAssetsInput {
15
+ type?: 'IMAGE' | 'VIDEO';
16
+ limit?: number;
17
+ cursor?: string;
18
+ }
19
+ export interface GetAssetInput {
20
+ id: string;
21
+ }
22
+ export interface DeleteAssetInput {
23
+ id: string;
24
+ }
25
+ export interface ImportAssetsInput {
26
+ directory: string;
27
+ pattern?: string;
28
+ }
29
+ export interface FormattedAsset {
30
+ id: string;
31
+ url: string;
32
+ alt: string | null;
33
+ mediaContentType: 'IMAGE' | 'VIDEO' | 'GENERIC_FILE';
34
+ width: number | null;
35
+ height: number | null;
36
+ fileSize: number | null;
37
+ mimeType: string | null;
38
+ createdAt: string;
39
+ }
40
+ export interface StagedUploadResponse {
41
+ stagedUploadsCreate: {
42
+ stagedTargets: Array<{
43
+ url: string;
44
+ resourceUrl: string;
45
+ parameters: Array<{
46
+ name: string;
47
+ value: string;
48
+ }>;
49
+ }>;
50
+ userErrors: Array<{
51
+ field: string[];
52
+ message: string;
53
+ }>;
54
+ };
55
+ }
56
+ export interface AssetUploadResponse {
57
+ fileCreate: {
58
+ files: Array<{
59
+ id: string;
60
+ alt: string;
61
+ fileStatus: string;
62
+ createdAt: string;
63
+ preview?: {
64
+ image?: {
65
+ url: string;
66
+ width: number;
67
+ height: number;
68
+ };
69
+ };
70
+ }>;
71
+ userErrors: Array<{
72
+ field: string[];
73
+ message: string;
74
+ }>;
75
+ };
76
+ }
77
+ export interface AssetListResponse {
78
+ files: {
79
+ edges: Array<{
80
+ node: {
81
+ id: string;
82
+ alt: string;
83
+ fileStatus: string;
84
+ createdAt: string;
85
+ image?: {
86
+ url: string;
87
+ width: number;
88
+ height: number;
89
+ };
90
+ mimeType?: string;
91
+ fileSize?: number;
92
+ sources?: Array<{
93
+ url: string;
94
+ mimeType: string;
95
+ width: number;
96
+ height: number;
97
+ fileSize: number;
98
+ }>;
99
+ };
100
+ }>;
101
+ pageInfo: {
102
+ hasNextPage: boolean;
103
+ endCursor: string;
104
+ };
105
+ };
106
+ }
107
+ export interface AssetGetResponse {
108
+ node: {
109
+ id: string;
110
+ alt: string;
111
+ createdAt: string;
112
+ image?: {
113
+ url: string;
114
+ width: number;
115
+ height: number;
116
+ };
117
+ mimeType?: string;
118
+ fileSize?: number;
119
+ sources?: Array<{
120
+ url: string;
121
+ mimeType: string;
122
+ width: number;
123
+ height: number;
124
+ fileSize: number;
125
+ }>;
126
+ };
127
+ }
128
+ export interface AssetDeleteResponse {
129
+ fileDelete: {
130
+ deletedFileIds: string[];
131
+ userErrors: Array<{
132
+ field: string[];
133
+ message: string;
134
+ }>;
135
+ };
136
+ }
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Asset Management Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/asset/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Upload Asset Command
3
+ */
4
+ export declare function run(argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/upload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAoC/D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Upload Asset Command
3
+ */
4
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Upload Asset to Shopify
10
+
11
+ USAGE:
12
+ ecomcoder asset upload [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --file <path> Local file path (required)
16
+ --alt <text> Alt text for accessibility (optional)
17
+ --help, -h Show this help message
18
+
19
+ EXAMPLES:
20
+ ecomcoder asset upload --file=./logo.png --alt="Company Logo"
21
+ ecomcoder asset upload --file=./video.mp4
22
+ `);
23
+ process.exit(0);
24
+ }
25
+ export async function run(argv = process.argv.slice(2)) {
26
+ if (hasHelpFlag(argv)) {
27
+ showHelp();
28
+ }
29
+ const args = parseArgs(argv);
30
+ if (!args.file) {
31
+ console.error(JSON.stringify({
32
+ success: false,
33
+ error: 'Missing required argument: --file'
34
+ }));
35
+ process.exit(1);
36
+ }
37
+ try {
38
+ const sessionId = getSessionId(args.sessionId);
39
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
40
+ const result = await AssetService.upload(credentials, {
41
+ file: args.file,
42
+ alt: args.alt
43
+ });
44
+ console.log(JSON.stringify(result, null, 2));
45
+ if (!result.success) {
46
+ process.exit(1);
47
+ }
48
+ }
49
+ catch (error) {
50
+ console.error(JSON.stringify({
51
+ success: false,
52
+ error: error.message || 'Unknown error occurred'
53
+ }));
54
+ process.exit(1);
55
+ }
56
+ }
57
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/asset/upload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcb,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,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mCAAmC;SAC3C,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,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,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE;YACpD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecomcoder-cli",
3
- "version": "1.3.9",
3
+ "version": "1.3.10",
4
4
  "type": "module",
5
5
  "description": "CLI tools for EcomCoder - Shopify development utilities",
6
6
  "main": "./dist/index.js",
@@ -17,6 +17,7 @@
17
17
  "test:integration": "tsx scripts/integration-tests/index.ts",
18
18
  "test:integration:product": "tsx scripts/integration-tests/product/index.ts",
19
19
  "test:integration:discount": "tsx scripts/integration-tests/discount/index.ts",
20
+ "test:integration:asset": "tsx scripts/integration-tests/asset/index.ts",
20
21
  "prepublishOnly": "npm run build",
21
22
  "release:patch": "npm version patch && npm publish",
22
23
  "release:minor": "npm version minor && npm publish",
@@ -49,7 +50,8 @@
49
50
  },
50
51
  "dependencies": {
51
52
  "@pinecone-database/pinecone": "^6.1.3",
52
- "@supabase/supabase-js": "^2.87.0"
53
+ "@supabase/supabase-js": "^2.87.0",
54
+ "form-data": "^4.0.0"
53
55
  },
54
56
  "devDependencies": {
55
57
  "@types/node": "^20.10.0",