@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @bolta-io/cli
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1570031: 발급자 관리와 인증서 API를 issuer 계약으로 전환하고 발행 기본 인증에서 별도 발급자 키를 제거합니다. 기존 supplier/customer 명령과 키 설정은 2026-12-31까지 숨김 호환으로 유지하며, 레거시 키로 403이 발생하면 설정 출처에 맞는 해제 방법을 안내합니다. `bolta guide issuer`는 CLI가 실제 지원하는 발행 흐름만 안내합니다.
8
+
9
+ ## 0.1.1
10
+
11
+ ### Patch Changes
12
+
13
+ - a5913fb: npm에서 제거된 0.1.0 버전과 충돌하지 않도록 0.1.1로 다시 배포하고, 릴리스 전에 전체 게시 이력을 확인합니다.
14
+
15
+ ## 0.1.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 3f0976f: 현금영수증 발행, 상태 조회, 전액 취소 명령을 추가합니다. 발행 입력 스키마와 수취인 유형별 예제도 함께 제공합니다.
20
+
3
21
  ## 0.0.18
4
22
 
5
23
  ### Patch Changes
package/CLAUDE.md CHANGED
@@ -1,30 +1,26 @@
1
1
  # Bolta CLI - AI 사용 가이드
2
2
 
3
- 이 프로젝트는 Bolta API의 공식 CLI 도구입니다. 전자세금계산서 발행/조회/수정을 자동화합니다.
3
+ 이 프로젝트는 Bolta API의 공식 CLI 도구입니다. 전자세금계산서와 현금영수증 발행/조회/수정을 자동화합니다.
4
4
 
5
5
  ## 빠른 시작
6
6
 
7
7
  ```bash
8
8
  # 인증 설정 (환경변수)
9
9
  export BOLTA_API_KEY="test_your_key"
10
- export BOLTA_SUPPLIER_KEY="SupplierKey_abc123"
11
10
 
12
11
  # 또는 config 명령어로 설정
13
12
  bolta config set api-key test_your_key
14
- bolta config set supplier-key SupplierKey_abc123
15
13
  ```
16
14
 
17
- ## 핵심 개념: Supplier Key (중요!)
15
+ ## 핵심 개념: 발급자
18
16
 
19
- supplierKey는 세금계산서를 발행하는 **공급자 본인**을 식별하는 키입니다.
17
+ 발급자는 세금계산서나 현금영수증 발행에 사용하는 인증서의 소유자입니다.
20
18
 
21
- - 획득: 공급자의 사업자 정보로 `bolta supplier create` 호출 → 응답의 supplierKey
22
- - 설정: `bolta config set supplier-key <값>` 또는 `BOLTA_SUPPLIER_KEY` 환경변수
23
- - API 단위로 독립 관리 (test_/live_ 키별로 별도 생성 필요, 상호 호환 안 됨)
19
+ - 등록: `bolta issuer create` 호출 → 응답의 `issuerId`
20
+ - 관리: `issuerId`는 발급자 조회와 인증서 등록·조회·해제에만 사용
21
+ - 발행: API 키로 인증하고 요청 본문의 사업자등록번호로 발급자를 선택
24
22
 
25
- **주의: Supplier-Key에 공급받는자의 키를 넣지 마세요.** 거래처(공급받는자) 정보는 세금계산서 JSON의 `supplied` 필드에 포함합니다.
26
-
27
- > 구 명칭 `customer`(명령어·`--customer-key`·`BOLTA_CUSTOMER_KEY`·`config set customer-key`)는 deprecated이며 당분간 동작합니다(경고 출력).
23
+ 일반 정발행과 역발행은 `supplier.identificationNumber`, 현금영수증은 `issuer.businessRegistrationNumber`를 사용합니다.
28
24
 
29
25
  ## 요금 안내
30
26
 
@@ -38,14 +34,14 @@ Bolta API는 **사전 충전 포인트 차감 방식** 유료 서비스입니다
38
34
 
39
35
  ### 세금계산서 발행 (가장 일반적인 업무)
40
36
 
