@vqh2602/mini-app-sdk 1.0.7 → 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 (173) hide show
  1. package/README.md +9 -0
  2. package/bin/simulator.js +36 -6
  3. package/dist/cli/commands/dev.d.ts +1 -0
  4. package/dist/cli/commands/dev.d.ts.map +1 -1
  5. package/dist/cli/commands/dev.js +3 -2
  6. package/dist/cli/commands/dev.js.map +1 -1
  7. package/dist/cli/commands/simulator.d.ts +1 -0
  8. package/dist/cli/commands/simulator.d.ts.map +1 -1
  9. package/dist/cli/commands/simulator.js +3 -2
  10. package/dist/cli/commands/simulator.js.map +1 -1
  11. package/dist/cli/commands/upload.d.ts +3 -0
  12. package/dist/cli/commands/upload.d.ts.map +1 -1
  13. package/dist/cli/commands/upload.js +45 -27
  14. package/dist/cli/commands/upload.js.map +1 -1
  15. package/dist/cli/index.js +5 -1
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/utils/auth.d.ts +34 -0
  18. package/dist/cli/utils/auth.d.ts.map +1 -0
  19. package/dist/cli/utils/auth.js +99 -0
  20. package/dist/cli/utils/auth.js.map +1 -0
  21. package/dist/cli/utils/server.d.ts +15 -1
  22. package/dist/cli/utils/server.d.ts.map +1 -1
  23. package/dist/cli/utils/server.js +71 -7
  24. package/dist/cli/utils/server.js.map +1 -1
  25. package/dist/core/client.d.ts +148 -16
  26. package/dist/core/client.d.ts.map +1 -1
  27. package/dist/core/client.js +113 -53
  28. package/dist/core/client.js.map +1 -1
  29. package/dist/core/index.d.ts +10 -0
  30. package/dist/core/index.d.ts.map +1 -1
  31. package/dist/core/index.js +10 -0
  32. package/dist/core/index.js.map +1 -1
  33. package/dist/core/modules/auth.d.ts +64 -4
  34. package/dist/core/modules/auth.d.ts.map +1 -1
  35. package/dist/core/modules/auth.js +205 -2
  36. package/dist/core/modules/auth.js.map +1 -1
  37. package/dist/core/modules/debug.d.ts +14 -0
  38. package/dist/core/modules/debug.d.ts.map +1 -0
  39. package/dist/core/modules/debug.js +19 -0
  40. package/dist/core/modules/debug.js.map +1 -0
  41. package/dist/core/modules/device.d.ts +4 -1
  42. package/dist/core/modules/device.d.ts.map +1 -1
  43. package/dist/core/modules/device.js +4 -1
  44. package/dist/core/modules/device.js.map +1 -1
  45. package/dist/core/modules/file.d.ts +38 -0
  46. package/dist/core/modules/file.d.ts.map +1 -0
  47. package/dist/core/modules/file.js +25 -0
  48. package/dist/core/modules/file.js.map +1 -0
  49. package/dist/core/modules/lifecycle.d.ts +23 -0
  50. package/dist/core/modules/lifecycle.d.ts.map +1 -1
  51. package/dist/core/modules/lifecycle.js +30 -0
  52. package/dist/core/modules/lifecycle.js.map +1 -1
  53. package/dist/core/modules/media.d.ts +65 -0
  54. package/dist/core/modules/media.d.ts.map +1 -1
  55. package/dist/core/modules/media.js +36 -0
  56. package/dist/core/modules/media.js.map +1 -1
  57. package/dist/core/modules/navigation.d.ts +3 -3
  58. package/dist/core/modules/navigation.d.ts.map +1 -1
  59. package/dist/core/modules/navigation.js +3 -3
  60. package/dist/core/modules/navigation.js.map +1 -1
  61. package/dist/core/modules/payment.d.ts +39 -0
  62. package/dist/core/modules/payment.d.ts.map +1 -0
  63. package/dist/core/modules/payment.js +25 -0
  64. package/dist/core/modules/payment.js.map +1 -0
  65. package/dist/core/modules/permissions.d.ts +28 -0
  66. package/dist/core/modules/permissions.d.ts.map +1 -0
  67. package/dist/core/modules/permissions.js +31 -0
  68. package/dist/core/modules/permissions.js.map +1 -0
  69. package/dist/core/modules/phone.d.ts +22 -0
  70. package/dist/core/modules/phone.d.ts.map +1 -0
  71. package/dist/core/modules/phone.js +31 -0
  72. package/dist/core/modules/phone.js.map +1 -0
  73. package/dist/core/modules/storage.d.ts +88 -4
  74. package/dist/core/modules/storage.d.ts.map +1 -1
  75. package/dist/core/modules/storage.js +78 -13
  76. package/dist/core/modules/storage.js.map +1 -1
  77. package/dist/core/modules/system.d.ts +67 -0
  78. package/dist/core/modules/system.d.ts.map +1 -0
  79. package/dist/core/modules/system.js +55 -0
  80. package/dist/core/modules/system.js.map +1 -0
  81. package/dist/core/modules/ui.d.ts +40 -9
  82. package/dist/core/modules/ui.d.ts.map +1 -1
  83. package/dist/core/modules/ui.js +45 -11
  84. package/dist/core/modules/ui.js.map +1 -1
  85. package/dist/core/modules/user.d.ts +18 -0
  86. package/dist/core/modules/user.d.ts.map +1 -0
  87. package/dist/core/modules/user.js +19 -0
  88. package/dist/core/modules/user.js.map +1 -0
  89. package/dist/core/modules/utility.d.ts +23 -0
  90. package/dist/core/modules/utility.d.ts.map +1 -0
  91. package/dist/core/modules/utility.js +19 -0
  92. package/dist/core/modules/utility.js.map +1 -0
  93. package/dist/core/types/index.d.ts +66 -8
  94. package/dist/core/types/index.d.ts.map +1 -1
  95. package/dist/index.d.ts +3 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +3 -3
  98. package/dist/index.js.map +1 -1
  99. package/dist/mock/index.d.ts +0 -6
  100. package/dist/mock/index.d.ts.map +1 -1
  101. package/dist/mock/index.js +0 -6
  102. package/dist/mock/index.js.map +1 -1
  103. package/dist/mock/mock-engine.d.ts +6 -25
  104. package/dist/mock/mock-engine.d.ts.map +1 -1
  105. package/dist/mock/mock-engine.js +8 -325
  106. package/dist/mock/mock-engine.js.map +1 -1
  107. package/dist/mock/presets.d.ts +2 -2
  108. package/dist/mock/presets.d.ts.map +1 -1
  109. package/dist/mock/presets.js +2 -42
  110. package/dist/mock/presets.js.map +1 -1
  111. package/dist/mock/store.d.ts +2 -33
  112. package/dist/mock/store.d.ts.map +1 -1
  113. package/dist/mock/store.js +2 -130
  114. package/dist/mock/store.js.map +1 -1
  115. package/dist/transport/adaptive-transport.d.ts +2 -0
  116. package/dist/transport/adaptive-transport.d.ts.map +1 -1
  117. package/dist/transport/adaptive-transport.js +11 -3
  118. package/dist/transport/adaptive-transport.js.map +1 -1
  119. package/dist/transport/bridge-hub.d.ts +46 -0
  120. package/dist/transport/bridge-hub.d.ts.map +1 -0
  121. package/dist/transport/bridge-hub.js +268 -0
  122. package/dist/transport/bridge-hub.js.map +1 -0
  123. package/dist/transport/index.d.ts +1 -0
  124. package/dist/transport/index.d.ts.map +1 -1
  125. package/dist/transport/index.js +1 -0
  126. package/dist/transport/index.js.map +1 -1
  127. package/dist/transport/mock-transport.d.ts +2 -0
  128. package/dist/transport/mock-transport.d.ts.map +1 -1
  129. package/dist/transport/mock-transport.js +6 -0
  130. package/dist/transport/mock-transport.js.map +1 -1
  131. package/dist/transport/native-transport.d.ts +6 -5
  132. package/dist/transport/native-transport.d.ts.map +1 -1
  133. package/dist/transport/native-transport.js +46 -120
  134. package/dist/transport/native-transport.js.map +1 -1
  135. package/dist/transport/postmessage-transport.d.ts +8 -0
  136. package/dist/transport/postmessage-transport.d.ts.map +1 -1
  137. package/dist/transport/postmessage-transport.js +213 -12
  138. package/dist/transport/postmessage-transport.js.map +1 -1
  139. package/dist/transport/timeout-policy.d.ts.map +1 -1
  140. package/dist/transport/timeout-policy.js +1 -0
  141. package/dist/transport/timeout-policy.js.map +1 -1
  142. package/dist/transport/transport.interface.d.ts +2 -0
  143. package/dist/transport/transport.interface.d.ts.map +1 -1
  144. package/dist/transport/types.d.ts +4 -1
  145. package/dist/transport/types.d.ts.map +1 -1
  146. package/package.json +2 -2
  147. package/simulator-dist/assets/index-DkSKbR3O.js +120 -0
  148. package/simulator-dist/index.html +1 -1
  149. package/dist/mock/handlers/auth.handler.d.ts +0 -24
  150. package/dist/mock/handlers/auth.handler.d.ts.map +0 -1
  151. package/dist/mock/handlers/auth.handler.js +0 -106
  152. package/dist/mock/handlers/auth.handler.js.map +0 -1
  153. package/dist/mock/handlers/device.handler.d.ts +0 -16
  154. package/dist/mock/handlers/device.handler.d.ts.map +0 -1
  155. package/dist/mock/handlers/device.handler.js +0 -53
  156. package/dist/mock/handlers/device.handler.js.map +0 -1
  157. package/dist/mock/handlers/media.handler.d.ts +0 -9
  158. package/dist/mock/handlers/media.handler.d.ts.map +0 -1
  159. package/dist/mock/handlers/media.handler.js +0 -20
  160. package/dist/mock/handlers/media.handler.js.map +0 -1
  161. package/dist/mock/handlers/payment.handler.d.ts +0 -27
  162. package/dist/mock/handlers/payment.handler.d.ts.map +0 -1
  163. package/dist/mock/handlers/payment.handler.js +0 -62
  164. package/dist/mock/handlers/payment.handler.js.map +0 -1
  165. package/dist/mock/handlers/storage.handler.d.ts +0 -18
  166. package/dist/mock/handlers/storage.handler.d.ts.map +0 -1
  167. package/dist/mock/handlers/storage.handler.js +0 -40
  168. package/dist/mock/handlers/storage.handler.js.map +0 -1
  169. package/dist/mock/handlers/ui.handler.d.ts +0 -34
  170. package/dist/mock/handlers/ui.handler.d.ts.map +0 -1
  171. package/dist/mock/handlers/ui.handler.js +0 -59
  172. package/dist/mock/handlers/ui.handler.js.map +0 -1
  173. package/simulator-dist/assets/index-DpHZwm7N.js +0 -199
