@vqh2602/mini-app-sdk 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +13 -0
  2. package/bin/simulator.js +36 -6
  3. package/dist/cli/commands/create.js +1 -1
  4. package/dist/cli/commands/dev.d.ts +1 -0
  5. package/dist/cli/commands/dev.d.ts.map +1 -1
  6. package/dist/cli/commands/dev.js +3 -2
  7. package/dist/cli/commands/dev.js.map +1 -1
  8. package/dist/cli/commands/simulator.d.ts +1 -0
  9. package/dist/cli/commands/simulator.d.ts.map +1 -1
  10. package/dist/cli/commands/simulator.js +3 -2
  11. package/dist/cli/commands/simulator.js.map +1 -1
  12. package/dist/cli/commands/upload.d.ts +3 -0
  13. package/dist/cli/commands/upload.d.ts.map +1 -1
  14. package/dist/cli/commands/upload.js +45 -27
  15. package/dist/cli/commands/upload.js.map +1 -1
  16. package/dist/cli/index.js +5 -1
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/utils/auth.d.ts +34 -0
  19. package/dist/cli/utils/auth.d.ts.map +1 -0
  20. package/dist/cli/utils/auth.js +99 -0
  21. package/dist/cli/utils/auth.js.map +1 -0
  22. package/dist/cli/utils/server.d.ts +15 -1
  23. package/dist/cli/utils/server.d.ts.map +1 -1
  24. package/dist/cli/utils/server.js +71 -7
  25. package/dist/cli/utils/server.js.map +1 -1
  26. package/dist/core/client.d.ts +148 -16
  27. package/dist/core/client.d.ts.map +1 -1
  28. package/dist/core/client.js +113 -53
  29. package/dist/core/client.js.map +1 -1
  30. package/dist/core/index.d.ts +10 -0
  31. package/dist/core/index.d.ts.map +1 -1
  32. package/dist/core/index.js +10 -0
  33. package/dist/core/index.js.map +1 -1
  34. package/dist/core/modules/auth.d.ts +64 -4
  35. package/dist/core/modules/auth.d.ts.map +1 -1
  36. package/dist/core/modules/auth.js +205 -2
  37. package/dist/core/modules/auth.js.map +1 -1
  38. package/dist/core/modules/debug.d.ts +14 -0
  39. package/dist/core/modules/debug.d.ts.map +1 -0
  40. package/dist/core/modules/debug.js +19 -0
  41. package/dist/core/modules/debug.js.map +1 -0
  42. package/dist/core/modules/device.d.ts +4 -1
  43. package/dist/core/modules/device.d.ts.map +1 -1
  44. package/dist/core/modules/device.js +4 -1
  45. package/dist/core/modules/device.js.map +1 -1
  46. package/dist/core/modules/file.d.ts +38 -0
  47. package/dist/core/modules/file.d.ts.map +1 -0
  48. package/dist/core/modules/file.js +25 -0
  49. package/dist/core/modules/file.js.map +1 -0
  50. package/dist/core/modules/lifecycle.d.ts +23 -0
  51. package/dist/core/modules/lifecycle.d.ts.map +1 -1
  52. package/dist/core/modules/lifecycle.js +30 -0
  53. package/dist/core/modules/lifecycle.js.map +1 -1
  54. package/dist/core/modules/media.d.ts +65 -0
  55. package/dist/core/modules/media.d.ts.map +1 -1
  56. package/dist/core/modules/media.js +36 -0
  57. package/dist/core/modules/media.js.map +1 -1
  58. package/dist/core/modules/navigation.d.ts +3 -3
  59. package/dist/core/modules/navigation.d.ts.map +1 -1
  60. package/dist/core/modules/navigation.js +3 -3
  61. package/dist/core/modules/navigation.js.map +1 -1
  62. package/dist/core/modules/payment.d.ts +39 -0
  63. package/dist/core/modules/payment.d.ts.map +1 -0
  64. package/dist/core/modules/payment.js +25 -0
  65. package/dist/core/modules/payment.js.map +1 -0
  66. package/dist/core/modules/permissions.d.ts +28 -0
  67. package/dist/core/modules/permissions.d.ts.map +1 -0
  68. package/dist/core/modules/permissions.js +31 -0
  69. package/dist/core/modules/permissions.js.map +1 -0
  70. package/dist/core/modules/phone.d.ts +22 -0
  71. package/dist/core/modules/phone.d.ts.map +1 -0
  72. package/dist/core/modules/phone.js +31 -0
  73. package/dist/core/modules/phone.js.map +1 -0
  74. package/dist/core/modules/storage.d.ts +88 -4
  75. package/dist/core/modules/storage.d.ts.map +1 -1
  76. package/dist/core/modules/storage.js +78 -13
  77. package/dist/core/modules/storage.js.map +1 -1
  78. package/dist/core/modules/system.d.ts +67 -0
  79. package/dist/core/modules/system.d.ts.map +1 -0
  80. package/dist/core/modules/system.js +55 -0
  81. package/dist/core/modules/system.js.map +1 -0
  82. package/dist/core/modules/ui.d.ts +40 -9
  83. package/dist/core/modules/ui.d.ts.map +1 -1
  84. package/dist/core/modules/ui.js +45 -11
  85. package/dist/core/modules/ui.js.map +1 -1
  86. package/dist/core/modules/user.d.ts +18 -0
  87. package/dist/core/modules/user.d.ts.map +1 -0
  88. package/dist/core/modules/user.js +19 -0
  89. package/dist/core/modules/user.js.map +1 -0
  90. package/dist/core/modules/utility.d.ts +23 -0
  91. package/dist/core/modules/utility.d.ts.map +1 -0
  92. package/dist/core/modules/utility.js +19 -0
  93. package/dist/core/modules/utility.js.map +1 -0
  94. package/dist/core/types/index.d.ts +66 -8
  95. package/dist/core/types/index.d.ts.map +1 -1
  96. package/dist/index.d.ts +3 -3
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +3 -3
  99. package/dist/index.js.map +1 -1
  100. package/dist/mock/index.d.ts +0 -6
  101. package/dist/mock/index.d.ts.map +1 -1
  102. package/dist/mock/index.js +0 -6
  103. package/dist/mock/index.js.map +1 -1
  104. package/dist/mock/mock-engine.d.ts +6 -25
  105. package/dist/mock/mock-engine.d.ts.map +1 -1
  106. package/dist/mock/mock-engine.js +8 -325
  107. package/dist/mock/mock-engine.js.map +1 -1
  108. package/dist/mock/presets.d.ts +2 -2
  109. package/dist/mock/presets.d.ts.map +1 -1
  110. package/dist/mock/presets.js +2 -42
  111. package/dist/mock/presets.js.map +1 -1
  112. package/dist/mock/store.d.ts +2 -33
  113. package/dist/mock/store.d.ts.map +1 -1
  114. package/dist/mock/store.js +2 -130
  115. package/dist/mock/store.js.map +1 -1
  116. package/dist/transport/adaptive-transport.d.ts +2 -0
  117. package/dist/transport/adaptive-transport.d.ts.map +1 -1
  118. package/dist/transport/adaptive-transport.js +11 -3
  119. package/dist/transport/adaptive-transport.js.map +1 -1
  120. package/dist/transport/bridge-hub.d.ts +46 -0
  121. package/dist/transport/bridge-hub.d.ts.map +1 -0
  122. package/dist/transport/bridge-hub.js +268 -0
  123. package/dist/transport/bridge-hub.js.map +1 -0
  124. package/dist/transport/index.d.ts +1 -0
  125. package/dist/transport/index.d.ts.map +1 -1
  126. package/dist/transport/index.js +1 -0
  127. package/dist/transport/index.js.map +1 -1
  128. package/dist/transport/mock-transport.d.ts +2 -0
  129. package/dist/transport/mock-transport.d.ts.map +1 -1
  130. package/dist/transport/mock-transport.js +6 -0
  131. package/dist/transport/mock-transport.js.map +1 -1
  132. package/dist/transport/native-transport.d.ts +7 -6
  133. package/dist/transport/native-transport.d.ts.map +1 -1
  134. package/dist/transport/native-transport.js +49 -122
  135. package/dist/transport/native-transport.js.map +1 -1
  136. package/dist/transport/postmessage-transport.d.ts +9 -1
  137. package/dist/transport/postmessage-transport.d.ts.map +1 -1
  138. package/dist/transport/postmessage-transport.js +216 -14
  139. package/dist/transport/postmessage-transport.js.map +1 -1
  140. package/dist/transport/timeout-policy.d.ts +5 -0
  141. package/dist/transport/timeout-policy.d.ts.map +1 -0
  142. package/dist/transport/timeout-policy.js +21 -0
  143. package/dist/transport/timeout-policy.js.map +1 -0
  144. package/dist/transport/transport.interface.d.ts +2 -0
  145. package/dist/transport/transport.interface.d.ts.map +1 -1
  146. package/dist/transport/types.d.ts +4 -1
  147. package/dist/transport/types.d.ts.map +1 -1
  148. package/package.json +2 -2
  149. package/simulator-dist/assets/index-DkSKbR3O.js +120 -0
  150. package/simulator-dist/index.html +1 -1
  151. package/dist/mock/handlers/auth.handler.d.ts +0 -24
  152. package/dist/mock/handlers/auth.handler.d.ts.map +0 -1
  153. package/dist/mock/handlers/auth.handler.js +0 -106
  154. package/dist/mock/handlers/auth.handler.js.map +0 -1
  155. package/dist/mock/handlers/device.handler.d.ts +0 -16
  156. package/dist/mock/handlers/device.handler.d.ts.map +0 -1
  157. package/dist/mock/handlers/device.handler.js +0 -53
  158. package/dist/mock/handlers/device.handler.js.map +0 -1
  159. package/dist/mock/handlers/media.handler.d.ts +0 -9
  160. package/dist/mock/handlers/media.handler.d.ts.map +0 -1
  161. package/dist/mock/handlers/media.handler.js +0 -20
  162. package/dist/mock/handlers/media.handler.js.map +0 -1
  163. package/dist/mock/handlers/payment.handler.d.ts +0 -27
  164. package/dist/mock/handlers/payment.handler.d.ts.map +0 -1
  165. package/dist/mock/handlers/payment.handler.js +0 -62
  166. package/dist/mock/handlers/payment.handler.js.map +0 -1
  167. package/dist/mock/handlers/storage.handler.d.ts +0 -18
  168. package/dist/mock/handlers/storage.handler.d.ts.map +0 -1
  169. package/dist/mock/handlers/storage.handler.js +0 -40
  170. package/dist/mock/handlers/storage.handler.js.map +0 -1
  171. package/dist/mock/handlers/ui.handler.d.ts +0 -34
  172. package/dist/mock/handlers/ui.handler.d.ts.map +0 -1
  173. package/dist/mock/handlers/ui.handler.js +0 -59
  174. package/dist/mock/handlers/ui.handler.js.map +0 -1
  175. package/simulator-dist/assets/index-DpHZwm7N.js +0 -199
