@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.
- package/README.md +9 -0
- package/bin/simulator.js +36 -6
- package/dist/cli/commands/dev.d.ts +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +3 -2
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/simulator.d.ts +1 -0
- package/dist/cli/commands/simulator.d.ts.map +1 -1
- package/dist/cli/commands/simulator.js +3 -2
- package/dist/cli/commands/simulator.js.map +1 -1
- package/dist/cli/commands/upload.d.ts +3 -0
- package/dist/cli/commands/upload.d.ts.map +1 -1
- package/dist/cli/commands/upload.js +45 -27
- package/dist/cli/commands/upload.js.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/auth.d.ts +34 -0
- package/dist/cli/utils/auth.d.ts.map +1 -0
- package/dist/cli/utils/auth.js +99 -0
- package/dist/cli/utils/auth.js.map +1 -0
- package/dist/cli/utils/server.d.ts +15 -1
- package/dist/cli/utils/server.d.ts.map +1 -1
- package/dist/cli/utils/server.js +71 -7
- package/dist/cli/utils/server.js.map +1 -1
- package/dist/core/client.d.ts +148 -16
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +113 -53
- package/dist/core/client.js.map +1 -1
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/modules/auth.d.ts +64 -4
- package/dist/core/modules/auth.d.ts.map +1 -1
- package/dist/core/modules/auth.js +205 -2
- package/dist/core/modules/auth.js.map +1 -1
- package/dist/core/modules/debug.d.ts +14 -0
- package/dist/core/modules/debug.d.ts.map +1 -0
- package/dist/core/modules/debug.js +19 -0
- package/dist/core/modules/debug.js.map +1 -0
- package/dist/core/modules/device.d.ts +4 -1
- package/dist/core/modules/device.d.ts.map +1 -1
- package/dist/core/modules/device.js +4 -1
- package/dist/core/modules/device.js.map +1 -1
- package/dist/core/modules/file.d.ts +38 -0
- package/dist/core/modules/file.d.ts.map +1 -0
- package/dist/core/modules/file.js +25 -0
- package/dist/core/modules/file.js.map +1 -0
- package/dist/core/modules/lifecycle.d.ts +23 -0
- package/dist/core/modules/lifecycle.d.ts.map +1 -1
- package/dist/core/modules/lifecycle.js +30 -0
- package/dist/core/modules/lifecycle.js.map +1 -1
- package/dist/core/modules/media.d.ts +65 -0
- package/dist/core/modules/media.d.ts.map +1 -1
- package/dist/core/modules/media.js +36 -0
- package/dist/core/modules/media.js.map +1 -1
- package/dist/core/modules/navigation.d.ts +3 -3
- package/dist/core/modules/navigation.d.ts.map +1 -1
- package/dist/core/modules/navigation.js +3 -3
- package/dist/core/modules/navigation.js.map +1 -1
- package/dist/core/modules/payment.d.ts +39 -0
- package/dist/core/modules/payment.d.ts.map +1 -0
- package/dist/core/modules/payment.js +25 -0
- package/dist/core/modules/payment.js.map +1 -0
- package/dist/core/modules/permissions.d.ts +28 -0
- package/dist/core/modules/permissions.d.ts.map +1 -0
- package/dist/core/modules/permissions.js +31 -0
- package/dist/core/modules/permissions.js.map +1 -0
- package/dist/core/modules/phone.d.ts +22 -0
- package/dist/core/modules/phone.d.ts.map +1 -0
- package/dist/core/modules/phone.js +31 -0
- package/dist/core/modules/phone.js.map +1 -0
- package/dist/core/modules/storage.d.ts +88 -4
- package/dist/core/modules/storage.d.ts.map +1 -1
- package/dist/core/modules/storage.js +78 -13
- package/dist/core/modules/storage.js.map +1 -1
- package/dist/core/modules/system.d.ts +67 -0
- package/dist/core/modules/system.d.ts.map +1 -0
- package/dist/core/modules/system.js +55 -0
- package/dist/core/modules/system.js.map +1 -0
- package/dist/core/modules/ui.d.ts +40 -9
- package/dist/core/modules/ui.d.ts.map +1 -1
- package/dist/core/modules/ui.js +45 -11
- package/dist/core/modules/ui.js.map +1 -1
- package/dist/core/modules/user.d.ts +18 -0
- package/dist/core/modules/user.d.ts.map +1 -0
- package/dist/core/modules/user.js +19 -0
- package/dist/core/modules/user.js.map +1 -0
- package/dist/core/modules/utility.d.ts +23 -0
- package/dist/core/modules/utility.d.ts.map +1 -0
- package/dist/core/modules/utility.js +19 -0
- package/dist/core/modules/utility.js.map +1 -0
- package/dist/core/types/index.d.ts +66 -8
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mock/index.d.ts +0 -6
- package/dist/mock/index.d.ts.map +1 -1
- package/dist/mock/index.js +0 -6
- package/dist/mock/index.js.map +1 -1
- package/dist/mock/mock-engine.d.ts +6 -25
- package/dist/mock/mock-engine.d.ts.map +1 -1
- package/dist/mock/mock-engine.js +8 -325
- package/dist/mock/mock-engine.js.map +1 -1
- package/dist/mock/presets.d.ts +2 -2
- package/dist/mock/presets.d.ts.map +1 -1
- package/dist/mock/presets.js +2 -42
- package/dist/mock/presets.js.map +1 -1
- package/dist/mock/store.d.ts +2 -33
- package/dist/mock/store.d.ts.map +1 -1
- package/dist/mock/store.js +2 -130
- package/dist/mock/store.js.map +1 -1
- package/dist/transport/adaptive-transport.d.ts +2 -0
- package/dist/transport/adaptive-transport.d.ts.map +1 -1
- package/dist/transport/adaptive-transport.js +11 -3
- package/dist/transport/adaptive-transport.js.map +1 -1
- package/dist/transport/bridge-hub.d.ts +46 -0
- package/dist/transport/bridge-hub.d.ts.map +1 -0
- package/dist/transport/bridge-hub.js +268 -0
- package/dist/transport/bridge-hub.js.map +1 -0
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +1 -0
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/mock-transport.d.ts +2 -0
- package/dist/transport/mock-transport.d.ts.map +1 -1
- package/dist/transport/mock-transport.js +6 -0
- package/dist/transport/mock-transport.js.map +1 -1
- package/dist/transport/native-transport.d.ts +6 -5
- package/dist/transport/native-transport.d.ts.map +1 -1
- package/dist/transport/native-transport.js +46 -120
- package/dist/transport/native-transport.js.map +1 -1
- package/dist/transport/postmessage-transport.d.ts +8 -0
- package/dist/transport/postmessage-transport.d.ts.map +1 -1
- package/dist/transport/postmessage-transport.js +213 -12
- package/dist/transport/postmessage-transport.js.map +1 -1
- package/dist/transport/timeout-policy.d.ts.map +1 -1
- package/dist/transport/timeout-policy.js +1 -0
- package/dist/transport/timeout-policy.js.map +1 -1
- package/dist/transport/transport.interface.d.ts +2 -0
- package/dist/transport/transport.interface.d.ts.map +1 -1
- package/dist/transport/types.d.ts +4 -1
- package/dist/transport/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/simulator-dist/assets/index-DkSKbR3O.js +120 -0
- package/simulator-dist/index.html +1 -1
- package/dist/mock/handlers/auth.handler.d.ts +0 -24
- package/dist/mock/handlers/auth.handler.d.ts.map +0 -1
- package/dist/mock/handlers/auth.handler.js +0 -106
- package/dist/mock/handlers/auth.handler.js.map +0 -1
- package/dist/mock/handlers/device.handler.d.ts +0 -16
- package/dist/mock/handlers/device.handler.d.ts.map +0 -1
- package/dist/mock/handlers/device.handler.js +0 -53
- package/dist/mock/handlers/device.handler.js.map +0 -1
- package/dist/mock/handlers/media.handler.d.ts +0 -9
- package/dist/mock/handlers/media.handler.d.ts.map +0 -1
- package/dist/mock/handlers/media.handler.js +0 -20
- package/dist/mock/handlers/media.handler.js.map +0 -1
- package/dist/mock/handlers/payment.handler.d.ts +0 -27
- package/dist/mock/handlers/payment.handler.d.ts.map +0 -1
- package/dist/mock/handlers/payment.handler.js +0 -62
- package/dist/mock/handlers/payment.handler.js.map +0 -1
- package/dist/mock/handlers/storage.handler.d.ts +0 -18
- package/dist/mock/handlers/storage.handler.d.ts.map +0 -1
- package/dist/mock/handlers/storage.handler.js +0 -40
- package/dist/mock/handlers/storage.handler.js.map +0 -1
- package/dist/mock/handlers/ui.handler.d.ts +0 -34
- package/dist/mock/handlers/ui.handler.d.ts.map +0 -1
- package/dist/mock/handlers/ui.handler.js +0 -59
- package/dist/mock/handlers/ui.handler.js.map +0 -1
- 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
|
-
|
|
44
|
-
|
|
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
|
|
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
|
|
94
|
-
console.log(`🔗 Open with target Mini App: \x1b[32mhttp
|
|
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 +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,
|
|
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"}
|
package/dist/cli/commands/dev.js
CHANGED
|
@@ -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
|
|
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;
|
|
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 +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,
|
|
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
|
|
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;
|
|
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":"
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
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.
|
|
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)')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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,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,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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
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,
|
|
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"}
|