@retion-miniapp/sdk 0.8.0 → 0.8.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.2 — 2026-10-28
4
+
5
+ ### Docs
6
+ - Rút gọn README theo cách sử dụng Web SDK: cài package, gọi API, nhận kết quả/event và xử lý lỗi. Bỏ lịch sử version và chi tiết triển khai app chủ khỏi hướng dẫn sử dụng. Không thay đổi API.
7
+
8
+
9
+ ## 0.8.1 — 2026-10-28
10
+
11
+ ### Docs
12
+ - Phát hành README tiếng Việt đầy đủ cho biometric và speech-to-text: setup app chủ, API, response, event, lỗi và vòng đời phiên. Thêm các API mới vào bảng mục lục và liên kết gist hướng dẫn.
13
+ - Khuyên dùng Mini App React Native 0.8.1 để có bản sửa listener speech. Không thay đổi API so với Web SDK 0.8.0.
14
+
15
+
16
+ ## 0.8.0 — 2026-10-28
17
+
18
+ ### Added
19
+ - Speech-to-text qua bridge Mini App chung: bắt đầu/dừng, event tạm thời/cuối cùng/lỗi/kết thúc. Native tự xin quyền và quản lý phiên micro, huỷ khi mini app đóng/ẩn hoặc app xuống nền.
20
+
21
+
3
22
  ## 0.7.3 — 2026-10-28
4
23
 
5
24
  ### Changed