package/README.md CHANGED
@@ -218,3 +218,12 @@ Sau khi sửa SDK trong repository, chạy `npm run build:miniapps` từ thư m
218
218
  ### Timeout khi chờ người dùng
219
219
 
220
220
  Native và simulator mặc định chờ tối đa 5 phút cho quét QR/mã vạch, camera, chọn ảnh/video/file, ghi âm, hộp thoại quyền và checkout; các action khác chờ tối đa 60 giây. Huỷ thao tác từ giao diện native vẫn trả lỗi `CANCELLED` ngay. `timeoutMs` khi khởi tạo SDK hoặc tham số thứ ba của `transport.invoke` sẽ ghi đè mặc định này. Playground dùng chính sách của SDK, không ép timeout 8 giây.
221
+
222
+ ## Sinh trắc học
223
+
224
+ Dùng `superApp.auth.checkBiometrics()` để kiểm tra hỗ trợ và thiết lập; nếu
225
+ `canAuthenticate === true`, gọi `superApp.auth.authenticateBiometric({ reason: "Xác thực để tiếp tục" })`
226
+ và chỉ tiếp tục khi `authenticated === true`. Host tự kiểm tra lại trước khi mở
227
+ hộp thoại hệ thống; yêu cầu phiên SuperApp đang đăng nhập.
228
+
229
+ [Hợp đồng API, lỗi và ví dụ đầy đủ](../docs/authentication.md#xác-thực-sinh-trắc-học-trong-mini-app).
package/bin/simulator.js CHANGED
@@ -19,6 +19,7 @@ Usage: superapp-simulator [options]
19
19
 
20
20
  Options:
21
21
  --port <number> Port to run simulator on (default: 5175)
22
+ --host <string> Host interface to bind to (default: 127.0.0.1)
22
23
  -h, --help Show this help message
23
24
  `);
24
25
  process.exit(0);
@@ -27,6 +28,9 @@ Options:
27
28
  const portIndex = args.indexOf('--port');
28
29
  const port = portIndex !== -1 && args[portIndex + 1] ? parseInt(args[portIndex + 1], 10) : 5175;
29
30
 
31
+ const hostIndex = args.indexOf('--host');
32
+ const host = hostIndex !== -1 && args[hostIndex + 1] ? args[hostIndex + 1] : '127.0.0.1';
33
+
30
34
  const MIME_TYPES = {
31
35
  '.html': 'text/html; charset=utf-8',
32
36
  '.js': 'application/javascript; charset=utf-8',
@@ -39,9 +43,35 @@ const MIME_TYPES = {
39
43
  '.woff2': 'font/woff2',
40
44
  };
41
45
 
46
+ function isAllowedCorsOrigin(origin) {
47
+ if (!origin || typeof origin !== 'string') return false;
48
+ try {
49
+ const url = new URL(origin);
50
+ return (
51
+ url.hostname === 'localhost' ||
52
+ url.hostname === '127.0.0.1' ||
53
+ url.hostname === '[::1]' ||
54
+ url.hostname.endsWith('.localhost')
55
+ );
56
+ } catch (_) {
57
+ return false;
58
+ }
59
+ }
60
+
42
61
  const server = http.createServer((req, res) => {
43
- res.setHeader('Access-Control-Allow-Origin', '*');
44
- res.setHeader('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS');
62
+ // Restricted CORS policy: only allow trusted local origins
63
+ const reqOrigin = req.headers.origin;
64
+ if (reqOrigin && isAllowedCorsOrigin(reqOrigin)) {
65
+ res.setHeader('Access-Control-Allow-Origin', reqOrigin);
66
+ res.setHeader('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS');
67
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-tenant-id');
68
+ res.setHeader('Vary', 'Origin');
69
+ }
70
+
71
+ // Security Headers
72
+ res.setHeader('X-Content-Type-Options', 'nosniff');
73
+ res.setHeader('X-Frame-Options', 'SAMEORIGIN');
74
+ res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
45
75
 
46
76
  if (req.method === 'OPTIONS') {
47
77
  res.writeHead(204);
@@ -49,7 +79,7 @@ const server = http.createServer((req, res) => {
49
79
  return;
50
80
  }
51
81
 
52
- const parsedUrl = new URL(req.url, `http://localhost:${port}`);
82
+ const parsedUrl = new URL(req.url, `http://${host}:${port}`);
53
83
  let pathname = parsedUrl.pathname;
54
84
  let filePath = path.join(distDir, pathname);
55
85
 
@@ -89,7 +119,7 @@ server.on('error', (err) => {
89
119
  }
90
120
  });