41
- 1. **공급자 등록** (최초 1회):
37
+ 1. **발급자 등록** (최초 1회):
42
38
  ```bash
43
- bolta supplier create --data '{"identificationNumber":"1234567890","organizationName":"주식회사 테스트","representativeName":"홍길동"}'
39
+ bolta issuer create --data '{"identificationNumber":"1234567890","organizationName":"주식회사 테스트","representativeName":"홍길동"}'
44
40
  ```
45
41
 
46
42
  2. **인증서 확인** (정발행 시 공급자 인증서 필요):
47
43
  ```bash
48
- bolta certificate status SupplierKey_abc123
44
+ bolta certificate status <issuerId>
49
45
  ```
50
46
 
51
47
  3. **세금계산서 정발행**:
@@ -58,7 +54,7 @@ bolta invoice issue --data '{
58
54
  "identificationNumber": "1234567890",
59
55
  "organizationName": "공급자",
60
56
  "representativeName": "김공급",
61
- "manager": {"email": "supplier@example.com"}
57
+ "manager": {"email": "seller@example.com"}
62
58
  },
63
59
  "supplied": {
64
60
  "identificationNumber": "0987654321",
@@ -80,15 +76,37 @@ bolta invoice issue --data '{
80
76
  bolta invoice get <issuanceKey>
81
77
  ```
82
78
 
79
+ ### 현금영수증 발행
80
+
81
+ 현금영수증 발행·취소는 요청 접수 후 상태가 확정되는 비동기 작업입니다.
82
+
83
+ ```bash
84
+ bolta cash-receipt issue --reference-id cash-2026-001 --data '{
85
+ "itemName": "서비스 이용료",
86
+ "issuer": {
87
+ "businessRegistrationNumber": "5648102684",
88
+ "organizationName": "(주) 볼타코퍼레이션",
89
+ "representativeName": "이문혁",
90
+ "telephone": "02-1234-5678"
91
+ },
92
+ "recipient": { "type": "PHONE", "value": "010-1234-5678" },
93
+ "amount": { "supplyAmount": 100, "vatAmount": 10, "taxFreeAmount": 0 }
94
+ }'
95
+
96
+ bolta cash-receipt status --reference-id cash-2026-001
97
+ ```
98
+
99
+ `202 Accepted`만으로 발행 성공으로 판단하지 마세요. `status`가 `ISSUED`인지 확인하세요.
100
+
83
101
  ## 커맨드 빠른 참조
84
102
 
85
103
  | 커맨드 | 설명 | 데이터 필요 |
86
104
  |--------|------|------------|
87
- | `bolta supplier create` | 공급자 생성 | --data |
88
- | `bolta supplier get <key>` | 공급자 조회 | - |
89
- | `bolta certificate url <key>` | 인증서 등록 URL | - |
90
- | `bolta certificate status <key>` | 인증서 상태 | - |
91
- | `bolta certificate deregister <key>` | 인증서 해제 | - |
105
+ | `bolta issuer create` | 발급자 등록 | --data |
106
+ | `bolta issuer get <issuerId>` | 발급자 조회 | - |
107
+ | `bolta certificate url <issuerId>` | 인증서 등록 URL | - |
108
+ | `bolta certificate status <issuerId>` | 인증서 상태 | - |
109
+ | `bolta certificate deregister <issuerId>` | 인증서 해제 | - |
92
110
  | `bolta invoice issue` | 세금계산서 정발행 | --data |
93
111
  | `bolta invoice issue-request` | 역발행 요청 | --data |
94
112
  | `bolta invoice get <issuanceKey>` | 세금계산서 조회 | - |
@@ -96,6 +114,9 @@ bolta invoice get <issuanceKey>
96
114
  | `bolta invoice amend termination <key> --date <date>` | 수정: 계약해제 | - |
97
115
  | `bolta invoice amend change-supply-cost <key>` | 수정: 가액변동 | --data |
98
116
  | `bolta invoice amend double-issuance <key>` | 수정: 착오 이중발급 | - |
117
+ | `bolta cash-receipt issue --reference-id <id>` | 현금영수증 발행 | --data |
118
+ | `bolta cash-receipt status --reference-id <id>` | 현금영수증 상태 조회 | - |
119
+ | `bolta cash-receipt cancel <key> --reference-id <id>` | 현금영수증 전액 취소 | - |
99
120
  | `bolta config set <key> <value>` | 설정 | - |
100
121
  | `bolta config show` | 설정 확인 | - |
101
122
  | `bolta config test` | 연결 테스트 | - |
@@ -103,8 +124,6 @@ bolta invoice get <issuanceKey>
103
124
  | `bolta schema [command]` | 입력 스키마 | - |
104
125
  | `bolta guide [topic]` | 주요 개념 안내 | - |
105
126
 
106
- > 인증서 명령의 `<key>`에는 신규 supplierKey를 쓰세요. deprecated `CustomerKey_` 키도 당분간 동작합니다.
107
-
108
127
  ## 입력 방법
109
128
 
110
129
  데이터가 필요한 커맨드에서 3가지 방식 지원:
@@ -126,10 +145,10 @@ bolta invoice get <issuanceKey>
126
145
  |-----------|------|------|
127
146
  | `AUTH_ERROR` | API 키 없음/잘못됨 | `bolta config set api-key <key>` |
128
147
  | `VALIDATION_ERROR` | 입력 데이터 오류 | `bolta schema <command>`로 스키마 확인 |
129
- | `INPUT_ERROR` | 입력 방식 오류 | `--data`, `--file`, `--stdin` 하나 사용 |
148
+ | `INPUT_ERROR` | 명령어·옵션·입력 방식 오류 | `bolta --help` 또는 하위 명령의 `--help`로 사용법 확인 |
130
149
  | `HTTP_402` | 포인트 잔액 부족 | https://developers.bolta.io 에서 포인트 충전 |
131
150
  | `HTTP_400` | 잘못된 요청 | error.message 확인, 필수 필드 누락 체크 |
132
- | `HTTP_404` | 리소스 없음 | issuanceKey/supplierKey 확인 |
151
+ | `HTTP_404` | 리소스 없음 | issuanceKey/issuerId 확인 |
133
152
  | `HTTP_429` | 요청 제한 초과 | 자동 재시도 (최대 3회) |
134
153
  | `NETWORK_ERROR` | 네트워크 오류 | 인터넷 연결 확인 |
135
154
 
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # bolta
2
2
 
3
- Bolta API CLI - 한국 전자세금계산서 발행/조회/관리 도구
3
+ Bolta API CLI - 한국 전자세금계산서와 현금영수증 발행/조회/관리 도구
4
4
 
5
- AI 에이전트(Claude Code 등)가 세금계산서 업무를 자동화할 때 사용할 수 있도록 설계되었습니다.
5
+ AI 에이전트(Claude Code 등)가 세금계산서와 현금영수증 업무를 자동화할 때 사용할 수 있도록 설계되었습니다.
6
6
 
7
7
  ## 설치
8
8
 
@@ -35,11 +35,9 @@ Bolta API를 사용하려면 API 키가 필요합니다. 환경변수 또는 CLI
35
35
  ```bash
