@bolta-io/cli 0.0.18 → 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 (120) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CLAUDE.md +43 -24
  3. package/README.md +54 -22
  4. package/dist/bin/bolta.js +29 -30
  5. package/dist/bin/bolta.js.map +1 -1
  6. package/dist/src/client/bolta-client.d.ts +26 -19
  7. package/dist/src/client/bolta-client.d.ts.map +1 -1
  8. package/dist/src/client/bolta-client.js +71 -48
  9. package/dist/src/client/bolta-client.js.map +1 -1
  10. package/dist/src/commands/cash-receipt/cancel.d.ts +5 -0
  11. package/dist/src/commands/cash-receipt/cancel.d.ts.map +1 -0
  12. package/dist/src/commands/cash-receipt/cancel.js +27 -0
  13. package/dist/src/commands/cash-receipt/cancel.js.map +1 -0
  14. package/dist/src/commands/cash-receipt/index.d.ts +3 -0
  15. package/dist/src/commands/cash-receipt/index.d.ts.map +1 -0
  16. package/dist/src/commands/cash-receipt/index.js +63 -0
  17. package/dist/src/commands/cash-receipt/index.js.map +1 -0
  18. package/dist/src/commands/cash-receipt/issue.d.ts +8 -0
  19. package/dist/src/commands/cash-receipt/issue.d.ts.map +1 -0
  20. package/dist/src/commands/cash-receipt/issue.js +29 -0
  21. package/dist/src/commands/cash-receipt/issue.js.map +1 -0
  22. package/dist/src/commands/cash-receipt/status.d.ts +5 -0
  23. package/dist/src/commands/cash-receipt/status.d.ts.map +1 -0
  24. package/dist/src/commands/cash-receipt/status.js +17 -0
  25. package/dist/src/commands/cash-receipt/status.js.map +1 -0
  26. package/dist/src/commands/certificate/index.d.ts.map +1 -1
  27. package/dist/src/commands/certificate/index.js +19 -42
  28. package/dist/src/commands/certificate/index.js.map +1 -1
  29. package/dist/src/commands/config/index.d.ts.map +1 -1
  30. package/dist/src/commands/config/index.js +17 -54
  31. package/dist/src/commands/config/index.js.map +1 -1
  32. package/dist/src/commands/examples/index.d.ts.map +1 -1
  33. package/dist/src/commands/examples/index.js +73 -9
  34. package/dist/src/commands/examples/index.js.map +1 -1
  35. package/dist/src/commands/guide/index.d.ts.map +1 -1
  36. package/dist/src/commands/guide/index.js +71 -27
  37. package/dist/src/commands/guide/index.js.map +1 -1
  38. package/dist/src/commands/invoice/amend.d.ts.map +1 -1
  39. package/dist/src/commands/invoice/amend.js +9 -30
  40. package/dist/src/commands/invoice/amend.js.map +1 -1
  41. package/dist/src/commands/invoice/get.d.ts.map +1 -1
  42. package/dist/src/commands/invoice/get.js +2 -7
  43. package/dist/src/commands/invoice/get.js.map +1 -1
  44. package/dist/src/commands/invoice/index.js +1 -1
  45. package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
  46. package/dist/src/commands/invoice/issue-request.js +3 -15
  47. package/dist/src/commands/invoice/issue-request.js.map +1 -1
  48. package/dist/src/commands/invoice/issue.d.ts.map +1 -1
  49. package/dist/src/commands/invoice/issue.js +3 -15
  50. package/dist/src/commands/invoice/issue.js.map +1 -1
  51. package/dist/src/commands/invoice/status.d.ts.map +1 -1
  52. package/dist/src/commands/invoice/status.js +2 -7
  53. package/dist/src/commands/invoice/status.js.map +1 -1
  54. package/dist/src/commands/issuer/create.d.ts +4 -0
  55. package/dist/src/commands/issuer/create.d.ts.map +1 -0
  56. package/dist/src/commands/issuer/create.js +24 -0
  57. package/dist/src/commands/issuer/create.js.map +1 -0
  58. package/dist/src/commands/issuer/get.d.ts +3 -0
  59. package/dist/src/commands/issuer/get.d.ts.map +1 -0
  60. package/dist/src/commands/issuer/get.js +14 -0
  61. package/dist/src/commands/issuer/get.js.map +1 -0
  62. package/dist/src/commands/issuer/index.d.ts +3 -0
  63. package/dist/src/commands/issuer/index.d.ts.map +1 -0
  64. package/dist/src/commands/issuer/index.js +31 -0
  65. package/dist/src/commands/issuer/index.js.map +1 -0
  66. package/dist/src/commands/schema/index.d.ts.map +1 -1
  67. package/dist/src/commands/schema/index.js +4 -4
  68. package/dist/src/commands/schema/index.js.map +1 -1
  69. package/dist/src/commands/supplier/legacy.d.ts +3 -0
  70. package/dist/src/commands/supplier/legacy.d.ts.map +1 -0
  71. package/dist/src/commands/supplier/legacy.js +75 -0
  72. package/dist/src/commands/supplier/legacy.js.map +1 -0
  73. package/dist/src/config/config-manager.d.ts +7 -9
  74. package/dist/src/config/config-manager.d.ts.map +1 -1
  75. package/dist/src/config/config-manager.js +28 -48
  76. package/dist/src/config/config-manager.js.map +1 -1
  77. package/dist/src/types/api.d.ts +86 -7
  78. package/dist/src/types/api.d.ts.map +1 -1
  79. package/dist/src/utils/client.d.ts +10 -7
  80. package/dist/src/utils/client.d.ts.map +1 -1
  81. package/dist/src/utils/client.js +26 -10
  82. package/dist/src/utils/client.js.map +1 -1
  83. package/dist/src/utils/errors.d.ts +2 -2
  84. package/dist/src/utils/errors.d.ts.map +1 -1
  85. package/dist/src/utils/errors.js +4 -4
  86. package/dist/src/utils/errors.js.map +1 -1
  87. package/dist/src/utils/legacy-issuer.d.ts +28 -0
  88. package/dist/src/utils/legacy-issuer.d.ts.map +1 -0
  89. package/dist/src/utils/legacy-issuer.js +45 -0
  90. package/dist/src/utils/legacy-issuer.js.map +1 -0
  91. package/dist/src/utils/output.d.ts +7 -3
  92. package/dist/src/utils/output.d.ts.map +1 -1
  93. package/dist/src/utils/output.js +14 -4
  94. package/dist/src/utils/output.js.map +1 -1
  95. package/dist/src/validators/parse.d.ts +3 -0
  96. package/dist/src/validators/parse.d.ts.map +1 -0
  97. package/dist/src/validators/parse.js +15 -0
  98. package/dist/src/validators/parse.js.map +1 -0
  99. package/dist/src/validators/schemas.d.ts +182 -1
  100. package/dist/src/validators/schemas.d.ts.map +1 -1
  101. package/dist/src/validators/schemas.js +230 -7
  102. package/dist/src/validators/schemas.js.map +1 -1
  103. package/llms.txt +47 -34
  104. package/package.json +4 -2
  105. package/dist/src/commands/supplier/create.d.ts +0 -4
  106. package/dist/src/commands/supplier/create.d.ts.map +0 -1
  107. package/dist/src/commands/supplier/create.js +0 -40
  108. package/dist/src/commands/supplier/create.js.map +0 -1
  109. package/dist/src/commands/supplier/get.d.ts +0 -3
  110. package/dist/src/commands/supplier/get.d.ts.map +0 -1
  111. package/dist/src/commands/supplier/get.js +0 -19
  112. package/dist/src/commands/supplier/get.js.map +0 -1
  113. package/dist/src/commands/supplier/index.d.ts +0 -3
  114. package/dist/src/commands/supplier/index.d.ts.map +0 -1
  115. package/dist/src/commands/supplier/index.js +0 -56
  116. package/dist/src/commands/supplier/index.js.map +0 -1
  117. package/dist/src/commands/supplier/legacy-customer.d.ts +0 -5
  118. package/dist/src/commands/supplier/legacy-customer.d.ts.map +0 -1
  119. package/dist/src/commands/supplier/legacy-customer.js +0 -56
  120. package/dist/src/commands/supplier/legacy-customer.js.map +0 -1
