@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.
Files changed (119) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/CLAUDE.md +35 -31
  3. package/README.md +26 -27
  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 +24 -27
  7. package/dist/src/client/bolta-client.d.ts.map +1 -1
  8. package/dist/src/client/bolta-client.js +106 -84
  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 +35 -29
  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 +25 -33
  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.d.ts.map +1 -1
  36. package/dist/src/commands/invoice/index.js +10 -6
  37. package/dist/src/commands/invoice/index.js.map +1 -1
  38. package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
  39. package/dist/src/commands/invoice/issue-request.js +6 -16
  40. package/dist/src/commands/invoice/issue-request.js.map +1 -1
  41. package/dist/src/commands/invoice/issue.d.ts.map +1 -1
  42. package/dist/src/commands/invoice/issue.js +6 -16
  43. package/dist/src/commands/invoice/issue.js.map +1 -1
  44. package/dist/src/commands/invoice/reference-id.d.ts +2 -0
  45. package/dist/src/commands/invoice/reference-id.d.ts.map +1 -0
  46. package/dist/src/commands/invoice/reference-id.js +8 -0
  47. package/dist/src/commands/invoice/reference-id.js.map +1 -0
  48. package/dist/src/commands/invoice/status.d.ts.map +1 -1
  49. package/dist/src/commands/invoice/status.js +6 -8
  50. package/dist/src/commands/invoice/status.js.map +1 -1
  51. package/dist/src/commands/issuer/create.d.ts +4 -0
  52. package/dist/src/commands/issuer/create.d.ts.map +1 -0
  53. package/dist/src/commands/issuer/create.js +24 -0
  54. package/dist/src/commands/issuer/create.js.map +1 -0
  55. package/dist/src/commands/issuer/get.d.ts +3 -0
  56. package/dist/src/commands/issuer/get.d.ts.map +1 -0
  57. package/dist/src/commands/issuer/get.js +14 -0
  58. package/dist/src/commands/issuer/get.js.map +1 -0
  59. package/dist/src/commands/issuer/index.d.ts +3 -0
  60. package/dist/src/commands/issuer/index.d.ts.map +1 -0
  61. package/dist/src/commands/issuer/index.js +31 -0
  62. package/dist/src/commands/issuer/index.js.map +1 -0
  63. package/dist/src/commands/schema/index.d.ts.map +1 -1
  64. package/dist/src/commands/schema/index.js +3 -4
  65. package/dist/src/commands/schema/index.js.map +1 -1
  66. package/dist/src/commands/supplier/legacy.d.ts +3 -0
  67. package/dist/src/commands/supplier/legacy.d.ts.map +1 -0
  68. package/dist/src/commands/supplier/legacy.js +75 -0
  69. package/dist/src/commands/supplier/legacy.js.map +1 -0
  70. package/dist/src/config/config-manager.d.ts +7 -9
  71. package/dist/src/config/config-manager.d.ts.map +1 -1
  72. package/dist/src/config/config-manager.js +28 -48
  73. package/dist/src/config/config-manager.js.map +1 -1
  74. package/dist/src/types/api.d.ts +40 -7
  75. package/dist/src/types/api.d.ts.map +1 -1
  76. package/dist/src/utils/client.d.ts +10 -15
  77. package/dist/src/utils/client.d.ts.map +1 -1
  78. package/dist/src/utils/client.js +26 -8
  79. package/dist/src/utils/client.js.map +1 -1
  80. package/dist/src/utils/errors.d.ts +1 -1
  81. package/dist/src/utils/errors.d.ts.map +1 -1
  82. package/dist/src/utils/errors.js +2 -2
  83. package/dist/src/utils/errors.js.map +1 -1
  84. package/dist/src/utils/legacy-issuer.d.ts +28 -0
  85. package/dist/src/utils/legacy-issuer.d.ts.map +1 -0
  86. package/dist/src/utils/legacy-issuer.js +45 -0
  87. package/dist/src/utils/legacy-issuer.js.map +1 -0
  88. package/dist/src/utils/output.d.ts +7 -3
  89. package/dist/src/utils/output.d.ts.map +1 -1
  90. package/dist/src/utils/output.js +14 -4
  91. package/dist/src/utils/output.js.map +1 -1
  92. package/dist/src/{commands/cash-receipt/validation.d.ts → validators/parse.d.ts} +1 -1
  93. package/dist/src/validators/parse.d.ts.map +1 -0
  94. package/dist/src/{commands/cash-receipt/validation.js → validators/parse.js} +2 -2
  95. package/dist/src/validators/parse.js.map +1 -0
  96. package/dist/src/validators/schemas.d.ts +2 -1
  97. package/dist/src/validators/schemas.d.ts.map +1 -1
  98. package/dist/src/validators/schemas.js +28 -11
  99. package/dist/src/validators/schemas.js.map +1 -1
  100. package/llms.txt +38 -36
  101. package/package.json +1 -1
  102. package/dist/src/commands/cash-receipt/validation.d.ts.map +0 -1
  103. package/dist/src/commands/cash-receipt/validation.js.map +0 -1
  104. package/dist/src/commands/supplier/create.d.ts +0 -4
  105. package/dist/src/commands/supplier/create.d.ts.map +0 -1
  106. package/dist/src/commands/supplier/create.js +0 -40
  107. package/dist/src/commands/supplier/create.js.map +0 -1
  108. package/dist/src/commands/supplier/get.d.ts +0 -3
  109. package/dist/src/commands/supplier/get.d.ts.map +0 -1
  110. package/dist/src/commands/supplier/get.js +0 -19
  111. package/dist/src/commands/supplier/get.js.map +0 -1
  112. package/dist/src/commands/supplier/index.d.ts +0 -3
  113. package/dist/src/commands/supplier/index.d.ts.map +0 -1
  114. package/dist/src/commands/supplier/index.js +0 -56
  115. package/dist/src/commands/supplier/index.js.map +0 -1
  116. package/dist/src/commands/supplier/legacy-customer.d.ts +0 -5
  117. package/dist/src/commands/supplier/legacy-customer.d.ts.map +0 -1
  118. package/dist/src/commands/supplier/legacy-customer.js +0 -56
  119. package/dist/src/commands/supplier/legacy-customer.js.map +0 -1
