signal-bridge 1.0.14 → 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 +53 -6
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +53 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53 -6
- 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
|
@@ -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
|
|
|
@@ -6742,9 +6741,6 @@ var _signalBridgeLib = (() => {
|
|
|
6742
6741
|
if (cryptoKey) {
|
|
6743
6742
|
finalPayload = encrypt(payload, cryptoKey);
|
|
6744
6743
|
}
|
|
6745
|
-
if (!txn) {
|
|
6746
|
-
finalPayload = encrypt(payload, resolvedTxn);
|
|
6747
|
-
}
|
|
6748
6744
|
const message = {
|
|
6749
6745
|
app_id: appId,
|
|
6750
6746
|
type,
|
|
@@ -6760,6 +6756,24 @@ var _signalBridgeLib = (() => {
|
|
|
6760
6756
|
}
|
|
6761
6757
|
return resolvedTxn;
|
|
6762
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 };
|
|
6776
|
+
}
|
|
6763
6777
|
function emitReadyOnce() {
|
|
6764
6778
|
if (isInitialized) return;
|
|
6765
6779
|
isInitialized = true;
|
|
@@ -6777,8 +6791,41 @@ var _signalBridgeLib = (() => {
|
|
|
6777
6791
|
listen(handler) {
|
|
6778
6792
|
listeners.push(handler);
|
|
6779
6793
|
},
|
|
6780
|
-
|
|
6781
|
-
|
|
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);
|
|
6782
6829
|
},
|
|
6783
6830
|
destroy() {
|
|
6784
6831
|
window.removeEventListener("message", messageHandler);
|