signal-bridge 1.0.12 → 1.0.15
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 +5 -1
- package/dist/index.d.mts +106 -10
- package/dist/index.d.ts +106 -10
- package/dist/index.global.js +71 -19
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +56 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +56 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ const bridge = createBridge("my-app-id", {
|
|
|
46
46
|
allowedHostOrigins: ["https://host.com"],
|
|
47
47
|
cryptoKey: "SECRET_KEY", // optional
|
|
48
48
|
debug: true
|
|
49
|
-
})
|
|
49
|
+
})
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
> Hanya akan dibuat **1x (singleton)**. Jika dipanggil ulang, akan reuse instance lama.
|
|
@@ -96,6 +96,10 @@ Jika ingin akses dari mana saja:
|
|
|
96
96
|
import { signalBridge } from "signal-bridge";
|
|
97
97
|
|
|
98
98
|
signalBridge().emit("ping", {});
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
Auto Encrypted Data:
|
|
102
|
+
signalBridge().emitEncrypted("event-name", {id:123});
|
|
99
103
|
```
|
|
100
104
|
|
|
101
105
|
⚠️ Pastikan sudah `createBridge().init()` sebelumnya.
|
package/dist/index.d.mts
CHANGED
|
@@ -21,27 +21,123 @@ interface BridgeOptions {
|
|
|
21
21
|
declare function createBridge(appId: string, options: BridgeOptions): {
|
|
22
22
|
init(): void;
|
|
23
23
|
listen(handler: Listener): void;
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
26
|
+
*
|
|
27
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
28
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
29
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
30
|
+
*
|
|
31
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
32
|
+
* @param payload Data yang ingin dikirim
|
|
33
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
34
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
38
|
+
*/
|
|
39
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
42
|
+
*
|
|
43
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
44
|
+
* payload di-encrypt dengan key tersebut
|
|
45
|
+
*
|
|
46
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
47
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
48
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
49
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
emitEncrypted(event: string, payload: any): {
|
|
56
|
+
txn: string;
|
|
57
|
+
key: string;
|
|
58
|
+
};
|
|
25
59
|
destroy(): void;
|
|
26
60
|
};
|
|
27
61
|
declare function resetBridge(): void;
|
|
28
62
|
declare function signalBridge(): {
|
|
29
63
|
init(): void;
|
|
30
64
|
listen(handler: Listener): void;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
67
|
+
*
|
|
68
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
69
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
70
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
71
|
+
*
|
|
72
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
73
|
+
* @param payload Data yang ingin dikirim
|
|
74
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
75
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
79
|
+
*/
|
|
80
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
83
|
+
*
|
|
84
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
85
|
+
* payload di-encrypt dengan key tersebut
|
|
86
|
+
*
|
|
87
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
88
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
89
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
90
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
emitEncrypted(event: string, payload: any): {
|
|
97
|
+
txn: string;
|
|
98
|
+
key: string;
|
|
99
|
+
};
|
|
38
100
|
destroy(): void;
|
|
39
101
|
};
|
|
40
102
|
declare function initBridge(appId: string, options: BridgeOptions): {
|
|
41
103
|
init(): void;
|
|
42
104
|
listen(handler: Listener): void;
|
|
43
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
107
|
+
*
|
|
108
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
109
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
110
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
111
|
+
*
|
|
112
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
113
|
+
* @param payload Data yang ingin dikirim
|
|
114
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
115
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
119
|
+
*/
|
|
120
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
121
|
+
/**
|
|
122
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
123
|
+
*
|
|
124
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
125
|
+
* payload di-encrypt dengan key tersebut
|
|
126
|
+
*
|
|
127
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
128
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
129
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
130
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
emitEncrypted(event: string, payload: any): {
|
|
137
|
+
txn: string;
|
|
138
|
+
key: string;
|
|
139
|
+
};
|
|
44
140
|
destroy(): void;
|
|
45
141
|
};
|
|
46
142
|
|
|
47
|
-
export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge,
|
|
143
|
+
export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, signalBridge };
|
package/dist/index.d.ts
CHANGED
|
@@ -21,27 +21,123 @@ interface BridgeOptions {
|
|
|
21
21
|
declare function createBridge(appId: string, options: BridgeOptions): {
|
|
22
22
|
init(): void;
|
|
23
23
|
listen(handler: Listener): void;
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
26
|
+
*
|
|
27
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
28
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
29
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
30
|
+
*
|
|
31
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
32
|
+
* @param payload Data yang ingin dikirim
|
|
33
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
34
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
38
|
+
*/
|
|
39
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
42
|
+
*
|
|
43
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
44
|
+
* payload di-encrypt dengan key tersebut
|
|
45
|
+
*
|
|
46
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
47
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
48
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
49
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
emitEncrypted(event: string, payload: any): {
|
|
56
|
+
txn: string;
|
|
57
|
+
key: string;
|
|
58
|
+
};
|
|
25
59
|
destroy(): void;
|
|
26
60
|
};
|
|
27
61
|
declare function resetBridge(): void;
|
|
28
62
|
declare function signalBridge(): {
|
|
29
63
|
init(): void;
|
|
30
64
|
listen(handler: Listener): void;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
67
|
+
*
|
|
68
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
69
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
70
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
71
|
+
*
|
|
72
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
73
|
+
* @param payload Data yang ingin dikirim
|
|
74
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
75
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
79
|
+
*/
|
|
80
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
83
|
+
*
|
|
84
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
85
|
+
* payload di-encrypt dengan key tersebut
|
|
86
|
+
*
|
|
87
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
88
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
89
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
90
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
emitEncrypted(event: string, payload: any): {
|
|
97
|
+
txn: string;
|
|
98
|
+
key: string;
|
|
99
|
+
};
|
|
38
100
|
destroy(): void;
|
|
39
101
|
};
|
|
40
102
|
declare function initBridge(appId: string, options: BridgeOptions): {
|
|
41
103
|
init(): void;
|
|
42
104
|
listen(handler: Listener): void;
|
|
43
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
107
|
+
*
|
|
108
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
109
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
110
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
111
|
+
*
|
|
112
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
113
|
+
* @param payload Data yang ingin dikirim
|
|
114
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
115
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
119
|
+
*/
|
|
120
|
+
emit(event: string, payload: any, txn?: string): string;
|
|
121
|
+
/**
|
|
122
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
123
|
+
*
|
|
124
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
125
|
+
* payload di-encrypt dengan key tersebut
|
|
126
|
+
*
|
|
127
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
128
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
129
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
130
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
emitEncrypted(event: string, payload: any): {
|
|
137
|
+
txn: string;
|
|
138
|
+
key: string;
|
|
139
|
+
};
|
|
44
140
|
destroy(): void;
|
|
45
141
|
};
|
|
46
142
|
|
|
47
|
-
export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge,
|
|
143
|
+
export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, signalBridge };
|
package/dist/index.global.js
CHANGED
|
@@ -51,39 +51,39 @@ var _signalBridgeLib = (() => {
|
|
|
51
51
|
}
|
|
52
52
|
})(exports, function() {
|
|
53
53
|
var CryptoJS2 = CryptoJS2 || (function(Math2, undefined2) {
|
|
54
|
-
var
|
|
54
|
+
var crypto2;
|
|
55
55
|
if (typeof window !== "undefined" && window.crypto) {
|
|
56
|
-
|
|
56
|
+
crypto2 = window.crypto;
|
|
57
57
|
}
|
|
58
58
|
if (typeof self !== "undefined" && self.crypto) {
|
|
59
|
-
|
|
59
|
+
crypto2 = self.crypto;
|
|
60
60
|
}
|
|
61
61
|
if (typeof globalThis !== "undefined" && globalThis.crypto) {
|
|
62
|
-
|
|
62
|
+
crypto2 = globalThis.crypto;
|
|
63
63
|
}
|
|
64
|
-
if (!
|
|
65
|
-
|
|
64
|
+
if (!crypto2 && typeof window !== "undefined" && window.msCrypto) {
|
|
65
|
+
crypto2 = window.msCrypto;
|
|
66
66
|
}
|
|
67
|
-
if (!
|
|
68
|
-
|
|
67
|
+
if (!crypto2 && typeof global !== "undefined" && global.crypto) {
|
|
68
|
+
crypto2 = global.crypto;
|
|
69
69
|
}
|
|
70
|
-
if (!
|
|
70
|
+
if (!crypto2 && typeof __require === "function") {
|
|
71
71
|
try {
|
|
72
|
-
|
|
72
|
+
crypto2 = __require("crypto");
|
|
73
73
|
} catch (err) {
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
var cryptoSecureRandomInt = function() {
|
|
77
|
-
if (
|
|
78
|
-
if (typeof
|
|
77
|
+
if (crypto2) {
|
|
78
|
+
if (typeof crypto2.getRandomValues === "function") {
|
|
79
79
|
try {
|
|
80
|
-
return
|
|
80
|
+
return crypto2.getRandomValues(new Uint32Array(1))[0];
|
|
81
81
|
} catch (err) {
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
if (typeof
|
|
84
|
+
if (typeof crypto2.randomBytes === "function") {
|
|
85
85
|
try {
|
|
86
|
-
return
|
|
86
|
+
return crypto2.randomBytes(4).readInt32LE();
|
|
87
87
|
} catch (err) {
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -6635,7 +6635,6 @@ var _signalBridgeLib = (() => {
|
|
|
6635
6635
|
generateKey: () => generateKey,
|
|
6636
6636
|
initBridge: () => initBridge,
|
|
6637
6637
|
resetBridge: () => resetBridge,
|
|
6638
|
-
setupBridge: () => setupBridge,
|
|
6639
6638
|
signalBridge: () => signalBridge
|
|
6640
6639
|
});
|
|
6641
6640
|
|
|
@@ -6738,6 +6737,7 @@ var _signalBridgeLib = (() => {
|
|
|
6738
6737
|
window.addEventListener("message", messageHandler);
|
|
6739
6738
|
function emitToHost(type, payload, txn) {
|
|
6740
6739
|
let finalPayload = payload;
|
|
6740
|
+
const resolvedTxn = txn || crypto.randomUUID();
|
|
6741
6741
|
if (cryptoKey) {
|
|
6742
6742
|
finalPayload = encrypt(payload, cryptoKey);
|
|
6743
6743
|
}
|
|
@@ -6745,7 +6745,7 @@ var _signalBridgeLib = (() => {
|
|
|
6745
6745
|
app_id: appId,
|
|
6746
6746
|
type,
|
|
6747
6747
|
payload: finalPayload,
|
|
6748
|
-
txn:
|
|
6748
|
+
txn: resolvedTxn,
|
|
6749
6749
|
__origin: window.location.origin,
|
|
6750
6750
|
__source: "remote"
|
|
6751
6751
|
};
|
|
@@ -6754,6 +6754,25 @@ var _signalBridgeLib = (() => {
|
|
|
6754
6754
|
window.parent.postMessage(message, origin);
|
|
6755
6755
|
});
|
|
6756
6756
|
}
|
|
6757
|
+
return resolvedTxn;
|
|
6758
|
+
}
|
|
6759
|
+
function emitToHostEncrypted(type, payload) {
|
|
6760
|
+
const key = generateKey();
|
|
6761
|
+
const finalPayload = encrypt(payload, key);
|
|
6762
|
+
const message = {
|
|
6763
|
+
app_id: appId,
|
|
6764
|
+
type,
|
|
6765
|
+
payload: finalPayload,
|
|
6766
|
+
txn: key,
|
|
6767
|
+
__origin: window.location.origin,
|
|
6768
|
+
__source: "remote"
|
|
6769
|
+
};
|
|
6770
|
+
if (window.parent && window.parent !== window) {
|
|
6771
|
+
allowedHostOrigins.forEach((origin) => {
|
|
6772
|
+
window.parent.postMessage(message, origin);
|
|
6773
|
+
});
|
|
6774
|
+
}
|
|
6775
|
+
return { txn: key, key };
|
|
6757
6776
|
}
|
|
6758
6777
|
function emitReadyOnce() {
|
|
6759
6778
|
if (isInitialized) return;
|
|
@@ -6772,8 +6791,41 @@ var _signalBridgeLib = (() => {
|
|
|
6772
6791
|
listen(handler) {
|
|
6773
6792
|
listeners.push(handler);
|
|
6774
6793
|
},
|
|
6775
|
-
|
|
6776
|
-
|
|
6794
|
+
/**
|
|
6795
|
+
* Kirim pesan ke host tanpa enkripsi otomatis.
|
|
6796
|
+
*
|
|
6797
|
+
* Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
|
|
6798
|
+
* atau jika payload memang tidak perlu dienkripsi.
|
|
6799
|
+
* Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
|
|
6800
|
+
*
|
|
6801
|
+
* @param event Nama event, contoh: `"ping"`, `"user:logout"`
|
|
6802
|
+
* @param payload Data yang ingin dikirim
|
|
6803
|
+
* @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
|
|
6804
|
+
* @returns `txn` yang digunakan — berguna untuk tracking response dari host.
|
|
6805
|
+
*
|
|
6806
|
+
* @example
|
|
6807
|
+
* const txn = signalBridge.emit("ping", { ts: Date.now() });
|
|
6808
|
+
*/
|
|
6809
|
+
emit(event, payload, txn) {
|
|
6810
|
+
return emitToHost(event, payload, txn);
|
|
6811
|
+
},
|
|
6812
|
+
/**
|
|
6813
|
+
* Kirim pesan ke host dengan enkripsi otomatis.
|
|
6814
|
+
*
|
|
6815
|
+
* Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
|
|
6816
|
+
* payload di-encrypt dengan key tersebut
|
|
6817
|
+
*
|
|
6818
|
+
* @param event Nama event, contoh: `"user:login"`, `"cart:update"`
|
|
6819
|
+
* @param payload Data apapun (object, string, dll) yang ingin dikirim
|
|
6820
|
+
* @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
|
|
6821
|
+
* Simpan jika perlu referensi untuk matching response dari host.
|
|
6822
|
+
*
|
|
6823
|
+
* @example
|
|
6824
|
+
* const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
|
|
6825
|
+
*
|
|
6826
|
+
*/
|
|
6827
|
+
emitEncrypted(event, payload) {
|
|
6828
|
+
return emitToHostEncrypted(event, payload);
|
|
6777
6829
|
},
|
|
6778
6830
|
destroy() {
|
|
6779
6831
|
window.removeEventListener("message", messageHandler);
|