ecomcoder-cli 1.3.8 → 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.
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/asset/delete.d.ts +5 -0
- package/dist/commands/asset/delete.d.ts.map +1 -0
- package/dist/commands/asset/delete.js +54 -0
- package/dist/commands/asset/delete.js.map +1 -0
- package/dist/commands/asset/get.d.ts +5 -0
- package/dist/commands/asset/get.d.ts.map +1 -0
- package/dist/commands/asset/get.js +54 -0
- package/dist/commands/asset/get.js.map +1 -0
- package/dist/commands/asset/import.d.ts +5 -0
- package/dist/commands/asset/import.d.ts.map +1 -0
- package/dist/commands/asset/import.js +57 -0
- package/dist/commands/asset/import.js.map +1 -0
- package/dist/commands/asset/index.d.ts +5 -0
- package/dist/commands/asset/index.d.ts.map +1 -0
- package/dist/commands/asset/index.js +58 -0
- package/dist/commands/asset/index.js.map +1 -0
- package/dist/commands/asset/list.d.ts +5 -0
- package/dist/commands/asset/list.d.ts.map +1 -0
- package/dist/commands/asset/list.js +53 -0
- package/dist/commands/asset/list.js.map +1 -0
- package/dist/commands/asset/queries.d.ts +12 -0
- package/dist/commands/asset/queries.d.ts.map +1 -0
- package/dist/commands/asset/queries.js +135 -0
- package/dist/commands/asset/queries.js.map +1 -0
- package/dist/commands/asset/service.d.ts +50 -0
- package/dist/commands/asset/service.d.ts.map +1 -0
- package/dist/commands/asset/service.js +348 -0
- package/dist/commands/asset/service.js.map +1 -0
- package/dist/commands/asset/types.d.ts +137 -0
- package/dist/commands/asset/types.d.ts.map +1 -0
- package/dist/commands/asset/types.js +5 -0
- package/dist/commands/asset/types.js.map +1 -0
- package/dist/commands/asset/upload.d.ts +5 -0
- package/dist/commands/asset/upload.d.ts.map +1 -0
- package/dist/commands/asset/upload.js +57 -0
- package/dist/commands/asset/upload.js.map +1 -0
- package/dist/lib/help-generator.d.ts.map +1 -1
- package/dist/lib/help-generator.js +1 -0
- package/dist/lib/help-generator.js.map +1 -1
- package/package.json +4 -2
package/dist/cli.js
CHANGED
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
* ✅ Scalability - Supports unlimited commands
|
|
11
11
|
* ✅ Testability - Easy to test routing logic
|
|
12
12
|
*/
|
|
13
|
+
import { createRequire } from 'module';
|
|
13
14
|
import { getPositionalArgs } from './lib/args-parser.js';
|
|
14
15
|
import { registry } from './lib/command-registry.js';
|
|
15
16
|
import { HelpGenerator } from './lib/help-generator.js';
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const packageJson = require('../package.json');
|
|
16
19
|
// Register all command groups
|
|
17
20
|
import { registerProductCommands } from './commands/product/index.js';
|
|
18
21
|
import { registerShopCommands } from './commands/shop/index.js';
|
|
@@ -20,6 +23,7 @@ import { registerMetafieldCommands } from './commands/metafield/index.js';
|
|
|
20
23
|
import { registerProductsCommands } from './commands/products/index.js';
|
|
21
24
|
import { registerDocsCommands } from './commands/docs/index.js';
|
|
22
25
|
import { registerDiscountCommands } from './commands/discount/index.js';
|
|
26
|
+
import { registerAssetCommands } from './commands/asset/index.js';
|
|
23
27
|
// Initialize registry
|
|
24
28
|
registerProductCommands();
|
|
25
29
|
registerShopCommands();
|
|
@@ -27,11 +31,17 @@ registerMetafieldCommands();
|
|
|
27
31
|
registerProductsCommands();
|
|
28
32
|
registerDocsCommands();
|
|
29
33
|
registerDiscountCommands();
|
|
34
|
+
registerAssetCommands();
|
|
30
35
|
function showMainHelp() {
|
|
31
36
|
console.log(HelpGenerator.generateMainHelp());
|
|
32
37
|
}
|
|
33
38
|
async function main() {
|
|
34
39
|
const args = process.argv.slice(2);
|
|
40
|
+
// Show version if version flag
|
|
41
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
42
|
+
console.log(`v${packageJson.version}`);
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
35
45
|
// Show help if no arguments
|
|
36
46
|
if (args.length === 0) {
|
|
37
47
|
showMainHelp();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,8BAA8B;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|