react-broadcast-sync 1.3.0 → 1.5.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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.5.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.4.0...v1.5.0) (2025-07-03)
2
+
3
+
4
+ ### Features
5
+
6
+ * batch messages with delay ([6dde9fa](https://github.com/IdanShalem/react-broadcast-sync/commit/6dde9fa441e2f5fc4745c00fdbabdf48f697d58b))
7
+
8
+ # [1.4.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.3.0...v1.4.0) (2025-06-29)
9
+
10
+
11
+ ### Features
12
+
13
+ * ping for other sources ([794631a](https://github.com/IdanShalem/react-broadcast-sync/commit/794631ae118da61dd888b18ca3d960ae4869498d))
14
+
1
15
  # [1.3.0](https://github.com/IdanShalem/react-broadcast-sync/compare/v1.2.1...v1.3.0) (2025-06-16)
2
16
 
3
17
 
package/README.md CHANGED
@@ -70,6 +70,7 @@ Easily sync UI state or user events across browser tabs in React apps — notifi
70
70
  - Clear individual or all messages
71
71
  - Only accept allowed message types (optional)
72
72
  - `BroadcastProvider` for context-based usage
73
+ - **Ping and active source detection** (discover other tabs and their source names)
73
74
 
74
75
  ## Demo App
75
76
 
@@ -271,6 +272,8 @@ Returns an object with:
271
272
  | `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. |
272
273
  | `clearSentMessages()` | `function` | Clear messages this tab sent (same matching rules). Pass `sync: true` to broadcast the clear to other tabs. |
273
274
  | `getLatestMessage()` | `function` | Get the latest message matching optional filters (`type`, `source`). Returns the most recent message that matches, or `null` if none. |
275
+ | `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. |
276
+ | `isPingInProgress` | `boolean` | `true` while a ping is active, otherwise `false`. |
274
277
  | `closeChannel()` | `function` | Explicitly closes the broadcast channel and removes event listeners. Safe to call multiple times. |
275
278
  | `error` | `string \| null` | Any runtime error from the channel |
276
279
 
@@ -351,6 +354,29 @@ if (getLatestMessage({ type: 'notification' })) {
351
354
  - If no message matches the filter, returns `null`.
352
355
  - If multiple messages match, returns the most recently received one.
353
356
 
357
+ #### Ping & Active Source Detection
358
+
359
+ `useBroadcastChannel` provides a `ping` method and an `isPingInProgress` state for discovering active sources (tabs) on the same channel.
360
+
361
+ - **`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).
362
+ - **`isPingInProgress: boolean`**: Indicates if a ping is currently in progress.
363
+
364
+ **Example:**
365
+
366
+ ```tsx
367
+ const { ping, isPingInProgress } = useBroadcastChannel('my-channel', {
368
+ sourceName: 'my-tab',
369
+ });
370
+
371
+ // To discover other active sources:
372
+ const activeSources = await ping(300); // e.g., ['tab-2', 'tab-3']
373
+
374
+ // To show loading state:
375
+ if (isPingInProgress) {
376
+ // Show spinner or status
377
+ }
378
+ ```
379
+
354
380
  #### Closing the Channel Explicitly
355
381
 
356
382
  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.
@@ -1,3 +1,13 @@
1
1
  import { BroadcastActions, BroadcastOptions } from '../types/types';
2
+ /**
3
+ * useBroadcastChannel hook
4
+ *
5
+ * Note: When batching is enabled (batchingDelayMs > 0), messages sent over the channel may be received as either:
6
+ * - a single BroadcastMessage (object), or
7
+ * - an array of BroadcastMessage (batch)
8
+ *
9
+ * The event handler in this hook supports both formats. If you listen to the channel directly, always check:
10
+ * if (Array.isArray(event.data)) { ... } else { ... }
11
+ */
2
12
  export declare const useBroadcastChannel: (channelName: string, options?: BroadcastOptions) => BroadcastActions;
3
13
  export default useBroadcastChannel;
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react"),t=require("react/jsx-runtime");const r="__INTERNAL__",s=()=>Math.random().toString(36).substr(2,9),n=(e,t)=>{const r=`${s()}-${e}-${t}`;return btoa(r).replace(/=+$/,"")},o=e=>!!e.expirationDate&&e.expirationDate<Date.now(),a=(e,t,r,s={})=>{var o;const a=Date.now();return{id:n(r,a),type:e,message:t,timestamp:a,source:r,expirationDate:null!==(o=s.expirationDate)&&void 0!==o?o:s.expirationDuration?a+s.expirationDuration:void 0}},c=(e,t,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${t}-${s}`}`);return`${r}:${e}:${n}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${r}:`)&&"string"==typeof e.source,i=(e,t,r)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const s=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(s,t,r||"");break;case"warn":console.warn(s,t,r||"");break;case"error":console.error(s,t,r||"")}},u={created:e=>i("info","Channel created:",e),closed:e=>i("info","Channel closed:",e)},d={sent:e=>i("info","Message sent:",e),received:e=>i("info","Message received:",e),cleared:e=>i("info","Message cleared:",e),expired:e=>i("info","Message expired:",e),duplicate:e=>i("warn","Duplicate message ignored:",e),allSentCleared:()=>i("info","All sent messages cleared"),allReceivedCleared:()=>i("info","All received messages cleared"),ignored:e=>i("info","Message ignored due to type filter:",e)},p={started:()=>i("info","Cleanup started"),completed:e=>i("info","Cleanup completed:",{removedCount:e})},f=e=>i("error","Error:",e),g="CLEAR_SENT_MESSAGES",h=(t,r={})=>{const{sourceName:n,cleaningInterval:i=1e3,keepLatestMessage:h=!1,registeredTypes:v=[],namespace:m="",deduplicationTTL:y=3e5,cleanupDebounceMs:C=0}=r,[E,b]=e.useState([]),[S,M]=e.useState([]),[w,x]=e.useState(null),B=e.useRef(null),D=e.useRef(new Map),$=e.useMemo((()=>n||`tab-${s()}`),[n]),A=e.useMemo((()=>({CLEAR_SENT_MESSAGES:c(g,t,m)})),[t,m]),T=e.useMemo((()=>`${t}-${m}`),[t,m]),_=e.useMemo((()=>v),[JSON.stringify(v)]),k=e.useCallback((()=>{b((e=>e.filter((e=>!o(e)))))}),[]),R=e.useRef(C>0?((e,t)=>{let r,s=null,n=null;const o=(...o)=>{n=o,null!==s&&clearTimeout(s),s=setTimeout((()=>{s=null,null!==n&&(r=e(...n),n=null)}),t)};return o.cancel=()=>{null!==s&&(clearTimeout(s),s=null,n=null)},o.flush=()=>(null!==s&&(clearTimeout(s),s=null,null!==n&&(r=e(...n),n=null)),r),o})(k,C):Object.assign(k,{cancel:()=>{}})).current,P=e.useCallback((e=>{x(e),setTimeout((()=>x(null)),3e3)}),[]),L=e.useCallback(((e,t,r={})=>{const s=B.current;if(!s){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f(e),void P(e)}try{const n=a(e,t,$,r);s.postMessage(n),d.sent(n),M((e=>[...e,n]))}catch(e){const t="Failed to send message";f(t),P(t)}}),[$,P]),N=e.useCallback(((e={})=>{const t=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);b((r=>t?r.filter((t=>!(e.ids&&e.ids.includes(t.id)||e.types&&e.types.includes(t.type)||e.sources&&e.sources.includes(t.source)))):[]))}),[]),j=e.useCallback(((e={})=>{var t,r,s;const{ids:n=[],types:o=[],sync:c=!1}=null!=e?e:{};M((e=>n.length>0||o.length>0?e.filter((e=>{if(e.source!==$)return!0;const t=0===n.length||n.includes(e.id),r=0===o.length||o.includes(e.type);return!(t&&r)})):[])),c&&(null===(t=B.current)||void 0===t||t.postMessage(a(A.CLEAR_SENT_MESSAGES,{ids:null!==(r=e.ids)&&void 0!==r?r:[],types:null!==(s=e.types)&&void 0!==s?s:[]},$)))}),[]),I=e.useCallback(((e={})=>{const{source:t,type:r}=e;for(let e=E.length-1;e>=0;e--){const s=E[e],n=!t||s.source===t,o=!r||s.type===r;if(n&&o)return s}return null}),[E]),G=e.useCallback((e=>{try{const t=e.data;if(d.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===$)return;if(l(t)&&t.type===A.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void b((s=>[...s.filter((s=>{if(s.source!==t.source)return!0;const n=0===e.length||e.includes(s.id),o=0===r.length||r.includes(s.type);return!(n&&o)}))]))}if(_.length>0&&!_.includes(t.type))return void d.ignored(t.type);if(o(t))return void d.expired(t.id);const r=Date.now(),s=D.current.get(t.id);if(s&&r-s<y)return void d.duplicate(t.id);D.current.set(t.id,r),b((e=>h?[t]:[...e,t]))}catch(e){const t="Error processing broadcast message";f(t),P(t)}}),[$,_,h,P,A,y]),O=e.useCallback((()=>{const e=B.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",G),e.close(),u.closed(T),B.current=null)}),[G,T]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return f(e),void P(e)}const e=new BroadcastChannel(T);return B.current=e,u.created(T),e.addEventListener("message",G),()=>{O()}}),[T,G,P]),e.useEffect((()=>{if(i<=0)return;const e=setInterval((()=>{p.started();const e=E.length;R(),p.completed(e-E.length)}),i);return()=>{var t;clearInterval(e),C>0&&(null===(t=R.cancel)||void 0===t||t.call(R))}}),[i,R,C]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[t,r]of D.current.entries())e-r>=y&&D.current.delete(t)}),6e4);return()=>clearInterval(e)}),[y]),{channelName:T,messages:E,sentMessages:S,postMessage:L,clearReceivedMessages:N,clearSentMessages:j,getLatestMessage:I,error:w,closeChannel:O}},v=e.createContext(void 0);class m extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?t.jsx("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}exports.BroadcastProvider=({children:r,channelName:s})=>{const{messages:n,error:o}=h(s),[a,c]=e.useState(null),l=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void c("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return l.current=e,()=>{e.close()}}),[s]);const i=e.useMemo((()=>({messages:n,error:a||o,channel:l.current})),[n,a,o]);return t.jsx(m,{children:t.jsx(v.Provider,{value:i,children:r})})},exports.useBroadcastChannel=h,exports.useBroadcastProvider=()=>{const t=e.useContext(v);if(!t)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return t};
1
+ "use strict";var e=require("react"),r=require("react/jsx-runtime");const t="__INTERNAL__",s=()=>Math.random().toString(36).substr(2,9),n=(e,r)=>{const t=`${s()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},o=e=>!!e.expirationDate&&e.expirationDate<Date.now(),c=(e,r,t,s={})=>{var o;const c=Date.now();return{id:n(t,c),type:e,message:r,timestamp:c,source:t,expirationDate:null!==(o=s.expirationDate)&&void 0!==o?o:s.expirationDuration?c+s.expirationDuration:void 0}},a=(e,r,s="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${s}`}`);return`${t}:${e}:${n}`},l=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${t}:`)&&"string"==typeof e.source,u=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const s=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(s,r,t||"");break;case"warn":console.warn(s,r,t||"");break;case"error":console.error(s,r,t||"")}},i={created:e=>u("info","Channel created:",e),closed:e=>u("info","Channel closed:",e)},d={sent:e=>u("info","Message sent:",e),received:e=>u("info","Message received:",e),cleared:e=>u("info","Message cleared:",e),expired:e=>u("info","Message expired:",e),duplicate:e=>u("warn","Duplicate message ignored:",e),allSentCleared:()=>u("info","All sent messages cleared"),allReceivedCleared:()=>u("info","All received messages cleared"),ignored:e=>u("info","Message ignored due to type filter:",e)},p={inProgress:()=>u("warn","Ping already in progress. Skipping call.")},f={started:()=>u("info","Cleanup started"),completed:e=>u("info","Cleanup completed:",{removedCount:e})},g=e=>u("error","Error:",e),h="CLEAR_SENT_MESSAGES",m="PING",v="PONG";let y;if("test"===process.env.NODE_ENV)try{y=require("react-dom").flushSync}catch(e){}const C=(r,t={})=>{const{sourceName:n,cleaningInterval:u=1e3,keepLatestMessage:C=!1,registeredTypes:E=[],namespace:b="",deduplicationTTL:S=3e5,cleanupDebounceMs:M=0,batchingDelayMs:P=20,excludedBatchMessageTypes:w=[]}=t,[N,x]=e.useState([]),[B,T]=e.useState([]),[D,A]=e.useState(null),[k,R]=e.useState(!1),$=e.useRef(null),_=e.useRef(new Map),G=e.useRef(null),I=e.useRef(null),L=e.useRef([]),O=e.useRef(!1),j=e.useMemo((()=>n||`tab-${s()}`),[n]),F=e.useMemo((()=>({CLEAR_SENT_MESSAGES:a(h,r,b),PING:a(m,r,b),PONG:a(v,r,b)})),[r,b]),q=e.useMemo((()=>b?`${r}-${b}`:r),[r,b]),J=e.useMemo((()=>E),[JSON.stringify(E)]),U=e.useCallback((()=>{x((e=>e.filter((e=>!o(e)))))}),[]),V=e.useRef(M>0?((e,r)=>{let t,s=null,n=null;const o=(...o)=>{n=o,null!==s&&clearTimeout(s),s=setTimeout((()=>{s=null,null!==n&&(t=e(...n),n=null)}),r)};return o.cancel=()=>{null!==s&&(clearTimeout(s),s=null,n=null)},o.flush=()=>(null!==s&&(clearTimeout(s),s=null,null!==n&&(t=e(...n),n=null)),t),o})(U,M):Object.assign(U,{cancel:()=>{}})).current,W=e.useCallback((e=>{A(e),setTimeout((()=>A(null)),3e3)}),[]),z=e.useCallback(((e=300)=>{if(k)return p.inProgress(),Promise.resolve([]);if(!$.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),W(e),Promise.resolve([])}y?y((()=>R(!0))):R(!0);const r=new Set;return G.current=r,$.current.postMessage(c(F.PING,null,j)),new Promise((t=>{setTimeout((()=>{R(!1),G.current===r&&(G.current=null),t(Array.from(r))}),e)}))}),[F.PING,j,W,k,y]),H=e.useCallback(((e,r,t={})=>{const s=$.current;if(!s){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const n=c(e,r,j,t);if(!P||P<0||w.includes(e))try{s.postMessage(n)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}else L.current.push(n),I.current||(I.current=setTimeout((()=>{if(O.current)return L.current=[],void(I.current=null);try{s.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r),O.current=!0}L.current=[],I.current=null}),P));d.sent(n),T((e=>[...e,n]))}),[j,W,P,w]),K=e.useCallback(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);x((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),Q=e.useCallback(((e={})=>{var r,t,s;const{ids:n=[],types:o=[],sync:a=!1}=null!=e?e:{};T((e=>n.length>0||o.length>0?e.filter((e=>{if(e.source!==j)return!0;const r=0===n.length||n.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),a&&(null===(r=$.current)||void 0===r||r.postMessage(c(F.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(s=e.types)&&void 0!==s?s:[]},j)))}),[]),X=e.useCallback(((e={})=>{const{source:r,type:t}=e;for(let e=N.length-1;e>=0;e--){const s=N[e],n=!r||s.source===r,o=!t||s.type===t;if(n&&o)return s}return null}),[N]),Y=e.useCallback((e=>{var r;try{const t=e.data;if(d.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===j)return;if(l(t)){if(t.type===F.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void x((s=>[...s.filter((s=>{if(s.source!==t.source)return!0;const n=0===e.length||e.includes(s.id),o=0===r.length||r.includes(s.type);return!(n&&o)}))]))}if(t.type===F.PING)return void(null===(r=$.current)||void 0===r||r.postMessage(c(F.PONG,null,j)));if(t.type===F.PONG){const e=t.source,r=G.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(J.length>0&&!J.includes(t.type))return void d.ignored(t.type);if(o(t))return void d.expired(t.id);const s=Date.now(),n=_.current.get(t.id);if(n&&s-n<S)return void d.duplicate(t.id);_.current.set(t.id,s),x((e=>C?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";g(r),W(r)}}),[j,J,C,W,F,S]),Z=e.useCallback((()=>{const e=$.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",Y),e.close(),i.closed(q),$.current=null)}),[Y,q]);return e.useEffect((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return g(e),void W(e)}const e=new BroadcastChannel(q);return $.current=e,i.created(q),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{Y({data:e})})):Y(e)})),()=>{Z()}}),[q,Y,W]),e.useEffect((()=>{if(u<=0)return;const e=setInterval((()=>{f.started();const e=N.length;V(),f.completed(e-N.length)}),u);return()=>{var r;clearInterval(e),M>0&&(null===(r=V.cancel)||void 0===r||r.call(V))}}),[u,V,M]),e.useEffect((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of _.current.entries())e-t>=S&&_.current.delete(r)}),6e4);return()=>clearInterval(e)}),[S]),e.useEffect((()=>()=>{if(L.current.length>0&&$.current&&!O.current){try{$.current.postMessage(L.current)}catch(e){const r="Failed to send message";g(r),W(r)}L.current=[],setTimeout((()=>{}),0)}I.current&&(clearTimeout(I.current),I.current=null),O.current=!1}),[]),{channelName:q,messages:N,sentMessages:B,isPingInProgress:k,ping:z,postMessage:H,clearReceivedMessages:K,clearSentMessages:Q,getLatestMessage:X,error:D,closeChannel:Z}},E=e.createContext(void 0);class b extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?r.jsx("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}exports.BroadcastProvider=({children:t,channelName:s})=>{const{messages:n,error:o}=C(s),[c,a]=e.useState(null),l=e.useRef(null);e.useEffect((()=>{if("undefined"==typeof BroadcastChannel)return void a("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return l.current=e,()=>{e.close()}}),[s]);const u=e.useMemo((()=>({messages:n,error:c||o,channel:l.current})),[n,c,o]);return r.jsx(b,{children:r.jsx(E.Provider,{value:u,children:t})})},exports.useBroadcastChannel=C,exports.useBroadcastProvider=()=>{const r=e.useContext(E);if(!r)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return r};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[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","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","useMemo","internalTypes","CLEAR_SENT_MESSAGES","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","postMessage","messageContent","channelCurrent","e","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","includes","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","interval","setInterval","before","clearInterval","call","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[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","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e,{useState as r,useRef as t,useMemo as n,useCallback as s,useEffect as o,createContext as a,useContext as c}from"react";import{jsx as i}from"react/jsx-runtime";const l="__INTERNAL__",u=()=>Math.random().toString(36).substr(2,9),d=(e,r)=>{const t=`${u()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},p=e=>!!e.expirationDate&&e.expirationDate<Date.now(),g=(e,r,t,n={})=>{var s;const o=Date.now();return{id:d(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?o+n.expirationDuration:void 0}},h=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${l}:${e}:${n}`},f=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${l}:`)&&"string"==typeof e.source,m=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},v={created:e=>m("info","Channel created:",e),closed:e=>m("info","Channel closed:",e)},y={sent:e=>m("info","Message sent:",e),received:e=>m("info","Message received:",e),cleared:e=>m("info","Message cleared:",e),expired:e=>m("info","Message expired:",e),duplicate:e=>m("warn","Duplicate message ignored:",e),allSentCleared:()=>m("info","All sent messages cleared"),allReceivedCleared:()=>m("info","All received messages cleared"),ignored:e=>m("info","Message ignored due to type filter:",e)},E={started:()=>m("info","Cleanup started"),completed:e=>m("info","Cleanup completed:",{removedCount:e})},S=e=>m("error","Error:",e),C="CLEAR_SENT_MESSAGES",b=(e,a={})=>{const{sourceName:c,cleaningInterval:i=1e3,keepLatestMessage:l=!1,registeredTypes:d=[],namespace:m="",deduplicationTTL:b=3e5,cleanupDebounceMs:w=0}=a,[M,D]=r([]),[$,A]=r([]),[B,T]=r(null),_=t(null),x=t(new Map),L=n((()=>c||`tab-${u()}`),[c]),N=n((()=>({CLEAR_SENT_MESSAGES:h(C,e,m)})),[e,m]),P=n((()=>`${e}-${m}`),[e,m]),R=n((()=>d),[JSON.stringify(d)]),I=s((()=>{D((e=>e.filter((e=>!p(e)))))}),[]),k=t(w>0?((e,r)=>{let t,n=null,s=null;const o=(...o)=>{s=o,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return o.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},o.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),o})(I,w):Object.assign(I,{cancel:()=>{}})).current,G=s((e=>{T(e),setTimeout((()=>T(null)),3e3)}),[]),j=s(((e,r,t={})=>{const n=_.current;if(!n){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S(e),void G(e)}try{const s=g(e,r,L,t);n.postMessage(s),y.sent(s),A((e=>[...e,s]))}catch(e){const r="Failed to send message";S(r),G(r)}}),[L,G]),O=s(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);D((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),F=s(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:a=!1}=null!=e?e:{};A((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==L)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),a&&(null===(r=_.current)||void 0===r||r.postMessage(g(N.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},L)))}),[]),J=s(((e={})=>{const{source:r,type:t}=e;for(let e=M.length-1;e>=0;e--){const n=M[e],s=!r||n.source===r,o=!t||n.type===t;if(s&&o)return n}return null}),[M]),U=s((e=>{try{const r=e.data;if(y.received(r),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(r))return;if(r.source===L)return;if(f(r)&&r.type===N.CLEAR_SENT_MESSAGES){const{ids:e=[],types:t=[]}=r.message||{};return void D((n=>[...n.filter((n=>{if(n.source!==r.source)return!0;const s=0===e.length||e.includes(n.id),o=0===t.length||t.includes(n.type);return!(s&&o)}))]))}if(R.length>0&&!R.includes(r.type))return void y.ignored(r.type);if(p(r))return void y.expired(r.id);const t=Date.now(),n=x.current.get(r.id);if(n&&t-n<b)return void y.duplicate(r.id);x.current.set(r.id,t),D((e=>l?[r]:[...e,r]))}catch(e){const r="Error processing broadcast message";S(r),G(r)}}),[L,R,l,G,N,b]),W=s((()=>{const e=_.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",U),e.close(),v.closed(P),_.current=null)}),[U,P]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return S(e),void G(e)}const e=new BroadcastChannel(P);return _.current=e,v.created(P),e.addEventListener("message",U),()=>{W()}}),[P,U,G]),o((()=>{if(i<=0)return;const e=setInterval((()=>{E.started();const e=M.length;k(),E.completed(e-M.length)}),i);return()=>{var r;clearInterval(e),w>0&&(null===(r=k.cancel)||void 0===r||r.call(k))}}),[i,k,w]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of x.current.entries())e-t>=b&&x.current.delete(r)}),6e4);return()=>clearInterval(e)}),[b]),{channelName:P,messages:M,sentMessages:$,postMessage:j,clearReceivedMessages:O,clearSentMessages:F,getLatestMessage:J,error:B,closeChannel:W}},w=a(void 0);class M extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?i("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}const D=({children:r,channelName:s})=>{const{messages:a,error:c}=b(s),[l,u]=e.useState(null),d=t(null);o((()=>{if("undefined"==typeof BroadcastChannel)return void u("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return d.current=e,()=>{e.close()}}),[s]);const p=n((()=>({messages:a,error:l||c,channel:d.current})),[a,l,c]);return i(M,{children:i(w.Provider,{value:p,children:r})})},$=()=>{const e=c(w);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{D as BroadcastProvider,b as useBroadcastChannel,$ as useBroadcastProvider};
1
+ import e,{useState as r,useRef as t,useMemo as n,useCallback as s,useEffect as o,createContext as c,useContext as a}from"react";import{jsx as i}from"react/jsx-runtime";const l="__INTERNAL__",u=()=>Math.random().toString(36).substr(2,9),d=(e,r)=>{const t=`${u()}-${e}-${r}`;return btoa(t).replace(/=+$/,"")},p=e=>!!e.expirationDate&&e.expirationDate<Date.now(),g=(e,r,t,n={})=>{var s;const o=Date.now();return{id:d(t,o),type:e,message:r,timestamp:o,source:t,expirationDate:null!==(s=n.expirationDate)&&void 0!==s?s:n.expirationDuration?o+n.expirationDuration:void 0}},h=(e,r,t="")=>{const n=btoa(`react-broadcast-sync:${e}:${`${r}-${t}`}`);return`${l}:${e}:${n}`},f=e=>e&&"object"==typeof e&&"string"==typeof e.type&&e.type.startsWith(`${l}:`)&&"string"==typeof e.source,m=(e,r,t)=>{if("undefined"==typeof process||!process.env||"true"!==process.env.REACT_APP_DEBUG_BROADCAST)return;const n=`[${(new Date).toISOString()}] [react-broadcast-sync]`;switch(e){case"info":console.log(n,r,t||"");break;case"warn":console.warn(n,r,t||"");break;case"error":console.error(n,r,t||"")}},y={created:e=>m("info","Channel created:",e),closed:e=>m("info","Channel closed:",e)},v={sent:e=>m("info","Message sent:",e),received:e=>m("info","Message received:",e),cleared:e=>m("info","Message cleared:",e),expired:e=>m("info","Message expired:",e),duplicate:e=>m("warn","Duplicate message ignored:",e),allSentCleared:()=>m("info","All sent messages cleared"),allReceivedCleared:()=>m("info","All received messages cleared"),ignored:e=>m("info","Message ignored due to type filter:",e)},E={inProgress:()=>m("warn","Ping already in progress. Skipping call.")},S={started:()=>m("info","Cleanup started"),completed:e=>m("info","Cleanup completed:",{removedCount:e})},b=e=>m("error","Error:",e),P="CLEAR_SENT_MESSAGES",w="PING",M="PONG";let C;if("test"===process.env.NODE_ENV)try{C=require("react-dom").flushSync}catch(e){}const N=(e,c={})=>{const{sourceName:a,cleaningInterval:i=1e3,keepLatestMessage:l=!1,registeredTypes:d=[],namespace:m="",deduplicationTTL:N=3e5,cleanupDebounceMs:T=0,batchingDelayMs:D=20,excludedBatchMessageTypes:A=[]}=c,[B,$]=r([]),[_,G]=r([]),[x,I]=r(null),[L,O]=r(!1),R=t(null),k=t(new Map),j=t(null),F=t(null),q=t([]),J=t(!1),U=n((()=>a||`tab-${u()}`),[a]),V=n((()=>({CLEAR_SENT_MESSAGES:h(P,e,m),PING:h(w,e,m),PONG:h(M,e,m)})),[e,m]),W=n((()=>m?`${e}-${m}`:e),[e,m]),z=n((()=>d),[JSON.stringify(d)]),H=s((()=>{$((e=>e.filter((e=>!p(e)))))}),[]),K=t(T>0?((e,r)=>{let t,n=null,s=null;const o=(...o)=>{s=o,null!==n&&clearTimeout(n),n=setTimeout((()=>{n=null,null!==s&&(t=e(...s),s=null)}),r)};return o.cancel=()=>{null!==n&&(clearTimeout(n),n=null,s=null)},o.flush=()=>(null!==n&&(clearTimeout(n),n=null,null!==s&&(t=e(...s),s=null)),t),o})(H,T):Object.assign(H,{cancel:()=>{}})).current,Q=s((e=>{I(e),setTimeout((()=>I(null)),3e3)}),[]),X=s(((e=300)=>{if(L)return E.inProgress(),Promise.resolve([]);if(!R.current){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),Q(e),Promise.resolve([])}C?C((()=>O(!0))):O(!0);const r=new Set;return j.current=r,R.current.postMessage(g(V.PING,null,U)),new Promise((t=>{setTimeout((()=>{O(!1),j.current===r&&(j.current=null),t(Array.from(r))}),e)}))}),[V.PING,U,Q,L,C]),Y=s(((e,r,t={})=>{const n=R.current;if(!n){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const s=g(e,r,U,t);if(!D||D<0||A.includes(e))try{n.postMessage(s)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}else q.current.push(s),F.current||(F.current=setTimeout((()=>{if(J.current)return q.current=[],void(F.current=null);try{n.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r),J.current=!0}q.current=[],F.current=null}),D));v.sent(s),G((e=>[...e,s]))}),[U,Q,D,A]),Z=s(((e={})=>{const r=Boolean(e.ids&&e.ids.length||e.types&&e.types.length||e.sources&&e.sources.length);$((t=>r?t.filter((r=>!(e.ids&&e.ids.includes(r.id)||e.types&&e.types.includes(r.type)||e.sources&&e.sources.includes(r.source)))):[]))}),[]),ee=s(((e={})=>{var r,t,n;const{ids:s=[],types:o=[],sync:c=!1}=null!=e?e:{};G((e=>s.length>0||o.length>0?e.filter((e=>{if(e.source!==U)return!0;const r=0===s.length||s.includes(e.id),t=0===o.length||o.includes(e.type);return!(r&&t)})):[])),c&&(null===(r=R.current)||void 0===r||r.postMessage(g(V.CLEAR_SENT_MESSAGES,{ids:null!==(t=e.ids)&&void 0!==t?t:[],types:null!==(n=e.types)&&void 0!==n?n:[]},U)))}),[]),re=s(((e={})=>{const{source:r,type:t}=e;for(let e=B.length-1;e>=0;e--){const n=B[e],s=!r||n.source===r,o=!t||n.type===t;if(s&&o)return n}return null}),[B]),te=s((e=>{var r;try{const t=e.data;if(v.received(t),!(e=>Boolean(e&&"object"==typeof e&&"id"in e))(t))return;if(t.source===U)return;if(f(t)){if(t.type===V.CLEAR_SENT_MESSAGES){const{ids:e=[],types:r=[]}=t.message||{};return void $((n=>[...n.filter((n=>{if(n.source!==t.source)return!0;const s=0===e.length||e.includes(n.id),o=0===r.length||r.includes(n.type);return!(s&&o)}))]))}if(t.type===V.PING)return void(null===(r=R.current)||void 0===r||r.postMessage(g(V.PONG,null,U)));if(t.type===V.PONG){const e=t.source,r=j.current;return void(r&&!1===r.has(e)&&r.add(e))}}if(z.length>0&&!z.includes(t.type))return void v.ignored(t.type);if(p(t))return void v.expired(t.id);const n=Date.now(),s=k.current.get(t.id);if(s&&n-s<N)return void v.duplicate(t.id);k.current.set(t.id,n),$((e=>l?[t]:[...e,t]))}catch(e){const r="Error processing broadcast message";b(r),Q(r)}}),[U,z,l,Q,V,N]),ne=s((()=>{const e=R.current;e&&"function"==typeof e.close&&(e.removeEventListener("message",te),e.close(),y.closed(W),R.current=null)}),[te,W]);return o((()=>{if("undefined"==typeof BroadcastChannel){const e="BroadcastChannel is not supported in this browser. Please check browser compatibility.";return b(e),void Q(e)}const e=new BroadcastChannel(W);return R.current=e,y.created(W),e.addEventListener("message",(e=>{Array.isArray(e.data)?e.data.forEach((e=>{te({data:e})})):te(e)})),()=>{ne()}}),[W,te,Q]),o((()=>{if(i<=0)return;const e=setInterval((()=>{S.started();const e=B.length;K(),S.completed(e-B.length)}),i);return()=>{var r;clearInterval(e),T>0&&(null===(r=K.cancel)||void 0===r||r.call(K))}}),[i,K,T]),o((()=>{const e=setInterval((()=>{const e=Date.now();for(const[r,t]of k.current.entries())e-t>=N&&k.current.delete(r)}),6e4);return()=>clearInterval(e)}),[N]),o((()=>()=>{if(q.current.length>0&&R.current&&!J.current){try{R.current.postMessage(q.current)}catch(e){const r="Failed to send message";b(r),Q(r)}q.current=[],setTimeout((()=>{}),0)}F.current&&(clearTimeout(F.current),F.current=null),J.current=!1}),[]),{channelName:W,messages:B,sentMessages:_,isPingInProgress:L,ping:X,postMessage:Y,clearReceivedMessages:Z,clearSentMessages:ee,getLatestMessage:re,error:x,closeChannel:ne}},T=c(void 0);class D extends e.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("BroadcastChannel error:",e)}render(){return this.state.hasError?i("div",{children:"Error occurred in BroadcastProvider"}):this.props.children}}const A=({children:r,channelName:s})=>{const{messages:c,error:a}=N(s),[l,u]=e.useState(null),d=t(null);o((()=>{if("undefined"==typeof BroadcastChannel)return void u("BroadcastChannel is not supported in this browser. Please check browser compatibility.");const e=new BroadcastChannel(s);return d.current=e,()=>{e.close()}}),[s]);const p=n((()=>({messages:c,error:l||a,channel:d.current})),[c,l,a]);return i(D,{children:i(T.Provider,{value:p,children:r})})},B=()=>{const e=a(T);if(!e)throw new Error("useBroadcastProvider must be used within a BroadcastProvider");return e};export{A as BroadcastProvider,N as useBroadcastChannel,B as useBroadcastProvider};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[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","started","completed","removedCount","INTERNAL_MESSAGE_TYPES","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","messages","setMessages","useState","sentMessages","setSentMessages","setError","channel","useRef","receivedMessageIds","Map","useMemo","internalTypes","CLEAR_SENT_MESSAGES","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","postMessage","messageContent","channelCurrent","e","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","includes","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","interval","setInterval","before","clearInterval","call","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/messageUtils.ts","../src/utils/debug.ts","../src/hooks/useBroadcastChannel.ts","../src/BroadcastProvider.tsx"],"sourcesContent":[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","INTERNAL_MESSAGE_TYPES","flushSyncFn","NODE_ENV","require","flushSync","useBroadcastChannel","sourceName","cleaningInterval","keepLatestMessage","registeredTypes","deduplicationTTL","cleanupDebounceMs","batchingDelayMs","excludedBatchMessageTypes","messages","setMessages","useState","sentMessages","setSentMessages","setError","isPingInProgress","setIsPingInProgress","channel","useRef","receivedMessageIds","Map","activeSourcesCollector","batchingTimeoutRef","batchingMessagesRef","batchingErrorRef","useMemo","internalTypes","CLEAR_SENT_MESSAGES","PING","PONG","resolvedChannelName","stableRegisteredTypes","JSON","stringify","performCleanup","useCallback","prev","filter","msg","debouncedCleanup","debounce","fn","wait","result","timeoutId","lastArgs","debounced","args","clearTimeout","setTimeout","cancel","flush","Object","assign","current","setErrorMessage","ping","timeoutMs","Promise","resolve","collector","Set","postMessage","Array","from","messageContent","channelCurrent","includes","e","push","clearReceivedMessages","hasFilters","Boolean","ids","length","types","sources","clearSentMessages","sync","idMatches","typeMatches","_b","_c","getLatestMessage","i","sourceMatches","handleMessage","event","isValidMessage","pongSource","has","add","receivedAt","get","set","closeChannel","bc","close","removeEventListener","useEffect","BroadcastChannel","addEventListener","isArray","forEach","interval","setInterval","before","clearInterval","call","key","entries","delete","BroadcastChannelContext","createContext","ErrorBoundary","React","Component","constructor","this","state","hasError","getDerivedStateFromError","componentDidCatch","render","_jsx","props","children","BroadcastProvider","hookError","value","Provider","useBroadcastProvider","context","useContext","Error"],"mappings":"wKAEA,MAAMA,EAAkB,eAIXC,EAAqBA,IAAMC,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,GAMhEC,EAAoBA,CAACC,EAAgBC,KAChD,MAAMC,EAAM,GAAGR,OAAwBM,KAAUC,IACjD,OAAOE,KAAKD,GAAKE,QAAQ,MAAO,KASrBC,EAAoBC,KACxBA,EAAQC,gBAAiBD,EAAQC,eAAiBC,KAAKC,MAInDC,EAAgBA,CAC3BC,EACAC,EACAZ,EACAa,EAAoE,CAAA,WAEpE,MAAMZ,EAAYO,KAAKC,MACvB,MAAO,CACLK,GAAIf,EAAkBC,EAAQC,GAC9BU,OACAL,QAASM,EACTX,YACAD,SACAO,eAEE,UADAM,EAAQN,sBACR,IAAAQ,EAAAA,EAACF,EAAQG,mBAAqBf,EAAYY,EAAQG,wBAAqBC,IAIhEC,EAAyBA,CACpCC,EACAC,EACAC,EAAY,MAEZ,MAEMC,EAAOnB,KADC,wBAAagB,KADP,GAAGC,KAAeC,OAGtC,MAAO,GAAG5B,KAAmB0B,KAAYG,KAO9BC,EAA+BjB,GAExCA,GACmB,iBAAZA,GACiB,iBAAjBA,EAAQK,MACAL,EAAQK,KARba,WAAW,GAAG/B,OASE,iBAAnBa,EAAQN,OCzDbyB,EAAMA,CAACC,EAAiBpB,EAAiBqB,KAC7C,GATuB,oBAAZC,UAA2BA,QAAQC,KACK,SAA1CD,QAAQC,IAAIC,0BAQD,OAEpB,MACMC,EAAS,KADG,IAAIvB,MAAOwB,wCAE7B,OAAQN,GACN,IAAK,OACHO,QAAQR,IAAIM,EAAQzB,EAASqB,GAAQ,IACrC,MACF,IAAK,OACHM,QAAQC,KAAKH,EAAQzB,EAASqB,GAAQ,IACtC,MACF,IAAK,QACHM,QAAQE,MAAMJ,EAAQzB,EAASqB,GAAQ,MAKhCS,EACF,CACPC,QAAUC,GAAiBb,EAAI,OAAQ,mBAAoBa,GAC3DC,OAASD,GAAiBb,EAAI,OAAQ,kBAAmBa,IAHhDF,EAKF,CACPI,KAAOlC,GAAiBmB,EAAI,OAAQ,gBAAiBnB,GACrDmC,SAAWnC,GAAiBmB,EAAI,OAAQ,oBAAqBnB,GAC7DoC,QAAUC,GAAsBlB,EAAI,OAAQ,mBAAoBkB,GAChEC,QAAUD,GAAsBlB,EAAI,OAAQ,mBAAoBkB,GAChEE,UAAYF,GAAsBlB,EAAI,OAAQ,6BAA8BkB,GAC5EG,eAAgBA,IAAMrB,EAAI,OAAQ,6BAClCsB,mBAAoBA,IAAMtB,EAAI,OAAQ,iCACtCuB,QAAUC,GACRxB,EAAI,OAAQ,sCAAuCwB,IAd5Cb,EAgBL,CACJc,WAAYA,IAAMzB,EAAI,OAAQ,6CAjBrBW,EAmBF,CACPe,QAASA,IAAM1B,EAAI,OAAQ,mBAC3B2B,UAAYC,GAAyB5B,EAAI,OAAQ,qBAAsB,CAAE4B,kBArBhEjB,EAuBHD,GAAkBV,EAAI,QAAS,SAAUU,GC9B7CmB,EACiB,sBADjBA,EAEE,OAFFA,EAGE,OAGR,IAAIC,EACJ,GAA6B,SAAzB3B,QAAQC,IAAI2B,SACd,IAEED,EAAcE,QAAQ,aAAaC,SACpC,CAAC,MAAA3C,GACA,CAcG,MAAM4C,EAAsBA,CACjCvC,EACAP,EAA4B,MAE5B,MAAM+C,WACJA,EAAUC,iBACVA,EAAmB,IAAIC,kBACvBA,GAAoB,EAAKC,gBACzBA,EAAkB,GAAE1C,UACpBA,EAAY,GAAE2C,iBACdA,EAAmB,IAAaC,kBAChCA,EAAoB,EAACC,gBACrBA,EAAkB,GAAEC,0BACpBA,EAA4B,IAC1BtD,GAGGuD,EAAUC,GAAeC,EAA6B,KACtDC,EAAcC,GAAmBF,EAA6B,KAC9DnC,EAAOsC,GAAYH,EAAwB,OAC3CI,EAAkBC,GAAuBL,GAAS,GAGnDM,EAAUC,EAAgC,MAC1CC,EAAqBD,EAAO,IAAIE,KAChCC,EAAyBH,EAA2B,MACpDI,EAAqBJ,EAA8B,MACnDK,EAAsBL,EAA2B,IACjDM,EAAmBN,GAAO,GAG1B7E,EAASoF,GAAQ,IAAMxB,GFtES,OAAOlE,OEsEoB,CAACkE,IAC5DyB,EAAgBD,GACpB,KAAO,CACLE,oBAAqBpE,EACnBoC,EACAlC,EACAC,GAEFkE,KAAMrE,EAAuBoC,EAA6BlC,EAAaC,GACvEmE,KAAMtE,EAAuBoC,EAA6BlC,EAAaC,MAEzE,CAACD,EAAaC,IAGVoE,EAAsBL,GAAQ,IAE3B/D,EAAY,GAAGD,KAAeC,IAAcD,GAClD,CAACA,EAAaC,IAEXqE,EAAwBN,GAAQ,IAAMrB,GAAiB,CAAC4B,KAAKC,UAAU7B,KAEvE8B,EAAiBC,GAAY,KACjCzB,GAAY0B,GAAQA,EAAKC,QAAOC,IAAQ5F,EAAiB4F,SACxD,IAEGC,EAAmBrB,EAIvBZ,EAAoB,EFpCAkC,EACtBC,EACAC,KAKA,IAEIC,EAFAC,EAAkD,KAClDC,EAAiC,KAGrC,MAAMC,EAAYA,IAAIC,KACpBF,EAAWE,EACO,OAAdH,GACFI,aAAaJ,GAEfA,EAAYK,YAAW,KACrBL,EAAY,KACK,OAAbC,IACFF,EAASF,KAAMI,GACfA,EAAW,QAEZH,IAuBL,OApBAI,EAAUI,OAAS,KACC,OAAdN,IACFI,aAAaJ,GACbA,EAAY,KACZC,EAAW,OAIfC,EAAUK,MAAQ,KACE,OAAdP,IACFI,aAAaJ,GACbA,EAAY,KACK,OAAbC,IACFF,EAASF,KAAMI,GACfA,EAAW,OAGRF,GAGFG,GERDN,CAASN,EAAgB5B,GACzB8C,OAAOC,OAAOnB,EAAgB,CAAEgB,OAAQA,UAC5CI,QAEIC,EAAkBpB,GAAa3D,IACnCsC,EAAStC,GACTyE,YAAW,IAAMnC,EAAS,OAAO,OAChC,IAEG0C,EAAOrB,GACX,CAACsB,EAAoB,OACnB,GAAI1C,EAEF,OADAtC,EAAWc,aACJmE,QAAQC,QAAQ,IAGzB,IAAK1C,EAAQqC,QAAS,CACpB,MAAM9E,EACJ,yFAGF,OAFAC,EAAYD,GACZ+E,EAAgB/E,GACTkF,QAAQC,QAAQ,GACzB,CAGI/D,EACFA,GAAY,IAAMoB,GAAoB,KAEtCA,GAAoB,GAEtB,MAAM4C,EAAY,IAAIC,IAKtB,OAJAxC,EAAuBiC,QAAUM,EAEjC3C,EAAQqC,QAAQQ,YAAY/G,EAAc2E,EAAcE,KAAM,KAAMvF,IAE7D,IAAIqH,SAAQC,IACjBV,YAAW,KACTjC,GAAoB,GAChBK,EAAuBiC,UAAYM,IACrCvC,EAAuBiC,QAAU,MAEnCK,EAAQI,MAAMC,KAAKJ,MAClBH,QAGP,CAAC/B,EAAcE,KAAMvF,EAAQkH,EAAiBxC,EAAkBnB,IAG5DkE,EAAc3B,GAClB,CAAC7C,EAAqB2E,EAAqB/G,EAA8B,MACvE,MAAMgH,EAAiBjD,EAAQqC,QAC/B,IAAKY,EAAgB,CACnB,MAAM1F,EACJ,yFAGF,OAFAC,EAAYD,QACZ+E,EAAgB/E,EAElB,CAEA,MAAM7B,EAAUI,EAAcuC,EAAa2E,EAAgB5H,EAAQa,GAInE,IADGqD,GAAmBA,EAAkB,GAAKC,EAA0B2D,SAAS7E,GAE9E,IACE4E,EAAeJ,YAAYnH,EAC5B,CAAC,MAAOyH,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,GAChBgD,EAAiB8B,SAAU,CAC7B,MAEA/B,EAAoB+B,QAAQe,KAAK1H,GAC5B2E,EAAmBgC,UACtBhC,EAAmBgC,QAAUL,YAAW,KACtC,GAAIzB,EAAiB8B,QAGnB,OAFA/B,EAAoB+B,QAAU,QAC9BhC,EAAmBgC,QAAU,MAG/B,IACEY,EAAeJ,YAAYvC,EAAoB+B,QAChD,CAAC,MAAOc,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,GAChBgD,EAAiB8B,SAAU,CAC7B,CACA/B,EAAoB+B,QAAU,GAC9BhC,EAAmBgC,QAAU,OAC5B/C,IAGP9B,EAAcI,KAAKlC,GACnBkE,GAAgBuB,GAAQ,IAAIA,EAAMzF,OAEpC,CAACN,EAAQkH,EAAiBhD,EAAiBC,IAGvC8D,EAAwBnC,GAAY,CAACjF,EAAwC,CAAA,KACjF,MAAMqH,EAAaC,QAChBtH,EAAQuH,KAAOvH,EAAQuH,IAAIC,QACzBxH,EAAQyH,OAASzH,EAAQyH,MAAMD,QAC/BxH,EAAQ0H,SAAW1H,EAAQ0H,QAAQF,QAGxChE,GAAY0B,GACVmC,EACInC,EAAKC,QACHC,KACIpF,EAAQuH,KAAOvH,EAAQuH,IAAIN,SAAS7B,EAAInF,KACxCD,EAAQyH,OAASzH,EAAQyH,MAAMR,SAAS7B,EAAItF,OAC5CE,EAAQ0H,SAAW1H,EAAQ0H,QAAQT,SAAS7B,EAAIjG,WAEtD,OAEL,IAEGwI,GAAoB1C,GAAY,CAACjF,EAAoC,CAAA,eACzE,MAAMuH,IAAEA,EAAM,GAAEE,MAAEA,EAAQ,GAAEG,KAAEA,GAAO,GAAU5H,QAAAA,EAAW,CAAE,EAC5D2D,GAAgBuB,GACdqC,EAAIC,OAAS,GAAKC,EAAMD,OAAS,EAC7BtC,EAAKC,QAAOC,IAEV,GAAIA,EAAIjG,SAAWA,EAAQ,OAAO,EAKlC,MAAM0I,EAA2B,IAAfN,EAAIC,QAAgBD,EAAIN,SAAS7B,EAAInF,IACjD6H,EAA+B,IAAjBL,EAAMD,QAAgBC,EAAMR,SAAS7B,EAAItF,MAG7D,QAAS+H,GAAaC,MAExB,KAEFF,IACa,QAAf1H,EAAA6D,EAAQqC,eAAO,IAAAlG,GAAAA,EAAE0G,YACf/G,EACE2E,EAAcC,oBACd,CAAE8C,YAAKQ,EAAA/H,EAAQuH,mBAAO,GAAIE,MAAoB,UAAbzH,EAAQyH,aAAK,IAAAO,EAAAA,EAAI,IAClD7I,OAIL,IAEG8I,GAAmBhD,GACvB,CAACjF,EAAmC,CAAA,KAClC,MAAMb,OAAEA,EAAMW,KAAEA,GAASE,EAEzB,IAAK,IAAIkI,EAAI3E,EAASiE,OAAS,EAAGU,GAAK,EAAGA,IAAK,CAC7C,MAAM9C,EAAM7B,EAAS2E,GACfC,GAAiBhJ,GAAUiG,EAAIjG,SAAWA,EAC1C2I,GAAehI,GAAQsF,EAAItF,OAASA,EAC1C,GAAIqI,GAAiBL,EACnB,OAAO1C,CAEX,CAEA,OAAO,OAET,CAAC7B,IAGG6E,GAAgBnD,GACnBoD,UACC,IACE,MAAM5I,EAA4B4I,EAAMvH,KAGxC,GAFAS,EAAcK,SAASnC,IFtQAA,IACtB6H,QAAQ7H,GAA8B,iBAAZA,GAAwB,OAAQA,GEuQtD6I,CAAe7I,GAAU,OAC9B,GAAIA,EAAQN,SAAWA,EAAQ,OAC/B,GAAIuB,EAA4BjB,GAAU,CACxC,GAAIA,EAAQK,OAAS0E,EAAcC,oBAAqB,CACtD,MAAM8C,IAAEA,EAAM,GAAEE,MAAEA,EAAQ,IAAQhI,EAAgBA,SAAW,CAAE,EAiB/D,YAfA+D,GAAY0B,GAAQ,IACfA,EAAKC,QAAOC,IAEb,GAAIA,EAAIjG,SAAWM,EAAQN,OAAQ,OAAO,EAK1C,MAAM0I,EAA2B,IAAfN,EAAIC,QAAgBD,EAAIN,SAAS7B,EAAInF,IACjD6H,EAA+B,IAAjBL,EAAMD,QAAgBC,EAAMR,SAAS7B,EAAItF,MAE7D,QAAS+H,GAAaC,QAK5B,CACA,GAAIrI,EAAQK,OAAS0E,EAAcE,KAEjC,YADiB,QAAjBxE,EAAA6D,EAAQqC,eAAS,IAAAlG,GAAAA,EAAA0G,YAAY/G,EAAc2E,EAAcG,KAAM,KAAMxF,KAIvE,GAAIM,EAAQK,OAAS0E,EAAcG,KAAM,CACvC,MAAM4D,EAAa9I,EAAQN,OACrBuH,EAAYvC,EAAuBiC,QAMzC,YAJIM,IAA2C,IAA9BA,EAAU8B,IAAID,IAC7B7B,EAAU+B,IAAIF,GAIlB,CACF,CACA,GAAI1D,EAAsB2C,OAAS,IAAM3C,EAAsBoC,SAASxH,EAAQK,MAE9E,YADAyB,EAAcY,QAAQ1C,EAAQK,MAGhC,GAAIN,EAAiBC,GAEnB,YADA8B,EAAcQ,QAAQtC,EAAQQ,IAIhC,MAAML,EAAMD,KAAKC,MACX8I,EAAazE,EAAmBmC,QAAQuC,IAAIlJ,EAAQQ,IAC1D,GAAIyI,GAAc9I,EAAM8I,EAAavF,EAEnC,YADA5B,EAAcS,UAAUvC,EAAQQ,IAIlCgE,EAAmBmC,QAAQwC,IAAInJ,EAAQQ,GAAIL,GAC3C4D,GAAY0B,GAASjC,EAAoB,CAACxD,GAAW,IAAIyF,EAAMzF,IAChE,CAAC,MAAOyH,GACP,MAAM5F,EAAQ,qCACdC,EAAYD,GACZ+E,EAAgB/E,EAClB,IAEF,CACEnC,EACA0F,EACA5B,EACAoD,EACA7B,EACArB,IAIE0F,GAAe5D,GAAY,KAC/B,MAAM6D,EAAK/E,EAAQqC,QACf0C,GAA0B,mBAAbA,EAAGC,QAClBD,EAAGE,oBAAoB,UAAWZ,IAClCU,EAAGC,QACHxH,EAAcG,OAAOkD,GACrBb,EAAQqC,QAAU,QAEnB,CAACgC,GAAexD,IAqFnB,OAnFAqE,GAAU,KACR,GAAgC,oBAArBC,iBAAkC,CAC3C,MAAM5H,EACJ,yFAGF,OAFAC,EAAYD,QACZ+E,EAAgB/E,EAElB,CAEA,MAAMwH,EAAK,IAAII,iBAAiBtE,GAchC,OAbAb,EAAQqC,QAAU0C,EAClBvH,EAAcC,QAAQoD,GAEtBkE,EAAGK,iBAAiB,WAAYd,IAE1BxB,MAAMuC,QAAQf,EAAMvH,MACtBuH,EAAMvH,KAAKuI,SAAS5J,IAClB2I,GAAc,CAAEtH,KAAMrB,OAGxB2I,GAAcC,MAGX,KACLQ,QAED,CAACjE,EAAqBwD,GAAe/B,IAExC4C,GAAU,KACR,GAAIjG,GAAoB,EAAG,OAE3B,MAAMsG,EAAWC,aAAY,KAC3BhI,EAAce,UACd,MAAMkH,EAASjG,EAASiE,OACxBnC,IACA9D,EAAcgB,UAAUiH,EAASjG,EAASiE,UACzCxE,GAEH,MAAO,WACLyG,cAAcH,GAEVlG,EAAoB,IACC,QAAvBlD,EAAAmF,EAAiBW,cAAM,IAAA9F,GAAAA,EAAAwJ,KAAArE,OAG1B,CAACrC,EAAkBqC,EAAkBjC,IAExC6F,GAAU,KACR,MAAMK,EAAWC,aAAY,KAC3B,MAAM3J,EAAMD,KAAKC,MACjB,IAAK,MAAO+J,EAAKvK,KAAc6E,EAAmBmC,QAAQwD,UACpDhK,EAAMR,GAAa+D,GACrBc,EAAmBmC,QAAQyD,OAAOF,KAGrC,KAEH,MAAO,IAAMF,cAAcH,KAC1B,CAACnG,IAEJ8F,GAAU,IACD,KAEL,GAAI5E,EAAoB+B,QAAQoB,OAAS,GAAKzD,EAAQqC,UAAY9B,EAAiB8B,QAAS,CAC1F,IACErC,EAAQqC,QAAQQ,YAAYvC,EAAoB+B,QACjD,CAAC,MAAOc,GACP,MAAM5F,EAAQ,yBACdC,EAAYD,GACZ+E,EAAgB/E,EAClB,CACA+C,EAAoB+B,QAAU,GAE9BL,YAAW,QAAU,EACvB,CACI3B,EAAmBgC,UACrBN,aAAa1B,EAAmBgC,SAChChC,EAAmBgC,QAAU,MAE/B9B,EAAiB8B,SAAU,IAE5B,IAEI,CACL7F,YAAaqE,EACbrB,WACAG,eACAG,mBACAyC,OACAM,cACAQ,wBACAO,qBACAM,oBACA3G,QACAuH,kBCjcEiB,EAA0BC,OAAiD3J,GAMjF,MAAM4J,UAAsBC,EAAMC,UAAlCC,WAAAA,uBACEC,KAAAC,MAAQ,CAAEC,UAAU,EAgBtB,CAdE,+BAAOC,GACL,MAAO,CAAED,UAAU,EACrB,CAEAE,iBAAAA,CAAkBlJ,GAChBF,QAAQE,MAAM,0BAA2BA,EAC3C,CAEAmJ,MAAAA,GACE,OAAIL,KAAKC,MAAMC,SACNI,0DAEFN,KAAKO,MAAMC,QACpB,EAQK,MAAMC,EAAsDA,EAAGD,WAAUrK,kBAC9E,MAAMgD,SAAEA,EAAUjC,MAAOwJ,GAAchI,EAAoBvC,IAEpDe,EAAOsC,GAAYqG,EAAMxG,SAAwB,MAClDM,EAAUC,EAAgC,MAEhDiF,GAAU,KACR,GAAgC,oBAArBC,iBAIT,YAHAtF,EACE,0FAIJ,MAAMkF,EAAK,IAAII,iBAAiB3I,GAGhC,OAFAwD,EAAQqC,QAAU0C,EAEX,KACLA,EAAGC,WAEJ,CAACxI,IAEJ,MAAMwK,EAAQxG,GACZ,KAAO,CAAEhB,WAAUjC,MAAOA,GAASwJ,EAAW/G,QAASA,EAAQqC,WAC/D,CAAC7C,EAAUjC,EAAOwJ,IAGpB,OACEJ,EAACV,EACC,CAAAY,SAAAF,EAACZ,EAAwBkB,SAAS,CAAAD,MAAOA,EAAKH,SAAGA,OAK1CK,EAAuBA,KAClC,MAAMC,EAAUC,EAAWrB,GAC3B,IAAKoB,EACH,MAAM,IAAIE,MAAM,gEAElB,OAAOF"}
@@ -16,6 +16,10 @@ export interface BroadcastOptions {
16
16
  deduplicationTTL?: number;
17
17
  /** Debounce time for messages cleanup in milliseconds (default: 1000) */
18
18
  cleanupDebounceMs?: number;
19
+ /** Delay in milliseconds for batching messages (default: 20) */
20
+ batchingDelayMs?: number;
21
+ /** Array of message types that should not be batched and sent immediately (default: []) */
22
+ excludedBatchMessageTypes?: string[];
19
23
  }
