choco-one-click-payment 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # Choco One-Click Widget
2
+
3
+ Встраиваемый виджет для быстрой оплаты с bottom sheet интерфейсом.
4
+
5
+ ## Установка
6
+
7
+ ```bash
8
+ npm i choco-one-click-payment
9
+ ```
10
+
11
+ ## Использование
12
+
13
+ ESM:
14
+
15
+ ```javascript
16
+ import ChocoOneClickWidget from 'choco-one-click-payment';
17
+
18
+ const widget = new ChocoOneClickWidget({
19
+ trackId: 'your-track-id',
20
+ clientId: '123446',
21
+ terminalId: 6344,
22
+ merchantOrderId: 'ORDER-123',
23
+ amount: 410000,
24
+ environment: 'stage',
25
+ onSuccess: (data) => console.log('Success', data),
26
+ onError: (error) => console.error('Error', error),
27
+ onCancel: () => console.log('Cancelled')
28
+ });
29
+
30
+ await widget.init();
31
+ ```
32
+
33
+ CommonJS:
34
+
35
+ ```javascript
36
+ const ChocoOneClickWidget = require('choco-one-click-widget');
37
+ ```
38
+
39
+ ## API
40
+
41
+ - `clientId`- client_id
42
+ - `trackId` - track_id
43
+ - `terminalId` - ID терминала
44
+ - `merchantOrderId` - ID заказа
45
+ - `amount` - Сумма в тиынах
46
+ - `currency` - KZT или GEL (по умолчанию KZT)
47
+ - `environment` - production или stage
48
+ - `backlink` - URL для возврата
49
+ - `locale` - ru, en, kk (по умолчанию ru)
50
+
51
+ ## Сборка пакета (для разработчиков)
52
+
53
+ ```bash
54
+ npm install
55
+ npm run build
56
+ ```
57
+
58
+ Сборка генерирует:
59
+ - `index.js` (UMD/CJS entry)
60
+ - `index.esm.js` (ESM entry)
61
+ - `index.d.ts` (типы TypeScript)
package/index.d.ts ADDED
@@ -0,0 +1,224 @@
1
+ /**
2
+ * TypeScript definitions for Choco One-Click Widget
3
+ */
4
+
5
+ declare module 'choco-one-click-widget' {
6
+ export interface ChocoOneClickConfig {
7
+ /**
8
+ * TrackId для авторизации. При init() по нему получается access token.
9
+ * @required
10
+ */
11
+ trackId: string;
12
+
13
+ /**
14
+ * OAuth2 client_id — идентификатор приложения. Требуется бэкендом при
15
+ * обмене trackId на access token (запрос к /api/v2/oauth2/tokens).
16
+ * @required
17
+ */
18
+ clientId: string;
19
+
20
+ /**
21
+ * ID терминала от Choco
22
+ * @required
23
+ * @example 6344 (для staging)
24
+ */
25
+ terminalId: number;
26
+
27
+ /**
28
+ * Уникальный ID заказа в вашей системе
29
+ * @required
30
+ * @example "ORDER-12345"
31
+ */
32
+ merchantOrderId: string;
33
+
34
+ /**
35
+ * Сумма в тиынах (1₸ = 100 тиынов)
36
+ * @required
37
+ * @example 10000 (100₸)
38
+ */
39
+ amount: number;
40
+
41
+ /**
42
+ * Код валюты
43
+ * @default "KZT"
44
+ */
45
+ currency?: 'KZT' | 'GEL';
46
+
47
+ /**
48
+ * Окружение для API
49
+ * @default "production"
50
+ */
51
+ environment?: 'production' | 'stage';
52
+
53
+ /**
54
+ * URL для возврата после оплаты (важно для Kaspi Pay и 3DS)
55
+ * @optional
56
+ */
57
+ backlink?: string;
58
+
59
+ /**
60
+ * Язык интерфейса виджета
61
+ * @default "ru"
62
+ */
63
+ locale?: 'ru' | 'en' | 'kk';
64
+
65
+ /**
66
+ * Callback вызываемый при успешной оплате
67
+ * @param data - данные о платеже
68
+ */
69
+ onSuccess?: (data: PaymentSuccessEvent) => void;
70
+
71
+ /**
72
+ * Callback вызываемый при ошибке оплаты
73
+ * @param error - информация об ошибке
74
+ */
75
+ onError?: (error: PaymentErrorEvent | Error) => void;
76
+
77
+ /**
78
+ * Callback вызываемый при отмене оплаты пользователем
79
+ */
80
+ onCancel?: () => void;
81
+ }
82
+
83
+ export interface PaymentSuccessEvent {
84
+ /**
85
+ * Тип события
86
+ */
87
+ type: 'order.paid';
88
+
89
+ /**
90
+ * ID заказа в системе Choco
91
+ */
92
+ id: string;
93
+
94
+ /**
95
+ * Дополнительные данные
96
+ */
97
+ attributes: {
98
+ /**
99
+ * Сумма платежа
100
+ */
101
+ amount: number;
102
+
103
+ /**
104
+ * Дата и время оплаты
105
+ */
106
+ paid_at: string;
107
+ };
108
+ }
109
+
110
+ export interface PaymentErrorEvent {
111
+ /**
112
+ * Тип события
113
+ */
114
+ type: 'order.failed';
115
+
116
+ /**
117
+ * ID заказа в системе Choco
118
+ */
119
+ id: string;
120
+
121
+ /**
122
+ * Дополнительные данные
123
+ */
124
+ attributes: {
125
+ /**
126
+ * Сообщение об ошибке
127
+ */
128
+ message: string;
129
+ };
130
+ }
131
+
132
+ export interface PaymentActionRequiredEvent {
133
+ /**
134
+ * Тип события
135
+ */
136
+ type: 'order.action_required';
137
+
138
+ /**
139
+ * ID заказа в системе Choco
140
+ */
141
+ id: string;
142
+
143
+ /**
144
+ * Дополнительные данные
145
+ */
146
+ attributes: {
147
+ /**
148
+ * URL для редиректа (3DS, Kaspi)
149
+ */
150
+ action_url: string;
151
+ };
152
+ }
153
+
154
+ export interface PaymentMethod {
155
+ /**
156
+ * Тип метода оплаты
157
+ */
158
+ type: 'card' | 'kaspi_pay' | 'apple_pay' | 'google_pay' | 'new_card';
159
+
160
+ /**
161
+ * Отображаемое название метода
162
+ */
163
+ label: string;
164
+
165
+ /**
166
+ * ID карты (только для type: "card")
167
+ */
168
+ cardId?: number;
169
+
170
+ /**
171
+ * Тип карты (только для type: "card")
172
+ */
173
+ cardType?: string;
174
+
175
+ /**
176
+ * Является ли методом по умолчанию
177
+ */
178
+ isDefault?: boolean;
179
+ }
180
+
181
+ export default class ChocoOneClickWidget {
182
+ /**
183
+ * Создает экземпляр виджета
184
+ * @param config - конфигурация виджета
185
+ */
186
+ constructor(config: ChocoOneClickConfig);
187
+
188
+ /**
189
+ * Инициализирует виджет: загружает контекст оплаты,
190
+ * подключается к WebSocket и отображает UI
191
+ * @returns Promise<boolean> - true при успешной инициализации
192
+ */
193
+ init(): Promise<boolean>;
194
+
195
+ /**
196
+ * Уничтожает виджет: отключает WebSocket, удаляет UI
197
+ */
198
+ destroy(): void;
199
+
200
+ /**
201
+ * Закрывает виджет (вызывает onCancel)
202
+ */
203
+ close(): void;
204
+
205
+ /**
206
+ * Открывает bottom sheet с выбором метода оплаты
207
+ */
208
+ openPaymentSheet(): void;
209
+
210
+ /**
211
+ * Закрывает bottom sheet
212
+ */
213
+ closePaymentSheet(): void;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Global declarations for CDN usage
219
+ */
220
+ declare global {
221
+ interface Window {
222
+ ChocoOneClickWidget: typeof import('choco-one-click-widget').default;
223
+ }
224
+ }