36
36
  # 방법 1: 환경변수 (권장)
37
37
  export BOLTA_API_KEY="test_your_key"
38
- export BOLTA_SUPPLIER_KEY="SupplierKey_abc123"
39
38
 
40
39
  # 방법 2: CLI 명령 (영구 저장 - ~/.bolta/config.json)
41
40
  bolta config set api-key test_your_key
42
- bolta config set supplier-key SupplierKey_abc123
43
41
 
44
42
  # 연결 테스트
45
43
  bolta config test
@@ -49,36 +47,34 @@ bolta config test
49
47
 
50
48
  ### 커맨드 전체 목록
51
49
 
52
- #### 공급자 관리
50
+ #### 발급자 관리
53
51
 
54
52
  ```bash
55
- # 공급자 생성
56
- bolta supplier create --data '{
53
+ # 발급자 등록
54
+ bolta issuer create --data '{
57
55
  "identificationNumber": "1234567890",
58
56
  "organizationName": "주식회사 테스트",
59
57
  "representativeName": "홍길동"
60
58
  }'
61
59
 
62
- # 공급자 조회
63
- bolta supplier get <supplierKey>
60
+ # 발급자 조회
61
+ bolta issuer get <issuerId>
64
62
  ```
65
63
 
66
- > 구 `customer` 명령(`bolta customer ...`)은 deprecated이며 당분간 동작합니다(경고 출력).
67
-
68
64
  #### 인증서 관리
