@vqh2602/mini-app-sdk 1.0.5 → 1.0.6
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 +6 -0
- package/dist/cli/commands/create.js +3 -3
- package/dist/cli/index.js +1 -1
- package/dist/core/client.d.ts +1 -1
- package/dist/core/client.js +1 -1
- package/dist/transport/adaptive-transport.d.ts.map +1 -1
- package/dist/transport/adaptive-transport.js +2 -5
- package/dist/transport/adaptive-transport.js.map +1 -1
- package/dist/transport/native-transport.d.ts +2 -0
- package/dist/transport/native-transport.d.ts.map +1 -1
- package/dist/transport/native-transport.js +60 -51
- package/dist/transport/native-transport.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -208,3 +208,9 @@ npm pack --dry-run
|
|
|
208
208
|
# Xuất bản trực tiếp lên npm
|
|
209
209
|
npm publish --access public
|
|
210
210
|
```
|
|
211
|
+
|
|
212
|
+
### Kiểm tra transport và ví dụ
|
|
213
|
+
|
|
214
|
+
Chạy `npm test` trong `mini_app_sdk` để kiểm tra native callbacks, JS gọi trực tiếp dùng chung bridge, nhiều SDK instance, lifecycle events, simulator, browser mock, bridge được gắn muộn và timeout. SDK giữ nguyên callback registry `_callbacks` của host; không thay global bridge bằng dispatcher riêng. Playground sử dụng transport chính thức cho native và simulator.
|
|
215
|
+
|
|
216
|
+
Sau khi sửa SDK trong repository, chạy `npm run build:miniapps` từ thư mục gốc để build và đồng bộ SDK vào các ví dụ trước khi deploy backend. Lệnh này không phát hành package lên npm.
|
|
@@ -42,7 +42,7 @@ export async function createProject(projectName, options = {}) {
|
|
|
42
42
|
preview: 'vite preview',
|
|
43
43
|
},
|
|
44
44
|
dependencies: {
|
|
45
|
-
'@vqh2602/mini-app-sdk': '^1.0.
|
|
45
|
+
'@vqh2602/mini-app-sdk': '^1.0.6',
|
|
46
46
|
},
|
|
47
47
|
devDependencies: {
|
|
48
48
|
typescript: '^5.6.3',
|
|
@@ -152,13 +152,13 @@ document.getElementById('btnLogin')?.addEventListener('click', async () => {
|
|
|
152
152
|
// 2. Thanh toán
|
|
153
153
|
document.getElementById('btnPay')?.addEventListener('click', async () => {
|
|
154
154
|
try {
|
|
155
|
-
const
|
|
155
|
+
const order = await superApp.transport.invoke<{ orderId: string }>('payment.createOrder', {
|
|
156
156
|
orderId: 'ORDER_' + Date.now(),
|
|
157
157
|
amount: 45000,
|
|
158
158
|
description: 'Thanh toán đơn hàng mẫu Mini App',
|
|
159
159
|
});
|
|
160
|
+
const res = await superApp.transport.invoke('payment.openCheckout', { orderId: order.orderId });
|
|
160
161
|
log(res);
|
|
161
|
-
await superApp.ui.showToast('Thanh toán thành công!');
|
|
162
162
|
} catch (err: any) {
|
|
163
163
|
log({ error: err });
|
|
164
164
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -9,7 +9,7 @@ const program = new Command();
|
|
|
9
9
|
program
|
|
10
10
|
.name('miniapp')
|
|
11
11
|
.description('SuperApp Mini App Developer CLI: Create, Dev, Build, and Upload')
|
|
12
|
-
.version('1.0.
|
|
12
|
+
.version('1.0.6');
|
|
13
13
|
program
|
|
14
14
|
.command('create <project-name>')
|
|
15
15
|
.description('Khởi tạo một dự án Mini App mới từ mẫu chuẩn SuperApp')
|
package/dist/core/client.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { MediaModule } from './modules/media.js';
|
|
|
9
9
|
import { LifecycleModule } from './modules/lifecycle.js';
|
|
10
10
|
import { AuthLoginOptions, AuthLoginResult, ConfigAppViewOptions, KeepScreenOptions, MinimizeAppResult, NotificationResult, RequestSendNotificationOptions, SDKInitOptions, SetNavigationBarColorOptions, ToastOptions, UserProfile } from './types/index.js';
|
|
11
11
|
export declare class SuperAppSDK {
|
|
12
|
-
readonly version = "1.0.
|
|
12
|
+
readonly version = "1.0.6";
|
|
13
13
|
readonly transport: ITransport;
|
|
14
14
|
readonly mockEngine?: SDKMockEngine;
|
|
15
15
|
readonly auth: AuthModule;
|
package/dist/core/client.js
CHANGED
|
@@ -8,7 +8,7 @@ import { NavigationModule } from './modules/navigation.js';
|
|
|
8
8
|
import { MediaModule } from './modules/media.js';
|
|
9
9
|
import { LifecycleModule } from './modules/lifecycle.js';
|
|
10
10
|
export class SuperAppSDK {
|
|
11
|
-
version = '1.0.
|
|
11
|
+
version = '1.0.6';
|
|
12
12
|
transport;
|
|
13
13
|
mockEngine;
|
|
14
14
|
// Domain modules
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-transport.d.ts","sourceRoot":"","sources":["../../src/transport/adaptive-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"adaptive-transport.d.ts","sourceRoot":"","sources":["../../src/transport/adaptive-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IACxD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,GAAE,wBAA6B;IAO3C,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAInD,iBAAiB,IAAI,OAAO;IAI5B,oBAAoB,IAAI,OAAO;IAK/B,OAAO,IAAI,aAAa;IAMxB,WAAW,IAAI,OAAO;IAItB,kBAAkB,IAAI,UAAU;IAU1B,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBxG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAW5D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAMvD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;CAG/C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NativeBridgeTransport } from './native-transport.js';
|
|
1
|
+
import { NativeBridgeTransport, isNativeBridgeAvailable } from './native-transport.js';
|
|
2
2
|
import { PostMessageTransport } from './postmessage-transport.js';
|
|
3
3
|
import { MockBridgeTransport } from './mock-transport.js';
|
|
4
4
|
/**
|
|
@@ -25,10 +25,7 @@ export class AdaptiveBridgeTransport {
|
|
|
25
25
|
this.mockTransport.setDispatcher(dispatcher);
|
|
26
26
|
}
|
|
27
27
|
isNativeAvailable() {
|
|
28
|
-
|
|
29
|
-
return false;
|
|
30
|
-
const win = window;
|
|
31
|
-
return !!(win.FlutterBridge?.postMessage || win.SuperAppBridge?.postMessage);
|
|
28
|
+
return isNativeBridgeAvailable();
|
|
32
29
|
}
|
|
33
30
|
isSimulatorAvailable() {
|
|
34
31
|
if (typeof window === 'undefined')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-transport.js","sourceRoot":"","sources":["../../src/transport/adaptive-transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"adaptive-transport.js","sourceRoot":"","sources":["../../src/transport/adaptive-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ITransport } from './transport.interface.js';
|
|
2
2
|
import { BridgeEventListener, TransportConfig, TransportType } from './types.js';
|
|
3
|
+
export declare function isNativeBridgeAvailable(): boolean;
|
|
3
4
|
export declare class NativeBridgeTransport implements ITransport {
|
|
5
|
+
private installedBridges;
|
|
4
6
|
private appId;
|
|
5
7
|
private defaultTimeoutMs;
|
|
6
8
|
private debug;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-transport.d.ts","sourceRoot":"","sources":["../../src/transport/native-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAe,mBAAmB,EAAqD,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"native-transport.d.ts","sourceRoot":"","sources":["../../src/transport/native-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAe,mBAAmB,EAAqD,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKjJ,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD;AAED,qBAAa,qBAAsB,YAAW,UAAU;IACtD,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAmG;IACpH,OAAO,CAAC,SAAS,CAAoD;gBAEzD,MAAM,GAAE,eAAoB;IAOjC,OAAO,IAAI,aAAa;IAIxB,WAAW,IAAI,OAAO;IAI7B,OAAO,CAAC,sBAAsB;IAuD9B,OAAO,CAAC,oBAAoB;IAyBrB,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA6ElG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQ5D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAUvD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;CAe/C"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
let requestSequence = 1;
|
|
2
|
+
// A forwarding shim is not evidence that a native host is connected.
|
|
3
|
+
const forwardingShims = new WeakSet();
|
|
4
|
+
export function isNativeBridgeAvailable() {
|
|
5
|
+
if (typeof window === 'undefined')
|
|
6
|
+
return false;
|
|
7
|
+
const win = window;
|
|
8
|
+
const send = win.SuperAppBridge?.postMessage;
|
|
9
|
+
return typeof win.FlutterBridge?.postMessage === 'function' ||
|
|
10
|
+
(typeof send === 'function' && !forwardingShims.has(send));
|
|
11
|
+
}
|
|
2
12
|
export class NativeBridgeTransport {
|
|
13
|
+
installedBridges = new WeakSet();
|
|
3
14
|
appId;
|
|
4
15
|
defaultTimeoutMs;
|
|
5
16
|
debug;
|
|
@@ -15,70 +26,68 @@ export class NativeBridgeTransport {
|
|
|
15
26
|
return 'native';
|
|
16
27
|
}
|
|
17
28
|
isConnected() {
|
|
18
|
-
|
|
19
|
-
return false;
|
|
20
|
-
const win = window;
|
|
21
|
-
return !!(win.FlutterBridge?.postMessage || win.SuperAppBridge?.postMessage);
|
|
29
|
+
return isNativeBridgeAvailable();
|
|
22
30
|
}
|
|
23
31
|
initNativeGlobalBridge() {
|
|
24
32
|
if (typeof window === 'undefined')
|
|
25
33
|
return;
|
|
26
34
|
const win = window;
|
|
27
35
|
if (!win.SuperAppBridge) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
dispatchEvent: (evt) => {
|
|
40
|
-
this.emit(evt.event, evt.payload);
|
|
41
|
-
},
|
|
42
|
-
addEventListener: (event, handler) => {
|
|
43
|
-
this.on(event, handler);
|
|
44
|
-
},
|
|
45
|
-
removeEventListener: (event, handler) => {
|
|
46
|
-
this.off(event, handler);
|
|
47
|
-
},
|
|
36
|
+
// Keep the shared callback/listener contract used by the Flutter host and
|
|
37
|
+
// plain JS clients, even when this SDK is the first script to initialize.
|
|
38
|
+
win.SuperAppBridge = {};
|
|
39
|
+
}
|
|
40
|
+
const bridge = win.SuperAppBridge;
|
|
41
|
+
bridge._callbacks ||= {};
|
|
42
|
+
bridge._listeners ||= {};
|
|
43
|
+
if (!bridge.postMessage) {
|
|
44
|
+
bridge.postMessage = (msg) => {
|
|
45
|
+
win.FlutterBridge?.postMessage(typeof msg === 'string' ? msg : JSON.stringify(msg));
|
|
48
46
|
};
|
|
47
|
+
forwardingShims.add(bridge.postMessage);
|
|
49
48
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.handleNativeResponse(res);
|
|
57
|
-
if (typeof prevDispatch === 'function' && prevDispatch !== win.SuperAppBridge.dispatchResponse) {
|
|
58
|
-
try {
|
|
59
|
-
prevDispatch.call(win.SuperAppBridge, res);
|
|
60
|
-
}
|
|
61
|
-
catch (_) { }
|
|
49
|
+
if (!bridge.dispatchResponse) {
|
|
50
|
+
bridge.dispatchResponse = (res) => {
|
|
51
|
+
const callback = bridge._callbacks[res.id];
|
|
52
|
+
if (callback) {
|
|
53
|
+
delete bridge._callbacks[res.id];
|
|
54
|
+
callback(res);
|
|
62
55
|
}
|
|
63
56
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
}
|
|
58
|
+
if (!bridge.dispatchEvent) {
|
|
59
|
+
bridge.dispatchEvent = (evt) => {
|
|
60
|
+
for (const listener of [...(bridge._listeners[evt.event] || [])]) {
|
|
68
61
|
try {
|
|
69
|
-
|
|
62
|
+
listener(evt.payload);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(error);
|
|
70
66
|
}
|
|
71
|
-
catch (_) { }
|
|
72
67
|
}
|
|
73
68
|
};
|
|
74
|
-
if (!win.SuperAppBridge.postMessage) {
|
|
75
|
-
win.SuperAppBridge.postMessage = (msg) => {
|
|
76
|
-
if (win.FlutterBridge?.postMessage) {
|
|
77
|
-
win.FlutterBridge.postMessage(typeof msg === 'string' ? msg : JSON.stringify(msg));
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
69
|
}
|
|
70
|
+
bridge.addEventListener ||= (event, handler) => {
|
|
71
|
+
(bridge._listeners[event] ||= []).push(handler);
|
|
72
|
+
};
|
|
73
|
+
bridge.removeEventListener ||= (event, handler) => {
|
|
74
|
+
bridge._listeners[event] = (bridge._listeners[event] || []).filter(fn => fn !== handler);
|
|
75
|
+
};
|
|
76
|
+
// Install once per bridge object, rather than stacking new wrappers per call.
|
|
77
|
+
// Also reconnect if a host replaces the bridge after SDK initialization.
|
|
78
|
+
if (this.installedBridges.has(bridge))
|
|
79
|
+
return;
|
|
80
|
+
this.installedBridges.add(bridge);
|
|
81
|
+
const previousResponse = bridge.dispatchResponse;
|
|
82
|
+
bridge.dispatchResponse = (res) => {
|
|
83
|
+
this.handleNativeResponse(res);
|
|
84
|
+
previousResponse.call(bridge, res);
|
|
85
|
+
};
|
|
86
|
+
const previousEvent = bridge.dispatchEvent;
|
|
87
|
+
bridge.dispatchEvent = (evt) => {
|
|
88
|
+
this.emit(evt.event, evt.payload);
|
|
89
|
+
previousEvent.call(bridge, evt);
|
|
90
|
+
};
|
|
82
91
|
}
|
|
83
92
|
handleNativeResponse(res) {
|
|
84
93
|
if (!res || !res.id)
|
|
@@ -105,7 +114,7 @@ export class NativeBridgeTransport {
|
|
|
105
114
|
}
|
|
106
115
|
}
|
|
107
116
|
invoke(action, payload = {}, timeoutMs) {
|
|
108
|
-
const id = `
|
|
117
|
+
const id = `sdk_req_${Date.now()}_${requestSequence++}`;
|
|
109
118
|
const timeout = timeoutMs ?? this.defaultTimeoutMs;
|
|
110
119
|
const request = {
|
|
111
120
|
id,
|
|
@@ -150,7 +159,7 @@ export class NativeBridgeTransport {
|
|
|
150
159
|
if (win.FlutterBridge?.postMessage) {
|
|
151
160
|
win.FlutterBridge.postMessage(JSON.stringify(request));
|
|
152
161
|
}
|
|
153
|
-
else if (win.SuperAppBridge?.postMessage) {
|
|
162
|
+
else if (isNativeBridgeAvailable() && win.SuperAppBridge?.postMessage) {
|
|
154
163
|
win.SuperAppBridge.postMessage(request);
|
|
155
164
|
}
|
|
156
165
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-transport.js","sourceRoot":"","sources":["../../src/transport/native-transport.ts"],"names":[],"mappings":"AAGA,IAAI,eAAe,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"native-transport.js","sourceRoot":"","sources":["../../src/transport/native-transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vqh2602/mini-app-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Official Unified TypeScript SDK & CLI for SuperApp Mini Apps: Core API, Bridge Transport, Mock Engine, and Browser Simulator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
"release:major": "node ../scripts/bump-version.cjs major && npm publish --access public",
|
|
50
50
|
"prepublishOnly": "node ../scripts/bump-version.cjs check-publish && npm run build",
|
|
51
51
|
"simulator": "node ./bin/simulator.js",
|
|
52
|
-
"clean": "rm -rf dist simulator-dist"
|
|
52
|
+
"clean": "rm -rf dist simulator-dist",
|
|
53
|
+
"test": "npm run build:ts && node --test test/*.test.mjs"
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
56
|
"commander": "^12.1.0",
|