UNPKG

@kontext.dev/kontext-sdk

Version:

Unified SDK for AI-powered context and personalization

3 lines 2.28 kB
import {b}from'../chunk-R7SVWTTH.js';export{r as KontextConnectButton,a as KontextProvider,s as KontextStatus,b as useKontext,c as useKontextProfile}from'../chunk-R7SVWTTH.js';import'../chunk-LKUOP2A6.js';import'../chunk-AXQVSE5D.js';import'../chunk-FRDJ4LIP.js';import {useState,useRef,useEffect}from'react';import {useQueryClient}from'@tanstack/react-query';import {createWSClient,createTRPCClient,splitLink,httpBatchLink,wsLink}from'@trpc/client';import R from'superjson';function A(a={}){let{userId:e,apiKey:n}=b(),o=useQueryClient(),[l,r]=useState({isConnected:false,lastUpdate:null,updateCount:0,recentUpdates:[]}),{enabled:i=true,onUpdate:f}=a,m=useRef(f);m.current=f;let s=useRef(true);return useEffect(()=>{if(s.current=true,!i||!e||!n)return;let u=false,x=process.env.NEXT_PUBLIC_KONTEXT_API_URL||"https://api.kontext.dev",K=x.replace("https://","wss://").replace("http://","ws://"),C=createWSClient({url:`${K}/trpc`,connectionParams:async()=>({"x-api-key":n})}),w=createTRPCClient({links:[splitLink({condition:t=>t.type==="subscription",true:wsLink({client:C,transformer:R}),false:httpBatchLink({url:`${x}/trpc`,headers:{"x-api-key":n},transformer:R})})]}),d;try{d=w.data.contextUpdates.subscribe({userId:e},{onData:t=>{u||!s.current||(console.log("Received context update:",t),r(p=>({isConnected:!0,lastUpdate:new Date,updateCount:p.updateCount+1,recentUpdates:[{type:t.type||"unknown",timestamp:t.timestamp?new Date(t.timestamp):new Date,metadata:t.metadata||{}},...p.recentUpdates.slice(0,9)]})),o.invalidateQueries({queryKey:["context",e]}),m.current&&m.current(t));},onError:t=>{u||!s.current||(console.error("Subscription error:",t),r(p=>({...p,isConnected:!1})));}});}catch(t){console.error("Failed to create subscription:",t);return}return !u&&s.current&&r(t=>({...t,isConnected:true})),()=>{u=true,s.current=false,d&&d.unsubscribe(),C.close();}},[i,e,n,o]),l}function B(a=3e4){let{userId:e,isConnected:n}=b(),o=useQueryClient(),[l,r]=useState(false);return useEffect(()=>{if(!n||!e)return;r(true);let i=setInterval(()=>{o.invalidateQueries({queryKey:["context",e]});},a);return ()=>{r(false),clearInterval(i);}},[n,e,a,o]),{isPolling:l}} export{B as usePollingContext,A as useRealtimeContext};//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map