69
65
 
70
66
  ```bash
71
67
  # 인증서 등록 URL 조회
72
- bolta certificate url <supplierKey>
68
+ bolta certificate url <issuerId>
73
69
 
74
70
  # 인증서 등록 상태 조회
75
- bolta certificate status <supplierKey>
71
+ bolta certificate status <issuerId>
76
72
 
77
73
  # 인증서 해제
78
- bolta certificate deregister <supplierKey>
74
+ bolta certificate deregister <issuerId>
79
75
  ```
80
76
 
81
- > deprecated `CustomerKey_` 키도 인증서 명령에서 당분간 사용할 있습니다.
77
+ `issuerId`는 발급자와 인증서 관리에만 사용합니다. 발행 요청은 본문의 사업자등록번호로 발급자를 찾습니다.
82
78
 
83
79
  #### 세금계산서 발행/조회
84
80
 
@@ -92,7 +88,7 @@ bolta invoice issue --data '{
92
88
  "identificationNumber": "1234567890",
93
89
  "organizationName": "공급자 주식회사",
94
90
  "representativeName": "김공급",
95
- "manager": { "email": "supplier@example.com" }
91
+ "manager": { "email": "seller@example.com" }
96
92
  },
97
93
  "supplied": {
98
94
  "identificationNumber": "0987654321",
@@ -145,10 +141,47 @@ bolta invoice amend change-supply-cost <issuanceKey> --data '{
145
141
  bolta invoice amend double-issuance <issuanceKey>
146
142
  ```
147
143
 
144
+ #### 현금영수증
145
+
146
+ 현금영수증 발행과 취소는 비동기입니다. API가 요청을 접수하면 `issuanceKey`를 반환하며, 최종 결과는 `status` 명령으로 확인합니다.
147
+
148
+ ```bash
149
+ # 휴대폰번호로 현금영수증 발행
150
+ bolta cash-receipt issue --reference-id cash-2026-001 --data '{
151
+ "itemName": "서비스 이용료",
152
+ "issuer": {
153
+ "businessRegistrationNumber": "5648102684",
154
+ "organizationName": "(주) 볼타코퍼레이션",
155
+ "representativeName": "이문혁",
156
+ "telephone": "02-1234-5678"
157
+ },
158
+ "recipient": {
159
+ "type": "PHONE",
160
+ "value": "010-1234-5678"
161
+ },
162
+ "amount": {
163
+ "supplyAmount": 100,
164
+ "vatAmount": 10,
165
+ "taxFreeAmount": 0
166
+ }
167
+ }'
168
+
169
+ # 발행 상태 확인
170
+ bolta cash-receipt status --reference-id cash-2026-001
171
+
172
+ # 발행 완료 건 전액 취소
173
+ bolta cash-receipt cancel <issuanceKey> --reference-id cash-2026-001-cancel
174
+
175
+ # 취소 상태 확인
176
+ bolta cash-receipt status --reference-id cash-2026-001-cancel
177
+ ```
178
+
179
+ `PENDING`과 `REQUEST_SUCCESS`는 처리 중입니다. `ISSUED` 또는 `CANCELED` 상태를 확인한 뒤 성공으로 처리하세요. 부분 취소는 지원하지 않습니다.
180
+
148
181
  #### 설정
149
182
 
150
183
  ```bash
151
- bolta config set <key> <value> # api-key, supplier-key, base-url
184
+ bolta config set <key> <value> # api-key, base-url, update-check
152
185
  bolta config show # 현재 설정 확인
153
186
  bolta config test # API 연결 테스트
154
187
  ```
@@ -156,7 +189,7 @@ bolta config test # API 연결 테스트
156
189
  #### 도움말
157
190
 
158
191
  ```bash
159
- # 주요 개념 안내 (supplier-key, payment, workflow, glossary)
192
+ # 주요 개념 안내 (issuer, payment, workflow, cash-receipt, glossary)
160
193
  bolta guide [topic]
161
194
 
162
195
  # 바로 쓸 수 있는 샘플 JSON
@@ -168,6 +201,7 @@ bolta schema [command]
168
201
 