91
121
 
92
- server.listen(port, () => {
93
- console.log(`\n📱 \x1b[36mSuperApp Browser Simulator\x1b[0m is running at: \x1b[1mhttp://localhost:${port}\x1b[0m`);
94
- console.log(`🔗 Open with target Mini App: \x1b[32mhttp://localhost:${port}/?url=http://localhost:3000\x1b[0m\n`);
122
+ server.listen(port, host, () => {
123
+ console.log(`\n📱 \x1b[36mSuperApp Browser Simulator\x1b[0m is running at: \x1b[1mhttp://${host}:${port}\x1b[0m`);
124
+ console.log(`🔗 Open with target Mini App: \x1b[32mhttp://${host}:${port}/?url=http://localhost:3000\x1b[0m\n`);
95
125
  });
@@ -1,6 +1,7 @@
1
1
  export interface DevCommandOptions {
2
2
  port?: string;
3
3
  simulatorPort?: string;
4
+ host?: string;
4
5
  open?: boolean;
5
6
  noSimulator?: boolean;
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC9E"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC9E"}
@@ -6,19 +6,20 @@ export async function devServer(options = {}) {
6
6
  const manifest = loadManifest();
7
7
  const port = options.port || '3000';
8
8
  const simulatorPort = options.simulatorPort || '5175';
9
+ const host = options.host || '127.0.0.1';
9
10
  logger.title(`Khởi chạy Mini App Development Server`);
10
11
  logger.info(`Đang chạy ứng dụng: ${manifest.name} (${manifest.appId})`);
11
12
  let simServer = null;
12
13
  if (!options.noSimulator) {
13
14
  try {
14
- simServer = startSimulatorServer(parseInt(simulatorPort, 10));
15
+ simServer = startSimulatorServer(parseInt(simulatorPort, 10), host);
15
16
  }
16
17
  catch (e) {
17
18
  logger.warn(`Không thể khởi chạy Simulator trên cổng ${simulatorPort}`);
18
19
  }
19
20
  }
20
21
  logger.info(`Vite Server: http://localhost:${port}`);
21
- logger.info(`Browser Simulator: http://localhost:${simulatorPort}/?url=http://localhost:${port}`);
22
+ logger.info(`Browser Simulator: http://${host}:${simulatorPort}/?url=http://localhost:${port}`);
22
23
  const child = spawn('npx', ['vite', '--port', port], {
23
24
  stdio: 'inherit',
24
25
  shell: true,
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAS1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA6B,EAAE;IAC7D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;IAEtD,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAExE,IAAI,SAAS,GAAQ,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,uCAAuC,aAAa,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAElG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QACnD,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAU1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA6B,EAAE;IAC7D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IAEzC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAExE,IAAI,SAAS,GAAQ,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,IAAI,aAAa,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAEhG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QACnD,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export interface SimulatorCommandOptions {
2
2
  port?: string;
3
+ host?: string;
3
4
  appUrl?: string;
4
5
  }
5
6
  export declare function runSimulator(options?: SimulatorCommandOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/simulator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAavF"}
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/simulator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvF"}
@@ -2,10 +2,11 @@ import { startSimulatorServer } from '../utils/server.js';
2
2
  import { logger } from '../utils/logger.js';
3
3
  export async function runSimulator(options = {}) {
4
4
  const port = parseInt(options.port || '5175', 10);
5
+ const host = options.host || '127.0.0.1';
5
6
  const appUrl = options.appUrl || 'http://localhost:3000';
6
7
  logger.title(`Khởi chạy SuperApp Browser Simulator & DevTools`);
7
- startSimulatorServer(port);
8
- logger.info(`Để kết nối với Mini App, mở: http://localhost:${port}/?url=${encodeURIComponent(appUrl)}`);
8
+ startSimulatorServer(port, host);
9
+ logger.info(`Để kết nối với Mini App, mở: http://${host}:${port}/?url=${encodeURIComponent(appUrl)}`);
9
10
  process.on('SIGINT', () => {
10
11
  logger.info('Đang dừng Browser Simulator...');
11
12
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../../src/cli/commands/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAmC,EAAE;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,uBAAuB,CAAC;IAEzD,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAChE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,iDAAiD,IAAI,SAAS,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExG,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../../src/cli/commands/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAmC,EAAE;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,uBAAuB,CAAC;IAEzD,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAChE,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,uCAAuC,IAAI,IAAI,IAAI,SAAS,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtG,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -2,8 +2,11 @@ export interface UploadCommandOptions {
2
2
  registry?: string;
3
3
  tenantId?: string;
4
4
  actorId?: string;
5
+ token?: string;
6
+ secret?: string;
5
7
  submit?: boolean;
6
8
  notes?: string;
9
+ cwd?: string;
7
10
  }
8
11
  export declare function uploadProject(options?: UploadCommandOptions): Promise<void>;
9
12
  //# sourceMappingURL=upload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHrF"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmIrF"}
@@ -2,13 +2,36 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { loadManifest } from '../utils/config.js';
4
4
  import { logger } from '../utils/logger.js';
5
+ import { buildRequestHeaders, resolveCredentials } from '../utils/auth.js';
5
6
  export async function uploadProject(options = {}) {
6
- const manifest = loadManifest();
7
+ const cwd = options.cwd || process.cwd();
8
+ const manifest = loadManifest(cwd);
7
9
  const registryUrl = options.registry || process.env.SUPERAPP_REGISTRY_URL || 'http://localhost:3000';
8
- const tenantId = options.tenantId || 'tenant_001';
9
- const actorId = options.actorId || 'dev_partner_001';
10
+ const credentials = resolveCredentials(options);
10
11
  logger.title(`Tải lên SuperApp Dynamic Registry: ${manifest.name}`);
11
- const distPath = path.resolve(process.cwd(), 'dist');
12
+ // Validate authentication requirement
13
+ const isLocalRegistry = registryUrl.startsWith('http://localhost') ||
14
+ registryUrl.startsWith('http://127.0.0.1') ||
15
+ registryUrl.startsWith('http://[::1]');
16
+ if (!credentials.token && !credentials.secret) {
17
+ if (!isLocalRegistry) {
18
+ const authError = 'Lỗi bảo mật: Tải lên server remote yêu cầu xác thực. Vui lòng cung cấp Access Token qua cờ --token <token> hoặc biến môi trường SUPERAPP_API_TOKEN.';
19
+ logger.error(authError);
20
+ throw new Error(authError);
21
+ }
22
+ else {
23
+ logger.warn('⚠️ Đang tải lên registry local không có token xác thực. Trong môi trường production, backend sẽ từ chối x-tenant-id / x-user-id không có Bearer token hợp lệ.');
24
+ }
25
+ }
26
+ else {
27
+ const authMechanisms = [];
28
+ if (credentials.token)
29
+ authMechanisms.push('Bearer Token (OAuth/JWT)');
30
+ if (credentials.secret)
31
+ authMechanisms.push('HMAC-SHA256 Payload Signature');
32
+ logger.success(`Đã kích hoạt cơ chế xác thực: ${authMechanisms.join(' + ')}`);
33
+ }
34
+ const distPath = path.resolve(cwd, 'dist');
12
35
  const metaPath = path.join(distPath, 'bundle-meta.json');
13
36
  if (!fs.existsSync(metaPath)) {
14
37
  logger.warn('Chưa tìm thấy bundle đã build. Đang tự động chạy build trước...');
@@ -17,7 +40,7 @@ export async function uploadProject(options = {}) {
17
40
  }
18
41
  const bundleMeta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
19
42
  logger.step(1, 3, `Đang kết nối đến Dynamic Registry Backend: ${registryUrl}`);
20
- logger.info(`Tenant ID: ${tenantId}`);
43
+ logger.info(`Tenant ID: ${credentials.tenantId}`);
21
44
  logger.info(`App ID: ${manifest.appId} (v${manifest.version})`);
22
45
  // Payload aligning with backend RegistryService
23
46
  const updatePayload = {
@@ -38,28 +61,25 @@ export async function uploadProject(options = {}) {
38
61
  try {
39
62
  // 1. Check or update draft
40
63
  logger.step(2, 3, `Cập nhật bản thảo (Draft) lên Registry...`);
64
+ const updateHeaders = buildRequestHeaders(credentials, updatePayload);
41
65
  const updateRes = await fetch(`${registryUrl}/api/v1/registry/apps/${manifest.appId}`, {
42
66
  method: 'PUT',
43
- headers: {
44
- 'Content-Type': 'application/json',
45
- 'x-tenant-id': tenantId,
46
- },
67
+ headers: updateHeaders,
47
68
  body: JSON.stringify(updatePayload),
48
69
  });
49
70
  if (!updateRes.ok) {
50
71
  // If 404, create new draft
51
72
  if (updateRes.status === 404) {
52
73
  logger.info(`Mini App chưa tồn tại. Đang tạo mới bản ghi ứng dụng...`);
74
+ const createPayload = {
75
+ appId: manifest.appId,
76
+ ...updatePayload,
77
+ };
78
+ const createHeaders = buildRequestHeaders(credentials, createPayload);
53
79
  const createRes = await fetch(`${registryUrl}/api/v1/registry/apps`, {
54
80
  method: 'POST',
55
- headers: {
56
- 'Content-Type': 'application/json',
57
- 'x-tenant-id': tenantId,
58
- },
59
- body: JSON.stringify({
60
- appId: manifest.appId,
61
- ...updatePayload,
62
- }),
81
+ headers: createHeaders,
82
+ body: JSON.stringify(createPayload),
63
83
  });
64
84
  if (!createRes.ok) {
65
85
  const errText = await createRes.text();
@@ -75,17 +95,15 @@ export async function uploadProject(options = {}) {
75
95
  // 2. Submit for review if requested
76
96
  if (options.submit) {
77
97
  logger.step(3, 3, `Gửi yêu cầu xét duyệt phiên bản ${manifest.version}...`);
98
+ const submitPayload = {
99
+ version: manifest.version,
100
+ changelog: options.notes || `Phát hành phiên bản ${manifest.version} từ Mini App CLI`,
101
+ };
102
+ const submitHeaders = buildRequestHeaders(credentials, submitPayload);
78
103
  const submitRes = await fetch(`${registryUrl}/api/v1/registry/apps/${manifest.appId}/submit`, {
79
104
  method: 'POST',
80
- headers: {
81
- 'Content-Type': 'application/json',
82
- 'x-tenant-id': tenantId,
83
- 'x-user-id': actorId,
84
- },
85
- body: JSON.stringify({
86
- version: manifest.version,
87
- changelog: options.notes || `Phát hành phiên bản ${manifest.version} từ Mini App CLI`,
88
- }),
105
+ headers: submitHeaders,
106
+ body: JSON.stringify(submitPayload),
89
107
  });
90
108
  if (!submitRes.ok) {
91
109
  const errText = await submitRes.text();
@@ -101,7 +119,7 @@ export async function uploadProject(options = {}) {
101
119
  }
102
120
  catch (err) {
103
121
  logger.error('Lỗi khi tải lên SuperApp Registry:', err.message);
104
- process.exit(1);
122
+ throw err;
105
123
  }
106
124
  }
107
125
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"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"}
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.7');
12
+ .version('1.0.8');
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')
@@ -22,6 +22,7 @@ program
22
22
  .description('Khởi chạy Development Server và mở Browser Simulator')
23
23
  .option('-p, --port <port>', 'Cổng Vite dev server', '3000')
24
24
  .option('-s, --simulator-port <port>', 'Cổng Browser Simulator', '5175')
25
+ .option('-H, --host <host>', 'Host interface để bind Simulator (mặc định: 127.0.0.1 loopback)', '127.0.0.1')
25
26
  .option('--open', 'Tự động mở trình duyệt')
26
27
  .option('--no-simulator', 'Không khởi chạy Browser Simulator kèm theo')
27
28
  .action((options) => {
@@ -31,6 +32,7 @@ program
31
32
  .command('simulator')
32
33
  .description('Khởi chạy Browser Simulator & DevTools độc lập')
33
34
  .option('-p, --port <port>', 'Cổng Browser Simulator', '5175')
35
+ .option('-H, --host <host>', 'Host interface để bind Simulator (mặc định: 127.0.0.1 loopback)', '127.0.0.1')
34
36
  .option('-u, --app-url <url>', 'Địa chỉ Mini App đang chạy để kết nối', 'http://localhost:3000')
35
37
  .action((options) => {
36
38
  runSimulator(options);
@@ -46,6 +48,8 @@ program
46
48
  .command('upload')
47
49
  .description('Tải lên bản nháp hoặc gửi xét duyệt Mini App lên Dynamic Registry Backend')
48
50
  .option('-r, --registry <url>', 'Địa chỉ backend registry API', 'http://localhost:3000')
51
+ .option('-k, --token <token>', 'Access Token hoặc Developer API Token (Bearer)')
52
+ .option('-s, --secret <secret>', 'Developer Secret Key dùng để ký điện tử (HMAC-SHA256)')
49
53
  .option('-t, --tenant-id <tenantId>', 'Mã định danh Tenant', 'tenant_001')
50
54
  .option('-a, --actor-id <actorId>', 'Mã người thực hiện tải lên', 'dev_partner_001')
51
55
  .option('--submit', 'Gửi trực tiếp vào hàng đợi xét duyệt (SUBMITTED)')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,EAAE,YAAY,CAAC;KACvF,MAAM,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE;IAC/B,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,CAAC;KAC3D,MAAM,CAAC,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,iEAAiE,EAAE,WAAW,CAAC;KAC3G,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;KACtE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,SAAS,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,iEAAiE,EAAE,WAAW,CAAC;KAC3G,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,EAAE,uBAAuB,CAAC;KAC/F,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,CAAC;KACnE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,uBAAuB,CAAC;KACvF,MAAM,CAAC,qBAAqB,EAAE,gDAAgD,CAAC;KAC/E,MAAM,CAAC,uBAAuB,EAAE,uDAAuD,CAAC;KACxF,MAAM,CAAC,4BAA4B,EAAE,qBAAqB,EAAE,YAAY,CAAC;KACzE,MAAM,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,iBAAiB,CAAC;KACnF,MAAM,CAAC,UAAU,EAAE,kDAAkD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,aAAa,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,GAAG,EAAE;IACX,SAAS,EAAE,CAAC;AACd,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface DeveloperCredentials {
2
+ token?: string;
3
+ secret?: string;
4
+ tenantId?: string;
5
+ actorId?: string;
6
+ }
7
+ export declare function computeHmacSha256(secret: string, data: string): string;
8
+ /**
9
+ * Searches for locally stored developer credentials in standard CLI paths:
10
+ * 1. Current working directory: .superapprc, .superapp/credentials.json
11
+ * 2. User home directory: ~/.superapp/credentials.json, ~/.superapprc
12
+ */
13
+ export declare function loadStoredCredentials(cwd?: string): DeveloperCredentials;
14
+ /**
15
+ * Resolves developer credentials with priority:
16
+ * 1. CLI explicit options
17
+ * 2. Environment variables (SUPERAPP_API_TOKEN, SUPERAPP_API_SECRET, etc.)
18
+ * 3. Stored credentials file (~/.superapp/credentials.json)
19
+ * 4. Default fallback identifiers for local sandbox
20
+ */
21
+ export declare function resolveCredentials(cliOptions?: {
22
+ token?: string;
23
+ secret?: string;
24
+ tenantId?: string;
25
+ actorId?: string;
26
+ }): DeveloperCredentials;
27
+ /**
28
+ * Builds standard secure headers for registry HTTP requests:
29
+ * - Authorization: Bearer <token> (JWT / OAuth token)
30
+ * - x-signature & x-signature-timestamp: HMAC-SHA256 signature for payload integrity
31
+ * - Contextual x-tenant-id and x-user-id
32
+ */
33
+ export declare function buildRequestHeaders(credentials: DeveloperCredentials, payload?: any, additionalHeaders?: Record<string, string>): Record<string, string>;
34
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAsB,GAAG,oBAAoB,CA0BvF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,GAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,oBAAoB,CA6B5B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,oBAAoB,EACjC,OAAO,CAAC,EAAE,GAAG,EACb,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BxB"}
@@ -0,0 +1,99 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ export function computeHmacSha256(secret, data) {
6
+ return crypto.createHmac('sha256', secret).update(data).digest('hex');
7
+ }
8
+ /**
9
+ * Searches for locally stored developer credentials in standard CLI paths:
10
+ * 1. Current working directory: .superapprc, .superapp/credentials.json
11
+ * 2. User home directory: ~/.superapp/credentials.json, ~/.superapprc
12
+ */
13
+ export function loadStoredCredentials(cwd = process.cwd()) {
14
+ const candidates = [
15
+ path.join(cwd, '.superapprc'),
16
+ path.join(cwd, '.superapp', 'credentials.json'),
17
+ path.join(os.homedir(), '.superapp', 'credentials.json'),
18
+ path.join(os.homedir(), '.superapprc'),
19
+ ];
20
+ for (const filePath of candidates) {
21
+ if (fs.existsSync(filePath)) {
22
+ try {
23
+ const raw = fs.readFileSync(filePath, 'utf-8');
24
+ const parsed = JSON.parse(raw);
25
+ if (parsed && typeof parsed === 'object') {
26
+ return {
27
+ token: parsed.token || parsed.apiToken || parsed.accessToken,
28
+ secret: parsed.secret || parsed.apiSecret,
29
+ tenantId: parsed.tenantId,
30
+ actorId: parsed.actorId || parsed.userId,
31
+ };
32
+ }
33
+ }
34
+ catch (_) { }
35
+ }
36
+ }
37
+ return {};
38
+ }
39
+ /**
40
+ * Resolves developer credentials with priority:
41
+ * 1. CLI explicit options
42
+ * 2. Environment variables (SUPERAPP_API_TOKEN, SUPERAPP_API_SECRET, etc.)
43
+ * 3. Stored credentials file (~/.superapp/credentials.json)
44
+ * 4. Default fallback identifiers for local sandbox
45
+ */
46
+ export function resolveCredentials(cliOptions = {}) {
47
+ const fileCreds = loadStoredCredentials();
48
+ const token = cliOptions.token ||
49
+ process.env.SUPERAPP_API_TOKEN ||
50
+ process.env.SUPERAPP_DEVELOPER_TOKEN ||
51
+ process.env.SUPERAPP_AUTH_TOKEN ||
52
+ fileCreds.token;
53
+ const secret = cliOptions.secret ||
54
+ process.env.SUPERAPP_API_SECRET ||
55
+ fileCreds.secret;
56
+ const tenantId = cliOptions.tenantId ||
57
+ process.env.SUPERAPP_TENANT_ID ||
58
+ fileCreds.tenantId ||
59
+ 'tenant_001';
60
+ const actorId = cliOptions.actorId ||
61
+ process.env.SUPERAPP_ACTOR_ID ||
62
+ process.env.SUPERAPP_USER_ID ||
63
+ fileCreds.actorId ||
64
+ 'dev_partner_001';
65
+ return { token, secret, tenantId, actorId };
66
+ }
67
+ /**
68
+ * Builds standard secure headers for registry HTTP requests:
69
+ * - Authorization: Bearer <token> (JWT / OAuth token)
70
+ * - x-signature & x-signature-timestamp: HMAC-SHA256 signature for payload integrity
71
+ * - Contextual x-tenant-id and x-user-id
72
+ */
73
+ export function buildRequestHeaders(credentials, payload, additionalHeaders = {}) {
74
+ const headers = {
75
+ 'Content-Type': 'application/json',
76
+ ...additionalHeaders,
77
+ };
78
+ // 1. Bearer Token Authentication
79
+ if (credentials.token) {
80
+ headers['Authorization'] = `Bearer ${credentials.token}`;
81
+ }
82
+ // 2. Cryptographic signature (HMAC-SHA256)
83
+ if (credentials.secret) {
84
+ const timestamp = Date.now().toString();
85
+ const payloadStr = payload ? (typeof payload === 'string' ? payload : JSON.stringify(payload)) : '';
86
+ const signature = computeHmacSha256(credentials.secret, `${timestamp}.${payloadStr}`);
87
+ headers['x-signature-timestamp'] = timestamp;
88
+ headers['x-signature'] = `sha256=${signature}`;
89
+ }
90
+ // 3. Contextual identifiers
91
+ if (credentials.tenantId) {
92
+ headers['x-tenant-id'] = credentials.tenantId;
93
+ }
94
+ if (credentials.actorId) {
95
+ headers['x-user-id'] = credentials.actorId;
96
+ }
97
+ return headers;
98
+ }
99
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/utils/auth.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,17 @@
1
1
  import http from 'node:http';
2
- export declare function startSimulatorServer(port?: number): http.Server;
2
+ /**
3
+ * Validates whether the incoming Origin header is a trusted local development origin.
4
+ * Prevents arbitrary external websites from reading simulator assets via cross-origin requests.
5
+ */
6
+ export declare function isAllowedCorsOrigin(origin: string): boolean;
7
+ /**
8
+ * Validates whether a target Mini App URL is safe to be embedded in the Simulator iframe.
9
+ * Allows local development URLs (http://localhost, http://127.0.0.1) and HTTPS web apps.
10
+ * Strictly blocks dangerous schemes (javascript:, data:, file:, blob:) and embedded credentials.
11
+ */
12
+ export declare function isAllowedMiniAppUrl(rawUrl: string): boolean;
13
+ /**
14
+ * Starts the Browser Simulator HTTP server strictly bound to localhost (127.0.0.1) by default.
15
+ */
16
+ export declare function startSimulatorServer(port?: number, host?: string): http.Server;
3
17
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAkB7B,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI,CAAC,MAAM,CA2ErE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAkB7B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAa3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA0B3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAa,EAAE,IAAI,GAAE,MAAoB,GAAG,IAAI,CAAC,MAAM,CAuFjG"}