@@ -1,8 +1,58 @@
1
1
  import { ITransport } from '../../transport/index.js';
2
- import { AccessTokenResult, AuthLoginOptions, AuthLoginResult, UserProfile } from '../types/index.js';
2
+ import { BiometricStatus, BiometricAuthOptions, BiometricAuthResult, AccessTokenResult, AuthLoginOptions, AuthLoginResult, MiniAppTokenResult, UserProfile } from '../types/index.js';
3
+ export interface PkceEntry {
4
+ verifier: string;
5
+ createdAt: number;
6
+ expiresAt: number;
7
+ timer?: any;
8
+ }
9
+ export interface PkceStoreConfig {
10
+ defaultTtlMs?: number;
11
+ maxPendingSessions?: number;
12
+ }
13
+ /**
14
+ * PkceVerifierStore enforces lifecycle constraints on generated PKCE code verifiers:
15
+ * 1. Time-To-Live (TTL): Automatically evicts and cleans up timers after expiry (default: 5 minutes).
16
+ * 2. Capacity bounds: Caps pending verifier sessions (default: max 20) with FIFO eviction of oldest entries.
17
+ * 3. Single-use consumption: Retrieving a verifier immediately burns it from the store.
18
+ * 4. Explicit teardown: Cleans up all pending verifiers on logout, error, or SDK destruction.
19
+ */
20
+ export declare class PkceVerifierStore {
21
+ private entries;
22
+ private defaultTtlMs;
23
+ private maxPendingSessions;
24
+ constructor(config?: PkceStoreConfig);
25
+ set(authCode: string, verifier: string, ttlMs?: number): void;
26
+ get(authCode: string): string | undefined;
27
+ consume(authCode: string): string | undefined;
28
+ delete(authCode: string): boolean;
29
+ has(authCode: string): boolean;
30
+ size(): number;
31
+ clear(): void;
32
+ private cleanExpired;
33
+ private getOldestKey;
34
+ }
35
+ export declare const pkceStore: PkceVerifierStore;
3
36
  export declare class AuthModule {
4
37
  private transport;
5
38
  constructor(transport: ITransport);
39
+ /** Kiểm tra hỗ trợ phần cứng và sinh trắc học đã thiết lập/được phép dùng. */
40
+ checkBiometrics(): Promise<BiometricStatus>;
41
+ /** Xác thực cục bộ bằng sinh trắc học; yêu cầu phiên SuperApp đang đăng nhập. */
42
+ authenticateBiometric(options?: BiometricAuthOptions): Promise<BiometricAuthResult>;
43
+ requestCode(options?: {
44
+ codeChallenge?: string;
45
+ scopes?: string[];
46
+ }): Promise<{
47
+ authCode: string;
48
+ expiresIn: number;
49
+ appId: string;
50
+ scopes: string[];
51
+ }>;
52
+ exchangeCode(options: {
53
+ authCode: string;
54
+ codeVerifier?: string;
55
+ }): Promise<MiniAppTokenResult>;
6
56
  /**
7
57
  * Yêu cầu người dùng đăng nhập & cấp quyền truy cập
8
58
  */
@@ -20,11 +70,21 @@ export declare class AuthModule {
20
70
  */
21
71
  refreshToken(refreshToken?: string): Promise<AccessTokenResult>;
22
72
  /**
23
- * Đăng xuất phiên làm việc hiện tại
73
+ * Đăng xuất phiên làm việc hiện tại và hủy toàn bộ phiên PKCE đang chờ
24
74
  */
25
75
  logout(): Promise<{
26
- success: boolean;
27
- message: string;
76
+ status: string;
77
+ timestamp: string;
28
78
  }>;
79
+ destroy(): void;
80
+ dispose(): void;
81
+ }
82
+ export declare class AuthBackend {
83
+ private transport;
84
+ constructor(transport: ITransport);
85
+ exchangeCode(authCode: string): Promise<MiniAppTokenResult>;
86
+ refreshToken(refreshToken: string): Promise<MiniAppTokenResult>;
87
+ destroy(): void;
88
+ dispose(): void;
29
89
  }
30
90
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/modules/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEtG,qBAAa,UAAU;IACT,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACU,KAAK,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAI5E;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAIzD;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAInD;;OAEG;IACU,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5E;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGtE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/modules/auth.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,173 @@
1
+ /**
2
+ * PkceVerifierStore enforces lifecycle constraints on generated PKCE code verifiers:
3
+ * 1. Time-To-Live (TTL): Automatically evicts and cleans up timers after expiry (default: 5 minutes).
4
+ * 2. Capacity bounds: Caps pending verifier sessions (default: max 20) with FIFO eviction of oldest entries.
5
+ * 3. Single-use consumption: Retrieving a verifier immediately burns it from the store.
6
+ * 4. Explicit teardown: Cleans up all pending verifiers on logout, error, or SDK destruction.
7
+ */
8
+ export class PkceVerifierStore {
9
+ entries = new Map();
10
+ defaultTtlMs;
11
+ maxPendingSessions;
12
+ constructor(config = {}) {
13
+ this.defaultTtlMs = config.defaultTtlMs ?? 5 * 60 * 1000; // 5 minutes default
14
+ this.maxPendingSessions = config.maxPendingSessions ?? 20; // max 20 pending requests
15
+ }
16
+ set(authCode, verifier, ttlMs) {
17
+ if (!authCode || !verifier)
18
+ return;
19
+ this.cleanExpired();
20
+ // Enforce capacity bounds: evict oldest entry if limit reached
21
+ if (this.entries.size >= this.maxPendingSessions) {
22
+ const oldestKey = this.getOldestKey();
23
+ if (oldestKey) {
24
+ this.delete(oldestKey);
25
+ }
26
+ }
27
+ const effectiveTtl = ttlMs && ttlMs > 0 ? ttlMs : this.defaultTtlMs;
28
+ const now = Date.now();
29
+ const expiresAt = now + effectiveTtl;
30
+ const timer = setTimeout(() => {
31
+ this.delete(authCode);
32
+ }, effectiveTtl);
33
+ if (timer && typeof timer === 'object' && typeof timer.unref === 'function') {
34
+ timer.unref();
35
+ }
36
+ this.entries.set(authCode, {
37
+ verifier,
38
+ createdAt: now,
39
+ expiresAt,
40
+ timer,
41
+ });
42
+ }
43
+ get(authCode) {
44
+ const entry = this.entries.get(authCode);
45
+ if (!entry)
46
+ return undefined;
47
+ if (Date.now() > entry.expiresAt) {
48
+ this.delete(authCode);
49
+ return undefined;
50
+ }
51
+ return entry.verifier;
52
+ }
53
+ consume(authCode) {
54
+ const entry = this.entries.get(authCode);
55
+ if (!entry)
56
+ return undefined;
57
+ this.delete(authCode);
58
+ if (Date.now() > entry.expiresAt) {
59
+ return undefined;
60
+ }
61
+ return entry.verifier;
62
+ }
63
+ delete(authCode) {
64
+ const entry = this.entries.get(authCode);
65
+ if (!entry)
66
+ return false;
67
+ if (entry.timer) {
68
+ clearTimeout(entry.timer);
69
+ }
70
+ return this.entries.delete(authCode);
71
+ }
72
+ has(authCode) {
73
+ const entry = this.entries.get(authCode);
74
+ if (!entry)
75
+ return false;
76
+ if (Date.now() > entry.expiresAt) {
77
+ this.delete(authCode);
78
+ return false;
79
+ }
80
+ return true;
81
+ }
82
+ size() {
83
+ this.cleanExpired();
84
+ return this.entries.size;
85
+ }
86
+ clear() {
87
+ for (const entry of this.entries.values()) {
88
+ if (entry.timer) {
89
+ clearTimeout(entry.timer);
90
+ }
91
+ }
92
+ this.entries.clear();
93
+ }
94
+ cleanExpired() {
95
+ const now = Date.now();
96
+ for (const [key, entry] of this.entries.entries()) {
97
+ if (now > entry.expiresAt) {
98
+ if (entry.timer)
99
+ clearTimeout(entry.timer);
100
+ this.entries.delete(key);
101
+ }
102
+ }
103
+ }
104
+ getOldestKey() {
105
+ let oldestKey;
106
+ let oldestTime = Infinity;
107
+ for (const [key, entry] of this.entries.entries()) {
108
+ if (entry.createdAt < oldestTime) {
109
+ oldestTime = entry.createdAt;
110
+ oldestKey = key;
111
+ }
112
+ }
113
+ return oldestKey;
114
+ }
115
+ }
116
+ export const pkceStore = new PkceVerifierStore();
117
+ function url64(bytes) {
118
+ return btoa(String.fromCharCode(...bytes)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
119
+ }
1
120
  export class AuthModule {
2
121
  transport;
3
122
  constructor(transport) {
4
123
  this.transport = transport;
5
124
  }
125
+ /** Kiểm tra hỗ trợ phần cứng và sinh trắc học đã thiết lập/được phép dùng. */
126
+ checkBiometrics() {
127
+ return this.transport.invoke('auth.checkBiometrics');
128
+ }
129
+ /** Xác thực cục bộ bằng sinh trắc học; yêu cầu phiên SuperApp đang đăng nhập. */
130
+ authenticateBiometric(options = {}) {
131
+ return this.transport.invoke('auth.authenticateBiometric', options);
132
+ }
133
+ async requestCode(options = {}) {
134
+ let challenge = options.codeChallenge;
135
+ if (!challenge) {
136
+ const verifier = url64(crypto.getRandomValues(new Uint8Array(32)));
137
+ challenge = url64(new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(verifier))));
138
+ const result = await this.transport.invoke('auth.requestCode', { codeChallenge: challenge, codeChallengeMethod: 'S256', scopes: options.scopes || ['user.getBasicInfo'] });
139
+ const ttlMs = result.expiresIn && result.expiresIn > 0 && result.expiresIn <= 3600
140
+ ? result.expiresIn * 1000
141
+ : undefined;
142
+ pkceStore.set(result.authCode, verifier, ttlMs);
143
+ return result;
144
+ }
145
+ return this.transport.invoke('auth.requestCode', {
146
+ ...options,
147
+ codeChallenge: challenge,
148
+ codeChallengeMethod: 'S256',
149
+ });
150
+ }
151
+ async exchangeCode(options) {
152
+ const codeVerifier = options.codeVerifier || pkceStore.consume(options.authCode);
153
+ if (!codeVerifier) {
154
+ throw { code: 'INVALID_PARAMS', message: 'Request a PKCE auth code first or provide codeVerifier' };
155
+ }
156
+ try {
157
+ const result = await this.transport.invoke('auth.exchangeCode', {
158
+ authCode: options.authCode,
159
+ codeVerifier,
160
+ });
161
+ return result;
162
+ }
163
+ catch (error) {
164
+ pkceStore.delete(options.authCode);
165
+ throw error;
166
+ }
167
+ finally {
168
+ pkceStore.delete(options.authCode);
169
+ }
170
+ }
6
171
  /**
7
172
  * Yêu cầu người dùng đăng nhập & cấp quyền truy cập
8
173
  */
@@ -28,10 +193,48 @@ export class AuthModule {
28
193
  return this.transport.invoke('auth.refreshToken', { refreshToken });
29
194
  }
30
195
  /**
31
- * Đăng xuất phiên làm việc hiện tại
196
+ * Đăng xuất phiên làm việc hiện tại và hủy toàn bộ phiên PKCE đang chờ
32
197
  */
33
198
  async logout() {
34
- return this.transport.invoke('auth.logout');
199
+ try {
200
+ return await this.transport.invoke('auth.logout');
201
+ }
202
+ finally {
203
+ pkceStore.clear();
204
+ }
205
+ }
206
+ destroy() {
207
+ pkceStore.clear();
208
+ }
209
+ dispose() {
210
+ this.destroy();
211
+ }
212
+ }
213
+ export class AuthBackend {
214
+ transport;
215
+ constructor(transport) {
216
+ this.transport = transport;
217
+ }
218
+ async exchangeCode(authCode) {
219
+ const codeVerifier = pkceStore.consume(authCode);
220
+ if (!codeVerifier)
221
+ throw { code: 'INVALID_PARAMS', message: 'Request a PKCE auth code first' };
222
+ try {
223
+ const result = await this.transport.invoke('auth.exchangeCode', { authCode, codeVerifier });
224
+ return result;
225
+ }
226
+ finally {
227
+ pkceStore.delete(authCode);
228
+ }
229
+ }
230
+ refreshToken(refreshToken) {
231
+ return this.transport.invoke('auth.refreshToken', { refreshToken });
232
+ }
233
+ destroy() {
234
+ pkceStore.clear();
235
+ }
236
+ dispose() {
237
+ this.destroy();
35
238
  }
36
239
  }