169
202
  `invoice issue`, `invoice issue-request`, `amend change-supply-cost` 입력은 국세청 XML 전송 제한에 맞춰 로컬에서 먼저 검증됩니다. 필드별 길이 제한은 `bolta schema invoice-issue`로 확인할 수 있습니다.
170
203
  `taxType`은 `TAXABLE`(과세), `ZERO_RATE`(영세율), `TAX_FREE`(면세) 중 하나이며 필수입니다. `ZERO_RATE`은 모든 품목의 `tax`를 `0`으로, `TAX_FREE`는 모든 품목의 `tax`를 `null`로 전달합니다.
204
+ 현금영수증 입력 규칙은 `bolta schema cash-receipt-issue`로 확인할 수 있습니다. 수취인 유형별 예제는 `bolta examples cash-receipt-issue`, `cash-receipt-issue-business`, `cash-receipt-issue-self`를 사용하세요.
171
205
 
172
206
  #### 업데이트
173
207
 
@@ -199,8 +233,6 @@ cat invoice.json | bolta invoice issue --stdin
199
233
  | 옵션 | 설명 |
200
234
  |------|------|
201
235
  | `--api-key <key>` | API 키 오버라이드 |
202
- | `--supplier-key <key>` | Supplier Key 오버라이드 |
203
- | `--customer-key <key>` | (deprecated) `--supplier-key`를 사용하세요 |
204
236
  | `--verbose` | 상세 로그 출력 (stderr) |
205
237
  | `--dry-run` | API 호출 없이 요청 데이터만 출력 |
206
238
 
@@ -222,10 +254,10 @@ cat invoice.json | bolta invoice issue --stdin
222
254
  |------|------|------|
223
255
  | `AUTH_ERROR` | API 키 없음/잘못됨 | `bolta config set api-key <key>` |
224
256
  | `VALIDATION_ERROR` | 입력 데이터 오류 | `bolta schema <command>`로 스키마 확인 |
225
- | `INPUT_ERROR` | 입력 방식 오류 | `--data`, `--file`, `--stdin` 하나 사용 |
257
+ | `INPUT_ERROR` | 명령어·옵션·입력 방식 오류 | `bolta --help` 또는 하위 명령의 `--help`로 사용법 확인 |
226
258
  | `HTTP_402` | 포인트 잔액 부족 | https://developers.bolta.io 에서 포인트 충전 |
227
259
  | `HTTP_400` | 잘못된 요청 | error.message 확인 |
228
- | `HTTP_404` | 리소스 없음 | issuanceKey/supplierKey 확인 |
260
+ | `HTTP_404` | 리소스 없음 | issuanceKey/issuerId 확인 |
229
261
  | `HTTP_429` | 요청 제한 초과 | 자동 재시도 (최대 3회) |
230
262
  | `NETWORK_ERROR` | 네트워크 오류 | 인터넷 연결 확인 |
231
263
 
package/dist/bin/bolta.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { registerSupplierCommands } from '../src/commands/supplier/index.js';
2
+ import { Command, CommanderError, Option } from 'commander';
3
+ import { registerIssuerCommands } from '../src/commands/issuer/index.js';
4
+ import { registerLegacyIssuerCommands } from '../src/commands/supplier/legacy.js';
4
5
  import { registerCertificateCommands } from '../src/commands/certificate/index.js';
5
6
  import { registerInvoiceCommands } from '../src/commands/invoice/index.js';
6
7
  import { registerConfigCommands } from '../src/commands/config/index.js';
@@ -9,62 +10,54 @@ import { registerSchemaCommand } from '../src/commands/schema/index.js';
9
10
  import { registerUpdateCommands } from '../src/commands/update/index.js';
10
11
  import { maybeNudgeUpdate, refreshUpdateCache, UPDATE_CACHE_COMMAND, } from '../src/commands/update/nudge.js';
11
12
  import { registerGuideCommand } from '../src/commands/guide/index.js';
12
- import { outputError, deprecationWarning } from '../src/utils/output.js';
13
+ import { registerCashReceiptCommands } from '../src/commands/cash-receipt/index.js';
14
+ import { legacyIssuerWarning, outputError } from '../src/utils/output.js';
15
+ import { BoltaInputError } from '../src/utils/errors.js';
13
16
  import { getCurrentVersion } from '../src/utils/version.js';