@@ -11,15 +11,17 @@ export function registerInvoiceCommands(program) {
11
11
  .option('--data <json>', '인라인 JSON 데이터')
12
12
  .option('--file <path>', 'JSON 파일 경로')
13
13
  .option('--stdin', '표준 입력에서 읽기')
14
- .option('--reference-id <id>', '멱등성 (Bolta-Client-Reference-Id)')
14
+ .option('--reference-id <id>', '선택형 요청자 관리번호 (앞뒤 공백 없는 출력 가능한 ASCII 1~255자)')
15
15
  .addHelpText('after', `
16
16
  Notes:
17
+ - 같은 API 키의 세금계산서 발행 요청에서 reference-id를 재사용할 수 없습니다.
18
+ - 응답을 받지 못했거나 본문을 읽지 못했다면 재전송하지 말고 invoice status로 접수 여부를 확인하세요.
17
19
  - 정발행은 공급받는자 외국인등록번호를 지원합니다.
18
20
  - 외국인등록번호 공급받는자는 최상위 description 없이 요청하세요. 여권번호는 지원하지 않습니다.
19
21
  - taxType은 TAXABLE(과세), ZERO_RATE(영세율), TAX_FREE(면세) 중 하나입니다.
20
22
 
21
23
  Example:
22
- bolta invoice issue --data '{
24
+ bolta invoice issue --reference-id inv-2026-001 --data '{
23
25
  "date": "2026-03-25",
24
26
  "purpose": "CLAIM",
25
27
  "taxType": "TAXABLE",
@@ -27,7 +29,7 @@ Example:
27
29
  "identificationNumber": "1234567890",
28
30
  "organizationName": "공급자 주식회사",
29
31
  "representativeName": "김공급",
30
- "manager": { "email": "supplier@example.com" }
32
+ "manager": { "email": "seller@example.com" }
31
33
  },
32
34
  "supplied": {
33
35
  "identificationNumber": "0987654321",
@@ -49,14 +51,16 @@ Example:
49
51
  .option('--data <json>', '인라인 JSON 데이터')
50
52
  .option('--file <path>', 'JSON 파일 경로')
51
53
  .option('--stdin', '표준 입력에서 읽기')
52
- .option('--reference-id <id>', '멱등성 (Bolta-Client-Reference-Id)')
54
+ .option('--reference-id <id>', '선택형 요청자 관리번호 (앞뒤 공백 없는 출력 가능한 ASCII 1~255자)')
53
55
  .addHelpText('after', `
54
56
  Note:
57
+ 같은 API 키의 세금계산서 발행 요청에서 reference-id를 재사용할 수 없습니다.
58
+ 응답을 받지 못했거나 본문을 읽지 못했다면 재전송하지 말고 invoice status로 접수 여부를 확인하세요.
55
59
  역발행은 supplied.identificationNumber에 사업자등록번호(10자리)만 허용합니다.
56
60
  taxType은 TAXABLE(과세), ZERO_RATE(영세율), TAX_FREE(면세) 중 하나입니다.
57
61
 
58
62
  Example:
59
- bolta invoice issue-request --data '{...}'`)
63
+ bolta invoice issue-request --reference-id inv-2026-002 --data '{...}'`)
60
64
  .action(issueRequestAction);
61
65
  invoice
62
66
  .command('get <issuanceKey>')
@@ -68,7 +72,7 @@ Example:
68
72
  invoice
69
73
  .command('status')
70
74
  .description('세금계산서 상태 조회 (GET /v1/taxInvoices/issue/status)')
71
- .requiredOption('--reference-id <id>', '요청 시 사용한 Client-Reference-Id')
75
+ .requiredOption('--reference-id <id>', '요청 시 사용한 앞뒤 공백 없는 출력 가능한 ASCII 1~255자의 요청자 관리번호')
72
76
  .addHelpText('after', `
73
77
  Example:
74
78
  bolta invoice status --reference-id inv-2026-001`)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/invoice/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAE3E,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BrB,CAAC;SACD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,WAAW,CAAC,OAAO,EAAE;;;;;;6CAMmB,CAAC;SACzC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE9B,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,8CAA8C,CAAC;SAC3D,WAAW,CAAC,OAAO,EAAE;;qDAE2B,CAAC;SACjD,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5B,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,cAAc,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;SACrE,WAAW,CAAC,OAAO,EAAE;;mDAEyB,CAAC;SAC/C,MAAM,CAAC,YAAY,CAAC,CAAC;IAExB,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/invoice/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAE3E,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+BrB,CAAC;SACD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,WAAW,CAAC,OAAO,EAAE;;;;;;;;yEAQ+C,CAAC;SACrE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE9B,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,8CAA8C,CAAC;SAC3D,WAAW,CAAC,OAAO,EAAE;;qDAE2B,CAAC;SACjD,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5B,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,cAAc,CAAC,qBAAqB,EAAE,iDAAiD,CAAC;SACxF,WAAW,CAAC,OAAO,EAAE;;mDAEyB,CAAC;SAC/C,MAAM,CAAC,YAAY,CAAC,CAAC;IAExB,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"issue-request.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
1
+ {"version":3,"file":"issue-request.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -2,32 +2,22 @@ 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 { createTaxInvoiceIssueRequestSchema } from '../../validators/schemas.js';
5
- import { BoltaValidationError } from '../../utils/errors.js';
6
- import { ZodError } from 'zod';
5
+ import { parseOrThrow } from '../../validators/parse.js';
6
+ import { parseOptionalTaxInvoiceReferenceId } from './reference-id.js';
7
7
  export async function issueRequestAction(options, command) {
8
8
  try {
9
9
  const globalOpts = command.optsWithGlobals();
10
+ const referenceId = parseOptionalTaxInvoiceReferenceId(options.referenceId);
10
11
  const raw = await resolveInput(options);
11
- let validated;
12
- try {
13
- validated = createTaxInvoiceIssueRequestSchema.parse(raw);
14
- }
15
- catch (err) {
16
- if (err instanceof ZodError) {
17
- const details = Object.fromEntries(err.errors.map((e) => [e.path.join('.'), e.message]));
18
- throw new BoltaValidationError('입력 데이터가 유효하지 않습니다.', details);
19
- }
20
- throw err;
21
- }
12
+ const validated = parseOrThrow(createTaxInvoiceIssueRequestSchema, raw);
22
13
  if (globalOpts.dryRun) {
23
14
  outputSuccess({ dryRun: true, requestBody: validated, endpoint: 'POST /v1/taxInvoices/issueRequest' });
24
15
  return;
25
16
  }
26
17
  verbose('세금계산서 역발행 요청');
27
- const { client, supplierKey } = createClient(globalOpts);
18
+ const client = createClient(globalOpts);
28
19
  const result = await client.issueRequestTaxInvoice(validated, {
29
- supplierKey,
30
- referenceId: options.referenceId,
20
+ referenceId,
31
21
  });
32
22
  outputSuccess(result);
33
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue-request.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.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,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,kCAAkC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE;YAC5D,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"issue-request.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.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,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,kCAAkC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QAExE,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE;YAC5D,WAAW;SACZ,CAAC,CAAC;QACH,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":"issue.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -2,32 +2,22 @@ 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 { createTaxInvoiceSchema } from '../../validators/schemas.js';
5
- import { BoltaValidationError } from '../../utils/errors.js';
6
- import { ZodError } from 'zod';
5
+ import { parseOrThrow } from '../../validators/parse.js';
6
+ import { parseOptionalTaxInvoiceReferenceId } from './reference-id.js';
7
7
  export async function issueAction(options, command) {
8
8
  try {
9
9
  const globalOpts = command.optsWithGlobals();
10
+ const referenceId = parseOptionalTaxInvoiceReferenceId(options.referenceId);
10
11
  const raw = await resolveInput(options);
11
- let validated;
12
- try {
13
- validated = createTaxInvoiceSchema.parse(raw);
14
- }
15
- catch (err) {
16
- if (err instanceof ZodError) {
17
- const details = Object.fromEntries(err.errors.map((e) => [e.path.join('.'), e.message]));
18
- throw new BoltaValidationError('입력 데이터가 유효하지 않습니다.', details);
19
- }
20
- throw err;
21
- }
12
+ const validated = parseOrThrow(createTaxInvoiceSchema, raw);
22
13
  if (globalOpts.dryRun) {
23
14
  outputSuccess({ dryRun: true, requestBody: validated, endpoint: 'POST /v1/taxInvoices/issue' });
24
15
  return;
25
16
  }
26
17
  verbose('세금계산서 정발행 요청');
27
- const { client, supplierKey } = createClient(globalOpts);
18
+ const client = createClient(globalOpts);
28
19
  const result = await client.issueTaxInvoice(validated, {
29
- supplierKey,
30
- referenceId: options.referenceId,
20
+ referenceId,
31
21
  });
32
22
  outputSuccess(result);
33
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.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,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;YACrD,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.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,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,kCAAkC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;YACrD,WAAW;SACZ,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function parseOptionalTaxInvoiceReferenceId(referenceId?: string): string | undefined;
2
+ //# sourceMappingURL=reference-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-id.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/reference-id.ts"],"names":[],"mappings":"AAGA,wBAAgB,kCAAkC,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI3F"}
@@ -0,0 +1,8 @@
1
+ import { parseOrThrow } from '../../validators/parse.js';
2
+ import { taxInvoiceClientReferenceIdSchema } from '../../validators/schemas.js';
3
+ export function parseOptionalTaxInvoiceReferenceId(referenceId) {
4
+ return referenceId === undefined
5
+ ? undefined
6
+ : parseOrThrow(taxInvoiceClientReferenceIdSchema, referenceId);
7
+ }
8
+ //# sourceMappingURL=reference-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-id.js","sourceRoot":"","sources":["../../../../src/commands/invoice/reference-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,UAAU,kCAAkC,CAAC,WAAoB;IACrE,OAAO,WAAW,KAAK,SAAS;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpG"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpG"}
@@ -1,15 +1,13 @@
1
- import { resolveApiKey, resolveBaseUrl } from '../../config/config-manager.js';
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';
3
+ import { parseOrThrow } from '../../validators/parse.js';
4
+ import { taxInvoiceClientReferenceIdSchema } from '../../validators/schemas.js';
5
5
  export async function statusAction(options, command) {
6
6
  try {
7
7
  const globalOpts = command.optsWithGlobals();
8
- const apiKey = resolveApiKey(globalOpts.apiKey);
9
- if (!apiKey)
10
- throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
11
- const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl() });
12
- const result = await client.getTaxInvoiceStatus(options.referenceId);
8
+ const referenceId = parseOrThrow(taxInvoiceClientReferenceIdSchema, options.referenceId);
9
+ const client = createApiKeyClient(globalOpts);
10
+ const result = await client.getTaxInvoiceStatus(referenceId);
13
11
  outputSuccess(result);
14
12
  }
15
13
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/invoice/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgC,EAAE,OAAgB;IACnF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/invoice/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgC,EAAE,OAAgB;IACnF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,iCAAiC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC7D,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import type { DataInputOptions } from '../../types/api.js';
3
+ export declare function createIssuerAction(options: DataInputOptions, command: Command): Promise<void>;
4
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/issuer/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnG"}
@@ -0,0 +1,24 @@
1
+ import { createApiKeyClient } from '../../utils/client.js';
2
+ import { resolveInput } from '../../utils/input.js';
3
+ import { outputSuccess, outputError, verbose } from '../../utils/output.js';
4
+ import { createIssuerSchema } from '../../validators/schemas.js';
5
+ import { parseOrThrow } from '../../validators/parse.js';
6
+ export async function createIssuerAction(options, command) {
7
+ try {
8
+ const globalOpts = command.optsWithGlobals();
9
+ const client = createApiKeyClient(globalOpts);
10
+ const raw = await resolveInput(options);
11
+ const validated = parseOrThrow(createIssuerSchema, raw);
12
+ if (globalOpts.dryRun) {
13
+ outputSuccess({ dryRun: true, requestBody: validated, endpoint: 'POST /v1/issuers' });
14
+ return;
15
+ }
16
+ verbose('발급자 등록 요청', { identificationNumber: validated.identificationNumber });
17
+ const result = await client.createIssuer(validated);
18
+ outputSuccess(result);
19
+ }
20
+ catch (err) {
21
+ outputError(err);
22
+ }
23
+ }
24
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/issuer/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAyB,EAAE,OAAgB;IAClF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAExD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACpD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function getIssuerAction(issuerId: string, options: Record<string, unknown>, command: Command): Promise<void>;
3
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/issuer/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzH"}
@@ -0,0 +1,14 @@
1
+ import { createApiKeyClient } from '../../utils/client.js';
2
+ import { outputSuccess, outputError } from '../../utils/output.js';
3
+ export async function getIssuerAction(issuerId, options, command) {
4
+ try {
5
+ const globalOpts = command.optsWithGlobals();
6
+ const client = createApiKeyClient(globalOpts);
7
+ const result = await client.getIssuer(issuerId);
8
+ outputSuccess(result);
9
+ }
10
+ catch (err) {
11
+ outputError(err);
12
+ }
13
+ }
14
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/issuer/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,eAAe,CAAC,QAAgB,EAAE,OAAgC,EAAE,OAAgB;IACxG,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerIssuerCommands(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/issuer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B7D"}
@@ -0,0 +1,31 @@
1
+ import { createIssuerAction } from './create.js';
2
+ import { getIssuerAction } from './get.js';
3
+ export function registerIssuerCommands(program) {
4
+ const issuer = program
5
+ .command('issuer')
6
+ .description('발급자 관리');
7
+ issuer
8
+ .command('create')
9
+ .description('발급자 등록 (POST /v1/issuers)')
10
+ .option('--data <json>', '인라인 JSON 데이터')
11
+ .option('--file <path>', 'JSON 파일 경로')
12
+ .option('--stdin', '표준 입력에서 읽기')
13
+ .addHelpText('after', `
14
+ Example:
15
+ bolta issuer create --data '{
16
+ "identificationNumber": "1234567890",
17
+ "organizationName": "주식회사 테스트",
18
+ "representativeName": "홍길동"
19
+ }'
20
+
21
+ bolta issuer create --file issuer.json`)
22
+ .action(createIssuerAction);
23
+ issuer
24
+ .command('get <issuerId>')
25
+ .description('발급자 조회 (GET /v1/issuers/{issuerId})')
26
+ .addHelpText('after', `
27
+ Example:
28
+ bolta issuer get issuer_bf8paz`)
29
+ .action(getIssuerAction);
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/issuer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEzB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,WAAW,CAAC,OAAO,EAAE;;;;;;;;yCAQe,CAAC;SACrC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE9B,MAAM;SACH,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,qCAAqC,CAAC;SAClD,WAAW,CAAC,OAAO,EAAE;;iCAEO,CAAC;SAC7B,MAAM,CAAC,eAAe,CAAC,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C5D"}
@@ -1,4 +1,4 @@
1
- import { outputSuccess, outputError, resolveDeprecatedName } from '../../utils/output.js';
1
+ import { outputSuccess, outputError, resolveLegacyIssuerName, LEGACY_ISSUER_CREATE_ALIASES, } from '../../utils/output.js';
2
2
  import { jsonSchemas } from '../../validators/schemas.js';
3
3
  import { BoltaError } from '../../utils/errors.js';
4
4
  export function registerSchemaCommand(program) {
@@ -7,7 +7,7 @@ export function registerSchemaCommand(program) {
7
7
  .description('입력 JSON 스키마 출력 (AI 에이전트용)')
8
8
  .addHelpText('after', `
9
9
  Available schemas:
10
- supplier-create 공급자 생성
10
+ issuer-create 발급자 등록
11
11
  invoice-issue 세금계산서 정발행
12
12
  invoice-issue-request 세금계산서 역발행 요청
13
13
  cash-receipt-issue 현금영수증 발행
@@ -28,8 +28,7 @@ Examples:
28
28
  outputSuccess({ availableSchemas: list });
29
29
  return;
30
30
  }
31
- // 하위호환: 스키마명 'customer-create' → 'supplier-create'
32
- commandName = resolveDeprecatedName(commandName, { 'customer-create': 'supplier-create' }, '스키마');
31
+ commandName = resolveLegacyIssuerName(commandName, LEGACY_ISSUER_CREATE_ALIASES, '스키마');
33
32
  const schema = jsonSchemas[commandName];
34
33
  if (!schema) {
35
34
  const available = Object.keys(jsonSchemas).join(', ');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,2BAA2B,CAAC;SACxC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;qDAY2B,CAAC;SACjD,MAAM,CAAC,CAAC,WAAoB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnD,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,gBAAgB,IAAI,EAAE;iBACpC,CAAC,CAAC,CAAC;gBACJ,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,WAAW,GAAG,qBAAqB,CAAC,WAAW,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;YAElG,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,IAAI,UAAU,CAClB,IAAI,WAAW,mBAAmB,EAClC,aAAa,EACb,eAAe,SAAS,EAAE,CAC3B,CAAC;YACJ,CAAC;YAED,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,2BAA2B,CAAC;SACxC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;qDAY2B,CAAC;SACjD,MAAM,CAAC,CAAC,WAAoB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnD,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,gBAAgB,IAAI,EAAE;iBACpC,CAAC,CAAC,CAAC;gBACJ,aAAa,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,WAAW,GAAG,uBAAuB,CAAC,WAAW,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;YAExF,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,IAAI,UAAU,CAClB,IAAI,WAAW,mBAAmB,EAClC,aAAa,EACb,eAAe,SAAS,EAAE,CAC3B,CAAC;YACJ,CAAC;YAED,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerLegacyIssuerCommands(program: Command): void;
3
+ //# sourceMappingURL=legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../../../src/commands/supplier/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8EpC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBnE"}
@@ -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"}