@bolta-io/cli 0.1.1 → 0.3.0
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/CHANGELOG.md +12 -0
- package/CLAUDE.md +35 -31
- package/README.md +26 -27
- package/dist/bin/bolta.js +14 -29
- package/dist/bin/bolta.js.map +1 -1
- package/dist/src/client/bolta-client.d.ts +24 -27
- package/dist/src/client/bolta-client.d.ts.map +1 -1
- package/dist/src/client/bolta-client.js +106 -84
- package/dist/src/client/bolta-client.js.map +1 -1
- package/dist/src/commands/cash-receipt/cancel.js +3 -3
- package/dist/src/commands/cash-receipt/cancel.js.map +1 -1
- package/dist/src/commands/cash-receipt/issue.js +3 -3
- package/dist/src/commands/cash-receipt/issue.js.map +1 -1
- package/dist/src/commands/cash-receipt/status.d.ts.map +1 -1
- package/dist/src/commands/cash-receipt/status.js +3 -8
- package/dist/src/commands/cash-receipt/status.js.map +1 -1
- package/dist/src/commands/certificate/index.d.ts.map +1 -1
- package/dist/src/commands/certificate/index.js +19 -42
- package/dist/src/commands/certificate/index.js.map +1 -1
- package/dist/src/commands/config/index.d.ts.map +1 -1
- package/dist/src/commands/config/index.js +17 -54
- package/dist/src/commands/config/index.js.map +1 -1
- package/dist/src/commands/examples/index.d.ts.map +1 -1
- package/dist/src/commands/examples/index.js +8 -9
- package/dist/src/commands/examples/index.js.map +1 -1
- package/dist/src/commands/guide/index.d.ts.map +1 -1
- package/dist/src/commands/guide/index.js +35 -29
- package/dist/src/commands/guide/index.js.map +1 -1
- package/dist/src/commands/invoice/amend.d.ts.map +1 -1
- package/dist/src/commands/invoice/amend.js +25 -33
- package/dist/src/commands/invoice/amend.js.map +1 -1
- package/dist/src/commands/invoice/get.d.ts.map +1 -1
- package/dist/src/commands/invoice/get.js +2 -7
- package/dist/src/commands/invoice/get.js.map +1 -1
- package/dist/src/commands/invoice/index.d.ts.map +1 -1
- package/dist/src/commands/invoice/index.js +10 -6
- package/dist/src/commands/invoice/index.js.map +1 -1
- package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
- package/dist/src/commands/invoice/issue-request.js +6 -16
- package/dist/src/commands/invoice/issue-request.js.map +1 -1
- package/dist/src/commands/invoice/issue.d.ts.map +1 -1
- package/dist/src/commands/invoice/issue.js +6 -16
- package/dist/src/commands/invoice/issue.js.map +1 -1
- package/dist/src/commands/invoice/reference-id.d.ts +2 -0
- package/dist/src/commands/invoice/reference-id.d.ts.map +1 -0
- package/dist/src/commands/invoice/reference-id.js +8 -0
- package/dist/src/commands/invoice/reference-id.js.map +1 -0
- package/dist/src/commands/invoice/status.d.ts.map +1 -1
- package/dist/src/commands/invoice/status.js +6 -8
- package/dist/src/commands/invoice/status.js.map +1 -1
- package/dist/src/commands/issuer/create.d.ts +4 -0
- package/dist/src/commands/issuer/create.d.ts.map +1 -0
- package/dist/src/commands/issuer/create.js +24 -0
- package/dist/src/commands/issuer/create.js.map +1 -0
- package/dist/src/commands/issuer/get.d.ts +3 -0
- package/dist/src/commands/issuer/get.d.ts.map +1 -0
- package/dist/src/commands/issuer/get.js +14 -0
- package/dist/src/commands/issuer/get.js.map +1 -0
- package/dist/src/commands/issuer/index.d.ts +3 -0
- package/dist/src/commands/issuer/index.d.ts.map +1 -0
- package/dist/src/commands/issuer/index.js +31 -0
- package/dist/src/commands/issuer/index.js.map +1 -0
- package/dist/src/commands/schema/index.d.ts.map +1 -1
- package/dist/src/commands/schema/index.js +3 -4
- package/dist/src/commands/schema/index.js.map +1 -1
- package/dist/src/commands/supplier/legacy.d.ts +3 -0
- package/dist/src/commands/supplier/legacy.d.ts.map +1 -0
- package/dist/src/commands/supplier/legacy.js +75 -0
- package/dist/src/commands/supplier/legacy.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +7 -9
- package/dist/src/config/config-manager.d.ts.map +1 -1
- package/dist/src/config/config-manager.js +28 -48
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/types/api.d.ts +40 -7
- package/dist/src/types/api.d.ts.map +1 -1
- package/dist/src/utils/client.d.ts +10 -15
- package/dist/src/utils/client.d.ts.map +1 -1
- package/dist/src/utils/client.js +26 -8
- package/dist/src/utils/client.js.map +1 -1
- package/dist/src/utils/errors.d.ts +1 -1
- package/dist/src/utils/errors.d.ts.map +1 -1
- package/dist/src/utils/errors.js +2 -2
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/legacy-issuer.d.ts +28 -0
- package/dist/src/utils/legacy-issuer.d.ts.map +1 -0
- package/dist/src/utils/legacy-issuer.js +45 -0
- package/dist/src/utils/legacy-issuer.js.map +1 -0
- package/dist/src/utils/output.d.ts +7 -3
- package/dist/src/utils/output.d.ts.map +1 -1
- package/dist/src/utils/output.js +14 -4
- package/dist/src/utils/output.js.map +1 -1
- package/dist/src/{commands/cash-receipt/validation.d.ts → validators/parse.d.ts} +1 -1
- package/dist/src/validators/parse.d.ts.map +1 -0
- package/dist/src/{commands/cash-receipt/validation.js → validators/parse.js} +2 -2
- package/dist/src/validators/parse.js.map +1 -0
- package/dist/src/validators/schemas.d.ts +2 -1
- package/dist/src/validators/schemas.d.ts.map +1 -1
- package/dist/src/validators/schemas.js +28 -11
- package/dist/src/validators/schemas.js.map +1 -1
- package/llms.txt +38 -36
- package/package.json +1 -1
- package/dist/src/commands/cash-receipt/validation.d.ts.map +0 -1
- package/dist/src/commands/cash-receipt/validation.js.map +0 -1
- package/dist/src/commands/supplier/create.d.ts +0 -4
- package/dist/src/commands/supplier/create.d.ts.map +0 -1
- package/dist/src/commands/supplier/create.js +0 -40
- package/dist/src/commands/supplier/create.js.map +0 -1
- package/dist/src/commands/supplier/get.d.ts +0 -3
- package/dist/src/commands/supplier/get.d.ts.map +0 -1
- package/dist/src/commands/supplier/get.js +0 -19
- package/dist/src/commands/supplier/get.js.map +0 -1
- package/dist/src/commands/supplier/index.d.ts +0 -3
- package/dist/src/commands/supplier/index.d.ts.map +0 -1
- package/dist/src/commands/supplier/index.js +0 -56
- package/dist/src/commands/supplier/index.js.map +0 -1
- package/dist/src/commands/supplier/legacy-customer.d.ts +0 -5
- package/dist/src/commands/supplier/legacy-customer.d.ts.map +0 -1
- package/dist/src/commands/supplier/legacy-customer.js +0 -56
- package/dist/src/commands/supplier/legacy-customer.js.map +0 -1
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import { loadConfig, saveConfig, resolveApiKey, resolveBaseUrl, maskApiKey,
|
|
2
|
-
import { outputSuccess, outputError,
|
|
1
|
+
import { loadConfig, saveConfig, resolveApiKey, resolveBaseUrl, maskApiKey, } from '../../config/config-manager.js';
|
|
2
|
+
import { outputSuccess, outputError, legacyIssuerWarning } from '../../utils/output.js';
|
|
3
3
|
import { BoltaClient } from '../../client/bolta-client.js';
|
|
4
4
|
import { BoltaError, BoltaApiError } from '../../utils/errors.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
function replaceLegacyIssuerKey(config, key, value) {
|
|
6
|
+
delete config.supplierKey;
|
|
7
|
+
delete config.customerKey;
|
|
7
8
|
if (!value)
|
|
8
9
|
return;
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
legacyIssuerWarning(`'config set ${key}'`);
|
|
11
|
+
if (key === 'supplier-key') {
|
|
12
|
+
config.supplierKey = value;
|
|
11
13
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
else {
|
|
15
|
+
config.customerKey = value;
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
export function registerConfigCommands(program) {
|
|
17
19
|
const config = program.command('config').description('CLI 설정 관리');
|
|
18
20
|
config
|
|
19
21
|
.command('set <key> <value>')
|
|
20
|
-
.description('설정값 저장 (api-key,
|
|
22
|
+
.description('설정값 저장 (api-key, base-url, update-check)')
|
|
21
23
|
.addHelpText('after', `
|
|
22
24
|
Examples:
|
|
23
25
|
bolta config set api-key test_your_key_here
|
|
24
|
-
bolta config set supplier-key SupplierKey_abc123
|
|
25
26
|
bolta config set base-url https://xapi.bolta.io/v1
|
|
26
27
|
bolta config set update-check false`)
|
|
27
28
|
.action(async (key, value) => {
|
|
@@ -34,16 +35,9 @@ Examples:
|
|
|
34
35
|
current.apiKey = trimmedValue;
|
|
35
36
|
break;
|
|
36
37
|
case 'supplier-key':
|
|
37
|
-
warnIfSuspiciousSupplierKey(trimmedValue);
|
|
38
|
-
current.supplierKey = trimmedValue;
|
|
39
|
-
// 구 필드가 남아있으면 정리
|
|
40
|
-
delete current.customerKey;
|
|
41
|
-
break;
|
|
42
38
|
case 'customer-key':
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
current.supplierKey = trimmedValue;
|
|
46
|
-
delete current.customerKey;
|
|
39
|
+
// 두 레거시 이름은 하나의 설정이다. 마지막으로 입력한 이름과 값만 보존한다.
|
|
40
|
+
replaceLegacyIssuerKey(current, key, trimmedValue);
|
|
47
41
|
break;
|
|
48
42
|
case 'base-url':
|
|
49
43
|
current.baseUrl = trimmedValue;
|
|
@@ -55,7 +49,7 @@ Examples:
|
|
|
55
49
|
current.updateCheck = value === 'true';
|
|
56
50
|
break;
|
|
57
51
|
default:
|
|
58
|
-
throw new BoltaError(`알 수 없는 설정 키: ${key}`, 'CONFIG_ERROR', 'api-key,
|
|
52
|
+
throw new BoltaError(`알 수 없는 설정 키: ${key}`, 'CONFIG_ERROR', 'api-key, base-url, update-check 중 하나를 사용하세요.');
|
|
59
53
|
}
|
|
60
54
|
saveConfig(current);
|
|
61
55
|
outputSuccess({ key, message: '설정이 저장되었습니다.' });
|
|
@@ -70,17 +64,14 @@ Examples:
|
|
|
70
64
|
.action(() => {
|
|
71
65
|
try {
|
|
72
66
|
const apiKey = resolveApiKey();
|
|
73
|
-
const supplier = resolveSupplierKeyWithSource();
|
|
74
67
|
const baseUrl = resolveBaseUrl();
|
|
75
68
|
const savedConfig = loadConfig();
|
|
76
69
|
outputSuccess({
|
|
77
70
|
apiKey: apiKey ? maskApiKey(apiKey) : '(미설정)',
|
|
78
|
-
supplierKey: supplier.value ? maskApiKey(supplier.value) : '(미설정)',
|
|
79
71
|
baseUrl,
|
|
80
72
|
updateCheck: savedConfig.updateCheck !== false,
|
|
81
73
|
source: {
|
|
82
74
|
apiKey: apiKey ? (process.env.BOLTA_API_KEY ? 'env' : 'config') : 'none',
|
|
83
|
-
supplierKey: supplierKeySourceLabel(supplier.source),
|
|
84
75
|
},
|
|
85
76
|
});
|
|
86
77
|
}
|
|
@@ -98,11 +89,11 @@ Examples:
|
|
|
98
89
|
throw new BoltaError('API 키가 설정되지 않았습니다.', 'AUTH_ERROR', "BOLTA_API_KEY 환경변수를 설정하거나 'bolta config set api-key <key>'를 실행하세요.");
|
|
99
90
|
}
|
|
100
91
|
const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl() });
|
|
101
|
-
//
|
|
102
|
-
//
|
|
92
|
+
// API 키 인증 점검: 존재하지 않는 발급자를 조회한다.
|
|
93
|
+
// 서버는 404 또는 403을 반환하므로,
|
|
103
94
|
// 인증 실패를 뜻하는 401은 AUTH_ERROR로, 403/404는 "인증됨"으로 판정한다.
|
|
104
95
|
try {
|
|
105
|
-
await client.
|
|
96
|
+
await client.getIssuer('__auth_probe__');
|
|
106
97
|
}
|
|
107
98
|
catch (err) {
|
|
108
99
|
if (err instanceof BoltaApiError && err.statusCode === 401) {
|
|
@@ -113,37 +104,9 @@ Examples:
|
|
|
113
104
|
throw err;
|
|
114
105
|
}
|
|
115
106
|
}
|
|
116
|
-
// 2) supplierKey가 설정돼 있으면 이 API 키로 유효한지 실제 조회한다.
|
|
117
|
-
const supplier = resolveSupplierKeyWithSource();
|
|
118
|
-
let supplierKeyResult;
|
|
119
|
-
if (!supplier.value) {
|
|
120
|
-
supplierKeyResult = { configured: false };
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
const source = supplierKeySourceLabel(supplier.source);
|
|
124
|
-
try {
|
|
125
|
-
await client.getSupplier(supplier.value);
|
|
126
|
-
supplierKeyResult = { configured: true, source, valid: true, message: 'supplierKey가 유효합니다.' };
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
if (err instanceof BoltaApiError && (err.statusCode === 403 || err.statusCode === 404)) {
|
|
130
|
-
supplierKeyResult = {
|
|
131
|
-
configured: true,
|
|
132
|
-
source,
|
|
133
|
-
valid: false,
|
|
134
|
-
message: '이 API 키로는 존재하지 않거나 사용할 수 없는 supplierKey입니다. supplierKey는 test_/live_ 및 API 키마다 다릅니다. ' +
|
|
135
|
-
'환경변수 BOLTA_SUPPLIER_KEY/BOLTA_CUSTOMER_KEY가 config를 덮고 있지 않은지 확인하세요.',
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
throw err;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
107
|
outputSuccess({
|
|
144
108
|
authenticated: true,
|
|
145
109
|
message: 'API 인증이 정상입니다.',
|
|
146
|
-
supplierKey: supplierKeyResult,
|
|
147
110
|
});
|
|
148
111
|
}
|
|
149
112
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/examples/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/examples/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoPpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { outputSuccess, outputError,
|
|
1
|
+
import { outputSuccess, outputError, resolveLegacyIssuerName, LEGACY_ISSUER_CREATE_ALIASES, } from '../../utils/output.js';
|
|
2
2
|
import { BoltaError } from '../../utils/errors.js';
|
|
3
3
|
function today() {
|
|
4
4
|
return new Date().toISOString().slice(0, 10);
|
|
@@ -7,8 +7,8 @@ function buildExamples() {
|
|
|
7
7
|
const d = today();
|
|
8
8
|
const [year, month] = d.split('-');
|
|
9
9
|
return {
|
|
10
|
-
'
|
|
11
|
-
description: '
|
|
10
|
+
'issuer-create': {
|
|
11
|
+
description: '발급자 등록',
|
|
12
12
|
data: {
|
|
13
13
|
identificationNumber: '1234567890',
|
|
14
14
|
organizationName: '주식회사 테스트',
|
|
@@ -30,7 +30,7 @@ function buildExamples() {
|
|
|
30
30
|
businessType: '서비스업',
|
|
31
31
|
businessItem: '소프트웨어 개발',
|
|
32
32
|
manager: {
|
|
33
|
-
email: '
|
|
33
|
+
email: 'seller@example.com',
|
|
34
34
|
name: '김매니저',
|
|
35
35
|
telephone: '010-1234-5678',
|
|
36
36
|
},
|
|
@@ -80,7 +80,7 @@ function buildExamples() {
|
|
|
80
80
|
businessType: '서비스업',
|
|
81
81
|
businessItem: '소프트웨어 개발',
|
|
82
82
|
manager: {
|
|
83
|
-
email: '
|
|
83
|
+
email: 'seller@example.com',
|
|
84
84
|
name: '김매니저',
|
|
85
85
|
telephone: null,
|
|
86
86
|
},
|
|
@@ -126,7 +126,7 @@ function buildExamples() {
|
|
|
126
126
|
identificationNumber: '1234567890',
|
|
127
127
|
organizationName: '공급자 주식회사',
|
|
128
128
|
representativeName: '김공급',
|
|
129
|
-
manager: { email: '
|
|
129
|
+
manager: { email: 'seller@example.com' },
|
|
130
130
|
},
|
|
131
131
|
supplied: {
|
|
132
132
|
identificationNumber: '0987654321',
|
|
@@ -239,7 +239,7 @@ export function registerExamplesCommand(program) {
|
|
|
239
239
|
.description('샘플 JSON 데이터 출력 (AI 에이전트용)')
|
|
240
240
|
.addHelpText('after', `
|
|
241
241
|
Available examples:
|
|
242
|
-
|
|
242
|
+
issuer-create 발급자 등록
|
|
243
243
|
invoice-issue 세금계산서 정발행
|
|
244
244
|
invoice-issue-foreign-supplied 외국인등록번호 공급받는자 세금계산서 정발행
|
|
245
245
|
invoice-issue-request 세금계산서 역발행 요청
|
|
@@ -265,8 +265,7 @@ Examples:
|
|
|
265
265
|
outputSuccess({ availableExamples: list });
|
|
266
266
|
return;
|
|
267
267
|
}
|
|
268
|
-
|
|
269
|
-
commandName = resolveDeprecatedName(commandName, { 'customer-create': 'supplier-create' }, '예제');
|
|
268
|
+
commandName = resolveLegacyIssuerName(commandName, LEGACY_ISSUER_CREATE_ALIASES, '예제');
|
|
270
269
|
const example = examples[commandName];
|
|
271
270
|
if (!example) {
|
|
272
271
|
const available = Object.keys(examples).join(', ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/examples/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/examples/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/guide/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,iBAAS,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/guide/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,iBAAS,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAqHtD;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwD3D"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { outputSuccess, outputError,
|
|
1
|
+
import { outputSuccess, outputError, resolveLegacyIssuerName } from '../../utils/output.js';
|
|
2
2
|
import { BoltaError } from '../../utils/errors.js';
|
|
3
3
|
function buildGuideTopics() {
|
|
4
4
|
return {
|
|
5
|
-
|
|
6
|
-
title: '
|
|
7
|
-
summary: '
|
|
5
|
+
issuer: {
|
|
6
|
+
title: '발급자 이해하기',
|
|
7
|
+
summary: '발급자는 세금계산서나 현금영수증 발행에 사용하는 인증서의 소유자입니다.',
|
|
8
8
|
details: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
등록방법: '발급할 사업자 정보로 bolta issuer create 호출 → 응답의 issuerId 저장',
|
|
10
|
+
관리방법: 'issuerId는 발급자 조회와 인증서 등록·조회·해제에만 사용',
|
|
11
|
+
발행방법: 'API 키로 인증하고 요청 본문의 사업자등록번호로 발급자를 선택',
|
|
12
|
+
발행주체판별: {
|
|
13
|
+
일반정발행과역발행: 'supplier.identificationNumber',
|
|
14
|
+
현금영수증: 'issuer.businessRegistrationNumber',
|
|
15
|
+
},
|
|
14
16
|
주의사항: [
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'Supplier-Key에 공급받는자의 키를 잘못 전달하지 않도록 주의하세요',
|
|
19
|
-
'test_ 키로 생성한 supplierKey는 live_ 환경에서 사용할 수 없습니다',
|
|
17
|
+
'issuerId는 발행 요청 본문에 넣지 않습니다',
|
|
18
|
+
'일반 정발행과 역발행에서는 supplier.identificationNumber를 정확히 입력하세요',
|
|
19
|
+
'현금영수증에서는 issuer.businessRegistrationNumber를 정확히 입력하세요',
|
|
20
20
|
],
|
|
21
21
|
},
|
|
22
22
|
},
|
|
@@ -40,13 +40,19 @@ function buildGuideTopics() {
|
|
|
40
40
|
steps: [
|
|
41
41
|
{ 순서: 1, 명령어: 'bolta config set api-key <key>', 설명: 'API 키 설정 (test_ 또는 live_ 접두사)' },
|
|
42
42
|
{ 순서: 2, 명령어: 'bolta config test', 설명: 'API 연결 테스트' },
|
|
43
|
-
{ 순서: 3, 명령어: 'bolta
|
|
44
|
-
{ 순서: 4, 명령어: 'bolta
|
|
45
|
-
{ 순서: 5,
|
|
46
|
-
{ 순서: 6,
|
|
47
|
-
{ 순서: 7, 명령어: 'bolta invoice
|
|
43
|
+
{ 순서: 3, 명령어: 'bolta issuer create --data \'{"identificationNumber":"...", ...}\'', 설명: '발급자 등록 → issuerId 획득' },
|
|
44
|
+
{ 순서: 4, 명령어: 'bolta certificate url <issuerId>', 설명: '공동인증서 등록 URL 조회 (정발행 시 필요)' },
|
|
45
|
+
{ 순서: 5, 설명: '포인트 충전 (라이브 키 사용 시). https://developers.bolta.io 개발자센터에서 충전' },
|
|
46
|
+
{ 순서: 6, 명령어: 'bolta invoice issue --reference-id <id> --data \'<세금계산서 JSON>\'', 설명: '사용하지 않은 요청자 관리번호로 세금계산서 정발행' },
|
|
47
|
+
{ 순서: 7, 명령어: 'bolta invoice status --reference-id <id>', 설명: '응답을 받지 못했거나 본문을 읽지 못했을 때 접수 여부 확인' },
|
|
48
48
|
{ 순서: 8, 명령어: 'bolta invoice get <issuanceKey>', 설명: '발행 결과 확인 (국세청 승인번호 포함)' },
|
|
49
49
|
],
|
|
50
|
+
요청자관리번호: [
|
|
51
|
+
'앞뒤 공백 없는 출력 가능한 ASCII 1~255자이며 선택 사항입니다',
|
|
52
|
+
'같은 API 키의 정발행·역발행·수정발행에서 이미 사용한 값을 재사용할 수 없습니다',
|
|
53
|
+
'중복 요청은 400 INVALID_REQUEST를 반환합니다',
|
|
54
|
+
'응답을 받지 못했거나 본문을 읽지 못했다면 같은 요청을 다시 보내지 말고 status 명령으로 확인하세요',
|
|
55
|
+
],
|
|
50
56
|
},
|
|
51
57
|
},
|
|
52
58
|
'cash-receipt': {
|
|
@@ -54,9 +60,9 @@ function buildGuideTopics() {
|
|
|
54
60
|
summary: '현금영수증 발행, 상태 조회, 전액 취소 순서를 안내합니다.',
|
|
55
61
|
details: {
|
|
56
62
|
사전준비: [
|
|
57
|
-
'API
|
|
58
|
-
'
|
|
59
|
-
'issuer.businessRegistrationNumber
|
|
63
|
+
'API 키를 설정하세요',
|
|
64
|
+
'현금영수증 발급자를 등록하고 인증서를 등록하세요',
|
|
65
|
+
'issuer.businessRegistrationNumber에는 등록한 발급자의 사업자등록번호를 입력하세요',
|
|
60
66
|
],
|
|
61
67
|
steps: [
|
|
62
68
|
{
|
|
@@ -99,11 +105,12 @@ function buildGuideTopics() {
|
|
|
99
105
|
details: {
|
|
100
106
|
용어: [
|
|
101
107
|
{ 용어: 'apiKey', 설명: 'Bolta API 인증 키. test_(샌드박스) 또는 live_(프로덕션) 접두사' },
|
|
102
|
-
{ 용어: '
|
|
108
|
+
{ 용어: 'issuerId', 설명: '등록한 발급자를 식별하는 값. 발급자 조회와 인증서 관리에 사용' },
|
|
103
109
|
{ 용어: 'issuanceKey', 설명: '세금계산서나 현금영수증 요청 후 반환되는 고유 식별자. 조회·수정·취소 시 사용' },
|
|
110
|
+
{ 용어: 'clientReferenceId', 설명: '발행 요청을 구분하는 요청자 관리번호. 세금계산서에서는 같은 API 키 안에서 발행 요청마다 새 값을 사용' },
|
|
104
111
|
{ 용어: 'identificationNumber', 설명: '사업자등록번호 (10자리). 세금계산서의 공급자/공급받는자 식별에 사용' },
|
|
105
|
-
{ 용어: 'supplier (공급자)', 설명: '
|
|
106
|
-
{ 용어: 'supplied (공급받는자)', 설명: '세금계산서를 받는 거래처.
|
|
112
|
+
{ 용어: 'supplier (공급자)', 설명: '세금계산서에서 재화나 용역을 공급하는 측. invoice JSON의 supplier 필드' },
|
|
113
|
+
{ 용어: 'supplied (공급받는자)', 설명: '세금계산서를 받는 거래처. invoice JSON의 supplied 필드' },
|
|
107
114
|
{ 용어: 'purpose', 설명: 'CLAIM(청구용) 또는 RECEIPT(영수용)' },
|
|
108
115
|
{ 용어: 'ntsTransactionId', 설명: '국세청 승인번호. 발행 완료 후 부여됨' },
|
|
109
116
|
],
|
|
@@ -118,7 +125,7 @@ export function registerGuideCommand(program) {
|
|
|
118
125
|
.description('주요 개념 및 사용법 안내')
|
|
119
126
|
.addHelpText('after', `
|
|
120
127
|
Available topics:
|
|
121
|
-
|
|
128
|
+
issuer 발급자 이해하기
|
|
122
129
|
payment 요금 안내 및 포인트 충전
|
|
123
130
|
workflow 전자세금계산서 발행 워크플로우
|
|
124
131
|
cash-receipt 현금영수증 발행 워크플로우
|
|
@@ -126,7 +133,7 @@ Available topics:
|
|
|
126
133
|
|
|
127
134
|
Examples:
|
|
128
135
|
bolta guide # 사용 가능한 토픽 목록
|
|
129
|
-
bolta guide
|
|
136
|
+
bolta guide issuer # 발급자 개념 안내
|
|
130
137
|
bolta guide payment # 요금 및 포인트 충전 안내`)
|
|
131
138
|
.action((topicName) => {
|
|
132
139
|
try {
|
|
@@ -140,8 +147,7 @@ Examples:
|
|
|
140
147
|
outputSuccess({ availableTopics: list });
|
|
141
148
|
return;
|
|
142
149
|
}
|
|
143
|
-
|
|
144
|
-
topicName = resolveDeprecatedName(topicName, { 'customer-key': 'supplier-key' }, 'guide 토픽');
|
|
150
|
+
topicName = resolveLegacyIssuerName(topicName, { 'supplier-key': 'issuer', 'customer-key': 'issuer' }, 'guide 토픽');
|
|
145
151
|
const topic = topics[topicName];
|
|
146
152
|
if (!topic) {
|
|
147
153
|
const available = Object.keys(topics).join(', ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/guide/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/guide/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amend.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/amend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"amend.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/amend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI5D"}
|
|
@@ -2,34 +2,28 @@ import { createClient } from '../../utils/client.js';
|
|
|
2
2
|
import { resolveInput } from '../../utils/input.js';
|
|
3
3
|
import { outputSuccess, outputError, verbose } from '../../utils/output.js';
|
|
4
4
|
import { amendTerminationSchema, amendChangeSupplyCostSchema } from '../../validators/schemas.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { parseOrThrow } from '../../validators/parse.js';
|
|
6
|
+
import { parseOptionalTaxInvoiceReferenceId } from './reference-id.js';
|
|
7
7
|
export function registerAmendCommands(invoice) {
|
|
8
8
|
const amend = invoice.command('amend').description('세금계산서 수정 발행');
|
|
9
9
|
amend
|
|
10
10
|
.command('termination <issuanceKey>')
|
|
11
11
|
.description('수정발행: 계약 해제 (POST /v1/taxInvoices/{issuanceKey}/amend/termination)\n ⚠ 원본 세금계산서의 품목 공급가액이 음수인 경우 사용 불가')
|
|
12
12
|
.requiredOption('--date <date>', '계약 해제일 (YYYY-MM-DD)')
|
|
13
|
+
.option('--reference-id <id>', '선택형 요청자 관리번호 (앞뒤 공백 없는 출력 가능한 ASCII 1~255자)')
|
|
13
14
|
.addHelpText('after', `
|
|
14
15
|
⚠ 주의: 원본 세금계산서의 품목 공급가액(supplyCost)이 음수인 경우,
|
|
15
16
|
계약 해제 수정발행이 불가합니다.
|
|
17
|
+
요청자 관리번호는 같은 API 키의 다른 세금계산서 발행 요청과 중복될 수 없습니다.
|
|
18
|
+
응답을 받지 못했거나 본문을 읽지 못했다면 재전송하지 말고 invoice status로 접수 여부를 확인하세요.
|
|
16
19
|
|
|
17
20
|
Example:
|
|
18
|
-
bolta invoice amend termination 8D529FAD3EBAE050 --date 2026-03-25`)
|
|
21
|
+
bolta invoice amend termination 8D529FAD3EBAE050 --date 2026-03-25 --reference-id amend-2026-001`)
|
|
19
22
|
.action(async (issuanceKey, options, command) => {
|
|
20
23
|
try {
|
|
21
24
|
const globalOpts = command.optsWithGlobals();
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
validated = amendTerminationSchema.parse({ date: options.date });
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
if (err instanceof ZodError) {
|
|
28
|
-
const details = Object.fromEntries(err.errors.map((e) => [e.path.join('.'), e.message]));
|
|
29
|
-
throw new BoltaValidationError('입력 데이터가 유효하지 않습니다.', details);
|
|
30
|
-
}
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
25
|
+
const referenceId = parseOptionalTaxInvoiceReferenceId(options.referenceId);
|
|
26
|
+
const validated = parseOrThrow(amendTerminationSchema, { date: options.date });
|
|
33
27
|
if (globalOpts.dryRun) {
|
|
34
28
|
outputSuccess({
|
|
35
29
|
dryRun: true,
|
|
@@ -39,8 +33,8 @@ Example:
|
|
|
39
33
|
return;
|
|
40
34
|
}
|
|
41
35
|
verbose('수정발행 (계약 해제) 요청', { issuanceKey });
|
|
42
|
-
const
|
|
43
|
-
const result = await client.amendTermination(issuanceKey, validated,
|
|
36
|
+
const client = createClient(globalOpts);
|
|
37
|
+
const result = await client.amendTermination(issuanceKey, validated, { referenceId });
|
|
44
38
|
outputSuccess(result);
|
|
45
39
|
}
|
|
46
40
|
catch (err) {
|
|
@@ -53,12 +47,15 @@ Example:
|
|
|
53
47
|
.option('--data <json>', '인라인 JSON 데이터')
|
|
54
48
|
.option('--file <path>', 'JSON 파일 경로')
|
|
55
49
|
.option('--stdin', '표준 입력에서 읽기')
|
|
50
|
+
.option('--reference-id <id>', '선택형 요청자 관리번호 (앞뒤 공백 없는 출력 가능한 ASCII 1~255자)')
|
|
56
51
|
.addHelpText('after', `
|
|
57
52
|
Note:
|
|
58
53
|
taxType은 TAXABLE(과세), ZERO_RATE(영세율), TAX_FREE(면세) 중 하나입니다.
|
|
54
|
+
요청자 관리번호는 같은 API 키의 다른 세금계산서 발행 요청과 중복될 수 없습니다.
|
|
55
|
+
응답을 받지 못했거나 본문을 읽지 못했다면 재전송하지 말고 invoice status로 접수 여부를 확인하세요.
|
|
59
56
|
|
|
60
57
|
Example:
|
|
61
|
-
bolta invoice amend change-supply-cost 8D529FAD3EBAE050 --data '{
|
|
58
|
+
bolta invoice amend change-supply-cost 8D529FAD3EBAE050 --reference-id amend-2026-002 --data '{
|
|
62
59
|
"date": "2026-03-25",
|
|
63
60
|
"taxType": "TAXABLE",
|
|
64
61
|
"items": [{
|
|
@@ -71,18 +68,9 @@ Example:
|
|
|
71
68
|
.action(async (issuanceKey, options, command) => {
|
|
72
69
|
try {
|
|
73
70
|
const globalOpts = command.optsWithGlobals();
|
|
71
|
+
const referenceId = parseOptionalTaxInvoiceReferenceId(options.referenceId);
|
|
74
72
|
const raw = await resolveInput(options);
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
validated = amendChangeSupplyCostSchema.parse(raw);
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
if (err instanceof ZodError) {
|
|
81
|
-
const details = Object.fromEntries(err.errors.map((e) => [e.path.join('.'), e.message]));
|
|
82
|
-
throw new BoltaValidationError('입력 데이터가 유효하지 않습니다.', details);
|
|
83
|
-
}
|
|
84
|
-
throw err;
|
|
85
|
-
}
|
|
73
|
+
const validated = parseOrThrow(amendChangeSupplyCostSchema, raw);
|
|
86
74
|
if (globalOpts.dryRun) {
|
|
87
75
|
outputSuccess({
|
|
88
76
|
dryRun: true,
|
|
@@ -92,8 +80,8 @@ Example:
|
|
|
92
80
|
return;
|
|
93
81
|
}
|
|
94
82
|
verbose('수정발행 (공급가액 변동) 요청', { issuanceKey });
|
|
95
|
-
const
|
|
96
|
-
const result = await client.amendChangeSupplyCost(issuanceKey, validated,
|
|
83
|
+
const client = createClient(globalOpts);
|
|
84
|
+
const result = await client.amendChangeSupplyCost(issuanceKey, validated, { referenceId });
|
|
97
85
|
outputSuccess(result);
|
|
98
86
|
}
|
|
99
87
|
catch (err) {
|
|
@@ -103,15 +91,19 @@ Example:
|
|
|
103
91
|
amend
|
|
104
92
|
.command('double-issuance <issuanceKey>')
|
|
105
93
|
.description('수정발행: 착오에 의한 이중발급 (POST /v1/taxInvoices/{issuanceKey}/amend/doubleIssuance)')
|
|
94
|
+
.option('--reference-id <id>', '선택형 요청자 관리번호 (앞뒤 공백 없는 출력 가능한 ASCII 1~255자)')
|
|
106
95
|
.addHelpText('after', `
|
|
107
96
|
이 수정발행은 입력 데이터가 필요하지 않습니다.
|
|
108
97
|
원본 세금계산서의 공급가액이 자동으로 상계(마이너스) 처리됩니다.
|
|
98
|
+
요청자 관리번호는 같은 API 키의 다른 세금계산서 발행 요청과 중복될 수 없습니다.
|
|
99
|
+
응답을 받지 못했거나 본문을 읽지 못했다면 재전송하지 말고 invoice status로 접수 여부를 확인하세요.
|
|
109
100
|
|
|
110
101
|
Example:
|
|
111
|
-
bolta invoice amend double-issuance 8D529FAD3EBAE050`)
|
|
102
|
+
bolta invoice amend double-issuance 8D529FAD3EBAE050 --reference-id amend-2026-003`)
|
|
112
103
|
.action(async (issuanceKey, options, command) => {
|
|
113
104
|
try {
|
|
114
105
|
const globalOpts = command.optsWithGlobals();
|
|
106
|
+
const referenceId = parseOptionalTaxInvoiceReferenceId(options.referenceId);
|
|
115
107
|
if (globalOpts.dryRun) {
|
|
116
108
|
outputSuccess({
|
|
117
109
|
dryRun: true,
|
|
@@ -121,8 +113,8 @@ Example:
|
|
|
121
113
|
return;
|
|
122
114
|
}
|
|
123
115
|
verbose('수정발행 (착오에 의한 이중발급) 요청', { issuanceKey });
|
|
124
|
-
const
|
|
125
|
-
const result = await client.amendDoubleIssuance(issuanceKey,
|
|
116
|
+
const client = createClient(globalOpts);
|
|
117
|
+
const result = await client.amendDoubleIssuance(issuanceKey, { referenceId });
|
|
126
118
|
outputSuccess(result);
|
|
127
119
|
}
|
|
128
120
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amend.js","sourceRoot":"","sources":["../../../../src/commands/invoice/amend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"amend.js","sourceRoot":"","sources":["../../../../src/commands/invoice/amend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7H"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BoltaClient } from '../../client/bolta-client.js';
|
|
1
|
+
import { createApiKeyClient } from '../../utils/client.js';
|
|
3
2
|
import { outputSuccess, outputError } from '../../utils/output.js';
|
|
4
|
-
import { BoltaAuthError } from '../../utils/errors.js';
|
|
5
3
|
export async function getInvoiceAction(issuanceKey, options, command) {
|
|
6
4
|
try {
|
|
7
5
|
const globalOpts = command.optsWithGlobals();
|
|
8
|
-
const
|
|
9
|
-
if (!apiKey)
|
|
10
|
-
throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
|
|
11
|
-
const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl() });
|
|
6
|
+
const client = createApiKeyClient(globalOpts);
|
|
12
7
|
const result = await client.getTaxInvoice(issuanceKey);
|
|
13
8
|
outputSuccess(result);
|
|
14
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAAgC,EAAE,OAAgB;IAC5G,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgF9D"}
|