14
17
  import { loadConfig, saveConfig } from '../src/config/config-manager.js';
15
18
  const program = new Command();
19
+ program
20
+ .configureOutput({
21
+ outputError: () => { },
22
+ })
23
+ .exitOverride();
16
24
  program
17
25
  .name('bolta')
18
- .description('Bolta API CLI - 전자세금계산서 발행/조회/관리 도구 (AI 에이전트 최적화)')
26
+ .description('Bolta API CLI - 전자세금계산서·현금영수증 발행/조회/관리 도구 (AI 에이전트 최적화)')
19
27
  .version(getCurrentVersion())
20
28
  .option('--api-key <key>', 'Bolta API 키 (환경변수 BOLTA_API_KEY 대체)')
21
- .option('--supplier-key <key>', 'Supplier Key (환경변수 BOLTA_SUPPLIER_KEY 대체)')
22
- .option('--customer-key <key>', '(deprecated) --supplier-key를 사용하세요')
29
+ .addOption(new Option('--supplier-key <key>').hideHelp())
30
+ .addOption(new Option('--customer-key <key>').hideHelp())
23
31
  .option('--verbose', '상세 로그 출력 (stderr)', false)
24
32
  .option('--dry-run', 'API 호출 없이 요청 데이터만 출력', false)
25
33
  .hook('preAction', (thisCommand, actionCommand) => {
26
34
  const opts = thisCommand.optsWithGlobals();
35
+ if (opts.supplierKey) {
36
+ legacyIssuerWarning("'--supplier-key' 플래그");
37
+ }
38
+ else if (opts.customerKey) {
39
+ legacyIssuerWarning("'--customer-key' 플래그");
40
+ }
27
41
  if (opts.verbose) {
28
42
  process.env.BOLTA_VERBOSE = '1';
29
43
  }
30
44
  // 백그라운드 캐시 갱신 자식 프로세스: 힌트/넛지 없이 본연의 작업만 (재귀 spawn 방지)
31
45
  if (actionCommand.name() === UPDATE_CACHE_COMMAND)
32
46
  return;
33
- warnDeprecatedUsage();
34
47
  const config = loadConfig();
35
48
  checkFirstRun(actionCommand, config);
36
49
  checkForUpdate(actionCommand, config);
37
50
  });
38
- registerSupplierCommands(program);
51
+ registerIssuerCommands(program);
52
+ registerLegacyIssuerCommands(program);
39
53
  registerCertificateCommands(program);
40
54
  registerInvoiceCommands(program);
55
+ registerCashReceiptCommands(program);
41
56
  registerConfigCommands(program);
42
57
  registerExamplesCommand(program);
43
58
  registerSchemaCommand(program);
44
59
  registerUpdateCommands(program);
45
60
  registerGuideCommand(program);
46
- // 값을 받는 전역 옵션(공백 구분 형태일 때 다음 토큰을 값으로 소비)
47
- const GLOBAL_VALUE_OPTIONS = new Set(['--api-key', '--supplier-key', '--customer-key']);
48
- function warnDeprecatedUsage() {
49
- // 구 명령어 'customer'를 alias로 사용한 경우 경고.
50
- // 첫 번째 위치 인자(=명령어)만 검사해 데이터 값에 'customer'가 들어가도 오탐하지 않는다.
51
- // (--customer-key 플래그/BOLTA_CUSTOMER_KEY/config customer-key는 resolveSupplierKey에서 경고)
52
- const argv = process.argv.slice(2);
53
- for (let i = 0; i < argv.length; i++) {
54
- const token = argv[i];
55
- if (GLOBAL_VALUE_OPTIONS.has(token)) {
56
- i++; // 옵션 값 건너뛰기
57
- continue;
58
- }
59
- if (token.startsWith('-'))
60
- continue; // boolean 플래그(--verbose 등)
61
- // 첫 위치 인자 = 명령어
62
- if (token === 'customer') {
63
- deprecationWarning("'customer' 명령어는 'supplier'로 변경되었습니다. 'bolta supplier ...'를 사용하세요.");
64
- }
65
- break;
66
- }
67
- }
68
61
  function checkFirstRun(actionCommand, config) {
69
62
  const commandName = actionCommand.name();
70
63
  const parentName = actionCommand.parent?.name();
@@ -95,6 +88,12 @@ program
95
88
  await refreshUpdateCache();
96
89
  });
