x-app-sdk 1.0.8-beta.6 → 1.1.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 CHANGED
@@ -1,7 +1,8 @@
1
1
  # x-app-sdk
2
2
 
3
3
  ## Giới thiệu
4
- `x-app-sdk` là một thư viện hỗ trợ phát triển ứng dụng với các tính năng tương tác với `superapp` và các thành phần UI cơ bản.
4
+ `x-app-sdk` là một thư viện hỗ trợ phát triển ứng dụng với các tính năng tương tác với `superapp`.
5
+ SDK với dữ liệu thật chỉ được trả ra khi chạy trên Super App. Khi chạy trên web thường sẽ có những data mẫu có cấu trúc tương tự data thật.
5
6
 
6
7
  ## Cài đặt
7
8
  Bạn có thể cài đặt `x-app-sdk` bằng npm:
@@ -14,37 +15,296 @@ yarn add x-app-sdk
14
15
  ```
15
16
 
16
17
  ## Các tính năng chính
17
- ### 1. SDK tương tác với SuperApp
18
- #### `requestInfo()`
19
- Lấy thông tin từ `superapp`.
18
+
19
+ ### 1. Config - Cấu hình ứng dụng
20
+ #### `configUIApp(config)`
21
+ Cấu hình giao diện ứng dụng trong SuperApp.
22
+ ```js
23
+ import { configUIApp } from 'x-app-sdk';
24
+
25
+ const config = {
26
+ headerTitle: 'Tên ứng dụng',
27
+ headerColor: '#ffffff',
28
+ headerTextColor: '#000000'
29
+ };
30
+
31
+ configUIApp(config).then(response => {
32
+ console.log('Cấu hình thành công:', response);
33
+ }).catch(error => {
34
+ console.error('Lỗi cấu hình:', error);
35
+ });
36
+ ```
37
+
38
+ ### 2. Device - Tương tác thiết bị
39
+ #### `call(phoneNumber)`
40
+ Thực hiện cuộc gọi đến số điện thoại.
41
+ ```js
42
+ import { call } from 'x-app-sdk';
43
+
44
+ call('0123456789').then(() => {
45
+ console.log('Bắt đầu cuộc gọi');
46
+ }).catch(error => {
47
+ console.error('Lỗi cuộc gọi:', error);
48
+ });
49
+ ```
50
+
51
+ #### `sms(phoneNumber)`
52
+ Mở ứng dụng tin nhắn với số điện thoại.
53
+ ```js
54
+ import { sms } from 'x-app-sdk';
55
+
56
+ sms('0123456789').then(() => {
57
+ console.log('Mở ứng dụng tin nhắn');
58
+ }).catch(error => {
59
+ console.error('Lỗi tin nhắn:', error);
60
+ });
61
+ ```
62
+
63
+ #### `vibrate()`
64
+ Kích hoạt rung thiết bị.
65
+ ```js
66
+ import { vibrate } from 'x-app-sdk';
67
+
68
+ vibrate().then(() => {
69
+ console.log('Thiết bị rung');
70
+ }).catch(error => {
71
+ console.error('Lỗi rung:', error);
72
+ });
73
+ ```
74
+
75
+ ### 3. Location - Dịch vụ vị trí
76
+ #### `currentLocation()`
77
+ Lấy vị trí hiện tại của thiết bị.
78
+ ```js
79
+ import { currentLocation } from 'x-app-sdk';
80
+
81
+ currentLocation().then(location => {
82
+ console.log('Vị trí hiện tại:', location.data);
83
+ }).catch(error => {
84
+ console.error('Lỗi lấy vị trí:', error);
85
+ });
86
+ ```
87
+
88
+ #### `requestLocationPermission()`
89
+ Yêu cầu quyền truy cập vị trí.
90
+ ```js
91
+ import { requestLocationPermission } from 'x-app-sdk';
92
+
93
+ requestLocationPermission().then(response => {
94
+ console.log('Quyền vị trí:', response);
95
+ }).catch(error => {
96
+ console.error('Lỗi quyền vị trí:', error);
97
+ });
98
+ ```
99
+
100
+ ### 4. Media - Xử lý phương tiện
101
+ #### `openPickerImage(type)`
102
+ Mở trình chọn ảnh từ thiết bị.
103
+ ```js
104
+ import { openPickerImage, EMediaType } from 'x-app-sdk';
105
+
106
+ openPickerImage(EMediaType.GALLERY).then(imageData => {
107
+ console.log('Dữ liệu ảnh:', imageData.data);
108
+ }).catch(error => {
109
+ console.error('Lỗi chọn ảnh:', error);
110
+ });
111
+ ```
112
+
113
+ #### `openPickerFile()`
114
+ Mở trình chọn file từ thiết bị.
115
+ ```js
116
+ import { openPickerFile } from 'x-app-sdk';
117
+
118
+ openPickerFile().then(fileData => {
119
+ console.log('Dữ liệu file:', fileData.data);
120
+ }).catch(error => {
121
+ console.error('Lỗi chọn file:', error);
122
+ });
123
+ ```
124
+
125
+ ### 5. Notification - Thông báo
126
+ #### `listenNotifiactionEvent(callback)`
127
+ Lắng nghe các sự kiện thông báo từ SuperApp.
20
128
  ```js
21
- import { requestInfo } from 'x-app-sdk';
129
+ import { listenNotifiactionEvent } from 'x-app-sdk';
22
130
 