20
24
  /**
21
25
  * Options for sending messages
@@ -67,6 +71,10 @@ export interface BroadcastActions {
67
71
  messages: BroadcastMessage[];
68
72
  /** Array of sent messages */
69
73
  sentMessages: BroadcastMessage[];
74
+ /** Whether a ping operation is currently in progress */
75
+ isPingInProgress: boolean;
76
+ /** Function to ping the channel and get active sources */
77
+ ping: (timeoutMs?: number) => Promise<string[]>;
70
78
  /** Function to send a message */
71
79
  postMessage: (messageType: string, messageContent: any, options?: SendMessageOptions) => void;
72
80
  /** Function to clear received messages */
@@ -81,3 +89,4 @@ export interface BroadcastActions {
81
89
  error: string | null;
82
90
  }
83
91
  export type ClearMessage = 'CLEAR_SENT_MESSAGES';
92
+ export type InternalMessage = ClearMessage | 'PING' | 'PONG';
@@ -13,6 +13,9 @@ export declare const debug: {
13
13
  allReceivedCleared: () => void;
14
14
  ignored: (messageType: string) => void;
15
15
  };
16
+ ping: {
17
+ inProgress: () => void;
18
+ };
16
19
  cleanup: {
17
20
  started: () => void;
18
21
  completed: (removedCount: number) => void;
@@ -1,4 +1,4 @@
1
- import { ClearMessage } from '../types/types';
1
+ import { InternalMessage } from '../types/types';
2
2
  export declare const generateRandomPart: () => string;
3
3
  export declare const generateSourceName: () => string;
4
4
  export declare const generateMessageId: (source: string, timestamp: number) => string;
@@ -10,7 +10,7 @@ export declare const createMessage: (type: string, content: any, source: string,
10
10
  expirationDate?: number;
11
11
  expirationDuration?: number;
12
12
  }) => any;
13
- export declare const getInternalMessageType: (baseType: ClearMessage, channelName: string, namespace?: string) => string;
13
+ export declare const getInternalMessageType: (baseType: InternalMessage, channelName: string, namespace?: string) => string;
14
14
  export declare const isInternalType: (type: string) => boolean;
15
15
  export declare const isValidInternalClearMessage: (message: any) => boolean;
16
16
  export declare const debounce: <T extends (...args: any[]) => any>(fn: T, wait: number) => ((...args: Parameters<T>) => void) & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-broadcast-sync",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "A lightweight React hook and provider for syncing state across browser tabs using BroadcastChannel API.",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",