97
90
  program.parseAsync(process.argv).catch((err) => {
91
+ if (err instanceof CommanderError) {
92
+ if (err.exitCode === 0)
93
+ return;
94
+ const message = err.message.replace(/^error:\s*/, '');
95
+ outputError(new BoltaInputError(message, "명령어와 필수 옵션을 확인하세요. 'bolta --help' 또는 'bolta <command> --help'로 사용법을 확인할 수 있습니다."));
96
+ }
98
97
  outputError(err);
99
98
  });
100
99
  //# sourceMappingURL=bolta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bolta.js","sourceRoot":"","sources":["../../bin/bolta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bolta.js","sourceRoot":"","sources":["../../bin/bolta.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,51 @@
1
- import type { CreateTaxInvoiceRequest, IssuanceResponse, TaxInvoiceDetail, StatusResponse, AmendTerminationRequest, AmendChangeSupplyCostRequest, CreateSupplierRequest, SupplierResponse, CreateCustomerRequest, LegacyCustomerResponse, CertificateUrlResponse } from '../types/api.js';
1
+ import type { CreateTaxInvoiceRequest, IssuanceResponse, TaxInvoiceDetail, StatusResponse, AmendTerminationRequest, AmendChangeSupplyCostRequest, CreateIssuerRequest, IssuerResponse, CreateSupplierRequest, LegacySupplierResponse, CreateCustomerRequest, LegacyCustomerResponse, CertificateUrlResponse, CertificateStatusResponse, CreateCashReceiptRequest, CashReceiptCancellationResponse, CashReceiptStatusResponse } from '../types/api.js';
2
+ import { type LegacyIssuerHeader } from '../utils/legacy-issuer.js';
2
3
  interface ClientConfig {
3
4
  apiKey: string;
4
5
  baseUrl: string;
5
- supplierKey?: string;
6
- /** supplierKey를 어느 소스에서 가져왔는지(env/config 등). 진단 로그·에러에 노출된다. */
7
- supplierKeySource?: string;
6
+ /** 구 설정이 남아 있을 때만 지정한다. 지정하면 Supplier-Key 헤더를 싣는다. */
7
+ legacyIssuer?: LegacyIssuerHeader;
8
8
  timeout?: number;
9
9
  maxRetries?: number;
10
10
  }