23
- requestInfo().then(info => {
24
- console.log('Thông tin ứng dụng:', info);
131
+ const unsubscribe = listenNotifiactionEvent((data) => {
132
+ console.log('Thông báo mới:', data);
133
+ });
134
+
135
+ // Để hủy lắng nghe
136
+ unsubscribe();
137
+ ```
138
+
139
+ ### 6. Payment - Thanh toán
140
+ #### `paymentRequest(body)`
141
+ Thực hiện yêu cầu thanh toán qua SuperApp.
142
+ ```js
143
+ import { paymentRequest } from 'x-app-sdk';
144
+
145
+ const paymentData = {
146
+ amount: 100000,
147
+ description: 'Thanh toán đơn hàng',
148
+ orderId: 'ORDER123'
149
+ };
150
+
151
+ paymentRequest(paymentData).then(result => {
152
+ console.log('Kết quả thanh toán:', result.data);
25
153
  }).catch(error => {
26
- console.error('Lỗi khi lấy thông tin:', error);
154
+ console.error('Lỗi thanh toán:', error);
27
155
  });
28
156
  ```
29
157
 
30
- #### `openPickerImage()`
31
- Mở trình chọn ảnh từ `superapp`.
158
+ #### `listenPaymentEvent(callback)`
159
+ Lắng nghe các sự kiện thanh toán.
160
+ ```js
161
+ import { listenPaymentEvent } from 'x-app-sdk';
162
+
163
+ const unsubscribe = listenPaymentEvent((data) => {
164
+ console.log('Sự kiện thanh toán:', data);
165
+ });
166
+
167
+ // Để hủy lắng nghe
168
+ unsubscribe();
169
+ ```
170
+
171
+ ### 7. Permission - Quyền truy cập
172
+ #### `premissionsRequest(type)`
173
+ Yêu cầu quyền truy cập cho một tính năng cụ thể.
32
174
  ```js
33
- import { openPickerImage } from 'x-app-sdk';
175
+ import { premissionsRequest, ETypeRequest } from 'x-app-sdk';
34
176
 
35
- openPickerImage().then(imageData => {
36
- console.log('Dữ liệu ảnh:', imageData);
177
+ premissionsRequest(ETypeRequest.RequestPickerImage).then(granted => {
178
+ if (granted.data) {
179
+ console.log('Quyền được cấp');
180
+ } else {
181
+ console.log('Quyền bị từ chối');
182
+ }
37
183
  }).catch(error => {
38
- console.error('Lỗi khi mở trình chọn ảnh:', error);
184
+ console.error('Lỗi kiểm tra quyền:', error);
39
185
  });
40
186
  ```
41
187
 
42
- #### `closeApp()`
43
- Đóng ứng dụng từ `superapp`.
188
+ ### 8. Routing - Điều hướng
189
+ #### `closeApp(data?)`
190
+ Đóng ứng dụng và trả về SuperApp.
44
191
  ```js
45
192
  import { closeApp } from 'x-app-sdk';
46
193
 
194
+ // Đóng ứng dụng
47
195
  closeApp();
196
+
197
+ // Đóng ứng dụng với dữ liệu trả về
198
+ closeApp({ result: 'success', data: 'some data' });
199
+ ```
200
+
201
+ ### 9. Store - Lưu trữ cục bộ
202
+ #### `saveStore(data)`
203
+ Lưu dữ liệu vào bộ nhớ cục bộ của SuperApp.
204
+ ```js
205
+ import { saveStore } from 'x-app-sdk';
206
+
207
+ const data = JSON.stringify({ key: 'value' });
208
+ saveStore(data).then(() => {
209
+ console.log('Dữ liệu đã được lưu');
210
+ }).catch(error => {
211
+ console.error('Lỗi lưu dữ liệu:', error);
212
+ });
213
+ ```
214
+
215
+ #### `getStore()`
216
+ Lấy dữ liệu từ bộ nhớ cục bộ.
217
+ ```js
218
+ import { getStore } from 'x-app-sdk';
219
+
220
+ getStore().then(result => {
221
+ const data = JSON.parse(result.data);
222
+ console.log('Dữ liệu lấy được:', data);
223
+ }).catch(error => {
224
+ console.error('Lỗi lấy dữ liệu:', error);
225
+ });
226
+ ```
227
+
228
+ #### `clearStore()`
229
+ Xóa tất cả dữ liệu trong bộ nhớ cục bộ.
230
+ ```js
231
+ import { clearStore } from 'x-app-sdk';
232
+
233
+ clearStore().then(() => {
234
+ console.log('Dữ liệu đã được xóa');
235
+ }).catch(error => {
236
+ console.error('Lỗi xóa dữ liệu:', error);
237
+ });
238
+ ```
239
+
240
+ ### 10. User - Thông tin người dùng
241
+ #### `getInfo(key)`
242
+ Lấy thông tin người dùng từ SuperApp.
243
+ ```js
244
+ import { getInfo, EKeyInfor } from 'x-app-sdk';
245
+
246
+ getInfo(EKeyInfor.USER_ID).then(info => {
247
+ console.log('ID người dùng:', info.data);
248
+ }).catch(error => {
249
+ console.error('Lỗi lấy thông tin:', error);
250
+ });
251
+ ```
252
+
253
+ #### `getToken()`
254
+ Lấy token đăng nhập ngừoi dùng.
255
+ ```js
256
+ import { getToken } from 'x-app-sdk';
257
+
258
+ getToken().then(token => {
259
+ console.log('Token người dùng:', token);
260
+ }).catch(error => {
261
+ console.error('Lỗi lấy thông tin:', error);
262
+ });
263
+ ```
264
+
265
+ ## Lưu ý quan trọng
266
+
267
+ - Tất cả các API đều yêu cầu SDK được khởi tạo trước khi sử dụng
268
+ - Một số tính năng yêu cầu quyền truy cập từ người dùng
269
+ - Khi chạy trong browser mode, một số tính năng sẽ trả về dữ liệu mẫu
270
+ - Luôn xử lý lỗi (catch) khi gọi các API bất đồng bộ
271
+ - Nhớ hủy đăng ký các listener khi không cần thiết để tránh memory leak
272
+
273
+ ## Import tổng hợp
274
+
275
+ Bạn có thể import tất cả các services từ entry point chính:
276
+ ```js
277
+ import {
278
+ // Config
279
+ configUIApp,
280
+
281
+ // Device
282
+ call, sms, vibrate,
283
+
284
+ // Location
285
+ currentLocation, requestLocationPermission,
286
+
287
+ // Media
288
+ openPickerImage, openPickerFile,
289
+
290
+ // Notification
291
+ listenNotifiactionEvent,
292
+
293
+ // Payment
294
+ paymentRequest, listenPaymentEvent,
295
+
296
+ // Permission
297
+ premissionsRequest,
298
+
299
+ // Routing
300
+ closeApp,
301
+
302
+ // Store
303
+ saveStore, getStore, clearStore,
304
+
305
+ // User
306
+ getInfo, getToken
307
+ } from 'x-app-sdk';
48
308
  ```
49
309
 
50
310
  ## Kết luận
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";var R=Object.defineProperty;var u=(A,g,C)=>g in A?R(A,g,{enumerable:!0,configurable:!0,writable:!0,value:C}):A[g]=C;var i=(A,g,C)=>u(A,typeof g!="symbol"?g+"":g,C);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var o=(A=>(A.RequestConfigUIApp="requestConfigUIApp",A.RequestInfo="requestInfo",A.RequestCloseApp="requestCloseApp",A.RequestPickerImage="requestPickerImage",A.RequestPickerFile="requestPickerFile",A.RequestVibrate="requestVibrate",A.RequestCall="requestCall",A.RequestSms="requestSms",A.RequestLocationPermission="requestLocationPermission",A.RequestCurrentLocation="requestCurrentLocation",A.RequestPayment="requestPayment",A.requestGetPermission="requestGetPermission",A))(o||{}),s=(A=>(A.ResponseConfigApp="responseConfigUIApp",A.ResponseInfo="responseInfo",A.ResponsePickerImage="responsePickerImage",A.ResponsePickerFile="responsePickerFile",A.ResponseVibrate="responseVibrate",A.ResponseCall="responseCall",A.ResponseSms="responseSms",A.ResponseLocationPermission="responseLocationPermission",A.ResponseCurrentLocation="responseCurrentLocation",A.ResponseCloseApp="responseCloseApp",A.ResponsePayment="responsePayment",A.ResponseNotification="responseNotification",A.ResponseGetPermisstion="responseGetPermisstion",A))(s||{}),n=(A=>(A.SUCCESS="success",A.ERROR="error",A.PREMISSION_ERROR="premissionError",A))(n||{}),c=(A=>(A.USER="user",A))(c||{}),a=(A=>(A.gallery="gallery",A.camera="camera",A))(a||{});class P{constructor(){i(this,"premissions");i(this,"getPremissions",()=>({[o.RequestInfo]:!0,[o.RequestCloseApp]:!0,[o.RequestPickerImage]:!0,[o.RequestVibrate]:!0}));i(this,"checkPremission",g=>this.premissions[g]??!0);this.premissions={},this.initialize()}initialize(){window.flutter_inappwebview||(this.premissions=this.getPremissions())}}class p{constructor(){i(this,"handlers");i(this,"isInitialized");i(this,"isBrowserMode");i(this,"cachedInfo");i(this,"infoRequests");i(this,"premissionEvent");this.handlers=new Map,this.isInitialized=!1,this.isBrowserMode=!1,this.cachedInfo=new Map,this.infoRequests=new Map,this.premissionEvent=new P,this.initialize()}initialize(){window.flutter_inappwebview?(this.setupMessageHandler(),this.isInitialized=!0,this.isBrowserMode=!1,this.send(o.RequestInfo,{})):(this.isInitialized=!0,this.isBrowserMode=!0,console.warn("Flutter channel not found. Running in browser mode."))}setupMessageHandler(){window.receiveFromFlutter=g=>{try{const C=JSON.parse(g);if(C.type===s.ResponseInfo){this.handleInfoUpdate(C.data);return}this.handleMessage(C)}catch(C){console.error("Error parsing message from Flutter:",C)}}}handleInfoUpdate(g){g&&Object.entries(g).forEach(([C,e])=>{this.cachedInfo.set(C,e),(this.infoRequests.get(C)||[]).forEach(r=>r(e)),this.infoRequests.delete(C)})}handleMessage(g){(this.handlers.get(g.type)||[]).forEach(e=>{try{e(g)}catch(t){console.error("Error in message handler:",t)}})}send(g,C){if(!this.isInitialized){console.error("SDK not initialized");return}const t=JSON.stringify({type:g,data:C});window.flutter_inappwebview&&window.flutter_inappwebview.callHandler("Flutter",t).catch(r=>console.error("Error sending message to Flutter:",r))}on(g,C){const e=this.handlers.get(g)||[];e.push(C),this.handlers.set(g,e)}off(g,C){const e=this.handlers.get(g)||[],t=e.indexOf(C);t>-1&&(e.splice(t,1),this.handlers.set(g,e))}getBrowserMode(){return this.isBrowserMode}getInitialized(){return this.isInitialized}getCachedInfo(g){return this.cachedInfo.get(g)}getInfoRequests(){return this.infoRequests}setInfoRequest(g,C){this.infoRequests.set(g,C)}checkPremissionEvent(g){return this.premissionEvent.checkPremission(g)}}const I=new p;I.getBrowserMode();const m={user:{name:"Pham Hong Son"}},d=async A=>{if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.RequestInfo)){const e={type:s.ResponseInfo,status:n.PREMISSION_ERROR};return Promise.resolve(e)}const C={type:s.ResponseInfo,status:n.SUCCESS,data:m[A]};return Promise.resolve(C)}const g=I.getCachedInfo(A);if(g!==void 0){const C={type:s.ResponseInfo,status:n.SUCCESS,data:g};return Promise.resolve(C)}return new Promise(C=>{const t=I.getInfoRequests().get(A)||[];t.push(r=>{const l={type:s.ResponseInfo,status:n.SUCCESS,data:r};C(l)}),I.setInfoRequest(A,t),I.send(o.RequestInfo,{key:A})})},h={path:"/hello.png",base64:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAZABkAwEiAAIRAQMRAf/EABwAAAICAwEBAAAAAAAAAAAAAAAFAQQCAwYHCP/EADMQAAEDAgQEAwgCAgMAAAAAAAEAAgMEEQUSITETQVFhBiJyFCQ0cYGhscEHMiORQtHh/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAECAwQF/8QAHREBAQACAgMBAAAAAAAAAAAAAAECESExAxJBUf/aAAwDAQACEQMRAD8A94QgIXI9BIQgITAQpUIAQhCAFIUKQgMgpUKUESYv8S30D8lCMX0qW+gfkoUq4NQpUBSEyCkKEAEmw1KYTdQsmMc92VgueijYkHdACEBSgIUhAujZAZBTyUBTyQRJjHxLfQPyUIxf4lvoH5KFK4ahCgLW+Utfkawuda6cmykt6beazjeWPDm7jZVBKZSREQ2wuSR9luopjlbIQCRfRPWjywsnJJT4lKMQqIm+cNcRlcfx0T2nfHMxziSDbQd+hXJ07mtxmqD43OcZHWAF7ap02rjhu5t9dC07qZfp5Y/DNSqFNjNJM1zDdjxrmdpbt3TBmV8WdsjT0HVV2gKQhjHPDi1tw3dQ9zY4eI+RjRfYnVBJClLZsZp4mFpYeuYjfsmMcvtFKyYjITYNZYbEInIu4UYqPeG+n9lCMU+Ib6f2UKTMQdFqla7OJI9XAWI6hc3T1b4KOGWrrJWGY+W2w+at1GIS0sLPaHiQucQC3S4VzGxpjjceTZ0jAyR7dHkWIViACGHzt0yGxPXqqNNK2R2R4LnhvE22b3VDxDjFpBC54yhtiG7AdEZXRZ9+sYUzWTVL6h5Di4l2UGw30PzsrL2OkIDAGl2l90jgr6jOPY6TiDk3OBdeeY1/KuL0+JGOhgw+OOO5MdQ8hxsCbX2uQNB8llOeIeWUnNeiyU7Y55XPuTC4Z83O6zhrLGRscrg0HKMp3SjB8ZOPYPBXhjmNxBznPidqY3t0LfoR91ZoYhT1MYkvmJLg1o1OiW9DW16KsruM13FOa1r8j/0mLJ3zgmQvuBzCp4PWYdUwCnpqqmlqm6yRsla5zD3AKt1MQdE5rvK8bO5hM9F80ZrcTpqeM+Vzru5WA3XZlnDiYbjUaN6BI/DGHgSzyyOvKCWF7tgBqU4KqfqM7zqFeKH3hvp/ZQscV+Ib6f2UJocnQzx4lh7cPneI6hhvC52zuyrg176mmwyoaGhkgy3FzbnrzFktiYHtBcLHqU4osZkp2tFSxtRwv6OcfM369FqrHKXjJdrcVkhxOsZCbN4fAJIvppf7pc6OWsqiTmy7E9VXo6+Vra6NrA51a0Ne/YtGbMQPnYJ1TxubDlzAXFxzWXlGN9srUsh4QZJE8At2LOS8+xf+LcNxjxKcSkrpoY5HZnU3DzBx7c7L0vDaXiNyyMbobh1tFejpooaoP1z8y4tH2FyoxtnSrJeyHwtS0+B4RT4ZUvL5InyzGVzbZnPeTft0t2WXi4ifAKqLCA+SsrC2DNCfMyMn/JlPI2WPiyio3Y3RVtC4Q19S8U8pEjmtLCLl+XYuGXpdN6HAoMLwhlPHW1dbUHzConeHSONtxYC/01T52dk9Y+ZfAUdS/wAVxUWHYZ7JWQyn3kZg9jhpZ3Ijt0uvo32+cPMdWY3a5Q+J2h/2sPYCA+V7WCQ6ONtT113+i01lKG0p4b2vdfMCzeyWVuV2WGPrNOm8OyiXNC9278xce6aEWcRe9jZc34Rc6eoybFwA17ldEdCR00VzpF7KsVPvDdf+I/JQscV+Ib6f2UJE4FjLH+x1UmAE3P8ApehnA8McPg2D0uI/axd4fw02PCePlIVqhx9K+OPDqqnfGM0zoyyTTyhpNx9bpjhszJY+CBYjYnchPj4bw11PMCZuK4tyuLrltr3tpzXLhjaPEZYYi4tYbZn72Wfk6X4+6eUxMJsS5/e+yzn4mUiJwAPTQf8Aq0RPAZ0+WyM4Gzr366LOVqWVeAxTvjqJXvfVx3cyUnVp7dE4oqsmERzZc4A0d/U/Pp2PJYcQloJBUxML3AED6hG/wN+IzN4IylxkI56nTqRvbqlNK+SIuJGfMdi03TR9LdhDpBcbA6FKayuZEBFG28g2I3CBFijroqCp8zQGuFyW8l08UsE9MyWGXMTuP2F55XVBMAkt5hqbq94dxT2ecRyG0L+V9u6vGpyx2fYrrUN9P7KFljOQ1d4CTGWgi+/PRCNI2ZXIB1WQJQhaobY25qad5vdhbb6krhXMEmLSZtcxJKELPy9Rfi+mNIS9pDjoFL2AygEkg6WKELFtGmQuZEcjiN1FPUymM3edDZCFP1XxhiE8mUXcTdwH2S+NgjbJKCc5I3PVCFSWms+CqHEklrbi6qw60ubmALIQqxJ0tM9z6OnLnEnJa/1KEIVxm//Z"},y={path:"/hello.png",size:12e3,base64:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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"},G=async A=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.RequestPickerImage)){const C={type:s.ResponsePickerImage,status:n.PREMISSION_ERROR};return Promise.resolve(C)}const g={type:s.ResponsePickerImage,status:n.SUCCESS,data:h};return Promise.resolve(g)}return new Promise((g,C)=>{const e=t=>{t.status===n.ERROR?C(t):g(t),I.off(s.ResponsePickerImage,e)};I.on(s.ResponsePickerImage,e),I.send(o.RequestPickerImage,{type:A})})},f=async()=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.RequestPickerFile)){const g={type:s.ResponsePickerFile,status:n.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponsePickerFile,status:n.SUCCESS,data:y};return Promise.resolve(A)}return new Promise((A,g)=>{const C=e=>{e.status===n.ERROR?g(e):A(e),I.off(s.ResponsePickerFile,C)};I.on(s.ResponsePickerFile,C),I.send(o.RequestPickerFile,void 0)})},Z=A=>{I.send(o.RequestCloseApp,A)},B=async()=>{if(!I.checkPremissionEvent(o.RequestVibrate)){const A={type:s.ResponseVibrate,status:n.PREMISSION_ERROR};return Promise.resolve(A)}I.send(o.RequestVibrate)},E=async A=>{if(!I.checkPremissionEvent(o.RequestCall)){const g={type:s.ResponseCall,status:n.PREMISSION_ERROR};return Promise.resolve(g)}I.send(o.RequestCall,{phoneNumber:A})},Q=async A=>{if(!I.checkPremissionEvent(o.RequestSms)){const g={type:s.ResponseSms,status:n.PREMISSION_ERROR};return Promise.resolve(g)}I.send(o.RequestSms,{phoneNumber:A})},w=async A=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){const g={type:s.ResponseConfigApp,status:n.SUCCESS};return Promise.resolve(g)}return new Promise((g,C)=>{const e=t=>{t.status===n.ERROR?C(t):g(t),I.off(s.ResponseConfigApp,e)};I.on(s.ResponseConfigApp,e),I.send(o.RequestConfigUIApp,A)})},Y=async A=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.requestGetPermission)){const C={type:s.ResponseGetPermisstion,status:n.PREMISSION_ERROR};return Promise.resolve(C)}const g={type:s.ResponseGetPermisstion,status:n.SUCCESS,data:!0};return Promise.resolve(g)}return new Promise((g,C)=>{const e=t=>{t.status===n.ERROR?C(t):g(t),I.off(s.ResponseGetPermisstion,e)};I.on(s.ResponseGetPermisstion,e),I.send(o.requestGetPermission,{type:A})})},S=async A=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){const g={type:s.ResponsePayment,status:n.SUCCESS,data:{status:"success"}};return Promise.resolve(g)}return new Promise((g,C)=>{const e=t=>{t.status===n.ERROR?C(t):g(t),I.off(s.ResponsePayment,e)};I.on(s.ResponsePayment,e),I.send(o.RequestPayment,A)})},M=(A,g)=>{const C=g||I;if(!C.getInitialized())throw new Error("SDK not initialized");const e=t=>{A(t)};return C.on(s.ResponsePayment,e),()=>{C.off(s.ResponsePayment,e)}},z=async()=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.RequestCurrentLocation)){const g={type:s.ResponseCurrentLocation,status:n.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponseCurrentLocation,status:n.SUCCESS};return Promise.resolve(A)}return new Promise((A,g)=>{const C=e=>{e.status===n.ERROR?g(e):A(e),I.off(s.ResponseCurrentLocation,C)};I.on(s.ResponseCurrentLocation,C),I.send(o.RequestCurrentLocation)})},K=async()=>{if(!I.getInitialized())throw new Error("SDK not initialized");if(I.getBrowserMode()){if(!I.checkPremissionEvent(o.RequestLocationPermission)){const g={type:s.ResponseLocationPermission,status:n.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponseLocationPermission,status:n.SUCCESS};return Promise.resolve(A)}return new Promise((A,g)=>{const C=e=>{e.status===n.ERROR?g(e):A(e),I.off(s.ResponseLocationPermission,C)};I.on(s.ResponseLocationPermission,C),I.send(o.RequestLocationPermission)})},b=(A,g)=>{const C=g||I;if(!C.getInitialized())throw new Error("SDK not initialized");const e=t=>{A(t)};return C.on(s.ResponseNotification,e),()=>{C.off(s.ResponseNotification,e)}};exports.EKeyInfor=c;exports.EMediaType=a;exports.EStatus=n;exports.ETypeRequest=o;exports.ETypeResponse=s;exports.call=E;exports.closeApp=Z;exports.configUIApp=w;exports.currentLocation=z;exports.fltSDK=I;exports.getInfo=d;exports.listenNotifiactionEvent=b;exports.listenPaymentEvent=M;exports.openPickerFile=f;exports.openPickerImage=G;exports.paymentRequest=S;exports.premissionsRequest=Y;exports.requestLocationPermission=K;exports.sms=Q;exports.vibrate=B;
1
+ "use strict";var u=Object.defineProperty;var P=(A,g,I)=>g in A?u(A,g,{enumerable:!0,configurable:!0,writable:!0,value:I}):A[g]=I;var r=(A,g,I)=>P(A,typeof g!="symbol"?g+"":g,I);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var o=(A=>(A.RequestConfigUIApp="requestConfigUIApp",A.RequestInfo="requestInfo",A.RequestToken="requestToken",A.RequestCloseApp="requestCloseApp",A.RequestPickerImage="requestPickerImage",A.RequestPickerFile="requestPickerFile",A.RequestVibrate="requestVibrate",A.RequestCall="requestCall",A.RequestSms="requestSms",A.RequestLocationPermission="requestLocationPermission",A.RequestCurrentLocation="requestCurrentLocation",A.RequestPayment="requestPayment",A.requestGetPermission="requestGetPermission",A.requestSaveStore="requestSaveStore",A.requestGetStore="requestGetStore",A.requestClearStore="requestClearStore",A))(o||{}),s=(A=>(A.ResponseConfigApp="responseConfigUIApp",A.ResponseInfo="responseInfo",A.ResponseToken="responseToken",A.ResponsePickerImage="responsePickerImage",A.ResponsePickerFile="responsePickerFile",A.ResponseVibrate="responseVibrate",A.ResponseCall="responseCall",A.ResponseSms="responseSms",A.ResponseLocationPermission="responseLocationPermission",A.ResponseCurrentLocation="responseCurrentLocation",A.ResponseCloseApp="responseCloseApp",A.ResponsePayment="responsePayment",A.ResponseNotification="responseNotification",A.ResponseGetPermisstion="responseGetPermisstion",A.responseSaveStore="responseSaveStore",A.responseGetStore="responseGetStore",A.responseClearStore="responseClearStore",A))(s||{}),t=(A=>(A.SUCCESS="success",A.ERROR="error",A.PREMISSION_ERROR="premissionError",A))(t||{}),c=(A=>(A.USER="user",A))(c||{}),a=(A=>(A.gallery="gallery",A.camera="camera",A))(a||{});class p{constructor(){r(this,"premissions");r(this,"getPremissions",()=>({[o.RequestInfo]:!0,[o.RequestCloseApp]:!0,[o.RequestPickerImage]:!0,[o.RequestVibrate]:!0}));r(this,"checkPremission",g=>this.premissions[g]??!0);this.premissions={},this.initialize()}initialize(){window.flutter_inappwebview||(this.premissions=this.getPremissions())}}class m{constructor(){r(this,"handlers");r(this,"isInitialized");r(this,"isBrowserMode");r(this,"cachedInfo");r(this,"infoRequests");r(this,"premissionEvent");this.handlers=new Map,this.isInitialized=!1,this.isBrowserMode=!1,this.cachedInfo=new Map,this.infoRequests=new Map,this.premissionEvent=new p,this.initialize()}initialize(){window.flutter_inappwebview?(this.setupMessageHandler(),this.isInitialized=!0,this.isBrowserMode=!1,this.send(o.RequestInfo,{})):(this.isInitialized=!0,this.isBrowserMode=!0,console.warn("Flutter channel not found. Running in browser mode."))}setupMessageHandler(){window.receiveFromFlutter=g=>{try{const I=JSON.parse(g);if(I.type===s.ResponseInfo){this.handleInfoUpdate(I.data);return}this.handleMessage(I)}catch(I){console.error("Error parsing message from Flutter:",I)}}}handleInfoUpdate(g){g&&Object.entries(g).forEach(([I,e])=>{this.cachedInfo.set(I,e),(this.infoRequests.get(I)||[]).forEach(i=>i(e)),this.infoRequests.delete(I)})}handleMessage(g){(this.handlers.get(g.type)||[]).forEach(e=>{try{e(g)}catch(n){console.error("Error in message handler:",n)}})}send(g,I){if(!this.isInitialized){console.error("SDK not initialized");return}const n=JSON.stringify({type:g,data:I});window.flutter_inappwebview&&window.flutter_inappwebview.callHandler("Flutter",n).catch(i=>console.error("Error sending message to Flutter:",i))}on(g,I){const e=this.handlers.get(g)||[];e.push(I),this.handlers.set(g,e)}off(g,I){const e=this.handlers.get(g)||[],n=e.indexOf(I);n>-1&&(e.splice(n,1),this.handlers.set(g,e))}getBrowserMode(){return this.isBrowserMode}getInitialized(){return this.isInitialized}getCachedInfo(g){return this.cachedInfo.get(g)}getInfoRequests(){return this.infoRequests}setInfoRequest(g,I){this.infoRequests.set(g,I)}checkPremissionEvent(g){return this.premissionEvent.checkPremission(g)}}const C=new m;C.getBrowserMode();const d={user:{name:"Pham Van A"}},h=async A=>{if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestInfo)){const e={type:s.ResponseInfo,status:t.PREMISSION_ERROR};return Promise.resolve(e)}const I={type:s.ResponseInfo,status:t.SUCCESS,data:d[A]};return Promise.resolve(I)}const g=C.getCachedInfo(A);if(g!==void 0){const I={type:s.ResponseInfo,status:t.SUCCESS,data:g};return Promise.resolve(I)}return new Promise(I=>{const n=C.getInfoRequests().get(A)||[];n.push(i=>{const R={type:s.ResponseInfo,status:t.SUCCESS,data:i};I(R)}),C.setInfoRequest(A,n),C.send(o.RequestInfo,{key:A})})},S="tokenEx.tokenEx",y=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestToken)){const g={type:s.ResponseToken,status:t.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponseToken,status:t.SUCCESS,data:S};return Promise.resolve(A)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.ResponseToken,I)};C.on(s.ResponseToken,I),C.send(o.RequestToken)})},f={path:"/hello.png",base64:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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"},G={path:"/hello.png",size:12e3,base64:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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"},E=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestPickerImage)){const I={type:s.ResponsePickerImage,status:t.PREMISSION_ERROR};return Promise.resolve(I)}const g={type:s.ResponsePickerImage,status:t.SUCCESS,data:f};return Promise.resolve(g)}return new Promise((g,I)=>{const e=n=>{n.status===t.ERROR?I(n):g(n),C.off(s.ResponsePickerImage,e)};C.on(s.ResponsePickerImage,e),C.send(o.RequestPickerImage,{type:A})})},w=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestPickerFile)){const g={type:s.ResponsePickerFile,status:t.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponsePickerFile,status:t.SUCCESS,data:G};return Promise.resolve(A)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.ResponsePickerFile,I)};C.on(s.ResponsePickerFile,I),C.send(o.RequestPickerFile,void 0)})},B=A=>{C.send(o.RequestCloseApp,A)},Z=async()=>{if(!C.checkPremissionEvent(o.RequestVibrate)){const A={type:s.ResponseVibrate,status:t.PREMISSION_ERROR};return Promise.resolve(A)}C.send(o.RequestVibrate)},Q=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestCall)){const I={type:s.ResponseCall,status:t.PREMISSION_ERROR};return Promise.resolve(I)}window.open(`tel:${A}`);const g={type:s.ResponseCall,status:t.SUCCESS};return Promise.resolve(g)}C.send(o.RequestCall,{phoneNumber:A})},k=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestSms)){const I={type:s.ResponseSms,status:t.PREMISSION_ERROR};return Promise.resolve(I)}window.open(`sms::${A}`);const g={type:s.ResponseSms,status:t.SUCCESS};return Promise.resolve(g)}C.send(o.RequestSms,{phoneNumber:A})},v=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){const g={type:s.ResponseConfigApp,status:t.SUCCESS};return Promise.resolve(g)}return new Promise((g,I)=>{const e=n=>{n.status===t.ERROR?I(n):g(n),C.off(s.ResponseConfigApp,e)};C.on(s.ResponseConfigApp,e),C.send(o.RequestConfigUIApp,A)})},M=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.requestGetPermission)){const I={type:s.ResponseGetPermisstion,status:t.PREMISSION_ERROR};return Promise.resolve(I)}const g={type:s.ResponseGetPermisstion,status:t.SUCCESS,data:C.checkPremissionEvent(A)};return Promise.resolve(g)}return new Promise((g,I)=>{const e=n=>{n.status===t.ERROR?I(n):g(n),C.off(s.ResponseGetPermisstion,e)};C.on(s.ResponseGetPermisstion,e),C.send(o.requestGetPermission,{type:A})})},z={status:"success",message:"Tạo đơn hàng thành công"},Y=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestPayment)){const I={type:s.ResponsePayment,status:t.PREMISSION_ERROR};return Promise.resolve(I)}const g={type:s.ResponsePayment,status:t.SUCCESS,data:z};return Promise.resolve(g)}return new Promise((g,I)=>{const e=n=>{n.status===t.ERROR?I(n):g(n),C.off(s.ResponsePayment,e)};C.on(s.ResponsePayment,e),C.send(o.RequestPayment,A)})},K=(A,g)=>{const I=g||C;if(!I.getInitialized())throw new Error("SDK not initialized");const e=n=>{A(n)};return I.on(s.ResponsePayment,e),()=>{I.off(s.ResponsePayment,e)}},b={latitude:21.0239852,longitude:105.791488},D=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestCurrentLocation)){const g={type:s.ResponseCurrentLocation,status:t.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponseCurrentLocation,status:t.SUCCESS,data:b};return Promise.resolve(A)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.ResponseCurrentLocation,I)};C.on(s.ResponseCurrentLocation,I),C.send(o.RequestCurrentLocation)})},j=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.RequestLocationPermission)){const g={type:s.ResponseLocationPermission,status:t.PREMISSION_ERROR};return Promise.resolve(g)}const A={type:s.ResponseLocationPermission,status:t.SUCCESS};return Promise.resolve(A)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.ResponseLocationPermission,I)};C.on(s.ResponseLocationPermission,I),C.send(o.RequestLocationPermission)})},q=(A,g)=>{const I=g||C;if(!I.getInitialized())throw new Error("SDK not initialized");const e=n=>{A(n)};return I.on(s.ResponseNotification,e),()=>{I.off(s.ResponseNotification,e)}},l="mini_app_sdk_x_app",J=async A=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.requestSaveStore)){const I={type:s.responseSaveStore,status:t.PREMISSION_ERROR};return Promise.resolve(I)}localStorage.setItem(l,A);const g={type:s.responseSaveStore,status:t.SUCCESS};return Promise.resolve(g)}return new Promise((g,I)=>{const e=n=>{n.status===t.ERROR?I(n):g(n),C.off(s.responseSaveStore,e)};C.on(s.responseSaveStore,e),C.send(o.requestSaveStore,{data:A})})},U=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.requestGetStore)){const I={type:s.responseGetStore,status:t.PREMISSION_ERROR};return Promise.resolve(I)}const A=localStorage.getItem(l),g={type:s.responseGetStore,status:t.SUCCESS,data:A??""};return Promise.resolve(g)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.responseGetStore,I)};C.on(s.responseGetStore,I),C.send(o.requestGetStore)})},W=async()=>{if(!C.getInitialized())throw new Error("SDK not initialized");if(C.getBrowserMode()){if(!C.checkPremissionEvent(o.requestClearStore)){const g={type:s.responseClearStore,status:t.PREMISSION_ERROR};return Promise.resolve(g)}localStorage.clear();const A={type:s.responseClearStore,status:t.SUCCESS};return Promise.resolve(A)}return new Promise((A,g)=>{const I=e=>{e.status===t.ERROR?g(e):A(e),C.off(s.responseClearStore,I)};C.on(s.responseClearStore,I),C.send(o.requestClearStore)})};exports.EKeyInfor=c;exports.EMediaType=a;exports.EStatus=t;exports.ETypeRequest=o;exports.ETypeResponse=s;exports.call=Q;exports.clearStore=W;exports.closeApp=B;exports.configUIApp=v;exports.currentLocation=D;exports.fltSDK=C;exports.getInfo=h;exports.getStore=U;exports.getToken=y;exports.listenNotifiactionEvent=q;exports.listenPaymentEvent=K;exports.openPickerFile=w;exports.openPickerImage=E;exports.paymentRequest=Y;exports.premissionsRequest=M;exports.requestLocationPermission=j;exports.saveStore=J;exports.sms=k;exports.vibrate=Z;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export declare const call: (phoneNumber: string) => Promise<FlutterMessageResponse | void>;
2
2
 
3
+ export declare const clearStore: () => Promise<FlutterMessageResponse>;
4
+
3
5
  export declare const closeApp: (data?: Record<string, string | object>) => void;
4
6
 
5
7
  export declare const configUIApp: (config: Partial<IViewUiConfig>) => Promise<FlutterMessageResponse>;
@@ -47,6 +49,7 @@ export declare enum EStatus {
47
49
  export declare enum ETypeRequest {
48
50
  RequestConfigUIApp = "requestConfigUIApp",
49
51
  RequestInfo = "requestInfo",
52
+ RequestToken = "requestToken",
50
53
  RequestCloseApp = "requestCloseApp",
51
54
  RequestPickerImage = "requestPickerImage",
52
55
  RequestPickerFile = "requestPickerFile",
@@ -56,12 +59,16 @@ export declare enum ETypeRequest {
56
59
  RequestLocationPermission = "requestLocationPermission",
57
60
  RequestCurrentLocation = "requestCurrentLocation",
58
61
  RequestPayment = "requestPayment",
59
- requestGetPermission = "requestGetPermission"
62
+ requestGetPermission = "requestGetPermission",
63
+ requestSaveStore = "requestSaveStore",
64
+ requestGetStore = "requestGetStore",
65
+ requestClearStore = "requestClearStore"
60
66
  }
61
67
 
62
68
  export declare enum ETypeResponse {
63
69
  ResponseConfigApp = "responseConfigUIApp",
64
70
  ResponseInfo = "responseInfo",
71
+ ResponseToken = "responseToken",
65
72
  ResponsePickerImage = "responsePickerImage",
66
73
  ResponsePickerFile = "responsePickerFile",
67
74
  ResponseVibrate = "responseVibrate",
@@ -72,7 +79,10 @@ export declare enum ETypeResponse {
72
79
  ResponseCloseApp = "responseCloseApp",
73
80
  ResponsePayment = "responsePayment",
74
81
  ResponseNotification = "responseNotification",
75
- ResponseGetPermisstion = "responseGetPermisstion"
82
+ ResponseGetPermisstion = "responseGetPermisstion",
83
+ responseSaveStore = "responseSaveStore",
84
+ responseGetStore = "responseGetStore",
85
+ responseClearStore = "responseClearStore"
76
86
  }
77
87
 
78
88
  export declare const fltSDK: CoreSdk;
@@ -90,6 +100,10 @@ export declare interface FlutterMessageResponse<T = unknown> {
90
100
 
91
101
  export declare const getInfo: (key: EKeyInfor) => Promise<FlutterMessageResponse>;
92
102
 
103
+ export declare const getStore: () => Promise<FlutterMessageResponse<string>>;
104
+
105
+ export declare const getToken: () => Promise<FlutterMessageResponse<string>>;
106
+
93
107
  export declare interface ICurrentLocation {
94
108
  latitude: number;
95
109
  longitude: number;
@@ -122,6 +136,7 @@ export declare interface IPaymentRequest {
122
136
 
123
137
  export declare interface IPaymentResult {
124
138
  status: string;
139
+ message: string;
125
140
  }
126
141
 
127
142
  export declare interface IViewUiConfig {
@@ -148,6 +163,8 @@ export declare const premissionsRequest: (type: ETypeRequest) => Promise<Flutter
148
163
 
149
164
  export declare const requestLocationPermission: () => Promise<FlutterMessageResponse>;
150
165
 
166
+ export declare const saveStore: (data: string) => Promise<FlutterMessageResponse>;
167
+
151
168
  export declare const sms: (phoneNumber: string) => Promise<FlutterMessageResponse | void>;
152
169
 
153
170
  export declare const vibrate: () => Promise<FlutterMessageResponse | void>;
package/dist/index.es.js CHANGED
@@ -1,17 +1,17 @@
1
- var a = Object.defineProperty;
2
- var R = (A, g, C) => g in A ? a(A, g, { enumerable: !0, configurable: !0, writable: !0, value: C }) : A[g] = C;
3
- var i = (A, g, C) => R(A, typeof g != "symbol" ? g + "" : g, C);
4
- var o = /* @__PURE__ */ ((A) => (A.RequestConfigUIApp = "requestConfigUIApp", A.RequestInfo = "requestInfo", A.RequestCloseApp = "requestCloseApp", A.RequestPickerImage = "requestPickerImage", A.RequestPickerFile = "requestPickerFile", A.RequestVibrate = "requestVibrate", A.RequestCall = "requestCall", A.RequestSms = "requestSms", A.RequestLocationPermission = "requestLocationPermission", A.RequestCurrentLocation = "requestCurrentLocation", A.RequestPayment = "requestPayment", A.requestGetPermission = "requestGetPermission", A))(o || {}), s = /* @__PURE__ */ ((A) => (A.ResponseConfigApp = "responseConfigUIApp", A.ResponseInfo = "responseInfo", A.ResponsePickerImage = "responsePickerImage", A.ResponsePickerFile = "responsePickerFile", A.ResponseVibrate = "responseVibrate", A.ResponseCall = "responseCall", A.ResponseSms = "responseSms", A.ResponseLocationPermission = "responseLocationPermission", A.ResponseCurrentLocation = "responseCurrentLocation", A.ResponseCloseApp = "responseCloseApp", A.ResponsePayment = "responsePayment", A.ResponseNotification = "responseNotification", A.ResponseGetPermisstion = "responseGetPermisstion", A))(s || {}), n = /* @__PURE__ */ ((A) => (A.SUCCESS = "success", A.ERROR = "error", A.PREMISSION_ERROR = "premissionError", A))(n || {}), l = /* @__PURE__ */ ((A) => (A.USER = "user", A))(l || {}), u = /* @__PURE__ */ ((A) => (A.gallery = "gallery", A.camera = "camera", A))(u || {});
5
- class P {
1
+ var l = Object.defineProperty;
2
+ var R = (A, g, I) => g in A ? l(A, g, { enumerable: !0, configurable: !0, writable: !0, value: I }) : A[g] = I;
3
+ var r = (A, g, I) => R(A, typeof g != "symbol" ? g + "" : g, I);
4
+ var o = /* @__PURE__ */ ((A) => (A.RequestConfigUIApp = "requestConfigUIApp", A.RequestInfo = "requestInfo", A.RequestToken = "requestToken", A.RequestCloseApp = "requestCloseApp", A.RequestPickerImage = "requestPickerImage", A.RequestPickerFile = "requestPickerFile", A.RequestVibrate = "requestVibrate", A.RequestCall = "requestCall", A.RequestSms = "requestSms", A.RequestLocationPermission = "requestLocationPermission", A.RequestCurrentLocation = "requestCurrentLocation", A.RequestPayment = "requestPayment", A.requestGetPermission = "requestGetPermission", A.requestSaveStore = "requestSaveStore", A.requestGetStore = "requestGetStore", A.requestClearStore = "requestClearStore", A))(o || {}), s = /* @__PURE__ */ ((A) => (A.ResponseConfigApp = "responseConfigUIApp", A.ResponseInfo = "responseInfo", A.ResponseToken = "responseToken", A.ResponsePickerImage = "responsePickerImage", A.ResponsePickerFile = "responsePickerFile", A.ResponseVibrate = "responseVibrate", A.ResponseCall = "responseCall", A.ResponseSms = "responseSms", A.ResponseLocationPermission = "responseLocationPermission", A.ResponseCurrentLocation = "responseCurrentLocation", A.ResponseCloseApp = "responseCloseApp", A.ResponsePayment = "responsePayment", A.ResponseNotification = "responseNotification", A.ResponseGetPermisstion = "responseGetPermisstion", A.responseSaveStore = "responseSaveStore", A.responseGetStore = "responseGetStore", A.responseClearStore = "responseClearStore", A))(s || {}), t = /* @__PURE__ */ ((A) => (A.SUCCESS = "success", A.ERROR = "error", A.PREMISSION_ERROR = "premissionError", A))(t || {}), u = /* @__PURE__ */ ((A) => (A.USER = "user", A))(u || {}), P = /* @__PURE__ */ ((A) => (A.gallery = "gallery", A.camera = "camera", A))(P || {});
5
+ class m {
6
6
  constructor() {
7
- i(this, "premissions");
8
- i(this, "getPremissions", () => ({
7
+ r(this, "premissions");
8
+ r(this, "getPremissions", () => ({
9
9
  [o.RequestInfo]: !0,
10
10
  [o.RequestCloseApp]: !0,
11
11
  [o.RequestPickerImage]: !0,
12
12
  [o.RequestVibrate]: !0
13
13
  }));
14
- i(this, "checkPremission", (g) => this.premissions[g] ?? !0);
14
+ r(this, "checkPremission", (g) => this.premissions[g] ?? !0);
15
15
  this.premissions = {}, this.initialize();
16
16
  }
17
17
  initialize() {
@@ -20,13 +20,13 @@ class P {
20
20
  }
21
21
  class p {
22
22
  constructor() {
23
- i(this, "handlers");
24
- i(this, "isInitialized");
25
- i(this, "isBrowserMode");
26
- i(this, "cachedInfo");
27
- i(this, "infoRequests");
28
- i(this, "premissionEvent");
29
- this.handlers = /* @__PURE__ */ new Map(), this.isInitialized = !1, this.isBrowserMode = !1, this.cachedInfo = /* @__PURE__ */ new Map(), this.infoRequests = /* @__PURE__ */ new Map(), this.premissionEvent = new P(), this.initialize();
23
+ r(this, "handlers");
24
+ r(this, "isInitialized");
25
+ r(this, "isBrowserMode");
26
+ r(this, "cachedInfo");
27
+ r(this, "infoRequests");
28
+ r(this, "premissionEvent");
29
+ this.handlers = /* @__PURE__ */ new Map(), this.isInitialized = !1, this.isBrowserMode = !1, this.cachedInfo = /* @__PURE__ */ new Map(), this.infoRequests = /* @__PURE__ */ new Map(), this.premissionEvent = new m(), this.initialize();
30
30
  }
31
31
  initialize() {
32
32
  window.flutter_inappwebview ? (this.setupMessageHandler(), this.isInitialized = !0, this.isBrowserMode = !1, this.send(o.RequestInfo, {})) : (this.isInitialized = !0, this.isBrowserMode = !0, console.warn("Flutter channel not found. Running in browser mode."));
@@ -34,46 +34,46 @@ class p {
34
34
  setupMessageHandler() {
35
35
  window.receiveFromFlutter = (g) => {
36
36
  try {
37
- const C = JSON.parse(g);
38
- if (C.type === s.ResponseInfo) {
39
- this.handleInfoUpdate(C.data);
37
+ const I = JSON.parse(g);
38
+ if (I.type === s.ResponseInfo) {
39
+ this.handleInfoUpdate(I.data);
40
40
  return;
41
41
  }
42
- this.handleMessage(C);
43
- } catch (C) {
44
- console.error("Error parsing message from Flutter:", C);
42
+ this.handleMessage(I);
43
+ } catch (I) {
44
+ console.error("Error parsing message from Flutter:", I);
45
45
  }
46
46
  };
47
47
  }
48
48
  handleInfoUpdate(g) {
49
- g && Object.entries(g).forEach(([C, e]) => {
50
- this.cachedInfo.set(C, e), (this.infoRequests.get(C) || []).forEach((r) => r(e)), this.infoRequests.delete(C);
49
+ g && Object.entries(g).forEach(([I, e]) => {
50
+ this.cachedInfo.set(I, e), (this.infoRequests.get(I) || []).forEach((i) => i(e)), this.infoRequests.delete(I);
51
51
  });
52
52
  }
53
53
  handleMessage(g) {
54
54
  (this.handlers.get(g.type) || []).forEach((e) => {
55
55
  try {
56
56
  e(g);
57
- } catch (t) {
58
- console.error("Error in message handler:", t);
57
+ } catch (n) {
58
+ console.error("Error in message handler:", n);
59
59
  }
60
60
  });
61
61
  }
62
- send(g, C) {
62
+ send(g, I) {
63
63
  if (!this.isInitialized) {
64
64
  console.error("SDK not initialized");
65
65
  return;
66
66
  }
67
- const t = JSON.stringify({ type: g, data: C });
68
- window.flutter_inappwebview && window.flutter_inappwebview.callHandler("Flutter", t).catch((r) => console.error("Error sending message to Flutter:", r));
67
+ const n = JSON.stringify({ type: g, data: I });
68
+ window.flutter_inappwebview && window.flutter_inappwebview.callHandler("Flutter", n).catch((i) => console.error("Error sending message to Flutter:", i));
69
69
  }
70
- on(g, C) {
70
+ on(g, I) {
71
71
  const e = this.handlers.get(g) || [];
72
- e.push(C), this.handlers.set(g, e);
72
+ e.push(I), this.handlers.set(g, e);
73
73
  }
74
- off(g, C) {
75
- const e = this.handlers.get(g) || [], t = e.indexOf(C);
76
- t > -1 && (e.splice(t, 1), this.handlers.set(g, e));
74
+ off(g, I) {
75
+ const e = this.handlers.get(g) || [], n = e.indexOf(I);
76
+ n > -1 && (e.splice(n, 1), this.handlers.set(g, e));
77
77
  }
78
78
  getBrowserMode() {
79
79
  return this.isBrowserMode;
@@ -87,284 +87,416 @@ class p {
87
87
  getInfoRequests() {
88
88
  return this.infoRequests;
89
89
  }
90
- setInfoRequest(g, C) {
91
- this.infoRequests.set(g, C);
90
+ setInfoRequest(g, I) {
91
+ this.infoRequests.set(g, I);
92
92
  }
93
93
  checkPremissionEvent(g) {
94
94
  return this.premissionEvent.checkPremission(g);
95
95
  }
96
96
  }
97
- const I = new p();
98
- I.getBrowserMode();
97
+ const C = new p();
98
+ C.getBrowserMode();
99
99
  const d = {
100
100
  user: {
101
- name: "Pham Hong Son"
101
+ name: "Pham Van A"
102
102
  }
103
- }, G = async (A) => {
104
- if (I.getBrowserMode()) {
105
- if (!I.checkPremissionEvent(o.RequestInfo)) {
103
+ }, w = async (A) => {
104
+ if (C.getBrowserMode()) {
105
+ if (!C.checkPremissionEvent(o.RequestInfo)) {
106
106
  const e = {
107
107
  type: s.ResponseInfo,
108
- status: n.PREMISSION_ERROR
108
+ status: t.PREMISSION_ERROR
109
109
  };
110
110
  return Promise.resolve(e);
111
111
  }
112
- const C = {
112
+ const I = {
113
113
  type: s.ResponseInfo,
114
- status: n.SUCCESS,
114
+ status: t.SUCCESS,
115
115
  data: d[A]
116
116
  };
117
- return Promise.resolve(C);
117
+ return Promise.resolve(I);
118
118
  }
119
- const g = I.getCachedInfo(A);
119
+ const g = C.getCachedInfo(A);
120
120
  if (g !== void 0) {
121
- const C = {
121
+ const I = {
122
122
  type: s.ResponseInfo,
123
- status: n.SUCCESS,
123
+ status: t.SUCCESS,
124
124
  data: g
125
125
  };
126
- return Promise.resolve(C);
126
+ return Promise.resolve(I);
127
127
  }
128
- return new Promise((C) => {
129
- const t = I.getInfoRequests().get(A) || [];
130
- t.push((r) => {
131
- const c = {
128
+ return new Promise((I) => {
129
+ const n = C.getInfoRequests().get(A) || [];
130
+ n.push((i) => {
131
+ const a = {
132
132
  type: s.ResponseInfo,
133
- status: n.SUCCESS,
134
- data: r
133
+ status: t.SUCCESS,
134
+ data: i
135
135
  };
136
- C(c);
137
- }), I.setInfoRequest(A, t), I.send(o.RequestInfo, { key: A });
136
+ I(a);
137
+ }), C.setInfoRequest(A, n), C.send(o.RequestInfo, { key: A });
138
138
  });
139
- }, m = {
139
+ }, h = "tokenEx.tokenEx", B = async () => {
140
+ if (!C.getInitialized())
141
+ throw new Error("SDK not initialized");
142
+ if (C.getBrowserMode()) {
143
+ if (!C.checkPremissionEvent(o.RequestToken)) {
144
+ const g = {
145
+ type: s.ResponseToken,
146
+ status: t.PREMISSION_ERROR
147
+ };
148
+ return Promise.resolve(g);
149
+ }
150
+ const A = {
151
+ type: s.ResponseToken,
152
+ status: t.SUCCESS,
153
+ data: h
154
+ };
155
+ return Promise.resolve(A);
156
+ }
157
+ return new Promise((A, g) => {
158
+ const I = (e) => {
159
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.ResponseToken, I);
160
+ };
161
+ C.on(s.ResponseToken, I), C.send(o.RequestToken);
162
+ });
163
+ }, S = {
140
164
  path: "/hello.png",
141
165
  base64: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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"
142
- }, h = {
166
+ }, f = {
143
167
  path: "/hello.png",
144
168
  size: 12e3,
145
169
  base64: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAAACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABgAAAAAQAAAGAAAAABAAAABgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAAACADAAADoAQAAQAAACADAAAAAAAA/+EOAmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTAyLTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjVmNWM3Y2U4LTAzZWYtNDc5NC1iYTJkLTE4ZjRkZjViZjVhYjwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5UaGnhur90IGvhur8gY2jGsGEgY8OzIHTDqm4gLSAzPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogIDxwZGY6QXV0aG9yPlF14buzbmggRGnhu4VtPC9wZGY6QXV0aG9yPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+Q2FudmE8L3htcDpDcmVhdG9yVG9vbD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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"
146
- }, f = async (A) => {
147
- if (!I.getInitialized())
170
+ }, Z = async (A) => {
171
+ if (!C.getInitialized())
148
172
  throw new Error("SDK not initialized");
149
- if (I.getBrowserMode()) {
150
- if (!I.checkPremissionEvent(o.RequestPickerImage)) {
151
- const C = {
173
+ if (C.getBrowserMode()) {
174
+ if (!C.checkPremissionEvent(o.RequestPickerImage)) {
175
+ const I = {
152
176
  type: s.ResponsePickerImage,
153
- status: n.PREMISSION_ERROR
177
+ status: t.PREMISSION_ERROR
154
178
  };
155
- return Promise.resolve(C);
179
+ return Promise.resolve(I);
156
180
  }
157
181
  const g = {
158
182
  type: s.ResponsePickerImage,
159
- status: n.SUCCESS,
160
- data: m
183
+ status: t.SUCCESS,
184
+ data: S
161
185
  };
162
186
  return Promise.resolve(g);
163
187
  }
164
- return new Promise((g, C) => {
165
- const e = (t) => {
166
- t.status === n.ERROR ? C(t) : g(t), I.off(s.ResponsePickerImage, e);
188
+ return new Promise((g, I) => {
189
+ const e = (n) => {
190
+ n.status === t.ERROR ? I(n) : g(n), C.off(s.ResponsePickerImage, e);
167
191
  };
168
- I.on(s.ResponsePickerImage, e), I.send(o.RequestPickerImage, { type: A });
192
+ C.on(s.ResponsePickerImage, e), C.send(o.RequestPickerImage, { type: A });
169
193
  });
170
- }, Z = async () => {
171
- if (!I.getInitialized())
194
+ }, Q = async () => {
195
+ if (!C.getInitialized())
172
196
  throw new Error("SDK not initialized");
173
- if (I.getBrowserMode()) {
174
- if (!I.checkPremissionEvent(o.RequestPickerFile)) {
197
+ if (C.getBrowserMode()) {
198
+ if (!C.checkPremissionEvent(o.RequestPickerFile)) {
175
199
  const g = {
176
200
  type: s.ResponsePickerFile,
177
- status: n.PREMISSION_ERROR
201
+ status: t.PREMISSION_ERROR
178
202
  };
179
203
  return Promise.resolve(g);
180
204
  }
181
205
  const A = {
182
206
  type: s.ResponsePickerFile,
183
- status: n.SUCCESS,
184
- data: h
207
+ status: t.SUCCESS,
208
+ data: f
185
209
  };
186
210
  return Promise.resolve(A);
187
211
  }
188
212
  return new Promise((A, g) => {
189
- const C = (e) => {
190
- e.status === n.ERROR ? g(e) : A(e), I.off(s.ResponsePickerFile, C);
213
+ const I = (e) => {
214
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.ResponsePickerFile, I);
191
215
  };
192
- I.on(s.ResponsePickerFile, C), I.send(o.RequestPickerFile, void 0);
216
+ C.on(s.ResponsePickerFile, I), C.send(o.RequestPickerFile, void 0);
193
217
  });
194
- }, B = (A) => {
195
- I.send(o.RequestCloseApp, A);
196
- }, E = async () => {
197
- if (!I.checkPremissionEvent(o.RequestVibrate)) {
218
+ }, z = (A) => {
219
+ C.send(o.RequestCloseApp, A);
220
+ }, M = async () => {
221
+ if (!C.checkPremissionEvent(o.RequestVibrate)) {
198
222
  const A = {
199
223
  type: s.ResponseVibrate,
200
- status: n.PREMISSION_ERROR
224
+ status: t.PREMISSION_ERROR
201
225
  };
202
226
  return Promise.resolve(A);
203
227
  }
204
- I.send(o.RequestVibrate);
205
- }, Q = async (A) => {
206
- if (!I.checkPremissionEvent(o.RequestCall)) {
228
+ C.send(o.RequestVibrate);
229
+ }, k = async (A) => {
230
+ if (!C.getInitialized())
231
+ throw new Error("SDK not initialized");
232
+ if (C.getBrowserMode()) {
233
+ if (!C.checkPremissionEvent(o.RequestCall)) {
234
+ const I = {
235
+ type: s.ResponseCall,
236
+ status: t.PREMISSION_ERROR
237
+ };
238
+ return Promise.resolve(I);
239
+ }
240
+ window.open(`tel:${A}`);
207
241
  const g = {
208
242
  type: s.ResponseCall,
209
- status: n.PREMISSION_ERROR
243
+ status: t.SUCCESS
210
244
  };
211
245
  return Promise.resolve(g);
212
246
  }
213
- I.send(o.RequestCall, { phoneNumber: A });
214
- }, w = async (A) => {
215
- if (!I.checkPremissionEvent(o.RequestSms)) {
247
+ C.send(o.RequestCall, { phoneNumber: A });
248
+ }, Y = async (A) => {
249
+ if (!C.getInitialized())
250
+ throw new Error("SDK not initialized");
251
+ if (C.getBrowserMode()) {
252
+ if (!C.checkPremissionEvent(o.RequestSms)) {
253
+ const I = {
254
+ type: s.ResponseSms,
255
+ status: t.PREMISSION_ERROR
256
+ };
257
+ return Promise.resolve(I);
258
+ }
259
+ window.open(`sms::${A}`);
216
260
  const g = {
217
261
  type: s.ResponseSms,
218
- status: n.PREMISSION_ERROR
262
+ status: t.SUCCESS
219
263
  };
220
264
  return Promise.resolve(g);
221
265
  }
222
- I.send(o.RequestSms, { phoneNumber: A });
223
- }, Y = async (A) => {
224
- if (!I.getInitialized())
266
+ C.send(o.RequestSms, { phoneNumber: A });
267
+ }, v = async (A) => {
268
+ if (!C.getInitialized())
225
269
  throw new Error("SDK not initialized");
226
- if (I.getBrowserMode()) {
270
+ if (C.getBrowserMode()) {
227
271
  const g = {
228
272
  type: s.ResponseConfigApp,
229
- status: n.SUCCESS
273
+ status: t.SUCCESS
230
274
  };
231
275
  return Promise.resolve(g);
232
276
  }
233
- return new Promise((g, C) => {
234
- const e = (t) => {
235
- t.status === n.ERROR ? C(t) : g(t), I.off(s.ResponseConfigApp, e);
277
+ return new Promise((g, I) => {
278
+ const e = (n) => {
279
+ n.status === t.ERROR ? I(n) : g(n), C.off(s.ResponseConfigApp, e);
236
280
  };
237
- I.on(s.ResponseConfigApp, e), I.send(o.RequestConfigUIApp, A);
281
+ C.on(s.ResponseConfigApp, e), C.send(o.RequestConfigUIApp, A);
238
282
  });
239
- }, z = async (A) => {
240
- if (!I.getInitialized())
283
+ }, K = async (A) => {
284
+ if (!C.getInitialized())
241
285
  throw new Error("SDK not initialized");
242
- if (I.getBrowserMode()) {
243
- if (!I.checkPremissionEvent(o.requestGetPermission)) {
244
- const C = {
286
+ if (C.getBrowserMode()) {
287
+ if (!C.checkPremissionEvent(o.requestGetPermission)) {
288
+ const I = {
245
289
  type: s.ResponseGetPermisstion,
246
- status: n.PREMISSION_ERROR
290
+ status: t.PREMISSION_ERROR
247
291
  };
248
- return Promise.resolve(C);
292
+ return Promise.resolve(I);
249
293
  }
250
294
  const g = {
251
295
  type: s.ResponseGetPermisstion,
252
- status: n.SUCCESS,
253
- data: !0
296
+ status: t.SUCCESS,
297
+ data: C.checkPremissionEvent(A)
254
298
  };
255
299
  return Promise.resolve(g);
256
300
  }
257
- return new Promise((g, C) => {
258
- const e = (t) => {
259
- t.status === n.ERROR ? C(t) : g(t), I.off(s.ResponseGetPermisstion, e);
301
+ return new Promise((g, I) => {
302
+ const e = (n) => {
303
+ n.status === t.ERROR ? I(n) : g(n), C.off(s.ResponseGetPermisstion, e);
260
304
  };
261
- I.on(s.ResponseGetPermisstion, e), I.send(o.requestGetPermission, { type: A });
305
+ C.on(s.ResponseGetPermisstion, e), C.send(o.requestGetPermission, { type: A });
262
306
  });
263
- }, M = async (A) => {
264
- if (!I.getInitialized())
307
+ }, y = {
308
+ status: "success",
309
+ message: "Tạo đơn hàng thành công"
310
+ }, D = async (A) => {
311
+ if (!C.getInitialized())
265
312
  throw new Error("SDK not initialized");
266
- if (I.getBrowserMode()) {
313
+ if (C.getBrowserMode()) {
314
+ if (!C.checkPremissionEvent(o.RequestPayment)) {
315
+ const I = {
316
+ type: s.ResponsePayment,
317
+ status: t.PREMISSION_ERROR
318
+ };
319
+ return Promise.resolve(I);
320
+ }
267
321
  const g = {
268
322
  type: s.ResponsePayment,
269
- status: n.SUCCESS,
270
- data: {
271
- status: "success"
272
- }
323
+ status: t.SUCCESS,
324
+ data: y
273
325
  };
274
326
  return Promise.resolve(g);
275
327
  }
276
- return new Promise((g, C) => {
277
- const e = (t) => {
278
- t.status === n.ERROR ? C(t) : g(t), I.off(s.ResponsePayment, e);
328
+ return new Promise((g, I) => {
329
+ const e = (n) => {
330
+ n.status === t.ERROR ? I(n) : g(n), C.off(s.ResponsePayment, e);
279
331
  };
280
- I.on(s.ResponsePayment, e), I.send(o.RequestPayment, A);
332
+ C.on(s.ResponsePayment, e), C.send(o.RequestPayment, A);
281
333
  });
282
- }, S = (A, g) => {
283
- const C = g || I;
284
- if (!C.getInitialized())
334
+ }, b = (A, g) => {
335
+ const I = g || C;
336
+ if (!I.getInitialized())
285
337
  throw new Error("SDK not initialized");
286
- const e = (t) => {
287
- A(t);
338
+ const e = (n) => {
339
+ A(n);
288
340
  };
289
- return C.on(s.ResponsePayment, e), () => {
290
- C.off(s.ResponsePayment, e);
341
+ return I.on(s.ResponsePayment, e), () => {
342
+ I.off(s.ResponsePayment, e);
291
343
  };
292
- }, K = async () => {
293
- if (!I.getInitialized())
344
+ }, G = {
345
+ latitude: 21.0239852,
346
+ longitude: 105.791488
347
+ }, j = async () => {
348
+ if (!C.getInitialized())
294
349
  throw new Error("SDK not initialized");
295
- if (I.getBrowserMode()) {
296
- if (!I.checkPremissionEvent(o.RequestCurrentLocation)) {
350
+ if (C.getBrowserMode()) {
351
+ if (!C.checkPremissionEvent(o.RequestCurrentLocation)) {
297
352
  const g = {
298
353
  type: s.ResponseCurrentLocation,
299
- status: n.PREMISSION_ERROR
354
+ status: t.PREMISSION_ERROR
300
355
  };
301
356
  return Promise.resolve(g);
302
357
  }
303
358
  const A = {
304
359
  type: s.ResponseCurrentLocation,
305
- status: n.SUCCESS
360
+ status: t.SUCCESS,
361
+ data: G
306
362
  };
307
363
  return Promise.resolve(A);
308
364
  }
309
365
  return new Promise((A, g) => {
310
- const C = (e) => {
311
- e.status === n.ERROR ? g(e) : A(e), I.off(s.ResponseCurrentLocation, C);
366
+ const I = (e) => {
367
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.ResponseCurrentLocation, I);
312
368
  };
313
- I.on(s.ResponseCurrentLocation, C), I.send(o.RequestCurrentLocation);
369
+ C.on(s.ResponseCurrentLocation, I), C.send(o.RequestCurrentLocation);
314
370
  });
315
- }, b = async () => {
316
- if (!I.getInitialized())
371
+ }, q = async () => {
372
+ if (!C.getInitialized())
317
373
  throw new Error("SDK not initialized");
318
- if (I.getBrowserMode()) {
319
- if (!I.checkPremissionEvent(o.RequestLocationPermission)) {
374
+ if (C.getBrowserMode()) {
375
+ if (!C.checkPremissionEvent(o.RequestLocationPermission)) {
320
376
  const g = {
321
377
  type: s.ResponseLocationPermission,
322
- status: n.PREMISSION_ERROR
378
+ status: t.PREMISSION_ERROR
323
379
  };
324
380
  return Promise.resolve(g);
325
381
  }
326
382
  const A = {
327
383
  type: s.ResponseLocationPermission,
328
- status: n.SUCCESS
384
+ status: t.SUCCESS
329
385
  };
330
386
  return Promise.resolve(A);
331
387
  }
332
388
  return new Promise((A, g) => {
333
- const C = (e) => {
334
- e.status === n.ERROR ? g(e) : A(e), I.off(s.ResponseLocationPermission, C);
389
+ const I = (e) => {
390
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.ResponseLocationPermission, I);
335
391
  };
336
- I.on(s.ResponseLocationPermission, C), I.send(o.RequestLocationPermission);
392
+ C.on(s.ResponseLocationPermission, I), C.send(o.RequestLocationPermission);
337
393
  });
338
- }, j = (A, g) => {
339
- const C = g || I;
340
- if (!C.getInitialized())
394
+ }, J = (A, g) => {
395
+ const I = g || C;
396
+ if (!I.getInitialized())
341
397
  throw new Error("SDK not initialized");
342
- const e = (t) => {
343
- A(t);
398
+ const e = (n) => {
399
+ A(n);
344
400
  };
345
- return C.on(s.ResponseNotification, e), () => {
346
- C.off(s.ResponseNotification, e);
401
+ return I.on(s.ResponseNotification, e), () => {
402
+ I.off(s.ResponseNotification, e);
347
403
  };
404
+ }, c = "mini_app_sdk_x_app", W = async (A) => {
405
+ if (!C.getInitialized())
406
+ throw new Error("SDK not initialized");
407
+ if (C.getBrowserMode()) {
408
+ if (!C.checkPremissionEvent(o.requestSaveStore)) {
409
+ const I = {
410
+ type: s.responseSaveStore,
411
+ status: t.PREMISSION_ERROR
412
+ };
413
+ return Promise.resolve(I);
414
+ }
415
+ localStorage.setItem(c, A);
416
+ const g = {
417
+ type: s.responseSaveStore,
418
+ status: t.SUCCESS
419
+ };
420
+ return Promise.resolve(g);
421
+ }
422
+ return new Promise((g, I) => {
423
+ const e = (n) => {
424
+ n.status === t.ERROR ? I(n) : g(n), C.off(s.responseSaveStore, e);
425
+ };
426
+ C.on(s.responseSaveStore, e), C.send(o.requestSaveStore, { data: A });
427
+ });
428
+ }, U = async () => {
429
+ if (!C.getInitialized())
430
+ throw new Error("SDK not initialized");
431
+ if (C.getBrowserMode()) {
432
+ if (!C.checkPremissionEvent(o.requestGetStore)) {
433
+ const I = {
434
+ type: s.responseGetStore,
435
+ status: t.PREMISSION_ERROR
436
+ };
437
+ return Promise.resolve(I);
438
+ }
439
+ const A = localStorage.getItem(c), g = {
440
+ type: s.responseGetStore,
441
+ status: t.SUCCESS,
442
+ data: A ?? ""
443
+ };
444
+ return Promise.resolve(g);
445
+ }
446
+ return new Promise((A, g) => {
447
+ const I = (e) => {
448
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.responseGetStore, I);
449
+ };
450
+ C.on(s.responseGetStore, I), C.send(o.requestGetStore);
451
+ });
452
+ }, L = async () => {
453
+ if (!C.getInitialized())
454
+ throw new Error("SDK not initialized");
455
+ if (C.getBrowserMode()) {
456
+ if (!C.checkPremissionEvent(o.requestClearStore)) {
457
+ const g = {
458
+ type: s.responseClearStore,
459
+ status: t.PREMISSION_ERROR
460
+ };
461
+ return Promise.resolve(g);
462
+ }
463
+ localStorage.clear();
464
+ const A = {
465
+ type: s.responseClearStore,
466
+ status: t.SUCCESS
467
+ };
468
+ return Promise.resolve(A);
469
+ }
470
+ return new Promise((A, g) => {
471
+ const I = (e) => {
472
+ e.status === t.ERROR ? g(e) : A(e), C.off(s.responseClearStore, I);
473
+ };
474
+ C.on(s.responseClearStore, I), C.send(o.requestClearStore);
475
+ });
348
476
  };
349
477
  export {
350
- l as EKeyInfor,
351
- u as EMediaType,
352
- n as EStatus,
478
+ u as EKeyInfor,
479
+ P as EMediaType,
480
+ t as EStatus,
353
481
  o as ETypeRequest,
354
482
  s as ETypeResponse,
355
- Q as call,
356
- B as closeApp,
357
- Y as configUIApp,
358
- K as currentLocation,
359
- I as fltSDK,
360
- G as getInfo,
361
- j as listenNotifiactionEvent,
362
- S as listenPaymentEvent,
363
- Z as openPickerFile,
364
- f as openPickerImage,
365
- M as paymentRequest,
366
- z as premissionsRequest,
367
- b as requestLocationPermission,
368
- w as sms,
369
- E as vibrate
483
+ k as call,
484
+ L as clearStore,
485
+ z as closeApp,
486
+ v as configUIApp,
487
+ j as currentLocation,
488
+ C as fltSDK,
489
+ w as getInfo,
490
+ U as getStore,
491
+ B as getToken,
492
+ J as listenNotifiactionEvent,
493
+ b as listenPaymentEvent,
494
+ Q as openPickerFile,
495
+ Z as openPickerImage,
496
+ D as paymentRequest,
497
+ K as premissionsRequest,
498
+ q as requestLocationPermission,
499
+ W as saveStore,
500
+ Y as sms,
501
+ M as vibrate
370
502
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "x-app-sdk",
3
3
  "private": false,
4
- "version": "1.0.8-beta.6",
4
+ "version": "1.1.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",