package/README.md CHANGED
@@ -19,6 +19,8 @@ npm i @retion-miniapp/sdk
19
19
  | [`openScreen({ screen, params })`](#openscreen-screen-params-) | Mở 1 màn hình của app |
20
20
  | [`openLink(url)`](#openlinkurl) | Mở link bằng hệ điều hành (deeplink app khác, tel:, mailto:, https) |
21
21
  | [`haptic(type)`](#haptictype) | Rung phản hồi (bấm nút, thanh toán xong…) |
22
+ | [`getBiometricAvailability()` / `authenticateBiometric(req)`](#face-id--touch-id--android-biometrics) | Kiểm tra Face ID / Touch ID và trả nguyên kết quả xác thực native |
23
+ | [`startSpeech(options)` / `stopSpeech()` / `onSpeech(event, cb)`](#nhận-dạng-giọng-nói) | Bắt đầu/dừng nhận dạng và nhận văn bản tạm thời/cuối cùng |
22
24
 
23
25
  **1 mini app = 1 trang, load 1 lần.** Mở mini app ở page / conversation khác, app **không nạp lại trang** mà gọi `onContextChange` — thiếu nó web sẽ hiện dữ liệu page cũ. Đổi tổ chức thì app nạp lại trang.
24
26
 
@@ -238,7 +240,7 @@ if (isInHost()) {
238
240
  | Lỗi | Khi nào |
239
241
  |---|---|
240
242
  | `INVALID_PARAMS` | url sai định dạng hoặc scheme bị chặn (`javascript:`, `file:`, `data:`, `about:`, `blob:`) |
241
- | `NOT_SUPPORTED` | Không ứng dụng nào mở được link, hoặc app chưa hỗ trợ (`@retion-miniapp/react-native` < 0.7.5) |
243
+ | `NOT_SUPPORTED` | Không ứng dụng nào mở được link hoặc tính năng chưa được hỗ trợ |
242
244
 
243
245
  ### `haptic(type)`
244
246
 
@@ -308,22 +310,84 @@ MIT
308
310
 
309
311
  ### Face ID / Touch ID / Android biometrics
310
312
 
311
- Requires a host version implementing the biometric APIs and a configured native biometric adapter.
313
+ Kiểm tra thiết bị hỗ trợ rồi yêu cầu xác thực:
312
314
 
313
315
  ```ts
314
316
  import { getBiometricAvailability, authenticateBiometric } from '@retion-miniapp/sdk';
315
317
 
316
- const { available, biometryType } = await getBiometricAvailability();
317
- if (available) {
318
- const result = await authenticateBiometric({ reason: 'Xác nhận danh tính', cancelButtonText: 'Huỷ' });
319
- if (!result.success) console.log(result.error);
318
+ async function authenticate() {
319
+ try {
320
+ const { available } = await getBiometricAvailability();
321
+ if (!available) return;
322
+
323
+ const result = await authenticateBiometric({
324
+ reason: 'Xác nhận danh tính',
325
+ cancelButtonText: 'Huỷ',
326
+ });
327
+ if (!result.success) {
328
+ console.log(result.error);
329
+ return;
330
+ }
331
+ // Tiếp tục thao tác sau khi xác thực thành công.
332
+ } catch (error) {
333
+ console.error(error);
334
+ }
335
+ }
336
+ ```
337
+
338
+ | API | Kết quả |
339
+ | --- | --- |
340
+ | `getBiometricAvailability()` | `{ available, biometryType?, error? }` — khả dụng và loại sinh trắc học |
341
+ | `authenticateBiometric({ reason, cancelButtonText? })` | `{ success, error? }` — kết quả xác thực |
342
+
343
+ `reason` là nội dung hộp xác thực, dài 1–200 ký tự. `cancelButtonText` là nhãn nút huỷ, không bắt buộc, tối đa 80 ký tự.
344
+
345
+ Kiểm tra `result.success` trước khi tiếp tục. Người dùng huỷ có thể trả `{ success: false, error: 'User cancellation' }`; lỗi khác có thể đi vào `catch`. Loại xác thực do thiết bị quyết định: `FaceID`, `TouchID` hoặc `Biometrics` trên Android.
346
+
347
+ ### Nhận dạng giọng nói
348
+
349
+ Đăng ký nhận văn bản trước khi bắt đầu nghe:
350
+
351
+ ```ts
352
+ import { startSpeech, stopSpeech, onSpeech } from '@retion-miniapp/sdk';
353
+
354
+ const offPartial = onSpeech('speech.partial', result => console.log(result.text));
355
+ const offFinal = onSpeech('speech.final', result => console.log(result.text));
356
+ const offError = onSpeech('speech.error', error => console.error(error.code, error.message));
357
+ const offEnd = onSpeech('speech.end', () => console.log('Đã dừng nghe'));
358
+
359
+ // Gọi khi bấm nút bắt đầu.
360
+ async function startListening() {
361
+ try { await startSpeech({ lang: 'vi-VN' }); }
362
+ catch (error) { console.error(error); }
363
+ }
364
+
365
+ // Gọi khi bấm nút dừng; vẫn giữ listener để nhận câu cuối.
366
+ async function stopListening() {
367
+ try { await stopSpeech(); }
368
+ catch (error) { console.error(error); }
369
+ }
370
+
371
+ // Khi huỷ component: dừng nếu không còn cần nghe và dọn listener.
372
+ async function dispose() {
373
+ try { await stopSpeech(); }
374
+ finally { offPartial(); offFinal(); offError(); offEnd(); }
320
375
  }
321
376
  ```
322
377
 
323
- Từ Web SDK **0.7.3** và host **0.7.8**, kết quả được giữ nguyên từ thư viện native:
324
- `{ success: boolean, error?: string }`. Người dùng huỷ có thể trả `success: false`; hãy kiểm tra
325
- `result.success` trước khi tiếp tục. Lỗi native bị reject vẫn đi qua `MiniAppError` của bridge,
326
- giữ mã và thông báo do native cung cấp khi có. Lỗi bridge như `BUSY`, `INVALID_PARAMS`,
327
- `NOT_SUPPORTED`, `NOT_IN_HOST`, `TIMEOUT` vẫn được reject.
328
- `getBiometricAvailability()` giữ nguyên cả trường `error` của native nếu có.
329
- API xác minh trên thiết bị, không trả dữ liệu sinh trắc học hoặc token đăng nhập backend.
378
+ | API / event | Kết quả |
379
+ | --- | --- |
380
+ | `startSpeech(options?)` | Bắt đầu nghe; trả `Promise<void>`, văn bản đến qua event |
381
+ | `stopSpeech()` | Yêu cầu dừng; trả `Promise<void>`, không phải câu cuối |
382
+ | `speech.partial` | `{ text, isFinal, results }` — văn bản tạm thời |
383
+ | `speech.final` | `{ text, isFinal, results }` — văn bản đã chốt |
384
+ | `speech.error` | `{ code, error, message }` — lỗi khi đang nghe |
385
+ | `speech.end` | Phiên nghe đã kết thúc |
386
+
387
+ Truyền `lang` để chọn ngôn ngữ, ví dụ `vi-VN`, `en-US`. Mặc định là `vi-VN`, không tự đoán ngôn ngữ đang nói. Muốn đổi ngôn ngữ, dừng phiên hiện tại rồi bắt đầu lại.
388
+
389
+ Các tuỳ chọn khác: `continuous` (mặc định `true`), `interimResults` (`true`), `addsPunctuation` (`true`), `requiresOnDeviceRecognition` (`false`). Khả năng nhận dạng phụ thuộc thiết bị và dịch vụ đang dùng.
390
+
391
+ Giữ listener sau khi gọi dừng để nhận câu cuối nếu có, và chờ `speech.end`. Nếu cần lưu câu cuối khi rời màn hình, đợi event kết thúc trước khi dọn listener. Huỷ listener không tự dừng nghe.
392
+
393
+ Lỗi bắt đầu/dừng đi vào `catch`; lỗi trong phiên đến qua `speech.error`. `BUSY` nghĩa là đang có phiên khác, `PERMISSION_DENIED` là chưa được cấp quyền, `NOT_SUPPORTED` là tính năng chưa được hỗ trợ. Xem thêm [xử lý lỗi](#lỗi).
package/dist/index.cjs CHANGED
@@ -157,7 +157,7 @@ var on = (event, listener) => {
157
157
  };
158
158
 
159
159
  // src/version.ts
160
- var SDK_VERSION = "0.8.0" ;
160
+ var SDK_VERSION = "0.8.2" ;
161
161
 
162
162
  // src/apis/app.ts
163
163
  var closeApp = () => call("closeApp");
package/dist/index.js CHANGED
@@ -155,7 +155,7 @@ var on = (event, listener) => {
155
155
  };
156
156
 
157
157
  // src/version.ts
158
- var SDK_VERSION = "0.8.0" ;
158
+ var SDK_VERSION = "0.8.2" ;
159
159
 
160
160
  // src/apis/app.ts
161
161
  var closeApp = () => call("closeApp");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retion-miniapp/sdk",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "Retion Mini App SDK — kết nối web mini app với app Retion",
5
5
  "keywords": [
6
6
  "retion",