@@ -1,14 +1,9 @@
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';
5
3
  export async function getInvoiceAction(issuanceKey, options, command) {
6
4
  try {
7
5
  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() });
6
+ const client = createApiKeyClient(globalOpts);
12
7
  const result = await client.getTaxInvoice(issuanceKey);
13
8
  outputSuccess(result);
14
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,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,gBAAgB,CAAC,WAAmB,EAAE,OAAgC,EAAE,OAAgB;IAC5G,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,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/invoice/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAAgC,EAAE,OAAgB;IAC5G,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -27,7 +27,7 @@ Example:
27
27
  "identificationNumber": "1234567890",
28
28
  "organizationName": "공급자 주식회사",
29
29
  "representativeName": "김공급",
30
- "manager": { "email": "supplier@example.com" }
30
+ "manager": { "email": "seller@example.com" }
31
31
  },
32
32
  "supplied": {
33
33
  "identificationNumber": "0987654321",
@@ -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;AAE3D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -2,31 +2,19 @@ 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';
7
6
  export async function issueRequestAction(options, command) {
8
7
  try {
9
8
  const globalOpts = command.optsWithGlobals();
10
9
  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
- }
10
+ const validated = parseOrThrow(createTaxInvoiceIssueRequestSchema, raw);
22
11
  if (globalOpts.dryRun) {
23
12
  outputSuccess({ dryRun: true, requestBody: validated, endpoint: 'POST /v1/taxInvoices/issueRequest' });
24
13
  return;
25
14
  }
26
15
  verbose('세금계산서 역발행 요청');
27
- const { client, supplierKey } = createClient(globalOpts);
16
+ const client = createClient(globalOpts);
28
17
  const result = await client.issueRequestTaxInvoice(validated, {
29
- supplierKey,
30
18
  referenceId: options.referenceId,
31
19
  });
32
20
  outputSuccess(result);
@@ -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;AAGzD,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;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,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 +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;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,CAoBf"}
@@ -2,31 +2,19 @@ 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';
7
6
  export async function issueAction(options, command) {
8
7
  try {
9
8
  const globalOpts = command.optsWithGlobals();
10
9
  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
- }
10
+ const validated = parseOrThrow(createTaxInvoiceSchema, raw);
22
11
  if (globalOpts.dryRun) {
23
12
  outputSuccess({ dryRun: true, requestBody: validated, endpoint: 'POST /v1/taxInvoices/issue' });
24
13
  return;
25
14
  }
26
15
  verbose('세금계산서 정발행 요청');
27
- const { client, supplierKey } = createClient(globalOpts);
16
+ const client = createClient(globalOpts);
28
17
  const result = await client.issueTaxInvoice(validated, {
29
- supplierKey,
30
18
  referenceId: options.referenceId,
31
19
  });
32
20
  outputSuccess(result);
@@ -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;AAGzD,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;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,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 +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;AAIpC,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASpG"}
@@ -1,14 +1,9 @@
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';
5
3
  export async function statusAction(options, command) {
6
4
  try {
7
5
  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() });
6
+ const client = createApiKeyClient(globalOpts);
12
7
  const result = await client.getTaxInvoiceStatus(options.referenceId);
13
8
  outputSuccess(result);
14
9
  }
@@ -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;AAEnE,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,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,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"}
@@ -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,CA6C5D"}
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,9 +7,10 @@ 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
+ cash-receipt-issue 현금영수증 발행
13
14
  amend-termination 수정발행: 계약 해제
14
15
  amend-change-supply-cost 수정발행: 공급가액 변동
15
16
  amend-double-issuance 수정발행: 착오에 의한 이중발급 (입력 없음)
@@ -27,8 +28,7 @@ Examples:
27
28
  outputSuccess({ availableSchemas: list });
28
29
  return;
29
30
  }
30
- // 하위호환: 스키마명 'customer-create' → 'supplier-create'
31
- commandName = resolveDeprecatedName(commandName, { 'customer-create': 'supplier-create' }, '스키마');
31
+ commandName = resolveLegacyIssuerName(commandName, LEGACY_ISSUER_CREATE_ALIASES, '스키마');
32
32
  const schema = jsonSchemas[commandName];
33
33
  if (!schema) {
34
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;;;;;;;;;;;qDAW2B,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"}
@@ -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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"}