11
11
  export declare class BoltaClient {
12
12
  private readonly baseUrl;
13
13
  private readonly encodedApiKey;
14
- private readonly supplierKey?;
15
- private readonly supplierKeySource;
14
+ private readonly legacyIssuer?;
16
15
  private readonly timeout;
17
16
  private readonly maxRetries;
18
17
  constructor(config: ClientConfig);
19
- createSupplier(data: CreateSupplierRequest): Promise<SupplierResponse>;
20
- getSupplier(supplierKey: string): Promise<SupplierResponse>;
21
- /** @deprecated 신규 코드에서는 createSupplier를 사용하세요. */
18
+ createIssuer(data: CreateIssuerRequest): Promise<IssuerResponse>;
19
+ getIssuer(issuerId: string): Promise<IssuerResponse>;
20
+ /** @deprecated 2026-12-31까지 숨김 `supplier` CLI 호환용입니다. */
21
+ createSupplier(data: CreateSupplierRequest): Promise<LegacySupplierResponse>;
22
+ /** @deprecated 2026-12-31까지 숨김 `supplier` CLI 호환용입니다. */
23
+ getSupplier(supplierKey: string): Promise<LegacySupplierResponse>;
24
+ /** @deprecated 2026-12-31까지 숨김 `customer` CLI 호환용입니다. */
22
25
  createCustomer(data: CreateCustomerRequest): Promise<LegacyCustomerResponse>;
23
- /** @deprecated 신규 코드에서는 getSupplier를 사용하세요. */
26
+ /** @deprecated 2026-12-31까지 숨김 `customer` CLI 호환용입니다. */
24
27
  getCustomer(customerKey: string): Promise<LegacyCustomerResponse>;
25
- getCertificateUrl(supplierKey: string): Promise<CertificateUrlResponse>;
26
- getCertificateStatus(supplierKey: string): Promise<unknown>;
27
- deregisterCertificate(supplierKey: string): Promise<unknown>;
28
+ getCertificateUrl(issuerId: string): Promise<CertificateUrlResponse>;
29
+ getCertificateStatus(issuerId: string): Promise<CertificateStatusResponse>;
30
+ deregisterCertificate(issuerId: string): Promise<unknown>;
28
31
  issueTaxInvoice(data: CreateTaxInvoiceRequest, options?: {
29
- supplierKey?: string;
30
32
  referenceId?: string;
31
33
  }): Promise<IssuanceResponse>;
32
34
  issueRequestTaxInvoice(data: CreateTaxInvoiceRequest, options?: {
33
- supplierKey?: string;
34
35
  referenceId?: string;
35
36
  }): Promise<IssuanceResponse>;
36
37
  getTaxInvoice(issuanceKey: string): Promise<TaxInvoiceDetail>;
37
38
  getTaxInvoiceStatus(clientReferenceId: string): Promise<StatusResponse>;
38
- amendTermination(issuanceKey: string, data: AmendTerminationRequest, supplierKey?: string): Promise<IssuanceResponse>;
39
- amendChangeSupplyCost(issuanceKey: string, data: AmendChangeSupplyCostRequest, supplierKey?: string): Promise<IssuanceResponse>;
40
- amendDoubleIssuance(issuanceKey: string, supplierKey?: string): Promise<IssuanceResponse>;
41
- private certificatePath;
39
+ amendTermination(issuanceKey: string, data: AmendTerminationRequest): Promise<IssuanceResponse>;
40
+ amendChangeSupplyCost(issuanceKey: string, data: AmendChangeSupplyCostRequest): Promise<IssuanceResponse>;
41
+ amendDoubleIssuance(issuanceKey: string): Promise<IssuanceResponse>;
42
+ issueCashReceipt(data: CreateCashReceiptRequest, options: {
43
+ referenceId: string;
44
+ }): Promise<IssuanceResponse>;
45
+ getCashReceiptStatus(clientReferenceId: string): Promise<CashReceiptStatusResponse>;
46
+ cancelCashReceipt(issuanceKey: string, options: {
47
+ referenceId: string;
48
+ }): Promise<CashReceiptCancellationResponse>;
42
49
  private request;
43
50
  }
44
51
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"bolta-client.d.ts","sourceRoot":"","sources":["../../../src/client/bolta-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAOzB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,YAAY;IAiB1B,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAItE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQjE,kDAAkD;IAC5C,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIlF,+CAA+C;IACzC,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAWjE,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOvE,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3D,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW5D,eAAe,CACnB,IAAI,EAAE,uBAAuB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,gBAAgB,CAAC;IAUtB,sBAAsB,CAC1B,IAAI,EAAE,uBAAuB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,gBAAgB,CAAC;IAUtB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAO7D,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOvE,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAStB,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,4BAA4B,EAClC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAStB,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAY5B,OAAO,CAAC,eAAe;YAQT,OAAO;CA6HtB"}
1
+ {"version":3,"file":"bolta-client.d.ts","sourceRoot":"","sources":["../../../src/client/bolta-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAEnC,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,YAAY;IAgB1B,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIhE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ1D,yDAAyD;IACnD,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIlF,yDAAyD;IACnD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOvE,yDAAyD;IACnD,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIlF,yDAAyD;IACnD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAWjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOpE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAO1E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzD,eAAe,CACnB,IAAI,EAAE,uBAAuB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAStB,sBAAsB,CAC1B,IAAI,EAAE,uBAAuB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAStB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAO7D,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOvE,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IAQtB,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAQtB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWnE,gBAAgB,CACpB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC/B,OAAO,CAAC,gBAAgB,CAAC;IAStB,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAOnF,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAC/B,OAAO,CAAC,+BAA+B,CAAC;YAY7B,OAAO;CA2HtB"}