ecomcoder-cli 1.3.13 → 1.3.14
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/lib/approval.d.ts +19 -4
- package/dist/lib/approval.d.ts.map +1 -1
- package/dist/lib/approval.js +26 -5
- package/dist/lib/approval.js.map +1 -1
- package/dist/lib/config.d.ts +52 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +83 -0
- package/dist/lib/config.js.map +1 -0
- package/package.json +2 -1
package/dist/lib/approval.d.ts
CHANGED
|
@@ -17,12 +17,27 @@ export interface ApprovalResponse {
|
|
|
17
17
|
* Request approval from user (via ecomcoder-app)
|
|
18
18
|
*
|
|
19
19
|
* Protocol:
|
|
20
|
-
* 1. Check if
|
|
21
|
-
* 2.
|
|
22
|
-
* 3. If
|
|
20
|
+
* 1. Check if approvals are globally disabled via configuration
|
|
21
|
+
* 2. Check if APPROVAL_GRANTED=true env var is set (for testing)
|
|
22
|
+
* 3. If neither, output APPROVAL_REQUIRED JSON and exit
|
|
23
|
+
*
|
|
24
|
+
* Configuration priority:
|
|
25
|
+
* - REQUIRE_APPROVAL environment variable
|
|
26
|
+
* - .ecomcoder.json in current directory
|
|
27
|
+
* - .ecomcoder.json in home directory
|
|
28
|
+
* - Default (true)
|
|
23
29
|
*
|
|
24
30
|
* @param request - Approval request details
|
|
25
|
-
* @returns true if approved (only returns if pre-approved
|
|
31
|
+
* @returns true if approved (only returns if pre-approved)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Disable approvals globally
|
|
35
|
+
* REQUIRE_APPROVAL=false ecomcoder product update-price --id=123 --price=29.99
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Disable approvals via config file
|
|
39
|
+
* echo '{"requireApproval": false}' > .ecomcoder.json
|
|
40
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
26
41
|
*/
|
|
27
42
|
export declare function requestApproval(request: ApprovalRequest): Promise<boolean>;
|
|
28
43
|
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BhF"}
|
package/dist/lib/approval.js
CHANGED
|
@@ -5,19 +5,40 @@
|
|
|
5
5
|
* Communicates with ecomcoder-app via stdout/stdin
|
|
6
6
|
*/
|
|
7
7
|
import { randomUUID } from 'crypto';
|
|
8
|
+
import { getConfig } from './config.js';
|
|
8
9
|
/**
|
|
9
10
|
* Request approval from user (via ecomcoder-app)
|
|
10
11
|
*
|
|
11
12
|
* Protocol:
|
|
12
|
-
* 1. Check if
|
|
13
|
-
* 2.
|
|
14
|
-
* 3. If
|
|
13
|
+
* 1. Check if approvals are globally disabled via configuration
|
|
14
|
+
* 2. Check if APPROVAL_GRANTED=true env var is set (for testing)
|
|
15
|
+
* 3. If neither, output APPROVAL_REQUIRED JSON and exit
|
|
16
|
+
*
|
|
17
|
+
* Configuration priority:
|
|
18
|
+
* - REQUIRE_APPROVAL environment variable
|
|
19
|
+
* - .ecomcoder.json in current directory
|
|
20
|
+
* - .ecomcoder.json in home directory
|
|
21
|
+
* - Default (true)
|
|
15
22
|
*
|
|
16
23
|
* @param request - Approval request details
|
|
17
|
-
* @returns true if approved (only returns if pre-approved
|
|
24
|
+
* @returns true if approved (only returns if pre-approved)
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* // Disable approvals globally
|
|
28
|
+
* REQUIRE_APPROVAL=false ecomcoder product update-price --id=123 --price=29.99
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Disable approvals via config file
|
|
32
|
+
* echo '{"requireApproval": false}' > .ecomcoder.json
|
|
33
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
18
34
|
*/
|
|
19
35
|
export async function requestApproval(request) {
|
|
20
|
-
// Check if
|
|
36
|
+
// Check if approvals are globally disabled
|
|
37
|
+
const config = getConfig();
|
|
38
|
+
if (!config.requireApproval) {
|
|
39
|
+
return true; // Auto-approve when disabled
|
|
40
|
+
}
|
|
41
|
+
// Check if approval was pre-granted via environment variable (for automated tests)
|
|
21
42
|
if (process.env.APPROVAL_GRANTED === 'true') {
|
|
22
43
|
return true;
|
|
23
44
|
}
|
package/dist/lib/approval.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/lib/approval.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,2CAA2C;IAC3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,CAAC,6BAA6B;IAC5C,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAEhC,yCAAyC;IACzC,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAE7C,sFAAsF;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management
|
|
3
|
+
*
|
|
4
|
+
* Centralized configuration for CLI behavior
|
|
5
|
+
* Supports multiple configuration sources with priority order:
|
|
6
|
+
* 1. Environment variables (highest priority)
|
|
7
|
+
* 2. .ecomcoder.json in current directory
|
|
8
|
+
* 3. .ecomcoder.json in home directory
|
|
9
|
+
* 4. Default values (lowest priority)
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* CLI Configuration Interface
|
|
13
|
+
*/
|
|
14
|
+
export interface Config {
|
|
15
|
+
/**
|
|
16
|
+
* Whether to require user approval for destructive operations
|
|
17
|
+
* Set to true to enable approval prompts (useful for safety)
|
|
18
|
+
* @default false
|
|
19
|
+
*/
|
|
20
|
+
requireApproval: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get current CLI configuration
|
|
24
|
+
*
|
|
25
|
+
* Priority order:
|
|
26
|
+
* 1. REQUIRE_APPROVAL environment variable
|
|
27
|
+
* 2. .ecomcoder.json in current working directory
|
|
28
|
+
* 3. .ecomcoder.json in home directory
|
|
29
|
+
* 4. Default values (requireApproval: false)
|
|
30
|
+
*
|
|
31
|
+
* @returns Current configuration
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Environment variable (highest priority)
|
|
35
|
+
* REQUIRE_APPROVAL=false ecomcoder product update-price --id=123 --price=29.99
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Project-specific config
|
|
39
|
+
* echo '{"requireApproval": false}' > .ecomcoder.json
|
|
40
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* // Global user config
|
|
44
|
+
* echo '{"requireApproval": false}' > ~/.ecomcoder.json
|
|
45
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
46
|
+
*/
|
|
47
|
+
export declare function getConfig(): Config;
|
|
48
|
+
/**
|
|
49
|
+
* Clear cached configuration (useful for testing)
|
|
50
|
+
*/
|
|
51
|
+
export declare function clearConfigCache(): void;
|
|
52
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAWD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAsClC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management
|
|
3
|
+
*
|
|
4
|
+
* Centralized configuration for CLI behavior
|
|
5
|
+
* Supports multiple configuration sources with priority order:
|
|
6
|
+
* 1. Environment variables (highest priority)
|
|
7
|
+
* 2. .ecomcoder.json in current directory
|
|
8
|
+
* 3. .ecomcoder.json in home directory
|
|
9
|
+
* 4. Default values (lowest priority)
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { homedir } from 'os';
|
|
14
|
+
let cachedConfig = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get current CLI configuration
|
|
17
|
+
*
|
|
18
|
+
* Priority order:
|
|
19
|
+
* 1. REQUIRE_APPROVAL environment variable
|
|
20
|
+
* 2. .ecomcoder.json in current working directory
|
|
21
|
+
* 3. .ecomcoder.json in home directory
|
|
22
|
+
* 4. Default values (requireApproval: false)
|
|
23
|
+
*
|
|
24
|
+
* @returns Current configuration
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* // Environment variable (highest priority)
|
|
28
|
+
* REQUIRE_APPROVAL=false ecomcoder product update-price --id=123 --price=29.99
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Project-specific config
|
|
32
|
+
* echo '{"requireApproval": false}' > .ecomcoder.json
|
|
33
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Global user config
|
|
37
|
+
* echo '{"requireApproval": false}' > ~/.ecomcoder.json
|
|
38
|
+
* ecomcoder product update-price --id=123 --price=29.99
|
|
39
|
+
*/
|
|
40
|
+
export function getConfig() {
|
|
41
|
+
// Return cached config if available
|
|
42
|
+
if (cachedConfig) {
|
|
43
|
+
return cachedConfig;
|
|
44
|
+
}
|
|
45
|
+
// Default configuration
|
|
46
|
+
let requireApproval = false;
|
|
47
|
+
// Priority 1: Check environment variable
|
|
48
|
+
if (process.env.REQUIRE_APPROVAL !== undefined) {
|
|
49
|
+
requireApproval = process.env.REQUIRE_APPROVAL !== 'false';
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Priority 2 & 3: Check for config files
|
|
53
|
+
const configPaths = [
|
|
54
|
+
join(process.cwd(), '.ecomcoder.json'), // Current directory
|
|
55
|
+
join(homedir(), '.ecomcoder.json') // Home directory
|
|
56
|
+
];
|
|
57
|
+
for (const configPath of configPaths) {
|
|
58
|
+
if (existsSync(configPath)) {
|
|
59
|
+
try {
|
|
60
|
+
const configData = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
61
|
+
if (configData.requireApproval !== undefined) {
|
|
62
|
+
requireApproval = configData.requireApproval;
|
|
63
|
+
break; // Use first found config file
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
// Invalid JSON or read error, skip to next config file
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Cache and return configuration
|
|
74
|
+
cachedConfig = { requireApproval };
|
|
75
|
+
return cachedConfig;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Clear cached configuration (useful for testing)
|
|
79
|
+
*/
|
|
80
|
+
export function clearConfigCache() {
|
|
81
|
+
cachedConfig = null;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAqB7B,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,SAAS;IACvB,oCAAoC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,yCAAyC;IACzC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC/C,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,yCAAyC;QACzC,MAAM,WAAW,GAAG;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,EAAY,oBAAoB;YACtE,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAgB,iBAAiB;SACpE,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,UAAU,GAAe,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC7E,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;wBAC7C,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;wBAC7C,MAAM,CAAC,8BAA8B;oBACvC,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,uDAAuD;oBACvD,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,YAAY,GAAG,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecomcoder-cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI tools for EcomCoder - Shopify development utilities",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"form-data": "^4.0.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
+
"@types/form-data": "^2.2.1",
|
|
57
58
|
"@types/node": "^20.10.0",
|
|
58
59
|
"@vitest/coverage-v8": "^2.1.9",
|
|
59
60
|
"tsx": "^4.21.0",
|