@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.
Files changed (109) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/CLAUDE.md +16 -22
  3. package/README.md +13 -19
  4. package/dist/bin/bolta.js +14 -29
  5. package/dist/bin/bolta.js.map +1 -1
  6. package/dist/src/client/bolta-client.d.ts +19 -21
  7. package/dist/src/client/bolta-client.d.ts.map +1 -1
  8. package/dist/src/client/bolta-client.js +47 -50
  9. package/dist/src/client/bolta-client.js.map +1 -1
  10. package/dist/src/commands/cash-receipt/cancel.js +3 -3
  11. package/dist/src/commands/cash-receipt/cancel.js.map +1 -1
  12. package/dist/src/commands/cash-receipt/issue.js +3 -3
  13. package/dist/src/commands/cash-receipt/issue.js.map +1 -1
  14. package/dist/src/commands/cash-receipt/status.d.ts.map +1 -1
  15. package/dist/src/commands/cash-receipt/status.js +3 -8
  16. package/dist/src/commands/cash-receipt/status.js.map +1 -1
  17. package/dist/src/commands/certificate/index.d.ts.map +1 -1
  18. package/dist/src/commands/certificate/index.js +19 -42
  19. package/dist/src/commands/certificate/index.js.map +1 -1
  20. package/dist/src/commands/config/index.d.ts.map +1 -1
  21. package/dist/src/commands/config/index.js +17 -54
  22. package/dist/src/commands/config/index.js.map +1 -1
  23. package/dist/src/commands/examples/index.d.ts.map +1 -1
  24. package/dist/src/commands/examples/index.js +8 -9
  25. package/dist/src/commands/examples/index.js.map +1 -1
  26. package/dist/src/commands/guide/index.d.ts.map +1 -1
  27. package/dist/src/commands/guide/index.js +28 -30
  28. package/dist/src/commands/guide/index.js.map +1 -1
  29. package/dist/src/commands/invoice/amend.d.ts.map +1 -1
  30. package/dist/src/commands/invoice/amend.js +9 -30
  31. package/dist/src/commands/invoice/amend.js.map +1 -1
  32. package/dist/src/commands/invoice/get.d.ts.map +1 -1
  33. package/dist/src/commands/invoice/get.js +2 -7
  34. package/dist/src/commands/invoice/get.js.map +1 -1
  35. package/dist/src/commands/invoice/index.js +1 -1
  36. package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
  37. package/dist/src/commands/invoice/issue-request.js +3 -15
  38. package/dist/src/commands/invoice/issue-request.js.map +1 -1
  39. package/dist/src/commands/invoice/issue.d.ts.map +1 -1
  40. package/dist/src/commands/invoice/issue.js +3 -15
  41. package/dist/src/commands/invoice/issue.js.map +1 -1
  42. package/dist/src/commands/invoice/status.d.ts.map +1 -1
  43. package/dist/src/commands/invoice/status.js +2 -7
  44. package/dist/src/commands/invoice/status.js.map +1 -1
  45. package/dist/src/commands/issuer/create.d.ts +4 -0
  46. package/dist/src/commands/issuer/create.d.ts.map +1 -0
  47. package/dist/src/commands/issuer/create.js +24 -0
  48. package/dist/src/commands/issuer/create.js.map +1 -0
  49. package/dist/src/commands/issuer/get.d.ts +3 -0
  50. package/dist/src/commands/issuer/get.d.ts.map +1 -0
  51. package/dist/src/commands/issuer/get.js +14 -0
  52. package/dist/src/commands/issuer/get.js.map +1 -0
  53. package/dist/src/commands/issuer/index.d.ts +3 -0
  54. package/dist/src/commands/issuer/index.d.ts.map +1 -0
  55. package/dist/src/commands/issuer/index.js +31 -0
  56. package/dist/src/commands/issuer/index.js.map +1 -0
  57. package/dist/src/commands/schema/index.d.ts.map +1 -1
  58. package/dist/src/commands/schema/index.js +3 -4
  59. package/dist/src/commands/schema/index.js.map +1 -1
  60. package/dist/src/commands/supplier/legacy.d.ts +3 -0
  61. package/dist/src/commands/supplier/legacy.d.ts.map +1 -0
  62. package/dist/src/commands/supplier/legacy.js +75 -0
  63. package/dist/src/commands/supplier/legacy.js.map +1 -0
  64. package/dist/src/config/config-manager.d.ts +7 -9
  65. package/dist/src/config/config-manager.d.ts.map +1 -1
  66. package/dist/src/config/config-manager.js +28 -48
  67. package/dist/src/config/config-manager.js.map +1 -1
  68. package/dist/src/types/api.d.ts +40 -7
  69. package/dist/src/types/api.d.ts.map +1 -1
  70. package/dist/src/utils/client.d.ts +10 -15
  71. package/dist/src/utils/client.d.ts.map +1 -1
  72. package/dist/src/utils/client.js +26 -8
  73. package/dist/src/utils/client.js.map +1 -1
  74. package/dist/src/utils/legacy-issuer.d.ts +28 -0
  75. package/dist/src/utils/legacy-issuer.d.ts.map +1 -0
  76. package/dist/src/utils/legacy-issuer.js +45 -0
  77. package/dist/src/utils/legacy-issuer.js.map +1 -0
  78. package/dist/src/utils/output.d.ts +7 -3
  79. package/dist/src/utils/output.d.ts.map +1 -1
  80. package/dist/src/utils/output.js +14 -4
  81. package/dist/src/utils/output.js.map +1 -1
  82. package/dist/src/{commands/cash-receipt/validation.d.ts → validators/parse.d.ts} +1 -1
  83. package/dist/src/validators/parse.d.ts.map +1 -0
  84. package/dist/src/{commands/cash-receipt/validation.js → validators/parse.js} +2 -2
  85. package/dist/src/validators/parse.js.map +1 -0
  86. package/dist/src/validators/schemas.d.ts +1 -1
  87. package/dist/src/validators/schemas.d.ts.map +1 -1
  88. package/dist/src/validators/schemas.js +21 -11
  89. package/dist/src/validators/schemas.js.map +1 -1
  90. package/llms.txt +26 -33
  91. package/package.json +1 -1
  92. package/dist/src/commands/cash-receipt/validation.d.ts.map +0 -1
  93. package/dist/src/commands/cash-receipt/validation.js.map +0 -1
  94. package/dist/src/commands/supplier/create.d.ts +0 -4
  95. package/dist/src/commands/supplier/create.d.ts.map +0 -1
  96. package/dist/src/commands/supplier/create.js +0 -40
  97. package/dist/src/commands/supplier/create.js.map +0 -1
  98. package/dist/src/commands/supplier/get.d.ts +0 -3
  99. package/dist/src/commands/supplier/get.d.ts.map +0 -1
  100. package/dist/src/commands/supplier/get.js +0 -19
  101. package/dist/src/commands/supplier/get.js.map +0 -1
  102. package/dist/src/commands/supplier/index.d.ts +0 -3
  103. package/dist/src/commands/supplier/index.d.ts.map +0 -1
  104. package/dist/src/commands/supplier/index.js +0 -56
  105. package/dist/src/commands/supplier/index.js.map +0 -1
  106. package/dist/src/commands/supplier/legacy-customer.d.ts +0 -5
  107. package/dist/src/commands/supplier/legacy-customer.d.ts.map +0 -1
  108. package/dist/src/commands/supplier/legacy-customer.js +0 -56
  109. 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 type SupplierKeySource = 'flag' | 'legacy-flag' | 'env' | 'config' | 'legacy-env' | 'legacy-config' | 'none';
