signal-bridge 1.0.14 → 1.0.16

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,165 @@ 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
+ };
59
+ track: {
60
+ open_file: (payload?: any) => {
61
+ txn: string;
62
+ key: string;
63
+ };
64
+ open_document: (payload?: any) => {
65
+ txn: string;
66
+ key: string;
67
+ };
68
+ view_document: (payload?: any) => {
69
+ txn: string;
70
+ key: string;
71
+ };
72
+ };
25
73
  destroy(): void;
26
74
  };
27
75
  declare function resetBridge(): void;
28
76
  declare function signalBridge(): {
29
77
  init(): void;
30
78
  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;
79
+ /**
80
+ * Kirim pesan ke host tanpa enkripsi otomatis.
81
+ *
82
+ * Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
83
+ * atau jika payload memang tidak perlu dienkripsi.
84
+ * Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
85
+ *
86
+ * @param event Nama event, contoh: `"ping"`, `"user:logout"`
87
+ * @param payload Data yang ingin dikirim
88
+ * @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
89
+ * @returns `txn` yang digunakan — berguna untuk tracking response dari host.
90
+ *
91
+ * @example
92
+ * const txn = signalBridge.emit("ping", { ts: Date.now() });
93
+ */
94
+ emit(event: string, payload: any, txn?: string): string;
95
+ /**
96
+ * Kirim pesan ke host dengan enkripsi otomatis.
97
+ *
98
+ * Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
99
+ * payload di-encrypt dengan key tersebut
100
+ *
101
+ * @param event Nama event, contoh: `"user:login"`, `"cart:update"`
102
+ * @param payload Data apapun (object, string, dll) yang ingin dikirim
103
+ * @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
104
+ * Simpan jika perlu referensi untuk matching response dari host.
105
+ *
106
+ * @example
107
+ * const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
108
+ *
109
+ */
110
+ emitEncrypted(event: string, payload: any): {
111
+ txn: string;
112
+ key: string;
113
+ };
114
+ track: {
115
+ open_file: (payload?: any) => {
116
+ txn: string;
117
+ key: string;
118
+ };
119
+ open_document: (payload?: any) => {
120
+ txn: string;
121
+ key: string;
122
+ };
123
+ view_document: (payload?: any) => {
124
+ txn: string;
125
+ key: string;
126
+ };
127
+ };
38
128
  destroy(): void;
39
129
  };
40
130
  declare function initBridge(appId: string, options: BridgeOptions): {
41
131
  init(): void;
42
132
  listen(handler: Listener): void;
43
- emit(type: string, payload: any, txn?: string): string;
133
+ /**
134
+ * Kirim pesan ke host tanpa enkripsi otomatis.
135
+ *
136
+ * Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
137
+ * atau jika payload memang tidak perlu dienkripsi.
138
+ * Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
139
+ *
140
+ * @param event Nama event, contoh: `"ping"`, `"user:logout"`
141
+ * @param payload Data yang ingin dikirim
142
+ * @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
143
+ * @returns `txn` yang digunakan — berguna untuk tracking response dari host.
144
+ *
145
+ * @example
146
+ * const txn = signalBridge.emit("ping", { ts: Date.now() });
147
+ */
148
+ emit(event: string, payload: any, txn?: string): string;
149
+ /**
150
+ * Kirim pesan ke host dengan enkripsi otomatis.
151
+ *
152
+ * Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
153
+ * payload di-encrypt dengan key tersebut
154
+ *
155
+ * @param event Nama event, contoh: `"user:login"`, `"cart:update"`
156
+ * @param payload Data apapun (object, string, dll) yang ingin dikirim
157
+ * @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
158
+ * Simpan jika perlu referensi untuk matching response dari host.
159
+ *
160
+ * @example
161
+ * const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
162
+ *
163
+ */
164
+ emitEncrypted(event: string, payload: any): {
165
+ txn: string;
166
+ key: string;
167
+ };
168
+ track: {
169
+ open_file: (payload?: any) => {
170
+ txn: string;
171
+ key: string;
172
+ };
173
+ open_document: (payload?: any) => {
174
+ txn: string;
175
+ key: string;
176
+ };
177
+ view_document: (payload?: any) => {
178
+ txn: string;
179
+ key: string;
180
+ };
181
+ };
44
182
  destroy(): void;
45
183
  };
46
184
 
47
- export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, setupBridge, signalBridge };
185
+ export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, signalBridge };
package/dist/index.d.ts CHANGED
@@ -21,27 +21,165 @@ 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
+ };
59
+ track: {
60
+ open_file: (payload?: any) => {
61
+ txn: string;
62
+ key: string;
63
+ };
64
+ open_document: (payload?: any) => {
65
+ txn: string;
66
+ key: string;
67
+ };
68
+ view_document: (payload?: any) => {
69
+ txn: string;
70
+ key: string;
71
+ };
72
+ };
25
73
  destroy(): void;
26
74
  };
27
75
  declare function resetBridge(): void;
