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 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
- emit(type: string, payload: any, txn?: string): string;
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
- emit(type: string, payload: any, txn?: string): string;
32
- destroy(): void;
33
- };
34
- declare function setupBridge(appId: string, options: BridgeOptions): {
35
- init(): void;
36
- listen(handler: Listener): void;
37
- emit(type: string, payload: any, txn?: string): string;
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
- emit(type: string, payload: any, txn?: string): string;
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, setupBridge, signalBridge };
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
- emit(type: string, payload: any, txn?: string): string;
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
- emit(type: string, payload: any, txn?: string): string;
32
- destroy(): void;
33
- };
34
- declare function setupBridge(appId: string, options: BridgeOptions): {
35
- init(): void;
36
- listen(handler: Listener): void;
37
- emit(type: string, payload: any, txn?: string): string;
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
- emit(type: string, payload: any, txn?: string): string;
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, setupBridge, signalBridge };
143
+ export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, signalBridge };
@@ -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
- emit(type, payload, txn) {
6781
- return emitToHost(type, payload, txn);
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);