6
- export interface ResolvedSupplierKey {
7
+ export interface ResolvedLegacyIssuerKey {
7
8
  value?: string;
8
- source: SupplierKeySource;
9
+ source: LegacyIssuerKeySource;
9
10
  }
10
11
  export declare function resolveApiKey(cliFlag?: string): string | undefined;
11
12
  /**
12
- * supplierKey를 우선순위대로 해석하고, 어느 소스에서 왔는지 함께 반환한다.
13
- * 모든 값은 앞뒤 공백/개행을 제거한다(헤더 오염 방지).
13
+ * 2026-12-31까지 지원하는 레거시 발급자 헤더 값을 기존 우선순위대로 해석한다.
14
+ * 값이 발견되면 신규 API 단독 인증으로 전환하도록 경고한다.
14
15
  */
15
- export declare function resolveSupplierKeyWithSource(cliFlag?: string, legacyCliFlag?: string): ResolvedSupplierKey;
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;AAGnD,eAAO,MAAM,UAAU,QAA4B,CAAC;AAGpD,wBAAgB,UAAU,IAAI,WAAW,CAOxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,aAAa,GACb,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,MAAM,CAAC;AAEX,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AASD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,CAAC,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,CAgCrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/F;AAED,qDAAqD;AACrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,GACxB,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAcpC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
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 { deprecationWarning, maskSecret } from '../utils/output.js';
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
- * supplierKey를 우선순위대로 해석하고, 어느 소스에서 왔는지 함께 반환한다.
32
- * 모든 값은 앞뒤 공백/개행을 제거한다(헤더 오염 방지).
32
+ * 2026-12-31까지 지원하는 레거시 발급자 헤더 값을 기존 우선순위대로 해석한다.
33
+ * 값이 발견되면 신규 API 단독 인증으로 전환하도록 경고한다.
33
34
  */
34
- export function resolveSupplierKeyWithSource(cliFlag, legacyCliFlag) {
35
- const flag = normalize(cliFlag);
36
- if (flag)
37
- return { value: flag, source: 'flag' };
38
- const legacyFlag = normalize(legacyCliFlag);
39
- if (legacyFlag) {
40
- deprecationWarning("'--customer-key' 플래그는 '--supplier-key'로 변경되었습니다.");
41
- return { value: legacyFlag, source: 'legacy-flag' };
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 envKey = normalize(process.env.BOLTA_SUPPLIER_KEY);
45
- if (envKey)
46
- return { value: envKey, source: 'env' };
47
- const configKey = normalize(config.supplierKey);
48
- if (configKey)
49
- return { value: configKey, source: 'config' };
50
- // 하위호환 폴백: 구 환경변수 / config 필드
51
- const legacyEnv = normalize(process.env.BOLTA_CUSTOMER_KEY);
52
- if (legacyEnv) {
53
- deprecationWarning("'BOLTA_CUSTOMER_KEY' 환경변수는 'BOLTA_SUPPLIER_KEY'로 변경되었습니다.");
54
- return { value: legacyEnv, source: 'legacy-env' };
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":"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"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -119,16 +119,34 @@ export interface AmendChangeSupplyCostRequest {
119
119
  taxType: TaxInvoiceTaxType;
120
120
  items: TaxInvoiceItem[];
121
121
  }
122
- export interface CreateSupplierRequest {
122
+ export interface CreateIssuerRequest {
123
123
  identificationNumber: string;
124
124
  organizationName: string;
125
125
  representativeName: string;
126
126
  taxRegistrationId?: string | null;
127
127
  }
128
- /** @deprecated 신규 코드에서는 CreateSupplierRequest를 사용하세요. */
129
- export type CreateCustomerRequest = CreateSupplierRequest;
130
- export interface SupplierResponse {
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 legacy `customer` CLI 응답 호환용입니다. */
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 supplierKey로 대체됨. 읽기 폴백(마이그레이션) 용도로만 유지 */
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 --supplier-key로 대체됨 */
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
- * 글로벌 옵션(및 env/config)으로부터 인증을 해석해 BoltaClient를 만든다.
9
- * 발행/수정 커맨드에서 반복되던 apiKey 확인 + supplierKey 해석 + 클라이언트 생성을 한곳으로 모은다.
10
- * 커맨드가 요청 supplierKey 값을 함께 넘겨야 하므로 client와 함께 반환한다.
8
+ * API 키만으로 클라이언트를 만든다. 레거시 Supplier-Key 헤더는 절대 싣지 않는다.
9
+ *
10
+ * issuer·certificate와 조회 명령처럼 레거시 발급자 헤더가 필요 없는 경로에 사용한다.
11
+ * 남아 있는 구 config(supplier-key)가 이런 요청에 섞여 들어가지 않도록 분리한다.
11
12
  */
12
- export declare function createClient(globalOpts: GlobalOptions, options: {
13
- requireSupplierKey: true;
14
- }): {
15
- client: BoltaClient;
16
- supplierKey: string;
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;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,EACzB,OAAO,EAAE;IAAE,kBAAkB,EAAE,IAAI,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAChD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,EACzB,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,KAAK,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
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"}
@@ -1,15 +1,33 @@
1
- import { resolveApiKey, resolveSupplierKeyWithSource, resolveBaseUrl } from '../config/config-manager.js';
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
- export function createClient(globalOpts, options) {
4
+ function resolveApiKeyClientConfig(globalOpts) {
5
5
  const apiKey = resolveApiKey(globalOpts.apiKey);
6
6
  if (!apiKey)
7
7
  throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
8
- const { value: supplierKey, source: supplierKeySource } = resolveSupplierKeyWithSource(globalOpts.supplierKey, globalOpts.customerKey);
9
- if (options?.requireSupplierKey && !supplierKey) {
10
- throw new BoltaAuthError("Supplier Key가 설정되지 않았습니다. BOLTA_SUPPLIER_KEY 환경변수를 설정하거나 'bolta config set supplier-key <key>' 명령을 실행하세요.", "BOLTA_SUPPLIER_KEY 환경변수를 설정하거나 'bolta config set supplier-key <key>' 명령을 실행하세요.");
11
- }
12
- const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl(), supplierKey, supplierKeySource });
13
- return { client, supplierKey };
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,4BAA4B,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqB7C,MAAM,UAAU,YAAY,CAC1B,UAAyB,EACzB,OAA0C;IAE1C,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAE5D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,4BAA4B,CACpF,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,WAAW,CACvB,CAAC;IAEF,IAAI,OAAO,EAAE,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,IAAI,cAAc,CACtB,2GAA2G,EAC3G,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACtG,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC"}
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
- * 비밀값(apiKey/supplierKey 등)을 로그·에러에 안전하게 노출하기 위해 마스킹한다.
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 resolveDeprecatedName(input: string, aliases: Record<string, string>, label: string): string;
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;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAOR"}
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"}
@@ -29,7 +29,7 @@ export function outputError(error) {
29
29
  process.exit(1);
30
30
  }
31
31
  /**
32
- * 비밀값(apiKey/supplierKey 등)을 로그·에러에 안전하게 노출하기 위해 마스킹한다.
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 resolveDeprecatedName(input, aliases, label) {
76
+ export function resolveLegacyIssuerName(input, aliases, label) {
67
77
  const mapped = aliases[input];
68
78
  if (mapped) {
69
- deprecationWarning(`${label} '${input}'는 '${mapped}'로 변경되었습니다.`);
79
+ legacyIssuerWarning(`${label} '${input}'`);
70
80
  return mapped;
71
81
  }
72
82
  return input;