37
240
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/core/modules/auth.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,KAAK,CAAC,KAAK,CAAC,UAA4B,EAAE;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAkB,YAAY,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAoB,qBAAqB,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAc,qBAAqB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY,CAAC,YAAqB;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAoB,mBAAmB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAwC,aAAa,CAAC,CAAC;IACrF,CAAC;CACF"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/core/modules/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ITransport } from '../../transport/index.js';
2
+ export declare class DebugModule {
3
+ private transport;
4
+ constructor(transport: ITransport);
5
+ /**
6
+ * Kiểm tra phản hồi echo từ SuperApp Bridge
7
+ */
8
+ echo(payload: any): Promise<any>;
9
+ /**
10
+ * Giả lập lỗi native để kiểm tra xử lý ngoại lệ
11
+ */
12
+ simulateFailure(type: string): Promise<any>;
13
+ }
14
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/core/modules/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,qBAAa,WAAW;IACV,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI7C;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAGzD"}
@@ -0,0 +1,19 @@
1
+ export class DebugModule {
2
+ transport;
3
+ constructor(transport) {
4
+ this.transport = transport;
5
+ }
6
+ /**
7
+ * Kiểm tra phản hồi echo từ SuperApp Bridge
8
+ */
9
+ async echo(payload) {
10
+ return this.transport.invoke('debug.echo', payload);
11
+ }
12
+ /**
13
+ * Giả lập lỗi native để kiểm tra xử lý ngoại lệ
14
+ */
15
+ async simulateFailure(type) {
16
+ return this.transport.invoke('debug.simulateFailure', { type });
17
+ }
18
+ }
19
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/core/modules/debug.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,KAAK,CAAC,IAAI,CAAC,OAAY;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe,CAAC,IAAY;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -3,6 +3,9 @@ import { BatteryInfo, DeviceInfo, KeepScreenOptions, NetworkInfo } from '../type
3
3
  export declare class DeviceModule {
4
4
  private transport;
5
5
  constructor(transport: ITransport);
6
+ getContacts(options?: {
7
+ query?: string;
8
+ }): Promise<import('../types/index.js').ContactsResult>;
6
9
  /**
7
10
  * Lấy mức pin và trạng thái sạc
8
11
  */
@@ -22,7 +25,7 @@ export declare class DeviceModule {
22
25
  /**
23
26
  * Kích hoạt rung phản hồi xúc giác (Haptic Feedback)
24
27
  */
25
- vibrate(style?: 'light' | 'medium' | 'heavy'): Promise<void>;
28
+ vibrate(style?: 'light' | 'medium' | 'heavy'): Promise<any>;
26
29
  /**
27
30
  * Giữ màn hình luôn bật / luôn sáng
28
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/core/modules/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5F,qBAAa,YAAY;IACX,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAInD;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAInD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjD;;OAEG;IACU,OAAO,CAAC,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,OAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlF;;OAEG;IACU,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;CAMrH"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/core/modules/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5F,qBAAa,YAAY;IACX,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAClC,WAAW,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC;IAIzG;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAInD;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAInD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjD;;OAEG;IACU,OAAO,CAAC,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,OAAiB,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF;;OAEG;IACU,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;CAMrH"}
@@ -3,6 +3,9 @@ export class DeviceModule {
3
3
  constructor(transport) {
4
4
  this.transport = transport;
5
5
  }
6
+ getContacts(options = {}) {
7
+ return this.transport.invoke('getContacts', options);
8
+ }
6
9
  /**
7
10
  * Lấy mức pin và trạng thái sạc
8
11
  */
@@ -31,7 +34,7 @@ export class DeviceModule {
31
34
  * Kích hoạt rung phản hồi xúc giác (Haptic Feedback)
32
35
  */
33
36
  async vibrate(style = 'light') {
34
- await this.transport.invoke('device.vibrate', { style });
37
+ return this.transport.invoke('device.vibrate', { style });
35
38
  }
36
39
  /**
37
40
  * Giữ màn hình luôn bật / luôn sáng
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/core/modules/device.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAc,uBAAuB,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAc,uBAAuB,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAa,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAa,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,QAAsC,OAAO;QAChE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU,CAAC,OAAqC;QAC3D,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE;YAC3B,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAA8C,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC1G,CAAC;CACF"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/core/modules/device.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IACtC,WAAW,CAAC,UAA8B,EAAE;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAc,uBAAuB,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAc,uBAAuB,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAa,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAa,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,QAAsC,OAAO;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU,CAAC,OAAqC;QAC3D,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE;YAC3B,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAA8C,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC1G,CAAC;CACF"}
@@ -0,0 +1,38 @@
1
+ import { ITransport } from '../../transport/index.js';
2
+ export declare class FileModule {
3
+ private transport;
4
+ constructor(transport: ITransport);
5
+ /**
6
+ * Lưu tệp tin vào bộ nhớ ứng dụng
7
+ */
8
+ saveFile(options: {
9
+ data: string;
10
+ fileName: string;
11
+ mimeType?: string;
12
+ }): Promise<{
13
+ success: boolean;
14
+ filePath: string;
15
+ }>;
16
+ /**
17
+ * Chọn tệp từ máy (PDF, Docx, Image...)
18
+ */
19
+ pickFile(options?: {
20
+ allowedExtensions?: string[];
21
+ mimeTypes?: string[];
22
+ }): Promise<{
23
+ name: string;
24
+ size: number;
25
+ uri: string;
26
+ mimeType?: string;
27
+ }>;
28
+ /**
29
+ * Xem trước tệp tài liệu bằng trình đọc native
30
+ */
31
+ filePreview(options: {
32
+ filePath: string;
33
+ title?: string;
34
+ }): Promise<{
35
+ success: boolean;
36
+ }>;
37
+ }
38
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/core/modules/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,qBAAa,UAAU;IACT,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACU,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC7F,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAIF;;OAEG;IACU,QAAQ,CAAC,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC;QACnG,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAIF;;OAEG;IACU,WAAW,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAGvG"}
@@ -0,0 +1,25 @@
1
+ export class FileModule {
2
+ transport;
3
+ constructor(transport) {
4
+ this.transport = transport;
5
+ }
6
+ /**
7
+ * Lưu tệp tin vào bộ nhớ ứng dụng
8
+ */
9
+ async saveFile(options) {
10
+ return this.transport.invoke('saveFile', options);
11
+ }
12
+ /**
13
+ * Chọn tệp từ máy (PDF, Docx, Image...)
14
+ */
15
+ async pickFile(options = {}) {
16
+ return this.transport.invoke('pickFile', options);
17
+ }
18
+ /**
19
+ * Xem trước tệp tài liệu bằng trình đọc native
20
+ */
21
+ async filePreview(options) {
22
+ return this.transport.invoke('filePreview', options);
23
+ }
24
+ }
25
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/core/modules/file.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,OAA8D;QAIlF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,UAAkE,EAAE;QAMxF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW,CAAC,OAA6C;QACpE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -3,6 +3,18 @@ export type LifecycleListener = (data?: any) => void;
3
3
  export declare class LifecycleModule {
4
4
  private transport;
5
5
  constructor(transport: ITransport);
6
+ /**
7
+ * Đăng ký lắng nghe sự kiện bất kỳ từ SuperApp
8
+ */
9
+ on(event: string, callback: (payload: any) => void): () => void;
10
+ /**
11
+ * Huỷ lắng nghe sự kiện
12
+ */
13
+ off(event: string, callback: (payload: any) => void): void;
14
+ /**
15
+ * Phát sự kiện trong Mini App
16
+ */
17
+ emit(event: string, payload: any): void;
6
18
  /**
7
19
  * Đăng ký lắng nghe sự kiện khi Mini App hiển thị ra màn hình chính (Foreground)
8
20
  */
@@ -15,5 +27,16 @@ export declare class LifecycleModule {
15
27
  * Đăng ký lắng nghe lỗi hệ thống
16
28
  */
17
29
  onError(callback: LifecycleListener): () => void;
30
+ /**
31
+ * Lắng nghe sự kiện thay đổi phiên đăng nhập (login / logout)
32
+ */
33
+ onSessionChanged(callback: (payload: {
34
+ state: 'logged_in' | 'logged_out';
35
+ userId?: string;
36
+ }) => void): () => void;
37
+ /**
38
+ * Lắng nghe trạng thái thanh toán đơn hàng cập nhật
39
+ */
40
+ onPaymentStatusChanged(callback: (payload: any) => void): () => void;
18
41
  }
19
42
  //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/modules/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;AAErD,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIzD;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIzD;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;CAGxD"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/modules/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;AAErD,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzC;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAItE;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAIjE;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAI9C;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIzD;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIzD;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAIvD;;OAEG;IACI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAIxH;;OAEG;IACI,sBAAsB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;CAG5E"}
@@ -3,6 +3,24 @@ export class LifecycleModule {
3
3
  constructor(transport) {
4
4
  this.transport = transport;
5
5
  }
6
+ /**
7
+ * Đăng ký lắng nghe sự kiện bất kỳ từ SuperApp
8
+ */
9
+ on(event, callback) {
10
+ return this.transport.on(event, callback);
11
+ }
12
+ /**
13
+ * Huỷ lắng nghe sự kiện
14
+ */
15
+ off(event, callback) {
16
+ this.transport.off(event, callback);
17
+ }
18
+ /**
19
+ * Phát sự kiện trong Mini App
20
+ */
21
+ emit(event, payload) {
22
+ this.transport.emit(event, payload);
23
+ }
6
24
  /**
7
25
  * Đăng ký lắng nghe sự kiện khi Mini App hiển thị ra màn hình chính (Foreground)
8
26
  */
@@ -21,5 +39,17 @@ export class LifecycleModule {
21
39
  onError(callback) {
22
40
  return this.transport.on('appError', callback);
23
41
  }
42
+ /**
43
+ * Lắng nghe sự kiện thay đổi phiên đăng nhập (login / logout)
44
+ */
45
+ onSessionChanged(callback) {
46
+ return this.transport.on('auth.sessionChanged', callback);
47
+ }
48
+ /**
49
+ * Lắng nghe trạng thái thanh toán đơn hàng cập nhật
50
+ */
51
+ onPaymentStatusChanged(callback) {
52
+ return this.transport.on('payment.statusChanged', callback);
53
+ }
24
54
  }
25
55
  //# sourceMappingURL=lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/core/modules/lifecycle.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,SAAS,CAAC,QAA2B;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,QAA2B;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,QAA2B;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/core/modules/lifecycle.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C;;OAEG;IACI,EAAE,CAAC,KAAa,EAAE,QAAgC;QACvD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,KAAa,EAAE,QAAgC;QACxD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,KAAa,EAAE,OAAY;QACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,QAA2B;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,QAA2B;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,QAA2B;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,QAAmF;QACzG,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACI,sBAAsB,CAAC,QAAgC;QAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;CACF"}