28
76
  declare function signalBridge(): {
29
77
  init(): void;
30
78
  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;
79
+ /**
80
+ * Kirim pesan ke host tanpa enkripsi otomatis.
81
+ *
82
+ * Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
83
+ * atau jika payload memang tidak perlu dienkripsi.
84
+ * Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
85
+ *
86
+ * @param event Nama event, contoh: `"ping"`, `"user:logout"`
87
+ * @param payload Data yang ingin dikirim
88
+ * @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
89
+ * @returns `txn` yang digunakan — berguna untuk tracking response dari host.
90
+ *
91
+ * @example
92
+ * const txn = signalBridge.emit("ping", { ts: Date.now() });
93
+ */
94
+ emit(event: string, payload: any, txn?: string): string;
95
+ /**
96
+ * Kirim pesan ke host dengan enkripsi otomatis.
97
+ *
98
+ * Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
99
+ * payload di-encrypt dengan key tersebut
100
+ *
101
+ * @param event Nama event, contoh: `"user:login"`, `"cart:update"`
102
+ * @param payload Data apapun (object, string, dll) yang ingin dikirim
103
+ * @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
104
+ * Simpan jika perlu referensi untuk matching response dari host.
105
+ *
106
+ * @example
107
+ * const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
108
+ *
109
+ */
110
+ emitEncrypted(event: string, payload: any): {
111
+ txn: string;
112
+ key: string;
113
+ };
114
+ track: {
115
+ open_file: (payload?: any) => {
116
+ txn: string;
117
+ key: string;
118
+ };
119
+ open_document: (payload?: any) => {
120
+ txn: string;
121
+ key: string;
122
+ };
123
+ view_document: (payload?: any) => {
124
+ txn: string;
125
+ key: string;
126
+ };
127
+ };
38
128
  destroy(): void;
39
129
  };
40
130
  declare function initBridge(appId: string, options: BridgeOptions): {
41
131
  init(): void;
42
132
  listen(handler: Listener): void;
43
- emit(type: string, payload: any, txn?: string): string;
133
+ /**
134
+ * Kirim pesan ke host tanpa enkripsi otomatis.
135
+ *
136
+ * Gunakan ini jika host dan remote sudah punya `cryptoKey` yang sama (static key),
137
+ * atau jika payload memang tidak perlu dienkripsi.
138
+ * Untuk enkripsi otomatis per-pesan, gunakan `emitEncrypted`.
139
+ *
140
+ * @param event Nama event, contoh: `"ping"`, `"user:logout"`
141
+ * @param payload Data yang ingin dikirim
142
+ * @param txn (opsional) Transaction ID custom. Auto-generate UUID jika tidak diisi.
143
+ * @returns `txn` yang digunakan — berguna untuk tracking response dari host.
144
+ *
145
+ * @example
146
+ * const txn = signalBridge.emit("ping", { ts: Date.now() });
147
+ */
148
+ emit(event: string, payload: any, txn?: string): string;
149
+ /**
150
+ * Kirim pesan ke host dengan enkripsi otomatis.
151
+ *
152
+ * Setiap pemanggilan menghasilkan key acak baru (CSPRNG),
153
+ * payload di-encrypt dengan key tersebut
154
+ *
155
+ * @param event Nama event, contoh: `"user:login"`, `"cart:update"`
156
+ * @param payload Data apapun (object, string, dll) yang ingin dikirim
157
+ * @returns `{ txn, key }` — keduanya bernilai sama (ephemeral key).
158
+ * Simpan jika perlu referensi untuk matching response dari host.
159
+ *
160
+ * @example
161
+ * const { txn } = bridge.emitEncrypted("order:submit", { id: 123 });
162
+ *
163
+ */
164
+ emitEncrypted(event: string, payload: any): {
165
+ txn: string;
166
+ key: string;
167
+ };
168
+ track: {
169
+ open_file: (payload?: any) => {
170
+ txn: string;
171
+ key: string;
172
+ };
173
+ open_document: (payload?: any) => {
174
+ txn: string;
175
+ key: string;
176
+ };
177
+ view_document: (payload?: any) => {
178
+ txn: string;
179
+ key: string;
180
+ };
181
+ };
44
182
  destroy(): void;
45
183
  };
46
184
 
47
- export { base64UrlDecode, base64UrlEncode, createBridge, decrypt, encrypt, generateKey, initBridge, resetBridge, setupBridge, signalBridge };
185
+ 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,9 +6791,53 @@ 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
  },
6830
+ track: (() => {
6831
+ const EVENTS = [
6832
+ "open_file",
6833
+ "open_document",
6834
+ "view_document"
6835
+ ];
6836
+ return EVENTS.reduce((acc, event) => {
6837
+ acc[event] = (payload) => emitToHostEncrypted(`activity:${event}`, payload != null ? payload : {});
6838
+ return acc;
6839
+ }, {});
6840
+ })(),
6783
6841
  destroy() {
6784
6842
  window.removeEventListener("message", messageHandler);
6785
6843
  }