react-broadcast-sync 2.0.0 → 2.1.0

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
@@ -59,6 +59,7 @@ postMessage('logout', { at: Date.now() }); // other tabs receive it in `messages
59
59
  - [Advanced Usage](#️advanced-usage)
60
60
  - [BroadcastProvider](#using-broadcastprovider)
61
61
  - [API Reference](#api-reference)
62
+ - [Agent Skill](#agent-skill-optional)
62
63
  - [Gotchas](#gotchas)
63
64
  - [Best Practices](#best-practices)
64
65
  - [Common Use Cases](#common-use-cases)
@@ -269,7 +270,8 @@ function Dashboard() {
269
270
  const [filters, setFilters] = useState({ status: 'all' });
270
271
 
271
272
  const { postMessage } = useBroadcastChannel('dashboard', {
272
- sourceName: `tab-${crypto.randomUUID()}`, // must be unique per tab
273
+ // sourceName is optional: a unique one is generated for each tab.
274
+ // Do not build it inline with crypto.randomUUID(): it would change on every render.
273
275
  onMessage: {
274
276
  'filters-update': msg => setFilters(msg.message),
275
277
  },
@@ -601,7 +603,7 @@ useBroadcastChannel('my-channel', { telemetry: true });
601
603
  <BroadcastProvider channelName="my-channel" options={{ telemetry: true }} />;
602
604
  ```
603
605
 
604
- Changing from a version where telemetry was enabled by default? Omit the option or pass `false` to keep it off.
606
+ **Upgrading to 2.0.0 from 1.x:** telemetry is now off by default. Omit the option or leave `telemetry: false` to keep it off; pass `telemetry: true` only if you want to opt in. This default change is breaking.
605
607
 
606
608
  Events are batched and flushed in a single request when the tab is hidden or after 30 seconds. A failed request is silently discarded and never surfaces to your application.
607
609
 
@@ -609,6 +611,17 @@ See [TELEMETRY.md](./TELEMETRY.md) for the full legal notice.
609
611
 
610
612
  ---
611
613
 
614
+ ## Agent Skill (optional)
615
+
616
+ The package ships an agent skill at `skills/react-broadcast-sync/SKILL.md` (the [agentskills.io](https://agentskills.io) format) with safe recipes for coding agents. Nothing is installed automatically: there is no postinstall script and your agent settings are never modified. To use it, copy it into your project yourself:
617
+
618
+ ```bash
619
+ mkdir -p .agents/skills
620
+ cp -r node_modules/react-broadcast-sync/skills/react-broadcast-sync .agents/skills/
621
+ ```
622
+
623
+ Tools such as `skills-npm` can also extract it for you. Check your agent's docs for where it reads skills from.
624
+
612
625
  ## Gotchas
613
626
 
614
627
  - **Duplicate `sourceName`:** a tab ignores any message whose `source` equals its own `sourceName`. If two tabs use the same `sourceName`, they will not receive each other's messages. Leave it unset (a unique name is generated) unless you need a stable name, and keep it unique per tab.
@@ -820,18 +833,25 @@ This will log:
820
833
  import { renderHook, act } from '@testing-library/react-hooks';
821
834
  import { useBroadcastChannel } from 'react-broadcast-sync';
822
835
 
823
- test('should send and receive messages', () => {
836
+ test('postMessage records the message in sentMessages', () => {
824
837
  const { result } = renderHook(() => useBroadcastChannel('test-channel'));
825
838
 
826
839
  act(() => {
827
840
  result.current.postMessage('test', { data: 'hello' });
828
841
  });
829
842
 
830
- expect(result.current.messages).toHaveLength(1);
831
- expect(result.current.messages[0].message.data).toBe('hello');
843
+ // The hook does not echo your own messages back into `messages`.
844
+ // `messages` only holds messages sent by other tabs or hook instances.
845
+ expect(result.current.messages).toHaveLength(0);
846
+ expect(result.current.sentMessages).toHaveLength(1);
847
+ expect(result.current.sentMessages[0].message.data).toBe('hello');
832
848
  });
833
849
  ```
834
850
 
851
+ To test receiving, render two hooks with different `sourceName` values on the same channel name
852
+ (this needs a `BroadcastChannel` implementation in the test environment, such as a mock that
853
+ delivers to other instances). The message sent by one appears in the other's `messages`.
854
+
835
855
  ### Integration Testing
836
856
 
837
857
  ```tsx
@@ -914,7 +934,7 @@ We're actively improving `react-broadcast-sync`! Here are some features and enha
914
934
  Real browser cross-tab tests using Playwright that go beyond what jsdom mocks can cover.
915
935
 
916
936
  - **Anonymous Usage Telemetry**
917
- ✅ Released — the package collects anonymous structural signals (options used, methods called, hook vs. provider). No user data. No message content.
937
+ ✅ Released — off by default in 2.0.0. Only with `telemetry: true` does the package send structural signals (options used, methods called, hook vs. provider). No message content or application user identifiers in the event payload; Mixpanel may process request metadata such as IP addresses.
918
938
 
919
939
  We're committed to keeping this package lightweight, flexible, and production-ready.
920
940
  Your feedback and contributions are welcome — feel free to [open an issue](https://github.com/IdanShalem/react-broadcast-sync/issues)!
@@ -1,10 +1,29 @@
1
1
  import React from 'react';
2
2
  import { BroadcastActions, BroadcastOptions } from './types/types';
3
- interface BroadcastProviderProps {
3
+ export interface BroadcastProviderProps {
4
+ /** Name of the BroadcastChannel. Combined with `options.namespace` when one is set. */
4
5
  channelName: string;
6
+ /** Same options as `useBroadcastChannel`. */
5
7
  options?: BroadcastOptions;
6
8
  children: React.ReactNode;
7
9
  }
10
+ /**
11
+ * Opens one BroadcastChannel (by calling `useBroadcastChannel` once) and shares it with all
12
+ * descendants through context. Read it with `useBroadcastProvider()`.
13
+ *
14
+ * Same rules as the hook: the tab ignores its own messages, `messages` is an event log (not
15
+ * current state), and a tab opened later does not receive earlier messages.
16
+ *
17
+ * ```tsx
18
+ * <BroadcastProvider channelName="app" options={{ namespace: 'v1' }}>
19
+ * <App />
20
+ * </BroadcastProvider>
21
+ * ```
22
+ */
8
23
  export declare const BroadcastProvider: React.FC<BroadcastProviderProps>;
24
+ /**
25
+ * Returns the channel actions shared by the nearest `BroadcastProvider`.
26
+ *
27
+ * @throws Error if called outside a `BroadcastProvider`.
28
+ */
9
29
  export declare const useBroadcastProvider: () => BroadcastActions;
10
- export {};
@@ -1,6 +1,24 @@
1
1
  import { BroadcastActions, BroadcastOptions } from '../types/types';
2
2
  /**
3
- * useBroadcastChannel hook
3
+ * Opens a BroadcastChannel and returns its state and actions. Scoped to one component: each
4
+ * call has its own connection and state.
5
+ *
6
+ * Behavior to know:
7
+ * - Self-filtering: messages sent by this tab (same `sourceName`) are ignored. They never appear
8
+ * in `messages` or trigger `onMessage`; they are listed in `sentMessages`. Two tabs that share a
9
+ * `sourceName` will not receive each other's messages.
10
+ * - `messages` is an event log of what other tabs sent, not current state.
11
+ * - No replay: a tab opened later only receives messages sent after it opened.
12
+ * - `keepLatestMessage` keeps only the most recent received message in `messages`. It does not
13
+ * affect `sentMessages` and does not replay anything to new tabs.
14
+ * - Batching: with `batchingDelayMs > 0` (default 20 ms) outgoing messages are grouped and sent
15
+ * together. Types in `excludedBatchMessageTypes` are sent immediately. Set it to 0 to disable.
16
+ * - Defaults: `cleaningInterval` 1000 ms, `deduplicationTTL` 5 minutes (300000 ms),
17
+ * `cleanupDebounceMs` 0, `batchingDelayMs` 20 ms, `telemetry` false. Duplicates are dropped by
18
+ * message ID.
19
+ * - Errors are reported through the `error` string (it clears itself after 3 seconds); the hook
20
+ * does not throw for channel errors. `useBroadcastProvider` (not this hook) throws when used
21
+ * outside a `BroadcastProvider`.
4
22
  *
5
23
  * Note: When batching is enabled (batchingDelayMs > 0), messages sent over the channel may be received as either:
6
24
  * - a single BroadcastMessage (object), or
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/utils/telemetry.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","MIXPANEL_TOKEN","sessionId","_c","_b","crypto","randomUUID","call","slice","_d","queue","calledMethods","Set","flushTimer","buildEvent","props","event","properties","Object","assign","token","distinct_id","time","floor","flush","length","batch","splice","fetch","method","headers","body","keepalive","scheduleFlush","setTimeout","trackMethodCalled","has","add","push","document","addEventListener","visibilityState","clearTimeout","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","_entry","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","telemetry","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","useEffect","optionsUsed","entry","options_used","onmessage_shape","batching_enabled","browser_supported","BroadcastChannel","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","cancel","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","postMessage","Array","from","messageContent","channelCurrent","includes","e","clearReceivedMessages","hasFilters","Boolean","ids","types","sources","clearSentMessages","sync","idMatches","typeMatches","getLatestMessage","i","sourceMatches","handleMessage","isValidMessage","pongSource","receivedAt","get","set","cb","String","closeChannel","bc","close","removeEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/utils/telemetry.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","MIXPANEL_TOKEN","sessionId","_c","_b","crypto","randomUUID","call","slice","_d","queue","calledMethods","Set","flushTimer","buildEvent","props","event","properties","Object","assign","token","distinct_id","time","floor","flush","length","batch","splice","fetch","method","headers","body","keepalive","scheduleFlush","setTimeout","trackMethodCalled","has","add","push","document","addEventListener","visibilityState","clearTimeout","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","_entry","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","telemetry","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","useEffect","optionsUsed","entry","options_used","onmessage_shape","batching_enabled","browser_supported","BroadcastChannel","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","cancel","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","postMessage","Array","from","messageContent","channelCurrent","includes","e","clearReceivedMessages","hasFilters","Boolean","ids","types","sources","clearSentMessages","sync","idMatches","typeMatches","getLatestMessage","i","sourceMatches","handleMessage","isValidMessage","pongSource","receivedAt","get","set","cb","String","closeChannel","bc","close","removeEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { useBroadcastChannel } from './hooks/useBroadcastChannel';
2
2
  export { BroadcastProvider, useBroadcastProvider } from './BroadcastProvider';
3
- export type { BroadcastOptions, SendMessageOptions, BroadcastMessage, BroadcastActions, } from './types/types';
3
+ export type { BroadcastOptions, SendMessageOptions, BroadcastMessage, BroadcastActions, ClearOptions, ClearReceivedMessagesOptions, ClearSentMessagesOptions, GetLatestMessageOptions, MessageCallback, OnMessageMap, } from './types/types';
4
+ export type { BroadcastProviderProps } from './BroadcastProvider';
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/utils/telemetry.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","MIXPANEL_TOKEN","sessionId","_c","_b","crypto","randomUUID","call","slice","_d","queue","calledMethods","Set","flushTimer","buildEvent","props","event","properties","Object","assign","token","distinct_id","time","floor","flush","length","batch","splice","fetch","method","headers","body","keepalive","scheduleFlush","setTimeout","trackMethodCalled","has","add","push","document","addEventListener","visibilityState","clearTimeout","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","_entry","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","telemetry","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","useEffect","optionsUsed","entry","options_used","onmessage_shape","batching_enabled","browser_supported","BroadcastChannel","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","cancel","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","postMessage","Array","from","messageContent","channelCurrent","includes","e","clearReceivedMessages","hasFilters","Boolean","ids","types","sources","clearSentMessages","sync","idMatches","typeMatches","getLatestMessage","i","sourceMatches","handleMessage","isValidMessage","pongSource","receivedAt","get","set","cb","String","closeChannel","bc","close","removeEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/utils/telemetry.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[null,null,null,null,null],"names":["INTERNAL_PREFIX","generateRandomPart","Math","random","toString","substr","generateMessageId","source","timestamp","raw","btoa","replace","isMessageExpired","message","expirationDate","Date","now","createMessage","type","content","options","id","_a","expirationDuration","undefined","getInternalMessageType","baseType","channelName","namespace","hash","isValidInternalClearMessage","startsWith","log","level","data","process","env","REACT_APP_DEBUG_BROADCAST","prefix","toISOString","console","warn","error","debug","created","name","closed","sent","received","cleared","messageId","expired","duplicate","allSentCleared","allReceivedCleared","ignored","messageType","inProgress","started","completed","removedCount","context","action","originalError","Error","JSON","stringify","MIXPANEL_TOKEN","sessionId","_c","_b","crypto","randomUUID","call","slice","_d","queue","calledMethods","Set","flushTimer","buildEvent","props","event","properties","Object","assign","token","distinct_id","time","floor","flush","length","batch","splice","fetch","method","headers","body","keepalive","scheduleFlush","setTimeout","trackMethodCalled","has","add","push","document","addEventListener","visibilityState","clearTimeout","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","_entry","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","onMessage","telemetry","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","onMessageRef","current","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","registeredTypesRef","useEffect","optionsUsed","entry","options_used","onmessage_shape","batching_enabled","browser_supported","BroadcastChannel","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","cancel","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","postMessage","Array","from","messageContent","channelCurrent","includes","e","clearReceivedMessages","hasFilters","Boolean","ids","types","sources","clearSentMessages","sync","idMatches","typeMatches","getLatestMessage","i","sourceMatches","handleMessage","isValidMessage","pongSource","receivedAt","get","set","cb","String","closeChannel","bc","close","removeEventListener","isArray","forEach","interval","setInterval","before","clearInterval","key","entries","delete","BroadcastChannelContext","createContext","BroadcastProvider","children","BroadcastChannelActions","_jsx","Provider","value","useBroadcastProvider","useContext"],"mappings":"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"}
package/llms.txt ADDED
@@ -0,0 +1,367 @@
1
+ # react-broadcast-sync
2
+
3
+ > React hook and provider for cross-tab messaging over BroadcastChannel, with helpers for manually syncing state between tabs (no automatic state replication).
4
+
5
+ Version 2.0.0. Install: `npm install react-broadcast-sync`. Same origin only. Generated from README.md by scripts/generate-llms-txt.mjs; do not edit by hand.
6
+
7
+ ## Syncing Shared State (filters, settings)
8
+
9
+ `messages` is an event log of what other tabs sent, not the current state. To keep a piece of state
10
+ (for example dashboard filters) in sync, update local state and send one message from the handler,
11
+ and apply incoming messages with `onMessage`:
12
+
13
+ ```tsx
14
+ function Dashboard() {
15
+ const [filters, setFilters] = useState({ status: 'all' });
16
+
17
+ const { postMessage } = useBroadcastChannel('dashboard', {
18
+ // sourceName is optional: a unique one is generated for each tab.
19
+ // Do not build it inline with crypto.randomUUID(): it would change on every render.
20
+ onMessage: {
21
+ 'filters-update': msg => setFilters(msg.message),
22
+ },
23
+ });
24
+
25
+ const updateFilters = (next: typeof filters) => {
26
+ setFilters(next);
27
+ postMessage('filters-update', next);
28
+ };
29
+
30
+ return <FilterBar value={filters} onChange={updateFilters} />;
31
+ }
32
+ ```
33
+
34
+ Do not call `postMessage` from a `useEffect` on state that you also set from incoming messages.
35
+ Each tab re-broadcasts what it receives, the tabs ping-pong, and they can end up with different
36
+ values. Deduplication is by message ID, so it does not stop this.
37
+
38
+ ### New tabs do not receive past messages
39
+
40
+ Messages are not replayed. A tab opened later only sees messages sent after it opened, and
41
+ `keepLatestMessage` and `getLatestMessage` do not change that. To give a new tab the current state,
42
+ let it ask for it and let an existing tab answer:
43
+
44
+ ```tsx
45
+ const { postMessage } = useBroadcastChannel('dashboard', {
46
+ sourceName: sourceName, // unique per tab
47
+ onMessage: {
48
+ 'filters-update': msg => setFilters(msg.message),
49
+ 'state-request': () => postMessage('filters-update', filtersRef.current),
50
+ },
51
+ });
52
+
53
+ // Ask once when this tab mounts
54
+ useEffect(() => {
55
+ postMessage('state-request', null);
56
+ }, []);
57
+ ```
58
+
59
+ Keep the current value in a ref (`filtersRef.current = filters`) so the `state-request` handler
60
+ always answers with the latest state. If no other tab is open, nothing answers and the tab keeps its
61
+ default state.
62
+
63
+ ---
64
+
65
+ ## API Reference
66
+
67
+ ### `useBroadcastChannel` Hook
68
+
69
+ ```typescript
70
+ const {
71
+ channelName,
72
+ messages,
73
+ sentMessages,
74
+ postMessage,
75
+ clearReceivedMessages,
76
+ clearSentMessages,
77
+ error,
78
+ } = useBroadcastChannel(channelName, options);
79
+ ```
80
+
81
+ #### Options
82
+
83
+ ```typescript
84
+ interface BroadcastOptions {
85
+ sourceName?: string; // Custom name for the message source. Must be unique per tab: a tab ignores messages from its own sourceName
86
+ cleaningInterval?: number; // Interval in ms for cleaning expired messages (default: 1000)
87
+ keepLatestMessage?: boolean; // Keep only the latest message (default: false)
88
+ registeredTypes?: string[]; // List of allowed message types
89
+ namespace?: string; // Channel namespace for isolation
90
+ deduplicationTTL?: number; // Time in ms to keep message IDs for deduplication (default: 5 minutes)
91
+ cleanupDebounceMs?: number; // Debounce time in ms for cleanup operations (default: 0)
92
+ batchingDelayMs?: number; // Delay in ms to batch outgoing messages (default: 20). If > 0, messages are batched and sent together.
93
+ excludedBatchMessageTypes?: string[]; // Message types to always send immediately, never batched (default: []).
94
+ onMessage?: MessageCallback | OnMessageMap; // Callback(s) fired when a received message passes all filters (default: undefined).
95
+ telemetry?: boolean; // Privacy-first: off by default. Pass true to opt in.
96
+ }
97
+ ```
98
+
99
+ #### Default Values
100
+
101
+ | Option | Default Value | Description |
102
+ | --------------------------- | ------------- | -------------------------------------------- |
103
+ | `sourceName` | `undefined` | Auto-generated if not provided |
104
+ | `cleaningInterval` | `1000` | 1 second between cleanup runs |
105
+ | `keepLatestMessage` | `false` | Keep all messages by default |
106
+ | `registeredTypes` | `[]` | Accept all message types by default |
107
+ | `namespace` | `''` | No namespace by default |
108
+ | `deduplicationTTL` | `300000` | 5 minutes (5 × 60 × 1000 ms) |
109
+ | `cleanupDebounceMs` | `0` | No debounce by default |
110
+ | `batchingDelayMs` | `20` | Batch delay in ms (0 = off) |
111
+ | `excludedBatchMessageTypes` | `[]` | Types never batched |
112
+ | `onMessage` | `undefined` | Callback(s) for received messages |
113
+ | `telemetry` | `false` | Anonymous usage stats. Pass `true` to opt in |
114
+
115
+ #### Return Value
116
+
117
+ ```typescript
118
+ interface BroadcastActions {
119
+ channelName: string; // The resolved channel name (includes namespace)
120
+ messages: BroadcastMessage[]; // Received messages
121
+ sentMessages: BroadcastMessage[]; // Messages sent by this instance
122
+ postMessage: (type: string, content: any, options?: SendMessageOptions) => void;
123
+ clearReceivedMessages: (opts?: { ids?: string[]; types?: string[]; sources?: string[] }) => void;
124
+ clearSentMessages: (opts?: { ids?: string[]; types?: string[]; sync?: boolean }) => void;
125
+ getLatestMessage: (opts?: { type?: string; source?: string }) => BroadcastMessage | null;
126
+ closeChannel: () => void;
127
+ error: string | null; // Current error state
128
+ }
129
+ ```
130
+
131
+ ### `useBroadcastChannel(channelName, options?)`
132
+
133
+ Returns an object with:
134
+
135
+ | Property | Type | Description |
136
+ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
137
+ | `channelName` | `string` | The resolved channel name (includes namespace) |
138
+ | `messages` | `BroadcastMessage[]` | All received messages from other tabs |
139
+ | `sentMessages` | `BroadcastMessage[]` | Messages sent from this tab |
140
+ | `postMessage()` | `function` | Send a message to all tabs |
141
+ | `clearReceivedMessages()` | `function` | Clear received messages. No filters ⇒ clear all. With filters, a message is deleted only if it matches **every** provided filter (`ids`, `types`, `sources`). Empty arrays act as wildcards. |
142
+ | `clearSentMessages()` | `function` | Clear messages this tab sent (same matching rules). Pass `sync: true` to broadcast the clear to other tabs. |
143
+ | `getLatestMessage()` | `function` | Get the latest message matching optional filters (`type`, `source`). Returns the most recent message that matches, or `null` if none. |
144
+ | `ping(timeoutMs?)` | `function` | Ping other tabs on the channel and collect their source names. `timeoutMs` (default: 300ms) controls how long to wait for responses before resolving. Returns a Promise of string array. |
145
+ | `isPingInProgress` | `boolean` | `true` while a ping is active, otherwise `false`. |
146
+ | `closeChannel()` | `function` | Explicitly closes the broadcast channel and removes event listeners. Safe to call multiple times. |
147
+ | `error` | `string \| null` | Any runtime error from the channel |
148
+
149
+ #### Clearing examples
150
+
151
+ ```tsx
152
+ // Clear everything we've received
153
+ clearReceivedMessages();
154
+
155
+ // Clear all messages we sent and broadcast the clear to other tabs
156
+ clearSentMessages({ sync: true });
157
+
158
+ // Clear by id or by type (OR inside each array)
159
+ clearReceivedMessages({ ids: ['123'] }); // id match
160
+ clearReceivedMessages({ types: ['alert', 'chat'] }); // type match
161
+
162
+ // Combine filters (logical AND between filters)
163
+ // Removes messages whose id is '123' AND type is 'alert'
164
+ clearSentMessages({ ids: ['123'], types: ['alert'] });
165
+ ```
166
+
167
+ #### Send Options:
168
+
169
+ ```ts
170
+ interface SendMessageOptions {
171
+ expirationDuration?: number; // TTL in ms
172
+ expirationDate?: number; // Exact expiry timestamp
173
+ }
174
+ ```
175
+
176
+ #### Message Format:
177
+
178
+ ```ts
179
+ interface BroadcastMessage {
180
+ id: string;
181
+ type: string;
182
+ message: any;
183
+ timestamp: number;
184
+ source: string;
185
+ expirationDate?: number;
186
+ }
187
+ ```
188
+
189
+ #### Getting the Latest Message
190
+
191
+ You can use `getLatestMessage` to retrieve the most recent message received, optionally filtered by `type` and/or `source`. If no options are provided, it returns the latest message of any kind. If no message matches, it returns `null`.
192
+
193
+ **Signature:**
194
+
195
+ ```ts
196
+ getLatestMessage(options?: { type?: string; source?: string }): BroadcastMessage | null
197
+ ```
198
+
199
+ **Examples:**
200
+
201
+ ```tsx
202
+ // Get the latest message of any type/source
203
+ const latest = getLatestMessage();
204
+
205
+ // Get the latest message of a specific type
206
+ const latestAlert = getLatestMessage({ type: 'alert' });
207
+
208
+ // Get the latest message from a specific source
209
+ const latestFromTab = getLatestMessage({ source: 'tab-123' });
210
+
211
+ // Get the latest message of a specific type from a specific source
212
+ const latestInfoFromTab = getLatestMessage({ type: 'info', source: 'tab-123' });
213
+
214
+ // Check if there are any messages of a type
215
+ if (getLatestMessage({ type: 'notification' })) {
216
+ // ...
217
+ }
218
+ ```
219
+
220
+ **Behavior:**
221
+
222
+ - If no messages are present, returns `null`.
223
+ - If no message matches the filter, returns `null`.
224
+ - If multiple messages match, returns the most recently received one.
225
+
226
+ #### Ping & Active Source Detection
227
+
228
+ `useBroadcastChannel` provides a `ping` method and an `isPingInProgress` state for discovering active sources (tabs) on the same channel.
229
+
230
+ - **`ping(timeoutMs?: number): Promise<string[]>`**: Broadcasts a ping and collects responses from other tabs within the timeout. Returns an array of source names (excluding your own).
231
+ - **`isPingInProgress: boolean`**: Indicates if a ping is currently in progress.
232
+
233
+ **Example:**
234
+
235
+ ```tsx
236
+ const { ping, isPingInProgress } = useBroadcastChannel('my-channel', {
237
+ sourceName: 'my-tab',
238
+ });
239
+
240
+ // To discover other active sources:
241
+ const activeSources = await ping(300); // e.g., ['tab-2', 'tab-3']
242
+
243
+ // To show loading state:
244
+ if (isPingInProgress) {
245
+ // Show spinner or status
246
+ }
247
+ ```
248
+
249
+ #### Closing the Channel Explicitly
250
+
251
+ You can use `closeChannel` to explicitly close the underlying BroadcastChannel and remove all event listeners. This is useful if you want to clean up resources before the component unmounts, or to stop all cross-tab communication on demand. Note that the channel will automatically close and all event listeners will be removed when the component unmounts, so this method is mainly useful for manual cleanup.
252
+
253
+ **Signature:**
254
+
255
+ ```ts
256
+ closeChannel(): void
257
+ ```
258
+
259
+ **Example:**
260
+
261
+ ```tsx
262
+ const { closeChannel } = useBroadcastChannel('my-channel');
263
+
264
+ // ... later, when you want to stop all communication:
265
+ closeChannel();
266
+ ```
267
+
268
+ **Notes:**
269
+
270
+ - After calling `closeChannel`, the channel is closed and will not send or receive any more messages.
271
+ - It is safe to call `closeChannel` multiple times (idempotent).
272
+ - You do not need to call this for normal React unmounting; the hook will clean up automatically. Use it for explicit/manual cleanup only.
273
+
274
+ #### `onMessage` Callbacks
275
+
276
+ `onMessage` lets you react to incoming messages imperatively — without polling `messages` state or using `useEffect`. The callback fires after the message is added to state and only for messages that pass all active filters (`registeredTypes`, expiry, deduplication, self-filter). Internal protocol messages (PING, PONG, CLEAR_SENT_MESSAGES) never trigger it.
277
+
278
+ **Two supported shapes:**
279
+
280
+ ```ts
281
+ // 1. A single catch-all function — fires for every accepted message type
282
+ type MessageCallback = (msg: BroadcastMessage) => void;
283
+
284
+ // 2. A map from message type → one handler function
285
+ type OnMessageMap = { [type: string]: (msg: BroadcastMessage) => void };
286
+ ```
287
+
288
+ **Catch-all example:**
289
+
290
+ ```tsx
291
+ const { postMessage } = useBroadcastChannel('my-channel', {
292
+ onMessage: msg => {
293
+ console.log('received', msg.type, msg.message);
294
+ },
295
+ });
296
+ ```
297
+
298
+ **Per-type map example:**
299
+
300
+ ```tsx
301
+ useBroadcastChannel('my-channel', {
302
+ onMessage: {
303
+ error: msg => showToast(`Error: ${msg.message.text}`),
304
+ success: msg => celebrate(),
305
+ log: msg => console.log('[log]', msg.message),
306
+ },
307
+ });
308
+ ```
309
+
310
+ **Behavior:**
311
+
312
+ - Fires for messages from **other** tabs only — self-messages are always ignored before this point.
313
+ - Fires **after** `messages` state is updated — both the callback argument and `messages[messages.length - 1]` will be the same object.
314
+ - A type not listed in the map causes no error — it is silently skipped.
315
+ - If the callback throws, the error is caught and debug-logged. Message state is **not** affected.
316
+ - Changing `onMessage` between renders is safe — the latest callback is always used with no stale closure risk.
317
+ - Works with batched messages: each message in a batch triggers its own callback call.
318
+
319
+ ---
320
+
321
+ #### `telemetry` Option
322
+
323
+ **Privacy-first: telemetry is off by default.** Nothing is sent to Mixpanel unless you explicitly set `telemetry: true` on the hook or provider. When enabled, `react-broadcast-sync` collects structural usage signals to help the maintainer understand how the library is used.
324
+
325
+ **What is collected:**
326
+
327
+ - Which `BroadcastOptions` keys are present (not their values)
328
+ - The shape of `onMessage` (`none` / `function` / `map`)
329
+ - Whether batching is enabled
330
+ - Whether `BroadcastChannel` is supported in the browser
331
+ - Which action methods (`postMessage`, `ping`, etc.) are called at least once per session
332
+ - Hook vs. provider entry point
333
+
334
+ **What is never collected:**
335
+
336
+ - Channel names, source names, message content, or message types
337
+ - Any application user identifiers in the event payload (Mixpanel may process IP addresses from request metadata)
338
+
339
+ Telemetry is **off by default**. Pass `telemetry: true` to opt in for a channel:
340
+
341
+ ```tsx
342
+ useBroadcastChannel('my-channel', { telemetry: true });
343
+ // or
344
+ <BroadcastProvider channelName="my-channel" options={{ telemetry: true }} />;
345
+ ```
346
+
347
+ **Upgrading to 2.0.0 from 1.x:** telemetry is now off by default. Omit the option or leave `telemetry: false` to keep it off; pass `telemetry: true` only if you want to opt in. This default change is breaking.
348
+
349
+ Events are batched and flushed in a single request when the tab is hidden or after 30 seconds. A failed request is silently discarded and never surfaces to your application.
350
+
351
+ See [TELEMETRY.md](./TELEMETRY.md) for the full legal notice.
352
+
353
+ ---
354
+
355
+ ## Gotchas
356
+
357
+ - **Duplicate `sourceName`:** a tab ignores any message whose `source` equals its own `sourceName`. If two tabs use the same `sourceName`, they will not receive each other's messages. Leave it unset (a unique name is generated) unless you need a stable name, and keep it unique per tab.
358
+ - **`keepLatestMessage` is one slot:** with `keepLatestMessage: true`, `messages` holds only the single most recent message across all types, so a `"b"` message replaces a prior `"a"`. Use `registeredTypes` or separate channels/namespaces if you need the latest message per type.
359
+ - **`cleanupDebounceMs` vs `cleaningInterval`:** cleanup is debounced. If `cleanupDebounceMs` is longer than `cleaningInterval`, each interval tick restarts the debounce and expired messages may never be removed. Keep `cleanupDebounceMs` smaller than `cleaningInterval`.
360
+ - **Deduplication is by message ID**, not content (see [Message Deduplication](#message-deduplication)).
361
+ - **Same origin only:** `BroadcastChannel` does not cross origins, and a tab does not receive its own messages.
362
+ - **Telemetry is off by default:** pass `telemetry: true` to opt in (see [Telemetry](#telemetry)).
363
+
364
+ ## Links
365
+
366
+ - [README](https://github.com/IdanShalem/react-broadcast-sync#readme)
367
+ - [Telemetry notice](https://github.com/IdanShalem/react-broadcast-sync/blob/main/TELEMETRY.md)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "2.0.0",
4
- "description": "A lightweight React hook and provider for syncing state across browser tabs using BroadcastChannel API.",
3
+ "version": "2.1.0",
4
+ "description": "React hook and provider for cross-tab messaging over BroadcastChannel, with helpers for manually syncing state between tabs (no automatic state replication).",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
7
7
  "types": "dist/index.d.ts",
@@ -9,6 +9,8 @@
9
9
  "type": "module",
10
10
  "files": [
11
11
  "dist",
12
+ "llms.txt",
13
+ "skills",
12
14
  "README.md",
13
15
  "LICENSE",
14
16
  "TELEMETRY.md"
@@ -31,6 +33,8 @@
31
33
  "release": "semantic-release",
32
34
  "lint-staged": "lint-staged",
33
35
  "prepack": "npm run build",
36
+ "generate:llms": "node scripts/generate-llms-txt.mjs",
37
+ "check:llms": "node scripts/generate-llms-txt.mjs --check",
34
38
  "verify:telemetry": "node scripts/verify-telemetry-token.mjs",
35
39
  "dev:integration": "vite integration/app --port 5199 --strictPort",
36
40
  "test:integration": "playwright test"
@@ -82,6 +86,7 @@
82
86
  "tabs",
83
87
  "state-management",
84
88
  "localstorage-alternative",
89
+ "message-ttl",
85
90
  "typescript",
86
91
  "real-time"
87
92
  ],
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: react-broadcast-sync
3
+ description: Use when adding cross-tab messaging or state sync to a React app with the react-broadcast-sync package (useBroadcastChannel, BroadcastProvider). Covers syncing state between tabs, giving late-opened tabs the current state, and common mistakes.
4
+ ---
5
+
6
+ # react-broadcast-sync
7
+
8
+ Cross-tab messaging for React over the browser `BroadcastChannel` API. Version 2.x. Same origin only.
9
+
10
+ ## What it is and is not
11
+
12
+ - `messages` is an event log of what OTHER tabs sent. It is not current state.
13
+ - A tab never receives its own messages.
14
+ - Messages are not replayed. A tab opened later sees only messages sent after it opened.
15
+ - Deduplication is by message ID, not content.
16
+ - There is no automatic state replication. You send messages and apply them yourself.
17
+ - Telemetry is off by default (since 2.0.0). Do not add `telemetry: true` unless the user asks for it.
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ npm install react-broadcast-sync
23
+ ```
24
+
25
+ ## Recipe 1: sync a piece of state between tabs
26
+
27
+ Update local state, then send one message from the same handler. Apply incoming messages with `onMessage`.
28
+
29
+ ```tsx
30
+ import { useState } from 'react';
31
+ import { useBroadcastChannel } from 'react-broadcast-sync';
32
+
33
+ function Dashboard() {
34
+ const [filters, setFilters] = useState({ status: 'all' });
35
+
36
+ const { postMessage } = useBroadcastChannel('dashboard', {
37
+ onMessage: {
38
+ 'filters-update': msg => setFilters(msg.message),
39
+ },
40
+ });
41
+
42
+ const updateFilters = (next: typeof filters) => {
43
+ setFilters(next);
44
+ postMessage('filters-update', next);
45
+ };
46
+
47
+ return <FilterBar value={filters} onChange={updateFilters} />;
48
+ }
49
+ ```
50
+
51
+ Do NOT call `postMessage` from a `useEffect` that watches state which incoming messages also set. Tabs re-broadcast what they receive and ping-pong forever.
52
+
53
+ ## Recipe 2: give a late-opened tab the current state
54
+
55
+ Because there is no replay, a new tab must ask and an existing tab must answer. Keep the current value in a ref so the handler does not read stale state.
56
+
57
+ ```tsx
58
+ const filtersRef = useRef(filters);
59
+ filtersRef.current = filters;
60
+
61
+ const { postMessage } = useBroadcastChannel('dashboard', {
62
+ onMessage: {
63
+ 'filters-update': msg => setFilters(msg.message),
64
+ 'state-request': () => postMessage('filters-update', filtersRef.current),
65
+ },
66
+ });
67
+
68
+ useEffect(() => {
69
+ postMessage('state-request', null);
70
+ }, []);
71
+ ```
72
+
73
+ If no other tab is open, nobody answers. Start from sensible defaults.
74
+
75
+ ## Recipe 3: latest value only
76
+
77
+ `keepLatestMessage: true` keeps ONE slot across all types. A later message of any type replaces the earlier one. It does not replay to late tabs. For latest-per-type, use separate channels or `namespace`, or read with `getLatestMessage({ type })` without `keepLatestMessage`.
78
+
79
+ ## Recipe 4: stable sourceName
80
+
81
+ Leave `sourceName` unset unless you need a stable name. A unique one is generated per tab. If you set it:
82
+
83
+ - It must be unique per tab. A tab ignores messages whose `source` equals its own `sourceName`, so two tabs with the same name never hear each other.
84
+ - Do not build it inline (for example `crypto.randomUUID()` in the options). It would change every render. Create it once with `useRef` or `useState`.
85
+
86
+ ## Recipe 5: several topics
87
+
88
+ Use one channel per topic (or `namespace`) so each listener only gets its own messages. `registeredTypes` limits accepted message types.
89
+
90
+ ## Common mistakes
91
+
92
+ - Treating `messages` as state. Use `useState` plus `onMessage`.
93
+ - Sending from `useEffect` on synced state (loop, see Recipe 1).
94
+ - Expecting a new tab to get past messages (see Recipe 2).
95
+ - Using the same `sourceName` in every tab.
96
+ - `cleanupDebounceMs` larger than `cleaningInterval`, which can stop expired messages from being removed.
97
+ - Expecting cross-origin delivery. `BroadcastChannel` is same origin only.
98
+ - Enabling telemetry without being asked.
99
+
100
+ ## More
101
+
102
+ Full docs: https://github.com/IdanShalem/react-broadcast-sync#readme