@bolta-io/cli 0.1.1 → 0.2.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 +6 -0
- package/CLAUDE.md +16 -22
- package/README.md +13 -19
- package/dist/bin/bolta.js +14 -29
- package/dist/bin/bolta.js.map +1 -1
- package/dist/src/client/bolta-client.d.ts +19 -21
- package/dist/src/client/bolta-client.d.ts.map +1 -1
- package/dist/src/client/bolta-client.js +47 -50
- 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 +28 -30
- 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 +9 -30
- 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.js +1 -1
- package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
- package/dist/src/commands/invoice/issue-request.js +3 -15
- 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 +3 -15
- package/dist/src/commands/invoice/issue.js.map +1 -1
- package/dist/src/commands/invoice/status.d.ts.map +1 -1
- package/dist/src/commands/invoice/status.js +2 -7
- 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/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 +1 -1
- package/dist/src/validators/schemas.d.ts.map +1 -1
- package/dist/src/validators/schemas.js +21 -11
- package/dist/src/validators/schemas.js.map +1 -1
- package/llms.txt +26 -33
- 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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createApiKeyClient } from '../../utils/client.js';
|
|
2
|
+
import { resolveInput } from '../../utils/input.js';
|
|
3
|
+
import { legacyIssuerWarning, outputError, outputSuccess, verbose } from '../../utils/output.js';
|
|
4
|
+
import { createIssuerSchema } from '../../validators/schemas.js';
|
|
5
|
+
import { parseOrThrow } from '../../validators/parse.js';
|
|
6
|
+
/**
|
|
7
|
+
* 레거시 명령 실행을 경고하고 클라이언트를 만든다.
|
|
8
|
+
*
|
|
9
|
+
* 레거시 키 플래그가 있으면 bin/bolta.ts의 preAction hook이 이미 그 플래그를 경고했으므로
|
|
10
|
+
* 같은 실행에서 두 종류의 전환 경고가 겹치지 않도록 명령 경고는 생략한다.
|
|
11
|
+
*/
|
|
12
|
+
function startLegacyIssuerCommand(legacyCommand, command) {
|
|
13
|
+
const globalOpts = command.optsWithGlobals();
|
|
14
|
+
if (!globalOpts.supplierKey && !globalOpts.customerKey) {
|
|
15
|
+
legacyIssuerWarning(`'bolta ${legacyCommand}' 명령어`);
|
|
16
|
+
}
|
|
17
|
+
return { client: createApiKeyClient(globalOpts), globalOpts };
|
|
18
|
+
}
|
|
19
|
+
async function createLegacyIssuerAction(legacyCommand, options, command) {
|
|
20
|
+
try {
|
|
21
|
+
const { client, globalOpts } = startLegacyIssuerCommand(legacyCommand, command);
|
|
22
|
+
const raw = await resolveInput(options);
|
|
23
|
+
const validated = parseOrThrow(createIssuerSchema, raw);
|
|
24
|
+
if (globalOpts.dryRun) {
|
|
25
|
+
outputSuccess({
|
|
26
|
+
dryRun: true,
|
|
27
|
+
requestBody: validated,
|
|
28
|
+
endpoint: `POST /v1/${legacyCommand === 'supplier' ? 'suppliers' : 'customers'}`,
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
verbose('레거시 발급자 등록 요청', {
|
|
33
|
+
command: legacyCommand,
|
|
34
|
+
identificationNumber: validated.identificationNumber,
|
|
35
|
+
});
|
|
36
|
+
const result = legacyCommand === 'supplier'
|
|
37
|
+
? await client.createSupplier(validated)
|
|
38
|
+
: await client.createCustomer(validated);
|
|
39
|
+
outputSuccess(result);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
outputError(err);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function getLegacyIssuerAction(legacyCommand, issuerId, command) {
|
|
46
|
+
try {
|
|
47
|
+
const { client } = startLegacyIssuerCommand(legacyCommand, command);
|
|
48
|
+
const result = legacyCommand === 'supplier'
|
|
49
|
+
? await client.getSupplier(issuerId)
|
|
50
|
+
: await client.getCustomer(issuerId);
|
|
51
|
+
outputSuccess(result);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
outputError(err);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function registerLegacyIssuerCommands(program) {
|
|
58
|
+
for (const legacyCommand of ['supplier', 'customer']) {
|
|
59
|
+
const command = program
|
|
60
|
+
.command(legacyCommand, { hidden: true })
|
|
61
|
+
.description('(deprecated) 발급자 관리');
|
|
62
|
+
command
|
|
63
|
+
.command('create')
|
|
64
|
+
.description('(deprecated) 발급자 등록')
|
|
65
|
+
.option('--data <json>', '인라인 JSON 데이터')
|
|
66
|
+
.option('--file <path>', 'JSON 파일 경로')
|
|
67
|
+
.option('--stdin', '표준 입력에서 읽기')
|
|
68
|
+
.action((options, actionCommand) => createLegacyIssuerAction(legacyCommand, options, actionCommand));
|
|
69
|
+
command
|
|
70
|
+
.command('get <issuerId>')
|
|
71
|
+
.description('(deprecated) 발급자 조회')
|
|
72
|
+
.action((issuerId, _options, actionCommand) => getLegacyIssuerAction(legacyCommand, issuerId, actionCommand));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../../src/commands/supplier/legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { BoltaConfig } from '../types/api.js';
|
|
2
|
+
import { type LegacyIssuerKeySource } from '../utils/legacy-issuer.js';
|
|
3
|
+
export type { LegacyIssuerKeySource };
|
|
2
4
|
export declare const CONFIG_DIR: string;
|
|
3
5
|
export declare function loadConfig(): BoltaConfig;
|
|
4
6
|
export declare function saveConfig(config: BoltaConfig): void;
|
|
5
|
-
export
|
|
6
|
-
export interface ResolvedSupplierKey {
|
|
7
|
+
export interface ResolvedLegacyIssuerKey {
|
|
7
8
|
value?: string;
|
|
8
|
-
source:
|
|
9
|
+
source: LegacyIssuerKeySource;
|
|
9
10
|
}
|
|
10
11
|
export declare function resolveApiKey(cliFlag?: string): string | undefined;
|
|
11
12
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
13
|
+
* 2026-12-31까지 지원하는 레거시 발급자 헤더 값을 기존 우선순위대로 해석한다.
|
|
14
|
+
* 값이 발견되면 신규 API 키 단독 인증으로 전환하도록 경고한다.
|
|
14
15
|
*/
|
|
15
|
-
export declare function
|
|
16
|
-
export declare function resolveSupplierKey(cliFlag?: string, legacyCliFlag?: string): string | undefined;
|
|
17
|
-
/** 상세 소스를 사용자 노출용 라벨(flag/env/config/none)로 축약한다. */
|
|
18
|
-
export declare function supplierKeySourceLabel(source: SupplierKeySource): 'flag' | 'env' | 'config' | 'none';
|
|
16
|
+
export declare function resolveLegacyIssuerKeyWithSource(supplierFlag?: string, customerFlag?: string): ResolvedLegacyIssuerKey;
|
|
19
17
|
export declare function resolveBaseUrl(): string;
|
|
20
18
|
export declare function maskApiKey(key: string): string;
|
|
21
19
|
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,UAAU,QAA4B,CAAC;AAGpD,wBAAgB,UAAU,IAAI,WAAW,CAOxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AASD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,uBAAuB,CA+BzB;AAED,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
|
-
import {
|
|
4
|
+
import { legacyIssuerWarning, maskSecret } from '../utils/output.js';
|
|
5
|
+
import { describeLegacyIssuerKeySource, } from '../utils/legacy-issuer.js';
|
|
5
6
|
export const CONFIG_DIR = join(homedir(), '.bolta');
|
|
6
7
|
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
7
8
|
export function loadConfig() {
|
|
@@ -28,57 +29,36 @@ export function resolveApiKey(cliFlag) {
|
|
|
28
29
|
return normalize(cliFlag) || normalize(process.env.BOLTA_API_KEY) || normalize(loadConfig().apiKey);
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
32
|
+
* 2026-12-31까지 지원하는 레거시 발급자 헤더 값을 기존 우선순위대로 해석한다.
|
|
33
|
+
* 값이 발견되면 신규 API 키 단독 인증으로 전환하도록 경고한다.
|
|
33
34
|
*/
|
|
34
|
-
export function
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
export function resolveLegacyIssuerKeyWithSource(supplierFlag, customerFlag) {
|
|
36
|
+
const resolved = (value, source) => {
|
|
37
|
+
// 경고 문구의 출처 표기는 403 안내와 같은 표를 쓴다(문자열 중복 방지).
|
|
38
|
+
legacyIssuerWarning(describeLegacyIssuerKeySource(source).origin);
|
|
39
|
+
return { value, source };
|
|
40
|
+
};
|
|
41
|
+
const normalizedSupplierFlag = normalize(supplierFlag);
|
|
42
|
+
if (normalizedSupplierFlag)
|
|
43
|
+
return resolved(normalizedSupplierFlag, 'supplier-flag');
|
|
44
|
+
const normalizedCustomerFlag = normalize(customerFlag);
|
|
45
|
+
if (normalizedCustomerFlag)
|
|
46
|
+
return resolved(normalizedCustomerFlag, 'customer-flag');
|
|
43
47
|
const config = loadConfig();
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
46
|
-
return
|
|
47
|
-
const
|
|
48
|
-
if (
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const legacyConfig = normalize(config.customerKey);
|
|
57
|
-
if (legacyConfig) {
|
|
58
|
-
deprecationWarning("config의 'customer-key'는 'supplier-key'로 변경되었습니다. 'bolta config set supplier-key <값>'으로 갱신하세요.");
|
|
59
|
-
return { value: legacyConfig, source: 'legacy-config' };
|
|
60
|
-
}
|
|
48
|
+
const supplierEnv = normalize(process.env.BOLTA_SUPPLIER_KEY);
|
|
49
|
+
if (supplierEnv)
|
|
50
|
+
return resolved(supplierEnv, 'supplier-env');
|
|
51
|
+
const supplierConfig = normalize(config.supplierKey);
|
|
52
|
+
if (supplierConfig)
|
|
53
|
+
return resolved(supplierConfig, 'supplier-config');
|
|
54
|
+
const customerEnv = normalize(process.env.BOLTA_CUSTOMER_KEY);
|
|
55
|
+
if (customerEnv)
|
|
56
|
+
return resolved(customerEnv, 'customer-env');
|
|
57
|
+
const customerConfig = normalize(config.customerKey);
|
|
58
|
+
if (customerConfig)
|
|
59
|
+
return resolved(customerConfig, 'customer-config');
|
|
61
60
|
return { source: 'none' };
|
|
62
61
|
}
|
|
63
|
-
export function resolveSupplierKey(cliFlag, legacyCliFlag) {
|
|
64
|
-
return resolveSupplierKeyWithSource(cliFlag, legacyCliFlag).value;
|
|
65
|
-
}
|
|
66
|
-
/** 상세 소스를 사용자 노출용 라벨(flag/env/config/none)로 축약한다. */
|
|
67
|
-
export function supplierKeySourceLabel(source) {
|
|
68
|
-
switch (source) {
|
|
69
|
-
case 'flag':
|
|
70
|
-
case 'legacy-flag':
|
|
71
|
-
return 'flag';
|
|
72
|
-
case 'env':
|
|
73
|
-
case 'legacy-env':
|
|
74
|
-
return 'env';
|
|
75
|
-
case 'config':
|
|
76
|
-
case 'legacy-config':
|
|
77
|
-
return 'config';
|
|
78
|
-
default:
|
|
79
|
-
return 'none';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
62
|
export function resolveBaseUrl() {
|
|
83
63
|
return (normalize(process.env.BOLTA_API_BASE_URL) ||
|
|
84
64
|
normalize(loadConfig().baseUrl) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAa,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types/api.d.ts
CHANGED
|
@@ -119,16 +119,34 @@ export interface AmendChangeSupplyCostRequest {
|
|
|
119
119
|
taxType: TaxInvoiceTaxType;
|
|
120
120
|
items: TaxInvoiceItem[];
|
|
121
121
|
}
|
|
122
|
-
export interface
|
|
122
|
+
export interface CreateIssuerRequest {
|
|
123
123
|
identificationNumber: string;
|
|
124
124
|
organizationName: string;
|
|
125
125
|
representativeName: string;
|
|
126
126
|
taxRegistrationId?: string | null;
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
export interface IssuerResponse {
|
|
129
|
+
issuerId: string;
|
|
130
|
+
identificationNumber: string;
|
|
131
|
+
organizationName: string;
|
|
132
|
+
representativeName: string;
|
|
133
|
+
taxRegistrationId: string | null;
|
|
134
|
+
certificate: {
|
|
135
|
+
issuedAt: string;
|
|
136
|
+
expiresAt: string;
|
|
137
|
+
} | null;
|
|
138
|
+
}
|
|
139
|
+
/** @deprecated 숨김 `supplier` CLI 호환용입니다. */
|
|
140
|
+
export type CreateSupplierRequest = CreateIssuerRequest;
|
|
141
|
+
/**
|
|
142
|
+
* @deprecated 숨김 `supplier` CLI 호환용입니다.
|
|
143
|
+
*
|
|
144
|
+
* 레거시 `/suppliers` 응답은 런타임 검증 없이 그대로 통과시키므로,
|
|
145
|
+
* 형제 타입인 LegacyCustomerResponse와 같은 수준으로 느슨하게 둔다.
|
|
146
|
+
*/
|
|
147
|
+
export interface LegacySupplierResponse {
|
|
131
148
|
supplierKey: string;
|
|
149
|
+
issuerId?: string;
|
|
132
150
|
identificationNumber: string;
|
|
133
151
|
organizationName: string;
|
|
134
152
|
representativeName: string;
|
|
@@ -138,9 +156,12 @@ export interface SupplierResponse {
|
|
|
138
156
|
expiresAt: string;
|
|
139
157
|
};
|
|
140
158
|
}
|
|
141
|
-
/** @deprecated
|
|
159
|
+
/** @deprecated 숨김 `customer` CLI 호환용입니다. */
|
|
160
|
+
export type CreateCustomerRequest = CreateIssuerRequest;
|
|
161
|
+
/** @deprecated 숨김 `customer` CLI 호환용입니다. */
|
|
142
162
|
export interface LegacyCustomerResponse {
|
|
143
163
|
customerKey: string;
|
|
164
|
+
issuerId?: string;
|
|
144
165
|
identificationNumber: string;
|
|
145
166
|
organizationName: string;
|
|
146
167
|
representativeName: string;
|
|
@@ -153,6 +174,16 @@ export interface LegacyCustomerResponse {
|
|
|
153
174
|
export interface CertificateUrlResponse {
|
|
154
175
|
url: string;
|
|
155
176
|
}
|
|
177
|
+
export interface CertificateRegistrationHistory {
|
|
178
|
+
identifier: string;
|
|
179
|
+
issuerId: string;
|
|
180
|
+
occurredAt: string;
|
|
181
|
+
code: string;
|
|
182
|
+
message: string;
|
|
183
|
+
}
|
|
184
|
+
export interface CertificateStatusResponse {
|
|
185
|
+
latestHistory: CertificateRegistrationHistory | null;
|
|
186
|
+
}
|
|
156
187
|
export interface ApiErrorResponse {
|
|
157
188
|
code: string;
|
|
158
189
|
message: string;
|
|
@@ -173,8 +204,9 @@ export interface CliErrorResponse {
|
|
|
173
204
|
export type CliResponse<T = unknown> = CliSuccessResponse<T> | CliErrorResponse;
|
|
174
205
|
export interface BoltaConfig {
|
|
175
206
|
apiKey?: string;
|
|
207
|
+
/** @deprecated 2026-12-31까지 레거시 Supplier-Key 헤더 호환용으로만 유지 */
|
|
176
208
|
supplierKey?: string;
|
|
177
|
-
/** @deprecated
|
|
209
|
+
/** @deprecated 2026-12-31까지 레거시 Customer-Key 설정 호환용으로만 유지 */
|
|
178
210
|
customerKey?: string;
|
|
179
211
|
baseUrl?: string;
|
|
180
212
|
timeout?: number;
|
|
@@ -188,8 +220,9 @@ export interface GlobalOptions {
|
|
|
188
220
|
human?: boolean;
|
|
189
221
|
verbose?: boolean;
|
|
190
222
|
apiKey?: string;
|
|
223
|
+
/** @deprecated 숨김 레거시 옵션 */
|
|
191
224
|
supplierKey?: string;
|
|
192
|
-
/** @deprecated
|
|
225
|
+
/** @deprecated 숨김 레거시 옵션 */
|
|
193
226
|
customerKey?: string;
|
|
194
227
|
dryRun?: boolean;
|
|
195
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,21 +5,16 @@ interface GlobalOptions {
|
|
|
5
5
|
customerKey?: string;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* API 키만으로 클라이언트를 만든다. 레거시 Supplier-Key 헤더는 절대 싣지 않는다.
|
|
9
|
+
*
|
|
10
|
+
* issuer·certificate와 조회 명령처럼 레거시 발급자 헤더가 필요 없는 경로에 사용한다.
|
|
11
|
+
* 남아 있는 구 config(supplier-key)가 이런 요청에 섞여 들어가지 않도록 분리한다.
|
|
11
12
|
*/
|
|
12
|
-
export declare function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export declare function createClient(globalOpts: GlobalOptions, options?: {
|
|
19
|
-
requireSupplierKey?: false;
|
|
20
|
-
}): {
|
|
21
|
-
client: BoltaClient;
|
|
22
|
-
supplierKey?: string;
|
|
23
|
-
};
|
|
13
|
+
export declare function createApiKeyClient(globalOpts: Pick<GlobalOptions, 'apiKey'>): BoltaClient;
|
|
14
|
+
/**
|
|
15
|
+
* 글로벌 옵션(및 env/config)에서 API 키와 선택형 레거시 발급자 헤더를 해석한다.
|
|
16
|
+
* 신규 계약에서는 API 키만 필요하며, 구 설정이 있을 때만 Supplier-Key를 보낸다.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createClient(globalOpts: GlobalOptions): BoltaClient;
|
|
24
19
|
export {};
|
|
25
20
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,WAAW,CAEzF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,CAWnE"}
|
package/dist/src/utils/client.js
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
|
-
import { resolveApiKey,
|
|
1
|
+
import { resolveApiKey, resolveLegacyIssuerKeyWithSource, resolveBaseUrl } from '../config/config-manager.js';
|
|
2
2
|
import { BoltaClient } from '../client/bolta-client.js';
|
|
3
3
|
import { BoltaAuthError } from './errors.js';
|
|
4
|
-
|
|
4
|
+
function resolveApiKeyClientConfig(globalOpts) {
|
|
5
5
|
const apiKey = resolveApiKey(globalOpts.apiKey);
|
|
6
6
|
if (!apiKey)
|
|
7
7
|
throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
return { apiKey, baseUrl: resolveBaseUrl() };
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* API 키만으로 클라이언트를 만든다. 레거시 Supplier-Key 헤더는 절대 싣지 않는다.
|
|
12
|
+
*
|
|
13
|
+
* issuer·certificate와 조회 명령처럼 레거시 발급자 헤더가 필요 없는 경로에 사용한다.
|
|
14
|
+
* 남아 있는 구 config(supplier-key)가 이런 요청에 섞여 들어가지 않도록 분리한다.
|
|
15
|
+
*/
|
|
16
|
+
export function createApiKeyClient(globalOpts) {
|
|
17
|
+
return new BoltaClient(resolveApiKeyClientConfig(globalOpts));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 글로벌 옵션(및 env/config)에서 API 키와 선택형 레거시 발급자 헤더를 해석한다.
|
|
21
|
+
* 신규 계약에서는 API 키만 필요하며, 구 설정이 있을 때만 Supplier-Key를 보낸다.
|
|
22
|
+
*/
|
|
23
|
+
export function createClient(globalOpts) {
|
|
24
|
+
const clientConfig = resolveApiKeyClientConfig(globalOpts);
|
|
25
|
+
const resolved = resolveLegacyIssuerKeyWithSource(globalOpts.supplierKey, globalOpts.customerKey);
|
|
26
|
+
return new BoltaClient({
|
|
27
|
+
...clientConfig,
|
|
28
|
+
legacyIssuer: resolved.value && resolved.source !== 'none'
|
|
29
|
+
? { key: resolved.value, source: resolved.source }
|
|
30
|
+
: undefined,
|
|
31
|
+
});
|
|
14
32
|
}
|
|
15
33
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gCAAgC,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C,SAAS,yBAAyB,CAChC,UAAyC;IAEzC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAE5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAyC;IAC1E,OAAO,IAAI,WAAW,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAAyB;IACpD,MAAM,YAAY,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,gCAAgC,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAElG,OAAO,IAAI,WAAW,CAAC;QACrB,GAAG,YAAY;QACf,YAAY,EACV,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;YAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;YAClD,CAAC,CAAC,SAAS;KAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 2026-12-31까지 유지하는 레거시 발급자 키(Supplier-Key 헤더)의 출처 정보.
|
|
3
|
+
*
|
|
4
|
+
* 설정 해석(config-manager)과 HTTP 클라이언트(bolta-client) 양쪽에서 쓰이므로
|
|
5
|
+
* 어느 쪽에도 의존하지 않는 중립 모듈에 둔다.
|
|
6
|
+
*/
|
|
7
|
+
export type LegacyIssuerKeySource = 'supplier-flag' | 'customer-flag' | 'supplier-env' | 'supplier-config' | 'customer-env' | 'customer-config' | 'none';
|
|
8
|
+
/** 실제로 값이 있을 때의 출처. `'none'`은 값이 없다는 뜻이므로 제외한다. */
|
|
9
|
+
export type ResolvedLegacyIssuerKeySource = Exclude<LegacyIssuerKeySource, 'none'>;
|
|
10
|
+
/**
|
|
11
|
+
* 레거시 키와 그 출처는 항상 함께 존재한다.
|
|
12
|
+
* 둘을 한 객체로 묶어 "키는 있는데 출처는 모름" 상태를 타입으로 막는다.
|
|
13
|
+
*/
|
|
14
|
+
export interface LegacyIssuerHeader {
|
|
15
|
+
key: string;
|
|
16
|
+
source: ResolvedLegacyIssuerKeySource;
|
|
17
|
+
}
|
|
18
|
+
export interface LegacyIssuerKeySourceDescription {
|
|
19
|
+
/** 값이 어디서 왔는지 (경고·에러 문구에 그대로 노출) */
|
|
20
|
+
origin: string;
|
|
21
|
+
/** 이 소스를 끄는 방법 */
|
|
22
|
+
removal: string;
|
|
23
|
+
/** 같은 문자열의 issuerId로 발급자 등록 상태를 확인하는 명령 */
|
|
24
|
+
verifyCommand: string;
|
|
25
|
+
}
|
|
26
|
+
/** 레거시 발급자 키의 출처와 해제 방법을 사용자 안내용으로 설명한다. */
|
|
27
|
+
export declare function describeLegacyIssuerKeySource(source: ResolvedLegacyIssuerKeySource): LegacyIssuerKeySourceDescription;
|
|
28
|
+
//# sourceMappingURL=legacy-issuer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-issuer.d.ts","sourceRoot":"","sources":["../../../src/utils/legacy-issuer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,MAAM,CAAC;AAEX,mDAAmD;AACnD,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,6BAA6B,CAAC;CACvC;AAED,MAAM,WAAW,gCAAgC;IAC/C,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB;AAsCD,4CAA4C;AAC5C,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,6BAA6B,GACpC,gCAAgC,CAElC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 2026-12-31까지 유지하는 레거시 발급자 키(Supplier-Key 헤더)의 출처 정보.
|
|
3
|
+
*
|
|
4
|
+
* 설정 해석(config-manager)과 HTTP 클라이언트(bolta-client) 양쪽에서 쓰이므로
|
|
5
|
+
* 어느 쪽에도 의존하지 않는 중립 모듈에 둔다.
|
|
6
|
+
*/
|
|
7
|
+
const SUPPLIER_VERIFY_COMMAND = 'bolta issuer get <supplierKey>';
|
|
8
|
+
const CUSTOMER_VERIFY_COMMAND = 'bolta issuer get <customerKey>';
|
|
9
|
+
const DESCRIPTIONS = {
|
|
10
|
+
'supplier-flag': {
|
|
11
|
+
origin: "'--supplier-key' 플래그",
|
|
12
|
+
removal: "명령에서 '--supplier-key'를 빼세요",
|
|
13
|
+
verifyCommand: SUPPLIER_VERIFY_COMMAND,
|
|
14
|
+
},
|
|
15
|
+
'customer-flag': {
|
|
16
|
+
origin: "'--customer-key' 플래그",
|
|
17
|
+
removal: "명령에서 '--customer-key'를 빼세요",
|
|
18
|
+
verifyCommand: CUSTOMER_VERIFY_COMMAND,
|
|
19
|
+
},
|
|
20
|
+
'supplier-env': {
|
|
21
|
+
origin: "'BOLTA_SUPPLIER_KEY' 환경변수",
|
|
22
|
+
removal: 'unset BOLTA_SUPPLIER_KEY',
|
|
23
|
+
verifyCommand: SUPPLIER_VERIFY_COMMAND,
|
|
24
|
+
},
|
|
25
|
+
'supplier-config': {
|
|
26
|
+
origin: "config의 'supplier-key'",
|
|
27
|
+
removal: 'bolta config set supplier-key ""',
|
|
28
|
+
verifyCommand: SUPPLIER_VERIFY_COMMAND,
|
|
29
|
+
},
|
|
30
|
+
'customer-env': {
|
|
31
|
+
origin: "'BOLTA_CUSTOMER_KEY' 환경변수",
|
|
32
|
+
removal: 'unset BOLTA_CUSTOMER_KEY',
|
|
33
|
+
verifyCommand: CUSTOMER_VERIFY_COMMAND,
|
|
34
|
+
},
|
|
35
|
+
'customer-config': {
|
|
36
|
+
origin: "config의 'customer-key'",
|
|
37
|
+
removal: 'bolta config set customer-key ""',
|
|
38
|
+
verifyCommand: CUSTOMER_VERIFY_COMMAND,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
/** 레거시 발급자 키의 출처와 해제 방법을 사용자 안내용으로 설명한다. */
|
|
42
|
+
export function describeLegacyIssuerKeySource(source) {
|
|
43
|
+
return DESCRIPTIONS[source];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=legacy-issuer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-issuer.js","sourceRoot":"","sources":["../../../src/utils/legacy-issuer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACjE,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AAEjE,MAAM,YAAY,GAA4E;IAC5F,eAAe,EAAE;QACf,MAAM,EAAE,sBAAsB;QAC9B,OAAO,EAAE,4BAA4B;QACrC,aAAa,EAAE,uBAAuB;KACvC;IACD,eAAe,EAAE;QACf,MAAM,EAAE,sBAAsB;QAC9B,OAAO,EAAE,4BAA4B;QACrC,aAAa,EAAE,uBAAuB;KACvC;IACD,cAAc,EAAE;QACd,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,0BAA0B;QACnC,aAAa,EAAE,uBAAuB;KACvC;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,kCAAkC;QAC3C,aAAa,EAAE,uBAAuB;KACvC;IACD,cAAc,EAAE;QACd,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,0BAA0B;QACnC,aAAa,EAAE,uBAAuB;KACvC;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,kCAAkC;QAC3C,aAAa,EAAE,uBAAuB;KACvC;CACF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,UAAU,6BAA6B,CAC3C,MAAqC;IAErC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare function outputSuccess<T>(data: T): void;
|
|
2
2
|
export declare function outputError(error: unknown): never;
|
|
3
3
|
/**
|
|
4
|
-
* 비밀값(
|
|
4
|
+
* 비밀값(API 키, 레거시 발급자 식별자 등)을 로그·에러에 안전하게 노출하기 위해 마스킹한다.
|
|
5
5
|
* 값을 식별할 수 있도록 앞 prefix자와 뒤 suffix자는 남긴다.
|
|
6
6
|
*/
|
|
7
7
|
export declare function maskSecret(value: string, prefix?: number, suffix?: number): string;
|
|
@@ -10,13 +10,17 @@ export declare function verbose(message: string, data?: Record<string, unknown>)
|
|
|
10
10
|
* 경고를 stderr로 출력한다. JSON 응답(stdout)을 오염시키지 않도록 항상 stderr를 사용한다.
|
|
11
11
|
*/
|
|
12
12
|
export declare function warning(message: string): void;
|
|
13
|
+
export declare const LEGACY_ISSUER_SUNSET_DATE = "2026-12-31";
|
|
14
|
+
export declare const ISSUER_MIGRATION_GUIDE_URL = "https://developers.bolta.io/docs/api-introduction/migration-supplier-to-issuer";
|
|
13
15
|
/**
|
|
14
16
|
* Deprecation 경고를 stderr로 1회만 출력한다.
|
|
15
17
|
*/
|
|
16
18
|
export declare function deprecationWarning(message: string): void;
|
|
19
|
+
export declare function legacyIssuerWarning(feature: string): void;
|
|
20
|
+
/** `schema`/`examples`가 공유하는 구 이름 매핑. 한쪽만 바뀌어 어긋나지 않도록 한곳에 둔다. */
|
|
21
|
+
export declare const LEGACY_ISSUER_CREATE_ALIASES: Record<string, string>;
|
|
17
22
|
/**
|
|
18
23
|
* 구 이름(alias)을 신규 이름으로 매핑한다. 매핑되면 deprecation 경고를 출력한다.
|
|
19
|
-
* schema/examples/guide의 customer-* → supplier-* 하위호환 처리에 공통 사용한다.
|
|
20
24
|
*/
|
|
21
|
-
export declare function
|
|
25
|
+
export declare function resolveLegacyIssuerName(input: string, aliases: Record<string, string>, label: string): string;
|
|
22
26
|
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/utils/output.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAG9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAyBjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,CAGxE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK7E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/utils/output.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAG9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAyBjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,CAGxE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK7E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAID,eAAO,MAAM,yBAAyB,eAAe,CAAC;AACtD,eAAO,MAAM,0BAA0B,mFAC2C,CAAC;AAEnF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/D,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAOR"}
|
package/dist/src/utils/output.js
CHANGED
|
@@ -29,7 +29,7 @@ export function outputError(error) {
|
|
|
29
29
|
process.exit(1);
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* 비밀값(
|
|
32
|
+
* 비밀값(API 키, 레거시 발급자 식별자 등)을 로그·에러에 안전하게 노출하기 위해 마스킹한다.
|
|
33
33
|
* 값을 식별할 수 있도록 앞 prefix자와 뒤 suffix자는 남긴다.
|
|
34
34
|
*/
|
|
35
35
|
export function maskSecret(value, prefix = 6, suffix = 4) {
|
|
@@ -50,6 +50,8 @@ export function warning(message) {
|
|
|
50
50
|
console.error(`[bolta] ⚠ ${message}`);
|
|
51
51
|
}
|
|
52
52
|
const shownDeprecations = new Set();
|
|
53
|
+
export const LEGACY_ISSUER_SUNSET_DATE = '2026-12-31';
|
|
54
|
+
export const ISSUER_MIGRATION_GUIDE_URL = 'https://developers.bolta.io/docs/api-introduction/migration-supplier-to-issuer';
|
|
53
55
|
/**
|
|
54
56
|
* Deprecation 경고를 stderr로 1회만 출력한다.
|
|
55
57
|
*/
|
|
@@ -59,14 +61,22 @@ export function deprecationWarning(message) {
|
|
|
59
61
|
shownDeprecations.add(message);
|
|
60
62
|
warning(`deprecated: ${message}`);
|
|
61
63
|
}
|
|
64
|
+
export function legacyIssuerWarning(feature) {
|
|
65
|
+
deprecationWarning(`${feature} 사용은 ${LEGACY_ISSUER_SUNSET_DATE}에 종료됩니다. ` +
|
|
66
|
+
`API 키와 'bolta issuer'를 사용하는 신규 방식으로 전환하세요. ${ISSUER_MIGRATION_GUIDE_URL}`);
|
|
67
|
+
}
|
|
68
|
+
/** `schema`/`examples`가 공유하는 구 이름 매핑. 한쪽만 바뀌어 어긋나지 않도록 한곳에 둔다. */
|
|
69
|
+
export const LEGACY_ISSUER_CREATE_ALIASES = {
|
|
70
|
+
'supplier-create': 'issuer-create',
|
|
71
|
+
'customer-create': 'issuer-create',
|
|
72
|
+
};
|
|
62
73
|
/**
|
|
63
74
|
* 구 이름(alias)을 신규 이름으로 매핑한다. 매핑되면 deprecation 경고를 출력한다.
|
|
64
|
-
* schema/examples/guide의 customer-* → supplier-* 하위호환 처리에 공통 사용한다.
|
|
65
75
|
*/
|
|
66
|
-
export function
|
|
76
|
+
export function resolveLegacyIssuerName(input, aliases, label) {
|
|
67
77
|
const mapped = aliases[input];
|
|
68
78
|
if (mapped) {
|
|
69
|
-
|
|
79
|
+
legacyIssuerWarning(`${label} '${input}'`);
|
|
70
80
|
return mapped;
|
|
71
81
|
}
|
|
72
82
|
return input;
|